From 28cc9028a98e874e2fca149f1680a36265dd31c4 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 10:59:24 -0400 Subject: [PATCH 01/27] moved ts types to dependencies --- package.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 0b691c6..1129d1c 100644 --- a/package.json +++ b/package.json @@ -37,21 +37,6 @@ "@mui/material": "^5.10.6", "@mui/styled-engine-sc": "^5.10.6", "@reduxjs/toolkit": "^1.8.5", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "@types/cookie-session": "^2.0.44", - "@types/express": "^4.17.14", - "@types/js-cookie": "^3.0.2", - "@types/node": "^18.7.18", - "@types/passport": "^1.0.11", - "@types/passport-github2": "^1.2.5", - "@types/react": "^18.0.21", - "@types/react-dom": "^18.0.6", - "@types/react-router-dom": "^5.3.3", - "@types/redux-mock-store": "^1.0.3", - "@typescript-eslint/eslint-plugin": "^5.38.1", - "@typescript-eslint/parser": "^5.38.1", "axios": "^0.27.2", "babel-jest": "^29.0.3", "babel-loader": "^8.2.5", @@ -81,6 +66,21 @@ "dependencies": { "@emotion/react": "^11.10.4", "@emotion/styled": "^11.10.4", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^14.4.3", + "@types/cookie-session": "^2.0.44", + "@types/express": "^4.17.14", + "@types/js-cookie": "^3.0.2", + "@types/node": "^18.7.18", + "@types/passport": "^1.0.11", + "@types/passport-github2": "^1.2.5", + "@types/react": "^18.0.21", + "@types/react-dom": "^18.0.6", + "@types/react-router-dom": "^5.3.3", + "@types/redux-mock-store": "^1.0.3", + "@typescript-eslint/eslint-plugin": "^5.38.1", + "@typescript-eslint/parser": "^5.38.1", "cookie-parser": "^1.4.6", "cookie-session": "^2.0.0", "dotenv": "^16.0.2", From ec319f6115f291bd0caca4e75e36c3ed07ef3000 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 11:03:00 -0400 Subject: [PATCH 02/27] moved packages to dependencies --- package.json | 69 +++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index 1129d1c..b663c5b 100644 --- a/package.json +++ b/package.json @@ -27,41 +27,7 @@ ] }, "devDependencies": { - "@babel/core": "^7.19.1", - "@babel/preset-env": "^7.19.1", - "@babel/preset-flow": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@emotion/react": "^11.10.4", - "@emotion/styled": "^11.10.4", - "@mui/icons-material": "^5.10.6", - "@mui/material": "^5.10.6", - "@mui/styled-engine-sc": "^5.10.6", - "@reduxjs/toolkit": "^1.8.5", - "axios": "^0.27.2", - "babel-jest": "^29.0.3", - "babel-loader": "^8.2.5", - "css-loader": "^6.7.1", - "eslint": "^8.24.0", - "eslint-plugin-react": "^7.31.8", - "html-webpack-plugin": "^5.5.0", - "jest": "^29.0.3", - "jest-environment-jsdom": "^28.1.0", - "jest-puppeteer": "^6.1.0", - "nodemon": "^2.0.20", - "pg": "^8.8.0", - "puppeteer": "^14.2.1", - "react-redux": "^8.0.4", - "react-test-renderer": "^18.2.0", - "redux-mock-store": "^1.5.4", - "sass": "^1.54.9", - "sass-loader": "^13.0.2", - "style-loader": "^3.3.1", - "supertest": "^6.2.3", - "ts-loader": "^9.4.1", - "typescript": "^4.8.3", - "webpack": "^5.74.0", - "webpack-cli": "^4.10.0", - "webpack-dev-server": "^4.11.1" + "nodemon": "^2.0.20" }, "dependencies": { "@emotion/react": "^11.10.4", @@ -93,6 +59,37 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.4.1", - "ts-node": "^10.9.1" + "ts-node": "^10.9.1", + "@babel/core": "^7.19.1", + "@babel/preset-env": "^7.19.1", + "@babel/preset-flow": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@mui/icons-material": "^5.10.6", + "@mui/material": "^5.10.6", + "@mui/styled-engine-sc": "^5.10.6", + "@reduxjs/toolkit": "^1.8.5", + "axios": "^0.27.2", + "babel-jest": "^29.0.3", + "babel-loader": "^8.2.5", + "css-loader": "^6.7.1", + "eslint": "^8.24.0", + "eslint-plugin-react": "^7.31.8", + "html-webpack-plugin": "^5.5.0", + "jest": "^29.0.3", + "jest-environment-jsdom": "^28.1.0", + "jest-puppeteer": "^6.1.0", + "puppeteer": "^14.2.1", + "react-redux": "^8.0.4", + "react-test-renderer": "^18.2.0", + "redux-mock-store": "^1.5.4", + "sass": "^1.54.9", + "sass-loader": "^13.0.2", + "style-loader": "^3.3.1", + "supertest": "^6.2.3", + "ts-loader": "^9.4.1", + "typescript": "^4.8.3", + "webpack": "^5.74.0", + "webpack-cli": "^4.10.0", + "webpack-dev-server": "^4.11.1" } } From 1483429c55fbae2542b848b65efc72096037ecbf Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 11:08:04 -0400 Subject: [PATCH 03/27] added port env variable to server --- server/models/userModel.js | 2 +- server/server.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/models/userModel.js b/server/models/userModel.js index fa8c10e..c92935b 100644 --- a/server/models/userModel.js +++ b/server/models/userModel.js @@ -1,4 +1,4 @@ -const { Pool } = require('pg'); +import { Pool } from 'pg'; const PG_URI = 'postgres://waajwpef:oV4vRHcXXEGPK8T712j_rOh1BURf_Sw8@jelani.db.elephantsql.com/waajwpef'; diff --git a/server/server.ts b/server/server.ts index aefd218..006e8b9 100644 --- a/server/server.ts +++ b/server/server.ts @@ -11,7 +11,7 @@ import clipboardRoutes from './routes/clipboard'; import { GlobalError } from './serverTypes'; const app = express(); -const PORT = 3000; +const PORT = process.env.PORT || 3000; app.use(express.json()); app.use(express.urlencoded({ extended: true })); From dd6599c660a28d29d6a48a8ad98e699759d52794 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 11:09:15 -0400 Subject: [PATCH 04/27] added postinstall command to package.json --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index b663c5b..9185532 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "scripts": { "test": "jest --verbose", "build": "NODE_ENV=production webpack", + "postinstall": "npm run build", "start": "NODE_ENV=production npx ts-node server/server.ts", "dev": "NODE_ENV=development webpack-dev-server & NODE_ENV=development nodemon server/server.ts" }, From e1d98104f7241e79faeb8b01be6dd03bd92e28ed Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 11:13:47 -0400 Subject: [PATCH 05/27] export db module --- server/models/userModel.js | 2 +- server/server.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/server/models/userModel.js b/server/models/userModel.js index c92935b..bc6e42e 100644 --- a/server/models/userModel.js +++ b/server/models/userModel.js @@ -6,7 +6,7 @@ const pool = new Pool({ connectionString: PG_URI }); -module.exports = { +export default { query: (text, params, callback) => { return pool.query(text, params, callback); } diff --git a/server/server.ts b/server/server.ts index 006e8b9..4fb3285 100644 --- a/server/server.ts +++ b/server/server.ts @@ -3,7 +3,6 @@ import cookieSession from 'cookie-session'; import express, { Express, Request, Response, NextFunction } from 'express'; import passport from 'passport'; import path from 'path'; - import authRoutes from './routes/auth'; import testsRoutes from './routes/tests'; import projectRoutes from './routes/project'; From 1ea07d7c21436204f2d9b3229342d1ab02090f80 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 11:27:52 -0400 Subject: [PATCH 06/27] updated github oauth secret --- server/controllers/authController.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/controllers/authController.ts b/server/controllers/authController.ts index 1e04ccc..e331607 100644 --- a/server/controllers/authController.ts +++ b/server/controllers/authController.ts @@ -17,9 +17,9 @@ type AuthType = { }; const gitHubSettings: GitHubSettingsType = { - clientID: 'fa73697734733fc09ac6', - clientSecret: '00e08080239a284e4047e1342393f88dc3ada6ae', - callbackURL: 'http://localhost:3000/auth/github/callback', + clientID: 'bc3cf928850a92c03d5b', + clientSecret: 'fea420829222c6882750bc0da33ea383c6780956', + callbackURL: 'https://jester-osp.herokuapp.com/auth/github/callback', scope: ['user:email'] }; From db217d1f1cae312b0a9499401429d81f5ee4aa3a Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 12:05:08 -0400 Subject: [PATCH 07/27] added favicon --- __tests__/be-routes.js/test-gen-routes.js | 2 +- server/controllers/authController.ts | 103 ---------------- server/controllers/clipboardController.ts | 129 ------------------- server/controllers/projectController.ts | 144 ---------------------- server/controllers/testsController.js | 104 ---------------- 5 files changed, 1 insertion(+), 481 deletions(-) delete mode 100644 server/controllers/authController.ts delete mode 100644 server/controllers/clipboardController.ts delete mode 100644 server/controllers/projectController.ts delete mode 100644 server/controllers/testsController.js diff --git a/__tests__/be-routes.js/test-gen-routes.js b/__tests__/be-routes.js/test-gen-routes.js index ba6d175..52cd7e7 100644 --- a/__tests__/be-routes.js/test-gen-routes.js +++ b/__tests__/be-routes.js/test-gen-routes.js @@ -33,7 +33,7 @@ describe('Route integration tests', () => { }); const expectedResponse = - "describe('/api/tests', () => {\n describe('GET', () => {\n it('responds with content-type application/json and status 200', async () => {\n const response = await request(server)\n .get('/api/tests');\n expect(response.type).toBe('application/json');\n expect(response.statusCode).toBe(200);\n });\n });\n});"; + 'describe(\'/api/tests\', () => {\n describe(\'GET\', () => {\n it(\'responds with content-type application/json and status 200\', async () => {\n const response = await request(server)\n .get(\'/api/tests\');\n expect(response.type).toBe(\'application/json\');\n expect(response.statusCode).toBe(200);\n });\n });\n});'; expect(response.type).toBe('application/json'); expect(response.statusCode).toBe(200); diff --git a/server/controllers/authController.ts b/server/controllers/authController.ts deleted file mode 100644 index e331607..0000000 --- a/server/controllers/authController.ts +++ /dev/null @@ -1,103 +0,0 @@ -import passport from 'passport'; -import { Strategy as GitHubStrategy } from 'passport-github2'; -import { Express, Request, Response, NextFunction } from 'express'; -import db from '../models/userModel'; -import { nextTick } from 'process'; - -type GitHubSettingsType = { - clientID: string; - clientSecret: string; - callbackURL: string; - scope: Array<string>; -}; - -type AuthType = { - isLoggedIn: (req: Request, res: Response, next: NextFunction) => void; - getUserId: (req: Request, res: Response, next: NextFunction) => void; -}; - -const gitHubSettings: GitHubSettingsType = { - clientID: 'bc3cf928850a92c03d5b', - clientSecret: 'fea420829222c6882750bc0da33ea383c6780956', - callbackURL: 'https://jester-osp.herokuapp.com/auth/github/callback', - scope: ['user:email'] -}; - -// need to clean up the type declarations of user, done, profile and tokens -// https://typescript.hotexamples.com/examples/passport/-/serializeUser/typescript-serializeuser-function-examples.html -// https://stackoverflow.com/questions/65772869/how-do-i-type-hint-the-user-argument-when-calling-passport-serializeuser-in-type -passport.serializeUser(function (user: Express.User, done: any) { - done(null, user); -}); - -passport.deserializeUser(function (user: any, done: any) { - done(null, user); -}); - -passport.use( - new GitHubStrategy(gitHubSettings, function ( - accessToken: any, - refreshToken: any, - profile: any, - done: any - ) { - const email: string = profile.emails[0].value; - const params = [email]; - // console.log(email); - // logic for creating a new record on the database for the user could go in here - return done(null, profile); - }) -); - -export const authController: AuthType = { - // Middleware to verify that user is logged in (typically used before database calls) - isLoggedIn: (req: Request, res: Response, next: NextFunction) => { - // this controller should verify that the user is logged in - // do we do this via a cookie? - // console.log('REQ USER', req.user) - // if(!req.user){ - // return res.status(401).json("Error: User not authorized"); - // } - // MLCK: Is this a security vulnerability? Another option is to store session in database and make a db call - // if (!req.user || !req.isAuthenticated()) { - // return res.status(401).json('Error: User not authorized'); - // } - // console.log('authController.isLoggedIn'); - return next(); - }, - - getUserId: async (req: any, res: Response, next: NextFunction) => { - // this controller queries the user table to insert a new user - // using the email provided on the request object. If the user - // already exists, it performs a mock-update so that regardless - // of whether the user already existed or not, it returns the user ID. - const email = req.user.emails[0].value; - if (!email) return next({ - log: 'email not fond on request body', - status: 400, - message: 'an error occurred in attempting to get the user ID' - }); - const newUserQuery = ` - INSERT INTO user_table(usermail) - VALUES($1) - ON CONFLICT (usermail) DO UPDATE - SET usermail=($1) - RETURNING user_id - `; - const params = [email]; - try { - const result = await db.query(newUserQuery, params); - res.locals.user_id = result.rows[0].user_id; - return next(); - } - catch(err) { - return next({ - log: `error in getUserId: ${err}`, - status: 500, - message: 'error occurred in getUserId middleware function' - }); - } - } -}; - -export default passport; diff --git a/server/controllers/clipboardController.ts b/server/controllers/clipboardController.ts deleted file mode 100644 index d13695b..0000000 --- a/server/controllers/clipboardController.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { createChainedFunction } from '@mui/material'; -import express, { Express, Request, Response, NextFunction } from 'express'; -import db from '../models/userModel'; - -type Clipboard = { - getClipboard: (req: Request, res: Response, next: NextFunction) => void; - appendClipboard: (req: Request, res: Response, next: NextFunction) => void; - deleteSnippet: (req: Request, res: Response, next: NextFunction) => void; -}; - -export const clipboardController: Clipboard = { - // Middleware to fetch clipboard for a specified project - getClipboard: async (req: Request, res: Response, next: NextFunction) => { - const { project_id } = req.params; - const { user_id } = res.locals; - - // this controller should query the Snippets table for all snippets belonging - // to a project and save an array of code snippets to res.locals.clipboard - - const queryString = ` - SELECT * FROM code_snippets_table - WHERE project_id = $1 - AND user_id = $2 - `; - const params = [project_id, user_id]; - - try { - const result = await db.query(queryString, params); - const snippet: [] = result.rows.map( - (snippets: any) => snippets.code_snippet - ); - res.locals.clipboard = snippet; - return next(); - } catch (err) { - return next({ - log: `error in getClipboard: ${err}`, - status: 500, - message: 'error occurred in getClipboard middleware function', - }); - } - }, - - // Middleware to add a code snippet to the clipboard of a specified project - appendClipboard: async (req: Request, res: Response, next: NextFunction) => { - const { project_id } = req.params; - const { code_snippet } = req.body; - const { user_id } = res.locals; - - if (!code_snippet) - return next({ - log: 'code snippet not fond on request body', - status: 400, - message: 'an error occurred in appendClipboard middleware function', - }); - - // this controller should insert a new record in the Clipboard table - // and save the updated clipboard to res.locals.clipboard - const date = Date.now(); - - const addClipQuery = ` - INSERT INTO code_snippets_table(code_snippet, created_at, user_id, project_id) - VALUES ($1, $2, $3, $4) - `; - const params1 = [code_snippet, date, user_id, project_id]; - - const getClipsQuery = ` - SELECT * FROM code_snippets_table - WHERE project_id = $1 - AND user_id = $2 - `; - const params2 = [project_id, user_id]; - try { - await db.query(addClipQuery, params1); - const result = await db.query(getClipsQuery, params2); - res.locals.clipboard = result.rows; - return next(); - } catch (err) { - return next({ - log: `error in appendClipboard: ${err}`, - status: 500, - message: 'error occurred in appendClipboard middleware function', - }); - } - }, - - // Middleware to delete a specific code snippet in a project's clipboard - deleteSnippet: async (req: Request, res: Response, next: NextFunction) => { - const { snippet_id } = req.params; - const { project_id } = req.body; - const { user_id } = res.locals; - - if (!project_id) - return next({ - log: 'project ID not found on request body', - status: 400, - message: 'an error occurred in appendClipboard middleware function', - }); - - // this controller should delete one specific code snippet - // and save the updated clipboard to res.locals.clipboard - const params1 = [snippet_id, user_id]; - const params2 = [project_id, user_id]; - - const deleteSnipQuery = ` - DELETE FROM code_snippets_table - WHERE snippet_id=$1 - AND user_id = $2 - `; - - const getClipsQuery = ` - SELECT * FROM code_snippets_table - WHERE project_id = $1 - AND user_id = $2 - `; - - try { - await db.query(deleteSnipQuery, params1); - const result = await db.query(getClipsQuery, params2); - res.locals.clipboard = result.rows; - return next(); - } catch (err) { - return next({ - log: `error in deleteSnippet: ${err}`, - status: 500, - message: 'error occurred in deleteSnippet middleware function', - }); - } - }, -}; diff --git a/server/controllers/projectController.ts b/server/controllers/projectController.ts deleted file mode 100644 index 90e095b..0000000 --- a/server/controllers/projectController.ts +++ /dev/null @@ -1,144 +0,0 @@ -import express, { Express, Request, Response, NextFunction } from 'express'; -import db from '../models/userModel'; - -type Project = { - getProjects: (req: Request, res: Response, next: NextFunction) => void; - addProject: (req: Request, res: Response, next: NextFunction) => void; - deleteProject: (req: Request, res: Response, next: NextFunction) => void; -}; - -export const projectController: Project = { - // this controller queries the projects table and returns all projects found - //whose user ID matches the user ID from the request body - getProjects: async (req: Request, res: Response, next: NextFunction) => { - const { user_id } = res.locals; - - if (!user_id) return next({ - log: 'user ID not found on res.locals', - status: 400, - message: 'an error occurred in getProjects middleware function' - }); - - const queryString = ` - SELECT * FROM projects_table - WHERE user_id=$1 - `; - const params = [user_id]; - - try { - const result = await db.query(queryString, params); - res.locals.projects = result.rows; - return next(); - } - catch(err) { - return next({ - log: `error in getProjects: ${err}`, - status: 500, - message: 'error occurred in getProjects middleware function' - }); - } - }, - - // Middleware to add a new Project associated with a userId - addProject: async (req: Request, res: Response, next: NextFunction) => { - const { user_id } = res.locals; - const { project_name } = req.body; - - if (!user_id) return next({ - log: 'user ID not found on res.locals', - status: 400, - message: 'an error occurred in addProject middleware function' - }); - - if (!project_name) return next({ - log: 'project name not found on request body', - status: 400, - message: 'an error occurred in addProject middleware function' - }); - // this controller should insert a new record in the Projects table - // with the name of project_name and a foreign key userId - // and send back the updated project list - const queryString1 = ` - INSERT INTO projects_table(user_id, project_name) - VALUES($1, $2) - - `; - const params1 = [user_id, project_name]; - - const queryString2 = ` - SELECT * FROM projects_table - WHERE user_id=$1 - `; - const params2 = [user_id]; - - try { - await db.query(queryString1, params1); - const allProjs = await db.query(queryString2, params2); - res.locals.projects = allProjs.rows; - return next(); - } - catch(err) { - return next({ - log: `error in addProject: ${err}`, - status: 500, - message: 'error occurred in addProject middleware function' - }); - } - }, - - // Middleware to delete a specific project - deleteProject: async (req: Request, res: Response, next: NextFunction) => { - const user_id = res.locals.user_id; - const { project_id } = req.params; - - if (!project_id) return next({ - log: 'project ID not fond on request body', - status: 400, - message: 'error occurred in deleteProject middleware function' - }); - - if (!user_id) return next({ - log: 'user ID not fond on res.locals', - status: 400, - message: 'error occurred in deleteProject middleware function' - }); - // this controller should delete the project in the Projects table - // with the provided project_id, AND ALSO all code snippets under this project - // and send back the updated project list - const params1 = [project_id, user_id]; - const params2 = [user_id]; - - - const snipsQuery = ` - DELETE FROM code_snippets_table - WHERE project_id = $1 - AND user_id = $2 - `; - const projQuery = ` - DELETE FROM projects_table - WHERE project_id = $1 - AND user_id = $2 - `; - try { - await db.query(snipsQuery, params1); - await db.query(projQuery, params1); - - const updatedListQuery = ` - SELECT * from projects_table - WHERE user_id = $1 - `; - const result = await db.query(updatedListQuery, params2); - - res.locals.projects = result.rows; - return next(); - } - - catch(err) { - return next({ - log: `error in addProject: ${err}`, - status: 500, - message: 'error occurred in deleteProject middleware function' - }); - } - } -}; diff --git a/server/controllers/testsController.js b/server/controllers/testsController.js deleted file mode 100644 index ae1456f..0000000 --- a/server/controllers/testsController.js +++ /dev/null @@ -1,104 +0,0 @@ -import helperFunctions from '../helpers/functions.js'; - -const testsController = {}; - -/* - EXPECTED INPUT: - { - header: { - endpoint : '/', - method: 'POST' - req_body: {a:1} // Needed for POST and PATCH, optional for DELETE - }, - assertions: [ - { content: '/text\/html/' }, - { status: 200 }, - { res_body: { a: 'b' } } - ... - ] - } - EXPECTED OUTPUT: res.locals.header, res.locals.assertions -*/ - -/* Middleware to verify that we have the properties we are looking for in our input object. If it fails, return 400 error code. - verify the reqest body has all the relevant properties and save them to res.locals.header and res.locals.assertions */ -testsController.verifyInput = (req, res, next) => { - try { - const { header, assertions } = req.body; - const methods = new Set(['GET', 'POST', 'PATCH', 'DELETE']); - - // Check for improper input - if ( - typeof header.endpoint !== 'string' || - typeof header.method !== 'string' || - !Array.isArray(assertions) - ) { - throw new Error('Missing properties or wrong data types in request.'); - } - - // Check for supported request methods - header.method = header.method.toUpperCase(); - if (!methods.has(header.method)) { - throw new Error('Invalid request method provided.'); - } - - // POST and PATCH methods must have request body provided - if ( - (header.method === 'POST' || header.method === 'PATCH') && - !header.req_body - ) { - throw new Error('Body not provided with POST or PATCH request.'); - } - - res.locals.header = header; - res.locals.assertions = assertions; - return next(); - } catch (err) { - return next({ - log: 'verifyInput middleware error: ' + err, - message: { err } - }); - } -}; - -/* Converts header part of input object into header of test code - EXPECTED INPUT: res.locals.header, res.locals.assertions - EXPECTED OUTPUT: res.locals.headerOutput = Array of Strings - [ - `describe('/', () => {`, - `describe('GET', () => {`, - `it('responds with status 200 and content type text/html', () => request(server)`, - `.get('/')` - ] -*/ -testsController.createHeaderText = (req, res, next) => { - const header = res.locals.header; - const assertions = res.locals.assertions; - - res.locals.headerOutput = helperFunctions.headerGenerator(header, assertions); - - return next(); -}; - -//Write a MiddleWare to examine the res object from the front-end and produce lines of code depending on what is coming in from the middleware. -testsController.createMiddleText = (req, res, next) => { - const assertions = res.locals.assertions; - const middle = res.locals.middle; - - res.locals.middleOutput = helperFunctions.middleGenerator(assertions); - return next(); -}; - -/* This middleware will take the output from the previous two middleware functions in res.locals and compile them into a final test code to return to the front-end */ -testsController.compileTestCode = (req, res, next) => { - const headerOutput = res.locals.headerOutput; - const middleOutput = res.locals.middleOutput; - - res.locals.compiledTestCode = helperFunctions.compiledCodeGenerator( - headerOutput, - middleOutput - ); - return next(); -}; - -export default testsController; From da20a5bf366f5ea0013f671af12826cd09975fb5 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 12:05:36 -0400 Subject: [PATCH 08/27] added favicon --- client/controllers/authController.ts | 103 ++++++++++++++++ client/controllers/clipboardController.ts | 129 +++++++++++++++++++ client/controllers/projectController.ts | 144 ++++++++++++++++++++++ client/controllers/testsController.js | 104 ++++++++++++++++ client/favicon.ico | Bin 0 -> 3379 bytes dist/favicon.ico | Bin 0 -> 3379 bytes 6 files changed, 480 insertions(+) create mode 100644 client/controllers/authController.ts create mode 100644 client/controllers/clipboardController.ts create mode 100644 client/controllers/projectController.ts create mode 100644 client/controllers/testsController.js create mode 100644 client/favicon.ico create mode 100644 dist/favicon.ico diff --git a/client/controllers/authController.ts b/client/controllers/authController.ts new file mode 100644 index 0000000..e331607 --- /dev/null +++ b/client/controllers/authController.ts @@ -0,0 +1,103 @@ +import passport from 'passport'; +import { Strategy as GitHubStrategy } from 'passport-github2'; +import { Express, Request, Response, NextFunction } from 'express'; +import db from '../models/userModel'; +import { nextTick } from 'process'; + +type GitHubSettingsType = { + clientID: string; + clientSecret: string; + callbackURL: string; + scope: Array<string>; +}; + +type AuthType = { + isLoggedIn: (req: Request, res: Response, next: NextFunction) => void; + getUserId: (req: Request, res: Response, next: NextFunction) => void; +}; + +const gitHubSettings: GitHubSettingsType = { + clientID: 'bc3cf928850a92c03d5b', + clientSecret: 'fea420829222c6882750bc0da33ea383c6780956', + callbackURL: 'https://jester-osp.herokuapp.com/auth/github/callback', + scope: ['user:email'] +}; + +// need to clean up the type declarations of user, done, profile and tokens +// https://typescript.hotexamples.com/examples/passport/-/serializeUser/typescript-serializeuser-function-examples.html +// https://stackoverflow.com/questions/65772869/how-do-i-type-hint-the-user-argument-when-calling-passport-serializeuser-in-type +passport.serializeUser(function (user: Express.User, done: any) { + done(null, user); +}); + +passport.deserializeUser(function (user: any, done: any) { + done(null, user); +}); + +passport.use( + new GitHubStrategy(gitHubSettings, function ( + accessToken: any, + refreshToken: any, + profile: any, + done: any + ) { + const email: string = profile.emails[0].value; + const params = [email]; + // console.log(email); + // logic for creating a new record on the database for the user could go in here + return done(null, profile); + }) +); + +export const authController: AuthType = { + // Middleware to verify that user is logged in (typically used before database calls) + isLoggedIn: (req: Request, res: Response, next: NextFunction) => { + // this controller should verify that the user is logged in + // do we do this via a cookie? + // console.log('REQ USER', req.user) + // if(!req.user){ + // return res.status(401).json("Error: User not authorized"); + // } + // MLCK: Is this a security vulnerability? Another option is to store session in database and make a db call + // if (!req.user || !req.isAuthenticated()) { + // return res.status(401).json('Error: User not authorized'); + // } + // console.log('authController.isLoggedIn'); + return next(); + }, + + getUserId: async (req: any, res: Response, next: NextFunction) => { + // this controller queries the user table to insert a new user + // using the email provided on the request object. If the user + // already exists, it performs a mock-update so that regardless + // of whether the user already existed or not, it returns the user ID. + const email = req.user.emails[0].value; + if (!email) return next({ + log: 'email not fond on request body', + status: 400, + message: 'an error occurred in attempting to get the user ID' + }); + const newUserQuery = ` + INSERT INTO user_table(usermail) + VALUES($1) + ON CONFLICT (usermail) DO UPDATE + SET usermail=($1) + RETURNING user_id + `; + const params = [email]; + try { + const result = await db.query(newUserQuery, params); + res.locals.user_id = result.rows[0].user_id; + return next(); + } + catch(err) { + return next({ + log: `error in getUserId: ${err}`, + status: 500, + message: 'error occurred in getUserId middleware function' + }); + } + } +}; + +export default passport; diff --git a/client/controllers/clipboardController.ts b/client/controllers/clipboardController.ts new file mode 100644 index 0000000..d13695b --- /dev/null +++ b/client/controllers/clipboardController.ts @@ -0,0 +1,129 @@ +import { createChainedFunction } from '@mui/material'; +import express, { Express, Request, Response, NextFunction } from 'express'; +import db from '../models/userModel'; + +type Clipboard = { + getClipboard: (req: Request, res: Response, next: NextFunction) => void; + appendClipboard: (req: Request, res: Response, next: NextFunction) => void; + deleteSnippet: (req: Request, res: Response, next: NextFunction) => void; +}; + +export const clipboardController: Clipboard = { + // Middleware to fetch clipboard for a specified project + getClipboard: async (req: Request, res: Response, next: NextFunction) => { + const { project_id } = req.params; + const { user_id } = res.locals; + + // this controller should query the Snippets table for all snippets belonging + // to a project and save an array of code snippets to res.locals.clipboard + + const queryString = ` + SELECT * FROM code_snippets_table + WHERE project_id = $1 + AND user_id = $2 + `; + const params = [project_id, user_id]; + + try { + const result = await db.query(queryString, params); + const snippet: [] = result.rows.map( + (snippets: any) => snippets.code_snippet + ); + res.locals.clipboard = snippet; + return next(); + } catch (err) { + return next({ + log: `error in getClipboard: ${err}`, + status: 500, + message: 'error occurred in getClipboard middleware function', + }); + } + }, + + // Middleware to add a code snippet to the clipboard of a specified project + appendClipboard: async (req: Request, res: Response, next: NextFunction) => { + const { project_id } = req.params; + const { code_snippet } = req.body; + const { user_id } = res.locals; + + if (!code_snippet) + return next({ + log: 'code snippet not fond on request body', + status: 400, + message: 'an error occurred in appendClipboard middleware function', + }); + + // this controller should insert a new record in the Clipboard table + // and save the updated clipboard to res.locals.clipboard + const date = Date.now(); + + const addClipQuery = ` + INSERT INTO code_snippets_table(code_snippet, created_at, user_id, project_id) + VALUES ($1, $2, $3, $4) + `; + const params1 = [code_snippet, date, user_id, project_id]; + + const getClipsQuery = ` + SELECT * FROM code_snippets_table + WHERE project_id = $1 + AND user_id = $2 + `; + const params2 = [project_id, user_id]; + try { + await db.query(addClipQuery, params1); + const result = await db.query(getClipsQuery, params2); + res.locals.clipboard = result.rows; + return next(); + } catch (err) { + return next({ + log: `error in appendClipboard: ${err}`, + status: 500, + message: 'error occurred in appendClipboard middleware function', + }); + } + }, + + // Middleware to delete a specific code snippet in a project's clipboard + deleteSnippet: async (req: Request, res: Response, next: NextFunction) => { + const { snippet_id } = req.params; + const { project_id } = req.body; + const { user_id } = res.locals; + + if (!project_id) + return next({ + log: 'project ID not found on request body', + status: 400, + message: 'an error occurred in appendClipboard middleware function', + }); + + // this controller should delete one specific code snippet + // and save the updated clipboard to res.locals.clipboard + const params1 = [snippet_id, user_id]; + const params2 = [project_id, user_id]; + + const deleteSnipQuery = ` + DELETE FROM code_snippets_table + WHERE snippet_id=$1 + AND user_id = $2 + `; + + const getClipsQuery = ` + SELECT * FROM code_snippets_table + WHERE project_id = $1 + AND user_id = $2 + `; + + try { + await db.query(deleteSnipQuery, params1); + const result = await db.query(getClipsQuery, params2); + res.locals.clipboard = result.rows; + return next(); + } catch (err) { + return next({ + log: `error in deleteSnippet: ${err}`, + status: 500, + message: 'error occurred in deleteSnippet middleware function', + }); + } + }, +}; diff --git a/client/controllers/projectController.ts b/client/controllers/projectController.ts new file mode 100644 index 0000000..90e095b --- /dev/null +++ b/client/controllers/projectController.ts @@ -0,0 +1,144 @@ +import express, { Express, Request, Response, NextFunction } from 'express'; +import db from '../models/userModel'; + +type Project = { + getProjects: (req: Request, res: Response, next: NextFunction) => void; + addProject: (req: Request, res: Response, next: NextFunction) => void; + deleteProject: (req: Request, res: Response, next: NextFunction) => void; +}; + +export const projectController: Project = { + // this controller queries the projects table and returns all projects found + //whose user ID matches the user ID from the request body + getProjects: async (req: Request, res: Response, next: NextFunction) => { + const { user_id } = res.locals; + + if (!user_id) return next({ + log: 'user ID not found on res.locals', + status: 400, + message: 'an error occurred in getProjects middleware function' + }); + + const queryString = ` + SELECT * FROM projects_table + WHERE user_id=$1 + `; + const params = [user_id]; + + try { + const result = await db.query(queryString, params); + res.locals.projects = result.rows; + return next(); + } + catch(err) { + return next({ + log: `error in getProjects: ${err}`, + status: 500, + message: 'error occurred in getProjects middleware function' + }); + } + }, + + // Middleware to add a new Project associated with a userId + addProject: async (req: Request, res: Response, next: NextFunction) => { + const { user_id } = res.locals; + const { project_name } = req.body; + + if (!user_id) return next({ + log: 'user ID not found on res.locals', + status: 400, + message: 'an error occurred in addProject middleware function' + }); + + if (!project_name) return next({ + log: 'project name not found on request body', + status: 400, + message: 'an error occurred in addProject middleware function' + }); + // this controller should insert a new record in the Projects table + // with the name of project_name and a foreign key userId + // and send back the updated project list + const queryString1 = ` + INSERT INTO projects_table(user_id, project_name) + VALUES($1, $2) + + `; + const params1 = [user_id, project_name]; + + const queryString2 = ` + SELECT * FROM projects_table + WHERE user_id=$1 + `; + const params2 = [user_id]; + + try { + await db.query(queryString1, params1); + const allProjs = await db.query(queryString2, params2); + res.locals.projects = allProjs.rows; + return next(); + } + catch(err) { + return next({ + log: `error in addProject: ${err}`, + status: 500, + message: 'error occurred in addProject middleware function' + }); + } + }, + + // Middleware to delete a specific project + deleteProject: async (req: Request, res: Response, next: NextFunction) => { + const user_id = res.locals.user_id; + const { project_id } = req.params; + + if (!project_id) return next({ + log: 'project ID not fond on request body', + status: 400, + message: 'error occurred in deleteProject middleware function' + }); + + if (!user_id) return next({ + log: 'user ID not fond on res.locals', + status: 400, + message: 'error occurred in deleteProject middleware function' + }); + // this controller should delete the project in the Projects table + // with the provided project_id, AND ALSO all code snippets under this project + // and send back the updated project list + const params1 = [project_id, user_id]; + const params2 = [user_id]; + + + const snipsQuery = ` + DELETE FROM code_snippets_table + WHERE project_id = $1 + AND user_id = $2 + `; + const projQuery = ` + DELETE FROM projects_table + WHERE project_id = $1 + AND user_id = $2 + `; + try { + await db.query(snipsQuery, params1); + await db.query(projQuery, params1); + + const updatedListQuery = ` + SELECT * from projects_table + WHERE user_id = $1 + `; + const result = await db.query(updatedListQuery, params2); + + res.locals.projects = result.rows; + return next(); + } + + catch(err) { + return next({ + log: `error in addProject: ${err}`, + status: 500, + message: 'error occurred in deleteProject middleware function' + }); + } + } +}; diff --git a/client/controllers/testsController.js b/client/controllers/testsController.js new file mode 100644 index 0000000..ae1456f --- /dev/null +++ b/client/controllers/testsController.js @@ -0,0 +1,104 @@ +import helperFunctions from '../helpers/functions.js'; + +const testsController = {}; + +/* + EXPECTED INPUT: + { + header: { + endpoint : '/', + method: 'POST' + req_body: {a:1} // Needed for POST and PATCH, optional for DELETE + }, + assertions: [ + { content: '/text\/html/' }, + { status: 200 }, + { res_body: { a: 'b' } } + ... + ] + } + EXPECTED OUTPUT: res.locals.header, res.locals.assertions +*/ + +/* Middleware to verify that we have the properties we are looking for in our input object. If it fails, return 400 error code. + verify the reqest body has all the relevant properties and save them to res.locals.header and res.locals.assertions */ +testsController.verifyInput = (req, res, next) => { + try { + const { header, assertions } = req.body; + const methods = new Set(['GET', 'POST', 'PATCH', 'DELETE']); + + // Check for improper input + if ( + typeof header.endpoint !== 'string' || + typeof header.method !== 'string' || + !Array.isArray(assertions) + ) { + throw new Error('Missing properties or wrong data types in request.'); + } + + // Check for supported request methods + header.method = header.method.toUpperCase(); + if (!methods.has(header.method)) { + throw new Error('Invalid request method provided.'); + } + + // POST and PATCH methods must have request body provided + if ( + (header.method === 'POST' || header.method === 'PATCH') && + !header.req_body + ) { + throw new Error('Body not provided with POST or PATCH request.'); + } + + res.locals.header = header; + res.locals.assertions = assertions; + return next(); + } catch (err) { + return next({ + log: 'verifyInput middleware error: ' + err, + message: { err } + }); + } +}; + +/* Converts header part of input object into header of test code + EXPECTED INPUT: res.locals.header, res.locals.assertions + EXPECTED OUTPUT: res.locals.headerOutput = Array of Strings + [ + `describe('/', () => {`, + `describe('GET', () => {`, + `it('responds with status 200 and content type text/html', () => request(server)`, + `.get('/')` + ] +*/ +testsController.createHeaderText = (req, res, next) => { + const header = res.locals.header; + const assertions = res.locals.assertions; + + res.locals.headerOutput = helperFunctions.headerGenerator(header, assertions); + + return next(); +}; + +//Write a MiddleWare to examine the res object from the front-end and produce lines of code depending on what is coming in from the middleware. +testsController.createMiddleText = (req, res, next) => { + const assertions = res.locals.assertions; + const middle = res.locals.middle; + + res.locals.middleOutput = helperFunctions.middleGenerator(assertions); + return next(); +}; + +/* This middleware will take the output from the previous two middleware functions in res.locals and compile them into a final test code to return to the front-end */ +testsController.compileTestCode = (req, res, next) => { + const headerOutput = res.locals.headerOutput; + const middleOutput = res.locals.middleOutput; + + res.locals.compiledTestCode = helperFunctions.compiledCodeGenerator( + headerOutput, + middleOutput + ); + return next(); +}; + +export default testsController; diff --git a/client/favicon.ico b/client/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..475265268af6e5931edf45548253d5ff467c1852 GIT binary patch literal 3379 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 JPDHLkV1n)bU%3DP literal 0 HcmV?d00001 diff --git a/dist/favicon.ico b/dist/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..475265268af6e5931edf45548253d5ff467c1852 GIT binary patch literal 3379 zcmV-34b1Y1P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006O% z3;baP000U}X+uL$b5ch_AW20-HZeIiHZ3wPF#rHaiJen-Sd;e_KHv9c4^~3h@UfR{ zfdC>StO&>uS)ve<0AYj>5<ta;hzeE|6%m|BRm6hT3P_!Z;-DzFXF-aHT8mX&IPM?Z zr?q{0@9pjT*ZaKZoag+`dCw1k5fUbm=Avo<IZ}l@I@lkNPe{bcy?_E0NZ<q@5a!Fm zX9dLo0Pq8Ocz$%SKl}l&ZvX-SaMdm(635~HgSt>AR{$W90N^4L=L-RlQUJ&<RLB$n z$QS^yQ?q0W0F(d#Y<YY_A^@rl0POThJ_P{Ssgv9n0NA1&sR#g#0RWjOM<fD3y8vKS zfl@32z`_8atUw|z1i-EVfLXROM*@Jo1ps!ASdb4uU;u!bLM+SxAUFa5Lmm^&10YNT zpfJ+E;Hh75g}6uo0Km(Y&6i8kGZeU$&>DC0@ZjPh;=*jPLSYvv5M~MFBAl0-BNIsH z15C~g000{K(ZT*WKal6<<l*LK=WOrv#iIUe@NXhMA@Se-yo>?_01!^k@7iDG<<<jm z#{sZ)ziX*m0NPdnXy5r=GusKES_;s5`HOit{6HR_p-{*?9UKY^3+*Lhp}jEUi$4D| z;cwuJe)jx89{$^U@Bnd|K$)$;ql5i%VQzM=QjX`#1VS-x_va)2$Ay3Wjw#XNG_hPP z6^ij#iMUWAO~-k;QjtU<$(7;~>3=fuAC~<IlXndOtcFj(PPPZN%WS}Y?g0Xe4p`E5 z06>28EsPoqkpK{9G%|Vj005J}`Hw&=0RYXHq~ibpyyzHQsFW8>#s~laM4*8xut5h5 z!4#~(4xGUqyucR%VFpA%3?#rj5JCpzfE)^;7?wd9RKPme1hudO8lVxH;SjXJF*pt9 z;1XPc>u?taU>Kgl7`%oF1VP9M6Ja4bh!J9r*dopd7nzO(B4J20l7OTj>4+3jBE`sZ zqynizYLQ(?Bl0bB6giDtK>Co|$RIL`{EECsF_eL_Q3KQhbwIhO9~z3rpmWi5G!I>X zmZEFX8nhlgfVQHi(M#xcbO3#dj$?q)F%D*o*<oCahecqCSQ;kB7GvdDHCB%`V;xvG zb`=}Io?-6@Bm#?o6YL0Hgb>1Pf{>6$SWH+$s3q(pv=X`qR|$iJF~TPzlc-O$C3+J1 z#CT#lv5;6stS0Uu9wDA3UMCI{Uz12A4#|?_P6{C<kTOXNNoz>kNG+sOq(0IRX`D<Z z>yT~9-sA|ffUF>wk++Z!kWZ5P$;0Hg6gtI-;!FvmBvPc55=u2?Kjj3apE5$3psG>L zsh-pbs)#zDT1jo7c2F-<hp7`Zb($s3n-)XMq%EV>(3)vyY4>O^>2$gY-Gd%Qm(Z8e zYv>2*=jns=cMJ`N4THx>VkjAF8G9M07`GWOnM|ey)0dgZR4~^v8<}UA514ONSSt1^ zd=-((5|uiYR+WC0=c-gyb5%dpd8!Lkt5pxHURHgkMpd&=<EaVM7OT~%9aX!jHm=T6 zcT$f~&rx5azF+-<`eO~UhJ{9;hDf7SW4Fc`jUg7sGG*~tLe_Ft1M4hnm`!3^via;x zb_M$zb}xHOQ$usAW~^qBW}W77%>fR^vEcAI*_=wwA<hlXdo2SkKP|D=YOQ9ieyum! zdfL9)V(oJ67VYcW?{#pUK%Fd|^*U`j_jL)nHo8%|g}U2y&+0zYW9xb83H8eL4(Z*| zNA+#=qxBc+@7C|pA2%>G2sV%zY%w@v@XU~7=xdm1xY6*0;iwVIXu6TaXrs|dqbIl~ z?uTdNHFy_3W~^@<VyraYW!!5#VPa`A+oZ&##pJ#z&6I1JX1dX|({#+t$SmBf*sRIy zjyctwYo1}g*}U8QjfJH}oW)9uHjBrW+LnCF1(r>g_pF#!K2~{F^;XxcN!DEJEbDF7 zS8PxlSDOr*I-AS3sI8l=#CDr)-xT5$k15hA^;2%zG3@;83hbKf2JJcaVfH2VZT8O{ z%p4LO);n}Nd~$Sk%yw*Wyz8XlG{dRHsl(}4XB%gsbDi@w7p6;)%MzD%mlsoQr;4X; zpL)xc<r?m~(zVm|qno>%+^yMd)ZNTI#eJ*$O)i@o$z8)e??LqN_gLa_%;TM>o2SC_ zkmoO6c3xRt`@J4dvz#WL)-Y|z+r(Soy~}%GIzByR`p)SCKE^%*pL(B%zNWq+-#xw~ ze%5}Oeh2)X`#bu}{g3#+;d$~F@lFL`0l@*~0lk45fwKc^10MvL1f>Tx1&sx}1}_Xg z6+#RN4Ot&@lW)Km@*DYMGu&q^n$Z=?2%QyL8~QNJCQKgI5srq>2;UHXZ>IT7>CCnW zh~P(Th`1kV8JQRPeH1AwGO8}>QM6NZadh`A)~w`N`)9q5@sFvDxjWlxwsLl7tZHmh zY-8-3xPZ8-xPf?w_(k!T5_A(J3GIpG#Ms0=iQ{tu=WLoYoaCBRmULsT<=mpV7v|~C z%bs^USv6UZd^m-e5|^?+<%1wXP%juy<)>~<9TW0|n}ttBzM_qyQL(qUN<5P0omQ3h zINdvaL;7fjPeygdGYL;pD|wL_lDQ-EO;$wK-mK5raoH_7l$?~Dqf!lNmb5F^Ft;eT zPi8AClMUo~=55LwlZVRp<RkfW^V=0{g-p?-v{J564i-!=s4I9|7+ZL_NWDl})HB~^ z{_6Q73xXDWy^yd_xUjR>xOiFd;3B_8yA~shQx|tGF<nx+WO!-t(tXQl%d(dJP~uop zRq|?i-13f6gVLp?Lo0$;G?l58$;)o8^jf)N6=9WRRqtw-)mv77Di@VstZ=NTuK2J< zxaQ(lPG8l0^?7aD+TKdH%I)h&>!j;$toK>JuS&gYLDkTP@C~gS@r~shUu{a>bfJ1` z^^VQ7&C1OKHDNXFTg<ks+w!3{qxO28e_hK~{jICFzS$<)*1z3%d-D#19Thv?@09Gk zwJUg6YrRE%^={Jcg58fAVjH@@=6>C{M|V%fo{xK_dk6MK@9S!GZ*1JJzrV5xZBjOk z9!NTH<(q(S+MDf~ceQX@Dh|Ry<-sT4rhI$jQ0Sq~!`#Eo-<f~6^$6=oc`MR7zjdrF zqivu)p}p_ujH8_$UL8lixBq_cG2>%($2E^vo}is5J@NVEf|KK?WT&2;PCq@=ncR8z zO#GQ^T~S@VXG71PKNocFOt)Y6$@AXlk6rM*aP%VgV%sIRORYVwJx6|U{ozQjTW{-S z_si{9Jg#)~P3t?+@6&(!YQWWV*Z9{iU7vZq@5byKw{9lg9JnRA_4s!7?H6|n?o8ZW zdXIRo{Jz@#>IeD{>VLHUv1Pz*;P_y`V9&!@5AO~Mho1hF|I>%z(nrik)gwkDjgOrl z9~%uCz4Bzvli{bbrxVZ0epdf^>vOB;-~HnIOV3#R*zgPai_gEVd8zYq@2jb=I>#f& zAH2?aJ@Kaet<Kwh@3`-}-^aZlnJD}~{!sJL`eVnZ&`<Y1=Y0PBFZYD=`z=Q}&j0`b zAY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF*m;eA5aGbhPJOBUy32;bRa{vGf z6951U69E94oEQKA0#r#vK~y-6rIXD|RACgxfA4$Wx!(CuuVzwN_A!+cWY&Zd3={?x zv?)PoQEgg8o7%JrS_nalTGXOHAP5p6m_-OJGf6}(QwKCs3GKrit?o?DICnnY7EWnR z)S_p3c=&P7dCn21&0CuPkOHVT5ByfvfB`}wkmSkX=w<v!EF^`ZYsMYcvXrR-4+sS+ zNj@-3VB2TT-Py$UMjt8iYt2HH0t`T-jt(K3rf}cd$nj?C_IsJATq5_U5q^=dFdAdX zNDQ4-sKLE_eZPU*ty4$@s@S7k3y=t0@+^`Ca@5q#;$5~71x1!6aymokh>wlOO&0pH zOm?SHh*iKcIV6I%3p)@R2Gae+-#OR;8zb_D=3t1O?UneqYK$ua&qc{-=eJcrk{std zc5&kBZa{N*?h?^xl-{R3w6;ZPXsITZ$ng4l8dWZ-KV$s_7$M_W$7Z#Kvkw}utTMnQ z5U@EI4im7e5WZTJSFteU(tE>Uye~yC=qKD>!He$cm0grqnUvcm&+bq2>Tw)R1}P;i zhaz~(OnjEc8CZ$W(h_&FKrrH89l^U!G1k4v-OFS6@zBu|rgopgaS}A`v8h>a60gsb zr9d?vhPx6BcO~FQ8fJxLBsxz8CRsF3ZcbBBNzgeyymT4tbeNB2v5*KLkH#(DqXGz? zGzp#Z(cfiYBKbIw;rTs>k%viU#?rWG6oLSX0vZE>u{OquXp*^@i$Y)`Nqouk=-MX$ zyhywVB!U8^f2RPZVrkr13cGli8t@~F4gXyVAnuL=;QZ5Gs_*2d&MvlVu(kjI002ov JPDHLkV1n)bU%3DP literal 0 HcmV?d00001 From 9f2e67f30868e66aa44dacfa1bdfa7cdf4bc220b Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 12:10:14 -0400 Subject: [PATCH 09/27] fixed folder structure --- package-lock.json | 3780 +++-------------- .../controllers/authController.ts | 0 .../controllers/clipboardController.ts | 0 .../controllers/projectController.ts | 0 .../controllers/testsController.js | 0 5 files changed, 667 insertions(+), 3113 deletions(-) rename {client => server}/controllers/authController.ts (100%) rename {client => server}/controllers/clipboardController.ts (100%) rename {client => server}/controllers/projectController.ts (100%) rename {client => server}/controllers/testsController.js (100%) diff --git a/package-lock.json b/package-lock.json index cfb02a2..4125a73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,25 +7,9 @@ "": { "name": "jester", "version": "1.0.0", + "hasInstallScript": true, "license": "ISC", "dependencies": { - "@emotion/react": "^11.10.4", - "@emotion/styled": "^11.10.4", - "cookie-parser": "^1.4.6", - "cookie-session": "^2.0.0", - "dotenv": "^16.0.2", - "express": "^4.18.1", - "js-cookie": "^3.0.1", - "node-fetch": "2.6.7", - "passport": "^0.5.0", - "passport-github2": "^0.1.12", - "pg": "^8.8.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-router-dom": "^6.4.1", - "ts-node": "^10.9.1" - }, - "devDependencies": { "@babel/core": "^7.19.1", "@babel/preset-env": "^7.19.1", "@babel/preset-flow": "^7.18.6", @@ -54,17 +38,27 @@ "axios": "^0.27.2", "babel-jest": "^29.0.3", "babel-loader": "^8.2.5", + "cookie-parser": "^1.4.6", + "cookie-session": "^2.0.0", "css-loader": "^6.7.1", + "dotenv": "^16.0.2", "eslint": "^8.24.0", "eslint-plugin-react": "^7.31.8", + "express": "^4.18.1", "html-webpack-plugin": "^5.5.0", "jest": "^29.0.3", "jest-environment-jsdom": "^28.1.0", "jest-puppeteer": "^6.1.0", - "nodemon": "^2.0.20", + "js-cookie": "^3.0.1", + "node-fetch": "2.6.7", + "passport": "^0.5.0", + "passport-github2": "^0.1.12", "pg": "^8.8.0", "puppeteer": "^14.2.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-redux": "^8.0.4", + "react-router-dom": "^6.4.1", "react-test-renderer": "^18.2.0", "redux-mock-store": "^1.5.4", "sass": "^1.54.9", @@ -72,23 +66,25 @@ "style-loader": "^3.3.1", "supertest": "^6.2.3", "ts-loader": "^9.4.1", + "ts-node": "^10.9.1", "typescript": "^4.8.3", "webpack": "^5.74.0", "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.11.1" + }, + "devDependencies": { + "nodemon": "^2.0.20" } }, "node_modules/@adobe/css-tools": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", - "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==", - "dev": true + "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==" }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -101,7 +97,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -113,7 +108,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.1.tgz", "integrity": "sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -122,7 +116,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.1.tgz", "integrity": "sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -152,7 +145,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", - "dev": true, "dependencies": { "@babel/types": "^7.19.0", "@jridgewell/gen-mapping": "^0.3.2", @@ -166,7 +158,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -180,7 +171,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -192,7 +182,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, "dependencies": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" @@ -205,7 +194,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz", "integrity": "sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.19.1", "@babel/helper-validator-option": "^7.18.6", @@ -223,7 +211,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -244,7 +231,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "regexpu-core": "^5.1.0" @@ -260,7 +246,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -277,7 +262,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -286,7 +270,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -298,7 +281,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, "dependencies": { "@babel/template": "^7.18.10", "@babel/types": "^7.19.0" @@ -311,7 +293,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -323,7 +304,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, "dependencies": { "@babel/types": "^7.18.9" }, @@ -335,7 +315,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -347,7 +326,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -366,7 +344,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -378,7 +355,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -387,7 +363,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -405,7 +380,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.18.9", @@ -421,7 +395,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -433,7 +406,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", - "dev": true, "dependencies": { "@babel/types": "^7.18.9" }, @@ -445,7 +417,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -457,7 +428,6 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -466,7 +436,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -475,7 +444,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -484,7 +452,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "dev": true, "dependencies": { "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", @@ -499,7 +466,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", - "dev": true, "dependencies": { "@babel/template": "^7.18.10", "@babel/traverse": "^7.19.0", @@ -513,7 +479,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -527,7 +492,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz", "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -539,7 +503,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -554,7 +517,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -571,7 +533,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.19.0", @@ -589,7 +550,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -605,7 +565,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -622,7 +581,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -638,7 +596,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -654,7 +611,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -670,7 +626,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -686,7 +641,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -702,7 +656,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -718,7 +671,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.18.8", "@babel/helper-compilation-targets": "^7.18.9", @@ -737,7 +689,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -753,7 +704,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -770,7 +720,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -786,7 +735,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -804,7 +752,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -820,7 +767,6 @@ "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" }, @@ -832,7 +778,6 @@ "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" }, @@ -844,7 +789,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -856,7 +800,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -871,7 +814,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -883,7 +825,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -895,7 +836,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -910,7 +850,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -925,7 +864,6 @@ "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" }, @@ -937,7 +875,6 @@ "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" }, @@ -949,7 +886,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -964,7 +900,6 @@ "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" }, @@ -976,7 +911,6 @@ "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" }, @@ -988,7 +922,6 @@ "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" }, @@ -1000,7 +933,6 @@ "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" }, @@ -1012,7 +944,6 @@ "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" }, @@ -1024,7 +955,6 @@ "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" }, @@ -1036,7 +966,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1051,7 +980,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1066,7 +994,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1081,7 +1008,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1096,7 +1022,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -1113,7 +1038,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1128,7 +1052,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1143,7 +1066,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-compilation-targets": "^7.19.0", @@ -1166,7 +1088,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1181,7 +1102,6 @@ "version": "7.18.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz", "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1196,7 +1116,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1212,7 +1131,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1227,7 +1145,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1243,7 +1160,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.19.0", "@babel/plugin-syntax-flow": "^7.18.6" @@ -1259,7 +1175,6 @@ "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1274,7 +1189,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", @@ -1291,7 +1205,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1306,7 +1219,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1321,7 +1233,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -1338,7 +1249,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -1356,7 +1266,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", - "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-module-transforms": "^7.19.0", @@ -1375,7 +1284,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1391,7 +1299,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.19.0", "@babel/helper-plugin-utils": "^7.19.0" @@ -1407,7 +1314,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1422,7 +1328,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" @@ -1438,7 +1343,6 @@ "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1453,7 +1357,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1468,7 +1371,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1483,7 +1385,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", @@ -1502,7 +1403,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, "dependencies": { "@babel/plugin-transform-react-jsx": "^7.18.6" }, @@ -1517,7 +1417,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1533,7 +1432,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" @@ -1549,7 +1447,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1564,7 +1461,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1579,7 +1475,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.19.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" @@ -1595,7 +1490,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1610,7 +1504,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1625,7 +1518,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1640,7 +1532,6 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1655,7 +1546,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1671,7 +1561,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.1.tgz", "integrity": "sha512-c8B2c6D16Lp+Nt6HcD+nHl0VbPKVnNPTpszahuxJJnurfMtKeZ80A+qUv48Y7wqvS+dTFuLuaM9oYxyNHbCLWA==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.19.1", "@babel/helper-compilation-targets": "^7.19.1", @@ -1760,7 +1649,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-validator-option": "^7.18.6", @@ -1777,7 +1665,6 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -1793,7 +1680,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-validator-option": "^7.18.6", @@ -1813,7 +1699,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", - "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -1825,7 +1710,6 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.18.10", @@ -1839,7 +1723,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz", "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.19.0", @@ -1860,7 +1743,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.18.10", "@babel/helper-validator-identifier": "^7.18.6", @@ -1873,8 +1755,7 @@ "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 + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", @@ -1900,7 +1781,6 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, "engines": { "node": ">=10.0.0" } @@ -1909,7 +1789,6 @@ "version": "11.10.2", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz", "integrity": "sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA==", - "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/plugin-syntax-jsx": "^7.17.12", @@ -1932,7 +1811,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "engines": { "node": ">=10" }, @@ -1944,7 +1822,6 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -1953,7 +1830,6 @@ "version": "11.10.3", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz", "integrity": "sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==", - "dev": true, "dependencies": { "@emotion/memoize": "^0.8.0", "@emotion/sheet": "^1.2.0", @@ -1965,14 +1841,12 @@ "node_modules/@emotion/hash": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==", - "dev": true + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" }, "node_modules/@emotion/is-prop-valid": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", - "dev": true, "dependencies": { "@emotion/memoize": "^0.8.0" } @@ -1980,14 +1854,12 @@ "node_modules/@emotion/memoize": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==", - "dev": true + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" }, "node_modules/@emotion/react": { "version": "11.10.4", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.4.tgz", "integrity": "sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA==", - "dev": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.10.0", @@ -2015,7 +1887,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz", "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==", - "dev": true, "dependencies": { "@emotion/hash": "^0.9.0", "@emotion/memoize": "^0.8.0", @@ -2027,14 +1898,12 @@ "node_modules/@emotion/sheet": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz", - "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==", - "dev": true + "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==" }, "node_modules/@emotion/styled": { "version": "11.10.4", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.4.tgz", "integrity": "sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ==", - "dev": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.10.0", @@ -2061,20 +1930,17 @@ "version": "0.8.5", "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", - "dev": true, "peer": true }, "node_modules/@emotion/unitless": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==", - "dev": true + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", - "dev": true, "peerDependencies": { "react": ">=16.8.0" } @@ -2082,20 +1948,17 @@ "node_modules/@emotion/utils": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==", - "dev": true + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" }, "node_modules/@emotion/weak-memoize": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==", - "dev": true + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" }, "node_modules/@eslint/eslintrc": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", - "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2117,14 +1980,12 @@ "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -2139,7 +2000,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -2151,7 +2011,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -2162,14 +2021,12 @@ "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" }, "node_modules/@hapi/topo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -2178,7 +2035,6 @@ "version": "0.10.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.5.tgz", "integrity": "sha512-XVVDtp+dVvRxMoxSiSfasYaG02VEe1qH5cKgMQJWhol6HwzbcqoCMJi8dAGoYAO57jhUyhI6cWuRiTcRaDaYug==", - "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -2192,7 +2048,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" @@ -2202,7 +2057,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, "engines": { "node": ">=12.22" }, @@ -2214,14 +2068,12 @@ "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, "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", @@ -2237,7 +2089,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, "engines": { "node": ">=8" } @@ -2246,7 +2097,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.0.3.tgz", "integrity": "sha512-cGg0r+klVHSYnfE977S9wmpuQ9L+iYuYgL+5bPXiUlUynLLYunRxswEmhBzvrSKGof5AKiHuTTmUKAqRcDY9dg==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@types/node": "*", @@ -2263,7 +2113,6 @@ "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" }, @@ -2278,7 +2127,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2294,7 +2142,6 @@ "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" }, @@ -2305,14 +2152,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -2321,7 +2166,6 @@ "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" }, @@ -2333,7 +2177,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.0.3.tgz", "integrity": "sha512-1d0hLbOrM1qQE3eP3DtakeMbKTcXiXP3afWxqz103xPyddS2NhnNghS7MaXx1dcDt4/6p4nlhmeILo2ofgi8cQ==", - "dev": true, "dependencies": { "@jest/console": "^29.0.3", "@jest/reporters": "^29.0.3", @@ -2380,7 +2223,6 @@ "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" }, @@ -2395,7 +2237,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2411,7 +2252,6 @@ "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" }, @@ -2422,14 +2262,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -2438,7 +2276,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -2452,7 +2289,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -2464,7 +2300,6 @@ "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" }, @@ -2476,7 +2311,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", - "dev": true, "dependencies": { "@jest/fake-timers": "^28.1.3", "@jest/types": "^28.1.3", @@ -2491,7 +2325,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, "dependencies": { "@sinclair/typebox": "^0.24.1" }, @@ -2503,7 +2336,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, "dependencies": { "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -2520,7 +2352,6 @@ "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" }, @@ -2535,7 +2366,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2551,7 +2381,6 @@ "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" }, @@ -2562,14 +2391,12 @@ "node_modules/@jest/environment/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@jest/environment/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" } @@ -2578,7 +2405,6 @@ "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" }, @@ -2590,7 +2416,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.0.3.tgz", "integrity": "sha512-6W7K+fsI23FQ01H/BWccPyDZFrnU9QlzDcKOjrNVU5L8yUORFAJJIpmyxWPW70+X624KUNqzZwPThPMX28aXEQ==", - "dev": true, "dependencies": { "expect": "^29.0.3", "jest-snapshot": "^29.0.3" @@ -2603,7 +2428,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.0.3.tgz", "integrity": "sha512-i1xUkau7K/63MpdwiRqaxgZOjxYs4f0WMTGJnYwUKubsNRZSeQbLorS7+I4uXVF9KQ5r61BUPAUMZ7Lf66l64Q==", - "dev": true, "dependencies": { "jest-get-type": "^29.0.0" }, @@ -2615,7 +2439,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", - "dev": true, "dependencies": { "@jest/types": "^28.1.3", "@sinonjs/fake-timers": "^9.1.2", @@ -2632,7 +2455,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, "dependencies": { "@sinclair/typebox": "^0.24.1" }, @@ -2644,7 +2466,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, "dependencies": { "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -2661,7 +2482,6 @@ "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" }, @@ -2676,7 +2496,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2692,7 +2511,6 @@ "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" }, @@ -2703,14 +2521,12 @@ "node_modules/@jest/fake-timers/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@jest/fake-timers/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" } @@ -2719,7 +2535,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^28.1.3", @@ -2739,7 +2554,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, "dependencies": { "@jest/types": "^28.1.3", "@types/node": "*", @@ -2756,7 +2570,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, "dependencies": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -2771,7 +2584,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -2783,7 +2595,6 @@ "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" }, @@ -2795,7 +2606,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.0.3.tgz", "integrity": "sha512-YqGHT65rFY2siPIHHFjuCGUsbzRjdqkwbat+Of6DmYRg5shIXXrLdZoVE/+TJ9O1dsKsFmYhU58JvIbZRU1Z9w==", - "dev": true, "dependencies": { "@jest/environment": "^29.0.3", "@jest/expect": "^29.0.3", @@ -2810,7 +2620,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.0.3.tgz", "integrity": "sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==", - "dev": true, "dependencies": { "@jest/fake-timers": "^29.0.3", "@jest/types": "^29.0.3", @@ -2825,7 +2634,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.0.3.tgz", "integrity": "sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@sinonjs/fake-timers": "^9.1.2", @@ -2842,7 +2650,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.0.3.tgz", "integrity": "sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@types/node": "*" @@ -2855,7 +2662,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.0.3.tgz", "integrity": "sha512-3+QU3d4aiyOWfmk1obDerie4XNCaD5Xo1IlKNde2yGEi02WQD+ZQD0i5Hgqm1e73sMV7kw6pMlCnprtEwEVwxw==", - "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.0.3", @@ -2899,7 +2705,6 @@ "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" }, @@ -2914,7 +2719,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2930,7 +2734,6 @@ "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" }, @@ -2941,14 +2744,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -2957,7 +2758,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.0.3.tgz", "integrity": "sha512-Tl/YWUugQOjoTYwjKdfJWkSOfhufJHO5LhXTSZC3TRoQKO+fuXnZAdoXXBlpLXKGODBL3OvdUasfDD4PcMe6ng==", - "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -2971,7 +2771,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -2986,7 +2785,6 @@ "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" }, @@ -2998,7 +2796,6 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "dev": true, "dependencies": { "@sinclair/typebox": "^0.24.1" }, @@ -3010,7 +2807,6 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.0.0.tgz", "integrity": "sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==", - "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.15", "callsites": "^3.0.0", @@ -3024,7 +2820,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.0.3.tgz", "integrity": "sha512-vViVnQjCgTmbhDKEonKJPtcFe9G/CJO4/Np4XwYJah+lF2oI7KKeRp8t1dFvv44wN2NdbDb/qC6pi++Vpp0Dlg==", - "dev": true, "dependencies": { "@jest/console": "^29.0.3", "@jest/types": "^29.0.3", @@ -3039,7 +2834,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.0.3.tgz", "integrity": "sha512-Hf4+xYSWZdxTNnhDykr8JBs0yBN/nxOXyUQWfotBUqqy0LF9vzcFB0jm/EDNZCx587znLWTIgxcokW7WeZMobQ==", - "dev": true, "dependencies": { "@jest/test-result": "^29.0.3", "graceful-fs": "^4.2.9", @@ -3054,7 +2848,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.0.3.tgz", "integrity": "sha512-C5ihFTRYaGDbi/xbRQRdbo5ddGtI4VSpmL6AIcZxdhwLbXMa7PcXxxqyI91vGOFHnn5aVM3WYnYKCHEqmLVGzg==", - "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.0.3", @@ -3080,7 +2873,6 @@ "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" }, @@ -3095,7 +2887,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3111,7 +2902,6 @@ "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" }, @@ -3122,14 +2912,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -3138,7 +2926,6 @@ "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" }, @@ -3150,7 +2937,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.0.3.tgz", "integrity": "sha512-coBJmOQvurXjN1Hh5PzF7cmsod0zLIOXpP8KD161mqNlroMhLcwpODiEzi7ZsRl5Z/AIuxpeNm8DCl43F4kz8A==", - "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "@types/istanbul-lib-coverage": "^2.0.0", @@ -3167,7 +2953,6 @@ "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" }, @@ -3182,7 +2967,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3198,7 +2982,6 @@ "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" }, @@ -3209,14 +2992,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -3225,7 +3006,6 @@ "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" }, @@ -3237,7 +3017,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -3258,7 +3037,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -3267,7 +3045,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -3277,7 +3054,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -3296,7 +3072,6 @@ "version": "0.3.15", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -3305,14 +3080,12 @@ "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@mui/base": { "version": "5.0.0-alpha.98", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.98.tgz", "integrity": "sha512-c0U51+K2m57MASpRrmNs6qTXSvktDbVcSjD8zCRPbfuwYWERGGwNxwM3/jsBa4dSojTSmLPnOBFDypl74Ds6yQ==", - "dev": true, "dependencies": { "@babel/runtime": "^7.19.0", "@emotion/is-prop-valid": "^1.2.0", @@ -3345,7 +3118,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.6.tgz", "integrity": "sha512-dmyQBqrKmVU6yCSM4GGal5qNXpViXX+/V1t0GA1A5i9QF5Gx6noV/cw0hrSS2ffLT8L2oScq1oTdA6NVIiQ8lg==", - "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" @@ -3355,7 +3127,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.10.6.tgz", "integrity": "sha512-QwxdRmLA46S94B0hExPDx0td+A2unF+33bQ6Cs+lNpJKVsm1YeHwNdYXYcnpWeHeQQ07055OXl7IB2GKDd0MfA==", - "dev": true, "dependencies": { "@babel/runtime": "^7.19.0" }, @@ -3381,7 +3152,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.6.tgz", "integrity": "sha512-QilW5PAAGSQdN7Cpp4rwSQ1doJAt3ca1a2PHZtr8RLVlpHnXb+qQ8CeDo9+9V2fK5CDNdtTN1F+iJKO43aFBpQ==", - "dev": true, "dependencies": { "@babel/runtime": "^7.19.0", "@mui/base": "5.0.0-alpha.98", @@ -3426,7 +3196,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.6.tgz", "integrity": "sha512-I/W0QyTLRdEx6py3lKAquKO/rNF/7j+nIOM/xCyI9kU0fcotVTcTY08mKMsS6vrzdWpi6pAkD0wP0KwWy5R5VA==", - "dev": true, "dependencies": { "@babel/runtime": "^7.19.0", "@mui/utils": "^5.10.6", @@ -3453,7 +3222,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.6.tgz", "integrity": "sha512-OnVw5xnO4l0XzlJFhKif/RlLenBNhyEQQlSTwB9ApSWB05UAU5ZSbjNsRfyEKvgmQ/fPa+MqPD/dzxbIRCwyeg==", - "dev": true, "dependencies": { "@babel/runtime": "^7.19.0", "@emotion/cache": "^11.10.3", @@ -3485,7 +3253,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/styled-engine-sc/-/styled-engine-sc-5.10.6.tgz", "integrity": "sha512-AQIa478w3UI8gmlht7orp96tEJbEN26FiEs9Aee6E+iVTnoyT3b6V/JapgKlITo6rn7tYTSX9iJYwnDTMhbzTg==", - "dev": true, "dependencies": { "@babel/runtime": "^7.19.0", "prop-types": "^15.8.1" @@ -3511,7 +3278,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.6.tgz", "integrity": "sha512-HfQVX7e2xpQ3jtdB/WwtkFVtozMOozyN575/63u8ILHkE8wGDhblmCieAsnyJPFbm7WBW5PCMyzmfr4QyKLaYg==", - "dev": true, "dependencies": { "@babel/runtime": "^7.19.0", "@mui/private-theming": "^5.10.6", @@ -3551,7 +3317,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz", "integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==", - "dev": true, "peerDependencies": { "@types/react": "*" }, @@ -3565,7 +3330,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.6.tgz", "integrity": "sha512-g0Qs8xN/MW2M3fLL8197h5J2VB9U+49fLlnKKqC6zy/yus5cZwdT+Gwec+wUMxgwQoxMDn+J8oDWAn28kEOR/Q==", - "dev": true, "dependencies": { "@babel/runtime": "^7.19.0", "@types/prop-types": "^15.7.5", @@ -3588,7 +3352,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3601,7 +3364,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -3610,7 +3372,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3623,7 +3384,6 @@ "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", - "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -3633,7 +3393,6 @@ "version": "1.8.5", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.5.tgz", "integrity": "sha512-f4D5EXO7A7Xq35T0zRbWq5kJQyXzzscnHKmjnu2+37B3rwHU6mX9PYlbfXdnxcY6P/7zfmjhgan0Z+yuOfeBmA==", - "dev": true, "dependencies": { "immer": "^9.0.7", "redux": "^4.1.2", @@ -3665,7 +3424,6 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dev": true, "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -3673,26 +3431,22 @@ "node_modules/@sideway/formula": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", - "dev": true + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sinclair/typebox": { "version": "0.24.42", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.42.tgz", - "integrity": "sha512-d+2AtrHGyWek2u2ITF0lHRIv6Tt7X0dEHW+0rP+5aDCEjC3fiN2RBjrLD0yU0at52BcZbRGxLbAtXiR0hFCjYw==", - "dev": true + "integrity": "sha512-d+2AtrHGyWek2u2ITF0lHRIv6Tt7X0dEHW+0rP+5aDCEjC3fiN2RBjrLD0yU0at52BcZbRGxLbAtXiR0hFCjYw==" }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, "dependencies": { "type-detect": "4.0.8" } @@ -3701,7 +3455,6 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } @@ -3710,7 +3463,6 @@ "version": "8.18.1", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.18.1.tgz", "integrity": "sha512-oEvsm2B/WtcHKE+IcEeeCqNU/ltFGaVyGbpcm4g/2ytuT49jrlH9x5qRKL/H3A6yfM4YAbSbC0ceT5+9CEXnLg==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -3729,7 +3481,6 @@ "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" }, @@ -3744,7 +3495,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3760,7 +3510,6 @@ "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" }, @@ -3771,14 +3520,12 @@ "node_modules/@testing-library/dom/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@testing-library/dom/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" } @@ -3787,7 +3534,6 @@ "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" }, @@ -3799,7 +3545,6 @@ "version": "5.16.5", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", - "dev": true, "dependencies": { "@adobe/css-tools": "^4.0.1", "@babel/runtime": "^7.9.2", @@ -3821,7 +3566,6 @@ "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" }, @@ -3836,7 +3580,6 @@ "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" @@ -3849,7 +3592,6 @@ "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" }, @@ -3860,14 +3602,12 @@ "node_modules/@testing-library/jest-dom/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@testing-library/jest-dom/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" } @@ -3876,7 +3616,6 @@ "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" }, @@ -3888,7 +3627,6 @@ "version": "13.4.0", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", - "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", "@testing-library/dom": "^8.5.0", @@ -3906,7 +3644,6 @@ "version": "14.4.3", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.4.3.tgz", "integrity": "sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==", - "dev": true, "engines": { "node": ">=12", "npm": ">=6" @@ -3919,7 +3656,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, "engines": { "node": ">= 10" } @@ -3947,14 +3683,12 @@ "node_modules/@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", - "dev": true + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" }, "node_modules/@types/babel__core": { "version": "7.1.19", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "dev": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", @@ -3967,7 +3701,6 @@ "version": "7.6.4", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, "dependencies": { "@babel/types": "^7.0.0" } @@ -3976,7 +3709,6 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -3986,7 +3718,6 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz", "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==", - "dev": true, "dependencies": { "@babel/types": "^7.3.0" } @@ -3995,7 +3726,6 @@ "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -4005,7 +3735,6 @@ "version": "3.5.10", "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -4014,7 +3743,6 @@ "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -4023,7 +3751,6 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -4033,7 +3760,6 @@ "version": "2.0.44", "resolved": "https://registry.npmjs.org/@types/cookie-session/-/cookie-session-2.0.44.tgz", "integrity": "sha512-3DheOZ41pql6raSIkqEPphJdhA2dX2bkS+s2Qacv8YMKkoCbAIEXbsDil7351ARzMqvfyDUGNeHGiRZveIzhqQ==", - "dev": true, "dependencies": { "@types/express": "*", "@types/keygrip": "*" @@ -4043,7 +3769,6 @@ "version": "8.4.6", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", - "dev": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -4053,7 +3778,6 @@ "version": "3.7.4", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -4062,14 +3786,12 @@ "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "node_modules/@types/express": { "version": "4.17.14", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "dev": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -4081,7 +3803,6 @@ "version": "4.17.31", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -4092,7 +3813,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -4100,14 +3820,12 @@ "node_modules/@types/history": { "version": "4.7.11", "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", - "dev": true + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" }, "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" @@ -4116,14 +3834,12 @@ "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" }, "node_modules/@types/http-proxy": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -4131,14 +3847,12 @@ "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "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": "*" } @@ -4147,7 +3861,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } @@ -4156,7 +3869,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.0.3.tgz", "integrity": "sha512-F6ukyCTwbfsEX5F2YmVYmM5TcTHy1q9P5rWlRbrk56KyMh3v9xRGUO3aa8+SkvMi0SHXtASJv1283enXimC0Og==", - "dev": true, "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -4166,7 +3878,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -4178,7 +3889,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -4191,14 +3901,12 @@ "node_modules/@types/js-cookie": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.2.tgz", - "integrity": "sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==", - "dev": true + "integrity": "sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==" }, "node_modules/@types/jsdom": { "version": "16.2.15", "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz", "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==", - "dev": true, "dependencies": { "@types/node": "*", "@types/parse5": "^6.0.3", @@ -4208,20 +3916,17 @@ "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "node_modules/@types/keygrip": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", - "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", - "dev": true + "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==" }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/node": { "version": "18.7.18", @@ -4232,7 +3937,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.1.tgz", "integrity": "sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -4240,20 +3944,17 @@ "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/parse5": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", - "dev": true + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==" }, "node_modules/@types/passport": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.11.tgz", "integrity": "sha512-pz1cx9ptZvozyGKKKIPLcVDVHwae4hrH5d6g5J+DkMRRjR3cVETb4jMabhXAUbg3Ov7T22nFHEgaK2jj+5CBpw==", - "dev": true, "dependencies": { "@types/express": "*" } @@ -4262,7 +3963,6 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/passport-github2/-/passport-github2-1.2.5.tgz", "integrity": "sha512-+WLyrd8JPsCxroK34EjegR0j3FMxp6wqB9cw/sRCFkWT9qic1dymAn021gr336EpyjzdhjUd2KKrqyxvdFSvOA==", - "dev": true, "dependencies": { "@types/express": "*", "@types/passport": "*", @@ -4273,7 +3973,6 @@ "version": "1.4.11", "resolved": "https://registry.npmjs.org/@types/passport-oauth2/-/passport-oauth2-1.4.11.tgz", "integrity": "sha512-KUNwmGhe/3xPbjkzkPwwcPmyFwfyiSgtV1qOrPBLaU4i4q9GSCdAOyCbkFG0gUxAyEmYwqo9OAF/rjPjJ6ImdA==", - "dev": true, "dependencies": { "@types/express": "*", "@types/oauth": "*", @@ -4283,32 +3982,27 @@ "node_modules/@types/prettier": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz", - "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==", - "dev": true + "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==" }, "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" }, "node_modules/@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { "version": "18.0.21", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", - "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4319,7 +4013,6 @@ "version": "18.0.6", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", - "dev": true, "dependencies": { "@types/react": "*" } @@ -4328,7 +4021,6 @@ "version": "17.0.3", "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", - "dev": true, "dependencies": { "@types/react": "*" } @@ -4337,7 +4029,6 @@ "version": "5.1.19", "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.19.tgz", "integrity": "sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==", - "dev": true, "dependencies": { "@types/history": "^4.7.11", "@types/react": "*" @@ -4347,7 +4038,6 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dev": true, "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -4358,7 +4048,6 @@ "version": "4.4.5", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", - "dev": true, "dependencies": { "@types/react": "*" } @@ -4367,7 +4056,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/redux-mock-store/-/redux-mock-store-1.0.3.tgz", "integrity": "sha512-Wqe3tJa6x9MxMN4DJnMfZoBRBRak1XTPklqj4qkVm5VBpZnC8PSADf4kLuFQ9NAdHaowfWoEeUMz7NWc2GMtnA==", - "dev": true, "dependencies": { "redux": "^4.0.5" } @@ -4375,20 +4063,17 @@ "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "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 + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, "dependencies": { "@types/express": "*" } @@ -4397,7 +4082,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dev": true, "dependencies": { "@types/mime": "*", "@types/node": "*" @@ -4407,7 +4091,6 @@ "version": "0.3.33", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -4415,14 +4098,12 @@ "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, "node_modules/@types/testing-library__jest-dom": { "version": "5.14.5", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", - "dev": true, "dependencies": { "@types/jest": "*" } @@ -4430,20 +4111,17 @@ "node_modules/@types/tough-cookie": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "dev": true + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==" }, "node_modules/@types/use-sync-external-store": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", - "dev": true + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" }, "node_modules/@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -4452,7 +4130,6 @@ "version": "17.0.12", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.12.tgz", "integrity": "sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ==", - "dev": true, "dependencies": { "@types/yargs-parser": "*" } @@ -4460,14 +4137,12 @@ "node_modules/@types/yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@types/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, "optional": true, "dependencies": { "@types/node": "*" @@ -4477,7 +4152,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.1.tgz", "integrity": "sha512-ky7EFzPhqz3XlhS7vPOoMDaQnQMn+9o5ICR9CPr/6bw8HrFkzhMSxuA3gRfiJVvs7geYrSeawGJjZoZQKCOglQ==", - "dev": true, "dependencies": { "@typescript-eslint/scope-manager": "5.38.1", "@typescript-eslint/type-utils": "5.38.1", @@ -4509,7 +4183,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -4524,7 +4197,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.38.1.tgz", "integrity": "sha512-LDqxZBVFFQnQRz9rUZJhLmox+Ep5kdUmLatLQnCRR6523YV+XhRjfYzStQ4MheFA8kMAfUlclHSbu+RKdRwQKw==", - "dev": true, "dependencies": { "@typescript-eslint/scope-manager": "5.38.1", "@typescript-eslint/types": "5.38.1", @@ -4551,7 +4223,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.1.tgz", "integrity": "sha512-BfRDq5RidVU3RbqApKmS7RFMtkyWMM50qWnDAkKgQiezRtLKsoyRKIvz1Ok5ilRWeD9IuHvaidaLxvGx/2eqTQ==", - "dev": true, "dependencies": { "@typescript-eslint/types": "5.38.1", "@typescript-eslint/visitor-keys": "5.38.1" @@ -4568,7 +4239,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.38.1.tgz", "integrity": "sha512-UU3j43TM66gYtzo15ivK2ZFoDFKKP0k03MItzLdq0zV92CeGCXRfXlfQX5ILdd4/DSpHkSjIgLLLh1NtkOJOAw==", - "dev": true, "dependencies": { "@typescript-eslint/typescript-estree": "5.38.1", "@typescript-eslint/utils": "5.38.1", @@ -4595,7 +4265,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.1.tgz", "integrity": "sha512-QTW1iHq1Tffp9lNfbfPm4WJabbvpyaehQ0SrvVK2yfV79SytD9XDVxqiPvdrv2LK7DGSFo91TB2FgWanbJAZXg==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4608,7 +4277,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.1.tgz", "integrity": "sha512-99b5e/Enoe8fKMLdSuwrfH/C0EIbpUWmeEKHmQlGZb8msY33qn1KlkFww0z26o5Omx7EVjzVDCWEfrfCDHfE7g==", - "dev": true, "dependencies": { "@typescript-eslint/types": "5.38.1", "@typescript-eslint/visitor-keys": "5.38.1", @@ -4635,7 +4303,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -4650,7 +4317,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.38.1.tgz", "integrity": "sha512-oIuUiVxPBsndrN81oP8tXnFa/+EcZ03qLqPDfSZ5xIJVm7A9V0rlkQwwBOAGtrdN70ZKDlKv+l1BeT4eSFxwXA==", - "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@typescript-eslint/scope-manager": "5.38.1", @@ -4674,7 +4340,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.1.tgz", "integrity": "sha512-bSHr1rRxXt54+j2n4k54p4fj8AHJ49VDWtjpImOpzQj4qjAiOpPni+V1Tyajh19Api1i844F757cur8wH3YvOA==", - "dev": true, "dependencies": { "@typescript-eslint/types": "5.38.1", "eslint-visitor-keys": "^3.3.0" @@ -4691,7 +4356,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" @@ -4700,26 +4364,22 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -4729,14 +4389,12 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4748,7 +4406,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -4757,7 +4414,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -4765,14 +4421,12 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4788,7 +4442,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -4801,7 +4454,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4813,7 +4465,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -4827,7 +4478,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" @@ -4837,7 +4487,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, "peerDependencies": { "webpack": "4.x.x || 5.x.x", "webpack-cli": "4.x.x" @@ -4847,7 +4496,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, "dependencies": { "envinfo": "^7.7.3" }, @@ -4859,7 +4507,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, "peerDependencies": { "webpack-cli": "4.x.x" }, @@ -4872,20 +4519,17 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, "node_modules/abbrev": { "version": "1.1.1", @@ -4920,7 +4564,6 @@ "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" @@ -4930,7 +4573,6 @@ "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" }, @@ -4942,7 +4584,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, "peerDependencies": { "acorn": "^8" } @@ -4951,7 +4592,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -4960,7 +4600,6 @@ "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" } @@ -4969,7 +4608,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "dependencies": { "debug": "4" }, @@ -4981,7 +4619,6 @@ "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", @@ -4997,7 +4634,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, "dependencies": { "ajv": "^8.0.0" }, @@ -5014,7 +4650,6 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -5029,14 +4664,12 @@ "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "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" } @@ -5045,7 +4678,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -5060,7 +4692,6 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, "engines": [ "node >= 0.8.0" ], @@ -5072,7 +4703,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -5081,7 +4711,6 @@ "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" }, @@ -5093,7 +4722,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -5111,7 +4739,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -5120,7 +4747,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.2.tgz", "integrity": "sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q==", - "dev": true, "engines": { "node": ">=6.0" } @@ -5129,7 +4755,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5143,7 +4768,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -5162,7 +4786,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, "engines": { "node": ">=8" } @@ -5171,7 +4794,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -5188,20 +4810,17 @@ "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, "dependencies": { "follow-redirects": "^1.14.9", "form-data": "^4.0.0" @@ -5211,7 +4830,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.0.3.tgz", "integrity": "sha512-ApPyHSOhS/sVzwUOQIWJmdvDhBsMG01HX9z7ogtkp1TToHGGUWFlnXJUIzCgKPSfiYLn3ibipCYzsKSURHEwLg==", - "dev": true, "dependencies": { "@jest/transform": "^29.0.3", "@types/babel__core": "^7.1.14", @@ -5232,7 +4850,6 @@ "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" }, @@ -5247,7 +4864,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5263,7 +4879,6 @@ "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" }, @@ -5274,14 +4889,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -5290,7 +4903,6 @@ "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" }, @@ -5302,7 +4914,6 @@ "version": "8.2.5", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "dev": true, "dependencies": { "find-cache-dir": "^3.3.1", "loader-utils": "^2.0.0", @@ -5321,7 +4932,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, "dependencies": { "object.assign": "^4.1.0" } @@ -5330,7 +4940,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -5346,7 +4955,6 @@ "version": "29.0.2", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz", "integrity": "sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==", - "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -5361,7 +4969,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -5376,7 +4983,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", @@ -5390,7 +4996,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3", "core-js-compat": "^3.25.1" @@ -5403,7 +5008,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3" }, @@ -5415,7 +5019,6 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", - "dev": true, "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", @@ -5432,14 +5035,12 @@ "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==", - "dev": true, "peer": true }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -5462,7 +5063,6 @@ "version": "29.0.2", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz", "integrity": "sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==", - "dev": true, "dependencies": { "babel-plugin-jest-hoist": "^29.0.2", "babel-preset-current-node-syntax": "^1.0.0" @@ -5477,14 +5077,12 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -5511,14 +5109,12 @@ "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, "engines": { "node": "*" } @@ -5527,7 +5123,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, "engines": { "node": ">=8" } @@ -5536,7 +5131,6 @@ "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", @@ -5583,7 +5177,6 @@ "version": "1.0.14", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", - "dev": true, "dependencies": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", @@ -5594,20 +5187,17 @@ "node_modules/bonjour-service/node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "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==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5617,7 +5207,6 @@ "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" }, @@ -5628,14 +5217,12 @@ "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 + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, "node_modules/browserslist": { "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -5663,7 +5250,6 @@ "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" } @@ -5672,7 +5258,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "funding": [ { "type": "github", @@ -5696,7 +5281,6 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, "engines": { "node": "*" } @@ -5704,14 +5288,12 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/buffer-writer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "dev": true, "engines": { "node": ">=4" } @@ -5740,7 +5322,6 @@ "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" } @@ -5749,7 +5330,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -5759,7 +5339,6 @@ "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" } @@ -5768,14 +5347,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==", - "dev": true, "peer": true }, "node_modules/caniuse-lite": { "version": "1.0.30001406", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001406.tgz", "integrity": "sha512-bWTlaXUy/rq0BBtYShc/jArYfBPjEV95euvZ8JVtO43oQExEN/WquoqpufFjNu4kSpi5cy5kMbNvzztWDfv1Jg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -5791,7 +5368,6 @@ "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", @@ -5805,7 +5381,6 @@ "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" } @@ -5814,7 +5389,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "funding": [ { "type": "individual", @@ -5840,14 +5414,12 @@ "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, "engines": { "node": ">=6.0" } @@ -5855,20 +5427,17 @@ "node_modules/ci-info": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", - "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==", - "dev": true + "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==" }, "node_modules/cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" }, "node_modules/clean-css": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "dev": true, "dependencies": { "source-map": "~0.6.0" }, @@ -5880,7 +5449,6 @@ "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", @@ -5891,7 +5459,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -5905,7 +5472,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "dev": true, "engines": { "node": ">=6" } @@ -5914,7 +5480,6 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -5923,14 +5488,12 @@ "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 + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" }, "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==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -5938,20 +5501,17 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" }, "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==", - "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -5963,7 +5523,6 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, "engines": { "node": ">= 12" } @@ -5971,20 +5530,17 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "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 + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -5996,7 +5552,6 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -6014,7 +5569,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -6023,7 +5577,6 @@ "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" } @@ -6031,20 +5584,17 @@ "node_modules/compression/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, "engines": { "node": ">=0.8" } @@ -6091,7 +5641,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } @@ -6165,8 +5714,7 @@ "node_modules/cookiejar": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", - "dev": true + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" }, "node_modules/cookies": { "version": "0.8.0", @@ -6184,7 +5732,6 @@ "version": "3.25.2", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.2.tgz", "integrity": "sha512-TxfyECD4smdn3/CjWxczVtJqVLEEC2up7/82t7vC0AzNogr+4nQ8vyF7abxAuTXWvjTClSbvGhU0RgqA4ToQaQ==", - "dev": true, "dependencies": { "browserslist": "^4.21.4" }, @@ -6196,14 +5743,12 @@ "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cosmiconfig": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -6224,7 +5769,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, "dependencies": { "node-fetch": "2.6.7" } @@ -6233,7 +5777,6 @@ "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", @@ -6247,7 +5790,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", - "dev": true, "peer": true, "engines": { "node": ">=4" @@ -6257,7 +5799,6 @@ "version": "6.7.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", - "dev": true, "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.7", @@ -6283,7 +5824,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -6298,7 +5838,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -6314,7 +5853,6 @@ "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==", - "dev": true, "peer": true, "dependencies": { "camelize": "^1.0.0", @@ -6326,7 +5864,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, "engines": { "node": ">= 6" }, @@ -6337,14 +5874,12 @@ "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, "bin": { "cssesc": "bin/cssesc" }, @@ -6355,14 +5890,12 @@ "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" }, "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" }, @@ -6373,20 +5906,17 @@ "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 + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, "node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "node_modules/cwd": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", "integrity": "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==", - "dev": true, "dependencies": { "find-pkg": "^0.1.2", "fs-exists-sync": "^0.1.0" @@ -6399,7 +5929,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, "dependencies": { "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", @@ -6413,7 +5942,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, "dependencies": { "punycode": "^2.1.1" }, @@ -6425,7 +5953,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, "engines": { "node": ">=12" } @@ -6434,7 +5961,6 @@ "version": "11.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -6447,7 +5973,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -6463,26 +5988,22 @@ "node_modules/decimal.js": { "version": "10.4.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.1.tgz", - "integrity": "sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==", - "dev": true + "integrity": "sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==" }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "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" } @@ -6491,7 +6012,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, "dependencies": { "execa": "^5.0.0" }, @@ -6503,7 +6023,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, "engines": { "node": ">=8" } @@ -6512,7 +6031,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -6528,7 +6046,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -6554,7 +6071,6 @@ "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" } @@ -6562,20 +6078,17 @@ "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "node_modules/devtools-protocol": { "version": "0.0.1001819", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1001819.tgz", - "integrity": "sha512-G6OsIFnv/rDyxSqBa2lDLR6thp9oJioLsb2Gl+LbQlyoA9/OBAkrTU9jiCcQ8Pnh7z4d6slDiLaogR5hzgJLmQ==", - "dev": true + "integrity": "sha512-G6OsIFnv/rDyxSqBa2lDLR6thp9oJioLsb2Gl+LbQlyoA9/OBAkrTU9jiCcQ8Pnh7z4d6slDiLaogR5hzgJLmQ==" }, "node_modules/dezalgo": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", - "dev": true, "dependencies": { "asap": "^2.0.0", "wrappy": "1" @@ -6593,7 +6106,6 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.0.0.tgz", "integrity": "sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==", - "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -6602,7 +6114,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -6613,14 +6124,12 @@ "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" }, "node_modules/dns-packet": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "dev": true, "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -6632,7 +6141,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -6643,14 +6151,12 @@ "node_modules/dom-accessibility-api": { "version": "0.5.14", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", - "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==", - "dev": true + "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==" }, "node_modules/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, "dependencies": { "utila": "~0.4" } @@ -6659,7 +6165,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dev": true, "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -6669,7 +6174,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -6683,7 +6187,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, "funding": [ { "type": "github", @@ -6695,7 +6198,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, "dependencies": { "webidl-conversions": "^7.0.0" }, @@ -6707,7 +6209,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, "engines": { "node": ">=12" } @@ -6716,7 +6217,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, "dependencies": { "domelementtype": "^2.2.0" }, @@ -6731,7 +6231,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -6745,7 +6244,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -6767,14 +6265,12 @@ "node_modules/electron-to-chromium": { "version": "1.4.254", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.254.tgz", - "integrity": "sha512-Sh/7YsHqQYkA6ZHuHMy24e6TE4eX6KZVsZb9E/DvU1nQRIrH4BflO/4k+83tfdYvDl+MObvlqHPRICzEdC9c6Q==", - "dev": true + "integrity": "sha512-Sh/7YsHqQYkA6ZHuHMy24e6TE4eX6KZVsZb9E/DvU1nQRIrH4BflO/4k+83tfdYvDl+MObvlqHPRICzEdC9c6Q==" }, "node_modules/emittery": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true, "engines": { "node": ">=12" }, @@ -6785,14 +6281,12 @@ "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, "engines": { "node": ">= 4" } @@ -6809,7 +6303,6 @@ "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" } @@ -6818,7 +6311,6 @@ "version": "5.10.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -6831,7 +6323,6 @@ "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" } @@ -6840,7 +6331,6 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, "bin": { "envinfo": "dist/cli.js" }, @@ -6852,7 +6342,6 @@ "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" } @@ -6861,7 +6350,6 @@ "version": "1.20.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz", "integrity": "sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -6898,14 +6386,12 @@ "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "node_modules/es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, "dependencies": { "has": "^1.0.3" } @@ -6914,7 +6400,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -6931,7 +6416,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -6945,7 +6429,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -6954,7 +6437,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -6976,7 +6458,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -6985,7 +6466,6 @@ "version": "8.24.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", - "dev": true, "dependencies": { "@eslint/eslintrc": "^1.3.2", "@humanwhocodes/config-array": "^0.10.5", @@ -7041,7 +6521,6 @@ "version": "7.31.8", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz", "integrity": "sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==", - "dev": true, "dependencies": { "array-includes": "^3.1.5", "array.prototype.flatmap": "^1.3.0", @@ -7069,7 +6548,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -7081,7 +6559,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -7090,7 +6567,6 @@ "version": "2.0.0-next.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -7107,7 +6583,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -7120,7 +6595,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -7138,7 +6612,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, "engines": { "node": ">=10" } @@ -7147,7 +6620,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -7156,7 +6628,6 @@ "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" }, @@ -7170,14 +6641,12 @@ "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7193,7 +6662,6 @@ "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" }, @@ -7204,14 +6672,12 @@ "node_modules/eslint/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/eslint/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, "engines": { "node": ">=10" }, @@ -7223,7 +6689,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -7236,7 +6701,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -7245,7 +6709,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7261,7 +6724,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -7273,7 +6735,6 @@ "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -7288,7 +6749,6 @@ "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" } @@ -7297,7 +6757,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -7309,7 +6768,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -7322,7 +6780,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -7337,7 +6794,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -7354,7 +6810,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -7369,7 +6824,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -7384,7 +6838,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -7393,7 +6846,6 @@ "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" }, @@ -7405,7 +6857,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -7417,7 +6868,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -7429,7 +6879,6 @@ "version": "9.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", - "dev": true, "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", @@ -7446,7 +6895,6 @@ "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" @@ -7459,7 +6907,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -7471,7 +6918,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -7480,7 +6926,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -7492,7 +6937,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -7501,7 +6945,6 @@ "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" } @@ -7510,7 +6953,6 @@ "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" } @@ -7526,14 +6968,12 @@ "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, "engines": { "node": ">=0.8.x" } @@ -7542,7 +6982,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -7565,7 +7004,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -7574,7 +7012,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", "integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==", - "dev": true, "dependencies": { "os-homedir": "^1.0.1" }, @@ -7586,7 +7023,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/expect/-/expect-29.0.3.tgz", "integrity": "sha512-t8l5DTws3212VbmPL+tBFXhjRHLmctHB0oQbL8eUc6S7NzZtYUhycrFO9mkxA0ZUC6FAWdNi7JchJSkODtcu1Q==", - "dev": true, "dependencies": { "@jest/expect-utils": "^29.0.3", "jest-get-type": "^29.0.0", @@ -7601,8 +7037,7 @@ "node_modules/expect-puppeteer": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-6.1.1.tgz", - "integrity": "sha512-cnQF96qdoEcOD63j5NQMc0RtW9WRMW/WHKXEKsuDQ2tszhVH3qC7zkXXS4D0LTt9qCB3DEExioqylsQXvqPrUw==", - "dev": true + "integrity": "sha512-cnQF96qdoEcOD63j5NQMc0RtW9WRMW/WHKXEKsuDQ2tszhVH3qC7zkXXS4D0LTt9qCB3DEExioqylsQXvqPrUw==" }, "node_modules/express": { "version": "4.18.1", @@ -7689,7 +7124,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -7709,7 +7143,6 @@ "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" }, @@ -7723,14 +7156,12 @@ "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 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -7745,26 +7176,22 @@ "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==", - "dev": true + "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": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, "engines": { "node": ">= 4.9.1" } @@ -7773,7 +7200,6 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -7782,7 +7208,6 @@ "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -7794,7 +7219,6 @@ "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" } @@ -7803,7 +7227,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, "dependencies": { "pend": "~1.2.0" } @@ -7812,7 +7235,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -7824,7 +7246,6 @@ "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" }, @@ -7866,7 +7287,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -7883,7 +7303,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", "integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==", - "dev": true, "dependencies": { "fs-exists-sync": "^0.1.0", "resolve-dir": "^0.1.0" @@ -7896,7 +7315,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", "integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==", - "dev": true, "dependencies": { "find-file-up": "^0.1.2" }, @@ -7908,7 +7326,6 @@ "version": "1.4.7", "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.7.tgz", "integrity": "sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==", - "dev": true, "dependencies": { "chalk": "^4.0.0", "commander": "^5.1.0", @@ -7922,7 +7339,6 @@ "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" }, @@ -7937,7 +7353,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7953,7 +7368,6 @@ "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" }, @@ -7964,14 +7378,12 @@ "node_modules/find-process/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/find-process/node_modules/commander": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, "engines": { "node": ">= 6" } @@ -7980,7 +7392,6 @@ "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" } @@ -7989,7 +7400,6 @@ "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" }, @@ -8000,14 +7410,12 @@ "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==", - "dev": true + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "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" @@ -8020,7 +7428,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -8032,14 +7439,12 @@ "node_modules/flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "node_modules/follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, "funding": [ { "type": "individual", @@ -8059,7 +7464,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -8068,7 +7472,6 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", - "dev": true, "dependencies": { "for-in": "^1.0.1" }, @@ -8080,7 +7483,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -8094,7 +7496,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", - "dev": true, "dependencies": { "dezalgo": "1.0.3", "hexoid": "1.0.0", @@ -8109,7 +7510,6 @@ "version": "6.9.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", - "dev": true, "engines": { "node": ">=0.6" }, @@ -8136,14 +7536,12 @@ "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 + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "node_modules/fs-exists-sync": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -8151,20 +7549,17 @@ "node_modules/fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -8183,7 +7578,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -8201,7 +7595,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8210,7 +7603,6 @@ "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" } @@ -8219,7 +7611,6 @@ "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.*" } @@ -8241,7 +7632,6 @@ "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" } @@ -8250,7 +7640,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, "engines": { "node": ">=10" }, @@ -8262,7 +7651,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -8278,7 +7666,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8298,7 +7685,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -8309,14 +7695,12 @@ "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "node_modules/global-modules": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", "integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==", - "dev": true, "dependencies": { "global-prefix": "^0.1.4", "is-windows": "^0.2.0" @@ -8329,7 +7713,6 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", "integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==", - "dev": true, "dependencies": { "homedir-polyfill": "^1.0.0", "ini": "^1.3.4", @@ -8344,7 +7727,6 @@ "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" }, @@ -8356,7 +7738,6 @@ "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" } @@ -8365,7 +7746,6 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -8384,20 +7764,17 @@ "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "node_modules/grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "node_modules/has": { "version": "1.0.3", @@ -8414,7 +7791,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8423,7 +7799,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -8432,7 +7807,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -8455,7 +7829,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -8470,7 +7843,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, "bin": { "he": "bin/he" } @@ -8479,7 +7851,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "dev": true, "engines": { "node": ">=8" } @@ -8488,7 +7859,6 @@ "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" } @@ -8496,14 +7866,12 @@ "node_modules/hoist-non-react-statics/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "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" }, @@ -8515,7 +7883,6 @@ "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -8527,7 +7894,6 @@ "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", @@ -8542,7 +7908,6 @@ "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" } @@ -8551,7 +7916,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, "dependencies": { "whatwg-encoding": "^2.0.0" }, @@ -8562,20 +7926,17 @@ "node_modules/html-entities": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" }, "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 + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" }, "node_modules/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", @@ -8596,7 +7957,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -8619,7 +7979,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -8637,8 +7996,7 @@ "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, "node_modules/http-errors": { "version": "2.0.0", @@ -8658,14 +8016,12 @@ "node_modules/http-parser-js": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -8679,7 +8035,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -8693,7 +8048,6 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -8717,7 +8071,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -8730,7 +8083,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, "engines": { "node": ">=10.17.0" } @@ -8750,7 +8102,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, "engines": { "node": "^10 || ^12 || >= 14" }, @@ -8762,7 +8113,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -8782,7 +8132,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, "engines": { "node": ">= 4" } @@ -8797,7 +8146,6 @@ "version": "9.0.15", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==", - "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -8806,14 +8154,12 @@ "node_modules/immutable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -8829,7 +8175,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -8838,7 +8183,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -8857,7 +8201,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -8866,7 +8209,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, "engines": { "node": ">=8" } @@ -8875,7 +8217,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -8889,14 +8230,12 @@ "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -8910,7 +8249,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, "engines": { "node": ">= 0.10" } @@ -8926,14 +8264,12 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -8945,7 +8281,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -8957,7 +8292,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -8972,14 +8306,12 @@ "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==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -8991,7 +8323,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -9003,7 +8334,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9018,7 +8348,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, "bin": { "is-docker": "cli.js" }, @@ -9033,7 +8362,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -9042,7 +8370,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -9051,7 +8378,6 @@ "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" } @@ -9060,7 +8386,6 @@ "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" } @@ -9069,7 +8394,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -9081,7 +8405,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -9093,7 +8416,6 @@ "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" } @@ -9102,7 +8424,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9117,7 +8438,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, "engines": { "node": ">=10" }, @@ -9129,7 +8449,6 @@ "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" }, @@ -9140,14 +8459,12 @@ "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -9163,7 +8480,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -9175,7 +8491,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, "engines": { "node": ">=8" }, @@ -9187,7 +8502,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9202,7 +8516,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -9217,7 +8530,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -9229,7 +8541,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -9238,7 +8549,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, "dependencies": { "is-docker": "^2.0.0" }, @@ -9249,20 +8559,17 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -9271,7 +8578,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, "engines": { "node": ">=8" } @@ -9280,7 +8586,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "dev": true, "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -9296,7 +8601,6 @@ "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", @@ -9310,7 +8614,6 @@ "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" } @@ -9319,7 +8622,6 @@ "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" }, @@ -9331,7 +8633,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -9345,7 +8646,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -9358,7 +8658,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest/-/jest-29.0.3.tgz", "integrity": "sha512-ElgUtJBLgXM1E8L6K1RW1T96R897YY/3lRYqq9uVcPWtP2AAl/nQ16IYDh/FzQOOQ12VEuLdcPU83mbhG2C3PQ==", - "dev": true, "dependencies": { "@jest/core": "^29.0.3", "@jest/types": "^29.0.3", @@ -9384,7 +8683,6 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.0.0.tgz", "integrity": "sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==", - "dev": true, "dependencies": { "execa": "^5.0.0", "p-limit": "^3.1.0" @@ -9397,7 +8695,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9412,7 +8709,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.0.3.tgz", "integrity": "sha512-QeGzagC6Hw5pP+df1+aoF8+FBSgkPmraC1UdkeunWh0jmrp7wC0Hr6umdUAOELBQmxtKAOMNC3KAdjmCds92Zg==", - "dev": true, "dependencies": { "@jest/environment": "^29.0.3", "@jest/expect": "^29.0.3", @@ -9442,7 +8738,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.0.3.tgz", "integrity": "sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==", - "dev": true, "dependencies": { "@jest/fake-timers": "^29.0.3", "@jest/types": "^29.0.3", @@ -9457,7 +8752,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.0.3.tgz", "integrity": "sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@sinonjs/fake-timers": "^9.1.2", @@ -9474,7 +8768,6 @@ "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" }, @@ -9489,7 +8782,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9505,7 +8797,6 @@ "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" }, @@ -9516,14 +8807,12 @@ "node_modules/jest-circus/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jest-circus/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" } @@ -9532,7 +8821,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.0.3.tgz", "integrity": "sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@types/node": "*" @@ -9545,7 +8833,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9560,7 +8847,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -9574,7 +8860,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -9586,7 +8871,6 @@ "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" }, @@ -9598,7 +8882,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.0.3.tgz", "integrity": "sha512-aUy9Gd/Kut1z80eBzG10jAn6BgS3BoBbXyv+uXEqBJ8wnnuZ5RpNfARoskSrTIy1GY4a8f32YGuCMwibtkl9CQ==", - "dev": true, "dependencies": { "@jest/core": "^29.0.3", "@jest/test-result": "^29.0.3", @@ -9632,7 +8915,6 @@ "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" }, @@ -9647,7 +8929,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9663,7 +8944,6 @@ "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" }, @@ -9674,14 +8954,12 @@ "node_modules/jest-cli/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jest-cli/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" } @@ -9690,7 +8968,6 @@ "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" }, @@ -9702,7 +8979,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.0.3.tgz", "integrity": "sha512-U5qkc82HHVYe3fNu2CRXLN4g761Na26rWKf7CjM8LlZB3In1jadEkZdMwsE37rd9RSPV0NfYaCjHdk/gu3v+Ew==", - "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.0.3", @@ -9747,7 +9023,6 @@ "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" }, @@ -9762,7 +9037,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9778,7 +9052,6 @@ "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" }, @@ -9789,14 +9062,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -9805,7 +9076,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -9819,7 +9089,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -9831,7 +9100,6 @@ "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" }, @@ -9843,7 +9111,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-6.1.1.tgz", "integrity": "sha512-z5LnaGDvlIkdMv/rppSO4+rq+GyQKf1xI9oiBxf9/2EBeN2hxRaWiMvaLNDnHPZj2PAhBXsycrKslDDoZO2Xtw==", - "dev": true, "dependencies": { "chalk": "^4.1.2", "cwd": "^0.10.0", @@ -9858,7 +9125,6 @@ "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" }, @@ -9873,7 +9139,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9889,7 +9154,6 @@ "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" }, @@ -9900,14 +9164,12 @@ "node_modules/jest-dev-server/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jest-dev-server/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" } @@ -9916,7 +9178,6 @@ "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" }, @@ -9928,7 +9189,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.0.3.tgz", "integrity": "sha512-+X/AIF5G/vX9fWK+Db9bi9BQas7M9oBME7egU7psbn4jlszLFCu0dW63UgeE6cs/GANq4fLaT+8sGHQQ0eCUfg==", - "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.0.0", @@ -9943,7 +9203,6 @@ "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" }, @@ -9958,7 +9217,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9974,7 +9232,6 @@ "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" }, @@ -9985,14 +9242,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -10001,7 +9256,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -10015,7 +9269,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -10027,7 +9280,6 @@ "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" }, @@ -10039,7 +9291,6 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.0.0.tgz", "integrity": "sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==", - "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, @@ -10051,7 +9302,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.0.3.tgz", "integrity": "sha512-wILhZfESURHHBNvPMJ0lZlYZrvOQJxAo3wNHi+ycr90V7M+uGR9Gh4+4a/BmaZF0XTyZsk4OiYEf3GJN7Ltqzg==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "chalk": "^4.0.0", @@ -10067,7 +9317,6 @@ "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" }, @@ -10082,7 +9331,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10098,7 +9346,6 @@ "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" }, @@ -10109,14 +9356,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -10125,7 +9370,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -10139,7 +9383,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -10151,7 +9394,6 @@ "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" }, @@ -10163,7 +9405,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.3.tgz", "integrity": "sha512-HnlGUmZRdxfCByd3GM2F100DgQOajUBzEitjGqIREcb45kGjZvRrKUdlaF6escXBdcXNl0OBh+1ZrfeZT3GnAg==", - "dev": true, "dependencies": { "@jest/environment": "^28.1.3", "@jest/fake-timers": "^28.1.3", @@ -10182,7 +9423,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, "dependencies": { "@sinclair/typebox": "^0.24.1" }, @@ -10194,7 +9434,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, "dependencies": { "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -10211,7 +9450,6 @@ "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" }, @@ -10226,7 +9464,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10242,7 +9479,6 @@ "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" }, @@ -10253,14 +9489,12 @@ "node_modules/jest-environment-jsdom/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jest-environment-jsdom/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" } @@ -10269,7 +9503,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, "dependencies": { "@jest/types": "^28.1.3", "@types/node": "*", @@ -10286,7 +9519,6 @@ "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" }, @@ -10298,7 +9530,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.0.3.tgz", "integrity": "sha512-cdZqRCnmIlTXC+9vtvmfiY/40Cj6s2T0czXuq1whvQdmpzAnj4sbqVYuZ4zFHk766xTTJ+Ij3uUqkk8KCfXoyg==", - "dev": true, "dependencies": { "@jest/environment": "^29.0.3", "@jest/fake-timers": "^29.0.3", @@ -10315,7 +9546,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.0.3.tgz", "integrity": "sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==", - "dev": true, "dependencies": { "@jest/fake-timers": "^29.0.3", "@jest/types": "^29.0.3", @@ -10330,7 +9560,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.0.3.tgz", "integrity": "sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@sinonjs/fake-timers": "^9.1.2", @@ -10347,7 +9576,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.0.3.tgz", "integrity": "sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@types/node": "*" @@ -10360,7 +9588,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-6.1.1.tgz", "integrity": "sha512-Ces37g8Gdj7QaVxszeoXlvmsZxcEJN9EPUdJt8fGMLA+6ARVFKyVmFgP9xVeGyjTvzsXdtIiJdeOKMLMeD8r2A==", - "dev": true, "dependencies": { "chalk": "^4.1.2", "cwd": "^0.10.0", @@ -10373,7 +9600,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dev": true, "dependencies": { "@jest/fake-timers": "^27.5.1", "@jest/types": "^27.5.1", @@ -10388,7 +9614,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dev": true, "dependencies": { "@jest/types": "^27.5.1", "@sinonjs/fake-timers": "^8.0.1", @@ -10405,7 +9630,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -10421,7 +9645,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } @@ -10430,7 +9653,6 @@ "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, "dependencies": { "@types/yargs-parser": "*" } @@ -10439,7 +9661,6 @@ "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" }, @@ -10454,7 +9675,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10470,7 +9690,6 @@ "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" }, @@ -10481,14 +9700,12 @@ "node_modules/jest-environment-puppeteer/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jest-environment-puppeteer/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" } @@ -10497,7 +9714,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, "dependencies": { "@jest/environment": "^27.5.1", "@jest/fake-timers": "^27.5.1", @@ -10514,7 +9730,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^27.5.1", @@ -10534,7 +9749,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, "dependencies": { "@jest/types": "^27.5.1", "@types/node": "*" @@ -10547,7 +9761,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, "dependencies": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -10564,7 +9777,6 @@ "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" }, @@ -10576,7 +9788,6 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.0.0.tgz", "integrity": "sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==", - "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -10585,7 +9796,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.0.3.tgz", "integrity": "sha512-uMqR99+GuBHo0RjRhOE4iA6LmsxEwRdgiIAQgMU/wdT2XebsLDz5obIwLZm/Psj+GwSEQhw9AfAVKGYbh2G55A==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@types/graceful-fs": "^4.1.3", @@ -10610,7 +9820,6 @@ "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" } @@ -10619,7 +9828,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.0.3.tgz", "integrity": "sha512-Tl/YWUugQOjoTYwjKdfJWkSOfhufJHO5LhXTSZC3TRoQKO+fuXnZAdoXXBlpLXKGODBL3OvdUasfDD4PcMe6ng==", - "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -10633,7 +9841,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -10648,7 +9855,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.0.3.tgz", "integrity": "sha512-YfW/G63dAuiuQ3QmQlh8hnqLDe25WFY3eQhuc/Ev1AGmkw5zREblTh7TCSKLoheyggu6G9gxO2hY8p9o6xbaRQ==", - "dev": true, "dependencies": { "jest-get-type": "^29.0.0", "pretty-format": "^29.0.3" @@ -10661,7 +9867,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -10673,7 +9878,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -10687,7 +9891,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.0.3.tgz", "integrity": "sha512-RsR1+cZ6p1hDV4GSCQTg+9qjeotQCgkaleIKLK7dm+U4V/H2bWedU3RAtLm8+mANzZ7eDV33dMar4pejd7047w==", - "dev": true, "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.0.3", @@ -10702,7 +9905,6 @@ "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" }, @@ -10717,7 +9919,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10733,7 +9934,6 @@ "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" }, @@ -10744,14 +9944,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -10760,7 +9958,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -10774,7 +9971,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -10786,7 +9982,6 @@ "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" }, @@ -10798,7 +9993,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.0.3.tgz", "integrity": "sha512-7T8JiUTtDfppojosORAflABfLsLKMLkBHSWkjNQrjIltGoDzNGn7wEPOSfjqYAGTYME65esQzMJxGDjuLBKdOg==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.0.3", @@ -10818,7 +10012,6 @@ "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" }, @@ -10833,7 +10026,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10849,7 +10041,6 @@ "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" }, @@ -10860,14 +10051,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -10876,7 +10065,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -10890,7 +10078,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -10902,7 +10089,6 @@ "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" }, @@ -10914,7 +10100,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", - "dev": true, "dependencies": { "@jest/types": "^28.1.3", "@types/node": "*" @@ -10927,7 +10112,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, "dependencies": { "@sinclair/typebox": "^0.24.1" }, @@ -10939,7 +10123,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, "dependencies": { "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -10956,7 +10139,6 @@ "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" }, @@ -10971,7 +10153,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10987,7 +10168,6 @@ "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" }, @@ -10998,14 +10178,12 @@ "node_modules/jest-mock/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jest-mock/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" } @@ -11014,7 +10192,6 @@ "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" }, @@ -11026,7 +10203,6 @@ "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" }, @@ -11043,7 +10219,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/jest-puppeteer/-/jest-puppeteer-6.1.1.tgz", "integrity": "sha512-cBOszleUpyipDMNYmcmH3x+687x03ZvOVz7W8X5y5TgD+j4MK+BcumwGdE1YwVS21kPLjJUu1pIdEzEDuFEBfA==", - "dev": true, "dependencies": { "expect-puppeteer": "^6.1.1", "jest-environment-puppeteer": "^6.1.1" @@ -11056,7 +10231,6 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.0.0.tgz", "integrity": "sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==", - "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -11065,7 +10239,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.0.3.tgz", "integrity": "sha512-toVkia85Y/BPAjJasTC9zIPY6MmVXQPtrCk8SmiheC4MwVFE/CMFlOtMN6jrwPMC6TtNh8+sTMllasFeu1wMPg==", - "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -11085,7 +10258,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.0.3.tgz", "integrity": "sha512-KzuBnXqNvbuCdoJpv8EanbIGObk7vUBNt/PwQPPx2aMhlv/jaXpUJsqWYRpP/0a50faMBY7WFFP8S3/CCzwfDw==", - "dev": true, "dependencies": { "jest-regex-util": "^29.0.0", "jest-snapshot": "^29.0.3" @@ -11098,7 +10270,6 @@ "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" }, @@ -11113,7 +10284,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11129,7 +10299,6 @@ "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" }, @@ -11140,14 +10309,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -11156,7 +10323,6 @@ "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" }, @@ -11168,7 +10334,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.0.3.tgz", "integrity": "sha512-Usu6VlTOZlCZoNuh3b2Tv/yzDpKqtiNAetG9t3kJuHfUyVMNW7ipCCJOUojzKkjPoaN7Bl1f7Buu6PE0sGpQxw==", - "dev": true, "dependencies": { "@jest/console": "^29.0.3", "@jest/environment": "^29.0.3", @@ -11200,7 +10365,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.0.3.tgz", "integrity": "sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==", - "dev": true, "dependencies": { "@jest/fake-timers": "^29.0.3", "@jest/types": "^29.0.3", @@ -11215,7 +10379,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.0.3.tgz", "integrity": "sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@sinonjs/fake-timers": "^9.1.2", @@ -11232,7 +10395,6 @@ "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" }, @@ -11247,7 +10409,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11263,7 +10424,6 @@ "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" }, @@ -11274,14 +10434,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -11290,7 +10448,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.0.3.tgz", "integrity": "sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@types/node": "*" @@ -11303,7 +10460,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.0.3.tgz", "integrity": "sha512-Tl/YWUugQOjoTYwjKdfJWkSOfhufJHO5LhXTSZC3TRoQKO+fuXnZAdoXXBlpLXKGODBL3OvdUasfDD4PcMe6ng==", - "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -11317,7 +10473,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -11332,7 +10487,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -11347,7 +10501,6 @@ "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11357,7 +10510,6 @@ "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" }, @@ -11369,7 +10521,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.0.3.tgz", "integrity": "sha512-12gZXRQ7ozEeEHKTY45a+YLqzNDR/x4c//X6AqwKwKJPpWM8FY4vwn4VQJOcLRS3Nd1fWwgP7LU4SoynhuUMHQ==", - "dev": true, "dependencies": { "@jest/environment": "^29.0.3", "@jest/fake-timers": "^29.0.3", @@ -11402,7 +10553,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.0.3.tgz", "integrity": "sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==", - "dev": true, "dependencies": { "@jest/fake-timers": "^29.0.3", "@jest/types": "^29.0.3", @@ -11417,7 +10567,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.0.3.tgz", "integrity": "sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@sinonjs/fake-timers": "^9.1.2", @@ -11434,7 +10583,6 @@ "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" }, @@ -11449,7 +10597,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11465,7 +10612,6 @@ "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" }, @@ -11476,14 +10622,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -11492,7 +10636,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.0.3.tgz", "integrity": "sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@types/node": "*" @@ -11505,7 +10648,6 @@ "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" }, @@ -11517,7 +10659,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.0.3.tgz", "integrity": "sha512-52q6JChm04U3deq+mkQ7R/7uy7YyfVIrebMi6ZkBoDJ85yEjm/sJwdr1P0LOIEHmpyLlXrxy3QP0Zf5J2kj0ew==", - "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -11552,7 +10693,6 @@ "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" }, @@ -11567,7 +10707,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11583,7 +10722,6 @@ "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" }, @@ -11594,14 +10732,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -11610,7 +10746,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -11624,7 +10759,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -11636,7 +10770,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -11651,7 +10784,6 @@ "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" }, @@ -11663,7 +10795,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.0.3.tgz", "integrity": "sha512-Q0xaG3YRG8QiTC4R6fHjHQPaPpz9pJBEi0AeOE4mQh/FuWOijFjGXMMOfQEaU9i3z76cNR7FobZZUQnL6IyfdQ==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "@types/node": "*", @@ -11680,7 +10811,6 @@ "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" }, @@ -11695,7 +10825,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11711,7 +10840,6 @@ "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" }, @@ -11722,14 +10850,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -11738,7 +10864,6 @@ "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" }, @@ -11750,7 +10875,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.0.3.tgz", "integrity": "sha512-OebiqqT6lK8cbMPtrSoS3aZP4juID762lZvpf1u+smZnwTEBCBInan0GAIIhv36MxGaJvmq5uJm7dl5gVt+Zrw==", - "dev": true, "dependencies": { "@jest/types": "^29.0.3", "camelcase": "^6.2.0", @@ -11767,7 +10891,6 @@ "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" }, @@ -11782,7 +10905,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, "engines": { "node": ">=10" }, @@ -11794,7 +10916,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11810,7 +10931,6 @@ "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" }, @@ -11821,14 +10941,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -11837,7 +10955,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -11851,7 +10968,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -11863,7 +10979,6 @@ "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" }, @@ -11875,7 +10990,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.0.3.tgz", "integrity": "sha512-tQX9lU91A+9tyUQKUMp0Ns8xAcdhC9fo73eqA3LFxP2bSgiF49TNcc+vf3qgGYYK9qRjFpXW9+4RgF/mbxyOOw==", - "dev": true, "dependencies": { "@jest/test-result": "^29.0.3", "@jest/types": "^29.0.3", @@ -11894,7 +11008,6 @@ "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" }, @@ -11909,7 +11022,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11925,7 +11037,6 @@ "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" }, @@ -11936,14 +11047,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -11952,7 +11061,6 @@ "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" }, @@ -11964,7 +11072,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -11978,7 +11085,6 @@ "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" } @@ -11987,7 +11093,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -12002,7 +11107,6 @@ "version": "17.6.0", "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", - "dev": true, "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", @@ -12022,8 +11126,7 @@ "node_modules/js-sdsl": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", - "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", - "dev": true + "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -12034,7 +11137,6 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -12047,7 +11149,6 @@ "version": "19.0.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", - "dev": true, "dependencies": { "abab": "^2.0.5", "acorn": "^8.5.0", @@ -12093,7 +11194,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, "dependencies": { "punycode": "^2.1.1" }, @@ -12105,7 +11205,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, "engines": { "node": ">=12" } @@ -12114,7 +11213,6 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", - "dev": true, "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -12127,7 +11225,6 @@ "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" }, @@ -12138,26 +11235,22 @@ "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 + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "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 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -12169,7 +11262,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, "dependencies": { "array-includes": "^3.1.5", "object.assign": "^4.1.3" @@ -12193,7 +11285,6 @@ "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" } @@ -12202,7 +11293,6 @@ "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" } @@ -12211,7 +11301,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true, "engines": { "node": ">= 8" } @@ -12220,7 +11309,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -12229,7 +11317,6 @@ "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" } @@ -12238,7 +11325,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -12250,14 +11336,12 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, "engines": { "node": ">=6.11.5" } @@ -12266,7 +11350,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -12280,7 +11363,6 @@ "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" }, @@ -12291,26 +11373,22 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "node_modules/loose-envify": { "version": "1.4.0", @@ -12327,7 +11405,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, "dependencies": { "tslib": "^2.0.3" } @@ -12336,7 +11413,6 @@ "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" }, @@ -12348,7 +11424,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", - "dev": true, "bin": { "lz-string": "bin/bin.js" } @@ -12357,7 +11432,6 @@ "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" }, @@ -12377,7 +11451,6 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, "dependencies": { "tmpl": "1.0.5" } @@ -12394,7 +11467,6 @@ "version": "3.4.7", "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", - "dev": true, "dependencies": { "fs-monkey": "^1.0.3" }, @@ -12406,7 +11478,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", - "dev": true, "dependencies": { "arr-union": "^3.1.0", "clone-deep": "^0.2.4", @@ -12420,7 +11491,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", - "dev": true, "dependencies": { "for-own": "^0.1.3", "is-plain-object": "^2.0.1", @@ -12436,7 +11506,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -12448,7 +11517,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", - "dev": true, "dependencies": { "is-extendable": "^0.1.1", "kind-of": "^2.0.1", @@ -12463,7 +11531,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", - "dev": true, "dependencies": { "is-buffer": "^1.0.2" }, @@ -12475,7 +11542,6 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -12488,14 +11554,12 @@ "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 + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "engines": { "node": ">= 8" } @@ -12512,7 +11576,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -12555,7 +11618,6 @@ "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" } @@ -12564,7 +11626,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, "engines": { "node": ">=4" } @@ -12572,14 +11633,12 @@ "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12590,14 +11649,12 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/mixin-object": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", - "dev": true, "dependencies": { "for-in": "^0.1.3", "is-extendable": "^0.1.1" @@ -12610,7 +11667,6 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -12618,8 +11674,7 @@ "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 + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "node_modules/ms": { "version": "2.1.2", @@ -12630,7 +11685,6 @@ "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -12643,7 +11697,6 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -12654,8 +11707,7 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/negotiator": { "version": "0.6.3", @@ -12668,14 +11720,12 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -12704,7 +11754,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, "engines": { "node": ">= 6.13.0" } @@ -12712,14 +11761,12 @@ "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node_modules/node-releases": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "node_modules/nodemon": { "version": "2.0.20", @@ -12786,7 +11833,6 @@ "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" } @@ -12795,7 +11841,6 @@ "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" }, @@ -12807,7 +11852,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, "dependencies": { "boolbase": "^1.0.0" }, @@ -12818,8 +11862,7 @@ "node_modules/nwsapi": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", - "dev": true + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" }, "node_modules/oauth": { "version": "0.9.15", @@ -12830,7 +11873,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -12847,7 +11889,6 @@ "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" } @@ -12856,7 +11897,6 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -12874,7 +11914,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -12888,7 +11927,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -12905,7 +11943,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", - "dev": true, "dependencies": { "define-properties": "^1.1.4", "es-abstract": "^1.19.5" @@ -12918,7 +11955,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -12934,8 +11970,7 @@ "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "node_modules/on-finished": { "version": "2.4.1", @@ -12960,7 +11995,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -12969,7 +12003,6 @@ "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" }, @@ -12984,7 +12017,6 @@ "version": "8.4.0", "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -13001,7 +12033,6 @@ "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", @@ -13018,7 +12049,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -13027,7 +12057,6 @@ "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" }, @@ -13042,7 +12071,6 @@ "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" }, @@ -13054,7 +12082,6 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" @@ -13067,7 +12094,6 @@ "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" } @@ -13075,14 +12101,12 @@ "node_modules/packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", - "dev": true + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -13092,7 +12116,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -13104,7 +12127,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -13122,7 +12144,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -13130,8 +12151,7 @@ "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "node_modules/parseurl": { "version": "1.3.3", @@ -13145,7 +12165,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -13209,7 +12228,6 @@ "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" } @@ -13218,7 +12236,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -13227,7 +12244,6 @@ "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" } @@ -13235,8 +12251,7 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -13247,7 +12262,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -13260,14 +12274,12 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "node_modules/pg": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/pg/-/pg-8.8.0.tgz", "integrity": "sha512-UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw==", - "dev": true, "dependencies": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", @@ -13292,14 +12304,12 @@ "node_modules/pg-connection-string": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==", - "dev": true + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" }, "node_modules/pg-int8": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "dev": true, "engines": { "node": ">=4.0.0" } @@ -13308,7 +12318,6 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", - "dev": true, "peerDependencies": { "pg": ">=8.0" } @@ -13316,14 +12325,12 @@ "node_modules/pg-protocol": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==", - "dev": true + "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" }, "node_modules/pg-types": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dev": true, "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -13339,7 +12346,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "dev": true, "dependencies": { "split2": "^4.1.0" } @@ -13347,14 +12353,12 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -13366,7 +12370,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, "engines": { "node": ">= 6" } @@ -13375,7 +12378,6 @@ "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" }, @@ -13387,7 +12389,6 @@ "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -13411,7 +12412,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, "engines": { "node": "^10 || ^12 || >= 14" }, @@ -13423,7 +12423,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -13440,7 +12439,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -13455,7 +12453,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, "dependencies": { "icss-utils": "^5.0.0" }, @@ -13470,7 +12467,6 @@ "version": "6.0.10", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -13482,14 +12478,12 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "dev": true, "engines": { "node": ">=4" } @@ -13498,7 +12492,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -13507,7 +12500,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -13516,7 +12508,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dev": true, "dependencies": { "xtend": "^4.0.0" }, @@ -13528,7 +12519,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -13537,7 +12527,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" @@ -13547,7 +12536,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -13561,7 +12549,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -13572,20 +12559,17 @@ "node_modules/pretty-format/node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "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 + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "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" } @@ -13594,7 +12578,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -13607,7 +12590,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -13617,8 +12599,7 @@ "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/proxy-addr": { "version": "2.0.7", @@ -13635,14 +12616,12 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "node_modules/pstree.remy": { "version": "1.1.8", @@ -13654,7 +12633,6 @@ "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" @@ -13664,7 +12642,6 @@ "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" } @@ -13673,7 +12650,6 @@ "version": "14.4.1", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-14.4.1.tgz", "integrity": "sha512-+H0Gm84aXUvSLdSiDROtLlOofftClgw2TdceMvvCU9UvMryappoeS3+eOLfKvoy4sm8B8MWnYmPhWxVFudAOFQ==", - "dev": true, "hasInstallScript": true, "dependencies": { "cross-fetch": "3.1.5", @@ -13697,7 +12673,6 @@ "version": "8.7.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", - "dev": true, "engines": { "node": ">=10.0.0" }, @@ -13731,14 +12706,12 @@ "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -13758,7 +12731,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -13811,14 +12783,12 @@ "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/react-redux": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.4.tgz", "integrity": "sha512-yMfQ7mX6bWuicz2fids6cR1YT59VTuT8MKyyE310wJQlINKENCeT1UcPdEiX6znI5tF8zXyJ/VYvDgeGuaaNwQ==", - "dev": true, "dependencies": { "@babel/runtime": "^7.12.1", "@types/hoist-non-react-statics": "^3.3.1", @@ -13887,7 +12857,6 @@ "version": "16.15.0", "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", - "dev": true, "dependencies": { "object-assign": "^4.1.1", "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" @@ -13900,7 +12869,6 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.2.0.tgz", "integrity": "sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==", - "dev": true, "dependencies": { "react-is": "^18.2.0", "react-shallow-renderer": "^16.15.0", @@ -13914,7 +12882,6 @@ "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "dev": true, "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -13930,7 +12897,6 @@ "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", @@ -13944,7 +12910,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -13956,7 +12921,6 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, "dependencies": { "resolve": "^1.9.0" }, @@ -13968,7 +12932,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -13981,7 +12944,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", - "dev": true, "dependencies": { "@babel/runtime": "^7.9.2" } @@ -13990,7 +12952,6 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/redux-mock-store/-/redux-mock-store-1.5.4.tgz", "integrity": "sha512-xmcA0O/tjCLXhh9Fuiq6pMrJCwFRaouA8436zcikdIpYWWCjU76CRk+i2bHx8EeiSiMGnB85/lZdU3wIJVXHTA==", - "dev": true, "dependencies": { "lodash.isplainobject": "^4.0.6" } @@ -13999,7 +12960,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", - "dev": true, "peerDependencies": { "redux": "^4" } @@ -14007,14 +12967,12 @@ "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, "dependencies": { "regenerate": "^1.4.2" }, @@ -14025,14 +12983,12 @@ "node_modules/regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "node_modules/regenerator-transform": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" } @@ -14041,7 +12997,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -14058,7 +13013,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, "engines": { "node": ">=8" }, @@ -14070,7 +13024,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", - "dev": true, "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", @@ -14086,14 +13039,12 @@ "node_modules/regjsgen": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "dev": true + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, "dependencies": { "jsesc": "~0.5.0" }, @@ -14105,7 +13056,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, "bin": { "jsesc": "bin/jsesc" } @@ -14114,7 +13064,6 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true, "engines": { "node": ">= 0.10" } @@ -14123,7 +13072,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", @@ -14136,7 +13084,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14145,7 +13092,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14153,20 +13099,17 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/reselect": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", - "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", - "dev": true + "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==" }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -14183,7 +13126,6 @@ "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" }, @@ -14195,7 +13137,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", "integrity": "sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==", - "dev": true, "dependencies": { "expand-tilde": "^1.2.2", "global-modules": "^0.2.3" @@ -14208,7 +13149,6 @@ "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" } @@ -14217,7 +13157,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true, "engines": { "node": ">=10" } @@ -14226,7 +13165,6 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, "engines": { "node": ">= 4" } @@ -14235,7 +13173,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -14245,7 +13182,6 @@ "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" }, @@ -14260,7 +13196,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -14283,7 +13218,6 @@ "version": "7.5.6", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "dev": true, "dependencies": { "tslib": "^2.1.0" } @@ -14291,14 +13225,12 @@ "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 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -14317,7 +13249,6 @@ "version": "1.54.9", "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.9.tgz", "integrity": "sha512-xb1hjASzEH+0L0WI9oFjqhRi51t/gagWnxLiwUNMltA0Ab6jIDkAacgKiGYKM9Jhy109osM7woEEai6SXeJo5Q==", - "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -14334,7 +13265,6 @@ "version": "13.0.2", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", - "dev": true, "dependencies": { "klona": "^2.0.4", "neo-async": "^2.6.2" @@ -14372,7 +13302,6 @@ "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" }, @@ -14392,7 +13321,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, "dependencies": { "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", @@ -14409,14 +13337,12 @@ "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, "node_modules/selfsigned": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, "dependencies": { "node-forge": "^1" }, @@ -14428,7 +13354,6 @@ "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" } @@ -14478,7 +13403,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, "dependencies": { "randombytes": "^2.1.0" } @@ -14487,7 +13411,6 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -14505,7 +13428,6 @@ "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" } @@ -14514,7 +13436,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -14523,7 +13444,6 @@ "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -14537,26 +13457,22 @@ "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -14584,7 +13500,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, "dependencies": { "kind-of": "^6.0.2" }, @@ -14596,14 +13511,12 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "dev": true, "peer": true }, "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" }, @@ -14615,7 +13528,6 @@ "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" } @@ -14636,8 +13548,7 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/simple-update-notifier": { "version": "1.0.7", @@ -14663,14 +13574,12 @@ "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "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" } @@ -14679,7 +13588,6 @@ "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -14690,7 +13598,6 @@ "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" } @@ -14699,7 +13606,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14708,7 +13614,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -14718,7 +13623,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-6.0.2.tgz", "integrity": "sha512-+YJtx0dvy2wt304MrHD//tASc84zinBUYU1jacPBzrjhZUd7RsDo25krxr4HUHAQzEQFuMAs4/p+yLYU5ciZ1w==", - "dev": true, "dependencies": { "exit": "^0.1.2", "signal-exit": "^3.0.6", @@ -14729,7 +13633,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -14745,7 +13648,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -14759,7 +13661,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", - "dev": true, "engines": { "node": ">= 10.x" } @@ -14767,14 +13668,12 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -14786,7 +13685,6 @@ "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" } @@ -14803,7 +13701,6 @@ "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==", - "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -14812,7 +13709,6 @@ "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", @@ -14832,7 +13728,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -14845,7 +13740,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14859,7 +13753,6 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -14878,7 +13771,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -14892,7 +13784,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -14906,7 +13797,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -14918,7 +13808,6 @@ "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" } @@ -14927,7 +13816,6 @@ "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" } @@ -14936,7 +13824,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, "dependencies": { "min-indent": "^1.0.0" }, @@ -14948,7 +13835,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -14960,7 +13846,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, "engines": { "node": ">= 12.13.0" }, @@ -14976,7 +13861,6 @@ "version": "5.3.6", "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz", "integrity": "sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==", - "dev": true, "hasInstallScript": true, "peer": true, "dependencies": { @@ -15008,20 +13892,17 @@ "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", - "dev": true, "peer": true }, "node_modules/stylis": { "version": "4.0.13", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", - "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==", - "dev": true + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" }, "node_modules/superagent": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz", "integrity": "sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg==", - "dev": true, "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.3", @@ -15043,7 +13924,6 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, "bin": { "mime": "cli.js" }, @@ -15055,7 +13935,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -15070,7 +13949,6 @@ "version": "6.2.4", "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz", "integrity": "sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA==", - "dev": true, "dependencies": { "methods": "^1.1.2", "superagent": "^8.0.0" @@ -15083,7 +13961,6 @@ "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" }, @@ -15095,7 +13972,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -15108,7 +13984,6 @@ "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" } @@ -15117,7 +13992,6 @@ "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" }, @@ -15129,7 +14003,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -15140,14 +14013,12 @@ "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 + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -15156,7 +14027,6 @@ "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", @@ -15168,7 +14038,6 @@ "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", @@ -15184,7 +14053,6 @@ "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" @@ -15200,7 +14068,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", - "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -15218,7 +14085,6 @@ "version": "5.3.6", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.14", "jest-worker": "^27.4.5", @@ -15252,7 +14118,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -15269,14 +14134,12 @@ "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "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", @@ -15289,32 +14152,27 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, "engines": { "node": ">=4" } @@ -15323,7 +14181,6 @@ "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" }, @@ -15355,7 +14212,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -15375,7 +14231,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, "bin": { "tree-kill": "cli.js" } @@ -15384,7 +14239,6 @@ "version": "9.4.1", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", - "dev": true, "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", @@ -15403,7 +14257,6 @@ "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" }, @@ -15418,7 +14271,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15434,7 +14286,6 @@ "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" }, @@ -15445,14 +14296,12 @@ "node_modules/ts-loader/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/ts-loader/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" } @@ -15461,7 +14310,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -15476,7 +14324,6 @@ "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" }, @@ -15537,8 +14384,7 @@ "node_modules/tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "node_modules/tsscmp": { "version": "1.0.6", @@ -15552,7 +14398,6 @@ "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, "dependencies": { "tslib": "^1.8.1" }, @@ -15566,14 +14411,12 @@ "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, "dependencies": { "prelude-ls": "~1.1.2" }, @@ -15585,7 +14428,6 @@ "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" } @@ -15594,7 +14436,6 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, "engines": { "node": ">=10" }, @@ -15635,7 +14476,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -15650,7 +14490,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -15666,7 +14505,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, "engines": { "node": ">=4" } @@ -15675,7 +14513,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -15688,7 +14525,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true, "engines": { "node": ">=4" } @@ -15697,7 +14533,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, "engines": { "node": ">=4" } @@ -15706,7 +14541,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, "engines": { "node": ">= 4.0.0" } @@ -15723,7 +14557,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz", "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -15749,7 +14582,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -15758,7 +14590,6 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -15768,7 +14599,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "dev": true, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } @@ -15776,14 +14606,12 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" }, "node_modules/utils-merge": { "version": "1.0.1", @@ -15797,7 +14625,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -15811,7 +14638,6 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -15833,7 +14659,6 @@ "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" } @@ -15842,7 +14667,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", - "dev": true, "dependencies": { "xml-name-validator": "^4.0.0" }, @@ -15854,7 +14678,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "dev": true, "dependencies": { "axios": "^0.25.0", "joi": "^17.6.0", @@ -15873,7 +14696,6 @@ "version": "0.25.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dev": true, "dependencies": { "follow-redirects": "^1.14.7" } @@ -15882,7 +14704,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, "dependencies": { "makeerror": "1.0.12" } @@ -15891,7 +14712,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -15904,7 +14724,6 @@ "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, "dependencies": { "minimalistic-assert": "^1.0.0" } @@ -15918,7 +14737,6 @@ "version": "5.74.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", - "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -15965,7 +14783,6 @@ "version": "4.10.0", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^1.2.0", @@ -16012,7 +14829,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, "engines": { "node": ">= 10" } @@ -16021,7 +14837,6 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", @@ -16044,7 +14859,6 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -16060,7 +14874,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -16071,14 +14884,12 @@ "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/webpack-dev-middleware/node_modules/schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -16097,7 +14908,6 @@ "version": "4.11.1", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "dev": true, "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -16152,7 +14962,6 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -16168,7 +14977,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -16180,7 +14988,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true, "engines": { "node": ">= 10" } @@ -16188,14 +14995,12 @@ "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/webpack-dev-server/node_modules/schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -16214,7 +15019,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" @@ -16227,7 +15031,6 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, "engines": { "node": ">=10.13.0" } @@ -16236,7 +15039,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -16254,7 +15056,6 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -16268,7 +15069,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -16277,7 +15077,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, "dependencies": { "iconv-lite": "0.6.3" }, @@ -16289,7 +15088,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -16301,7 +15099,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true, "engines": { "node": ">=12" } @@ -16319,7 +15116,6 @@ "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" }, @@ -16334,7 +15130,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -16349,14 +15144,12 @@ "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" }, "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" } @@ -16365,7 +15158,6 @@ "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", @@ -16382,7 +15174,6 @@ "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" }, @@ -16397,7 +15188,6 @@ "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" }, @@ -16408,20 +15198,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -16434,7 +15221,6 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "dev": true, "engines": { "node": ">=10.0.0" }, @@ -16455,7 +15241,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, "engines": { "node": ">=12" } @@ -16463,14 +15248,12 @@ "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 + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, "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" } @@ -16479,7 +15262,6 @@ "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" } @@ -16487,14 +15269,12 @@ "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 + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, "engines": { "node": ">= 6" } @@ -16503,7 +15283,6 @@ "version": "17.5.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -16521,7 +15300,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "engines": { "node": ">=12" } @@ -16530,7 +15308,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -16548,7 +15325,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, @@ -16561,14 +15337,12 @@ "@adobe/css-tools": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", - "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==", - "dev": true + "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==" }, "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -16578,7 +15352,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, "requires": { "@babel/highlight": "^7.18.6" } @@ -16586,14 +15359,12 @@ "@babel/compat-data": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.1.tgz", - "integrity": "sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==", - "dev": true + "integrity": "sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==" }, "@babel/core": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.1.tgz", "integrity": "sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw==", - "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -16616,7 +15387,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", - "dev": true, "requires": { "@babel/types": "^7.19.0", "@jridgewell/gen-mapping": "^0.3.2", @@ -16627,7 +15397,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -16640,7 +15409,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -16649,7 +15417,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, "requires": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" @@ -16659,7 +15426,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz", "integrity": "sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==", - "dev": true, "requires": { "@babel/compat-data": "^7.19.1", "@babel/helper-validator-option": "^7.18.6", @@ -16671,7 +15437,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -16686,7 +15451,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "regexpu-core": "^5.1.0" @@ -16696,7 +15460,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -16709,14 +15472,12 @@ "@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-explode-assignable-expression": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -16725,7 +15486,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, "requires": { "@babel/template": "^7.18.10", "@babel/types": "^7.19.0" @@ -16735,7 +15495,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -16744,7 +15503,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, "requires": { "@babel/types": "^7.18.9" } @@ -16753,7 +15511,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -16762,7 +15519,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -16778,7 +15534,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -16786,14 +15541,12 @@ "@babel/helper-plugin-utils": { "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", - "dev": true + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" }, "@babel/helper-remap-async-to-generator": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -16805,7 +15558,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.18.9", @@ -16818,7 +15570,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -16827,7 +15578,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", - "dev": true, "requires": { "@babel/types": "^7.18.9" } @@ -16836,7 +15586,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -16844,26 +15593,22 @@ "@babel/helper-string-parser": { "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", - "dev": true + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" }, "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helper-wrap-function": { "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "dev": true, "requires": { "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", @@ -16875,7 +15620,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", - "dev": true, "requires": { "@babel/template": "^7.18.10", "@babel/traverse": "^7.19.0", @@ -16886,7 +15630,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -16896,14 +15639,12 @@ "@babel/parser": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz", - "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==", - "dev": true + "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -16912,7 +15653,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -16923,7 +15663,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.19.0", @@ -16935,7 +15674,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -16945,7 +15683,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -16956,7 +15693,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -16966,7 +15702,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -16976,7 +15711,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -16986,7 +15720,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -16996,7 +15729,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -17006,7 +15738,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -17016,7 +15747,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", - "dev": true, "requires": { "@babel/compat-data": "^7.18.8", "@babel/helper-compilation-targets": "^7.18.9", @@ -17029,7 +15759,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -17039,7 +15768,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -17050,7 +15778,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -17060,7 +15787,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -17072,7 +15798,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -17082,7 +15807,6 @@ "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, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -17091,7 +15815,6 @@ "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, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -17100,7 +15823,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } @@ -17109,7 +15831,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -17118,7 +15839,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -17127,7 +15847,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" } @@ -17136,7 +15855,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17145,7 +15863,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17154,7 +15871,6 @@ "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, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -17163,7 +15879,6 @@ "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, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -17172,7 +15887,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17181,7 +15895,6 @@ "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, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -17190,7 +15903,6 @@ "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, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -17199,7 +15911,6 @@ "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, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -17208,7 +15919,6 @@ "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, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -17217,7 +15927,6 @@ "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, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -17226,7 +15935,6 @@ "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, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -17235,7 +15943,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -17244,7 +15951,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -17253,7 +15959,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17262,7 +15967,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17271,7 +15975,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, "requires": { "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -17282,7 +15985,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17291,7 +15993,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -17300,7 +16001,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-compilation-targets": "^7.19.0", @@ -17317,7 +16017,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -17326,7 +16025,6 @@ "version": "7.18.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz", "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -17335,7 +16033,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -17345,7 +16042,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -17354,7 +16050,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -17364,7 +16059,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.19.0", "@babel/plugin-syntax-flow": "^7.18.6" @@ -17374,7 +16068,6 @@ "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17383,7 +16076,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", @@ -17394,7 +16086,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -17403,7 +16094,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17412,7 +16102,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, "requires": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -17423,7 +16112,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, "requires": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -17435,7 +16123,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", - "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-module-transforms": "^7.19.0", @@ -17448,7 +16135,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, "requires": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -17458,7 +16144,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.19.0", "@babel/helper-plugin-utils": "^7.19.0" @@ -17468,7 +16153,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17477,7 +16161,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" @@ -17487,7 +16170,6 @@ "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17496,7 +16178,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17505,7 +16186,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17514,7 +16194,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", @@ -17527,7 +16206,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, "requires": { "@babel/plugin-transform-react-jsx": "^7.18.6" } @@ -17536,7 +16214,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -17546,7 +16223,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" @@ -17556,7 +16232,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17565,7 +16240,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17574,7 +16248,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.19.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" @@ -17584,7 +16257,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -17593,7 +16265,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -17602,7 +16273,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -17611,7 +16281,6 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -17620,7 +16289,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -17630,7 +16298,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.1.tgz", "integrity": "sha512-c8B2c6D16Lp+Nt6HcD+nHl0VbPKVnNPTpszahuxJJnurfMtKeZ80A+qUv48Y7wqvS+dTFuLuaM9oYxyNHbCLWA==", - "dev": true, "requires": { "@babel/compat-data": "^7.19.1", "@babel/helper-compilation-targets": "^7.19.1", @@ -17713,7 +16380,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-validator-option": "^7.18.6", @@ -17724,7 +16390,6 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -17737,7 +16402,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-validator-option": "^7.18.6", @@ -17751,7 +16415,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", - "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } @@ -17760,7 +16423,6 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, "requires": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.18.10", @@ -17771,7 +16433,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz", "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==", - "dev": true, "requires": { "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.19.0", @@ -17789,7 +16450,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", - "dev": true, "requires": { "@babel/helper-string-parser": "^7.18.10", "@babel/helper-validator-identifier": "^7.18.6", @@ -17799,8 +16459,7 @@ "@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 + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, "@cspotcode/source-map-support": { "version": "0.8.1", @@ -17824,14 +16483,12 @@ "@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" }, "@emotion/babel-plugin": { "version": "11.10.2", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz", "integrity": "sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA==", - "dev": true, "requires": { "@babel/helper-module-imports": "^7.16.7", "@babel/plugin-syntax-jsx": "^7.17.12", @@ -17850,14 +16507,12 @@ "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 + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" } } }, @@ -17865,7 +16520,6 @@ "version": "11.10.3", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz", "integrity": "sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==", - "dev": true, "requires": { "@emotion/memoize": "^0.8.0", "@emotion/sheet": "^1.2.0", @@ -17877,14 +16531,12 @@ "@emotion/hash": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==", - "dev": true + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" }, "@emotion/is-prop-valid": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", - "dev": true, "requires": { "@emotion/memoize": "^0.8.0" } @@ -17892,14 +16544,12 @@ "@emotion/memoize": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==", - "dev": true + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" }, "@emotion/react": { "version": "11.10.4", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.4.tgz", "integrity": "sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA==", - "dev": true, "requires": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.10.0", @@ -17915,7 +16565,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz", "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==", - "dev": true, "requires": { "@emotion/hash": "^0.9.0", "@emotion/memoize": "^0.8.0", @@ -17927,14 +16576,12 @@ "@emotion/sheet": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz", - "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==", - "dev": true + "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==" }, "@emotion/styled": { "version": "11.10.4", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.4.tgz", "integrity": "sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ==", - "dev": true, "requires": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.10.0", @@ -17948,39 +16595,33 @@ "version": "0.8.5", "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", - "dev": true, "peer": true }, "@emotion/unitless": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==", - "dev": true + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" }, "@emotion/use-insertion-effect-with-fallbacks": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", - "dev": true, "requires": {} }, "@emotion/utils": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==", - "dev": true + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" }, "@emotion/weak-memoize": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==", - "dev": true + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" }, "@eslint/eslintrc": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", - "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -17996,14 +16637,12 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "globals": { "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, "requires": { "type-fest": "^0.20.2" } @@ -18012,7 +16651,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -18020,22 +16658,19 @@ "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" } } }, "@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" }, "@hapi/topo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, "requires": { "@hapi/hoek": "^9.0.0" } @@ -18044,7 +16679,6 @@ "version": "0.10.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.5.tgz", "integrity": "sha512-XVVDtp+dVvRxMoxSiSfasYaG02VEe1qH5cKgMQJWhol6HwzbcqoCMJi8dAGoYAO57jhUyhI6cWuRiTcRaDaYug==", - "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -18054,26 +16688,22 @@ "@humanwhocodes/gitignore-to-minimatch": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==" }, "@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, "@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, "requires": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -18085,14 +16715,12 @@ "@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" }, "@jest/console": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.0.3.tgz", "integrity": "sha512-cGg0r+klVHSYnfE977S9wmpuQ9L+iYuYgL+5bPXiUlUynLLYunRxswEmhBzvrSKGof5AKiHuTTmUKAqRcDY9dg==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@types/node": "*", @@ -18106,7 +16734,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -18115,7 +16742,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18125,7 +16751,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -18133,20 +16758,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -18157,7 +16779,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.0.3.tgz", "integrity": "sha512-1d0hLbOrM1qQE3eP3DtakeMbKTcXiXP3afWxqz103xPyddS2NhnNghS7MaXx1dcDt4/6p4nlhmeILo2ofgi8cQ==", - "dev": true, "requires": { "@jest/console": "^29.0.3", "@jest/reporters": "^29.0.3", @@ -18193,7 +16814,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -18202,7 +16822,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18212,7 +16831,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -18220,20 +16838,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "pretty-format": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "requires": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -18243,8 +16858,7 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, @@ -18252,7 +16866,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -18263,7 +16876,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", - "dev": true, "requires": { "@jest/fake-timers": "^28.1.3", "@jest/types": "^28.1.3", @@ -18275,7 +16887,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, "requires": { "@sinclair/typebox": "^0.24.1" } @@ -18284,7 +16895,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, "requires": { "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -18298,7 +16908,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -18307,7 +16916,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18317,7 +16925,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -18325,20 +16932,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -18349,7 +16953,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.0.3.tgz", "integrity": "sha512-6W7K+fsI23FQ01H/BWccPyDZFrnU9QlzDcKOjrNVU5L8yUORFAJJIpmyxWPW70+X624KUNqzZwPThPMX28aXEQ==", - "dev": true, "requires": { "expect": "^29.0.3", "jest-snapshot": "^29.0.3" @@ -18359,7 +16962,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.0.3.tgz", "integrity": "sha512-i1xUkau7K/63MpdwiRqaxgZOjxYs4f0WMTGJnYwUKubsNRZSeQbLorS7+I4uXVF9KQ5r61BUPAUMZ7Lf66l64Q==", - "dev": true, "requires": { "jest-get-type": "^29.0.0" } @@ -18368,7 +16970,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", - "dev": true, "requires": { "@jest/types": "^28.1.3", "@sinonjs/fake-timers": "^9.1.2", @@ -18382,7 +16983,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, "requires": { "@sinclair/typebox": "^0.24.1" } @@ -18391,7 +16991,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, "requires": { "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -18405,7 +17004,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -18414,7 +17012,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18424,7 +17021,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -18432,20 +17028,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "jest-message-util": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@jest/types": "^28.1.3", @@ -18462,7 +17055,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, "requires": { "@jest/types": "^28.1.3", "@types/node": "*", @@ -18476,7 +17068,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, "requires": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -18487,8 +17078,7 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, @@ -18496,7 +17086,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -18507,7 +17096,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.0.3.tgz", "integrity": "sha512-YqGHT65rFY2siPIHHFjuCGUsbzRjdqkwbat+Of6DmYRg5shIXXrLdZoVE/+TJ9O1dsKsFmYhU58JvIbZRU1Z9w==", - "dev": true, "requires": { "@jest/environment": "^29.0.3", "@jest/expect": "^29.0.3", @@ -18519,7 +17107,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.0.3.tgz", "integrity": "sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==", - "dev": true, "requires": { "@jest/fake-timers": "^29.0.3", "@jest/types": "^29.0.3", @@ -18531,7 +17118,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.0.3.tgz", "integrity": "sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@sinonjs/fake-timers": "^9.1.2", @@ -18545,7 +17131,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.0.3.tgz", "integrity": "sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@types/node": "*" @@ -18557,7 +17142,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.0.3.tgz", "integrity": "sha512-3+QU3d4aiyOWfmk1obDerie4XNCaD5Xo1IlKNde2yGEi02WQD+ZQD0i5Hgqm1e73sMV7kw6pMlCnprtEwEVwxw==", - "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.0.3", @@ -18590,7 +17174,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -18599,7 +17182,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18609,7 +17191,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -18617,20 +17198,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "jest-worker": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.0.3.tgz", "integrity": "sha512-Tl/YWUugQOjoTYwjKdfJWkSOfhufJHO5LhXTSZC3TRoQKO+fuXnZAdoXXBlpLXKGODBL3OvdUasfDD4PcMe6ng==", - "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -18641,7 +17219,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -18652,7 +17229,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -18663,7 +17239,6 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "dev": true, "requires": { "@sinclair/typebox": "^0.24.1" } @@ -18672,7 +17247,6 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.0.0.tgz", "integrity": "sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==", - "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.15", "callsites": "^3.0.0", @@ -18683,7 +17257,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.0.3.tgz", "integrity": "sha512-vViVnQjCgTmbhDKEonKJPtcFe9G/CJO4/Np4XwYJah+lF2oI7KKeRp8t1dFvv44wN2NdbDb/qC6pi++Vpp0Dlg==", - "dev": true, "requires": { "@jest/console": "^29.0.3", "@jest/types": "^29.0.3", @@ -18695,7 +17268,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.0.3.tgz", "integrity": "sha512-Hf4+xYSWZdxTNnhDykr8JBs0yBN/nxOXyUQWfotBUqqy0LF9vzcFB0jm/EDNZCx587znLWTIgxcokW7WeZMobQ==", - "dev": true, "requires": { "@jest/test-result": "^29.0.3", "graceful-fs": "^4.2.9", @@ -18707,7 +17279,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.0.3.tgz", "integrity": "sha512-C5ihFTRYaGDbi/xbRQRdbo5ddGtI4VSpmL6AIcZxdhwLbXMa7PcXxxqyI91vGOFHnn5aVM3WYnYKCHEqmLVGzg==", - "dev": true, "requires": { "@babel/core": "^7.11.6", "@jest/types": "^29.0.3", @@ -18730,7 +17301,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -18739,7 +17309,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18749,7 +17318,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -18757,20 +17325,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -18781,7 +17346,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.0.3.tgz", "integrity": "sha512-coBJmOQvurXjN1Hh5PzF7cmsod0zLIOXpP8KD161mqNlroMhLcwpODiEzi7ZsRl5Z/AIuxpeNm8DCl43F4kz8A==", - "dev": true, "requires": { "@jest/schemas": "^29.0.0", "@types/istanbul-lib-coverage": "^2.0.0", @@ -18795,7 +17359,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -18804,7 +17367,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18814,7 +17376,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -18822,20 +17383,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -18846,7 +17404,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -18860,14 +17417,12 @@ "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/source-map": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -18877,7 +17432,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -18895,7 +17449,6 @@ "version": "0.3.15", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -18904,14 +17457,12 @@ "@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "@mui/base": { "version": "5.0.0-alpha.98", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.98.tgz", "integrity": "sha512-c0U51+K2m57MASpRrmNs6qTXSvktDbVcSjD8zCRPbfuwYWERGGwNxwM3/jsBa4dSojTSmLPnOBFDypl74Ds6yQ==", - "dev": true, "requires": { "@babel/runtime": "^7.19.0", "@emotion/is-prop-valid": "^1.2.0", @@ -18926,14 +17477,12 @@ "@mui/core-downloads-tracker": { "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.6.tgz", - "integrity": "sha512-dmyQBqrKmVU6yCSM4GGal5qNXpViXX+/V1t0GA1A5i9QF5Gx6noV/cw0hrSS2ffLT8L2oScq1oTdA6NVIiQ8lg==", - "dev": true + "integrity": "sha512-dmyQBqrKmVU6yCSM4GGal5qNXpViXX+/V1t0GA1A5i9QF5Gx6noV/cw0hrSS2ffLT8L2oScq1oTdA6NVIiQ8lg==" }, "@mui/icons-material": { "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.10.6.tgz", "integrity": "sha512-QwxdRmLA46S94B0hExPDx0td+A2unF+33bQ6Cs+lNpJKVsm1YeHwNdYXYcnpWeHeQQ07055OXl7IB2GKDd0MfA==", - "dev": true, "requires": { "@babel/runtime": "^7.19.0" } @@ -18942,7 +17491,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.6.tgz", "integrity": "sha512-QilW5PAAGSQdN7Cpp4rwSQ1doJAt3ca1a2PHZtr8RLVlpHnXb+qQ8CeDo9+9V2fK5CDNdtTN1F+iJKO43aFBpQ==", - "dev": true, "requires": { "@babel/runtime": "^7.19.0", "@mui/base": "5.0.0-alpha.98", @@ -18962,7 +17510,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.6.tgz", "integrity": "sha512-I/W0QyTLRdEx6py3lKAquKO/rNF/7j+nIOM/xCyI9kU0fcotVTcTY08mKMsS6vrzdWpi6pAkD0wP0KwWy5R5VA==", - "dev": true, "requires": { "@babel/runtime": "^7.19.0", "@mui/utils": "^5.10.6", @@ -18973,7 +17520,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.6.tgz", "integrity": "sha512-OnVw5xnO4l0XzlJFhKif/RlLenBNhyEQQlSTwB9ApSWB05UAU5ZSbjNsRfyEKvgmQ/fPa+MqPD/dzxbIRCwyeg==", - "dev": true, "requires": { "@babel/runtime": "^7.19.0", "@emotion/cache": "^11.10.3", @@ -18985,7 +17531,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/styled-engine-sc/-/styled-engine-sc-5.10.6.tgz", "integrity": "sha512-AQIa478w3UI8gmlht7orp96tEJbEN26FiEs9Aee6E+iVTnoyT3b6V/JapgKlITo6rn7tYTSX9iJYwnDTMhbzTg==", - "dev": true, "requires": { "@babel/runtime": "^7.19.0", "prop-types": "^15.8.1" @@ -18995,7 +17540,6 @@ "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.6.tgz", "integrity": "sha512-HfQVX7e2xpQ3jtdB/WwtkFVtozMOozyN575/63u8ILHkE8wGDhblmCieAsnyJPFbm7WBW5PCMyzmfr4QyKLaYg==", - "dev": true, "requires": { "@babel/runtime": "^7.19.0", "@mui/private-theming": "^5.10.6", @@ -19011,14 +17555,12 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz", "integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==", - "dev": true, "requires": {} }, "@mui/utils": { "version": "5.10.6", "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.6.tgz", "integrity": "sha512-g0Qs8xN/MW2M3fLL8197h5J2VB9U+49fLlnKKqC6zy/yus5cZwdT+Gwec+wUMxgwQoxMDn+J8oDWAn28kEOR/Q==", - "dev": true, "requires": { "@babel/runtime": "^7.19.0", "@types/prop-types": "^15.7.5", @@ -19031,7 +17573,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -19040,14 +17581,12 @@ "@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -19056,14 +17595,12 @@ "@popperjs/core": { "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", - "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", - "dev": true + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" }, "@reduxjs/toolkit": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.5.tgz", "integrity": "sha512-f4D5EXO7A7Xq35T0zRbWq5kJQyXzzscnHKmjnu2+37B3rwHU6mX9PYlbfXdnxcY6P/7zfmjhgan0Z+yuOfeBmA==", - "dev": true, "requires": { "immer": "^9.0.7", "redux": "^4.1.2", @@ -19080,7 +17617,6 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dev": true, "requires": { "@hapi/hoek": "^9.0.0" } @@ -19088,26 +17624,22 @@ "@sideway/formula": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", - "dev": true + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" }, "@sideway/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "@sinclair/typebox": { "version": "0.24.42", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.42.tgz", - "integrity": "sha512-d+2AtrHGyWek2u2ITF0lHRIv6Tt7X0dEHW+0rP+5aDCEjC3fiN2RBjrLD0yU0at52BcZbRGxLbAtXiR0hFCjYw==", - "dev": true + "integrity": "sha512-d+2AtrHGyWek2u2ITF0lHRIv6Tt7X0dEHW+0rP+5aDCEjC3fiN2RBjrLD0yU0at52BcZbRGxLbAtXiR0hFCjYw==" }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, "requires": { "type-detect": "4.0.8" } @@ -19116,7 +17648,6 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" } @@ -19125,7 +17656,6 @@ "version": "8.18.1", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.18.1.tgz", "integrity": "sha512-oEvsm2B/WtcHKE+IcEeeCqNU/ltFGaVyGbpcm4g/2ytuT49jrlH9x5qRKL/H3A6yfM4YAbSbC0ceT5+9CEXnLg==", - "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -19141,7 +17671,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -19150,7 +17679,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -19160,7 +17688,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -19168,20 +17695,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -19192,7 +17716,6 @@ "version": "5.16.5", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", - "dev": true, "requires": { "@adobe/css-tools": "^4.0.1", "@babel/runtime": "^7.9.2", @@ -19209,7 +17732,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -19218,7 +17740,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -19228,7 +17749,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -19236,20 +17756,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -19260,7 +17777,6 @@ "version": "13.4.0", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", - "dev": true, "requires": { "@babel/runtime": "^7.12.5", "@testing-library/dom": "^8.5.0", @@ -19271,14 +17787,12 @@ "version": "14.4.3", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.4.3.tgz", "integrity": "sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==", - "dev": true, "requires": {} }, "@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" }, "@tsconfig/node10": { "version": "1.0.9", @@ -19303,14 +17817,12 @@ "@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", - "dev": true + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" }, "@types/babel__core": { "version": "7.1.19", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "dev": true, "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", @@ -19323,7 +17835,6 @@ "version": "7.6.4", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, "requires": { "@babel/types": "^7.0.0" } @@ -19332,7 +17843,6 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -19342,7 +17852,6 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz", "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==", - "dev": true, "requires": { "@babel/types": "^7.3.0" } @@ -19351,7 +17860,6 @@ "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, "requires": { "@types/connect": "*", "@types/node": "*" @@ -19361,7 +17869,6 @@ "version": "3.5.10", "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, "requires": { "@types/node": "*" } @@ -19370,7 +17877,6 @@ "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, "requires": { "@types/node": "*" } @@ -19379,7 +17885,6 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, "requires": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -19389,7 +17894,6 @@ "version": "2.0.44", "resolved": "https://registry.npmjs.org/@types/cookie-session/-/cookie-session-2.0.44.tgz", "integrity": "sha512-3DheOZ41pql6raSIkqEPphJdhA2dX2bkS+s2Qacv8YMKkoCbAIEXbsDil7351ARzMqvfyDUGNeHGiRZveIzhqQ==", - "dev": true, "requires": { "@types/express": "*", "@types/keygrip": "*" @@ -19399,7 +17903,6 @@ "version": "8.4.6", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", - "dev": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" @@ -19409,7 +17912,6 @@ "version": "3.7.4", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, "requires": { "@types/eslint": "*", "@types/estree": "*" @@ -19418,14 +17920,12 @@ "@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "@types/express": { "version": "4.17.14", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "dev": true, "requires": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -19437,7 +17937,6 @@ "version": "4.17.31", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "dev": true, "requires": { "@types/node": "*", "@types/qs": "*", @@ -19448,7 +17947,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, "requires": { "@types/node": "*" } @@ -19456,14 +17954,12 @@ "@types/history": { "version": "4.7.11", "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", - "dev": true + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" }, "@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, "requires": { "@types/react": "*", "hoist-non-react-statics": "^3.3.0" @@ -19472,14 +17968,12 @@ "@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" }, "@types/http-proxy": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dev": true, "requires": { "@types/node": "*" } @@ -19487,14 +17981,12 @@ "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "@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, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -19503,7 +17995,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, "requires": { "@types/istanbul-lib-report": "*" } @@ -19512,7 +18003,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.0.3.tgz", "integrity": "sha512-F6ukyCTwbfsEX5F2YmVYmM5TcTHy1q9P5rWlRbrk56KyMh3v9xRGUO3aa8+SkvMi0SHXtASJv1283enXimC0Og==", - "dev": true, "requires": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -19521,14 +18011,12 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" }, "pretty-format": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "requires": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -19540,14 +18028,12 @@ "@types/js-cookie": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.2.tgz", - "integrity": "sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==", - "dev": true + "integrity": "sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==" }, "@types/jsdom": { "version": "16.2.15", "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz", "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==", - "dev": true, "requires": { "@types/node": "*", "@types/parse5": "^6.0.3", @@ -19557,20 +18043,17 @@ "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "@types/keygrip": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", - "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", - "dev": true + "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==" }, "@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "@types/node": { "version": "18.7.18", @@ -19581,7 +18064,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.1.tgz", "integrity": "sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==", - "dev": true, "requires": { "@types/node": "*" } @@ -19589,20 +18071,17 @@ "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "@types/parse5": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", - "dev": true + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==" }, "@types/passport": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.11.tgz", "integrity": "sha512-pz1cx9ptZvozyGKKKIPLcVDVHwae4hrH5d6g5J+DkMRRjR3cVETb4jMabhXAUbg3Ov7T22nFHEgaK2jj+5CBpw==", - "dev": true, "requires": { "@types/express": "*" } @@ -19611,7 +18090,6 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/passport-github2/-/passport-github2-1.2.5.tgz", "integrity": "sha512-+WLyrd8JPsCxroK34EjegR0j3FMxp6wqB9cw/sRCFkWT9qic1dymAn021gr336EpyjzdhjUd2KKrqyxvdFSvOA==", - "dev": true, "requires": { "@types/express": "*", "@types/passport": "*", @@ -19622,7 +18100,6 @@ "version": "1.4.11", "resolved": "https://registry.npmjs.org/@types/passport-oauth2/-/passport-oauth2-1.4.11.tgz", "integrity": "sha512-KUNwmGhe/3xPbjkzkPwwcPmyFwfyiSgtV1qOrPBLaU4i4q9GSCdAOyCbkFG0gUxAyEmYwqo9OAF/rjPjJ6ImdA==", - "dev": true, "requires": { "@types/express": "*", "@types/oauth": "*", @@ -19632,32 +18109,27 @@ "@types/prettier": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz", - "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==", - "dev": true + "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==" }, "@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" }, "@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "@types/react": { "version": "18.0.21", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", - "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -19668,7 +18140,6 @@ "version": "18.0.6", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", - "dev": true, "requires": { "@types/react": "*" } @@ -19677,7 +18148,6 @@ "version": "17.0.3", "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", - "dev": true, "requires": { "@types/react": "*" } @@ -19686,7 +18156,6 @@ "version": "5.1.19", "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.19.tgz", "integrity": "sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==", - "dev": true, "requires": { "@types/history": "^4.7.11", "@types/react": "*" @@ -19696,7 +18165,6 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dev": true, "requires": { "@types/history": "^4.7.11", "@types/react": "*", @@ -19707,7 +18175,6 @@ "version": "4.4.5", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", - "dev": true, "requires": { "@types/react": "*" } @@ -19716,7 +18183,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/redux-mock-store/-/redux-mock-store-1.0.3.tgz", "integrity": "sha512-Wqe3tJa6x9MxMN4DJnMfZoBRBRak1XTPklqj4qkVm5VBpZnC8PSADf4kLuFQ9NAdHaowfWoEeUMz7NWc2GMtnA==", - "dev": true, "requires": { "redux": "^4.0.5" } @@ -19724,20 +18190,17 @@ "@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "@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 + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, "requires": { "@types/express": "*" } @@ -19746,7 +18209,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dev": true, "requires": { "@types/mime": "*", "@types/node": "*" @@ -19756,7 +18218,6 @@ "version": "0.3.33", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, "requires": { "@types/node": "*" } @@ -19764,14 +18225,12 @@ "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, "@types/testing-library__jest-dom": { "version": "5.14.5", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", - "dev": true, "requires": { "@types/jest": "*" } @@ -19779,20 +18238,17 @@ "@types/tough-cookie": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "dev": true + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==" }, "@types/use-sync-external-store": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", - "dev": true + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" }, "@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dev": true, "requires": { "@types/node": "*" } @@ -19801,7 +18257,6 @@ "version": "17.0.12", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.12.tgz", "integrity": "sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ==", - "dev": true, "requires": { "@types/yargs-parser": "*" } @@ -19809,14 +18264,12 @@ "@types/yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "@types/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, "optional": true, "requires": { "@types/node": "*" @@ -19826,7 +18279,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.1.tgz", "integrity": "sha512-ky7EFzPhqz3XlhS7vPOoMDaQnQMn+9o5ICR9CPr/6bw8HrFkzhMSxuA3gRfiJVvs7geYrSeawGJjZoZQKCOglQ==", - "dev": true, "requires": { "@typescript-eslint/scope-manager": "5.38.1", "@typescript-eslint/type-utils": "5.38.1", @@ -19842,7 +18294,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -19853,7 +18304,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.38.1.tgz", "integrity": "sha512-LDqxZBVFFQnQRz9rUZJhLmox+Ep5kdUmLatLQnCRR6523YV+XhRjfYzStQ4MheFA8kMAfUlclHSbu+RKdRwQKw==", - "dev": true, "requires": { "@typescript-eslint/scope-manager": "5.38.1", "@typescript-eslint/types": "5.38.1", @@ -19865,7 +18315,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.1.tgz", "integrity": "sha512-BfRDq5RidVU3RbqApKmS7RFMtkyWMM50qWnDAkKgQiezRtLKsoyRKIvz1Ok5ilRWeD9IuHvaidaLxvGx/2eqTQ==", - "dev": true, "requires": { "@typescript-eslint/types": "5.38.1", "@typescript-eslint/visitor-keys": "5.38.1" @@ -19875,7 +18324,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.38.1.tgz", "integrity": "sha512-UU3j43TM66gYtzo15ivK2ZFoDFKKP0k03MItzLdq0zV92CeGCXRfXlfQX5ILdd4/DSpHkSjIgLLLh1NtkOJOAw==", - "dev": true, "requires": { "@typescript-eslint/typescript-estree": "5.38.1", "@typescript-eslint/utils": "5.38.1", @@ -19886,14 +18334,12 @@ "@typescript-eslint/types": { "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.1.tgz", - "integrity": "sha512-QTW1iHq1Tffp9lNfbfPm4WJabbvpyaehQ0SrvVK2yfV79SytD9XDVxqiPvdrv2LK7DGSFo91TB2FgWanbJAZXg==", - "dev": true + "integrity": "sha512-QTW1iHq1Tffp9lNfbfPm4WJabbvpyaehQ0SrvVK2yfV79SytD9XDVxqiPvdrv2LK7DGSFo91TB2FgWanbJAZXg==" }, "@typescript-eslint/typescript-estree": { "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.1.tgz", "integrity": "sha512-99b5e/Enoe8fKMLdSuwrfH/C0EIbpUWmeEKHmQlGZb8msY33qn1KlkFww0z26o5Omx7EVjzVDCWEfrfCDHfE7g==", - "dev": true, "requires": { "@typescript-eslint/types": "5.38.1", "@typescript-eslint/visitor-keys": "5.38.1", @@ -19908,7 +18354,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -19919,7 +18364,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.38.1.tgz", "integrity": "sha512-oIuUiVxPBsndrN81oP8tXnFa/+EcZ03qLqPDfSZ5xIJVm7A9V0rlkQwwBOAGtrdN70ZKDlKv+l1BeT4eSFxwXA==", - "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@typescript-eslint/scope-manager": "5.38.1", @@ -19933,7 +18377,6 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.1.tgz", "integrity": "sha512-bSHr1rRxXt54+j2n4k54p4fj8AHJ49VDWtjpImOpzQj4qjAiOpPni+V1Tyajh19Api1i844F757cur8wH3YvOA==", - "dev": true, "requires": { "@typescript-eslint/types": "5.38.1", "eslint-visitor-keys": "^3.3.0" @@ -19943,7 +18386,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, "requires": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" @@ -19952,26 +18394,22 @@ "@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -19981,14 +18419,12 @@ "@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -20000,7 +18436,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } @@ -20009,7 +18444,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, "requires": { "@xtuc/long": "4.2.2" } @@ -20017,14 +18451,12 @@ "@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -20040,7 +18472,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -20053,7 +18484,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -20065,7 +18495,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -20079,7 +18508,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" @@ -20089,14 +18517,12 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, "requires": {} }, "@webpack-cli/info": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, "requires": { "envinfo": "^7.7.3" } @@ -20105,26 +18531,22 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, "requires": {} }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, "abbrev": { "version": "1.1.1", @@ -20150,7 +18572,6 @@ "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, "requires": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" @@ -20159,8 +18580,7 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" } } }, @@ -20168,27 +18588,23 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "requires": {} }, "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 + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "requires": { "debug": "4" } @@ -20197,7 +18613,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -20209,7 +18624,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, "requires": { "ajv": "^8.0.0" }, @@ -20218,7 +18632,6 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -20229,8 +18642,7 @@ "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" } } }, @@ -20238,14 +18650,12 @@ "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": {} }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "requires": { "type-fest": "^0.21.3" } @@ -20253,20 +18663,17 @@ "ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "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, "requires": { "color-convert": "^1.9.0" } @@ -20275,7 +18682,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -20290,7 +18696,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -20298,14 +18703,12 @@ "aria-query": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.2.tgz", - "integrity": "sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q==", - "dev": true + "integrity": "sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q==" }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" }, "array-flatten": { "version": "1.1.1", @@ -20316,7 +18719,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -20328,14 +18730,12 @@ "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, "array.prototype.flatmap": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -20346,20 +18746,17 @@ "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "axios": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, "requires": { "follow-redirects": "^1.14.9", "form-data": "^4.0.0" @@ -20369,7 +18766,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.0.3.tgz", "integrity": "sha512-ApPyHSOhS/sVzwUOQIWJmdvDhBsMG01HX9z7ogtkp1TToHGGUWFlnXJUIzCgKPSfiYLn3ibipCYzsKSURHEwLg==", - "dev": true, "requires": { "@jest/transform": "^29.0.3", "@types/babel__core": "^7.1.14", @@ -20384,7 +18780,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -20393,7 +18788,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -20403,7 +18797,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -20411,20 +18804,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -20435,7 +18825,6 @@ "version": "8.2.5", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "dev": true, "requires": { "find-cache-dir": "^3.3.1", "loader-utils": "^2.0.0", @@ -20447,7 +18836,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, "requires": { "object.assign": "^4.1.0" } @@ -20456,7 +18844,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -20469,7 +18856,6 @@ "version": "29.0.2", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz", "integrity": "sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==", - "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -20481,7 +18867,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, "requires": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -20492,7 +18877,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, "requires": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", @@ -20503,7 +18887,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.3.3", "core-js-compat": "^3.25.1" @@ -20513,7 +18896,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.3.3" } @@ -20522,7 +18904,6 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", - "dev": true, "peer": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.0", @@ -20536,14 +18917,12 @@ "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==", - "dev": true, "peer": true }, "babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -20563,7 +18942,6 @@ "version": "29.0.2", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz", "integrity": "sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==", - "dev": true, "requires": { "babel-plugin-jest-hoist": "^29.0.2", "babel-preset-current-node-syntax": "^1.0.0" @@ -20572,14 +18950,12 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "base64url": { "version": "3.0.1", @@ -20589,26 +18965,22 @@ "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -20653,7 +19025,6 @@ "version": "1.0.14", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", - "dev": true, "requires": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", @@ -20664,22 +19035,19 @@ "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" } } }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -20689,7 +19057,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -20697,14 +19064,12 @@ "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 + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, "browserslist": { "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, "requires": { "caniuse-lite": "^1.0.30001400", "electron-to-chromium": "^1.4.251", @@ -20716,7 +19081,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, "requires": { "node-int64": "^0.4.0" } @@ -20725,7 +19089,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -20734,20 +19097,17 @@ "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "buffer-writer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "dev": true + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" }, "bytes": { "version": "3.1.2", @@ -20766,14 +19126,12 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camel-case": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, "requires": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -20782,27 +19140,23 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "camelize": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==", - "dev": true, "peer": true }, "caniuse-lite": { "version": "1.0.30001406", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001406.tgz", - "integrity": "sha512-bWTlaXUy/rq0BBtYShc/jArYfBPjEV95euvZ8JVtO43oQExEN/WquoqpufFjNu4kSpi5cy5kMbNvzztWDfv1Jg==", - "dev": true + "integrity": "sha512-bWTlaXUy/rq0BBtYShc/jArYfBPjEV95euvZ8JVtO43oQExEN/WquoqpufFjNu4kSpi5cy5kMbNvzztWDfv1Jg==" }, "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, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -20812,14 +19166,12 @@ "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 + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -20834,32 +19186,27 @@ "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, "ci-info": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", - "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==", - "dev": true + "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==" }, "cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" }, "clean-css": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "dev": true, "requires": { "source-map": "~0.6.0" } @@ -20868,7 +19215,6 @@ "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, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -20879,7 +19225,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, "requires": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -20889,26 +19234,22 @@ "clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "dev": true + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" }, "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 + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" }, "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==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -20916,20 +19257,17 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -20937,26 +19275,22 @@ "commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "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 + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, "requires": { "mime-db": ">= 1.43.0 < 2" } @@ -20965,7 +19299,6 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -20979,14 +19312,12 @@ "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -20994,22 +19325,19 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" }, "content-disposition": { "version": "0.5.4", @@ -21035,7 +19363,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, "requires": { "safe-buffer": "~5.1.1" } @@ -21088,8 +19415,7 @@ "cookiejar": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", - "dev": true + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" }, "cookies": { "version": "0.8.0", @@ -21104,7 +19430,6 @@ "version": "3.25.2", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.2.tgz", "integrity": "sha512-TxfyECD4smdn3/CjWxczVtJqVLEEC2up7/82t7vC0AzNogr+4nQ8vyF7abxAuTXWvjTClSbvGhU0RgqA4ToQaQ==", - "dev": true, "requires": { "browserslist": "^4.21.4" } @@ -21112,14 +19437,12 @@ "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cosmiconfig": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -21137,7 +19460,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, "requires": { "node-fetch": "2.6.7" } @@ -21146,7 +19468,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -21157,14 +19478,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", - "dev": true, "peer": true }, "css-loader": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", - "dev": true, "requires": { "icss-utils": "^5.1.0", "postcss": "^8.4.7", @@ -21180,7 +19499,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -21191,7 +19509,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, "requires": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -21204,7 +19521,6 @@ "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==", - "dev": true, "peer": true, "requires": { "camelize": "^1.0.0", @@ -21215,32 +19531,27 @@ "css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" }, "css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" }, "cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, "requires": { "cssom": "~0.3.6" }, @@ -21248,22 +19559,19 @@ "cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" } } }, "csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "cwd": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", "integrity": "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==", - "dev": true, "requires": { "find-pkg": "^0.1.2", "fs-exists-sync": "^0.1.0" @@ -21273,7 +19581,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, "requires": { "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", @@ -21284,7 +19591,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, "requires": { "punycode": "^2.1.1" } @@ -21292,14 +19598,12 @@ "webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" }, "whatwg-url": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, "requires": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -21311,7 +19615,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -21319,32 +19622,27 @@ "decimal.js": { "version": "10.4.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.1.tgz", - "integrity": "sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==", - "dev": true + "integrity": "sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==" }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "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 + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, "default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, "requires": { "execa": "^5.0.0" } @@ -21352,14 +19650,12 @@ "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, "define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -21368,8 +19664,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "depd": { "version": "2.0.0", @@ -21384,26 +19679,22 @@ "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 + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" }, "detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "devtools-protocol": { "version": "0.0.1001819", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1001819.tgz", - "integrity": "sha512-G6OsIFnv/rDyxSqBa2lDLR6thp9oJioLsb2Gl+LbQlyoA9/OBAkrTU9jiCcQ8Pnh7z4d6slDiLaogR5hzgJLmQ==", - "dev": true + "integrity": "sha512-G6OsIFnv/rDyxSqBa2lDLR6thp9oJioLsb2Gl+LbQlyoA9/OBAkrTU9jiCcQ8Pnh7z4d6slDiLaogR5hzgJLmQ==" }, "dezalgo": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", - "dev": true, "requires": { "asap": "^2.0.0", "wrappy": "1" @@ -21417,14 +19708,12 @@ "diff-sequences": { "version": "29.0.0", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.0.0.tgz", - "integrity": "sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==", - "dev": true + "integrity": "sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==" }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "requires": { "path-type": "^4.0.0" } @@ -21432,14 +19721,12 @@ "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" }, "dns-packet": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "dev": true, "requires": { "@leichtgewicht/ip-codec": "^2.0.1" } @@ -21448,7 +19735,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "requires": { "esutils": "^2.0.2" } @@ -21456,14 +19742,12 @@ "dom-accessibility-api": { "version": "0.5.14", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", - "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==", - "dev": true + "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==" }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, "requires": { "utila": "~0.4" } @@ -21472,7 +19756,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dev": true, "requires": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -21482,7 +19765,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -21492,14 +19774,12 @@ "domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" }, "domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, "requires": { "webidl-conversions": "^7.0.0" }, @@ -21507,8 +19787,7 @@ "webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" } } }, @@ -21516,7 +19795,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, "requires": { "domelementtype": "^2.2.0" } @@ -21525,7 +19803,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, "requires": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -21536,7 +19813,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, "requires": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -21555,26 +19831,22 @@ "electron-to-chromium": { "version": "1.4.254", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.254.tgz", - "integrity": "sha512-Sh/7YsHqQYkA6ZHuHMy24e6TE4eX6KZVsZb9E/DvU1nQRIrH4BflO/4k+83tfdYvDl+MObvlqHPRICzEdC9c6Q==", - "dev": true + "integrity": "sha512-Sh/7YsHqQYkA6ZHuHMy24e6TE4eX6KZVsZb9E/DvU1nQRIrH4BflO/4k+83tfdYvDl+MObvlqHPRICzEdC9c6Q==" }, "emittery": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" }, "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" }, "encodeurl": { "version": "1.0.2", @@ -21585,7 +19857,6 @@ "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, "requires": { "once": "^1.4.0" } @@ -21594,7 +19865,6 @@ "version": "5.10.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "dev": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -21603,20 +19873,17 @@ "entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, "envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" }, "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, "requires": { "is-arrayish": "^0.2.1" } @@ -21625,7 +19892,6 @@ "version": "1.20.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz", "integrity": "sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==", - "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -21656,14 +19922,12 @@ "es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, "requires": { "has": "^1.0.3" } @@ -21672,7 +19936,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -21682,8 +19945,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -21693,14 +19955,12 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "escodegen": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, "requires": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -21712,8 +19972,7 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" } } }, @@ -21721,7 +19980,6 @@ "version": "8.24.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", - "dev": true, "requires": { "@eslint/eslintrc": "^1.3.2", "@humanwhocodes/config-array": "^0.10.5", @@ -21768,7 +20026,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -21776,14 +20033,12 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -21793,7 +20048,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -21801,20 +20055,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -21823,14 +20074,12 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -21840,7 +20089,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "requires": { "is-glob": "^4.0.3" } @@ -21849,7 +20097,6 @@ "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, "requires": { "type-fest": "^0.20.2" } @@ -21857,14 +20104,12 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -21873,7 +20118,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -21883,7 +20127,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "requires": { "p-locate": "^5.0.0" } @@ -21892,7 +20135,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -21906,7 +20148,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "requires": { "yocto-queue": "^0.1.0" } @@ -21915,7 +20156,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "requires": { "p-limit": "^3.0.2" } @@ -21923,14 +20163,12 @@ "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -21939,7 +20177,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "requires": { "prelude-ls": "^1.2.1" } @@ -21947,8 +20184,7 @@ "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" } } }, @@ -21956,7 +20192,6 @@ "version": "7.31.8", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz", "integrity": "sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==", - "dev": true, "requires": { "array-includes": "^3.1.5", "array.prototype.flatmap": "^1.3.0", @@ -21978,7 +20213,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, "requires": { "esutils": "^2.0.2" } @@ -21986,14 +20220,12 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "resolve": { "version": "2.0.0-next.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -22006,7 +20238,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -22016,7 +20247,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" }, @@ -22024,22 +20254,19 @@ "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" } } }, "eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" }, "espree": { "version": "9.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", - "dev": true, "requires": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", @@ -22049,14 +20276,12 @@ "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 + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "requires": { "estraverse": "^5.1.0" }, @@ -22064,8 +20289,7 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" } } }, @@ -22073,7 +20297,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "requires": { "estraverse": "^5.2.0" }, @@ -22081,22 +20304,19 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" } } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", @@ -22106,20 +20326,17 @@ "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -22135,14 +20352,12 @@ "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" }, "expand-tilde": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", "integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==", - "dev": true, "requires": { "os-homedir": "^1.0.1" } @@ -22151,7 +20366,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/expect/-/expect-29.0.3.tgz", "integrity": "sha512-t8l5DTws3212VbmPL+tBFXhjRHLmctHB0oQbL8eUc6S7NzZtYUhycrFO9mkxA0ZUC6FAWdNi7JchJSkODtcu1Q==", - "dev": true, "requires": { "@jest/expect-utils": "^29.0.3", "jest-get-type": "^29.0.0", @@ -22163,8 +20377,7 @@ "expect-puppeteer": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-6.1.1.tgz", - "integrity": "sha512-cnQF96qdoEcOD63j5NQMc0RtW9WRMW/WHKXEKsuDQ2tszhVH3qC7zkXXS4D0LTt9qCB3DEExioqylsQXvqPrUw==", - "dev": true + "integrity": "sha512-cnQF96qdoEcOD63j5NQMc0RtW9WRMW/WHKXEKsuDQ2tszhVH3qC7zkXXS4D0LTt9qCB3DEExioqylsQXvqPrUw==" }, "express": { "version": "4.18.1", @@ -22233,7 +20446,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, "requires": { "@types/yauzl": "^2.9.1", "debug": "^4.1.1", @@ -22245,7 +20457,6 @@ "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, "requires": { "pump": "^3.0.0" } @@ -22255,14 +20466,12 @@ "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 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -22274,32 +20483,27 @@ "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==", - "dev": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==" }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, "requires": { "reusify": "^1.0.4" } @@ -22308,7 +20512,6 @@ "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, "requires": { "websocket-driver": ">=0.5.1" } @@ -22317,7 +20520,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, "requires": { "bser": "2.1.1" } @@ -22326,7 +20528,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, "requires": { "pend": "~1.2.0" } @@ -22335,7 +20536,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "requires": { "flat-cache": "^3.0.4" } @@ -22344,7 +20544,6 @@ "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, "requires": { "to-regex-range": "^5.0.1" } @@ -22382,7 +20581,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -22393,7 +20591,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", "integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==", - "dev": true, "requires": { "fs-exists-sync": "^0.1.0", "resolve-dir": "^0.1.0" @@ -22403,7 +20600,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", "integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==", - "dev": true, "requires": { "find-file-up": "^0.1.2" } @@ -22412,7 +20608,6 @@ "version": "1.4.7", "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.7.tgz", "integrity": "sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==", - "dev": true, "requires": { "chalk": "^4.0.0", "commander": "^5.1.0", @@ -22423,7 +20618,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -22432,7 +20626,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -22442,7 +20635,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -22450,26 +20642,22 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "commander": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -22479,14 +20667,12 @@ "find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "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, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -22496,7 +20682,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -22505,26 +20690,22 @@ "flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" }, "for-own": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", - "dev": true, "requires": { "for-in": "^1.0.1" } @@ -22533,7 +20714,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -22544,7 +20724,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", - "dev": true, "requires": { "dezalgo": "1.0.3", "hexoid": "1.0.0", @@ -22555,8 +20734,7 @@ "qs": { "version": "6.9.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", - "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", - "dev": true + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" } } }, @@ -22573,32 +20751,27 @@ "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 + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "fs-exists-sync": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==", - "dev": true + "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==" }, "fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "function-bind": { @@ -22610,7 +20783,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -22621,20 +20793,17 @@ "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" }, "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 + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "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 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { "version": "1.1.3", @@ -22649,20 +20818,17 @@ "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 + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -22672,7 +20838,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -22686,7 +20851,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -22694,14 +20858,12 @@ "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "global-modules": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", "integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==", - "dev": true, "requires": { "global-prefix": "^0.1.4", "is-windows": "^0.2.0" @@ -22711,7 +20873,6 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", "integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==", - "dev": true, "requires": { "homedir-polyfill": "^1.0.0", "ini": "^1.3.4", @@ -22723,7 +20884,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -22733,14 +20893,12 @@ "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 + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -22753,20 +20911,17 @@ "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "has": { "version": "1.0.3", @@ -22779,20 +20934,17 @@ "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, "requires": { "get-intrinsic": "^1.1.1" } @@ -22806,7 +20958,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -22814,20 +20965,17 @@ "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "hexoid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "dev": true + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" }, "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, "requires": { "react-is": "^16.7.0" }, @@ -22835,8 +20983,7 @@ "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" } } }, @@ -22844,7 +20991,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, "requires": { "parse-passwd": "^1.0.0" } @@ -22853,7 +20999,6 @@ "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, "requires": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -22865,7 +21010,6 @@ "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, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -22880,7 +21024,6 @@ "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, "requires": { "safe-buffer": "~5.1.0" } @@ -22891,7 +21034,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, "requires": { "whatwg-encoding": "^2.0.0" } @@ -22899,20 +21041,17 @@ "html-entities": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" }, "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 + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" }, "html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, "requires": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", @@ -22927,7 +21066,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, "requires": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -22940,7 +21078,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", @@ -22951,8 +21088,7 @@ "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, "http-errors": { "version": "2.0.0", @@ -22969,14 +21105,12 @@ "http-parser-js": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, "http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, "requires": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -22987,7 +21121,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, "requires": { "@tootallnate/once": "2", "agent-base": "6", @@ -22998,7 +21131,6 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, "requires": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -23011,7 +21143,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, "requires": { "agent-base": "6", "debug": "4" @@ -23020,8 +21151,7 @@ "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, "iconv-lite": { "version": "0.4.24", @@ -23035,20 +21165,17 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, "requires": {} }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, "ignore-by-default": { "version": "1.0.1", @@ -23059,20 +21186,17 @@ "immer": { "version": "9.0.15", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", - "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==", - "dev": true + "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==" }, "immutable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -23081,8 +21205,7 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" } } }, @@ -23090,7 +21213,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -23099,20 +21221,17 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -23126,14 +21245,12 @@ "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -23143,8 +21260,7 @@ "interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" }, "ipaddr.js": { "version": "1.9.1", @@ -23154,14 +21270,12 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "requires": { "has-bigints": "^1.0.1" } @@ -23170,7 +21284,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -23179,7 +21292,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -23188,20 +21300,17 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-core-module": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, "requires": { "has": "^1.0.3" } @@ -23210,7 +21319,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -23218,38 +21326,32 @@ "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "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 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "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 + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -23257,20 +21359,17 @@ "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, "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 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -23278,14 +21377,12 @@ "is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" }, "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, "requires": { "isobject": "^3.0.1" } @@ -23293,14 +21390,12 @@ "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -23310,7 +21405,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -23318,14 +21412,12 @@ "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -23334,7 +21426,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -23343,7 +21434,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -23351,14 +21441,12 @@ "is-windows": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==", - "dev": true + "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==" }, "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, "requires": { "is-docker": "^2.0.0" } @@ -23366,32 +21454,27 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" }, "istanbul-lib-instrument": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "dev": true, "requires": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -23404,7 +21487,6 @@ "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, "requires": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", @@ -23414,14 +21496,12 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -23432,7 +21512,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -23443,7 +21522,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -23453,7 +21531,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest/-/jest-29.0.3.tgz", "integrity": "sha512-ElgUtJBLgXM1E8L6K1RW1T96R897YY/3lRYqq9uVcPWtP2AAl/nQ16IYDh/FzQOOQ12VEuLdcPU83mbhG2C3PQ==", - "dev": true, "requires": { "@jest/core": "^29.0.3", "@jest/types": "^29.0.3", @@ -23465,7 +21542,6 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.0.0.tgz", "integrity": "sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==", - "dev": true, "requires": { "execa": "^5.0.0", "p-limit": "^3.1.0" @@ -23475,7 +21551,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "requires": { "yocto-queue": "^0.1.0" } @@ -23486,7 +21561,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.0.3.tgz", "integrity": "sha512-QeGzagC6Hw5pP+df1+aoF8+FBSgkPmraC1UdkeunWh0jmrp7wC0Hr6umdUAOELBQmxtKAOMNC3KAdjmCds92Zg==", - "dev": true, "requires": { "@jest/environment": "^29.0.3", "@jest/expect": "^29.0.3", @@ -23513,7 +21587,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.0.3.tgz", "integrity": "sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==", - "dev": true, "requires": { "@jest/fake-timers": "^29.0.3", "@jest/types": "^29.0.3", @@ -23525,7 +21598,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.0.3.tgz", "integrity": "sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@sinonjs/fake-timers": "^9.1.2", @@ -23539,7 +21611,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -23548,7 +21619,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -23558,7 +21628,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -23566,20 +21635,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "jest-mock": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.0.3.tgz", "integrity": "sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@types/node": "*" @@ -23589,7 +21655,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "requires": { "yocto-queue": "^0.1.0" } @@ -23598,7 +21663,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "requires": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -23608,8 +21672,7 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, @@ -23617,7 +21680,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -23628,7 +21690,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.0.3.tgz", "integrity": "sha512-aUy9Gd/Kut1z80eBzG10jAn6BgS3BoBbXyv+uXEqBJ8wnnuZ5RpNfARoskSrTIy1GY4a8f32YGuCMwibtkl9CQ==", - "dev": true, "requires": { "@jest/core": "^29.0.3", "@jest/test-result": "^29.0.3", @@ -23648,7 +21709,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -23657,7 +21717,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -23667,7 +21726,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -23675,20 +21733,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -23699,7 +21754,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.0.3.tgz", "integrity": "sha512-U5qkc82HHVYe3fNu2CRXLN4g761Na26rWKf7CjM8LlZB3In1jadEkZdMwsE37rd9RSPV0NfYaCjHdk/gu3v+Ew==", - "dev": true, "requires": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.0.3", @@ -23729,7 +21783,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -23738,7 +21791,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -23748,7 +21800,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -23756,20 +21807,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "pretty-format": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "requires": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -23779,8 +21827,7 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, @@ -23788,7 +21835,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -23799,7 +21845,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-6.1.1.tgz", "integrity": "sha512-z5LnaGDvlIkdMv/rppSO4+rq+GyQKf1xI9oiBxf9/2EBeN2hxRaWiMvaLNDnHPZj2PAhBXsycrKslDDoZO2Xtw==", - "dev": true, "requires": { "chalk": "^4.1.2", "cwd": "^0.10.0", @@ -23814,7 +21859,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -23823,7 +21867,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -23833,7 +21876,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -23841,20 +21883,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -23865,7 +21904,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.0.3.tgz", "integrity": "sha512-+X/AIF5G/vX9fWK+Db9bi9BQas7M9oBME7egU7psbn4jlszLFCu0dW63UgeE6cs/GANq4fLaT+8sGHQQ0eCUfg==", - "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^29.0.0", @@ -23877,7 +21915,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -23886,7 +21923,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -23896,7 +21932,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -23904,20 +21939,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "pretty-format": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "requires": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -23927,8 +21959,7 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, @@ -23936,7 +21967,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -23947,7 +21977,6 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.0.0.tgz", "integrity": "sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==", - "dev": true, "requires": { "detect-newline": "^3.0.0" } @@ -23956,7 +21985,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.0.3.tgz", "integrity": "sha512-wILhZfESURHHBNvPMJ0lZlYZrvOQJxAo3wNHi+ycr90V7M+uGR9Gh4+4a/BmaZF0XTyZsk4OiYEf3GJN7Ltqzg==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "chalk": "^4.0.0", @@ -23969,7 +21997,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -23978,7 +22005,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -23988,7 +22014,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -23996,20 +22021,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "pretty-format": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "requires": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -24019,8 +22041,7 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, @@ -24028,7 +22049,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -24039,7 +22059,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.3.tgz", "integrity": "sha512-HnlGUmZRdxfCByd3GM2F100DgQOajUBzEitjGqIREcb45kGjZvRrKUdlaF6escXBdcXNl0OBh+1ZrfeZT3GnAg==", - "dev": true, "requires": { "@jest/environment": "^28.1.3", "@jest/fake-timers": "^28.1.3", @@ -24055,7 +22074,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, "requires": { "@sinclair/typebox": "^0.24.1" } @@ -24064,7 +22082,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, "requires": { "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -24078,7 +22095,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -24087,7 +22103,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -24097,7 +22112,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -24105,20 +22119,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "jest-util": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, "requires": { "@jest/types": "^28.1.3", "@types/node": "*", @@ -24132,7 +22143,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -24143,7 +22153,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.0.3.tgz", "integrity": "sha512-cdZqRCnmIlTXC+9vtvmfiY/40Cj6s2T0czXuq1whvQdmpzAnj4sbqVYuZ4zFHk766xTTJ+Ij3uUqkk8KCfXoyg==", - "dev": true, "requires": { "@jest/environment": "^29.0.3", "@jest/fake-timers": "^29.0.3", @@ -24157,7 +22166,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.0.3.tgz", "integrity": "sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==", - "dev": true, "requires": { "@jest/fake-timers": "^29.0.3", "@jest/types": "^29.0.3", @@ -24169,7 +22177,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.0.3.tgz", "integrity": "sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@sinonjs/fake-timers": "^9.1.2", @@ -24183,7 +22190,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.0.3.tgz", "integrity": "sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@types/node": "*" @@ -24195,7 +22201,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-6.1.1.tgz", "integrity": "sha512-Ces37g8Gdj7QaVxszeoXlvmsZxcEJN9EPUdJt8fGMLA+6ARVFKyVmFgP9xVeGyjTvzsXdtIiJdeOKMLMeD8r2A==", - "dev": true, "requires": { "chalk": "^4.1.2", "cwd": "^0.10.0", @@ -24208,7 +22213,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dev": true, "requires": { "@jest/fake-timers": "^27.5.1", "@jest/types": "^27.5.1", @@ -24220,7 +22224,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dev": true, "requires": { "@jest/types": "^27.5.1", "@sinonjs/fake-timers": "^8.0.1", @@ -24234,7 +22237,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -24247,7 +22249,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" } @@ -24256,7 +22257,6 @@ "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, "requires": { "@types/yargs-parser": "*" } @@ -24265,7 +22265,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -24274,7 +22273,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -24284,7 +22282,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -24292,20 +22289,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "jest-environment-node": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, "requires": { "@jest/environment": "^27.5.1", "@jest/fake-timers": "^27.5.1", @@ -24319,7 +22313,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@jest/types": "^27.5.1", @@ -24336,7 +22329,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, "requires": { "@jest/types": "^27.5.1", "@types/node": "*" @@ -24346,7 +22338,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, "requires": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -24360,7 +22351,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -24370,14 +22360,12 @@ "jest-get-type": { "version": "29.0.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.0.0.tgz", - "integrity": "sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==", - "dev": true + "integrity": "sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==" }, "jest-haste-map": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.0.3.tgz", "integrity": "sha512-uMqR99+GuBHo0RjRhOE4iA6LmsxEwRdgiIAQgMU/wdT2XebsLDz5obIwLZm/Psj+GwSEQhw9AfAVKGYbh2G55A==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@types/graceful-fs": "^4.1.3", @@ -24396,14 +22384,12 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "jest-worker": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.0.3.tgz", "integrity": "sha512-Tl/YWUugQOjoTYwjKdfJWkSOfhufJHO5LhXTSZC3TRoQKO+fuXnZAdoXXBlpLXKGODBL3OvdUasfDD4PcMe6ng==", - "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -24414,7 +22400,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -24425,7 +22410,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.0.3.tgz", "integrity": "sha512-YfW/G63dAuiuQ3QmQlh8hnqLDe25WFY3eQhuc/Ev1AGmkw5zREblTh7TCSKLoheyggu6G9gxO2hY8p9o6xbaRQ==", - "dev": true, "requires": { "jest-get-type": "^29.0.0", "pretty-format": "^29.0.3" @@ -24434,14 +22418,12 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" }, "pretty-format": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "requires": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -24454,7 +22436,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.0.3.tgz", "integrity": "sha512-RsR1+cZ6p1hDV4GSCQTg+9qjeotQCgkaleIKLK7dm+U4V/H2bWedU3RAtLm8+mANzZ7eDV33dMar4pejd7047w==", - "dev": true, "requires": { "chalk": "^4.0.0", "jest-diff": "^29.0.3", @@ -24466,7 +22447,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -24475,7 +22455,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -24485,7 +22464,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -24493,20 +22471,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "pretty-format": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "requires": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -24516,8 +22491,7 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, @@ -24525,7 +22499,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -24536,7 +22509,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.0.3.tgz", "integrity": "sha512-7T8JiUTtDfppojosORAflABfLsLKMLkBHSWkjNQrjIltGoDzNGn7wEPOSfjqYAGTYME65esQzMJxGDjuLBKdOg==", - "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.0.3", @@ -24553,7 +22525,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -24562,7 +22533,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -24572,7 +22542,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -24580,20 +22549,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "pretty-format": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "requires": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -24603,8 +22569,7 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, @@ -24612,7 +22577,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -24623,7 +22587,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", - "dev": true, "requires": { "@jest/types": "^28.1.3", "@types/node": "*" @@ -24633,7 +22596,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, "requires": { "@sinclair/typebox": "^0.24.1" } @@ -24642,7 +22604,6 @@ "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, "requires": { "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -24656,7 +22617,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -24665,7 +22625,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -24675,7 +22634,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -24683,20 +22641,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -24707,14 +22662,12 @@ "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": {} }, "jest-puppeteer": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/jest-puppeteer/-/jest-puppeteer-6.1.1.tgz", "integrity": "sha512-cBOszleUpyipDMNYmcmH3x+687x03ZvOVz7W8X5y5TgD+j4MK+BcumwGdE1YwVS21kPLjJUu1pIdEzEDuFEBfA==", - "dev": true, "requires": { "expect-puppeteer": "^6.1.1", "jest-environment-puppeteer": "^6.1.1" @@ -24723,14 +22676,12 @@ "jest-regex-util": { "version": "29.0.0", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.0.0.tgz", - "integrity": "sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==", - "dev": true + "integrity": "sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==" }, "jest-resolve": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.0.3.tgz", "integrity": "sha512-toVkia85Y/BPAjJasTC9zIPY6MmVXQPtrCk8SmiheC4MwVFE/CMFlOtMN6jrwPMC6TtNh8+sTMllasFeu1wMPg==", - "dev": true, "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -24747,7 +22698,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -24756,7 +22706,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -24766,7 +22715,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -24774,20 +22722,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -24798,7 +22743,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.0.3.tgz", "integrity": "sha512-KzuBnXqNvbuCdoJpv8EanbIGObk7vUBNt/PwQPPx2aMhlv/jaXpUJsqWYRpP/0a50faMBY7WFFP8S3/CCzwfDw==", - "dev": true, "requires": { "jest-regex-util": "^29.0.0", "jest-snapshot": "^29.0.3" @@ -24808,7 +22752,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.0.3.tgz", "integrity": "sha512-Usu6VlTOZlCZoNuh3b2Tv/yzDpKqtiNAetG9t3kJuHfUyVMNW7ipCCJOUojzKkjPoaN7Bl1f7Buu6PE0sGpQxw==", - "dev": true, "requires": { "@jest/console": "^29.0.3", "@jest/environment": "^29.0.3", @@ -24837,7 +22780,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.0.3.tgz", "integrity": "sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==", - "dev": true, "requires": { "@jest/fake-timers": "^29.0.3", "@jest/types": "^29.0.3", @@ -24849,7 +22791,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.0.3.tgz", "integrity": "sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@sinonjs/fake-timers": "^9.1.2", @@ -24863,7 +22804,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -24872,7 +22812,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -24882,7 +22821,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -24890,20 +22828,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "jest-mock": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.0.3.tgz", "integrity": "sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@types/node": "*" @@ -24913,7 +22848,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.0.3.tgz", "integrity": "sha512-Tl/YWUugQOjoTYwjKdfJWkSOfhufJHO5LhXTSZC3TRoQKO+fuXnZAdoXXBlpLXKGODBL3OvdUasfDD4PcMe6ng==", - "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -24924,7 +22858,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -24935,7 +22868,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "requires": { "yocto-queue": "^0.1.0" } @@ -24944,7 +22876,6 @@ "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -24954,7 +22885,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -24965,7 +22895,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.0.3.tgz", "integrity": "sha512-12gZXRQ7ozEeEHKTY45a+YLqzNDR/x4c//X6AqwKwKJPpWM8FY4vwn4VQJOcLRS3Nd1fWwgP7LU4SoynhuUMHQ==", - "dev": true, "requires": { "@jest/environment": "^29.0.3", "@jest/fake-timers": "^29.0.3", @@ -24995,7 +22924,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.0.3.tgz", "integrity": "sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==", - "dev": true, "requires": { "@jest/fake-timers": "^29.0.3", "@jest/types": "^29.0.3", @@ -25007,7 +22935,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.0.3.tgz", "integrity": "sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@sinonjs/fake-timers": "^9.1.2", @@ -25021,7 +22948,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -25030,7 +22956,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -25040,7 +22965,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -25048,20 +22972,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "jest-mock": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.0.3.tgz", "integrity": "sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@types/node": "*" @@ -25071,7 +22992,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -25082,7 +23002,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.0.3.tgz", "integrity": "sha512-52q6JChm04U3deq+mkQ7R/7uy7YyfVIrebMi6ZkBoDJ85yEjm/sJwdr1P0LOIEHmpyLlXrxy3QP0Zf5J2kj0ew==", - "dev": true, "requires": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -25114,7 +23033,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -25123,7 +23041,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -25133,7 +23050,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -25141,20 +23057,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "pretty-format": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "requires": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -25164,8 +23077,7 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, @@ -25173,7 +23085,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -25182,7 +23093,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -25193,7 +23103,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.0.3.tgz", "integrity": "sha512-Q0xaG3YRG8QiTC4R6fHjHQPaPpz9pJBEi0AeOE4mQh/FuWOijFjGXMMOfQEaU9i3z76cNR7FobZZUQnL6IyfdQ==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "@types/node": "*", @@ -25207,7 +23116,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -25216,7 +23124,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -25226,7 +23133,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -25234,20 +23140,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -25258,7 +23161,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.0.3.tgz", "integrity": "sha512-OebiqqT6lK8cbMPtrSoS3aZP4juID762lZvpf1u+smZnwTEBCBInan0GAIIhv36MxGaJvmq5uJm7dl5gVt+Zrw==", - "dev": true, "requires": { "@jest/types": "^29.0.3", "camelcase": "^6.2.0", @@ -25272,7 +23174,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -25280,14 +23181,12 @@ "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -25297,7 +23196,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -25305,20 +23203,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "pretty-format": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dev": true, "requires": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -25328,8 +23223,7 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, @@ -25337,7 +23231,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -25348,7 +23241,6 @@ "version": "29.0.3", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.0.3.tgz", "integrity": "sha512-tQX9lU91A+9tyUQKUMp0Ns8xAcdhC9fo73eqA3LFxP2bSgiF49TNcc+vf3qgGYYK9qRjFpXW9+4RgF/mbxyOOw==", - "dev": true, "requires": { "@jest/test-result": "^29.0.3", "@jest/types": "^29.0.3", @@ -25364,7 +23256,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -25373,7 +23264,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -25383,7 +23273,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -25391,20 +23280,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -25415,7 +23301,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -25425,14 +23310,12 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -25443,7 +23326,6 @@ "version": "17.6.0", "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", - "dev": true, "requires": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", @@ -25460,8 +23342,7 @@ "js-sdsl": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", - "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", - "dev": true + "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==" }, "js-tokens": { "version": "4.0.0", @@ -25472,7 +23353,6 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -25482,7 +23362,6 @@ "version": "19.0.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", - "dev": true, "requires": { "abab": "^2.0.5", "acorn": "^8.5.0", @@ -25517,7 +23396,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, "requires": { "punycode": "^2.1.1" } @@ -25525,14 +23403,12 @@ "webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" }, "whatwg-url": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", - "dev": true, "requires": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -25543,38 +23419,32 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "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 + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "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 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" }, "jsx-ast-utils": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, "requires": { "array-includes": "^3.1.5", "object.assign": "^4.1.3" @@ -25591,38 +23461,32 @@ "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 + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, "klona": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", - "dev": true + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==" }, "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 + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -25631,20 +23495,17 @@ "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" }, "loader-utils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -25655,7 +23516,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "requires": { "p-locate": "^4.1.0" } @@ -25663,26 +23523,22 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "loose-envify": { "version": "1.4.0", @@ -25696,7 +23552,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, "requires": { "tslib": "^2.0.3" } @@ -25705,7 +23560,6 @@ "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, "requires": { "yallist": "^4.0.0" } @@ -25713,14 +23567,12 @@ "lz-string": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", - "dev": true + "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==" }, "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, "requires": { "semver": "^6.0.0" } @@ -25734,7 +23586,6 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, "requires": { "tmpl": "1.0.5" } @@ -25748,7 +23599,6 @@ "version": "3.4.7", "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", - "dev": true, "requires": { "fs-monkey": "^1.0.3" } @@ -25757,7 +23607,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", - "dev": true, "requires": { "arr-union": "^3.1.0", "clone-deep": "^0.2.4", @@ -25768,7 +23617,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", - "dev": true, "requires": { "for-own": "^0.1.3", "is-plain-object": "^2.0.1", @@ -25781,7 +23629,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -25790,7 +23637,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", - "dev": true, "requires": { "is-extendable": "^0.1.1", "kind-of": "^2.0.1", @@ -25802,7 +23648,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", - "dev": true, "requires": { "is-buffer": "^1.0.2" } @@ -25810,8 +23655,7 @@ "lazy-cache": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", - "dev": true + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==" } } } @@ -25825,14 +23669,12 @@ "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 + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "methods": { "version": "1.1.2", @@ -25843,7 +23685,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -25870,26 +23711,22 @@ "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 + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -25897,14 +23734,12 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "mixin-object": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", - "dev": true, "requires": { "for-in": "^0.1.3", "is-extendable": "^0.1.1" @@ -25913,16 +23748,14 @@ "for-in": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", - "dev": true + "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==" } } }, "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 + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "ms": { "version": "2.1.2", @@ -25933,7 +23766,6 @@ "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, "requires": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -25942,14 +23774,12 @@ "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "negotiator": { "version": "0.6.3", @@ -25959,14 +23789,12 @@ "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, "requires": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -25983,20 +23811,17 @@ "node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node-releases": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "nodemon": { "version": "2.0.20", @@ -26045,14 +23870,12 @@ "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 + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "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, "requires": { "path-key": "^3.0.0" } @@ -26061,7 +23884,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, "requires": { "boolbase": "^1.0.0" } @@ -26069,8 +23891,7 @@ "nwsapi": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", - "dev": true + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" }, "oauth": { "version": "0.9.15", @@ -26080,8 +23901,7 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { "version": "1.12.2", @@ -26091,14 +23911,12 @@ "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 + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -26110,7 +23928,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -26121,7 +23938,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -26132,7 +23948,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", - "dev": true, "requires": { "define-properties": "^1.1.4", "es-abstract": "^1.19.5" @@ -26142,7 +23957,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -26152,8 +23966,7 @@ "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "on-finished": { "version": "2.4.1", @@ -26172,7 +23985,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } @@ -26181,7 +23993,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -26190,7 +24001,6 @@ "version": "8.4.0", "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, "requires": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -26201,7 +24011,6 @@ "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -26214,14 +24023,12 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "dev": true + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" }, "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, "requires": { "p-try": "^2.0.0" } @@ -26230,7 +24037,6 @@ "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, "requires": { "p-limit": "^2.2.0" } @@ -26239,7 +24045,6 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, "requires": { "@types/retry": "0.12.0", "retry": "^0.13.1" @@ -26248,20 +24053,17 @@ "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 + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", - "dev": true + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" }, "param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, "requires": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -26271,7 +24073,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "requires": { "callsites": "^3.0.0" } @@ -26280,7 +24081,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -26291,14 +24091,12 @@ "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "parseurl": { "version": "1.3.3", @@ -26309,7 +24107,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, "requires": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -26352,26 +24149,22 @@ "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 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "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 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "0.1.7", @@ -26381,8 +24174,7 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "pause": { "version": "0.0.1", @@ -26392,14 +24184,12 @@ "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "pg": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/pg/-/pg-8.8.0.tgz", "integrity": "sha512-UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw==", - "dev": true, "requires": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", @@ -26413,33 +24203,28 @@ "pg-connection-string": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==", - "dev": true + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" }, "pg-int8": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "dev": true + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" }, "pg-pool": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", - "dev": true, "requires": {} }, "pg-protocol": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==", - "dev": true + "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" }, "pg-types": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dev": true, "requires": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -26452,7 +24237,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "dev": true, "requires": { "split2": "^4.1.0" } @@ -26460,26 +24244,22 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" }, "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, "requires": { "find-up": "^4.0.0" } @@ -26488,7 +24268,6 @@ "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", - "dev": true, "requires": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -26499,14 +24278,12 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, "requires": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -26517,7 +24294,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, "requires": { "postcss-selector-parser": "^6.0.4" } @@ -26526,7 +24302,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, "requires": { "icss-utils": "^5.0.0" } @@ -26535,7 +24310,6 @@ "version": "6.0.10", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -26544,32 +24318,27 @@ "postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "dev": true + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" }, "postgres-bytea": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", - "dev": true + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==" }, "postgres-date": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "dev": true + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" }, "postgres-interval": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dev": true, "requires": { "xtend": "^4.0.0" } @@ -26577,14 +24346,12 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" }, "pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, "requires": { "lodash": "^4.17.20", "renderkid": "^3.0.0" @@ -26594,7 +24361,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, "requires": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -26604,34 +24370,29 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" } } }, "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 + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -26641,7 +24402,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -26651,8 +24411,7 @@ "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" } } }, @@ -26668,14 +24427,12 @@ "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "pstree.remy": { "version": "1.1.8", @@ -26687,7 +24444,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -26696,14 +24452,12 @@ "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 + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "puppeteer": { "version": "14.4.1", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-14.4.1.tgz", "integrity": "sha512-+H0Gm84aXUvSLdSiDROtLlOofftClgw2TdceMvvCU9UvMryappoeS3+eOLfKvoy4sm8B8MWnYmPhWxVFudAOFQ==", - "dev": true, "requires": { "cross-fetch": "3.1.5", "debug": "4.3.4", @@ -26723,7 +24477,6 @@ "version": "8.7.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", - "dev": true, "requires": {} } } @@ -26739,20 +24492,17 @@ "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -26793,14 +24543,12 @@ "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "react-redux": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.4.tgz", "integrity": "sha512-yMfQ7mX6bWuicz2fids6cR1YT59VTuT8MKyyE310wJQlINKENCeT1UcPdEiX6znI5tF8zXyJ/VYvDgeGuaaNwQ==", - "dev": true, "requires": { "@babel/runtime": "^7.12.1", "@types/hoist-non-react-statics": "^3.3.1", @@ -26831,7 +24579,6 @@ "version": "16.15.0", "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", - "dev": true, "requires": { "object-assign": "^4.1.1", "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" @@ -26841,7 +24588,6 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.2.0.tgz", "integrity": "sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==", - "dev": true, "requires": { "react-is": "^18.2.0", "react-shallow-renderer": "^16.15.0", @@ -26852,7 +24598,6 @@ "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "dev": true, "requires": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -26864,7 +24609,6 @@ "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, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -26875,7 +24619,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -26884,7 +24627,6 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, "requires": { "resolve": "^1.9.0" } @@ -26893,7 +24635,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, "requires": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -26903,7 +24644,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", - "dev": true, "requires": { "@babel/runtime": "^7.9.2" } @@ -26912,7 +24652,6 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/redux-mock-store/-/redux-mock-store-1.5.4.tgz", "integrity": "sha512-xmcA0O/tjCLXhh9Fuiq6pMrJCwFRaouA8436zcikdIpYWWCjU76CRk+i2bHx8EeiSiMGnB85/lZdU3wIJVXHTA==", - "dev": true, "requires": { "lodash.isplainobject": "^4.0.6" } @@ -26921,20 +24660,17 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", - "dev": true, "requires": {} }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, "requires": { "regenerate": "^1.4.2" } @@ -26942,14 +24678,12 @@ "regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "regenerator-transform": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, "requires": { "@babel/runtime": "^7.8.4" } @@ -26958,7 +24692,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -26968,14 +24701,12 @@ "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" }, "regexpu-core": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", - "dev": true, "requires": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", @@ -26988,14 +24719,12 @@ "regjsgen": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "dev": true + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, "requires": { "jsesc": "~0.5.0" }, @@ -27003,22 +24732,19 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, "relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" }, "renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, "requires": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", @@ -27030,32 +24756,27 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "reselect": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", - "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", - "dev": true + "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==" }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -27066,7 +24787,6 @@ "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, "requires": { "resolve-from": "^5.0.0" } @@ -27075,7 +24795,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", "integrity": "sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==", - "dev": true, "requires": { "expand-tilde": "^1.2.2", "global-modules": "^0.2.3" @@ -27084,32 +24803,27 @@ "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 + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "resolve.exports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" }, "retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -27118,7 +24832,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "requires": { "queue-microtask": "^1.2.2" } @@ -27127,7 +24840,6 @@ "version": "7.5.6", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "dev": true, "requires": { "tslib": "^2.1.0" } @@ -27135,14 +24847,12 @@ "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 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -27158,7 +24868,6 @@ "version": "1.54.9", "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.9.tgz", "integrity": "sha512-xb1hjASzEH+0L0WI9oFjqhRi51t/gagWnxLiwUNMltA0Ab6jIDkAacgKiGYKM9Jhy109osM7woEEai6SXeJo5Q==", - "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -27169,7 +24878,6 @@ "version": "13.0.2", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", - "dev": true, "requires": { "klona": "^2.0.4", "neo-async": "^2.6.2" @@ -27179,7 +24887,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, "requires": { "xmlchars": "^2.2.0" } @@ -27196,7 +24903,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, "requires": { "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", @@ -27206,14 +24912,12 @@ "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, "selfsigned": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, "requires": { "node-forge": "^1" } @@ -27221,8 +24925,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "send": { "version": "0.18.0", @@ -27270,7 +24973,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, "requires": { "randombytes": "^2.1.0" } @@ -27279,7 +24981,6 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, "requires": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -27294,7 +24995,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -27302,14 +25002,12 @@ "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -27320,26 +25018,22 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" } } }, @@ -27363,7 +25057,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, "requires": { "kind-of": "^6.0.2" } @@ -27372,14 +25065,12 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "dev": true, "peer": true }, "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, "requires": { "shebang-regex": "^3.0.0" } @@ -27387,8 +25078,7 @@ "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 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "side-channel": { "version": "1.0.4", @@ -27403,8 +25093,7 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simple-update-notifier": { "version": "1.0.7", @@ -27426,20 +25115,17 @@ "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, "requires": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -27449,20 +25135,17 @@ "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 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -27472,7 +25155,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-6.0.2.tgz", "integrity": "sha512-+YJtx0dvy2wt304MrHD//tASc84zinBUYU1jacPBzrjhZUd7RsDo25krxr4HUHAQzEQFuMAs4/p+yLYU5ciZ1w==", - "dev": true, "requires": { "exit": "^0.1.2", "signal-exit": "^3.0.6", @@ -27483,7 +25165,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -27496,7 +25177,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, "requires": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -27509,20 +25189,17 @@ "split2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", - "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", - "dev": true + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, "requires": { "escape-string-regexp": "^2.0.0" }, @@ -27530,8 +25207,7 @@ "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 + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" } } }, @@ -27544,7 +25220,6 @@ "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==", - "dev": true, "requires": { "safe-buffer": "~5.2.0" }, @@ -27552,8 +25227,7 @@ "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 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -27561,7 +25235,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -27571,7 +25244,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -27582,7 +25254,6 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -27598,7 +25269,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -27609,7 +25279,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -27620,7 +25289,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -27628,20 +25296,17 @@ "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 + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" }, "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 + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, "requires": { "min-indent": "^1.0.0" } @@ -27649,21 +25314,18 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "style-loader": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, "requires": {} }, "styled-components": { "version": "5.3.6", "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz", "integrity": "sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==", - "dev": true, "peer": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -27682,7 +25344,6 @@ "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", - "dev": true, "peer": true } } @@ -27690,14 +25351,12 @@ "stylis": { "version": "4.0.13", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", - "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==", - "dev": true + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" }, "superagent": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz", "integrity": "sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg==", - "dev": true, "requires": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.3", @@ -27715,14 +25374,12 @@ "mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -27733,7 +25390,6 @@ "version": "6.2.4", "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz", "integrity": "sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA==", - "dev": true, "requires": { "methods": "^1.1.2", "superagent": "^8.0.0" @@ -27743,7 +25399,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -27752,7 +25407,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -27761,14 +25415,12 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -27778,26 +25430,22 @@ "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "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 + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, "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, "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -27809,7 +25457,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -27822,7 +25469,6 @@ "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, "requires": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -27832,7 +25478,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", - "dev": true, "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -27843,8 +25488,7 @@ "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" } } }, @@ -27852,7 +25496,6 @@ "version": "5.3.6", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.14", "jest-worker": "^27.4.5", @@ -27865,7 +25508,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -27878,7 +25520,6 @@ "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, "requires": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -27888,38 +25529,32 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "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, "requires": { "is-number": "^7.0.0" } @@ -27942,7 +25577,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -27958,14 +25592,12 @@ "tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" }, "ts-loader": { "version": "9.4.1", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", - "dev": true, "requires": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", @@ -27977,7 +25609,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -27986,7 +25617,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -27996,7 +25626,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -28004,20 +25633,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -28026,7 +25652,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -28063,8 +25688,7 @@ "tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "tsscmp": { "version": "1.0.6", @@ -28075,7 +25699,6 @@ "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, "requires": { "tslib": "^1.8.1" }, @@ -28083,8 +25706,7 @@ "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, @@ -28092,7 +25714,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -28100,14 +25721,12 @@ "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 + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" }, "type-is": { "version": "1.6.18", @@ -28132,7 +25751,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -28144,7 +25762,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -28159,14 +25776,12 @@ "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" }, "unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -28175,20 +25790,17 @@ "unicode-match-property-value-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" }, "unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" }, "universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" }, "unpipe": { "version": "1.0.0", @@ -28199,7 +25811,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz", "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==", - "dev": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -28209,7 +25820,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -28218,7 +25828,6 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -28228,20 +25837,17 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "dev": true, "requires": {} }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" }, "utils-merge": { "version": "1.0.1", @@ -28251,8 +25857,7 @@ "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache-lib": { "version": "3.0.1", @@ -28263,7 +25868,6 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -28279,7 +25883,6 @@ "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, "requires": { "browser-process-hrtime": "^1.0.0" } @@ -28288,7 +25891,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", - "dev": true, "requires": { "xml-name-validator": "^4.0.0" } @@ -28297,7 +25899,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "dev": true, "requires": { "axios": "^0.25.0", "joi": "^17.6.0", @@ -28310,7 +25911,6 @@ "version": "0.25.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dev": true, "requires": { "follow-redirects": "^1.14.7" } @@ -28321,7 +25921,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, "requires": { "makeerror": "1.0.12" } @@ -28330,7 +25929,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -28340,7 +25938,6 @@ "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, "requires": { "minimalistic-assert": "^1.0.0" } @@ -28354,7 +25951,6 @@ "version": "5.74.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", - "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -28386,7 +25982,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -28399,7 +25994,6 @@ "version": "4.10.0", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^1.2.0", @@ -28418,8 +26012,7 @@ "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" } } }, @@ -28427,7 +26020,6 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, "requires": { "colorette": "^2.0.10", "memfs": "^3.4.3", @@ -28440,7 +26032,6 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -28452,7 +26043,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.3" } @@ -28460,14 +26050,12 @@ "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -28481,7 +26069,6 @@ "version": "4.11.1", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "dev": true, "requires": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -28518,7 +26105,6 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -28530,7 +26116,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.3" } @@ -28538,20 +26123,17 @@ "ipaddr.js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -28565,7 +26147,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, "requires": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" @@ -28574,14 +26155,12 @@ "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" }, "websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, "requires": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -28591,14 +26170,12 @@ "websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" }, "whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, "requires": { "iconv-lite": "0.6.3" }, @@ -28607,7 +26184,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } @@ -28617,8 +26193,7 @@ "whatwg-mimetype": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==" }, "whatwg-url": { "version": "5.0.0", @@ -28633,7 +26208,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -28642,7 +26216,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -28654,20 +26227,17 @@ "wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" }, "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 + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "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, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -28678,7 +26248,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -28687,7 +26256,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -28695,22 +26263,19 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, "requires": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -28720,50 +26285,42 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "dev": true, "requires": {} }, "xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==" }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yargs": { "version": "17.5.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -28777,14 +26334,12 @@ "yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -28798,8 +26353,7 @@ "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/client/controllers/authController.ts b/server/controllers/authController.ts similarity index 100% rename from client/controllers/authController.ts rename to server/controllers/authController.ts diff --git a/client/controllers/clipboardController.ts b/server/controllers/clipboardController.ts similarity index 100% rename from client/controllers/clipboardController.ts rename to server/controllers/clipboardController.ts diff --git a/client/controllers/projectController.ts b/server/controllers/projectController.ts similarity index 100% rename from client/controllers/projectController.ts rename to server/controllers/projectController.ts diff --git a/client/controllers/testsController.js b/server/controllers/testsController.js similarity index 100% rename from client/controllers/testsController.js rename to server/controllers/testsController.js From 8d26e12d9f1dfdbcf684bfbb40176db5f5269965 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 12:17:40 -0400 Subject: [PATCH 10/27] added favicon to index.html --- client/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/client/index.html b/client/index.html index 45431e6..00d96d4 100644 --- a/client/index.html +++ b/client/index.html @@ -9,6 +9,7 @@ href="https://fonts.googleapis.com/css2?family=Inconsolata&display=swap" rel="stylesheet" /> + <link rel="shortcut icon" type="image/jpg" href="/favicon.ico"/> <link href="http://localhost:3000/stylesheets/styles.scss" rel="stylesheet" /> <link href="./stylesheets/styles.scss" rel="stylesheet" /> <base href="/"> From 31b12e941e79cc48f892bd6c13c051710b6b035e Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 12:24:21 -0400 Subject: [PATCH 11/27] moved favicon to client/assets --- client/favicon.ico | Bin 3379 -> 0 bytes client/index.html | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 client/favicon.ico diff --git a/client/favicon.ico b/client/favicon.ico deleted file mode 100644 index 475265268af6e5931edf45548253d5ff467c1852..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3379 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 JPDHLkV1n)bU%3DP diff --git a/client/index.html b/client/index.html index 00d96d4..342c76a 100644 --- a/client/index.html +++ b/client/index.html @@ -9,7 +9,7 @@ href="https://fonts.googleapis.com/css2?family=Inconsolata&display=swap" rel="stylesheet" /> - <link rel="shortcut icon" type="image/jpg" href="/favicon.ico"/> + <link rel="shortcut icon" type="image/jpg" href="client/assets/favicon.ico"/> <link href="http://localhost:3000/stylesheets/styles.scss" rel="stylesheet" /> <link href="./stylesheets/styles.scss" rel="stylesheet" /> <base href="/"> From b145ac387c9eba8723ec729b5945c8b76437e9e7 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 12:24:34 -0400 Subject: [PATCH 12/27] moved favicon to client/assets --- client/assets/favicon.ico | Bin 0 -> 3379 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 client/assets/favicon.ico diff --git a/client/assets/favicon.ico b/client/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..475265268af6e5931edf45548253d5ff467c1852 GIT binary patch literal 3379 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 JPDHLkV1n)bU%3DP literal 0 HcmV?d00001 From 22dcfd5f7df888f348fc5ac9a999fb5c1d8d0d18 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 13:27:55 -0400 Subject: [PATCH 13/27] modified import route for favicon --- client/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/index.html b/client/index.html index 342c76a..42751ab 100644 --- a/client/index.html +++ b/client/index.html @@ -9,7 +9,7 @@ href="https://fonts.googleapis.com/css2?family=Inconsolata&display=swap" rel="stylesheet" /> - <link rel="shortcut icon" type="image/jpg" href="client/assets/favicon.ico"/> + <link rel="shortcut icon" type="image/jpg" href="assets/favicon.ico"/> <link href="http://localhost:3000/stylesheets/styles.scss" rel="stylesheet" /> <link href="./stylesheets/styles.scss" rel="stylesheet" /> <base href="/"> From ada67775f71b875a90b2754e842d8bcbd2e073b0 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 15:08:03 -0400 Subject: [PATCH 14/27] changed callback url for oauth --- server/controllers/authController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/controllers/authController.ts b/server/controllers/authController.ts index e331607..85f8751 100644 --- a/server/controllers/authController.ts +++ b/server/controllers/authController.ts @@ -19,7 +19,7 @@ type AuthType = { const gitHubSettings: GitHubSettingsType = { clientID: 'bc3cf928850a92c03d5b', clientSecret: 'fea420829222c6882750bc0da33ea383c6780956', - callbackURL: 'https://jester-osp.herokuapp.com/auth/github/callback', + callbackURL: 'https://jester.software/auth/github/callback', scope: ['user:email'] }; From 5f898b91be3524a63491e6551df0bd3ae2421ef1 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Sat, 8 Oct 2022 15:18:34 -0400 Subject: [PATCH 15/27] update footer url --- client/components/Footer.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/components/Footer.tsx b/client/components/Footer.tsx index 72f0386..e18feac 100644 --- a/client/components/Footer.tsx +++ b/client/components/Footer.tsx @@ -15,8 +15,8 @@ function Footer(props: footerPropsType) { }}> <Typography variant="body2" color="text.secondary" align="center" {...props}> {'Copyright © '} - <Link color="inherit" href="https://mui.com/"> - jester-app.dev + <Link color="inherit" href="https://jester.software/"> + jester.software </Link>{' '} {new Date().getFullYear()} {'.'} From 142b2da709337bb479a7d51386c8d55bc0e75074 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Tue, 11 Oct 2022 17:12:47 -0400 Subject: [PATCH 16/27] fixed package.json --- package.json | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/package.json b/package.json index 35ca52b..1b7bfdf 100644 --- a/package.json +++ b/package.json @@ -94,23 +94,6 @@ "typescript": "^4.8.3", "webpack": "^5.74.0", "webpack-cli": "^4.10.0", - "webpack-dev-server": "^4.11.1", - }, - "dependencies": { - "@emotion/react": "^11.10.4", - "@emotion/styled": "^11.10.4", - "cookie-parser": "^1.4.6", - "cookie-session": "^2.0.0", - "dotenv": "^16.0.2", - "express": "^4.18.1", - "js-cookie": "^3.0.1", - "node-fetch": "2.6.7", - "passport": "^0.5.0", - "passport-github2": "^0.1.12", - "pg": "^8.8.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-router-dom": "^6.4.1", - "ts-node": "^10.9.1", + "webpack-dev-server": "^4.11.1" } } From 79d1f86ce057786a525b3dd5fea039309feb3aa9 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Tue, 11 Oct 2022 17:38:47 -0400 Subject: [PATCH 17/27] merge 'dev' into bh/heroku --- client/index.html | 6 ------ package.json | 1 - 2 files changed, 7 deletions(-) diff --git a/client/index.html b/client/index.html index 767e7b9..de2e385 100644 --- a/client/index.html +++ b/client/index.html @@ -14,11 +14,5 @@ <div id="root"></div> <script src="dist/bundle.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script> - <script> - - - // hljs.initHighlightingOnLoad(); - hljs.highlightAll(); - </script> </body> </html> diff --git a/package.json b/package.json index 1b7bfdf..3af9d45 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,6 @@ "scripts": { "test": "jest --verbose", "build": "NODE_ENV=production webpack", - "postinstall": "npm run build", "start": "NODE_ENV=production npx ts-node server/server.ts", "dev": "NODE_ENV=development webpack-dev-server & NODE_ENV=development nodemon server/server.ts", ".": "npm run build && npm run start" From 733f34bd0bb01c97fc3a0dd692f6f184af203707 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Tue, 11 Oct 2022 21:49:18 -0400 Subject: [PATCH 18/27] updated footer --- client/components/Footer.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/components/Footer.tsx b/client/components/Footer.tsx index af2867f..dab9a07 100644 --- a/client/components/Footer.tsx +++ b/client/components/Footer.tsx @@ -13,8 +13,8 @@ function Footer() { > <Typography variant="body2" color="text.secondary" align="center"> {'Copyright © '} - <Link color="inherit" href="https://jester.software"> - jester.software + <Link color="inherit" href="https://github.com/oslabs-beta/Jester"> + Jester </Link>{' '} {new Date().getFullYear()} {'.'} From b5e450a2abc2a3cd8b249e536a3a2557b0b55bd2 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Wed, 12 Oct 2022 10:16:55 -0400 Subject: [PATCH 19/27] removed link to localhost 3000 in index.html --- client/index.html | 1 - 1 file changed, 1 deletion(-) diff --git a/client/index.html b/client/index.html index de2e385..f450e64 100644 --- a/client/index.html +++ b/client/index.html @@ -4,7 +4,6 @@ <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="shortcut icon" type="image/jpg" href="assets/favicon.ico"/> - <link href="http://localhost:3000/stylesheets/styles.scss" rel="stylesheet" /> <link href="./stylesheets/styles.scss" rel="stylesheet" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/atom-one-dark.min.css"> <base href="/"> From 6a6b2226795f4ac8fa356170512732469c671857 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Wed, 12 Oct 2022 10:18:16 -0400 Subject: [PATCH 20/27] update package.json license to MIT --- package.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/package.json b/package.json index 3af9d45..a072a8e 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ }, "keywords": [], "author": "", - "license": "ISC", + "license": "MIT", "bugs": { "url": "https://github.com/oslabs-beta/jester/issues" }, @@ -27,9 +27,6 @@ "@testing-library/jest-dom/extend-expect" ] }, - "devDependencies": { - "nodemon": "^2.0.20" - }, "dependencies": { "@emotion/react": "^11.10.4", "@emotion/styled": "^11.10.4", From d587b8678a4702d29b598965bd6252ee79ee0531 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Wed, 12 Oct 2022 12:00:23 -0400 Subject: [PATCH 21/27] updated env variables for heroku --- server/controllers/authController.ts | 6 +++--- server/models/userModel.js | 4 +--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/server/controllers/authController.ts b/server/controllers/authController.ts index c2ba89a..d27f33c 100644 --- a/server/controllers/authController.ts +++ b/server/controllers/authController.ts @@ -18,9 +18,9 @@ type AuthType = { type DoneType = (err: Error | null, user: Express.User) => void const gitHubSettings: GitHubSettingsType = { - clientID: process.env.clientIDLocal || '', - clientSecret: process.env.clientSecretLocal || '', - callbackURL: `${process.env.root_url}/auth/github/callback`, + clientID: process.env.clientIDHeroku || '', + clientSecret: process.env.clientSecretHeroku || '', + callbackURL: 'https://jester.software/auth/github/callback', scope: ['user:email'] }; diff --git a/server/models/userModel.js b/server/models/userModel.js index bc6e42e..24331d0 100644 --- a/server/models/userModel.js +++ b/server/models/userModel.js @@ -1,9 +1,7 @@ import { Pool } from 'pg'; -const PG_URI = 'postgres://waajwpef:oV4vRHcXXEGPK8T712j_rOh1BURf_Sw8@jelani.db.elephantsql.com/waajwpef'; - const pool = new Pool({ - connectionString: PG_URI + connectionString: process.env.PG_URI }); export default { From 52a2b4b6de8546ebae2b54de3f5320aed95e00cb Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Wed, 12 Oct 2022 12:13:33 -0400 Subject: [PATCH 22/27] updated path to stylesheet --- client/index.html | 2 +- package-lock.json | 292 +--------------------------------------------- 2 files changed, 5 insertions(+), 289 deletions(-) diff --git a/client/index.html b/client/index.html index b8c3653..72f2da6 100644 --- a/client/index.html +++ b/client/index.html @@ -4,7 +4,7 @@ <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="shortcut icon" type="image/jpg" href="assets/favicon.ico"/> - <link href="./stylesheets/styles.scss" rel="stylesheet" /> + <link href="stylesheets/styles.scss" rel="stylesheet" /> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet"> diff --git a/package-lock.json b/package-lock.json index 6e746f9..e73c32a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,31 +7,8 @@ "": { "name": "jester", "version": "1.0.0", - "hasInstallScript": true, - "license": "ISC", + "license": "MIT", "dependencies": { -<<<<<<< HEAD -======= - "@emotion/react": "^11.10.4", - "@emotion/styled": "^11.10.4", - "cookie-parser": "^1.4.6", - "cookie-session": "^2.0.0", - "dotenv": "^16.0.3", - "express": "^4.18.1", - "file-loader": "^6.2.0", - "highlight.js": "^11.6.0", - "js-cookie": "^3.0.1", - "node-fetch": "2.6.7", - "passport": "^0.5.0", - "passport-github2": "^0.1.12", - "pg": "^8.8.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-router-dom": "^6.4.1", - "ts-node": "^10.9.1" - }, - "devDependencies": { ->>>>>>> dev "@babel/core": "^7.19.1", "@babel/preset-env": "^7.19.1", "@babel/preset-flow": "^7.18.6", @@ -63,10 +40,12 @@ "cookie-parser": "^1.4.6", "cookie-session": "^2.0.0", "css-loader": "^6.7.1", - "dotenv": "^16.0.2", + "dotenv": "^16.0.3", "eslint": "^8.24.0", "eslint-plugin-react": "^7.31.8", "express": "^4.18.1", + "file-loader": "^6.2.0", + "highlight.js": "^11.6.0", "html-webpack-plugin": "^5.5.0", "jest": "^29.0.3", "jest-environment-jsdom": "^28.1.0", @@ -93,9 +72,6 @@ "webpack": "^5.74.0", "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.11.1" - }, - "devDependencies": { - "nodemon": "^2.0.20" } }, "node_modules/@adobe/css-tools": { @@ -1952,7 +1928,6 @@ "version": "0.8.5", "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", - "dev": true, "peer": true }, "node_modules/@emotion/unitless": { @@ -4554,12 +4529,6 @@ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, - "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==", - "dev": true - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -5042,7 +5011,6 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", - "dev": true, "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", @@ -5059,7 +5027,6 @@ "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==", - "dev": true, "peer": true }, "node_modules/babel-preset-current-node-syntax": { @@ -5372,7 +5339,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==", - "dev": true, "peer": true }, "node_modules/caniuse-lite": { @@ -5816,7 +5782,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", - "dev": true, "peer": true, "engines": { "node": ">=4" @@ -5880,7 +5845,6 @@ "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==", - "dev": true, "peer": true, "dependencies": { "camelize": "^1.0.0", @@ -8208,12 +8172,6 @@ "node": ">= 4" } }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, "node_modules/immer": { "version": "9.0.15", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", @@ -11840,67 +11798,6 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, - "node_modules/nodemon": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", - "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/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/nodemon/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/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -12695,12 +12592,6 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -13583,7 +13474,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "dev": true, "peer": true }, "node_modules/shebang-command": { @@ -13623,27 +13513,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "node_modules/simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", - "dev": true, - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -13934,7 +13803,6 @@ "version": "5.3.6", "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz", "integrity": "sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==", - "dev": true, "hasInstallScript": true, "peer": true, "dependencies": { @@ -13966,7 +13834,6 @@ "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", - "dev": true, "peer": true }, "node_modules/stylis": { @@ -14271,18 +14138,6 @@ "node": ">=0.6" } }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, "node_modules/tough-cookie": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", @@ -14570,12 +14425,6 @@ "through": "^2.3.8" } }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -16670,7 +16519,6 @@ "version": "0.8.5", "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", - "dev": true, "peer": true }, "@emotion/unitless": { @@ -16682,7 +16530,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", - "dev": true, "requires": {} }, "@emotion/utils": { @@ -17632,7 +17479,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz", "integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==", - "dev": true, "requires": {} }, "@mui/utils": { @@ -17865,7 +17711,6 @@ "version": "14.4.3", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.4.3.tgz", "integrity": "sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==", - "dev": true, "requires": {} }, "@tootallnate/once": { @@ -18596,7 +18441,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, "requires": {} }, "@webpack-cli/info": { @@ -18611,7 +18455,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, "requires": {} }, "@xtuc/ieee754": { @@ -18629,12 +18472,6 @@ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -18669,17 +18506,12 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", -<<<<<<< HEAD - "dev": true, -======= ->>>>>>> dev "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "requires": {} }, "acorn-walk": { @@ -18736,10 +18568,6 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", -<<<<<<< HEAD - "dev": true, -======= ->>>>>>> dev "requires": {} }, "ansi-escapes": { @@ -18994,7 +18822,6 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", - "dev": true, "peer": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.0", @@ -19008,7 +18835,6 @@ "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==", - "dev": true, "peer": true }, "babel-preset-current-node-syntax": { @@ -19238,14 +19064,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==", - "dev": true, - "peer": true - }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==", - "dev": true, "peer": true }, "caniuse-lite": { @@ -19578,7 +19396,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", - "dev": true, "peer": true }, "css-loader": { @@ -19622,7 +19439,6 @@ "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==", - "dev": true, "peer": true, "requires": { "camelize": "^1.0.0", @@ -21293,7 +21109,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, "requires": {} }, "ieee754": { @@ -21306,12 +21121,6 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, "immer": { "version": "9.0.15", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", @@ -22791,7 +22600,6 @@ "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": {} }, "jest-puppeteer": { @@ -23953,50 +23761,6 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, - "nodemon": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", - "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", - "dev": true, - "requires": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -24344,7 +24108,6 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", - "dev": true, "requires": {} }, "pg-protocol": { @@ -24409,7 +24172,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, "requires": {} }, "postcss-modules-local-by-default": { @@ -24566,12 +24328,6 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, - "pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -24609,7 +24365,6 @@ "version": "8.7.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", - "dev": true, "requires": {} } } @@ -24793,7 +24548,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", - "dev": true, "requires": {} }, "regenerate": { @@ -25199,7 +24953,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "dev": true, "peer": true }, "shebang-command": { @@ -25230,23 +24983,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", - "dev": true, - "requires": { - "semver": "~7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -25455,14 +25191,12 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, "requires": {} }, "styled-components": { "version": "5.3.6", "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz", "integrity": "sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==", - "dev": true, "peer": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -25481,7 +25215,6 @@ "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", - "dev": true, "peer": true } } @@ -25702,15 +25435,6 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, "tough-cookie": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", @@ -25905,12 +25629,6 @@ "through": "^2.3.8" } }, - "undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -25975,7 +25693,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "dev": true, "requires": {} }, "util-deprecate": { @@ -26424,7 +26141,6 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "dev": true, "requires": {} }, "xml-name-validator": { From 737c9e35b4c1f9b5e0f87e1b5d6c06d4ff509ad3 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Wed, 12 Oct 2022 16:21:36 -0400 Subject: [PATCH 23/27] merge 'dev' into heroku --- dist/dist/bundle.js | 12 +- dist/dist/bundle.js.LICENSE.txt | 2 + package-lock.json | 573 ++++++++++++++++---------------- 3 files changed, 287 insertions(+), 300 deletions(-) diff --git a/dist/dist/bundle.js b/dist/dist/bundle.js index b4cd522..9034e40 100644 --- a/dist/dist/bundle.js +++ b/dist/dist/bundle.js @@ -1,5 +1,5 @@ /*! For license information please see bundle.js.LICENSE.txt */ -(()=>{var e,t,n={6898:(e,t,n)=>{"use strict";n.d(t,{Z:()=>re});var r=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{n.insertRule(e,n.cssRules.length)}catch(e){}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach((function(e){return e.parentNode&&e.parentNode.removeChild(e)})),this.tags=[],this.ctr=0},e}(),o=Math.abs,a=String.fromCharCode,i=Object.assign;function s(e){return e.trim()}function l(e,t,n){return e.replace(t,n)}function c(e,t){return e.indexOf(t)}function u(e,t){return 0|e.charCodeAt(t)}function d(e,t,n){return e.slice(t,n)}function p(e){return e.length}function f(e){return e.length}function m(e,t){return t.push(e),e}var h=1,g=1,b=0,v=0,y=0,w="";function x(e,t,n,r,o,a,i){return{value:e,root:t,parent:n,type:r,props:o,children:a,line:h,column:g,length:i,return:""}}function E(e,t){return i(x("",null,null,"",null,null,0),e,{length:-e.length},t)}function k(){return y=v>0?u(w,--v):0,g--,10===y&&(g=1,h--),y}function _(){return y=v<b?u(w,v++):0,g++,10===y&&(g=1,h++),y}function S(){return u(w,v)}function C(){return v}function N(e,t){return d(w,e,t)}function O(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function R(e){return h=g=1,b=p(w=e),v=0,[]}function M(e){return w="",e}function T(e){return s(N(v-1,Z(91===e?e+2:40===e?e+1:e)))}function P(e){for(;(y=S())&&y<33;)_();return O(e)>2||O(y)>3?"":" "}function A(e,t){for(;--t&&_()&&!(y<48||y>102||y>57&&y<65||y>70&&y<97););return N(e,C()+(t<6&&32==S()&&32==_()))}function Z(e){for(;_();)switch(y){case e:return v;case 34:case 39:34!==e&&39!==e&&Z(y);break;case 40:41===e&&Z(e);break;case 92:_()}return v}function I(e,t){for(;_()&&e+y!==57&&(e+y!==84||47!==S()););return"/*"+N(t,v-1)+"*"+a(47===e?e:_())}function L(e){for(;!O(S());)_();return N(e,v)}var j="-ms-",D="-moz-",z="-webkit-",B="comm",F="rule",$="decl",U="@keyframes";function W(e,t){for(var n="",r=f(e),o=0;o<r;o++)n+=t(e[o],o,e,t)||"";return n}function H(e,t,n,r){switch(e.type){case"@import":case $:return e.return=e.return||e.value;case B:return"";case U:return e.return=e.value+"{"+W(e.children,r)+"}";case F:e.value=e.props.join(",")}return p(n=W(e.children,r))?e.return=e.value+"{"+n+"}":""}function q(e,t){switch(function(e,t){return(((t<<2^u(e,0))<<2^u(e,1))<<2^u(e,2))<<2^u(e,3)}(e,t)){case 5103:return z+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return z+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return z+e+D+e+j+e+e;case 6828:case 4268:return z+e+j+e+e;case 6165:return z+e+j+"flex-"+e+e;case 5187:return z+e+l(e,/(\w+).+(:[^]+)/,"-webkit-box-$1$2-ms-flex-$1$2")+e;case 5443:return z+e+j+"flex-item-"+l(e,/flex-|-self/,"")+e;case 4675:return z+e+j+"flex-line-pack"+l(e,/align-content|flex-|-self/,"")+e;case 5548:return z+e+j+l(e,"shrink","negative")+e;case 5292:return z+e+j+l(e,"basis","preferred-size")+e;case 6060:return z+"box-"+l(e,"-grow","")+z+e+j+l(e,"grow","positive")+e;case 4554:return z+l(e,/([^-])(transform)/g,"$1-webkit-$2")+e;case 6187:return l(l(l(e,/(zoom-|grab)/,z+"$1"),/(image-set)/,z+"$1"),e,"")+e;case 5495:case 3959:return l(e,/(image-set\([^]*)/,z+"$1$`$1");case 4968:return l(l(e,/(.+:)(flex-)?(.*)/,"-webkit-box-pack:$3-ms-flex-pack:$3"),/s.+-b[^;]+/,"justify")+z+e+e;case 4095:case 3583:case 4068:case 2532:return l(e,/(.+)-inline(.+)/,z+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(p(e)-1-t>6)switch(u(e,t+1)){case 109:if(45!==u(e,t+4))break;case 102:return l(e,/(.+:)(.+)-([^]+)/,"$1-webkit-$2-$3$1"+D+(108==u(e,t+3)?"$3":"$2-$3"))+e;case 115:return~c(e,"stretch")?q(l(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==u(e,t+1))break;case 6444:switch(u(e,p(e)-3-(~c(e,"!important")&&10))){case 107:return l(e,":",":"+z)+e;case 101:return l(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+z+(45===u(e,14)?"inline-":"")+"box$3$1"+z+"$2$3$1"+j+"$2box$3")+e}break;case 5936:switch(u(e,t+11)){case 114:return z+e+j+l(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return z+e+j+l(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return z+e+j+l(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return z+e+j+e+e}return e}function V(e){return M(K("",null,null,null,[""],e=R(e),0,[0],e))}function K(e,t,n,r,o,i,s,u,d){for(var f=0,h=0,g=s,b=0,v=0,y=0,w=1,x=1,E=1,N=0,O="",R=o,M=i,Z=r,j=O;x;)switch(y=N,N=_()){case 40:if(108!=y&&58==j.charCodeAt(g-1)){-1!=c(j+=l(T(N),"&","&\f"),"&\f")&&(E=-1);break}case 34:case 39:case 91:j+=T(N);break;case 9:case 10:case 13:case 32:j+=P(y);break;case 92:j+=A(C()-1,7);continue;case 47:switch(S()){case 42:case 47:m(Q(I(_(),C()),t,n),d);break;default:j+="/"}break;case 123*w:u[f++]=p(j)*E;case 125*w:case 59:case 0:switch(N){case 0:case 125:x=0;case 59+h:v>0&&p(j)-g&&m(v>32?X(j+";",r,n,g-1):X(l(j," ","")+";",r,n,g-2),d);break;case 59:j+=";";default:if(m(Z=G(j,t,n,f,h,o,u,O,R=[],M=[],g),i),123===N)if(0===h)K(j,t,Z,Z,R,i,g,u,M);else switch(b){case 100:case 109:case 115:K(e,Z,Z,r&&m(G(e,Z,Z,0,0,o,u,O,o,R=[],g),M),o,M,g,u,r?R:M);break;default:K(j,Z,Z,Z,[""],M,0,u,M)}}f=h=v=0,w=E=1,O=j="",g=s;break;case 58:g=1+p(j),v=y;default:if(w<1)if(123==N)--w;else if(125==N&&0==w++&&125==k())continue;switch(j+=a(N),N*w){case 38:E=h>0?1:(j+="\f",-1);break;case 44:u[f++]=(p(j)-1)*E,E=1;break;case 64:45===S()&&(j+=T(_())),b=S(),h=g=p(O=j+=L(C())),N++;break;case 45:45===y&&2==p(j)&&(w=0)}}return i}function G(e,t,n,r,a,i,c,u,p,m,h){for(var g=a-1,b=0===a?i:[""],v=f(b),y=0,w=0,E=0;y<r;++y)for(var k=0,_=d(e,g+1,g=o(w=c[y])),S=e;k<v;++k)(S=s(w>0?b[k]+" "+_:l(_,/&\f/g,b[k])))&&(p[E++]=S);return x(e,t,n,0===a?F:u,p,m,h)}function Q(e,t,n){return x(e,t,n,B,a(y),d(e,2,-2),0)}function X(e,t,n,r){return x(e,t,n,$,d(e,0,r),d(e,r+1,-1),r)}var Y=function(e,t,n){for(var r=0,o=0;r=o,o=S(),38===r&&12===o&&(t[n]=1),!O(o);)_();return N(e,v)},J=new WeakMap,ee=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||J.get(n))&&!r){J.set(e,!0);for(var o=[],i=function(e,t){return M(function(e,t){var n=-1,r=44;do{switch(O(r)){case 0:38===r&&12===S()&&(t[n]=1),e[n]+=Y(v-1,t,n);break;case 2:e[n]+=T(r);break;case 4:if(44===r){e[++n]=58===S()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=a(r)}}while(r=_());return e}(R(e),t))}(t,o),s=n.props,l=0,c=0;l<i.length;l++)for(var u=0;u<s.length;u++,c++)e.props[c]=o[l]?i[l].replace(/&\f/g,s[u]):s[u]+" "+i[l]}}},te=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}},ne=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case $:e.return=q(e.value,e.length);break;case U:return W([E(e,{value:l(e.value,"@","@"+z)})],r);case F:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=/(::plac\w+|:read-\w+)/.exec(e))?e[0]:e}(t)){case":read-only":case":read-write":return W([E(e,{props:[l(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return W([E(e,{props:[l(t,/:(plac\w+)/,":-webkit-input-$1")]}),E(e,{props:[l(t,/:(plac\w+)/,":-moz-$1")]}),E(e,{props:[l(t,/:(plac\w+)/,j+"input-$1")]})],r)}return""}))}}];const re=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var o,a,i=e.stylisPlugins||ne,s={},l=[];o=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n<t.length;n++)s[t[n]]=!0;l.push(e)}));var c,u,d,p,m=[H,(p=function(e){c.insert(e)},function(e){e.root||(e=e.return)&&p(e)})],h=(u=[ee,te].concat(i,m),d=f(u),function(e,t,n,r){for(var o="",a=0;a<d;a++)o+=u[a](e,t,n,r)||"";return o});a=function(e,t,n,r){c=n,W(V(e?e+"{"+t.styles+"}":t.styles),h),r&&(g.inserted[t.name]=!0)};var g={key:t,sheet:new r({key:t,container:o,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:s,registered:{},insert:a};return g.sheet.hydrate(l),g}},5042:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=function(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}},2443:(e,t,n)=>{"use strict";n.d(t,{T:()=>s,w:()=>i});var r=n(7294),o=n(6898),a=(n(6797),n(7278),(0,r.createContext)("undefined"!=typeof HTMLElement?(0,o.Z)({key:"css"}):null));a.Provider;var i=function(e){return(0,r.forwardRef)((function(t,n){var o=(0,r.useContext)(a);return e(t,o,n)}))},s=(0,r.createContext)({})},6797:(e,t,n)=>{"use strict";n.d(t,{O:()=>h});const r=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)},o={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var a=n(5042),i=/[A-Z]|^ms/g,s=/_EMO_([^_]+?)_([^]*?)_EMO_/g,l=function(e){return 45===e.charCodeAt(1)},c=function(e){return null!=e&&"boolean"!=typeof e},u=(0,a.Z)((function(e){return l(e)?e:e.replace(i,"-$&").toLowerCase()})),d=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(s,(function(e,t,n){return f={name:t,styles:n,next:f},t}))}return 1===o[e]||l(e)||"number"!=typeof t||0===t?t:t+"px"};function p(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return f={name:n.name,styles:n.styles,next:f},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)f={name:r.name,styles:r.styles,next:f},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o<n.length;o++)r+=p(e,t,n[o])+";";else for(var a in n){var i=n[a];if("object"!=typeof i)null!=t&&void 0!==t[i]?r+=a+"{"+t[i]+"}":c(i)&&(r+=u(a)+":"+d(a,i)+";");else if(!Array.isArray(i)||"string"!=typeof i[0]||null!=t&&void 0!==t[i[0]]){var s=p(e,t,i);switch(a){case"animation":case"animationName":r+=u(a)+":"+s+";";break;default:r+=a+"{"+s+"}"}}else for(var l=0;l<i.length;l++)c(i[l])&&(r+=u(a)+":"+d(a,i[l])+";")}return r}(e,t,n);case"function":if(void 0!==e){var o=f,a=n(e);return f=o,p(e,t,a)}}if(null==t)return n;var i=t[n];return void 0!==i?i:n}var f,m=/label:\s*([^\s;\n{]+)\s*(;|$)/g,h=function(e,t,n){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var o=!0,a="";f=void 0;var i=e[0];null==i||void 0===i.raw?(o=!1,a+=p(n,t,i)):a+=i[0];for(var s=1;s<e.length;s++)a+=p(n,t,e[s]),o&&(a+=i[s]);m.lastIndex=0;for(var l,c="";null!==(l=m.exec(a));)c+="-"+l[1];return{name:r(a)+c,styles:a,next:f}}},7278:(e,t,n)=>{"use strict";var r;n.d(t,{L:()=>i,j:()=>s});var o=n(7294),a=!!(r||(r=n.t(o,2))).useInsertionEffect&&(r||(r=n.t(o,2))).useInsertionEffect,i=a||function(e){return e()},s=a||o.useLayoutEffect},444:(e,t,n)=>{"use strict";function r(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):r+=n+" "})),r}n.d(t,{My:()=>a,fp:()=>r,hC:()=>o});var o=function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)},a=function(e,t,n){o(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var a=t;do{e.insert(t===a?"."+r:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}},8309:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"}),"AddBox");t.Z=i},4670:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h10v-2H4v-6h18V6c0-1.11-.89-2-2-2zm0 4H4V6h16v2zm4 9v2h-3v3h-2v-3h-3v-2h3v-3h2v3h3z"}),"AddCard");t.Z=i},1523:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-5 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z"}),"Article");t.Z=i},84:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)([(0,a.jsx)("path",{d:"M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6z"},"0"),(0,a.jsx)("path",{d:"M20 2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 10-2.5-1.5L15 12V4h5v8z"},"1")],"CollectionsBookmark");t.Z=i},1899:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"}),"ContentCopy");t.Z=i},4927:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"}),"CreditCard");t.Z=i},1733:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"}),"Delete");t.Z=i},8364:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12 1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"}),"DeleteForever");t.Z=i},422:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"m18 7-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L11.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41 6 19l1.41-1.41L1.83 12 .41 13.41z"}),"DoneAll");t.Z=i},5449:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0,function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=i(t);if(n&&n.has(e))return n.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var s=o?Object.getOwnPropertyDescriptor(e,a):null;s&&(s.get||s.set)?Object.defineProperty(r,a,s):r[a]=e[a]}r.default=e,n&&n.set(e,r)}(n(7294));var o=r(n(4938)),a=n(5893);function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(i=function(e){return e?n:t})(e)}var s=(0,o.default)((0,a.jsx)("path",{d:"M12 1.27a11 11 0 00-3.48 21.46c.55.09.73-.28.73-.55v-1.84c-3.03.64-3.67-1.46-3.67-1.46-.55-1.29-1.28-1.65-1.28-1.65-.92-.65.1-.65.1-.65 1.1 0 1.73 1.1 1.73 1.1.92 1.65 2.57 1.2 3.21.92a2 2 0 01.64-1.47c-2.47-.27-5.04-1.19-5.04-5.5 0-1.1.46-2.1 1.2-2.84a3.76 3.76 0 010-2.93s.91-.28 3.11 1.1c1.8-.49 3.7-.49 5.5 0 2.1-1.38 3.02-1.1 3.02-1.1a3.76 3.76 0 010 2.93c.83.74 1.2 1.74 1.2 2.94 0 4.21-2.57 5.13-5.04 5.4.45.37.82.92.82 2.02v3.03c0 .27.1.64.73.55A11 11 0 0012 1.27"}),"GitHub");t.Z=s},6638:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"}),"Home");t.Z=i},725:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M19 3h-4.18C14.4 1.84 13.3 1 12 1s-2.4.84-2.82 2H5c-.14 0-.27.01-.4.04-.39.08-.74.28-1.01.55-.18.18-.33.4-.43.64-.1.23-.16.49-.16.77v14c0 .27.06.54.16.78s.25.45.43.64c.27.27.62.47 1.01.55.13.02.26.03.4.03h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-8 11.17-1.41 1.42L6 12l3.59-3.59L11 9.83 8.83 12 11 14.17zm1-9.92c-.41 0-.75-.34-.75-.75s.34-.75.75-.75.75.34.75.75-.34.75-.75.75zm2.41 11.34L13 14.17 15.17 12 13 9.83l1.41-1.42L18 12l-3.59 3.59z"}),"IntegrationInstructions");t.Z=i},9485:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M11 7 9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5-5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8v14z"}),"Login");t.Z=i},3540:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"m17 7-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z"}),"Logout");t.Z=i},6818:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z"}),"Save");t.Z=i},4938:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return r.createSvgIcon}});var r=n(4116)},5517:(e,t,n)=>{"use strict";n.d(t,{Z:()=>se});var r=n(7462),o=n(3366),a=n(1387),i=n(9766),s=n(4869),l=n(1796);const c={black:"#000",white:"#fff"},u={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},d="#f3e5f5",p="#ce93d8",f="#ba68c8",m="#ab47bc",h="#9c27b0",g="#7b1fa2",b="#e57373",v="#ef5350",y="#f44336",w="#d32f2f",x="#c62828",E="#ffb74d",k="#ffa726",_="#ff9800",S="#f57c00",C="#e65100",N="#e3f2fd",O="#90caf9",R="#42a5f5",M="#1976d2",T="#1565c0",P="#4fc3f7",A="#29b6f6",Z="#03a9f4",I="#0288d1",L="#01579b",j="#81c784",D="#66bb6a",z="#4caf50",B="#388e3c",F="#2e7d32",$="#1b5e20",U=["mode","contrastThreshold","tonalOffset"],W={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:c.white,default:c.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},H={text:{primary:c.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:c.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function q(e,t,n,r){const o=r.light||r,a=r.dark||1.5*r;e[t]||(e.hasOwnProperty(n)?e[t]=e[n]:"light"===t?e.light=(0,l.$n)(e.main,o):"dark"===t&&(e.dark=(0,l._j)(e.main,a)))}const V=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"],K={textTransform:"uppercase"},G='"Roboto", "Helvetica", "Arial", sans-serif';function Q(e,t){const n="function"==typeof t?t(e):t,{fontFamily:a=G,fontSize:s=14,fontWeightLight:l=300,fontWeightRegular:c=400,fontWeightMedium:u=500,fontWeightBold:d=700,htmlFontSize:p=16,allVariants:f,pxToRem:m}=n,h=(0,o.Z)(n,V),g=s/14,b=m||(e=>e/p*g+"rem"),v=(e,t,n,o,i)=>{return(0,r.Z)({fontFamily:a,fontWeight:e,fontSize:b(t),lineHeight:n},a===G?{letterSpacing:(s=o/t,Math.round(1e5*s)/1e5+"em")}:{},i,f);var s},y={h1:v(l,96,1.167,-1.5),h2:v(l,60,1.2,-.5),h3:v(c,48,1.167,0),h4:v(c,34,1.235,.25),h5:v(c,24,1.334,0),h6:v(u,20,1.6,.15),subtitle1:v(c,16,1.75,.15),subtitle2:v(u,14,1.57,.1),body1:v(c,16,1.5,.15),body2:v(c,14,1.43,.15),button:v(u,14,1.75,.4,K),caption:v(c,12,1.66,.4),overline:v(c,12,2.66,1,K)};return(0,i.Z)((0,r.Z)({htmlFontSize:p,pxToRem:b,fontFamily:a,fontSize:s,fontWeightLight:l,fontWeightRegular:c,fontWeightMedium:u,fontWeightBold:d},y),h,{clone:!1})}function X(...e){return[`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px rgba(0,0,0,0.2)`,`${e[4]}px ${e[5]}px ${e[6]}px ${e[7]}px rgba(0,0,0,0.14)`,`${e[8]}px ${e[9]}px ${e[10]}px ${e[11]}px rgba(0,0,0,0.12)`].join(",")}const Y=["none",X(0,2,1,-1,0,1,1,0,0,1,3,0),X(0,3,1,-2,0,2,2,0,0,1,5,0),X(0,3,3,-2,0,3,4,0,0,1,8,0),X(0,2,4,-1,0,4,5,0,0,1,10,0),X(0,3,5,-1,0,5,8,0,0,1,14,0),X(0,3,5,-1,0,6,10,0,0,1,18,0),X(0,4,5,-2,0,7,10,1,0,2,16,1),X(0,5,5,-3,0,8,10,1,0,3,14,2),X(0,5,6,-3,0,9,12,1,0,3,16,2),X(0,6,6,-3,0,10,14,1,0,4,18,3),X(0,6,7,-4,0,11,15,1,0,4,20,3),X(0,7,8,-4,0,12,17,2,0,5,22,4),X(0,7,8,-4,0,13,19,2,0,5,24,4),X(0,7,9,-4,0,14,21,2,0,5,26,4),X(0,8,9,-5,0,15,22,2,0,6,28,5),X(0,8,10,-5,0,16,24,2,0,6,30,5),X(0,8,11,-5,0,17,26,2,0,6,32,5),X(0,9,11,-5,0,18,28,2,0,7,34,6),X(0,9,12,-6,0,19,29,2,0,7,36,6),X(0,10,13,-6,0,20,31,3,0,8,38,7),X(0,10,13,-6,0,21,33,3,0,8,40,7),X(0,10,14,-6,0,22,35,3,0,8,42,7),X(0,11,14,-7,0,23,36,3,0,9,44,8),X(0,11,15,-7,0,24,38,3,0,9,46,8)],J=["duration","easing","delay"],ee={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},te={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function ne(e){return`${Math.round(e)}ms`}function re(e){if(!e)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function oe(e){const t=(0,r.Z)({},ee,e.easing),n=(0,r.Z)({},te,e.duration);return(0,r.Z)({getAutoHeightDuration:re,create:(e=["all"],r={})=>{const{duration:a=n.standard,easing:i=t.easeInOut,delay:s=0}=r;return(0,o.Z)(r,J),(Array.isArray(e)?e:[e]).map((e=>`${e} ${"string"==typeof a?a:ne(a)} ${i} ${"string"==typeof s?s:ne(s)}`)).join(",")}},e,{easing:t,duration:n})}const ae={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},ie=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];const se=function(e={},...t){const{mixins:n={},palette:V={},transitions:K={},typography:G={}}=e,X=(0,o.Z)(e,ie);if(e.vars)throw new Error((0,a.Z)(18));const J=function(e){const{mode:t="light",contrastThreshold:n=3,tonalOffset:s=.2}=e,V=(0,o.Z)(e,U),K=e.primary||function(e="light"){return"dark"===e?{main:O,light:N,dark:R}:{main:M,light:R,dark:T}}(t),G=e.secondary||function(e="light"){return"dark"===e?{main:p,light:d,dark:m}:{main:h,light:f,dark:g}}(t),Q=e.error||function(e="light"){return"dark"===e?{main:y,light:b,dark:w}:{main:w,light:v,dark:x}}(t),X=e.info||function(e="light"){return"dark"===e?{main:A,light:P,dark:I}:{main:I,light:Z,dark:L}}(t),Y=e.success||function(e="light"){return"dark"===e?{main:D,light:j,dark:B}:{main:F,light:z,dark:$}}(t),J=e.warning||function(e="light"){return"dark"===e?{main:k,light:E,dark:S}:{main:"#ed6c02",light:_,dark:C}}(t);function ee(e){return(0,l.mi)(e,H.text.primary)>=n?H.text.primary:W.text.primary}const te=({color:e,name:t,mainShade:n=500,lightShade:o=300,darkShade:i=700})=>{if(!(e=(0,r.Z)({},e)).main&&e[n]&&(e.main=e[n]),!e.hasOwnProperty("main"))throw new Error((0,a.Z)(11,t?` (${t})`:"",n));if("string"!=typeof e.main)throw new Error((0,a.Z)(12,t?` (${t})`:"",JSON.stringify(e.main)));return q(e,"light",o,s),q(e,"dark",i,s),e.contrastText||(e.contrastText=ee(e.main)),e},ne={dark:H,light:W};return(0,i.Z)((0,r.Z)({common:(0,r.Z)({},c),mode:t,primary:te({color:K,name:"primary"}),secondary:te({color:G,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:te({color:Q,name:"error"}),warning:te({color:J,name:"warning"}),info:te({color:X,name:"info"}),success:te({color:Y,name:"success"}),grey:u,contrastThreshold:n,getContrastText:ee,augmentColor:te,tonalOffset:s},ne[t]),V)}(V),ee=(0,s.Z)(e);let te=(0,i.Z)(ee,{mixins:(ne=ee.breakpoints,re=n,(0,r.Z)({toolbar:{minHeight:56,[ne.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[ne.up("sm")]:{minHeight:64}}},re)),palette:J,shadows:Y.slice(),typography:Q(J,G),transitions:oe(K),zIndex:(0,r.Z)({},ae)});var ne,re;return te=(0,i.Z)(te,X),te=t.reduce(((e,t)=>(0,i.Z)(e,t)),te),te}},5165:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=(0,n(5517).Z)()},4174:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>E,FO:()=>y,Dz:()=>w});var r=n(3366),o=n(7462),a=n(9378),i=n(4869),s=n(8320);const l=["variant"];function c(e){return 0===e.length}function u(e){const{variant:t}=e,n=(0,r.Z)(e,l);let o=t||"";return Object.keys(n).sort().forEach((t=>{o+="color"===t?c(o)?e[t]:(0,s.Z)(e[t]):`${c(o)?t:(0,s.Z)(t)}${(0,s.Z)(e[t].toString())}`})),o}var d=n(6523);const p=["name","slot","skipVariantsResolver","skipSx","overridesResolver"],f=["theme"],m=["theme"];function h(e){return 0===Object.keys(e).length}function g(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}const b=(0,i.Z)();var v=n(5165);const y=e=>g(e)&&"classes"!==e,w=g,x=function(e={}){const{defaultTheme:t=b,rootShouldForwardProp:n=g,slotShouldForwardProp:i=g,styleFunctionSx:s=d.Z}=e,l=e=>{const n=h(e.theme)?t:e.theme;return s((0,o.Z)({},e,{theme:n}))};return l.__mui_systemSx=!0,(e,s={})=>{(0,a.Co)(e,(e=>e.filter((e=>!(null!=e&&e.__mui_systemSx)))));const{name:c,slot:d,skipVariantsResolver:b,skipSx:v,overridesResolver:y}=s,w=(0,r.Z)(s,p),x=void 0!==b?b:d&&"Root"!==d||!1,E=v||!1;let k=g;"Root"===d?k=n:d?k=i:function(e){return"string"==typeof e&&e.charCodeAt(0)>96}(e)&&(k=void 0);const _=(0,a.ZP)(e,(0,o.Z)({shouldForwardProp:k,label:void 0},w)),S=(e,...n)=>{const a=n?n.map((e=>"function"==typeof e&&e.__emotion_real!==e?n=>{let{theme:a}=n,i=(0,r.Z)(n,f);return e((0,o.Z)({theme:h(a)?t:a},i))}:e)):[];let i=e;c&&y&&a.push((e=>{const n=h(e.theme)?t:e.theme,r=((e,t)=>t.components&&t.components[e]&&t.components[e].styleOverrides?t.components[e].styleOverrides:null)(c,n);if(r){const t={};return Object.entries(r).forEach((([r,a])=>{t[r]="function"==typeof a?a((0,o.Z)({},e,{theme:n})):a})),y(e,t)}return null})),c&&!x&&a.push((e=>{const n=h(e.theme)?t:e.theme;return((e,t,n,r)=>{var o,a;const{ownerState:i={}}=e,s=[],l=null==n||null==(o=n.components)||null==(a=o[r])?void 0:a.variants;return l&&l.forEach((n=>{let r=!0;Object.keys(n.props).forEach((t=>{i[t]!==n.props[t]&&e[t]!==n.props[t]&&(r=!1)})),r&&s.push(t[u(n.props)])})),s})(e,((e,t)=>{let n=[];t&&t.components&&t.components[e]&&t.components[e].variants&&(n=t.components[e].variants);const r={};return n.forEach((e=>{const t=u(e.props);r[t]=e.style})),r})(c,n),n,c)})),E||a.push(l);const s=a.length-n.length;if(Array.isArray(e)&&s>0){const t=new Array(s).fill("");i=[...e,...t],i.raw=[...e.raw,...t]}else"function"==typeof e&&e.__emotion_real!==e&&(i=n=>{let{theme:a}=n,i=(0,r.Z)(n,m);return e((0,o.Z)({theme:h(a)?t:a},i))});return _(i,...a)};return _.withConfig&&(S.withConfig=_.withConfig),S}}({defaultTheme:v.Z,rootShouldForwardProp:y}),E=x},1468:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7925),o=n(6682);var a=n(5165);function i({props:e,name:t}){return function({props:e,name:t,defaultTheme:n}){const a=function(e){const{theme:t,name:n,props:o}=e;return t&&t.components&&t.components[n]&&t.components[n].defaultProps?(0,r.Z)(t.components[n].defaultProps,o):o}({theme:(0,o.Z)(n),name:t,props:e});return a}({props:e,name:t,defaultTheme:a.Z})}},6622:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(8320).Z},41:(e,t,n)=>{"use strict";n.d(t,{Z:()=>v});var r=n(7462),o=n(7294),a=n(3366),i=n(6010),s=n(4780),l=n(6622),c=n(1468),u=n(4174),d=n(5677);function p(e){return(0,d.Z)("MuiSvgIcon",e)}(0,n(1588).Z)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);var f=n(5893);const m=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],h=(0,u.ZP)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,"inherit"!==n.color&&t[`color${(0,l.Z)(n.color)}`],t[`fontSize${(0,l.Z)(n.fontSize)}`]]}})((({theme:e,ownerState:t})=>{var n,r,o,a,i,s,l,c,u,d,p,f,m,h,g,b,v;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:"currentColor",flexShrink:0,transition:null==(n=e.transitions)||null==(r=n.create)?void 0:r.call(n,"fill",{duration:null==(o=e.transitions)||null==(a=o.duration)?void 0:a.shorter}),fontSize:{inherit:"inherit",small:(null==(i=e.typography)||null==(s=i.pxToRem)?void 0:s.call(i,20))||"1.25rem",medium:(null==(l=e.typography)||null==(c=l.pxToRem)?void 0:c.call(l,24))||"1.5rem",large:(null==(u=e.typography)||null==(d=u.pxToRem)?void 0:d.call(u,35))||"2.1875"}[t.fontSize],color:null!=(p=null==(f=(e.vars||e).palette)||null==(m=f[t.color])?void 0:m.main)?p:{action:null==(h=(e.vars||e).palette)||null==(g=h.action)?void 0:g.active,disabled:null==(b=(e.vars||e).palette)||null==(v=b.action)?void 0:v.disabled,inherit:void 0}[t.color]}})),g=o.forwardRef((function(e,t){const n=(0,c.Z)({props:e,name:"MuiSvgIcon"}),{children:o,className:u,color:d="inherit",component:g="svg",fontSize:b="medium",htmlColor:v,inheritViewBox:y=!1,titleAccess:w,viewBox:x="0 0 24 24"}=n,E=(0,a.Z)(n,m),k=(0,r.Z)({},n,{color:d,component:g,fontSize:b,instanceFontSize:e.fontSize,inheritViewBox:y,viewBox:x}),_={};y||(_.viewBox=x);const S=(e=>{const{color:t,fontSize:n,classes:r}=e,o={root:["root","inherit"!==t&&`color${(0,l.Z)(t)}`,`fontSize${(0,l.Z)(n)}`]};return(0,s.Z)(o,p,r)})(k);return(0,f.jsxs)(h,(0,r.Z)({as:g,className:(0,i.Z)(S.root,u),ownerState:k,focusable:"false",color:v,"aria-hidden":!w||void 0,role:w?"img":void 0,ref:t},_,E,{children:[o,w?(0,f.jsx)("title",{children:w}):null]}))}));g.muiName="SvgIcon";const b=g;function v(e,t){const n=(n,o)=>(0,f.jsx)(b,(0,r.Z)({"data-testid":`${t}Icon`,ref:o},n,{children:e}));return n.muiName=b.muiName,o.memo(o.forwardRef(n))}},5400:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(7596).Z},4116:(e,t,n)=>{"use strict";n.r(t),n.d(t,{capitalize:()=>o.Z,createChainedFunction:()=>a,createSvgIcon:()=>i.Z,debounce:()=>s.Z,deprecatedPropType:()=>l,isMuiElement:()=>c.Z,ownerDocument:()=>u.Z,ownerWindow:()=>d.Z,requirePropFactory:()=>p,setRef:()=>f,unstable_ClassNameGenerator:()=>x,unstable_useEnhancedEffect:()=>m.Z,unstable_useId:()=>h.Z,unsupportedProp:()=>g,useControlled:()=>b.Z,useEventCallback:()=>v.Z,useForkRef:()=>y.Z,useIsFocusVisible:()=>w.Z});var r=n(7078),o=n(6622);const a=n(9064).Z;var i=n(41),s=n(5400);const l=function(e,t){return()=>null};var c=n(3693),u=n(7505),d=n(7577);n(7462);const p=function(e,t){return()=>null},f=n(7960).Z;var m=n(3289),h=n(3192);const g=function(e,t,n,r,o){return null};var b=n(1133),v=n(6432),y=n(4771),w=n(6052);const x={configure:e=>{console.warn(["MUI: `ClassNameGenerator` import from `@mui/material/utils` is outdated and might cause unexpected issues.","","You should use `import { unstable_ClassNameGenerator } from '@mui/material/className'` instead","","The detail of the issue: https://github.com/mui/material-ui/issues/30011#issuecomment-1024993401","","The updated documentation: https://mui.com/guides/classname-generator/"].join("\n")),r.Z.configure(e)}}},3693:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const o=function(e,t){return r.isValidElement(e)&&-1!==t.indexOf(e.type.muiName)}},7505:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(7094).Z},7577:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(8290).Z},1133:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const o=function({controlled:e,default:t,name:n,state:o="value"}){const{current:a}=r.useRef(void 0!==e),[i,s]=r.useState(t);return[a?e:i,r.useCallback((e=>{a||s(e)}),[])]}},3289:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(6600).Z},6432:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(3633).Z},4771:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(67).Z},3192:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(7579).Z},6052:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7294);let o,a=!0,i=!1;const s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function l(e){e.metaKey||e.altKey||e.ctrlKey||(a=!0)}function c(){a=!1}function u(){"hidden"===this.visibilityState&&i&&(a=!0)}const d=function(){const e=r.useCallback((e=>{var t;null!=e&&((t=e.ownerDocument).addEventListener("keydown",l,!0),t.addEventListener("mousedown",c,!0),t.addEventListener("pointerdown",c,!0),t.addEventListener("touchstart",c,!0),t.addEventListener("visibilitychange",u,!0))}),[]),t=r.useRef(!1);return{isFocusVisibleRef:t,onFocus:function(e){return!!function(e){const{target:t}=e;try{return t.matches(":focus-visible")}catch(e){}return a||function(e){const{type:t,tagName:n}=e;return!("INPUT"!==n||!s[t]||e.readOnly)||"TEXTAREA"===n&&!e.readOnly||!!e.isContentEditable}(t)}(e)&&(t.current=!0,!0)},onBlur:function(){return!!t.current&&(i=!0,window.clearTimeout(o),o=window.setTimeout((()=>{i=!1}),100),t.current=!1,!0)},ref:e}}},4819:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(7294).createContext(null)},6760:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(4819);function a(){return r.useContext(o.Z)}},9378:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>y,Co:()=>w});var r=n(7294),o=n(7462),a=n(5042),i=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/;const s=(0,a.Z)((function(e){return i.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91}));var l=n(2443),c=n(444),u=n(6797),d=n(7278),p=s,f=function(e){return"theme"!==e},m=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?p:f},h=function(e,t,n){var r;if(t){var o=t.shouldForwardProp;r=e.__emotion_forwardProp&&o?function(t){return e.__emotion_forwardProp(t)&&o(t)}:o}return"function"!=typeof r&&n&&(r=e.__emotion_forwardProp),r},g=function(e){var t=e.cache,n=e.serialized,r=e.isStringTag;return(0,c.hC)(t,n,r),(0,d.L)((function(){return(0,c.My)(t,n,r)})),null};var b=function e(t,n){var a,i,s=t.__emotion_real===t,d=s&&t.__emotion_base||t;void 0!==n&&(a=n.label,i=n.target);var p=h(t,n,s),f=p||m(d),b=!f("as");return function(){var v=arguments,y=s&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==a&&y.push("label:"+a+";"),null==v[0]||void 0===v[0].raw)y.push.apply(y,v);else{y.push(v[0][0]);for(var w=v.length,x=1;x<w;x++)y.push(v[x],v[0][x])}var E=(0,l.w)((function(e,t,n){var o=b&&e.as||d,a="",s=[],h=e;if(null==e.theme){for(var v in h={},e)h[v]=e[v];h.theme=(0,r.useContext)(l.T)}"string"==typeof e.className?a=(0,c.fp)(t.registered,s,e.className):null!=e.className&&(a=e.className+" ");var w=(0,u.O)(y.concat(s),t.registered,h);a+=t.key+"-"+w.name,void 0!==i&&(a+=" "+i);var x=b&&void 0===p?m(o):f,E={};for(var k in e)b&&"as"===k||x(k)&&(E[k]=e[k]);return E.className=a,E.ref=n,(0,r.createElement)(r.Fragment,null,(0,r.createElement)(g,{cache:t,serialized:w,isStringTag:"string"==typeof o}),(0,r.createElement)(o,E))}));return E.displayName=void 0!==a?a:"Styled("+("string"==typeof d?d:d.displayName||d.name||"Component")+")",E.defaultProps=t.defaultProps,E.__emotion_real=E,E.__emotion_base=d,E.__emotion_styles=y,E.__emotion_forwardProp=p,Object.defineProperty(E,"toString",{value:function(){return"."+i}}),E.withComponent=function(t,r){return e(t,(0,o.Z)({},n,r,{shouldForwardProp:h(E,r,!0)})).apply(void 0,y)},E}}.bind();["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"].forEach((function(e){b[e]=b(e)}));const v=b;function y(e,t){return v(e,t)}const w=(e,t)=>{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))}},5408:(e,t,n)=>{"use strict";n.d(t,{L7:()=>l,P$:()=>u,VO:()=>o,W8:()=>s,dt:()=>c,k9:()=>i});var r=n(9766);const o={xs:0,sm:600,md:900,lg:1200,xl:1536},a={keys:["xs","sm","md","lg","xl"],up:e=>`@media (min-width:${o[e]}px)`};function i(e,t,n){const r=e.theme||{};if(Array.isArray(t)){const e=r.breakpoints||a;return t.reduce(((r,o,a)=>(r[e.up(e.keys[a])]=n(t[a]),r)),{})}if("object"==typeof t){const e=r.breakpoints||a;return Object.keys(t).reduce(((r,a)=>{if(-1!==Object.keys(e.values||o).indexOf(a))r[e.up(a)]=n(t[a],a);else{const e=a;r[e]=t[e]}return r}),{})}return n(t)}function s(e={}){var t;return(null==(t=e.keys)?void 0:t.reduce(((t,n)=>(t[e.up(n)]={},t)),{}))||{}}function l(e,t){return e.reduce(((e,t)=>{const n=e[t];return(!n||0===Object.keys(n).length)&&delete e[t],e}),t)}function c(e,...t){const n=s(e),o=[n,...t].reduce(((e,t)=>(0,r.Z)(e,t)),{});return l(Object.keys(n),o)}function u({values:e,breakpoints:t,base:n}){const r=n||function(e,t){if("object"!=typeof e)return{};const n={},r=Object.keys(t);return Array.isArray(e)?r.forEach(((t,r)=>{r<e.length&&(n[t]=!0)})):r.forEach((t=>{null!=e[t]&&(n[t]=!0)})),n}(e,t),o=Object.keys(r);if(0===o.length)return e;let a;return o.reduce(((t,n,r)=>(Array.isArray(e)?(t[n]=null!=e[r]?e[r]:e[a],a=r):"object"==typeof e?(t[n]=null!=e[n]?e[n]:e[a],a=n):t[n]=e,t)),{})}},1796:(e,t,n)=>{"use strict";n.d(t,{$n:()=>d,Fq:()=>c,_j:()=>u,mi:()=>l});var r=n(1387);function o(e,t=0,n=1){return Math.min(Math.max(t,e),n)}function a(e){if(e.type)return e;if("#"===e.charAt(0))return a(function(e){e=e.slice(1);const t=new RegExp(`.{1,${e.length>=6?2:1}}`,"g");let n=e.match(t);return n&&1===n[0].length&&(n=n.map((e=>e+e))),n?`rgb${4===n.length?"a":""}(${n.map(((e,t)=>t<3?parseInt(e,16):Math.round(parseInt(e,16)/255*1e3)/1e3)).join(", ")})`:""}(e));const t=e.indexOf("("),n=e.substring(0,t);if(-1===["rgb","rgba","hsl","hsla","color"].indexOf(n))throw new Error((0,r.Z)(9,e));let o,i=e.substring(t+1,e.length-1);if("color"===n){if(i=i.split(" "),o=i.shift(),4===i.length&&"/"===i[3].charAt(0)&&(i[3]=i[3].slice(1)),-1===["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(o))throw new Error((0,r.Z)(10,o))}else i=i.split(",");return i=i.map((e=>parseFloat(e))),{type:n,values:i,colorSpace:o}}function i(e){const{type:t,colorSpace:n}=e;let{values:r}=e;return-1!==t.indexOf("rgb")?r=r.map(((e,t)=>t<3?parseInt(e,10):e)):-1!==t.indexOf("hsl")&&(r[1]=`${r[1]}%`,r[2]=`${r[2]}%`),r=-1!==t.indexOf("color")?`${n} ${r.join(" ")}`:`${r.join(", ")}`,`${t}(${r})`}function s(e){let t="hsl"===(e=a(e)).type?a(function(e){e=a(e);const{values:t}=e,n=t[0],r=t[1]/100,o=t[2]/100,s=r*Math.min(o,1-o),l=(e,t=(e+n/30)%12)=>o-s*Math.max(Math.min(t-3,9-t,1),-1);let c="rgb";const u=[Math.round(255*l(0)),Math.round(255*l(8)),Math.round(255*l(4))];return"hsla"===e.type&&(c+="a",u.push(t[3])),i({type:c,values:u})}(e)).values:e.values;return t=t.map((t=>("color"!==e.type&&(t/=255),t<=.03928?t/12.92:((t+.055)/1.055)**2.4))),Number((.2126*t[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function l(e,t){const n=s(e),r=s(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function c(e,t){return e=a(e),t=o(t),"rgb"!==e.type&&"hsl"!==e.type||(e.type+="a"),"color"===e.type?e.values[3]=`/${t}`:e.values[3]=t,i(e)}function u(e,t){if(e=a(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]*=1-t;else if(-1!==e.type.indexOf("rgb")||-1!==e.type.indexOf("color"))for(let n=0;n<3;n+=1)e.values[n]*=1-t;return i(e)}function d(e,t){if(e=a(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]+=(100-e.values[2])*t;else if(-1!==e.type.indexOf("rgb"))for(let n=0;n<3;n+=1)e.values[n]+=(255-e.values[n])*t;else if(-1!==e.type.indexOf("color"))for(let n=0;n<3;n+=1)e.values[n]+=(1-e.values[n])*t;return i(e)}},4869:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(3366),a=n(9766);const i=["values","unit","step"];const s={borderRadius:4};var l=n(2605);const c=["breakpoints","palette","spacing","shape"],u=function(e={},...t){const{breakpoints:n={},palette:u={},spacing:d,shape:p={}}=e,f=(0,o.Z)(e,c),m=function(e){const{values:t={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:n="px",step:a=5}=e,s=(0,o.Z)(e,i),l=(e=>{const t=Object.keys(e).map((t=>({key:t,val:e[t]})))||[];return t.sort(((e,t)=>e.val-t.val)),t.reduce(((e,t)=>(0,r.Z)({},e,{[t.key]:t.val})),{})})(t),c=Object.keys(l);function u(e){return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${n})`}function d(e){return`@media (max-width:${("number"==typeof t[e]?t[e]:e)-a/100}${n})`}function p(e,r){const o=c.indexOf(r);return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${n}) and (max-width:${(-1!==o&&"number"==typeof t[c[o]]?t[c[o]]:r)-a/100}${n})`}return(0,r.Z)({keys:c,values:l,up:u,down:d,between:p,only:function(e){return c.indexOf(e)+1<c.length?p(e,c[c.indexOf(e)+1]):u(e)},not:function(e){const t=c.indexOf(e);return 0===t?u(c[1]):t===c.length-1?d(c[t]):p(e,c[c.indexOf(e)+1]).replace("@media","@media not all and")},unit:n},s)}(n),h=function(e=8){if(e.mui)return e;const t=(0,l.hB)({spacing:e}),n=(...e)=>(0===e.length?[1]:e).map((e=>{const n=t(e);return"number"==typeof n?`${n}px`:n})).join(" ");return n.mui=!0,n}(d);let g=(0,a.Z)({breakpoints:m,direction:"ltr",components:{},palette:(0,r.Z)({mode:"light"},u),spacing:h,shape:(0,r.Z)({},s,p)},f);return g=t.reduce(((e,t)=>(0,a.Z)(e,t)),g),g}},6977:(e,t,n)=>{"use strict";n.d(t,{Gc:()=>G,G$:()=>K});var r=n(4844),o=n(7730);const a=function(...e){const t=e.reduce(((e,t)=>(t.filterProps.forEach((n=>{e[n]=t})),e)),{}),n=e=>Object.keys(e).reduce(((n,r)=>t[r]?(0,o.Z)(n,t[r](e)):n),{});return n.propTypes={},n.filterProps=e.reduce(((e,t)=>e.concat(t.filterProps)),[]),n};var i=n(2605),s=n(5408);function l(e){return"number"!=typeof e?e:`${e}px solid`}const c=(0,r.Z)({prop:"border",themeKey:"borders",transform:l}),u=(0,r.Z)({prop:"borderTop",themeKey:"borders",transform:l}),d=(0,r.Z)({prop:"borderRight",themeKey:"borders",transform:l}),p=(0,r.Z)({prop:"borderBottom",themeKey:"borders",transform:l}),f=(0,r.Z)({prop:"borderLeft",themeKey:"borders",transform:l}),m=(0,r.Z)({prop:"borderColor",themeKey:"palette"}),h=(0,r.Z)({prop:"borderTopColor",themeKey:"palette"}),g=(0,r.Z)({prop:"borderRightColor",themeKey:"palette"}),b=(0,r.Z)({prop:"borderBottomColor",themeKey:"palette"}),v=(0,r.Z)({prop:"borderLeftColor",themeKey:"palette"}),y=e=>{if(void 0!==e.borderRadius&&null!==e.borderRadius){const t=(0,i.eI)(e.theme,"shape.borderRadius",4,"borderRadius"),n=e=>({borderRadius:(0,i.NA)(t,e)});return(0,s.k9)(e,e.borderRadius,n)}return null};y.propTypes={},y.filterProps=["borderRadius"];const w=a(c,u,d,p,f,m,h,g,b,v,y),x=a((0,r.Z)({prop:"displayPrint",cssProperty:!1,transform:e=>({"@media print":{display:e}})}),(0,r.Z)({prop:"display"}),(0,r.Z)({prop:"overflow"}),(0,r.Z)({prop:"textOverflow"}),(0,r.Z)({prop:"visibility"}),(0,r.Z)({prop:"whiteSpace"})),E=a((0,r.Z)({prop:"flexBasis"}),(0,r.Z)({prop:"flexDirection"}),(0,r.Z)({prop:"flexWrap"}),(0,r.Z)({prop:"justifyContent"}),(0,r.Z)({prop:"alignItems"}),(0,r.Z)({prop:"alignContent"}),(0,r.Z)({prop:"order"}),(0,r.Z)({prop:"flex"}),(0,r.Z)({prop:"flexGrow"}),(0,r.Z)({prop:"flexShrink"}),(0,r.Z)({prop:"alignSelf"}),(0,r.Z)({prop:"justifyItems"}),(0,r.Z)({prop:"justifySelf"})),k=e=>{if(void 0!==e.gap&&null!==e.gap){const t=(0,i.eI)(e.theme,"spacing",8,"gap"),n=e=>({gap:(0,i.NA)(t,e)});return(0,s.k9)(e,e.gap,n)}return null};k.propTypes={},k.filterProps=["gap"];const _=e=>{if(void 0!==e.columnGap&&null!==e.columnGap){const t=(0,i.eI)(e.theme,"spacing",8,"columnGap"),n=e=>({columnGap:(0,i.NA)(t,e)});return(0,s.k9)(e,e.columnGap,n)}return null};_.propTypes={},_.filterProps=["columnGap"];const S=e=>{if(void 0!==e.rowGap&&null!==e.rowGap){const t=(0,i.eI)(e.theme,"spacing",8,"rowGap"),n=e=>({rowGap:(0,i.NA)(t,e)});return(0,s.k9)(e,e.rowGap,n)}return null};S.propTypes={},S.filterProps=["rowGap"];const C=a(k,_,S,(0,r.Z)({prop:"gridColumn"}),(0,r.Z)({prop:"gridRow"}),(0,r.Z)({prop:"gridAutoFlow"}),(0,r.Z)({prop:"gridAutoColumns"}),(0,r.Z)({prop:"gridAutoRows"}),(0,r.Z)({prop:"gridTemplateColumns"}),(0,r.Z)({prop:"gridTemplateRows"}),(0,r.Z)({prop:"gridTemplateAreas"}),(0,r.Z)({prop:"gridArea"})),N=a((0,r.Z)({prop:"position"}),(0,r.Z)({prop:"zIndex",themeKey:"zIndex"}),(0,r.Z)({prop:"top"}),(0,r.Z)({prop:"right"}),(0,r.Z)({prop:"bottom"}),(0,r.Z)({prop:"left"})),O=a((0,r.Z)({prop:"color",themeKey:"palette"}),(0,r.Z)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette"}),(0,r.Z)({prop:"backgroundColor",themeKey:"palette"})),R=(0,r.Z)({prop:"boxShadow",themeKey:"shadows"});function M(e){return e<=1&&0!==e?100*e+"%":e}const T=(0,r.Z)({prop:"width",transform:M}),P=e=>{if(void 0!==e.maxWidth&&null!==e.maxWidth){const t=t=>{var n,r,o;return{maxWidth:(null==(n=e.theme)||null==(r=n.breakpoints)||null==(o=r.values)?void 0:o[t])||s.VO[t]||M(t)}};return(0,s.k9)(e,e.maxWidth,t)}return null};P.filterProps=["maxWidth"];const A=(0,r.Z)({prop:"minWidth",transform:M}),Z=(0,r.Z)({prop:"height",transform:M}),I=(0,r.Z)({prop:"maxHeight",transform:M}),L=(0,r.Z)({prop:"minHeight",transform:M}),j=((0,r.Z)({prop:"size",cssProperty:"width",transform:M}),(0,r.Z)({prop:"size",cssProperty:"height",transform:M}),a(T,P,A,Z,I,L,(0,r.Z)({prop:"boxSizing"}))),D=(0,r.Z)({prop:"fontFamily",themeKey:"typography"}),z=(0,r.Z)({prop:"fontSize",themeKey:"typography"}),B=(0,r.Z)({prop:"fontStyle",themeKey:"typography"}),F=(0,r.Z)({prop:"fontWeight",themeKey:"typography"}),$=(0,r.Z)({prop:"letterSpacing"}),U=(0,r.Z)({prop:"textTransform"}),W=(0,r.Z)({prop:"lineHeight"}),H=(0,r.Z)({prop:"textAlign"}),q=a((0,r.Z)({prop:"typography",cssProperty:!1,themeKey:"typography"}),D,z,B,F,$,W,H,U),V={borders:w.filterProps,display:x.filterProps,flexbox:E.filterProps,grid:C.filterProps,positions:N.filterProps,palette:O.filterProps,shadows:R.filterProps,sizing:j.filterProps,spacing:i.ZP.filterProps,typography:q.filterProps},K={borders:w,display:x,flexbox:E,grid:C,positions:N,palette:O,shadows:R,sizing:j,spacing:i.ZP,typography:q},G=Object.keys(V).reduce(((e,t)=>(V[t].forEach((n=>{e[n]=K[t]})),e)),{})},7730:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(9766);const o=function(e,t){return t?(0,r.Z)(e,t,{clone:!1}):e}},2605:(e,t,n)=>{"use strict";n.d(t,{hB:()=>m,eI:()=>f,ZP:()=>w,NA:()=>h});var r=n(5408),o=n(4844),a=n(7730);const i={m:"margin",p:"padding"},s={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},l={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},c=function(e){const t={};return e=>(void 0===t[e]&&(t[e]=(e=>{if(e.length>2){if(!l[e])return[e];e=l[e]}const[t,n]=e.split(""),r=i[t],o=s[n]||"";return Array.isArray(o)?o.map((e=>r+e)):[r+o]})(e)),t[e])}(),u=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],d=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],p=[...u,...d];function f(e,t,n,r){var a;const i=null!=(a=(0,o.D)(e,t,!1))?a:n;return"number"==typeof i?e=>"string"==typeof e?e:i*e:Array.isArray(i)?e=>"string"==typeof e?e:i[e]:"function"==typeof i?i:()=>{}}function m(e){return f(e,"spacing",8)}function h(e,t){if("string"==typeof t||null==t)return t;const n=e(Math.abs(t));return t>=0?n:"number"==typeof n?-n:`-${n}`}function g(e,t){const n=m(e.theme);return Object.keys(e).map((o=>function(e,t,n,o){if(-1===t.indexOf(n))return null;const a=function(e,t){return n=>e.reduce(((e,r)=>(e[r]=h(t,n),e)),{})}(c(n),o),i=e[n];return(0,r.k9)(e,i,a)}(e,t,o,n))).reduce(a.Z,{})}function b(e){return g(e,u)}function v(e){return g(e,d)}function y(e){return g(e,p)}b.propTypes={},b.filterProps=u,v.propTypes={},v.filterProps=d,y.propTypes={},y.filterProps=p;const w=y},4844:(e,t,n)=>{"use strict";n.d(t,{D:()=>a,Z:()=>s});var r=n(8320),o=n(5408);function a(e,t,n=!0){if(!t||"string"!=typeof t)return null;if(e&&e.vars&&n){const n=`vars.${t}`.split(".").reduce(((e,t)=>e&&e[t]?e[t]:null),e);if(null!=n)return n}return t.split(".").reduce(((e,t)=>e&&null!=e[t]?e[t]:null),e)}function i(e,t,n,r=n){let o;return o="function"==typeof e?e(n):Array.isArray(e)?e[n]||r:a(e,n)||r,t&&(o=t(o)),o}const s=function(e){const{prop:t,cssProperty:n=e.prop,themeKey:s,transform:l}=e,c=e=>{if(null==e[t])return null;const c=e[t],u=a(e.theme,s)||{};return(0,o.k9)(e,c,(e=>{let o=i(u,l,e);return e===o&&"string"==typeof e&&(o=i(u,l,`${t}${"default"===e?"":(0,r.Z)(e)}`,e)),!1===n?o:{[n]:o}}))};return c.propTypes={},c.filterProps=[t],c}},6523:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(7730),o=n(6977),a=n(5408);const i=function(e=o.G$){const t=Object.keys(e).reduce(((t,n)=>(e[n].filterProps.forEach((r=>{t[r]=e[n]})),t)),{});function n(e,n,r){const o={[e]:n,theme:r},a=t[e];return a?a(o):{[e]:n}}return function e(o){const{sx:i,theme:s={}}=o||{};if(!i)return null;function l(o){let i=o;if("function"==typeof o)i=o(s);else if("object"!=typeof o)return o;if(!i)return null;const l=(0,a.W8)(s.breakpoints),c=Object.keys(l);let u=l;return Object.keys(i).forEach((o=>{const l="function"==typeof(c=i[o])?c(s):c;var c;if(null!=l)if("object"==typeof l)if(t[o])u=(0,r.Z)(u,n(o,l,s));else{const t=(0,a.k9)({theme:s},l,(e=>({[o]:e})));!function(...e){const t=e.reduce(((e,t)=>e.concat(Object.keys(t))),[]),n=new Set(t);return e.every((e=>n.size===Object.keys(e).length))}(t,l)?u=(0,r.Z)(u,t):u[o]=e({sx:l,theme:s})}else u=(0,r.Z)(u,n(o,l,s))})),(0,a.L7)(c,u)}return Array.isArray(i)?i.map(l):l(i)}}();i.filterProps=["sx"];const s=i},6682:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(4869),o=n(4168);const a=(0,r.Z)(),i=function(e=a){return(0,o.Z)(e)}},4168:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(6760);const o=function(e=null){const t=(0,r.Z)();return t&&(n=t,0!==Object.keys(n).length)?t:e;var n}},7078:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>e,o=(()=>{let e=r;return{configure(t){e=t},generate:t=>e(t),reset(){e=r}}})()},8320:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(1387);function o(e){if("string"!=typeof e)throw new Error((0,r.Z)(7));return e.charAt(0).toUpperCase()+e.slice(1)}},4780:(e,t,n)=>{"use strict";function r(e,t,n){const r={};return Object.keys(e).forEach((o=>{r[o]=e[o].reduce(((e,r)=>(r&&(e.push(t(r)),n&&n[r]&&e.push(n[r])),e)),[]).join(" ")})),r}n.d(t,{Z:()=>r})},9064:(e,t,n)=>{"use strict";function r(...e){return e.reduce(((e,t)=>null==t?e:function(...n){e.apply(this,n),t.apply(this,n)}),(()=>{}))}n.d(t,{Z:()=>r})},7596:(e,t,n)=>{"use strict";function r(e,t=166){let n;function r(...r){clearTimeout(n),n=setTimeout((()=>{e.apply(this,r)}),t)}return r.clear=()=>{clearTimeout(n)},r}n.d(t,{Z:()=>r})},9766:(e,t,n)=>{"use strict";n.d(t,{P:()=>o,Z:()=>a});var r=n(7462);function o(e){return null!==e&&"object"==typeof e&&e.constructor===Object}function a(e,t,n={clone:!0}){const i=n.clone?(0,r.Z)({},e):e;return o(e)&&o(t)&&Object.keys(t).forEach((r=>{"__proto__"!==r&&(o(t[r])&&r in e&&o(e[r])?i[r]=a(e[r],t[r],n):i[r]=t[r])})),i}},1387:(e,t,n)=>{"use strict";function r(e){let t="https://mui.com/production-error/?code="+e;for(let e=1;e<arguments.length;e+=1)t+="&args[]="+encodeURIComponent(arguments[e]);return"Minified MUI error #"+e+"; visit "+t+" for the full message."}n.d(t,{Z:()=>r})},5677:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7078);const o={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",required:"required",selected:"selected"};function a(e,t,n="Mui"){const a=o[t];return a?`${n}-${a}`:`${r.Z.generate(e)}-${t}`}},1588:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(5677);function o(e,t,n="Mui"){const o={};return t.forEach((t=>{o[t]=(0,r.Z)(e,t,n)})),o}},7094:(e,t,n)=>{"use strict";function r(e){return e&&e.ownerDocument||document}n.d(t,{Z:()=>r})},8290:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7094);function o(e){return(0,r.Z)(e).defaultView||window}},7925:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7462);function o(e,t){const n=(0,r.Z)({},t);return Object.keys(e).forEach((t=>{void 0===n[t]&&(n[t]=e[t])})),n}},7960:(e,t,n)=>{"use strict";function r(e,t){"function"==typeof e?e(t):e&&(e.current=t)}n.d(t,{Z:()=>r})},6600:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const o="undefined"!=typeof window?r.useLayoutEffect:r.useEffect},3633:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(6600);function a(e){const t=r.useRef(e);return(0,o.Z)((()=>{t.current=e})),r.useCallback(((...e)=>(0,t.current)(...e)),[])}},67:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(7960);function a(e,t){return r.useMemo((()=>null==e&&null==t?null:n=>{(0,o.Z)(e,n),(0,o.Z)(t,n)}),[e,t])}},7579:(e,t,n)=>{"use strict";var r;n.d(t,{Z:()=>s});var o=n(7294);let a=0;const i=(r||(r=n.t(o,2))).useId;function s(e){if(void 0!==i){const t=i();return null!=e?e:t}return function(e){const[t,n]=o.useState(e),r=e||t;return o.useEffect((()=>{null==t&&(a+=1,n(`mui-${a}`))}),[t]),r}(e)}},9669:(e,t,n)=>{e.exports=n(1609)},5448:(e,t,n)=>{"use strict";var r=n(4867),o=n(6026),a=n(4372),i=n(5327),s=n(4097),l=n(4109),c=n(7985),u=n(7874),d=n(2648),p=n(644),f=n(205);e.exports=function(e){return new Promise((function(t,n){var m,h=e.data,g=e.headers,b=e.responseType;function v(){e.cancelToken&&e.cancelToken.unsubscribe(m),e.signal&&e.signal.removeEventListener("abort",m)}r.isFormData(h)&&r.isStandardBrowserEnv()&&delete g["Content-Type"];var y=new XMLHttpRequest;if(e.auth){var w=e.auth.username||"",x=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";g.Authorization="Basic "+btoa(w+":"+x)}var E=s(e.baseURL,e.url);function k(){if(y){var r="getAllResponseHeaders"in y?l(y.getAllResponseHeaders()):null,a={data:b&&"text"!==b&&"json"!==b?y.response:y.responseText,status:y.status,statusText:y.statusText,headers:r,config:e,request:y};o((function(e){t(e),v()}),(function(e){n(e),v()}),a),y=null}}if(y.open(e.method.toUpperCase(),i(E,e.params,e.paramsSerializer),!0),y.timeout=e.timeout,"onloadend"in y?y.onloadend=k:y.onreadystatechange=function(){y&&4===y.readyState&&(0!==y.status||y.responseURL&&0===y.responseURL.indexOf("file:"))&&setTimeout(k)},y.onabort=function(){y&&(n(new d("Request aborted",d.ECONNABORTED,e,y)),y=null)},y.onerror=function(){n(new d("Network Error",d.ERR_NETWORK,e,y,y)),y=null},y.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",r=e.transitional||u;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new d(t,r.clarifyTimeoutError?d.ETIMEDOUT:d.ECONNABORTED,e,y)),y=null},r.isStandardBrowserEnv()){var _=(e.withCredentials||c(E))&&e.xsrfCookieName?a.read(e.xsrfCookieName):void 0;_&&(g[e.xsrfHeaderName]=_)}"setRequestHeader"in y&&r.forEach(g,(function(e,t){void 0===h&&"content-type"===t.toLowerCase()?delete g[t]:y.setRequestHeader(t,e)})),r.isUndefined(e.withCredentials)||(y.withCredentials=!!e.withCredentials),b&&"json"!==b&&(y.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&y.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&y.upload&&y.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(m=function(e){y&&(n(!e||e&&e.type?new p:e),y.abort(),y=null)},e.cancelToken&&e.cancelToken.subscribe(m),e.signal&&(e.signal.aborted?m():e.signal.addEventListener("abort",m))),h||(h=null);var S=f(E);S&&-1===["http","https","file"].indexOf(S)?n(new d("Unsupported protocol "+S+":",d.ERR_BAD_REQUEST,e)):y.send(h)}))}},1609:(e,t,n)=>{"use strict";var r=n(4867),o=n(1849),a=n(321),i=n(7185),s=function e(t){var n=new a(t),s=o(a.prototype.request,n);return r.extend(s,a.prototype,n),r.extend(s,n),s.create=function(n){return e(i(t,n))},s}(n(5546));s.Axios=a,s.CanceledError=n(644),s.CancelToken=n(4972),s.isCancel=n(6502),s.VERSION=n(7288).version,s.toFormData=n(7675),s.AxiosError=n(2648),s.Cancel=s.CanceledError,s.all=function(e){return Promise.all(e)},s.spread=n(8713),s.isAxiosError=n(6268),e.exports=s,e.exports.default=s},4972:(e,t,n)=>{"use strict";var r=n(644);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;this.promise.then((function(e){if(n._listeners){var t,r=n._listeners.length;for(t=0;t<r;t++)n._listeners[t](e);n._listeners=null}})),this.promise.then=function(e){var t,r=new Promise((function(e){n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e){n.reason||(n.reason=new r(e),t(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},o.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},o.source=function(){var e;return{token:new o((function(t){e=t})),cancel:e}},e.exports=o},644:(e,t,n)=>{"use strict";var r=n(2648);function o(e){r.call(this,null==e?"canceled":e,r.ERR_CANCELED),this.name="CanceledError"}n(4867).inherits(o,r,{__CANCEL__:!0}),e.exports=o},6502:e=>{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},321:(e,t,n)=>{"use strict";var r=n(4867),o=n(5327),a=n(782),i=n(3572),s=n(7185),l=n(4097),c=n(4875),u=c.validators;function d(e){this.defaults=e,this.interceptors={request:new a,response:new a}}d.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=s(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var n=t.transitional;void 0!==n&&c.assertOptions(n,{silentJSONParsing:u.transitional(u.boolean),forcedJSONParsing:u.transitional(u.boolean),clarifyTimeoutError:u.transitional(u.boolean)},!1);var r=[],o=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(o=o&&e.synchronous,r.unshift(e.fulfilled,e.rejected))}));var a,l=[];if(this.interceptors.response.forEach((function(e){l.push(e.fulfilled,e.rejected)})),!o){var d=[i,void 0];for(Array.prototype.unshift.apply(d,r),d=d.concat(l),a=Promise.resolve(t);d.length;)a=a.then(d.shift(),d.shift());return a}for(var p=t;r.length;){var f=r.shift(),m=r.shift();try{p=f(p)}catch(e){m(e);break}}try{a=i(p)}catch(e){return Promise.reject(e)}for(;l.length;)a=a.then(l.shift(),l.shift());return a},d.prototype.getUri=function(e){e=s(this.defaults,e);var t=l(e.baseURL,e.url);return o(t,e.params,e.paramsSerializer)},r.forEach(["delete","get","head","options"],(function(e){d.prototype[e]=function(t,n){return this.request(s(n||{},{method:e,url:t,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(e){function t(t){return function(n,r,o){return this.request(s(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}d.prototype[e]=t(),d.prototype[e+"Form"]=t(!0)})),e.exports=d},2648:(e,t,n)=>{"use strict";var r=n(4867);function o(e,t,n,r,o){Error.call(this),this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}r.inherits(o,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var a=o.prototype,i={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(e){i[e]={value:e}})),Object.defineProperties(o,i),Object.defineProperty(a,"isAxiosError",{value:!0}),o.from=function(e,t,n,i,s,l){var c=Object.create(a);return r.toFlatObject(e,c,(function(e){return e!==Error.prototype})),o.call(c,e.message,t,n,i,s),c.name=e.name,l&&Object.assign(c,l),c},e.exports=o},782:(e,t,n)=>{"use strict";var r=n(4867);function o(){this.handlers=[]}o.prototype.use=function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){r.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=o},4097:(e,t,n)=>{"use strict";var r=n(1793),o=n(7303);e.exports=function(e,t){return e&&!r(t)?o(e,t):t}},3572:(e,t,n)=>{"use strict";var r=n(4867),o=n(8527),a=n(6502),i=n(5546),s=n(644);function l(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new s}e.exports=function(e){return l(e),e.headers=e.headers||{},e.data=o.call(e,e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||i.adapter)(e).then((function(t){return l(e),t.data=o.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return a(t)||(l(e),t&&t.response&&(t.response.data=o.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},7185:(e,t,n)=>{"use strict";var r=n(4867);e.exports=function(e,t){t=t||{};var n={};function o(e,t){return r.isPlainObject(e)&&r.isPlainObject(t)?r.merge(e,t):r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function a(n){return r.isUndefined(t[n])?r.isUndefined(e[n])?void 0:o(void 0,e[n]):o(e[n],t[n])}function i(e){if(!r.isUndefined(t[e]))return o(void 0,t[e])}function s(n){return r.isUndefined(t[n])?r.isUndefined(e[n])?void 0:o(void 0,e[n]):o(void 0,t[n])}function l(n){return n in t?o(e[n],t[n]):n in e?o(void 0,e[n]):void 0}var c={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:l};return r.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=c[e]||a,o=t(e);r.isUndefined(o)&&t!==l||(n[e]=o)})),n}},6026:(e,t,n)=>{"use strict";var r=n(2648);e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(new r("Request failed with status code "+n.status,[r.ERR_BAD_REQUEST,r.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}},8527:(e,t,n)=>{"use strict";var r=n(4867),o=n(5546);e.exports=function(e,t,n){var a=this||o;return r.forEach(n,(function(n){e=n.call(a,e,t)})),e}},5546:(e,t,n)=>{"use strict";var r=n(4867),o=n(6016),a=n(2648),i=n(7874),s=n(7675),l={"Content-Type":"application/x-www-form-urlencoded"};function c(e,t){!r.isUndefined(e)&&r.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var u,d={transitional:i,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(u=n(5448)),u),transformRequest:[function(e,t){if(o(t,"Accept"),o(t,"Content-Type"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e))return e;if(r.isArrayBufferView(e))return e.buffer;if(r.isURLSearchParams(e))return c(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();var n,a=r.isObject(e),i=t&&t["Content-Type"];if((n=r.isFileList(e))||a&&"multipart/form-data"===i){var l=this.env&&this.env.FormData;return s(n?{"files[]":e}:e,l&&new l)}return a||"application/json"===i?(c(t,"application/json"),function(e,t,n){if(r.isString(e))try{return(0,JSON.parse)(e),r.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||d.transitional,n=t&&t.silentJSONParsing,o=t&&t.forcedJSONParsing,i=!n&&"json"===this.responseType;if(i||o&&r.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(i){if("SyntaxError"===e.name)throw a.from(e,a.ERR_BAD_RESPONSE,this,null,this.response);throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:n(1623)},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){d.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){d.headers[e]=r.merge(l)})),e.exports=d},7874:e=>{"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},7288:e=>{e.exports={version:"0.27.2"}},1849:e=>{"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},5327:(e,t,n)=>{"use strict";var r=n(4867);function o(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var a;if(n)a=n(t);else if(r.isURLSearchParams(t))a=t.toString();else{var i=[];r.forEach(t,(function(e,t){null!=e&&(r.isArray(e)?t+="[]":e=[e],r.forEach(e,(function(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),i.push(o(t)+"="+o(e))})))})),a=i.join("&")}if(a){var s=e.indexOf("#");-1!==s&&(e=e.slice(0,s)),e+=(-1===e.indexOf("?")?"?":"&")+a}return e}},7303:e=>{"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},4372:(e,t,n)=>{"use strict";var r=n(4867);e.exports=r.isStandardBrowserEnv()?{write:function(e,t,n,o,a,i){var s=[];s.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(o)&&s.push("path="+o),r.isString(a)&&s.push("domain="+a),!0===i&&s.push("secure"),document.cookie=s.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},1793:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}},6268:(e,t,n)=>{"use strict";var r=n(4867);e.exports=function(e){return r.isObject(e)&&!0===e.isAxiosError}},7985:(e,t,n)=>{"use strict";var r=n(4867);e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=o(window.location.href),function(t){var n=r.isString(t)?o(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},6016:(e,t,n)=>{"use strict";var r=n(4867);e.exports=function(e,t){r.forEach(e,(function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])}))}},1623:e=>{e.exports=null},4109:(e,t,n)=>{"use strict";var r=n(4867),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,a,i={};return e?(r.forEach(e.split("\n"),(function(e){if(a=e.indexOf(":"),t=r.trim(e.substr(0,a)).toLowerCase(),n=r.trim(e.substr(a+1)),t){if(i[t]&&o.indexOf(t)>=0)return;i[t]="set-cookie"===t?(i[t]?i[t]:[]).concat([n]):i[t]?i[t]+", "+n:n}})),i):i}},205:e=>{"use strict";e.exports=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}},8713:e=>{"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},7675:(e,t,n)=>{"use strict";var r=n(4867);e.exports=function(e,t){t=t||new FormData;var n=[];function o(e){return null===e?"":r.isDate(e)?e.toISOString():r.isArrayBuffer(e)||r.isTypedArray(e)?"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}return function e(a,i){if(r.isPlainObject(a)||r.isArray(a)){if(-1!==n.indexOf(a))throw Error("Circular reference detected in "+i);n.push(a),r.forEach(a,(function(n,a){if(!r.isUndefined(n)){var s,l=i?i+"."+a:a;if(n&&!i&&"object"==typeof n)if(r.endsWith(a,"{}"))n=JSON.stringify(n);else if(r.endsWith(a,"[]")&&(s=r.toArray(n)))return void s.forEach((function(e){!r.isUndefined(e)&&t.append(l,o(e))}));e(n,l)}})),n.pop()}else t.append(i,o(a))}(e),t}},4875:(e,t,n)=>{"use strict";var r=n(7288).version,o=n(2648),a={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){a[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));var i={};a.transitional=function(e,t,n){function a(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,s){if(!1===e)throw new o(a(r," has been removed"+(t?" in "+t:"")),o.ERR_DEPRECATED);return t&&!i[r]&&(i[r]=!0,console.warn(a(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,s)}},e.exports={assertOptions:function(e,t,n){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(e),a=r.length;a-- >0;){var i=r[a],s=t[i];if(s){var l=e[i],c=void 0===l||s(l,i,e);if(!0!==c)throw new o("option "+i+" must be "+c,o.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new o("Unknown option "+i,o.ERR_BAD_OPTION)}},validators:a}},4867:(e,t,n)=>{"use strict";var r,o=n(1849),a=Object.prototype.toString,i=(r=Object.create(null),function(e){var t=a.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())});function s(e){return e=e.toLowerCase(),function(t){return i(t)===e}}function l(e){return Array.isArray(e)}function c(e){return void 0===e}var u=s("ArrayBuffer");function d(e){return null!==e&&"object"==typeof e}function p(e){if("object"!==i(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var f=s("Date"),m=s("File"),h=s("Blob"),g=s("FileList");function b(e){return"[object Function]"===a.call(e)}var v=s("URLSearchParams");function y(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),l(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.call(null,e[o],o,e)}var w,x=(w="undefined"!=typeof Uint8Array&&Object.getPrototypeOf(Uint8Array),function(e){return w&&e instanceof w});e.exports={isArray:l,isArrayBuffer:u,isBuffer:function(e){return null!==e&&!c(e)&&null!==e.constructor&&!c(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){var t="[object FormData]";return e&&("function"==typeof FormData&&e instanceof FormData||a.call(e)===t||b(e.toString)&&e.toString()===t)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&u(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:d,isPlainObject:p,isUndefined:c,isDate:f,isFile:m,isBlob:h,isFunction:b,isStream:function(e){return d(e)&&b(e.pipe)},isURLSearchParams:v,isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&"undefined"!=typeof window&&"undefined"!=typeof document},forEach:y,merge:function e(){var t={};function n(n,r){p(t[r])&&p(n)?t[r]=e(t[r],n):p(n)?t[r]=e({},n):l(n)?t[r]=n.slice():t[r]=n}for(var r=0,o=arguments.length;r<o;r++)y(arguments[r],n);return t},extend:function(e,t,n){return y(t,(function(t,r){e[r]=n&&"function"==typeof t?o(t,n):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,n,r){e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,n&&Object.assign(e.prototype,n)},toFlatObject:function(e,t,n){var r,o,a,i={};t=t||{};do{for(o=(r=Object.getOwnPropertyNames(e)).length;o-- >0;)i[a=r[o]]||(t[a]=e[a],i[a]=!0);e=Object.getPrototypeOf(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:i,kindOfTest:s,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;var t=e.length;if(c(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},isTypedArray:x,isFileList:g}},6010:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},8679:(e,t,n)=>{"use strict";var r=n(1296),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),h=l(n),g=0;g<i.length;++g){var b=i[g];if(!(a[b]||r&&r[b]||h&&h[b]||s&&s[b])){var v=p(n,b);try{c(t,b,v)}catch(e){}}}}return t}},6103:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function x(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case g:case h:case l:return e;default:return t}}case o:return t}}}function E(e){return x(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return E(e)||x(e)===u},t.isConcurrentMode=E,t.isContextConsumer=function(e){return x(e)===c},t.isContextProvider=function(e){return x(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return x(e)===p},t.isFragment=function(e){return x(e)===a},t.isLazy=function(e){return x(e)===g},t.isMemo=function(e){return x(e)===h},t.isPortal=function(e){return x(e)===o},t.isProfiler=function(e){return x(e)===s},t.isStrictMode=function(e){return x(e)===i},t.isSuspense=function(e){return x(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===s||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=x},1296:(e,t,n)=>{"use strict";e.exports=n(6103)},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(3840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,s={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)i.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},m={};function h(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var g={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){g[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];g[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){g[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){g[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){g[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){g[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){g[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){g[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){g[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function y(e,t,n,r){var o=g.hasOwnProperty(t)?g[t]:null;(null!==o?0!==o.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!d.call(m,e)||!d.call(f,e)&&(p.test(e)?m[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,v);g[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,v);g[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,v);g[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),g.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=Symbol.for("react.element"),E=Symbol.for("react.portal"),k=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),S=Symbol.for("react.profiler"),C=Symbol.for("react.provider"),N=Symbol.for("react.context"),O=Symbol.for("react.forward_ref"),R=Symbol.for("react.suspense"),M=Symbol.for("react.suspense_list"),T=Symbol.for("react.memo"),P=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var A=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var Z=Symbol.iterator;function I(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=Z&&e[Z]||e["@@iterator"])?e:null}var L,j=Object.assign;function D(e){if(void 0===L)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);L=t&&t[1]||""}return"\n"+L+e}var z=!1;function B(e,t){if(!e||z)return"";z=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var r=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){r=e}e.call(t.prototype)}else{try{throw Error()}catch(e){r=e}e()}}catch(t){if(t&&r&&"string"==typeof t.stack){for(var o=t.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,s=a.length-1;1<=i&&0<=s&&o[i]!==a[s];)s--;for(;1<=i&&0<=s;i--,s--)if(o[i]!==a[s]){if(1!==i||1!==s)do{if(i--,0>--s||o[i]!==a[s]){var l="\n"+o[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=i&&0<=s);break}}}finally{z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?D(e):""}function F(e){switch(e.tag){case 5:return D(e.type);case 16:return D("Lazy");case 13:return D("Suspense");case 19:return D("SuspenseList");case 0:case 2:case 15:return B(e.type,!1);case 11:return B(e.type.render,!1);case 1:return B(e.type,!0);default:return""}}function $(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case k:return"Fragment";case E:return"Portal";case S:return"Profiler";case _:return"StrictMode";case R:return"Suspense";case M:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case N:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case O:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case T:return null!==(t=e.displayName||null)?t:$(e.type)||"Memo";case P:t=e._payload,e=e._init;try{return $(e(t))}catch(e){}}return null}function U(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return $(t);case 8:return t===_?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function W(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function H(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function q(e){e._valueTracker||(e._valueTracker=function(e){var t=H(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function V(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=H(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function K(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function G(e,t){var n=t.checked;return j({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Q(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=W(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function X(e,t){null!=(t=t.checked)&&y(e,"checked",t,!1)}function Y(e,t){X(e,t);var n=W(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,W(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&K(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+W(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return j({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(te(n)){if(1<n.length)throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:W(n)}}function ae(e,t){var n=W(t.value),r=W(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function se(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?se(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=["Webkit","ms","Moz","O"];function he(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function ge(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=he(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){me.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=j({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ve(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function ye(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Ee=null,ke=null,_e=null;function Se(e){if(e=wo(e)){if("function"!=typeof Ee)throw Error(a(280));var t=e.stateNode;t&&(t=Eo(t),Ee(e.stateNode,e.type,t))}}function Ce(e){ke?_e?_e.push(e):_e=[e]:ke=e}function Ne(){if(ke){var e=ke,t=_e;if(_e=ke=null,Se(e),t)for(e=0;e<t.length;e++)Se(t[e])}}function Oe(e,t){return e(t)}function Re(){}var Me=!1;function Te(e,t,n){if(Me)return e(t,n);Me=!0;try{return Oe(e,t,n)}finally{Me=!1,(null!==ke||null!==_e)&&(Re(),Ne())}}function Pe(e,t){var n=e.stateNode;if(null===n)return null;var r=Eo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var Ae=!1;if(u)try{var Ze={};Object.defineProperty(Ze,"passive",{get:function(){Ae=!0}}),window.addEventListener("test",Ze,Ze),window.removeEventListener("test",Ze,Ze)}catch(ue){Ae=!1}function Ie(e,t,n,r,o,a,i,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(e){this.onError(e)}}var Le=!1,je=null,De=!1,ze=null,Be={onError:function(e){Le=!0,je=e}};function Fe(e,t,n,r,o,a,i,s,l){Le=!1,je=null,Ie.apply(Be,arguments)}function $e(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ue(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&null!==(e=e.alternate)&&(t=e.memoizedState),null!==t)return t.dehydrated}return null}function We(e){if($e(e)!==e)throw Error(a(188))}function He(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=$e(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return We(o),e;if(i===r)return We(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var s=!1,l=o.child;l;){if(l===n){s=!0,n=o,r=i;break}if(l===r){s=!0,r=o,n=i;break}l=l.sibling}if(!s){for(l=i.child;l;){if(l===n){s=!0,n=i,r=o;break}if(l===r){s=!0,r=i,n=o;break}l=l.sibling}if(!s)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e))?qe(e):null}function qe(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=qe(e);if(null!==t)return t;e=e.sibling}return null}var Ve=o.unstable_scheduleCallback,Ke=o.unstable_cancelCallback,Ge=o.unstable_shouldYield,Qe=o.unstable_requestPaint,Xe=o.unstable_now,Ye=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,rt=o.unstable_IdlePriority,ot=null,at=null,it=Math.clz32?Math.clz32:function(e){return 0==(e>>>=0)?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2,ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~o;0!==s?r=dt(s):0!=(a&=i)&&(r=dt(a))}else 0!=(i=n&~o)?r=dt(i):0!==a&&(r=dt(a));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-it(t)),r|=e[n],t&=~o;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function mt(e){return 0!=(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function ht(){var e=ct;return 0==(4194240&(ct<<=1))&&(ct=64),e}function gt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function vt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var yt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var xt,Et,kt,_t,St,Ct=!1,Nt=[],Ot=null,Rt=null,Mt=null,Tt=new Map,Pt=new Map,At=[],Zt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function It(e,t){switch(e){case"focusin":case"focusout":Ot=null;break;case"dragenter":case"dragleave":Rt=null;break;case"mouseover":case"mouseout":Mt=null;break;case"pointerover":case"pointerout":Tt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Pt.delete(t.pointerId)}}function Lt(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&null!==(t=wo(t))&&Et(t),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function jt(e){var t=yo(e.target);if(null!==t){var n=$e(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ue(n)))return e.blockedOn=t,void St(e.priority,(function(){kt(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Dt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Gt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=wo(n))&&Et(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function zt(e,t,n){Dt(e)&&n.delete(t)}function Bt(){Ct=!1,null!==Ot&&Dt(Ot)&&(Ot=null),null!==Rt&&Dt(Rt)&&(Rt=null),null!==Mt&&Dt(Mt)&&(Mt=null),Tt.forEach(zt),Pt.forEach(zt)}function Ft(e,t){e.blockedOn===t&&(e.blockedOn=null,Ct||(Ct=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Bt)))}function $t(e){function t(t){return Ft(t,e)}if(0<Nt.length){Ft(Nt[0],e);for(var n=1;n<Nt.length;n++){var r=Nt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==Ot&&Ft(Ot,e),null!==Rt&&Ft(Rt,e),null!==Mt&&Ft(Mt,e),Tt.forEach(t),Pt.forEach(t),n=0;n<At.length;n++)(r=At[n]).blockedOn===e&&(r.blockedOn=null);for(;0<At.length&&null===(n=At[0]).blockedOn;)jt(n),null===n.blockedOn&&At.shift()}var Ut=w.ReactCurrentBatchConfig,Wt=!0;function Ht(e,t,n,r){var o=yt,a=Ut.transition;Ut.transition=null;try{yt=1,Vt(e,t,n,r)}finally{yt=o,Ut.transition=a}}function qt(e,t,n,r){var o=yt,a=Ut.transition;Ut.transition=null;try{yt=4,Vt(e,t,n,r)}finally{yt=o,Ut.transition=a}}function Vt(e,t,n,r){if(Wt){var o=Gt(e,t,n,r);if(null===o)Wr(e,t,r,Kt,n),It(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return Ot=Lt(Ot,e,t,n,r,o),!0;case"dragenter":return Rt=Lt(Rt,e,t,n,r,o),!0;case"mouseover":return Mt=Lt(Mt,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return Tt.set(a,Lt(Tt.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,Pt.set(a,Lt(Pt.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(It(e,r),4&t&&-1<Zt.indexOf(e)){for(;null!==o;){var a=wo(o);if(null!==a&&xt(a),null===(a=Gt(e,t,n,r))&&Wr(e,t,r,Kt,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Wr(e,t,r,null,n)}}var Kt=null;function Gt(e,t,n,r){if(Kt=null,null!==(e=yo(e=xe(r))))if(null===(t=$e(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=Ue(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Kt=e,null}function Qt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Ye()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Xt=null,Yt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Yt,r=n.length,o="value"in Xt?Xt.value:Xt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function on(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return j(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var an,sn,ln,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=on(cn),dn=j({},cn,{view:0,detail:0}),pn=on(dn),fn=j({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Sn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ln&&(ln&&"mousemove"===e.type?(an=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=an=0,ln=e),an)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),mn=on(fn),hn=on(j({},fn,{dataTransfer:0})),gn=on(j({},dn,{relatedTarget:0})),bn=on(j({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),vn=j({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),yn=on(vn),wn=on(j({},cn,{data:0})),xn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},En={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},kn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function _n(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=kn[e])&&!!t[e]}function Sn(){return _n}var Cn=j({},dn,{key:function(e){if(e.key){var t=xn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?En[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Sn,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Nn=on(Cn),On=on(j({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Rn=on(j({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Sn})),Mn=on(j({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Tn=j({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Pn=on(Tn),An=[9,13,27,32],Zn=u&&"CompositionEvent"in window,In=null;u&&"documentMode"in document&&(In=document.documentMode);var Ln=u&&"TextEvent"in window&&!In,jn=u&&(!Zn||In&&8<In&&11>=In),Dn=String.fromCharCode(32),zn=!1;function Bn(e,t){switch(e){case"keyup":return-1!==An.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Fn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var $n=!1,Un={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Wn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Un[e.type]:"textarea"===t}function Hn(e,t,n,r){Ce(r),0<(t=qr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Vn=null;function Kn(e){Dr(e,0)}function Gn(e){if(V(xo(e)))return e}function Qn(e,t){if("change"===e)return t}var Xn=!1;if(u){var Yn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Yn=Jn}else Yn=!1;Xn=Yn&&(!document.documentMode||9<document.documentMode)}function tr(){qn&&(qn.detachEvent("onpropertychange",nr),Vn=qn=null)}function nr(e){if("value"===e.propertyName&&Gn(Vn)){var t=[];Hn(t,Vn,e,xe(e)),Te(Kn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Vn=n,(qn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Gn(Vn)}function ar(e,t){if("click"===e)return Gn(t)}function ir(e,t){if("input"===e||"change"===e)return Gn(t)}var sr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function lr(e,t){if(sr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!d.call(t,o)||!sr(e[o],t[o]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=K();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(e){n=!1}if(!n)break;t=K((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function mr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=ur(n,a);var i=ur(n,r);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var hr=u&&"documentMode"in document&&11>=document.documentMode,gr=null,br=null,vr=null,yr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;yr||null==gr||gr!==K(r)||(r="selectionStart"in(r=gr)&&fr(r)?{start:r.selectionStart,end:r.selectionEnd}:{anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},vr&&lr(vr,r)||(vr=r,0<(r=qr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=gr)))}function xr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Er={animationend:xr("Animation","AnimationEnd"),animationiteration:xr("Animation","AnimationIteration"),animationstart:xr("Animation","AnimationStart"),transitionend:xr("Transition","TransitionEnd")},kr={},_r={};function Sr(e){if(kr[e])return kr[e];if(!Er[e])return e;var t,n=Er[e];for(t in n)if(n.hasOwnProperty(t)&&t in _r)return kr[e]=n[t];return e}u&&(_r=document.createElement("div").style,"AnimationEvent"in window||(delete Er.animationend.animation,delete Er.animationiteration.animation,delete Er.animationstart.animation),"TransitionEvent"in window||delete Er.transitionend.transition);var Cr=Sr("animationend"),Nr=Sr("animationiteration"),Or=Sr("animationstart"),Rr=Sr("transitionend"),Mr=new Map,Tr="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Pr(e,t){Mr.set(e,t),l(t,[e])}for(var Ar=0;Ar<Tr.length;Ar++){var Zr=Tr[Ar];Pr(Zr.toLowerCase(),"on"+(Zr[0].toUpperCase()+Zr.slice(1)))}Pr(Cr,"onAnimationEnd"),Pr(Nr,"onAnimationIteration"),Pr(Or,"onAnimationStart"),Pr("dblclick","onDoubleClick"),Pr("focusin","onFocus"),Pr("focusout","onBlur"),Pr(Rr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ir="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Lr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Ir));function jr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,i,s,l,c){if(Fe.apply(this,arguments),Le){if(!Le)throw Error(a(198));var u=je;Le=!1,je=null,De||(De=!0,ze=u)}}(r,t,void 0,e),e.currentTarget=null}function Dr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==a&&o.isPropagationStopped())break e;jr(o,s,c),a=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==a&&o.isPropagationStopped())break e;jr(o,s,c),a=l}}}if(De)throw e=ze,De=!1,ze=null,e}function zr(e,t){var n=t[go];void 0===n&&(n=t[go]=new Set);var r=e+"__bubble";n.has(r)||(Ur(t,e,2,!1),n.add(r))}function Br(e,t,n){var r=0;t&&(r|=4),Ur(n,e,r,t)}var Fr="_reactListening"+Math.random().toString(36).slice(2);function $r(e){if(!e[Fr]){e[Fr]=!0,i.forEach((function(t){"selectionchange"!==t&&(Lr.has(t)||Br(t,!1,e),Br(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[Fr]||(t[Fr]=!0,Br("selectionchange",!1,t))}}function Ur(e,t,n,r){switch(Qt(t)){case 1:var o=Ht;break;case 4:o=qt;break;default:o=Vt}n=o.bind(null,t,n,e),o=void 0,!Ae||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Wr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;i=i.return}for(;null!==s;){if(null===(i=yo(s)))return;if(5===(l=i.tag)||6===l){r=a=i;continue e}s=s.parentNode}}r=r.return}Te((function(){var r=a,o=xe(n),i=[];e:{var s=Mr.get(e);if(void 0!==s){var l=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=Nn;break;case"focusin":c="focus",l=gn;break;case"focusout":c="blur",l=gn;break;case"beforeblur":case"afterblur":l=gn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=mn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=hn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=Rn;break;case Cr:case Nr:case Or:l=bn;break;case Rr:l=Mn;break;case"scroll":l=pn;break;case"wheel":l=Pn;break;case"copy":case"cut":case"paste":l=yn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=On}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,m=r;null!==m;){var h=(f=m).stateNode;if(5===f.tag&&null!==h&&(f=h,null!==p&&null!=(h=Pe(m,p))&&u.push(Hr(m,h,f))),d)break;m=m.return}0<u.length&&(s=new l(s,c,null,n,o),i.push({event:s,listeners:u}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!yo(c)&&!c[ho])&&(l||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?yo(c):null)&&(c!==(d=$e(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=mn,h="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(u=On,h="onPointerLeave",p="onPointerEnter",m="pointer"),d=null==l?s:xo(l),f=null==c?s:xo(c),(s=new u(h,m+"leave",l,n,o)).target=d,s.relatedTarget=f,h=null,yo(o)===r&&((u=new u(p,m+"enter",c,n,o)).target=f,u.relatedTarget=d,h=u),d=h,l&&c)e:{for(p=c,m=0,f=u=l;f;f=Vr(f))m++;for(f=0,h=p;h;h=Vr(h))f++;for(;0<m-f;)u=Vr(u),m--;for(;0<f-m;)p=Vr(p),f--;for(;m--;){if(u===p||null!==p&&u===p.alternate)break e;u=Vr(u),p=Vr(p)}u=null}else u=null;null!==l&&Kr(i,s,l,u,!1),null!==c&&null!==d&&Kr(i,d,c,u,!0)}if("select"===(l=(s=r?xo(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var g=Qn;else if(Wn(s))if(Xn)g=ir;else{g=or;var b=rr}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(g=ar);switch(g&&(g=g(e,r))?Hn(i,g,n,o):(b&&b(e,s,r),"focusout"===e&&(b=s._wrapperState)&&b.controlled&&"number"===s.type&&ee(s,"number",s.value)),b=r?xo(r):window,e){case"focusin":(Wn(b)||"true"===b.contentEditable)&&(gr=b,br=r,vr=null);break;case"focusout":vr=br=gr=null;break;case"mousedown":yr=!0;break;case"contextmenu":case"mouseup":case"dragend":yr=!1,wr(i,n,o);break;case"selectionchange":if(hr)break;case"keydown":case"keyup":wr(i,n,o)}var v;if(Zn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else $n?Bn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(jn&&"ko"!==n.locale&&($n||"onCompositionStart"!==y?"onCompositionEnd"===y&&$n&&(v=en()):(Yt="value"in(Xt=o)?Xt.value:Xt.textContent,$n=!0)),0<(b=qr(r,y)).length&&(y=new wn(y,e,null,n,o),i.push({event:y,listeners:b}),(v||null!==(v=Fn(n)))&&(y.data=v))),(v=Ln?function(e,t){switch(e){case"compositionend":return Fn(t);case"keypress":return 32!==t.which?null:(zn=!0,Dn);case"textInput":return(e=t.data)===Dn&&zn?null:e;default:return null}}(e,n):function(e,t){if($n)return"compositionend"===e||!Zn&&Bn(e,t)?(e=en(),Jt=Yt=Xt=null,$n=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return jn&&"ko"!==t.locale?null:t.data}}(e,n))&&0<(r=qr(r,"onBeforeInput")).length&&(o=new wn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=v)}Dr(i,t)}))}function Hr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function qr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Pe(e,n))&&r.unshift(Hr(e,a,o)),null!=(a=Pe(e,t))&&r.push(Hr(e,a,o))),e=e.return}return r}function Vr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Kr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(null!==l&&l===r)break;5===s.tag&&null!==c&&(s=c,o?null!=(l=Pe(n,a))&&i.unshift(Hr(n,l,s)):o||null!=(l=Pe(n,a))&&i.push(Hr(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Gr=/\r\n?/g,Qr=/\u0000|\uFFFD/g;function Xr(e){return("string"==typeof e?e:""+e).replace(Gr,"\n").replace(Qr,"")}function Yr(e,t,n){if(t=Xr(t),Xr(e)!==t&&n)throw Error(a(425))}function Jr(){}var eo=null,to=null;function no(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ro="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ao="function"==typeof Promise?Promise:void 0,io="function"==typeof queueMicrotask?queueMicrotask:void 0!==ao?function(e){return ao.resolve(null).then(e).catch(so)}:ro;function so(e){setTimeout((function(){throw e}))}function lo(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===r)return e.removeChild(o),void $t(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=o}while(n);$t(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,mo="__reactProps$"+po,ho="__reactContainer$"+po,go="__reactEvents$"+po,bo="__reactListeners$"+po,vo="__reactHandles$"+po;function yo(e){var t=e[fo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ho]||n[fo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=uo(e);null!==e;){if(n=e[fo])return n;e=uo(e)}return t}n=(e=n).parentNode}return null}function wo(e){return!(e=e[fo]||e[ho])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function xo(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function Eo(e){return e[mo]||null}var ko=[],_o=-1;function So(e){return{current:e}}function Co(e){0>_o||(e.current=ko[_o],ko[_o]=null,_o--)}function No(e,t){_o++,ko[_o]=e.current,e.current=t}var Oo={},Ro=So(Oo),Mo=So(!1),To=Oo;function Po(e,t){var n=e.type.contextTypes;if(!n)return Oo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Ao(e){return null!=e.childContextTypes}function Zo(){Co(Mo),Co(Ro)}function Io(e,t,n){if(Ro.current!==Oo)throw Error(a(168));No(Ro,t),No(Mo,n)}function Lo(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,U(e)||"Unknown",o));return j({},n,r)}function jo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Oo,To=Ro.current,No(Ro,e),No(Mo,Mo.current),!0}function Do(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=Lo(e,t,To),r.__reactInternalMemoizedMergedChildContext=e,Co(Mo),Co(Ro),No(Ro,e)):Co(Mo),No(Mo,n)}var zo=null,Bo=!1,Fo=!1;function $o(e){null===zo?zo=[e]:zo.push(e)}function Uo(){if(!Fo&&null!==zo){Fo=!0;var e=0,t=yt;try{var n=zo;for(yt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}zo=null,Bo=!1}catch(t){throw null!==zo&&(zo=zo.slice(e+1)),Ve(Je,Uo),t}finally{yt=t,Fo=!1}}return null}var Wo=[],Ho=0,qo=null,Vo=0,Ko=[],Go=0,Qo=null,Xo=1,Yo="";function Jo(e,t){Wo[Ho++]=Vo,Wo[Ho++]=qo,qo=e,Vo=t}function ea(e,t,n){Ko[Go++]=Xo,Ko[Go++]=Yo,Ko[Go++]=Qo,Qo=e;var r=Xo;e=Yo;var o=32-it(r)-1;r&=~(1<<o),n+=1;var a=32-it(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Xo=1<<32-it(t)+o|n<<o|r,Yo=a+e}else Xo=1<<a|n<<o|r,Yo=e}function ta(e){null!==e.return&&(Jo(e,1),ea(e,1,0))}function na(e){for(;e===qo;)qo=Wo[--Ho],Wo[Ho]=null,Vo=Wo[--Ho],Wo[Ho]=null;for(;e===Qo;)Qo=Ko[--Go],Ko[Go]=null,Yo=Ko[--Go],Ko[Go]=null,Xo=Ko[--Go],Ko[Go]=null}var ra=null,oa=null,aa=!1,ia=null;function sa(e,t){var n=Tc(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function la(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,ra=e,oa=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ra=e,oa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Qo?{id:Xo,overflow:Yo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Tc(18,null,null,0)).stateNode=t,n.return=e,e.child=n,ra=e,oa=null,!0);default:return!1}}function ca(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function ua(e){if(aa){var t=oa;if(t){var n=t;if(!la(e,t)){if(ca(e))throw Error(a(418));t=co(n.nextSibling);var r=ra;t&&la(e,t)?sa(r,n):(e.flags=-4097&e.flags|2,aa=!1,ra=e)}}else{if(ca(e))throw Error(a(418));e.flags=-4097&e.flags|2,aa=!1,ra=e}}}function da(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ra=e}function pa(e){if(e!==ra)return!1;if(!aa)return da(e),aa=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!no(e.type,e.memoizedProps)),t&&(t=oa)){if(ca(e))throw fa(),Error(a(418));for(;t;)sa(e,t),t=co(t.nextSibling)}if(da(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){oa=co(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}oa=null}}else oa=ra?co(e.stateNode.nextSibling):null;return!0}function fa(){for(var e=oa;e;)e=co(e.nextSibling)}function ma(){oa=ra=null,aa=!1}function ha(e){null===ia?ia=[e]:ia.push(e)}var ga=w.ReactCurrentBatchConfig;function ba(e,t){if(e&&e.defaultProps){for(var n in t=j({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var va=So(null),ya=null,wa=null,xa=null;function Ea(){xa=wa=ya=null}function ka(e){var t=va.current;Co(va),e._currentValue=t}function _a(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Sa(e,t){ya=e,xa=wa=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(ws=!0),e.firstContext=null)}function Ca(e){var t=e._currentValue;if(xa!==e)if(e={context:e,memoizedValue:t,next:null},null===wa){if(null===ya)throw Error(a(308));wa=e,ya.dependencies={lanes:0,firstContext:e}}else wa=wa.next=e;return t}var Na=null;function Oa(e){null===Na?Na=[e]:Na.push(e)}function Ra(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,Oa(t)):(n.next=o.next,o.next=n),t.interleaved=n,Ma(e,r)}function Ma(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Ta=!1;function Pa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Aa(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Za(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ia(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&Ol)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Ma(e,n)}return null===(o=r.interleaved)?(t.next=t,Oa(r)):(t.next=o.next,o.next=t),r.interleaved=t,Ma(e,n)}function La(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,vt(e,n)}}function ja(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Da(e,t,n,r){var o=e.updateQueue;Ta=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?a=c:i.next=c,i=l;var u=e.alternate;null!==u&&(s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l)}if(null!==a){var d=o.baseState;for(i=0,u=c=l=null,s=a;;){var p=s.lane,f=s.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var m=e,h=s;switch(p=t,f=n,h.tag){case 1:if("function"==typeof(m=h.payload)){d=m.call(f,d,p);break e}d=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(p="function"==typeof(m=h.payload)?m.call(f,d,p):m))break e;d=j({},d,p);break e;case 2:Ta=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(p=s).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Ll|=i,e.lanes=i,e.memoizedState=d}}function za(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var Ba=(new r.Component).refs;function Fa(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:j({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var $a={isMounted:function(e){return!!(e=e._reactInternals)&&$e(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=ec(),o=tc(e),a=Za(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=Ia(e,a,o))&&(nc(t,e,o,r),La(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=ec(),o=tc(e),a=Za(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=Ia(e,a,o))&&(nc(t,e,o,r),La(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=ec(),r=tc(e),o=Za(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=Ia(e,o,r))&&(nc(t,e,r,n),La(t,e,r))}};function Ua(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!(t.prototype&&t.prototype.isPureReactComponent&&lr(n,r)&&lr(o,a))}function Wa(e,t,n){var r=!1,o=Oo,a=t.contextType;return"object"==typeof a&&null!==a?a=Ca(a):(o=Ao(t)?To:Ro.current,a=(r=null!=(r=t.contextTypes))?Po(e,o):Oo),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=$a,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function Ha(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&$a.enqueueReplaceState(t,t.state,null)}function qa(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=Ba,Pa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=Ca(a):(a=Ao(t)?To:Ro.current,o.context=Po(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(Fa(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&$a.enqueueReplaceState(o,o.state,null),Da(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function Va(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;t===Ba&&(t=o.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Ka(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Ga(e){return(0,e._init)(e._payload)}function Qa(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Ac(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=jc(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===k?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===P&&Ga(a)===t.type)?((r=o(t,n.props)).ref=Va(e,t,n),r.return=e,r):((r=Zc(n.type,n.key,n.props,null,e.mode,r)).ref=Va(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Dc(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Ic(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=jc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case x:return(n=Zc(t.type,t.key,t.props,null,e.mode,n)).ref=Va(e,null,t),n.return=e,n;case E:return(t=Dc(t,e.mode,n)).return=e,t;case P:return p(e,(0,t._init)(t._payload),n)}if(te(t)||I(t))return(t=Ic(t,e.mode,n,null)).return=e,t;Ka(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case x:return n.key===o?c(e,t,n,r):null;case E:return n.key===o?u(e,t,n,r):null;case P:return f(e,t,(o=n._init)(n._payload),r)}if(te(n)||I(n))return null!==o?null:d(e,t,n,r,null);Ka(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case x:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case E:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case P:return m(e,t,n,(0,r._init)(r._payload),o)}if(te(r)||I(r))return d(t,e=e.get(n)||null,r,o,null);Ka(t,r)}return null}function h(o,a,s,l){for(var c=null,u=null,d=a,h=a=0,g=null;null!==d&&h<s.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var b=f(o,d,s[h],l);if(null===b){null===d&&(d=g);break}e&&d&&null===b.alternate&&t(o,d),a=i(b,a,h),null===u?c=b:u.sibling=b,u=b,d=g}if(h===s.length)return n(o,d),aa&&Jo(o,h),c;if(null===d){for(;h<s.length;h++)null!==(d=p(o,s[h],l))&&(a=i(d,a,h),null===u?c=d:u.sibling=d,u=d);return aa&&Jo(o,h),c}for(d=r(o,d);h<s.length;h++)null!==(g=m(d,o,h,s[h],l))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),a=i(g,a,h),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach((function(e){return t(o,e)})),aa&&Jo(o,h),c}function g(o,s,l,c){var u=I(l);if("function"!=typeof u)throw Error(a(150));if(null==(l=u.call(l)))throw Error(a(151));for(var d=u=null,h=s,g=s=0,b=null,v=l.next();null!==h&&!v.done;g++,v=l.next()){h.index>g?(b=h,h=null):b=h.sibling;var y=f(o,h,v.value,c);if(null===y){null===h&&(h=b);break}e&&h&&null===y.alternate&&t(o,h),s=i(y,s,g),null===d?u=y:d.sibling=y,d=y,h=b}if(v.done)return n(o,h),aa&&Jo(o,g),u;if(null===h){for(;!v.done;g++,v=l.next())null!==(v=p(o,v.value,c))&&(s=i(v,s,g),null===d?u=v:d.sibling=v,d=v);return aa&&Jo(o,g),u}for(h=r(o,h);!v.done;g++,v=l.next())null!==(v=m(h,o,g,v.value,c))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),s=i(v,s,g),null===d?u=v:d.sibling=v,d=v);return e&&h.forEach((function(e){return t(o,e)})),aa&&Jo(o,g),u}return function e(r,a,i,l){if("object"==typeof i&&null!==i&&i.type===k&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case x:e:{for(var c=i.key,u=a;null!==u;){if(u.key===c){if((c=i.type)===k){if(7===u.tag){n(r,u.sibling),(a=o(u,i.props.children)).return=r,r=a;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===P&&Ga(c)===u.type){n(r,u.sibling),(a=o(u,i.props)).ref=Va(r,u,i),a.return=r,r=a;break e}n(r,u);break}t(r,u),u=u.sibling}i.type===k?((a=Ic(i.props.children,r.mode,l,i.key)).return=r,r=a):((l=Zc(i.type,i.key,i.props,null,r.mode,l)).ref=Va(r,a,i),l.return=r,r=l)}return s(r);case E:e:{for(u=i.key;null!==a;){if(a.key===u){if(4===a.tag&&a.stateNode.containerInfo===i.containerInfo&&a.stateNode.implementation===i.implementation){n(r,a.sibling),(a=o(a,i.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=Dc(i,r.mode,l)).return=r,r=a}return s(r);case P:return e(r,a,(u=i._init)(i._payload),l)}if(te(i))return h(r,a,i,l);if(I(i))return g(r,a,i,l);Ka(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,i)).return=r,r=a):(n(r,a),(a=jc(i,r.mode,l)).return=r,r=a),s(r)):n(r,a)}}var Xa=Qa(!0),Ya=Qa(!1),Ja={},ei=So(Ja),ti=So(Ja),ni=So(Ja);function ri(e){if(e===Ja)throw Error(a(174));return e}function oi(e,t){switch(No(ni,t),No(ti,e),No(ei,Ja),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Co(ei),No(ei,t)}function ai(){Co(ei),Co(ti),Co(ni)}function ii(e){ri(ni.current);var t=ri(ei.current),n=le(t,e.type);t!==n&&(No(ti,e),No(ei,n))}function si(e){ti.current===e&&(Co(ei),Co(ti))}var li=So(0);function ci(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ui=[];function di(){for(var e=0;e<ui.length;e++)ui[e]._workInProgressVersionPrimary=null;ui.length=0}var pi=w.ReactCurrentDispatcher,fi=w.ReactCurrentBatchConfig,mi=0,hi=null,gi=null,bi=null,vi=!1,yi=!1,wi=0,xi=0;function Ei(){throw Error(a(321))}function ki(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!sr(e[n],t[n]))return!1;return!0}function _i(e,t,n,r,o,i){if(mi=i,hi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,pi.current=null===e||null===e.memoizedState?ss:ls,e=n(r,o),yi){i=0;do{if(yi=!1,wi=0,25<=i)throw Error(a(301));i+=1,bi=gi=null,t.updateQueue=null,pi.current=cs,e=n(r,o)}while(yi)}if(pi.current=is,t=null!==gi&&null!==gi.next,mi=0,bi=gi=hi=null,vi=!1,t)throw Error(a(300));return e}function Si(){var e=0!==wi;return wi=0,e}function Ci(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===bi?hi.memoizedState=bi=e:bi=bi.next=e,bi}function Ni(){if(null===gi){var e=hi.alternate;e=null!==e?e.memoizedState:null}else e=gi.next;var t=null===bi?hi.memoizedState:bi.next;if(null!==t)bi=t,gi=e;else{if(null===e)throw Error(a(310));e={memoizedState:(gi=e).memoizedState,baseState:gi.baseState,baseQueue:gi.baseQueue,queue:gi.queue,next:null},null===bi?hi.memoizedState=bi=e:bi=bi.next=e}return bi}function Oi(e,t){return"function"==typeof t?t(e):t}function Ri(e){var t=Ni(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=gi,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var s=o.next;o.next=i.next,i.next=s}r.baseQueue=o=i,n.pending=null}if(null!==o){i=o.next,r=r.baseState;var l=s=null,c=null,u=i;do{var d=u.lane;if((mi&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=p,s=r):c=c.next=p,hi.lanes|=d,Ll|=d}u=u.next}while(null!==u&&u!==i);null===c?s=r:c.next=l,sr(r,t.memoizedState)||(ws=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do{i=o.lane,hi.lanes|=i,Ll|=i,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Mi(e){var t=Ni(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{i=e(i,s.action),s=s.next}while(s!==o);sr(i,t.memoizedState)||(ws=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Ti(){}function Pi(e,t){var n=hi,r=Ni(),o=t(),i=!sr(r.memoizedState,o);if(i&&(r.memoizedState=o,ws=!0),r=r.queue,Wi(Ii.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==bi&&1&bi.memoizedState.tag){if(n.flags|=2048,zi(9,Zi.bind(null,n,r,o,t),void 0,null),null===Rl)throw Error(a(349));0!=(30&mi)||Ai(n,t,o)}return o}function Ai(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=hi.updateQueue)?(t={lastEffect:null,stores:null},hi.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Zi(e,t,n,r){t.value=n,t.getSnapshot=r,Li(t)&&ji(e)}function Ii(e,t,n){return n((function(){Li(t)&&ji(e)}))}function Li(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sr(e,n)}catch(e){return!0}}function ji(e){var t=Ma(e,1);null!==t&&nc(t,e,1,-1)}function Di(e){var t=Ci();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Oi,lastRenderedState:e},t.queue=e,e=e.dispatch=ns.bind(null,hi,e),[t.memoizedState,e]}function zi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=hi.updateQueue)?(t={lastEffect:null,stores:null},hi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function Bi(){return Ni().memoizedState}function Fi(e,t,n,r){var o=Ci();hi.flags|=e,o.memoizedState=zi(1|t,n,void 0,void 0===r?null:r)}function $i(e,t,n,r){var o=Ni();r=void 0===r?null:r;var a=void 0;if(null!==gi){var i=gi.memoizedState;if(a=i.destroy,null!==r&&ki(r,i.deps))return void(o.memoizedState=zi(t,n,a,r))}hi.flags|=e,o.memoizedState=zi(1|t,n,a,r)}function Ui(e,t){return Fi(8390656,8,e,t)}function Wi(e,t){return $i(2048,8,e,t)}function Hi(e,t){return $i(4,2,e,t)}function qi(e,t){return $i(4,4,e,t)}function Vi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Ki(e,t,n){return n=null!=n?n.concat([e]):null,$i(4,4,Vi.bind(null,t,e),n)}function Gi(){}function Qi(e,t){var n=Ni();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ki(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Xi(e,t){var n=Ni();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ki(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Yi(e,t,n){return 0==(21&mi)?(e.baseState&&(e.baseState=!1,ws=!0),e.memoizedState=n):(sr(n,t)||(n=ht(),hi.lanes|=n,Ll|=n,e.baseState=!0),t)}function Ji(e,t){var n=yt;yt=0!==n&&4>n?n:4,e(!0);var r=fi.transition;fi.transition={};try{e(!1),t()}finally{yt=n,fi.transition=r}}function es(){return Ni().memoizedState}function ts(e,t,n){var r=tc(e);n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},rs(e)?os(t,n):null!==(n=Ra(e,t,n,r))&&(nc(n,e,r,ec()),as(n,t,r))}function ns(e,t,n){var r=tc(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(rs(e))os(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=a(i,n);if(o.hasEagerState=!0,o.eagerState=s,sr(s,i)){var l=t.interleaved;return null===l?(o.next=o,Oa(t)):(o.next=l.next,l.next=o),void(t.interleaved=o)}}catch(e){}null!==(n=Ra(e,t,o,r))&&(nc(n,e,r,o=ec()),as(n,t,r))}}function rs(e){var t=e.alternate;return e===hi||null!==t&&t===hi}function os(e,t){yi=vi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function as(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,vt(e,n)}}var is={readContext:Ca,useCallback:Ei,useContext:Ei,useEffect:Ei,useImperativeHandle:Ei,useInsertionEffect:Ei,useLayoutEffect:Ei,useMemo:Ei,useReducer:Ei,useRef:Ei,useState:Ei,useDebugValue:Ei,useDeferredValue:Ei,useTransition:Ei,useMutableSource:Ei,useSyncExternalStore:Ei,useId:Ei,unstable_isNewReconciler:!1},ss={readContext:Ca,useCallback:function(e,t){return Ci().memoizedState=[e,void 0===t?null:t],e},useContext:Ca,useEffect:Ui,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Fi(4194308,4,Vi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Fi(4194308,4,e,t)},useInsertionEffect:function(e,t){return Fi(4,2,e,t)},useMemo:function(e,t){var n=Ci();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ci();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=ts.bind(null,hi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Ci().memoizedState=e},useState:Di,useDebugValue:Gi,useDeferredValue:function(e){return Ci().memoizedState=e},useTransition:function(){var e=Di(!1),t=e[0];return e=Ji.bind(null,e[1]),Ci().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=hi,o=Ci();if(aa){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===Rl)throw Error(a(349));0!=(30&mi)||Ai(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Ui(Ii.bind(null,r,i,e),[e]),r.flags|=2048,zi(9,Zi.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Ci(),t=Rl.identifierPrefix;if(aa){var n=Yo;t=":"+t+"R"+(n=(Xo&~(1<<32-it(Xo)-1)).toString(32)+n),0<(n=wi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=xi++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},ls={readContext:Ca,useCallback:Qi,useContext:Ca,useEffect:Wi,useImperativeHandle:Ki,useInsertionEffect:Hi,useLayoutEffect:qi,useMemo:Xi,useReducer:Ri,useRef:Bi,useState:function(){return Ri(Oi)},useDebugValue:Gi,useDeferredValue:function(e){return Yi(Ni(),gi.memoizedState,e)},useTransition:function(){return[Ri(Oi)[0],Ni().memoizedState]},useMutableSource:Ti,useSyncExternalStore:Pi,useId:es,unstable_isNewReconciler:!1},cs={readContext:Ca,useCallback:Qi,useContext:Ca,useEffect:Wi,useImperativeHandle:Ki,useInsertionEffect:Hi,useLayoutEffect:qi,useMemo:Xi,useReducer:Mi,useRef:Bi,useState:function(){return Mi(Oi)},useDebugValue:Gi,useDeferredValue:function(e){var t=Ni();return null===gi?t.memoizedState=e:Yi(t,gi.memoizedState,e)},useTransition:function(){return[Mi(Oi)[0],Ni().memoizedState]},useMutableSource:Ti,useSyncExternalStore:Pi,useId:es,unstable_isNewReconciler:!1};function us(e,t){try{var n="",r=t;do{n+=F(r),r=r.return}while(r);var o=n}catch(e){o="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:t,stack:o,digest:null}}function ds(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function ps(e,t){try{console.error(t.value)}catch(e){setTimeout((function(){throw e}))}}var fs="function"==typeof WeakMap?WeakMap:Map;function ms(e,t,n){(n=Za(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Wl||(Wl=!0,Hl=r),ps(0,t)},n}function hs(e,t,n){(n=Za(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){ps(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){ps(0,t),"function"!=typeof r&&(null===ql?ql=new Set([this]):ql.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function gs(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new fs;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=Sc.bind(null,e,t,n),t.then(e,e))}function bs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function vs(e,t,n,r,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=Za(-1,1)).tag=2,Ia(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var ys=w.ReactCurrentOwner,ws=!1;function xs(e,t,n,r){t.child=null===e?Ya(t,null,n,r):Xa(t,e.child,n,r)}function Es(e,t,n,r,o){n=n.render;var a=t.ref;return Sa(t,o),r=_i(e,t,n,r,a,o),n=Si(),null===e||ws?(aa&&n&&ta(t),t.flags|=1,xs(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Ws(e,t,o))}function ks(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Pc(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Zc(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,_s(e,t,a,r,o))}if(a=e.child,0==(e.lanes&o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(i,r)&&e.ref===t.ref)return Ws(e,t,o)}return t.flags|=1,(e=Ac(a,r)).ref=t.ref,e.return=t,t.child=e}function _s(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(lr(a,r)&&e.ref===t.ref){if(ws=!1,t.pendingProps=r=a,0==(e.lanes&o))return t.lanes=e.lanes,Ws(e,t,o);0!=(131072&e.flags)&&(ws=!0)}}return Ns(e,t,n,r,o)}function Ss(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},No(Al,Pl),Pl|=n;else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,No(Al,Pl),Pl|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,No(Al,Pl),Pl|=r}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,No(Al,Pl),Pl|=r;return xs(e,t,o,n),t.child}function Cs(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ns(e,t,n,r,o){var a=Ao(n)?To:Ro.current;return a=Po(t,a),Sa(t,o),n=_i(e,t,n,r,a,o),r=Si(),null===e||ws?(aa&&r&&ta(t),t.flags|=1,xs(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Ws(e,t,o))}function Os(e,t,n,r,o){if(Ao(n)){var a=!0;jo(t)}else a=!1;if(Sa(t,o),null===t.stateNode)Us(e,t),Wa(t,n,r),qa(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;c="object"==typeof c&&null!==c?Ca(c):Po(t,c=Ao(n)?To:Ro.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&Ha(t,i,r,c),Ta=!1;var p=t.memoizedState;i.state=p,Da(t,r,i,o),l=t.memoizedState,s!==r||p!==l||Mo.current||Ta?("function"==typeof u&&(Fa(t,n,u,r),l=t.memoizedState),(s=Ta||Ua(t,n,s,r,p,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Aa(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:ba(t.type,s),i.props=c,d=t.pendingProps,p=i.context,l="object"==typeof(l=n.contextType)&&null!==l?Ca(l):Po(t,l=Ao(n)?To:Ro.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&Ha(t,i,r,l),Ta=!1,p=t.memoizedState,i.state=p,Da(t,r,i,o);var m=t.memoizedState;s!==d||p!==m||Mo.current||Ta?("function"==typeof f&&(Fa(t,n,f,r),m=t.memoizedState),(c=Ta||Ua(t,n,c,r,p,m,l)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return Rs(e,t,n,r,a,o)}function Rs(e,t,n,r,o,a){Cs(e,t);var i=0!=(128&t.flags);if(!r&&!i)return o&&Do(t,n,!1),Ws(e,t,a);r=t.stateNode,ys.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Xa(t,e.child,null,a),t.child=Xa(t,null,s,a)):xs(e,t,s,a),t.memoizedState=r.state,o&&Do(t,n,!0),t.child}function Ms(e){var t=e.stateNode;t.pendingContext?Io(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Io(0,t.context,!1),oi(e,t.containerInfo)}function Ts(e,t,n,r,o){return ma(),ha(o),t.flags|=256,xs(e,t,n,r),t.child}var Ps,As,Zs,Is={dehydrated:null,treeContext:null,retryLane:0};function Ls(e){return{baseLanes:e,cachePool:null,transitions:null}}function js(e,t,n){var r,o=t.pendingProps,i=li.current,s=!1,l=0!=(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),No(li,1&i),null===e)return ua(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=o.children,e=o.fallback,s?(o=t.mode,s=t.child,l={mode:"hidden",children:l},0==(1&o)&&null!==s?(s.childLanes=0,s.pendingProps=l):s=Lc(l,o,0,null),e=Ic(e,o,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Ls(n),t.memoizedState=Is,e):Ds(t,l));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,o,i,s){if(n)return 256&t.flags?(t.flags&=-257,zs(e,t,s,r=ds(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,o=t.mode,r=Lc({mode:"visible",children:r.children},o,0,null),(i=Ic(i,o,s,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&Xa(t,e.child,null,s),t.child.memoizedState=Ls(s),t.memoizedState=Is,i);if(0==(1&t.mode))return zs(e,t,s,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var l=r.dgst;return r=l,zs(e,t,s,r=ds(i=Error(a(419)),r,void 0))}if(l=0!=(s&e.childLanes),ws||l){if(null!==(r=Rl)){switch(s&-s){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(r.suspendedLanes|s))?0:o)&&o!==i.retryLane&&(i.retryLane=o,Ma(e,o),nc(r,e,o,-1))}return hc(),zs(e,t,s,r=ds(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Nc.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,oa=co(o.nextSibling),ra=t,aa=!0,ia=null,null!==e&&(Ko[Go++]=Xo,Ko[Go++]=Yo,Ko[Go++]=Qo,Xo=e.id,Yo=e.overflow,Qo=t),(t=Ds(t,r.children)).flags|=4096,t)}(e,t,l,o,r,i,n);if(s){s=o.fallback,l=t.mode,r=(i=e.child).sibling;var c={mode:"hidden",children:o.children};return 0==(1&l)&&t.child!==i?((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null):(o=Ac(i,c)).subtreeFlags=14680064&i.subtreeFlags,null!==r?s=Ac(r,s):(s=Ic(s,l,n,null)).flags|=2,s.return=t,o.return=t,o.sibling=s,t.child=o,o=s,s=t.child,l=null===(l=e.child.memoizedState)?Ls(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~n,t.memoizedState=Is,o}return e=(s=e.child).sibling,o=Ac(s,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Ds(e,t){return(t=Lc({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function zs(e,t,n,r){return null!==r&&ha(r),Xa(t,e.child,null,n),(e=Ds(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Bs(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),_a(e.return,t,n)}function Fs(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function $s(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(xs(e,t,r.children,n),0!=(2&(r=li.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Bs(e,n,t);else if(19===e.tag)Bs(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(No(li,r),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ci(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),Fs(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ci(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}Fs(t,!0,n,null,a);break;case"together":Fs(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Us(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Ws(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Ll|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Ac(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Ac(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Hs(e,t){if(!aa)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function qs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Vs(e,t,n){var r=t.pendingProps;switch(na(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return qs(t),null;case 1:case 17:return Ao(t.type)&&Zo(),qs(t),null;case 3:return r=t.stateNode,ai(),Co(Mo),Co(Ro),di(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==ia&&(ic(ia),ia=null))),qs(t),null;case 5:si(t);var o=ri(ni.current);if(n=t.type,null!==e&&null!=t.stateNode)As(e,t,n,r),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return qs(t),null}if(e=ri(ei.current),pa(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[fo]=t,r[mo]=i,e=0!=(1&t.mode),n){case"dialog":zr("cancel",r),zr("close",r);break;case"iframe":case"object":case"embed":zr("load",r);break;case"video":case"audio":for(o=0;o<Ir.length;o++)zr(Ir[o],r);break;case"source":zr("error",r);break;case"img":case"image":case"link":zr("error",r),zr("load",r);break;case"details":zr("toggle",r);break;case"input":Q(r,i),zr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},zr("invalid",r);break;case"textarea":oe(r,i),zr("invalid",r)}for(var l in ve(n,i),o=null,i)if(i.hasOwnProperty(l)){var c=i[l];"children"===l?"string"==typeof c?r.textContent!==c&&(!0!==i.suppressHydrationWarning&&Yr(r.textContent,c,e),o=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==i.suppressHydrationWarning&&Yr(r.textContent,c,e),o=["children",""+c]):s.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&zr("scroll",r)}switch(n){case"input":q(r),J(r,i,!0);break;case"textarea":q(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=Jr)}r=o,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=se(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[fo]=t,e[mo]=r,Ps(e,t),t.stateNode=e;e:{switch(l=ye(n,r),n){case"dialog":zr("cancel",e),zr("close",e),o=r;break;case"iframe":case"object":case"embed":zr("load",e),o=r;break;case"video":case"audio":for(o=0;o<Ir.length;o++)zr(Ir[o],e);o=r;break;case"source":zr("error",e),o=r;break;case"img":case"image":case"link":zr("error",e),zr("load",e),o=r;break;case"details":zr("toggle",e),o=r;break;case"input":Q(e,r),o=G(e,r),zr("invalid",e);break;case"option":default:o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=j({},r,{value:void 0}),zr("invalid",e);break;case"textarea":oe(e,r),o=re(e,r),zr("invalid",e)}for(i in ve(n,o),c=o)if(c.hasOwnProperty(i)){var u=c[i];"style"===i?ge(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===i?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(s.hasOwnProperty(i)?null!=u&&"onScroll"===i&&zr("scroll",e):null!=u&&y(e,i,u,l))}switch(n){case"input":q(e),J(e,r,!1);break;case"textarea":q(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+W(r.value));break;case"select":e.multiple=!!r.multiple,null!=(i=r.value)?ne(e,!!r.multiple,i,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return qs(t),null;case 6:if(e&&null!=t.stateNode)Zs(0,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));if(n=ri(ni.current),ri(ei.current),pa(t)){if(r=t.stateNode,n=t.memoizedProps,r[fo]=t,(i=r.nodeValue!==n)&&null!==(e=ra))switch(e.tag){case 3:Yr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Yr(r.nodeValue,n,0!=(1&e.mode))}i&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[fo]=t,t.stateNode=r}return qs(t),null;case 13:if(Co(li),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(aa&&null!==oa&&0!=(1&t.mode)&&0==(128&t.flags))fa(),ma(),t.flags|=98560,i=!1;else if(i=pa(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(a(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(a(317));i[fo]=t}else ma(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;qs(t),i=!1}else null!==ia&&(ic(ia),ia=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!=(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&li.current)?0===Zl&&(Zl=3):hc())),null!==t.updateQueue&&(t.flags|=4),qs(t),null);case 4:return ai(),null===e&&$r(t.stateNode.containerInfo),qs(t),null;case 10:return ka(t.type._context),qs(t),null;case 19:if(Co(li),null===(i=t.memoizedState))return qs(t),null;if(r=0!=(128&t.flags),null===(l=i.rendering))if(r)Hs(i,!1);else{if(0!==Zl||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(l=ci(e))){for(t.flags|=128,Hs(i,!1),null!==(r=l.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(i=n).flags&=14680066,null===(l=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=l.childLanes,i.lanes=l.lanes,i.child=l.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=l.memoizedProps,i.memoizedState=l.memoizedState,i.updateQueue=l.updateQueue,i.type=l.type,e=l.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return No(li,1&li.current|2),t.child}e=e.sibling}null!==i.tail&&Xe()>$l&&(t.flags|=128,r=!0,Hs(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ci(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Hs(i,!0),null===i.tail&&"hidden"===i.tailMode&&!l.alternate&&!aa)return qs(t),null}else 2*Xe()-i.renderingStartTime>$l&&1073741824!==n&&(t.flags|=128,r=!0,Hs(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=i.last)?n.sibling=l:t.child=l,i.last=l)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Xe(),t.sibling=null,n=li.current,No(li,r?1&n|2:1&n),t):(qs(t),null);case 22:case 23:return dc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Pl)&&(qs(t),6&t.subtreeFlags&&(t.flags|=8192)):qs(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Ks(e,t){switch(na(t),t.tag){case 1:return Ao(t.type)&&Zo(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ai(),Co(Mo),Co(Ro),di(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return si(t),null;case 13:if(Co(li),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ma()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Co(li),null;case 4:return ai(),null;case 10:return ka(t.type._context),null;case 22:case 23:return dc(),null;default:return null}}Ps=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},As=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,ri(ei.current);var a,i=null;switch(n){case"input":o=G(e,o),r=G(e,r),i=[];break;case"select":o=j({},o,{value:void 0}),r=j({},r,{value:void 0}),i=[];break;case"textarea":o=re(e,o),r=re(e,r),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ve(n,r),n=null,o)if(!r.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var l=o[u];for(a in l)l.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(s.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=o?o[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(a in l)!l.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in c)c.hasOwnProperty(a)&&l[a]!==c[a]&&(n||(n={}),n[a]=c[a])}else n||(i||(i=[]),i.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(i=i||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(i=i||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(s.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&zr("scroll",e),i||l===c||(i=[])):(i=i||[]).push(u,c))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Zs=function(e,t,n,r){n!==r&&(t.flags|=4)};var Gs=!1,Qs=!1,Xs="function"==typeof WeakSet?WeakSet:Set,Ys=null;function Js(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(n){_c(e,t,n)}else n.current=null}function el(e,t,n){try{n()}catch(n){_c(e,t,n)}}var tl=!1;function nl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&el(t,n,a)}o=o.next}while(o!==r)}}function rl(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ol(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function al(e){var t=e.alternate;null!==t&&(e.alternate=null,al(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&null!==(t=e.stateNode)&&(delete t[fo],delete t[mo],delete t[go],delete t[bo],delete t[vo]),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function il(e){return 5===e.tag||3===e.tag||4===e.tag}function sl(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||il(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function ll(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(ll(e,t,n),e=e.sibling;null!==e;)ll(e,t,n),e=e.sibling}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}var ul=null,dl=!1;function pl(e,t,n){for(n=n.child;null!==n;)fl(e,t,n),n=n.sibling}function fl(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(e){}switch(n.tag){case 5:Qs||Js(n,t);case 6:var r=ul,o=dl;ul=null,pl(e,t,n),dl=o,null!==(ul=r)&&(dl?(e=ul,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):ul.removeChild(n.stateNode));break;case 18:null!==ul&&(dl?(e=ul,n=n.stateNode,8===e.nodeType?lo(e.parentNode,n):1===e.nodeType&&lo(e,n),$t(e)):lo(ul,n.stateNode));break;case 4:r=ul,o=dl,ul=n.stateNode.containerInfo,dl=!0,pl(e,t,n),ul=r,dl=o;break;case 0:case 11:case 14:case 15:if(!Qs&&null!==(r=n.updateQueue)&&null!==(r=r.lastEffect)){o=r=r.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(0!=(2&a)||0!=(4&a))&&el(n,t,i),o=o.next}while(o!==r)}pl(e,t,n);break;case 1:if(!Qs&&(Js(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(e){_c(n,t,e)}pl(e,t,n);break;case 21:pl(e,t,n);break;case 22:1&n.mode?(Qs=(r=Qs)||null!==n.memoizedState,pl(e,t,n),Qs=r):pl(e,t,n);break;default:pl(e,t,n)}}function ml(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Xs),t.forEach((function(t){var r=Oc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function hl(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var i=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 5:ul=l.stateNode,dl=!1;break e;case 3:case 4:ul=l.stateNode.containerInfo,dl=!0;break e}l=l.return}if(null===ul)throw Error(a(160));fl(i,s,o),ul=null,dl=!1;var c=o.alternate;null!==c&&(c.return=null),o.return=null}catch(e){_c(o,t,e)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)gl(t,e),t=t.sibling}function gl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(hl(t,e),bl(e),4&r){try{nl(3,e,e.return),rl(3,e)}catch(t){_c(e,e.return,t)}try{nl(5,e,e.return)}catch(t){_c(e,e.return,t)}}break;case 1:hl(t,e),bl(e),512&r&&null!==n&&Js(n,n.return);break;case 5:if(hl(t,e),bl(e),512&r&&null!==n&&Js(n,n.return),32&e.flags){var o=e.stateNode;try{pe(o,"")}catch(t){_c(e,e.return,t)}}if(4&r&&null!=(o=e.stateNode)){var i=e.memoizedProps,s=null!==n?n.memoizedProps:i,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===i.type&&null!=i.name&&X(o,i),ye(l,s);var u=ye(l,i);for(s=0;s<c.length;s+=2){var d=c[s],p=c[s+1];"style"===d?ge(o,p):"dangerouslySetInnerHTML"===d?de(o,p):"children"===d?pe(o,p):y(o,d,p,u)}switch(l){case"input":Y(o,i);break;case"textarea":ae(o,i);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var m=i.value;null!=m?ne(o,!!i.multiple,m,!1):f!==!!i.multiple&&(null!=i.defaultValue?ne(o,!!i.multiple,i.defaultValue,!0):ne(o,!!i.multiple,i.multiple?[]:"",!1))}o[mo]=i}catch(t){_c(e,e.return,t)}}break;case 6:if(hl(t,e),bl(e),4&r){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(t){_c(e,e.return,t)}}break;case 3:if(hl(t,e),bl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{$t(t.containerInfo)}catch(t){_c(e,e.return,t)}break;case 4:default:hl(t,e),bl(e);break;case 13:hl(t,e),bl(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||(Fl=Xe())),4&r&&ml(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Qs=(u=Qs)||d,hl(t,e),Qs=u):hl(t,e),bl(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&0!=(1&e.mode))for(Ys=e,d=e.child;null!==d;){for(p=Ys=d;null!==Ys;){switch(m=(f=Ys).child,f.tag){case 0:case 11:case 14:case 15:nl(4,f,f.return);break;case 1:Js(f,f.return);var h=f.stateNode;if("function"==typeof h.componentWillUnmount){r=f,n=f.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(e){_c(r,n,e)}}break;case 5:Js(f,f.return);break;case 22:if(null!==f.memoizedState){xl(p);continue}}null!==m?(m.return=f,Ys=m):xl(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{o=p.stateNode,u?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(l=p.stateNode,s=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,l.style.display=he("display",s))}catch(t){_c(e,e.return,t)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(t){_c(e,e.return,t)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:hl(t,e),bl(e),4&r&&ml(e);case 21:}}function bl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(il(n)){var r=n;break e}n=n.return}throw Error(a(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(pe(o,""),r.flags&=-33),cl(e,sl(e),o);break;case 3:case 4:var i=r.stateNode.containerInfo;ll(e,sl(e),i);break;default:throw Error(a(161))}}catch(t){_c(e,e.return,t)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vl(e,t,n){Ys=e,yl(e,t,n)}function yl(e,t,n){for(var r=0!=(1&e.mode);null!==Ys;){var o=Ys,a=o.child;if(22===o.tag&&r){var i=null!==o.memoizedState||Gs;if(!i){var s=o.alternate,l=null!==s&&null!==s.memoizedState||Qs;s=Gs;var c=Qs;if(Gs=i,(Qs=l)&&!c)for(Ys=o;null!==Ys;)l=(i=Ys).child,22===i.tag&&null!==i.memoizedState?El(o):null!==l?(l.return=i,Ys=l):El(o);for(;null!==a;)Ys=a,yl(a,t,n),a=a.sibling;Ys=o,Gs=s,Qs=c}wl(e)}else 0!=(8772&o.subtreeFlags)&&null!==a?(a.return=o,Ys=a):wl(e)}}function wl(e){for(;null!==Ys;){var t=Ys;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Qs||rl(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Qs)if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ba(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&za(t,i,r);break;case 3:var s=t.updateQueue;if(null!==s){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}za(t,s,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&$t(p)}}}break;default:throw Error(a(163))}Qs||512&t.flags&&ol(t)}catch(e){_c(t,t.return,e)}}if(t===e){Ys=null;break}if(null!==(n=t.sibling)){n.return=t.return,Ys=n;break}Ys=t.return}}function xl(e){for(;null!==Ys;){var t=Ys;if(t===e){Ys=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Ys=n;break}Ys=t.return}}function El(e){for(;null!==Ys;){var t=Ys;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{rl(4,t)}catch(e){_c(t,n,e)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(e){_c(t,o,e)}}var a=t.return;try{ol(t)}catch(e){_c(t,a,e)}break;case 5:var i=t.return;try{ol(t)}catch(e){_c(t,i,e)}}}catch(e){_c(t,t.return,e)}if(t===e){Ys=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Ys=s;break}Ys=t.return}}var kl,_l=Math.ceil,Sl=w.ReactCurrentDispatcher,Cl=w.ReactCurrentOwner,Nl=w.ReactCurrentBatchConfig,Ol=0,Rl=null,Ml=null,Tl=0,Pl=0,Al=So(0),Zl=0,Il=null,Ll=0,jl=0,Dl=0,zl=null,Bl=null,Fl=0,$l=1/0,Ul=null,Wl=!1,Hl=null,ql=null,Vl=!1,Kl=null,Gl=0,Ql=0,Xl=null,Yl=-1,Jl=0;function ec(){return 0!=(6&Ol)?Xe():-1!==Yl?Yl:Yl=Xe()}function tc(e){return 0==(1&e.mode)?1:0!=(2&Ol)&&0!==Tl?Tl&-Tl:null!==ga.transition?(0===Jl&&(Jl=ht()),Jl):0!==(e=yt)?e:e=void 0===(e=window.event)?16:Qt(e.type)}function nc(e,t,n,r){if(50<Ql)throw Ql=0,Xl=null,Error(a(185));bt(e,n,r),0!=(2&Ol)&&e===Rl||(e===Rl&&(0==(2&Ol)&&(jl|=n),4===Zl&&sc(e,Tl)),rc(e,r),1===n&&0===Ol&&0==(1&t.mode)&&($l=Xe()+500,Bo&&Uo()))}function rc(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var i=31-it(a),s=1<<i,l=o[i];-1===l?0!=(s&n)&&0==(s&r)||(o[i]=ft(s,t)):l<=t&&(e.expiredLanes|=s),a&=~s}}(e,t);var r=pt(e,e===Rl?Tl:0);if(0===r)null!==n&&Ke(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&Ke(n),1===t)0===e.tag?function(e){Bo=!0,$o(e)}(lc.bind(null,e)):$o(lc.bind(null,e)),io((function(){0==(6&Ol)&&Uo()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=Rc(n,oc.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function oc(e,t){if(Yl=-1,Jl=0,0!=(6&Ol))throw Error(a(327));var n=e.callbackNode;if(Ec()&&e.callbackNode!==n)return null;var r=pt(e,e===Rl?Tl:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=gc(e,r);else{t=r;var o=Ol;Ol|=2;var i=mc();for(Rl===e&&Tl===t||(Ul=null,$l=Xe()+500,pc(e,t));;)try{vc();break}catch(t){fc(e,t)}Ea(),Sl.current=i,Ol=o,null!==Ml?t=0:(Rl=null,Tl=0,t=Zl)}if(0!==t){if(2===t&&0!==(o=mt(e))&&(r=o,t=ac(e,o)),1===t)throw n=Il,pc(e,0),sc(e,r),rc(e,Xe()),n;if(6===t)sc(e,r);else{if(o=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!sr(a(),o))return!1}catch(e){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=gc(e,r))&&0!==(i=mt(e))&&(r=i,t=ac(e,i)),1===t))throw n=Il,pc(e,0),sc(e,r),rc(e,Xe()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(a(345));case 2:case 5:xc(e,Bl,Ul);break;case 3:if(sc(e,r),(130023424&r)===r&&10<(t=Fl+500-Xe())){if(0!==pt(e,0))break;if(((o=e.suspendedLanes)&r)!==r){ec(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=ro(xc.bind(null,e,Bl,Ul),t);break}xc(e,Bl,Ul);break;case 4:if(sc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,o=-1;0<r;){var s=31-it(r);i=1<<s,(s=t[s])>o&&(o=s),r&=~i}if(r=o,10<(r=(120>(r=Xe()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_l(r/1960))-r)){e.timeoutHandle=ro(xc.bind(null,e,Bl,Ul),r);break}xc(e,Bl,Ul);break;default:throw Error(a(329))}}}return rc(e,Xe()),e.callbackNode===n?oc.bind(null,e):null}function ac(e,t){var n=zl;return e.current.memoizedState.isDehydrated&&(pc(e,t).flags|=256),2!==(e=gc(e,t))&&(t=Bl,Bl=n,null!==t&&ic(t)),e}function ic(e){null===Bl?Bl=e:Bl.push.apply(Bl,e)}function sc(e,t){for(t&=~Dl,t&=~jl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),r=1<<n;e[n]=-1,t&=~r}}function lc(e){if(0!=(6&Ol))throw Error(a(327));Ec();var t=pt(e,0);if(0==(1&t))return rc(e,Xe()),null;var n=gc(e,t);if(0!==e.tag&&2===n){var r=mt(e);0!==r&&(t=r,n=ac(e,r))}if(1===n)throw n=Il,pc(e,0),sc(e,t),rc(e,Xe()),n;if(6===n)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,xc(e,Bl,Ul),rc(e,Xe()),null}function cc(e,t){var n=Ol;Ol|=1;try{return e(t)}finally{0===(Ol=n)&&($l=Xe()+500,Bo&&Uo())}}function uc(e){null!==Kl&&0===Kl.tag&&0==(6&Ol)&&Ec();var t=Ol;Ol|=1;var n=Nl.transition,r=yt;try{if(Nl.transition=null,yt=1,e)return e()}finally{yt=r,Nl.transition=n,0==(6&(Ol=t))&&Uo()}}function dc(){Pl=Al.current,Co(Al)}function pc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,oo(n)),null!==Ml)for(n=Ml.return;null!==n;){var r=n;switch(na(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Zo();break;case 3:ai(),Co(Mo),Co(Ro),di();break;case 5:si(r);break;case 4:ai();break;case 13:case 19:Co(li);break;case 10:ka(r.type._context);break;case 22:case 23:dc()}n=n.return}if(Rl=e,Ml=e=Ac(e.current,null),Tl=Pl=t,Zl=0,Il=null,Dl=jl=Ll=0,Bl=zl=null,null!==Na){for(t=0;t<Na.length;t++)if(null!==(r=(n=Na[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var i=a.next;a.next=o,r.next=i}n.pending=r}Na=null}return e}function fc(e,t){for(;;){var n=Ml;try{if(Ea(),pi.current=is,vi){for(var r=hi.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}vi=!1}if(mi=0,bi=gi=hi=null,yi=!1,wi=0,Cl.current=null,null===n||null===n.return){Zl=1,Il=t,Ml=null;break}e:{var i=e,s=n.return,l=n,c=t;if(t=Tl,l.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=l,p=d.tag;if(0==(1&d.mode)&&(0===p||11===p||15===p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var m=bs(s);if(null!==m){m.flags&=-257,vs(m,s,l,0,t),1&m.mode&&gs(i,u,t),c=u;var h=(t=m).updateQueue;if(null===h){var g=new Set;g.add(c),t.updateQueue=g}else h.add(c);break e}if(0==(1&t)){gs(i,u,t),hc();break e}c=Error(a(426))}else if(aa&&1&l.mode){var b=bs(s);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),vs(b,s,l,0,t),ha(us(c,l));break e}}i=c=us(c,l),4!==Zl&&(Zl=2),null===zl?zl=[i]:zl.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,ja(i,ms(0,c,t));break e;case 1:l=c;var v=i.type,y=i.stateNode;if(0==(128&i.flags)&&("function"==typeof v.getDerivedStateFromError||null!==y&&"function"==typeof y.componentDidCatch&&(null===ql||!ql.has(y)))){i.flags|=65536,t&=-t,i.lanes|=t,ja(i,hs(i,l,t));break e}}i=i.return}while(null!==i)}wc(n)}catch(e){t=e,Ml===n&&null!==n&&(Ml=n=n.return);continue}break}}function mc(){var e=Sl.current;return Sl.current=is,null===e?is:e}function hc(){0!==Zl&&3!==Zl&&2!==Zl||(Zl=4),null===Rl||0==(268435455&Ll)&&0==(268435455&jl)||sc(Rl,Tl)}function gc(e,t){var n=Ol;Ol|=2;var r=mc();for(Rl===e&&Tl===t||(Ul=null,pc(e,t));;)try{bc();break}catch(t){fc(e,t)}if(Ea(),Ol=n,Sl.current=r,null!==Ml)throw Error(a(261));return Rl=null,Tl=0,Zl}function bc(){for(;null!==Ml;)yc(Ml)}function vc(){for(;null!==Ml&&!Ge();)yc(Ml)}function yc(e){var t=kl(e.alternate,e,Pl);e.memoizedProps=e.pendingProps,null===t?wc(e):Ml=t,Cl.current=null}function wc(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Vs(n,t,Pl)))return void(Ml=n)}else{if(null!==(n=Ks(n,t)))return n.flags&=32767,void(Ml=n);if(null===e)return Zl=6,void(Ml=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Ml=t);Ml=t=e}while(null!==t);0===Zl&&(Zl=5)}function xc(e,t,n){var r=yt,o=Nl.transition;try{Nl.transition=null,yt=1,function(e,t,n,r){do{Ec()}while(null!==Kl);if(0!=(6&Ol))throw Error(a(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-it(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,i),e===Rl&&(Ml=Rl=null,Tl=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Vl||(Vl=!0,Rc(tt,(function(){return Ec(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=Nl.transition,Nl.transition=null;var s=yt;yt=1;var l=Ol;Ol|=4,Cl.current=null,function(e,t){if(eo=Wt,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(e){n=null;break e}var s=0,l=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var m;p!==n||0!==o&&3!==p.nodeType||(l=s+o),p!==i||0!==r&&3!==p.nodeType||(c=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(m=p.firstChild);)f=p,p=m;for(;;){if(p===e)break t;if(f===n&&++u===o&&(l=s),f===i&&++d===r&&(c=s),null!==(m=p.nextSibling))break;f=(p=f).parentNode}p=m}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(to={focusedElem:e,selectionRange:n},Wt=!1,Ys=t;null!==Ys;)if(e=(t=Ys).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Ys=e;else for(;null!==Ys;){t=Ys;try{var h=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==h){var g=h.memoizedProps,b=h.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?g:ba(t.type,g),b);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(a(163))}}catch(e){_c(t,t.return,e)}if(null!==(e=t.sibling)){e.return=t.return,Ys=e;break}Ys=t.return}h=tl,tl=!1}(e,n),gl(n,e),mr(to),Wt=!!eo,to=eo=null,e.current=n,vl(n,e,o),Qe(),Ol=l,yt=s,Nl.transition=i}else e.current=n;if(Vl&&(Vl=!1,Kl=e,Gl=o),0===(i=e.pendingLanes)&&(ql=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(e){}}(n.stateNode),rc(e,Xe()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)r((o=t[n]).value,{componentStack:o.stack,digest:o.digest});if(Wl)throw Wl=!1,e=Hl,Hl=null,e;0!=(1&Gl)&&0!==e.tag&&Ec(),0!=(1&(i=e.pendingLanes))?e===Xl?Ql++:(Ql=0,Xl=e):Ql=0,Uo()}(e,t,n,r)}finally{Nl.transition=o,yt=r}return null}function Ec(){if(null!==Kl){var e=wt(Gl),t=Nl.transition,n=yt;try{if(Nl.transition=null,yt=16>e?16:e,null===Kl)var r=!1;else{if(e=Kl,Kl=null,Gl=0,0!=(6&Ol))throw Error(a(331));var o=Ol;for(Ol|=4,Ys=e.current;null!==Ys;){var i=Ys,s=i.child;if(0!=(16&Ys.flags)){var l=i.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Ys=u;null!==Ys;){var d=Ys;switch(d.tag){case 0:case 11:case 15:nl(8,d,i)}var p=d.child;if(null!==p)p.return=d,Ys=p;else for(;null!==Ys;){var f=(d=Ys).sibling,m=d.return;if(al(d),d===u){Ys=null;break}if(null!==f){f.return=m,Ys=f;break}Ys=m}}}var h=i.alternate;if(null!==h){var g=h.child;if(null!==g){h.child=null;do{var b=g.sibling;g.sibling=null,g=b}while(null!==g)}}Ys=i}}if(0!=(2064&i.subtreeFlags)&&null!==s)s.return=i,Ys=s;else e:for(;null!==Ys;){if(0!=(2048&(i=Ys).flags))switch(i.tag){case 0:case 11:case 15:nl(9,i,i.return)}var v=i.sibling;if(null!==v){v.return=i.return,Ys=v;break e}Ys=i.return}}var y=e.current;for(Ys=y;null!==Ys;){var w=(s=Ys).child;if(0!=(2064&s.subtreeFlags)&&null!==w)w.return=s,Ys=w;else e:for(s=y;null!==Ys;){if(0!=(2048&(l=Ys).flags))try{switch(l.tag){case 0:case 11:case 15:rl(9,l)}}catch(e){_c(l,l.return,e)}if(l===s){Ys=null;break e}var x=l.sibling;if(null!==x){x.return=l.return,Ys=x;break e}Ys=l.return}}if(Ol=o,Uo(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(e){}r=!0}return r}finally{yt=n,Nl.transition=t}}return!1}function kc(e,t,n){e=Ia(e,t=ms(0,t=us(n,t),1),1),t=ec(),null!==e&&(bt(e,1,t),rc(e,t))}function _c(e,t,n){if(3===e.tag)kc(e,e,n);else for(;null!==t;){if(3===t.tag){kc(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===ql||!ql.has(r))){t=Ia(t,e=hs(t,e=us(n,e),1),1),e=ec(),null!==t&&(bt(t,1,e),rc(t,e));break}}t=t.return}}function Sc(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=ec(),e.pingedLanes|=e.suspendedLanes&n,Rl===e&&(Tl&n)===n&&(4===Zl||3===Zl&&(130023424&Tl)===Tl&&500>Xe()-Fl?pc(e,0):Dl|=n),rc(e,t)}function Cc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=ec();null!==(e=Ma(e,t))&&(bt(e,t,n),rc(e,n))}function Nc(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Cc(e,n)}function Oc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),Cc(e,n)}function Rc(e,t){return Ve(e,t)}function Mc(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Tc(e,t,n,r){return new Mc(e,t,n,r)}function Pc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Ac(e,t){var n=e.alternate;return null===n?((n=Tc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Zc(e,t,n,r,o,i){var s=2;if(r=e,"function"==typeof e)Pc(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case k:return Ic(n.children,o,i,t);case _:s=8,o|=8;break;case S:return(e=Tc(12,n,t,2|o)).elementType=S,e.lanes=i,e;case R:return(e=Tc(13,n,t,o)).elementType=R,e.lanes=i,e;case M:return(e=Tc(19,n,t,o)).elementType=M,e.lanes=i,e;case A:return Lc(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:s=10;break e;case N:s=9;break e;case O:s=11;break e;case T:s=14;break e;case P:s=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Tc(s,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function Ic(e,t,n,r){return(e=Tc(7,e,r,t)).lanes=n,e}function Lc(e,t,n,r){return(e=Tc(22,e,r,t)).elementType=A,e.lanes=n,e.stateNode={isHidden:!1},e}function jc(e,t,n){return(e=Tc(6,e,null,t)).lanes=n,e}function Dc(e,t,n){return(t=Tc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function zc(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=gt(0),this.expirationTimes=gt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=gt(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Bc(e,t,n,r,o,a,i,s,l){return e=new zc(e,t,n,s,l),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Tc(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Pa(a),e}function Fc(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:E,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}function $c(e){if(!e)return Oo;e:{if($e(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Ao(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(Ao(n))return Lo(e,n,t)}return t}function Uc(e,t,n,r,o,a,i,s,l){return(e=Bc(n,r,!0,e,0,a,0,s,l)).context=$c(null),n=e.current,(a=Za(r=ec(),o=tc(n))).callback=null!=t?t:null,Ia(n,a,o),e.current.lanes=o,bt(e,o,r),rc(e,r),e}function Wc(e,t,n,r){var o=t.current,a=ec(),i=tc(o);return n=$c(n),null===t.context?t.context=n:t.pendingContext=n,(t=Za(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Ia(o,t,i))&&(nc(e,o,i,a),La(e,o,i)),i}function Hc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function qc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Vc(e,t){qc(e,t),(e=e.alternate)&&qc(e,t)}kl=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||Mo.current)ws=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return ws=!1,function(e,t,n){switch(t.tag){case 3:Ms(t),ma();break;case 5:ii(t);break;case 1:Ao(t.type)&&jo(t);break;case 4:oi(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;No(va,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(No(li,1&li.current),t.flags|=128,null):0!=(n&t.child.childLanes)?js(e,t,n):(No(li,1&li.current),null!==(e=Ws(e,t,n))?e.sibling:null);No(li,1&li.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return $s(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),No(li,li.current),r)break;return null;case 22:case 23:return t.lanes=0,Ss(e,t,n)}return Ws(e,t,n)}(e,t,n);ws=0!=(131072&e.flags)}else ws=!1,aa&&0!=(1048576&t.flags)&&ea(t,Vo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Us(e,t),e=t.pendingProps;var o=Po(t,Ro.current);Sa(t,n),o=_i(null,t,r,e,o,n);var i=Si();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ao(r)?(i=!0,jo(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Pa(t),o.updater=$a,t.stateNode=o,o._reactInternals=t,qa(t,r,e,n),t=Rs(null,t,r,!0,i,n)):(t.tag=0,aa&&i&&ta(t),xs(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Us(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return Pc(e)?1:0;if(null!=e){if((e=e.$$typeof)===O)return 11;if(e===T)return 14}return 2}(r),e=ba(r,e),o){case 0:t=Ns(null,t,r,e,n);break e;case 1:t=Os(null,t,r,e,n);break e;case 11:t=Es(null,t,r,e,n);break e;case 14:t=ks(null,t,r,ba(r.type,e),n);break e}throw Error(a(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,Ns(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 1:return r=t.type,o=t.pendingProps,Os(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 3:e:{if(Ms(t),null===e)throw Error(a(387));r=t.pendingProps,o=(i=t.memoizedState).element,Aa(e,t),Da(t,r,null,n);var s=t.memoizedState;if(r=s.element,i.isDehydrated){if(i={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=Ts(e,t,r,n,o=us(Error(a(423)),t));break e}if(r!==o){t=Ts(e,t,r,n,o=us(Error(a(424)),t));break e}for(oa=co(t.stateNode.containerInfo.firstChild),ra=t,aa=!0,ia=null,n=Ya(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ma(),r===o){t=Ws(e,t,n);break e}xs(e,t,r,n)}t=t.child}return t;case 5:return ii(t),null===e&&ua(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,s=o.children,no(r,o)?s=null:null!==i&&no(r,i)&&(t.flags|=32),Cs(e,t),xs(e,t,s,n),t.child;case 6:return null===e&&ua(t),null;case 13:return js(e,t,n);case 4:return oi(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Xa(t,null,r,n):xs(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Es(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 7:return xs(e,t,t.pendingProps,n),t.child;case 8:case 12:return xs(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,s=o.value,No(va,r._currentValue),r._currentValue=s,null!==i)if(sr(i.value,s)){if(i.children===o.children&&!Mo.current){t=Ws(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var l=i.dependencies;if(null!==l){s=i.child;for(var c=l.firstContext;null!==c;){if(c.context===r){if(1===i.tag){(c=Za(-1,n&-n)).tag=2;var u=i.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=n,null!==(c=i.alternate)&&(c.lanes|=n),_a(i.return,n,t),l.lanes|=n;break}c=c.next}}else if(10===i.tag)s=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(s=i.return))throw Error(a(341));s.lanes|=n,null!==(l=s.alternate)&&(l.lanes|=n),_a(s,n,t),s=i.sibling}else s=i.child;if(null!==s)s.return=i;else for(s=i;null!==s;){if(s===t){s=null;break}if(null!==(i=s.sibling)){i.return=s.return,s=i;break}s=s.return}i=s}xs(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Sa(t,n),r=r(o=Ca(o)),t.flags|=1,xs(e,t,r,n),t.child;case 14:return o=ba(r=t.type,t.pendingProps),ks(e,t,r,o=ba(r.type,o),n);case 15:return _s(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ba(r,o),Us(e,t),t.tag=1,Ao(r)?(e=!0,jo(t)):e=!1,Sa(t,n),Wa(t,r,o),qa(t,r,o,n),Rs(null,t,r,!0,e,n);case 19:return $s(e,t,n);case 22:return Ss(e,t,n)}throw Error(a(156,t.tag))};var Kc="function"==typeof reportError?reportError:function(e){console.error(e)};function Gc(e){this._internalRoot=e}function Qc(e){this._internalRoot=e}function Xc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Yc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jc(){}function eu(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a;if("function"==typeof o){var s=o;o=function(){var e=Hc(i);s.call(e)}}Wc(t,i,e,o)}else i=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=Hc(i);a.call(e)}}var i=Uc(t,r,e,0,null,!1,0,"",Jc);return e._reactRootContainer=i,e[ho]=i.current,$r(8===e.nodeType?e.parentNode:e),uc(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var s=r;r=function(){var e=Hc(l);s.call(e)}}var l=Bc(e,0,!1,null,0,!1,0,"",Jc);return e._reactRootContainer=l,e[ho]=l.current,$r(8===e.nodeType?e.parentNode:e),uc((function(){Wc(t,l,n,r)})),l}(n,t,e,o,r);return Hc(i)}Qc.prototype.render=Gc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));Wc(e,t,null,null)},Qc.prototype.unmount=Gc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;uc((function(){Wc(null,e,null,null)})),t[ho]=null}},Qc.prototype.unstable_scheduleHydration=function(e){if(e){var t=_t();e={blockedOn:null,target:e,priority:t};for(var n=0;n<At.length&&0!==t&&t<At[n].priority;n++);At.splice(n,0,e),0===n&&jt(e)}},xt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(vt(t,1|n),rc(t,Xe()),0==(6&Ol)&&($l=Xe()+500,Uo()))}break;case 13:uc((function(){var t=Ma(e,1);if(null!==t){var n=ec();nc(t,e,1,n)}})),Vc(e,1)}},Et=function(e){if(13===e.tag){var t=Ma(e,134217728);null!==t&&nc(t,e,134217728,ec()),Vc(e,134217728)}},kt=function(e){if(13===e.tag){var t=tc(e),n=Ma(e,t);null!==n&&nc(n,e,t,ec()),Vc(e,t)}},_t=function(){return yt},St=function(e,t){var n=yt;try{return yt=e,t()}finally{yt=n}},Ee=function(e,t,n){switch(t){case"input":if(Y(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=Eo(r);if(!o)throw Error(a(90));V(r),Y(r,o)}}}break;case"textarea":ae(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Oe=cc,Re=uc;var tu={usingClientEntryPoint:!1,Events:[wo,xo,Eo,Ce,Ne,cc]},nu={findFiberByHostInstance:yo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},ru={bundleType:nu.bundleType,version:nu.version,rendererPackageName:nu.rendererPackageName,rendererConfig:nu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=He(e))?null:e.stateNode},findFiberByHostInstance:nu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ou=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ou.isDisabled&&ou.supportsFiber)try{ot=ou.inject(ru),at=ou}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Xc(t))throw Error(a(200));return Fc(e,t,null,n)},t.createRoot=function(e,t){if(!Xc(e))throw Error(a(299));var n=!1,r="",o=Kc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=Bc(e,1,!1,null,0,n,0,r,o),e[ho]=t.current,$r(8===e.nodeType?e.parentNode:e),new Gc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return null===(e=He(t))?null:e.stateNode},t.flushSync=function(e){return uc(e)},t.hydrate=function(e,t,n){if(!Yc(t))throw Error(a(200));return eu(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Xc(e))throw Error(a(405));var r=null!=n&&n.hydratedSources||null,o=!1,i="",s=Kc;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(s=n.onRecoverableError)),t=Uc(t,null,e,1,null!=n?n:null,o,0,i,s),e[ho]=t.current,$r(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Qc(t)},t.render=function(e,t,n){if(!Yc(t))throw Error(a(200));return eu(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Yc(e))throw Error(a(40));return!!e._reactRootContainer&&(uc((function(){eu(null,null,e,!1,(function(){e._reactRootContainer=null,e[ho]=null}))})),!0)},t.unstable_batchedUpdates=cc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Yc(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return eu(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},745:(e,t,n)=>{"use strict";var r=n(3935);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=n(4448)},9921:(e,t)=>{"use strict";Symbol.for("react.element"),Symbol.for("react.portal"),Symbol.for("react.fragment"),Symbol.for("react.strict_mode"),Symbol.for("react.profiler"),Symbol.for("react.provider"),Symbol.for("react.context"),Symbol.for("react.server_context"),Symbol.for("react.forward_ref"),Symbol.for("react.suspense"),Symbol.for("react.suspense_list"),Symbol.for("react.memo"),Symbol.for("react.lazy"),Symbol.for("react.offscreen");Symbol.for("react.module.reference")},9864:(e,t,n)=>{"use strict";n(9921)},5251:(e,t,n)=>{"use strict";var r=n(7294),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,a={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:a,_owner:s.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},2408:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator,m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,g={};function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function v(){}function y(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=b.prototype;var w=y.prototype=new v;w.constructor=y,h(w,b.prototype),w.isPureReactComponent=!0;var x=Array.isArray,E=Object.prototype.hasOwnProperty,k={current:null},_={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,r){var o,a={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,o)&&!_.hasOwnProperty(o)&&(a[o]=t[o]);var l=arguments.length-2;if(1===l)a.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];a.children=c}if(e&&e.defaultProps)for(o in l=e.defaultProps)void 0===a[o]&&(a[o]=l[o]);return{$$typeof:n,type:e,key:i,ref:s,props:a,_owner:k.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var N=/\/+/g;function O(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function R(e,t,o,a,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case n:case r:l=!0}}if(l)return i=i(l=e),e=""===a?"."+O(l,0):a,x(i)?(o="",null!=e&&(o=e.replace(N,"$&/")+"/"),R(i,t,o,"",(function(e){return e}))):null!=i&&(C(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(N,"$&/")+"/")+e)),t.push(i)),1;if(l=0,a=""===a?".":a+":",x(e))for(var c=0;c<e.length;c++){var u=a+O(s=e[c],c);l+=R(s,t,o,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(s=e.next()).done;)l+=R(s=s.value,t,o,u=a+O(s,c++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function M(e,t,n){if(null==e)return e;var r=[],o=0;return R(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function T(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var P={current:null},A={transition:null},Z={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:A,ReactCurrentOwner:k};t.Children={map:M,forEach:function(e,t,n){M(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return M(e,(function(){t++})),t},toArray:function(e){return M(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=o,t.Profiler=i,t.PureComponent=y,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Z,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=h({},e.props),a=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=k.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)E.call(t,c)&&!_.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];o.children=l}return{$$typeof:n,type:e.type,key:a,ref:i,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=A.transition;A.transition={};try{e()}finally{A.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return P.current.useCallback(e,t)},t.useContext=function(e){return P.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return P.current.useDeferredValue(e)},t.useEffect=function(e,t){return P.current.useEffect(e,t)},t.useId=function(){return P.current.useId()},t.useImperativeHandle=function(e,t,n){return P.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return P.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return P.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return P.current.useMemo(e,t)},t.useReducer=function(e,t,n){return P.current.useReducer(e,t,n)},t.useRef=function(e){return P.current.useRef(e)},t.useState=function(e){return P.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return P.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return P.current.useTransition()},t.version="18.2.0"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},5893:(e,t,n)=>{"use strict";e.exports=n(5251)},53:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,p=null,f=3,m=!1,h=!1,g=!1,b="function"==typeof setTimeout?setTimeout:null,v="function"==typeof clearTimeout?clearTimeout:null,y="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function x(e){if(g=!1,w(e),!h)if(null!==r(c))h=!0,A(E);else{var t=r(u);null!==t&&Z(x,t.startTime-e)}}function E(e,n){h=!1,g&&(g=!1,v(C),C=-1),m=!0;var a=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!R());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var s=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?p.callback=s:p===r(c)&&o(c),w(n)}else o(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&Z(x,d.startTime-n),l=!1}return l}finally{p=null,f=a,m=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var k,_=!1,S=null,C=-1,N=5,O=-1;function R(){return!(t.unstable_now()-O<N)}function M(){if(null!==S){var e=t.unstable_now();O=e;var n=!0;try{n=S(!0,e)}finally{n?k():(_=!1,S=null)}}else _=!1}if("function"==typeof y)k=function(){y(M)};else if("undefined"!=typeof MessageChannel){var T=new MessageChannel,P=T.port2;T.port1.onmessage=M,k=function(){P.postMessage(null)}}else k=function(){b(M,0)};function A(e){S=e,_||(_=!0,k())}function Z(e,n){C=b((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){h||m||(h=!0,A(E))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):N=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch(a="object"==typeof a&&null!==a&&"number"==typeof(a=a.delay)&&0<a?i+a:i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:s=a+s,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(g?(v(C),C=-1):g=!0,Z(x,a-i))):(e.sortIndex=s,n(c,e),h||m||(h=!0,A(E))),e},t.unstable_shouldYield=R,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},3250:(e,t,n)=>{"use strict";var r=n(7294),o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,s=r.useLayoutEffect,l=r.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var u="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,u=r[1];return s((function(){o.value=n,o.getSnapshot=t,c(o)&&u({inst:o})}),[e,n,t]),i((function(){return c(o)&&u({inst:o}),e((function(){c(o)&&u({inst:o})}))}),[e]),l(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:u},139:(e,t,n)=>{"use strict";var r=n(7294),o=n(1688),a="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},i=o.useSyncExternalStore,s=r.useRef,l=r.useEffect,c=r.useMemo,u=r.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,n,r,o){var d=s(null);if(null===d.current){var p={hasValue:!1,value:null};d.current=p}else p=d.current;d=c((function(){function e(e){if(!l){if(l=!0,i=e,e=r(e),void 0!==o&&p.hasValue){var t=p.value;if(o(t,e))return s=t}return s=e}if(t=s,a(i,e))return t;var n=r(e);return void 0!==o&&o(t,n)?t:(i=e,s=n)}var i,s,l=!1,c=void 0===n?null:n;return[function(){return e(t())},null===c?void 0:function(){return e(c())}]}),[t,n,r,o]);var f=i(e,d[0],d[1]);return l((function(){p.hasValue=!0,p.value=f}),[f]),u(f),f}},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},2798:(e,t,n)=>{"use strict";e.exports=n(139)},4836:e=>{e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},4712:(e,t,n)=>{var r=n(3390);r.registerLanguage("xml",n(4610)),r.registerLanguage("bash",n(8780)),r.registerLanguage("c",n(612)),r.registerLanguage("cpp",n(6248)),r.registerLanguage("csharp",n(3707)),r.registerLanguage("css",n(5064)),r.registerLanguage("markdown",n(2003)),r.registerLanguage("diff",n(7731)),r.registerLanguage("ruby",n(7905)),r.registerLanguage("go",n(2399)),r.registerLanguage("graphql",n(1738)),r.registerLanguage("ini",n(4762)),r.registerLanguage("java",n(8257)),r.registerLanguage("javascript",n(978)),r.registerLanguage("json",n(14)),r.registerLanguage("kotlin",n(5812)),r.registerLanguage("less",n(4210)),r.registerLanguage("lua",n(4981)),r.registerLanguage("makefile",n(7903)),r.registerLanguage("perl",n(2482)),r.registerLanguage("objectivec",n(2446)),r.registerLanguage("php",n(2656)),r.registerLanguage("php-template",n(5112)),r.registerLanguage("plaintext",n(2437)),r.registerLanguage("python",n(8245)),r.registerLanguage("python-repl",n(3722)),r.registerLanguage("r",n(4730)),r.registerLanguage("rust",n(9880)),r.registerLanguage("scss",n(1062)),r.registerLanguage("shell",n(6256)),r.registerLanguage("sql",n(8935)),r.registerLanguage("swift",n(7690)),r.registerLanguage("yaml",n(1392)),r.registerLanguage("typescript",n(8987)),r.registerLanguage("vbnet",n(7531)),r.registerLanguage("wasm",n(1533)),r.HighlightJS=r,r.default=r,e.exports=r},3390:e=>{var t={exports:{}};function n(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(t){var r=e[t];"object"!=typeof r||Object.isFrozen(r)||n(r)})),e}t.exports=n,t.exports.default=n;class r{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function o(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function a(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t];return t.forEach((function(e){for(const t in e)n[t]=e[t]})),n}const i=e=>!!e.scope||e.sublanguage&&e.language;class s{constructor(e,t){this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=o(e)}openNode(e){if(!i(e))return;let t="";t=e.sublanguage?`language-${e.language}`:((e,{prefix:t})=>{if(e.includes(".")){const n=e.split(".");return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")}return`${t}${e}`})(e.scope,{prefix:this.classPrefix}),this.span(t)}closeNode(e){i(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){this.buffer+=`<span class="${e}">`}}const l=(e={})=>{const t={children:[]};return Object.assign(t,e),t};class c{constructor(){this.rootNode=l(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t=l({scope:e});this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{c._collapse(e)})))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root;n.sublanguage=!0,n.language=t,this.add(n)}toHTML(){return new s(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}function p(e){return h("(?=",e,")")}function f(e){return h("(?:",e,")*")}function m(e){return h("(?:",e,")?")}function h(...e){return e.map((e=>d(e))).join("")}function g(...e){const t=function(e){const t=e[e.length-1];return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}(e);return"("+(t.capture?"":"?:")+e.map((e=>d(e))).join("|")+")"}function b(e){return new RegExp(e.toString()+"|").exec("").length-1}const v=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function y(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n;let r=d(e),o="";for(;r.length>0;){const e=v.exec(r);if(!e){o+=r;break}o+=r.substring(0,e.index),r=r.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?o+="\\"+String(Number(e[1])+t):(o+=e[0],"("===e[0]&&n++)}return o})).map((e=>`(${e})`)).join(t)}const w="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",E="\\b\\d+(\\.\\d+)?",k="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",_="\\b(0b[01]+)",S={begin:"\\\\[\\s\\S]",relevance:0},C={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[S]},N={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[S]},O=function(e,t,n={}){const r=a({scope:"comment",begin:e,end:t,contains:[]},n);r.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const o=g("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return r.contains.push({begin:h(/[ ]+/,"(",o,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),r},R=O("//","$"),M=O("/\\*","\\*/"),T=O("#","$"),P={scope:"number",begin:E,relevance:0},A={scope:"number",begin:k,relevance:0},Z={scope:"number",begin:_,relevance:0},I={begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[S,{begin:/\[/,end:/\]/,relevance:0,contains:[S]}]}]},L={scope:"title",begin:w,relevance:0},j={scope:"title",begin:x,relevance:0};var D=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:w,UNDERSCORE_IDENT_RE:x,NUMBER_RE:E,C_NUMBER_RE:k,BINARY_NUMBER_RE:_,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=h(t,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:S,APOS_STRING_MODE:C,QUOTE_STRING_MODE:N,PHRASAL_WORDS_MODE:{begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},COMMENT:O,C_LINE_COMMENT_MODE:R,C_BLOCK_COMMENT_MODE:M,HASH_COMMENT_MODE:T,NUMBER_MODE:P,C_NUMBER_MODE:A,BINARY_NUMBER_MODE:Z,REGEXP_MODE:I,TITLE_MODE:L,UNDERSCORE_TITLE_MODE:j,METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})}});function z(e,t){"."===e.input[e.index-1]&&t.ignoreMatch()}function B(e,t){void 0!==e.className&&(e.scope=e.className,delete e.className)}function F(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=z,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function $(e,t){Array.isArray(e.illegal)&&(e.illegal=g(...e.illegal))}function U(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function W(e,t){void 0===e.relevance&&(e.relevance=1)}const H=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]})),e.keywords=n.keywords,e.begin=h(n.beforeMatch,p(n.begin)),e.starts={relevance:0,contains:[Object.assign(n,{endsParent:!0})]},e.relevance=0,delete n.beforeMatch},q=["of","and","for","in","not","or","if","then","parent","list","value"];function V(e,t,n="keyword"){const r=Object.create(null);return"string"==typeof e?o(n,e.split(" ")):Array.isArray(e)?o(n,e):Object.keys(e).forEach((function(n){Object.assign(r,V(e[n],t,n))})),r;function o(e,n){t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((function(t){const n=t.split("|");r[n[0]]=[e,K(n[0],n[1])]}))}}function K(e,t){return t?Number(t):function(e){return q.includes(e.toLowerCase())}(e)?0:1}const G={},Q=e=>{console.error(e)},X=(e,...t)=>{console.log(`WARN: ${e}`,...t)},Y=(e,t)=>{G[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),G[`${e}/${t}`]=!0)},J=new Error;function ee(e,t,{key:n}){let r=0;const o=e[n],a={},i={};for(let e=1;e<=t.length;e++)i[e+r]=o[e],a[e+r]=!0,r+=b(t[e-1]);e[n]=i,e[n]._emit=a,e[n]._multi=!0}function te(e){!function(e){e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,delete e.scope)}(e),"string"==typeof e.beginScope&&(e.beginScope={_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope}),function(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw Q("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),J;if("object"!=typeof e.beginScope||null===e.beginScope)throw Q("beginScope must be object"),J;ee(e,e.begin,{key:"beginScope"}),e.begin=y(e.begin,{joinWith:""})}}(e),function(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw Q("skip, excludeEnd, returnEnd not compatible with endScope: {}"),J;if("object"!=typeof e.endScope||null===e.endScope)throw Q("endScope must be object"),J;ee(e,e.end,{key:"endScope"}),e.end=y(e.end,{joinWith:""})}}(e)}function ne(e){function t(t,n){return new RegExp(d(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":""))}class n{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=b(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map((e=>e[1]));this.matcherRe=t(y(e,{joinWith:"|"}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t)return null;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),r=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,r)}}class r{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=a(e.classNameAliases||{}),function n(o,i){const s=o;if(o.isCompiled)return s;[B,U,te,H].forEach((e=>e(o,i))),e.compilerExtensions.forEach((e=>e(o,i))),o.__beforeBegin=null,[F,$,W].forEach((e=>e(o,i))),o.isCompiled=!0;let l=null;return"object"==typeof o.keywords&&o.keywords.$pattern&&(o.keywords=Object.assign({},o.keywords),l=o.keywords.$pattern,delete o.keywords.$pattern),l=l||/\w+/,o.keywords&&(o.keywords=V(o.keywords,e.case_insensitive)),s.keywordPatternRe=t(l,!0),i&&(o.begin||(o.begin=/\B|\b/),s.beginRe=t(s.begin),o.end||o.endsWithParent||(o.end=/\B|\b/),o.end&&(s.endRe=t(s.end)),s.terminatorEnd=d(s.end)||"",o.endsWithParent&&i.terminatorEnd&&(s.terminatorEnd+=(o.end?"|":"")+i.terminatorEnd)),o.illegal&&(s.illegalRe=t(o.illegal)),o.contains||(o.contains=[]),o.contains=[].concat(...o.contains.map((function(e){return function(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(t){return a(e,{variants:null},t)}))),e.cachedVariants?e.cachedVariants:re(e)?a(e,{starts:e.starts?a(e.starts):null}):Object.isFrozen(e)?a(e):e}("self"===e?o:e)}))),o.contains.forEach((function(e){n(e,s)})),o.starts&&n(o.starts,i),s.matcher=function(e){const t=new r;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t}(s),s}(e)}function re(e){return!!e&&(e.endsWithParent||re(e.starts))}class oe extends Error{constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}const ae=o,ie=a,se=Symbol("nomatch");var le=function(e){const n=Object.create(null),o=Object.create(null),a=[];let i=!0;const s="Could not find the language '{}', did you forget to load/include a language module?",l={disableAutodetect:!0,name:"Plain text",contains:[]};let c={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:u};function d(e){return c.noHighlightRe.test(e)}function b(e,t,n){let r="",o="";"object"==typeof t?(r=e,n=t.ignoreIllegals,o=t.language):(Y("10.7.0","highlight(lang, code, ...args) has been deprecated."),Y("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),o=e,r=t),void 0===n&&(n=!0);const a={code:r,language:o};C("before:highlight",a);const i=a.result?a.result:v(a.language,a.code,n);return i.code=a.code,C("after:highlight",i),i}function v(e,t,o,a){const l=Object.create(null);function u(){if(!S.keywords)return void N.addText(O);let e=0;S.keywordPatternRe.lastIndex=0;let t=S.keywordPatternRe.exec(O),n="";for(;t;){n+=O.substring(e,t.index);const o=x.case_insensitive?t[0].toLowerCase():t[0],a=(r=o,S.keywords[r]);if(a){const[e,r]=a;if(N.addText(n),n="",l[o]=(l[o]||0)+1,l[o]<=7&&(R+=r),e.startsWith("_"))n+=t[0];else{const n=x.classNameAliases[e]||e;N.addKeyword(t[0],n)}}else n+=t[0];e=S.keywordPatternRe.lastIndex,t=S.keywordPatternRe.exec(O)}var r;n+=O.substring(e),N.addText(n)}function d(){null!=S.subLanguage?function(){if(""===O)return;let e=null;if("string"==typeof S.subLanguage){if(!n[S.subLanguage])return void N.addText(O);e=v(S.subLanguage,O,!0,C[S.subLanguage]),C[S.subLanguage]=e._top}else e=y(O,S.subLanguage.length?S.subLanguage:null);S.relevance>0&&(R+=e.relevance),N.addSublanguage(e._emitter,e.language)}():u(),O=""}function p(e,t){let n=1;const r=t.length-1;for(;n<=r;){if(!e._emit[n]){n++;continue}const r=x.classNameAliases[e[n]]||e[n],o=t[n];r?N.addKeyword(o,r):(O=o,u(),O=""),n++}}function f(e,t){return e.scope&&"string"==typeof e.scope&&N.openNode(x.classNameAliases[e.scope]||e.scope),e.beginScope&&(e.beginScope._wrap?(N.addKeyword(O,x.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),O=""):e.beginScope._multi&&(p(e.beginScope,t),O="")),S=Object.create(e,{parent:{value:S}}),S}function m(e,t,n){let o=function(e,t){const n=e&&e.exec(t);return n&&0===n.index}(e.endRe,n);if(o){if(e["on:end"]){const n=new r(e);e["on:end"](t,n),n.isMatchIgnored&&(o=!1)}if(o){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return m(e.parent,t,n)}function h(e){return 0===S.matcher.regexIndex?(O+=e[0],1):(P=!0,0)}function g(e){const n=e[0],r=t.substring(e.index),o=m(S,e,r);if(!o)return se;const a=S;S.endScope&&S.endScope._wrap?(d(),N.addKeyword(n,S.endScope._wrap)):S.endScope&&S.endScope._multi?(d(),p(S.endScope,e)):a.skip?O+=n:(a.returnEnd||a.excludeEnd||(O+=n),d(),a.excludeEnd&&(O=n));do{S.scope&&N.closeNode(),S.skip||S.subLanguage||(R+=S.relevance),S=S.parent}while(S!==o.parent);return o.starts&&f(o.starts,e),a.returnEnd?0:n.length}let b={};function w(n,a){const s=a&&a[0];if(O+=n,null==s)return d(),0;if("begin"===b.type&&"end"===a.type&&b.index===a.index&&""===s){if(O+=t.slice(a.index,a.index+1),!i){const t=new Error(`0 width match regex (${e})`);throw t.languageName=e,t.badRule=b.rule,t}return 1}if(b=a,"begin"===a.type)return function(e){const t=e[0],n=e.rule,o=new r(n),a=[n.__beforeBegin,n["on:begin"]];for(const n of a)if(n&&(n(e,o),o.isMatchIgnored))return h(t);return n.skip?O+=t:(n.excludeBegin&&(O+=t),d(),n.returnBegin||n.excludeBegin||(O=t)),f(n,e),n.returnBegin?0:t.length}(a);if("illegal"===a.type&&!o){const e=new Error('Illegal lexeme "'+s+'" for mode "'+(S.scope||"<unnamed>")+'"');throw e.mode=S,e}if("end"===a.type){const e=g(a);if(e!==se)return e}if("illegal"===a.type&&""===s)return 1;if(T>1e5&&T>3*a.index)throw new Error("potential infinite loop, way more iterations than matches");return O+=s,s.length}const x=k(e);if(!x)throw Q(s.replace("{}",e)),new Error('Unknown language: "'+e+'"');const E=ne(x);let _="",S=a||E;const C={},N=new c.__emitter(c);!function(){const e=[];for(let t=S;t!==x;t=t.parent)t.scope&&e.unshift(t.scope);e.forEach((e=>N.openNode(e)))}();let O="",R=0,M=0,T=0,P=!1;try{for(S.matcher.considerAll();;){T++,P?P=!1:S.matcher.considerAll(),S.matcher.lastIndex=M;const e=S.matcher.exec(t);if(!e)break;const n=w(t.substring(M,e.index),e);M=e.index+n}return w(t.substring(M)),N.closeAllNodes(),N.finalize(),_=N.toHTML(),{language:e,value:_,relevance:R,illegal:!1,_emitter:N,_top:S}}catch(n){if(n.message&&n.message.includes("Illegal"))return{language:e,value:ae(t),illegal:!0,relevance:0,_illegalBy:{message:n.message,index:M,context:t.slice(M-100,M+100),mode:n.mode,resultSoFar:_},_emitter:N};if(i)return{language:e,value:ae(t),illegal:!1,relevance:0,errorRaised:n,_emitter:N,_top:S};throw n}}function y(e,t){t=t||c.languages||Object.keys(n);const r=function(e){const t={value:ae(e),illegal:!1,relevance:0,_top:l,_emitter:new c.__emitter(c)};return t._emitter.addText(e),t}(e),o=t.filter(k).filter(S).map((t=>v(t,e,!1)));o.unshift(r);const a=o.sort(((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(k(e.language).supersetOf===t.language)return 1;if(k(t.language).supersetOf===e.language)return-1}return 0})),[i,s]=a,u=i;return u.secondBest=s,u}function w(e){let t=null;const n=function(e){let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"";const n=c.languageDetectRe.exec(t);if(n){const t=k(n[1]);return t||(X(s.replace("{}",n[1])),X("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}return t.split(/\s+/).find((e=>d(e)||k(e)))}(e);if(d(n))return;if(C("before:highlightElement",{el:e,language:n}),e.children.length>0&&(c.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(e)),c.throwUnescapedHTML))throw new oe("One of your code blocks includes unescaped HTML.",e.innerHTML);t=e;const r=t.textContent,a=n?b(r,{language:n,ignoreIllegals:!0}):y(r);e.innerHTML=a.value,function(e,t,n){const r=t&&o[t]||n;e.classList.add("hljs"),e.classList.add(`language-${r}`)}(e,n,a.language),e.result={language:a.language,re:a.relevance,relevance:a.relevance},a.secondBest&&(e.secondBest={language:a.secondBest.language,relevance:a.secondBest.relevance}),C("after:highlightElement",{el:e,result:a,text:r})}let x=!1;function E(){"loading"!==document.readyState?document.querySelectorAll(c.cssSelector).forEach(w):x=!0}function k(e){return e=(e||"").toLowerCase(),n[e]||n[o[e]]}function _(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{o[e.toLowerCase()]=t}))}function S(e){const t=k(e);return t&&!t.disableAutodetect}function C(e,t){const n=e;a.forEach((function(e){e[n]&&e[n](t)}))}"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function(){x&&E()}),!1),Object.assign(e,{highlight:b,highlightAuto:y,highlightAll:E,highlightElement:w,highlightBlock:function(e){return Y("10.7.0","highlightBlock will be removed entirely in v12.0"),Y("10.7.0","Please use highlightElement now."),w(e)},configure:function(e){c=ie(c,e)},initHighlighting:()=>{E(),Y("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},initHighlightingOnLoad:function(){E(),Y("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")},registerLanguage:function(t,r){let o=null;try{o=r(e)}catch(e){if(Q("Language definition for '{}' could not be registered.".replace("{}",t)),!i)throw e;Q(e),o=l}o.name||(o.name=t),n[t]=o,o.rawDefinition=r.bind(null,e),o.aliases&&_(o.aliases,{languageName:t})},unregisterLanguage:function(e){delete n[e];for(const t of Object.keys(o))o[t]===e&&delete o[t]},listLanguages:function(){return Object.keys(n)},getLanguage:k,registerAliases:_,autoDetection:S,inherit:ie,addPlugin:function(e){!function(e){e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{e["before:highlightBlock"](Object.assign({block:t.el},t))}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{e["after:highlightBlock"](Object.assign({block:t.el},t))})}(e),a.push(e)}}),e.debugMode=function(){i=!1},e.safeMode=function(){i=!0},e.versionString="11.6.0",e.regex={concat:h,lookahead:p,either:g,optional:m,anyNumberOfTimes:f};for(const e in D)"object"==typeof D[e]&&t.exports(D[e]);return Object.assign(e,D),e}({});e.exports=le,le.HighlightJS=le,le.default=le},8780:e=>{e.exports=function(e){const t=e.regex,n={},r={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[n]}]};Object.assign(n,{className:"variable",variants:[{begin:t.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},r]});const o={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},a={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},i={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,o]};o.contains.push(i);const s={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,n]},l=e.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:["if","then","else","elif","fi","for","while","in","do","done","case","esac","function"],literal:["true","false"],built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]},contains:[l,e.SHEBANG(),c,s,e.HASH_COMMENT_MODE,a,{match:/(\/[a-z._-]+)+/},i,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},n]}}},612:e=>{e.exports=function(e){const t=e.regex,n=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),r="[a-zA-Z_]\\w*::",o="(decltype\\(auto\\)|"+t.optional(r)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",a={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:/\batomic_[a-z]{3,6}\b/}]},i={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},s={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(i,{className:"string"}),{className:"string",begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},c={className:"title",begin:t.optional(r)+e.IDENT_RE,relevance:0},u=t.optional(r)+e.IDENT_RE+"\\s*\\(",d={keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"],literal:"true false NULL",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"},p=[l,a,n,e.C_BLOCK_COMMENT_MODE,s,i],f={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:d,contains:p.concat([{begin:/\(/,end:/\)/,keywords:d,contains:p.concat(["self"]),relevance:0}]),relevance:0},m={begin:"("+o+"[\\*&\\s]+)+"+u,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:d,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)",keywords:d,relevance:0},{begin:u,returnBegin:!0,contains:[e.inherit(c,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:d,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,i,s,a,{begin:/\(/,end:/\)/,keywords:d,relevance:0,contains:["self",n,e.C_BLOCK_COMMENT_MODE,i,s,a]}]},a,n,e.C_BLOCK_COMMENT_MODE,l]};return{name:"C",aliases:["h"],keywords:d,disableAutodetect:!0,illegal:"</",contains:[].concat(f,m,p,[l,{begin:e.IDENT_RE+"::",keywords:d},{className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:l,strings:i,keywords:d}}}},6248:e=>{e.exports=function(e){const t=e.regex,n=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),r="[a-zA-Z_]\\w*::",o="(?!struct)(decltype\\(auto\\)|"+t.optional(r)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",a={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},i={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},s={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(i,{className:"string"}),{className:"string",begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},c={className:"title",begin:t.optional(r)+e.IDENT_RE,relevance:0},u=t.optional(r)+e.IDENT_RE+"\\s*\\(",d={type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]},p={className:"function.dispatch",relevance:0,keywords:{_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]},begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))},f=[p,l,a,n,e.C_BLOCK_COMMENT_MODE,s,i],m={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:d,contains:f.concat([{begin:/\(/,end:/\)/,keywords:d,contains:f.concat(["self"]),relevance:0}]),relevance:0},h={className:"function",begin:"("+o+"[\\*&\\s]+)+"+u,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:d,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)",keywords:d,relevance:0},{begin:u,returnBegin:!0,contains:[c],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[i,s]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:d,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,i,s,a,{begin:/\(/,end:/\)/,keywords:d,relevance:0,contains:["self",n,e.C_BLOCK_COMMENT_MODE,i,s,a]}]},a,n,e.C_BLOCK_COMMENT_MODE,l]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:d,illegal:"</",classNameAliases:{"function.dispatch":"built_in"},contains:[].concat(m,h,p,f,[l,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",end:">",keywords:d,contains:["self",a]},{begin:e.IDENT_RE+"::",keywords:d},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}},3707:e=>{e.exports=function(e){const t={keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]),built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],literal:["default","false","null","true"]},n=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),r={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},o={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},a=e.inherit(o,{illegal:/\n/}),i={className:"subst",begin:/\{/,end:/\}/,keywords:t},s=e.inherit(i,{illegal:/\n/}),l={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},e.BACKSLASH_ESCAPE,s]},c={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},i]},u=e.inherit(c,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},s]});i.contains=[c,l,o,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,r,e.C_BLOCK_COMMENT_MODE],s.contains=[u,l,a,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,r,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const d={variants:[c,l,o,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},p={begin:"<",end:">",contains:[{beginKeywords:"in out"},n]},f=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",m={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:t,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:"</?",end:">"}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},d,r,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},n,p,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[n,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[n,p,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+f+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:t,contains:[{beginKeywords:["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"].join(" "),relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[e.TITLE_MODE,p],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,relevance:0,contains:[d,r,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},m]}}},5064:e=>{const t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],a=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse();e.exports=function(e){const i=e.regex,s=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}))(e),l=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[s.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/},s.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},s.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+r.join("|")+")"},{begin:":(:)?("+o.join("|")+")"}]},s.CSS_VARIABLE,{className:"attribute",begin:"\\b("+a.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[s.BLOCK_COMMENT,s.HEXCOLOR,s.IMPORTANT,s.CSS_NUMBER_MODE,...l,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...l,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},s.FUNCTION_DISPATCH]},{begin:i.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:n.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...l,s.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+t.join("|")+")\\b"}]}}},7731:e=>{e.exports=function(e){const t=e.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:t.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:t.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}},2399:e=>{e.exports=function(e){const t={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:t,illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:"number",variants:[{begin:e.C_NUMBER_RE+"[i]",relevance:1},e.C_NUMBER_MODE]},{begin:/:=/},{className:"function",beginKeywords:"func",end:"\\s*(\\{|$)",excludeEnd:!0,contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,illegal:/["']/}]}]}}},1738:e=>{e.exports=function(e){const t=e.regex;return{name:"GraphQL",aliases:["gql"],case_insensitive:!0,disableAutodetect:!1,keywords:{keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"],literal:["true","false","null"]},contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation",begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/,end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{scope:"symbol",begin:t.concat(/[_A-Za-z][_0-9A-Za-z]*/,t.lookahead(/\s*:/)),relevance:0}],illegal:[/[;<']/,/BEGIN/]}}},4762:e=>{e.exports=function(e){const t=e.regex,n={className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]},r=e.COMMENT();r.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const o={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},a={className:"literal",begin:/\bon|off|true|false|yes|no\b/},i={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},s={begin:/\[/,end:/\]/,contains:[r,a,o,i,n,"self"],relevance:0},l=t.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[r,{className:"section",begin:/\[+/,end:/\]+/},{begin:t.concat(l,"(\\s*\\.\\s*",l,")*",t.lookahead(/\s*=\s*[^#\s]/)),className:"attr",starts:{end:/$/,contains:[r,s,a,o,i,n]}}]}}},8257:e=>{var t="\\.([0-9](_*[0-9])*)",n="[0-9a-fA-F](_*[0-9a-fA-F])*",r={className:"number",variants:[{begin:`(\\b([0-9](_*[0-9])*)((${t})|\\.)?|(${t}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:`\\b([0-9](_*[0-9])*)((${t})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${t})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function o(e,t,n){return-1===n?"":e.replace(t,(r=>o(e,t,n-1)))}e.exports=function(e){const t=e.regex,n="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",a=n+o("(?:<"+n+"~~~(?:\\s*,\\s*"+n+"~~~)*>)?",/~~~/g,2),i={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},s={className:"meta",begin:"@"+n,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},l={className:"params",begin:/\(/,end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,n],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[t.concat(/(?!else)/,n),/\s+/,n,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,n],className:{1:"keyword",3:"title.class"},contains:[l,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+a+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:i,relevance:0,contains:[s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,r,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},r,s]}}},978:e=>{const t="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],r=["true","false","null","undefined","NaN","Infinity"],o=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],a=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],i=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],s=["arguments","this","super","console","window","document","localStorage","module","global"],l=[].concat(i,o,a);e.exports=function(e){const c=e.regex,u=t,d={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,t)=>{const n=e[0].length+e.index,r=e.input[n];if("<"===r||","===r)return void t.ignoreMatch();let o;">"===r&&(((e,{after:t})=>{const n="</"+e[0].slice(1);return-1!==e.input.indexOf(n,t)})(e,{after:n})||t.ignoreMatch()),(o=e.input.substring(n).match(/^\s+extends\s+/))&&0===o.index&&t.ignoreMatch()}},p={$pattern:t,keyword:n,literal:r,built_in:l,"variable.language":s},f="\\.([0-9](_?[0-9])*)",m="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",h={className:"number",variants:[{begin:`(\\b(${m})((${f})|\\.)?|(${f}))[eE][+-]?([0-9](_?[0-9])*)\\b`},{begin:`\\b(${m})\\b((${f})\\b|\\.)?|(${f})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},g={className:"subst",begin:"\\$\\{",end:"\\}",keywords:p,contains:[]},b={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,g],subLanguage:"xml"}},v={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,g],subLanguage:"css"}},y={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,g]},w={className:"comment",variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:u+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},x=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,b,v,y,h];g.contains=x.concat({begin:/\{/,end:/\}/,keywords:p,contains:["self"].concat(x)});const E=[].concat(w,g.contains),k=E.concat([{begin:/\(/,end:/\)/,keywords:p,contains:["self"].concat(E)}]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:k},S={variants:[{match:[/class/,/\s+/,u,/\s+/,/extends/,/\s+/,c.concat(u,"(",c.concat(/\./,u),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,u],scope:{1:"keyword",3:"title.class"}}]},C={relevance:0,match:c.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...o,...a]}},N={variants:[{match:[/function/,/\s+/,u,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[_],illegal:/%/},O={match:c.concat(/\b/,(R=[...i,"super"],c.concat("(?!",R.join("|"),")")),u,c.lookahead(/\(/)),className:"title.function",relevance:0};var R;const M={begin:c.concat(/\./,c.lookahead(c.concat(u,/(?![0-9A-Za-z$_(])/))),end:u,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},T={match:[/get|set/,/\s+/,u,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},_]},P="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",A={match:[/const|var|let/,/\s+/,u,/\s*/,/=\s*/,/(async\s*)?/,c.lookahead(P)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[_]};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:p,exports:{PARAMS_CONTAINS:k,CLASS_REFERENCE:C},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,b,v,y,w,h,C,{className:"attr",begin:u+c.lookahead(":"),relevance:0},A,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[w,e.REGEXP_MODE,{className:"function",begin:P,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:k}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:"</>"},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:d.begin,"on:begin":d.isTrulyOpeningTag,end:d.end}],subLanguage:"xml",contains:[{begin:d.begin,end:d.end,skip:!0,contains:["self"]}]}]},N,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[_,e.inherit(e.TITLE_MODE,{begin:u,className:"title.function"})]},{match:/\.\.\./,relevance:0},M,{match:"\\$"+u,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[_]},O,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},S,T,{match:/\$[(.]/}]}}},14:e=>{e.exports=function(e){const t=["true","false","null"],n={scope:"literal",beginKeywords:t.join(" ")};return{name:"JSON",keywords:{literal:t},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0},e.QUOTE_STRING_MODE,n,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}},5812:e=>{var t="\\.([0-9](_*[0-9])*)",n="[0-9a-fA-F](_*[0-9a-fA-F])*",r={className:"number",variants:[{begin:`(\\b([0-9](_*[0-9])*)((${t})|\\.)?|(${t}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:`\\b([0-9](_*[0-9])*)((${t})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${t})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};e.exports=function(e){const t={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},n={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},o={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},a={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},i={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[a,o]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,a,o]}]};o.contains.push(i);const s={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(i,{className:"string"}),"self"]}]},c=r,u=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},p=d;return p.variants[1].contains=[d],d.variants[1].contains=[p],{name:"Kotlin",aliases:["kt","kts"],keywords:t,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,u,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},n,s,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:t,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/</,end:/>/,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,u],relevance:0},e.C_LINE_COMMENT_MODE,u,s,l,i,e.C_NUMBER_MODE]},u]},{begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin:/</,end:/>/,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},s,l]},i,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},c]}}},4210:e=>{const t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],a=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),i=r.concat(o);e.exports=function(e){const s=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}))(e),l=i,c="([\\w-]+|@\\{[\\w-]+\\})",u=[],d=[],p=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},f=function(e,t,n){return{className:e,begin:t,relevance:n}},m={$pattern:/[a-z-]+/,keyword:"and or not only",attribute:n.join(" ")},h={begin:"\\(",end:"\\)",contains:d,keywords:m,relevance:0};d.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,p("'"),p('"'),s.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},s.HEXCOLOR,h,f("variable","@@?[\\w-]+",10),f("variable","@\\{[\\w-]+\\}"),f("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},s.IMPORTANT,{beginKeywords:"and not"},s.FUNCTION_DISPATCH);const g=d.concat({begin:/\{/,end:/\}/,contains:u}),b={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(d)},v={begin:c+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},s.CSS_VARIABLE,{className:"attribute",begin:"\\b("+a.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:d}}]},y={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:m,returnEnd:!0,contains:d,relevance:0}},w={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:g}},x={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:c,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,b,f("keyword","all\\b"),f("variable","@\\{[\\w-]+\\}"),{begin:"\\b("+t.join("|")+")\\b",className:"selector-tag"},s.CSS_NUMBER_MODE,f("selector-tag",c,0),f("selector-id","#"+c),f("selector-class","\\."+c,0),f("selector-tag","&",0),s.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+r.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+o.join("|")+")"},{begin:/\(/,end:/\)/,relevance:0,contains:g},{begin:"!important"},s.FUNCTION_DISPATCH]},E={begin:`[\\w-]+:(:)?(${l.join("|")})`,returnBegin:!0,contains:[x]};return u.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,y,w,E,v,x,b,s.FUNCTION_DISPATCH),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:u}}},4981:e=>{e.exports=function(e){const t="\\[=*\\[",n="\\]=*\\]",r={begin:t,end:n,contains:["self"]},o=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[",n,{contains:[r],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:o.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:o}].concat(o)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:t,end:n,contains:[r],relevance:5}])}}},7903:e=>{e.exports=function(e){const t={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%<?\^\+\*]/}]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t]},r={className:"variable",begin:/\$\([\w-]+\s/,end:/\)/,keywords:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},contains:[t]},o={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},a={className:"section",begin:/^[^\s]+:/,end:/$/,contains:[t]};return{name:"Makefile",aliases:["mk","mak","make"],keywords:{$pattern:/[\w-]+/,keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"},contains:[e.HASH_COMMENT_MODE,t,n,r,o,{className:"meta",begin:/^\.PHONY:/,end:/$/,keywords:{$pattern:/[\.\w]+/,keyword:".PHONY"}},a]}}},2003:e=>{e.exports=function(e){const t={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},n={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},r={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},o={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]},a=e.inherit(r,{contains:[]}),i=e.inherit(o,{contains:[]});r.contains.push(i),o.contains.push(a);let s=[t,n];return[r,o,a,i].forEach((e=>{e.contains=e.contains.concat(s)})),s=s.concat(r,o),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:s},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:s}]}]},t,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},r,o,{className:"quote",begin:"^>\\s+",contains:s,end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},n,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}},2446:e=>{e.exports=function(e){const t=/[a-zA-Z@][a-zA-Z0-9_]*/,n={$pattern:t,keyword:["@interface","@class","@protocol","@implementation"]};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:{"variable.language":["this","super"],$pattern:t,keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]},illegal:"</",contains:[{className:"built_in",begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"string",variants:[{begin:'@"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]}]},{className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),{className:"string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+n.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:n,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}},2482:e=>{e.exports=function(e){const t=e.regex,n=/[dualxmsipngr]{0,12}/,r={$pattern:/[\w.]+/,keyword:["abs","accept","alarm","and","atan2","bind","binmode","bless","break","caller","chdir","chmod","chomp","chop","chown","chr","chroot","close","closedir","connect","continue","cos","crypt","dbmclose","dbmopen","defined","delete","die","do","dump","each","else","elsif","endgrent","endhostent","endnetent","endprotoent","endpwent","endservent","eof","eval","exec","exists","exit","exp","fcntl","fileno","flock","for","foreach","fork","format","formline","getc","getgrent","getgrgid","getgrnam","gethostbyaddr","gethostbyname","gethostent","getlogin","getnetbyaddr","getnetbyname","getnetent","getpeername","getpgrp","getpriority","getprotobyname","getprotobynumber","getprotoent","getpwent","getpwnam","getpwuid","getservbyname","getservbyport","getservent","getsockname","getsockopt","given","glob","gmtime","goto","grep","gt","hex","if","index","int","ioctl","join","keys","kill","last","lc","lcfirst","length","link","listen","local","localtime","log","lstat","lt","ma","map","mkdir","msgctl","msgget","msgrcv","msgsnd","my","ne","next","no","not","oct","open","opendir","or","ord","our","pack","package","pipe","pop","pos","print","printf","prototype","push","q|0","qq","quotemeta","qw","qx","rand","read","readdir","readline","readlink","readpipe","recv","redo","ref","rename","require","reset","return","reverse","rewinddir","rindex","rmdir","say","scalar","seek","seekdir","select","semctl","semget","semop","send","setgrent","sethostent","setnetent","setpgrp","setpriority","setprotoent","setpwent","setservent","setsockopt","shift","shmctl","shmget","shmread","shmwrite","shutdown","sin","sleep","socket","socketpair","sort","splice","split","sprintf","sqrt","srand","stat","state","study","sub","substr","symlink","syscall","sysopen","sysread","sysseek","system","syswrite","tell","telldir","tie","tied","time","times","tr","truncate","uc","ucfirst","umask","undef","unless","unlink","unpack","unshift","untie","until","use","utime","values","vec","wait","waitpid","wantarray","warn","when","while","write","x|0","xor","y|0"].join(" ")},o={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:r},a={begin:/->\{/,end:/\}/},i={variants:[{begin:/\$\d/},{begin:t.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@][^\s\w{]/,relevance:0}]},s=[e.BACKSLASH_ESCAPE,o,i],l=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],c=(e,r,o="\\1")=>{const a="\\1"===o?o:t.concat(o,r);return t.concat(t.concat("(?:",e,")"),r,/(?:\\.|[^\\\/])*?/,a,/(?:\\.|[^\\\/])*?/,o,n)},u=(e,r,o)=>t.concat(t.concat("(?:",e,")"),r,/(?:\\.|[^\\\/])*?/,o,n),d=[i,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),a,{className:"string",contains:s,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:c("s|tr|y",t.either(...l,{capture:!0}))},{begin:c("s|tr|y","\\(","\\)")},{begin:c("s|tr|y","\\[","\\]")},{begin:c("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:u("(?:m|qr)?",/\//,/\//)},{begin:u("m|qr",t.either(...l,{capture:!0}),/\1/)},{begin:u("m|qr",/\(/,/\)/)},{begin:u("m|qr",/\[/,/\]/)},{begin:u("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return o.contains=d,a.contains=d,{name:"Perl",aliases:["pl","pm"],keywords:r,contains:d}}},5112:e=>{e.exports=function(e){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}},2656:e=>{e.exports=function(e){const t=e.regex,n=/(?![A-Za-z0-9])(?![$])/,r=t.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,n),o=t.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,n),a={scope:"variable",match:"\\$+"+r},i={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},s=e.inherit(e.APOS_STRING_MODE,{illegal:null}),l="[ \t\n]",c={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(i)}),s,e.END_SAME_AS_BEGIN({begin:/<<<[ \t]*(\w+)\n/,end:/[ \t]*(\w+)\b/,contains:e.QUOTE_STRING_MODE.contains.concat(i)})]},u={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},d=["false","null","true"],p=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],f=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],m={keyword:p,literal:(e=>{const t=[];return e.forEach((e=>{t.push(e),e.toLowerCase()===e?t.push(e.toUpperCase()):t.push(e.toLowerCase())})),t})(d),built_in:f},h=e=>e.map((e=>e.replace(/\|\d+$/,""))),g={variants:[{match:[/new/,t.concat(l,"+"),t.concat("(?!",h(f).join("\\b|"),"\\b)"),o],scope:{1:"keyword",4:"title.class"}}]},b=t.concat(r,"\\b(?!\\()"),v={variants:[{match:[t.concat(/::/,t.lookahead(/(?!class\b)/)),b],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[o,t.concat(/::/,t.lookahead(/(?!class\b)/)),b],scope:{1:"title.class",3:"variable.constant"}},{match:[o,t.concat("::",t.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[o,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},y={scope:"attr",match:t.concat(r,t.lookahead(":"),t.lookahead(/(?!::)/))},w={relevance:0,begin:/\(/,end:/\)/,keywords:m,contains:[y,a,v,e.C_BLOCK_COMMENT_MODE,c,u,g]},x={relevance:0,match:[/\b/,t.concat("(?!fn\\b|function\\b|",h(p).join("\\b|"),"|",h(f).join("\\b|"),"\\b)"),r,t.concat(l,"*"),t.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[w]};w.contains.push(x);const E=[y,v,e.C_BLOCK_COMMENT_MODE,c,u,g];return{case_insensitive:!1,keywords:m,contains:[{begin:t.concat(/#\[\s*/,o),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:d,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:d,keyword:["new","array"]},contains:["self",...E]},...E,{scope:"meta",match:o}]},e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},a,x,v,{match:[/const/,/\s/,r],scope:{1:"keyword",3:"variable.constant"}},g,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:m,contains:["self",a,v,e.C_BLOCK_COMMENT_MODE,c,u]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},c,u]}}},2437:e=>{e.exports=function(e){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}},3722:e=>{e.exports=function(e){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}},8245:e=>{e.exports=function(e){const t=e.regex,n=/[\p{XID_Start}_]\p{XID_Continue}*/u,r=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],o={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:r,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},a={className:"meta",begin:/^(>>>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:o,illegal:/#/},s={begin:/\{\{/,relevance:0},l={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},c="[0-9](_?[0-9])*",u=`(\\b(${c}))?\\.(${c})|\\b(${c})\\.`,d=`\\b|${r.join("|")}`,p={className:"number",relevance:0,variants:[{begin:`(\\b(${c})|(${u}))[eE][+-]?(${c})[jJ]?(?=${d})`},{begin:`(${u})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${d})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${d})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${d})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${d})`},{begin:`\\b(${c})[jJ](?=${d})`}]},f={className:"comment",begin:t.lookahead(/# type:/),end:/$/,keywords:o,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:["self",a,p,l,e.HASH_COMMENT_MODE]}]};return i.contains=[l,p,a],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:o,illegal:/(<\/|->|\?)|=>/,contains:[a,p,{begin:/\bself\b/},{beginKeywords:"if",relevance:0},l,f,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,n],scope:{1:"keyword",3:"title.function"},contains:[m]},{variants:[{match:[/\bclass/,/\s+/,n,/\s*/,/\(\s*/,n,/\s*\)/]},{match:[/\bclass/,/\s+/,n]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[p,m,l]}]}}},4730:e=>{e.exports=function(e){const t=e.regex,n=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,r=t.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),o=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,a=t.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/);return{name:"R",keywords:{$pattern:n,keyword:"function if in break next repeat else for while",literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"},contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:t.lookahead(t.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{scope:"variable",variants:[{match:n},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]}),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE],variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[o,r]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,r]},{scope:{1:"punctuation",2:"number"},match:[a,r]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,r]}]},{scope:{3:"operator"},match:[n,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:o},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:a},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}},7905:e=>{e.exports=function(e){const t=e.regex,n="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",r=t.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),o=t.concat(r,/(::\w+)*/),a={"variable.constant":["__FILE__","__LINE__"],"variable.language":["self","super"],keyword:["alias","and","attr_accessor","attr_reader","attr_writer","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","include","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield"],built_in:["proc","lambda"],literal:["true","false","nil"]},i={className:"doctag",begin:"@[A-Za-z]+"},s={begin:"#<",end:">"},l=[e.COMMENT("#","$",{contains:[i]}),e.COMMENT("^=begin","^=end",{contains:[i],relevance:10}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/,end:/\}/,keywords:a},u={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?</,end:/>/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:t.concat(/<<[-~]?'?/,t.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},d="[0-9](_?[0-9])*",p={className:"number",relevance:0,variants:[{begin:`\\b([1-9](_?[0-9])*|0)(\\.(${d}))?([eE][+-]?(${d})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},f={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:a}]},m=[u,{variants:[{match:[/class\s+/,o,/\s+<\s+/,o]},{match:[/class\s+/,o]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:a},{relevance:0,match:[o,/\.new[ (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{match:[/def/,/\s+/,n],scope:{1:"keyword",3:"title.function"},contains:[f]},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[u,{begin:n}],relevance:0},p,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(s,l),relevance:0}].concat(s,l);c.contains=m,f.contains=m;const h=[{begin:/^\s*=>/,starts:{end:"$",contains:m}},{className:"meta.prompt",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])",starts:{end:"$",keywords:a,contains:m}}];return l.unshift(s),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:[e.SHEBANG({binary:"ruby"})].concat(h).concat(l).concat(m)}}},9880:e=>{e.exports=function(e){const t=e.regex,n={className:"title.function.invoke",relevance:0,begin:t.concat(/\b/,/(?!let\b)/,e.IDENT_RE,t.lookahead(/\s*\(/))},r="([ui](8|16|32|64|128|size)|f(32|64))?",o=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],a=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:a,keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","unsafe","unsized","use","virtual","where","while","yield"],literal:["true","false","Some","None","Ok","Err"],built_in:o},illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]}),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{className:"string",variants:[{begin:/b?r(#*)"(.|\n)*?"\1(?!#)/},{begin:/b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/}]},{className:"symbol",begin:/'[a-zA-Z_][a-zA-Z0-9_]*/},{className:"number",variants:[{begin:"\\b0b([01_]+)"+r},{begin:"\\b0o([0-7_]+)"+r},{begin:"\\b0x([A-Fa-f0-9_]+)"+r},{begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+r}],relevance:0},{begin:[/fn/,/\s+/,e.UNDERSCORE_IDENT_RE],className:{1:"keyword",3:"title.function"}},{className:"meta",begin:"#!?\\[",end:"\\]",contains:[{className:"string",begin:/"/,end:/"/}]},{begin:[/let/,/\s+/,/(?:mut\s+)?/,e.UNDERSCORE_IDENT_RE],className:{1:"keyword",3:"keyword",4:"variable"}},{begin:[/for/,/\s+/,e.UNDERSCORE_IDENT_RE,/\s+/,/in/],className:{1:"keyword",3:"variable",5:"keyword"}},{begin:[/type/,/\s+/,e.UNDERSCORE_IDENT_RE],className:{1:"keyword",3:"title.class"}},{begin:[/(?:trait|enum|struct|union|impl|for)/,/\s+/,e.UNDERSCORE_IDENT_RE],className:{1:"keyword",3:"title.class"}},{begin:e.IDENT_RE+"::",keywords:{keyword:"Self",built_in:o,type:a}},{className:"punctuation",begin:"->"},n]}}},1062:e=>{const t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],a=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse();e.exports=function(e){const i=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}))(e),s=o,l=r,c="@[a-z-]+",u={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},i.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+t.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+l.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+s.join("|")+")"},u,{begin:/\(/,end:/\)/,contains:[i.CSS_NUMBER_MODE]},i.CSS_VARIABLE,{className:"attribute",begin:"\\b("+a.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,relevance:0,contains:[i.BLOCK_COMMENT,u,i.HEXCOLOR,i.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i.IMPORTANT,i.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:c,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:n.join(" ")},contains:[{begin:c,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},u,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i.HEXCOLOR,i.CSS_NUMBER_MODE]},i.FUNCTION_DISPATCH]}}},6256:e=>{e.exports=function(e){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}},8935:e=>{e.exports=function(e){const t=e.regex,n=e.COMMENT("--","$"),r=["true","false","unknown"],o=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],a=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],i=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],s=a,l=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!a.includes(e))),c={begin:t.concat(/\b/,t.either(...s),/\s*\(/),relevance:0,keywords:{built_in:s}};return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:function(e,{exceptions:t,when:n}={}){const r=n;return t=t||[],e.map((e=>e.match(/\|\d+$/)||t.includes(e)?e:r(e)?`${e}|0`:e))}(l,{when:e=>e.length<3}),literal:r,type:o,built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]},contains:[{begin:t.either(...i),relevance:0,keywords:{$pattern:/[\w\.]+/,keyword:l.concat(i),literal:r,type:o}},{className:"type",begin:t.either("double precision","large object","with timezone","without timezone")},c,{className:"variable",begin:/@[a-z0-9]+/},{className:"string",variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,contains:[{begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}},7690:e=>{function t(e){return e?"string"==typeof e?e:e.source:null}function n(e){return r("(?=",e,")")}function r(...e){return e.map((e=>t(e))).join("")}function o(...e){const n=function(e){const t=e[e.length-1];return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}(e);return"("+(n.capture?"":"?:")+e.map((e=>t(e))).join("|")+")"}const a=e=>r(/\b/,e,/\w$/.test(e)?/\b/:/\B/),i=["Protocol","Type"].map(a),s=["init","self"].map(a),l=["Any","Self"],c=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","distributed","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],u=["false","nil","true"],d=["assignment","associativity","higherThan","left","lowerThan","none","right"],p=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],f=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],m=o(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),h=o(m,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),g=r(m,h,"*"),b=o(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),v=o(b,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),y=r(b,v,"*"),w=r(/[A-Z]/,v,"*"),x=["autoclosure",r(/convention\(/,o("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",r(/objc\(/,y,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","testable","UIApplicationMain","unknown","usableFromInline"],E=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];e.exports=function(e){const t={match:/\s+/,relevance:0},m=e.COMMENT("/\\*","\\*/",{contains:["self"]}),b=[e.C_LINE_COMMENT_MODE,m],k={match:[/\./,o(...i,...s)],className:{2:"keyword"}},_={match:r(/\./,o(...c)),relevance:0},S=c.filter((e=>"string"==typeof e)).concat(["_|0"]),C={variants:[{className:"keyword",match:o(...c.filter((e=>"string"!=typeof e)).concat(l).map(a),...s)}]},N={$pattern:o(/\b\w+/,/#\w+/),keyword:S.concat(p),literal:u},O=[k,_,C],R=[{match:r(/\./,o(...f)),relevance:0},{className:"built_in",match:r(/\b/,o(...f),/(?=\()/)}],M={match:/->/,relevance:0},T=[M,{className:"operator",relevance:0,variants:[{match:g},{match:`\\.(\\.|${h})+`}]}],P="([0-9a-fA-F]_*)+",A={className:"number",relevance:0,variants:[{match:"\\b(([0-9]_*)+)(\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\b"},{match:`\\b0x(${P})(\\.(${P}))?([pP][+-]?(([0-9]_*)+))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},Z=(e="")=>({className:"subst",variants:[{match:r(/\\/,e,/[0\\tnr"']/)},{match:r(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]}),I=(e="")=>({className:"subst",match:r(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)}),L=(e="")=>({className:"subst",label:"interpol",begin:r(/\\/,e,/\(/),end:/\)/}),j=(e="")=>({begin:r(e,/"""/),end:r(/"""/,e),contains:[Z(e),I(e),L(e)]}),D=(e="")=>({begin:r(e,/"/),end:r(/"/,e),contains:[Z(e),L(e)]}),z={className:"string",variants:[j(),j("#"),j("##"),j("###"),D(),D("#"),D("##"),D("###")]},B={match:r(/`/,y,/`/)},F=[B,{className:"variable",match:/\$\d+/},{className:"variable",match:`\\$${v}+`}],$=[{match:/(@|#(un)?)available/,className:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:E,contains:[...T,A,z]}]}},{className:"keyword",match:r(/@/,o(...x))},{className:"meta",match:r(/@/,y)}],U={match:n(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:r(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,v,"+")},{className:"type",match:w,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:r(/\s+&\s+/,n(w)),relevance:0}]},W={begin:/</,end:/>/,keywords:N,contains:[...b,...O,...$,M,U]};U.contains.push(W);const H={begin:/\(/,end:/\)/,relevance:0,keywords:N,contains:["self",{match:r(y,/\s*:/),keywords:"_|0",relevance:0},...b,...O,...R,...T,A,z,...F,...$,U]},q={begin:/</,end:/>/,contains:[...b,U]},V={begin:/\(/,end:/\)/,keywords:N,contains:[{begin:o(n(r(y,/\s*:/)),n(r(y,/\s+/,y,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:y}]},...b,...O,...T,A,z,...$,U,H],endsParent:!0,illegal:/["']/},K={match:[/func/,/\s+/,o(B.match,y,g)],className:{1:"keyword",3:"title.function"},contains:[q,V,t],illegal:[/\[/,/%/]},G={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[q,V,t],illegal:/\[|%/},Q={match:[/operator/,/\s+/,g],className:{1:"keyword",3:"title"}},X={begin:[/precedencegroup/,/\s+/,w],className:{1:"keyword",3:"title"},contains:[U],keywords:[...d,...u],end:/}/};for(const e of z.variants){const t=e.contains.find((e=>"interpol"===e.label));t.keywords=N;const n=[...O,...R,...T,A,z,...F];t.contains=[...n,{begin:/\(/,end:/\)/,contains:["self",...n]}]}return{name:"Swift",keywords:N,contains:[...b,K,G,{beginKeywords:"struct protocol class extension enum actor",end:"\\{",excludeEnd:!0,keywords:N,contains:[e.inherit(e.TITLE_MODE,{className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...O]},Q,X,{beginKeywords:"import",end:/$/,contains:[...b],relevance:0},...O,...R,...T,A,z,...F,...$,U,H]}}},8987:e=>{const t="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],r=["true","false","null","undefined","NaN","Infinity"],o=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],a=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],i=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],s=["arguments","this","super","console","window","document","localStorage","module","global"],l=[].concat(i,o,a);function c(e){const c=e.regex,u=t,d={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,t)=>{const n=e[0].length+e.index,r=e.input[n];if("<"===r||","===r)return void t.ignoreMatch();let o;">"===r&&(((e,{after:t})=>{const n="</"+e[0].slice(1);return-1!==e.input.indexOf(n,t)})(e,{after:n})||t.ignoreMatch()),(o=e.input.substring(n).match(/^\s+extends\s+/))&&0===o.index&&t.ignoreMatch()}},p={$pattern:t,keyword:n,literal:r,built_in:l,"variable.language":s},f="\\.([0-9](_?[0-9])*)",m="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",h={className:"number",variants:[{begin:`(\\b(${m})((${f})|\\.)?|(${f}))[eE][+-]?([0-9](_?[0-9])*)\\b`},{begin:`\\b(${m})\\b((${f})\\b|\\.)?|(${f})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},g={className:"subst",begin:"\\$\\{",end:"\\}",keywords:p,contains:[]},b={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,g],subLanguage:"xml"}},v={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,g],subLanguage:"css"}},y={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,g]},w={className:"comment",variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:u+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},x=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,b,v,y,h];g.contains=x.concat({begin:/\{/,end:/\}/,keywords:p,contains:["self"].concat(x)});const E=[].concat(w,g.contains),k=E.concat([{begin:/\(/,end:/\)/,keywords:p,contains:["self"].concat(E)}]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:k},S={variants:[{match:[/class/,/\s+/,u,/\s+/,/extends/,/\s+/,c.concat(u,"(",c.concat(/\./,u),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,u],scope:{1:"keyword",3:"title.class"}}]},C={relevance:0,match:c.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...o,...a]}},N={variants:[{match:[/function/,/\s+/,u,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[_],illegal:/%/},O={match:c.concat(/\b/,(R=[...i,"super"],c.concat("(?!",R.join("|"),")")),u,c.lookahead(/\(/)),className:"title.function",relevance:0};var R;const M={begin:c.concat(/\./,c.lookahead(c.concat(u,/(?![0-9A-Za-z$_(])/))),end:u,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},T={match:[/get|set/,/\s+/,u,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},_]},P="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",A={match:[/const|var|let/,/\s+/,u,/\s*/,/=\s*/,/(async\s*)?/,c.lookahead(P)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[_]};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:p,exports:{PARAMS_CONTAINS:k,CLASS_REFERENCE:C},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,b,v,y,w,h,C,{className:"attr",begin:u+c.lookahead(":"),relevance:0},A,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[w,e.REGEXP_MODE,{className:"function",begin:P,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:k}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:"</>"},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:d.begin,"on:begin":d.isTrulyOpeningTag,end:d.end}],subLanguage:"xml",contains:[{begin:d.begin,end:d.end,skip:!0,contains:["self"]}]}]},N,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[_,e.inherit(e.TITLE_MODE,{begin:u,className:"title.function"})]},{match:/\.\.\./,relevance:0},M,{match:"\\$"+u,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[_]},O,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},S,T,{match:/\$[(.]/}]}}e.exports=function(e){const o=c(e),a=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],i={beginKeywords:"namespace",end:/\{/,excludeEnd:!0,contains:[o.exports.CLASS_REFERENCE]},u={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:a},contains:[o.exports.CLASS_REFERENCE]},d={$pattern:t,keyword:n.concat(["type","namespace","interface","public","private","protected","implements","declare","abstract","readonly","enum","override"]),literal:r,built_in:l.concat(a),"variable.language":s},p={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},f=(e,t,n)=>{const r=e.contains.findIndex((e=>e.label===t));if(-1===r)throw new Error("can not find mode to replace");e.contains.splice(r,1,n)};return Object.assign(o.keywords,d),o.exports.PARAMS_CONTAINS.push(p),o.contains=o.contains.concat([p,i,u]),f(o,"shebang",e.SHEBANG()),f(o,"use_strict",{className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/}),o.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(o,{name:"TypeScript",aliases:["ts","tsx"]}),o}},7531:e=>{e.exports=function(e){const t=e.regex,n=/\d{1,2}\/\d{1,2}\/\d{4}/,r=/\d{4}-\d{1,2}-\d{1,2}/,o=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,a=/\d{1,2}(:\d{1,2}){1,2}/,i={className:"literal",variants:[{begin:t.concat(/# */,t.either(r,n),/ *#/)},{begin:t.concat(/# */,a,/ *#/)},{begin:t.concat(/# */,o,/ *#/)},{begin:t.concat(/# */,t.either(r,n),/ +/,t.either(o,a),/ *#/)}]},s=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),l=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",literal:"true false nothing"},illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},i,{className:"number",relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{className:"label",begin:/^\w+:/},s,l,{className:"meta",begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{keyword:"const disable else elseif enable end externalsource if region then"},contains:[l]}]}}},1533:e=>{e.exports=function(e){e.regex;const t=e.COMMENT(/\(;/,/;\)/);return t.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"]},contains:[e.COMMENT(/;;/,/$/),t,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/,className:"type"},{className:"keyword",match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/},{className:"number",relevance:0,match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/}]}}},4610:e=>{e.exports=function(e){const t=e.regex,n=t.concat(/[\p{L}_]/u,t.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),r={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},o={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},a=e.inherit(o,{begin:/\(/,end:/\)/}),i=e.inherit(e.APOS_STRING_MODE,{className:"string"}),s=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:/[\p{L}0-9._:-]+/u,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[r]},{begin:/'/,end:/'/,contains:[r]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[o,s,i,a,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[o,a,s,i]}]}]},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},r,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[s]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:t.concat(/</,t.lookahead(t.concat(n,t.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:l}]},{className:"tag",begin:t.concat(/<\//,t.lookahead(t.concat(n,/>/))),contains:[{className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},1392:e=>{e.exports=function(e){const t="true false yes no null",n="[\\w#;/?:@&=+$,.~*'()[\\]]+",r={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},o=e.inherit(r,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),a={end:",",endsWithParent:!0,excludeEnd:!0,keywords:t,relevance:0},i={begin:/\{/,end:/\}/,contains:[a],illegal:"\\n",relevance:0},s={begin:"\\[",end:"\\]",contains:[a],illegal:"\\n",relevance:0},l=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+n},{className:"type",begin:"!<"+n+">"},{className:"type",begin:"!"+n},{className:"type",begin:"!!"+n},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:t,keywords:{literal:t}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},i,s,r],c=[...l];return c.pop(),c.push(o),a.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:l}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var a=r[e]={exports:{}};return n[e](a,a.exports,o),a.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(n,r){if(1&r&&(n=this(n)),8&r)return n;if("object"==typeof n&&n){if(4&r&&n.__esModule)return n;if(16&r&&"function"==typeof n.then)return n}var a=Object.create(null);o.r(a);var i={};e=e||[null,t({}),t([]),t(t)];for(var s=2&r&&n;"object"==typeof s&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach((e=>i[e]=()=>n[e]));return i.default=()=>n,o.d(a,i),a},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e=o(7294),t=o.t(e,2),n=o(745),r=o(7462),a=o(3366),i=o(6010),s=o(9378),l=o(6523),c=o(9766),u=o(6977);const d=["sx"];function p(e){const{sx:t}=e,n=(0,a.Z)(e,d),{systemProps:o,otherProps:i}=(e=>{const t={systemProps:{},otherProps:{}};return Object.keys(e).forEach((n=>{u.Gc[n]?t.systemProps[n]=e[n]:t.otherProps[n]=e[n]})),t})(n);let s;return s=Array.isArray(t)?[o,...t]:"function"==typeof t?(...e)=>{const n=t(...e);return(0,c.P)(n)?(0,r.Z)({},o,n):o}:(0,r.Z)({},o,t),(0,r.Z)({},i,{sx:s})}var f=o(6682),m=o(5893);const h=["className","component"];var g=o(7078),b=o(5517);const v=function(t={}){const{defaultTheme:n,defaultClassName:o="MuiBox-root",generateClassName:c,styleFunctionSx:u=l.Z}=t,d=(0,s.ZP)("div",{shouldForwardProp:e=>"theme"!==e&&"sx"!==e&&"as"!==e})(u),g=e.forwardRef((function(e,t){const s=(0,f.Z)(n),l=p(e),{className:u,component:g="div"}=l,b=(0,a.Z)(l,h);return(0,m.jsx)(d,(0,r.Z)({as:g,ref:t,className:(0,i.Z)(u,c?c(o):o),theme:s},b))}));return g}({defaultTheme:(0,b.Z)(),defaultClassName:"MuiBox-root",generateClassName:g.Z.generate}),y=v;var w=o(4819),x=o(6760);const E="function"==typeof Symbol&&Symbol.for?Symbol.for("mui.nested"):"__THEME_NESTED__",k=function(t){const{children:n,theme:o}=t,a=(0,x.Z)(),i=e.useMemo((()=>{const e=null===a?o:function(e,t){return"function"==typeof t?t(e):(0,r.Z)({},e,t)}(a,o);return null!=e&&(e[E]=null!==a),e}),[o,a]);return(0,m.jsx)(w.Z.Provider,{value:i,children:n})};var _=o(2443);function S(e){const t=(0,f.Z)();return(0,m.jsx)(_.T.Provider,{value:"object"==typeof t?t:{},children:e.children})}const C=function(e){const{children:t,theme:n}=e;return(0,m.jsx)(k,{theme:n,children:(0,m.jsx)(S,{children:t})})};function N(){return N=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},N.apply(this,arguments)}var O;!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(O||(O={}));const R="popstate";function M(e){return{usr:e.state,key:e.key}}function T(e,t,n,r){return void 0===n&&(n=null),N({pathname:"string"==typeof e?e:e.pathname,search:"",hash:""},"string"==typeof t?A(t):t,{state:n,key:t&&t.key||r||Math.random().toString(36).substr(2,8)})}function P(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function A(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}var Z;function I(e,t,n){void 0===n&&(n="/");let r=$(("string"==typeof t?A(t):t).pathname||"/",n);if(null==r)return null;let o=L(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(o);let a=null;for(let e=0;null==a&&e<o.length;++e)a=B(o[e],r);return a}function L(e,t,n,r){return void 0===t&&(t=[]),void 0===n&&(n=[]),void 0===r&&(r=""),e.forEach(((e,o)=>{let a={relativePath:e.path||"",caseSensitive:!0===e.caseSensitive,childrenIndex:o,route:e};a.relativePath.startsWith("/")&&(U(a.relativePath.startsWith(r),'Absolute route path "'+a.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),a.relativePath=a.relativePath.slice(r.length));let i=q([r,a.relativePath]),s=n.concat(a);e.children&&e.children.length>0&&(U(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+i+'".'),L(e.children,t,s,i)),(null!=e.path||e.index)&&t.push({path:i,score:z(i,e.index),routesMeta:s})})),t}!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(Z||(Z={}));const j=/^:\w+$/,D=e=>"*"===e;function z(e,t){let n=e.split("/"),r=n.length;return n.some(D)&&(r+=-2),t&&(r+=2),n.filter((e=>!D(e))).reduce(((e,t)=>e+(j.test(t)?3:""===t?1:10)),r)}function B(e,t){let{routesMeta:n}=e,r={},o="/",a=[];for(let e=0;e<n.length;++e){let i=n[e],s=e===n.length-1,l="/"===o?t:t.slice(o.length)||"/",c=F({path:i.relativePath,caseSensitive:i.caseSensitive,end:s},l);if(!c)return null;Object.assign(r,c.params);let u=i.route;a.push({params:r,pathname:q([o,c.pathname]),pathnameBase:V(q([o,c.pathnameBase])),route:u}),"/"!==c.pathnameBase&&(o=q([o,c.pathnameBase]))}return a}function F(e,t){"string"==typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=function(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!0),W("*"===e||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were "'+e.replace(/\*$/,"/*")+'" because the `*` character must always follow a `/` in the pattern. To get rid of this warning, please change the route path to "'+e.replace(/\*$/,"/*")+'".');let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/:(\w+)/g,((e,t)=>(r.push(t),"([^\\/]+)")));return e.endsWith("*")?(r.push("*"),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):o+=n?"\\/*$":"(?:(?=[@.~-]|%[0-9A-F]{2})|\\b|\\/|$)",[new RegExp(o,t?void 0:"i"),r]}(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let a=o[0],i=a.replace(/(.)\/+$/,"$1"),s=o.slice(1);return{params:r.reduce(((e,t,n)=>{if("*"===t){let e=s[n]||"";i=a.slice(0,a.length-e.length).replace(/(.)\/+$/,"$1")}return e[t]=function(e,t){try{return decodeURIComponent(e)}catch(n){return W(!1,'The value for the URL param "'+t+'" will not be decoded because the string "'+e+'" is a malformed URL segment. This is probably due to a bad percent encoding ('+n+")."),e}}(s[n]||"",t),e}),{}),pathname:a,pathnameBase:i,pattern:e}}function $(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function U(e,t){if(!1===e||null==e)throw new Error(t)}function W(e,t){if(!e){"undefined"!=typeof console&&console.warn(t);try{throw new Error(t)}catch(e){}}}function H(e,t,n,r){void 0===r&&(r=!1);let o,a="string"==typeof e?A(e):N({},e),i=""===e||""===a.pathname,s=i?"/":a.pathname;if(r||null==s)o=n;else{let e=t.length-1;if(s.startsWith("..")){let t=s.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}o=e>=0?t[e]:"/"}let l=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:o=""}="string"==typeof e?A(e):e,a=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:a,search:K(r),hash:G(o)}}(a,o),c=s&&"/"!==s&&s.endsWith("/"),u=(i||"."===s)&&n.endsWith("/");return l.pathname.endsWith("/")||!c&&!u||(l.pathname+="/"),l}const q=e=>e.join("/").replace(/\/\/+/g,"/"),V=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),K=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",G=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";class Q extends Error{}function X(){return X=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},X.apply(this,arguments)}"function"==typeof Object.is&&Object.is;const{useState:Y,useEffect:J,useLayoutEffect:ee,useDebugValue:te}=t;"undefined"==typeof window||void 0===window.document||window.document.createElement,t.useSyncExternalStore;const ne=e.createContext(null),re=e.createContext(null),oe=e.createContext(null),ae=e.createContext(null),ie=e.createContext(null),se=e.createContext({outlet:null,matches:[]}),le=e.createContext(null);function ce(){return null!=e.useContext(ie)}function ue(){return ce()||U(!1),e.useContext(ie).location}function de(e){return e.filter(((t,n)=>0===n||!t.route.index&&t.pathnameBase!==e[n-1].pathnameBase))}function pe(){ce()||U(!1);let{basename:t,navigator:n}=e.useContext(ae),{matches:r}=e.useContext(se),{pathname:o}=ue(),a=JSON.stringify(de(r).map((e=>e.pathnameBase))),i=e.useRef(!1);return e.useEffect((()=>{i.current=!0})),e.useCallback((function(e,r){if(void 0===r&&(r={}),!i.current)return;if("number"==typeof e)return void n.go(e);let s=H(e,JSON.parse(a),o,"path"===r.relative);"/"!==t&&(s.pathname="/"===s.pathname?t:q([t,s.pathname])),(r.replace?n.replace:n.push)(s,r.state,r)}),[t,n,a,o])}function fe(t,n){let{relative:r}=void 0===n?{}:n,{matches:o}=e.useContext(se),{pathname:a}=ue(),i=JSON.stringify(de(o).map((e=>e.pathnameBase)));return e.useMemo((()=>H(t,JSON.parse(i),a,"path"===r)),[t,i,a,r])}function me(){let t=function(){var t;let n=e.useContext(le),r=function(t){let n=e.useContext(oe);return n||U(!1),n}(be.UseRouteError),o=e.useContext(se),a=o.matches[o.matches.length-1];return n||(o||U(!1),!a.route.id&&U(!1),null==(t=r.errors)?void 0:t[a.route.id])}(),n=t instanceof class{constructor(e,t,n){this.status=e,this.statusText=t||"",this.data=n}}?t.status+" "+t.statusText:t instanceof Error?t.message:JSON.stringify(t),r=t instanceof Error?t.stack:null,o="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:o},i={padding:"2px 4px",backgroundColor:o};return e.createElement(e.Fragment,null,e.createElement("h2",null,"Unhandled Thrown Error!"),e.createElement("h3",{style:{fontStyle:"italic"}},n),r?e.createElement("pre",{style:a},r):null,e.createElement("p",null,"💿 Hey developer 👋"),e.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",e.createElement("code",{style:i},"errorElement")," props on ",e.createElement("code",{style:i},"<Route>")))}class he extends e.Component{constructor(e){super(e),this.state={location:e.location,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location?{error:e.error,location:e.location}:{error:e.error||t.error,location:t.location}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return this.state.error?e.createElement(le.Provider,{value:this.state.error,children:this.props.component}):this.props.children}}function ge(t){let{routeContext:n,match:r,children:o}=t,a=e.useContext(ne);return a&&r.route.errorElement&&(a._deepestRenderedBoundaryId=r.route.id),e.createElement(se.Provider,{value:n},o)}var be,ve;function ye(e){U(!1)}function we(t){let{basename:n="/",children:r=null,location:o,navigationType:a=O.Pop,navigator:i,static:s=!1}=t;ce()&&U(!1);let l=n.replace(/^\/*/,"/"),c=e.useMemo((()=>({basename:l,navigator:i,static:s})),[l,i,s]);"string"==typeof o&&(o=A(o));let{pathname:u="/",search:d="",hash:p="",state:f=null,key:m="default"}=o,h=e.useMemo((()=>{let e=$(u,l);return null==e?null:{pathname:e,search:d,hash:p,state:f,key:m}}),[l,u,d,p,f,m]);return null==h?null:e.createElement(ae.Provider,{value:c},e.createElement(ie.Provider,{children:r,value:{location:h,navigationType:a}}))}function xe(t){let{children:n,location:r}=t,o=e.useContext(re);return function(t,n){ce()||U(!1);let r=e.useContext(oe),{matches:o}=e.useContext(se),a=o[o.length-1],i=a?a.params:{},s=(a&&a.pathname,a?a.pathnameBase:"/");a&&a.route;let l,c=ue();if(n){var u;let e="string"==typeof n?A(n):n;"/"===s||(null==(u=e.pathname)?void 0:u.startsWith(s))||U(!1),l=e}else l=c;let d=l.pathname||"/",p=I(t,{pathname:"/"===s?d:d.slice(s.length)||"/"}),f=function(t,n,r){if(void 0===n&&(n=[]),null==t){if(null==r||!r.errors)return null;t=r.matches}let o=t,a=null==r?void 0:r.errors;if(null!=a){let e=o.findIndex((e=>e.route.id&&(null==a?void 0:a[e.route.id])));e>=0||U(!1),o=o.slice(0,Math.min(o.length,e+1))}return o.reduceRight(((t,i,s)=>{let l=i.route.id?null==a?void 0:a[i.route.id]:null,c=r?i.route.errorElement||e.createElement(me,null):null,u=()=>e.createElement(ge,{match:i,routeContext:{outlet:t,matches:n.concat(o.slice(0,s+1))}},l?c:void 0!==i.route.element?i.route.element:t);return r&&(i.route.errorElement||0===s)?e.createElement(he,{location:r.location,component:c,error:l,children:u()}):u()}),null)}(p&&p.map((e=>Object.assign({},e,{params:Object.assign({},i,e.params),pathname:q([s,e.pathname]),pathnameBase:"/"===e.pathnameBase?s:q([s,e.pathnameBase])}))),o,r||void 0);return n?e.createElement(ie.Provider,{value:{location:X({pathname:"/",search:"",hash:"",state:null,key:"default"},l),navigationType:O.Pop}},f):f}(o&&!n?o.router.routes:ke(n),r)}!function(e){e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator"}(be||(be={})),function(e){e[e.pending=0]="pending",e[e.success=1]="success",e[e.error=2]="error"}(ve||(ve={})),new Promise((()=>{}));class Ee extends e.Component{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){console.error("<Await> caught the following error during render",e,t)}render(){let{children:e,errorElement:t,resolve:n}=this.props,r=null,o=ve.pending;if(n instanceof Promise)if(this.state.error){ve.error;let e=this.state.error;Promise.reject().catch((()=>{})),Object.defineProperty(r,"_tracked",{get:()=>!0}),Object.defineProperty(r,"_error",{get:()=>e})}else n._tracked?void 0!==r._error?ve.error:void 0!==r._data?ve.success:ve.pending:(ve.pending,Object.defineProperty(n,"_tracked",{get:()=>!0}),n.then((e=>Object.defineProperty(n,"_data",{get:()=>e})),(e=>Object.defineProperty(n,"_error",{get:()=>e}))));else ve.success,Promise.resolve(),Object.defineProperty(r,"_tracked",{get:()=>!0}),Object.defineProperty(r,"_data",{get:()=>n});if(o===ve.error&&r._error instanceof AbortedDeferredError)throw neverSettledPromise;if(o===ve.error&&!t)throw r._error;if(o===ve.error)return React.createElement(AwaitContext.Provider,{value:r,children:t});if(o===ve.success)return React.createElement(AwaitContext.Provider,{value:r,children:e});throw r}}function ke(t,n){void 0===n&&(n=[]);let r=[];return e.Children.forEach(t,((t,o)=>{if(!e.isValidElement(t))return;if(t.type===e.Fragment)return void r.push.apply(r,ke(t.props.children,n));t.type!==ye&&U(!1);let a=[...n,o],i={id:t.props.id||a.join("-"),caseSensitive:t.props.caseSensitive,element:t.props.element,index:t.props.index,path:t.props.path,loader:t.props.loader,action:t.props.action,errorElement:t.props.errorElement,hasErrorBoundary:null!=t.props.errorElement,shouldRevalidate:t.props.shouldRevalidate,handle:t.props.handle};t.props.children&&(i.children=ke(t.props.children,a)),r.push(i)})),r}var _e=o(4780),Se=o(4174),Ce=o(1468),Ne=o(6622),Oe=o(1796),Re=o(5677),Me=o(1588);function Te(e){return(0,Re.Z)("MuiPaper",e)}(0,Me.Z)("MuiPaper",["root","rounded","outlined","elevation","elevation0","elevation1","elevation2","elevation3","elevation4","elevation5","elevation6","elevation7","elevation8","elevation9","elevation10","elevation11","elevation12","elevation13","elevation14","elevation15","elevation16","elevation17","elevation18","elevation19","elevation20","elevation21","elevation22","elevation23","elevation24"]);const Pe=["className","component","elevation","square","variant"],Ae=e=>{let t;return t=e<1?5.11916*e**2:4.5*Math.log(e+1)+2,(t/100).toFixed(2)},Ze=(0,Se.ZP)("div",{name:"MuiPaper",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],!n.square&&t.rounded,"elevation"===n.variant&&t[`elevation${n.elevation}`]]}})((({theme:e,ownerState:t})=>{var n;return(0,r.Z)({backgroundColor:(e.vars||e).palette.background.paper,color:(e.vars||e).palette.text.primary,transition:e.transitions.create("box-shadow")},!t.square&&{borderRadius:e.shape.borderRadius},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.divider}`},"elevation"===t.variant&&(0,r.Z)({boxShadow:(e.vars||e).shadows[t.elevation]},!e.vars&&"dark"===e.palette.mode&&{backgroundImage:`linear-gradient(${(0,Oe.Fq)("#fff",Ae(t.elevation))}, ${(0,Oe.Fq)("#fff",Ae(t.elevation))})`},e.vars&&{backgroundImage:null==(n=e.vars.overlays)?void 0:n[t.elevation]}))})),Ie=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiPaper"}),{className:o,component:s="div",elevation:l=1,square:c=!1,variant:u="elevation"}=n,d=(0,a.Z)(n,Pe),p=(0,r.Z)({},n,{component:s,elevation:l,square:c,variant:u}),f=(e=>{const{square:t,elevation:n,variant:r,classes:o}=e,a={root:["root",r,!t&&"rounded","elevation"===r&&`elevation${n}`]};return(0,_e.Z)(a,Te,o)})(p);return(0,m.jsx)(Ze,(0,r.Z)({as:s,ownerState:p,className:(0,i.Z)(f.root,o),ref:t},d))}));function Le(e){return(0,Re.Z)("MuiAppBar",e)}(0,Me.Z)("MuiAppBar",["root","positionFixed","positionAbsolute","positionSticky","positionStatic","positionRelative","colorDefault","colorPrimary","colorSecondary","colorInherit","colorTransparent"]);const je=["className","color","enableColorOnDark","position"],De=(e,t)=>`${null==e?void 0:e.replace(")","")}, ${t})`,ze=(0,Se.ZP)(Ie,{name:"MuiAppBar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[`position${(0,Ne.Z)(n.position)}`],t[`color${(0,Ne.Z)(n.color)}`]]}})((({theme:e,ownerState:t})=>{const n="light"===e.palette.mode?e.palette.grey[100]:e.palette.grey[900];return(0,r.Z)({display:"flex",flexDirection:"column",width:"100%",boxSizing:"border-box",flexShrink:0},"fixed"===t.position&&{position:"fixed",zIndex:(e.vars||e).zIndex.appBar,top:0,left:"auto",right:0,"@media print":{position:"absolute"}},"absolute"===t.position&&{position:"absolute",zIndex:(e.vars||e).zIndex.appBar,top:0,left:"auto",right:0},"sticky"===t.position&&{position:"sticky",zIndex:(e.vars||e).zIndex.appBar,top:0,left:"auto",right:0},"static"===t.position&&{position:"static"},"relative"===t.position&&{position:"relative"},!e.vars&&(0,r.Z)({},"default"===t.color&&{backgroundColor:n,color:e.palette.getContrastText(n)},t.color&&"default"!==t.color&&"inherit"!==t.color&&"transparent"!==t.color&&{backgroundColor:e.palette[t.color].main,color:e.palette[t.color].contrastText},"inherit"===t.color&&{color:"inherit"},"dark"===e.palette.mode&&!t.enableColorOnDark&&{backgroundColor:null,color:null},"transparent"===t.color&&(0,r.Z)({backgroundColor:"transparent",color:"inherit"},"dark"===e.palette.mode&&{backgroundImage:"none"})),e.vars&&(0,r.Z)({},"default"===t.color&&{"--AppBar-background":t.enableColorOnDark?e.vars.palette.AppBar.defaultBg:De(e.vars.palette.AppBar.darkBg,e.vars.palette.AppBar.defaultBg),"--AppBar-color":t.enableColorOnDark?e.vars.palette.text.primary:De(e.vars.palette.AppBar.darkColor,e.vars.palette.text.primary)},t.color&&!t.color.match(/^(default|inherit|transparent)$/)&&{"--AppBar-background":t.enableColorOnDark?e.vars.palette[t.color].main:De(e.vars.palette.AppBar.darkBg,e.vars.palette[t.color].main),"--AppBar-color":t.enableColorOnDark?e.vars.palette[t.color].contrastText:De(e.vars.palette.AppBar.darkColor,e.vars.palette[t.color].contrastText)},{backgroundColor:"var(--AppBar-background)",color:"inherit"===t.color?"inherit":"var(--AppBar-color)"},"transparent"===t.color&&{backgroundImage:"none",backgroundColor:"transparent",color:"inherit"}))})),Be=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiAppBar"}),{className:o,color:s="primary",enableColorOnDark:l=!1,position:c="fixed"}=n,u=(0,a.Z)(n,je),d=(0,r.Z)({},n,{color:s,position:c,enableColorOnDark:l}),p=(e=>{const{color:t,position:n,classes:r}=e,o={root:["root",`color${(0,Ne.Z)(t)}`,`position${(0,Ne.Z)(n)}`]};return(0,_e.Z)(o,Le,r)})(d);return(0,m.jsx)(ze,(0,r.Z)({square:!0,component:"header",ownerState:d,elevation:4,className:(0,i.Z)(p.root,o,"fixed"===c&&"mui-fixed"),ref:t},u))}));function Fe(e){return(0,Re.Z)("MuiToolbar",e)}(0,Me.Z)("MuiToolbar",["root","gutters","regular","dense"]);const $e=["className","component","disableGutters","variant"],Ue=(0,Se.ZP)("div",{name:"MuiToolbar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disableGutters&&t.gutters,t[n.variant]]}})((({theme:e,ownerState:t})=>(0,r.Z)({position:"relative",display:"flex",alignItems:"center"},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}},"dense"===t.variant&&{minHeight:48})),(({theme:e,ownerState:t})=>"regular"===t.variant&&e.mixins.toolbar)),We=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiToolbar"}),{className:o,component:s="div",disableGutters:l=!1,variant:c="regular"}=n,u=(0,a.Z)(n,$e),d=(0,r.Z)({},n,{component:s,disableGutters:l,variant:c}),p=(e=>{const{classes:t,disableGutters:n,variant:r}=e,o={root:["root",!n&&"gutters",r]};return(0,_e.Z)(o,Fe,t)})(d);return(0,m.jsx)(Ue,(0,r.Z)({as:s,className:(0,i.Z)(p.root,o),ref:t,ownerState:d},u))}));var He=o(7925),qe=o(4771),Ve=o(6432),Ke=o(6052);function Ge(e,t){return Ge=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Ge(e,t)}function Qe(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,Ge(e,t)}const Xe=e.createContext(null);function Ye(t,n){var r=Object.create(null);return t&&e.Children.map(t,(function(e){return e})).forEach((function(t){r[t.key]=function(t){return n&&(0,e.isValidElement)(t)?n(t):t}(t)})),r}function Je(e,t,n){return null!=n[t]?n[t]:e.props[t]}function et(t,n,r){var o=Ye(t.children),a=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),a=[];for(var i in e)i in t?a.length&&(o[i]=a,a=[]):a.push(i);var s={};for(var l in t){if(o[l])for(r=0;r<o[l].length;r++){var c=o[l][r];s[o[l][r]]=n(c)}s[l]=n(l)}for(r=0;r<a.length;r++)s[a[r]]=n(a[r]);return s}(n,o);return Object.keys(a).forEach((function(i){var s=a[i];if((0,e.isValidElement)(s)){var l=i in n,c=i in o,u=n[i],d=(0,e.isValidElement)(u)&&!u.props.in;!c||l&&!d?c||!l||d?c&&l&&(0,e.isValidElement)(u)&&(a[i]=(0,e.cloneElement)(s,{onExited:r.bind(null,s),in:u.props.in,exit:Je(s,"exit",t),enter:Je(s,"enter",t)})):a[i]=(0,e.cloneElement)(s,{in:!1}):a[i]=(0,e.cloneElement)(s,{onExited:r.bind(null,s),in:!0,exit:Je(s,"exit",t),enter:Je(s,"enter",t)})}})),a}var tt=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},nt=function(t){function n(e,n){var r,o=(r=t.call(this,e,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}Qe(n,t);var o=n.prototype;return o.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},o.componentWillUnmount=function(){this.mounted=!1},n.getDerivedStateFromProps=function(t,n){var r,o,a=n.children,i=n.handleExited;return{children:n.firstRender?(r=t,o=i,Ye(r.children,(function(t){return(0,e.cloneElement)(t,{onExited:o.bind(null,t),in:!0,appear:Je(t,"appear",r),enter:Je(t,"enter",r),exit:Je(t,"exit",r)})}))):et(t,a,i),firstRender:!1}},o.handleExited=function(e,t){var n=Ye(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=(0,r.Z)({},t.children);return delete n[e.key],{children:n}})))},o.render=function(){var t=this.props,n=t.component,r=t.childFactory,o=(0,a.Z)(t,["component","childFactory"]),i=this.state.contextValue,s=tt(this.state.children).map(r);return delete o.appear,delete o.enter,delete o.exit,null===n?e.createElement(Xe.Provider,{value:i},s):e.createElement(Xe.Provider,{value:i},e.createElement(n,o,s))},n}(e.Component);nt.propTypes={},nt.defaultProps={component:"div",childFactory:function(e){return e}};const rt=nt;o(6898),o(8679);var ot=o(444),at=o(6797),it=o(7278),st=(0,_.w)((function(t,n){var r=t.styles,o=(0,at.O)([r],void 0,(0,e.useContext)(_.T)),a=(0,e.useRef)();return(0,it.j)((function(){var e=n.key+"-global",t=new n.sheet.constructor({key:e,nonce:n.sheet.nonce,container:n.sheet.container,speedy:n.sheet.isSpeedy}),r=!1,i=document.querySelector('style[data-emotion="'+e+" "+o.name+'"]');return n.sheet.tags.length&&(t.before=n.sheet.tags[0]),null!==i&&(r=!0,i.setAttribute("data-emotion",e),t.hydrate([i])),a.current=[t,r],function(){t.flush()}}),[n]),(0,it.j)((function(){var e=a.current,t=e[0];if(e[1])e[1]=!1;else{if(void 0!==o.next&&(0,ot.My)(n,o.next,!0),t.tags.length){var r=t.tags[t.tags.length-1].nextElementSibling;t.before=r,t.flush()}n.insert("",o,t,!1)}}),[n,o.name]),null}));function lt(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,at.O)(t)}var ct=function(){var e=lt.apply(void 0,arguments),t="animation-"+e.name;return{name:t,styles:"@keyframes "+t+"{"+e.styles+"}",anim:1,toString:function(){return"_EMO_"+this.name+"_"+this.styles+"_EMO_"}}};const ut=(0,Me.Z)("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),dt=["center","classes","className"];let pt,ft,mt,ht,gt=e=>e;const bt=ct(pt||(pt=gt` +(()=>{var e,t,n={6898:(e,t,n)=>{"use strict";n.d(t,{Z:()=>re});var r=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{n.insertRule(e,n.cssRules.length)}catch(e){}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach((function(e){return e.parentNode&&e.parentNode.removeChild(e)})),this.tags=[],this.ctr=0},e}(),o=Math.abs,a=String.fromCharCode,i=Object.assign;function l(e){return e.trim()}function s(e,t,n){return e.replace(t,n)}function c(e,t){return e.indexOf(t)}function u(e,t){return 0|e.charCodeAt(t)}function d(e,t,n){return e.slice(t,n)}function p(e){return e.length}function f(e){return e.length}function m(e,t){return t.push(e),e}var h=1,g=1,b=0,v=0,y=0,w="";function x(e,t,n,r,o,a,i){return{value:e,root:t,parent:n,type:r,props:o,children:a,line:h,column:g,length:i,return:""}}function E(e,t){return i(x("",null,null,"",null,null,0),e,{length:-e.length},t)}function k(){return y=v>0?u(w,--v):0,g--,10===y&&(g=1,h--),y}function _(){return y=v<b?u(w,v++):0,g++,10===y&&(g=1,h++),y}function S(){return u(w,v)}function O(){return v}function N(e,t){return d(w,e,t)}function C(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function R(e){return h=g=1,b=p(w=e),v=0,[]}function T(e){return w="",e}function M(e){return l(N(v-1,L(91===e?e+2:40===e?e+1:e)))}function P(e){for(;(y=S())&&y<33;)_();return C(e)>2||C(y)>3?"":" "}function A(e,t){for(;--t&&_()&&!(y<48||y>102||y>57&&y<65||y>70&&y<97););return N(e,O()+(t<6&&32==S()&&32==_()))}function L(e){for(;_();)switch(y){case e:return v;case 34:case 39:34!==e&&39!==e&&L(y);break;case 40:41===e&&L(e);break;case 92:_()}return v}function Z(e,t){for(;_()&&e+y!==57&&(e+y!==84||47!==S()););return"/*"+N(t,v-1)+"*"+a(47===e?e:_())}function I(e){for(;!C(S());)_();return N(e,v)}var j="-ms-",D="-moz-",z="-webkit-",F="comm",B="rule",$="decl",U="@keyframes";function W(e,t){for(var n="",r=f(e),o=0;o<r;o++)n+=t(e[o],o,e,t)||"";return n}function H(e,t,n,r){switch(e.type){case"@import":case $:return e.return=e.return||e.value;case F:return"";case U:return e.return=e.value+"{"+W(e.children,r)+"}";case B:e.value=e.props.join(",")}return p(n=W(e.children,r))?e.return=e.value+"{"+n+"}":""}function q(e,t){switch(function(e,t){return(((t<<2^u(e,0))<<2^u(e,1))<<2^u(e,2))<<2^u(e,3)}(e,t)){case 5103:return z+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return z+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return z+e+D+e+j+e+e;case 6828:case 4268:return z+e+j+e+e;case 6165:return z+e+j+"flex-"+e+e;case 5187:return z+e+s(e,/(\w+).+(:[^]+)/,"-webkit-box-$1$2-ms-flex-$1$2")+e;case 5443:return z+e+j+"flex-item-"+s(e,/flex-|-self/,"")+e;case 4675:return z+e+j+"flex-line-pack"+s(e,/align-content|flex-|-self/,"")+e;case 5548:return z+e+j+s(e,"shrink","negative")+e;case 5292:return z+e+j+s(e,"basis","preferred-size")+e;case 6060:return z+"box-"+s(e,"-grow","")+z+e+j+s(e,"grow","positive")+e;case 4554:return z+s(e,/([^-])(transform)/g,"$1-webkit-$2")+e;case 6187:return s(s(s(e,/(zoom-|grab)/,z+"$1"),/(image-set)/,z+"$1"),e,"")+e;case 5495:case 3959:return s(e,/(image-set\([^]*)/,z+"$1$`$1");case 4968:return s(s(e,/(.+:)(flex-)?(.*)/,"-webkit-box-pack:$3-ms-flex-pack:$3"),/s.+-b[^;]+/,"justify")+z+e+e;case 4095:case 3583:case 4068:case 2532:return s(e,/(.+)-inline(.+)/,z+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(p(e)-1-t>6)switch(u(e,t+1)){case 109:if(45!==u(e,t+4))break;case 102:return s(e,/(.+:)(.+)-([^]+)/,"$1-webkit-$2-$3$1"+D+(108==u(e,t+3)?"$3":"$2-$3"))+e;case 115:return~c(e,"stretch")?q(s(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==u(e,t+1))break;case 6444:switch(u(e,p(e)-3-(~c(e,"!important")&&10))){case 107:return s(e,":",":"+z)+e;case 101:return s(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+z+(45===u(e,14)?"inline-":"")+"box$3$1"+z+"$2$3$1"+j+"$2box$3")+e}break;case 5936:switch(u(e,t+11)){case 114:return z+e+j+s(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return z+e+j+s(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return z+e+j+s(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return z+e+j+e+e}return e}function V(e){return T(K("",null,null,null,[""],e=R(e),0,[0],e))}function K(e,t,n,r,o,i,l,u,d){for(var f=0,h=0,g=l,b=0,v=0,y=0,w=1,x=1,E=1,N=0,C="",R=o,T=i,L=r,j=C;x;)switch(y=N,N=_()){case 40:if(108!=y&&58==j.charCodeAt(g-1)){-1!=c(j+=s(M(N),"&","&\f"),"&\f")&&(E=-1);break}case 34:case 39:case 91:j+=M(N);break;case 9:case 10:case 13:case 32:j+=P(y);break;case 92:j+=A(O()-1,7);continue;case 47:switch(S()){case 42:case 47:m(Q(Z(_(),O()),t,n),d);break;default:j+="/"}break;case 123*w:u[f++]=p(j)*E;case 125*w:case 59:case 0:switch(N){case 0:case 125:x=0;case 59+h:v>0&&p(j)-g&&m(v>32?X(j+";",r,n,g-1):X(s(j," ","")+";",r,n,g-2),d);break;case 59:j+=";";default:if(m(L=G(j,t,n,f,h,o,u,C,R=[],T=[],g),i),123===N)if(0===h)K(j,t,L,L,R,i,g,u,T);else switch(b){case 100:case 109:case 115:K(e,L,L,r&&m(G(e,L,L,0,0,o,u,C,o,R=[],g),T),o,T,g,u,r?R:T);break;default:K(j,L,L,L,[""],T,0,u,T)}}f=h=v=0,w=E=1,C=j="",g=l;break;case 58:g=1+p(j),v=y;default:if(w<1)if(123==N)--w;else if(125==N&&0==w++&&125==k())continue;switch(j+=a(N),N*w){case 38:E=h>0?1:(j+="\f",-1);break;case 44:u[f++]=(p(j)-1)*E,E=1;break;case 64:45===S()&&(j+=M(_())),b=S(),h=g=p(C=j+=I(O())),N++;break;case 45:45===y&&2==p(j)&&(w=0)}}return i}function G(e,t,n,r,a,i,c,u,p,m,h){for(var g=a-1,b=0===a?i:[""],v=f(b),y=0,w=0,E=0;y<r;++y)for(var k=0,_=d(e,g+1,g=o(w=c[y])),S=e;k<v;++k)(S=l(w>0?b[k]+" "+_:s(_,/&\f/g,b[k])))&&(p[E++]=S);return x(e,t,n,0===a?B:u,p,m,h)}function Q(e,t,n){return x(e,t,n,F,a(y),d(e,2,-2),0)}function X(e,t,n,r){return x(e,t,n,$,d(e,0,r),d(e,r+1,-1),r)}var Y=function(e,t,n){for(var r=0,o=0;r=o,o=S(),38===r&&12===o&&(t[n]=1),!C(o);)_();return N(e,v)},J=new WeakMap,ee=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||J.get(n))&&!r){J.set(e,!0);for(var o=[],i=function(e,t){return T(function(e,t){var n=-1,r=44;do{switch(C(r)){case 0:38===r&&12===S()&&(t[n]=1),e[n]+=Y(v-1,t,n);break;case 2:e[n]+=M(r);break;case 4:if(44===r){e[++n]=58===S()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=a(r)}}while(r=_());return e}(R(e),t))}(t,o),l=n.props,s=0,c=0;s<i.length;s++)for(var u=0;u<l.length;u++,c++)e.props[c]=o[s]?i[s].replace(/&\f/g,l[u]):l[u]+" "+i[s]}}},te=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}},ne=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case $:e.return=q(e.value,e.length);break;case U:return W([E(e,{value:s(e.value,"@","@"+z)})],r);case B:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=/(::plac\w+|:read-\w+)/.exec(e))?e[0]:e}(t)){case":read-only":case":read-write":return W([E(e,{props:[s(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return W([E(e,{props:[s(t,/:(plac\w+)/,":-webkit-input-$1")]}),E(e,{props:[s(t,/:(plac\w+)/,":-moz-$1")]}),E(e,{props:[s(t,/:(plac\w+)/,j+"input-$1")]})],r)}return""}))}}];const re=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var o,a,i=e.stylisPlugins||ne,l={},s=[];o=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n<t.length;n++)l[t[n]]=!0;s.push(e)}));var c,u,d,p,m=[H,(p=function(e){c.insert(e)},function(e){e.root||(e=e.return)&&p(e)})],h=(u=[ee,te].concat(i,m),d=f(u),function(e,t,n,r){for(var o="",a=0;a<d;a++)o+=u[a](e,t,n,r)||"";return o});a=function(e,t,n,r){c=n,W(V(e?e+"{"+t.styles+"}":t.styles),h),r&&(g.inserted[t.name]=!0)};var g={key:t,sheet:new r({key:t,container:o,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:l,registered:{},insert:a};return g.sheet.hydrate(s),g}},5042:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=function(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}},2443:(e,t,n)=>{"use strict";n.d(t,{T:()=>l,w:()=>i});var r=n(7294),o=n(6898),a=(n(6797),n(7278),(0,r.createContext)("undefined"!=typeof HTMLElement?(0,o.Z)({key:"css"}):null));a.Provider;var i=function(e){return(0,r.forwardRef)((function(t,n){var o=(0,r.useContext)(a);return e(t,o,n)}))},l=(0,r.createContext)({})},6797:(e,t,n)=>{"use strict";n.d(t,{O:()=>h});const r=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)},o={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var a=n(5042),i=/[A-Z]|^ms/g,l=/_EMO_([^_]+?)_([^]*?)_EMO_/g,s=function(e){return 45===e.charCodeAt(1)},c=function(e){return null!=e&&"boolean"!=typeof e},u=(0,a.Z)((function(e){return s(e)?e:e.replace(i,"-$&").toLowerCase()})),d=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(l,(function(e,t,n){return f={name:t,styles:n,next:f},t}))}return 1===o[e]||s(e)||"number"!=typeof t||0===t?t:t+"px"};function p(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return f={name:n.name,styles:n.styles,next:f},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)f={name:r.name,styles:r.styles,next:f},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o<n.length;o++)r+=p(e,t,n[o])+";";else for(var a in n){var i=n[a];if("object"!=typeof i)null!=t&&void 0!==t[i]?r+=a+"{"+t[i]+"}":c(i)&&(r+=u(a)+":"+d(a,i)+";");else if(!Array.isArray(i)||"string"!=typeof i[0]||null!=t&&void 0!==t[i[0]]){var l=p(e,t,i);switch(a){case"animation":case"animationName":r+=u(a)+":"+l+";";break;default:r+=a+"{"+l+"}"}}else for(var s=0;s<i.length;s++)c(i[s])&&(r+=u(a)+":"+d(a,i[s])+";")}return r}(e,t,n);case"function":if(void 0!==e){var o=f,a=n(e);return f=o,p(e,t,a)}}if(null==t)return n;var i=t[n];return void 0!==i?i:n}var f,m=/label:\s*([^\s;\n{]+)\s*(;|$)/g,h=function(e,t,n){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var o=!0,a="";f=void 0;var i=e[0];null==i||void 0===i.raw?(o=!1,a+=p(n,t,i)):a+=i[0];for(var l=1;l<e.length;l++)a+=p(n,t,e[l]),o&&(a+=i[l]);m.lastIndex=0;for(var s,c="";null!==(s=m.exec(a));)c+="-"+s[1];return{name:r(a)+c,styles:a,next:f}}},7278:(e,t,n)=>{"use strict";var r;n.d(t,{L:()=>i,j:()=>l});var o=n(7294),a=!!(r||(r=n.t(o,2))).useInsertionEffect&&(r||(r=n.t(o,2))).useInsertionEffect,i=a||function(e){return e()},l=a||o.useLayoutEffect},444:(e,t,n)=>{"use strict";function r(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):r+=n+" "})),r}n.d(t,{My:()=>a,fp:()=>r,hC:()=>o});var o=function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)},a=function(e,t,n){o(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var a=t;do{e.insert(t===a?"."+r:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}},8309:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"}),"AddBox");t.Z=i},4670:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h10v-2H4v-6h18V6c0-1.11-.89-2-2-2zm0 4H4V6h16v2zm4 9v2h-3v3h-2v-3h-3v-2h3v-3h2v3h3z"}),"AddCard");t.Z=i},1523:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-5 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z"}),"Article");t.Z=i},84:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)([(0,a.jsx)("path",{d:"M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6z"},"0"),(0,a.jsx)("path",{d:"M20 2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 10-2.5-1.5L15 12V4h5v8z"},"1")],"CollectionsBookmark");t.Z=i},1899:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"}),"ContentCopy");t.Z=i},4927:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"}),"CreditCard");t.Z=i},1733:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"}),"Delete");t.Z=i},8364:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12 1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"}),"DeleteForever");t.Z=i},422:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"m18 7-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L11.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41 6 19l1.41-1.41L1.83 12 .41 13.41z"}),"DoneAll");t.Z=i},5449:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0,function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=i(t);if(n&&n.has(e))return n.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=o?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(r,a,l):r[a]=e[a]}r.default=e,n&&n.set(e,r)}(n(7294));var o=r(n(4938)),a=n(5893);function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(i=function(e){return e?n:t})(e)}var l=(0,o.default)((0,a.jsx)("path",{d:"M12 1.27a11 11 0 00-3.48 21.46c.55.09.73-.28.73-.55v-1.84c-3.03.64-3.67-1.46-3.67-1.46-.55-1.29-1.28-1.65-1.28-1.65-.92-.65.1-.65.1-.65 1.1 0 1.73 1.1 1.73 1.1.92 1.65 2.57 1.2 3.21.92a2 2 0 01.64-1.47c-2.47-.27-5.04-1.19-5.04-5.5 0-1.1.46-2.1 1.2-2.84a3.76 3.76 0 010-2.93s.91-.28 3.11 1.1c1.8-.49 3.7-.49 5.5 0 2.1-1.38 3.02-1.1 3.02-1.1a3.76 3.76 0 010 2.93c.83.74 1.2 1.74 1.2 2.94 0 4.21-2.57 5.13-5.04 5.4.45.37.82.92.82 2.02v3.03c0 .27.1.64.73.55A11 11 0 0012 1.27"}),"GitHub");t.Z=l},6638:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"}),"Home");t.Z=i},725:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M19 3h-4.18C14.4 1.84 13.3 1 12 1s-2.4.84-2.82 2H5c-.14 0-.27.01-.4.04-.39.08-.74.28-1.01.55-.18.18-.33.4-.43.64-.1.23-.16.49-.16.77v14c0 .27.06.54.16.78s.25.45.43.64c.27.27.62.47 1.01.55.13.02.26.03.4.03h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-8 11.17-1.41 1.42L6 12l3.59-3.59L11 9.83 8.83 12 11 14.17zm1-9.92c-.41 0-.75-.34-.75-.75s.34-.75.75-.75.75.34.75.75-.34.75-.75.75zm2.41 11.34L13 14.17 15.17 12 13 9.83l1.41-1.42L18 12l-3.59 3.59z"}),"IntegrationInstructions");t.Z=i},9485:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M11 7 9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5-5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8v14z"}),"Login");t.Z=i},3540:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"m17 7-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z"}),"Logout");t.Z=i},6818:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),a=n(5893),i=(0,o.default)((0,a.jsx)("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z"}),"Save");t.Z=i},4938:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return r.createSvgIcon}});var r=n(4116)},5517:(e,t,n)=>{"use strict";n.d(t,{Z:()=>le});var r=n(7462),o=n(3366),a=n(1387),i=n(9766),l=n(4869),s=n(1796);const c={black:"#000",white:"#fff"},u={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},d="#f3e5f5",p="#ce93d8",f="#ba68c8",m="#ab47bc",h="#9c27b0",g="#7b1fa2",b="#e57373",v="#ef5350",y="#f44336",w="#d32f2f",x="#c62828",E="#ffb74d",k="#ffa726",_="#ff9800",S="#f57c00",O="#e65100",N="#e3f2fd",C="#90caf9",R="#42a5f5",T="#1976d2",M="#1565c0",P="#4fc3f7",A="#29b6f6",L="#03a9f4",Z="#0288d1",I="#01579b",j="#81c784",D="#66bb6a",z="#4caf50",F="#388e3c",B="#2e7d32",$="#1b5e20",U=["mode","contrastThreshold","tonalOffset"],W={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:c.white,default:c.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},H={text:{primary:c.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:c.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function q(e,t,n,r){const o=r.light||r,a=r.dark||1.5*r;e[t]||(e.hasOwnProperty(n)?e[t]=e[n]:"light"===t?e.light=(0,s.$n)(e.main,o):"dark"===t&&(e.dark=(0,s._j)(e.main,a)))}const V=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"],K={textTransform:"uppercase"},G='"Roboto", "Helvetica", "Arial", sans-serif';function Q(e,t){const n="function"==typeof t?t(e):t,{fontFamily:a=G,fontSize:l=14,fontWeightLight:s=300,fontWeightRegular:c=400,fontWeightMedium:u=500,fontWeightBold:d=700,htmlFontSize:p=16,allVariants:f,pxToRem:m}=n,h=(0,o.Z)(n,V),g=l/14,b=m||(e=>e/p*g+"rem"),v=(e,t,n,o,i)=>{return(0,r.Z)({fontFamily:a,fontWeight:e,fontSize:b(t),lineHeight:n},a===G?{letterSpacing:(l=o/t,Math.round(1e5*l)/1e5+"em")}:{},i,f);var l},y={h1:v(s,96,1.167,-1.5),h2:v(s,60,1.2,-.5),h3:v(c,48,1.167,0),h4:v(c,34,1.235,.25),h5:v(c,24,1.334,0),h6:v(u,20,1.6,.15),subtitle1:v(c,16,1.75,.15),subtitle2:v(u,14,1.57,.1),body1:v(c,16,1.5,.15),body2:v(c,14,1.43,.15),button:v(u,14,1.75,.4,K),caption:v(c,12,1.66,.4),overline:v(c,12,2.66,1,K)};return(0,i.Z)((0,r.Z)({htmlFontSize:p,pxToRem:b,fontFamily:a,fontSize:l,fontWeightLight:s,fontWeightRegular:c,fontWeightMedium:u,fontWeightBold:d},y),h,{clone:!1})}function X(...e){return[`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px rgba(0,0,0,0.2)`,`${e[4]}px ${e[5]}px ${e[6]}px ${e[7]}px rgba(0,0,0,0.14)`,`${e[8]}px ${e[9]}px ${e[10]}px ${e[11]}px rgba(0,0,0,0.12)`].join(",")}const Y=["none",X(0,2,1,-1,0,1,1,0,0,1,3,0),X(0,3,1,-2,0,2,2,0,0,1,5,0),X(0,3,3,-2,0,3,4,0,0,1,8,0),X(0,2,4,-1,0,4,5,0,0,1,10,0),X(0,3,5,-1,0,5,8,0,0,1,14,0),X(0,3,5,-1,0,6,10,0,0,1,18,0),X(0,4,5,-2,0,7,10,1,0,2,16,1),X(0,5,5,-3,0,8,10,1,0,3,14,2),X(0,5,6,-3,0,9,12,1,0,3,16,2),X(0,6,6,-3,0,10,14,1,0,4,18,3),X(0,6,7,-4,0,11,15,1,0,4,20,3),X(0,7,8,-4,0,12,17,2,0,5,22,4),X(0,7,8,-4,0,13,19,2,0,5,24,4),X(0,7,9,-4,0,14,21,2,0,5,26,4),X(0,8,9,-5,0,15,22,2,0,6,28,5),X(0,8,10,-5,0,16,24,2,0,6,30,5),X(0,8,11,-5,0,17,26,2,0,6,32,5),X(0,9,11,-5,0,18,28,2,0,7,34,6),X(0,9,12,-6,0,19,29,2,0,7,36,6),X(0,10,13,-6,0,20,31,3,0,8,38,7),X(0,10,13,-6,0,21,33,3,0,8,40,7),X(0,10,14,-6,0,22,35,3,0,8,42,7),X(0,11,14,-7,0,23,36,3,0,9,44,8),X(0,11,15,-7,0,24,38,3,0,9,46,8)],J=["duration","easing","delay"],ee={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},te={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function ne(e){return`${Math.round(e)}ms`}function re(e){if(!e)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function oe(e){const t=(0,r.Z)({},ee,e.easing),n=(0,r.Z)({},te,e.duration);return(0,r.Z)({getAutoHeightDuration:re,create:(e=["all"],r={})=>{const{duration:a=n.standard,easing:i=t.easeInOut,delay:l=0}=r;return(0,o.Z)(r,J),(Array.isArray(e)?e:[e]).map((e=>`${e} ${"string"==typeof a?a:ne(a)} ${i} ${"string"==typeof l?l:ne(l)}`)).join(",")}},e,{easing:t,duration:n})}const ae={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},ie=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];const le=function(e={},...t){const{mixins:n={},palette:V={},transitions:K={},typography:G={}}=e,X=(0,o.Z)(e,ie);if(e.vars)throw new Error((0,a.Z)(18));const J=function(e){const{mode:t="light",contrastThreshold:n=3,tonalOffset:l=.2}=e,V=(0,o.Z)(e,U),K=e.primary||function(e="light"){return"dark"===e?{main:C,light:N,dark:R}:{main:T,light:R,dark:M}}(t),G=e.secondary||function(e="light"){return"dark"===e?{main:p,light:d,dark:m}:{main:h,light:f,dark:g}}(t),Q=e.error||function(e="light"){return"dark"===e?{main:y,light:b,dark:w}:{main:w,light:v,dark:x}}(t),X=e.info||function(e="light"){return"dark"===e?{main:A,light:P,dark:Z}:{main:Z,light:L,dark:I}}(t),Y=e.success||function(e="light"){return"dark"===e?{main:D,light:j,dark:F}:{main:B,light:z,dark:$}}(t),J=e.warning||function(e="light"){return"dark"===e?{main:k,light:E,dark:S}:{main:"#ed6c02",light:_,dark:O}}(t);function ee(e){return(0,s.mi)(e,H.text.primary)>=n?H.text.primary:W.text.primary}const te=({color:e,name:t,mainShade:n=500,lightShade:o=300,darkShade:i=700})=>{if(!(e=(0,r.Z)({},e)).main&&e[n]&&(e.main=e[n]),!e.hasOwnProperty("main"))throw new Error((0,a.Z)(11,t?` (${t})`:"",n));if("string"!=typeof e.main)throw new Error((0,a.Z)(12,t?` (${t})`:"",JSON.stringify(e.main)));return q(e,"light",o,l),q(e,"dark",i,l),e.contrastText||(e.contrastText=ee(e.main)),e},ne={dark:H,light:W};return(0,i.Z)((0,r.Z)({common:(0,r.Z)({},c),mode:t,primary:te({color:K,name:"primary"}),secondary:te({color:G,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:te({color:Q,name:"error"}),warning:te({color:J,name:"warning"}),info:te({color:X,name:"info"}),success:te({color:Y,name:"success"}),grey:u,contrastThreshold:n,getContrastText:ee,augmentColor:te,tonalOffset:l},ne[t]),V)}(V),ee=(0,l.Z)(e);let te=(0,i.Z)(ee,{mixins:(ne=ee.breakpoints,re=n,(0,r.Z)({toolbar:{minHeight:56,[ne.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[ne.up("sm")]:{minHeight:64}}},re)),palette:J,shadows:Y.slice(),typography:Q(J,G),transitions:oe(K),zIndex:(0,r.Z)({},ae)});var ne,re;return te=(0,i.Z)(te,X),te=t.reduce(((e,t)=>(0,i.Z)(e,t)),te),te}},5165:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=(0,n(5517).Z)()},4174:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>E,FO:()=>y,Dz:()=>w});var r=n(3366),o=n(7462),a=n(9378),i=n(4869),l=n(8320);const s=["variant"];function c(e){return 0===e.length}function u(e){const{variant:t}=e,n=(0,r.Z)(e,s);let o=t||"";return Object.keys(n).sort().forEach((t=>{o+="color"===t?c(o)?e[t]:(0,l.Z)(e[t]):`${c(o)?t:(0,l.Z)(t)}${(0,l.Z)(e[t].toString())}`})),o}var d=n(6523);const p=["name","slot","skipVariantsResolver","skipSx","overridesResolver"],f=["theme"],m=["theme"];function h(e){return 0===Object.keys(e).length}function g(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}const b=(0,i.Z)();var v=n(5165);const y=e=>g(e)&&"classes"!==e,w=g,x=function(e={}){const{defaultTheme:t=b,rootShouldForwardProp:n=g,slotShouldForwardProp:i=g,styleFunctionSx:l=d.Z}=e,s=e=>{const n=h(e.theme)?t:e.theme;return l((0,o.Z)({},e,{theme:n}))};return s.__mui_systemSx=!0,(e,l={})=>{(0,a.Co)(e,(e=>e.filter((e=>!(null!=e&&e.__mui_systemSx)))));const{name:c,slot:d,skipVariantsResolver:b,skipSx:v,overridesResolver:y}=l,w=(0,r.Z)(l,p),x=void 0!==b?b:d&&"Root"!==d||!1,E=v||!1;let k=g;"Root"===d?k=n:d?k=i:function(e){return"string"==typeof e&&e.charCodeAt(0)>96}(e)&&(k=void 0);const _=(0,a.ZP)(e,(0,o.Z)({shouldForwardProp:k,label:void 0},w)),S=(e,...n)=>{const a=n?n.map((e=>"function"==typeof e&&e.__emotion_real!==e?n=>{let{theme:a}=n,i=(0,r.Z)(n,f);return e((0,o.Z)({theme:h(a)?t:a},i))}:e)):[];let i=e;c&&y&&a.push((e=>{const n=h(e.theme)?t:e.theme,r=((e,t)=>t.components&&t.components[e]&&t.components[e].styleOverrides?t.components[e].styleOverrides:null)(c,n);if(r){const t={};return Object.entries(r).forEach((([r,a])=>{t[r]="function"==typeof a?a((0,o.Z)({},e,{theme:n})):a})),y(e,t)}return null})),c&&!x&&a.push((e=>{const n=h(e.theme)?t:e.theme;return((e,t,n,r)=>{var o,a;const{ownerState:i={}}=e,l=[],s=null==n||null==(o=n.components)||null==(a=o[r])?void 0:a.variants;return s&&s.forEach((n=>{let r=!0;Object.keys(n.props).forEach((t=>{i[t]!==n.props[t]&&e[t]!==n.props[t]&&(r=!1)})),r&&l.push(t[u(n.props)])})),l})(e,((e,t)=>{let n=[];t&&t.components&&t.components[e]&&t.components[e].variants&&(n=t.components[e].variants);const r={};return n.forEach((e=>{const t=u(e.props);r[t]=e.style})),r})(c,n),n,c)})),E||a.push(s);const l=a.length-n.length;if(Array.isArray(e)&&l>0){const t=new Array(l).fill("");i=[...e,...t],i.raw=[...e.raw,...t]}else"function"==typeof e&&e.__emotion_real!==e&&(i=n=>{let{theme:a}=n,i=(0,r.Z)(n,m);return e((0,o.Z)({theme:h(a)?t:a},i))});return _(i,...a)};return _.withConfig&&(S.withConfig=_.withConfig),S}}({defaultTheme:v.Z,rootShouldForwardProp:y}),E=x},1468:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7925),o=n(6682);var a=n(5165);function i({props:e,name:t}){return function({props:e,name:t,defaultTheme:n}){const a=function(e){const{theme:t,name:n,props:o}=e;return t&&t.components&&t.components[n]&&t.components[n].defaultProps?(0,r.Z)(t.components[n].defaultProps,o):o}({theme:(0,o.Z)(n),name:t,props:e});return a}({props:e,name:t,defaultTheme:a.Z})}},6622:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(8320).Z},41:(e,t,n)=>{"use strict";n.d(t,{Z:()=>v});var r=n(7462),o=n(7294),a=n(3366),i=n(6010),l=n(4780),s=n(6622),c=n(1468),u=n(4174),d=n(5677);function p(e){return(0,d.Z)("MuiSvgIcon",e)}(0,n(1588).Z)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);var f=n(5893);const m=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],h=(0,u.ZP)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,"inherit"!==n.color&&t[`color${(0,s.Z)(n.color)}`],t[`fontSize${(0,s.Z)(n.fontSize)}`]]}})((({theme:e,ownerState:t})=>{var n,r,o,a,i,l,s,c,u,d,p,f,m,h,g,b,v;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:"currentColor",flexShrink:0,transition:null==(n=e.transitions)||null==(r=n.create)?void 0:r.call(n,"fill",{duration:null==(o=e.transitions)||null==(a=o.duration)?void 0:a.shorter}),fontSize:{inherit:"inherit",small:(null==(i=e.typography)||null==(l=i.pxToRem)?void 0:l.call(i,20))||"1.25rem",medium:(null==(s=e.typography)||null==(c=s.pxToRem)?void 0:c.call(s,24))||"1.5rem",large:(null==(u=e.typography)||null==(d=u.pxToRem)?void 0:d.call(u,35))||"2.1875"}[t.fontSize],color:null!=(p=null==(f=(e.vars||e).palette)||null==(m=f[t.color])?void 0:m.main)?p:{action:null==(h=(e.vars||e).palette)||null==(g=h.action)?void 0:g.active,disabled:null==(b=(e.vars||e).palette)||null==(v=b.action)?void 0:v.disabled,inherit:void 0}[t.color]}})),g=o.forwardRef((function(e,t){const n=(0,c.Z)({props:e,name:"MuiSvgIcon"}),{children:o,className:u,color:d="inherit",component:g="svg",fontSize:b="medium",htmlColor:v,inheritViewBox:y=!1,titleAccess:w,viewBox:x="0 0 24 24"}=n,E=(0,a.Z)(n,m),k=(0,r.Z)({},n,{color:d,component:g,fontSize:b,instanceFontSize:e.fontSize,inheritViewBox:y,viewBox:x}),_={};y||(_.viewBox=x);const S=(e=>{const{color:t,fontSize:n,classes:r}=e,o={root:["root","inherit"!==t&&`color${(0,s.Z)(t)}`,`fontSize${(0,s.Z)(n)}`]};return(0,l.Z)(o,p,r)})(k);return(0,f.jsxs)(h,(0,r.Z)({as:g,className:(0,i.Z)(S.root,u),ownerState:k,focusable:"false",color:v,"aria-hidden":!w||void 0,role:w?"img":void 0,ref:t},_,E,{children:[o,w?(0,f.jsx)("title",{children:w}):null]}))}));g.muiName="SvgIcon";const b=g;function v(e,t){const n=(n,o)=>(0,f.jsx)(b,(0,r.Z)({"data-testid":`${t}Icon`,ref:o},n,{children:e}));return n.muiName=b.muiName,o.memo(o.forwardRef(n))}},5400:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(7596).Z},4116:(e,t,n)=>{"use strict";n.r(t),n.d(t,{capitalize:()=>o.Z,createChainedFunction:()=>a,createSvgIcon:()=>i.Z,debounce:()=>l.Z,deprecatedPropType:()=>s,isMuiElement:()=>c.Z,ownerDocument:()=>u.Z,ownerWindow:()=>d.Z,requirePropFactory:()=>p,setRef:()=>f,unstable_ClassNameGenerator:()=>x,unstable_useEnhancedEffect:()=>m.Z,unstable_useId:()=>h.Z,unsupportedProp:()=>g,useControlled:()=>b.Z,useEventCallback:()=>v.Z,useForkRef:()=>y.Z,useIsFocusVisible:()=>w.Z});var r=n(7078),o=n(6622);const a=n(9064).Z;var i=n(41),l=n(5400);const s=function(e,t){return()=>null};var c=n(3693),u=n(7505),d=n(7577);n(7462);const p=function(e,t){return()=>null},f=n(7960).Z;var m=n(3289),h=n(3192);const g=function(e,t,n,r,o){return null};var b=n(1133),v=n(6432),y=n(4771),w=n(6052);const x={configure:e=>{console.warn(["MUI: `ClassNameGenerator` import from `@mui/material/utils` is outdated and might cause unexpected issues.","","You should use `import { unstable_ClassNameGenerator } from '@mui/material/className'` instead","","The detail of the issue: https://github.com/mui/material-ui/issues/30011#issuecomment-1024993401","","The updated documentation: https://mui.com/guides/classname-generator/"].join("\n")),r.Z.configure(e)}}},3693:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const o=function(e,t){return r.isValidElement(e)&&-1!==t.indexOf(e.type.muiName)}},7505:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(7094).Z},7577:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(8290).Z},1133:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const o=function({controlled:e,default:t,name:n,state:o="value"}){const{current:a}=r.useRef(void 0!==e),[i,l]=r.useState(t);return[a?e:i,r.useCallback((e=>{a||l(e)}),[])]}},3289:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(6600).Z},6432:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(3633).Z},4771:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(67).Z},3192:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(7579).Z},6052:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7294);let o,a=!0,i=!1;const l={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(e){e.metaKey||e.altKey||e.ctrlKey||(a=!0)}function c(){a=!1}function u(){"hidden"===this.visibilityState&&i&&(a=!0)}const d=function(){const e=r.useCallback((e=>{var t;null!=e&&((t=e.ownerDocument).addEventListener("keydown",s,!0),t.addEventListener("mousedown",c,!0),t.addEventListener("pointerdown",c,!0),t.addEventListener("touchstart",c,!0),t.addEventListener("visibilitychange",u,!0))}),[]),t=r.useRef(!1);return{isFocusVisibleRef:t,onFocus:function(e){return!!function(e){const{target:t}=e;try{return t.matches(":focus-visible")}catch(e){}return a||function(e){const{type:t,tagName:n}=e;return!("INPUT"!==n||!l[t]||e.readOnly)||"TEXTAREA"===n&&!e.readOnly||!!e.isContentEditable}(t)}(e)&&(t.current=!0,!0)},onBlur:function(){return!!t.current&&(i=!0,window.clearTimeout(o),o=window.setTimeout((()=>{i=!1}),100),t.current=!1,!0)},ref:e}}},4819:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(7294).createContext(null)},6760:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(4819);function a(){return r.useContext(o.Z)}},9378:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>y,Co:()=>w});var r=n(7294),o=n(7462),a=n(5042),i=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/;const l=(0,a.Z)((function(e){return i.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91}));var s=n(2443),c=n(444),u=n(6797),d=n(7278),p=l,f=function(e){return"theme"!==e},m=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?p:f},h=function(e,t,n){var r;if(t){var o=t.shouldForwardProp;r=e.__emotion_forwardProp&&o?function(t){return e.__emotion_forwardProp(t)&&o(t)}:o}return"function"!=typeof r&&n&&(r=e.__emotion_forwardProp),r},g=function(e){var t=e.cache,n=e.serialized,r=e.isStringTag;return(0,c.hC)(t,n,r),(0,d.L)((function(){return(0,c.My)(t,n,r)})),null};var b=function e(t,n){var a,i,l=t.__emotion_real===t,d=l&&t.__emotion_base||t;void 0!==n&&(a=n.label,i=n.target);var p=h(t,n,l),f=p||m(d),b=!f("as");return function(){var v=arguments,y=l&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==a&&y.push("label:"+a+";"),null==v[0]||void 0===v[0].raw)y.push.apply(y,v);else{y.push(v[0][0]);for(var w=v.length,x=1;x<w;x++)y.push(v[x],v[0][x])}var E=(0,s.w)((function(e,t,n){var o=b&&e.as||d,a="",l=[],h=e;if(null==e.theme){for(var v in h={},e)h[v]=e[v];h.theme=(0,r.useContext)(s.T)}"string"==typeof e.className?a=(0,c.fp)(t.registered,l,e.className):null!=e.className&&(a=e.className+" ");var w=(0,u.O)(y.concat(l),t.registered,h);a+=t.key+"-"+w.name,void 0!==i&&(a+=" "+i);var x=b&&void 0===p?m(o):f,E={};for(var k in e)b&&"as"===k||x(k)&&(E[k]=e[k]);return E.className=a,E.ref=n,(0,r.createElement)(r.Fragment,null,(0,r.createElement)(g,{cache:t,serialized:w,isStringTag:"string"==typeof o}),(0,r.createElement)(o,E))}));return E.displayName=void 0!==a?a:"Styled("+("string"==typeof d?d:d.displayName||d.name||"Component")+")",E.defaultProps=t.defaultProps,E.__emotion_real=E,E.__emotion_base=d,E.__emotion_styles=y,E.__emotion_forwardProp=p,Object.defineProperty(E,"toString",{value:function(){return"."+i}}),E.withComponent=function(t,r){return e(t,(0,o.Z)({},n,r,{shouldForwardProp:h(E,r,!0)})).apply(void 0,y)},E}}.bind();["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"].forEach((function(e){b[e]=b(e)}));const v=b;function y(e,t){return v(e,t)}const w=(e,t)=>{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))}},5408:(e,t,n)=>{"use strict";n.d(t,{L7:()=>s,P$:()=>u,VO:()=>o,W8:()=>l,dt:()=>c,k9:()=>i});var r=n(9766);const o={xs:0,sm:600,md:900,lg:1200,xl:1536},a={keys:["xs","sm","md","lg","xl"],up:e=>`@media (min-width:${o[e]}px)`};function i(e,t,n){const r=e.theme||{};if(Array.isArray(t)){const e=r.breakpoints||a;return t.reduce(((r,o,a)=>(r[e.up(e.keys[a])]=n(t[a]),r)),{})}if("object"==typeof t){const e=r.breakpoints||a;return Object.keys(t).reduce(((r,a)=>{if(-1!==Object.keys(e.values||o).indexOf(a))r[e.up(a)]=n(t[a],a);else{const e=a;r[e]=t[e]}return r}),{})}return n(t)}function l(e={}){var t;return(null==(t=e.keys)?void 0:t.reduce(((t,n)=>(t[e.up(n)]={},t)),{}))||{}}function s(e,t){return e.reduce(((e,t)=>{const n=e[t];return(!n||0===Object.keys(n).length)&&delete e[t],e}),t)}function c(e,...t){const n=l(e),o=[n,...t].reduce(((e,t)=>(0,r.Z)(e,t)),{});return s(Object.keys(n),o)}function u({values:e,breakpoints:t,base:n}){const r=n||function(e,t){if("object"!=typeof e)return{};const n={},r=Object.keys(t);return Array.isArray(e)?r.forEach(((t,r)=>{r<e.length&&(n[t]=!0)})):r.forEach((t=>{null!=e[t]&&(n[t]=!0)})),n}(e,t),o=Object.keys(r);if(0===o.length)return e;let a;return o.reduce(((t,n,r)=>(Array.isArray(e)?(t[n]=null!=e[r]?e[r]:e[a],a=r):"object"==typeof e?(t[n]=null!=e[n]?e[n]:e[a],a=n):t[n]=e,t)),{})}},1796:(e,t,n)=>{"use strict";n.d(t,{$n:()=>d,Fq:()=>c,_j:()=>u,mi:()=>s});var r=n(1387);function o(e,t=0,n=1){return Math.min(Math.max(t,e),n)}function a(e){if(e.type)return e;if("#"===e.charAt(0))return a(function(e){e=e.slice(1);const t=new RegExp(`.{1,${e.length>=6?2:1}}`,"g");let n=e.match(t);return n&&1===n[0].length&&(n=n.map((e=>e+e))),n?`rgb${4===n.length?"a":""}(${n.map(((e,t)=>t<3?parseInt(e,16):Math.round(parseInt(e,16)/255*1e3)/1e3)).join(", ")})`:""}(e));const t=e.indexOf("("),n=e.substring(0,t);if(-1===["rgb","rgba","hsl","hsla","color"].indexOf(n))throw new Error((0,r.Z)(9,e));let o,i=e.substring(t+1,e.length-1);if("color"===n){if(i=i.split(" "),o=i.shift(),4===i.length&&"/"===i[3].charAt(0)&&(i[3]=i[3].slice(1)),-1===["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(o))throw new Error((0,r.Z)(10,o))}else i=i.split(",");return i=i.map((e=>parseFloat(e))),{type:n,values:i,colorSpace:o}}function i(e){const{type:t,colorSpace:n}=e;let{values:r}=e;return-1!==t.indexOf("rgb")?r=r.map(((e,t)=>t<3?parseInt(e,10):e)):-1!==t.indexOf("hsl")&&(r[1]=`${r[1]}%`,r[2]=`${r[2]}%`),r=-1!==t.indexOf("color")?`${n} ${r.join(" ")}`:`${r.join(", ")}`,`${t}(${r})`}function l(e){let t="hsl"===(e=a(e)).type?a(function(e){e=a(e);const{values:t}=e,n=t[0],r=t[1]/100,o=t[2]/100,l=r*Math.min(o,1-o),s=(e,t=(e+n/30)%12)=>o-l*Math.max(Math.min(t-3,9-t,1),-1);let c="rgb";const u=[Math.round(255*s(0)),Math.round(255*s(8)),Math.round(255*s(4))];return"hsla"===e.type&&(c+="a",u.push(t[3])),i({type:c,values:u})}(e)).values:e.values;return t=t.map((t=>("color"!==e.type&&(t/=255),t<=.03928?t/12.92:((t+.055)/1.055)**2.4))),Number((.2126*t[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function s(e,t){const n=l(e),r=l(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function c(e,t){return e=a(e),t=o(t),"rgb"!==e.type&&"hsl"!==e.type||(e.type+="a"),"color"===e.type?e.values[3]=`/${t}`:e.values[3]=t,i(e)}function u(e,t){if(e=a(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]*=1-t;else if(-1!==e.type.indexOf("rgb")||-1!==e.type.indexOf("color"))for(let n=0;n<3;n+=1)e.values[n]*=1-t;return i(e)}function d(e,t){if(e=a(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]+=(100-e.values[2])*t;else if(-1!==e.type.indexOf("rgb"))for(let n=0;n<3;n+=1)e.values[n]+=(255-e.values[n])*t;else if(-1!==e.type.indexOf("color"))for(let n=0;n<3;n+=1)e.values[n]+=(1-e.values[n])*t;return i(e)}},4869:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(3366),a=n(9766);const i=["values","unit","step"];const l={borderRadius:4};var s=n(2605);const c=["breakpoints","palette","spacing","shape"],u=function(e={},...t){const{breakpoints:n={},palette:u={},spacing:d,shape:p={}}=e,f=(0,o.Z)(e,c),m=function(e){const{values:t={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:n="px",step:a=5}=e,l=(0,o.Z)(e,i),s=(e=>{const t=Object.keys(e).map((t=>({key:t,val:e[t]})))||[];return t.sort(((e,t)=>e.val-t.val)),t.reduce(((e,t)=>(0,r.Z)({},e,{[t.key]:t.val})),{})})(t),c=Object.keys(s);function u(e){return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${n})`}function d(e){return`@media (max-width:${("number"==typeof t[e]?t[e]:e)-a/100}${n})`}function p(e,r){const o=c.indexOf(r);return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${n}) and (max-width:${(-1!==o&&"number"==typeof t[c[o]]?t[c[o]]:r)-a/100}${n})`}return(0,r.Z)({keys:c,values:s,up:u,down:d,between:p,only:function(e){return c.indexOf(e)+1<c.length?p(e,c[c.indexOf(e)+1]):u(e)},not:function(e){const t=c.indexOf(e);return 0===t?u(c[1]):t===c.length-1?d(c[t]):p(e,c[c.indexOf(e)+1]).replace("@media","@media not all and")},unit:n},l)}(n),h=function(e=8){if(e.mui)return e;const t=(0,s.hB)({spacing:e}),n=(...e)=>(0===e.length?[1]:e).map((e=>{const n=t(e);return"number"==typeof n?`${n}px`:n})).join(" ");return n.mui=!0,n}(d);let g=(0,a.Z)({breakpoints:m,direction:"ltr",components:{},palette:(0,r.Z)({mode:"light"},u),spacing:h,shape:(0,r.Z)({},l,p)},f);return g=t.reduce(((e,t)=>(0,a.Z)(e,t)),g),g}},6977:(e,t,n)=>{"use strict";n.d(t,{Gc:()=>G,G$:()=>K});var r=n(4844),o=n(7730);const a=function(...e){const t=e.reduce(((e,t)=>(t.filterProps.forEach((n=>{e[n]=t})),e)),{}),n=e=>Object.keys(e).reduce(((n,r)=>t[r]?(0,o.Z)(n,t[r](e)):n),{});return n.propTypes={},n.filterProps=e.reduce(((e,t)=>e.concat(t.filterProps)),[]),n};var i=n(2605),l=n(5408);function s(e){return"number"!=typeof e?e:`${e}px solid`}const c=(0,r.Z)({prop:"border",themeKey:"borders",transform:s}),u=(0,r.Z)({prop:"borderTop",themeKey:"borders",transform:s}),d=(0,r.Z)({prop:"borderRight",themeKey:"borders",transform:s}),p=(0,r.Z)({prop:"borderBottom",themeKey:"borders",transform:s}),f=(0,r.Z)({prop:"borderLeft",themeKey:"borders",transform:s}),m=(0,r.Z)({prop:"borderColor",themeKey:"palette"}),h=(0,r.Z)({prop:"borderTopColor",themeKey:"palette"}),g=(0,r.Z)({prop:"borderRightColor",themeKey:"palette"}),b=(0,r.Z)({prop:"borderBottomColor",themeKey:"palette"}),v=(0,r.Z)({prop:"borderLeftColor",themeKey:"palette"}),y=e=>{if(void 0!==e.borderRadius&&null!==e.borderRadius){const t=(0,i.eI)(e.theme,"shape.borderRadius",4,"borderRadius"),n=e=>({borderRadius:(0,i.NA)(t,e)});return(0,l.k9)(e,e.borderRadius,n)}return null};y.propTypes={},y.filterProps=["borderRadius"];const w=a(c,u,d,p,f,m,h,g,b,v,y),x=a((0,r.Z)({prop:"displayPrint",cssProperty:!1,transform:e=>({"@media print":{display:e}})}),(0,r.Z)({prop:"display"}),(0,r.Z)({prop:"overflow"}),(0,r.Z)({prop:"textOverflow"}),(0,r.Z)({prop:"visibility"}),(0,r.Z)({prop:"whiteSpace"})),E=a((0,r.Z)({prop:"flexBasis"}),(0,r.Z)({prop:"flexDirection"}),(0,r.Z)({prop:"flexWrap"}),(0,r.Z)({prop:"justifyContent"}),(0,r.Z)({prop:"alignItems"}),(0,r.Z)({prop:"alignContent"}),(0,r.Z)({prop:"order"}),(0,r.Z)({prop:"flex"}),(0,r.Z)({prop:"flexGrow"}),(0,r.Z)({prop:"flexShrink"}),(0,r.Z)({prop:"alignSelf"}),(0,r.Z)({prop:"justifyItems"}),(0,r.Z)({prop:"justifySelf"})),k=e=>{if(void 0!==e.gap&&null!==e.gap){const t=(0,i.eI)(e.theme,"spacing",8,"gap"),n=e=>({gap:(0,i.NA)(t,e)});return(0,l.k9)(e,e.gap,n)}return null};k.propTypes={},k.filterProps=["gap"];const _=e=>{if(void 0!==e.columnGap&&null!==e.columnGap){const t=(0,i.eI)(e.theme,"spacing",8,"columnGap"),n=e=>({columnGap:(0,i.NA)(t,e)});return(0,l.k9)(e,e.columnGap,n)}return null};_.propTypes={},_.filterProps=["columnGap"];const S=e=>{if(void 0!==e.rowGap&&null!==e.rowGap){const t=(0,i.eI)(e.theme,"spacing",8,"rowGap"),n=e=>({rowGap:(0,i.NA)(t,e)});return(0,l.k9)(e,e.rowGap,n)}return null};S.propTypes={},S.filterProps=["rowGap"];const O=a(k,_,S,(0,r.Z)({prop:"gridColumn"}),(0,r.Z)({prop:"gridRow"}),(0,r.Z)({prop:"gridAutoFlow"}),(0,r.Z)({prop:"gridAutoColumns"}),(0,r.Z)({prop:"gridAutoRows"}),(0,r.Z)({prop:"gridTemplateColumns"}),(0,r.Z)({prop:"gridTemplateRows"}),(0,r.Z)({prop:"gridTemplateAreas"}),(0,r.Z)({prop:"gridArea"})),N=a((0,r.Z)({prop:"position"}),(0,r.Z)({prop:"zIndex",themeKey:"zIndex"}),(0,r.Z)({prop:"top"}),(0,r.Z)({prop:"right"}),(0,r.Z)({prop:"bottom"}),(0,r.Z)({prop:"left"})),C=a((0,r.Z)({prop:"color",themeKey:"palette"}),(0,r.Z)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette"}),(0,r.Z)({prop:"backgroundColor",themeKey:"palette"})),R=(0,r.Z)({prop:"boxShadow",themeKey:"shadows"});function T(e){return e<=1&&0!==e?100*e+"%":e}const M=(0,r.Z)({prop:"width",transform:T}),P=e=>{if(void 0!==e.maxWidth&&null!==e.maxWidth){const t=t=>{var n,r,o;return{maxWidth:(null==(n=e.theme)||null==(r=n.breakpoints)||null==(o=r.values)?void 0:o[t])||l.VO[t]||T(t)}};return(0,l.k9)(e,e.maxWidth,t)}return null};P.filterProps=["maxWidth"];const A=(0,r.Z)({prop:"minWidth",transform:T}),L=(0,r.Z)({prop:"height",transform:T}),Z=(0,r.Z)({prop:"maxHeight",transform:T}),I=(0,r.Z)({prop:"minHeight",transform:T}),j=((0,r.Z)({prop:"size",cssProperty:"width",transform:T}),(0,r.Z)({prop:"size",cssProperty:"height",transform:T}),a(M,P,A,L,Z,I,(0,r.Z)({prop:"boxSizing"}))),D=(0,r.Z)({prop:"fontFamily",themeKey:"typography"}),z=(0,r.Z)({prop:"fontSize",themeKey:"typography"}),F=(0,r.Z)({prop:"fontStyle",themeKey:"typography"}),B=(0,r.Z)({prop:"fontWeight",themeKey:"typography"}),$=(0,r.Z)({prop:"letterSpacing"}),U=(0,r.Z)({prop:"textTransform"}),W=(0,r.Z)({prop:"lineHeight"}),H=(0,r.Z)({prop:"textAlign"}),q=a((0,r.Z)({prop:"typography",cssProperty:!1,themeKey:"typography"}),D,z,F,B,$,W,H,U),V={borders:w.filterProps,display:x.filterProps,flexbox:E.filterProps,grid:O.filterProps,positions:N.filterProps,palette:C.filterProps,shadows:R.filterProps,sizing:j.filterProps,spacing:i.ZP.filterProps,typography:q.filterProps},K={borders:w,display:x,flexbox:E,grid:O,positions:N,palette:C,shadows:R,sizing:j,spacing:i.ZP,typography:q},G=Object.keys(V).reduce(((e,t)=>(V[t].forEach((n=>{e[n]=K[t]})),e)),{})},7730:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(9766);const o=function(e,t){return t?(0,r.Z)(e,t,{clone:!1}):e}},2605:(e,t,n)=>{"use strict";n.d(t,{hB:()=>m,eI:()=>f,ZP:()=>w,NA:()=>h});var r=n(5408),o=n(4844),a=n(7730);const i={m:"margin",p:"padding"},l={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},s={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},c=function(e){const t={};return e=>(void 0===t[e]&&(t[e]=(e=>{if(e.length>2){if(!s[e])return[e];e=s[e]}const[t,n]=e.split(""),r=i[t],o=l[n]||"";return Array.isArray(o)?o.map((e=>r+e)):[r+o]})(e)),t[e])}(),u=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],d=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],p=[...u,...d];function f(e,t,n,r){var a;const i=null!=(a=(0,o.D)(e,t,!1))?a:n;return"number"==typeof i?e=>"string"==typeof e?e:i*e:Array.isArray(i)?e=>"string"==typeof e?e:i[e]:"function"==typeof i?i:()=>{}}function m(e){return f(e,"spacing",8)}function h(e,t){if("string"==typeof t||null==t)return t;const n=e(Math.abs(t));return t>=0?n:"number"==typeof n?-n:`-${n}`}function g(e,t){const n=m(e.theme);return Object.keys(e).map((o=>function(e,t,n,o){if(-1===t.indexOf(n))return null;const a=function(e,t){return n=>e.reduce(((e,r)=>(e[r]=h(t,n),e)),{})}(c(n),o),i=e[n];return(0,r.k9)(e,i,a)}(e,t,o,n))).reduce(a.Z,{})}function b(e){return g(e,u)}function v(e){return g(e,d)}function y(e){return g(e,p)}b.propTypes={},b.filterProps=u,v.propTypes={},v.filterProps=d,y.propTypes={},y.filterProps=p;const w=y},4844:(e,t,n)=>{"use strict";n.d(t,{D:()=>a,Z:()=>l});var r=n(8320),o=n(5408);function a(e,t,n=!0){if(!t||"string"!=typeof t)return null;if(e&&e.vars&&n){const n=`vars.${t}`.split(".").reduce(((e,t)=>e&&e[t]?e[t]:null),e);if(null!=n)return n}return t.split(".").reduce(((e,t)=>e&&null!=e[t]?e[t]:null),e)}function i(e,t,n,r=n){let o;return o="function"==typeof e?e(n):Array.isArray(e)?e[n]||r:a(e,n)||r,t&&(o=t(o)),o}const l=function(e){const{prop:t,cssProperty:n=e.prop,themeKey:l,transform:s}=e,c=e=>{if(null==e[t])return null;const c=e[t],u=a(e.theme,l)||{};return(0,o.k9)(e,c,(e=>{let o=i(u,s,e);return e===o&&"string"==typeof e&&(o=i(u,s,`${t}${"default"===e?"":(0,r.Z)(e)}`,e)),!1===n?o:{[n]:o}}))};return c.propTypes={},c.filterProps=[t],c}},6523:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var r=n(7730),o=n(6977),a=n(5408);const i=function(e=o.G$){const t=Object.keys(e).reduce(((t,n)=>(e[n].filterProps.forEach((r=>{t[r]=e[n]})),t)),{});function n(e,n,r){const o={[e]:n,theme:r},a=t[e];return a?a(o):{[e]:n}}return function e(o){const{sx:i,theme:l={}}=o||{};if(!i)return null;function s(o){let i=o;if("function"==typeof o)i=o(l);else if("object"!=typeof o)return o;if(!i)return null;const s=(0,a.W8)(l.breakpoints),c=Object.keys(s);let u=s;return Object.keys(i).forEach((o=>{const s="function"==typeof(c=i[o])?c(l):c;var c;if(null!=s)if("object"==typeof s)if(t[o])u=(0,r.Z)(u,n(o,s,l));else{const t=(0,a.k9)({theme:l},s,(e=>({[o]:e})));!function(...e){const t=e.reduce(((e,t)=>e.concat(Object.keys(t))),[]),n=new Set(t);return e.every((e=>n.size===Object.keys(e).length))}(t,s)?u=(0,r.Z)(u,t):u[o]=e({sx:s,theme:l})}else u=(0,r.Z)(u,n(o,s,l))})),(0,a.L7)(c,u)}return Array.isArray(i)?i.map(s):s(i)}}();i.filterProps=["sx"];const l=i},6682:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(4869),o=n(4168);const a=(0,r.Z)(),i=function(e=a){return(0,o.Z)(e)}},4168:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(6760);const o=function(e=null){const t=(0,r.Z)();return t&&(n=t,0!==Object.keys(n).length)?t:e;var n}},7078:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>e,o=(()=>{let e=r;return{configure(t){e=t},generate:t=>e(t),reset(){e=r}}})()},8320:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(1387);function o(e){if("string"!=typeof e)throw new Error((0,r.Z)(7));return e.charAt(0).toUpperCase()+e.slice(1)}},4780:(e,t,n)=>{"use strict";function r(e,t,n){const r={};return Object.keys(e).forEach((o=>{r[o]=e[o].reduce(((e,r)=>(r&&(e.push(t(r)),n&&n[r]&&e.push(n[r])),e)),[]).join(" ")})),r}n.d(t,{Z:()=>r})},9064:(e,t,n)=>{"use strict";function r(...e){return e.reduce(((e,t)=>null==t?e:function(...n){e.apply(this,n),t.apply(this,n)}),(()=>{}))}n.d(t,{Z:()=>r})},7596:(e,t,n)=>{"use strict";function r(e,t=166){let n;function r(...r){clearTimeout(n),n=setTimeout((()=>{e.apply(this,r)}),t)}return r.clear=()=>{clearTimeout(n)},r}n.d(t,{Z:()=>r})},9766:(e,t,n)=>{"use strict";n.d(t,{P:()=>o,Z:()=>a});var r=n(7462);function o(e){return null!==e&&"object"==typeof e&&e.constructor===Object}function a(e,t,n={clone:!0}){const i=n.clone?(0,r.Z)({},e):e;return o(e)&&o(t)&&Object.keys(t).forEach((r=>{"__proto__"!==r&&(o(t[r])&&r in e&&o(e[r])?i[r]=a(e[r],t[r],n):i[r]=t[r])})),i}},1387:(e,t,n)=>{"use strict";function r(e){let t="https://mui.com/production-error/?code="+e;for(let e=1;e<arguments.length;e+=1)t+="&args[]="+encodeURIComponent(arguments[e]);return"Minified MUI error #"+e+"; visit "+t+" for the full message."}n.d(t,{Z:()=>r})},5677:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7078);const o={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",required:"required",selected:"selected"};function a(e,t,n="Mui"){const a=o[t];return a?`${n}-${a}`:`${r.Z.generate(e)}-${t}`}},1588:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(5677);function o(e,t,n="Mui"){const o={};return t.forEach((t=>{o[t]=(0,r.Z)(e,t,n)})),o}},7094:(e,t,n)=>{"use strict";function r(e){return e&&e.ownerDocument||document}n.d(t,{Z:()=>r})},8290:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7094);function o(e){return(0,r.Z)(e).defaultView||window}},7925:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7462);function o(e,t){const n=(0,r.Z)({},t);return Object.keys(e).forEach((t=>{void 0===n[t]&&(n[t]=e[t])})),n}},7960:(e,t,n)=>{"use strict";function r(e,t){"function"==typeof e?e(t):e&&(e.current=t)}n.d(t,{Z:()=>r})},6600:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const o="undefined"!=typeof window?r.useLayoutEffect:r.useEffect},3633:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(6600);function a(e){const t=r.useRef(e);return(0,o.Z)((()=>{t.current=e})),r.useCallback(((...e)=>(0,t.current)(...e)),[])}},67:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(7960);function a(e,t){return r.useMemo((()=>null==e&&null==t?null:n=>{(0,o.Z)(e,n),(0,o.Z)(t,n)}),[e,t])}},7579:(e,t,n)=>{"use strict";var r;n.d(t,{Z:()=>l});var o=n(7294);let a=0;const i=(r||(r=n.t(o,2))).useId;function l(e){if(void 0!==i){const t=i();return null!=e?e:t}return function(e){const[t,n]=o.useState(e),r=e||t;return o.useEffect((()=>{null==t&&(a+=1,n(`mui-${a}`))}),[t]),r}(e)}},9669:(e,t,n)=>{e.exports=n(1609)},5448:(e,t,n)=>{"use strict";var r=n(4867),o=n(6026),a=n(4372),i=n(5327),l=n(4097),s=n(4109),c=n(7985),u=n(7874),d=n(2648),p=n(644),f=n(205);e.exports=function(e){return new Promise((function(t,n){var m,h=e.data,g=e.headers,b=e.responseType;function v(){e.cancelToken&&e.cancelToken.unsubscribe(m),e.signal&&e.signal.removeEventListener("abort",m)}r.isFormData(h)&&r.isStandardBrowserEnv()&&delete g["Content-Type"];var y=new XMLHttpRequest;if(e.auth){var w=e.auth.username||"",x=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";g.Authorization="Basic "+btoa(w+":"+x)}var E=l(e.baseURL,e.url);function k(){if(y){var r="getAllResponseHeaders"in y?s(y.getAllResponseHeaders()):null,a={data:b&&"text"!==b&&"json"!==b?y.response:y.responseText,status:y.status,statusText:y.statusText,headers:r,config:e,request:y};o((function(e){t(e),v()}),(function(e){n(e),v()}),a),y=null}}if(y.open(e.method.toUpperCase(),i(E,e.params,e.paramsSerializer),!0),y.timeout=e.timeout,"onloadend"in y?y.onloadend=k:y.onreadystatechange=function(){y&&4===y.readyState&&(0!==y.status||y.responseURL&&0===y.responseURL.indexOf("file:"))&&setTimeout(k)},y.onabort=function(){y&&(n(new d("Request aborted",d.ECONNABORTED,e,y)),y=null)},y.onerror=function(){n(new d("Network Error",d.ERR_NETWORK,e,y,y)),y=null},y.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",r=e.transitional||u;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new d(t,r.clarifyTimeoutError?d.ETIMEDOUT:d.ECONNABORTED,e,y)),y=null},r.isStandardBrowserEnv()){var _=(e.withCredentials||c(E))&&e.xsrfCookieName?a.read(e.xsrfCookieName):void 0;_&&(g[e.xsrfHeaderName]=_)}"setRequestHeader"in y&&r.forEach(g,(function(e,t){void 0===h&&"content-type"===t.toLowerCase()?delete g[t]:y.setRequestHeader(t,e)})),r.isUndefined(e.withCredentials)||(y.withCredentials=!!e.withCredentials),b&&"json"!==b&&(y.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&y.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&y.upload&&y.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(m=function(e){y&&(n(!e||e&&e.type?new p:e),y.abort(),y=null)},e.cancelToken&&e.cancelToken.subscribe(m),e.signal&&(e.signal.aborted?m():e.signal.addEventListener("abort",m))),h||(h=null);var S=f(E);S&&-1===["http","https","file"].indexOf(S)?n(new d("Unsupported protocol "+S+":",d.ERR_BAD_REQUEST,e)):y.send(h)}))}},1609:(e,t,n)=>{"use strict";var r=n(4867),o=n(1849),a=n(321),i=n(7185),l=function e(t){var n=new a(t),l=o(a.prototype.request,n);return r.extend(l,a.prototype,n),r.extend(l,n),l.create=function(n){return e(i(t,n))},l}(n(5546));l.Axios=a,l.CanceledError=n(644),l.CancelToken=n(4972),l.isCancel=n(6502),l.VERSION=n(7288).version,l.toFormData=n(7675),l.AxiosError=n(2648),l.Cancel=l.CanceledError,l.all=function(e){return Promise.all(e)},l.spread=n(8713),l.isAxiosError=n(6268),e.exports=l,e.exports.default=l},4972:(e,t,n)=>{"use strict";var r=n(644);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;this.promise.then((function(e){if(n._listeners){var t,r=n._listeners.length;for(t=0;t<r;t++)n._listeners[t](e);n._listeners=null}})),this.promise.then=function(e){var t,r=new Promise((function(e){n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e){n.reason||(n.reason=new r(e),t(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},o.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},o.source=function(){var e;return{token:new o((function(t){e=t})),cancel:e}},e.exports=o},644:(e,t,n)=>{"use strict";var r=n(2648);function o(e){r.call(this,null==e?"canceled":e,r.ERR_CANCELED),this.name="CanceledError"}n(4867).inherits(o,r,{__CANCEL__:!0}),e.exports=o},6502:e=>{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},321:(e,t,n)=>{"use strict";var r=n(4867),o=n(5327),a=n(782),i=n(3572),l=n(7185),s=n(4097),c=n(4875),u=c.validators;function d(e){this.defaults=e,this.interceptors={request:new a,response:new a}}d.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=l(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var n=t.transitional;void 0!==n&&c.assertOptions(n,{silentJSONParsing:u.transitional(u.boolean),forcedJSONParsing:u.transitional(u.boolean),clarifyTimeoutError:u.transitional(u.boolean)},!1);var r=[],o=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(o=o&&e.synchronous,r.unshift(e.fulfilled,e.rejected))}));var a,s=[];if(this.interceptors.response.forEach((function(e){s.push(e.fulfilled,e.rejected)})),!o){var d=[i,void 0];for(Array.prototype.unshift.apply(d,r),d=d.concat(s),a=Promise.resolve(t);d.length;)a=a.then(d.shift(),d.shift());return a}for(var p=t;r.length;){var f=r.shift(),m=r.shift();try{p=f(p)}catch(e){m(e);break}}try{a=i(p)}catch(e){return Promise.reject(e)}for(;s.length;)a=a.then(s.shift(),s.shift());return a},d.prototype.getUri=function(e){e=l(this.defaults,e);var t=s(e.baseURL,e.url);return o(t,e.params,e.paramsSerializer)},r.forEach(["delete","get","head","options"],(function(e){d.prototype[e]=function(t,n){return this.request(l(n||{},{method:e,url:t,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(e){function t(t){return function(n,r,o){return this.request(l(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}d.prototype[e]=t(),d.prototype[e+"Form"]=t(!0)})),e.exports=d},2648:(e,t,n)=>{"use strict";var r=n(4867);function o(e,t,n,r,o){Error.call(this),this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}r.inherits(o,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var a=o.prototype,i={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(e){i[e]={value:e}})),Object.defineProperties(o,i),Object.defineProperty(a,"isAxiosError",{value:!0}),o.from=function(e,t,n,i,l,s){var c=Object.create(a);return r.toFlatObject(e,c,(function(e){return e!==Error.prototype})),o.call(c,e.message,t,n,i,l),c.name=e.name,s&&Object.assign(c,s),c},e.exports=o},782:(e,t,n)=>{"use strict";var r=n(4867);function o(){this.handlers=[]}o.prototype.use=function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){r.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=o},4097:(e,t,n)=>{"use strict";var r=n(1793),o=n(7303);e.exports=function(e,t){return e&&!r(t)?o(e,t):t}},3572:(e,t,n)=>{"use strict";var r=n(4867),o=n(8527),a=n(6502),i=n(5546),l=n(644);function s(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new l}e.exports=function(e){return s(e),e.headers=e.headers||{},e.data=o.call(e,e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||i.adapter)(e).then((function(t){return s(e),t.data=o.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return a(t)||(s(e),t&&t.response&&(t.response.data=o.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},7185:(e,t,n)=>{"use strict";var r=n(4867);e.exports=function(e,t){t=t||{};var n={};function o(e,t){return r.isPlainObject(e)&&r.isPlainObject(t)?r.merge(e,t):r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function a(n){return r.isUndefined(t[n])?r.isUndefined(e[n])?void 0:o(void 0,e[n]):o(e[n],t[n])}function i(e){if(!r.isUndefined(t[e]))return o(void 0,t[e])}function l(n){return r.isUndefined(t[n])?r.isUndefined(e[n])?void 0:o(void 0,e[n]):o(void 0,t[n])}function s(n){return n in t?o(e[n],t[n]):n in e?o(void 0,e[n]):void 0}var c={url:i,method:i,data:i,baseURL:l,transformRequest:l,transformResponse:l,paramsSerializer:l,timeout:l,timeoutMessage:l,withCredentials:l,adapter:l,responseType:l,xsrfCookieName:l,xsrfHeaderName:l,onUploadProgress:l,onDownloadProgress:l,decompress:l,maxContentLength:l,maxBodyLength:l,beforeRedirect:l,transport:l,httpAgent:l,httpsAgent:l,cancelToken:l,socketPath:l,responseEncoding:l,validateStatus:s};return r.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=c[e]||a,o=t(e);r.isUndefined(o)&&t!==s||(n[e]=o)})),n}},6026:(e,t,n)=>{"use strict";var r=n(2648);e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(new r("Request failed with status code "+n.status,[r.ERR_BAD_REQUEST,r.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}},8527:(e,t,n)=>{"use strict";var r=n(4867),o=n(5546);e.exports=function(e,t,n){var a=this||o;return r.forEach(n,(function(n){e=n.call(a,e,t)})),e}},5546:(e,t,n)=>{"use strict";var r=n(4867),o=n(6016),a=n(2648),i=n(7874),l=n(7675),s={"Content-Type":"application/x-www-form-urlencoded"};function c(e,t){!r.isUndefined(e)&&r.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var u,d={transitional:i,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(u=n(5448)),u),transformRequest:[function(e,t){if(o(t,"Accept"),o(t,"Content-Type"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e))return e;if(r.isArrayBufferView(e))return e.buffer;if(r.isURLSearchParams(e))return c(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();var n,a=r.isObject(e),i=t&&t["Content-Type"];if((n=r.isFileList(e))||a&&"multipart/form-data"===i){var s=this.env&&this.env.FormData;return l(n?{"files[]":e}:e,s&&new s)}return a||"application/json"===i?(c(t,"application/json"),function(e,t,n){if(r.isString(e))try{return(0,JSON.parse)(e),r.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||d.transitional,n=t&&t.silentJSONParsing,o=t&&t.forcedJSONParsing,i=!n&&"json"===this.responseType;if(i||o&&r.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(i){if("SyntaxError"===e.name)throw a.from(e,a.ERR_BAD_RESPONSE,this,null,this.response);throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:n(1623)},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){d.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){d.headers[e]=r.merge(s)})),e.exports=d},7874:e=>{"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},7288:e=>{e.exports={version:"0.27.2"}},1849:e=>{"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},5327:(e,t,n)=>{"use strict";var r=n(4867);function o(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var a;if(n)a=n(t);else if(r.isURLSearchParams(t))a=t.toString();else{var i=[];r.forEach(t,(function(e,t){null!=e&&(r.isArray(e)?t+="[]":e=[e],r.forEach(e,(function(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),i.push(o(t)+"="+o(e))})))})),a=i.join("&")}if(a){var l=e.indexOf("#");-1!==l&&(e=e.slice(0,l)),e+=(-1===e.indexOf("?")?"?":"&")+a}return e}},7303:e=>{"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},4372:(e,t,n)=>{"use strict";var r=n(4867);e.exports=r.isStandardBrowserEnv()?{write:function(e,t,n,o,a,i){var l=[];l.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&l.push("expires="+new Date(n).toGMTString()),r.isString(o)&&l.push("path="+o),r.isString(a)&&l.push("domain="+a),!0===i&&l.push("secure"),document.cookie=l.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},1793:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}},6268:(e,t,n)=>{"use strict";var r=n(4867);e.exports=function(e){return r.isObject(e)&&!0===e.isAxiosError}},7985:(e,t,n)=>{"use strict";var r=n(4867);e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=o(window.location.href),function(t){var n=r.isString(t)?o(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},6016:(e,t,n)=>{"use strict";var r=n(4867);e.exports=function(e,t){r.forEach(e,(function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])}))}},1623:e=>{e.exports=null},4109:(e,t,n)=>{"use strict";var r=n(4867),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,a,i={};return e?(r.forEach(e.split("\n"),(function(e){if(a=e.indexOf(":"),t=r.trim(e.substr(0,a)).toLowerCase(),n=r.trim(e.substr(a+1)),t){if(i[t]&&o.indexOf(t)>=0)return;i[t]="set-cookie"===t?(i[t]?i[t]:[]).concat([n]):i[t]?i[t]+", "+n:n}})),i):i}},205:e=>{"use strict";e.exports=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}},8713:e=>{"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},7675:(e,t,n)=>{"use strict";var r=n(4867);e.exports=function(e,t){t=t||new FormData;var n=[];function o(e){return null===e?"":r.isDate(e)?e.toISOString():r.isArrayBuffer(e)||r.isTypedArray(e)?"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}return function e(a,i){if(r.isPlainObject(a)||r.isArray(a)){if(-1!==n.indexOf(a))throw Error("Circular reference detected in "+i);n.push(a),r.forEach(a,(function(n,a){if(!r.isUndefined(n)){var l,s=i?i+"."+a:a;if(n&&!i&&"object"==typeof n)if(r.endsWith(a,"{}"))n=JSON.stringify(n);else if(r.endsWith(a,"[]")&&(l=r.toArray(n)))return void l.forEach((function(e){!r.isUndefined(e)&&t.append(s,o(e))}));e(n,s)}})),n.pop()}else t.append(i,o(a))}(e),t}},4875:(e,t,n)=>{"use strict";var r=n(7288).version,o=n(2648),a={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){a[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));var i={};a.transitional=function(e,t,n){function a(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,l){if(!1===e)throw new o(a(r," has been removed"+(t?" in "+t:"")),o.ERR_DEPRECATED);return t&&!i[r]&&(i[r]=!0,console.warn(a(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,l)}},e.exports={assertOptions:function(e,t,n){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(e),a=r.length;a-- >0;){var i=r[a],l=t[i];if(l){var s=e[i],c=void 0===s||l(s,i,e);if(!0!==c)throw new o("option "+i+" must be "+c,o.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new o("Unknown option "+i,o.ERR_BAD_OPTION)}},validators:a}},4867:(e,t,n)=>{"use strict";var r,o=n(1849),a=Object.prototype.toString,i=(r=Object.create(null),function(e){var t=a.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())});function l(e){return e=e.toLowerCase(),function(t){return i(t)===e}}function s(e){return Array.isArray(e)}function c(e){return void 0===e}var u=l("ArrayBuffer");function d(e){return null!==e&&"object"==typeof e}function p(e){if("object"!==i(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var f=l("Date"),m=l("File"),h=l("Blob"),g=l("FileList");function b(e){return"[object Function]"===a.call(e)}var v=l("URLSearchParams");function y(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),s(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.call(null,e[o],o,e)}var w,x=(w="undefined"!=typeof Uint8Array&&Object.getPrototypeOf(Uint8Array),function(e){return w&&e instanceof w});e.exports={isArray:s,isArrayBuffer:u,isBuffer:function(e){return null!==e&&!c(e)&&null!==e.constructor&&!c(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){var t="[object FormData]";return e&&("function"==typeof FormData&&e instanceof FormData||a.call(e)===t||b(e.toString)&&e.toString()===t)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&u(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:d,isPlainObject:p,isUndefined:c,isDate:f,isFile:m,isBlob:h,isFunction:b,isStream:function(e){return d(e)&&b(e.pipe)},isURLSearchParams:v,isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&"undefined"!=typeof window&&"undefined"!=typeof document},forEach:y,merge:function e(){var t={};function n(n,r){p(t[r])&&p(n)?t[r]=e(t[r],n):p(n)?t[r]=e({},n):s(n)?t[r]=n.slice():t[r]=n}for(var r=0,o=arguments.length;r<o;r++)y(arguments[r],n);return t},extend:function(e,t,n){return y(t,(function(t,r){e[r]=n&&"function"==typeof t?o(t,n):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,n,r){e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,n&&Object.assign(e.prototype,n)},toFlatObject:function(e,t,n){var r,o,a,i={};t=t||{};do{for(o=(r=Object.getOwnPropertyNames(e)).length;o-- >0;)i[a=r[o]]||(t[a]=e[a],i[a]=!0);e=Object.getPrototypeOf(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:i,kindOfTest:l,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;var t=e.length;if(c(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},isTypedArray:x,isFileList:g}},6010:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},8679:(e,t,n)=>{"use strict";var r=n(1296),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<i.length;++g){var b=i[g];if(!(a[b]||r&&r[b]||h&&h[b]||l&&l[b])){var v=p(n,b);try{c(t,b,v)}catch(e){}}}}return t}},6103:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function x(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case l:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case g:case h:case s:return e;default:return t}}case o:return t}}}function E(e){return x(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=s,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return E(e)||x(e)===u},t.isConcurrentMode=E,t.isContextConsumer=function(e){return x(e)===c},t.isContextProvider=function(e){return x(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return x(e)===p},t.isFragment=function(e){return x(e)===a},t.isLazy=function(e){return x(e)===g},t.isMemo=function(e){return x(e)===h},t.isPortal=function(e){return x(e)===o},t.isProfiler=function(e){return x(e)===l},t.isStrictMode=function(e){return x(e)===i},t.isSuspense=function(e){return x(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===c||e.$$typeof===p||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=x},1296:(e,t,n)=>{"use strict";e.exports=n(6103)},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(3840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,l={};function s(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(l[e]=t,e=0;e<t.length;e++)i.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},m={};function h(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var g={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){g[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];g[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){g[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){g[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){g[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){g[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){g[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){g[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){g[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function y(e,t,n,r){var o=g.hasOwnProperty(t)?g[t]:null;(null!==o?0!==o.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!d.call(m,e)||!d.call(f,e)&&(p.test(e)?m[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,v);g[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,v);g[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,v);g[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),g.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=Symbol.for("react.element"),E=Symbol.for("react.portal"),k=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),S=Symbol.for("react.profiler"),O=Symbol.for("react.provider"),N=Symbol.for("react.context"),C=Symbol.for("react.forward_ref"),R=Symbol.for("react.suspense"),T=Symbol.for("react.suspense_list"),M=Symbol.for("react.memo"),P=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var A=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var L=Symbol.iterator;function Z(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=L&&e[L]||e["@@iterator"])?e:null}var I,j=Object.assign;function D(e){if(void 0===I)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);I=t&&t[1]||""}return"\n"+I+e}var z=!1;function F(e,t){if(!e||z)return"";z=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var r=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){r=e}e.call(t.prototype)}else{try{throw Error()}catch(e){r=e}e()}}catch(t){if(t&&r&&"string"==typeof t.stack){for(var o=t.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l]){var s="\n"+o[i].replace(" at new "," at ");return e.displayName&&s.includes("<anonymous>")&&(s=s.replace("<anonymous>",e.displayName)),s}}while(1<=i&&0<=l);break}}}finally{z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?D(e):""}function B(e){switch(e.tag){case 5:return D(e.type);case 16:return D("Lazy");case 13:return D("Suspense");case 19:return D("SuspenseList");case 0:case 2:case 15:return F(e.type,!1);case 11:return F(e.type.render,!1);case 1:return F(e.type,!0);default:return""}}function $(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case k:return"Fragment";case E:return"Portal";case S:return"Profiler";case _:return"StrictMode";case R:return"Suspense";case T:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case N:return(e.displayName||"Context")+".Consumer";case O:return(e._context.displayName||"Context")+".Provider";case C:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case M:return null!==(t=e.displayName||null)?t:$(e.type)||"Memo";case P:t=e._payload,e=e._init;try{return $(e(t))}catch(e){}}return null}function U(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return $(t);case 8:return t===_?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function W(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function H(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function q(e){e._valueTracker||(e._valueTracker=function(e){var t=H(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function V(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=H(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function K(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function G(e,t){var n=t.checked;return j({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Q(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=W(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function X(e,t){null!=(t=t.checked)&&y(e,"checked",t,!1)}function Y(e,t){X(e,t);var n=W(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,W(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&K(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+W(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return j({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(te(n)){if(1<n.length)throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:W(n)}}function ae(e,t){var n=W(t.value),r=W(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function le(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function se(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?le(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=["Webkit","ms","Moz","O"];function he(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function ge(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=he(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){me.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=j({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ve(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function ye(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Ee=null,ke=null,_e=null;function Se(e){if(e=wo(e)){if("function"!=typeof Ee)throw Error(a(280));var t=e.stateNode;t&&(t=Eo(t),Ee(e.stateNode,e.type,t))}}function Oe(e){ke?_e?_e.push(e):_e=[e]:ke=e}function Ne(){if(ke){var e=ke,t=_e;if(_e=ke=null,Se(e),t)for(e=0;e<t.length;e++)Se(t[e])}}function Ce(e,t){return e(t)}function Re(){}var Te=!1;function Me(e,t,n){if(Te)return e(t,n);Te=!0;try{return Ce(e,t,n)}finally{Te=!1,(null!==ke||null!==_e)&&(Re(),Ne())}}function Pe(e,t){var n=e.stateNode;if(null===n)return null;var r=Eo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var Ae=!1;if(u)try{var Le={};Object.defineProperty(Le,"passive",{get:function(){Ae=!0}}),window.addEventListener("test",Le,Le),window.removeEventListener("test",Le,Le)}catch(ue){Ae=!1}function Ze(e,t,n,r,o,a,i,l,s){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(e){this.onError(e)}}var Ie=!1,je=null,De=!1,ze=null,Fe={onError:function(e){Ie=!0,je=e}};function Be(e,t,n,r,o,a,i,l,s){Ie=!1,je=null,Ze.apply(Fe,arguments)}function $e(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ue(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&null!==(e=e.alternate)&&(t=e.memoizedState),null!==t)return t.dehydrated}return null}function We(e){if($e(e)!==e)throw Error(a(188))}function He(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=$e(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return We(o),e;if(i===r)return We(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=i;break}if(s===r){l=!0,r=o,n=i;break}s=s.sibling}if(!l){for(s=i.child;s;){if(s===n){l=!0,n=i,r=o;break}if(s===r){l=!0,r=i,n=o;break}s=s.sibling}if(!l)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e))?qe(e):null}function qe(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=qe(e);if(null!==t)return t;e=e.sibling}return null}var Ve=o.unstable_scheduleCallback,Ke=o.unstable_cancelCallback,Ge=o.unstable_shouldYield,Qe=o.unstable_requestPaint,Xe=o.unstable_now,Ye=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,rt=o.unstable_IdlePriority,ot=null,at=null,it=Math.clz32?Math.clz32:function(e){return 0==(e>>>=0)?32:31-(lt(e)/st|0)|0},lt=Math.log,st=Math.LN2,ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,i=268435455&n;if(0!==i){var l=i&~o;0!==l?r=dt(l):0!=(a&=i)&&(r=dt(a))}else 0!=(i=n&~o)?r=dt(i):0!==a&&(r=dt(a));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-it(t)),r|=e[n],t&=~o;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function mt(e){return 0!=(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function ht(){var e=ct;return 0==(4194240&(ct<<=1))&&(ct=64),e}function gt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function vt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var yt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var xt,Et,kt,_t,St,Ot=!1,Nt=[],Ct=null,Rt=null,Tt=null,Mt=new Map,Pt=new Map,At=[],Lt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Zt(e,t){switch(e){case"focusin":case"focusout":Ct=null;break;case"dragenter":case"dragleave":Rt=null;break;case"mouseover":case"mouseout":Tt=null;break;case"pointerover":case"pointerout":Mt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Pt.delete(t.pointerId)}}function It(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&null!==(t=wo(t))&&Et(t),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function jt(e){var t=yo(e.target);if(null!==t){var n=$e(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ue(n)))return e.blockedOn=t,void St(e.priority,(function(){kt(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Dt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Gt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=wo(n))&&Et(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function zt(e,t,n){Dt(e)&&n.delete(t)}function Ft(){Ot=!1,null!==Ct&&Dt(Ct)&&(Ct=null),null!==Rt&&Dt(Rt)&&(Rt=null),null!==Tt&&Dt(Tt)&&(Tt=null),Mt.forEach(zt),Pt.forEach(zt)}function Bt(e,t){e.blockedOn===t&&(e.blockedOn=null,Ot||(Ot=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Ft)))}function $t(e){function t(t){return Bt(t,e)}if(0<Nt.length){Bt(Nt[0],e);for(var n=1;n<Nt.length;n++){var r=Nt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==Ct&&Bt(Ct,e),null!==Rt&&Bt(Rt,e),null!==Tt&&Bt(Tt,e),Mt.forEach(t),Pt.forEach(t),n=0;n<At.length;n++)(r=At[n]).blockedOn===e&&(r.blockedOn=null);for(;0<At.length&&null===(n=At[0]).blockedOn;)jt(n),null===n.blockedOn&&At.shift()}var Ut=w.ReactCurrentBatchConfig,Wt=!0;function Ht(e,t,n,r){var o=yt,a=Ut.transition;Ut.transition=null;try{yt=1,Vt(e,t,n,r)}finally{yt=o,Ut.transition=a}}function qt(e,t,n,r){var o=yt,a=Ut.transition;Ut.transition=null;try{yt=4,Vt(e,t,n,r)}finally{yt=o,Ut.transition=a}}function Vt(e,t,n,r){if(Wt){var o=Gt(e,t,n,r);if(null===o)Wr(e,t,r,Kt,n),Zt(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return Ct=It(Ct,e,t,n,r,o),!0;case"dragenter":return Rt=It(Rt,e,t,n,r,o),!0;case"mouseover":return Tt=It(Tt,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return Mt.set(a,It(Mt.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,Pt.set(a,It(Pt.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(Zt(e,r),4&t&&-1<Lt.indexOf(e)){for(;null!==o;){var a=wo(o);if(null!==a&&xt(a),null===(a=Gt(e,t,n,r))&&Wr(e,t,r,Kt,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Wr(e,t,r,null,n)}}var Kt=null;function Gt(e,t,n,r){if(Kt=null,null!==(e=yo(e=xe(r))))if(null===(t=$e(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=Ue(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Kt=e,null}function Qt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Ye()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Xt=null,Yt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Yt,r=n.length,o="value"in Xt?Xt.value:Xt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function on(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return j(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var an,ln,sn,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=on(cn),dn=j({},cn,{view:0,detail:0}),pn=on(dn),fn=j({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Sn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==sn&&(sn&&"mousemove"===e.type?(an=e.screenX-sn.screenX,ln=e.screenY-sn.screenY):ln=an=0,sn=e),an)},movementY:function(e){return"movementY"in e?e.movementY:ln}}),mn=on(fn),hn=on(j({},fn,{dataTransfer:0})),gn=on(j({},dn,{relatedTarget:0})),bn=on(j({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),vn=j({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),yn=on(vn),wn=on(j({},cn,{data:0})),xn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},En={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},kn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function _n(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=kn[e])&&!!t[e]}function Sn(){return _n}var On=j({},dn,{key:function(e){if(e.key){var t=xn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?En[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Sn,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Nn=on(On),Cn=on(j({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Rn=on(j({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Sn})),Tn=on(j({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Mn=j({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Pn=on(Mn),An=[9,13,27,32],Ln=u&&"CompositionEvent"in window,Zn=null;u&&"documentMode"in document&&(Zn=document.documentMode);var In=u&&"TextEvent"in window&&!Zn,jn=u&&(!Ln||Zn&&8<Zn&&11>=Zn),Dn=String.fromCharCode(32),zn=!1;function Fn(e,t){switch(e){case"keyup":return-1!==An.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Bn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var $n=!1,Un={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Wn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Un[e.type]:"textarea"===t}function Hn(e,t,n,r){Oe(r),0<(t=qr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Vn=null;function Kn(e){Dr(e,0)}function Gn(e){if(V(xo(e)))return e}function Qn(e,t){if("change"===e)return t}var Xn=!1;if(u){var Yn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Yn=Jn}else Yn=!1;Xn=Yn&&(!document.documentMode||9<document.documentMode)}function tr(){qn&&(qn.detachEvent("onpropertychange",nr),Vn=qn=null)}function nr(e){if("value"===e.propertyName&&Gn(Vn)){var t=[];Hn(t,Vn,e,xe(e)),Me(Kn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Vn=n,(qn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Gn(Vn)}function ar(e,t){if("click"===e)return Gn(t)}function ir(e,t){if("input"===e||"change"===e)return Gn(t)}var lr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function sr(e,t){if(lr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!d.call(t,o)||!lr(e[o],t[o]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=K();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(e){n=!1}if(!n)break;t=K((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function mr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=ur(n,a);var i=ur(n,r);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var hr=u&&"documentMode"in document&&11>=document.documentMode,gr=null,br=null,vr=null,yr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;yr||null==gr||gr!==K(r)||(r="selectionStart"in(r=gr)&&fr(r)?{start:r.selectionStart,end:r.selectionEnd}:{anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},vr&&sr(vr,r)||(vr=r,0<(r=qr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=gr)))}function xr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Er={animationend:xr("Animation","AnimationEnd"),animationiteration:xr("Animation","AnimationIteration"),animationstart:xr("Animation","AnimationStart"),transitionend:xr("Transition","TransitionEnd")},kr={},_r={};function Sr(e){if(kr[e])return kr[e];if(!Er[e])return e;var t,n=Er[e];for(t in n)if(n.hasOwnProperty(t)&&t in _r)return kr[e]=n[t];return e}u&&(_r=document.createElement("div").style,"AnimationEvent"in window||(delete Er.animationend.animation,delete Er.animationiteration.animation,delete Er.animationstart.animation),"TransitionEvent"in window||delete Er.transitionend.transition);var Or=Sr("animationend"),Nr=Sr("animationiteration"),Cr=Sr("animationstart"),Rr=Sr("transitionend"),Tr=new Map,Mr="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Pr(e,t){Tr.set(e,t),s(t,[e])}for(var Ar=0;Ar<Mr.length;Ar++){var Lr=Mr[Ar];Pr(Lr.toLowerCase(),"on"+(Lr[0].toUpperCase()+Lr.slice(1)))}Pr(Or,"onAnimationEnd"),Pr(Nr,"onAnimationIteration"),Pr(Cr,"onAnimationStart"),Pr("dblclick","onDoubleClick"),Pr("focusin","onFocus"),Pr("focusout","onBlur"),Pr(Rr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),s("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),s("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),s("onBeforeInput",["compositionend","keypress","textInput","paste"]),s("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),s("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),s("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Zr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Ir=new Set("cancel close invalid load scroll toggle".split(" ").concat(Zr));function jr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,i,l,s,c){if(Be.apply(this,arguments),Ie){if(!Ie)throw Error(a(198));var u=je;Ie=!1,je=null,De||(De=!0,ze=u)}}(r,t,void 0,e),e.currentTarget=null}function Dr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,c=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;jr(o,l,c),a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,c=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;jr(o,l,c),a=s}}}if(De)throw e=ze,De=!1,ze=null,e}function zr(e,t){var n=t[go];void 0===n&&(n=t[go]=new Set);var r=e+"__bubble";n.has(r)||(Ur(t,e,2,!1),n.add(r))}function Fr(e,t,n){var r=0;t&&(r|=4),Ur(n,e,r,t)}var Br="_reactListening"+Math.random().toString(36).slice(2);function $r(e){if(!e[Br]){e[Br]=!0,i.forEach((function(t){"selectionchange"!==t&&(Ir.has(t)||Fr(t,!1,e),Fr(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[Br]||(t[Br]=!0,Fr("selectionchange",!1,t))}}function Ur(e,t,n,r){switch(Qt(t)){case 1:var o=Ht;break;case 4:o=qt;break;default:o=Vt}n=o.bind(null,t,n,e),o=void 0,!Ae||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Wr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=yo(l)))return;if(5===(s=i.tag)||6===s){r=a=i;continue e}l=l.parentNode}}r=r.return}Me((function(){var r=a,o=xe(n),i=[];e:{var l=Tr.get(e);if(void 0!==l){var s=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":s=Nn;break;case"focusin":c="focus",s=gn;break;case"focusout":c="blur",s=gn;break;case"beforeblur":case"afterblur":s=gn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=mn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=hn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=Rn;break;case Or:case Nr:case Cr:s=bn;break;case Rr:s=Tn;break;case"scroll":s=pn;break;case"wheel":s=Pn;break;case"copy":case"cut":case"paste":s=yn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=Cn}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==l?l+"Capture":null:l;u=[];for(var f,m=r;null!==m;){var h=(f=m).stateNode;if(5===f.tag&&null!==h&&(f=h,null!==p&&null!=(h=Pe(m,p))&&u.push(Hr(m,h,f))),d)break;m=m.return}0<u.length&&(l=new s(l,c,null,n,o),i.push({event:l,listeners:u}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!yo(c)&&!c[ho])&&(s||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(c=(c=n.relatedTarget||n.toElement)?yo(c):null)&&(c!==(d=$e(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(s=null,c=r),s!==c)){if(u=mn,h="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(u=Cn,h="onPointerLeave",p="onPointerEnter",m="pointer"),d=null==s?l:xo(s),f=null==c?l:xo(c),(l=new u(h,m+"leave",s,n,o)).target=d,l.relatedTarget=f,h=null,yo(o)===r&&((u=new u(p,m+"enter",c,n,o)).target=f,u.relatedTarget=d,h=u),d=h,s&&c)e:{for(p=c,m=0,f=u=s;f;f=Vr(f))m++;for(f=0,h=p;h;h=Vr(h))f++;for(;0<m-f;)u=Vr(u),m--;for(;0<f-m;)p=Vr(p),f--;for(;m--;){if(u===p||null!==p&&u===p.alternate)break e;u=Vr(u),p=Vr(p)}u=null}else u=null;null!==s&&Kr(i,l,s,u,!1),null!==c&&null!==d&&Kr(i,d,c,u,!0)}if("select"===(s=(l=r?xo(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Qn;else if(Wn(l))if(Xn)g=ir;else{g=or;var b=rr}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=ar);switch(g&&(g=g(e,r))?Hn(i,g,n,o):(b&&b(e,l,r),"focusout"===e&&(b=l._wrapperState)&&b.controlled&&"number"===l.type&&ee(l,"number",l.value)),b=r?xo(r):window,e){case"focusin":(Wn(b)||"true"===b.contentEditable)&&(gr=b,br=r,vr=null);break;case"focusout":vr=br=gr=null;break;case"mousedown":yr=!0;break;case"contextmenu":case"mouseup":case"dragend":yr=!1,wr(i,n,o);break;case"selectionchange":if(hr)break;case"keydown":case"keyup":wr(i,n,o)}var v;if(Ln)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else $n?Fn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(jn&&"ko"!==n.locale&&($n||"onCompositionStart"!==y?"onCompositionEnd"===y&&$n&&(v=en()):(Yt="value"in(Xt=o)?Xt.value:Xt.textContent,$n=!0)),0<(b=qr(r,y)).length&&(y=new wn(y,e,null,n,o),i.push({event:y,listeners:b}),(v||null!==(v=Bn(n)))&&(y.data=v))),(v=In?function(e,t){switch(e){case"compositionend":return Bn(t);case"keypress":return 32!==t.which?null:(zn=!0,Dn);case"textInput":return(e=t.data)===Dn&&zn?null:e;default:return null}}(e,n):function(e,t){if($n)return"compositionend"===e||!Ln&&Fn(e,t)?(e=en(),Jt=Yt=Xt=null,$n=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return jn&&"ko"!==t.locale?null:t.data}}(e,n))&&0<(r=qr(r,"onBeforeInput")).length&&(o=new wn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=v)}Dr(i,t)}))}function Hr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function qr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Pe(e,n))&&r.unshift(Hr(e,a,o)),null!=(a=Pe(e,t))&&r.push(Hr(e,a,o))),e=e.return}return r}function Vr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Kr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,c=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==c&&(l=c,o?null!=(s=Pe(n,a))&&i.unshift(Hr(n,s,l)):o||null!=(s=Pe(n,a))&&i.push(Hr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Gr=/\r\n?/g,Qr=/\u0000|\uFFFD/g;function Xr(e){return("string"==typeof e?e:""+e).replace(Gr,"\n").replace(Qr,"")}function Yr(e,t,n){if(t=Xr(t),Xr(e)!==t&&n)throw Error(a(425))}function Jr(){}var eo=null,to=null;function no(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ro="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ao="function"==typeof Promise?Promise:void 0,io="function"==typeof queueMicrotask?queueMicrotask:void 0!==ao?function(e){return ao.resolve(null).then(e).catch(lo)}:ro;function lo(e){setTimeout((function(){throw e}))}function so(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===r)return e.removeChild(o),void $t(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=o}while(n);$t(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,mo="__reactProps$"+po,ho="__reactContainer$"+po,go="__reactEvents$"+po,bo="__reactListeners$"+po,vo="__reactHandles$"+po;function yo(e){var t=e[fo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ho]||n[fo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=uo(e);null!==e;){if(n=e[fo])return n;e=uo(e)}return t}n=(e=n).parentNode}return null}function wo(e){return!(e=e[fo]||e[ho])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function xo(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function Eo(e){return e[mo]||null}var ko=[],_o=-1;function So(e){return{current:e}}function Oo(e){0>_o||(e.current=ko[_o],ko[_o]=null,_o--)}function No(e,t){_o++,ko[_o]=e.current,e.current=t}var Co={},Ro=So(Co),To=So(!1),Mo=Co;function Po(e,t){var n=e.type.contextTypes;if(!n)return Co;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Ao(e){return null!=e.childContextTypes}function Lo(){Oo(To),Oo(Ro)}function Zo(e,t,n){if(Ro.current!==Co)throw Error(a(168));No(Ro,t),No(To,n)}function Io(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,U(e)||"Unknown",o));return j({},n,r)}function jo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Co,Mo=Ro.current,No(Ro,e),No(To,To.current),!0}function Do(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=Io(e,t,Mo),r.__reactInternalMemoizedMergedChildContext=e,Oo(To),Oo(Ro),No(Ro,e)):Oo(To),No(To,n)}var zo=null,Fo=!1,Bo=!1;function $o(e){null===zo?zo=[e]:zo.push(e)}function Uo(){if(!Bo&&null!==zo){Bo=!0;var e=0,t=yt;try{var n=zo;for(yt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}zo=null,Fo=!1}catch(t){throw null!==zo&&(zo=zo.slice(e+1)),Ve(Je,Uo),t}finally{yt=t,Bo=!1}}return null}var Wo=[],Ho=0,qo=null,Vo=0,Ko=[],Go=0,Qo=null,Xo=1,Yo="";function Jo(e,t){Wo[Ho++]=Vo,Wo[Ho++]=qo,qo=e,Vo=t}function ea(e,t,n){Ko[Go++]=Xo,Ko[Go++]=Yo,Ko[Go++]=Qo,Qo=e;var r=Xo;e=Yo;var o=32-it(r)-1;r&=~(1<<o),n+=1;var a=32-it(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Xo=1<<32-it(t)+o|n<<o|r,Yo=a+e}else Xo=1<<a|n<<o|r,Yo=e}function ta(e){null!==e.return&&(Jo(e,1),ea(e,1,0))}function na(e){for(;e===qo;)qo=Wo[--Ho],Wo[Ho]=null,Vo=Wo[--Ho],Wo[Ho]=null;for(;e===Qo;)Qo=Ko[--Go],Ko[Go]=null,Yo=Ko[--Go],Ko[Go]=null,Xo=Ko[--Go],Ko[Go]=null}var ra=null,oa=null,aa=!1,ia=null;function la(e,t){var n=Mc(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function sa(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,ra=e,oa=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ra=e,oa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Qo?{id:Xo,overflow:Yo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Mc(18,null,null,0)).stateNode=t,n.return=e,e.child=n,ra=e,oa=null,!0);default:return!1}}function ca(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function ua(e){if(aa){var t=oa;if(t){var n=t;if(!sa(e,t)){if(ca(e))throw Error(a(418));t=co(n.nextSibling);var r=ra;t&&sa(e,t)?la(r,n):(e.flags=-4097&e.flags|2,aa=!1,ra=e)}}else{if(ca(e))throw Error(a(418));e.flags=-4097&e.flags|2,aa=!1,ra=e}}}function da(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ra=e}function pa(e){if(e!==ra)return!1;if(!aa)return da(e),aa=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!no(e.type,e.memoizedProps)),t&&(t=oa)){if(ca(e))throw fa(),Error(a(418));for(;t;)la(e,t),t=co(t.nextSibling)}if(da(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){oa=co(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}oa=null}}else oa=ra?co(e.stateNode.nextSibling):null;return!0}function fa(){for(var e=oa;e;)e=co(e.nextSibling)}function ma(){oa=ra=null,aa=!1}function ha(e){null===ia?ia=[e]:ia.push(e)}var ga=w.ReactCurrentBatchConfig;function ba(e,t){if(e&&e.defaultProps){for(var n in t=j({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var va=So(null),ya=null,wa=null,xa=null;function Ea(){xa=wa=ya=null}function ka(e){var t=va.current;Oo(va),e._currentValue=t}function _a(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Sa(e,t){ya=e,xa=wa=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(wl=!0),e.firstContext=null)}function Oa(e){var t=e._currentValue;if(xa!==e)if(e={context:e,memoizedValue:t,next:null},null===wa){if(null===ya)throw Error(a(308));wa=e,ya.dependencies={lanes:0,firstContext:e}}else wa=wa.next=e;return t}var Na=null;function Ca(e){null===Na?Na=[e]:Na.push(e)}function Ra(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,Ca(t)):(n.next=o.next,o.next=n),t.interleaved=n,Ta(e,r)}function Ta(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Ma=!1;function Pa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Aa(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function La(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Za(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&Cs)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Ta(e,n)}return null===(o=r.interleaved)?(t.next=t,Ca(r)):(t.next=o.next,o.next=t),r.interleaved=t,Ta(e,n)}function Ia(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,vt(e,n)}}function ja(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Da(e,t,n,r){var o=e.updateQueue;Ma=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,l=o.shared.pending;if(null!==l){o.shared.pending=null;var s=l,c=s.next;s.next=null,null===i?a=c:i.next=c,i=s;var u=e.alternate;null!==u&&(l=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===l?u.firstBaseUpdate=c:l.next=c,u.lastBaseUpdate=s)}if(null!==a){var d=o.baseState;for(i=0,u=c=s=null,l=a;;){var p=l.lane,f=l.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var m=e,h=l;switch(p=t,f=n,h.tag){case 1:if("function"==typeof(m=h.payload)){d=m.call(f,d,p);break e}d=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(p="function"==typeof(m=h.payload)?m.call(f,d,p):m))break e;d=j({},d,p);break e;case 2:Ma=!0}}null!==l.callback&&0!==l.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[l]:p.push(l))}else f={eventTime:f,lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},null===u?(c=u=f,s=d):u=u.next=f,i|=p;if(null===(l=l.next)){if(null===(l=o.shared.pending))break;l=(p=l).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(s=d),o.baseState=s,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Is|=i,e.lanes=i,e.memoizedState=d}}function za(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var Fa=(new r.Component).refs;function Ba(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:j({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var $a={isMounted:function(e){return!!(e=e._reactInternals)&&$e(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=ec(),o=tc(e),a=La(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=Za(e,a,o))&&(nc(t,e,o,r),Ia(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=ec(),o=tc(e),a=La(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=Za(e,a,o))&&(nc(t,e,o,r),Ia(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=ec(),r=tc(e),o=La(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=Za(e,o,r))&&(nc(t,e,r,n),Ia(t,e,r))}};function Ua(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!(t.prototype&&t.prototype.isPureReactComponent&&sr(n,r)&&sr(o,a))}function Wa(e,t,n){var r=!1,o=Co,a=t.contextType;return"object"==typeof a&&null!==a?a=Oa(a):(o=Ao(t)?Mo:Ro.current,a=(r=null!=(r=t.contextTypes))?Po(e,o):Co),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=$a,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function Ha(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&$a.enqueueReplaceState(t,t.state,null)}function qa(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=Fa,Pa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=Oa(a):(a=Ao(t)?Mo:Ro.current,o.context=Po(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(Ba(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&$a.enqueueReplaceState(o,o.state,null),Da(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function Va(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;t===Fa&&(t=o.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Ka(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Ga(e){return(0,e._init)(e._payload)}function Qa(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Ac(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function l(t){return e&&null===t.alternate&&(t.flags|=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=jc(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===k?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===P&&Ga(a)===t.type)?((r=o(t,n.props)).ref=Va(e,t,n),r.return=e,r):((r=Lc(n.type,n.key,n.props,null,e.mode,r)).ref=Va(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Dc(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Zc(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=jc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case x:return(n=Lc(t.type,t.key,t.props,null,e.mode,n)).ref=Va(e,null,t),n.return=e,n;case E:return(t=Dc(t,e.mode,n)).return=e,t;case P:return p(e,(0,t._init)(t._payload),n)}if(te(t)||Z(t))return(t=Zc(t,e.mode,n,null)).return=e,t;Ka(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case x:return n.key===o?c(e,t,n,r):null;case E:return n.key===o?u(e,t,n,r):null;case P:return f(e,t,(o=n._init)(n._payload),r)}if(te(n)||Z(n))return null!==o?null:d(e,t,n,r,null);Ka(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case x:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case E:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case P:return m(e,t,n,(0,r._init)(r._payload),o)}if(te(r)||Z(r))return d(t,e=e.get(n)||null,r,o,null);Ka(t,r)}return null}function h(o,a,l,s){for(var c=null,u=null,d=a,h=a=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var b=f(o,d,l[h],s);if(null===b){null===d&&(d=g);break}e&&d&&null===b.alternate&&t(o,d),a=i(b,a,h),null===u?c=b:u.sibling=b,u=b,d=g}if(h===l.length)return n(o,d),aa&&Jo(o,h),c;if(null===d){for(;h<l.length;h++)null!==(d=p(o,l[h],s))&&(a=i(d,a,h),null===u?c=d:u.sibling=d,u=d);return aa&&Jo(o,h),c}for(d=r(o,d);h<l.length;h++)null!==(g=m(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),a=i(g,a,h),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach((function(e){return t(o,e)})),aa&&Jo(o,h),c}function g(o,l,s,c){var u=Z(s);if("function"!=typeof u)throw Error(a(150));if(null==(s=u.call(s)))throw Error(a(151));for(var d=u=null,h=l,g=l=0,b=null,v=s.next();null!==h&&!v.done;g++,v=s.next()){h.index>g?(b=h,h=null):b=h.sibling;var y=f(o,h,v.value,c);if(null===y){null===h&&(h=b);break}e&&h&&null===y.alternate&&t(o,h),l=i(y,l,g),null===d?u=y:d.sibling=y,d=y,h=b}if(v.done)return n(o,h),aa&&Jo(o,g),u;if(null===h){for(;!v.done;g++,v=s.next())null!==(v=p(o,v.value,c))&&(l=i(v,l,g),null===d?u=v:d.sibling=v,d=v);return aa&&Jo(o,g),u}for(h=r(o,h);!v.done;g++,v=s.next())null!==(v=m(h,o,g,v.value,c))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),l=i(v,l,g),null===d?u=v:d.sibling=v,d=v);return e&&h.forEach((function(e){return t(o,e)})),aa&&Jo(o,g),u}return function e(r,a,i,s){if("object"==typeof i&&null!==i&&i.type===k&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case x:e:{for(var c=i.key,u=a;null!==u;){if(u.key===c){if((c=i.type)===k){if(7===u.tag){n(r,u.sibling),(a=o(u,i.props.children)).return=r,r=a;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===P&&Ga(c)===u.type){n(r,u.sibling),(a=o(u,i.props)).ref=Va(r,u,i),a.return=r,r=a;break e}n(r,u);break}t(r,u),u=u.sibling}i.type===k?((a=Zc(i.props.children,r.mode,s,i.key)).return=r,r=a):((s=Lc(i.type,i.key,i.props,null,r.mode,s)).ref=Va(r,a,i),s.return=r,r=s)}return l(r);case E:e:{for(u=i.key;null!==a;){if(a.key===u){if(4===a.tag&&a.stateNode.containerInfo===i.containerInfo&&a.stateNode.implementation===i.implementation){n(r,a.sibling),(a=o(a,i.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=Dc(i,r.mode,s)).return=r,r=a}return l(r);case P:return e(r,a,(u=i._init)(i._payload),s)}if(te(i))return h(r,a,i,s);if(Z(i))return g(r,a,i,s);Ka(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,i)).return=r,r=a):(n(r,a),(a=jc(i,r.mode,s)).return=r,r=a),l(r)):n(r,a)}}var Xa=Qa(!0),Ya=Qa(!1),Ja={},ei=So(Ja),ti=So(Ja),ni=So(Ja);function ri(e){if(e===Ja)throw Error(a(174));return e}function oi(e,t){switch(No(ni,t),No(ti,e),No(ei,Ja),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:se(null,"");break;default:t=se(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Oo(ei),No(ei,t)}function ai(){Oo(ei),Oo(ti),Oo(ni)}function ii(e){ri(ni.current);var t=ri(ei.current),n=se(t,e.type);t!==n&&(No(ti,e),No(ei,n))}function li(e){ti.current===e&&(Oo(ei),Oo(ti))}var si=So(0);function ci(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ui=[];function di(){for(var e=0;e<ui.length;e++)ui[e]._workInProgressVersionPrimary=null;ui.length=0}var pi=w.ReactCurrentDispatcher,fi=w.ReactCurrentBatchConfig,mi=0,hi=null,gi=null,bi=null,vi=!1,yi=!1,wi=0,xi=0;function Ei(){throw Error(a(321))}function ki(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!lr(e[n],t[n]))return!1;return!0}function _i(e,t,n,r,o,i){if(mi=i,hi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,pi.current=null===e||null===e.memoizedState?ll:sl,e=n(r,o),yi){i=0;do{if(yi=!1,wi=0,25<=i)throw Error(a(301));i+=1,bi=gi=null,t.updateQueue=null,pi.current=cl,e=n(r,o)}while(yi)}if(pi.current=il,t=null!==gi&&null!==gi.next,mi=0,bi=gi=hi=null,vi=!1,t)throw Error(a(300));return e}function Si(){var e=0!==wi;return wi=0,e}function Oi(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===bi?hi.memoizedState=bi=e:bi=bi.next=e,bi}function Ni(){if(null===gi){var e=hi.alternate;e=null!==e?e.memoizedState:null}else e=gi.next;var t=null===bi?hi.memoizedState:bi.next;if(null!==t)bi=t,gi=e;else{if(null===e)throw Error(a(310));e={memoizedState:(gi=e).memoizedState,baseState:gi.baseState,baseQueue:gi.baseQueue,queue:gi.queue,next:null},null===bi?hi.memoizedState=bi=e:bi=bi.next=e}return bi}function Ci(e,t){return"function"==typeof t?t(e):t}function Ri(e){var t=Ni(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=gi,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var l=o.next;o.next=i.next,i.next=l}r.baseQueue=o=i,n.pending=null}if(null!==o){i=o.next,r=r.baseState;var s=l=null,c=null,u=i;do{var d=u.lane;if((mi&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(s=c=p,l=r):c=c.next=p,hi.lanes|=d,Is|=d}u=u.next}while(null!==u&&u!==i);null===c?l=r:c.next=s,lr(r,t.memoizedState)||(wl=!0),t.memoizedState=r,t.baseState=l,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do{i=o.lane,hi.lanes|=i,Is|=i,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Ti(e){var t=Ni(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{i=e(i,l.action),l=l.next}while(l!==o);lr(i,t.memoizedState)||(wl=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Mi(){}function Pi(e,t){var n=hi,r=Ni(),o=t(),i=!lr(r.memoizedState,o);if(i&&(r.memoizedState=o,wl=!0),r=r.queue,Wi(Zi.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==bi&&1&bi.memoizedState.tag){if(n.flags|=2048,zi(9,Li.bind(null,n,r,o,t),void 0,null),null===Rs)throw Error(a(349));0!=(30&mi)||Ai(n,t,o)}return o}function Ai(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=hi.updateQueue)?(t={lastEffect:null,stores:null},hi.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Li(e,t,n,r){t.value=n,t.getSnapshot=r,Ii(t)&&ji(e)}function Zi(e,t,n){return n((function(){Ii(t)&&ji(e)}))}function Ii(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!lr(e,n)}catch(e){return!0}}function ji(e){var t=Ta(e,1);null!==t&&nc(t,e,1,-1)}function Di(e){var t=Oi();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ci,lastRenderedState:e},t.queue=e,e=e.dispatch=nl.bind(null,hi,e),[t.memoizedState,e]}function zi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=hi.updateQueue)?(t={lastEffect:null,stores:null},hi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function Fi(){return Ni().memoizedState}function Bi(e,t,n,r){var o=Oi();hi.flags|=e,o.memoizedState=zi(1|t,n,void 0,void 0===r?null:r)}function $i(e,t,n,r){var o=Ni();r=void 0===r?null:r;var a=void 0;if(null!==gi){var i=gi.memoizedState;if(a=i.destroy,null!==r&&ki(r,i.deps))return void(o.memoizedState=zi(t,n,a,r))}hi.flags|=e,o.memoizedState=zi(1|t,n,a,r)}function Ui(e,t){return Bi(8390656,8,e,t)}function Wi(e,t){return $i(2048,8,e,t)}function Hi(e,t){return $i(4,2,e,t)}function qi(e,t){return $i(4,4,e,t)}function Vi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Ki(e,t,n){return n=null!=n?n.concat([e]):null,$i(4,4,Vi.bind(null,t,e),n)}function Gi(){}function Qi(e,t){var n=Ni();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ki(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Xi(e,t){var n=Ni();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ki(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Yi(e,t,n){return 0==(21&mi)?(e.baseState&&(e.baseState=!1,wl=!0),e.memoizedState=n):(lr(n,t)||(n=ht(),hi.lanes|=n,Is|=n,e.baseState=!0),t)}function Ji(e,t){var n=yt;yt=0!==n&&4>n?n:4,e(!0);var r=fi.transition;fi.transition={};try{e(!1),t()}finally{yt=n,fi.transition=r}}function el(){return Ni().memoizedState}function tl(e,t,n){var r=tc(e);n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},rl(e)?ol(t,n):null!==(n=Ra(e,t,n,r))&&(nc(n,e,r,ec()),al(n,t,r))}function nl(e,t,n){var r=tc(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(rl(e))ol(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,l=a(i,n);if(o.hasEagerState=!0,o.eagerState=l,lr(l,i)){var s=t.interleaved;return null===s?(o.next=o,Ca(t)):(o.next=s.next,s.next=o),void(t.interleaved=o)}}catch(e){}null!==(n=Ra(e,t,o,r))&&(nc(n,e,r,o=ec()),al(n,t,r))}}function rl(e){var t=e.alternate;return e===hi||null!==t&&t===hi}function ol(e,t){yi=vi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function al(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,vt(e,n)}}var il={readContext:Oa,useCallback:Ei,useContext:Ei,useEffect:Ei,useImperativeHandle:Ei,useInsertionEffect:Ei,useLayoutEffect:Ei,useMemo:Ei,useReducer:Ei,useRef:Ei,useState:Ei,useDebugValue:Ei,useDeferredValue:Ei,useTransition:Ei,useMutableSource:Ei,useSyncExternalStore:Ei,useId:Ei,unstable_isNewReconciler:!1},ll={readContext:Oa,useCallback:function(e,t){return Oi().memoizedState=[e,void 0===t?null:t],e},useContext:Oa,useEffect:Ui,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Bi(4194308,4,Vi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Bi(4194308,4,e,t)},useInsertionEffect:function(e,t){return Bi(4,2,e,t)},useMemo:function(e,t){var n=Oi();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Oi();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=tl.bind(null,hi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Oi().memoizedState=e},useState:Di,useDebugValue:Gi,useDeferredValue:function(e){return Oi().memoizedState=e},useTransition:function(){var e=Di(!1),t=e[0];return e=Ji.bind(null,e[1]),Oi().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=hi,o=Oi();if(aa){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===Rs)throw Error(a(349));0!=(30&mi)||Ai(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Ui(Zi.bind(null,r,i,e),[e]),r.flags|=2048,zi(9,Li.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Oi(),t=Rs.identifierPrefix;if(aa){var n=Yo;t=":"+t+"R"+(n=(Xo&~(1<<32-it(Xo)-1)).toString(32)+n),0<(n=wi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=xi++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},sl={readContext:Oa,useCallback:Qi,useContext:Oa,useEffect:Wi,useImperativeHandle:Ki,useInsertionEffect:Hi,useLayoutEffect:qi,useMemo:Xi,useReducer:Ri,useRef:Fi,useState:function(){return Ri(Ci)},useDebugValue:Gi,useDeferredValue:function(e){return Yi(Ni(),gi.memoizedState,e)},useTransition:function(){return[Ri(Ci)[0],Ni().memoizedState]},useMutableSource:Mi,useSyncExternalStore:Pi,useId:el,unstable_isNewReconciler:!1},cl={readContext:Oa,useCallback:Qi,useContext:Oa,useEffect:Wi,useImperativeHandle:Ki,useInsertionEffect:Hi,useLayoutEffect:qi,useMemo:Xi,useReducer:Ti,useRef:Fi,useState:function(){return Ti(Ci)},useDebugValue:Gi,useDeferredValue:function(e){var t=Ni();return null===gi?t.memoizedState=e:Yi(t,gi.memoizedState,e)},useTransition:function(){return[Ti(Ci)[0],Ni().memoizedState]},useMutableSource:Mi,useSyncExternalStore:Pi,useId:el,unstable_isNewReconciler:!1};function ul(e,t){try{var n="",r=t;do{n+=B(r),r=r.return}while(r);var o=n}catch(e){o="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:t,stack:o,digest:null}}function dl(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function pl(e,t){try{console.error(t.value)}catch(e){setTimeout((function(){throw e}))}}var fl="function"==typeof WeakMap?WeakMap:Map;function ml(e,t,n){(n=La(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Ws||(Ws=!0,Hs=r),pl(0,t)},n}function hl(e,t,n){(n=La(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){pl(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){pl(0,t),"function"!=typeof r&&(null===qs?qs=new Set([this]):qs.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function gl(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new fl;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=Sc.bind(null,e,t,n),t.then(e,e))}function bl(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function vl(e,t,n,r,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=La(-1,1)).tag=2,Za(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var yl=w.ReactCurrentOwner,wl=!1;function xl(e,t,n,r){t.child=null===e?Ya(t,null,n,r):Xa(t,e.child,n,r)}function El(e,t,n,r,o){n=n.render;var a=t.ref;return Sa(t,o),r=_i(e,t,n,r,a,o),n=Si(),null===e||wl?(aa&&n&&ta(t),t.flags|=1,xl(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Wl(e,t,o))}function kl(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Pc(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Lc(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,_l(e,t,a,r,o))}if(a=e.child,0==(e.lanes&o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:sr)(i,r)&&e.ref===t.ref)return Wl(e,t,o)}return t.flags|=1,(e=Ac(a,r)).ref=t.ref,e.return=t,t.child=e}function _l(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(sr(a,r)&&e.ref===t.ref){if(wl=!1,t.pendingProps=r=a,0==(e.lanes&o))return t.lanes=e.lanes,Wl(e,t,o);0!=(131072&e.flags)&&(wl=!0)}}return Nl(e,t,n,r,o)}function Sl(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},No(As,Ps),Ps|=n;else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,No(As,Ps),Ps|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,No(As,Ps),Ps|=r}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,No(As,Ps),Ps|=r;return xl(e,t,o,n),t.child}function Ol(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Nl(e,t,n,r,o){var a=Ao(n)?Mo:Ro.current;return a=Po(t,a),Sa(t,o),n=_i(e,t,n,r,a,o),r=Si(),null===e||wl?(aa&&r&&ta(t),t.flags|=1,xl(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Wl(e,t,o))}function Cl(e,t,n,r,o){if(Ao(n)){var a=!0;jo(t)}else a=!1;if(Sa(t,o),null===t.stateNode)Ul(e,t),Wa(t,n,r),qa(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,c=n.contextType;c="object"==typeof c&&null!==c?Oa(c):Po(t,c=Ao(n)?Mo:Ro.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==c)&&Ha(t,i,r,c),Ma=!1;var p=t.memoizedState;i.state=p,Da(t,r,i,o),s=t.memoizedState,l!==r||p!==s||To.current||Ma?("function"==typeof u&&(Ba(t,n,u,r),s=t.memoizedState),(l=Ma||Ua(t,n,l,r,p,s,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=c,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Aa(e,t),l=t.memoizedProps,c=t.type===t.elementType?l:ba(t.type,l),i.props=c,d=t.pendingProps,p=i.context,s="object"==typeof(s=n.contextType)&&null!==s?Oa(s):Po(t,s=Ao(n)?Mo:Ro.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||p!==s)&&Ha(t,i,r,s),Ma=!1,p=t.memoizedState,i.state=p,Da(t,r,i,o);var m=t.memoizedState;l!==d||p!==m||To.current||Ma?("function"==typeof f&&(Ba(t,n,f,r),m=t.memoizedState),(c=Ma||Ua(t,n,c,r,p,m,s)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=c):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return Rl(e,t,n,r,a,o)}function Rl(e,t,n,r,o,a){Ol(e,t);var i=0!=(128&t.flags);if(!r&&!i)return o&&Do(t,n,!1),Wl(e,t,a);r=t.stateNode,yl.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Xa(t,e.child,null,a),t.child=Xa(t,null,l,a)):xl(e,t,l,a),t.memoizedState=r.state,o&&Do(t,n,!0),t.child}function Tl(e){var t=e.stateNode;t.pendingContext?Zo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Zo(0,t.context,!1),oi(e,t.containerInfo)}function Ml(e,t,n,r,o){return ma(),ha(o),t.flags|=256,xl(e,t,n,r),t.child}var Pl,Al,Ll,Zl={dehydrated:null,treeContext:null,retryLane:0};function Il(e){return{baseLanes:e,cachePool:null,transitions:null}}function jl(e,t,n){var r,o=t.pendingProps,i=si.current,l=!1,s=0!=(128&t.flags);if((r=s)||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(l=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),No(si,1&i),null===e)return ua(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(s=o.children,e=o.fallback,l?(o=t.mode,l=t.child,s={mode:"hidden",children:s},0==(1&o)&&null!==l?(l.childLanes=0,l.pendingProps=s):l=Ic(s,o,0,null),e=Zc(e,o,n,null),l.return=t,e.return=t,l.sibling=e,t.child=l,t.child.memoizedState=Il(n),t.memoizedState=Zl,e):Dl(t,s));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,o,i,l){if(n)return 256&t.flags?(t.flags&=-257,zl(e,t,l,r=dl(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,o=t.mode,r=Ic({mode:"visible",children:r.children},o,0,null),(i=Zc(i,o,l,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&Xa(t,e.child,null,l),t.child.memoizedState=Il(l),t.memoizedState=Zl,i);if(0==(1&t.mode))return zl(e,t,l,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var s=r.dgst;return r=s,zl(e,t,l,r=dl(i=Error(a(419)),r,void 0))}if(s=0!=(l&e.childLanes),wl||s){if(null!==(r=Rs)){switch(l&-l){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(r.suspendedLanes|l))?0:o)&&o!==i.retryLane&&(i.retryLane=o,Ta(e,o),nc(r,e,o,-1))}return hc(),zl(e,t,l,r=dl(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Nc.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,oa=co(o.nextSibling),ra=t,aa=!0,ia=null,null!==e&&(Ko[Go++]=Xo,Ko[Go++]=Yo,Ko[Go++]=Qo,Xo=e.id,Yo=e.overflow,Qo=t),(t=Dl(t,r.children)).flags|=4096,t)}(e,t,s,o,r,i,n);if(l){l=o.fallback,s=t.mode,r=(i=e.child).sibling;var c={mode:"hidden",children:o.children};return 0==(1&s)&&t.child!==i?((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null):(o=Ac(i,c)).subtreeFlags=14680064&i.subtreeFlags,null!==r?l=Ac(r,l):(l=Zc(l,s,n,null)).flags|=2,l.return=t,o.return=t,o.sibling=l,t.child=o,o=l,l=t.child,s=null===(s=e.child.memoizedState)?Il(n):{baseLanes:s.baseLanes|n,cachePool:null,transitions:s.transitions},l.memoizedState=s,l.childLanes=e.childLanes&~n,t.memoizedState=Zl,o}return e=(l=e.child).sibling,o=Ac(l,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Dl(e,t){return(t=Ic({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function zl(e,t,n,r){return null!==r&&ha(r),Xa(t,e.child,null,n),(e=Dl(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Fl(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),_a(e.return,t,n)}function Bl(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function $l(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(xl(e,t,r.children,n),0!=(2&(r=si.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Fl(e,n,t);else if(19===e.tag)Fl(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(No(si,r),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ci(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),Bl(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ci(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}Bl(t,!0,n,null,a);break;case"together":Bl(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Ul(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Wl(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Is|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Ac(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Ac(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Hl(e,t){if(!aa)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ql(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Vl(e,t,n){var r=t.pendingProps;switch(na(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return ql(t),null;case 1:case 17:return Ao(t.type)&&Lo(),ql(t),null;case 3:return r=t.stateNode,ai(),Oo(To),Oo(Ro),di(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==ia&&(ic(ia),ia=null))),ql(t),null;case 5:li(t);var o=ri(ni.current);if(n=t.type,null!==e&&null!=t.stateNode)Al(e,t,n,r),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return ql(t),null}if(e=ri(ei.current),pa(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[fo]=t,r[mo]=i,e=0!=(1&t.mode),n){case"dialog":zr("cancel",r),zr("close",r);break;case"iframe":case"object":case"embed":zr("load",r);break;case"video":case"audio":for(o=0;o<Zr.length;o++)zr(Zr[o],r);break;case"source":zr("error",r);break;case"img":case"image":case"link":zr("error",r),zr("load",r);break;case"details":zr("toggle",r);break;case"input":Q(r,i),zr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},zr("invalid",r);break;case"textarea":oe(r,i),zr("invalid",r)}for(var s in ve(n,i),o=null,i)if(i.hasOwnProperty(s)){var c=i[s];"children"===s?"string"==typeof c?r.textContent!==c&&(!0!==i.suppressHydrationWarning&&Yr(r.textContent,c,e),o=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==i.suppressHydrationWarning&&Yr(r.textContent,c,e),o=["children",""+c]):l.hasOwnProperty(s)&&null!=c&&"onScroll"===s&&zr("scroll",r)}switch(n){case"input":q(r),J(r,i,!0);break;case"textarea":q(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=Jr)}r=o,t.updateQueue=r,null!==r&&(t.flags|=4)}else{s=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=le(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=s.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=s.createElement(n,{is:r.is}):(e=s.createElement(n),"select"===n&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,n),e[fo]=t,e[mo]=r,Pl(e,t),t.stateNode=e;e:{switch(s=ye(n,r),n){case"dialog":zr("cancel",e),zr("close",e),o=r;break;case"iframe":case"object":case"embed":zr("load",e),o=r;break;case"video":case"audio":for(o=0;o<Zr.length;o++)zr(Zr[o],e);o=r;break;case"source":zr("error",e),o=r;break;case"img":case"image":case"link":zr("error",e),zr("load",e),o=r;break;case"details":zr("toggle",e),o=r;break;case"input":Q(e,r),o=G(e,r),zr("invalid",e);break;case"option":default:o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=j({},r,{value:void 0}),zr("invalid",e);break;case"textarea":oe(e,r),o=re(e,r),zr("invalid",e)}for(i in ve(n,o),c=o)if(c.hasOwnProperty(i)){var u=c[i];"style"===i?ge(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===i?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(l.hasOwnProperty(i)?null!=u&&"onScroll"===i&&zr("scroll",e):null!=u&&y(e,i,u,s))}switch(n){case"input":q(e),J(e,r,!1);break;case"textarea":q(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+W(r.value));break;case"select":e.multiple=!!r.multiple,null!=(i=r.value)?ne(e,!!r.multiple,i,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return ql(t),null;case 6:if(e&&null!=t.stateNode)Ll(0,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));if(n=ri(ni.current),ri(ei.current),pa(t)){if(r=t.stateNode,n=t.memoizedProps,r[fo]=t,(i=r.nodeValue!==n)&&null!==(e=ra))switch(e.tag){case 3:Yr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Yr(r.nodeValue,n,0!=(1&e.mode))}i&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[fo]=t,t.stateNode=r}return ql(t),null;case 13:if(Oo(si),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(aa&&null!==oa&&0!=(1&t.mode)&&0==(128&t.flags))fa(),ma(),t.flags|=98560,i=!1;else if(i=pa(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(a(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(a(317));i[fo]=t}else ma(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;ql(t),i=!1}else null!==ia&&(ic(ia),ia=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!=(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&si.current)?0===Ls&&(Ls=3):hc())),null!==t.updateQueue&&(t.flags|=4),ql(t),null);case 4:return ai(),null===e&&$r(t.stateNode.containerInfo),ql(t),null;case 10:return ka(t.type._context),ql(t),null;case 19:if(Oo(si),null===(i=t.memoizedState))return ql(t),null;if(r=0!=(128&t.flags),null===(s=i.rendering))if(r)Hl(i,!1);else{if(0!==Ls||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(s=ci(e))){for(t.flags|=128,Hl(i,!1),null!==(r=s.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(i=n).flags&=14680066,null===(s=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=s.childLanes,i.lanes=s.lanes,i.child=s.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=s.memoizedProps,i.memoizedState=s.memoizedState,i.updateQueue=s.updateQueue,i.type=s.type,e=s.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return No(si,1&si.current|2),t.child}e=e.sibling}null!==i.tail&&Xe()>$s&&(t.flags|=128,r=!0,Hl(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ci(s))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Hl(i,!0),null===i.tail&&"hidden"===i.tailMode&&!s.alternate&&!aa)return ql(t),null}else 2*Xe()-i.renderingStartTime>$s&&1073741824!==n&&(t.flags|=128,r=!0,Hl(i,!1),t.lanes=4194304);i.isBackwards?(s.sibling=t.child,t.child=s):(null!==(n=i.last)?n.sibling=s:t.child=s,i.last=s)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Xe(),t.sibling=null,n=si.current,No(si,r?1&n|2:1&n),t):(ql(t),null);case 22:case 23:return dc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Ps)&&(ql(t),6&t.subtreeFlags&&(t.flags|=8192)):ql(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Kl(e,t){switch(na(t),t.tag){case 1:return Ao(t.type)&&Lo(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ai(),Oo(To),Oo(Ro),di(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return li(t),null;case 13:if(Oo(si),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ma()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Oo(si),null;case 4:return ai(),null;case 10:return ka(t.type._context),null;case 22:case 23:return dc(),null;default:return null}}Pl=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Al=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,ri(ei.current);var a,i=null;switch(n){case"input":o=G(e,o),r=G(e,r),i=[];break;case"select":o=j({},o,{value:void 0}),r=j({},r,{value:void 0}),i=[];break;case"textarea":o=re(e,o),r=re(e,r),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ve(n,r),n=null,o)if(!r.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var s=o[u];for(a in s)s.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(l.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in r){var c=r[u];if(s=null!=o?o[u]:void 0,r.hasOwnProperty(u)&&c!==s&&(null!=c||null!=s))if("style"===u)if(s){for(a in s)!s.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in c)c.hasOwnProperty(a)&&s[a]!==c[a]&&(n||(n={}),n[a]=c[a])}else n||(i||(i=[]),i.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,s=s?s.__html:void 0,null!=c&&s!==c&&(i=i||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(i=i||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(l.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&zr("scroll",e),i||s===c||(i=[])):(i=i||[]).push(u,c))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Ll=function(e,t,n,r){n!==r&&(t.flags|=4)};var Gl=!1,Ql=!1,Xl="function"==typeof WeakSet?WeakSet:Set,Yl=null;function Jl(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(n){_c(e,t,n)}else n.current=null}function es(e,t,n){try{n()}catch(n){_c(e,t,n)}}var ts=!1;function ns(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&es(t,n,a)}o=o.next}while(o!==r)}}function rs(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function os(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function as(e){var t=e.alternate;null!==t&&(e.alternate=null,as(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&null!==(t=e.stateNode)&&(delete t[fo],delete t[mo],delete t[go],delete t[bo],delete t[vo]),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function is(e){return 5===e.tag||3===e.tag||4===e.tag}function ls(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||is(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function ss(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(ss(e,t,n),e=e.sibling;null!==e;)ss(e,t,n),e=e.sibling}function cs(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(cs(e,t,n),e=e.sibling;null!==e;)cs(e,t,n),e=e.sibling}var us=null,ds=!1;function ps(e,t,n){for(n=n.child;null!==n;)fs(e,t,n),n=n.sibling}function fs(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(e){}switch(n.tag){case 5:Ql||Jl(n,t);case 6:var r=us,o=ds;us=null,ps(e,t,n),ds=o,null!==(us=r)&&(ds?(e=us,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):us.removeChild(n.stateNode));break;case 18:null!==us&&(ds?(e=us,n=n.stateNode,8===e.nodeType?so(e.parentNode,n):1===e.nodeType&&so(e,n),$t(e)):so(us,n.stateNode));break;case 4:r=us,o=ds,us=n.stateNode.containerInfo,ds=!0,ps(e,t,n),us=r,ds=o;break;case 0:case 11:case 14:case 15:if(!Ql&&null!==(r=n.updateQueue)&&null!==(r=r.lastEffect)){o=r=r.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(0!=(2&a)||0!=(4&a))&&es(n,t,i),o=o.next}while(o!==r)}ps(e,t,n);break;case 1:if(!Ql&&(Jl(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(e){_c(n,t,e)}ps(e,t,n);break;case 21:ps(e,t,n);break;case 22:1&n.mode?(Ql=(r=Ql)||null!==n.memoizedState,ps(e,t,n),Ql=r):ps(e,t,n);break;default:ps(e,t,n)}}function ms(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Xl),t.forEach((function(t){var r=Cc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function hs(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var i=e,l=t,s=l;e:for(;null!==s;){switch(s.tag){case 5:us=s.stateNode,ds=!1;break e;case 3:case 4:us=s.stateNode.containerInfo,ds=!0;break e}s=s.return}if(null===us)throw Error(a(160));fs(i,l,o),us=null,ds=!1;var c=o.alternate;null!==c&&(c.return=null),o.return=null}catch(e){_c(o,t,e)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)gs(t,e),t=t.sibling}function gs(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(hs(t,e),bs(e),4&r){try{ns(3,e,e.return),rs(3,e)}catch(t){_c(e,e.return,t)}try{ns(5,e,e.return)}catch(t){_c(e,e.return,t)}}break;case 1:hs(t,e),bs(e),512&r&&null!==n&&Jl(n,n.return);break;case 5:if(hs(t,e),bs(e),512&r&&null!==n&&Jl(n,n.return),32&e.flags){var o=e.stateNode;try{pe(o,"")}catch(t){_c(e,e.return,t)}}if(4&r&&null!=(o=e.stateNode)){var i=e.memoizedProps,l=null!==n?n.memoizedProps:i,s=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===s&&"radio"===i.type&&null!=i.name&&X(o,i),ye(s,l);var u=ye(s,i);for(l=0;l<c.length;l+=2){var d=c[l],p=c[l+1];"style"===d?ge(o,p):"dangerouslySetInnerHTML"===d?de(o,p):"children"===d?pe(o,p):y(o,d,p,u)}switch(s){case"input":Y(o,i);break;case"textarea":ae(o,i);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var m=i.value;null!=m?ne(o,!!i.multiple,m,!1):f!==!!i.multiple&&(null!=i.defaultValue?ne(o,!!i.multiple,i.defaultValue,!0):ne(o,!!i.multiple,i.multiple?[]:"",!1))}o[mo]=i}catch(t){_c(e,e.return,t)}}break;case 6:if(hs(t,e),bs(e),4&r){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(t){_c(e,e.return,t)}}break;case 3:if(hs(t,e),bs(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{$t(t.containerInfo)}catch(t){_c(e,e.return,t)}break;case 4:default:hs(t,e),bs(e);break;case 13:hs(t,e),bs(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||(Bs=Xe())),4&r&&ms(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Ql=(u=Ql)||d,hs(t,e),Ql=u):hs(t,e),bs(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&0!=(1&e.mode))for(Yl=e,d=e.child;null!==d;){for(p=Yl=d;null!==Yl;){switch(m=(f=Yl).child,f.tag){case 0:case 11:case 14:case 15:ns(4,f,f.return);break;case 1:Jl(f,f.return);var h=f.stateNode;if("function"==typeof h.componentWillUnmount){r=f,n=f.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(e){_c(r,n,e)}}break;case 5:Jl(f,f.return);break;case 22:if(null!==f.memoizedState){xs(p);continue}}null!==m?(m.return=f,Yl=m):xs(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{o=p.stateNode,u?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(s=p.stateNode,l=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,s.style.display=he("display",l))}catch(t){_c(e,e.return,t)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(t){_c(e,e.return,t)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:hs(t,e),bs(e),4&r&&ms(e);case 21:}}function bs(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(is(n)){var r=n;break e}n=n.return}throw Error(a(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(pe(o,""),r.flags&=-33),cs(e,ls(e),o);break;case 3:case 4:var i=r.stateNode.containerInfo;ss(e,ls(e),i);break;default:throw Error(a(161))}}catch(t){_c(e,e.return,t)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vs(e,t,n){Yl=e,ys(e,t,n)}function ys(e,t,n){for(var r=0!=(1&e.mode);null!==Yl;){var o=Yl,a=o.child;if(22===o.tag&&r){var i=null!==o.memoizedState||Gl;if(!i){var l=o.alternate,s=null!==l&&null!==l.memoizedState||Ql;l=Gl;var c=Ql;if(Gl=i,(Ql=s)&&!c)for(Yl=o;null!==Yl;)s=(i=Yl).child,22===i.tag&&null!==i.memoizedState?Es(o):null!==s?(s.return=i,Yl=s):Es(o);for(;null!==a;)Yl=a,ys(a,t,n),a=a.sibling;Yl=o,Gl=l,Ql=c}ws(e)}else 0!=(8772&o.subtreeFlags)&&null!==a?(a.return=o,Yl=a):ws(e)}}function ws(e){for(;null!==Yl;){var t=Yl;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Ql||rs(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Ql)if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ba(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&za(t,i,r);break;case 3:var l=t.updateQueue;if(null!==l){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}za(t,l,n)}break;case 5:var s=t.stateNode;if(null===n&&4&t.flags){n=s;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&$t(p)}}}break;default:throw Error(a(163))}Ql||512&t.flags&&os(t)}catch(e){_c(t,t.return,e)}}if(t===e){Yl=null;break}if(null!==(n=t.sibling)){n.return=t.return,Yl=n;break}Yl=t.return}}function xs(e){for(;null!==Yl;){var t=Yl;if(t===e){Yl=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Yl=n;break}Yl=t.return}}function Es(e){for(;null!==Yl;){var t=Yl;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{rs(4,t)}catch(e){_c(t,n,e)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(e){_c(t,o,e)}}var a=t.return;try{os(t)}catch(e){_c(t,a,e)}break;case 5:var i=t.return;try{os(t)}catch(e){_c(t,i,e)}}}catch(e){_c(t,t.return,e)}if(t===e){Yl=null;break}var l=t.sibling;if(null!==l){l.return=t.return,Yl=l;break}Yl=t.return}}var ks,_s=Math.ceil,Ss=w.ReactCurrentDispatcher,Os=w.ReactCurrentOwner,Ns=w.ReactCurrentBatchConfig,Cs=0,Rs=null,Ts=null,Ms=0,Ps=0,As=So(0),Ls=0,Zs=null,Is=0,js=0,Ds=0,zs=null,Fs=null,Bs=0,$s=1/0,Us=null,Ws=!1,Hs=null,qs=null,Vs=!1,Ks=null,Gs=0,Qs=0,Xs=null,Ys=-1,Js=0;function ec(){return 0!=(6&Cs)?Xe():-1!==Ys?Ys:Ys=Xe()}function tc(e){return 0==(1&e.mode)?1:0!=(2&Cs)&&0!==Ms?Ms&-Ms:null!==ga.transition?(0===Js&&(Js=ht()),Js):0!==(e=yt)?e:e=void 0===(e=window.event)?16:Qt(e.type)}function nc(e,t,n,r){if(50<Qs)throw Qs=0,Xs=null,Error(a(185));bt(e,n,r),0!=(2&Cs)&&e===Rs||(e===Rs&&(0==(2&Cs)&&(js|=n),4===Ls&&lc(e,Ms)),rc(e,r),1===n&&0===Cs&&0==(1&t.mode)&&($s=Xe()+500,Fo&&Uo()))}function rc(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var i=31-it(a),l=1<<i,s=o[i];-1===s?0!=(l&n)&&0==(l&r)||(o[i]=ft(l,t)):s<=t&&(e.expiredLanes|=l),a&=~l}}(e,t);var r=pt(e,e===Rs?Ms:0);if(0===r)null!==n&&Ke(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&Ke(n),1===t)0===e.tag?function(e){Fo=!0,$o(e)}(sc.bind(null,e)):$o(sc.bind(null,e)),io((function(){0==(6&Cs)&&Uo()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=Rc(n,oc.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function oc(e,t){if(Ys=-1,Js=0,0!=(6&Cs))throw Error(a(327));var n=e.callbackNode;if(Ec()&&e.callbackNode!==n)return null;var r=pt(e,e===Rs?Ms:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=gc(e,r);else{t=r;var o=Cs;Cs|=2;var i=mc();for(Rs===e&&Ms===t||(Us=null,$s=Xe()+500,pc(e,t));;)try{vc();break}catch(t){fc(e,t)}Ea(),Ss.current=i,Cs=o,null!==Ts?t=0:(Rs=null,Ms=0,t=Ls)}if(0!==t){if(2===t&&0!==(o=mt(e))&&(r=o,t=ac(e,o)),1===t)throw n=Zs,pc(e,0),lc(e,r),rc(e,Xe()),n;if(6===t)lc(e,r);else{if(o=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!lr(a(),o))return!1}catch(e){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=gc(e,r))&&0!==(i=mt(e))&&(r=i,t=ac(e,i)),1===t))throw n=Zs,pc(e,0),lc(e,r),rc(e,Xe()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(a(345));case 2:case 5:xc(e,Fs,Us);break;case 3:if(lc(e,r),(130023424&r)===r&&10<(t=Bs+500-Xe())){if(0!==pt(e,0))break;if(((o=e.suspendedLanes)&r)!==r){ec(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=ro(xc.bind(null,e,Fs,Us),t);break}xc(e,Fs,Us);break;case 4:if(lc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,o=-1;0<r;){var l=31-it(r);i=1<<l,(l=t[l])>o&&(o=l),r&=~i}if(r=o,10<(r=(120>(r=Xe()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_s(r/1960))-r)){e.timeoutHandle=ro(xc.bind(null,e,Fs,Us),r);break}xc(e,Fs,Us);break;default:throw Error(a(329))}}}return rc(e,Xe()),e.callbackNode===n?oc.bind(null,e):null}function ac(e,t){var n=zs;return e.current.memoizedState.isDehydrated&&(pc(e,t).flags|=256),2!==(e=gc(e,t))&&(t=Fs,Fs=n,null!==t&&ic(t)),e}function ic(e){null===Fs?Fs=e:Fs.push.apply(Fs,e)}function lc(e,t){for(t&=~Ds,t&=~js,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),r=1<<n;e[n]=-1,t&=~r}}function sc(e){if(0!=(6&Cs))throw Error(a(327));Ec();var t=pt(e,0);if(0==(1&t))return rc(e,Xe()),null;var n=gc(e,t);if(0!==e.tag&&2===n){var r=mt(e);0!==r&&(t=r,n=ac(e,r))}if(1===n)throw n=Zs,pc(e,0),lc(e,t),rc(e,Xe()),n;if(6===n)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,xc(e,Fs,Us),rc(e,Xe()),null}function cc(e,t){var n=Cs;Cs|=1;try{return e(t)}finally{0===(Cs=n)&&($s=Xe()+500,Fo&&Uo())}}function uc(e){null!==Ks&&0===Ks.tag&&0==(6&Cs)&&Ec();var t=Cs;Cs|=1;var n=Ns.transition,r=yt;try{if(Ns.transition=null,yt=1,e)return e()}finally{yt=r,Ns.transition=n,0==(6&(Cs=t))&&Uo()}}function dc(){Ps=As.current,Oo(As)}function pc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,oo(n)),null!==Ts)for(n=Ts.return;null!==n;){var r=n;switch(na(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Lo();break;case 3:ai(),Oo(To),Oo(Ro),di();break;case 5:li(r);break;case 4:ai();break;case 13:case 19:Oo(si);break;case 10:ka(r.type._context);break;case 22:case 23:dc()}n=n.return}if(Rs=e,Ts=e=Ac(e.current,null),Ms=Ps=t,Ls=0,Zs=null,Ds=js=Is=0,Fs=zs=null,null!==Na){for(t=0;t<Na.length;t++)if(null!==(r=(n=Na[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var i=a.next;a.next=o,r.next=i}n.pending=r}Na=null}return e}function fc(e,t){for(;;){var n=Ts;try{if(Ea(),pi.current=il,vi){for(var r=hi.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}vi=!1}if(mi=0,bi=gi=hi=null,yi=!1,wi=0,Os.current=null,null===n||null===n.return){Ls=1,Zs=t,Ts=null;break}e:{var i=e,l=n.return,s=n,c=t;if(t=Ms,s.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=s,p=d.tag;if(0==(1&d.mode)&&(0===p||11===p||15===p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var m=bl(l);if(null!==m){m.flags&=-257,vl(m,l,s,0,t),1&m.mode&&gl(i,u,t),c=u;var h=(t=m).updateQueue;if(null===h){var g=new Set;g.add(c),t.updateQueue=g}else h.add(c);break e}if(0==(1&t)){gl(i,u,t),hc();break e}c=Error(a(426))}else if(aa&&1&s.mode){var b=bl(l);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),vl(b,l,s,0,t),ha(ul(c,s));break e}}i=c=ul(c,s),4!==Ls&&(Ls=2),null===zs?zs=[i]:zs.push(i),i=l;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,ja(i,ml(0,c,t));break e;case 1:s=c;var v=i.type,y=i.stateNode;if(0==(128&i.flags)&&("function"==typeof v.getDerivedStateFromError||null!==y&&"function"==typeof y.componentDidCatch&&(null===qs||!qs.has(y)))){i.flags|=65536,t&=-t,i.lanes|=t,ja(i,hl(i,s,t));break e}}i=i.return}while(null!==i)}wc(n)}catch(e){t=e,Ts===n&&null!==n&&(Ts=n=n.return);continue}break}}function mc(){var e=Ss.current;return Ss.current=il,null===e?il:e}function hc(){0!==Ls&&3!==Ls&&2!==Ls||(Ls=4),null===Rs||0==(268435455&Is)&&0==(268435455&js)||lc(Rs,Ms)}function gc(e,t){var n=Cs;Cs|=2;var r=mc();for(Rs===e&&Ms===t||(Us=null,pc(e,t));;)try{bc();break}catch(t){fc(e,t)}if(Ea(),Cs=n,Ss.current=r,null!==Ts)throw Error(a(261));return Rs=null,Ms=0,Ls}function bc(){for(;null!==Ts;)yc(Ts)}function vc(){for(;null!==Ts&&!Ge();)yc(Ts)}function yc(e){var t=ks(e.alternate,e,Ps);e.memoizedProps=e.pendingProps,null===t?wc(e):Ts=t,Os.current=null}function wc(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Vl(n,t,Ps)))return void(Ts=n)}else{if(null!==(n=Kl(n,t)))return n.flags&=32767,void(Ts=n);if(null===e)return Ls=6,void(Ts=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Ts=t);Ts=t=e}while(null!==t);0===Ls&&(Ls=5)}function xc(e,t,n){var r=yt,o=Ns.transition;try{Ns.transition=null,yt=1,function(e,t,n,r){do{Ec()}while(null!==Ks);if(0!=(6&Cs))throw Error(a(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-it(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,i),e===Rs&&(Ts=Rs=null,Ms=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Vs||(Vs=!0,Rc(tt,(function(){return Ec(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=Ns.transition,Ns.transition=null;var l=yt;yt=1;var s=Cs;Cs|=4,Os.current=null,function(e,t){if(eo=Wt,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(e){n=null;break e}var l=0,s=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var m;p!==n||0!==o&&3!==p.nodeType||(s=l+o),p!==i||0!==r&&3!==p.nodeType||(c=l+r),3===p.nodeType&&(l+=p.nodeValue.length),null!==(m=p.firstChild);)f=p,p=m;for(;;){if(p===e)break t;if(f===n&&++u===o&&(s=l),f===i&&++d===r&&(c=l),null!==(m=p.nextSibling))break;f=(p=f).parentNode}p=m}n=-1===s||-1===c?null:{start:s,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(to={focusedElem:e,selectionRange:n},Wt=!1,Yl=t;null!==Yl;)if(e=(t=Yl).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Yl=e;else for(;null!==Yl;){t=Yl;try{var h=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==h){var g=h.memoizedProps,b=h.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?g:ba(t.type,g),b);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(a(163))}}catch(e){_c(t,t.return,e)}if(null!==(e=t.sibling)){e.return=t.return,Yl=e;break}Yl=t.return}h=ts,ts=!1}(e,n),gs(n,e),mr(to),Wt=!!eo,to=eo=null,e.current=n,vs(n,e,o),Qe(),Cs=s,yt=l,Ns.transition=i}else e.current=n;if(Vs&&(Vs=!1,Ks=e,Gs=o),0===(i=e.pendingLanes)&&(qs=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(e){}}(n.stateNode),rc(e,Xe()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)r((o=t[n]).value,{componentStack:o.stack,digest:o.digest});if(Ws)throw Ws=!1,e=Hs,Hs=null,e;0!=(1&Gs)&&0!==e.tag&&Ec(),0!=(1&(i=e.pendingLanes))?e===Xs?Qs++:(Qs=0,Xs=e):Qs=0,Uo()}(e,t,n,r)}finally{Ns.transition=o,yt=r}return null}function Ec(){if(null!==Ks){var e=wt(Gs),t=Ns.transition,n=yt;try{if(Ns.transition=null,yt=16>e?16:e,null===Ks)var r=!1;else{if(e=Ks,Ks=null,Gs=0,0!=(6&Cs))throw Error(a(331));var o=Cs;for(Cs|=4,Yl=e.current;null!==Yl;){var i=Yl,l=i.child;if(0!=(16&Yl.flags)){var s=i.deletions;if(null!==s){for(var c=0;c<s.length;c++){var u=s[c];for(Yl=u;null!==Yl;){var d=Yl;switch(d.tag){case 0:case 11:case 15:ns(8,d,i)}var p=d.child;if(null!==p)p.return=d,Yl=p;else for(;null!==Yl;){var f=(d=Yl).sibling,m=d.return;if(as(d),d===u){Yl=null;break}if(null!==f){f.return=m,Yl=f;break}Yl=m}}}var h=i.alternate;if(null!==h){var g=h.child;if(null!==g){h.child=null;do{var b=g.sibling;g.sibling=null,g=b}while(null!==g)}}Yl=i}}if(0!=(2064&i.subtreeFlags)&&null!==l)l.return=i,Yl=l;else e:for(;null!==Yl;){if(0!=(2048&(i=Yl).flags))switch(i.tag){case 0:case 11:case 15:ns(9,i,i.return)}var v=i.sibling;if(null!==v){v.return=i.return,Yl=v;break e}Yl=i.return}}var y=e.current;for(Yl=y;null!==Yl;){var w=(l=Yl).child;if(0!=(2064&l.subtreeFlags)&&null!==w)w.return=l,Yl=w;else e:for(l=y;null!==Yl;){if(0!=(2048&(s=Yl).flags))try{switch(s.tag){case 0:case 11:case 15:rs(9,s)}}catch(e){_c(s,s.return,e)}if(s===l){Yl=null;break e}var x=s.sibling;if(null!==x){x.return=s.return,Yl=x;break e}Yl=s.return}}if(Cs=o,Uo(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(e){}r=!0}return r}finally{yt=n,Ns.transition=t}}return!1}function kc(e,t,n){e=Za(e,t=ml(0,t=ul(n,t),1),1),t=ec(),null!==e&&(bt(e,1,t),rc(e,t))}function _c(e,t,n){if(3===e.tag)kc(e,e,n);else for(;null!==t;){if(3===t.tag){kc(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===qs||!qs.has(r))){t=Za(t,e=hl(t,e=ul(n,e),1),1),e=ec(),null!==t&&(bt(t,1,e),rc(t,e));break}}t=t.return}}function Sc(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=ec(),e.pingedLanes|=e.suspendedLanes&n,Rs===e&&(Ms&n)===n&&(4===Ls||3===Ls&&(130023424&Ms)===Ms&&500>Xe()-Bs?pc(e,0):Ds|=n),rc(e,t)}function Oc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=ec();null!==(e=Ta(e,t))&&(bt(e,t,n),rc(e,n))}function Nc(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Oc(e,n)}function Cc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),Oc(e,n)}function Rc(e,t){return Ve(e,t)}function Tc(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Mc(e,t,n,r){return new Tc(e,t,n,r)}function Pc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Ac(e,t){var n=e.alternate;return null===n?((n=Mc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Lc(e,t,n,r,o,i){var l=2;if(r=e,"function"==typeof e)Pc(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case k:return Zc(n.children,o,i,t);case _:l=8,o|=8;break;case S:return(e=Mc(12,n,t,2|o)).elementType=S,e.lanes=i,e;case R:return(e=Mc(13,n,t,o)).elementType=R,e.lanes=i,e;case T:return(e=Mc(19,n,t,o)).elementType=T,e.lanes=i,e;case A:return Ic(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case O:l=10;break e;case N:l=9;break e;case C:l=11;break e;case M:l=14;break e;case P:l=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Mc(l,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function Zc(e,t,n,r){return(e=Mc(7,e,r,t)).lanes=n,e}function Ic(e,t,n,r){return(e=Mc(22,e,r,t)).elementType=A,e.lanes=n,e.stateNode={isHidden:!1},e}function jc(e,t,n){return(e=Mc(6,e,null,t)).lanes=n,e}function Dc(e,t,n){return(t=Mc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function zc(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=gt(0),this.expirationTimes=gt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=gt(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Fc(e,t,n,r,o,a,i,l,s){return e=new zc(e,t,n,l,s),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Mc(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Pa(a),e}function Bc(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:E,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}function $c(e){if(!e)return Co;e:{if($e(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Ao(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(Ao(n))return Io(e,n,t)}return t}function Uc(e,t,n,r,o,a,i,l,s){return(e=Fc(n,r,!0,e,0,a,0,l,s)).context=$c(null),n=e.current,(a=La(r=ec(),o=tc(n))).callback=null!=t?t:null,Za(n,a,o),e.current.lanes=o,bt(e,o,r),rc(e,r),e}function Wc(e,t,n,r){var o=t.current,a=ec(),i=tc(o);return n=$c(n),null===t.context?t.context=n:t.pendingContext=n,(t=La(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Za(o,t,i))&&(nc(e,o,i,a),Ia(e,o,i)),i}function Hc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function qc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Vc(e,t){qc(e,t),(e=e.alternate)&&qc(e,t)}ks=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||To.current)wl=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return wl=!1,function(e,t,n){switch(t.tag){case 3:Tl(t),ma();break;case 5:ii(t);break;case 1:Ao(t.type)&&jo(t);break;case 4:oi(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;No(va,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(No(si,1&si.current),t.flags|=128,null):0!=(n&t.child.childLanes)?jl(e,t,n):(No(si,1&si.current),null!==(e=Wl(e,t,n))?e.sibling:null);No(si,1&si.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return $l(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),No(si,si.current),r)break;return null;case 22:case 23:return t.lanes=0,Sl(e,t,n)}return Wl(e,t,n)}(e,t,n);wl=0!=(131072&e.flags)}else wl=!1,aa&&0!=(1048576&t.flags)&&ea(t,Vo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Ul(e,t),e=t.pendingProps;var o=Po(t,Ro.current);Sa(t,n),o=_i(null,t,r,e,o,n);var i=Si();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ao(r)?(i=!0,jo(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Pa(t),o.updater=$a,t.stateNode=o,o._reactInternals=t,qa(t,r,e,n),t=Rl(null,t,r,!0,i,n)):(t.tag=0,aa&&i&&ta(t),xl(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Ul(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return Pc(e)?1:0;if(null!=e){if((e=e.$$typeof)===C)return 11;if(e===M)return 14}return 2}(r),e=ba(r,e),o){case 0:t=Nl(null,t,r,e,n);break e;case 1:t=Cl(null,t,r,e,n);break e;case 11:t=El(null,t,r,e,n);break e;case 14:t=kl(null,t,r,ba(r.type,e),n);break e}throw Error(a(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,Nl(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 1:return r=t.type,o=t.pendingProps,Cl(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 3:e:{if(Tl(t),null===e)throw Error(a(387));r=t.pendingProps,o=(i=t.memoizedState).element,Aa(e,t),Da(t,r,null,n);var l=t.memoizedState;if(r=l.element,i.isDehydrated){if(i={element:r,isDehydrated:!1,cache:l.cache,pendingSuspenseBoundaries:l.pendingSuspenseBoundaries,transitions:l.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=Ml(e,t,r,n,o=ul(Error(a(423)),t));break e}if(r!==o){t=Ml(e,t,r,n,o=ul(Error(a(424)),t));break e}for(oa=co(t.stateNode.containerInfo.firstChild),ra=t,aa=!0,ia=null,n=Ya(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ma(),r===o){t=Wl(e,t,n);break e}xl(e,t,r,n)}t=t.child}return t;case 5:return ii(t),null===e&&ua(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,l=o.children,no(r,o)?l=null:null!==i&&no(r,i)&&(t.flags|=32),Ol(e,t),xl(e,t,l,n),t.child;case 6:return null===e&&ua(t),null;case 13:return jl(e,t,n);case 4:return oi(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Xa(t,null,r,n):xl(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,El(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 7:return xl(e,t,t.pendingProps,n),t.child;case 8:case 12:return xl(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,l=o.value,No(va,r._currentValue),r._currentValue=l,null!==i)if(lr(i.value,l)){if(i.children===o.children&&!To.current){t=Wl(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var s=i.dependencies;if(null!==s){l=i.child;for(var c=s.firstContext;null!==c;){if(c.context===r){if(1===i.tag){(c=La(-1,n&-n)).tag=2;var u=i.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=n,null!==(c=i.alternate)&&(c.lanes|=n),_a(i.return,n,t),s.lanes|=n;break}c=c.next}}else if(10===i.tag)l=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(l=i.return))throw Error(a(341));l.lanes|=n,null!==(s=l.alternate)&&(s.lanes|=n),_a(l,n,t),l=i.sibling}else l=i.child;if(null!==l)l.return=i;else for(l=i;null!==l;){if(l===t){l=null;break}if(null!==(i=l.sibling)){i.return=l.return,l=i;break}l=l.return}i=l}xl(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Sa(t,n),r=r(o=Oa(o)),t.flags|=1,xl(e,t,r,n),t.child;case 14:return o=ba(r=t.type,t.pendingProps),kl(e,t,r,o=ba(r.type,o),n);case 15:return _l(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ba(r,o),Ul(e,t),t.tag=1,Ao(r)?(e=!0,jo(t)):e=!1,Sa(t,n),Wa(t,r,o),qa(t,r,o,n),Rl(null,t,r,!0,e,n);case 19:return $l(e,t,n);case 22:return Sl(e,t,n)}throw Error(a(156,t.tag))};var Kc="function"==typeof reportError?reportError:function(e){console.error(e)};function Gc(e){this._internalRoot=e}function Qc(e){this._internalRoot=e}function Xc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Yc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jc(){}function eu(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a;if("function"==typeof o){var l=o;o=function(){var e=Hc(i);l.call(e)}}Wc(t,i,e,o)}else i=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=Hc(i);a.call(e)}}var i=Uc(t,r,e,0,null,!1,0,"",Jc);return e._reactRootContainer=i,e[ho]=i.current,$r(8===e.nodeType?e.parentNode:e),uc(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var l=r;r=function(){var e=Hc(s);l.call(e)}}var s=Fc(e,0,!1,null,0,!1,0,"",Jc);return e._reactRootContainer=s,e[ho]=s.current,$r(8===e.nodeType?e.parentNode:e),uc((function(){Wc(t,s,n,r)})),s}(n,t,e,o,r);return Hc(i)}Qc.prototype.render=Gc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));Wc(e,t,null,null)},Qc.prototype.unmount=Gc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;uc((function(){Wc(null,e,null,null)})),t[ho]=null}},Qc.prototype.unstable_scheduleHydration=function(e){if(e){var t=_t();e={blockedOn:null,target:e,priority:t};for(var n=0;n<At.length&&0!==t&&t<At[n].priority;n++);At.splice(n,0,e),0===n&&jt(e)}},xt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(vt(t,1|n),rc(t,Xe()),0==(6&Cs)&&($s=Xe()+500,Uo()))}break;case 13:uc((function(){var t=Ta(e,1);if(null!==t){var n=ec();nc(t,e,1,n)}})),Vc(e,1)}},Et=function(e){if(13===e.tag){var t=Ta(e,134217728);null!==t&&nc(t,e,134217728,ec()),Vc(e,134217728)}},kt=function(e){if(13===e.tag){var t=tc(e),n=Ta(e,t);null!==n&&nc(n,e,t,ec()),Vc(e,t)}},_t=function(){return yt},St=function(e,t){var n=yt;try{return yt=e,t()}finally{yt=n}},Ee=function(e,t,n){switch(t){case"input":if(Y(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=Eo(r);if(!o)throw Error(a(90));V(r),Y(r,o)}}}break;case"textarea":ae(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Ce=cc,Re=uc;var tu={usingClientEntryPoint:!1,Events:[wo,xo,Eo,Oe,Ne,cc]},nu={findFiberByHostInstance:yo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},ru={bundleType:nu.bundleType,version:nu.version,rendererPackageName:nu.rendererPackageName,rendererConfig:nu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=He(e))?null:e.stateNode},findFiberByHostInstance:nu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ou=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ou.isDisabled&&ou.supportsFiber)try{ot=ou.inject(ru),at=ou}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Xc(t))throw Error(a(200));return Bc(e,t,null,n)},t.createRoot=function(e,t){if(!Xc(e))throw Error(a(299));var n=!1,r="",o=Kc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=Fc(e,1,!1,null,0,n,0,r,o),e[ho]=t.current,$r(8===e.nodeType?e.parentNode:e),new Gc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return null===(e=He(t))?null:e.stateNode},t.flushSync=function(e){return uc(e)},t.hydrate=function(e,t,n){if(!Yc(t))throw Error(a(200));return eu(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Xc(e))throw Error(a(405));var r=null!=n&&n.hydratedSources||null,o=!1,i="",l=Kc;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(l=n.onRecoverableError)),t=Uc(t,null,e,1,null!=n?n:null,o,0,i,l),e[ho]=t.current,$r(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Qc(t)},t.render=function(e,t,n){if(!Yc(t))throw Error(a(200));return eu(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Yc(e))throw Error(a(40));return!!e._reactRootContainer&&(uc((function(){eu(null,null,e,!1,(function(){e._reactRootContainer=null,e[ho]=null}))})),!0)},t.unstable_batchedUpdates=cc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Yc(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return eu(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},745:(e,t,n)=>{"use strict";var r=n(3935);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=n(4448)},9921:(e,t)=>{"use strict";Symbol.for("react.element"),Symbol.for("react.portal"),Symbol.for("react.fragment"),Symbol.for("react.strict_mode"),Symbol.for("react.profiler"),Symbol.for("react.provider"),Symbol.for("react.context"),Symbol.for("react.server_context"),Symbol.for("react.forward_ref"),Symbol.for("react.suspense"),Symbol.for("react.suspense_list"),Symbol.for("react.memo"),Symbol.for("react.lazy"),Symbol.for("react.offscreen");Symbol.for("react.module.reference")},9864:(e,t,n)=>{"use strict";n(9921)},5251:(e,t,n)=>{"use strict";var r=n(7294),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,l=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,a={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!s.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:a,_owner:l.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},2408:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),s=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator,m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,g={};function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function v(){}function y(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=b.prototype;var w=y.prototype=new v;w.constructor=y,h(w,b.prototype),w.isPureReactComponent=!0;var x=Array.isArray,E=Object.prototype.hasOwnProperty,k={current:null},_={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,r){var o,a={},i=null,l=null;if(null!=t)for(o in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,o)&&!_.hasOwnProperty(o)&&(a[o]=t[o]);var s=arguments.length-2;if(1===s)a.children=r;else if(1<s){for(var c=Array(s),u=0;u<s;u++)c[u]=arguments[u+2];a.children=c}if(e&&e.defaultProps)for(o in s=e.defaultProps)void 0===a[o]&&(a[o]=s[o]);return{$$typeof:n,type:e,key:i,ref:l,props:a,_owner:k.current}}function O(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var N=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function R(e,t,o,a,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case n:case r:s=!0}}if(s)return i=i(s=e),e=""===a?"."+C(s,0):a,x(i)?(o="",null!=e&&(o=e.replace(N,"$&/")+"/"),R(i,t,o,"",(function(e){return e}))):null!=i&&(O(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(N,"$&/")+"/")+e)),t.push(i)),1;if(s=0,a=""===a?".":a+":",x(e))for(var c=0;c<e.length;c++){var u=a+C(l=e[c],c);s+=R(l,t,o,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(l=e.next()).done;)s+=R(l=l.value,t,o,u=a+C(l,c++),i);else if("object"===l)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return s}function T(e,t,n){if(null==e)return e;var r=[],o=0;return R(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function M(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var P={current:null},A={transition:null},L={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:A,ReactCurrentOwner:k};t.Children={map:T,forEach:function(e,t,n){T(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return T(e,(function(){t++})),t},toArray:function(e){return T(e,(function(e){return e}))||[]},only:function(e){if(!O(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=o,t.Profiler=i,t.PureComponent=y,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=L,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=h({},e.props),a=e.key,i=e.ref,l=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,l=k.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(c in t)E.call(t,c)&&!_.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==s?s[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=r;else if(1<c){s=Array(c);for(var u=0;u<c;u++)s[u]=arguments[u+2];o.children=s}return{$$typeof:n,type:e.type,key:a,ref:i,props:o,_owner:l}},t.createContext=function(e){return(e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:l,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=O,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:M}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=A.transition;A.transition={};try{e()}finally{A.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return P.current.useCallback(e,t)},t.useContext=function(e){return P.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return P.current.useDeferredValue(e)},t.useEffect=function(e,t){return P.current.useEffect(e,t)},t.useId=function(){return P.current.useId()},t.useImperativeHandle=function(e,t,n){return P.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return P.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return P.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return P.current.useMemo(e,t)},t.useReducer=function(e,t,n){return P.current.useReducer(e,t,n)},t.useRef=function(e){return P.current.useRef(e)},t.useState=function(e){return P.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return P.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return P.current.useTransition()},t.version="18.2.0"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},5893:(e,t,n)=>{"use strict";e.exports=n(5251)},53:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var l=2*(r+1)-1,s=e[l],c=l+1,u=e[c];if(0>a(s,n))c<o&&0>a(u,s)?(e[r]=u,e[c]=n,r=c):(e[r]=s,e[l]=n,r=l);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}var c=[],u=[],d=1,p=null,f=3,m=!1,h=!1,g=!1,b="function"==typeof setTimeout?setTimeout:null,v="function"==typeof clearTimeout?clearTimeout:null,y="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function x(e){if(g=!1,w(e),!h)if(null!==r(c))h=!0,A(E);else{var t=r(u);null!==t&&L(x,t.startTime-e)}}function E(e,n){h=!1,g&&(g=!1,v(O),O=-1),m=!0;var a=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!R());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var l=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?p.callback=l:p===r(c)&&o(c),w(n)}else o(c);p=r(c)}if(null!==p)var s=!0;else{var d=r(u);null!==d&&L(x,d.startTime-n),s=!1}return s}finally{p=null,f=a,m=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var k,_=!1,S=null,O=-1,N=5,C=-1;function R(){return!(t.unstable_now()-C<N)}function T(){if(null!==S){var e=t.unstable_now();C=e;var n=!0;try{n=S(!0,e)}finally{n?k():(_=!1,S=null)}}else _=!1}if("function"==typeof y)k=function(){y(T)};else if("undefined"!=typeof MessageChannel){var M=new MessageChannel,P=M.port2;M.port1.onmessage=T,k=function(){P.postMessage(null)}}else k=function(){b(T,0)};function A(e){S=e,_||(_=!0,k())}function L(e,n){O=b((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){h||m||(h=!0,A(E))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):N=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch(a="object"==typeof a&&null!==a&&"number"==typeof(a=a.delay)&&0<a?i+a:i,e){case 1:var l=-1;break;case 2:l=250;break;case 5:l=1073741823;break;case 4:l=1e4;break;default:l=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:l=a+l,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(g?(v(O),O=-1):g=!0,L(x,a-i))):(e.sortIndex=l,n(c,e),h||m||(h=!0,A(E))),e},t.unstable_shouldYield=R,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},3250:(e,t,n)=>{"use strict";var r=n(7294),o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var u="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,u=r[1];return l((function(){o.value=n,o.getSnapshot=t,c(o)&&u({inst:o})}),[e,n,t]),i((function(){return c(o)&&u({inst:o}),e((function(){c(o)&&u({inst:o})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:u},139:(e,t,n)=>{"use strict";var r=n(7294),o=n(1688),a="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},i=o.useSyncExternalStore,l=r.useRef,s=r.useEffect,c=r.useMemo,u=r.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,n,r,o){var d=l(null);if(null===d.current){var p={hasValue:!1,value:null};d.current=p}else p=d.current;d=c((function(){function e(e){if(!s){if(s=!0,i=e,e=r(e),void 0!==o&&p.hasValue){var t=p.value;if(o(t,e))return l=t}return l=e}if(t=l,a(i,e))return t;var n=r(e);return void 0!==o&&o(t,n)?t:(i=e,l=n)}var i,l,s=!1,c=void 0===n?null:n;return[function(){return e(t())},null===c?void 0:function(){return e(c())}]}),[t,n,r,o]);var f=i(e,d[0],d[1]);return s((function(){p.hasValue=!0,p.value=f}),[f]),u(f),f}},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},2798:(e,t,n)=>{"use strict";e.exports=n(139)},4836:e=>{e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},4712:(e,t,n)=>{var r=n(3390);r.registerLanguage("xml",n(4610)),r.registerLanguage("bash",n(8780)),r.registerLanguage("c",n(612)),r.registerLanguage("cpp",n(6248)),r.registerLanguage("csharp",n(3707)),r.registerLanguage("css",n(5064)),r.registerLanguage("markdown",n(2003)),r.registerLanguage("diff",n(7731)),r.registerLanguage("ruby",n(7905)),r.registerLanguage("go",n(2399)),r.registerLanguage("graphql",n(1738)),r.registerLanguage("ini",n(4762)),r.registerLanguage("java",n(8257)),r.registerLanguage("javascript",n(978)),r.registerLanguage("json",n(14)),r.registerLanguage("kotlin",n(5812)),r.registerLanguage("less",n(4210)),r.registerLanguage("lua",n(4981)),r.registerLanguage("makefile",n(7903)),r.registerLanguage("perl",n(2482)),r.registerLanguage("objectivec",n(2446)),r.registerLanguage("php",n(2656)),r.registerLanguage("php-template",n(5112)),r.registerLanguage("plaintext",n(2437)),r.registerLanguage("python",n(8245)),r.registerLanguage("python-repl",n(3722)),r.registerLanguage("r",n(4730)),r.registerLanguage("rust",n(9880)),r.registerLanguage("scss",n(1062)),r.registerLanguage("shell",n(6256)),r.registerLanguage("sql",n(8935)),r.registerLanguage("swift",n(7690)),r.registerLanguage("yaml",n(1392)),r.registerLanguage("typescript",n(8987)),r.registerLanguage("vbnet",n(7531)),r.registerLanguage("wasm",n(1533)),r.HighlightJS=r,r.default=r,e.exports=r},3390:e=>{var t={exports:{}};function n(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(t){var r=e[t];"object"!=typeof r||Object.isFrozen(r)||n(r)})),e}t.exports=n,t.exports.default=n;class r{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function o(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function a(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t];return t.forEach((function(e){for(const t in e)n[t]=e[t]})),n}const i=e=>!!e.scope||e.sublanguage&&e.language;class l{constructor(e,t){this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=o(e)}openNode(e){if(!i(e))return;let t="";t=e.sublanguage?`language-${e.language}`:((e,{prefix:t})=>{if(e.includes(".")){const n=e.split(".");return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")}return`${t}${e}`})(e.scope,{prefix:this.classPrefix}),this.span(t)}closeNode(e){i(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){this.buffer+=`<span class="${e}">`}}const s=(e={})=>{const t={children:[]};return Object.assign(t,e),t};class c{constructor(){this.rootNode=s(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t=s({scope:e});this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{c._collapse(e)})))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root;n.sublanguage=!0,n.language=t,this.add(n)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}function p(e){return h("(?=",e,")")}function f(e){return h("(?:",e,")*")}function m(e){return h("(?:",e,")?")}function h(...e){return e.map((e=>d(e))).join("")}function g(...e){const t=function(e){const t=e[e.length-1];return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}(e);return"("+(t.capture?"":"?:")+e.map((e=>d(e))).join("|")+")"}function b(e){return new RegExp(e.toString()+"|").exec("").length-1}const v=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function y(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n;let r=d(e),o="";for(;r.length>0;){const e=v.exec(r);if(!e){o+=r;break}o+=r.substring(0,e.index),r=r.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?o+="\\"+String(Number(e[1])+t):(o+=e[0],"("===e[0]&&n++)}return o})).map((e=>`(${e})`)).join(t)}const w="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",E="\\b\\d+(\\.\\d+)?",k="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",_="\\b(0b[01]+)",S={begin:"\\\\[\\s\\S]",relevance:0},O={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[S]},N={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[S]},C=function(e,t,n={}){const r=a({scope:"comment",begin:e,end:t,contains:[]},n);r.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const o=g("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return r.contains.push({begin:h(/[ ]+/,"(",o,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),r},R=C("//","$"),T=C("/\\*","\\*/"),M=C("#","$"),P={scope:"number",begin:E,relevance:0},A={scope:"number",begin:k,relevance:0},L={scope:"number",begin:_,relevance:0},Z={begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[S,{begin:/\[/,end:/\]/,relevance:0,contains:[S]}]}]},I={scope:"title",begin:w,relevance:0},j={scope:"title",begin:x,relevance:0};var D=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:w,UNDERSCORE_IDENT_RE:x,NUMBER_RE:E,C_NUMBER_RE:k,BINARY_NUMBER_RE:_,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=h(t,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:S,APOS_STRING_MODE:O,QUOTE_STRING_MODE:N,PHRASAL_WORDS_MODE:{begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},COMMENT:C,C_LINE_COMMENT_MODE:R,C_BLOCK_COMMENT_MODE:T,HASH_COMMENT_MODE:M,NUMBER_MODE:P,C_NUMBER_MODE:A,BINARY_NUMBER_MODE:L,REGEXP_MODE:Z,TITLE_MODE:I,UNDERSCORE_TITLE_MODE:j,METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})}});function z(e,t){"."===e.input[e.index-1]&&t.ignoreMatch()}function F(e,t){void 0!==e.className&&(e.scope=e.className,delete e.className)}function B(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=z,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function $(e,t){Array.isArray(e.illegal)&&(e.illegal=g(...e.illegal))}function U(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function W(e,t){void 0===e.relevance&&(e.relevance=1)}const H=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]})),e.keywords=n.keywords,e.begin=h(n.beforeMatch,p(n.begin)),e.starts={relevance:0,contains:[Object.assign(n,{endsParent:!0})]},e.relevance=0,delete n.beforeMatch},q=["of","and","for","in","not","or","if","then","parent","list","value"];function V(e,t,n="keyword"){const r=Object.create(null);return"string"==typeof e?o(n,e.split(" ")):Array.isArray(e)?o(n,e):Object.keys(e).forEach((function(n){Object.assign(r,V(e[n],t,n))})),r;function o(e,n){t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((function(t){const n=t.split("|");r[n[0]]=[e,K(n[0],n[1])]}))}}function K(e,t){return t?Number(t):function(e){return q.includes(e.toLowerCase())}(e)?0:1}const G={},Q=e=>{console.error(e)},X=(e,...t)=>{console.log(`WARN: ${e}`,...t)},Y=(e,t)=>{G[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),G[`${e}/${t}`]=!0)},J=new Error;function ee(e,t,{key:n}){let r=0;const o=e[n],a={},i={};for(let e=1;e<=t.length;e++)i[e+r]=o[e],a[e+r]=!0,r+=b(t[e-1]);e[n]=i,e[n]._emit=a,e[n]._multi=!0}function te(e){!function(e){e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,delete e.scope)}(e),"string"==typeof e.beginScope&&(e.beginScope={_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope}),function(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw Q("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),J;if("object"!=typeof e.beginScope||null===e.beginScope)throw Q("beginScope must be object"),J;ee(e,e.begin,{key:"beginScope"}),e.begin=y(e.begin,{joinWith:""})}}(e),function(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw Q("skip, excludeEnd, returnEnd not compatible with endScope: {}"),J;if("object"!=typeof e.endScope||null===e.endScope)throw Q("endScope must be object"),J;ee(e,e.end,{key:"endScope"}),e.end=y(e.end,{joinWith:""})}}(e)}function ne(e){function t(t,n){return new RegExp(d(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":""))}class n{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=b(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map((e=>e[1]));this.matcherRe=t(y(e,{joinWith:"|"}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t)return null;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),r=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,r)}}class r{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=a(e.classNameAliases||{}),function n(o,i){const l=o;if(o.isCompiled)return l;[F,U,te,H].forEach((e=>e(o,i))),e.compilerExtensions.forEach((e=>e(o,i))),o.__beforeBegin=null,[B,$,W].forEach((e=>e(o,i))),o.isCompiled=!0;let s=null;return"object"==typeof o.keywords&&o.keywords.$pattern&&(o.keywords=Object.assign({},o.keywords),s=o.keywords.$pattern,delete o.keywords.$pattern),s=s||/\w+/,o.keywords&&(o.keywords=V(o.keywords,e.case_insensitive)),l.keywordPatternRe=t(s,!0),i&&(o.begin||(o.begin=/\B|\b/),l.beginRe=t(l.begin),o.end||o.endsWithParent||(o.end=/\B|\b/),o.end&&(l.endRe=t(l.end)),l.terminatorEnd=d(l.end)||"",o.endsWithParent&&i.terminatorEnd&&(l.terminatorEnd+=(o.end?"|":"")+i.terminatorEnd)),o.illegal&&(l.illegalRe=t(o.illegal)),o.contains||(o.contains=[]),o.contains=[].concat(...o.contains.map((function(e){return function(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(t){return a(e,{variants:null},t)}))),e.cachedVariants?e.cachedVariants:re(e)?a(e,{starts:e.starts?a(e.starts):null}):Object.isFrozen(e)?a(e):e}("self"===e?o:e)}))),o.contains.forEach((function(e){n(e,l)})),o.starts&&n(o.starts,i),l.matcher=function(e){const t=new r;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t}(l),l}(e)}function re(e){return!!e&&(e.endsWithParent||re(e.starts))}class oe extends Error{constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}const ae=o,ie=a,le=Symbol("nomatch");var se=function(e){const n=Object.create(null),o=Object.create(null),a=[];let i=!0;const l="Could not find the language '{}', did you forget to load/include a language module?",s={disableAutodetect:!0,name:"Plain text",contains:[]};let c={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:u};function d(e){return c.noHighlightRe.test(e)}function b(e,t,n){let r="",o="";"object"==typeof t?(r=e,n=t.ignoreIllegals,o=t.language):(Y("10.7.0","highlight(lang, code, ...args) has been deprecated."),Y("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),o=e,r=t),void 0===n&&(n=!0);const a={code:r,language:o};O("before:highlight",a);const i=a.result?a.result:v(a.language,a.code,n);return i.code=a.code,O("after:highlight",i),i}function v(e,t,o,a){const s=Object.create(null);function u(){if(!S.keywords)return void N.addText(C);let e=0;S.keywordPatternRe.lastIndex=0;let t=S.keywordPatternRe.exec(C),n="";for(;t;){n+=C.substring(e,t.index);const o=x.case_insensitive?t[0].toLowerCase():t[0],a=(r=o,S.keywords[r]);if(a){const[e,r]=a;if(N.addText(n),n="",s[o]=(s[o]||0)+1,s[o]<=7&&(R+=r),e.startsWith("_"))n+=t[0];else{const n=x.classNameAliases[e]||e;N.addKeyword(t[0],n)}}else n+=t[0];e=S.keywordPatternRe.lastIndex,t=S.keywordPatternRe.exec(C)}var r;n+=C.substring(e),N.addText(n)}function d(){null!=S.subLanguage?function(){if(""===C)return;let e=null;if("string"==typeof S.subLanguage){if(!n[S.subLanguage])return void N.addText(C);e=v(S.subLanguage,C,!0,O[S.subLanguage]),O[S.subLanguage]=e._top}else e=y(C,S.subLanguage.length?S.subLanguage:null);S.relevance>0&&(R+=e.relevance),N.addSublanguage(e._emitter,e.language)}():u(),C=""}function p(e,t){let n=1;const r=t.length-1;for(;n<=r;){if(!e._emit[n]){n++;continue}const r=x.classNameAliases[e[n]]||e[n],o=t[n];r?N.addKeyword(o,r):(C=o,u(),C=""),n++}}function f(e,t){return e.scope&&"string"==typeof e.scope&&N.openNode(x.classNameAliases[e.scope]||e.scope),e.beginScope&&(e.beginScope._wrap?(N.addKeyword(C,x.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),C=""):e.beginScope._multi&&(p(e.beginScope,t),C="")),S=Object.create(e,{parent:{value:S}}),S}function m(e,t,n){let o=function(e,t){const n=e&&e.exec(t);return n&&0===n.index}(e.endRe,n);if(o){if(e["on:end"]){const n=new r(e);e["on:end"](t,n),n.isMatchIgnored&&(o=!1)}if(o){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return m(e.parent,t,n)}function h(e){return 0===S.matcher.regexIndex?(C+=e[0],1):(P=!0,0)}function g(e){const n=e[0],r=t.substring(e.index),o=m(S,e,r);if(!o)return le;const a=S;S.endScope&&S.endScope._wrap?(d(),N.addKeyword(n,S.endScope._wrap)):S.endScope&&S.endScope._multi?(d(),p(S.endScope,e)):a.skip?C+=n:(a.returnEnd||a.excludeEnd||(C+=n),d(),a.excludeEnd&&(C=n));do{S.scope&&N.closeNode(),S.skip||S.subLanguage||(R+=S.relevance),S=S.parent}while(S!==o.parent);return o.starts&&f(o.starts,e),a.returnEnd?0:n.length}let b={};function w(n,a){const l=a&&a[0];if(C+=n,null==l)return d(),0;if("begin"===b.type&&"end"===a.type&&b.index===a.index&&""===l){if(C+=t.slice(a.index,a.index+1),!i){const t=new Error(`0 width match regex (${e})`);throw t.languageName=e,t.badRule=b.rule,t}return 1}if(b=a,"begin"===a.type)return function(e){const t=e[0],n=e.rule,o=new r(n),a=[n.__beforeBegin,n["on:begin"]];for(const n of a)if(n&&(n(e,o),o.isMatchIgnored))return h(t);return n.skip?C+=t:(n.excludeBegin&&(C+=t),d(),n.returnBegin||n.excludeBegin||(C=t)),f(n,e),n.returnBegin?0:t.length}(a);if("illegal"===a.type&&!o){const e=new Error('Illegal lexeme "'+l+'" for mode "'+(S.scope||"<unnamed>")+'"');throw e.mode=S,e}if("end"===a.type){const e=g(a);if(e!==le)return e}if("illegal"===a.type&&""===l)return 1;if(M>1e5&&M>3*a.index)throw new Error("potential infinite loop, way more iterations than matches");return C+=l,l.length}const x=k(e);if(!x)throw Q(l.replace("{}",e)),new Error('Unknown language: "'+e+'"');const E=ne(x);let _="",S=a||E;const O={},N=new c.__emitter(c);!function(){const e=[];for(let t=S;t!==x;t=t.parent)t.scope&&e.unshift(t.scope);e.forEach((e=>N.openNode(e)))}();let C="",R=0,T=0,M=0,P=!1;try{for(S.matcher.considerAll();;){M++,P?P=!1:S.matcher.considerAll(),S.matcher.lastIndex=T;const e=S.matcher.exec(t);if(!e)break;const n=w(t.substring(T,e.index),e);T=e.index+n}return w(t.substring(T)),N.closeAllNodes(),N.finalize(),_=N.toHTML(),{language:e,value:_,relevance:R,illegal:!1,_emitter:N,_top:S}}catch(n){if(n.message&&n.message.includes("Illegal"))return{language:e,value:ae(t),illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T,context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:_},_emitter:N};if(i)return{language:e,value:ae(t),illegal:!1,relevance:0,errorRaised:n,_emitter:N,_top:S};throw n}}function y(e,t){t=t||c.languages||Object.keys(n);const r=function(e){const t={value:ae(e),illegal:!1,relevance:0,_top:s,_emitter:new c.__emitter(c)};return t._emitter.addText(e),t}(e),o=t.filter(k).filter(S).map((t=>v(t,e,!1)));o.unshift(r);const a=o.sort(((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(k(e.language).supersetOf===t.language)return 1;if(k(t.language).supersetOf===e.language)return-1}return 0})),[i,l]=a,u=i;return u.secondBest=l,u}function w(e){let t=null;const n=function(e){let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"";const n=c.languageDetectRe.exec(t);if(n){const t=k(n[1]);return t||(X(l.replace("{}",n[1])),X("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}return t.split(/\s+/).find((e=>d(e)||k(e)))}(e);if(d(n))return;if(O("before:highlightElement",{el:e,language:n}),e.children.length>0&&(c.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(e)),c.throwUnescapedHTML))throw new oe("One of your code blocks includes unescaped HTML.",e.innerHTML);t=e;const r=t.textContent,a=n?b(r,{language:n,ignoreIllegals:!0}):y(r);e.innerHTML=a.value,function(e,t,n){const r=t&&o[t]||n;e.classList.add("hljs"),e.classList.add(`language-${r}`)}(e,n,a.language),e.result={language:a.language,re:a.relevance,relevance:a.relevance},a.secondBest&&(e.secondBest={language:a.secondBest.language,relevance:a.secondBest.relevance}),O("after:highlightElement",{el:e,result:a,text:r})}let x=!1;function E(){"loading"!==document.readyState?document.querySelectorAll(c.cssSelector).forEach(w):x=!0}function k(e){return e=(e||"").toLowerCase(),n[e]||n[o[e]]}function _(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{o[e.toLowerCase()]=t}))}function S(e){const t=k(e);return t&&!t.disableAutodetect}function O(e,t){const n=e;a.forEach((function(e){e[n]&&e[n](t)}))}"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function(){x&&E()}),!1),Object.assign(e,{highlight:b,highlightAuto:y,highlightAll:E,highlightElement:w,highlightBlock:function(e){return Y("10.7.0","highlightBlock will be removed entirely in v12.0"),Y("10.7.0","Please use highlightElement now."),w(e)},configure:function(e){c=ie(c,e)},initHighlighting:()=>{E(),Y("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},initHighlightingOnLoad:function(){E(),Y("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")},registerLanguage:function(t,r){let o=null;try{o=r(e)}catch(e){if(Q("Language definition for '{}' could not be registered.".replace("{}",t)),!i)throw e;Q(e),o=s}o.name||(o.name=t),n[t]=o,o.rawDefinition=r.bind(null,e),o.aliases&&_(o.aliases,{languageName:t})},unregisterLanguage:function(e){delete n[e];for(const t of Object.keys(o))o[t]===e&&delete o[t]},listLanguages:function(){return Object.keys(n)},getLanguage:k,registerAliases:_,autoDetection:S,inherit:ie,addPlugin:function(e){!function(e){e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{e["before:highlightBlock"](Object.assign({block:t.el},t))}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{e["after:highlightBlock"](Object.assign({block:t.el},t))})}(e),a.push(e)}}),e.debugMode=function(){i=!1},e.safeMode=function(){i=!0},e.versionString="11.6.0",e.regex={concat:h,lookahead:p,either:g,optional:m,anyNumberOfTimes:f};for(const e in D)"object"==typeof D[e]&&t.exports(D[e]);return Object.assign(e,D),e}({});e.exports=se,se.HighlightJS=se,se.default=se},8780:e=>{e.exports=function(e){const t=e.regex,n={},r={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[n]}]};Object.assign(n,{className:"variable",variants:[{begin:t.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},r]});const o={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},a={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},i={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,o]};o.contains.push(i);const l={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,n]},s=e.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:["if","then","else","elif","fi","for","while","in","do","done","case","esac","function"],literal:["true","false"],built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]},contains:[s,e.SHEBANG(),c,l,e.HASH_COMMENT_MODE,a,{match:/(\/[a-z._-]+)+/},i,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},n]}}},612:e=>{e.exports=function(e){const t=e.regex,n=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),r="[a-zA-Z_]\\w*::",o="(decltype\\(auto\\)|"+t.optional(r)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",a={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:/\batomic_[a-z]{3,6}\b/}]},i={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(i,{className:"string"}),{className:"string",begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},c={className:"title",begin:t.optional(r)+e.IDENT_RE,relevance:0},u=t.optional(r)+e.IDENT_RE+"\\s*\\(",d={keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"],literal:"true false NULL",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"},p=[s,a,n,e.C_BLOCK_COMMENT_MODE,l,i],f={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:d,contains:p.concat([{begin:/\(/,end:/\)/,keywords:d,contains:p.concat(["self"]),relevance:0}]),relevance:0},m={begin:"("+o+"[\\*&\\s]+)+"+u,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:d,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)",keywords:d,relevance:0},{begin:u,returnBegin:!0,contains:[e.inherit(c,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:d,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,i,l,a,{begin:/\(/,end:/\)/,keywords:d,relevance:0,contains:["self",n,e.C_BLOCK_COMMENT_MODE,i,l,a]}]},a,n,e.C_BLOCK_COMMENT_MODE,s]};return{name:"C",aliases:["h"],keywords:d,disableAutodetect:!0,illegal:"</",contains:[].concat(f,m,p,[s,{begin:e.IDENT_RE+"::",keywords:d},{className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:i,keywords:d}}}},6248:e=>{e.exports=function(e){const t=e.regex,n=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),r="[a-zA-Z_]\\w*::",o="(?!struct)(decltype\\(auto\\)|"+t.optional(r)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",a={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},i={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(i,{className:"string"}),{className:"string",begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},c={className:"title",begin:t.optional(r)+e.IDENT_RE,relevance:0},u=t.optional(r)+e.IDENT_RE+"\\s*\\(",d={type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]},p={className:"function.dispatch",relevance:0,keywords:{_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]},begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))},f=[p,s,a,n,e.C_BLOCK_COMMENT_MODE,l,i],m={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:d,contains:f.concat([{begin:/\(/,end:/\)/,keywords:d,contains:f.concat(["self"]),relevance:0}]),relevance:0},h={className:"function",begin:"("+o+"[\\*&\\s]+)+"+u,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:d,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)",keywords:d,relevance:0},{begin:u,returnBegin:!0,contains:[c],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[i,l]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:d,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,i,l,a,{begin:/\(/,end:/\)/,keywords:d,relevance:0,contains:["self",n,e.C_BLOCK_COMMENT_MODE,i,l,a]}]},a,n,e.C_BLOCK_COMMENT_MODE,s]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:d,illegal:"</",classNameAliases:{"function.dispatch":"built_in"},contains:[].concat(m,h,p,f,[s,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",end:">",keywords:d,contains:["self",a]},{begin:e.IDENT_RE+"::",keywords:d},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}},3707:e=>{e.exports=function(e){const t={keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]),built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],literal:["default","false","null","true"]},n=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),r={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},o={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},a=e.inherit(o,{illegal:/\n/}),i={className:"subst",begin:/\{/,end:/\}/,keywords:t},l=e.inherit(i,{illegal:/\n/}),s={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},e.BACKSLASH_ESCAPE,l]},c={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},i]},u=e.inherit(c,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},l]});i.contains=[c,s,o,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,r,e.C_BLOCK_COMMENT_MODE],l.contains=[u,s,a,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,r,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const d={variants:[c,s,o,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},p={begin:"<",end:">",contains:[{beginKeywords:"in out"},n]},f=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",m={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:t,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:"</?",end:">"}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},d,r,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},n,p,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[n,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[n,p,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+f+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:t,contains:[{beginKeywords:["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"].join(" "),relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[e.TITLE_MODE,p],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,relevance:0,contains:[d,r,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},m]}}},5064:e=>{const t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],a=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse();e.exports=function(e){const i=e.regex,l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}))(e),s=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[l.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/},l.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},l.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+r.join("|")+")"},{begin:":(:)?("+o.join("|")+")"}]},l.CSS_VARIABLE,{className:"attribute",begin:"\\b("+a.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[l.BLOCK_COMMENT,l.HEXCOLOR,l.IMPORTANT,l.CSS_NUMBER_MODE,...s,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...s,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},l.FUNCTION_DISPATCH]},{begin:i.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:n.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...s,l.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+t.join("|")+")\\b"}]}}},7731:e=>{e.exports=function(e){const t=e.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:t.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:t.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}},2399:e=>{e.exports=function(e){const t={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:t,illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:"number",variants:[{begin:e.C_NUMBER_RE+"[i]",relevance:1},e.C_NUMBER_MODE]},{begin:/:=/},{className:"function",beginKeywords:"func",end:"\\s*(\\{|$)",excludeEnd:!0,contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,illegal:/["']/}]}]}}},1738:e=>{e.exports=function(e){const t=e.regex;return{name:"GraphQL",aliases:["gql"],case_insensitive:!0,disableAutodetect:!1,keywords:{keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"],literal:["true","false","null"]},contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation",begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/,end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{scope:"symbol",begin:t.concat(/[_A-Za-z][_0-9A-Za-z]*/,t.lookahead(/\s*:/)),relevance:0}],illegal:[/[;<']/,/BEGIN/]}}},4762:e=>{e.exports=function(e){const t=e.regex,n={className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]},r=e.COMMENT();r.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const o={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},a={className:"literal",begin:/\bon|off|true|false|yes|no\b/},i={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},l={begin:/\[/,end:/\]/,contains:[r,a,o,i,n,"self"],relevance:0},s=t.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[r,{className:"section",begin:/\[+/,end:/\]+/},{begin:t.concat(s,"(\\s*\\.\\s*",s,")*",t.lookahead(/\s*=\s*[^#\s]/)),className:"attr",starts:{end:/$/,contains:[r,l,a,o,i,n]}}]}}},8257:e=>{var t="\\.([0-9](_*[0-9])*)",n="[0-9a-fA-F](_*[0-9a-fA-F])*",r={className:"number",variants:[{begin:`(\\b([0-9](_*[0-9])*)((${t})|\\.)?|(${t}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:`\\b([0-9](_*[0-9])*)((${t})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${t})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function o(e,t,n){return-1===n?"":e.replace(t,(r=>o(e,t,n-1)))}e.exports=function(e){const t=e.regex,n="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",a=n+o("(?:<"+n+"~~~(?:\\s*,\\s*"+n+"~~~)*>)?",/~~~/g,2),i={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},l={className:"meta",begin:"@"+n,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},s={className:"params",begin:/\(/,end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,n],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[t.concat(/(?!else)/,n),/\s+/,n,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,n],className:{1:"keyword",3:"title.class"},contains:[s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+a+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:i,relevance:0,contains:[l,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,r,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},r,l]}}},978:e=>{const t="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],r=["true","false","null","undefined","NaN","Infinity"],o=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],a=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],i=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],l=["arguments","this","super","console","window","document","localStorage","module","global"],s=[].concat(i,o,a);e.exports=function(e){const c=e.regex,u=t,d={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,t)=>{const n=e[0].length+e.index,r=e.input[n];if("<"===r||","===r)return void t.ignoreMatch();let o;">"===r&&(((e,{after:t})=>{const n="</"+e[0].slice(1);return-1!==e.input.indexOf(n,t)})(e,{after:n})||t.ignoreMatch()),(o=e.input.substring(n).match(/^\s+extends\s+/))&&0===o.index&&t.ignoreMatch()}},p={$pattern:t,keyword:n,literal:r,built_in:s,"variable.language":l},f="\\.([0-9](_?[0-9])*)",m="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",h={className:"number",variants:[{begin:`(\\b(${m})((${f})|\\.)?|(${f}))[eE][+-]?([0-9](_?[0-9])*)\\b`},{begin:`\\b(${m})\\b((${f})\\b|\\.)?|(${f})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},g={className:"subst",begin:"\\$\\{",end:"\\}",keywords:p,contains:[]},b={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,g],subLanguage:"xml"}},v={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,g],subLanguage:"css"}},y={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,g]},w={className:"comment",variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:u+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},x=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,b,v,y,h];g.contains=x.concat({begin:/\{/,end:/\}/,keywords:p,contains:["self"].concat(x)});const E=[].concat(w,g.contains),k=E.concat([{begin:/\(/,end:/\)/,keywords:p,contains:["self"].concat(E)}]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:k},S={variants:[{match:[/class/,/\s+/,u,/\s+/,/extends/,/\s+/,c.concat(u,"(",c.concat(/\./,u),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,u],scope:{1:"keyword",3:"title.class"}}]},O={relevance:0,match:c.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...o,...a]}},N={variants:[{match:[/function/,/\s+/,u,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[_],illegal:/%/},C={match:c.concat(/\b/,(R=[...i,"super"],c.concat("(?!",R.join("|"),")")),u,c.lookahead(/\(/)),className:"title.function",relevance:0};var R;const T={begin:c.concat(/\./,c.lookahead(c.concat(u,/(?![0-9A-Za-z$_(])/))),end:u,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},M={match:[/get|set/,/\s+/,u,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},_]},P="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",A={match:[/const|var|let/,/\s+/,u,/\s*/,/=\s*/,/(async\s*)?/,c.lookahead(P)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[_]};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:p,exports:{PARAMS_CONTAINS:k,CLASS_REFERENCE:O},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,b,v,y,w,h,O,{className:"attr",begin:u+c.lookahead(":"),relevance:0},A,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[w,e.REGEXP_MODE,{className:"function",begin:P,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:k}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:"</>"},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:d.begin,"on:begin":d.isTrulyOpeningTag,end:d.end}],subLanguage:"xml",contains:[{begin:d.begin,end:d.end,skip:!0,contains:["self"]}]}]},N,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[_,e.inherit(e.TITLE_MODE,{begin:u,className:"title.function"})]},{match:/\.\.\./,relevance:0},T,{match:"\\$"+u,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[_]},C,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},S,M,{match:/\$[(.]/}]}}},14:e=>{e.exports=function(e){const t=["true","false","null"],n={scope:"literal",beginKeywords:t.join(" ")};return{name:"JSON",keywords:{literal:t},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0},e.QUOTE_STRING_MODE,n,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}},5812:e=>{var t="\\.([0-9](_*[0-9])*)",n="[0-9a-fA-F](_*[0-9a-fA-F])*",r={className:"number",variants:[{begin:`(\\b([0-9](_*[0-9])*)((${t})|\\.)?|(${t}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:`\\b([0-9](_*[0-9])*)((${t})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${t})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};e.exports=function(e){const t={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},n={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},o={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},a={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},i={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[a,o]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,a,o]}]};o.contains.push(i);const l={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},s={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(i,{className:"string"}),"self"]}]},c=r,u=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},p=d;return p.variants[1].contains=[d],d.variants[1].contains=[p],{name:"Kotlin",aliases:["kt","kts"],keywords:t,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,u,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},n,l,s,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:t,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/</,end:/>/,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,u],relevance:0},e.C_LINE_COMMENT_MODE,u,l,s,i,e.C_NUMBER_MODE]},u]},{begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin:/</,end:/>/,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},l,s]},i,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},c]}}},4210:e=>{const t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],a=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),i=r.concat(o);e.exports=function(e){const l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}))(e),s=i,c="([\\w-]+|@\\{[\\w-]+\\})",u=[],d=[],p=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},f=function(e,t,n){return{className:e,begin:t,relevance:n}},m={$pattern:/[a-z-]+/,keyword:"and or not only",attribute:n.join(" ")},h={begin:"\\(",end:"\\)",contains:d,keywords:m,relevance:0};d.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,p("'"),p('"'),l.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},l.HEXCOLOR,h,f("variable","@@?[\\w-]+",10),f("variable","@\\{[\\w-]+\\}"),f("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},l.IMPORTANT,{beginKeywords:"and not"},l.FUNCTION_DISPATCH);const g=d.concat({begin:/\{/,end:/\}/,contains:u}),b={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(d)},v={begin:c+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},l.CSS_VARIABLE,{className:"attribute",begin:"\\b("+a.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:d}}]},y={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:m,returnEnd:!0,contains:d,relevance:0}},w={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:g}},x={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:c,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,b,f("keyword","all\\b"),f("variable","@\\{[\\w-]+\\}"),{begin:"\\b("+t.join("|")+")\\b",className:"selector-tag"},l.CSS_NUMBER_MODE,f("selector-tag",c,0),f("selector-id","#"+c),f("selector-class","\\."+c,0),f("selector-tag","&",0),l.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+r.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+o.join("|")+")"},{begin:/\(/,end:/\)/,relevance:0,contains:g},{begin:"!important"},l.FUNCTION_DISPATCH]},E={begin:`[\\w-]+:(:)?(${s.join("|")})`,returnBegin:!0,contains:[x]};return u.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,y,w,E,v,x,b,l.FUNCTION_DISPATCH),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:u}}},4981:e=>{e.exports=function(e){const t="\\[=*\\[",n="\\]=*\\]",r={begin:t,end:n,contains:["self"]},o=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[",n,{contains:[r],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:o.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:o}].concat(o)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:t,end:n,contains:[r],relevance:5}])}}},7903:e=>{e.exports=function(e){const t={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%<?\^\+\*]/}]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t]},r={className:"variable",begin:/\$\([\w-]+\s/,end:/\)/,keywords:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},contains:[t]},o={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},a={className:"section",begin:/^[^\s]+:/,end:/$/,contains:[t]};return{name:"Makefile",aliases:["mk","mak","make"],keywords:{$pattern:/[\w-]+/,keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"},contains:[e.HASH_COMMENT_MODE,t,n,r,o,{className:"meta",begin:/^\.PHONY:/,end:/$/,keywords:{$pattern:/[\.\w]+/,keyword:".PHONY"}},a]}}},2003:e=>{e.exports=function(e){const t={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},n={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},r={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},o={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]},a=e.inherit(r,{contains:[]}),i=e.inherit(o,{contains:[]});r.contains.push(i),o.contains.push(a);let l=[t,n];return[r,o,a,i].forEach((e=>{e.contains=e.contains.concat(l)})),l=l.concat(r,o),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:l},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:l}]}]},t,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},r,o,{className:"quote",begin:"^>\\s+",contains:l,end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},n,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}},2446:e=>{e.exports=function(e){const t=/[a-zA-Z@][a-zA-Z0-9_]*/,n={$pattern:t,keyword:["@interface","@class","@protocol","@implementation"]};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:{"variable.language":["this","super"],$pattern:t,keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]},illegal:"</",contains:[{className:"built_in",begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"string",variants:[{begin:'@"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]}]},{className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),{className:"string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+n.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:n,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}},2482:e=>{e.exports=function(e){const t=e.regex,n=/[dualxmsipngr]{0,12}/,r={$pattern:/[\w.]+/,keyword:["abs","accept","alarm","and","atan2","bind","binmode","bless","break","caller","chdir","chmod","chomp","chop","chown","chr","chroot","close","closedir","connect","continue","cos","crypt","dbmclose","dbmopen","defined","delete","die","do","dump","each","else","elsif","endgrent","endhostent","endnetent","endprotoent","endpwent","endservent","eof","eval","exec","exists","exit","exp","fcntl","fileno","flock","for","foreach","fork","format","formline","getc","getgrent","getgrgid","getgrnam","gethostbyaddr","gethostbyname","gethostent","getlogin","getnetbyaddr","getnetbyname","getnetent","getpeername","getpgrp","getpriority","getprotobyname","getprotobynumber","getprotoent","getpwent","getpwnam","getpwuid","getservbyname","getservbyport","getservent","getsockname","getsockopt","given","glob","gmtime","goto","grep","gt","hex","if","index","int","ioctl","join","keys","kill","last","lc","lcfirst","length","link","listen","local","localtime","log","lstat","lt","ma","map","mkdir","msgctl","msgget","msgrcv","msgsnd","my","ne","next","no","not","oct","open","opendir","or","ord","our","pack","package","pipe","pop","pos","print","printf","prototype","push","q|0","qq","quotemeta","qw","qx","rand","read","readdir","readline","readlink","readpipe","recv","redo","ref","rename","require","reset","return","reverse","rewinddir","rindex","rmdir","say","scalar","seek","seekdir","select","semctl","semget","semop","send","setgrent","sethostent","setnetent","setpgrp","setpriority","setprotoent","setpwent","setservent","setsockopt","shift","shmctl","shmget","shmread","shmwrite","shutdown","sin","sleep","socket","socketpair","sort","splice","split","sprintf","sqrt","srand","stat","state","study","sub","substr","symlink","syscall","sysopen","sysread","sysseek","system","syswrite","tell","telldir","tie","tied","time","times","tr","truncate","uc","ucfirst","umask","undef","unless","unlink","unpack","unshift","untie","until","use","utime","values","vec","wait","waitpid","wantarray","warn","when","while","write","x|0","xor","y|0"].join(" ")},o={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:r},a={begin:/->\{/,end:/\}/},i={variants:[{begin:/\$\d/},{begin:t.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@][^\s\w{]/,relevance:0}]},l=[e.BACKSLASH_ESCAPE,o,i],s=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],c=(e,r,o="\\1")=>{const a="\\1"===o?o:t.concat(o,r);return t.concat(t.concat("(?:",e,")"),r,/(?:\\.|[^\\\/])*?/,a,/(?:\\.|[^\\\/])*?/,o,n)},u=(e,r,o)=>t.concat(t.concat("(?:",e,")"),r,/(?:\\.|[^\\\/])*?/,o,n),d=[i,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),a,{className:"string",contains:l,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:c("s|tr|y",t.either(...s,{capture:!0}))},{begin:c("s|tr|y","\\(","\\)")},{begin:c("s|tr|y","\\[","\\]")},{begin:c("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:u("(?:m|qr)?",/\//,/\//)},{begin:u("m|qr",t.either(...s,{capture:!0}),/\1/)},{begin:u("m|qr",/\(/,/\)/)},{begin:u("m|qr",/\[/,/\]/)},{begin:u("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return o.contains=d,a.contains=d,{name:"Perl",aliases:["pl","pm"],keywords:r,contains:d}}},5112:e=>{e.exports=function(e){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}},2656:e=>{e.exports=function(e){const t=e.regex,n=/(?![A-Za-z0-9])(?![$])/,r=t.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,n),o=t.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,n),a={scope:"variable",match:"\\$+"+r},i={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},l=e.inherit(e.APOS_STRING_MODE,{illegal:null}),s="[ \t\n]",c={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(i)}),l,e.END_SAME_AS_BEGIN({begin:/<<<[ \t]*(\w+)\n/,end:/[ \t]*(\w+)\b/,contains:e.QUOTE_STRING_MODE.contains.concat(i)})]},u={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},d=["false","null","true"],p=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],f=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],m={keyword:p,literal:(e=>{const t=[];return e.forEach((e=>{t.push(e),e.toLowerCase()===e?t.push(e.toUpperCase()):t.push(e.toLowerCase())})),t})(d),built_in:f},h=e=>e.map((e=>e.replace(/\|\d+$/,""))),g={variants:[{match:[/new/,t.concat(s,"+"),t.concat("(?!",h(f).join("\\b|"),"\\b)"),o],scope:{1:"keyword",4:"title.class"}}]},b=t.concat(r,"\\b(?!\\()"),v={variants:[{match:[t.concat(/::/,t.lookahead(/(?!class\b)/)),b],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[o,t.concat(/::/,t.lookahead(/(?!class\b)/)),b],scope:{1:"title.class",3:"variable.constant"}},{match:[o,t.concat("::",t.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[o,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},y={scope:"attr",match:t.concat(r,t.lookahead(":"),t.lookahead(/(?!::)/))},w={relevance:0,begin:/\(/,end:/\)/,keywords:m,contains:[y,a,v,e.C_BLOCK_COMMENT_MODE,c,u,g]},x={relevance:0,match:[/\b/,t.concat("(?!fn\\b|function\\b|",h(p).join("\\b|"),"|",h(f).join("\\b|"),"\\b)"),r,t.concat(s,"*"),t.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[w]};w.contains.push(x);const E=[y,v,e.C_BLOCK_COMMENT_MODE,c,u,g];return{case_insensitive:!1,keywords:m,contains:[{begin:t.concat(/#\[\s*/,o),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:d,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:d,keyword:["new","array"]},contains:["self",...E]},...E,{scope:"meta",match:o}]},e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},a,x,v,{match:[/const/,/\s/,r],scope:{1:"keyword",3:"variable.constant"}},g,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:m,contains:["self",a,v,e.C_BLOCK_COMMENT_MODE,c,u]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},c,u]}}},2437:e=>{e.exports=function(e){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}},3722:e=>{e.exports=function(e){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}},8245:e=>{e.exports=function(e){const t=e.regex,n=/[\p{XID_Start}_]\p{XID_Continue}*/u,r=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],o={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:r,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},a={className:"meta",begin:/^(>>>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:o,illegal:/#/},l={begin:/\{\{/,relevance:0},s={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,l,i]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,l,i]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,l,i]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,l,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},c="[0-9](_?[0-9])*",u=`(\\b(${c}))?\\.(${c})|\\b(${c})\\.`,d=`\\b|${r.join("|")}`,p={className:"number",relevance:0,variants:[{begin:`(\\b(${c})|(${u}))[eE][+-]?(${c})[jJ]?(?=${d})`},{begin:`(${u})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${d})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${d})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${d})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${d})`},{begin:`\\b(${c})[jJ](?=${d})`}]},f={className:"comment",begin:t.lookahead(/# type:/),end:/$/,keywords:o,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:["self",a,p,s,e.HASH_COMMENT_MODE]}]};return i.contains=[s,p,a],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:o,illegal:/(<\/|->|\?)|=>/,contains:[a,p,{begin:/\bself\b/},{beginKeywords:"if",relevance:0},s,f,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,n],scope:{1:"keyword",3:"title.function"},contains:[m]},{variants:[{match:[/\bclass/,/\s+/,n,/\s*/,/\(\s*/,n,/\s*\)/]},{match:[/\bclass/,/\s+/,n]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[p,m,s]}]}}},4730:e=>{e.exports=function(e){const t=e.regex,n=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,r=t.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),o=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,a=t.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/);return{name:"R",keywords:{$pattern:n,keyword:"function if in break next repeat else for while",literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"},contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:t.lookahead(t.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{scope:"variable",variants:[{match:n},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]}),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE],variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[o,r]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,r]},{scope:{1:"punctuation",2:"number"},match:[a,r]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,r]}]},{scope:{3:"operator"},match:[n,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:o},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:a},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}},7905:e=>{e.exports=function(e){const t=e.regex,n="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",r=t.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),o=t.concat(r,/(::\w+)*/),a={"variable.constant":["__FILE__","__LINE__"],"variable.language":["self","super"],keyword:["alias","and","attr_accessor","attr_reader","attr_writer","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","include","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield"],built_in:["proc","lambda"],literal:["true","false","nil"]},i={className:"doctag",begin:"@[A-Za-z]+"},l={begin:"#<",end:">"},s=[e.COMMENT("#","$",{contains:[i]}),e.COMMENT("^=begin","^=end",{contains:[i],relevance:10}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/,end:/\}/,keywords:a},u={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?</,end:/>/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:t.concat(/<<[-~]?'?/,t.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},d="[0-9](_?[0-9])*",p={className:"number",relevance:0,variants:[{begin:`\\b([1-9](_?[0-9])*|0)(\\.(${d}))?([eE][+-]?(${d})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},f={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:a}]},m=[u,{variants:[{match:[/class\s+/,o,/\s+<\s+/,o]},{match:[/class\s+/,o]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:a},{relevance:0,match:[o,/\.new[ (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{match:[/def/,/\s+/,n],scope:{1:"keyword",3:"title.function"},contains:[f]},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[u,{begin:n}],relevance:0},p,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(l,s),relevance:0}].concat(l,s);c.contains=m,f.contains=m;const h=[{begin:/^\s*=>/,starts:{end:"$",contains:m}},{className:"meta.prompt",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])",starts:{end:"$",keywords:a,contains:m}}];return s.unshift(l),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:[e.SHEBANG({binary:"ruby"})].concat(h).concat(s).concat(m)}}},9880:e=>{e.exports=function(e){const t=e.regex,n={className:"title.function.invoke",relevance:0,begin:t.concat(/\b/,/(?!let\b)/,e.IDENT_RE,t.lookahead(/\s*\(/))},r="([ui](8|16|32|64|128|size)|f(32|64))?",o=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],a=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:a,keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","unsafe","unsized","use","virtual","where","while","yield"],literal:["true","false","Some","None","Ok","Err"],built_in:o},illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]}),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{className:"string",variants:[{begin:/b?r(#*)"(.|\n)*?"\1(?!#)/},{begin:/b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/}]},{className:"symbol",begin:/'[a-zA-Z_][a-zA-Z0-9_]*/},{className:"number",variants:[{begin:"\\b0b([01_]+)"+r},{begin:"\\b0o([0-7_]+)"+r},{begin:"\\b0x([A-Fa-f0-9_]+)"+r},{begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+r}],relevance:0},{begin:[/fn/,/\s+/,e.UNDERSCORE_IDENT_RE],className:{1:"keyword",3:"title.function"}},{className:"meta",begin:"#!?\\[",end:"\\]",contains:[{className:"string",begin:/"/,end:/"/}]},{begin:[/let/,/\s+/,/(?:mut\s+)?/,e.UNDERSCORE_IDENT_RE],className:{1:"keyword",3:"keyword",4:"variable"}},{begin:[/for/,/\s+/,e.UNDERSCORE_IDENT_RE,/\s+/,/in/],className:{1:"keyword",3:"variable",5:"keyword"}},{begin:[/type/,/\s+/,e.UNDERSCORE_IDENT_RE],className:{1:"keyword",3:"title.class"}},{begin:[/(?:trait|enum|struct|union|impl|for)/,/\s+/,e.UNDERSCORE_IDENT_RE],className:{1:"keyword",3:"title.class"}},{begin:e.IDENT_RE+"::",keywords:{keyword:"Self",built_in:o,type:a}},{className:"punctuation",begin:"->"},n]}}},1062:e=>{const t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],a=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse();e.exports=function(e){const i=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}))(e),l=o,s=r,c="@[a-z-]+",u={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},i.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+t.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+s.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+l.join("|")+")"},u,{begin:/\(/,end:/\)/,contains:[i.CSS_NUMBER_MODE]},i.CSS_VARIABLE,{className:"attribute",begin:"\\b("+a.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,relevance:0,contains:[i.BLOCK_COMMENT,u,i.HEXCOLOR,i.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i.IMPORTANT,i.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:c,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:n.join(" ")},contains:[{begin:c,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},u,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i.HEXCOLOR,i.CSS_NUMBER_MODE]},i.FUNCTION_DISPATCH]}}},6256:e=>{e.exports=function(e){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}},8935:e=>{e.exports=function(e){const t=e.regex,n=e.COMMENT("--","$"),r=["true","false","unknown"],o=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],a=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],i=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],l=a,s=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!a.includes(e))),c={begin:t.concat(/\b/,t.either(...l),/\s*\(/),relevance:0,keywords:{built_in:l}};return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:function(e,{exceptions:t,when:n}={}){const r=n;return t=t||[],e.map((e=>e.match(/\|\d+$/)||t.includes(e)?e:r(e)?`${e}|0`:e))}(s,{when:e=>e.length<3}),literal:r,type:o,built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]},contains:[{begin:t.either(...i),relevance:0,keywords:{$pattern:/[\w\.]+/,keyword:s.concat(i),literal:r,type:o}},{className:"type",begin:t.either("double precision","large object","with timezone","without timezone")},c,{className:"variable",begin:/@[a-z0-9]+/},{className:"string",variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,contains:[{begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}},7690:e=>{function t(e){return e?"string"==typeof e?e:e.source:null}function n(e){return r("(?=",e,")")}function r(...e){return e.map((e=>t(e))).join("")}function o(...e){const n=function(e){const t=e[e.length-1];return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}(e);return"("+(n.capture?"":"?:")+e.map((e=>t(e))).join("|")+")"}const a=e=>r(/\b/,e,/\w$/.test(e)?/\b/:/\B/),i=["Protocol","Type"].map(a),l=["init","self"].map(a),s=["Any","Self"],c=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","distributed","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],u=["false","nil","true"],d=["assignment","associativity","higherThan","left","lowerThan","none","right"],p=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],f=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],m=o(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),h=o(m,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),g=r(m,h,"*"),b=o(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),v=o(b,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),y=r(b,v,"*"),w=r(/[A-Z]/,v,"*"),x=["autoclosure",r(/convention\(/,o("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",r(/objc\(/,y,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","testable","UIApplicationMain","unknown","usableFromInline"],E=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];e.exports=function(e){const t={match:/\s+/,relevance:0},m=e.COMMENT("/\\*","\\*/",{contains:["self"]}),b=[e.C_LINE_COMMENT_MODE,m],k={match:[/\./,o(...i,...l)],className:{2:"keyword"}},_={match:r(/\./,o(...c)),relevance:0},S=c.filter((e=>"string"==typeof e)).concat(["_|0"]),O={variants:[{className:"keyword",match:o(...c.filter((e=>"string"!=typeof e)).concat(s).map(a),...l)}]},N={$pattern:o(/\b\w+/,/#\w+/),keyword:S.concat(p),literal:u},C=[k,_,O],R=[{match:r(/\./,o(...f)),relevance:0},{className:"built_in",match:r(/\b/,o(...f),/(?=\()/)}],T={match:/->/,relevance:0},M=[T,{className:"operator",relevance:0,variants:[{match:g},{match:`\\.(\\.|${h})+`}]}],P="([0-9a-fA-F]_*)+",A={className:"number",relevance:0,variants:[{match:"\\b(([0-9]_*)+)(\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\b"},{match:`\\b0x(${P})(\\.(${P}))?([pP][+-]?(([0-9]_*)+))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},L=(e="")=>({className:"subst",variants:[{match:r(/\\/,e,/[0\\tnr"']/)},{match:r(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]}),Z=(e="")=>({className:"subst",match:r(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)}),I=(e="")=>({className:"subst",label:"interpol",begin:r(/\\/,e,/\(/),end:/\)/}),j=(e="")=>({begin:r(e,/"""/),end:r(/"""/,e),contains:[L(e),Z(e),I(e)]}),D=(e="")=>({begin:r(e,/"/),end:r(/"/,e),contains:[L(e),I(e)]}),z={className:"string",variants:[j(),j("#"),j("##"),j("###"),D(),D("#"),D("##"),D("###")]},F={match:r(/`/,y,/`/)},B=[F,{className:"variable",match:/\$\d+/},{className:"variable",match:`\\$${v}+`}],$=[{match:/(@|#(un)?)available/,className:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:E,contains:[...M,A,z]}]}},{className:"keyword",match:r(/@/,o(...x))},{className:"meta",match:r(/@/,y)}],U={match:n(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:r(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,v,"+")},{className:"type",match:w,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:r(/\s+&\s+/,n(w)),relevance:0}]},W={begin:/</,end:/>/,keywords:N,contains:[...b,...C,...$,T,U]};U.contains.push(W);const H={begin:/\(/,end:/\)/,relevance:0,keywords:N,contains:["self",{match:r(y,/\s*:/),keywords:"_|0",relevance:0},...b,...C,...R,...M,A,z,...B,...$,U]},q={begin:/</,end:/>/,contains:[...b,U]},V={begin:/\(/,end:/\)/,keywords:N,contains:[{begin:o(n(r(y,/\s*:/)),n(r(y,/\s+/,y,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:y}]},...b,...C,...M,A,z,...$,U,H],endsParent:!0,illegal:/["']/},K={match:[/func/,/\s+/,o(F.match,y,g)],className:{1:"keyword",3:"title.function"},contains:[q,V,t],illegal:[/\[/,/%/]},G={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[q,V,t],illegal:/\[|%/},Q={match:[/operator/,/\s+/,g],className:{1:"keyword",3:"title"}},X={begin:[/precedencegroup/,/\s+/,w],className:{1:"keyword",3:"title"},contains:[U],keywords:[...d,...u],end:/}/};for(const e of z.variants){const t=e.contains.find((e=>"interpol"===e.label));t.keywords=N;const n=[...C,...R,...M,A,z,...B];t.contains=[...n,{begin:/\(/,end:/\)/,contains:["self",...n]}]}return{name:"Swift",keywords:N,contains:[...b,K,G,{beginKeywords:"struct protocol class extension enum actor",end:"\\{",excludeEnd:!0,keywords:N,contains:[e.inherit(e.TITLE_MODE,{className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...C]},Q,X,{beginKeywords:"import",end:/$/,contains:[...b],relevance:0},...C,...R,...M,A,z,...B,...$,U,H]}}},8987:e=>{const t="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],r=["true","false","null","undefined","NaN","Infinity"],o=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],a=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],i=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],l=["arguments","this","super","console","window","document","localStorage","module","global"],s=[].concat(i,o,a);function c(e){const c=e.regex,u=t,d={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,t)=>{const n=e[0].length+e.index,r=e.input[n];if("<"===r||","===r)return void t.ignoreMatch();let o;">"===r&&(((e,{after:t})=>{const n="</"+e[0].slice(1);return-1!==e.input.indexOf(n,t)})(e,{after:n})||t.ignoreMatch()),(o=e.input.substring(n).match(/^\s+extends\s+/))&&0===o.index&&t.ignoreMatch()}},p={$pattern:t,keyword:n,literal:r,built_in:s,"variable.language":l},f="\\.([0-9](_?[0-9])*)",m="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",h={className:"number",variants:[{begin:`(\\b(${m})((${f})|\\.)?|(${f}))[eE][+-]?([0-9](_?[0-9])*)\\b`},{begin:`\\b(${m})\\b((${f})\\b|\\.)?|(${f})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},g={className:"subst",begin:"\\$\\{",end:"\\}",keywords:p,contains:[]},b={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,g],subLanguage:"xml"}},v={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,g],subLanguage:"css"}},y={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,g]},w={className:"comment",variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:u+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},x=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,b,v,y,h];g.contains=x.concat({begin:/\{/,end:/\}/,keywords:p,contains:["self"].concat(x)});const E=[].concat(w,g.contains),k=E.concat([{begin:/\(/,end:/\)/,keywords:p,contains:["self"].concat(E)}]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:k},S={variants:[{match:[/class/,/\s+/,u,/\s+/,/extends/,/\s+/,c.concat(u,"(",c.concat(/\./,u),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,u],scope:{1:"keyword",3:"title.class"}}]},O={relevance:0,match:c.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...o,...a]}},N={variants:[{match:[/function/,/\s+/,u,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[_],illegal:/%/},C={match:c.concat(/\b/,(R=[...i,"super"],c.concat("(?!",R.join("|"),")")),u,c.lookahead(/\(/)),className:"title.function",relevance:0};var R;const T={begin:c.concat(/\./,c.lookahead(c.concat(u,/(?![0-9A-Za-z$_(])/))),end:u,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},M={match:[/get|set/,/\s+/,u,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},_]},P="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",A={match:[/const|var|let/,/\s+/,u,/\s*/,/=\s*/,/(async\s*)?/,c.lookahead(P)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[_]};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:p,exports:{PARAMS_CONTAINS:k,CLASS_REFERENCE:O},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,b,v,y,w,h,O,{className:"attr",begin:u+c.lookahead(":"),relevance:0},A,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[w,e.REGEXP_MODE,{className:"function",begin:P,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:k}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:"</>"},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:d.begin,"on:begin":d.isTrulyOpeningTag,end:d.end}],subLanguage:"xml",contains:[{begin:d.begin,end:d.end,skip:!0,contains:["self"]}]}]},N,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[_,e.inherit(e.TITLE_MODE,{begin:u,className:"title.function"})]},{match:/\.\.\./,relevance:0},T,{match:"\\$"+u,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[_]},C,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},S,M,{match:/\$[(.]/}]}}e.exports=function(e){const o=c(e),a=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],i={beginKeywords:"namespace",end:/\{/,excludeEnd:!0,contains:[o.exports.CLASS_REFERENCE]},u={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:a},contains:[o.exports.CLASS_REFERENCE]},d={$pattern:t,keyword:n.concat(["type","namespace","interface","public","private","protected","implements","declare","abstract","readonly","enum","override"]),literal:r,built_in:s.concat(a),"variable.language":l},p={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},f=(e,t,n)=>{const r=e.contains.findIndex((e=>e.label===t));if(-1===r)throw new Error("can not find mode to replace");e.contains.splice(r,1,n)};return Object.assign(o.keywords,d),o.exports.PARAMS_CONTAINS.push(p),o.contains=o.contains.concat([p,i,u]),f(o,"shebang",e.SHEBANG()),f(o,"use_strict",{className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/}),o.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(o,{name:"TypeScript",aliases:["ts","tsx"]}),o}},7531:e=>{e.exports=function(e){const t=e.regex,n=/\d{1,2}\/\d{1,2}\/\d{4}/,r=/\d{4}-\d{1,2}-\d{1,2}/,o=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,a=/\d{1,2}(:\d{1,2}){1,2}/,i={className:"literal",variants:[{begin:t.concat(/# */,t.either(r,n),/ *#/)},{begin:t.concat(/# */,a,/ *#/)},{begin:t.concat(/# */,o,/ *#/)},{begin:t.concat(/# */,t.either(r,n),/ +/,t.either(o,a),/ *#/)}]},l=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),s=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",literal:"true false nothing"},illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},i,{className:"number",relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{className:"label",begin:/^\w+:/},l,s,{className:"meta",begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{keyword:"const disable else elseif enable end externalsource if region then"},contains:[s]}]}}},1533:e=>{e.exports=function(e){e.regex;const t=e.COMMENT(/\(;/,/;\)/);return t.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"]},contains:[e.COMMENT(/;;/,/$/),t,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/,className:"type"},{className:"keyword",match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/},{className:"number",relevance:0,match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/}]}}},4610:e=>{e.exports=function(e){const t=e.regex,n=t.concat(/[\p{L}_]/u,t.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),r={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},o={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},a=e.inherit(o,{begin:/\(/,end:/\)/}),i=e.inherit(e.APOS_STRING_MODE,{className:"string"}),l=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),s={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:/[\p{L}0-9._:-]+/u,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[r]},{begin:/'/,end:/'/,contains:[r]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[o,l,i,a,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[o,a,l,i]}]}]},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},r,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[l]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[s],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[s],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:t.concat(/</,t.lookahead(t.concat(n,t.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:s}]},{className:"tag",begin:t.concat(/<\//,t.lookahead(t.concat(n,/>/))),contains:[{className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},1392:e=>{e.exports=function(e){const t="true false yes no null",n="[\\w#;/?:@&=+$,.~*'()[\\]]+",r={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},o=e.inherit(r,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),a={end:",",endsWithParent:!0,excludeEnd:!0,keywords:t,relevance:0},i={begin:/\{/,end:/\}/,contains:[a],illegal:"\\n",relevance:0},l={begin:"\\[",end:"\\]",contains:[a],illegal:"\\n",relevance:0},s=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+n},{className:"type",begin:"!<"+n+">"},{className:"type",begin:"!"+n},{className:"type",begin:"!!"+n},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:t,keywords:{literal:t}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},i,l,r],c=[...s];return c.pop(),c.push(o),a.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:s}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var a=r[e]={exports:{}};return n[e](a,a.exports,o),a.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(n,r){if(1&r&&(n=this(n)),8&r)return n;if("object"==typeof n&&n){if(4&r&&n.__esModule)return n;if(16&r&&"function"==typeof n.then)return n}var a=Object.create(null);o.r(a);var i={};e=e||[null,t({}),t([]),t(t)];for(var l=2&r&&n;"object"==typeof l&&!~e.indexOf(l);l=t(l))Object.getOwnPropertyNames(l).forEach((e=>i[e]=()=>n[e]));return i.default=()=>n,o.d(a,i),a},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e=o(7294),t=o.t(e,2),n=o(745),r=o(1688),a=o(2798),i=o(3935);let l=function(e){e()};const s=()=>l,c=(0,e.createContext)(null);function u(){return(0,e.useContext)(c)}let d=()=>{throw new Error("uSES not initialized!")};const p=(e,t)=>e===t;function f(t=c){const n=t===c?u:()=>(0,e.useContext)(t);return function(t,r=p){const{store:o,subscription:a,getServerState:i}=n(),l=d(a.addNestedSub,o.getState,i||o.getState,t,r);return(0,e.useDebugValue)(l),l}}const m=f();o(8679),o(9864);const h={notify(){},get:()=>[]};const g="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?e.useLayoutEffect:e.useEffect;let b=null;const v=function({store:t,context:n,children:r,serverState:o}){const a=(0,e.useMemo)((()=>{const e=function(e,t){let n,r=h;function o(){i.onStateChange&&i.onStateChange()}function a(){n||(n=t?t.addNestedSub(o):e.subscribe(o),r=function(){const e=s();let t=null,n=null;return{clear(){t=null,n=null},notify(){e((()=>{let e=t;for(;e;)e.callback(),e=e.next}))},get(){let e=[],n=t;for(;n;)e.push(n),n=n.next;return e},subscribe(e){let r=!0,o=n={callback:e,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){r&&null!==t&&(r=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}())}const i={addNestedSub:function(e){return a(),r.subscribe(e)},notifyNestedSubs:function(){r.notify()},handleChangeWrapper:o,isSubscribed:function(){return Boolean(n)},trySubscribe:a,tryUnsubscribe:function(){n&&(n(),n=void 0,r.clear(),r=h)},getListeners:()=>r};return i}(t);return{store:t,subscription:e,getServerState:o?()=>o:void 0}}),[t,o]),i=(0,e.useMemo)((()=>t.getState()),[t]);g((()=>{const{subscription:e}=a;return e.onStateChange=e.notifyNestedSubs,e.trySubscribe(),i!==t.getState()&&e.notifyNestedSubs(),()=>{e.tryUnsubscribe(),e.onStateChange=void 0}}),[a,i]);const l=n||c;return e.createElement(l.Provider,{value:a},r)};function y(t=c){const n=t===c?u:()=>(0,e.useContext)(t);return function(){const{store:e}=n();return e}}const w=y();function x(e=c){const t=e===c?w:y(e);return function(){return t().dispatch}}const E=x();var k,_;function S(){return S=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},S.apply(this,arguments)}(e=>{d=e})(a.useSyncExternalStoreWithSelector),(e=>{b=e})(r.useSyncExternalStore),k=i.unstable_batchedUpdates,l=k,function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(_||(_={}));const O="popstate";function N(e){return{usr:e.state,key:e.key}}function C(e,t,n,r){return void 0===n&&(n=null),S({pathname:"string"==typeof e?e:e.pathname,search:"",hash:""},"string"==typeof t?T(t):t,{state:n,key:t&&t.key||r||Math.random().toString(36).substr(2,8)})}function R(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function T(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}var M;function P(e,t,n){void 0===n&&(n="/");let r=z(("string"==typeof t?T(t):t).pathname||"/",n);if(null==r)return null;let o=A(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(o);let a=null;for(let e=0;null==a&&e<o.length;++e)a=j(o[e],r);return a}function A(e,t,n,r){return void 0===t&&(t=[]),void 0===n&&(n=[]),void 0===r&&(r=""),e.forEach(((e,o)=>{let a={relativePath:e.path||"",caseSensitive:!0===e.caseSensitive,childrenIndex:o,route:e};a.relativePath.startsWith("/")&&(F(a.relativePath.startsWith(r),'Absolute route path "'+a.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),a.relativePath=a.relativePath.slice(r.length));let i=U([r,a.relativePath]),l=n.concat(a);e.children&&e.children.length>0&&(F(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+i+'".'),A(e.children,t,l,i)),(null!=e.path||e.index)&&t.push({path:i,score:I(i,e.index),routesMeta:l})})),t}!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(M||(M={}));const L=/^:\w+$/,Z=e=>"*"===e;function I(e,t){let n=e.split("/"),r=n.length;return n.some(Z)&&(r+=-2),t&&(r+=2),n.filter((e=>!Z(e))).reduce(((e,t)=>e+(L.test(t)?3:""===t?1:10)),r)}function j(e,t){let{routesMeta:n}=e,r={},o="/",a=[];for(let e=0;e<n.length;++e){let i=n[e],l=e===n.length-1,s="/"===o?t:t.slice(o.length)||"/",c=D({path:i.relativePath,caseSensitive:i.caseSensitive,end:l},s);if(!c)return null;Object.assign(r,c.params);let u=i.route;a.push({params:r,pathname:U([o,c.pathname]),pathnameBase:W(U([o,c.pathnameBase])),route:u}),"/"!==c.pathnameBase&&(o=U([o,c.pathnameBase]))}return a}function D(e,t){"string"==typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=function(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!0),B("*"===e||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were "'+e.replace(/\*$/,"/*")+'" because the `*` character must always follow a `/` in the pattern. To get rid of this warning, please change the route path to "'+e.replace(/\*$/,"/*")+'".');let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/:(\w+)/g,((e,t)=>(r.push(t),"([^\\/]+)")));return e.endsWith("*")?(r.push("*"),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):o+=n?"\\/*$":"(?:(?=[@.~-]|%[0-9A-F]{2})|\\b|\\/|$)",[new RegExp(o,t?void 0:"i"),r]}(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let a=o[0],i=a.replace(/(.)\/+$/,"$1"),l=o.slice(1);return{params:r.reduce(((e,t,n)=>{if("*"===t){let e=l[n]||"";i=a.slice(0,a.length-e.length).replace(/(.)\/+$/,"$1")}return e[t]=function(e,t){try{return decodeURIComponent(e)}catch(n){return B(!1,'The value for the URL param "'+t+'" will not be decoded because the string "'+e+'" is a malformed URL segment. This is probably due to a bad percent encoding ('+n+")."),e}}(l[n]||"",t),e}),{}),pathname:a,pathnameBase:i,pattern:e}}function z(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function F(e,t){if(!1===e||null==e)throw new Error(t)}function B(e,t){if(!e){"undefined"!=typeof console&&console.warn(t);try{throw new Error(t)}catch(e){}}}function $(e,t,n,r){void 0===r&&(r=!1);let o,a="string"==typeof e?T(e):S({},e),i=""===e||""===a.pathname,l=i?"/":a.pathname;if(r||null==l)o=n;else{let e=t.length-1;if(l.startsWith("..")){let t=l.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}o=e>=0?t[e]:"/"}let s=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:o=""}="string"==typeof e?T(e):e,a=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:a,search:H(r),hash:q(o)}}(a,o),c=l&&"/"!==l&&l.endsWith("/"),u=(i||"."===l)&&n.endsWith("/");return s.pathname.endsWith("/")||!c&&!u||(s.pathname+="/"),s}const U=e=>e.join("/").replace(/\/\/+/g,"/"),W=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),H=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",q=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";class V extends Error{}function K(){return K=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},K.apply(this,arguments)}"function"==typeof Object.is&&Object.is;const{useState:G,useEffect:Q,useLayoutEffect:X,useDebugValue:Y}=t;"undefined"==typeof window||void 0===window.document||window.document.createElement,t.useSyncExternalStore;const J=e.createContext(null),ee=e.createContext(null),te=e.createContext(null),ne=e.createContext(null),re=e.createContext(null),oe=e.createContext({outlet:null,matches:[]}),ae=e.createContext(null);function ie(){return null!=e.useContext(re)}function le(){return ie()||F(!1),e.useContext(re).location}function se(e){return e.filter(((t,n)=>0===n||!t.route.index&&t.pathnameBase!==e[n-1].pathnameBase))}function ce(){ie()||F(!1);let{basename:t,navigator:n}=e.useContext(ne),{matches:r}=e.useContext(oe),{pathname:o}=le(),a=JSON.stringify(se(r).map((e=>e.pathnameBase))),i=e.useRef(!1);return e.useEffect((()=>{i.current=!0})),e.useCallback((function(e,r){if(void 0===r&&(r={}),!i.current)return;if("number"==typeof e)return void n.go(e);let l=$(e,JSON.parse(a),o,"path"===r.relative);"/"!==t&&(l.pathname="/"===l.pathname?t:U([t,l.pathname])),(r.replace?n.replace:n.push)(l,r.state,r)}),[t,n,a,o])}function ue(t,n){let{relative:r}=void 0===n?{}:n,{matches:o}=e.useContext(oe),{pathname:a}=le(),i=JSON.stringify(se(o).map((e=>e.pathnameBase)));return e.useMemo((()=>$(t,JSON.parse(i),a,"path"===r)),[t,i,a,r])}function de(){let t=function(){var t;let n=e.useContext(ae),r=function(t){let n=e.useContext(te);return n||F(!1),n}(me.UseRouteError),o=e.useContext(oe),a=o.matches[o.matches.length-1];return n||(o||F(!1),!a.route.id&&F(!1),null==(t=r.errors)?void 0:t[a.route.id])}(),n=t instanceof class{constructor(e,t,n){this.status=e,this.statusText=t||"",this.data=n}}?t.status+" "+t.statusText:t instanceof Error?t.message:JSON.stringify(t),r=t instanceof Error?t.stack:null,o="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:o},i={padding:"2px 4px",backgroundColor:o};return e.createElement(e.Fragment,null,e.createElement("h2",null,"Unhandled Thrown Error!"),e.createElement("h3",{style:{fontStyle:"italic"}},n),r?e.createElement("pre",{style:a},r):null,e.createElement("p",null,"💿 Hey developer 👋"),e.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",e.createElement("code",{style:i},"errorElement")," props on ",e.createElement("code",{style:i},"<Route>")))}class pe extends e.Component{constructor(e){super(e),this.state={location:e.location,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location?{error:e.error,location:e.location}:{error:e.error||t.error,location:t.location}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return this.state.error?e.createElement(ae.Provider,{value:this.state.error,children:this.props.component}):this.props.children}}function fe(t){let{routeContext:n,match:r,children:o}=t,a=e.useContext(J);return a&&r.route.errorElement&&(a._deepestRenderedBoundaryId=r.route.id),e.createElement(oe.Provider,{value:n},o)}var me,he;function ge(e){F(!1)}function be(t){let{basename:n="/",children:r=null,location:o,navigationType:a=_.Pop,navigator:i,static:l=!1}=t;ie()&&F(!1);let s=n.replace(/^\/*/,"/"),c=e.useMemo((()=>({basename:s,navigator:i,static:l})),[s,i,l]);"string"==typeof o&&(o=T(o));let{pathname:u="/",search:d="",hash:p="",state:f=null,key:m="default"}=o,h=e.useMemo((()=>{let e=z(u,s);return null==e?null:{pathname:e,search:d,hash:p,state:f,key:m}}),[s,u,d,p,f,m]);return null==h?null:e.createElement(ne.Provider,{value:c},e.createElement(re.Provider,{children:r,value:{location:h,navigationType:a}}))}function ve(t){let{children:n,location:r}=t,o=e.useContext(ee);return function(t,n){ie()||F(!1);let r=e.useContext(te),{matches:o}=e.useContext(oe),a=o[o.length-1],i=a?a.params:{},l=(a&&a.pathname,a?a.pathnameBase:"/");a&&a.route;let s,c=le();if(n){var u;let e="string"==typeof n?T(n):n;"/"===l||(null==(u=e.pathname)?void 0:u.startsWith(l))||F(!1),s=e}else s=c;let d=s.pathname||"/",p=P(t,{pathname:"/"===l?d:d.slice(l.length)||"/"}),f=function(t,n,r){if(void 0===n&&(n=[]),null==t){if(null==r||!r.errors)return null;t=r.matches}let o=t,a=null==r?void 0:r.errors;if(null!=a){let e=o.findIndex((e=>e.route.id&&(null==a?void 0:a[e.route.id])));e>=0||F(!1),o=o.slice(0,Math.min(o.length,e+1))}return o.reduceRight(((t,i,l)=>{let s=i.route.id?null==a?void 0:a[i.route.id]:null,c=r?i.route.errorElement||e.createElement(de,null):null,u=()=>e.createElement(fe,{match:i,routeContext:{outlet:t,matches:n.concat(o.slice(0,l+1))}},s?c:void 0!==i.route.element?i.route.element:t);return r&&(i.route.errorElement||0===l)?e.createElement(pe,{location:r.location,component:c,error:s,children:u()}):u()}),null)}(p&&p.map((e=>Object.assign({},e,{params:Object.assign({},i,e.params),pathname:U([l,e.pathname]),pathnameBase:"/"===e.pathnameBase?l:U([l,e.pathnameBase])}))),o,r||void 0);return n?e.createElement(re.Provider,{value:{location:K({pathname:"/",search:"",hash:"",state:null,key:"default"},s),navigationType:_.Pop}},f):f}(o&&!n?o.router.routes:we(n),r)}!function(e){e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator"}(me||(me={})),function(e){e[e.pending=0]="pending",e[e.success=1]="success",e[e.error=2]="error"}(he||(he={})),new Promise((()=>{}));class ye extends e.Component{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){console.error("<Await> caught the following error during render",e,t)}render(){let{children:e,errorElement:t,resolve:n}=this.props,r=null,o=he.pending;if(n instanceof Promise)if(this.state.error){he.error;let e=this.state.error;Promise.reject().catch((()=>{})),Object.defineProperty(r,"_tracked",{get:()=>!0}),Object.defineProperty(r,"_error",{get:()=>e})}else n._tracked?void 0!==r._error?he.error:void 0!==r._data?he.success:he.pending:(he.pending,Object.defineProperty(n,"_tracked",{get:()=>!0}),n.then((e=>Object.defineProperty(n,"_data",{get:()=>e})),(e=>Object.defineProperty(n,"_error",{get:()=>e}))));else he.success,Promise.resolve(),Object.defineProperty(r,"_tracked",{get:()=>!0}),Object.defineProperty(r,"_data",{get:()=>n});if(o===he.error&&r._error instanceof AbortedDeferredError)throw neverSettledPromise;if(o===he.error&&!t)throw r._error;if(o===he.error)return React.createElement(AwaitContext.Provider,{value:r,children:t});if(o===he.success)return React.createElement(AwaitContext.Provider,{value:r,children:e});throw r}}function we(t,n){void 0===n&&(n=[]);let r=[];return e.Children.forEach(t,((t,o)=>{if(!e.isValidElement(t))return;if(t.type===e.Fragment)return void r.push.apply(r,we(t.props.children,n));t.type!==ge&&F(!1);let a=[...n,o],i={id:t.props.id||a.join("-"),caseSensitive:t.props.caseSensitive,element:t.props.element,index:t.props.index,path:t.props.path,loader:t.props.loader,action:t.props.action,errorElement:t.props.errorElement,hasErrorBoundary:null!=t.props.errorElement,shouldRevalidate:t.props.shouldRevalidate,handle:t.props.handle};t.props.children&&(i.children=we(t.props.children,a)),r.push(i)})),r}function xe(){return xe=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},xe.apply(this,arguments)}const Ee=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset"];function ke(t){let{basename:n,children:r,window:o}=t,a=e.useRef();var i;null==a.current&&(a.current=(void 0===(i={window:o,v5Compat:!0})&&(i={}),function(e,t,n,r){void 0===r&&(r={});let{window:o=document.defaultView,v5Compat:a=!1}=r,i=o.history,l=_.Pop,s=null;function c(){l=_.Pop,s&&s({action:l,location:u.location})}let u={get action(){return l},get location(){return e(o,i)},listen(e){if(s)throw new Error("A history only accepts one active listener");return o.addEventListener(O,c),s=e,()=>{o.removeEventListener(O,c),s=null}},createHref:e=>t(o,e),push:function(e,t){l=_.Push;let r=C(u.location,e,t);n&&n(r,e);let c=N(r),d=u.createHref(r);try{i.pushState(c,"",d)}catch(e){o.location.assign(d)}a&&s&&s({action:l,location:r})},replace:function(e,t){l=_.Replace;let r=C(u.location,e,t);n&&n(r,e);let o=N(r),c=u.createHref(r);i.replaceState(o,"",c),a&&s&&s({action:l,location:r})},go:e=>i.go(e)};return u}((function(e,t){let{pathname:n,search:r,hash:o}=e.location;return C("",{pathname:n,search:r,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"==typeof t?t:R(t)}),null,i)));let l=a.current,[s,c]=e.useState({action:l.action,location:l.location});return e.useLayoutEffect((()=>l.listen(c)),[l]),e.createElement(be,{basename:n,children:r,location:s.location,navigationType:s.action,navigator:l})}const _e=e.forwardRef((function(t,n){let{onClick:r,relative:o,reloadDocument:a,replace:i,state:l,target:s,to:c,preventScrollReset:u}=t,d=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(t,Ee),p=function(t,n){let{relative:r}=void 0===n?{}:n;ie()||F(!1);let{basename:o,navigator:a}=e.useContext(ne),{hash:i,pathname:l,search:s}=ue(t,{relative:r}),c=l;return"/"!==o&&(c="/"===l?o:U([o,l])),a.createHref({pathname:c,search:s,hash:i})}(c,{relative:o}),f=function(t,n){let{target:r,replace:o,state:a,preventScrollReset:i,relative:l}=void 0===n?{}:n,s=ce(),c=le(),u=ue(t,{relative:l});return e.useCallback((e=>{if(function(e,t){return!(0!==e.button||t&&"_self"!==t||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e))}(e,r)){e.preventDefault();let n=void 0!==o?o:R(c)===R(u);s(t,{replace:n,state:a,preventScrollReset:i,relative:l})}}),[c,s,u,o,a,r,t,i,l])}(c,{replace:i,state:l,target:s,preventScrollReset:u,relative:o});return e.createElement("a",xe({},d,{href:p,onClick:a?r:function(e){r&&r(e),e.defaultPrevented||f(e)},ref:n,target:s}))}));var Se=o(7462),Oe=o(3366),Ne=o(6010),Ce=o(9378),Re=o(6523),Te=o(9766),Me=o(6977);const Pe=["sx"];function Ae(e){const{sx:t}=e,n=(0,Oe.Z)(e,Pe),{systemProps:r,otherProps:o}=(e=>{const t={systemProps:{},otherProps:{}};return Object.keys(e).forEach((n=>{Me.Gc[n]?t.systemProps[n]=e[n]:t.otherProps[n]=e[n]})),t})(n);let a;return a=Array.isArray(t)?[r,...t]:"function"==typeof t?(...e)=>{const n=t(...e);return(0,Te.P)(n)?(0,Se.Z)({},r,n):r}:(0,Se.Z)({},r,t),(0,Se.Z)({},o,{sx:a})}var Le=o(6682),Ze=o(5893);const Ie=["className","component"];var je=o(7078),De=o(5517);const ze=function(t={}){const{defaultTheme:n,defaultClassName:r="MuiBox-root",generateClassName:o,styleFunctionSx:a=Re.Z}=t,i=(0,Ce.ZP)("div",{shouldForwardProp:e=>"theme"!==e&&"sx"!==e&&"as"!==e})(a),l=e.forwardRef((function(e,t){const a=(0,Le.Z)(n),l=Ae(e),{className:s,component:c="div"}=l,u=(0,Oe.Z)(l,Ie);return(0,Ze.jsx)(i,(0,Se.Z)({as:c,ref:t,className:(0,Ne.Z)(s,o?o(r):r),theme:a},u))}));return l}({defaultTheme:(0,De.Z)(),defaultClassName:"MuiBox-root",generateClassName:je.Z.generate}),Fe=ze;var Be=o(4819),$e=o(6760);const Ue="function"==typeof Symbol&&Symbol.for?Symbol.for("mui.nested"):"__THEME_NESTED__",We=function(t){const{children:n,theme:r}=t,o=(0,$e.Z)(),a=e.useMemo((()=>{const e=null===o?r:function(e,t){return"function"==typeof t?t(e):(0,Se.Z)({},e,t)}(o,r);return null!=e&&(e[Ue]=null!==o),e}),[r,o]);return(0,Ze.jsx)(Be.Z.Provider,{value:a,children:n})};var He=o(2443);function qe(e){const t=(0,Le.Z)();return(0,Ze.jsx)(He.T.Provider,{value:"object"==typeof t?t:{},children:e.children})}const Ve=function(e){const{children:t,theme:n}=e;return(0,Ze.jsx)(We,{theme:n,children:(0,Ze.jsx)(qe,{children:t})})},Ke=o(4712);var Ge=o(8364),Qe=o(7925),Xe=o(4780),Ye=o(1796),Je=o(4174),et=o(1468),tt=o(4771),nt=o(6432),rt=o(6052);function ot(e,t){return ot=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ot(e,t)}function at(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,ot(e,t)}const it=e.createContext(null);function lt(t,n){var r=Object.create(null);return t&&e.Children.map(t,(function(e){return e})).forEach((function(t){r[t.key]=function(t){return n&&(0,e.isValidElement)(t)?n(t):t}(t)})),r}function st(e,t,n){return null!=n[t]?n[t]:e.props[t]}function ct(t,n,r){var o=lt(t.children),a=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),a=[];for(var i in e)i in t?a.length&&(o[i]=a,a=[]):a.push(i);var l={};for(var s in t){if(o[s])for(r=0;r<o[s].length;r++){var c=o[s][r];l[o[s][r]]=n(c)}l[s]=n(s)}for(r=0;r<a.length;r++)l[a[r]]=n(a[r]);return l}(n,o);return Object.keys(a).forEach((function(i){var l=a[i];if((0,e.isValidElement)(l)){var s=i in n,c=i in o,u=n[i],d=(0,e.isValidElement)(u)&&!u.props.in;!c||s&&!d?c||!s||d?c&&s&&(0,e.isValidElement)(u)&&(a[i]=(0,e.cloneElement)(l,{onExited:r.bind(null,l),in:u.props.in,exit:st(l,"exit",t),enter:st(l,"enter",t)})):a[i]=(0,e.cloneElement)(l,{in:!1}):a[i]=(0,e.cloneElement)(l,{onExited:r.bind(null,l),in:!0,exit:st(l,"exit",t),enter:st(l,"enter",t)})}})),a}var ut=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},dt=function(t){function n(e,n){var r,o=(r=t.call(this,e,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}at(n,t);var r=n.prototype;return r.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},r.componentWillUnmount=function(){this.mounted=!1},n.getDerivedStateFromProps=function(t,n){var r,o,a=n.children,i=n.handleExited;return{children:n.firstRender?(r=t,o=i,lt(r.children,(function(t){return(0,e.cloneElement)(t,{onExited:o.bind(null,t),in:!0,appear:st(t,"appear",r),enter:st(t,"enter",r),exit:st(t,"exit",r)})}))):ct(t,a,i),firstRender:!1}},r.handleExited=function(e,t){var n=lt(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=(0,Se.Z)({},t.children);return delete n[e.key],{children:n}})))},r.render=function(){var t=this.props,n=t.component,r=t.childFactory,o=(0,Oe.Z)(t,["component","childFactory"]),a=this.state.contextValue,i=ut(this.state.children).map(r);return delete o.appear,delete o.enter,delete o.exit,null===n?e.createElement(it.Provider,{value:a},i):e.createElement(it.Provider,{value:a},e.createElement(n,o,i))},n}(e.Component);dt.propTypes={},dt.defaultProps={component:"div",childFactory:function(e){return e}};const pt=dt;o(6898);var ft=o(444),mt=o(6797),ht=o(7278),gt=(0,He.w)((function(t,n){var r=t.styles,o=(0,mt.O)([r],void 0,(0,e.useContext)(He.T)),a=(0,e.useRef)();return(0,ht.j)((function(){var e=n.key+"-global",t=new n.sheet.constructor({key:e,nonce:n.sheet.nonce,container:n.sheet.container,speedy:n.sheet.isSpeedy}),r=!1,i=document.querySelector('style[data-emotion="'+e+" "+o.name+'"]');return n.sheet.tags.length&&(t.before=n.sheet.tags[0]),null!==i&&(r=!0,i.setAttribute("data-emotion",e),t.hydrate([i])),a.current=[t,r],function(){t.flush()}}),[n]),(0,ht.j)((function(){var e=a.current,t=e[0];if(e[1])e[1]=!1;else{if(void 0!==o.next&&(0,ft.My)(n,o.next,!0),t.tags.length){var r=t.tags[t.tags.length-1].nextElementSibling;t.before=r,t.flush()}n.insert("",o,t,!1)}}),[n,o.name]),null}));function bt(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,mt.O)(t)}var vt=function(){var e=bt.apply(void 0,arguments),t="animation-"+e.name;return{name:t,styles:"@keyframes "+t+"{"+e.styles+"}",anim:1,toString:function(){return"_EMO_"+this.name+"_"+this.styles+"_EMO_"}}};var yt=o(1588);const wt=(0,yt.Z)("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),xt=["center","classes","className"];let Et,kt,_t,St,Ot=e=>e;const Nt=vt(Et||(Et=Ot` 0% { transform: scale(0); opacity: 0.1; @@ -9,7 +9,7 @@ transform: scale(1); opacity: 0.3; } -`)),vt=ct(ft||(ft=gt` +`)),Ct=vt(kt||(kt=Ot` 0% { opacity: 1; } @@ -17,7 +17,7 @@ 100% { opacity: 0; } -`)),yt=ct(mt||(mt=gt` +`)),Rt=vt(_t||(_t=Ot` 0% { transform: scale(1); } @@ -29,7 +29,7 @@ 100% { transform: scale(1); } -`)),wt=(0,Se.ZP)("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),xt=(0,Se.ZP)((function(t){const{className:n,classes:r,pulsate:o=!1,rippleX:a,rippleY:s,rippleSize:l,in:c,onExited:u,timeout:d}=t,[p,f]=e.useState(!1),h=(0,i.Z)(n,r.ripple,r.rippleVisible,o&&r.ripplePulsate),g={width:l,height:l,top:-l/2+s,left:-l/2+a},b=(0,i.Z)(r.child,p&&r.childLeaving,o&&r.childPulsate);return c||p||f(!0),e.useEffect((()=>{if(!c&&null!=u){const e=setTimeout(u,d);return()=>{clearTimeout(e)}}}),[u,c,d]),(0,m.jsx)("span",{className:h,style:g,children:(0,m.jsx)("span",{className:b})})}),{name:"MuiTouchRipple",slot:"Ripple"})(ht||(ht=gt` +`)),Tt=(0,Je.ZP)("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),Mt=(0,Je.ZP)((function(t){const{className:n,classes:r,pulsate:o=!1,rippleX:a,rippleY:i,rippleSize:l,in:s,onExited:c,timeout:u}=t,[d,p]=e.useState(!1),f=(0,Ne.Z)(n,r.ripple,r.rippleVisible,o&&r.ripplePulsate),m={width:l,height:l,top:-l/2+i,left:-l/2+a},h=(0,Ne.Z)(r.child,d&&r.childLeaving,o&&r.childPulsate);return s||d||p(!0),e.useEffect((()=>{if(!s&&null!=c){const e=setTimeout(c,u);return()=>{clearTimeout(e)}}}),[c,s,u]),(0,Ze.jsx)("span",{className:f,style:m,children:(0,Ze.jsx)("span",{className:h})})}),{name:"MuiTouchRipple",slot:"Ripple"})(St||(St=Ot` opacity: 0; position: absolute; @@ -72,5 +72,5 @@ animation-iteration-count: infinite; animation-delay: 200ms; } -`),ut.rippleVisible,bt,550,(({theme:e})=>e.transitions.easing.easeInOut),ut.ripplePulsate,(({theme:e})=>e.transitions.duration.shorter),ut.child,ut.childLeaving,vt,550,(({theme:e})=>e.transitions.easing.easeInOut),ut.childPulsate,yt,(({theme:e})=>e.transitions.easing.easeInOut)),Et=e.forwardRef((function(t,n){const o=(0,Ce.Z)({props:t,name:"MuiTouchRipple"}),{center:s=!1,classes:l={},className:c}=o,u=(0,a.Z)(o,dt),[d,p]=e.useState([]),f=e.useRef(0),h=e.useRef(null);e.useEffect((()=>{h.current&&(h.current(),h.current=null)}),[d]);const g=e.useRef(!1),b=e.useRef(null),v=e.useRef(null),y=e.useRef(null);e.useEffect((()=>()=>{clearTimeout(b.current)}),[]);const w=e.useCallback((e=>{const{pulsate:t,rippleX:n,rippleY:r,rippleSize:o,cb:a}=e;p((e=>[...e,(0,m.jsx)(xt,{classes:{ripple:(0,i.Z)(l.ripple,ut.ripple),rippleVisible:(0,i.Z)(l.rippleVisible,ut.rippleVisible),ripplePulsate:(0,i.Z)(l.ripplePulsate,ut.ripplePulsate),child:(0,i.Z)(l.child,ut.child),childLeaving:(0,i.Z)(l.childLeaving,ut.childLeaving),childPulsate:(0,i.Z)(l.childPulsate,ut.childPulsate)},timeout:550,pulsate:t,rippleX:n,rippleY:r,rippleSize:o},f.current)])),f.current+=1,h.current=a}),[l]),x=e.useCallback(((e={},t={},n)=>{const{pulsate:r=!1,center:o=s||t.pulsate,fakeElement:a=!1}=t;if("mousedown"===(null==e?void 0:e.type)&&g.current)return void(g.current=!1);"touchstart"===(null==e?void 0:e.type)&&(g.current=!0);const i=a?null:y.current,l=i?i.getBoundingClientRect():{width:0,height:0,left:0,top:0};let c,u,d;if(o||void 0===e||0===e.clientX&&0===e.clientY||!e.clientX&&!e.touches)c=Math.round(l.width/2),u=Math.round(l.height/2);else{const{clientX:t,clientY:n}=e.touches&&e.touches.length>0?e.touches[0]:e;c=Math.round(t-l.left),u=Math.round(n-l.top)}if(o)d=Math.sqrt((2*l.width**2+l.height**2)/3),d%2==0&&(d+=1);else{const e=2*Math.max(Math.abs((i?i.clientWidth:0)-c),c)+2,t=2*Math.max(Math.abs((i?i.clientHeight:0)-u),u)+2;d=Math.sqrt(e**2+t**2)}null!=e&&e.touches?null===v.current&&(v.current=()=>{w({pulsate:r,rippleX:c,rippleY:u,rippleSize:d,cb:n})},b.current=setTimeout((()=>{v.current&&(v.current(),v.current=null)}),80)):w({pulsate:r,rippleX:c,rippleY:u,rippleSize:d,cb:n})}),[s,w]),E=e.useCallback((()=>{x({},{pulsate:!0})}),[x]),k=e.useCallback(((e,t)=>{if(clearTimeout(b.current),"touchend"===(null==e?void 0:e.type)&&v.current)return v.current(),v.current=null,void(b.current=setTimeout((()=>{k(e,t)})));v.current=null,p((e=>e.length>0?e.slice(1):e)),h.current=t}),[]);return e.useImperativeHandle(n,(()=>({pulsate:E,start:x,stop:k})),[E,x,k]),(0,m.jsx)(wt,(0,r.Z)({className:(0,i.Z)(ut.root,l.root,c),ref:y},u,{children:(0,m.jsx)(rt,{component:null,exit:!0,children:d})}))})),kt=Et;function _t(e){return(0,Re.Z)("MuiButtonBase",e)}const St=(0,Me.Z)("MuiButtonBase",["root","disabled","focusVisible"]),Ct=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],Nt=(0,Se.ZP)("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${St.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),Ot=e.forwardRef((function(t,n){const o=(0,Ce.Z)({props:t,name:"MuiButtonBase"}),{action:s,centerRipple:l=!1,children:c,className:u,component:d="button",disabled:p=!1,disableRipple:f=!1,disableTouchRipple:h=!1,focusRipple:g=!1,LinkComponent:b="a",onBlur:v,onClick:y,onContextMenu:w,onDragLeave:x,onFocus:E,onFocusVisible:k,onKeyDown:_,onKeyUp:S,onMouseDown:C,onMouseLeave:N,onMouseUp:O,onTouchEnd:R,onTouchMove:M,onTouchStart:T,tabIndex:P=0,TouchRippleProps:A,touchRippleRef:Z,type:I}=o,L=(0,a.Z)(o,Ct),j=e.useRef(null),D=e.useRef(null),z=(0,qe.Z)(D,Z),{isFocusVisibleRef:B,onFocus:F,onBlur:$,ref:U}=(0,Ke.Z)(),[W,H]=e.useState(!1);p&&W&&H(!1),e.useImperativeHandle(s,(()=>({focusVisible:()=>{H(!0),j.current.focus()}})),[]);const[q,V]=e.useState(!1);e.useEffect((()=>{V(!0)}),[]);const K=q&&!f&&!p;function G(e,t,n=h){return(0,Ve.Z)((r=>(t&&t(r),!n&&D.current&&D.current[e](r),!0)))}e.useEffect((()=>{W&&g&&!f&&q&&D.current.pulsate()}),[f,g,W,q]);const Q=G("start",C),X=G("stop",w),Y=G("stop",x),J=G("stop",O),ee=G("stop",(e=>{W&&e.preventDefault(),N&&N(e)})),te=G("start",T),ne=G("stop",R),re=G("stop",M),oe=G("stop",(e=>{$(e),!1===B.current&&H(!1),v&&v(e)}),!1),ae=(0,Ve.Z)((e=>{j.current||(j.current=e.currentTarget),F(e),!0===B.current&&(H(!0),k&&k(e)),E&&E(e)})),ie=()=>{const e=j.current;return d&&"button"!==d&&!("A"===e.tagName&&e.href)},se=e.useRef(!1),le=(0,Ve.Z)((e=>{g&&!se.current&&W&&D.current&&" "===e.key&&(se.current=!0,D.current.stop(e,(()=>{D.current.start(e)}))),e.target===e.currentTarget&&ie()&&" "===e.key&&e.preventDefault(),_&&_(e),e.target===e.currentTarget&&ie()&&"Enter"===e.key&&!p&&(e.preventDefault(),y&&y(e))})),ce=(0,Ve.Z)((e=>{g&&" "===e.key&&D.current&&W&&!e.defaultPrevented&&(se.current=!1,D.current.stop(e,(()=>{D.current.pulsate(e)}))),S&&S(e),y&&e.target===e.currentTarget&&ie()&&" "===e.key&&!e.defaultPrevented&&y(e)}));let ue=d;"button"===ue&&(L.href||L.to)&&(ue=b);const de={};"button"===ue?(de.type=void 0===I?"button":I,de.disabled=p):(L.href||L.to||(de.role="button"),p&&(de["aria-disabled"]=p));const pe=(0,qe.Z)(U,j),fe=(0,qe.Z)(n,pe),me=(0,r.Z)({},o,{centerRipple:l,component:d,disabled:p,disableRipple:f,disableTouchRipple:h,focusRipple:g,tabIndex:P,focusVisible:W}),he=(e=>{const{disabled:t,focusVisible:n,focusVisibleClassName:r,classes:o}=e,a={root:["root",t&&"disabled",n&&"focusVisible"]},i=(0,_e.Z)(a,_t,o);return n&&r&&(i.root+=` ${r}`),i})(me);return(0,m.jsxs)(Nt,(0,r.Z)({as:ue,className:(0,i.Z)(he.root,u),ownerState:me,onBlur:oe,onClick:y,onContextMenu:X,onFocus:ae,onKeyDown:le,onKeyUp:ce,onMouseDown:Q,onMouseLeave:ee,onMouseUp:J,onDragLeave:Y,onTouchEnd:ne,onTouchMove:re,onTouchStart:te,ref:fe,tabIndex:p?-1:P,type:I},de,L,{children:[c,K?(0,m.jsx)(kt,(0,r.Z)({ref:z,center:l},A)):null]}))}));function Rt(e){return(0,Re.Z)("MuiButton",e)}const Mt=(0,Me.Z)("MuiButton",["root","text","textInherit","textPrimary","textSecondary","textSuccess","textError","textInfo","textWarning","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","outlinedSuccess","outlinedError","outlinedInfo","outlinedWarning","contained","containedInherit","containedPrimary","containedSecondary","containedSuccess","containedError","containedInfo","containedWarning","disableElevation","focusVisible","disabled","colorInherit","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]),Tt=e.createContext({}),Pt=["children","color","component","className","disabled","disableElevation","disableFocusRipple","endIcon","focusVisibleClassName","fullWidth","size","startIcon","type","variant"],At=["root"],Zt=e=>(0,r.Z)({},"small"===e.size&&{"& > *:nth-of-type(1)":{fontSize:18}},"medium"===e.size&&{"& > *:nth-of-type(1)":{fontSize:20}},"large"===e.size&&{"& > *:nth-of-type(1)":{fontSize:22}}),It=(0,Se.ZP)(Ot,{shouldForwardProp:e=>(0,Se.FO)(e)||"classes"===e,name:"MuiButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],t[`${n.variant}${(0,Ne.Z)(n.color)}`],t[`size${(0,Ne.Z)(n.size)}`],t[`${n.variant}Size${(0,Ne.Z)(n.size)}`],"inherit"===n.color&&t.colorInherit,n.disableElevation&&t.disableElevation,n.fullWidth&&t.fullWidth]}})((({theme:e,ownerState:t})=>{var n,o;return(0,r.Z)({},e.typography.button,{minWidth:64,padding:"6px 16px",borderRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create(["background-color","box-shadow","border-color","color"],{duration:e.transitions.duration.short}),"&:hover":(0,r.Z)({textDecoration:"none",backgroundColor:e.vars?`rgba(${e.vars.palette.text.primaryChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,Oe.Fq)(e.palette.text.primary,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"text"===t.variant&&"inherit"!==t.color&&{backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,Oe.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"outlined"===t.variant&&"inherit"!==t.color&&{border:`1px solid ${(e.vars||e).palette[t.color].main}`,backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,Oe.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"contained"===t.variant&&{backgroundColor:(e.vars||e).palette.grey.A100,boxShadow:(e.vars||e).shadows[4],"@media (hover: none)":{boxShadow:(e.vars||e).shadows[2],backgroundColor:(e.vars||e).palette.grey[300]}},"contained"===t.variant&&"inherit"!==t.color&&{backgroundColor:(e.vars||e).palette[t.color].dark,"@media (hover: none)":{backgroundColor:(e.vars||e).palette[t.color].main}}),"&:active":(0,r.Z)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[8]}),[`&.${Mt.focusVisible}`]:(0,r.Z)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[6]}),[`&.${Mt.disabled}`]:(0,r.Z)({color:(e.vars||e).palette.action.disabled},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.action.disabledBackground}`},"outlined"===t.variant&&"secondary"===t.color&&{border:`1px solid ${(e.vars||e).palette.action.disabled}`},"contained"===t.variant&&{color:(e.vars||e).palette.action.disabled,boxShadow:(e.vars||e).shadows[0],backgroundColor:(e.vars||e).palette.action.disabledBackground})},"text"===t.variant&&{padding:"6px 8px"},"text"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main},"outlined"===t.variant&&{padding:"5px 15px",border:"1px solid currentColor"},"outlined"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main,border:e.vars?`1px solid rgba(${e.vars.palette[t.color].mainChannel} / 0.5)`:`1px solid ${(0,Oe.Fq)(e.palette[t.color].main,.5)}`},"contained"===t.variant&&{color:e.vars?e.vars.palette.text.primary:null==(n=(o=e.palette).getContrastText)?void 0:n.call(o,e.palette.grey[300]),backgroundColor:(e.vars||e).palette.grey[300],boxShadow:(e.vars||e).shadows[2]},"contained"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].contrastText,backgroundColor:(e.vars||e).palette[t.color].main},"inherit"===t.color&&{color:"inherit",borderColor:"currentColor"},"small"===t.size&&"text"===t.variant&&{padding:"4px 5px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"text"===t.variant&&{padding:"8px 11px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"outlined"===t.variant&&{padding:"3px 9px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"outlined"===t.variant&&{padding:"7px 21px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"contained"===t.variant&&{padding:"4px 10px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"contained"===t.variant&&{padding:"8px 22px",fontSize:e.typography.pxToRem(15)},t.fullWidth&&{width:"100%"})}),(({ownerState:e})=>e.disableElevation&&{boxShadow:"none","&:hover":{boxShadow:"none"},[`&.${Mt.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${Mt.disabled}`]:{boxShadow:"none"}})),Lt=(0,Se.ZP)("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.startIcon,t[`iconSize${(0,Ne.Z)(n.size)}`]]}})((({ownerState:e})=>(0,r.Z)({display:"inherit",marginRight:8,marginLeft:-4},"small"===e.size&&{marginLeft:-2},Zt(e)))),jt=(0,Se.ZP)("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.endIcon,t[`iconSize${(0,Ne.Z)(n.size)}`]]}})((({ownerState:e})=>(0,r.Z)({display:"inherit",marginRight:-4,marginLeft:8},"small"===e.size&&{marginRight:-2},Zt(e)))),Dt=e.forwardRef((function(t,n){const o=e.useContext(Tt),s=(0,He.Z)(o,t),l=(0,Ce.Z)({props:s,name:"MuiButton"}),{children:c,color:u="primary",component:d="button",className:p,disabled:f=!1,disableElevation:h=!1,disableFocusRipple:g=!1,endIcon:b,focusVisibleClassName:v,fullWidth:y=!1,size:w="medium",startIcon:x,type:E,variant:k="text"}=l,_=(0,a.Z)(l,Pt),S=(0,r.Z)({},l,{color:u,component:d,disabled:f,disableElevation:h,disableFocusRipple:g,fullWidth:y,size:w,type:E,variant:k}),C=(e=>{const{color:t,disableElevation:n,fullWidth:o,size:a,variant:i,classes:s}=e,l={root:["root",i,`${i}${(0,Ne.Z)(t)}`,`size${(0,Ne.Z)(a)}`,`${i}Size${(0,Ne.Z)(a)}`,"inherit"===t&&"colorInherit",n&&"disableElevation",o&&"fullWidth"],label:["label"],startIcon:["startIcon",`iconSize${(0,Ne.Z)(a)}`],endIcon:["endIcon",`iconSize${(0,Ne.Z)(a)}`]},c=(0,_e.Z)(l,Rt,s);return(0,r.Z)({},s,c)})(S),{root:N}=C,O=(0,a.Z)(C,At),R=x&&(0,m.jsx)(Lt,{className:O.startIcon,ownerState:S,children:x}),M=b&&(0,m.jsx)(jt,{className:O.endIcon,ownerState:S,children:b});return(0,m.jsxs)(It,(0,r.Z)({ownerState:S,className:(0,i.Z)(o.className,N,p),component:d,disabled:f,focusRipple:!g,focusVisibleClassName:(0,i.Z)(O.focusVisible,v),ref:n,type:E},_,{classes:O,children:[R,c,M]}))}));function zt(e){return(0,Re.Z)("MuiTypography",e)}(0,Me.Z)("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]);const Bt=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],Ft=(0,Se.ZP)("span",{name:"MuiTypography",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.variant&&t[n.variant],"inherit"!==n.align&&t[`align${(0,Ne.Z)(n.align)}`],n.noWrap&&t.noWrap,n.gutterBottom&&t.gutterBottom,n.paragraph&&t.paragraph]}})((({theme:e,ownerState:t})=>(0,r.Z)({margin:0},t.variant&&e.typography[t.variant],"inherit"!==t.align&&{textAlign:t.align},t.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},t.gutterBottom&&{marginBottom:"0.35em"},t.paragraph&&{marginBottom:16}))),$t={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},Ut={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},Wt=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiTypography"}),o=(e=>Ut[e]||e)(n.color),s=p((0,r.Z)({},n,{color:o})),{align:l="inherit",className:c,component:u,gutterBottom:d=!1,noWrap:f=!1,paragraph:h=!1,variant:g="body1",variantMapping:b=$t}=s,v=(0,a.Z)(s,Bt),y=(0,r.Z)({},s,{align:l,color:o,className:c,component:u,gutterBottom:d,noWrap:f,paragraph:h,variant:g,variantMapping:b}),w=u||(h?"p":b[g]||$t[g])||"span",x=(e=>{const{align:t,gutterBottom:n,noWrap:r,paragraph:o,variant:a,classes:i}=e,s={root:["root",a,"inherit"!==e.align&&`align${(0,Ne.Z)(t)}`,n&&"gutterBottom",r&&"noWrap",o&&"paragraph"]};return(0,_e.Z)(s,zt,i)})(y);return(0,m.jsx)(Ft,(0,r.Z)({as:w,ref:t,ownerState:y,className:(0,i.Z)(x.root,c)},v))}));var Ht=o(9485),qt=o(3540);function Vt(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];throw Error("[Immer] minified error nr: "+e+(n.length?" "+n.map((function(e){return"'"+e+"'"})).join(","):"")+". Find the full error at: https://bit.ly/3cXEKWf")}function Kt(e){return!!e&&!!e[In]}function Gt(e){return!!e&&(function(e){if(!e||"object"!=typeof e)return!1;var t=Object.getPrototypeOf(e);if(null===t)return!0;var n=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return n===Object||"function"==typeof n&&Function.toString.call(n)===Ln}(e)||Array.isArray(e)||!!e[Zn]||!!e.constructor[Zn]||tn(e)||nn(e))}function Qt(e,t,n){void 0===n&&(n=!1),0===Xt(e)?(n?Object.keys:jn)(e).forEach((function(r){n&&"symbol"==typeof r||t(r,e[r],e)})):e.forEach((function(n,r){return t(r,n,e)}))}function Xt(e){var t=e[In];return t?t.i>3?t.i-4:t.i:Array.isArray(e)?1:tn(e)?2:nn(e)?3:0}function Yt(e,t){return 2===Xt(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Jt(e,t,n){var r=Xt(e);2===r?e.set(t,n):3===r?(e.delete(t),e.add(n)):e[t]=n}function en(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}function tn(e){return Mn&&e instanceof Map}function nn(e){return Tn&&e instanceof Set}function rn(e){return e.o||e.t}function on(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=Dn(e);delete t[In];for(var n=jn(t),r=0;r<n.length;r++){var o=n[r],a=t[o];!1===a.writable&&(a.writable=!0,a.configurable=!0),(a.get||a.set)&&(t[o]={configurable:!0,writable:!0,enumerable:a.enumerable,value:e[o]})}return Object.create(Object.getPrototypeOf(e),t)}function an(e,t){return void 0===t&&(t=!1),ln(e)||Kt(e)||!Gt(e)||(Xt(e)>1&&(e.set=e.add=e.clear=e.delete=sn),Object.freeze(e),t&&Qt(e,(function(e,t){return an(t,!0)}),!0)),e}function sn(){Vt(2)}function ln(e){return null==e||"object"!=typeof e||Object.isFrozen(e)}function cn(e){var t=zn[e];return t||Vt(18,e),t}function un(){return On}function dn(e,t){t&&(cn("Patches"),e.u=[],e.s=[],e.v=t)}function pn(e){fn(e),e.p.forEach(hn),e.p=null}function fn(e){e===On&&(On=e.l)}function mn(e){return On={p:[],l:On,h:e,m:!0,_:0}}function hn(e){var t=e[In];0===t.i||1===t.i?t.j():t.O=!0}function gn(e,t){t._=t.p.length;var n=t.p[0],r=void 0!==e&&e!==n;return t.h.g||cn("ES5").S(t,e,r),r?(n[In].P&&(pn(t),Vt(4)),Gt(e)&&(e=bn(t,e),t.l||yn(t,e)),t.u&&cn("Patches").M(n[In].t,e,t.u,t.s)):e=bn(t,n,[]),pn(t),t.u&&t.v(t.u,t.s),e!==An?e:void 0}function bn(e,t,n){if(ln(t))return t;var r=t[In];if(!r)return Qt(t,(function(o,a){return vn(e,r,t,o,a,n)}),!0),t;if(r.A!==e)return t;if(!r.P)return yn(e,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var o=4===r.i||5===r.i?r.o=on(r.k):r.o;Qt(3===r.i?new Set(o):o,(function(t,a){return vn(e,r,o,t,a,n)})),yn(e,o,!1),n&&e.u&&cn("Patches").R(r,n,e.u,e.s)}return r.o}function vn(e,t,n,r,o,a){if(Kt(o)){var i=bn(e,o,a&&t&&3!==t.i&&!Yt(t.D,r)?a.concat(r):void 0);if(Jt(n,r,i),!Kt(i))return;e.m=!1}if(Gt(o)&&!ln(o)){if(!e.h.F&&e._<1)return;bn(e,o),t&&t.A.l||yn(e,o)}}function yn(e,t,n){void 0===n&&(n=!1),e.h.F&&e.m&&an(t,n)}function wn(e,t){var n=e[In];return(n?rn(n):e)[t]}function xn(e,t){if(t in e)for(var n=Object.getPrototypeOf(e);n;){var r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=Object.getPrototypeOf(n)}}function En(e){e.P||(e.P=!0,e.l&&En(e.l))}function kn(e){e.o||(e.o=on(e.t))}function _n(e,t,n){var r=tn(t)?cn("MapSet").N(t,n):nn(t)?cn("MapSet").T(t,n):e.g?function(e,t){var n=Array.isArray(e),r={i:n?1:0,A:t?t.A:un(),P:!1,I:!1,D:{},l:t,t:e,k:null,o:null,j:null,C:!1},o=r,a=Bn;n&&(o=[r],a=Fn);var i=Proxy.revocable(o,a),s=i.revoke,l=i.proxy;return r.k=l,r.j=s,l}(t,n):cn("ES5").J(t,n);return(n?n.A:un()).p.push(r),r}function Sn(e){return Kt(e)||Vt(22,e),function e(t){if(!Gt(t))return t;var n,r=t[In],o=Xt(t);if(r){if(!r.P&&(r.i<4||!cn("ES5").K(r)))return r.t;r.I=!0,n=Cn(t,o),r.I=!1}else n=Cn(t,o);return Qt(n,(function(t,o){r&&function(e,t){return 2===Xt(e)?e.get(t):e[t]}(r.t,t)===o||Jt(n,t,e(o))})),3===o?new Set(n):n}(e)}function Cn(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return on(e)}var Nn,On,Rn="undefined"!=typeof Symbol&&"symbol"==typeof Symbol("x"),Mn="undefined"!=typeof Map,Tn="undefined"!=typeof Set,Pn="undefined"!=typeof Proxy&&void 0!==Proxy.revocable&&"undefined"!=typeof Reflect,An=Rn?Symbol.for("immer-nothing"):((Nn={})["immer-nothing"]=!0,Nn),Zn=Rn?Symbol.for("immer-draftable"):"__$immer_draftable",In=Rn?Symbol.for("immer-state"):"__$immer_state",Ln=("undefined"!=typeof Symbol&&Symbol.iterator,""+Object.prototype.constructor),jn="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,Dn=Object.getOwnPropertyDescriptors||function(e){var t={};return jn(e).forEach((function(n){t[n]=Object.getOwnPropertyDescriptor(e,n)})),t},zn={},Bn={get:function(e,t){if(t===In)return e;var n=rn(e);if(!Yt(n,t))return function(e,t,n){var r,o=xn(t,n);return o?"value"in o?o.value:null===(r=o.get)||void 0===r?void 0:r.call(e.k):void 0}(e,n,t);var r=n[t];return e.I||!Gt(r)?r:r===wn(e.t,t)?(kn(e),e.o[t]=_n(e.A.h,r,e)):r},has:function(e,t){return t in rn(e)},ownKeys:function(e){return Reflect.ownKeys(rn(e))},set:function(e,t,n){var r=xn(rn(e),t);if(null==r?void 0:r.set)return r.set.call(e.k,n),!0;if(!e.P){var o=wn(rn(e),t),a=null==o?void 0:o[In];if(a&&a.t===n)return e.o[t]=n,e.D[t]=!1,!0;if(en(n,o)&&(void 0!==n||Yt(e.t,t)))return!0;kn(e),En(e)}return e.o[t]===n&&"number"!=typeof n&&(void 0!==n||t in e.o)||(e.o[t]=n,e.D[t]=!0,!0)},deleteProperty:function(e,t){return void 0!==wn(e.t,t)||t in e.t?(e.D[t]=!1,kn(e),En(e)):delete e.D[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var n=rn(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r?{writable:!0,configurable:1!==e.i||"length"!==t,enumerable:r.enumerable,value:n[t]}:r},defineProperty:function(){Vt(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){Vt(12)}},Fn={};Qt(Bn,(function(e,t){Fn[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}})),Fn.deleteProperty=function(e,t){return Fn.set.call(this,e,t,void 0)},Fn.set=function(e,t,n){return Bn.set.call(this,e[0],t,n,e[0])};var $n=function(){function e(e){var t=this;this.g=Pn,this.F=!0,this.produce=function(e,n,r){if("function"==typeof e&&"function"!=typeof n){var o=n;n=e;var a=t;return function(e){var t=this;void 0===e&&(e=o);for(var r=arguments.length,i=Array(r>1?r-1:0),s=1;s<r;s++)i[s-1]=arguments[s];return a.produce(e,(function(e){var r;return(r=n).call.apply(r,[t,e].concat(i))}))}}var i;if("function"!=typeof n&&Vt(6),void 0!==r&&"function"!=typeof r&&Vt(7),Gt(e)){var s=mn(t),l=_n(t,e,void 0),c=!0;try{i=n(l),c=!1}finally{c?pn(s):fn(s)}return"undefined"!=typeof Promise&&i instanceof Promise?i.then((function(e){return dn(s,r),gn(e,s)}),(function(e){throw pn(s),e})):(dn(s,r),gn(i,s))}if(!e||"object"!=typeof e){if(void 0===(i=n(e))&&(i=e),i===An&&(i=void 0),t.F&&an(i,!0),r){var u=[],d=[];cn("Patches").M(e,i,u,d),r(u,d)}return i}Vt(21,e)},this.produceWithPatches=function(e,n){if("function"==typeof e)return function(n){for(var r=arguments.length,o=Array(r>1?r-1:0),a=1;a<r;a++)o[a-1]=arguments[a];return t.produceWithPatches(n,(function(t){return e.apply(void 0,[t].concat(o))}))};var r,o,a=t.produce(e,n,(function(e,t){r=e,o=t}));return"undefined"!=typeof Promise&&a instanceof Promise?a.then((function(e){return[e,r,o]})):[a,r,o]},"boolean"==typeof(null==e?void 0:e.useProxies)&&this.setUseProxies(e.useProxies),"boolean"==typeof(null==e?void 0:e.autoFreeze)&&this.setAutoFreeze(e.autoFreeze)}var t=e.prototype;return t.createDraft=function(e){Gt(e)||Vt(8),Kt(e)&&(e=Sn(e));var t=mn(this),n=_n(this,e,void 0);return n[In].C=!0,fn(t),n},t.finishDraft=function(e,t){var n=(e&&e[In]).A;return dn(n,t),gn(void 0,n)},t.setAutoFreeze=function(e){this.F=e},t.setUseProxies=function(e){e&&!Pn&&Vt(20),this.g=e},t.applyPatches=function(e,t){var n;for(n=t.length-1;n>=0;n--){var r=t[n];if(0===r.path.length&&"replace"===r.op){e=r.value;break}}n>-1&&(t=t.slice(n+1));var o=cn("Patches").$;return Kt(e)?o(e,t):this.produce(e,(function(e){return o(e,t)}))},e}(),Un=new $n,Wn=Un.produce;Un.produceWithPatches.bind(Un),Un.setAutoFreeze.bind(Un),Un.setUseProxies.bind(Un),Un.applyPatches.bind(Un),Un.createDraft.bind(Un),Un.finishDraft.bind(Un);const Hn=Wn;function qn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Vn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Vn(Object(n),!0).forEach((function(t){qn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Vn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Gn(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}var Qn="function"==typeof Symbol&&Symbol.observable||"@@observable",Xn=function(){return Math.random().toString(36).substring(7).split("").join(".")},Yn={INIT:"@@redux/INIT"+Xn(),REPLACE:"@@redux/REPLACE"+Xn(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+Xn()}};function Jn(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function er(e,t,n){var r;if("function"==typeof t&&"function"==typeof n||"function"==typeof n&&"function"==typeof arguments[3])throw new Error(Gn(0));if("function"==typeof t&&void 0===n&&(n=t,t=void 0),void 0!==n){if("function"!=typeof n)throw new Error(Gn(1));return n(er)(e,t)}if("function"!=typeof e)throw new Error(Gn(2));var o=e,a=t,i=[],s=i,l=!1;function c(){s===i&&(s=i.slice())}function u(){if(l)throw new Error(Gn(3));return a}function d(e){if("function"!=typeof e)throw new Error(Gn(4));if(l)throw new Error(Gn(5));var t=!0;return c(),s.push(e),function(){if(t){if(l)throw new Error(Gn(6));t=!1,c();var n=s.indexOf(e);s.splice(n,1),i=null}}}function p(e){if(!Jn(e))throw new Error(Gn(7));if(void 0===e.type)throw new Error(Gn(8));if(l)throw new Error(Gn(9));try{l=!0,a=o(a,e)}finally{l=!1}for(var t=i=s,n=0;n<t.length;n++)(0,t[n])();return e}function f(e){if("function"!=typeof e)throw new Error(Gn(10));o=e,p({type:Yn.REPLACE})}function m(){var e,t=d;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(Gn(11));function n(){e.next&&e.next(u())}return n(),{unsubscribe:t(n)}}})[Qn]=function(){return this},e}return p({type:Yn.INIT}),(r={dispatch:p,subscribe:d,getState:u,replaceReducer:f})[Qn]=m,r}function tr(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function nr(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(){var n=e.apply(void 0,arguments),r=function(){throw new Error(Gn(15))},o={getState:n.getState,dispatch:function(){return r.apply(void 0,arguments)}},a=t.map((function(e){return e(o)}));return r=tr.apply(void 0,a)(n.dispatch),Kn(Kn({},n),{},{dispatch:r})}}}function rr(e){return function(t){var n=t.dispatch,r=t.getState;return function(t){return function(o){return"function"==typeof o?o(n,r,e):t(o)}}}}var or=rr();or.withExtraArgument=rr;const ar=or;var ir,sr=(ir=function(e,t){return ir=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},ir(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}ir(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),lr=function(e,t){for(var n=0,r=t.length,o=e.length;n<r;n++,o++)e[o]=t[n];return e},cr=Object.defineProperty,ur=Object.defineProperties,dr=Object.getOwnPropertyDescriptors,pr=Object.getOwnPropertySymbols,fr=Object.prototype.hasOwnProperty,mr=Object.prototype.propertyIsEnumerable,hr=function(e,t,n){return t in e?cr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n},gr=function(e,t){for(var n in t||(t={}))fr.call(t,n)&&hr(e,n,t[n]);if(pr)for(var r=0,o=pr(t);r<o.length;r++)n=o[r],mr.call(t,n)&&hr(e,n,t[n]);return e},br=function(e,t){return ur(e,dr(t))},vr="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?tr:tr.apply(null,arguments)};"undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__;var yr=function(e){function t(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var o=e.apply(this,n)||this;return Object.setPrototypeOf(o,t.prototype),o}return sr(t,e),Object.defineProperty(t,Symbol.species,{get:function(){return t},enumerable:!1,configurable:!0}),t.prototype.concat=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return e.prototype.concat.apply(this,t)},t.prototype.prepend=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return 1===e.length&&Array.isArray(e[0])?new(t.bind.apply(t,lr([void 0],e[0].concat(this)))):new(t.bind.apply(t,lr([void 0],e.concat(this))))},t}(Array);function wr(e){return Gt(e)?Hn(e,(function(){})):e}function xr(e,t){function n(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];if(t){var o=t.apply(void 0,n);if(!o)throw new Error("prepareAction did not return an object");return gr(gr({type:e,payload:o.payload},"meta"in o&&{meta:o.meta}),"error"in o&&{error:o.error})}return{type:e,payload:n[0]}}return n.toString=function(){return""+e},n.type=e,n.match=function(t){return t.type===e},n}function Er(e){var t,n={},r=[],o={addCase:function(e,t){var r="string"==typeof e?e:e.type;if(r in n)throw new Error("addCase cannot be called with two reducers for the same action type");return n[r]=t,o},addMatcher:function(e,t){return r.push({matcher:e,reducer:t}),o},addDefaultCase:function(e){return t=e,o}};return e(o),[n,r,t]}function kr(e){var t=e.name;if(!t)throw new Error("`name` is a required option for createSlice");var n,r="function"==typeof e.initialState?e.initialState:wr(e.initialState),o=e.reducers||{},a=Object.keys(o),i={},s={},l={};function c(){var t="function"==typeof e.extraReducers?Er(e.extraReducers):[e.extraReducers],n=t[0],o=void 0===n?{}:n,a=t[1],i=void 0===a?[]:a,l=t[2],c=void 0===l?void 0:l,u=gr(gr({},o),s);return function(e,t,n,r){void 0===n&&(n=[]);var o,a="function"==typeof t?Er(t):[t,n,r],i=a[0],s=a[1],l=a[2];if(function(e){return"function"==typeof e}(e))o=function(){return wr(e())};else{var c=wr(e);o=function(){return c}}function u(e,t){void 0===e&&(e=o());var n=lr([i[t.type]],s.filter((function(e){return(0,e.matcher)(t)})).map((function(e){return e.reducer})));return 0===n.filter((function(e){return!!e})).length&&(n=[l]),n.reduce((function(e,n){if(n){var r;if(Kt(e))return void 0===(r=n(e,t))?e:r;if(Gt(e))return Hn(e,(function(e){return n(e,t)}));if(void 0===(r=n(e,t))){if(null===e)return e;throw Error("A case reducer on a non-draftable value must not return undefined")}return r}return e}),e)}return u.getInitialState=o,u}(r,u,i,c)}return a.forEach((function(e){var n,r,a=o[e],c=t+"/"+e;"reducer"in a?(n=a.reducer,r=a.prepare):n=a,i[e]=n,s[c]=n,l[e]=r?xr(c,r):xr(c)})),{name:t,reducer:function(e,t){return n||(n=c()),n(e,t)},actions:l,caseReducers:i,getInitialState:function(){return n||(n=c()),n.getInitialState()}}}var _r=["name","message","stack","code"],Sr=function(e,t){this.payload=e,this.meta=t},Cr=function(e,t){this.payload=e,this.meta=t},Nr=function(e){if("object"==typeof e&&null!==e){for(var t={},n=0,r=_r;n<r.length;n++){var o=r[n];"string"==typeof e[o]&&(t[o]=e[o])}return t}return{message:String(e)}};function Or(e,t,n){var r=xr(e+"/fulfilled",(function(e,t,n,r){return{payload:e,meta:br(gr({},r||{}),{arg:n,requestId:t,requestStatus:"fulfilled"})}})),o=xr(e+"/pending",(function(e,t,n){return{payload:void 0,meta:br(gr({},n||{}),{arg:t,requestId:e,requestStatus:"pending"})}})),a=xr(e+"/rejected",(function(e,t,r,o,a){return{payload:o,error:(n&&n.serializeError||Nr)(e||"Rejected"),meta:br(gr({},a||{}),{arg:r,requestId:t,rejectedWithValue:!!o,requestStatus:"rejected",aborted:"AbortError"===(null==e?void 0:e.name),condition:"ConditionError"===(null==e?void 0:e.name)})}})),i="undefined"!=typeof AbortController?AbortController:function(){function e(){this.signal={aborted:!1,addEventListener:function(){},dispatchEvent:function(){return!1},onabort:function(){},removeEventListener:function(){},reason:void 0,throwIfAborted:function(){}}}return e.prototype.abort=function(){},e}();return Object.assign((function(e){return function(s,l,c){var u,d=(null==n?void 0:n.idGenerator)?n.idGenerator(e):function(e){void 0===e&&(e=21);for(var t="",n=e;n--;)t+="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW"[64*Math.random()|0];return t}(),p=new i,f=new Promise((function(e,t){return p.signal.addEventListener("abort",(function(){return t({name:"AbortError",message:u||"Aborted"})}))})),m=!1,h=function(){return i=this,u=null,h=function(){var i,u,h,g,b;return function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){i.label=a[1];break}if(6===a[0]&&i.label<o[1]){i.label=o[1],o=a;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(a);break}o[2]&&i.ops.pop(),i.trys.pop();continue}a=t.call(e,i)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,s])}}}(this,(function(v){switch(v.label){case 0:return v.trys.push([0,4,,5]),null===(y=g=null==(i=null==n?void 0:n.condition)?void 0:i.call(n,e,{getState:l,extra:c}))||"object"!=typeof y||"function"!=typeof y.then?[3,2]:[4,g];case 1:g=v.sent(),v.label=2;case 2:if(!1===g)throw{name:"ConditionError",message:"Aborted due to condition callback returning false."};return m=!0,s(o(d,e,null==(u=null==n?void 0:n.getPendingMeta)?void 0:u.call(n,{requestId:d,arg:e},{getState:l,extra:c}))),[4,Promise.race([f,Promise.resolve(t(e,{dispatch:s,getState:l,extra:c,requestId:d,signal:p.signal,rejectWithValue:function(e,t){return new Sr(e,t)},fulfillWithValue:function(e,t){return new Cr(e,t)}})).then((function(t){if(t instanceof Sr)throw t;return t instanceof Cr?r(t.payload,d,e,t.meta):r(t,d,e)}))])];case 3:return h=v.sent(),[3,5];case 4:return b=v.sent(),h=b instanceof Sr?a(null,d,e,b.payload,b.meta):a(b,d,e),[3,5];case 5:return n&&!n.dispatchConditionRejection&&a.match(h)&&h.meta.condition||s(h),[2,h]}var y}))},new Promise((function(e,t){var n=function(e){try{o(h.next(e))}catch(e){t(e)}},r=function(e){try{o(h.throw(e))}catch(e){t(e)}},o=function(t){return t.done?e(t.value):Promise.resolve(t.value).then(n,r)};o((h=h.apply(i,u)).next())}));var i,u,h}();return Object.assign(h,{abort:function(e){m&&(u=e,p.abort())},requestId:d,arg:e,unwrap:function(){return h.then(Rr)}})}}),{pending:o,rejected:a,fulfilled:r,typePrefix:e})}function Rr(e){if(e.meta&&e.meta.rejectedWithValue)throw e.payload;if(e.error)throw e.error;return e.payload}Object.assign;var Mr="listenerMiddleware";xr(Mr+"/add"),xr(Mr+"/removeAll"),xr(Mr+"/remove"),function(){function e(e,t){var n=o[e];return n?n.enumerable=t:o[e]=n={configurable:!0,enumerable:t,get:function(){var t=this[In];return Bn.get(t,e)},set:function(t){var n=this[In];Bn.set(n,e,t)}},n}function t(e){for(var t=e.length-1;t>=0;t--){var o=e[t][In];if(!o.P)switch(o.i){case 5:r(o)&&En(o);break;case 4:n(o)&&En(o)}}}function n(e){for(var t=e.t,n=e.k,r=jn(n),o=r.length-1;o>=0;o--){var a=r[o];if(a!==In){var i=t[a];if(void 0===i&&!Yt(t,a))return!0;var s=n[a],l=s&&s[In];if(l?l.t!==i:!en(s,i))return!0}}var c=!!t[In];return r.length!==jn(t).length+(c?0:1)}function r(e){var t=e.k;if(t.length!==e.t.length)return!0;var n=Object.getOwnPropertyDescriptor(t,t.length-1);if(n&&!n.get)return!0;for(var r=0;r<t.length;r++)if(!t.hasOwnProperty(r))return!0;return!1}var o={};!function(e,t){zn[e]||(zn[e]=t)}("ES5",{J:function(t,n){var r=Array.isArray(t),o=function(t,n){if(t){for(var r=Array(n.length),o=0;o<n.length;o++)Object.defineProperty(r,""+o,e(o,!0));return r}var a=Dn(n);delete a[In];for(var i=jn(a),s=0;s<i.length;s++){var l=i[s];a[l]=e(l,t||!!a[l].enumerable)}return Object.create(Object.getPrototypeOf(n),a)}(r,t),a={i:r?5:4,A:n?n.A:un(),P:!1,I:!1,D:{},l:n,t,k:o,o:null,O:!1,C:!1};return Object.defineProperty(o,In,{value:a,writable:!0}),o},S:function(e,n,o){o?Kt(n)&&n[In].A===e&&t(e.p):(e.u&&function e(t){if(t&&"object"==typeof t){var n=t[In];if(n){var o=n.t,a=n.k,i=n.D,s=n.i;if(4===s)Qt(a,(function(t){t!==In&&(void 0!==o[t]||Yt(o,t)?i[t]||e(a[t]):(i[t]=!0,En(n)))})),Qt(o,(function(e){void 0!==a[e]||Yt(a,e)||(i[e]=!1,En(n))}));else if(5===s){if(r(n)&&(En(n),i.length=!0),a.length<o.length)for(var l=a.length;l<o.length;l++)i[l]=!1;else for(var c=o.length;c<a.length;c++)i[c]=!0;for(var u=Math.min(a.length,o.length),d=0;d<u;d++)a.hasOwnProperty(d)||(i[d]=!0),void 0===i[d]&&e(a[d])}}}}(e.p[0]),t(e.p))},K:function(e){return 4===e.i?n(e):r(e)}})}();const Tr="Guest Project",Pr="Your Clipboard is currently empty!\nPlease generate a test before we can display your testing code here.";var Ar=o(9669),Zr=o.n(Ar);const Ir=kr({name:"userInfo",initialState:{showLogin:!1,showSave:!!sessionStorage.getItem("clipboardData"),userId:0,projectsInfo:[{project_id:0,project_name:Tr,user_id:0,showAccessClipboard:!1}],currentProject:Tr,currentProjectId:0,newProject:""},reducers:{setShowLogin:e=>{e.showLogin=!e.showLogin},setShowSave:e=>{e.showSave=!e.showSave},setProjectsInfo:(e,t)=>{e.projectsInfo=t.payload},setCurrentProject:(e,t)=>{e.currentProject=t.payload;const n=e.projectsInfo.map((e=>e.project_name)),r=e.projectsInfo.map((e=>e.project_id));e.currentProjectId=r[n.indexOf(t.payload)]},setNewProject:(e,t)=>{e.newProject=t.payload},setUserId:(e,t)=>{e.userId=t.payload},logout:e=>{e.projectsInfo=[{project_id:0,project_name:Tr,user_id:0,showAccessClipboard:!1}],e.userId=0,e.currentProject=Tr,e.newProject=""},setClipboardData:(e,t)=>{const n=e.projectsInfo;for(const e of n)e.project_id===t.payload.projectId&&(e.clipboardInfo=t.payload.clipboardData)},setShowAccessClipboard:(e,t)=>{const n=e.projectsInfo;for(const e of n)e.project_id===t.payload?e.showAccessClipboard=!e.showAccessClipboard:e.showAccessClipboard=!1}},extraReducers:e=>{e.addCase(qr.fulfilled,((e,t)=>{e.projectsInfo=t.payload.data}))}}),Lr={deleteProject:Or("userInfoSlice/deleteProject",(async e=>{let t;try{t=await Zr().delete(`/api/project/${e}`)}catch(e){console.log("userInfoSlice/deleteProject",e)}return t}))},{setShowLogin:jr,setShowSave:Dr,setProjectsInfo:zr,setCurrentProject:Br,logout:Fr,setClipboardData:$r,setShowAccessClipboard:Ur,setUserId:Wr,setNewProject:Hr}=Ir.actions,{deleteProject:qr}=Lr,Vr=Ir.reducer;var Kr=o(1688),Gr=o(2798),Qr=o(3935);let Xr=function(e){e()};const Yr=()=>Xr,Jr=(0,e.createContext)(null);function eo(){return(0,e.useContext)(Jr)}let to=()=>{throw new Error("uSES not initialized!")};const no=(e,t)=>e===t;function ro(t=Jr){const n=t===Jr?eo:()=>(0,e.useContext)(t);return function(t,r=no){const{store:o,subscription:a,getServerState:i}=n(),s=to(a.addNestedSub,o.getState,i||o.getState,t,r);return(0,e.useDebugValue)(s),s}}const oo=ro();o(9864);const ao={notify(){},get:()=>[]};const io="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?e.useLayoutEffect:e.useEffect;let so=null;const lo=function({store:t,context:n,children:r,serverState:o}){const a=(0,e.useMemo)((()=>{const e=function(e,t){let n,r=ao;function o(){i.onStateChange&&i.onStateChange()}function a(){n||(n=t?t.addNestedSub(o):e.subscribe(o),r=function(){const e=Yr();let t=null,n=null;return{clear(){t=null,n=null},notify(){e((()=>{let e=t;for(;e;)e.callback(),e=e.next}))},get(){let e=[],n=t;for(;n;)e.push(n),n=n.next;return e},subscribe(e){let r=!0,o=n={callback:e,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){r&&null!==t&&(r=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}())}const i={addNestedSub:function(e){return a(),r.subscribe(e)},notifyNestedSubs:function(){r.notify()},handleChangeWrapper:o,isSubscribed:function(){return Boolean(n)},trySubscribe:a,tryUnsubscribe:function(){n&&(n(),n=void 0,r.clear(),r=ao)},getListeners:()=>r};return i}(t);return{store:t,subscription:e,getServerState:o?()=>o:void 0}}),[t,o]),i=(0,e.useMemo)((()=>t.getState()),[t]);io((()=>{const{subscription:e}=a;return e.onStateChange=e.notifyNestedSubs,e.trySubscribe(),i!==t.getState()&&e.notifyNestedSubs(),()=>{e.tryUnsubscribe(),e.onStateChange=void 0}}),[a,i]);const s=n||Jr;return e.createElement(s.Provider,{value:a},r)};function co(t=Jr){const n=t===Jr?eo:()=>(0,e.useContext)(t);return function(){const{store:e}=n();return e}}const uo=co();function po(e=Jr){const t=e===Jr?uo:co(e);return function(){return t().dispatch}}const fo=po();var mo;(e=>{to=e})(Gr.useSyncExternalStoreWithSelector),(e=>{so=e})(Kr.useSyncExternalStore),mo=Qr.unstable_batchedUpdates,Xr=mo;const ho=fo,go=oo;var bo=o(7579),vo=o(67),yo=o(7094),wo=o(3633),xo=o(9064),Eo=o(6600),ko=o(7960);const _o=e.forwardRef((function(t,n){const{children:r,container:o,disablePortal:a=!1}=t,[i,s]=e.useState(null),l=(0,vo.Z)(e.isValidElement(r)?r.ref:null,n);return(0,Eo.Z)((()=>{a||s(function(e){return"function"==typeof e?e():e}(o)||document.body)}),[o,a]),(0,Eo.Z)((()=>{if(i&&!a)return(0,ko.Z)(n,i),()=>{(0,ko.Z)(n,null)}}),[n,i,a]),a?e.isValidElement(r)?e.cloneElement(r,{ref:l}):r:(0,m.jsx)(e.Fragment,{children:i?Qr.createPortal(r,i):i})}));var So=o(8290);function Co(e){const t=e.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}function No(e,t){t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden")}function Oo(e){return parseInt((0,So.Z)(e).getComputedStyle(e).paddingRight,10)||0}function Ro(e,t,n,r=[],o){const a=[t,n,...r];[].forEach.call(e.children,(e=>{const t=-1===a.indexOf(e),n=!function(e){const t=-1!==["TEMPLATE","SCRIPT","STYLE","LINK","MAP","META","NOSCRIPT","PICTURE","COL","COLGROUP","PARAM","SLOT","SOURCE","TRACK"].indexOf(e.tagName),n="INPUT"===e.tagName&&"hidden"===e.getAttribute("type");return t||n}(e);t&&n&&No(e,o)}))}function Mo(e,t){let n=-1;return e.some(((e,r)=>!!t(e)&&(n=r,!0))),n}const To=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])'].join(",");function Po(e){const t=[],n=[];return Array.from(e.querySelectorAll(To)).forEach(((e,r)=>{const o=function(e){const t=parseInt(e.getAttribute("tabindex"),10);return Number.isNaN(t)?"true"===e.contentEditable||("AUDIO"===e.nodeName||"VIDEO"===e.nodeName||"DETAILS"===e.nodeName)&&null===e.getAttribute("tabindex")?0:e.tabIndex:t}(e);-1!==o&&function(e){return!(e.disabled||"INPUT"===e.tagName&&"hidden"===e.type||function(e){if("INPUT"!==e.tagName||"radio"!==e.type)return!1;if(!e.name)return!1;const t=t=>e.ownerDocument.querySelector(`input[type="radio"]${t}`);let n=t(`[name="${e.name}"]:checked`);return n||(n=t(`[name="${e.name}"]`)),n!==e}(e))}(e)&&(0===o?t.push(e):n.push({documentOrder:r,tabIndex:o,node:e}))})),n.sort(((e,t)=>e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex)).map((e=>e.node)).concat(t)}function Ao(){return!0}const Zo=function(t){const{children:n,disableAutoFocus:r=!1,disableEnforceFocus:o=!1,disableRestoreFocus:a=!1,getTabbable:i=Po,isEnabled:s=Ao,open:l}=t,c=e.useRef(),u=e.useRef(null),d=e.useRef(null),p=e.useRef(null),f=e.useRef(null),h=e.useRef(!1),g=e.useRef(null),b=(0,vo.Z)(n.ref,g),v=e.useRef(null);e.useEffect((()=>{l&&g.current&&(h.current=!r)}),[r,l]),e.useEffect((()=>{if(!l||!g.current)return;const e=(0,yo.Z)(g.current);return g.current.contains(e.activeElement)||(g.current.hasAttribute("tabIndex")||g.current.setAttribute("tabIndex",-1),h.current&&g.current.focus()),()=>{a||(p.current&&p.current.focus&&(c.current=!0,p.current.focus()),p.current=null)}}),[l]),e.useEffect((()=>{if(!l||!g.current)return;const e=(0,yo.Z)(g.current),t=t=>{const{current:n}=g;if(null!==n)if(e.hasFocus()&&!o&&s()&&!c.current){if(!n.contains(e.activeElement)){if(t&&f.current!==t.target||e.activeElement!==f.current)f.current=null;else if(null!==f.current)return;if(!h.current)return;let o=[];if(e.activeElement!==u.current&&e.activeElement!==d.current||(o=i(g.current)),o.length>0){var r,a;const e=Boolean((null==(r=v.current)?void 0:r.shiftKey)&&"Tab"===(null==(a=v.current)?void 0:a.key)),t=o[0],n=o[o.length-1];e?n.focus():t.focus()}else n.focus()}}else c.current=!1},n=t=>{v.current=t,!o&&s()&&"Tab"===t.key&&e.activeElement===g.current&&t.shiftKey&&(c.current=!0,d.current.focus())};e.addEventListener("focusin",t),e.addEventListener("keydown",n,!0);const r=setInterval((()=>{"BODY"===e.activeElement.tagName&&t()}),50);return()=>{clearInterval(r),e.removeEventListener("focusin",t),e.removeEventListener("keydown",n,!0)}}),[r,o,a,s,l,i]);const y=e=>{null===p.current&&(p.current=e.relatedTarget),h.current=!0};return(0,m.jsxs)(e.Fragment,{children:[(0,m.jsx)("div",{tabIndex:l?0:-1,onFocus:y,ref:u,"data-testid":"sentinelStart"}),e.cloneElement(n,{ref:b,onFocus:e=>{null===p.current&&(p.current=e.relatedTarget),h.current=!0,f.current=e.target;const t=n.props.onFocus;t&&t(e)}}),(0,m.jsx)("div",{tabIndex:l?0:-1,onFocus:y,ref:d,"data-testid":"sentinelEnd"})]})};function Io(e){return(0,Re.Z)("MuiModal",e)}(0,Me.Z)("MuiModal",["root","hidden"]);const Lo=function(e){return"string"==typeof e};function jo(e,t={},n){return Lo(e)?t:(0,r.Z)({},t,{ownerState:(0,r.Z)({},t.ownerState,n)})}function Do(e){if(void 0===e)return{};const t={};return Object.keys(e).filter((t=>!(t.match(/^on[A-Z]/)&&"function"==typeof e[t]))).forEach((n=>{t[n]=e[n]})),t}function zo(e,t){return"function"==typeof e?e(t):e}const Bo=["elementType","externalSlotProps","ownerState"];function Fo(e){var t;const{elementType:n,externalSlotProps:o,ownerState:s}=e,l=(0,a.Z)(e,Bo),c=zo(o,s),{props:u,internalRef:d}=function(e){const{getSlotProps:t,additionalProps:n,externalSlotProps:o,externalForwardedProps:a,className:s}=e;if(!t){const e=(0,i.Z)(null==a?void 0:a.className,null==o?void 0:o.className,s,null==n?void 0:n.className),t=(0,r.Z)({},null==n?void 0:n.style,null==a?void 0:a.style,null==o?void 0:o.style),l=(0,r.Z)({},n,a,o);return e.length>0&&(l.className=e),Object.keys(t).length>0&&(l.style=t),{props:l,internalRef:void 0}}const l=function(e,t=[]){if(void 0===e)return{};const n={};return Object.keys(e).filter((n=>n.match(/^on[A-Z]/)&&"function"==typeof e[n]&&!t.includes(n))).forEach((t=>{n[t]=e[t]})),n}((0,r.Z)({},a,o)),c=Do(o),u=Do(a),d=t(l),p=(0,i.Z)(null==d?void 0:d.className,null==n?void 0:n.className,s,null==a?void 0:a.className,null==o?void 0:o.className),f=(0,r.Z)({},null==d?void 0:d.style,null==n?void 0:n.style,null==a?void 0:a.style,null==o?void 0:o.style),m=(0,r.Z)({},d,n,u,c);return p.length>0&&(m.className=p),Object.keys(f).length>0&&(m.style=f),{props:m,internalRef:d.ref}}((0,r.Z)({},l,{externalSlotProps:c})),p=(0,vo.Z)(d,(0,vo.Z)(null==c?void 0:c.ref,null==(t=e.additionalProps)?void 0:t.ref));return jo(n,(0,r.Z)({},u,{ref:p}),s)}const $o=["children","classes","closeAfterTransition","component","components","componentsProps","container","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted","manager","onBackdropClick","onClose","onKeyDown","open","onTransitionEnter","onTransitionExited"],Uo=new class{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(e,t){let n=this.modals.indexOf(e);if(-1!==n)return n;n=this.modals.length,this.modals.push(e),e.modalRef&&No(e.modalRef,!1);const r=function(e){const t=[];return[].forEach.call(e.children,(e=>{"true"===e.getAttribute("aria-hidden")&&t.push(e)})),t}(t);Ro(t,e.mount,e.modalRef,r,!0);const o=Mo(this.containers,(e=>e.container===t));return-1!==o?(this.containers[o].modals.push(e),n):(this.containers.push({modals:[e],container:t,restore:null,hiddenSiblings:r}),n)}mount(e,t){const n=Mo(this.containers,(t=>-1!==t.modals.indexOf(e))),r=this.containers[n];r.restore||(r.restore=function(e,t){const n=[],r=e.container;if(!t.disableScrollLock){if(function(e){const t=(0,yo.Z)(e);return t.body===e?(0,So.Z)(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}(r)){const e=Co((0,yo.Z)(r));n.push({value:r.style.paddingRight,property:"padding-right",el:r}),r.style.paddingRight=`${Oo(r)+e}px`;const t=(0,yo.Z)(r).querySelectorAll(".mui-fixed");[].forEach.call(t,(t=>{n.push({value:t.style.paddingRight,property:"padding-right",el:t}),t.style.paddingRight=`${Oo(t)+e}px`}))}let e;if(r.parentNode instanceof DocumentFragment)e=(0,yo.Z)(r).body;else{const t=r.parentElement,n=(0,So.Z)(r);e="HTML"===(null==t?void 0:t.nodeName)&&"scroll"===n.getComputedStyle(t).overflowY?t:r}n.push({value:e.style.overflow,property:"overflow",el:e},{value:e.style.overflowX,property:"overflow-x",el:e},{value:e.style.overflowY,property:"overflow-y",el:e}),e.style.overflow="hidden"}return()=>{n.forEach((({value:e,el:t,property:n})=>{e?t.style.setProperty(n,e):t.style.removeProperty(n)}))}}(r,t))}remove(e,t=!0){const n=this.modals.indexOf(e);if(-1===n)return n;const r=Mo(this.containers,(t=>-1!==t.modals.indexOf(e))),o=this.containers[r];if(o.modals.splice(o.modals.indexOf(e),1),this.modals.splice(n,1),0===o.modals.length)o.restore&&o.restore(),e.modalRef&&No(e.modalRef,t),Ro(o.container,e.mount,e.modalRef,o.hiddenSiblings,!1),this.containers.splice(r,1);else{const e=o.modals[o.modals.length-1];e.modalRef&&No(e.modalRef,!1)}return n}isTopModal(e){return this.modals.length>0&&this.modals[this.modals.length-1]===e}},Wo=e.forwardRef((function(t,n){var o;const{children:i,classes:s,closeAfterTransition:l=!1,component:c="div",components:u={},componentsProps:d={},container:p,disableAutoFocus:f=!1,disableEnforceFocus:h=!1,disableEscapeKeyDown:g=!1,disablePortal:b=!1,disableRestoreFocus:v=!1,disableScrollLock:y=!1,hideBackdrop:w=!1,keepMounted:x=!1,manager:E=Uo,onBackdropClick:k,onClose:_,onKeyDown:S,open:C,onTransitionEnter:N,onTransitionExited:O}=t,R=(0,a.Z)(t,$o),[M,T]=e.useState(!0),P=e.useRef({}),A=e.useRef(null),Z=e.useRef(null),I=(0,vo.Z)(Z,n),L=function(e){return!!e.children&&e.children.props.hasOwnProperty("in")}(t),j=null==(o=t["aria-hidden"])||o,D=()=>(P.current.modalRef=Z.current,P.current.mountNode=A.current,P.current),z=()=>{E.mount(D(),{disableScrollLock:y}),Z.current.scrollTop=0},B=(0,wo.Z)((()=>{const e=function(e){return"function"==typeof e?e():e}(p)||(0,yo.Z)(A.current).body;E.add(D(),e),Z.current&&z()})),F=e.useCallback((()=>E.isTopModal(D())),[E]),$=(0,wo.Z)((e=>{A.current=e,e&&(C&&F()?z():No(Z.current,j))})),U=e.useCallback((()=>{E.remove(D(),j)}),[E,j]);e.useEffect((()=>()=>{U()}),[U]),e.useEffect((()=>{C?B():L&&l||U()}),[C,U,L,l,B]);const W=(0,r.Z)({},t,{classes:s,closeAfterTransition:l,disableAutoFocus:f,disableEnforceFocus:h,disableEscapeKeyDown:g,disablePortal:b,disableRestoreFocus:v,disableScrollLock:y,exited:M,hideBackdrop:w,keepMounted:x}),H=(e=>{const{open:t,exited:n,classes:r}=e,o={root:["root",!t&&n&&"hidden"]};return(0,_e.Z)(o,Io,r)})(W),q={};void 0===i.props.tabIndex&&(q.tabIndex="-1"),L&&(q.onEnter=(0,xo.Z)((()=>{T(!1),N&&N()}),i.props.onEnter),q.onExited=(0,xo.Z)((()=>{T(!0),O&&O(),l&&U()}),i.props.onExited));const V=u.Root||c,K=Fo({elementType:V,externalSlotProps:d.root,externalForwardedProps:R,additionalProps:{ref:I,role:"presentation",onKeyDown:e=>{S&&S(e),"Escape"===e.key&&F()&&(g||(e.stopPropagation(),_&&_(e,"escapeKeyDown")))}},className:H.root,ownerState:W}),G=u.Backdrop,Q=Fo({elementType:G,externalSlotProps:d.backdrop,additionalProps:{"aria-hidden":!0,onClick:e=>{e.target===e.currentTarget&&(k&&k(e),_&&_(e,"backdropClick"))},open:C},ownerState:W});return x||C||L&&!M?(0,m.jsx)(_o,{ref:$,container:p,disablePortal:b,children:(0,m.jsxs)(V,(0,r.Z)({},K,{children:[!w&&G?(0,m.jsx)(G,(0,r.Z)({},Q)):null,(0,m.jsx)(Zo,{disableEnforceFocus:h,disableAutoFocus:f,disableRestoreFocus:v,isEnabled:F,open:C,children:e.cloneElement(i,q)})]}))}):null}));var Ho="unmounted",qo="exited",Vo="entering",Ko="entered",Go="exiting",Qo=function(t){function n(e,n){var r;r=t.call(this,e,n)||this;var o,a=n&&!n.isMounting?e.enter:e.appear;return r.appearStatus=null,e.in?a?(o=qo,r.appearStatus=Vo):o=Ko:o=e.unmountOnExit||e.mountOnEnter?Ho:qo,r.state={status:o},r.nextCallback=null,r}Qe(n,t),n.getDerivedStateFromProps=function(e,t){return e.in&&t.status===Ho?{status:qo}:null};var r=n.prototype;return r.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},r.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==Vo&&n!==Ko&&(t=Vo):n!==Vo&&n!==Ko||(t=Go)}this.updateStatus(!1,t)},r.componentWillUnmount=function(){this.cancelNextCallback()},r.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},r.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===Vo){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:Qr.findDOMNode(this);n&&function(e){e.scrollTop}(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===qo&&this.setState({status:Ho})},r.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[Qr.findDOMNode(this),r],a=o[0],i=o[1],s=this.getTimeouts(),l=r?s.appear:s.enter;e||n?(this.props.onEnter(a,i),this.safeSetState({status:Vo},(function(){t.props.onEntering(a,i),t.onTransitionEnd(l,(function(){t.safeSetState({status:Ko},(function(){t.props.onEntered(a,i)}))}))}))):this.safeSetState({status:Ko},(function(){t.props.onEntered(a)}))},r.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:Qr.findDOMNode(this);t?(this.props.onExit(r),this.safeSetState({status:Go},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:qo},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:qo},(function(){e.props.onExited(r)}))},r.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},r.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},r.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},r.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:Qr.findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=o[0],i=o[1];this.props.addEndListener(a,i)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},r.render=function(){var t=this.state.status;if(t===Ho)return null;var n=this.props,r=n.children,o=(n.in,n.mountOnEnter,n.unmountOnExit,n.appear,n.enter,n.exit,n.timeout,n.addEndListener,n.onEnter,n.onEntering,n.onEntered,n.onExit,n.onExiting,n.onExited,n.nodeRef,(0,a.Z)(n,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return e.createElement(Xe.Provider,{value:null},"function"==typeof r?r(t,o):e.cloneElement(e.Children.only(r),o))},n}(e.Component);function Xo(){}Qo.contextType=Xe,Qo.propTypes={},Qo.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:Xo,onEntering:Xo,onEntered:Xo,onExit:Xo,onExiting:Xo,onExited:Xo},Qo.UNMOUNTED=Ho,Qo.EXITED=qo,Qo.ENTERING=Vo,Qo.ENTERED=Ko,Qo.EXITING=Go;const Yo=Qo;var Jo=o(5165);function ea(){return(0,f.Z)(Jo.Z)}const ta=e=>e.scrollTop;function na(e,t){var n,r;const{timeout:o,easing:a,style:i={}}=e;return{duration:null!=(n=i.transitionDuration)?n:"number"==typeof o?o:o[t.mode]||0,easing:null!=(r=i.transitionTimingFunction)?r:"object"==typeof a?a[t.mode]:a,delay:i.transitionDelay}}const ra=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"],oa={entering:{opacity:1},entered:{opacity:1}},aa=e.forwardRef((function(t,n){const o=ea(),i={enter:o.transitions.duration.enteringScreen,exit:o.transitions.duration.leavingScreen},{addEndListener:s,appear:l=!0,children:c,easing:u,in:d,onEnter:p,onEntered:f,onEntering:h,onExit:g,onExited:b,onExiting:v,style:y,timeout:w=i,TransitionComponent:x=Yo}=t,E=(0,a.Z)(t,ra),k=e.useRef(null),_=(0,qe.Z)(c.ref,n),S=(0,qe.Z)(k,_),C=e=>t=>{if(e){const n=k.current;void 0===t?e(n):e(n,t)}},N=C(h),O=C(((e,t)=>{ta(e);const n=na({style:y,timeout:w,easing:u},{mode:"enter"});e.style.webkitTransition=o.transitions.create("opacity",n),e.style.transition=o.transitions.create("opacity",n),p&&p(e,t)})),R=C(f),M=C(v),T=C((e=>{const t=na({style:y,timeout:w,easing:u},{mode:"exit"});e.style.webkitTransition=o.transitions.create("opacity",t),e.style.transition=o.transitions.create("opacity",t),g&&g(e)})),P=C(b);return(0,m.jsx)(x,(0,r.Z)({appear:l,in:d,nodeRef:k,onEnter:O,onEntered:R,onEntering:N,onExit:T,onExited:P,onExiting:M,addEndListener:e=>{s&&s(k.current,e)},timeout:w},E,{children:(t,n)=>e.cloneElement(c,(0,r.Z)({style:(0,r.Z)({opacity:0,visibility:"exited"!==t||d?void 0:"hidden"},oa[t],y,c.props.style),ref:S},n))}))})),ia=aa;function sa(e){return(0,Re.Z)("MuiBackdrop",e)}(0,Me.Z)("MuiBackdrop",["root","invisible"]);const la=["children","component","components","componentsProps","className","invisible","open","transitionDuration","TransitionComponent"],ca=(0,Se.ZP)("div",{name:"MuiBackdrop",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.invisible&&t.invisible]}})((({ownerState:e})=>(0,r.Z)({position:"fixed",display:"flex",alignItems:"center",justifyContent:"center",right:0,bottom:0,top:0,left:0,backgroundColor:"rgba(0, 0, 0, 0.5)",WebkitTapHighlightColor:"transparent"},e.invisible&&{backgroundColor:"transparent"}))),ua=e.forwardRef((function(e,t){var n,o;const s=(0,Ce.Z)({props:e,name:"MuiBackdrop"}),{children:l,component:c="div",components:u={},componentsProps:d={},className:p,invisible:f=!1,open:h,transitionDuration:g,TransitionComponent:b=ia}=s,v=(0,a.Z)(s,la),y=(0,r.Z)({},s,{component:c,invisible:f}),w=(e=>{const{classes:t,invisible:n}=e,r={root:["root",n&&"invisible"]};return(0,_e.Z)(r,sa,t)})(y);return(0,m.jsx)(b,(0,r.Z)({in:h,timeout:g},v,{children:(0,m.jsx)(ca,{"aria-hidden":!0,as:null!=(n=u.Root)?n:c,className:(0,i.Z)(w.root,p),ownerState:(0,r.Z)({},y,null==(o=d.root)?void 0:o.ownerState),classes:w,ref:t,children:l})}))})),da=["BackdropComponent","BackdropProps","closeAfterTransition","children","component","components","componentsProps","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted","theme"],pa=(0,Se.ZP)("div",{name:"MuiModal",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.open&&n.exited&&t.hidden]}})((({theme:e,ownerState:t})=>(0,r.Z)({position:"fixed",zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:"hidden"}))),fa=(0,Se.ZP)(ua,{name:"MuiModal",slot:"Backdrop",overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),ma=e.forwardRef((function(t,n){var o,i;const s=(0,Ce.Z)({name:"MuiModal",props:t}),{BackdropComponent:l=fa,BackdropProps:c,closeAfterTransition:u=!1,children:d,component:p,components:f={},componentsProps:h={},disableAutoFocus:g=!1,disableEnforceFocus:b=!1,disableEscapeKeyDown:v=!1,disablePortal:y=!1,disableRestoreFocus:w=!1,disableScrollLock:x=!1,hideBackdrop:E=!1,keepMounted:k=!1,theme:_}=s,S=(0,a.Z)(s,da),[C,N]=e.useState(!0),O={closeAfterTransition:u,disableAutoFocus:g,disableEnforceFocus:b,disableEscapeKeyDown:v,disablePortal:y,disableRestoreFocus:w,disableScrollLock:x,hideBackdrop:E,keepMounted:k},R=(0,r.Z)({},s,O,{exited:C}),M=(e=>e.classes)(R),T=null!=(o=null!=(i=f.Root)?i:p)?o:pa;return(0,m.jsx)(Wo,(0,r.Z)({components:(0,r.Z)({Root:T,Backdrop:l},f),componentsProps:{root:()=>(0,r.Z)({},zo(h.root,R),!Lo(T)&&{as:p,theme:_}),backdrop:()=>(0,r.Z)({},c,zo(h.backdrop,R))},onTransitionEnter:()=>N(!1),onTransitionExited:()=>N(!0),ref:n},S,{classes:M},O,{children:d}))})),ha=ma;function ga(e){return(0,Re.Z)("MuiDialog",e)}const ba=(0,Me.Z)("MuiDialog",["root","scrollPaper","scrollBody","container","paper","paperScrollPaper","paperScrollBody","paperWidthFalse","paperWidthXs","paperWidthSm","paperWidthMd","paperWidthLg","paperWidthXl","paperFullWidth","paperFullScreen"]),va=(0,e.createContext)({}),ya=["aria-describedby","aria-labelledby","BackdropComponent","BackdropProps","children","className","disableEscapeKeyDown","fullScreen","fullWidth","maxWidth","onBackdropClick","onClose","open","PaperComponent","PaperProps","scroll","TransitionComponent","transitionDuration","TransitionProps"],wa=(0,Se.ZP)(ua,{name:"MuiDialog",slot:"Backdrop",overrides:(e,t)=>t.backdrop})({zIndex:-1}),xa=(0,Se.ZP)(ha,{name:"MuiDialog",slot:"Root",overridesResolver:(e,t)=>t.root})({"@media print":{position:"absolute !important"}}),Ea=(0,Se.ZP)("div",{name:"MuiDialog",slot:"Container",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.container,t[`scroll${(0,Ne.Z)(n.scroll)}`]]}})((({ownerState:e})=>(0,r.Z)({height:"100%","@media print":{height:"auto"},outline:0},"paper"===e.scroll&&{display:"flex",justifyContent:"center",alignItems:"center"},"body"===e.scroll&&{overflowY:"auto",overflowX:"hidden",textAlign:"center","&:after":{content:'""',display:"inline-block",verticalAlign:"middle",height:"100%",width:"0"}}))),ka=(0,Se.ZP)(Ie,{name:"MuiDialog",slot:"Paper",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.paper,t[`scrollPaper${(0,Ne.Z)(n.scroll)}`],t[`paperWidth${(0,Ne.Z)(String(n.maxWidth))}`],n.fullWidth&&t.paperFullWidth,n.fullScreen&&t.paperFullScreen]}})((({theme:e,ownerState:t})=>(0,r.Z)({margin:32,position:"relative",overflowY:"auto","@media print":{overflowY:"visible",boxShadow:"none"}},"paper"===t.scroll&&{display:"flex",flexDirection:"column",maxHeight:"calc(100% - 64px)"},"body"===t.scroll&&{display:"inline-block",verticalAlign:"middle",textAlign:"left"},!t.maxWidth&&{maxWidth:"calc(100% - 64px)"},"xs"===t.maxWidth&&{maxWidth:"px"===e.breakpoints.unit?Math.max(e.breakpoints.values.xs,444):`${e.breakpoints.values.xs}${e.breakpoints.unit}`,[`&.${ba.paperScrollBody}`]:{[e.breakpoints.down(Math.max(e.breakpoints.values.xs,444)+64)]:{maxWidth:"calc(100% - 64px)"}}},t.maxWidth&&"xs"!==t.maxWidth&&{maxWidth:`${e.breakpoints.values[t.maxWidth]}${e.breakpoints.unit}`,[`&.${ba.paperScrollBody}`]:{[e.breakpoints.down(e.breakpoints.values[t.maxWidth]+64)]:{maxWidth:"calc(100% - 64px)"}}},t.fullWidth&&{width:"calc(100% - 64px)"},t.fullScreen&&{margin:0,width:"100%",maxWidth:"100%",height:"100%",maxHeight:"none",borderRadius:0,[`&.${ba.paperScrollBody}`]:{margin:0,maxWidth:"100%"}}))),_a=e.forwardRef((function(t,n){const o=(0,Ce.Z)({props:t,name:"MuiDialog"}),s=ea(),l={enter:s.transitions.duration.enteringScreen,exit:s.transitions.duration.leavingScreen},{"aria-describedby":c,"aria-labelledby":u,BackdropComponent:d,BackdropProps:p,children:f,className:h,disableEscapeKeyDown:g=!1,fullScreen:b=!1,fullWidth:v=!1,maxWidth:y="sm",onBackdropClick:w,onClose:x,open:E,PaperComponent:k=Ie,PaperProps:_={},scroll:S="paper",TransitionComponent:C=ia,transitionDuration:N=l,TransitionProps:O}=o,R=(0,a.Z)(o,ya),M=(0,r.Z)({},o,{disableEscapeKeyDown:g,fullScreen:b,fullWidth:v,maxWidth:y,scroll:S}),T=(e=>{const{classes:t,scroll:n,maxWidth:r,fullWidth:o,fullScreen:a}=e,i={root:["root"],container:["container",`scroll${(0,Ne.Z)(n)}`],paper:["paper",`paperScroll${(0,Ne.Z)(n)}`,`paperWidth${(0,Ne.Z)(String(r))}`,o&&"paperFullWidth",a&&"paperFullScreen"]};return(0,_e.Z)(i,ga,t)})(M),P=e.useRef(),A=(0,bo.Z)(u),Z=e.useMemo((()=>({titleId:A})),[A]);return(0,m.jsx)(xa,(0,r.Z)({className:(0,i.Z)(T.root,h),closeAfterTransition:!0,components:{Backdrop:wa},componentsProps:{backdrop:(0,r.Z)({transitionDuration:N,as:d},p)},disableEscapeKeyDown:g,onClose:x,open:E,ref:n,onClick:e=>{P.current&&(P.current=null,w&&w(e),x&&x(e,"backdropClick"))},ownerState:M},R,{children:(0,m.jsx)(C,(0,r.Z)({appear:!0,in:E,timeout:N,role:"presentation"},O,{children:(0,m.jsx)(Ea,{className:(0,i.Z)(T.container),onMouseDown:e=>{P.current=e.target===e.currentTarget},ownerState:M,children:(0,m.jsx)(ka,(0,r.Z)({as:k,elevation:24,role:"dialog","aria-describedby":c,"aria-labelledby":A},_,{className:(0,i.Z)(T.paper,_.className),ownerState:M,children:(0,m.jsx)(va.Provider,{value:Z,children:f})}))})}))}))})),Sa=_a;function Ca(e){return(0,Re.Z)("MuiDialogTitle",e)}(0,Me.Z)("MuiDialogTitle",["root"]);const Na=["className","id"],Oa=(0,Se.ZP)(Wt,{name:"MuiDialogTitle",slot:"Root",overridesResolver:(e,t)=>t.root})({padding:"16px 24px",flex:"0 0 auto"}),Ra=e.forwardRef((function(t,n){const o=(0,Ce.Z)({props:t,name:"MuiDialogTitle"}),{className:s,id:l}=o,c=(0,a.Z)(o,Na),u=o,d=(e=>{const{classes:t}=e;return(0,_e.Z)({root:["root"]},Ca,t)})(u),{titleId:p=l}=e.useContext(va);return(0,m.jsx)(Oa,(0,r.Z)({component:"h2",className:(0,i.Z)(d.root,s),ownerState:u,ref:n,variant:"h6",id:p},c))}));var Ma=o(5449);const Ta=t=>{const n=ho();return e.createElement(Sa,{onClose:()=>{n(jr()),sessionStorage.removeItem("clipboardData")},open:t.open},e.createElement(y,{sx:{display:"flex",flexDirection:"column",alignItems:"center",height:230}},e.createElement(y,{sx:{width:400,display:"flex",flexDirection:"row",backgroundColor:"#6e00bb",justifyContent:"center"}},e.createElement("img",{alt:"logo",src:"../assets/logo-jester.png"})),e.createElement(Ra,null,"Log in to your account"),e.createElement(Dt,{variant:"outlined",href:"/auth/github",size:"large",sx:{margin:2}},e.createElement(Ma.Z,null),"GitHub"),e.createElement(Wt,{id:"error-message",sx:{display:"none",color:"red"}},"Error")))};function Pa(){return Pa=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Pa.apply(this,arguments)}const Aa=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset"];function Za(t){let{basename:n,children:r,window:o}=t,a=e.useRef();var i;null==a.current&&(a.current=(void 0===(i={window:o,v5Compat:!0})&&(i={}),function(e,t,n,r){void 0===r&&(r={});let{window:o=document.defaultView,v5Compat:a=!1}=r,i=o.history,s=O.Pop,l=null;function c(){s=O.Pop,l&&l({action:s,location:u.location})}let u={get action(){return s},get location(){return e(o,i)},listen(e){if(l)throw new Error("A history only accepts one active listener");return o.addEventListener(R,c),l=e,()=>{o.removeEventListener(R,c),l=null}},createHref:e=>t(o,e),push:function(e,t){s=O.Push;let r=T(u.location,e,t);n&&n(r,e);let c=M(r),d=u.createHref(r);try{i.pushState(c,"",d)}catch(e){o.location.assign(d)}a&&l&&l({action:s,location:r})},replace:function(e,t){s=O.Replace;let r=T(u.location,e,t);n&&n(r,e);let o=M(r),c=u.createHref(r);i.replaceState(o,"",c),a&&l&&l({action:s,location:r})},go:e=>i.go(e)};return u}((function(e,t){let{pathname:n,search:r,hash:o}=e.location;return T("",{pathname:n,search:r,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"==typeof t?t:P(t)}),null,i)));let s=a.current,[l,c]=e.useState({action:s.action,location:s.location});return e.useLayoutEffect((()=>s.listen(c)),[s]),e.createElement(we,{basename:n,children:r,location:l.location,navigationType:l.action,navigator:s})}const Ia=e.forwardRef((function(t,n){let{onClick:r,relative:o,reloadDocument:a,replace:i,state:s,target:l,to:c,preventScrollReset:u}=t,d=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(t,Aa),p=function(t,n){let{relative:r}=void 0===n?{}:n;ce()||U(!1);let{basename:o,navigator:a}=e.useContext(ae),{hash:i,pathname:s,search:l}=fe(t,{relative:r}),c=s;return"/"!==o&&(c="/"===s?o:q([o,s])),a.createHref({pathname:c,search:l,hash:i})}(c,{relative:o}),f=function(t,n){let{target:r,replace:o,state:a,preventScrollReset:i,relative:s}=void 0===n?{}:n,l=pe(),c=ue(),u=fe(t,{relative:s});return e.useCallback((e=>{if(function(e,t){return!(0!==e.button||t&&"_self"!==t||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e))}(e,r)){e.preventDefault();let n=void 0!==o?o:P(c)===P(u);l(t,{replace:n,state:a,preventScrollReset:i,relative:s})}}),[c,l,u,o,a,r,t,i,s])}(c,{replace:i,state:s,target:l,preventScrollReset:u,relative:o});return e.createElement("a",Pa({},d,{href:p,onClick:a?r:function(e){r&&r(e),e.defaultPrevented||f(e)},ref:n,target:l}))}));function La(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}var ja=function e(t,n){function r(e,r,o){if("undefined"!=typeof document){"number"==typeof(o=La({},n,o)).expires&&(o.expires=new Date(Date.now()+864e5*o.expires)),o.expires&&(o.expires=o.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var a="";for(var i in o)o[i]&&(a+="; "+i,!0!==o[i]&&(a+="="+o[i].split(";")[0]));return document.cookie=e+"="+t.write(r,e)+a}}return Object.create({set:r,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var n=document.cookie?document.cookie.split("; "):[],r={},o=0;o<n.length;o++){var a=n[o].split("="),i=a.slice(1).join("=");try{var s=decodeURIComponent(a[0]);if(r[s]=t.read(i,s),e===s)break}catch(e){}}return e?r[e]:r}},remove:function(e,t){r(e,"",La({},t,{expires:-1}))},withAttributes:function(t){return e(this.converter,La({},this.attributes,t))},withConverter:function(t){return e(La({},this.converter,t),this.attributes)}},{attributes:{value:Object.freeze(n)},converter:{value:Object.freeze(t)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});const Da=ja,za=()=>{const t=pe(),n=go((e=>e.userInfo.showLogin)),r=go((e=>e.clipboard.codeSnippets)),o=ho();return e.createElement(y,{id:"navbar",sx:{flexGrow:1}},e.createElement(Be,{position:"static"},e.createElement(We,null,e.createElement(Ia,{to:"/"},e.createElement("img",{alt:"logo",src:"../assets/logo-jester.png"})),e.createElement(Wt,{variant:"h6",component:"div",sx:{flexGrow:1,marginLeft:"15px"}}),sessionStorage.getItem("isLoggedIn")?e.createElement(Dt,{className:"welcome-text",color:"inherit"},"Welcome, ",sessionStorage.getItem("username"),"!"):e.createElement(Dt,{className:"welcome-text",color:"inherit"},"Welcome, Guest!"),e.createElement(Dt,{color:"inherit"},e.createElement(Ia,{className:"nav-link",to:"/contributors"},"Contributors")),sessionStorage.getItem("isLoggedIn")?e.createElement(Dt,{color:"inherit",onClick:async()=>{Da.remove("username"),Da.remove("code"),Da.remove("email"),Da.remove("github-auth-session"),Da.remove("github-auth-session.sig"),Da.remove("isLoggedIn"),sessionStorage.clear(),await Zr().post("/auth/logout"),o(Fr()),t("/")},sx:{display:"auto"}},e.createElement(qt.Z,{sx:{marginRight:"5px",marginLeft:"5px"}})," Logout"):e.createElement(Dt,{color:"inherit",onClick:()=>{o(jr()),r.length&&sessionStorage.setItem("clipboardData",JSON.stringify(r))},sx:{display:"auto"}},e.createElement(Ht.Z,{sx:{marginRight:"5px",marginLeft:"5px"}}),"Login"),e.createElement(Ta,{open:n}))))};function Ba(e){return(0,Re.Z)("MuiLink",e)}const Fa=(0,Me.Z)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]);var $a=o(4844);const Ua={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},Wa=({theme:e,ownerState:t})=>{const n=(e=>Ua[e]||e)(t.color),r=(0,$a.D)(e,`palette.${n}`,!1)||t.color,o=(0,$a.D)(e,`palette.${n}Channel`);return"vars"in e&&o?`rgba(${o} / 0.4)`:(0,Oe.Fq)(r,.4)},Ha=["className","color","component","onBlur","onFocus","TypographyClasses","underline","variant","sx"],qa=(0,Se.ZP)(Wt,{name:"MuiLink",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[`underline${(0,Ne.Z)(n.underline)}`],"button"===n.component&&t.button]}})((({theme:e,ownerState:t})=>(0,r.Z)({},"none"===t.underline&&{textDecoration:"none"},"hover"===t.underline&&{textDecoration:"none","&:hover":{textDecoration:"underline"}},"always"===t.underline&&(0,r.Z)({textDecoration:"underline"},"inherit"!==t.color&&{textDecorationColor:Wa({theme:e,ownerState:t})},{"&:hover":{textDecorationColor:"inherit"}}),"button"===t.component&&{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${Fa.focusVisible}`]:{outline:"auto"}}))),Va=e.forwardRef((function(t,n){const o=(0,Ce.Z)({props:t,name:"MuiLink"}),{className:s,color:l="primary",component:c="a",onBlur:u,onFocus:d,TypographyClasses:p,underline:f="always",variant:h="inherit",sx:g}=o,b=(0,a.Z)(o,Ha),{isFocusVisibleRef:v,onBlur:y,onFocus:w,ref:x}=(0,Ke.Z)(),[E,k]=e.useState(!1),_=(0,qe.Z)(n,x),S=(0,r.Z)({},o,{color:l,component:c,focusVisible:E,underline:f,variant:h}),C=(e=>{const{classes:t,component:n,focusVisible:r,underline:o}=e,a={root:["root",`underline${(0,Ne.Z)(o)}`,"button"===n&&"button",r&&"focusVisible"]};return(0,_e.Z)(a,Ba,t)})(S);return(0,m.jsx)(qa,(0,r.Z)({color:l,className:(0,i.Z)(C.root,s),classes:p,component:c,onBlur:e=>{y(e),!1===v.current&&k(!1),u&&u(e)},onFocus:e=>{w(e),!0===v.current&&k(!0),d&&d(e)},ref:_,ownerState:S,variant:h,sx:[...Object.keys(Ua).includes(l)?[]:[{color:l}],...Array.isArray(g)?g:[g]]},b))})),Ka=function(){return e.createElement(y,{id:"footer",sx:{py:3,px:2,mt:"auto"}},e.createElement(Wt,{variant:"body2",color:"text.secondary",align:"center"},"Copyright © ",e.createElement(Va,{color:"inherit",href:"https://jester.software"},"jester.software")," ",(new Date).getFullYear(),"."))};var Ga=o(1387),Qa=o(7596);const Xa=["onChange","maxRows","minRows","style","value"];function Ya(e,t){return parseInt(e[t],10)||0}const Ja={visibility:"hidden",position:"absolute",overflow:"hidden",height:0,top:0,left:0,transform:"translateZ(0)"};function ei(e){return null==e||0===Object.keys(e).length}const ti=e.forwardRef((function(t,n){const{onChange:o,maxRows:i,minRows:s=1,style:l,value:c}=t,u=(0,a.Z)(t,Xa),{current:d}=e.useRef(null!=c),p=e.useRef(null),f=(0,vo.Z)(n,p),h=e.useRef(null),g=e.useRef(0),[b,v]=e.useState({}),y=e.useCallback((()=>{const e=p.current,n=(0,So.Z)(e).getComputedStyle(e);if("0px"===n.width)return{};const r=h.current;r.style.width=n.width,r.value=e.value||t.placeholder||"x","\n"===r.value.slice(-1)&&(r.value+=" ");const o=n["box-sizing"],a=Ya(n,"padding-bottom")+Ya(n,"padding-top"),l=Ya(n,"border-bottom-width")+Ya(n,"border-top-width"),c=r.scrollHeight;r.value="x";const u=r.scrollHeight;let d=c;return s&&(d=Math.max(Number(s)*u,d)),i&&(d=Math.min(Number(i)*u,d)),d=Math.max(d,u),{outerHeightStyle:d+("border-box"===o?a+l:0),overflow:Math.abs(d-c)<=1}}),[i,s,t.placeholder]),w=(e,t)=>{const{outerHeightStyle:n,overflow:r}=t;return g.current<20&&(n>0&&Math.abs((e.outerHeightStyle||0)-n)>1||e.overflow!==r)?(g.current+=1,{overflow:r,outerHeightStyle:n}):e},x=e.useCallback((()=>{const e=y();ei(e)||v((t=>w(t,e)))}),[y]);return e.useEffect((()=>{const e=(0,Qa.Z)((()=>{g.current=0,p.current&&(()=>{const e=y();ei(e)||(0,Qr.flushSync)((()=>{v((t=>w(t,e)))}))})()})),t=(0,So.Z)(p.current);let n;return t.addEventListener("resize",e),"undefined"!=typeof ResizeObserver&&(n=new ResizeObserver(e),n.observe(p.current)),()=>{e.clear(),t.removeEventListener("resize",e),n&&n.disconnect()}})),(0,Eo.Z)((()=>{x()})),e.useEffect((()=>{g.current=0}),[c]),(0,m.jsxs)(e.Fragment,{children:[(0,m.jsx)("textarea",(0,r.Z)({value:c,onChange:e=>{g.current=0,d||x(),o&&o(e)},ref:f,rows:s,style:(0,r.Z)({height:b.outerHeightStyle,overflow:b.overflow?"hidden":null},l)},u)),(0,m.jsx)("textarea",{"aria-hidden":!0,className:t.className,readOnly:!0,ref:h,tabIndex:-1,style:(0,r.Z)({},Ja,l,{padding:0})})]})})),ni=ti;function ri({props:e,states:t,muiFormControl:n}){return t.reduce(((t,r)=>(t[r]=e[r],n&&void 0===e[r]&&(t[r]=n[r]),t)),{})}const oi=e.createContext();function ai(){return e.useContext(oi)}var ii=o(3289);function si(e){const{styles:t,defaultTheme:n={}}=e,r="function"==typeof t?e=>{return t(null==(r=e)||0===Object.keys(r).length?n:e);var r}:t;return(0,m.jsx)(st,{styles:r})}const li=function(e){return(0,m.jsx)(si,(0,r.Z)({},e,{defaultTheme:Jo.Z}))};function ci(e){return null!=e&&!(Array.isArray(e)&&0===e.length)}function ui(e,t=!1){return e&&(ci(e.value)&&""!==e.value||t&&ci(e.defaultValue)&&""!==e.defaultValue)}function di(e){return(0,Re.Z)("MuiInputBase",e)}const pi=(0,Me.Z)("MuiInputBase",["root","formControl","focused","disabled","adornedStart","adornedEnd","error","sizeSmall","multiline","colorSecondary","fullWidth","hiddenLabel","readOnly","input","inputSizeSmall","inputMultiline","inputTypeSearch","inputAdornedStart","inputAdornedEnd","inputHiddenLabel"]),fi=["aria-describedby","autoComplete","autoFocus","className","color","components","componentsProps","defaultValue","disabled","disableInjectingGlobalStyles","endAdornment","error","fullWidth","id","inputComponent","inputProps","inputRef","margin","maxRows","minRows","multiline","name","onBlur","onChange","onClick","onFocus","onKeyDown","onKeyUp","placeholder","readOnly","renderSuffix","rows","size","startAdornment","type","value"],mi=(e,t)=>{const{ownerState:n}=e;return[t.root,n.formControl&&t.formControl,n.startAdornment&&t.adornedStart,n.endAdornment&&t.adornedEnd,n.error&&t.error,"small"===n.size&&t.sizeSmall,n.multiline&&t.multiline,n.color&&t[`color${(0,Ne.Z)(n.color)}`],n.fullWidth&&t.fullWidth,n.hiddenLabel&&t.hiddenLabel]},hi=(e,t)=>{const{ownerState:n}=e;return[t.input,"small"===n.size&&t.inputSizeSmall,n.multiline&&t.inputMultiline,"search"===n.type&&t.inputTypeSearch,n.startAdornment&&t.inputAdornedStart,n.endAdornment&&t.inputAdornedEnd,n.hiddenLabel&&t.inputHiddenLabel]},gi=(0,Se.ZP)("div",{name:"MuiInputBase",slot:"Root",overridesResolver:mi})((({theme:e,ownerState:t})=>(0,r.Z)({},e.typography.body1,{color:(e.vars||e).palette.text.primary,lineHeight:"1.4375em",boxSizing:"border-box",position:"relative",cursor:"text",display:"inline-flex",alignItems:"center",[`&.${pi.disabled}`]:{color:(e.vars||e).palette.text.disabled,cursor:"default"}},t.multiline&&(0,r.Z)({padding:"4px 0 5px"},"small"===t.size&&{paddingTop:1}),t.fullWidth&&{width:"100%"}))),bi=(0,Se.ZP)("input",{name:"MuiInputBase",slot:"Input",overridesResolver:hi})((({theme:e,ownerState:t})=>{const n="light"===e.palette.mode,o=(0,r.Z)({color:"currentColor"},e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:n?.42:.5},{transition:e.transitions.create("opacity",{duration:e.transitions.duration.shorter})}),a={opacity:"0 !important"},i=e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:n?.42:.5};return(0,r.Z)({font:"inherit",letterSpacing:"inherit",color:"currentColor",padding:"4px 0 5px",border:0,boxSizing:"content-box",background:"none",height:"1.4375em",margin:0,WebkitTapHighlightColor:"transparent",display:"block",minWidth:0,width:"100%",animationName:"mui-auto-fill-cancel",animationDuration:"10ms","&::-webkit-input-placeholder":o,"&::-moz-placeholder":o,"&:-ms-input-placeholder":o,"&::-ms-input-placeholder":o,"&:focus":{outline:0},"&:invalid":{boxShadow:"none"},"&::-webkit-search-decoration":{WebkitAppearance:"none"},[`label[data-shrink=false] + .${pi.formControl} &`]:{"&::-webkit-input-placeholder":a,"&::-moz-placeholder":a,"&:-ms-input-placeholder":a,"&::-ms-input-placeholder":a,"&:focus::-webkit-input-placeholder":i,"&:focus::-moz-placeholder":i,"&:focus:-ms-input-placeholder":i,"&:focus::-ms-input-placeholder":i},[`&.${pi.disabled}`]:{opacity:1,WebkitTextFillColor:(e.vars||e).palette.text.disabled},"&:-webkit-autofill":{animationDuration:"5000s",animationName:"mui-auto-fill"}},"small"===t.size&&{paddingTop:1},t.multiline&&{height:"auto",resize:"none",padding:0,paddingTop:0},"search"===t.type&&{MozAppearance:"textfield"})})),vi=(0,m.jsx)(li,{styles:{"@keyframes mui-auto-fill":{from:{display:"block"}},"@keyframes mui-auto-fill-cancel":{from:{display:"block"}}}}),yi=e.forwardRef((function(t,n){const o=(0,Ce.Z)({props:t,name:"MuiInputBase"}),{"aria-describedby":s,autoComplete:l,autoFocus:c,className:u,components:d={},componentsProps:p={},defaultValue:f,disabled:h,disableInjectingGlobalStyles:g,endAdornment:b,fullWidth:v=!1,id:y,inputComponent:w="input",inputProps:x={},inputRef:E,maxRows:k,minRows:_,multiline:S=!1,name:C,onBlur:N,onChange:O,onClick:R,onFocus:M,onKeyDown:T,onKeyUp:P,placeholder:A,readOnly:Z,renderSuffix:I,rows:L,startAdornment:j,type:D="text",value:z}=o,B=(0,a.Z)(o,fi),F=null!=x.value?x.value:z,{current:$}=e.useRef(null!=F),U=e.useRef(),W=e.useCallback((e=>{}),[]),H=(0,qe.Z)(x.ref,W),q=(0,qe.Z)(E,H),V=(0,qe.Z)(U,q),[K,G]=e.useState(!1),Q=ai(),X=ri({props:o,muiFormControl:Q,states:["color","disabled","error","hiddenLabel","size","required","filled"]});X.focused=Q?Q.focused:K,e.useEffect((()=>{!Q&&h&&K&&(G(!1),N&&N())}),[Q,h,K,N]);const Y=Q&&Q.onFilled,J=Q&&Q.onEmpty,ee=e.useCallback((e=>{ui(e)?Y&&Y():J&&J()}),[Y,J]);(0,ii.Z)((()=>{$&&ee({value:F})}),[F,ee,$]),e.useEffect((()=>{ee(U.current)}),[]);let te=w,ne=x;S&&"input"===te&&(ne=L?(0,r.Z)({type:void 0,minRows:L,maxRows:L},ne):(0,r.Z)({type:void 0,maxRows:k,minRows:_},ne),te=ni),e.useEffect((()=>{Q&&Q.setAdornedStart(Boolean(j))}),[Q,j]);const re=(0,r.Z)({},o,{color:X.color||"primary",disabled:X.disabled,endAdornment:b,error:X.error,focused:X.focused,formControl:Q,fullWidth:v,hiddenLabel:X.hiddenLabel,multiline:S,size:X.size,startAdornment:j,type:D}),oe=(e=>{const{classes:t,color:n,disabled:r,error:o,endAdornment:a,focused:i,formControl:s,fullWidth:l,hiddenLabel:c,multiline:u,readOnly:d,size:p,startAdornment:f,type:m}=e,h={root:["root",`color${(0,Ne.Z)(n)}`,r&&"disabled",o&&"error",l&&"fullWidth",i&&"focused",s&&"formControl","small"===p&&"sizeSmall",u&&"multiline",f&&"adornedStart",a&&"adornedEnd",c&&"hiddenLabel",d&&"readOnly"],input:["input",r&&"disabled","search"===m&&"inputTypeSearch",u&&"inputMultiline","small"===p&&"inputSizeSmall",c&&"inputHiddenLabel",f&&"inputAdornedStart",a&&"inputAdornedEnd",d&&"readOnly"]};return(0,_e.Z)(h,di,t)})(re),ae=d.Root||gi,ie=p.root||{},se=d.Input||bi;return ne=(0,r.Z)({},ne,p.input),(0,m.jsxs)(e.Fragment,{children:[!g&&vi,(0,m.jsxs)(ae,(0,r.Z)({},ie,!Lo(ae)&&{ownerState:(0,r.Z)({},re,ie.ownerState)},{ref:n,onClick:e=>{U.current&&e.currentTarget===e.target&&U.current.focus(),R&&R(e)}},B,{className:(0,i.Z)(oe.root,ie.className,u),children:[j,(0,m.jsx)(oi.Provider,{value:null,children:(0,m.jsx)(se,(0,r.Z)({ownerState:re,"aria-invalid":X.error,"aria-describedby":s,autoComplete:l,autoFocus:c,defaultValue:f,disabled:X.disabled,id:y,onAnimationStart:e=>{ee("mui-auto-fill-cancel"===e.animationName?U.current:{value:"x"})},name:C,placeholder:A,readOnly:Z,required:X.required,rows:L,value:F,onKeyDown:T,onKeyUp:P,type:D},ne,!Lo(se)&&{as:te,ownerState:(0,r.Z)({},re,ne.ownerState)},{ref:V,className:(0,i.Z)(oe.input,ne.className),onBlur:e=>{N&&N(e),x.onBlur&&x.onBlur(e),Q&&Q.onBlur?Q.onBlur(e):G(!1)},onChange:(e,...t)=>{if(!$){const t=e.target||U.current;if(null==t)throw new Error((0,Ga.Z)(1));ee({value:t.value})}x.onChange&&x.onChange(e,...t),O&&O(e,...t)},onFocus:e=>{X.disabled?e.stopPropagation():(M&&M(e),x.onFocus&&x.onFocus(e),Q&&Q.onFocus?Q.onFocus(e):G(!0))}}))}),b,I?I((0,r.Z)({},X,{startAdornment:j})):null]}))]})})),wi=yi;function xi(e){return(0,Re.Z)("MuiInput",e)}const Ei=(0,r.Z)({},pi,(0,Me.Z)("MuiInput",["root","underline","input"])),ki=["disableUnderline","components","componentsProps","fullWidth","inputComponent","multiline","type"],_i=(0,Se.ZP)(gi,{shouldForwardProp:e=>(0,Se.FO)(e)||"classes"===e,name:"MuiInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[...mi(e,t),!n.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{let n="light"===e.palette.mode?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)";return e.vars&&(n=`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`),(0,r.Z)({position:"relative"},t.formControl&&{"label + &":{marginTop:16}},!t.disableUnderline&&{"&:after":{borderBottom:`2px solid ${(e.vars||e).palette[t.color].main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${Ei.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${Ei.error}:after`]:{borderBottomColor:(e.vars||e).palette.error.main,transform:"scaleX(1)"},"&:before":{borderBottom:`1px solid ${n}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${Ei.disabled}):before`]:{borderBottom:`2px solid ${(e.vars||e).palette.text.primary}`,"@media (hover: none)":{borderBottom:`1px solid ${n}`}},[`&.${Ei.disabled}:before`]:{borderBottomStyle:"dotted"}})})),Si=(0,Se.ZP)(bi,{name:"MuiInput",slot:"Input",overridesResolver:hi})({}),Ci=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiInput"}),{disableUnderline:o,components:i={},componentsProps:s,fullWidth:l=!1,inputComponent:u="input",multiline:d=!1,type:p="text"}=n,f=(0,a.Z)(n,ki),h=(e=>{const{classes:t,disableUnderline:n}=e,o={root:["root",!n&&"underline"],input:["input"]},a=(0,_e.Z)(o,xi,t);return(0,r.Z)({},t,a)})(n),g={root:{ownerState:{disableUnderline:o}}},b=s?(0,c.Z)(s,g):g;return(0,m.jsx)(wi,(0,r.Z)({components:(0,r.Z)({Root:_i,Input:Si},i),componentsProps:b,fullWidth:l,inputComponent:u,multiline:d,ref:t,type:p},f,{classes:h}))}));Ci.muiName="Input";const Ni=Ci;function Oi(e){return(0,Re.Z)("MuiFilledInput",e)}const Ri=(0,r.Z)({},pi,(0,Me.Z)("MuiFilledInput",["root","underline","input"])),Mi=["disableUnderline","components","componentsProps","fullWidth","hiddenLabel","inputComponent","multiline","type"],Ti=(0,Se.ZP)(gi,{shouldForwardProp:e=>(0,Se.FO)(e)||"classes"===e,name:"MuiFilledInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[...mi(e,t),!n.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{var n;const o="light"===e.palette.mode,a=o?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)",i=o?"rgba(0, 0, 0, 0.06)":"rgba(255, 255, 255, 0.09)",s=o?"rgba(0, 0, 0, 0.09)":"rgba(255, 255, 255, 0.13)",l=o?"rgba(0, 0, 0, 0.12)":"rgba(255, 255, 255, 0.12)";return(0,r.Z)({position:"relative",backgroundColor:e.vars?e.vars.palette.FilledInput.bg:i,borderTopLeftRadius:(e.vars||e).shape.borderRadius,borderTopRightRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create("background-color",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),"&:hover":{backgroundColor:e.vars?e.vars.palette.FilledInput.hoverBg:s,"@media (hover: none)":{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:i}},[`&.${Ri.focused}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:i},[`&.${Ri.disabled}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.disabledBg:l}},!t.disableUnderline&&{"&:after":{borderBottom:`2px solid ${null==(n=(e.vars||e).palette[t.color||"primary"])?void 0:n.main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${Ri.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${Ri.error}:after`]:{borderBottomColor:(e.vars||e).palette.error.main,transform:"scaleX(1)"},"&:before":{borderBottom:`1px solid ${e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`:a}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${Ri.disabled}):before`]:{borderBottom:`1px solid ${(e.vars||e).palette.text.primary}`},[`&.${Ri.disabled}:before`]:{borderBottomStyle:"dotted"}},t.startAdornment&&{paddingLeft:12},t.endAdornment&&{paddingRight:12},t.multiline&&(0,r.Z)({padding:"25px 12px 8px"},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17}))})),Pi=(0,Se.ZP)(bi,{name:"MuiFilledInput",slot:"Input",overridesResolver:hi})((({theme:e,ownerState:t})=>(0,r.Z)({paddingTop:25,paddingRight:12,paddingBottom:8,paddingLeft:12},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.multiline&&{paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0},t.hiddenLabel&&"small"===t.size&&{paddingTop:8,paddingBottom:9}))),Ai=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiFilledInput"}),{components:o={},componentsProps:i,fullWidth:s=!1,inputComponent:l="input",multiline:u=!1,type:d="text"}=n,p=(0,a.Z)(n,Mi),f=(0,r.Z)({},n,{fullWidth:s,inputComponent:l,multiline:u,type:d}),h=(e=>{const{classes:t,disableUnderline:n}=e,o={root:["root",!n&&"underline"],input:["input"]},a=(0,_e.Z)(o,Oi,t);return(0,r.Z)({},t,a)})(n),g={root:{ownerState:f},input:{ownerState:f}},b=i?(0,c.Z)(i,g):g;return(0,m.jsx)(wi,(0,r.Z)({components:(0,r.Z)({Root:Ti,Input:Pi},o),componentsProps:b,fullWidth:s,inputComponent:l,multiline:u,ref:t,type:d},p,{classes:h}))}));Ai.muiName="Input";const Zi=Ai;var Ii;const Li=["children","classes","className","label","notched"],ji=(0,Se.ZP)("fieldset")({textAlign:"left",position:"absolute",bottom:0,right:0,top:-5,left:0,margin:0,padding:"0 8px",pointerEvents:"none",borderRadius:"inherit",borderStyle:"solid",borderWidth:1,overflow:"hidden",minWidth:"0%"}),Di=(0,Se.ZP)("legend")((({ownerState:e,theme:t})=>(0,r.Z)({float:"unset",width:"auto",overflow:"hidden"},!e.withLabel&&{padding:0,lineHeight:"11px",transition:t.transitions.create("width",{duration:150,easing:t.transitions.easing.easeOut})},e.withLabel&&(0,r.Z)({display:"block",padding:0,height:11,fontSize:"0.75em",visibility:"hidden",maxWidth:.01,transition:t.transitions.create("max-width",{duration:50,easing:t.transitions.easing.easeOut}),whiteSpace:"nowrap","& > span":{paddingLeft:5,paddingRight:5,display:"inline-block",opacity:0,visibility:"visible"}},e.notched&&{maxWidth:"100%",transition:t.transitions.create("max-width",{duration:100,easing:t.transitions.easing.easeOut,delay:50})}))));function zi(e){return(0,Re.Z)("MuiOutlinedInput",e)}const Bi=(0,r.Z)({},pi,(0,Me.Z)("MuiOutlinedInput",["root","notchedOutline","input"])),Fi=["components","fullWidth","inputComponent","label","multiline","notched","type"],$i=(0,Se.ZP)(gi,{shouldForwardProp:e=>(0,Se.FO)(e)||"classes"===e,name:"MuiOutlinedInput",slot:"Root",overridesResolver:mi})((({theme:e,ownerState:t})=>{const n="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return(0,r.Z)({position:"relative",borderRadius:(e.vars||e).shape.borderRadius,[`&:hover .${Bi.notchedOutline}`]:{borderColor:(e.vars||e).palette.text.primary},"@media (hover: none)":{[`&:hover .${Bi.notchedOutline}`]:{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:n}},[`&.${Bi.focused} .${Bi.notchedOutline}`]:{borderColor:(e.vars||e).palette[t.color].main,borderWidth:2},[`&.${Bi.error} .${Bi.notchedOutline}`]:{borderColor:(e.vars||e).palette.error.main},[`&.${Bi.disabled} .${Bi.notchedOutline}`]:{borderColor:(e.vars||e).palette.action.disabled}},t.startAdornment&&{paddingLeft:14},t.endAdornment&&{paddingRight:14},t.multiline&&(0,r.Z)({padding:"16.5px 14px"},"small"===t.size&&{padding:"8.5px 14px"}))})),Ui=(0,Se.ZP)((function(e){const{className:t,label:n,notched:o}=e,i=(0,a.Z)(e,Li),s=null!=n&&""!==n,l=(0,r.Z)({},e,{notched:o,withLabel:s});return(0,m.jsx)(ji,(0,r.Z)({"aria-hidden":!0,className:t,ownerState:l},i,{children:(0,m.jsx)(Di,{ownerState:l,children:s?(0,m.jsx)("span",{children:n}):Ii||(Ii=(0,m.jsx)("span",{className:"notranslate",children:"​"}))})}))}),{name:"MuiOutlinedInput",slot:"NotchedOutline",overridesResolver:(e,t)=>t.notchedOutline})((({theme:e})=>{const t="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:t}})),Wi=(0,Se.ZP)(bi,{name:"MuiOutlinedInput",slot:"Input",overridesResolver:hi})((({theme:e,ownerState:t})=>(0,r.Z)({padding:"16.5px 14px"},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{padding:"8.5px 14px"},t.multiline&&{padding:0},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0}))),Hi=e.forwardRef((function(t,n){var o;const i=(0,Ce.Z)({props:t,name:"MuiOutlinedInput"}),{components:s={},fullWidth:l=!1,inputComponent:c="input",label:u,multiline:d=!1,notched:p,type:f="text"}=i,h=(0,a.Z)(i,Fi),g=(e=>{const{classes:t}=e,n=(0,_e.Z)({root:["root"],notchedOutline:["notchedOutline"],input:["input"]},zi,t);return(0,r.Z)({},t,n)})(i),b=ai(),v=ri({props:i,muiFormControl:b,states:["required"]}),y=(0,r.Z)({},i,{color:v.color||"primary",disabled:v.disabled,error:v.error,focused:v.focused,formControl:b,fullWidth:l,hiddenLabel:v.hiddenLabel,multiline:d,size:v.size,type:f});return(0,m.jsx)(wi,(0,r.Z)({components:(0,r.Z)({Root:$i,Input:Wi},s),renderSuffix:t=>(0,m.jsx)(Ui,{ownerState:y,className:g.notchedOutline,label:null!=u&&""!==u&&v.required?o||(o=(0,m.jsxs)(e.Fragment,{children:[u," ","*"]})):u,notched:void 0!==p?p:Boolean(t.startAdornment||t.filled||t.focused)}),fullWidth:l,inputComponent:c,multiline:d,ref:n,type:f},h,{classes:(0,r.Z)({},g,{notchedOutline:null})}))}));Hi.muiName="Input";const qi=Hi;function Vi(e){return(0,Re.Z)("MuiFormLabel",e)}const Ki=(0,Me.Z)("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]),Gi=["children","className","color","component","disabled","error","filled","focused","required"],Qi=(0,Se.ZP)("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,r.Z)({},t.root,"secondary"===e.color&&t.colorSecondary,e.filled&&t.filled)})((({theme:e,ownerState:t})=>(0,r.Z)({color:(e.vars||e).palette.text.secondary},e.typography.body1,{lineHeight:"1.4375em",padding:0,position:"relative",[`&.${Ki.focused}`]:{color:(e.vars||e).palette[t.color].main},[`&.${Ki.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${Ki.error}`]:{color:(e.vars||e).palette.error.main}}))),Xi=(0,Se.ZP)("span",{name:"MuiFormLabel",slot:"Asterisk",overridesResolver:(e,t)=>t.asterisk})((({theme:e})=>({[`&.${Ki.error}`]:{color:(e.vars||e).palette.error.main}}))),Yi=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiFormLabel"}),{children:o,className:s,component:l="label"}=n,c=(0,a.Z)(n,Gi),u=ri({props:n,muiFormControl:ai(),states:["color","required","focused","disabled","error","filled"]}),d=(0,r.Z)({},n,{color:u.color||"primary",component:l,disabled:u.disabled,error:u.error,filled:u.filled,focused:u.focused,required:u.required}),p=(e=>{const{classes:t,color:n,focused:r,disabled:o,error:a,filled:i,required:s}=e,l={root:["root",`color${(0,Ne.Z)(n)}`,o&&"disabled",a&&"error",i&&"filled",r&&"focused",s&&"required"],asterisk:["asterisk",a&&"error"]};return(0,_e.Z)(l,Vi,t)})(d);return(0,m.jsxs)(Qi,(0,r.Z)({as:l,ownerState:d,className:(0,i.Z)(p.root,s),ref:t},c,{children:[o,u.required&&(0,m.jsxs)(Xi,{ownerState:d,"aria-hidden":!0,className:p.asterisk,children:[" ","*"]})]}))}));function Ji(e){return(0,Re.Z)("MuiInputLabel",e)}(0,Me.Z)("MuiInputLabel",["root","focused","disabled","error","required","asterisk","formControl","sizeSmall","shrink","animated","standard","filled","outlined"]);const es=["disableAnimation","margin","shrink","variant"],ts=(0,Se.ZP)(Yi,{shouldForwardProp:e=>(0,Se.FO)(e)||"classes"===e,name:"MuiInputLabel",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[{[`& .${Ki.asterisk}`]:t.asterisk},t.root,n.formControl&&t.formControl,"small"===n.size&&t.sizeSmall,n.shrink&&t.shrink,!n.disableAnimation&&t.animated,t[n.variant]]}})((({theme:e,ownerState:t})=>(0,r.Z)({display:"block",transformOrigin:"top left",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},t.formControl&&{position:"absolute",left:0,top:0,transform:"translate(0, 20px) scale(1)"},"small"===t.size&&{transform:"translate(0, 17px) scale(1)"},t.shrink&&{transform:"translate(0, -1.5px) scale(0.75)",transformOrigin:"top left",maxWidth:"133%"},!t.disableAnimation&&{transition:e.transitions.create(["color","transform","max-width"],{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut})},"filled"===t.variant&&(0,r.Z)({zIndex:1,pointerEvents:"none",transform:"translate(12px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(12px, 13px) scale(1)"},t.shrink&&(0,r.Z)({userSelect:"none",pointerEvents:"auto",transform:"translate(12px, 7px) scale(0.75)",maxWidth:"calc(133% - 24px)"},"small"===t.size&&{transform:"translate(12px, 4px) scale(0.75)"})),"outlined"===t.variant&&(0,r.Z)({zIndex:1,pointerEvents:"none",transform:"translate(14px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(14px, 9px) scale(1)"},t.shrink&&{userSelect:"none",pointerEvents:"auto",maxWidth:"calc(133% - 24px)",transform:"translate(14px, -9px) scale(0.75)"})))),ns=e.forwardRef((function(e,t){const n=(0,Ce.Z)({name:"MuiInputLabel",props:e}),{disableAnimation:o=!1,shrink:i}=n,s=(0,a.Z)(n,es),l=ai();let c=i;void 0===c&&l&&(c=l.filled||l.focused||l.adornedStart);const u=ri({props:n,muiFormControl:l,states:["size","variant","required"]}),d=(0,r.Z)({},n,{disableAnimation:o,formControl:l,shrink:c,size:u.size,variant:u.variant,required:u.required}),p=(e=>{const{classes:t,formControl:n,size:o,shrink:a,disableAnimation:i,variant:s,required:l}=e,c={root:["root",n&&"formControl",!i&&"animated",a&&"shrink","small"===o&&"sizeSmall",s],asterisk:[l&&"asterisk"]},u=(0,_e.Z)(c,Ji,t);return(0,r.Z)({},t,u)})(d);return(0,m.jsx)(ts,(0,r.Z)({"data-shrink":c,ownerState:d,ref:t},s,{classes:p}))}));var rs=o(3693);function os(e){return(0,Re.Z)("MuiFormControl",e)}(0,Me.Z)("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]);const as=["children","className","color","component","disabled","error","focused","fullWidth","hiddenLabel","margin","required","size","variant"],is=(0,Se.ZP)("div",{name:"MuiFormControl",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,r.Z)({},t.root,t[`margin${(0,Ne.Z)(e.margin)}`],e.fullWidth&&t.fullWidth)})((({ownerState:e})=>(0,r.Z)({display:"inline-flex",flexDirection:"column",position:"relative",minWidth:0,padding:0,margin:0,border:0,verticalAlign:"top"},"normal"===e.margin&&{marginTop:16,marginBottom:8},"dense"===e.margin&&{marginTop:8,marginBottom:4},e.fullWidth&&{width:"100%"}))),ss=e.forwardRef((function(t,n){const o=(0,Ce.Z)({props:t,name:"MuiFormControl"}),{children:s,className:l,color:c="primary",component:u="div",disabled:d=!1,error:p=!1,focused:f,fullWidth:h=!1,hiddenLabel:g=!1,margin:b="none",required:v=!1,size:y="medium",variant:w="outlined"}=o,x=(0,a.Z)(o,as),E=(0,r.Z)({},o,{color:c,component:u,disabled:d,error:p,fullWidth:h,hiddenLabel:g,margin:b,required:v,size:y,variant:w}),k=(e=>{const{classes:t,margin:n,fullWidth:r}=e,o={root:["root","none"!==n&&`margin${(0,Ne.Z)(n)}`,r&&"fullWidth"]};return(0,_e.Z)(o,os,t)})(E),[_,S]=e.useState((()=>{let t=!1;return s&&e.Children.forEach(s,(e=>{if(!(0,rs.Z)(e,["Input","Select"]))return;const n=(0,rs.Z)(e,["Select"])?e.props.input:e;n&&n.props.startAdornment&&(t=!0)})),t})),[C,N]=e.useState((()=>{let t=!1;return s&&e.Children.forEach(s,(e=>{(0,rs.Z)(e,["Input","Select"])&&ui(e.props,!0)&&(t=!0)})),t})),[O,R]=e.useState(!1);d&&O&&R(!1);const M=void 0===f||d?O:f,T=e.useCallback((()=>{N(!0)}),[]),P={adornedStart:_,setAdornedStart:S,color:c,disabled:d,error:p,filled:C,focused:M,fullWidth:h,hiddenLabel:g,size:y,onBlur:()=>{R(!1)},onEmpty:e.useCallback((()=>{N(!1)}),[]),onFilled:T,onFocus:()=>{R(!0)},registerEffect:void 0,required:v,variant:w};return(0,m.jsx)(oi.Provider,{value:P,children:(0,m.jsx)(is,(0,r.Z)({as:u,ownerState:E,className:(0,i.Z)(k.root,l),ref:n},x,{children:s}))})}));function ls(e){return(0,Re.Z)("MuiFormHelperText",e)}const cs=(0,Me.Z)("MuiFormHelperText",["root","error","disabled","sizeSmall","sizeMedium","contained","focused","filled","required"]);var us;const ds=["children","className","component","disabled","error","filled","focused","margin","required","variant"],ps=(0,Se.ZP)("p",{name:"MuiFormHelperText",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.size&&t[`size${(0,Ne.Z)(n.size)}`],n.contained&&t.contained,n.filled&&t.filled]}})((({theme:e,ownerState:t})=>(0,r.Z)({color:(e.vars||e).palette.text.secondary},e.typography.caption,{textAlign:"left",marginTop:3,marginRight:0,marginBottom:0,marginLeft:0,[`&.${cs.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${cs.error}`]:{color:(e.vars||e).palette.error.main}},"small"===t.size&&{marginTop:4},t.contained&&{marginLeft:14,marginRight:14}))),fs=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiFormHelperText"}),{children:o,className:s,component:l="p"}=n,c=(0,a.Z)(n,ds),u=ri({props:n,muiFormControl:ai(),states:["variant","size","disabled","error","filled","focused","required"]}),d=(0,r.Z)({},n,{component:l,contained:"filled"===u.variant||"outlined"===u.variant,variant:u.variant,size:u.size,disabled:u.disabled,error:u.error,filled:u.filled,focused:u.focused,required:u.required}),p=(e=>{const{classes:t,contained:n,size:r,disabled:o,error:a,filled:i,focused:s,required:l}=e,c={root:["root",o&&"disabled",a&&"error",r&&`size${(0,Ne.Z)(r)}`,n&&"contained",s&&"focused",i&&"filled",l&&"required"]};return(0,_e.Z)(c,ls,t)})(d);return(0,m.jsx)(ps,(0,r.Z)({as:l,ownerState:d,className:(0,i.Z)(p.root,s),ref:t},c,{children:" "===o?us||(us=(0,m.jsx)("span",{className:"notranslate",children:"​"})):o}))}));var ms=o(7505);const hs=e.createContext({});function gs(e){return(0,Re.Z)("MuiList",e)}(0,Me.Z)("MuiList",["root","padding","dense","subheader"]);const bs=["children","className","component","dense","disablePadding","subheader"],vs=(0,Se.ZP)("ul",{name:"MuiList",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disablePadding&&t.padding,n.dense&&t.dense,n.subheader&&t.subheader]}})((({ownerState:e})=>(0,r.Z)({listStyle:"none",margin:0,padding:0,position:"relative"},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0}))),ys=e.forwardRef((function(t,n){const o=(0,Ce.Z)({props:t,name:"MuiList"}),{children:s,className:l,component:c="ul",dense:u=!1,disablePadding:d=!1,subheader:p}=o,f=(0,a.Z)(o,bs),h=e.useMemo((()=>({dense:u})),[u]),g=(0,r.Z)({},o,{component:c,dense:u,disablePadding:d}),b=(e=>{const{classes:t,disablePadding:n,dense:r,subheader:o}=e,a={root:["root",!n&&"padding",r&&"dense",o&&"subheader"]};return(0,_e.Z)(a,gs,t)})(g);return(0,m.jsx)(hs.Provider,{value:h,children:(0,m.jsxs)(vs,(0,r.Z)({as:c,className:(0,i.Z)(b.root,l),ref:n,ownerState:g},f,{children:[p,s]}))})})),ws=Co,xs=["actions","autoFocus","autoFocusItem","children","className","disabledItemsFocusable","disableListWrap","onKeyDown","variant"];function Es(e,t,n){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:n?null:e.firstChild}function ks(e,t,n){return e===t?n?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:n?null:e.lastChild}function _s(e,t){if(void 0===t)return!0;let n=e.innerText;return void 0===n&&(n=e.textContent),n=n.trim().toLowerCase(),0!==n.length&&(t.repeating?n[0]===t.keys[0]:0===n.indexOf(t.keys.join("")))}function Ss(e,t,n,r,o,a){let i=!1,s=o(e,t,!!t&&n);for(;s;){if(s===e.firstChild){if(i)return!1;i=!0}const t=!r&&(s.disabled||"true"===s.getAttribute("aria-disabled"));if(s.hasAttribute("tabindex")&&_s(s,a)&&!t)return s.focus(),!0;s=o(e,s,n)}return!1}const Cs=e.forwardRef((function(t,n){const{actions:o,autoFocus:i=!1,autoFocusItem:s=!1,children:l,className:c,disabledItemsFocusable:u=!1,disableListWrap:d=!1,onKeyDown:p,variant:f="selectedMenu"}=t,h=(0,a.Z)(t,xs),g=e.useRef(null),b=e.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});(0,ii.Z)((()=>{i&&g.current.focus()}),[i]),e.useImperativeHandle(o,(()=>({adjustStyleForScrollbar:(e,t)=>{const n=!g.current.style.width;if(e.clientHeight<g.current.clientHeight&&n){const n=`${ws((0,ms.Z)(e))}px`;g.current.style["rtl"===t.direction?"paddingLeft":"paddingRight"]=n,g.current.style.width=`calc(100% + ${n})`}return g.current}})),[]);const v=(0,qe.Z)(g,n);let y=-1;e.Children.forEach(l,((t,n)=>{e.isValidElement(t)&&(t.props.disabled||("selectedMenu"===f&&t.props.selected||-1===y)&&(y=n))}));const w=e.Children.map(l,((t,n)=>{if(n===y){const n={};return s&&(n.autoFocus=!0),void 0===t.props.tabIndex&&"selectedMenu"===f&&(n.tabIndex=0),e.cloneElement(t,n)}return t}));return(0,m.jsx)(ys,(0,r.Z)({role:"menu",ref:v,className:c,onKeyDown:e=>{const t=g.current,n=e.key,r=(0,ms.Z)(t).activeElement;if("ArrowDown"===n)e.preventDefault(),Ss(t,r,d,u,Es);else if("ArrowUp"===n)e.preventDefault(),Ss(t,r,d,u,ks);else if("Home"===n)e.preventDefault(),Ss(t,null,d,u,Es);else if("End"===n)e.preventDefault(),Ss(t,null,d,u,ks);else if(1===n.length){const o=b.current,a=n.toLowerCase(),i=performance.now();o.keys.length>0&&(i-o.lastTime>500?(o.keys=[],o.repeating=!0,o.previousKeyMatched=!0):o.repeating&&a!==o.keys[0]&&(o.repeating=!1)),o.lastTime=i,o.keys.push(a);const s=r&&!o.repeating&&_s(r,o);o.previousKeyMatched&&(s||Ss(t,r,!1,u,Es,o))?e.preventDefault():o.previousKeyMatched=!1}p&&p(e)},tabIndex:i?0:-1},h,{children:w}))})),Ns=Cs;var Os=o(5400),Rs=o(7577);const Ms=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function Ts(e){return`scale(${e}, ${e**2})`}const Ps={entering:{opacity:1,transform:Ts(1)},entered:{opacity:1,transform:"none"}},As="undefined"!=typeof navigator&&/^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent)&&/(os |version\/)15(.|_)4/i.test(navigator.userAgent),Zs=e.forwardRef((function(t,n){const{addEndListener:o,appear:i=!0,children:s,easing:l,in:c,onEnter:u,onEntered:d,onEntering:p,onExit:f,onExited:h,onExiting:g,style:b,timeout:v="auto",TransitionComponent:y=Yo}=t,w=(0,a.Z)(t,Ms),x=e.useRef(),E=e.useRef(),k=ea(),_=e.useRef(null),S=(0,qe.Z)(s.ref,n),C=(0,qe.Z)(_,S),N=e=>t=>{if(e){const n=_.current;void 0===t?e(n):e(n,t)}},O=N(p),R=N(((e,t)=>{ta(e);const{duration:n,delay:r,easing:o}=na({style:b,timeout:v,easing:l},{mode:"enter"});let a;"auto"===v?(a=k.transitions.getAutoHeightDuration(e.clientHeight),E.current=a):a=n,e.style.transition=[k.transitions.create("opacity",{duration:a,delay:r}),k.transitions.create("transform",{duration:As?a:.666*a,delay:r,easing:o})].join(","),u&&u(e,t)})),M=N(d),T=N(g),P=N((e=>{const{duration:t,delay:n,easing:r}=na({style:b,timeout:v,easing:l},{mode:"exit"});let o;"auto"===v?(o=k.transitions.getAutoHeightDuration(e.clientHeight),E.current=o):o=t,e.style.transition=[k.transitions.create("opacity",{duration:o,delay:n}),k.transitions.create("transform",{duration:As?o:.666*o,delay:As?n:n||.333*o,easing:r})].join(","),e.style.opacity=0,e.style.transform=Ts(.75),f&&f(e)})),A=N(h);return e.useEffect((()=>()=>{clearTimeout(x.current)}),[]),(0,m.jsx)(y,(0,r.Z)({appear:i,in:c,nodeRef:_,onEnter:R,onEntered:M,onEntering:O,onExit:P,onExited:A,onExiting:T,addEndListener:e=>{"auto"===v&&(x.current=setTimeout(e,E.current||0)),o&&o(_.current,e)},timeout:"auto"===v?null:v},w,{children:(t,n)=>e.cloneElement(s,(0,r.Z)({style:(0,r.Z)({opacity:0,transform:Ts(.75),visibility:"exited"!==t||c?void 0:"hidden"},Ps[t],b,s.props.style),ref:C},n))}))}));Zs.muiSupportAuto=!0;const Is=Zs;function Ls(e){return(0,Re.Z)("MuiPopover",e)}(0,Me.Z)("MuiPopover",["root","paper"]);const js=["onEntering"],Ds=["action","anchorEl","anchorOrigin","anchorPosition","anchorReference","children","className","container","elevation","marginThreshold","open","PaperProps","transformOrigin","TransitionComponent","transitionDuration","TransitionProps"];function zs(e,t){let n=0;return"number"==typeof t?n=t:"center"===t?n=e.height/2:"bottom"===t&&(n=e.height),n}function Bs(e,t){let n=0;return"number"==typeof t?n=t:"center"===t?n=e.width/2:"right"===t&&(n=e.width),n}function Fs(e){return[e.horizontal,e.vertical].map((e=>"number"==typeof e?`${e}px`:e)).join(" ")}function $s(e){return"function"==typeof e?e():e}const Us=(0,Se.ZP)(ha,{name:"MuiPopover",slot:"Root",overridesResolver:(e,t)=>t.root})({}),Ws=(0,Se.ZP)(Ie,{name:"MuiPopover",slot:"Paper",overridesResolver:(e,t)=>t.paper})({position:"absolute",overflowY:"auto",overflowX:"hidden",minWidth:16,minHeight:16,maxWidth:"calc(100% - 32px)",maxHeight:"calc(100% - 32px)",outline:0}),Hs=e.forwardRef((function(t,n){const o=(0,Ce.Z)({props:t,name:"MuiPopover"}),{action:s,anchorEl:l,anchorOrigin:c={vertical:"top",horizontal:"left"},anchorPosition:u,anchorReference:d="anchorEl",children:p,className:f,container:h,elevation:g=8,marginThreshold:b=16,open:v,PaperProps:y={},transformOrigin:w={vertical:"top",horizontal:"left"},TransitionComponent:x=Is,transitionDuration:E="auto",TransitionProps:{onEntering:k}={}}=o,_=(0,a.Z)(o.TransitionProps,js),S=(0,a.Z)(o,Ds),C=e.useRef(),N=(0,qe.Z)(C,y.ref),O=(0,r.Z)({},o,{anchorOrigin:c,anchorReference:d,elevation:g,marginThreshold:b,PaperProps:y,transformOrigin:w,TransitionComponent:x,transitionDuration:E,TransitionProps:_}),R=(e=>{const{classes:t}=e;return(0,_e.Z)({root:["root"],paper:["paper"]},Ls,t)})(O),M=e.useCallback((()=>{if("anchorPosition"===d)return u;const e=$s(l),t=(e&&1===e.nodeType?e:(0,ms.Z)(C.current).body).getBoundingClientRect();return{top:t.top+zs(t,c.vertical),left:t.left+Bs(t,c.horizontal)}}),[l,c.horizontal,c.vertical,u,d]),T=e.useCallback((e=>({vertical:zs(e,w.vertical),horizontal:Bs(e,w.horizontal)})),[w.horizontal,w.vertical]),P=e.useCallback((e=>{const t={width:e.offsetWidth,height:e.offsetHeight},n=T(t);if("none"===d)return{top:null,left:null,transformOrigin:Fs(n)};const r=M();let o=r.top-n.vertical,a=r.left-n.horizontal;const i=o+t.height,s=a+t.width,c=(0,Rs.Z)($s(l)),u=c.innerHeight-b,p=c.innerWidth-b;if(o<b){const e=o-b;o-=e,n.vertical+=e}else if(i>u){const e=i-u;o-=e,n.vertical+=e}if(a<b){const e=a-b;a-=e,n.horizontal+=e}else if(s>p){const e=s-p;a-=e,n.horizontal+=e}return{top:`${Math.round(o)}px`,left:`${Math.round(a)}px`,transformOrigin:Fs(n)}}),[l,d,M,T,b]),A=e.useCallback((()=>{const e=C.current;if(!e)return;const t=P(e);null!==t.top&&(e.style.top=t.top),null!==t.left&&(e.style.left=t.left),e.style.transformOrigin=t.transformOrigin}),[P]);e.useEffect((()=>{v&&A()})),e.useImperativeHandle(s,(()=>v?{updatePosition:()=>{A()}}:null),[v,A]),e.useEffect((()=>{if(!v)return;const e=(0,Os.Z)((()=>{A()})),t=(0,Rs.Z)(l);return t.addEventListener("resize",e),()=>{e.clear(),t.removeEventListener("resize",e)}}),[l,v,A]);let Z=E;"auto"!==E||x.muiSupportAuto||(Z=void 0);const I=h||(l?(0,ms.Z)($s(l)).body:void 0);return(0,m.jsx)(Us,(0,r.Z)({BackdropProps:{invisible:!0},className:(0,i.Z)(R.root,f),container:I,open:v,ref:n,ownerState:O},S,{children:(0,m.jsx)(x,(0,r.Z)({appear:!0,in:v,onEntering:(e,t)=>{k&&k(e,t),A()},timeout:Z},_,{children:(0,m.jsx)(Ws,(0,r.Z)({elevation:g},y,{ref:N,className:(0,i.Z)(R.paper,y.className),children:p}))}))}))})),qs=Hs;function Vs(e){return(0,Re.Z)("MuiMenu",e)}(0,Me.Z)("MuiMenu",["root","paper","list"]);const Ks=["onEntering"],Gs=["autoFocus","children","disableAutoFocusItem","MenuListProps","onClose","open","PaperProps","PopoverClasses","transitionDuration","TransitionProps","variant"],Qs={vertical:"top",horizontal:"right"},Xs={vertical:"top",horizontal:"left"},Ys=(0,Se.ZP)(qs,{shouldForwardProp:e=>(0,Se.FO)(e)||"classes"===e,name:"MuiMenu",slot:"Root",overridesResolver:(e,t)=>t.root})({}),Js=(0,Se.ZP)(Ie,{name:"MuiMenu",slot:"Paper",overridesResolver:(e,t)=>t.paper})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),el=(0,Se.ZP)(Ns,{name:"MuiMenu",slot:"List",overridesResolver:(e,t)=>t.list})({outline:0}),tl=e.forwardRef((function(t,n){const o=(0,Ce.Z)({props:t,name:"MuiMenu"}),{autoFocus:s=!0,children:l,disableAutoFocusItem:c=!1,MenuListProps:u={},onClose:d,open:p,PaperProps:f={},PopoverClasses:h,transitionDuration:g="auto",TransitionProps:{onEntering:b}={},variant:v="selectedMenu"}=o,y=(0,a.Z)(o.TransitionProps,Ks),w=(0,a.Z)(o,Gs),x=ea(),E="rtl"===x.direction,k=(0,r.Z)({},o,{autoFocus:s,disableAutoFocusItem:c,MenuListProps:u,onEntering:b,PaperProps:f,transitionDuration:g,TransitionProps:y,variant:v}),_=(e=>{const{classes:t}=e;return(0,_e.Z)({root:["root"],paper:["paper"],list:["list"]},Vs,t)})(k),S=s&&!c&&p,C=e.useRef(null);let N=-1;return e.Children.map(l,((t,n)=>{e.isValidElement(t)&&(t.props.disabled||("selectedMenu"===v&&t.props.selected||-1===N)&&(N=n))})),(0,m.jsx)(Ys,(0,r.Z)({classes:h,onClose:d,anchorOrigin:{vertical:"bottom",horizontal:E?"right":"left"},transformOrigin:E?Qs:Xs,PaperProps:(0,r.Z)({component:Js},f,{classes:(0,r.Z)({},f.classes,{root:_.paper})}),className:_.root,open:p,ref:n,transitionDuration:g,TransitionProps:(0,r.Z)({onEntering:(e,t)=>{C.current&&C.current.adjustStyleForScrollbar(e,x),b&&b(e,t)}},y),ownerState:k},w,{children:(0,m.jsx)(el,(0,r.Z)({onKeyDown:e=>{"Tab"===e.key&&(e.preventDefault(),d&&d(e,"tabKeyDown"))},actions:C,autoFocus:s&&(-1===N||c),autoFocusItem:S,variant:v},u,{className:(0,i.Z)(_.list,u.className),children:l}))}))})),nl=tl;function rl(e){return(0,Re.Z)("MuiNativeSelect",e)}const ol=(0,Me.Z)("MuiNativeSelect",["root","select","multiple","filled","outlined","standard","disabled","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput"]),al=["className","disabled","IconComponent","inputRef","variant"],il=({ownerState:e,theme:t})=>(0,r.Z)({MozAppearance:"none",WebkitAppearance:"none",userSelect:"none",borderRadius:0,cursor:"pointer","&:focus":{backgroundColor:"light"===t.palette.mode?"rgba(0, 0, 0, 0.05)":"rgba(255, 255, 255, 0.05)",borderRadius:0},"&::-ms-expand":{display:"none"},[`&.${ol.disabled}`]:{cursor:"default"},"&[multiple]":{height:"auto"},"&:not([multiple]) option, &:not([multiple]) optgroup":{backgroundColor:t.palette.background.paper},"&&&":{paddingRight:24,minWidth:16}},"filled"===e.variant&&{"&&&":{paddingRight:32}},"outlined"===e.variant&&{borderRadius:t.shape.borderRadius,"&:focus":{borderRadius:t.shape.borderRadius},"&&&":{paddingRight:32}}),sl=(0,Se.ZP)("select",{name:"MuiNativeSelect",slot:"Select",shouldForwardProp:Se.FO,overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.select,t[n.variant],{[`&.${ol.multiple}`]:t.multiple}]}})(il),ll=({ownerState:e,theme:t})=>(0,r.Z)({position:"absolute",right:0,top:"calc(50% - .5em)",pointerEvents:"none",color:t.palette.action.active,[`&.${ol.disabled}`]:{color:t.palette.action.disabled}},e.open&&{transform:"rotate(180deg)"},"filled"===e.variant&&{right:7},"outlined"===e.variant&&{right:7}),cl=(0,Se.ZP)("svg",{name:"MuiNativeSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.icon,n.variant&&t[`icon${(0,Ne.Z)(n.variant)}`],n.open&&t.iconOpen]}})(ll),ul=e.forwardRef((function(t,n){const{className:o,disabled:s,IconComponent:l,inputRef:c,variant:u="standard"}=t,d=(0,a.Z)(t,al),p=(0,r.Z)({},t,{disabled:s,variant:u}),f=(e=>{const{classes:t,variant:n,disabled:r,multiple:o,open:a}=e,i={select:["select",n,r&&"disabled",o&&"multiple"],icon:["icon",`icon${(0,Ne.Z)(n)}`,a&&"iconOpen",r&&"disabled"]};return(0,_e.Z)(i,rl,t)})(p);return(0,m.jsxs)(e.Fragment,{children:[(0,m.jsx)(sl,(0,r.Z)({ownerState:p,className:(0,i.Z)(f.select,o),disabled:s,ref:c||n},d)),t.multiple?null:(0,m.jsx)(cl,{as:l,ownerState:p,className:f.icon})]})}));var dl=o(1133);function pl(e){return(0,Re.Z)("MuiSelect",e)}const fl=(0,Me.Z)("MuiSelect",["select","multiple","filled","outlined","standard","disabled","focused","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput"]);var ml;const hl=["aria-describedby","aria-label","autoFocus","autoWidth","children","className","defaultOpen","defaultValue","disabled","displayEmpty","IconComponent","inputRef","labelId","MenuProps","multiple","name","onBlur","onChange","onClose","onFocus","onOpen","open","readOnly","renderValue","SelectDisplayProps","tabIndex","type","value","variant"],gl=(0,Se.ZP)("div",{name:"MuiSelect",slot:"Select",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[{[`&.${fl.select}`]:t.select},{[`&.${fl.select}`]:t[n.variant]},{[`&.${fl.multiple}`]:t.multiple}]}})(il,{[`&.${fl.select}`]:{height:"auto",minHeight:"1.4375em",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"}}),bl=(0,Se.ZP)("svg",{name:"MuiSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.icon,n.variant&&t[`icon${(0,Ne.Z)(n.variant)}`],n.open&&t.iconOpen]}})(ll),vl=(0,Se.ZP)("input",{shouldForwardProp:e=>(0,Se.Dz)(e)&&"classes"!==e,name:"MuiSelect",slot:"NativeInput",overridesResolver:(e,t)=>t.nativeInput})({bottom:0,left:0,position:"absolute",opacity:0,pointerEvents:"none",width:"100%",boxSizing:"border-box"});function yl(e,t){return"object"==typeof t&&null!==t?e===t:String(e)===String(t)}function wl(e){return null==e||"string"==typeof e&&!e.trim()}const xl=e.forwardRef((function(t,n){const{"aria-describedby":o,"aria-label":s,autoFocus:l,autoWidth:c,children:u,className:d,defaultOpen:p,defaultValue:f,disabled:h,displayEmpty:g,IconComponent:b,inputRef:v,labelId:y,MenuProps:w={},multiple:x,name:E,onBlur:k,onChange:_,onClose:S,onFocus:C,onOpen:N,open:O,readOnly:R,renderValue:M,SelectDisplayProps:T={},tabIndex:P,value:A,variant:Z="standard"}=t,I=(0,a.Z)(t,hl),[L,j]=(0,dl.Z)({controlled:A,default:f,name:"Select"}),[D,z]=(0,dl.Z)({controlled:O,default:p,name:"Select"}),B=e.useRef(null),F=e.useRef(null),[$,U]=e.useState(null),{current:W}=e.useRef(null!=O),[H,q]=e.useState(),V=(0,qe.Z)(n,v),K=e.useCallback((e=>{F.current=e,e&&U(e)}),[]);e.useImperativeHandle(V,(()=>({focus:()=>{F.current.focus()},node:B.current,value:L})),[L]),e.useEffect((()=>{p&&D&&$&&!W&&(q(c?null:$.clientWidth),F.current.focus())}),[$,c]),e.useEffect((()=>{l&&F.current.focus()}),[l]),e.useEffect((()=>{if(!y)return;const e=(0,ms.Z)(F.current).getElementById(y);if(e){const t=()=>{getSelection().isCollapsed&&F.current.focus()};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}}),[y]);const G=(e,t)=>{e?N&&N(t):S&&S(t),W||(q(c?null:$.clientWidth),z(e))},Q=e.Children.toArray(u),X=e=>t=>{let n;if(t.currentTarget.hasAttribute("tabindex")){if(x){n=Array.isArray(L)?L.slice():[];const t=L.indexOf(e.props.value);-1===t?n.push(e.props.value):n.splice(t,1)}else n=e.props.value;if(e.props.onClick&&e.props.onClick(t),L!==n&&(j(n),_)){const r=t.nativeEvent||t,o=new r.constructor(r.type,r);Object.defineProperty(o,"target",{writable:!0,value:{value:n,name:E}}),_(o,e)}x||G(!1,t)}},Y=null!==$&&D;let J,ee;delete I["aria-invalid"];const te=[];let ne=!1,re=!1;(ui({value:L})||g)&&(M?J=M(L):ne=!0);const oe=Q.map(((t,n,r)=>{if(!e.isValidElement(t))return null;let o;if(x){if(!Array.isArray(L))throw new Error((0,Ga.Z)(2));o=L.some((e=>yl(e,t.props.value))),o&&ne&&te.push(t.props.children)}else o=yl(L,t.props.value),o&&ne&&(ee=t.props.children);return o&&(re=!0),void 0===t.props.value?e.cloneElement(t,{"aria-readonly":!0,role:"option"}):e.cloneElement(t,{"aria-selected":o?"true":"false",onClick:X(t),onKeyUp:e=>{" "===e.key&&e.preventDefault(),t.props.onKeyUp&&t.props.onKeyUp(e)},role:"option",selected:void 0===r[0].props.value||!0===r[0].props.disabled?(()=>{if(L)return o;const e=r.find((e=>void 0!==e.props.value&&!0!==e.props.disabled));return t===e||o})():o,value:void 0,"data-value":t.props.value})}));ne&&(J=x?0===te.length?null:te.reduce(((e,t,n)=>(e.push(t),n<te.length-1&&e.push(", "),e)),[]):ee);let ae,ie=H;!c&&W&&$&&(ie=$.clientWidth),ae=void 0!==P?P:h?null:0;const se=T.id||(E?`mui-component-select-${E}`:void 0),le=(0,r.Z)({},t,{variant:Z,value:L,open:Y}),ce=(e=>{const{classes:t,variant:n,disabled:r,multiple:o,open:a}=e,i={select:["select",n,r&&"disabled",o&&"multiple"],icon:["icon",`icon${(0,Ne.Z)(n)}`,a&&"iconOpen",r&&"disabled"],nativeInput:["nativeInput"]};return(0,_e.Z)(i,pl,t)})(le);return(0,m.jsxs)(e.Fragment,{children:[(0,m.jsx)(gl,(0,r.Z)({ref:K,tabIndex:ae,role:"button","aria-disabled":h?"true":void 0,"aria-expanded":Y?"true":"false","aria-haspopup":"listbox","aria-label":s,"aria-labelledby":[y,se].filter(Boolean).join(" ")||void 0,"aria-describedby":o,onKeyDown:e=>{R||-1!==[" ","ArrowUp","ArrowDown","Enter"].indexOf(e.key)&&(e.preventDefault(),G(!0,e))},onMouseDown:h||R?null:e=>{0===e.button&&(e.preventDefault(),F.current.focus(),G(!0,e))},onBlur:e=>{!Y&&k&&(Object.defineProperty(e,"target",{writable:!0,value:{value:L,name:E}}),k(e))},onFocus:C},T,{ownerState:le,className:(0,i.Z)(T.className,ce.select,d),id:se,children:wl(J)?ml||(ml=(0,m.jsx)("span",{className:"notranslate",children:"​"})):J})),(0,m.jsx)(vl,(0,r.Z)({value:Array.isArray(L)?L.join(","):L,name:E,ref:B,"aria-hidden":!0,onChange:e=>{const t=Q.map((e=>e.props.value)).indexOf(e.target.value);if(-1===t)return;const n=Q[t];j(n.props.value),_&&_(e,n)},tabIndex:-1,disabled:h,className:ce.nativeInput,autoFocus:l,ownerState:le},I)),(0,m.jsx)(bl,{as:b,className:ce.icon,ownerState:le}),(0,m.jsx)(nl,(0,r.Z)({id:`menu-${E||""}`,anchorEl:$,open:Y,onClose:e=>{G(!1,e)},anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"}},w,{MenuListProps:(0,r.Z)({"aria-labelledby":y,role:"listbox",disableListWrap:!0},w.MenuListProps),PaperProps:(0,r.Z)({},w.PaperProps,{style:(0,r.Z)({minWidth:ie},null!=w.PaperProps?w.PaperProps.style:null)}),children:oe}))]})})),El=xl,kl=(0,o(41).Z)((0,m.jsx)("path",{d:"M7 10l5 5 5-5z"}),"ArrowDropDown");var _l,Sl;const Cl=["autoWidth","children","classes","className","defaultOpen","displayEmpty","IconComponent","id","input","inputProps","label","labelId","MenuProps","multiple","native","onClose","onOpen","open","renderValue","SelectDisplayProps","variant"],Nl={name:"MuiSelect",overridesResolver:(e,t)=>t.root,shouldForwardProp:e=>(0,Se.FO)(e)&&"variant"!==e,slot:"Root"},Ol=(0,Se.ZP)(Ni,Nl)(""),Rl=(0,Se.ZP)(qi,Nl)(""),Ml=(0,Se.ZP)(Zi,Nl)(""),Tl=e.forwardRef((function(t,n){const o=(0,Ce.Z)({name:"MuiSelect",props:t}),{autoWidth:s=!1,children:l,classes:u={},className:d,defaultOpen:p=!1,displayEmpty:f=!1,IconComponent:h=kl,id:g,input:b,inputProps:v,label:y,labelId:w,MenuProps:x,multiple:E=!1,native:k=!1,onClose:_,onOpen:S,open:C,renderValue:N,SelectDisplayProps:O,variant:R="outlined"}=o,M=(0,a.Z)(o,Cl),T=k?ul:El,P=ri({props:o,muiFormControl:ai(),states:["variant"]}).variant||R,A=b||{standard:_l||(_l=(0,m.jsx)(Ol,{})),outlined:(0,m.jsx)(Rl,{label:y}),filled:Sl||(Sl=(0,m.jsx)(Ml,{}))}[P],Z=(e=>{const{classes:t}=e;return t})((0,r.Z)({},o,{variant:P,classes:u})),I=(0,qe.Z)(n,A.ref);return(0,m.jsx)(e.Fragment,{children:e.cloneElement(A,(0,r.Z)({inputComponent:T,inputProps:(0,r.Z)({children:l,IconComponent:h,variant:P,type:void 0,multiple:E},k?{id:g}:{autoWidth:s,defaultOpen:p,displayEmpty:f,labelId:w,MenuProps:x,onClose:_,onOpen:S,open:C,renderValue:N,SelectDisplayProps:(0,r.Z)({id:g},O)},v,{classes:v?(0,c.Z)(Z,v.classes):Z},b?b.props.inputProps:{})},E&&k&&"outlined"===P?{notched:!0}:{},{ref:I,className:(0,i.Z)(A.props.className,d)},!b&&{variant:P},M))})}));Tl.muiName="Select";const Pl=Tl;function Al(e){return(0,Re.Z)("MuiTextField",e)}(0,Me.Z)("MuiTextField",["root"]);const Zl=["autoComplete","autoFocus","children","className","color","defaultValue","disabled","error","FormHelperTextProps","fullWidth","helperText","id","InputLabelProps","inputProps","InputProps","inputRef","label","maxRows","minRows","multiline","name","onBlur","onChange","onFocus","placeholder","required","rows","select","SelectProps","type","value","variant"],Il={standard:Ni,filled:Zi,outlined:qi},Ll=(0,Se.ZP)(ss,{name:"MuiTextField",slot:"Root",overridesResolver:(e,t)=>t.root})({}),jl=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiTextField"}),{autoComplete:o,autoFocus:s=!1,children:l,className:c,color:u="primary",defaultValue:d,disabled:p=!1,error:f=!1,FormHelperTextProps:h,fullWidth:g=!1,helperText:b,id:v,InputLabelProps:y,inputProps:w,InputProps:x,inputRef:E,label:k,maxRows:_,minRows:S,multiline:C=!1,name:N,onBlur:O,onChange:R,onFocus:M,placeholder:T,required:P=!1,rows:A,select:Z=!1,SelectProps:I,type:L,value:j,variant:D="outlined"}=n,z=(0,a.Z)(n,Zl),B=(0,r.Z)({},n,{autoFocus:s,color:u,disabled:p,error:f,fullWidth:g,multiline:C,required:P,select:Z,variant:D}),F=(e=>{const{classes:t}=e;return(0,_e.Z)({root:["root"]},Al,t)})(B),$={};"outlined"===D&&(y&&void 0!==y.shrink&&($.notched=y.shrink),$.label=k),Z&&(I&&I.native||($.id=void 0),$["aria-describedby"]=void 0);const U=(0,bo.Z)(v),W=b&&U?`${U}-helper-text`:void 0,H=k&&U?`${U}-label`:void 0,q=Il[D],V=(0,m.jsx)(q,(0,r.Z)({"aria-describedby":W,autoComplete:o,autoFocus:s,defaultValue:d,fullWidth:g,multiline:C,name:N,rows:A,maxRows:_,minRows:S,type:L,value:j,id:U,inputRef:E,onBlur:O,onChange:R,onFocus:M,placeholder:T,inputProps:w},$,x));return(0,m.jsxs)(Ll,(0,r.Z)({className:(0,i.Z)(F.root,c),disabled:p,error:f,fullWidth:g,ref:t,required:P,color:u,variant:D,ownerState:B},z,{children:[null!=k&&""!==k&&(0,m.jsx)(ns,(0,r.Z)({htmlFor:U,id:H},y,{children:k})),Z?(0,m.jsx)(Pl,(0,r.Z)({"aria-describedby":W,id:U,labelId:H,value:j,input:V},I,{children:l})):V,b&&(0,m.jsx)(fs,(0,r.Z)({id:W},h,{children:b}))]}))})),Dl=(0,Me.Z)("MuiDivider",["root","absolute","fullWidth","inset","middle","flexItem","light","vertical","withChildren","withChildrenVertical","textAlignRight","textAlignLeft","wrapper","wrapperVertical"]),zl=(0,Me.Z)("MuiListItemIcon",["root","alignItemsFlexStart"]),Bl=(0,Me.Z)("MuiListItemText",["root","multiline","dense","inset","primary","secondary"]);function Fl(e){return(0,Re.Z)("MuiMenuItem",e)}const $l=(0,Me.Z)("MuiMenuItem",["root","focusVisible","dense","disabled","divider","gutters","selected"]),Ul=["autoFocus","component","dense","divider","disableGutters","focusVisibleClassName","role","tabIndex"],Wl=(0,Se.ZP)(Ot,{shouldForwardProp:e=>(0,Se.FO)(e)||"classes"===e,name:"MuiMenuItem",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.dense&&t.dense,n.divider&&t.divider,!n.disableGutters&&t.gutters]}})((({theme:e,ownerState:t})=>(0,r.Z)({},e.typography.body1,{display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",minHeight:48,paddingTop:6,paddingBottom:6,boxSizing:"border-box",whiteSpace:"nowrap"},!t.disableGutters&&{paddingLeft:16,paddingRight:16},t.divider&&{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:"padding-box"},{"&:hover":{textDecoration:"none",backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${$l.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,Oe.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${$l.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:(0,Oe.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${$l.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:(0,Oe.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,Oe.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity)}},[`&.${$l.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${$l.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity},[`& + .${Dl.root}`]:{marginTop:e.spacing(1),marginBottom:e.spacing(1)},[`& + .${Dl.inset}`]:{marginLeft:52},[`& .${Bl.root}`]:{marginTop:0,marginBottom:0},[`& .${Bl.inset}`]:{paddingLeft:36},[`& .${zl.root}`]:{minWidth:36}},!t.dense&&{[e.breakpoints.up("sm")]:{minHeight:"auto"}},t.dense&&(0,r.Z)({minHeight:32,paddingTop:4,paddingBottom:4},e.typography.body2,{[`& .${zl.root} svg`]:{fontSize:"1.25rem"}})))),Hl=e.forwardRef((function(t,n){const o=(0,Ce.Z)({props:t,name:"MuiMenuItem"}),{autoFocus:s=!1,component:l="li",dense:c=!1,divider:u=!1,disableGutters:d=!1,focusVisibleClassName:p,role:f="menuitem",tabIndex:h}=o,g=(0,a.Z)(o,Ul),b=e.useContext(hs),v={dense:c||b.dense||!1,disableGutters:d},y=e.useRef(null);(0,ii.Z)((()=>{s&&y.current&&y.current.focus()}),[s]);const w=(0,r.Z)({},o,{dense:v.dense,divider:u,disableGutters:d}),x=(e=>{const{disabled:t,dense:n,divider:o,disableGutters:a,selected:i,classes:s}=e,l={root:["root",n&&"dense",t&&"disabled",!a&&"gutters",o&&"divider",i&&"selected"]},c=(0,_e.Z)(l,Fl,s);return(0,r.Z)({},s,c)})(o),E=(0,qe.Z)(y,n);let k;return o.disabled||(k=void 0!==h?h:-1),(0,m.jsx)(hs.Provider,{value:v,children:(0,m.jsx)(Wl,(0,r.Z)({ref:E,role:f,tabIndex:k,component:l,focusVisibleClassName:(0,i.Z)(x.focusVisible,p)},g,{ownerState:w,classes:x}))})})),ql=kr({name:"testForm",initialState:{requestType:"Get",assertionList:{},i:0,userInput:"",assertionTypes:["Status Code","Content Type","Response Body"]},reducers:{setRequestType:(e,t)=>{e.requestType=t.payload},addAssertion:e=>{3===e.i&&(e.i=0),e.assertionList[e.i]=e.assertionTypes[e.i],e.i+=1},setInputType:(e,t)=>{e.assertionList[t.payload.id]=t.payload.type},deleteAssertion:(e,t)=>{delete e.assertionList[t.payload]}}}),{setRequestType:Vl,addAssertion:Kl,setInputType:Gl,deleteAssertion:Ql}=ql.actions,Xl=ql.reducer,Yl=kr({name:"code",initialState:{codeOutput:"describe('Sample description', (arg1) => { code.. }"},reducers:{copyText:e=>{navigator.clipboard.writeText(e.codeOutput)},setCodeOutput:(e,t)=>{e.codeOutput=t.payload}}}),{copyText:Jl,setCodeOutput:ec}=Yl.actions,tc=Yl.reducer,nc=kr({name:"userInput",initialState:{errorMsgs:{},userInputType:"",userInputText:void 0,i:0},reducers:{setErrorMsg:e=>{e.errorMsgs[e.i]="",e.i=e.i+1},changeErrorMsg:(e,t)=>{e.errorMsgs[t.payload.propsId]=t.payload.newMsg},setUserInputType:(e,t)=>{e.userInputType=t.payload},setUserInputText:(e,t)=>{e.userInputText=t.payload}}}),{setErrorMsg:rc,changeErrorMsg:oc,setUserInputType:ac,setUserInputText:ic}=nc.actions,sc=nc.reducer,lc=t=>{const n=ho(),r=go((e=>e.testForm.assertionList[t.id])),o=go((e=>e.testForm.assertionList)),a=go((e=>e.userInput.errorMsgs));return go((e=>e.userInput.i)),e.createElement("div",null,e.createElement(y,{sx:{display:"flex",justifyContent:"center",alignItems:"center",gap:"10px"}},e.createElement(ss,null,e.createElement(ns,null),e.createElement(Pl,{className:"text-display",name:"more-test-options",id:t.id,value:r,onChange:e=>{n(Gl({id:t.id,type:e.target.value})),n(ac(e.target.value))},displayEmpty:!0,inputProps:{"aria-label":"Without label"},sx:{height:40}},e.createElement(Hl,{key:"Status Code",value:"Status Code",id:t.id},"Status Code"),e.createElement(Hl,{key:"Content Type",value:"Content Type",id:t.id},"Content Type"),e.createElement(Hl,{key:"Response Body",value:"Response Body",id:t.id},"Response Body"))),e.createElement(jl,{className:"text-display",label:r,id:r,name:r,error:!!a[t.id],helperText:a[t.id],onChange:e=>{(e=>{const r=e.target.value;"Status Code"===e.target.id?Number(r)?n(oc(r<100||r>511?{propsId:t.id,newMsg:"enter a number between 100 and 511"}:{propsId:t.id,newMsg:""})):n(oc({propsId:t.id,newMsg:"please enter a number"})):"Content Type"===e.target.id&&(Number(r)||!r.includes("/")||"/"===r[0]||"/"===r[r.length-1]?n(oc({propsId:t.id,newMsg:"invalid content type"})):n(oc({propsId:t.id,newMsg:""})))})(e),(e=>{let r=0,a=0;Object.values(o).forEach((e=>{"Status Code"===e&&r++,"Content Type"===e&&a++})),r>=2&&"Status Code"===e.target.id&&n(oc({propsId:t.id,newMsg:"1 status code permitted"})),a>=2&&"Content Type"===e.target.id&&n(oc({propsId:t.id,newMsg:"1 content type permitted"}))})(e),n(ic(e.target.value))},required:!0,size:"small"}),e.createElement(Dt,{id:t.id,onClick:e=>{n(Ql(e.target.id))},variant:"contained",color:"primary",sx:{height:25,minWidth:23,width:23},disableElevation:!0},"-")))},cc=t=>e.createElement(jl,{className:"text-display",label:"Request Body",id:"req_body","data-testid":"Request-Body",name:"Request-Body",disabled:!t.showField,sx:{backgroundColor:t.showField?"none":"#E8E8E8"},size:"small"}),uc=t=>{const n=ho(),r=go((e=>e.userInfo.currentProject)),o=go((e=>e.userInfo.projectsInfo)).map((e=>e.project_name)),a=[];for(const t of o)a.push(e.createElement(Hl,{key:t,value:t},t));return e.createElement(y,{sx:{minHeight:25,height:25,width:23,minWidth:200,m:3}},e.createElement(ss,{fullWidth:!0},e.createElement(ns,{id:"project-dropdown-label"},"Project"),e.createElement(Pl,{name:"project-selector",id:"project-selector","data-testid":"project-selector",label:"Project",value:r,onChange:e=>{n(Br(e.target.value))},sx:{height:40},disabled:t.disabled},a)))},dc=()=>{const t=sessionStorage.getItem("isLoggedIn"),n=go((e=>e.testForm.requestType)),r=go((e=>e.testForm.assertionList)),o=[],a=Object.keys(r);for(const t of a)o.push(e.createElement(lc,{id:t,key:t}));const i=ho(),s=go((e=>e.userInfo.projectsInfo)).map((e=>e.project_name));i(Br(s[s.length-1]));const l=[],c=["Get","Post","Patch","Delete"];for(const t of c)l.push(e.createElement(Hl,{key:t,value:t},t));return e.createElement("form",{id:"test-generator-form",onSubmit:async e=>{e.preventDefault();let t=0,n=0;if(Object.values(r).forEach((e=>{"Status Code"===e&&t++,"Content Type"===e&&n++})),t>1)return alert("Make sure that you have only one Status Code!");if(n>1)return alert("Make sure that you have only one Content Type!");const o=(e=>{const t=new FormData(e);return Object.fromEntries(t)})(e.target),a=o["request-selector"].toString(),s=o[a].toString(),l=o["Request-Body"],c=o["Content Type"],u=o["Status Code"],d=o["Response Body"];if(!c&&!u&&!d)return alert("Please add expected response!");const p={header:{},assertions:[]};a&&(p.header.method=a),s&&(p.header.endpoint=s),l&&(p.header.req_body=l.toString()),c&&p.assertions.push({content:c.toString()}),u&&p.assertions.push({status:u.toString()}),d&&p.assertions.push({res_body:d.toString()});const f=await Zr().post("/api/tests",p);i(ec(f.data))}},e.createElement(y,{className:"test-gen-header"},e.createElement(ss,null,e.createElement(ns,{id:"requestSelector"},"Request Type"),e.createElement(Pl,{className:"text-display",name:"request-selector",id:"request-selector","data-testid":"request-selector",label:"Request Type",value:n,onChange:e=>{i(Vl(e.target.value))},sx:{height:40,width:"100px"}},l)),e.createElement(jl,{className:"text-display",label:"Endpoint","data-testid":n,id:"endpoint",name:n,required:!0,size:"small"}),e.createElement(cc,{showField:"Get"!==n})),e.createElement(y,{id:"assertion-list",sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"10px",marginBottom:"10px",marginTop:"10px"}},o,e.createElement(y,{sx:{display:"flex",gap:"10px",alignItems:"center"}},e.createElement(Wt,null,"Add Expected Response:"),e.createElement(Dt,{id:"add-assertion",name:"add-assertion",variant:"contained",color:"primary",onClick:()=>{i(Kl()),i(rc())},sx:{justifySelf:"center",alignSelf:"center",height:25,width:23,minWidth:23},disableElevation:!0},"+"))),e.createElement(Dt,{type:"submit",variant:"contained",sx:{marginTop:"30px",height:40},disableElevation:!0},"Generate Test Code"),t&&e.createElement(uc,null))};var pc=o(8309),fc=o(1899),mc=o(422);const hc=e=>{if(e.codeSnippets.length){let n=e.codeSnippets;n=n.map((e=>e.split("\n").map((e=>" "+e)).join("\n")));const r=[...(t=e.server,["const request = require('supertest');\n",`const server = '${t}';\n`," \n","describe('Route Integration Testing', ( ) => {\n"]),...n.map((e=>e+"\n")),"});"];e.codeDisplay=r.join("")}else 0===e.codeSnippets.length&&(e.codeDisplay=Pr);var t},gc=kr({name:"clipboard",initialState:{server:"",codeSnippets:[],codeDisplay:Pr},reducers:{appendToClipboard:(e,t)=>{e.codeSnippets.push(t.payload),hc(e),sessionStorage.setItem("codeSnippets",JSON.stringify(e.codeSnippets))},copyClipboard:e=>{navigator.clipboard.writeText(e.codeDisplay)},setServer:(e,t)=>{e.server=t.payload,hc(e)},clearClipboardState:e=>{e.server="",e.codeSnippets=[],e.codeDisplay=Pr,sessionStorage.removeItem("codeSnippets")},setSnippets:(e,t)=>{e.codeSnippets=t.payload,hc(e)}},extraReducers:e=>{e.addCase(_c.fulfilled,((e,t)=>{e.codeSnippets=t.payload.data,hc(e)}))}}),bc={postSnippet:Or("clipboardSlice/postSnippet",(async e=>{const{projectId:t,codeOutput:n}=e;let r;try{r=await Zr().post(`/api/clipboard/${t}`,{code_snippets:n})}catch(e){console.log("clipboardSlice/postSnippet",e)}})),getSnippets:Or("clipboardSlice/getSnippets",(async e=>{let t;try{t=await Zr().get(`/api/clipboard/${e}`)}catch(e){console.log("clipboardSlice/getSnippets",e)}return t}))},{appendToClipboard:vc,copyClipboard:yc,setServer:wc,clearClipboardState:xc,setSnippets:Ec}=gc.actions,{postSnippet:kc,getSnippets:_c}=bc,Sc=gc.reducer;function Cc(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Nc(e){return e instanceof Cc(e).Element||e instanceof Element}function Oc(e){return e instanceof Cc(e).HTMLElement||e instanceof HTMLElement}function Rc(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Cc(e).ShadowRoot||e instanceof ShadowRoot)}var Mc=Math.max,Tc=Math.min,Pc=Math.round;function Ac(){var e=navigator.userAgentData;return null!=e&&e.brands?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function Zc(){return!/^((?!chrome|android).)*safari/i.test(Ac())}function Ic(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var r=e.getBoundingClientRect(),o=1,a=1;t&&Oc(e)&&(o=e.offsetWidth>0&&Pc(r.width)/e.offsetWidth||1,a=e.offsetHeight>0&&Pc(r.height)/e.offsetHeight||1);var i=(Nc(e)?Cc(e):window).visualViewport,s=!Zc()&&n,l=(r.left+(s&&i?i.offsetLeft:0))/o,c=(r.top+(s&&i?i.offsetTop:0))/a,u=r.width/o,d=r.height/a;return{width:u,height:d,top:c,right:l+u,bottom:c+d,left:l,x:l,y:c}}function Lc(e){var t=Cc(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function jc(e){return e?(e.nodeName||"").toLowerCase():null}function Dc(e){return((Nc(e)?e.ownerDocument:e.document)||window.document).documentElement}function zc(e){return Ic(Dc(e)).left+Lc(e).scrollLeft}function Bc(e){return Cc(e).getComputedStyle(e)}function Fc(e){var t=Bc(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function $c(e,t,n){void 0===n&&(n=!1);var r,o,a=Oc(t),i=Oc(t)&&function(e){var t=e.getBoundingClientRect(),n=Pc(t.width)/e.offsetWidth||1,r=Pc(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(t),s=Dc(t),l=Ic(e,i,n),c={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(a||!a&&!n)&&(("body"!==jc(t)||Fc(s))&&(c=(r=t)!==Cc(r)&&Oc(r)?{scrollLeft:(o=r).scrollLeft,scrollTop:o.scrollTop}:Lc(r)),Oc(t)?((u=Ic(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):s&&(u.x=zc(s))),{x:l.left+c.scrollLeft-u.x,y:l.top+c.scrollTop-u.y,width:l.width,height:l.height}}function Uc(e){var t=Ic(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function Wc(e){return"html"===jc(e)?e:e.assignedSlot||e.parentNode||(Rc(e)?e.host:null)||Dc(e)}function Hc(e){return["html","body","#document"].indexOf(jc(e))>=0?e.ownerDocument.body:Oc(e)&&Fc(e)?e:Hc(Wc(e))}function qc(e,t){var n;void 0===t&&(t=[]);var r=Hc(e),o=r===(null==(n=e.ownerDocument)?void 0:n.body),a=Cc(r),i=o?[a].concat(a.visualViewport||[],Fc(r)?r:[]):r,s=t.concat(i);return o?s:s.concat(qc(Wc(i)))}function Vc(e){return["table","td","th"].indexOf(jc(e))>=0}function Kc(e){return Oc(e)&&"fixed"!==Bc(e).position?e.offsetParent:null}function Gc(e){for(var t=Cc(e),n=Kc(e);n&&Vc(n)&&"static"===Bc(n).position;)n=Kc(n);return n&&("html"===jc(n)||"body"===jc(n)&&"static"===Bc(n).position)?t:n||function(e){var t=/firefox/i.test(Ac());if(/Trident/i.test(Ac())&&Oc(e)&&"fixed"===Bc(e).position)return null;var n=Wc(e);for(Rc(n)&&(n=n.host);Oc(n)&&["html","body"].indexOf(jc(n))<0;){var r=Bc(n);if("none"!==r.transform||"none"!==r.perspective||"paint"===r.contain||-1!==["transform","perspective"].indexOf(r.willChange)||t&&"filter"===r.willChange||t&&r.filter&&"none"!==r.filter)return n;n=n.parentNode}return null}(e)||t}var Qc="top",Xc="bottom",Yc="right",Jc="left",eu="auto",tu=[Qc,Xc,Yc,Jc],nu="start",ru="end",ou="viewport",au="popper",iu=tu.reduce((function(e,t){return e.concat([t+"-"+nu,t+"-"+ru])}),[]),su=[].concat(tu,[eu]).reduce((function(e,t){return e.concat([t,t+"-"+nu,t+"-"+ru])}),[]),lu=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function cu(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function uu(e){var t;return function(){return t||(t=new Promise((function(n){Promise.resolve().then((function(){t=void 0,n(e())}))}))),t}}var du={placement:"bottom",modifiers:[],strategy:"absolute"};function pu(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function fu(e){void 0===e&&(e={});var t=e,n=t.defaultModifiers,r=void 0===n?[]:n,o=t.defaultOptions,a=void 0===o?du:o;return function(e,t,n){void 0===n&&(n=a);var o={placement:"bottom",orderedModifiers:[],options:Object.assign({},du,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},i=[],s=!1,l={state:o,setOptions:function(n){var s="function"==typeof n?n(o.options):n;c(),o.options=Object.assign({},a,o.options,s),o.scrollParents={reference:Nc(e)?qc(e):e.contextElement?qc(e.contextElement):[],popper:qc(t)};var u,d,p=function(e){var t=cu(e);return lu.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])}((u=[].concat(r,o.options.modifiers),d=u.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{}),Object.keys(d).map((function(e){return d[e]}))));return o.orderedModifiers=p.filter((function(e){return e.enabled})),o.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,r=void 0===n?{}:n,a=e.effect;if("function"==typeof a){var s=a({state:o,name:t,instance:l,options:r});i.push(s||function(){})}})),l.update()},forceUpdate:function(){if(!s){var e=o.elements,t=e.reference,n=e.popper;if(pu(t,n)){o.rects={reference:$c(t,Gc(n),"fixed"===o.options.strategy),popper:Uc(n)},o.reset=!1,o.placement=o.options.placement,o.orderedModifiers.forEach((function(e){return o.modifiersData[e.name]=Object.assign({},e.data)}));for(var r=0;r<o.orderedModifiers.length;r++)if(!0!==o.reset){var a=o.orderedModifiers[r],i=a.fn,c=a.options,u=void 0===c?{}:c,d=a.name;"function"==typeof i&&(o=i({state:o,options:u,name:d,instance:l})||o)}else o.reset=!1,r=-1}}},update:uu((function(){return new Promise((function(e){l.forceUpdate(),e(o)}))})),destroy:function(){c(),s=!0}};if(!pu(e,t))return l;function c(){i.forEach((function(e){return e()})),i=[]}return l.setOptions(n).then((function(e){!s&&n.onFirstUpdate&&n.onFirstUpdate(e)})),l}}var mu={passive:!0};function hu(e){return e.split("-")[0]}function gu(e){return e.split("-")[1]}function bu(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function vu(e){var t,n=e.reference,r=e.element,o=e.placement,a=o?hu(o):null,i=o?gu(o):null,s=n.x+n.width/2-r.width/2,l=n.y+n.height/2-r.height/2;switch(a){case Qc:t={x:s,y:n.y-r.height};break;case Xc:t={x:s,y:n.y+n.height};break;case Yc:t={x:n.x+n.width,y:l};break;case Jc:t={x:n.x-r.width,y:l};break;default:t={x:n.x,y:n.y}}var c=a?bu(a):null;if(null!=c){var u="y"===c?"height":"width";switch(i){case nu:t[c]=t[c]-(n[u]/2-r[u]/2);break;case ru:t[c]=t[c]+(n[u]/2-r[u]/2)}}return t}var yu={top:"auto",right:"auto",bottom:"auto",left:"auto"};function wu(e){var t,n=e.popper,r=e.popperRect,o=e.placement,a=e.variation,i=e.offsets,s=e.position,l=e.gpuAcceleration,c=e.adaptive,u=e.roundOffsets,d=e.isFixed,p=i.x,f=void 0===p?0:p,m=i.y,h=void 0===m?0:m,g="function"==typeof u?u({x:f,y:h}):{x:f,y:h};f=g.x,h=g.y;var b=i.hasOwnProperty("x"),v=i.hasOwnProperty("y"),y=Jc,w=Qc,x=window;if(c){var E=Gc(n),k="clientHeight",_="clientWidth";E===Cc(n)&&"static"!==Bc(E=Dc(n)).position&&"absolute"===s&&(k="scrollHeight",_="scrollWidth"),(o===Qc||(o===Jc||o===Yc)&&a===ru)&&(w=Xc,h-=(d&&E===x&&x.visualViewport?x.visualViewport.height:E[k])-r.height,h*=l?1:-1),o!==Jc&&(o!==Qc&&o!==Xc||a!==ru)||(y=Yc,f-=(d&&E===x&&x.visualViewport?x.visualViewport.width:E[_])-r.width,f*=l?1:-1)}var S,C=Object.assign({position:s},c&&yu),N=!0===u?function(e){var t=e.x,n=e.y,r=window.devicePixelRatio||1;return{x:Pc(t*r)/r||0,y:Pc(n*r)/r||0}}({x:f,y:h}):{x:f,y:h};return f=N.x,h=N.y,l?Object.assign({},C,((S={})[w]=v?"0":"",S[y]=b?"0":"",S.transform=(x.devicePixelRatio||1)<=1?"translate("+f+"px, "+h+"px)":"translate3d("+f+"px, "+h+"px, 0)",S)):Object.assign({},C,((t={})[w]=v?h+"px":"",t[y]=b?f+"px":"",t.transform="",t))}const xu={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},r=t.attributes[e]||{},o=t.elements[e];Oc(o)&&jc(o)&&(Object.assign(o.style,n),Object.keys(r).forEach((function(e){var t=r[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var r=t.elements[e],o=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});Oc(r)&&jc(r)&&(Object.assign(r.style,a),Object.keys(o).forEach((function(e){r.removeAttribute(e)})))}))}},requires:["computeStyles"]},Eu={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,a=void 0===o?[0,0]:o,i=su.reduce((function(e,n){return e[n]=function(e,t,n){var r=hu(e),o=[Jc,Qc].indexOf(r)>=0?-1:1,a="function"==typeof n?n(Object.assign({},t,{placement:e})):n,i=a[0],s=a[1];return i=i||0,s=(s||0)*o,[Jc,Yc].indexOf(r)>=0?{x:s,y:i}:{x:i,y:s}}(n,t.rects,a),e}),{}),s=i[t.placement],l=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=i}};var ku={left:"right",right:"left",bottom:"top",top:"bottom"};function _u(e){return e.replace(/left|right|bottom|top/g,(function(e){return ku[e]}))}var Su={start:"end",end:"start"};function Cu(e){return e.replace(/start|end/g,(function(e){return Su[e]}))}function Nu(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Rc(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function Ou(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function Ru(e,t,n){return t===ou?Ou(function(e,t){var n=Cc(e),r=Dc(e),o=n.visualViewport,a=r.clientWidth,i=r.clientHeight,s=0,l=0;if(o){a=o.width,i=o.height;var c=Zc();(c||!c&&"fixed"===t)&&(s=o.offsetLeft,l=o.offsetTop)}return{width:a,height:i,x:s+zc(e),y:l}}(e,n)):Nc(t)?function(e,t){var n=Ic(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):Ou(function(e){var t,n=Dc(e),r=Lc(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=Mc(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),i=Mc(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),s=-r.scrollLeft+zc(e),l=-r.scrollTop;return"rtl"===Bc(o||n).direction&&(s+=Mc(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:i,x:s,y:l}}(Dc(e)))}function Mu(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function Tu(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function Pu(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=void 0===r?e.placement:r,a=n.strategy,i=void 0===a?e.strategy:a,s=n.boundary,l=void 0===s?"clippingParents":s,c=n.rootBoundary,u=void 0===c?ou:c,d=n.elementContext,p=void 0===d?au:d,f=n.altBoundary,m=void 0!==f&&f,h=n.padding,g=void 0===h?0:h,b=Mu("number"!=typeof g?g:Tu(g,tu)),v=p===au?"reference":au,y=e.rects.popper,w=e.elements[m?v:p],x=function(e,t,n,r){var o="clippingParents"===t?function(e){var t=qc(Wc(e)),n=["absolute","fixed"].indexOf(Bc(e).position)>=0&&Oc(e)?Gc(e):e;return Nc(n)?t.filter((function(e){return Nc(e)&&Nu(e,n)&&"body"!==jc(e)})):[]}(e):[].concat(t),a=[].concat(o,[n]),i=a[0],s=a.reduce((function(t,n){var o=Ru(e,n,r);return t.top=Mc(o.top,t.top),t.right=Tc(o.right,t.right),t.bottom=Tc(o.bottom,t.bottom),t.left=Mc(o.left,t.left),t}),Ru(e,i,r));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}(Nc(w)?w:w.contextElement||Dc(e.elements.popper),l,u,i),E=Ic(e.elements.reference),k=vu({reference:E,element:y,strategy:"absolute",placement:o}),_=Ou(Object.assign({},y,k)),S=p===au?_:E,C={top:x.top-S.top+b.top,bottom:S.bottom-x.bottom+b.bottom,left:x.left-S.left+b.left,right:S.right-x.right+b.right},N=e.modifiersData.offset;if(p===au&&N){var O=N[o];Object.keys(C).forEach((function(e){var t=[Yc,Xc].indexOf(e)>=0?1:-1,n=[Qc,Xc].indexOf(e)>=0?"y":"x";C[e]+=O[n]*t}))}return C}const Au={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,a=void 0===o||o,i=n.altAxis,s=void 0===i||i,l=n.fallbackPlacements,c=n.padding,u=n.boundary,d=n.rootBoundary,p=n.altBoundary,f=n.flipVariations,m=void 0===f||f,h=n.allowedAutoPlacements,g=t.options.placement,b=hu(g),v=l||(b!==g&&m?function(e){if(hu(e)===eu)return[];var t=_u(e);return[Cu(e),t,Cu(t)]}(g):[_u(g)]),y=[g].concat(v).reduce((function(e,n){return e.concat(hu(n)===eu?function(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,a=n.rootBoundary,i=n.padding,s=n.flipVariations,l=n.allowedAutoPlacements,c=void 0===l?su:l,u=gu(r),d=u?s?iu:iu.filter((function(e){return gu(e)===u})):tu,p=d.filter((function(e){return c.indexOf(e)>=0}));0===p.length&&(p=d);var f=p.reduce((function(t,n){return t[n]=Pu(e,{placement:n,boundary:o,rootBoundary:a,padding:i})[hu(n)],t}),{});return Object.keys(f).sort((function(e,t){return f[e]-f[t]}))}(t,{placement:n,boundary:u,rootBoundary:d,padding:c,flipVariations:m,allowedAutoPlacements:h}):n)}),[]),w=t.rects.reference,x=t.rects.popper,E=new Map,k=!0,_=y[0],S=0;S<y.length;S++){var C=y[S],N=hu(C),O=gu(C)===nu,R=[Qc,Xc].indexOf(N)>=0,M=R?"width":"height",T=Pu(t,{placement:C,boundary:u,rootBoundary:d,altBoundary:p,padding:c}),P=R?O?Yc:Jc:O?Xc:Qc;w[M]>x[M]&&(P=_u(P));var A=_u(P),Z=[];if(a&&Z.push(T[N]<=0),s&&Z.push(T[P]<=0,T[A]<=0),Z.every((function(e){return e}))){_=C,k=!1;break}E.set(C,Z)}if(k)for(var I=function(e){var t=y.find((function(t){var n=E.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return _=t,"break"},L=m?3:1;L>0&&"break"!==I(L);L--);t.placement!==_&&(t.modifiersData[r]._skip=!0,t.placement=_,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function Zu(e,t,n){return Mc(e,Tc(t,n))}const Iu={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,a=void 0===o||o,i=n.altAxis,s=void 0!==i&&i,l=n.boundary,c=n.rootBoundary,u=n.altBoundary,d=n.padding,p=n.tether,f=void 0===p||p,m=n.tetherOffset,h=void 0===m?0:m,g=Pu(t,{boundary:l,rootBoundary:c,padding:d,altBoundary:u}),b=hu(t.placement),v=gu(t.placement),y=!v,w=bu(b),x="x"===w?"y":"x",E=t.modifiersData.popperOffsets,k=t.rects.reference,_=t.rects.popper,S="function"==typeof h?h(Object.assign({},t.rects,{placement:t.placement})):h,C="number"==typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),N=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,O={x:0,y:0};if(E){if(a){var R,M="y"===w?Qc:Jc,T="y"===w?Xc:Yc,P="y"===w?"height":"width",A=E[w],Z=A+g[M],I=A-g[T],L=f?-_[P]/2:0,j=v===nu?k[P]:_[P],D=v===nu?-_[P]:-k[P],z=t.elements.arrow,B=f&&z?Uc(z):{width:0,height:0},F=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},$=F[M],U=F[T],W=Zu(0,k[P],B[P]),H=y?k[P]/2-L-W-$-C.mainAxis:j-W-$-C.mainAxis,q=y?-k[P]/2+L+W+U+C.mainAxis:D+W+U+C.mainAxis,V=t.elements.arrow&&Gc(t.elements.arrow),K=V?"y"===w?V.clientTop||0:V.clientLeft||0:0,G=null!=(R=null==N?void 0:N[w])?R:0,Q=A+q-G,X=Zu(f?Tc(Z,A+H-G-K):Z,A,f?Mc(I,Q):I);E[w]=X,O[w]=X-A}if(s){var Y,J="x"===w?Qc:Jc,ee="x"===w?Xc:Yc,te=E[x],ne="y"===x?"height":"width",re=te+g[J],oe=te-g[ee],ae=-1!==[Qc,Jc].indexOf(b),ie=null!=(Y=null==N?void 0:N[x])?Y:0,se=ae?re:te-k[ne]-_[ne]-ie+C.altAxis,le=ae?te+k[ne]+_[ne]-ie-C.altAxis:oe,ce=f&&ae?function(e,t,n){var r=Zu(e,t,n);return r>n?n:r}(se,te,le):Zu(f?se:re,te,f?le:oe);E[x]=ce,O[x]=ce-te}t.modifiersData[r]=O}},requiresIfExists:["offset"]};function Lu(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ju(e){return[Qc,Yc,Xc,Jc].some((function(t){return e[t]>=0}))}var Du=fu({defaultModifiers:[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,r=e.options,o=r.scroll,a=void 0===o||o,i=r.resize,s=void 0===i||i,l=Cc(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return a&&c.forEach((function(e){e.addEventListener("scroll",n.update,mu)})),s&&l.addEventListener("resize",n.update,mu),function(){a&&c.forEach((function(e){e.removeEventListener("scroll",n.update,mu)})),s&&l.removeEventListener("resize",n.update,mu)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=vu({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=void 0===r||r,a=n.adaptive,i=void 0===a||a,s=n.roundOffsets,l=void 0===s||s,c={placement:hu(t.placement),variation:gu(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,wu(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:i,roundOffsets:l})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,wu(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},xu,Eu,Au,Iu,{name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,a=n.elements.arrow,i=n.modifiersData.popperOffsets,s=hu(n.placement),l=bu(s),c=[Jc,Yc].indexOf(s)>=0?"height":"width";if(a&&i){var u=function(e,t){return Mu("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:Tu(e,tu))}(o.padding,n),d=Uc(a),p="y"===l?Qc:Jc,f="y"===l?Xc:Yc,m=n.rects.reference[c]+n.rects.reference[l]-i[l]-n.rects.popper[c],h=i[l]-n.rects.reference[l],g=Gc(a),b=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,v=m/2-h/2,y=u[p],w=b-d[c]-u[f],x=b/2-d[c]/2+v,E=Zu(y,x,w),k=l;n.modifiersData[r]=((t={})[k]=E,t.centerOffset=E-x,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&Nu(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,a=t.modifiersData.preventOverflow,i=Pu(t,{elementContext:"reference"}),s=Pu(t,{altBoundary:!0}),l=Lu(i,r),c=Lu(s,o,a),u=ju(l),d=ju(c);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}}]});function zu(e){return(0,Re.Z)("MuiPopperUnstyled",e)}(0,Me.Z)("MuiPopperUnstyled",["root"]);const Bu=["anchorEl","children","component","components","componentsProps","direction","disablePortal","modifiers","open","ownerState","placement","popperOptions","popperRef","TransitionProps"],Fu=["anchorEl","children","container","direction","disablePortal","keepMounted","modifiers","open","placement","popperOptions","popperRef","style","transition"];function $u(e){return"function"==typeof e?e():e}const Uu={},Wu=e.forwardRef((function(t,n){var o;const{anchorEl:i,children:s,component:l,components:c={},componentsProps:u={},direction:d,disablePortal:p,modifiers:f,open:h,ownerState:g,placement:b,popperOptions:v,popperRef:y,TransitionProps:w}=t,x=(0,a.Z)(t,Bu),E=e.useRef(null),k=(0,vo.Z)(E,n),_=e.useRef(null),S=(0,vo.Z)(_,y),C=e.useRef(S);(0,Eo.Z)((()=>{C.current=S}),[S]),e.useImperativeHandle(y,(()=>_.current),[]);const N=function(e,t){if("ltr"===t)return e;switch(e){case"bottom-end":return"bottom-start";case"bottom-start":return"bottom-end";case"top-end":return"top-start";case"top-start":return"top-end";default:return e}}(b,d),[O,R]=e.useState(N);e.useEffect((()=>{_.current&&_.current.forceUpdate()})),(0,Eo.Z)((()=>{if(!i||!h)return;$u(i);let e=[{name:"preventOverflow",options:{altBoundary:p}},{name:"flip",options:{altBoundary:p}},{name:"onUpdate",enabled:!0,phase:"afterWrite",fn:({state:e})=>{R(e.placement)}}];null!=f&&(e=e.concat(f)),v&&null!=v.modifiers&&(e=e.concat(v.modifiers));const t=Du($u(i),E.current,(0,r.Z)({placement:N},v,{modifiers:e}));return C.current(t),()=>{t.destroy(),C.current(null)}}),[i,p,f,h,v,N]);const M={placement:O};null!==w&&(M.TransitionProps=w);const T=(0,_e.Z)({root:["root"]},zu,{}),P=null!=(o=null!=l?l:c.Root)?o:"div",A=Fo({elementType:P,externalSlotProps:u.root,externalForwardedProps:x,additionalProps:{role:"tooltip",ref:k},ownerState:(0,r.Z)({},t,g),className:T.root});return(0,m.jsx)(P,(0,r.Z)({},A,{children:"function"==typeof s?s(M):s}))})),Hu=e.forwardRef((function(t,n){const{anchorEl:o,children:i,container:s,direction:l="ltr",disablePortal:c=!1,keepMounted:u=!1,modifiers:d,open:p,placement:f="bottom",popperOptions:h=Uu,popperRef:g,style:b,transition:v=!1}=t,y=(0,a.Z)(t,Fu),[w,x]=e.useState(!0);if(!u&&!p&&(!v||w))return null;const E=s||(o?(0,yo.Z)($u(o)).body:void 0);return(0,m.jsx)(_o,{disablePortal:c,container:E,children:(0,m.jsx)(Wu,(0,r.Z)({anchorEl:o,direction:l,disablePortal:c,modifiers:d,ref:n,open:v?!w:p,placement:f,popperOptions:h,popperRef:g},y,{style:(0,r.Z)({position:"fixed",top:0,left:0,display:p||!u||v&&!w?null:"none"},b),TransitionProps:v?{in:p,onEnter:()=>{x(!1)},onExited:()=>{x(!0)}}:null,children:i}))})})),qu=Hu;var Vu=o(4168);const Ku=(0,Se.ZP)(qu,{name:"MuiPopper",slot:"Root",overridesResolver:(e,t)=>t.root})({}),Gu=e.forwardRef((function(e,t){const n=(0,Vu.Z)(),o=(0,Ce.Z)({props:e,name:"MuiPopper"});return(0,m.jsx)(Ku,(0,r.Z)({direction:null==n?void 0:n.direction},o,{ref:t}))})),Qu=Gu;var Xu=o(3192);function Yu(e){return(0,Re.Z)("MuiTooltip",e)}const Ju=(0,Me.Z)("MuiTooltip",["popper","popperInteractive","popperArrow","popperClose","tooltip","tooltipArrow","touch","tooltipPlacementLeft","tooltipPlacementRight","tooltipPlacementTop","tooltipPlacementBottom","arrow"]),ed=["arrow","children","classes","components","componentsProps","describeChild","disableFocusListener","disableHoverListener","disableInteractive","disableTouchListener","enterDelay","enterNextDelay","enterTouchDelay","followCursor","id","leaveDelay","leaveTouchDelay","onClose","onOpen","open","placement","PopperComponent","PopperProps","title","TransitionComponent","TransitionProps"],td=(0,Se.ZP)(Qu,{name:"MuiTooltip",slot:"Popper",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.popper,!n.disableInteractive&&t.popperInteractive,n.arrow&&t.popperArrow,!n.open&&t.popperClose]}})((({theme:e,ownerState:t,open:n})=>(0,r.Z)({zIndex:(e.vars||e).zIndex.tooltip,pointerEvents:"none"},!t.disableInteractive&&{pointerEvents:"auto"},!n&&{pointerEvents:"none"},t.arrow&&{[`&[data-popper-placement*="bottom"] .${Ju.arrow}`]:{top:0,marginTop:"-0.71em","&::before":{transformOrigin:"0 100%"}},[`&[data-popper-placement*="top"] .${Ju.arrow}`]:{bottom:0,marginBottom:"-0.71em","&::before":{transformOrigin:"100% 0"}},[`&[data-popper-placement*="right"] .${Ju.arrow}`]:(0,r.Z)({},t.isRtl?{right:0,marginRight:"-0.71em"}:{left:0,marginLeft:"-0.71em"},{height:"1em",width:"0.71em","&::before":{transformOrigin:"100% 100%"}}),[`&[data-popper-placement*="left"] .${Ju.arrow}`]:(0,r.Z)({},t.isRtl?{left:0,marginLeft:"-0.71em"}:{right:0,marginRight:"-0.71em"},{height:"1em",width:"0.71em","&::before":{transformOrigin:"0 0"}})}))),nd=(0,Se.ZP)("div",{name:"MuiTooltip",slot:"Tooltip",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.tooltip,n.touch&&t.touch,n.arrow&&t.tooltipArrow,t[`tooltipPlacement${(0,Ne.Z)(n.placement.split("-")[0])}`]]}})((({theme:e,ownerState:t})=>(0,r.Z)({backgroundColor:e.vars?e.vars.palette.Tooltip.bg:(0,Oe.Fq)(e.palette.grey[700],.92),borderRadius:(e.vars||e).shape.borderRadius,color:(e.vars||e).palette.common.white,fontFamily:e.typography.fontFamily,padding:"4px 8px",fontSize:e.typography.pxToRem(11),maxWidth:300,margin:2,wordWrap:"break-word",fontWeight:e.typography.fontWeightMedium},t.arrow&&{position:"relative",margin:0},t.touch&&{padding:"8px 16px",fontSize:e.typography.pxToRem(14),lineHeight:(16/14,Math.round(114285.71428571428)/1e5+"em"),fontWeight:e.typography.fontWeightRegular},{[`.${Ju.popper}[data-popper-placement*="left"] &`]:(0,r.Z)({transformOrigin:"right center"},t.isRtl?(0,r.Z)({marginLeft:"14px"},t.touch&&{marginLeft:"24px"}):(0,r.Z)({marginRight:"14px"},t.touch&&{marginRight:"24px"})),[`.${Ju.popper}[data-popper-placement*="right"] &`]:(0,r.Z)({transformOrigin:"left center"},t.isRtl?(0,r.Z)({marginRight:"14px"},t.touch&&{marginRight:"24px"}):(0,r.Z)({marginLeft:"14px"},t.touch&&{marginLeft:"24px"})),[`.${Ju.popper}[data-popper-placement*="top"] &`]:(0,r.Z)({transformOrigin:"center bottom",marginBottom:"14px"},t.touch&&{marginBottom:"24px"}),[`.${Ju.popper}[data-popper-placement*="bottom"] &`]:(0,r.Z)({transformOrigin:"center top",marginTop:"14px"},t.touch&&{marginTop:"24px"})}))),rd=(0,Se.ZP)("span",{name:"MuiTooltip",slot:"Arrow",overridesResolver:(e,t)=>t.arrow})((({theme:e})=>({overflow:"hidden",position:"absolute",width:"1em",height:"0.71em",boxSizing:"border-box",color:e.vars?e.vars.palette.Tooltip.bg:(0,Oe.Fq)(e.palette.grey[700],.9),"&::before":{content:'""',margin:"auto",display:"block",width:"100%",height:"100%",backgroundColor:"currentColor",transform:"rotate(45deg)"}})));let od=!1,ad=null;function id(e,t){return n=>{t&&t(n),e(n)}}const sd=e.forwardRef((function(t,n){var o,s,l,c,u,d;const p=(0,Ce.Z)({props:t,name:"MuiTooltip"}),{arrow:f=!1,children:h,components:g={},componentsProps:b={},describeChild:v=!1,disableFocusListener:y=!1,disableHoverListener:w=!1,disableInteractive:x=!1,disableTouchListener:E=!1,enterDelay:k=100,enterNextDelay:_=0,enterTouchDelay:S=700,followCursor:C=!1,id:N,leaveDelay:O=0,leaveTouchDelay:R=1500,onClose:M,onOpen:T,open:P,placement:A="bottom",PopperComponent:Z,PopperProps:I={},title:L,TransitionComponent:j=Is,TransitionProps:D}=p,z=(0,a.Z)(p,ed),B=ea(),F="rtl"===B.direction,[$,U]=e.useState(),[W,H]=e.useState(null),q=e.useRef(!1),V=x||C,K=e.useRef(),G=e.useRef(),Q=e.useRef(),X=e.useRef(),[Y,J]=(0,dl.Z)({controlled:P,default:!1,name:"Tooltip",state:"open"});let ee=Y;const te=(0,Xu.Z)(N),ne=e.useRef(),re=e.useCallback((()=>{void 0!==ne.current&&(document.body.style.WebkitUserSelect=ne.current,ne.current=void 0),clearTimeout(X.current)}),[]);e.useEffect((()=>()=>{clearTimeout(K.current),clearTimeout(G.current),clearTimeout(Q.current),re()}),[re]);const oe=e=>{clearTimeout(ad),od=!0,J(!0),T&&!ee&&T(e)},ae=(0,Ve.Z)((e=>{clearTimeout(ad),ad=setTimeout((()=>{od=!1}),800+O),J(!1),M&&ee&&M(e),clearTimeout(K.current),K.current=setTimeout((()=>{q.current=!1}),B.transitions.duration.shortest)})),ie=e=>{q.current&&"touchstart"!==e.type||($&&$.removeAttribute("title"),clearTimeout(G.current),clearTimeout(Q.current),k||od&&_?G.current=setTimeout((()=>{oe(e)}),od?_:k):oe(e))},se=e=>{clearTimeout(G.current),clearTimeout(Q.current),Q.current=setTimeout((()=>{ae(e)}),O)},{isFocusVisibleRef:le,onBlur:ce,onFocus:ue,ref:de}=(0,Ke.Z)(),[,pe]=e.useState(!1),fe=e=>{ce(e),!1===le.current&&(pe(!1),se(e))},me=e=>{$||U(e.currentTarget),ue(e),!0===le.current&&(pe(!0),ie(e))},he=e=>{q.current=!0;const t=h.props;t.onTouchStart&&t.onTouchStart(e)},ge=ie,be=se;e.useEffect((()=>{if(ee)return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)};function e(e){"Escape"!==e.key&&"Esc"!==e.key||ae(e)}}),[ae,ee]);const ve=(0,qe.Z)(U,n),ye=(0,qe.Z)(de,ve),we=(0,qe.Z)(h.ref,ye);""===L&&(ee=!1);const xe=e.useRef({x:0,y:0}),Ee=e.useRef(),ke={},Se="string"==typeof L;v?(ke.title=ee||!Se||w?null:L,ke["aria-describedby"]=ee?te:null):(ke["aria-label"]=Se?L:null,ke["aria-labelledby"]=ee&&!Se?te:null);const Oe=(0,r.Z)({},ke,z,h.props,{className:(0,i.Z)(z.className,h.props.className),onTouchStart:he,ref:we},C?{onMouseMove:e=>{const t=h.props;t.onMouseMove&&t.onMouseMove(e),xe.current={x:e.clientX,y:e.clientY},Ee.current&&Ee.current.update()}}:{}),Re={};E||(Oe.onTouchStart=e=>{he(e),clearTimeout(Q.current),clearTimeout(K.current),re(),ne.current=document.body.style.WebkitUserSelect,document.body.style.WebkitUserSelect="none",X.current=setTimeout((()=>{document.body.style.WebkitUserSelect=ne.current,ie(e)}),S)},Oe.onTouchEnd=e=>{h.props.onTouchEnd&&h.props.onTouchEnd(e),re(),clearTimeout(Q.current),Q.current=setTimeout((()=>{ae(e)}),R)}),w||(Oe.onMouseOver=id(ge,Oe.onMouseOver),Oe.onMouseLeave=id(be,Oe.onMouseLeave),V||(Re.onMouseOver=ge,Re.onMouseLeave=be)),y||(Oe.onFocus=id(me,Oe.onFocus),Oe.onBlur=id(fe,Oe.onBlur),V||(Re.onFocus=me,Re.onBlur=fe));const Me=e.useMemo((()=>{var e;let t=[{name:"arrow",enabled:Boolean(W),options:{element:W,padding:4}}];return null!=(e=I.popperOptions)&&e.modifiers&&(t=t.concat(I.popperOptions.modifiers)),(0,r.Z)({},I.popperOptions,{modifiers:t})}),[W,I]),Te=(0,r.Z)({},p,{isRtl:F,arrow:f,disableInteractive:V,placement:A,PopperComponentProp:Z,touch:q.current}),Pe=(e=>{const{classes:t,disableInteractive:n,arrow:r,touch:o,placement:a}=e,i={popper:["popper",!n&&"popperInteractive",r&&"popperArrow"],tooltip:["tooltip",r&&"tooltipArrow",o&&"touch",`tooltipPlacement${(0,Ne.Z)(a.split("-")[0])}`],arrow:["arrow"]};return(0,_e.Z)(i,Yu,t)})(Te),Ae=null!=(o=g.Popper)?o:td,Ze=null!=(s=null!=(l=g.Transition)?l:j)?s:Is,Ie=null!=(c=g.Tooltip)?c:nd,Le=null!=(u=g.Arrow)?u:rd,je=jo(Ae,(0,r.Z)({},I,b.popper),Te),De=jo(Ze,(0,r.Z)({},D,b.transition),Te),ze=jo(Ie,(0,r.Z)({},b.tooltip),Te),Be=jo(Le,(0,r.Z)({},b.arrow),Te);return(0,m.jsxs)(e.Fragment,{children:[e.cloneElement(h,Oe),(0,m.jsx)(Ae,(0,r.Z)({as:null!=Z?Z:Qu,placement:A,anchorEl:C?{getBoundingClientRect:()=>({top:xe.current.y,left:xe.current.x,right:xe.current.x,bottom:xe.current.y,width:0,height:0})}:$,popperRef:Ee,open:!!$&&ee,id:te,transition:!0},Re,je,{className:(0,i.Z)(Pe.popper,null==I?void 0:I.className,null==(d=b.popper)?void 0:d.className),popperOptions:Me,children:({TransitionProps:e})=>{var t,n;return(0,m.jsx)(Ze,(0,r.Z)({timeout:B.transitions.duration.shorter},e,De,{children:(0,m.jsxs)(Ie,(0,r.Z)({},ze,{className:(0,i.Z)(Pe.tooltip,null==(t=b.tooltip)?void 0:t.className),children:[L,f?(0,m.jsx)(Le,(0,r.Z)({},Be,{className:(0,i.Z)(Pe.arrow,null==(n=b.arrow)?void 0:n.className),ref:H})):null]}))}))}}))]})})),ld=sd,cd=t=>{const{start:n,end:r,onClick:o,testId:a}=t,[i,s]=(0,e.useState)(n);return e.createElement(ld,{title:"bttn-copy"===a?"Copy":"Add to Project",placement:"left",arrow:!0},e.createElement(Dt,{"data-testid":a,variant:"outlined",color:"info",onClick:()=>{s(r),o(),setTimeout((()=>s(n)),1e3)},sx:{marginBottom:1}},i))},ud=()=>{const t=go((e=>e.code.codeOutput)),n=sessionStorage.getItem("isLoggedIn"),r=go((e=>e.userInfo.currentProjectId)),o=ho();return e.createElement(y,{className:"button-container",sx:{marginLeft:5,marginTop:2,display:"flex",flexDirection:"column"}},e.createElement(cd,{start:e.createElement(fc.Z,null),end:e.createElement(mc.Z,null),onClick:()=>o(Jl()),testId:"bttn-copy"}),e.createElement(cd,{start:e.createElement(pc.Z,null),end:e.createElement(mc.Z,null),onClick:()=>{n?(o(kc({projectId:r,codeOutput:[t]})),o(_c(r))):o(vc(t))},testId:"bttn-append"}))},dd=()=>{const t=go((e=>e.code.codeOutput)),n=ho();return e.createElement(jl,{id:"code-output",className:"text-display",label:"Testing Code",variant:"filled",multiline:!0,minRows:10,value:t,sx:{width:.95,backgroundColor:"#282C34",color:"white",pl:2,borderRadius:2},onChange:e=>n(ec(e.target.value))})},pd=()=>e.createElement("div",{className:"code-container"},e.createElement(y,{className:"test-code-box"},e.createElement(dd,null)),e.createElement(ud,null));var fd=o(5408),md=o(2605);const hd=["component","direction","spacing","divider","children"];function gd(t,n){const r=e.Children.toArray(t).filter(Boolean);return r.reduce(((t,o,a)=>(t.push(o),a<r.length-1&&t.push(e.cloneElement(n,{key:`separator-${a}`})),t)),[])}const bd=(0,Se.ZP)("div",{name:"MuiStack",slot:"Root",overridesResolver:(e,t)=>[t.root]})((({ownerState:e,theme:t})=>{let n=(0,r.Z)({display:"flex",flexDirection:"column"},(0,fd.k9)({theme:t},(0,fd.P$)({values:e.direction,breakpoints:t.breakpoints.values}),(e=>({flexDirection:e}))));if(e.spacing){const r=(0,md.hB)(t),o=Object.keys(t.breakpoints.values).reduce(((t,n)=>(("object"==typeof e.spacing&&null!=e.spacing[n]||"object"==typeof e.direction&&null!=e.direction[n])&&(t[n]=!0),t)),{}),a=(0,fd.P$)({values:e.direction,base:o}),i=(0,fd.P$)({values:e.spacing,base:o});"object"==typeof a&&Object.keys(a).forEach(((e,t,n)=>{if(!a[e]){const r=t>0?a[n[t-1]]:"column";a[e]=r}}));const s=(t,n)=>{return{"& > :not(style) + :not(style)":{margin:0,[`margin${o=n?a[n]:e.direction,{row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"}[o]}`]:(0,md.NA)(r,t)}};var o};n=(0,c.Z)(n,(0,fd.k9)({theme:t},i,s))}return n=(0,fd.dt)(t.breakpoints,n),n})),vd=e.forwardRef((function(e,t){const n=p((0,Ce.Z)({props:e,name:"MuiStack"})),{component:o="div",direction:i="column",spacing:s=0,divider:l,children:c}=n,u=(0,a.Z)(n,hd),d={direction:i,spacing:s};return(0,m.jsx)(bd,(0,r.Z)({as:o,ownerState:d,ref:t},u,{children:l?gd(c,l):c}))})),yd=vd;var wd=o(1733),xd=o(6818);const Ed=t=>{const n=go((e=>e.userInfo.newProject)),r=go((e=>e.userInfo.currentProject)),o=go((e=>e.userInfo.projectsInfo)),a=Boolean(n.length),i=ho();return e.createElement(Sa,{open:t.open},e.createElement(y,{sx:{display:"flex",flexDirection:"column",alignItems:"center",height:325}},e.createElement(y,{sx:{width:500,display:"flex",flexDirection:"row",backgroundColor:"#6e00bb",justifyContent:"center"}},e.createElement("img",{alt:"logo",src:"../assets/logo-jester.png"})),e.createElement(Ra,null,"Would you like to save your current clipboard?"),e.createElement(uc,{disabled:a}),e.createElement(jl,{label:"New Project Name","data-testid":"new-project",id:"new-project",size:"small",sx:{width:200,minWidth:200,marginBottom:2},onChange:e=>{i(Hr(e.target.value)),i(Br(e.target.value))}}),e.createElement(yd,{direction:"row",spacing:2},e.createElement(Dt,{variant:"outlined",startIcon:e.createElement(wd.Z,null),sx:{width:120},onClick:()=>{sessionStorage.removeItem("clipboardData"),i(Dr())}},"Discard"),e.createElement(Dt,{variant:"outlined",startIcon:e.createElement(xd.Z,null),sx:{width:120},onClick:async()=>{let e=[];if(sessionStorage.getItem("clipboardData")){const t=sessionStorage.getItem("clipboardData");t&&(e=JSON.parse(t))}if(""!==n){const t=await Zr().post("api/project/",{project_name:n}),r=t.data;i(zr(t.data)),i(kc({projectId:r[r.length-1].project_id,codeOutput:e}))}else for(const t of o)if(t.project_name===r){i(kc({projectId:t.project_id,codeOutput:e}));break}sessionStorage.removeItem("clipboardData"),i(Dr())}},"Save"))))},kd=()=>{const t=go((e=>e.userInfo.showSave));return e.createElement("div",{className:"page-body"},e.createElement(dc,null),e.createElement(pd,null),e.createElement(Ed,{open:t}))},_d=()=>{const t=ho();return(0,e.useEffect)((()=>{sessionStorage.getItem("isLoggedIn")&&Zr().get("/api/project").then((e=>{t(zr(e.data))}))})),e.createElement(kd,null)};const Sd=()=>e.createElement("div",{className:"page-body"},e.createElement("div",{className:"documentation-container"},e.createElement("p",{className:"documentation-headers"},"Getting started"),e.createElement("p",{className:"documentation-p"},"To start generating a test, simply navigate to our home page, where you will first be prompted to specify the endpoint for your request. "),e.createElement("p",{className:"documentation-p"},"This can be a url or a local endpoint like ‘/‘, ‘/users’, etc. "),e.createElement("p",{className:"documentation-p"},"At this stage you will also have the option to input a request body to specify the nature of your request (available to all requests types except GET."),e.createElement("p",{className:"documentation-p"},"Once these initial parameters have been satisfied to the necessary extent for your project, you can add assertions to your test by clicking the ‘+’ button next to ‘Add Expected Response’. By default, Jester will populate assertion types in the following order: "),e.createElement("ol",{className:"documentation-p"},e.createElement("li",null,"expected status code (100-511)",e.createElement("li",null,"expected content type (text/html, application/json, etc.)"),e.createElement("li",null,"expected response body (optional)"))),e.createElement("p",{className:"documentation-p"}," You are allowed a maximum of one of each assertion type. Once all of your specifications are in place, click ‘Generate Test Code’ and your new test will appear in the code block below!"),e.createElement("p",{className:"documentation-headers"},"Saving your work"),e.createElement("p",{className:"documentation-p"},"The code block where your tests are displayed also has 2 buttons in the top right corner."),e.createElement("img",{className:"docs-display",src:"./assets/photos/buttons.png"}),e.createElement("p",{className:"documentation-p"},"The first is a copy-to-clipboard button which will enable you to copy the entire block of code to paste wherever you wish. The second is the ‘add to project’ button."),e.createElement("p",{className:"documentation-p"},"There is an option to login with Github. If you are logged in, you will be able to create multiple saved projects under ‘Projects’ and add your generated test code snippets to whatever project you specify. An ‘Add to Project’ dropdown will appear underneath the ‘Generate Test Code’ button for logged in users. To add a test code snippet to a project, select your desired project from this drop-down menu and then click the second button in the upper right corner of the code block. You can view your saved projects in the 'Projects' tab."),e.createElement("p",{className:"documentation-headers"},"Integrating tests into your codebase"),e.createElement("ol",{className:"documentation-p"},e.createElement("li",null,"Create a __tests__ folder in your project with a file called supertest.js"),e.createElement("li",null,"Add jest and supertest as dependencies in your package.json file"),e.createElement("li",null,"Paste generated code into the file supertest.js")))),Cd=()=>e.createElement("div",{className:"page-body"},e.createElement(Wt,{variant:"h4",component:"h2"},"404: Page Not Found. Click ",e.createElement(Ia,{to:"/"},"here")," to go Home."));var Nd=o(4670);const Od=kr({name:"navPanel",initialState:{showProjectPanel:!1,showAddProject:!1},reducers:{setShowProjectPanel:e=>{e.showProjectPanel=!e.showProjectPanel},setShowAddProject:e=>{e.showAddProject=!e.showAddProject}}}),{setShowProjectPanel:Rd,setShowAddProject:Md}=Od.actions,Td=Od.reducer,Pd=()=>{const[t,n]=(0,e.useState)(""),r=go((e=>e.navPanel.showAddProject)),o=go((e=>e.userInfo.showLogin)),a=go((e=>e.clipboard.codeSnippets)),i=ho(),s=()=>{i(Md())};return sessionStorage.getItem("isLoggedIn")?e.createElement(Sa,{onClose:s,open:r,sx:{display:"flex",flexDirection:"column",textAlign:"center"}},e.createElement(y,{sx:{width:400,display:"flex",flexDirection:"row",backgroundColor:"#6e00bb",justifyContent:"center"}},e.createElement("img",{alt:"logo",src:"../assets/logo-jester.png"})),e.createElement(Ra,null,"Add a Project"),e.createElement(jl,{label:"Project Name:",onChange:e=>{n(e.target.value)},sx:{width:"250px",alignSelf:"center",marginBottom:"10px"}}),e.createElement(Dt,{onClick:async()=>{const e=await Zr().post("api/project/",{project_name:t});i(zr(e.data)),s()}},"Create Project")):e.createElement(Sa,{onClose:s,open:r,sx:{display:"flex",flexDirection:"column",textAlign:"center"}},e.createElement(y,{sx:{width:410,display:"flex",flexDirection:"row",backgroundColor:"#6e00bb",justifyContent:"center"}},e.createElement("img",{alt:"logo",src:"../assets/logo-jester.png"})),e.createElement(Ra,null,"To add a project, you must be logged in!"),e.createElement(Dt,{onClick:async()=>{s(),i(jr()),a.length&&sessionStorage.setItem("clipboardData",JSON.stringify(a))},variant:"outlined",size:"large",sx:{margin:2,width:"250px",alignSelf:"center"}},e.createElement(Ht.Z,{sx:{marginRight:"5px",marginLeft:"5px"}}),"Login"),e.createElement(Ta,{open:o}))};var Ad=o(4927),Zd=o(725),Id=o(8364);const Ld=t=>{const n=pe(),r=ho(),o=sessionStorage.getItem("isLoggedIn"),a=go((e=>e.userInfo.projectsInfo));let i;for(const e of a)e.project_id===t.projectId&&(i=e.showAccessClipboard);const s=async()=>{if(o){const e=await Zr().delete(`/api/project/${t.projectId}`);r(zr(e.data))}else r(xc())};return i?e.createElement(y,null,e.createElement(Dt,{onClick:()=>{n(o?`/clipboard/${t.projectId}`:"/clipboard/0")},sx:{display:"flex",flexDirection:"column"}},e.createElement(Zd.Z,null),"Clipboard"),e.createElement(Dt,{onClick:s,sx:{display:o?"flex":"none",flexDirection:"column"}},e.createElement(Id.Z,null),"Delete Project"),e.createElement(Dt,{onClick:s,sx:{display:o?"none":"flex",flexDirection:"column"}},e.createElement(Id.Z,null),"Clear Clipboard")):null},jd=t=>{const n=ho();return e.createElement(y,{sx:{alignItems:"center",justifyContent:"center"}},e.createElement(Dt,{onClick:async()=>{n(Ur(t.projectId))},sx:{display:"flex",flexDirection:"column",wordWrap:"anywhere",width:"100%"}},e.createElement(Ad.Z,null),t.name),e.createElement(Ld,{projectId:t.projectId}))},Dd=()=>{const t=ho(),n=go((e=>e.navPanel.showProjectPanel)),r=go((e=>e.userInfo.projectsInfo)),o=[];return r.forEach((t=>{o.push(e.createElement(jd,{key:t.project_id,name:t.project_name,projectId:t.project_id})),o.push(e.createElement("hr",{className:"divider"}))})),o.pop(),e.createElement(y,{className:"panel project-panel-container",sx:{width:"100px",display:n?"flex":"none",flexDirection:"column"}},e.createElement(Dt,{onClick:()=>{t(Md())},sx:{display:"flex",flexDirection:"column"}},e.createElement(Nd.Z,null),"Add New Project"),e.createElement("hr",{className:"divider"}),o,e.createElement(Pd,null))};var zd=o(84),Bd=o(1523),Fd=o(6638);const $d=()=>{const t=ho(),n=pe();return e.createElement(y,{className:"panel nav-panel-container",sx:{width:"100px",display:"flex",flexDirection:"column"}},e.createElement(Dt,{onClick:()=>{n("/")},sx:{display:"flex",flexDirection:"column",marginBottom:2}},e.createElement(Fd.Z,{sx:{scale:"117%"}}),e.createElement(Wt,{sx:{fontSize:"12px"}},"Home")),e.createElement(Dt,{sx:{display:"flex",flexDirection:"column",marginBottom:2},onClick:()=>{t(Rd())}},e.createElement(zd.Z,null),e.createElement(Wt,{sx:{fontSize:"12px"}},"Projects")),e.createElement(Dt,{onClick:()=>{n("/documentation")},sx:{display:"flex",flexDirection:"column",marginBottom:2}},e.createElement(Bd.Z,null),e.createElement(Wt,{sx:{fontSize:"12px"}},"Docs")))},Ud=()=>e.createElement(y,{sx:{display:"flex",flexDirection:"row"}},e.createElement($d,null),e.createElement(Dd,null)),Wd=o(4712),Hd=()=>{const t=fo();return e.createElement(y,{className:"clipboard-button-container",sx:{justifyContent:"flex-end",alignItems:"flex-end"}},e.createElement(cd,{start:e.createElement(fc.Z,null),end:e.createElement(mc.Z,null),onClick:()=>{t(yc())},testId:"bttn-copy"}))},qd=()=>{Wd.configure({ignoreUnescapedHTML:!0});const t=pe(),n=ho(),r=Number(function(){let{matches:t}=e.useContext(se),n=t[t.length-1];return n?n.params:{}}().projectId),o=sessionStorage.getItem("isLoggedIn"),a=o?"Delete Project":"Clear Clipboard",i=go((e=>e.clipboard.server)),s=go((e=>e.clipboard.codeDisplay));return(0,e.useEffect)((()=>{if(o)n(_c(r));else{const e=sessionStorage.getItem("codeSnippets");e&&n(Ec(JSON.parse(e)))}Wd.highlightAll()})),e.createElement("div",{className:"page-body"},e.createElement(y,{sx:{display:"flex",flexDirection:"column",alignItems:"center",gap:"10px",width:.8},className:"code-container"},e.createElement(jl,{className:"text-display",label:"Server URL",sx:{minWidth:200},value:i,error:""===i,onChange:e=>{n(wc(e.target.value))}}),e.createElement(y,{sx:{width:1,height:500,overflow:"auto",backgroundColor:"#282C34"}},e.createElement("div",{id:"main-clipboard"},e.createElement("pre",null,e.createElement("code",{className:"javascript"},s)))),e.createElement(Hd,null),e.createElement(Dt,{onClick:()=>{o?(n(qr(r)),t("/")):n(xc())},sx:{flexDirection:"column"}},e.createElement(Id.Z,null),a)))},Vd=()=>{const t=pe(),[n,r]=(0,e.useState)(""),[o,a]=(0,e.useState)(3);return(0,e.useEffect)((()=>{if(sessionStorage.getItem("isLoggedIn"))t("/");else{const e=Da.get("code")||"",n=Da.get("username")||"",o=Da.get("email")||"";r(n),sessionStorage.removeItem("codeSnippets"),sessionStorage.setItem("username",n),sessionStorage.setItem("email",o),sessionStorage.setItem("code",e),sessionStorage.setItem("isLoggedIn","true"),function(e){let n=2;const r=setInterval((()=>{a(n),n--,n<0&&(clearInterval(r),t("/"))}),1e3)}()}}),[]),e.createElement("div",{className:"page-body"},e.createElement(Wt,{variant:"h4",component:"h4"},"Hello, ",n,"!"),e.createElement(Wt,{variant:"h6",component:"h6"},"Successfully logged in with Github. Redirecting you in ",o," seconds..."))};function Kd(e){return(0,Re.Z)("MuiCard",e)}(0,Me.Z)("MuiCard",["root"]);const Gd=["className","raised"],Qd=(0,Se.ZP)(Ie,{name:"MuiCard",slot:"Root",overridesResolver:(e,t)=>t.root})((()=>({overflow:"hidden"}))),Xd=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiCard"}),{className:o,raised:s=!1}=n,l=(0,a.Z)(n,Gd),c=(0,r.Z)({},n,{raised:s}),u=(e=>{const{classes:t}=e;return(0,_e.Z)({root:["root"]},Kd,t)})(c);return(0,m.jsx)(Qd,(0,r.Z)({className:(0,i.Z)(u.root,o),elevation:s?8:void 0,ref:t,ownerState:c},l))}));function Yd(e){return(0,Re.Z)("MuiCardActions",e)}(0,Me.Z)("MuiCardActions",["root","spacing"]);const Jd=["disableSpacing","className"],ep=(0,Se.ZP)("div",{name:"MuiCardActions",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disableSpacing&&t.spacing]}})((({ownerState:e})=>(0,r.Z)({display:"flex",alignItems:"center",padding:8},!e.disableSpacing&&{"& > :not(:first-of-type)":{marginLeft:8}}))),tp=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiCardActions"}),{disableSpacing:o=!1,className:s}=n,l=(0,a.Z)(n,Jd),c=(0,r.Z)({},n,{disableSpacing:o}),u=(e=>{const{classes:t,disableSpacing:n}=e,r={root:["root",!n&&"spacing"]};return(0,_e.Z)(r,Yd,t)})(c);return(0,m.jsx)(ep,(0,r.Z)({className:(0,i.Z)(u.root,s),ownerState:c,ref:t},l))}));function np(e){return(0,Re.Z)("MuiCardContent",e)}(0,Me.Z)("MuiCardContent",["root"]);const rp=["className","component"],op=(0,Se.ZP)("div",{name:"MuiCardContent",slot:"Root",overridesResolver:(e,t)=>t.root})((()=>({padding:16,"&:last-child":{paddingBottom:24}}))),ap=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiCardContent"}),{className:o,component:s="div"}=n,l=(0,a.Z)(n,rp),c=(0,r.Z)({},n,{component:s}),u=(e=>{const{classes:t}=e;return(0,_e.Z)({root:["root"]},np,t)})(c);return(0,m.jsx)(op,(0,r.Z)({as:s,className:(0,i.Z)(u.root,o),ownerState:c,ref:t},l))}));function ip(e){return(0,Re.Z)("MuiCardMedia",e)}(0,Me.Z)("MuiCardMedia",["root","media","img"]);const sp=["children","className","component","image","src","style"],lp=(0,Se.ZP)("div",{name:"MuiCardMedia",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e,{isMediaComponent:r,isImageComponent:o}=n;return[t.root,r&&t.media,o&&t.img]}})((({ownerState:e})=>(0,r.Z)({display:"block",backgroundSize:"cover",backgroundRepeat:"no-repeat",backgroundPosition:"center"},e.isMediaComponent&&{width:"100%"},e.isImageComponent&&{objectFit:"cover"}))),cp=["video","audio","picture","iframe","img"],up=["picture","img"],dp=e.forwardRef((function(e,t){const n=(0,Ce.Z)({props:e,name:"MuiCardMedia"}),{children:o,className:s,component:l="div",image:c,src:u,style:d}=n,p=(0,a.Z)(n,sp),f=-1!==cp.indexOf(l),h=!f&&c?(0,r.Z)({backgroundImage:`url("${c}")`},d):d,g=(0,r.Z)({},n,{component:l,isMediaComponent:f,isImageComponent:-1!==up.indexOf(l)}),b=(e=>{const{classes:t,isMediaComponent:n,isImageComponent:r}=e,o={root:["root",n&&"media",r&&"img"]};return(0,_e.Z)(o,ip,t)})(g);return(0,m.jsx)(lp,(0,r.Z)({className:(0,i.Z)(b.root,s),as:l,role:!f&&c?"img":void 0,ref:t,style:h,ownerState:g,src:f?c||u:void 0},p,{children:o}))})),pp=dp,fp=t=>e.createElement(Xd,{sx:{maxWidth:345}},e.createElement(pp,{component:"img",height:"250",width:"250",image:t.imageUrl,alt:"green iguana"}),e.createElement(ap,null,e.createElement(Wt,{className:"contributorName",gutterBottom:!0,variant:"h5",component:"div"},t.name)),e.createElement(tp,null,e.createElement(Dt,{size:"small",color:"primary",href:t.linkedInLink,target:"_blank"},"LinkedIn"),e.createElement(Dt,{size:"small",color:"primary",href:t.githubLink,target:"_blank"},"GitHub"))),mp=()=>{const t=[{name:"Michael Lam",githubLink:"https://github.com/mlamchamkee",linkedInLink:"https://www.linkedin.com/in/mlamchamkee",imageUrl:"./assets/photos/michael.jpg"},{name:"Lilah August",githubLink:"https://github.com/lilahaugust",linkedInLink:"https://www.linkedin.com/in/lilahaugust/",imageUrl:"./assets/photos/lilah.png"},{name:"Brian Hao",githubLink:"https://www.github.com/BrianHao",linkedInLink:"https://www.linkedin.com/in/brianhao/",imageUrl:"./assets/photos/brian-headshot.jpg"},{name:"Serena Amos",githubLink:"https://github.com/samos17",linkedInLink:"https://www.linkedin.com/in/serena-amos/",imageUrl:"./assets/photos/serena.png"},{name:"Anshuman Sinha",githubLink:"https://github.com/AnshumanSinha8",linkedInLink:"https://www.linkedin.com/in/anshuman-sinha1998/",imageUrl:"./assets/photos/anshu.png"}];return e.createElement("div",{className:"page-body"},e.createElement("div",null,e.createElement(Wt,{variant:"h3",align:"center",gutterBottom:!0,sx:{mb:7,mt:5,color:"primary.main"},className:"contributors-header"},"Contributors")),e.createElement("div",{className:"contributors-page"},t.map(((t,n)=>e.createElement(fp,{name:t.name,githubLink:t.githubLink,linkedInLink:t.linkedInLink,imageUrl:t.imageUrl,key:n})))))},hp=(0,b.Z)({palette:{primary:{main:"#6E00BB",contrastText:"#fff"},secondary:{main:"#606F7B",contrastText:"#fff"},info:{main:"#8795A1",contrastText:"#fff"}},typography:{}}),gp=()=>{const t=go((e=>e.navPanel.showProjectPanel));return e.createElement(C,{theme:hp},e.createElement(za,null),e.createElement(y,{className:"contents",sx:{display:"grid",gridTemplateColumns:t?"1fr 5fr":"1fr 11fr",height:"100%"}},e.createElement(Ud,null),e.createElement("div",{className:"page-container"},e.createElement(xe,null,e.createElement(ye,{path:"/",element:e.createElement(_d,null)}),e.createElement(ye,{path:"/clipboard/:projectId",element:e.createElement(qd,null)}),e.createElement(ye,{path:"/documentation",element:e.createElement(Sd,null)}),e.createElement(ye,{path:"/contributors",element:e.createElement(mp,null)}),e.createElement(ye,{path:"/authenticate",element:e.createElement(Vd,null)}),e.createElement(ye,{path:"/CodeGenerator/:projectId",element:e.createElement(kd,null)}),e.createElement(ye,{path:"*",element:e.createElement(Cd,null)})),e.createElement(Ka,null))))},bp=function(e){var t,n=function(e){return function(e){void 0===e&&(e={});var t=e.thunk,n=void 0===t||t,r=(e.immutableCheck,e.serializableCheck,new yr);return n&&(function(e){return"boolean"==typeof e}(n)?r.push(ar):r.push(ar.withExtraArgument(n.extraArgument))),r}(e)},r=e||{},o=r.reducer,a=void 0===o?void 0:o,i=r.middleware,s=void 0===i?n():i,l=r.devTools,c=void 0===l||l,u=r.preloadedState,d=void 0===u?void 0:u,p=r.enhancers,f=void 0===p?void 0:p;if("function"==typeof a)t=a;else{if(!function(e){if("object"!=typeof e||null===e)return!1;var t=Object.getPrototypeOf(e);if(null===t)return!0;for(var n=t;null!==Object.getPrototypeOf(n);)n=Object.getPrototypeOf(n);return t===n}(a))throw new Error('"reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');t=function(e){for(var t=Object.keys(e),n={},r=0;r<t.length;r++){var o=t[r];"function"==typeof e[o]&&(n[o]=e[o])}var a,i=Object.keys(n);try{!function(e){Object.keys(e).forEach((function(t){var n=e[t];if(void 0===n(void 0,{type:Yn.INIT}))throw new Error(Gn(12));if(void 0===n(void 0,{type:Yn.PROBE_UNKNOWN_ACTION()}))throw new Error(Gn(13))}))}(n)}catch(e){a=e}return function(e,t){if(void 0===e&&(e={}),a)throw a;for(var r=!1,o={},s=0;s<i.length;s++){var l=i[s],c=n[l],u=e[l],d=c(u,t);if(void 0===d)throw t&&t.type,new Error(Gn(14));o[l]=d,r=r||d!==u}return(r=r||i.length!==Object.keys(e).length)?o:e}}(a)}var m=s;"function"==typeof m&&(m=m(n));var h=nr.apply(void 0,m),g=tr;c&&(g=vr(gr({trace:!1},"object"==typeof c&&c)));var b=[h];return Array.isArray(f)?b=lr([h],f):"function"==typeof f&&(b=f(b)),er(t,d,g.apply(void 0,b))}({reducer:{testForm:Xl,userInput:sc,code:tc,clipboard:Sc,userInfo:Vr,navPanel:Td}});n.createRoot(document.getElementById("root")).render(e.createElement(lo,{store:bp},e.createElement(Za,null,e.createElement(gp,null))))})()})(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUcsUUFBUUEsRUFBRyxRQUFRQSxFQUFHLHVCQUE2QyxHQUFHQSxFQUFHLFFBQVFBLEVBQUcsUUFBUUEsRUFBRyxRQUFRQSxFQUFHLHdCQUFnRCxHQUFHQSxFQUFHLFFBQVFBLEVBQUcsUUFBUUEsRUFBRyxTQUFTQSxFQUFHLDBCQUFtRHJSLEtBQUssSUFDclIsQ0FHQSxNQUNBLEVBRGdCLENBQUMsT0FBUW9SLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLElDUDV4QyxFQUFZLENBQUMsV0FBWSxTQUFVLFNBRzVCRSxHQUFTLENBRXBC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QSxPQUNBLE9BQ0EsUUFDQSxXQUNBLGFBQ0EsWUFDQSxjQUNBLFdBQ0EsYUFDQSxNQUNBLE9BQ0EsT0FDQSxTQUNBLE9BQ0EsTUFDQSxRQUNBLFNBQ0EsUUFDQSxNQUNBLFVBQ0EsT0FDQSxTQUNBLFdBQ0EsT0FDQSxXQUNBLFdBQ0EsV0FDQSxnQkFDQSxnQkFDQSxhQUNBLFdBQ0EsZUFDQSxlQUNBLFlBQ0EsY0FDQSxVQUNBLGNBQ0EsaUJBQ0EsbUJBQ0EsY0FDQSxXQUNBLFdBQ0EsV0FDQSxnQkFDQSxnQkFDQSxhQUNBLGNBQ0EsYUFDQSxRQUNBLE9BQ0EsU0FDQSxPQUNBLE9BQ0EsS0FDQSxNQUNBLEtBQ0EsUUFDQSxNQUNBLFFBQ0EsT0FDQSxPQUNBLE9BQ0EsT0FDQSxLQUNBLFVBQ0EsU0FDQSxPQUNBLFNBQ0EsUUFDQSxZQUNBLE1BQ0EsUUFDQSxLQUNBLEtBQ0EsTUFDQSxRQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsS0FDQSxLQUNBLE9BQ0EsS0FDQSxNQUNBLE1BQ0EsT0FDQSxVQUNBLEtBQ0EsTUFDQSxNQUNBLE9BQ0EsVUFDQSxPQUNBLE1BQ0EsTUFDQSxRQUNBLFNBQ0EsWUFDQSxPQUNBLE1BQ0EsS0FDQSxZQUNBLEtBQ0EsS0FDQSxPQUNBLE9BQ0EsVUFDQSxXQUNBLFdBQ0EsV0FDQSxPQUNBLE9BQ0EsTUFDQSxTQUNBLFVBQ0EsUUFDQSxTQUNBLFVBQ0EsWUFDQSxTQUNBLFFBQ0EsTUFDQSxTQUNBLE9BQ0EsVUFDQSxTQUNBLFNBQ0EsU0FDQSxRQUNBLE9BQ0EsV0FDQSxhQUNBLFlBQ0EsVUFDQSxjQUNBLGNBQ0EsV0FDQSxhQUNBLGFBQ0EsUUFDQSxTQUNBLFNBQ0EsVUFDQSxXQUNBLFdBQ0EsTUFDQSxRQUNBLFNBQ0EsYUFDQSxPQUNBLFNBQ0EsUUFDQSxVQUNBLE9BQ0EsUUFDQSxPQUNBLFFBQ0EsUUFDQSxNQUNBLFNBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFNBQ0EsV0FDQSxPQUNBLFVBQ0EsTUFDQSxPQUNBLE9BQ0EsUUFDQSxLQUNBLFdBQ0EsS0FDQSxVQUNBLFFBQ0EsUUFDQSxTQUNBLFNBQ0EsU0FDQSxVQUNBLFFBQ0EsUUFDQSxNQUNBLFFBQ0EsU0FDQSxNQUNBLE9BQ0EsVUFDQSxZQUNBLE9BQ0EsT0FDQSxRQUNBLFFBQ0EsTUFDQSxNQUNBLE9BT2tCenZFLEtBQUssTUFFbkIyNkUsRUFBUSxDQUNaL3ZFLFVBQVcsUUFDWHROLE1BQU8sVUFDUEMsSUFBSyxNQUNMaXhFLFNBQVV3VSxHQUVOQyxFQUFTLENBQ2IzbEYsTUFBTyxPQUNQQyxJQUFLLE1BR0RrOUUsRUFBTSxDQUFFcnFFLFNBQVUsQ0FDdEIsQ0FBRTlTLE1BQU8sUUFDVCxDQUFFQSxNQUFPeXVFLEVBQU1ub0UsT0FDYixpREFHQSwwQkFFRixDQUNFdEcsTUFBTyxnQkFDUGl2RSxVQUFXLEtBR1QyVyxFQUFrQixDQUN0QnhhLEVBQUs0RCxpQkFDTHFPLEVBQ0FGLEdBRUkwSSxFQUFlLENBQ25CLElBQ0EsS0FDQSxLQUNBLEtBQ0EsSUFDQSxJQUNBLEtBT0lDLEVBQW1CLENBQUNuakYsRUFBUW8wQixFQUFNZ3ZELEVBQVEsU0FDOUMsTUFBTUMsRUFBb0IsUUFBVkQsRUFDWkEsRUFDQXRYLEVBQU1ub0UsT0FBT3kvRSxFQUFPaHZELEdBQ3hCLE9BQU8wM0MsRUFBTW5vRSxPQUNYbW9FLEVBQU1ub0UsT0FBTyxNQUFPM0QsRUFBUSxLQUM1Qm8wQixFQUNBLG9CQUNBaXZELEVBQ0Esb0JBQ0FELEVBQ0FOLEVBQ0QsRUFPR1EsRUFBWSxDQUFDdGpGLEVBQVFvMEIsRUFBTWd2RCxJQUN4QnRYLEVBQU1ub0UsT0FDWG1vRSxFQUFNbm9FLE9BQU8sTUFBTzNELEVBQVEsS0FDNUJvMEIsRUFDQSxvQkFDQWd2RCxFQUNBTixHQUdFUyxFQUF3QixDQUM1Qi9JLEVBQ0EvUixFQUFLc0Usa0JBQ0x0RSxFQUFLbHBFLFFBQ0gsT0FDQSxPQUNBLENBQUV5ekUsZ0JBQWdCLElBRXBCZ1EsRUFDQSxDQUNFcjRFLFVBQVcsU0FDWCsxQyxTQUFVdWlDLEVBQ1Y5eUUsU0FBVSxDQUNSLENBQ0U5UyxNQUFPLGtCQUNQQyxJQUFLLE1BQ0xndkUsVUFBVyxHQUViLENBQ0VqdkUsTUFBTyxrQkFDUEMsSUFBSyxNQUNMZ3ZFLFVBQVcsR0FFYixDQUNFanZFLE1BQU8sa0JBQ1BDLElBQUssTUFDTGd2RSxVQUFXLEdBRWIsQ0FDRWp2RSxNQUFPLGtCQUNQQyxJQUFLLE1BQ0xndkUsVUFBVyxHQUViLENBQ0VqdkUsTUFBTyxnQkFDUEMsSUFBSyxJQUNMZ3ZFLFVBQVcsR0FFYixDQUNFanZFLE1BQU8sVUFDUEMsSUFBSyxJQUNMZ3ZFLFVBQVcsR0FFYixDQUNFanZFLE1BQU8sSUFDUEMsSUFBSyxJQUNMb2pELFNBQVUsQ0FBRStuQixFQUFLNEQsbUJBRW5CLENBQ0VodkUsTUFBTyxJQUNQQyxJQUFLLEtBRVAsQ0FDRUQsTUFBTyxJQUNQQyxJQUFLLElBQ0xvakQsU0FBVSxDQUFFK25CLEVBQUs0RCxtQkFFbkIsQ0FDRWh2RSxNQUFPLFVBQ1BpdkUsVUFBVyxHQUViLENBQ0VqdkUsTUFBTyxlQUNQaXZFLFVBQVcsS0FJakIsQ0FDRTNoRSxVQUFXLFNBQ1h0TixNQUFPLDRFQUNQaXZFLFVBQVcsR0FFYixDQUNFanZFLE1BQU8sV0FBYW9yRSxFQUFLZ0YsZUFBaUIsZ0RBQzFDYyxTQUFVLGtDQUNWakMsVUFBVyxFQUNYNXJCLFNBQVUsQ0FDUituQixFQUFLc0Usa0JBQ0wsQ0FDRXBpRSxVQUFXLFNBQ1h3RixTQUFVLENBRVIsQ0FBRTlTLE1BQU84bEYsRUFBaUIsU0FBVXJYLEVBQU1SLFVBQVU0WCxFQUFjLENBQUV4K0IsU0FBUyxNQUU3RSxDQUFFcm5ELE1BQU84bEYsRUFBaUIsU0FBVSxNQUFPLFFBQzNDLENBQUU5bEYsTUFBTzhsRixFQUFpQixTQUFVLE1BQU8sUUFDM0MsQ0FBRTlsRixNQUFPOGxGLEVBQWlCLFNBQVUsTUFBTyxTQUU3QzdXLFVBQVcsR0FFYixDQUNFM2hFLFVBQVcsU0FDWHdGLFNBQVUsQ0FDUixDQUdFOVMsTUFBTyxhQUNQaXZFLFVBQVcsR0FHYixDQUFFanZFLE1BQU9pbUYsRUFBVSxZQUFhLEtBQU0sT0FFdEMsQ0FBRWptRixNQUFPaW1GLEVBQVUsT0FBUXhYLEVBQU1SLFVBQVU0WCxFQUFjLENBQUV4K0IsU0FBUyxJQUFTLE9BRTdFLENBQUVybkQsTUFBT2ltRixFQUFVLE9BQVEsS0FBTSxPQUNqQyxDQUFFam1GLE1BQU9pbUYsRUFBVSxPQUFRLEtBQU0sT0FDakMsQ0FBRWptRixNQUFPaW1GLEVBQVUsT0FBUSxLQUFNLFdBS3pDLENBQ0UzNEUsVUFBVyxXQUNYMGpFLGNBQWUsTUFDZi93RSxJQUFLLHVCQUNMd3pFLFlBQVksRUFDWnhFLFVBQVcsRUFDWDVyQixTQUFVLENBQUUrbkIsRUFBSzJFLGFBRW5CLENBQ0UvdkUsTUFBTyxVQUNQaXZFLFVBQVcsR0FFYixDQUNFanZFLE1BQU8sYUFDUEMsSUFBSyxZQUNMdzRFLFlBQWEsY0FDYnAxQixTQUFVLENBQ1IsQ0FDRXJqRCxNQUFPLFFBQ1BDLElBQUssSUFDTHFOLFVBQVcsY0FRbkIsT0FIQSt2RSxFQUFNaDZCLFNBQVc2aUMsRUFDakJQLEVBQU90aUMsU0FBVzZpQyxFQUVYLENBQ0x0L0UsS0FBTSxPQUNOdW5CLFFBQVMsQ0FDUCxLQUNBLE1BRUYraUQsU0FBVXdVLEVBQ1ZyaUMsU0FBVTZpQyxFQUVkLFlDL1pBanlELEVBQU9ybUIsUUE3Q1AsU0FBcUJ3OUQsR0FDbkIsTUFBTyxDQUNMeGtFLEtBQU0sZUFDTjZ4RSxZQUFhLE1BQ2JwMUIsU0FBVSxDQUNSLENBQ0VyakQsTUFBTyxjQUNQQyxJQUFLLE1BQ0x3NEUsWUFBYSxNQUNicDFCLFNBQVUsQ0FHUixDQUNFcmpELE1BQU8sT0FDUEMsSUFBSyxPQUNMcXpFLE1BQU0sR0FFUixDQUNFdHpFLE1BQU8sS0FDUEMsSUFBSyxJQUNMcXpFLE1BQU0sR0FFUixDQUNFdHpFLE1BQU8sS0FDUEMsSUFBSyxJQUNMcXpFLE1BQU0sR0FFUmxJLEVBQUt4c0QsUUFBUXdzRCxFQUFLOEQsaUJBQWtCLENBQ2xDQyxRQUFTLEtBQ1Q3aEUsVUFBVyxLQUNYKzFDLFNBQVUsS0FDVml3QixNQUFNLElBRVJsSSxFQUFLeHNELFFBQVF3c0QsRUFBS2dFLGtCQUFtQixDQUNuQ0QsUUFBUyxLQUNUN2hFLFVBQVcsS0FDWCsxQyxTQUFVLEtBQ1Zpd0IsTUFBTSxPQU1sQixZQ3dpQkFyL0MsRUFBT3JtQixRQS9rQlAsU0FBYXc5RCxHQUNYLE1BQU1xRCxFQUFRckQsRUFBS3FELE1BR2IwWCxFQUFlLHlCQUNmeFgsRUFBV0YsRUFBTW5vRSxPQUNyQiwyQ0FDQTYvRSxHQUVJQyxFQUE0QjNYLEVBQU1ub0UsT0FDdEMseUVBQ0E2L0UsR0FDSS9DLEVBQVcsQ0FDZmxYLE1BQU8sV0FDUDdtRSxNQUFPLE9BQVNzcEUsR0FZWjBPLEVBQVEsQ0FDWm5SLE1BQU8sUUFDUHA1RCxTQUFVLENBQ1IsQ0FBRTlTLE1BQU8sU0FDVCxDQUNFQSxNQUFPLE9BQ1BDLElBQUssUUFJTG9tRixFQUFnQmpiLEVBQUt4c0QsUUFBUXdzRCxFQUFLOEQsaUJBQWtCLENBQUVDLFFBQVMsT0FXL0RtWCxFQUFhLFVBQ2JsSCxFQUFTLENBQ2JsVCxNQUFPLFNBQ1BwNUQsU0FBVSxDQWJVczRELEVBQUt4c0QsUUFBUXdzRCxFQUFLZ0Usa0JBQW1CLENBQ3pERCxRQUFTLEtBQ1Q5ckIsU0FBVStuQixFQUFLZ0Usa0JBQWtCL3JCLFNBQVMvOEMsT0FBTysyRSxLQWEvQ2dKLEVBWFlqYixFQUFLdUYsa0JBQWtCLENBQ3JDM3dFLE1BQU8sbUJBQ1BDLElBQUssZ0JBQ0xvakQsU0FBVStuQixFQUFLZ0Usa0JBQWtCL3JCLFNBQVMvOEMsT0FBTysyRSxPQVk3QzhFLEVBQVMsQ0FDYmpXLE1BQU8sU0FDUHA1RCxTQUFVLENBQ1IsQ0FBRTlTLE1BQU8sK0JBQ1QsQ0FBRUEsTUFBTyxpQ0FDVCxDQUFFQSxNQUFPLDZDQUVULENBQUVBLE1BQU8sK0VBRVhpdkUsVUFBVyxHQUVQdVIsRUFBVyxDQUNmLFFBQ0EsT0FDQSxRQUVJK0YsRUFBTSxDQUdWLFlBQ0EsVUFDQSxXQUNBLGVBQ0EsMkJBQ0EsV0FDQSxhQUNBLGdCQUNBLFlBR0EsTUFDQSxPQUNBLE9BQ0EsVUFDQSxlQUNBLFFBQ0EsVUFDQSxlQU1BLFFBQ0EsV0FDQSxNQUNBLEtBQ0EsU0FDQSxPQUNBLFVBQ0EsUUFDQSxXQUNBLE9BQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxXQUNBLFVBQ0EsVUFDQSxLQUNBLFNBQ0EsT0FDQSxTQUNBLFFBQ0EsYUFDQSxTQUNBLGFBQ0EsUUFDQSxZQUNBLFdBQ0EsT0FDQSxPQUNBLFVBQ0EsUUFDQSxVQUNBLFFBQ0EsTUFDQSxVQUNBLE9BQ0EsU0FDQSxPQUNBLEtBQ0EsYUFDQSxhQUNBLFlBQ0EsTUFDQSxVQUNBLFlBQ0EsUUFDQSxXQUNBLE9BQ0EsVUFDQSxRQUNBLE1BQ0EsUUFDQSxTQUNBLEtBQ0EsVUFDQSxZQUNBLFNBQ0EsV0FDQSxPQUNBLFNBQ0EsU0FDQSxTQUNBLFFBQ0EsUUFDQSxNQUNBLFFBQ0EsTUFDQSxNQUNBLE9BQ0EsUUFDQSxNQUNBLFNBR0k5RSxFQUFZLENBR2hCLFVBQ0EsaUJBQ0EscUJBQ0Esa0JBQ0EsZ0JBQ0EsY0FDQSxpQkFDQSwyQkFDQSx5QkFDQSxrQkFDQSx5QkFDQSxlQUNBLFlBQ0Esb0JBQ0Esc0JBQ0Esa0JBQ0EsZ0JBQ0EsaUJBQ0EsWUFDQSxxQkFDQSxpQkFDQSxlQUNBLG1CQUNBLDJCQUNBLG1CQUNBLGtCQUNBLGdCQUNBLGlCQUNBLG1CQUNBLG1CQUNBLHVCQUNBLHNCQUNBLGdCQUNBLG9CQUNBLGlCQUNBLGFBQ0EsaUJBQ0EseUJBQ0EsMkJBQ0Esa0NBQ0EsNkJBQ0EsMEJBQ0Esb0JBQ0EsNEJBQ0EseUJBQ0Esd0JBQ0EsZ0JBQ0EsbUJBQ0EsbUJBQ0Esc0JBQ0EsY0FDQSxnQkFDQSxnQkFDQSxVQUNBLGFBQ0EsYUFDQSxtQkFDQSxjQUNBLG1CQUNBLFdBQ0EsV0FDQSxhQUNBLG9CQUNBLFlBQ0EscUJBQ0EsMkJBQ0Esc0JBR0EsY0FDQSxhQUNBLFVBQ0EsUUFDQSxZQUNBLFdBQ0Esb0JBQ0EsZUFDQSxhQUNBLFlBQ0EsY0FDQSxXQUNBLGdCQUNBLFVBR0EsWUFDQSx5QkFDQSxTQUNBLGtCQUNBLE9BQ0EsU0FDQSxZQXVCSXJELEVBQVcsQ0FDZmpNLFFBQVNvVSxFQUNUNUksUUFoQmUsQ0FBQzZJLElBRWhCLE1BQU1wNkUsRUFBUyxHQVNmLE9BUkFvNkUsRUFBTTVvRixTQUFRNm9CLElBQ1pyYSxFQUFPblAsS0FBS3dwQixHQUNSQSxFQUFLdmIsZ0JBQWtCdWIsRUFDekJyYSxFQUFPblAsS0FBS3dwQixFQUFLOEssZUFFakJubEIsRUFBT25QLEtBQUt3cEIsRUFBS3ZiLGNBQ25CLElBRUtrQixDQUFNLEVBS0pxNkUsQ0FBU2pHLEdBQ2xCNUMsU0FBVTZELEdBS05pRixFQUFxQkYsR0FDbEJBLEVBQU1yaEYsS0FBSXNoQixHQUNSQSxFQUFLam5CLFFBQVEsU0FBVSxNQUk1Qm1uRixFQUFtQixDQUFFN3pFLFNBQVUsQ0FDbkMsQ0FDRXpOLE1BQU8sQ0FDTCxNQUNBb3BFLEVBQU1ub0UsT0FBT2dnRixFQUFZLEtBRXpCN1gsRUFBTW5vRSxPQUFPLE1BQU9vZ0YsRUFBa0JqRixHQUFXLytFLEtBQUssUUFBUyxRQUMvRDBqRixHQUVGbGEsTUFBTyxDQUNMLEVBQUcsVUFDSCxFQUFHLGtCQUtIMGEsRUFBcUJuWSxFQUFNbm9FLE9BQU9xb0UsRUFBVSxjQUU1Q2tZLEVBQXNDLENBQUUvekUsU0FBVSxDQUN0RCxDQUNFek4sTUFBTyxDQUNMb3BFLEVBQU1ub0UsT0FDSixLQUNBbW9FLEVBQU1YLFVBQVUsZ0JBRWxCOFksR0FFRjFhLE1BQU8sQ0FBRSxFQUFHLHNCQUVkLENBQ0U3bUUsTUFBTyxDQUNMLEtBQ0EsU0FFRjZtRSxNQUFPLENBQUUsRUFBRyxzQkFFZCxDQUNFN21FLE1BQU8sQ0FDTCtnRixFQUNBM1gsRUFBTW5vRSxPQUNKLEtBQ0Ftb0UsRUFBTVgsVUFBVSxnQkFFbEI4WSxHQUVGMWEsTUFBTyxDQUNMLEVBQUcsY0FDSCxFQUFHLHNCQUdQLENBQ0U3bUUsTUFBTyxDQUNMK2dGLEVBQ0EzWCxFQUFNbm9FLE9BQ0osS0FDQW1vRSxFQUFNWCxVQUFVLGlCQUdwQjVCLE1BQU8sQ0FBRSxFQUFHLGdCQUVkLENBQ0U3bUUsTUFBTyxDQUNMK2dGLEVBQ0EsS0FDQSxTQUVGbGEsTUFBTyxDQUNMLEVBQUcsY0FDSCxFQUFHLHdCQUtINGEsRUFBaUIsQ0FDckI1YSxNQUFPLE9BQ1A3bUUsTUFBT29wRSxFQUFNbm9FLE9BQU9xb0UsRUFBVUYsRUFBTVgsVUFBVSxLQUFNVyxFQUFNWCxVQUFVLFlBRWhFaVosRUFBYyxDQUNsQjlYLFVBQVcsRUFDWGp2RSxNQUFPLEtBQ1BDLElBQUssS0FDTGl4RSxTQUFVa04sRUFDVi82QixTQUFVLENBQ1J5akMsRUFDQTFELEVBQ0F5RCxFQUNBemIsRUFBS3FFLHFCQUNMMlAsRUFDQStDLEVBQ0F3RSxJQUdFSyxFQUFrQixDQUN0Qi9YLFVBQVcsRUFDWDVwRSxNQUFPLENBQ0wsS0FFQW9wRSxFQUFNbm9FLE9BQU8sd0JBQXlCb2dGLEVBQWtCSCxHQUFLN2pGLEtBQUssUUFBUyxJQUFLZ2tGLEVBQWtCakYsR0FBVy8rRSxLQUFLLFFBQVMsUUFDM0hpc0UsRUFDQUYsRUFBTW5vRSxPQUFPZ2dGLEVBQVksS0FDekI3WCxFQUFNWCxVQUFVLFdBRWxCNUIsTUFBTyxDQUFFLEVBQUcseUJBQ1o3b0IsU0FBVSxDQUFFMGpDLElBRWRBLEVBQVkxakMsU0FBU3BtRCxLQUFLK3BGLEdBRTFCLE1BQU1DLEVBQXFCLENBQ3pCSCxFQUNBRCxFQUNBemIsRUFBS3FFLHFCQUNMMlAsRUFDQStDLEVBQ0F3RSxHQXVDRixNQUFPLENBQ0w1UyxrQkFBa0IsRUFDbEI3QyxTQUFVa04sRUFDVi82QixTQUFVLENBdkNPLENBQ2pCcmpELE1BQU95dUUsRUFBTW5vRSxPQUFPLFNBQVU4L0UsR0FDOUJsVCxXQUFZLE9BQ1pqekUsSUFBSyxJQUNMb3pFLFNBQVUsT0FDVm5DLFNBQVUsQ0FDUnlNLFFBQVM2QyxFQUNUck8sUUFBUyxDQUNQLE1BQ0EsVUFHSjl1QixTQUFVLENBQ1IsQ0FDRXJqRCxNQUFPLEtBQ1BDLElBQUssSUFDTGl4RSxTQUFVLENBQ1J5TSxRQUFTNkMsRUFDVHJPLFFBQVMsQ0FDUCxNQUNBLFVBR0o5dUIsU0FBVSxDQUNSLFVBQ0c0akMsT0FHSkEsRUFDSCxDQUNFL2EsTUFBTyxPQUNQN21FLE1BQU8rZ0YsS0FVVGhiLEVBQUtzRSxrQkFDTHRFLEVBQUtscEUsUUFBUSxLQUFNLEtBQ25Ca3BFLEVBQUtscEUsUUFDSCxPQUNBLE9BQ0EsQ0FBRW1oRCxTQUFVLENBQ1YsQ0FDRTZvQixNQUFPLFNBQ1A3bUUsTUFBTyxpQkFJYixDQUNFQSxNQUFPLHVCQUNQNnJFLFNBQVUsa0JBQ1ZNLE9BQVEsQ0FDTnRGLE1BQU8sVUFDUGpzRSxJQUFLbXJFLEVBQUsrRSxpQkFDVjlzQixTQUFVLENBQ1IsQ0FDRWgrQyxNQUFPLE1BQ1A2bUUsTUFBTyxPQUNQd0YsWUFBWSxNQXBkSCxDQUNuQnhGLE1BQU8sT0FDUHA1RCxTQUFVLENBQ1IsQ0FBRTlTLE1BQU8sU0FBVWl2RSxVQUFXLElBQzlCLENBQUVqdkUsTUFBTyxRQUVULENBQUVBLE1BQU8sTUFBT2l2RSxVQUFXLElBQzNCLENBQUVqdkUsTUFBTyxTQW1kVCxDQUNFa3NFLE1BQU8sb0JBQ1A3bUUsTUFBTyxZQUVUKzlFLEVBQ0E0RCxFQUNBSCxFQUNBLENBQ0V4aEYsTUFBTyxDQUNMLFFBQ0EsS0FDQXNwRSxHQUVGekMsTUFBTyxDQUNMLEVBQUcsVUFDSCxFQUFHLHNCQUdQeWEsRUFDQSxDQUNFemEsTUFBTyxXQUNQK0MsVUFBVyxFQUNYK0IsY0FBZSxjQUNmL3dFLElBQUssT0FDTHd6RSxZQUFZLEVBQ1p0RSxRQUFTLFVBQ1Q5ckIsU0FBVSxDQUNSLENBQUUydEIsY0FBZSxPQUNqQjVGLEVBQUs0RSxzQkFDTCxDQUNFaHdFLE1BQU8sS0FDUDB4RSxZQUFZLEdBRWQsQ0FDRXhGLE1BQU8sU0FDUGxzRSxNQUFPLE1BQ1BDLElBQUssTUFDTHF2RSxjQUFjLEVBQ2RtRSxZQUFZLEVBQ1p2QyxTQUFVa04sRUFDVi82QixTQUFVLENBQ1IsT0FDQSsvQixFQUNBeUQsRUFDQXpiLEVBQUtxRSxxQkFDTDJQLEVBQ0ErQyxNQUtSLENBQ0VqVyxNQUFPLFFBQ1BwNUQsU0FBVSxDQUNSLENBQ0VrK0QsY0FBZSxPQUNmN0IsUUFBUyxTQUVYLENBQ0U2QixjQUFlLHdCQUNmN0IsUUFBUyxXQUdiRixVQUFXLEVBQ1hodkUsSUFBSyxLQUNMd3pFLFlBQVksRUFDWnB3QixTQUFVLENBQ1IsQ0FBRTJ0QixjQUFlLHNCQUNqQjVGLEVBQUs0RSx3QkFNVCxDQUNFZ0IsY0FBZSxZQUNmL0IsVUFBVyxFQUNYaHZFLElBQUssSUFDTGt2RSxRQUFTLE9BQ1Q5ckIsU0FBVSxDQUFFK25CLEVBQUt4c0QsUUFBUXdzRCxFQUFLNEUsc0JBQXVCLENBQUU5RCxNQUFPLGtCQUVoRSxDQUNFOEUsY0FBZSxNQUNmL0IsVUFBVyxFQUNYaHZFLElBQUssSUFDTG9qRCxTQUFVLENBRVIsQ0FDRWgrQyxNQUFPLDBCQUNQNm1FLE1BQU8sV0FHVGQsRUFBSzRFLHdCQUdUb1AsRUFDQStDLEdBR04sWUN2a0JBbHVELEVBQU9ybUIsUUFYUCxTQUFtQnc5RCxHQUNqQixNQUFPLENBQ0x4a0UsS0FBTSxhQUNOdW5CLFFBQVMsQ0FDUCxPQUNBLE9BRUYyb0QsbUJBQW1CLEVBRXZCLFlDZUE3aUQsRUFBT3JtQixRQXhCUCxTQUFvQnc5RCxHQUNsQixNQUFPLENBQ0xqOUMsUUFBUyxDQUFFLFNBQ1hrMUIsU0FBVSxDQUNSLENBQ0UvMUMsVUFBVyxjQUNYa2tFLE9BQVEsQ0FHTnZ4RSxJQUFLLE1BQ0x1eEUsT0FBUSxDQUNOdnhFLElBQUssSUFDTHc0RSxZQUFhLFdBR2pCM2xFLFNBQVUsQ0FDUixDQUFFOVMsTUFBTyxpQkFDVCxDQUFFQSxNQUFPLHVCQUtuQixZQ29aQWkwQixFQUFPcm1CLFFBMWFQLFNBQWdCdzlELEdBQ2QsTUFBTXFELEVBQVFyRCxFQUFLcUQsTUFDYkUsRUFBVyxxQ0FDWHVZLEVBQWlCLENBQ3JCLE1BQ0EsS0FDQSxTQUNBLFFBQ0EsUUFDQSxRQUNBLE9BQ0EsUUFDQSxXQUNBLE1BQ0EsTUFDQSxPQUNBLE9BQ0EsU0FDQSxVQUNBLE1BQ0EsT0FDQSxTQUNBLEtBQ0EsU0FDQSxLQUNBLEtBQ0EsU0FDQSxRQUNBLGNBQ0EsTUFDQSxLQUNBLE9BQ0EsUUFDQSxTQUNBLE1BQ0EsUUFDQSxPQUNBLFNBdUdJOUksRUFBVyxDQUNmNUksU0FBVSxzQkFDVnJELFFBQVMrVSxFQUNUdEosU0F2R2dCLENBQ2hCLGFBQ0EsTUFDQSxNQUNBLE1BQ0EsUUFDQSxNQUNBLE9BQ0EsYUFDQSxZQUNBLFFBQ0EsV0FDQSxNQUNBLGNBQ0EsVUFDQSxVQUNBLFVBQ0EsT0FDQSxNQUNBLFNBQ0EsWUFDQSxPQUNBLE9BQ0EsU0FDQSxRQUNBLFNBQ0EsWUFDQSxVQUNBLFVBQ0EsVUFDQSxPQUNBLE9BQ0EsTUFDQSxLQUNBLFFBQ0EsTUFDQSxhQUNBLGFBQ0EsT0FDQSxNQUNBLE9BQ0EsU0FDQSxNQUNBLE1BQ0EsYUFDQSxNQUNBLE9BQ0EsU0FDQSxNQUNBLE9BQ0EsTUFDQSxNQUNBLFFBQ0EsV0FDQSxRQUNBLE9BQ0EsV0FDQSxRQUNBLE1BQ0EsVUFDQSxRQUNBLFNBQ0EsZUFDQSxNQUNBLE1BQ0EsUUFDQSxRQUNBLE9BQ0EsT0FDQSxPQW1DQUQsUUFoQ2UsQ0FDZixZQUNBLFdBQ0EsUUFDQSxPQUNBLGlCQUNBLFFBMkJBLzhFLEtBckJZLENBQ1osTUFDQSxXQUNBLFlBQ0EsT0FDQSxPQUNBLFVBQ0EsVUFDQSxXQUNBLFdBQ0EsTUFDQSxRQUNBLE9BQ0EsVUFXSXVtRixFQUFTLENBQ2I3NUUsVUFBVyxPQUNYdE4sTUFBTyxrQkFHSHE5RSxFQUFRLENBQ1ovdkUsVUFBVyxRQUNYdE4sTUFBTyxLQUNQQyxJQUFLLEtBQ0xpeEUsU0FBVWtOLEVBQ1ZqUCxRQUFTLEtBR0xpWSxFQUFrQixDQUN0QnBuRixNQUFPLE9BQ1BpdkUsVUFBVyxHQUdQbVEsRUFBUyxDQUNiOXhFLFVBQVcsU0FDWCsxQyxTQUFVLENBQUUrbkIsRUFBSzRELGtCQUNqQmw4RCxTQUFVLENBQ1IsQ0FDRTlTLE1BQU8seUNBQ1BDLElBQUssTUFDTG9qRCxTQUFVLENBQ1IrbkIsRUFBSzRELGlCQUNMbVksR0FFRmxZLFVBQVcsSUFFYixDQUNFanZFLE1BQU8seUNBQ1BDLElBQUssTUFDTG9qRCxTQUFVLENBQ1IrbkIsRUFBSzRELGlCQUNMbVksR0FFRmxZLFVBQVcsSUFFYixDQUNFanZFLE1BQU8sOEJBQ1BDLElBQUssTUFDTG9qRCxTQUFVLENBQ1IrbkIsRUFBSzRELGlCQUNMbVksRUFDQUMsRUFDQS9KLElBR0osQ0FDRXI5RSxNQUFPLDhCQUNQQyxJQUFLLE1BQ0xvakQsU0FBVSxDQUNSK25CLEVBQUs0RCxpQkFDTG1ZLEVBQ0FDLEVBQ0EvSixJQUdKLENBQ0VyOUUsTUFBTyxlQUNQQyxJQUFLLElBQ0xndkUsVUFBVyxJQUViLENBQ0VqdkUsTUFBTyxlQUNQQyxJQUFLLElBQ0xndkUsVUFBVyxJQUViLENBQ0VqdkUsTUFBTyw0QkFDUEMsSUFBSyxLQUVQLENBQ0VELE1BQU8sNEJBQ1BDLElBQUssS0FFUCxDQUNFRCxNQUFPLDRCQUNQQyxJQUFLLElBQ0xvakQsU0FBVSxDQUNSK25CLEVBQUs0RCxpQkFDTG9ZLEVBQ0EvSixJQUdKLENBQ0VyOUUsTUFBTyw0QkFDUEMsSUFBSyxJQUNMb2pELFNBQVUsQ0FDUituQixFQUFLNEQsaUJBQ0xvWSxFQUNBL0osSUFHSmpTLEVBQUs4RCxpQkFDTDlELEVBQUtnRSxvQkFLSGlZLEVBQVksa0JBQ1pDLEVBQWEsUUFBUUQsV0FBbUJBLFVBQWtCQSxRQU0xRHZaLEVBQVksT0FBT29aLEVBQWV4a0YsS0FBSyxPQUN2Q3kvRSxFQUFTLENBQ2I3MEUsVUFBVyxTQUNYMmhFLFVBQVcsRUFDWG44RCxTQUFVLENBV1IsQ0FDRTlTLE1BQU8sUUFBUXFuRixPQUFlQyxnQkFBeUJELGFBQXFCdlosTUFFOUUsQ0FDRTl0RSxNQUFPLElBQUlzbkYsV0FTYixDQUNFdG5GLE1BQU8sMENBQTBDOHRFLE1BRW5ELENBQ0U5dEUsTUFBTyw0QkFBNEI4dEUsTUFFckMsQ0FDRTl0RSxNQUFPLDZCQUE2Qjh0RSxNQUV0QyxDQUNFOXRFLE1BQU8sbUNBQW1DOHRFLE1BSzVDLENBQ0U5dEUsTUFBTyxPQUFPcW5GLFlBQW9CdlosUUFJbEN5WixFQUFlLENBQ25CajZFLFVBQVcsVUFDWHROLE1BQU95dUUsRUFBTVgsVUFBVSxXQUN2Qjd0RSxJQUFLLElBQ0xpeEUsU0FBVWtOLEVBQ1YvNkIsU0FBVSxDQUNSLENBQ0VyakQsTUFBTyxXQUdULENBQ0VBLE1BQU8sSUFDUEMsSUFBSyxPQUNMMDFFLGdCQUFnQixLQUloQjBMLEVBQVMsQ0FDYi96RSxVQUFXLFNBQ1h3RixTQUFVLENBRVIsQ0FDRXhGLFVBQVcsR0FDWHROLE1BQU8sVUFDUHN6RSxNQUFNLEdBRVIsQ0FDRXR6RSxNQUFPLEtBQ1BDLElBQUssS0FDTHF2RSxjQUFjLEVBQ2RtRSxZQUFZLEVBQ1p2QyxTQUFVa04sRUFDVi82QixTQUFVLENBQ1IsT0FDQThqQyxFQUNBaEYsRUFDQS9DLEVBQ0FoVSxFQUFLc0Usc0JBV2IsT0FOQTJOLEVBQU1oNkIsU0FBVyxDQUNmKzdCLEVBQ0ErQyxFQUNBZ0YsR0FHSyxDQUNMdmdGLEtBQU0sU0FDTnVuQixRQUFTLENBQ1AsS0FDQSxNQUNBLFdBRUY2bEQsY0FBYyxFQUNkOUMsU0FBVWtOLEVBQ1ZqUCxRQUFTLGlCQUNUOXJCLFNBQVUsQ0FDUjhqQyxFQUNBaEYsRUFDQSxDQUVFbmlGLE1BQU8sWUFFVCxDQUdFZ3hFLGNBQWUsS0FDZi9CLFVBQVcsR0FFYm1RLEVBQ0FtSSxFQUNBbmMsRUFBS3NFLGtCQUNMLENBQ0VycUUsTUFBTyxDQUNMLFFBQVMsTUFDVHNwRSxHQUVGekMsTUFBTyxDQUNMLEVBQUcsVUFDSCxFQUFHLGtCQUVMN29CLFNBQVUsQ0FBRWcrQixJQUVkLENBQ0V2dUUsU0FBVSxDQUNSLENBQ0V6TixNQUFPLENBQ0wsVUFBVyxNQUNYc3BFLEVBQVUsTUFDVixRQUFTQSxFQUFTLFVBR3RCLENBQ0V0cEUsTUFBTyxDQUNMLFVBQVcsTUFDWHNwRSxLQUlOekMsTUFBTyxDQUNMLEVBQUcsVUFDSCxFQUFHLGNBQ0gsRUFBRywwQkFHUCxDQUNFNStELFVBQVcsT0FDWHROLE1BQU8sV0FDUEMsSUFBSyxVQUNMb2pELFNBQVUsQ0FDUjgrQixFQUNBZCxFQUNBakMsS0FLVixZQy9LQW5yRCxFQUFPcm1CLFFBdFBQLFNBQVd3OUQsR0FDVCxNQUFNcUQsRUFBUXJELEVBQUtxRCxNQU9iRSxFQUFXLHVEQUNYNlksRUFBa0IvWSxFQUFNUixPQUU1QixnREFFQSwwQ0FFQSxpREFFSXdaLEVBQWUsbUVBQ2ZDLEVBQWlCalosRUFBTVIsT0FDM0IsT0FDQSxPQUNBLE9BQ0EsUUFDQSxLQUNBLEtBR0YsTUFBTyxDQUNMcm5FLEtBQU0sSUFFTnNxRSxTQUFVLENBQ1JzRSxTQUFVN0csRUFDVndELFFBQ0Usa0RBQ0Z3TCxRQUNFLHdGQUVGQyxTQUVFLGtoQ0F1Qkp2NkIsU0FBVSxDQUVSK25CLEVBQUtscEUsUUFDSCxLQUNBLElBQ0EsQ0FBRW1oRCxTQUFVLENBQ1YsQ0FNRTZvQixNQUFPLFNBQ1A3bUUsTUFBTyxZQUNQbXNFLE9BQVEsQ0FDTnZ4RSxJQUFLd3VFLEVBQU1YLFVBQVVXLEVBQU1SLE9BRXpCLHlCQUVBLGNBRUZ5RCxZQUFZLElBR2hCLENBR0V4RixNQUFPLFNBQ1Bsc0UsTUFBTyxTQUNQQyxJQUFLLElBQ0xvakQsU0FBVSxDQUNSLENBQ0U2b0IsTUFBTyxXQUNQcDVELFNBQVUsQ0FDUixDQUFFek4sTUFBT3NwRSxHQUNULENBQUV0cEUsTUFBTyxzQkFFWHFzRSxZQUFZLEtBSWxCLENBQ0V4RixNQUFPLFNBQ1A3bUUsTUFBTyxjQUVULENBQ0U2bUUsTUFBTyxVQUNQN21FLE1BQU8sa0JBS2IrbEUsRUFBS3NFLGtCQUVMLENBQ0V4RCxNQUFPLFNBQ1A3b0IsU0FBVSxDQUFFK25CLEVBQUs0RCxrQkFDakJsOEQsU0FBVSxDQUNSczRELEVBQUt1RixrQkFBa0IsQ0FDckIzd0UsTUFBTyxjQUNQQyxJQUFLLFlBRVBtckUsRUFBS3VGLGtCQUFrQixDQUNyQjN3RSxNQUFPLGNBQ1BDLElBQUssWUFFUG1yRSxFQUFLdUYsa0JBQWtCLENBQ3JCM3dFLE1BQU8sY0FDUEMsSUFBSyxZQUVQbXJFLEVBQUt1RixrQkFBa0IsQ0FDckIzd0UsTUFBTyxjQUNQQyxJQUFLLFlBRVBtckUsRUFBS3VGLGtCQUFrQixDQUNyQjN3RSxNQUFPLGNBQ1BDLElBQUssWUFFUG1yRSxFQUFLdUYsa0JBQWtCLENBQ3JCM3dFLE1BQU8sY0FDUEMsSUFBSyxZQUVQLENBQ0VELE1BQU8sSUFDUEMsSUFBSyxJQUNMZ3ZFLFVBQVcsR0FFYixDQUNFanZFLE1BQU8sSUFDUEMsSUFBSyxJQUNMZ3ZFLFVBQVcsS0FjakIsQ0FDRUEsVUFBVyxFQUNYbjhELFNBQVUsQ0FDUixDQUNFbzVELE1BQU8sQ0FDTCxFQUFHLFdBQ0gsRUFBRyxVQUVMN21FLE1BQU8sQ0FDTG9pRixFQUNBRCxJQUdKLENBQ0V0YixNQUFPLENBQ0wsRUFBRyxXQUNILEVBQUcsVUFFTDdtRSxNQUFPLENBQ0wsVUFDQW1pRixJQUdKLENBQ0V0YixNQUFPLENBQ0wsRUFBRyxjQUNILEVBQUcsVUFFTDdtRSxNQUFPLENBQ0xxaUYsRUFDQUYsSUFHSixDQUNFdGIsTUFBTyxDQUFFLEVBQUcsVUFDWjdtRSxNQUFPLENBQ0wsbUJBQ0FtaUYsTUFPUixDQUVFdGIsTUFBTyxDQUFFLEVBQUcsWUFDWjdtRSxNQUFPLENBQ0xzcEUsRUFDQSxNQUNBLEtBQ0EsUUFJSixDQUNFekMsTUFBTyxXQUNQK0MsVUFBVyxFQUNYbjhELFNBQVUsQ0FDUixDQUFFek4sTUFBT29pRixHQUNULENBQUVwaUYsTUFBTyxhQUliLENBQ0U2bUUsTUFBTyxjQUNQK0MsVUFBVyxFQUNYNXBFLE1BQU9xaUYsR0FHVCxDQUVFMW5GLE1BQU8sSUFDUEMsSUFBSyxJQUNMb2pELFNBQVUsQ0FBRSxDQUFFcmpELE1BQU8sVUFJN0IsWUM2SkFpMEIsRUFBT3JtQixRQWxaUCxTQUFjdzlELEdBQ1osTUFBTXFELEVBQVFyRCxFQUFLcUQsTUFDYmtaLEVBQWlCLHFGQUVqQkMsRUFBZ0JuWixFQUFNUixPQUMxQix1QkFFQSw4QkFHSTRaLEVBQStCcFosRUFBTW5vRSxPQUFPc2hGLEVBQWUsWUFDM0RFLEVBQWdCLENBQ3BCLG9CQUFxQixDQUNuQixXQUNBLFlBRUYsb0JBQXFCLENBQ25CLE9BQ0EsU0FFRjNWLFFBQVMsQ0FDUCxRQUNBLE1BQ0EsZ0JBQ0EsY0FDQSxjQUNBLFFBQ0EsUUFDQSxRQUNBLE9BQ0EsUUFDQSxVQUNBLEtBQ0EsT0FDQSxRQUNBLE1BQ0EsTUFDQSxTQUNBLE1BQ0EsS0FDQSxLQUNBLFVBQ0EsU0FDQSxPQUNBLE1BQ0EsS0FDQSxPQUNBLFVBQ0EsU0FDQSxRQUNBLFNBQ0EsT0FDQSxRQUNBLFNBQ0EsUUFDQSxPQUNBLFFBQ0EsU0FFRnlMLFNBQVUsQ0FDUixPQUNBLFVBRUZELFFBQVMsQ0FDUCxPQUNBLFFBQ0EsUUFHRW9LLEVBQVksQ0FDaEJ6NkUsVUFBVyxTQUNYdE4sTUFBTyxjQUVIZ29GLEVBQWEsQ0FDakJob0YsTUFBTyxLQUNQQyxJQUFLLEtBRURnb0YsRUFBZ0IsQ0FDcEI3YyxFQUFLbHBFLFFBQ0gsSUFDQSxJQUNBLENBQUVtaEQsU0FBVSxDQUFFMGtDLEtBRWhCM2MsRUFBS2xwRSxRQUNILFVBQ0EsUUFDQSxDQUNFbWhELFNBQVUsQ0FBRTBrQyxHQUNaOVksVUFBVyxLQUdmN0QsRUFBS2xwRSxRQUFRLFdBQVlrcEUsRUFBSytFLG1CQUUxQmtOLEVBQVEsQ0FDWi92RSxVQUFXLFFBQ1h0TixNQUFPLE1BQ1BDLElBQUssS0FDTGl4RSxTQUFVNFcsR0FFTjFJLEVBQVMsQ0FDYjl4RSxVQUFXLFNBQ1grMUMsU0FBVSxDQUNSK25CLEVBQUs0RCxpQkFDTHFPLEdBRUZ2cUUsU0FBVSxDQUNSLENBQ0U5UyxNQUFPLElBQ1BDLElBQUssS0FFUCxDQUNFRCxNQUFPLElBQ1BDLElBQUssS0FFUCxDQUNFRCxNQUFPLElBQ1BDLElBQUssS0FFUCxDQUNFRCxNQUFPLGNBQ1BDLElBQUssTUFFUCxDQUNFRCxNQUFPLGNBQ1BDLElBQUssTUFFUCxDQUNFRCxNQUFPLGNBQ1BDLElBQUssTUFFUCxDQUNFRCxNQUFPLGFBQ1BDLElBQUssS0FFUCxDQUNFRCxNQUFPLGNBQ1BDLElBQUssTUFFUCxDQUNFRCxNQUFPLGFBQ1BDLElBQUssS0FFUCxDQUNFRCxNQUFPLGFBQ1BDLElBQUssS0FFUCxDQUNFRCxNQUFPLGNBQ1BDLElBQUssTUFJUCxDQUFFRCxNQUFPLG1CQUNULENBQUVBLE1BQU8sNkJBQ1QsQ0FBRUEsTUFBTyxtQ0FDVCxDQUFFQSxNQUFPLDJEQUNULENBQUVBLE1BQU8sMkJBQ1QsQ0FBRUEsTUFBTyxhQUVULENBR0VBLE1BQU95dUUsRUFBTW5vRSxPQUNYLFlBQ0Ftb0UsRUFBTVgsVUFBVSw2Q0FFbEJ6cUIsU0FBVSxDQUNSK25CLEVBQUt1RixrQkFBa0IsQ0FDckIzd0UsTUFBTyxRQUNQQyxJQUFLLFFBQ0xvakQsU0FBVSxDQUNSK25CLEVBQUs0RCxpQkFDTHFPLFNBWU42SyxFQUFTLGtCQUNUL0YsRUFBUyxDQUNiNzBFLFVBQVcsU0FDWDJoRSxVQUFXLEVBQ1huOEQsU0FBVSxDQUVSLENBQUU5UyxNQUFPLDhCQUF1QmtvRixrQkFBdUJBLGVBSXZELENBQUVsb0YsTUFBTyxrQ0FDVCxDQUFFQSxNQUFPLGtDQUNULENBQUVBLE1BQU8sa0NBQ1QsQ0FBRUEsTUFBTyw4Q0FHVCxDQUFFQSxNQUFPLDJCQUlQcWhGLEVBQVMsQ0FDYnZ1RSxTQUFVLENBQ1IsQ0FDRXpOLE1BQU8sUUFFVCxDQUNFaUksVUFBVyxTQUNYdE4sTUFBTyxLQUNQQyxJQUFLLFNBQ0xxdkUsY0FBYyxFQUNkb0MsWUFBWSxFQUNaUixTQUFVNFcsS0E0RFZLLEVBQXdCLENBQzVCL0ksRUF4RHVCLENBQ3ZCdHNFLFNBQVUsQ0FDUixDQUNFek4sTUFBTyxDQUNMLFdBQ0F3aUYsRUFDQSxVQUNBQSxJQUdKLENBQ0V4aUYsTUFBTyxDQUNMLFdBQ0F3aUYsS0FJTjNiLE1BQU8sQ0FDTCxFQUFHLGNBQ0gsRUFBRyx5QkFFTGdGLFNBQVU0VyxHQXVCWSxDQUN0QjdZLFVBQVcsRUFDWDVwRSxNQUFPLENBQ0x3aUYsRUFDQSxhQUVGM2IsTUFBTyxDQUNMLEVBQUcsZ0JBM0JxQixDQUMxQitDLFVBQVcsRUFDWDVwRSxNQUFPLHNCQUNQaUksVUFBVyxxQkFHYSxDQUN4QmpJLE1BQU8sQ0FDTCxNQUFPLE1BQ1BzaUYsR0FFRnpiLE1BQU8sQ0FDTCxFQUFHLFVBQ0gsRUFBRyxrQkFFTDdvQixTQUFVLENBQ1JnK0IsSUFxQkYsQ0FFRXJoRixNQUFPb3JFLEVBQUt1RCxTQUFXLE1BQ3pCLENBQ0VyaEUsVUFBVyxTQUNYdE4sTUFBT29yRSxFQUFLd0Qsb0JBQXNCLFlBQ2xDSyxVQUFXLEdBRWIsQ0FDRTNoRSxVQUFXLFNBQ1h0TixNQUFPLFdBQ1BxakQsU0FBVSxDQUNSKzdCLEVBQ0EsQ0FBRXAvRSxNQUFPMm5GLElBRVgxWSxVQUFXLEdBRWJrVCxFQUNBLENBR0U3MEUsVUFBVyxXQUNYdE4sTUFBTyw4REFFVCxDQUNFc04sVUFBVyxTQUNYdE4sTUFBTyxLQUNQQyxJQUFLLEtBQ0xxdkUsY0FBYyxFQUNkbUUsWUFBWSxFQUNaeEUsVUFBVyxFQUNYaUMsU0FBVTRXLEdBRVosQ0FDRTluRixNQUFPLElBQU1vckUsRUFBS2dGLGVBQWlCLGVBQ25DYyxTQUFVLFNBQ1Y3dEIsU0FBVSxDQUNSLENBQ0UvMUMsVUFBVyxTQUNYKzFDLFNBQVUsQ0FDUituQixFQUFLNEQsaUJBQ0xxTyxHQUVGbE8sUUFBUyxLQUNUcjhELFNBQVUsQ0FDUixDQUNFOVMsTUFBTyxJQUNQQyxJQUFLLFdBRVAsQ0FDRUQsTUFBTyxPQUNQQyxJQUFLLFlBRVAsQ0FDRUQsTUFBTyxRQUNQQyxJQUFLLGFBRVAsQ0FDRUQsTUFBTyxNQUNQQyxJQUFLLFdBRVAsQ0FDRUQsTUFBTyxRQUNQQyxJQUFLLGdCQUlYcUcsT0FBTzBoRixFQUFZQyxHQUNyQmhaLFVBQVcsSUFFYjNvRSxPQUFPMGhGLEVBQVlDLEdBRXJCNUssRUFBTWg2QixTQUFXOGtDLEVBQ2pCOUcsRUFBT2grQixTQUFXOGtDLEVBSWxCLE1BS01DLEVBQWMsQ0FDbEIsQ0FDRXBvRixNQUFPLFNBQ1B3eEUsT0FBUSxDQUNOdnhFLElBQUssSUFDTG9qRCxTQUFVOGtDLElBR2QsQ0FDRTc2RSxVQUFXLGNBQ1h0TixNQUFPLGlHQUNQd3hFLE9BQVEsQ0FDTnZ4RSxJQUFLLElBQ0xpeEUsU0FBVTRXLEVBQ1Z6a0MsU0FBVThrQyxLQU9oQixPQUZBRixFQUFjaHNELFFBQVErckQsR0FFZixDQUNMcGhGLEtBQU0sT0FDTnVuQixRQUFTLENBQ1AsS0FDQSxVQUNBLFVBQ0EsT0FDQSxPQUVGK2lELFNBQVU0VyxFQUNWM1ksUUFBUyxPQUNUOXJCLFNBQVUsQ0FBRStuQixFQUFLaUYsUUFBUSxDQUFFRSxPQUFRLFVBQ2hDanFFLE9BQU84aEYsR0FDUDloRixPQUFPMmhGLEdBQ1AzaEYsT0FBTzZoRixHQUVkLFlDMUdBbDBELEVBQU9ybUIsUUF0U1AsU0FBY3c5RCxHQUNaLE1BQU1xRCxFQUFRckQsRUFBS3FELE1BQ2J1WSxFQUFrQixDQUN0QjE1RSxVQUFXLHdCQUNYMmhFLFVBQVcsRUFDWGp2RSxNQUFPeXVFLEVBQU1ub0UsT0FDWCxLQUNBLFlBQ0E4a0UsRUFBS3VELFNBQ0xGLEVBQU1YLFVBQVUsV0FFZHVhLEVBQWdCLHdDQThEaEJDLEVBQVcsQ0FFZixRQUVBLE9BQ0EsT0FDQSxRQUNBLE9BQ0EsT0FDQSxLQUNBLFFBQ0EsU0FDQSxVQUNBLFFBQ0EsUUFDQSxZQUNBLGFBQ0EsS0FDQSxNQUNBLFFBQ0EsUUFDQSxPQUNBLE9BQ0EsVUFDQSxXQUNBLFNBQ0EsZUFDQSxzQkFDQSxvQkFDQSxpQkFDQSxXQUVBLFVBQ0EsYUFDQSxZQUNBLFNBQ0EsT0FDQSxPQUNBLFVBQ0EsaUJBQ0EsZ0JBQ0EsbUJBQ0EsT0FDQSxTQUNBLFFBQ0EsVUFDQSxlQUNBLGlCQUNBLGVBQ0EsUUFDQSxrQkFDQSxlQUNBLGNBQ0EsU0FDQSxXQUNBLFVBQ0EsYUFDQSxPQUNBLGlCQUNBLGVBQ0EsT0FDQSxTQUNBLFdBQ0EsZUFDQSxhQUNBLG9CQUVJdkssRUFBUSxDQUNaLEtBQ0EsTUFDQSxNQUNBLE1BQ0EsT0FDQSxRQUNBLEtBQ0EsTUFDQSxNQUNBLE1BQ0EsT0FDQSxRQUNBLE1BQ0EsTUFDQSxNQUNBLE9BQ0EsT0FDQSxNQUNBLFNBQ0EsU0FDQSxTQUNBLE9BRUYsTUFBTyxDQUNMbjNFLEtBQU0sT0FDTnVuQixRQUFTLENBQUUsTUFDWCtpRCxTQUFVLENBQ1JzRSxTQUFVcEssRUFBS3VELFNBQVcsS0FDMUIvdEUsS0FBTW05RSxFQUNONUwsUUE5SmEsQ0FDZixXQUNBLEtBQ0EsUUFDQSxRQUNBLFNBQ0EsTUFDQSxRQUNBLFFBQ0EsV0FDQSxRQUNBLEtBQ0EsTUFDQSxPQUNBLE9BQ0EsU0FDQSxRQUNBLFFBQ0EsS0FDQSxNQUNBLEtBQ0EsT0FDQSxLQUNBLE1BQ0EsT0FDQSxRQUNBLFFBQ0EsTUFDQSxPQUNBLE1BQ0EsV0FDQSxPQUNBLE1BQ0EsTUFDQSxTQUNBLE9BQ0EsT0FDQSxTQUNBLFNBQ0EsUUFDQSxRQUNBLE9BQ0EsTUFDQSxPQUNBLFNBQ0EsU0FDQSxVQUNBLE1BQ0EsVUFDQSxRQUNBLFFBQ0EsU0E0R0V3TCxRQTFHYSxDQUNmLE9BQ0EsUUFDQSxPQUNBLE9BQ0EsS0FDQSxPQXFHRUMsU0FBVTBLLEdBRVpuWixRQUFTLEtBQ1Q5ckIsU0FBVSxDQUNSK25CLEVBQUtvRSxvQkFDTHBFLEVBQUtscEUsUUFBUSxPQUFRLE9BQVEsQ0FBRW1oRCxTQUFVLENBQUUsVUFDM0MrbkIsRUFBS3hzRCxRQUFRd3NELEVBQUtnRSxrQkFBbUIsQ0FDbkNwdkUsTUFBTyxNQUNQbXZFLFFBQVMsT0FFWCxDQUNFN2hFLFVBQVcsU0FDWHdGLFNBQVUsQ0FDUixDQUFFOVMsTUFBTyw0QkFDVCxDQUFFQSxNQUFPLHFDQUdiLENBQ0VzTixVQUFXLFNBQ1h0TixNQUFPLDJCQUVULENBQ0VzTixVQUFXLFNBQ1h3RixTQUFVLENBQ1IsQ0FBRTlTLE1BQU8sZ0JBQWtCcW9GLEdBQzNCLENBQUVyb0YsTUFBTyxpQkFBbUJxb0YsR0FDNUIsQ0FBRXJvRixNQUFPLHVCQUF5QnFvRixHQUNsQyxDQUFFcm9GLE1BQU8sa0RBQ0Vxb0YsSUFFYnBaLFVBQVcsR0FFYixDQUNFanZFLE1BQU8sQ0FDTCxLQUNBLE1BQ0FvckUsRUFBS3dELHFCQUVQdGhFLFVBQVcsQ0FDVCxFQUFHLFVBQ0gsRUFBRyxtQkFHUCxDQUNFQSxVQUFXLE9BQ1h0TixNQUFPLFNBQ1BDLElBQUssTUFDTG9qRCxTQUFVLENBQ1IsQ0FDRS8xQyxVQUFXLFNBQ1h0TixNQUFPLElBQ1BDLElBQUssT0FJWCxDQUNFRCxNQUFPLENBQ0wsTUFDQSxNQUNBLGNBQ0FvckUsRUFBS3dELHFCQUVQdGhFLFVBQVcsQ0FDVCxFQUFHLFVBQ0gsRUFBRyxVQUNILEVBQUcsYUFJUCxDQUNFdE4sTUFBTyxDQUNMLE1BQ0EsTUFDQW9yRSxFQUFLd0Qsb0JBQ0wsTUFDQSxNQUVGdGhFLFVBQVcsQ0FDVCxFQUFHLFVBQ0gsRUFBRyxXQUNILEVBQUcsWUFHUCxDQUNFdE4sTUFBTyxDQUNMLE9BQ0EsTUFDQW9yRSxFQUFLd0QscUJBRVB0aEUsVUFBVyxDQUNULEVBQUcsVUFDSCxFQUFHLGdCQUdQLENBQ0V0TixNQUFPLENBQ0wsdUNBQ0EsTUFDQW9yRSxFQUFLd0QscUJBRVB0aEUsVUFBVyxDQUNULEVBQUcsVUFDSCxFQUFHLGdCQUdQLENBQ0V0TixNQUFPb3JFLEVBQUt1RCxTQUFXLEtBQ3ZCdUMsU0FBVSxDQUNSaUIsUUFBUyxPQUNUeUwsU0FBVTBLLEVBQ1YxbkYsS0FBTW05RSxJQUdWLENBQ0V6d0UsVUFBVyxjQUNYdE4sTUFBTyxNQUVUZ25GLEdBR04sWUM3U0EsTUE2Q014SCxFQUFPLENBQ1gsSUFDQSxPQUNBLFVBQ0EsVUFDQSxRQUNBLFFBQ0EsSUFDQSxhQUNBLE9BQ0EsU0FDQSxTQUNBLFVBQ0EsT0FDQSxPQUNBLEtBQ0EsTUFDQSxVQUNBLE1BQ0EsTUFDQSxLQUNBLEtBQ0EsS0FDQSxXQUNBLGFBQ0EsU0FDQSxTQUNBLE9BQ0EsS0FDQSxLQUNBLEtBQ0EsS0FDQSxLQUNBLEtBQ0EsU0FDQSxTQUNBLE9BQ0EsSUFDQSxTQUNBLE1BQ0EsUUFDQSxNQUNBLE1BQ0EsUUFDQSxTQUNBLEtBQ0EsT0FDQSxPQUNBLE9BQ0EsTUFDQSxTQUNBLEtBQ0EsSUFDQSxJQUNBLFFBQ0EsT0FDQSxVQUNBLE9BQ0EsU0FDQSxVQUNBLE1BQ0EsUUFDQSxRQUNBLEtBQ0EsV0FDQSxRQUNBLEtBQ0EsUUFDQSxPQUNBLEtBQ0EsS0FDQSxNQUNBLFNBR0lDLEVBQWlCLENBQ3JCLFlBQ0EsY0FDQSxlQUNBLFFBQ0EsY0FDQSxjQUNBLHNCQUNBLGdCQUNBLGVBQ0EsZUFDQSxnQkFDQSxPQUNBLFNBQ0EsUUFDQSxrQkFDQSxhQUNBLGNBQ0EsaUJBQ0Esa0JBQ0EsVUFDQSx1QkFDQSxtQkFDQSx5QkFDQSwrQkFDQSxhQUNBLE9BQ0EsWUFDQSxTQUNBLFFBRUEsWUFDQSxZQUNBLGFBQ0EsY0FJSUMsRUFBaUIsQ0FDckIsU0FDQSxXQUNBLFFBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxNQUNBLFdBQ0EsT0FDQSxRQUNBLFVBQ0EsUUFDQSxjQUNBLGdCQUNBLGFBQ0EsU0FDQSxRQUNBLGdCQUNBLGVBQ0EsTUFDQSxPQUNBLGVBQ0EsUUFDQSxnQkFDQSxXQUNBLFVBQ0EsS0FDQSxPQUNBLGFBQ0EsZUFDQSxPQUNBLE9BQ0EsYUFDQSxNQUNBLFlBQ0EsVUFDQSxpQkFDQSxlQUNBLG1CQUNBLGNBQ0EsYUFDQSxlQUNBLFdBQ0EsZUFDQSxPQUNBLG9CQUNBLFlBQ0EsYUFDQSxXQUNBLFFBQ0EsT0FDQSxRQUNBLFNBQ0EsZ0JBQ0EsZUFDQSxRQUNBLFVBQ0EsU0FJSUMsRUFBa0IsQ0FDdEIsUUFDQSxXQUNBLFNBQ0EsTUFDQSxhQUNBLGVBQ0EsYUFDQSxnQkFDQSxTQUNBLE9BQ0EsY0FDQSxZQUNBLFVBQ0Esa0JBR0lDLEVBQWEsQ0FDakIsZ0JBQ0EsY0FDQSxhQUNBLE1BQ0EsWUFDQSxrQkFDQSxzQkFDQSxxQkFDQSxzQkFDQSw0QkFDQSxpQkFDQSx1QkFDQSw0QkFDQSxzQkFDQSxhQUNBLHdCQUNBLHdCQUNBLGtCQUNBLG1CQUNBLG1CQUNBLG9CQUNBLHNCQUNBLG9CQUNBLGtCQUNBLGFBQ0EsU0FDQSxlQUNBLHFCQUNBLG1CQUNBLHlCQUNBLHlCQUNBLHlCQUNBLHFCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLHFCQUNBLHFCQUNBLGdCQUNBLHNCQUNBLDRCQUNBLDZCQUNBLHNCQUNBLHNCQUNBLGtCQUNBLGVBQ0EsZUFDQSxzQkFDQSxzQkFDQSxxQkFDQSxzQkFDQSxxQkFDQSxnQkFDQSxzQkFDQSxvQkFDQSwwQkFDQSwwQkFDQSwwQkFDQSxzQkFDQSw0QkFDQSw0QkFDQSw0QkFDQSxzQkFDQSxzQkFDQSxjQUNBLG9CQUNBLG9CQUNBLG9CQUNBLGdCQUNBLGVBQ0EscUJBQ0EscUJBQ0EscUJBQ0EsaUJBQ0EsZUFDQSxhQUNBLG1CQUNBLHlCQUNBLDBCQUNBLG1CQUNBLG1CQUNBLGVBQ0EsU0FDQSx1QkFDQSxhQUNBLGFBQ0EsY0FDQSxlQUNBLGVBQ0EsZUFDQSxjQUNBLFFBQ0EsT0FDQSxZQUNBLFlBQ0EsUUFDQSxlQUNBLGNBQ0EsYUFDQSxjQUNBLG9CQUNBLG9CQUNBLG9CQUNBLGNBQ0EsZUFDQSxVQUNBLFVBQ0EsVUFDQSxxQkFDQSxvQkFDQSxnQkFDQSxNQUNBLFlBQ0EsYUFDQSxTQUNBLFlBQ0EsVUFDQSxjQUNBLFNBQ0EsT0FDQSxhQUNBLGlCQUNBLFlBQ0EsWUFDQSxjQUNBLFlBQ0EsUUFDQSxPQUNBLE9BQ0EsZUFDQSxjQUNBLHdCQUNBLGVBQ0EseUJBQ0EsWUFDQSxtQkFDQSxpQkFDQSxlQUNBLGFBQ0EsaUJBQ0EsZUFDQSxvQkFDQSwwQkFDQSx5QkFDQSx1QkFDQSx3QkFDQSwwQkFDQSxjQUNBLE1BQ0EsNkJBQ0EsT0FDQSxZQUNBLG9CQUNBLGlCQUNBLGlCQUNBLGNBQ0Esa0JBQ0Esb0JBQ0EsV0FDQSxXQUNBLGVBQ0EsaUJBQ0EsZ0JBQ0Esc0JBQ0Esd0JBQ0EscUJBQ0Esc0JBQ0EsU0FDQSxVQUNBLE9BQ0Esb0JBQ0Esa0JBQ0EsbUJBQ0EsV0FDQSxjQUNBLFlBQ0Esa0JBQ0EsT0FDQSxpQkFDQSxhQUNBLGNBQ0EsYUFDQSxtQkFDQSxzQkFDQSxrQkFDQSxTQUNBLGVBQ0EsbUJBQ0EscUJBQ0EsZ0JBQ0EsZ0JBQ0Esb0JBQ0Esc0JBQ0EsY0FDQSxlQUNBLGFBQ0EsUUFDQSxPQUNBLGNBQ0EsbUJBQ0EscUJBQ0EscUJBQ0Esb0JBQ0EscUJBQ0Esb0JBQ0EsWUFDQSxpQkFDQSxhQUNBLFlBQ0EsY0FDQSxnQkFDQSxjQUNBLFlBQ0EsWUFDQSxpQkFDQSxhQUNBLGtCQUNBLFlBQ0EsaUJBQ0EsYUFDQSxrQkFDQSxZQUNBLGlCQUNBLFdBQ0EsWUFDQSxXQUNBLFlBQ0EsU0FDQSxPQUNBLFNBQ0EsYUFDQSxrQkFDQSxVQUNBLFFBQ0EsVUFDQSxVQUNBLGdCQUNBLGlCQUNBLGdCQUNBLGdCQUNBLFdBQ0EsZ0JBQ0EsYUFDQSxhQUNBLFVBQ0EsZ0JBQ0Esb0JBQ0Esc0JBQ0EsaUJBQ0EsaUJBQ0EscUJBQ0EsdUJBQ0EsZUFDQSxnQkFDQSxjQUNBLG1CQUNBLG9CQUNBLG9CQUNBLFFBQ0EsY0FDQSxlQUNBLGNBQ0EscUJBQ0EsaUJBQ0EsV0FDQSxTQUNBLFNBQ0EsT0FDQSxhQUNBLGNBQ0EsUUFDQSxVQUNBLGdCQUNBLHNCQUNBLDBCQUNBLDRCQUNBLHVCQUNBLHVCQUNBLDJCQUNBLDZCQUNBLHFCQUNBLHNCQUNBLG9CQUNBLGlCQUNBLHVCQUNBLDJCQUNBLDZCQUNBLHdCQUNBLHdCQUNBLDRCQUNBLDhCQUNBLHNCQUNBLHVCQUNBLHFCQUNBLG9CQUNBLG1CQUNBLG1CQUNBLGtCQUNBLG1CQUNBLGtCQUNBLHdCQUNBLGVBQ0EsZ0JBQ0EsUUFDQSxXQUNBLE1BQ0EsV0FDQSxlQUNBLGFBQ0EsaUJBQ0Esa0JBQ0EsdUJBQ0Esa0JBQ0Esd0JBQ0EsdUJBQ0Esd0JBQ0EsZ0JBQ0Esc0JBQ0EseUJBQ0Esc0JBQ0EsY0FDQSxlQUNBLG1CQUNBLGdCQUNBLGlCQUNBLGNBQ0EsaUJBQ0EsMEJBQ0EsTUFDQSxZQUNBLGdCQUNBLG1CQUNBLGtCQUNBLGFBQ0EsbUJBQ0Esc0JBQ0Esc0JBQ0EsNkJBQ0EsZUFDQSxpQkFDQSxhQUNBLGdCQUNBLGlCQUNBLGVBQ0EsY0FDQSxjQUNBLGFBQ0EsZUFDQSxlQUNBLGNBQ0EsU0FDQSxRQUNBLGNBQ0EsYUFDQSxlQUNBLFlBQ0EsZUFDQSxXQUdBQyxVQStIRjVyRCxFQUFPcm1CLFFBcEhQLFNBQWN3OUQsR0FDWixNQUFNdHpELEVBbm1CTSxDQUFDc3pELElBQ04sQ0FDTDBVLFVBQVcsQ0FDVDVULE1BQU8sT0FDUGxzRSxNQUFPLGNBRVQrL0UsY0FBZTNVLEVBQUtxRSxxQkFDcEJ1USxTQUFVLENBQ1I5VCxNQUFPLFNBQ1Bsc0UsTUFBTyxtREFFVDQrRSxrQkFBbUIsQ0FDakJ0eEUsVUFBVyxXQUNYdE4sTUFBTyxnQkFFVGlnRix3QkFBeUIsQ0FDdkIvVCxNQUFPLGdCQUNQbHNFLE1BQU8sS0FDUEMsSUFBSyxLQUNMa3ZFLFFBQVMsSUFDVDlyQixTQUFVLENBQ1IrbkIsRUFBSzhELGlCQUNMOUQsRUFBS2dFLG9CQUdUOFEsZ0JBQWlCLENBQ2ZoVSxNQUFPLFNBQ1Bsc0UsTUFBT29yRSxFQUFLeUQsVUFBTHpELGtHQVNQNkQsVUFBVyxHQUVia1IsYUFBYyxDQUNaN3lFLFVBQVcsT0FDWHROLE1BQU8sOEJBMmpCR2l3RSxDQUFNN0UsR0FDZG1kLEVBQW9CNUksRUFDcEI2SSxFQUFtQjlJLEVBRW5CSCxFQUFnQixXQUdoQjZELEVBQVcsQ0FDZjkxRSxVQUFXLFdBQ1h0TixNQUFPLGtDQUNQaXZFLFVBQVcsR0FHYixNQUFPLENBQ0xyb0UsS0FBTSxPQUNObXRFLGtCQUFrQixFQUNsQjVFLFFBQVMsU0FDVDlyQixTQUFVLENBQ1IrbkIsRUFBS29FLG9CQUNMcEUsRUFBS3FFLHFCQUdMMzNELEVBQU1vb0UsZ0JBQ04sQ0FDRTV5RSxVQUFXLGNBQ1h0TixNQUFPLGtCQUNQaXZFLFVBQVcsR0FFYixDQUNFM2hFLFVBQVcsaUJBQ1h0TixNQUFPLG9CQUNQaXZFLFVBQVcsR0FFYm4zRCxFQUFNbW9FLHdCQUNOLENBQ0UzeUUsVUFBVyxlQUNYdE4sTUFBTyxPQUFTdy9FLEVBQUs5OEUsS0FBSyxLQUFPLE9BRWpDdXNFLFVBQVcsR0FFYixDQUNFM2hFLFVBQVcsa0JBQ1h0TixNQUFPLEtBQU93b0YsRUFBaUI5bEYsS0FBSyxLQUFPLEtBRTdDLENBQ0U0SyxVQUFXLGtCQUNYdE4sTUFBTyxTQUFXdW9GLEVBQWtCN2xGLEtBQUssS0FBTyxLQUVsRDBnRixFQUNBLENBQ0VwakYsTUFBTyxLQUNQQyxJQUFLLEtBQ0xvakQsU0FBVSxDQUFFdnJDLEVBQU1vb0Usa0JBRXBCcG9FLEVBQU1xb0UsYUFDTixDQUNFN3lFLFVBQVcsWUFDWHROLE1BQU8sT0FBUzQvRSxFQUFXbDlFLEtBQUssS0FBTyxRQUV6QyxDQUFFMUMsTUFBTyw4b0NBQ1QsQ0FDRUEsTUFBTyxJQUNQQyxJQUFLLFFBQ0xndkUsVUFBVyxFQUNYNXJCLFNBQVUsQ0FDUnZyQyxFQUFNaW9FLGNBQ05xRCxFQUNBdHJFLEVBQU1rb0UsU0FDTmxvRSxFQUFNb29FLGdCQUNOOVUsRUFBS2dFLGtCQUNMaEUsRUFBSzhELGlCQUNMcDNELEVBQU1nb0UsVUFDTmhvRSxFQUFNOG1FLG9CQU1WLENBQ0U1K0UsTUFBTyxvQkFDUGt4RSxTQUFVLENBQ1JzRSxTQUFVK0osRUFDVnBOLFFBQVMscUJBR2IsQ0FDRW55RSxNQUFPLElBQ1BDLElBQUssT0FDTHN6RSxhQUFhLEVBQ2JyQyxTQUFVLENBQ1JzRSxTQUFVLFVBQ1ZyRCxRQXRGYSxrQkF1RmJrTyxVQUFXWixFQUFlLzhFLEtBQUssTUFFakMyZ0QsU0FBVSxDQUNSLENBQ0VyakQsTUFBT3UvRSxFQUNQanlFLFVBQVcsV0FFYixDQUNFdE4sTUFBTyxlQUNQc04sVUFBVyxhQUViODFFLEVBQ0FoWSxFQUFLZ0Usa0JBQ0xoRSxFQUFLOEQsaUJBQ0xwM0QsRUFBTWtvRSxTQUNObG9FLEVBQU1vb0Usa0JBR1Zwb0UsRUFBTThtRSxtQkFHWixZQ3ByQkEzcUQsRUFBT3JtQixRQXZCUCxTQUFldzlELEdBQ2IsTUFBTyxDQUNMeGtFLEtBQU0sZ0JBQ051bkIsUUFBUyxDQUNQLFVBQ0EsZ0JBRUZrMUIsU0FBVSxDQUNSLENBQ0UvMUMsVUFBVyxjQUlYdE4sTUFBTyxxQ0FDUHd4RSxPQUFRLENBQ052eEUsSUFBSyxnQkFDTHc0RSxZQUFhLFVBS3ZCLFlDMm9CQXhrRCxFQUFPcm1CLFFBbnBCUCxTQUFhdzlELEdBQ1gsTUFBTXFELEVBQVFyRCxFQUFLcUQsTUFDYmdhLEVBQWVyZCxFQUFLbHBFLFFBQVEsS0FBTSxLQWlCbENzK0UsRUFBVyxDQUNmLE9BQ0EsUUFHQSxXQVVJekMsRUFBUSxDQUNaLFNBQ0EsU0FDQSxPQUNBLFVBQ0EsT0FDQSxZQUNBLE9BQ0EsT0FDQSxNQUNBLFdBQ0EsVUFDQSxRQUNBLE1BQ0EsVUFDQSxXQUNBLFFBQ0EsUUFDQSxXQUNBLFVBQ0EsT0FDQSxNQUNBLFdBQ0EsT0FDQSxZQUNBLFVBQ0EsVUFDQSxhQW1ZSTJLLEVBQXFCLENBQ3pCLE1BQ0EsT0FDQSxZQUNBLE9BQ0EsT0FDQSxNQUNBLE9BQ0EsT0FDQSxVQUNBLFdBQ0EsT0FDQSxNQUNBLE9BQ0EsUUFDQSxZQUNBLGFBQ0EsWUFDQSxhQUNBLFFBQ0EsVUFDQSxNQUNBLFVBQ0EsY0FDQSxRQUNBLGFBQ0EsZ0JBQ0EsY0FDQSxjQUNBLGlCQUNBLGFBQ0EsYUFDQSx1QkFDQSxhQUNBLE1BQ0EsYUFDQSxPQUNBLFVBQ0EsS0FDQSxNQUNBLFFBQ0EsUUFDQSxNQUNBLE1BQ0EsTUFDQSxZQUNBLFFBQ0EsU0FDQSxlQUNBLGtCQUNBLGtCQUNBLFdBQ0EsaUJBQ0EsUUFDQSxPQUNBLFlBQ0EsWUFDQSxhQUNBLGlCQUNBLFVBQ0EsYUFDQSxXQUNBLFdBQ0EsV0FDQSxhQUNBLE1BQ0EsT0FDQSxPQUNBLGFBQ0EsY0FDQSxZQUNBLGtCQUNBLE1BQ0EsTUFDQSxPQUNBLFlBQ0Esa0JBQ0EsUUFDQSxPQUNBLGFBQ0EsU0FDQSxRQUNBLFdBQ0EsVUFDQSxXQUNBLGdCQXdCSUMsRUFBUyxDQUNiLGVBQ0EsY0FDQSxjQUNBLGNBQ0EsV0FDQSxjQUNBLGlCQUNBLGdCQUNBLGNBQ0EsZ0JBQ0EsZ0JBQ0EsZUFDQSxjQUNBLGFBQ0EsY0FDQSxpQkFHSUMsRUFBWUYsRUFFWnRLLEVBQVcsQ0FyZmYsTUFDQSxPQUNBLE1BQ0EsV0FDQSxRQUNBLE1BQ0EsTUFDQSxNQUNBLFFBQ0EsWUFDQSx3QkFDQSxLQUNBLGFBQ0EsT0FDQSxhQUNBLEtBQ0EsT0FDQSxTQUNBLGdCQUNBLE1BQ0EsUUFDQSxjQUNBLGtCQUNBLFVBQ0EsU0FDQSxTQUNBLE9BQ0EsVUFDQSxPQUNBLEtBQ0EsT0FDQSxTQUNBLGNBQ0EsV0FDQSxPQUNBLE9BQ0EsT0FDQSxVQUNBLE9BQ0EsY0FDQSxZQUNBLG1CQUNBLFFBQ0EsYUFDQSxPQUNBLFFBQ0EsV0FDQSxVQUNBLFVBQ0EsU0FDQSxTQUNBLFlBQ0EsVUFDQSxhQUNBLFdBQ0EsVUFDQSxPQUNBLE9BQ0EsZ0JBQ0EsTUFDQSxPQUNBLFFBQ0EsWUFDQSxhQUNBLFNBQ0EsUUFDQSxPQUNBLFlBQ0EsVUFDQSxrQkFDQSxlQUNBLGtDQUNBLGVBQ0EsZUFDQSxjQUNBLGlCQUNBLGVBQ0Esb0JBQ0EsZUFDQSxlQUNBLG1DQUNBLGVBQ0EsU0FDQSxRQUNBLE9BQ0EsTUFDQSxhQUNBLE1BQ0EsVUFDQSxXQUNBLFVBQ0EsVUFDQSxTQUNBLFNBQ0EsYUFDQSxRQUNBLFdBQ0EsZ0JBQ0EsYUFDQSxXQUNBLFNBQ0EsT0FDQSxVQUNBLE9BQ0EsVUFDQSxPQUNBLFFBQ0EsTUFDQSxZQUNBLGdCQUNBLFdBQ0EsU0FDQSxTQUNBLFFBQ0EsU0FDQSxPQUNBLFVBQ0EsU0FDQSxNQUNBLFdBQ0EsVUFDQSxRQUNBLFFBQ0EsU0FDQSxjQUNBLFFBQ0EsUUFDQSxNQUNBLFVBQ0EsWUFDQSxPQUNBLE9BQ0EsT0FDQSxXQUNBLFNBQ0EsTUFDQSxTQUNBLFFBQ0EsUUFDQSxXQUNBLFNBQ0EsU0FDQSxPQUNBLE9BQ0EsV0FDQSxLQUNBLFlBQ0EsVUFDQSxRQUNBLFFBQ0EsY0FDQSxTQUNBLE1BQ0EsVUFDQSxZQUNBLGVBQ0EsV0FDQSxPQUNBLEtBQ0EsT0FDQSxhQUNBLGdCQUNBLGNBQ0EsY0FDQSxpQkFDQSxhQUNBLGFBQ0EsdUJBQ0EsYUFDQSxNQUNBLFdBQ0EsUUFDQSxhQUNBLFVBQ0EsT0FDQSxVQUNBLE9BQ0EsT0FDQSxhQUNBLFVBQ0EsS0FDQSxRQUNBLFlBQ0EsaUJBQ0EsTUFDQSxRQUNBLFFBQ0EsUUFDQSxlQUNBLGtCQUNBLFVBQ0EsTUFDQSxTQUNBLFFBQ0EsU0FDQSxNQUNBLFNBQ0EsTUFDQSxXQUNBLFNBQ0EsUUFDQSxXQUNBLFdBQ0EsVUFDQSxRQUNBLFFBQ0EsTUFDQSxLQUNBLE9BQ0EsWUFDQSxNQUNBLFlBQ0EsUUFDQSxPQUNBLFNBQ0EsVUFDQSxlQUNBLG9CQUNBLEtBQ0EsU0FDQSxNQUNB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RUFEVHkyQyxFQUFhdDdILFdBQU0sRUFBUXc3SCxHQUV0RCxDcU0vZHFCQyxDQUFlLENBQ2xDNzJDLFFBQVMsQ0FDUDIxQixTQUFVbWhCLEdBQ1YxaUIsVUFBVzJpQixHQUNYdnVILEtBQU13dUgsR0FDTjMzQixVQUFXNDNCLEdBQ1g3M0IsU0FBVTgzQixHQUNWckYsU0FBVXNGLE1DUkRDLEVBQUFBLFdBQW9CampKLFNBQVNrOUgsZUFBZSxTQUNwRHIwRixPQUNILGdCQUFDLEdBQUQsQ0FBVW1rRSxNQUFPQSxJQUNmLGdCQUFDeWIsR0FBRCxLQUNFLGdCQUFDLEdBQUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qZXN0ZXIvd2VicGFjay9ydW50aW1lL2NyZWF0ZSBmYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1NlcmlhbGl6ZXIuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvUHJlZml4ZXIuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvUGFyc2VyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2Vtb3Rpb24tY2FjaGUuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvTWlkZGxld2FyZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vbWVtb2l6ZS9kaXN0L2Vtb3Rpb24tbWVtb2l6ZS5lc20uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L2Rpc3QvZW1vdGlvbi1lbGVtZW50LTZhODgzZGE5LmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9oYXNoL2Rpc3QvZW1vdGlvbi1oYXNoLmVzbS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdW5pdGxlc3MvZGlzdC9lbW90aW9uLXVuaXRsZXNzLmVzbS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc2VyaWFsaXplL2Rpc3QvZW1vdGlvbi1zZXJpYWxpemUuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzL2Rpc3QvZW1vdGlvbi11c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXRpbHMvZGlzdC9lbW90aW9uLXV0aWxzLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL0FkZEJveC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9BZGRDYXJkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL0FydGljbGUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ29sbGVjdGlvbnNCb29rbWFyay5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9Db250ZW50Q29weS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9DcmVkaXRDYXJkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL0RlbGV0ZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9EZWxldGVGb3JldmVyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL0RvbmVBbGwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvR2l0SHViLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL0hvbWUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvSW50ZWdyYXRpb25JbnN0cnVjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvTG9naW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvTG9nb3V0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL1NhdmUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvdXRpbHMvY3JlYXRlU3ZnSWNvbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vY29sb3JzL2NvbW1vbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vY29sb3JzL2dyZXkuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL2NvbG9ycy9wdXJwbGUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL2NvbG9ycy9yZWQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL2NvbG9ycy9vcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL2NvbG9ycy9ibHVlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9jb2xvcnMvbGlnaHRCbHVlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9jb2xvcnMvZ3JlZW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3N0eWxlcy9jcmVhdGVQYWxldHRlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9zdHlsZXMvY3JlYXRlVHlwb2dyYXBoeS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vc3R5bGVzL3NoYWRvd3MuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3N0eWxlcy9jcmVhdGVUcmFuc2l0aW9ucy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vc3R5bGVzL3pJbmRleC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vc3R5bGVzL2NyZWF0ZVRoZW1lLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9zdHlsZXMvY3JlYXRlTWl4aW5zLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9zdHlsZXMvZGVmYXVsdFRoZW1lLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vcHJvcHNUb0NsYXNzS2V5LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlU3R5bGVkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9zdHlsZXMvc3R5bGVkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9zdHlsZXMvdXNlVGhlbWVQcm9wcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvdXNlVGhlbWVQcm9wcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvZ2V0VGhlbWVQcm9wcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvY2FwaXRhbGl6ZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vU3ZnSWNvbi9zdmdJY29uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vU3ZnSWNvbi9TdmdJY29uLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy9jcmVhdGVTdmdJY29uLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy9kZXByZWNhdGVkUHJvcFR5cGUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2RlcHJlY2F0ZWRQcm9wVHlwZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvcmVxdWlyZVByb3BGYWN0b3J5LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9yZXF1aXJlUHJvcEZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3V0aWxzL3NldFJlZi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvdW5zdXBwb3J0ZWRQcm9wLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS91bnN1cHBvcnRlZFByb3AuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3V0aWxzL2luZGV4LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy9pc011aUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2lzTXVpRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvb3duZXJEb2N1bWVudC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvb3duZXJXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3V0aWxzL3VzZUNvbnRyb2xsZWQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUNvbnRyb2xsZWQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy91c2VFdmVudENhbGxiYWNrLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy91c2VGb3JrUmVmLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy91c2VJZC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vdXNlSXNGb2N1c1Zpc2libGUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy91c2VUaGVtZS9UaGVtZUNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL3VzZVRoZW1lL3VzZVRoZW1lLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9pcy1wcm9wLXZhbGlkL2Rpc3QvZW1vdGlvbi1pcy1wcm9wLXZhbGlkLmVzbS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc3R5bGVkL2Jhc2UvZGlzdC9lbW90aW9uLXN0eWxlZC1iYXNlLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zdHlsZWQvZGlzdC9lbW90aW9uLXN0eWxlZC5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL2luZGV4LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYnJlYWtwb2ludHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jb2xvck1hbmlwdWxhdG9yLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlQnJlYWtwb2ludHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9zaGFwZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2NyZWF0ZVRoZW1lLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlU3BhY2luZy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NvbXBvc2UuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9ib3JkZXJzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vZGlzcGxheS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2ZsZXhib3guanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jc3NHcmlkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vcG9zaXRpb25zLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vcGFsZXR0ZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3NoYWRvd3MuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zaXppbmcuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS90eXBvZ3JhcGh5LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vZ2V0VGhlbWVWYWx1ZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL21lcmdlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3BhY2luZy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL21lbW9pemUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3guanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lV2l0aG91dERlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL0NsYXNzTmFtZUdlbmVyYXRvci9DbGFzc05hbWVHZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2NhcGl0YWxpemUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2NvbXBvc2VDbGFzc2VzL2NvbXBvc2VDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9jcmVhdGVDaGFpbmVkRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2RlYm91bmNlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9kZWVwbWVyZ2UuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2Zvcm1hdE11aUVycm9yTWVzc2FnZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vb3duZXJEb2N1bWVudC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vb3duZXJXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3Jlc29sdmVQcm9wcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vc2V0UmVmLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS91c2VFbmhhbmNlZEVmZmVjdC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vdXNlRXZlbnRDYWxsYmFjay5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vdXNlRm9ya1JlZi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vdXNlSWQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9jbHN4L2Rpc3QvY2xzeC5tLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3Mvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3Mvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2NsaWVudC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC9janMvcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2pzeC1ydW50aW1lLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2luZGV4LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS93aXRoLXNlbGVjdG9yLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9jb21tb24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvY29yZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYmFzaC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3BwLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jc2hhcnAuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Nzcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZGlmZi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ28uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dyYXBocWwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2luaS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvamF2YS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvamF2YXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvanNvbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMva290bGluLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sZXNzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sdWEuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21ha2VmaWxlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tYXJrZG93bi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvb2JqZWN0aXZlYy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGVybC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGhwLXRlbXBsYXRlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9waHAuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BsYWludGV4dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHl0aG9uLXJlcGwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3B5dGhvbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcnVieS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcnVzdC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc2Nzcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc2hlbGwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NxbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3dpZnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3R5cGVzY3JpcHQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3ZibmV0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy93YXNtLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy94bWwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3lhbWwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vamVzdGVyL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2plc3Rlci93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9qZXN0ZXIvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2plc3Rlci93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2plc3Rlci93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L2V4dGVuZFN4UHJvcC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZUJveC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQm94L0JveC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9wcml2YXRlLXRoZW1pbmcvVGhlbWVQcm92aWRlci9uZXN0ZWQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL1RoZW1lUHJvdmlkZXIvVGhlbWVQcm92aWRlci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL1RoZW1lUHJvdmlkZXIvVGhlbWVQcm92aWRlci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHJlbWl4LXJ1bi9yb3V0ZXIvZGlzdC9yb3V0ZXIuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9QYXBlci9wYXBlckNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1BhcGVyL1BhcGVyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9BcHBCYXIvYXBwQmFyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQXBwQmFyL0FwcEJhci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vVG9vbGJhci90b29sYmFyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vVG9vbGJhci9Ub29sYmFyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvQ2hpbGRNYXBwaW5nLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXAuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9CdXR0b25CYXNlL1JpcHBsZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQnV0dG9uQmFzZS90b3VjaFJpcHBsZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0J1dHRvbkJhc2UvVG91Y2hSaXBwbGUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0J1dHRvbkJhc2UvYnV0dG9uQmFzZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0J1dHRvbkJhc2UvQnV0dG9uQmFzZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQnV0dG9uL2J1dHRvbkNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQnV0dG9uL0J1dHRvbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vVHlwb2dyYXBoeS90eXBvZ3JhcGh5Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vVHlwb2dyYXBoeS9UeXBvZ3JhcGh5LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9pbW1lci9kaXN0L2ltbWVyLmVzbS5tanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9yZWR1eC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVkdXgtdGh1bmsvZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvZGlzdC9yZWR1eC10b29sa2l0LmVzbS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvY29uc3RhbnRzL2luZGV4LnRzIiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9yZWR1eC9yZWR1Y2Vycy91c2VySW5mb1NsaWNlLnRzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy9iYXRjaC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29tcG9uZW50cy9Db250ZXh0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VSZWR1eENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZVNlbGVjdG9yLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy91c2VTeW5jRXh0ZXJuYWxTdG9yZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvU3Vic2NyaXB0aW9uLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL2Nvbm5lY3QuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZVN0b3JlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VEaXNwYXRjaC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L3JlZHV4L2hvb2tzLnRzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvUG9ydGFsL1BvcnRhbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vZ2V0U2Nyb2xsYmFyU2l6ZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL01vZGFsVW5zdHlsZWQvTW9kYWxNYW5hZ2VyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvVHJhcEZvY3VzL1RyYXBGb2N1cy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL01vZGFsVW5zdHlsZWQvbW9kYWxVbnN0eWxlZENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS91dGlscy9pc0hvc3RDb21wb25lbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS91dGlscy9hcHBlbmRPd25lclN0YXRlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvdXRpbHMvb21pdEV2ZW50SGFuZGxlcnMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS91dGlscy9yZXNvbHZlQ29tcG9uZW50UHJvcHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS91dGlscy91c2VTbG90UHJvcHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS91dGlscy9tZXJnZVNsb3RQcm9wcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL3V0aWxzL2V4dHJhY3RFdmVudEhhbmRsZXJzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvTW9kYWxVbnN0eWxlZC9Nb2RhbFVuc3R5bGVkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9yZWZsb3cuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3N0eWxlcy91c2VUaGVtZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdHJhbnNpdGlvbnMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0ZhZGUvRmFkZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQmFja2Ryb3AvYmFja2Ryb3BDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9CYWNrZHJvcC9CYWNrZHJvcC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vTW9kYWwvTW9kYWwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0RpYWxvZy9kaWFsb2dDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9EaWFsb2cvRGlhbG9nQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRGlhbG9nL0RpYWxvZy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRGlhbG9nVGl0bGUvZGlhbG9nVGl0bGVDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9EaWFsb2dUaXRsZS9EaWFsb2dUaXRsZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvY29tcG9uZW50cy9Mb2dpbi50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci1kb20vZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvanMtY29va2llL2Rpc3QvanMuY29va2llLm1qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvY29tcG9uZW50cy9OYXZCYXIudHN4Iiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9MaW5rL2xpbmtDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9MaW5rL2dldFRleHREZWNvcmF0aW9uLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9MaW5rL0xpbmsuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvRm9vdGVyLnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL1RleHRhcmVhQXV0b3NpemUvVGV4dGFyZWFBdXRvc2l6ZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2xDb250ZXh0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL0dsb2JhbFN0eWxlcy9HbG9iYWxTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0dsb2JhbFN0eWxlcy9HbG9iYWxTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0lucHV0QmFzZS91dGlscy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vSW5wdXRCYXNlL2lucHV0QmFzZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0lucHV0QmFzZS9JbnB1dEJhc2UuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0lucHV0L2lucHV0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vSW5wdXQvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0ZpbGxlZElucHV0L2ZpbGxlZElucHV0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRmlsbGVkSW5wdXQvRmlsbGVkSW5wdXQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL091dGxpbmVkSW5wdXQvTm90Y2hlZE91dGxpbmUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL091dGxpbmVkSW5wdXQvb3V0bGluZWRJbnB1dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL091dGxpbmVkSW5wdXQvT3V0bGluZWRJbnB1dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRm9ybUxhYmVsL2Zvcm1MYWJlbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0Zvcm1MYWJlbC9Gb3JtTGFiZWwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0lucHV0TGFiZWwvaW5wdXRMYWJlbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0lucHV0TGFiZWwvSW5wdXRMYWJlbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRm9ybUhlbHBlclRleHQvZm9ybUhlbHBlclRleHRDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9Gb3JtSGVscGVyVGV4dC9Gb3JtSGVscGVyVGV4dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vTGlzdC9MaXN0Q29udGV4dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vTGlzdC9saXN0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vTGlzdC9MaXN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy9nZXRTY3JvbGxiYXJTaXplLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9NZW51TGlzdC9NZW51TGlzdC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vR3Jvdy9Hcm93LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9Qb3BvdmVyL3BvcG92ZXJDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9Qb3BvdmVyL1BvcG92ZXIuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL01lbnUvbWVudUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL01lbnUvTWVudS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vTmF0aXZlU2VsZWN0L25hdGl2ZVNlbGVjdENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL05hdGl2ZVNlbGVjdC9OYXRpdmVTZWxlY3RJbnB1dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vU2VsZWN0L3NlbGVjdENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1NlbGVjdC9TZWxlY3RJbnB1dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vaW50ZXJuYWwvc3ZnLWljb25zL0Fycm93RHJvcERvd24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1NlbGVjdC9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1RleHRGaWVsZC90ZXh0RmllbGRDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9UZXh0RmllbGQvVGV4dEZpZWxkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9EaXZpZGVyL2RpdmlkZXJDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9MaXN0SXRlbUljb24vbGlzdEl0ZW1JY29uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vTGlzdEl0ZW1UZXh0L2xpc3RJdGVtVGV4dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL01lbnVJdGVtL21lbnVJdGVtQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vTWVudUl0ZW0vTWVudUl0ZW0uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L3JlZHV4L3JlZHVjZXJzL3Rlc3RGb3JtU2xpY2UudHMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L3JlZHV4L3JlZHVjZXJzL2NvZGVTbGljZS50cyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvcmVkdXgvcmVkdWNlcnMvdXNlcklucHV0U2xpY2UudHMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvQXNzZXJ0aW9ucy50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvUmVxdWVzdEJvZHkudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb21wb25lbnRzL1Byb2plY3REcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvVGVzdElucHV0Rm9ybS50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L3JlZHV4L3JlZHVjZXJzL2NsaXBib2FyZFNsaWNlLnRzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VzZXJBZ2VudC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc0xheW91dFZpZXdwb3J0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9lbnVtcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9jcmVhdGVQb3BwZXIuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZUJ5TmFtZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRWYXJpYXRpb24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvY29udGFpbnMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRSZWN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZmxpcC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2Fycm93LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvUG9wcGVyVW5zdHlsZWQvcG9wcGVyVW5zdHlsZWRDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvUG9wcGVyVW5zdHlsZWQvUG9wcGVyVW5zdHlsZWQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1BvcHBlci9Qb3BwZXIuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1Rvb2x0aXAvdG9vbHRpcENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1Rvb2x0aXAvVG9vbHRpcC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvY29tcG9uZW50cy9BcHBCdXR0b24udHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb250YWluZXJzL0J1dHRvbkNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvQ29kZVRleHQudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb250YWluZXJzL0NvZGVDb250YWluZXIudHN4Iiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9TdGFjay9TdGFjay5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvY29udGFpbmVycy9TYXZlRGF0YUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L3BhZ2VzL0NvZGVHZW5lcmF0b3IudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9wYWdlcy9Ib21lLnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvcGFnZXMvRG9jdW1lbnRhdGlvbi50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2Fzc2V0cy9waG90b3NPYmouanN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9wYWdlcy9Ob3RGb3VuZC50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L3JlZHV4L3JlZHVjZXJzL25hdlBhbmVsU2xpY2UudHMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvQWRkUHJvamVjdERpYWxvZy50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvTmF2UHJvamVjdE1lbnUudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb21wb25lbnRzL1Byb2plY3QudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb250YWluZXJzL1Byb2plY3RQYW5lbENvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvTmF2UGFuZWxEaXNwbGF5LnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvY29udGFpbmVycy9OYXZQYW5lbENvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9lcy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvQ2xpcGJvYXJkQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvY29tcG9uZW50cy9DbGlwYm9hcmQudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9wYWdlcy9BdXRoLnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQ2FyZC9jYXJkQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQ2FyZC9DYXJkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9DYXJkQWN0aW9ucy9jYXJkQWN0aW9uc0NsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0NhcmRBY3Rpb25zL0NhcmRBY3Rpb25zLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9DYXJkQ29udGVudC9jYXJkQ29udGVudENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0NhcmRDb250ZW50L0NhcmRDb250ZW50LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9DYXJkTWVkaWEvY2FyZE1lZGlhQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQ2FyZE1lZGlhL0NhcmRNZWRpYS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvY29tcG9uZW50cy9Db250cmlidXRvckNhcmQudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9wYWdlcy9Db250cmlidXRvcnMudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9BcHAudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9yZWR1eC9zdG9yZS50cyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiA/IChvYmopID0+IChPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSkgOiAob2JqKSA9PiAob2JqLl9fcHJvdG9fXyk7XG52YXIgbGVhZlByb3RvdHlwZXM7XG4vLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLy8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8vIG1vZGUgJiAxNjogcmV0dXJuIHZhbHVlIHdoZW4gaXQncyBQcm9taXNlLWxpa2Vcbi8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbl9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG5cdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IHRoaXModmFsdWUpO1xuXHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuXHRpZih0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlKSB7XG5cdFx0aWYoKG1vZGUgJiA0KSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG5cdFx0aWYoKG1vZGUgJiAxNikgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHJldHVybiB2YWx1ZTtcblx0fVxuXHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuXHR2YXIgZGVmID0ge307XG5cdGxlYWZQcm90b3R5cGVzID0gbGVhZlByb3RvdHlwZXMgfHwgW251bGwsIGdldFByb3RvKHt9KSwgZ2V0UHJvdG8oW10pLCBnZXRQcm90byhnZXRQcm90byldO1xuXHRmb3IodmFyIGN1cnJlbnQgPSBtb2RlICYgMiAmJiB2YWx1ZTsgdHlwZW9mIGN1cnJlbnQgPT0gJ29iamVjdCcgJiYgIX5sZWFmUHJvdG90eXBlcy5pbmRleE9mKGN1cnJlbnQpOyBjdXJyZW50ID0gZ2V0UHJvdG8oY3VycmVudCkpIHtcblx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyZW50KS5mb3JFYWNoKChrZXkpID0+IChkZWZba2V5XSA9ICgpID0+ICh2YWx1ZVtrZXldKSkpO1xuXHR9XG5cdGRlZlsnZGVmYXVsdCddID0gKCkgPT4gKHZhbHVlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBkZWYpO1xuXHRyZXR1cm4gbnM7XG59OyIsIi8qXG5cbkJhc2VkIG9mZiBnbGFtb3IncyBTdHlsZVNoZWV0LCB0aGFua3MgU3VuaWwg4p2k77iPXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnXG5cbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoeyBrZXk6ICcnLCBjb250YWluZXI6IGRvY3VtZW50LmhlYWQgfSlcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG4vLyAkRmxvd0ZpeE1lXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIDogb3B0aW9ucy5zcGVlZHk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICAgIHRoaXMubm9uY2UgPSBvcHRpb25zLm5vbmNlOyAvLyBrZXkgaXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlLCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHNoZWV0c1xuXG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgIHRoaXMucHJlcGVuZCA9IG9wdGlvbnMucHJlcGVuZDtcbiAgICB0aGlzLmluc2VydGlvblBvaW50ID0gb3B0aW9ucy5pbnNlcnRpb25Qb2ludDtcbiAgICB0aGlzLmJlZm9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmh5ZHJhdGUgPSBmdW5jdGlvbiBoeWRyYXRlKG5vZGVzKSB7XG4gICAgbm9kZXMuZm9yRWFjaCh0aGlzLl9pbnNlcnRUYWcpO1xuICB9O1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2luc2VydFRhZyhjcmVhdGVTdHlsZUVsZW1lbnQodGhpcykpO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBpc0ltcG9ydFJ1bGUgPSBydWxlLmNoYXJDb2RlQXQoMCkgPT09IDY0ICYmIHJ1bGUuY2hhckNvZGVBdCgxKSA9PT0gMTA1O1xuXG4gICAgICBpZiAoaXNJbXBvcnRSdWxlICYmIHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlKSB7XG4gICAgICAgIC8vIHRoaXMgd291bGQgb25seSBjYXVzZSBwcm9ibGVtIGluIHNwZWVkeSBtb2RlXG4gICAgICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IGVuYWJsaW5nIHNwZWVkeSB0byBhZmZlY3QgdGhlIG9ic2VydmFibGUgYmVoYXZpb3JcbiAgICAgICAgLy8gc28gd2UgcmVwb3J0IHRoaXMgZXJyb3IgYXQgYWxsIHRpbWVzXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UncmUgYXR0ZW1wdGluZyB0byBpbnNlcnQgdGhlIGZvbGxvd2luZyBydWxlOlxcblwiICsgcnVsZSArICdcXG5cXG5gQGltcG9ydGAgcnVsZXMgbXVzdCBiZSBiZWZvcmUgYWxsIG90aGVyIHR5cGVzIG9mIHJ1bGVzIGluIGEgc3R5bGVzaGVldCBidXQgb3RoZXIgcnVsZXMgaGF2ZSBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQuIFBsZWFzZSBlbnN1cmUgdGhhdCBgQGltcG9ydGAgcnVsZXMgYXJlIGJlZm9yZSBhbGwgb3RoZXIgcnVsZXMuJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlIHx8ICFpc0ltcG9ydFJ1bGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTcGVlZHkpIHtcbiAgICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhLzooLW1vei1wbGFjZWhvbGRlcnwtbW96LWZvY3VzLWlubmVyfC1tb3otZm9jdXNyaW5nfC1tcy1pbnB1dC1wbGFjZWhvbGRlcnwtbW96LXJlYWQtd3JpdGV8LW1vei1yZWFkLW9ubHl8LW1zLWNsZWFyKXsvLnRlc3QocnVsZSkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlcmUgd2FzIGEgcHJvYmxlbSBpbnNlcnRpbmcgdGhlIGZvbGxvd2luZyBydWxlOiBcXFwiXCIgKyBydWxlICsgXCJcXFwiXCIsIGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShydWxlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5jdHIrKztcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdGhpcy50YWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZykge1xuICAgICAgcmV0dXJuIHRhZy5wYXJlbnROb2RlICYmIHRhZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRhZyk7XG4gICAgfSk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTdHlsZVNoZWV0O1xufSgpO1xuXG5leHBvcnQgeyBTdHlsZVNoZWV0IH07XG4iLCIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhvZiAodmFsdWUsIHNlYXJjaCkge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cbiIsImltcG9ydCB7ZnJvbSwgdHJpbSwgY2hhcmF0LCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCBhc3NpZ259IGZyb20gJy4vVXRpbGl0eS5qcydcblxuZXhwb3J0IHZhciBsaW5lID0gMVxuZXhwb3J0IHZhciBjb2x1bW4gPSAxXG5leHBvcnQgdmFyIGxlbmd0aCA9IDBcbmV4cG9ydCB2YXIgcG9zaXRpb24gPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlciA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVycyA9ICcnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0W10gfCBzdHJpbmd9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHRyZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgcm9vdDogcm9vdCwgcGFyZW50OiBwYXJlbnQsIHR5cGU6IHR5cGUsIHByb3BzOiBwcm9wcywgY2hpbGRyZW46IGNoaWxkcmVuLCBsaW5lOiBsaW5lLCBjb2x1bW46IGNvbHVtbiwgbGVuZ3RoOiBsZW5ndGgsIHJldHVybjogJyd9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weSAocm9vdCwgcHJvcHMpIHtcblx0cmV0dXJuIGFzc2lnbihub2RlKCcnLCBudWxsLCBudWxsLCAnJywgbnVsbCwgbnVsbCwgMCksIHJvb3QsIHtsZW5ndGg6IC1yb290Lmxlbmd0aH0sIHByb3BzKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXIgKCkge1xuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldiAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uID4gMCA/IGNoYXJhdChjaGFyYWN0ZXJzLCAtLXBvc2l0aW9uKSA6IDBcblxuXHRpZiAoY29sdW1uLS0sIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZS0tXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHQgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA8IGxlbmd0aCA/IGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbisrKSA6IDBcblxuXHRpZiAoY29sdW1uKyssIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZSsrXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlZWsgKCkge1xuXHRyZXR1cm4gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcmV0ICgpIHtcblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gc3Vic3RyKGNoYXJhY3RlcnMsIGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuICh0eXBlKSB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdC8vIFxcMCBcXHQgXFxuIFxcciBcXHMgd2hpdGVzcGFjZSB0b2tlblxuXHRcdGNhc2UgMDogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0cmV0dXJuIDVcblx0XHQvLyAhICsgLCAvID4gQCB+IGlzb2xhdGUgdG9rZW5cblx0XHRjYXNlIDMzOiBjYXNlIDQzOiBjYXNlIDQ0OiBjYXNlIDQ3OiBjYXNlIDYyOiBjYXNlIDY0OiBjYXNlIDEyNjpcblx0XHQvLyA7IHsgfSBicmVha3BvaW50IHRva2VuXG5cdFx0Y2FzZSA1OTogY2FzZSAxMjM6IGNhc2UgMTI1OlxuXHRcdFx0cmV0dXJuIDRcblx0XHQvLyA6IGFjY29tcGFuaWVkIHRva2VuXG5cdFx0Y2FzZSA1ODpcblx0XHRcdHJldHVybiAzXG5cdFx0Ly8gXCIgJyAoIFsgb3BlbmluZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA0MDogY2FzZSA5MTpcblx0XHRcdHJldHVybiAyXG5cdFx0Ly8gKSBdIGNsb3NpbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgNDE6IGNhc2UgOTM6XG5cdFx0XHRyZXR1cm4gMVxuXHR9XG5cblx0cmV0dXJuIDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBsaW5lID0gY29sdW1uID0gMSwgbGVuZ3RoID0gc3RybGVuKGNoYXJhY3RlcnMgPSB2YWx1ZSksIHBvc2l0aW9uID0gMCwgW11cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJzID0gJycsIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXQgKHR5cGUpIHtcblx0cmV0dXJuIHRyaW0oc2xpY2UocG9zaXRpb24gLSAxLCBkZWxpbWl0ZXIodHlwZSA9PT0gOTEgPyB0eXBlICsgMiA6IHR5cGUgPT09IDQwID8gdHlwZSArIDEgOiB0eXBlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyh0b2tlbml6ZXIoYWxsb2ModmFsdWUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hpdGVzcGFjZSAodHlwZSkge1xuXHR3aGlsZSAoY2hhcmFjdGVyID0gcGVlaygpKVxuXHRcdGlmIChjaGFyYWN0ZXIgPCAzMylcblx0XHRcdG5leHQoKVxuXHRcdGVsc2Vcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHRva2VuKHR5cGUpID4gMiB8fCB0b2tlbihjaGFyYWN0ZXIpID4gMyA/ICcnIDogJyAnXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemVyIChjaGlsZHJlbikge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuXHRcdFx0Y2FzZSAwOiBhcHBlbmQoaWRlbnRpZmllcihwb3NpdGlvbiAtIDEpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjogYXBwZW5kKGRlbGltaXQoY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0OiBhcHBlbmQoZnJvbShjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHR9XG5cblx0cmV0dXJuIGNoaWxkcmVuXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwaW5nIChpbmRleCwgY291bnQpIHtcblx0d2hpbGUgKC0tY291bnQgJiYgbmV4dCgpKVxuXHRcdC8vIG5vdCAwLTkgQS1GIGEtZlxuXHRcdGlmIChjaGFyYWN0ZXIgPCA0OCB8fCBjaGFyYWN0ZXIgPiAxMDIgfHwgKGNoYXJhY3RlciA+IDU3ICYmIGNoYXJhY3RlciA8IDY1KSB8fCAoY2hhcmFjdGVyID4gNzAgJiYgY2hhcmFjdGVyIDwgOTcpKVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIGNhcmV0KCkgKyAoY291bnQgPCA2ICYmIHBlZWsoKSA9PSAzMiAmJiBuZXh0KCkgPT0gMzIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ZXIgKHR5cGUpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0Ly8gXSApIFwiICdcblx0XHRcdGNhc2UgdHlwZTpcblx0XHRcdFx0cmV0dXJuIHBvc2l0aW9uXG5cdFx0XHQvLyBcIiAnXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OlxuXHRcdFx0XHRpZiAodHlwZSAhPT0gMzQgJiYgdHlwZSAhPT0gMzkpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmICh0eXBlID09PSA0MSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIodHlwZSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRuZXh0KClcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudGVyICh0eXBlLCBpbmRleCkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdC8vIC8vXG5cdFx0aWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQ3ICsgMTApXG5cdFx0XHRicmVha1xuXHRcdC8vIC8qXG5cdFx0ZWxzZSBpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDIgKyA0MiAmJiBwZWVrKCkgPT09IDQ3KVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gJy8qJyArIHNsaWNlKGluZGV4LCBwb3NpdGlvbiAtIDEpICsgJyonICsgZnJvbSh0eXBlID09PSA0NyA/IHR5cGUgOiBuZXh0KCkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyIChpbmRleCkge1xuXHR3aGlsZSAoIXRva2VuKHBlZWsoKSkpXG5cdFx0bmV4dCgpXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBwb3NpdGlvbilcbn1cbiIsImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbiIsImltcG9ydCB7SU1QT1JULCBDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTiwgS0VZRlJBTUVTfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge3N0cmxlbiwgc2l6ZW9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjaGlsZHJlbilcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgSU1QT1JUOiBjYXNlIERFQ0xBUkFUSU9OOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnJldHVybiB8fCBlbGVtZW50LnZhbHVlXG5cdFx0Y2FzZSBDT01NRU5UOiByZXR1cm4gJydcblx0XHRjYXNlIEtFWUZSQU1FUzogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykgKyAnfSdcblx0XHRjYXNlIFJVTEVTRVQ6IGVsZW1lbnQudmFsdWUgPSBlbGVtZW50LnByb3BzLmpvaW4oJywnKVxuXHR9XG5cblx0cmV0dXJuIHN0cmxlbihjaGlsZHJlbiA9IHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykpID8gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgY2hpbGRyZW4gKyAnfScgOiAnJ1xufVxuIiwiaW1wb3J0IHtNUywgTU9aLCBXRUJLSVR9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7aGFzaCwgY2hhcmF0LCBzdHJsZW4sIGluZGV4b2YsIHJlcGxhY2V9IGZyb20gJy4vVXRpbGl0eS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeCAodmFsdWUsIGxlbmd0aCkge1xuXHRzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcblx0XHQvLyBjb2xvci1hZGp1c3Rcblx0XHRjYXNlIDUxMDM6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cdFx0Y2FzZSA1NzM3OiBjYXNlIDQyMDE6IGNhc2UgMzE3NzogY2FzZSAzNDMzOiBjYXNlIDE2NDE6IGNhc2UgNDQ1NzogY2FzZSAyOTIxOlxuXHRcdC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblx0XHRjYXNlIDU1NzI6IGNhc2UgNjM1NjogY2FzZSA1ODQ0OiBjYXNlIDMxOTE6IGNhc2UgNjY0NTogY2FzZSAzMDA1OlxuXHRcdC8vIG1hc2ssIG1hc2staW1hZ2UsIG1hc2stKG1vZGV8Y2xpcHxzaXplKSwgbWFzay0ocmVwZWF0fG9yaWdpbiksIG1hc2stcG9zaXRpb24sIG1hc2stY29tcG9zaXRlLFxuXHRcdGNhc2UgNjM5MTogY2FzZSA1ODc5OiBjYXNlIDU2MjM6IGNhc2UgNjEzNTogY2FzZSA0NTk5OiBjYXNlIDQ4NTU6XG5cdFx0Ly8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblx0XHRjYXNlIDQyMTU6IGNhc2UgNjM4OTogY2FzZSA1MTA5OiBjYXNlIDUzNjU6IGNhc2UgNTYyMTogY2FzZSAzODI5OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cdFx0Y2FzZSA1MzQ5OiBjYXNlIDQyNDY6IGNhc2UgNDgxMDogY2FzZSA2OTY4OiBjYXNlIDI3NTY6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNT1ogKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uXG5cdFx0Y2FzZSA2ODI4OiBjYXNlIDQyNjg6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBvcmRlclxuXHRcdGNhc2UgNjE2NTpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBhbGlnbi1pdGVtc1xuXHRcdGNhc2UgNTE4Nzpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZVxuXHRcdC8vIGFsaWduLXNlbGZcblx0XHRjYXNlIDU0NDM6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24tY29udGVudFxuXHRcdGNhc2UgNDY3NTpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWVcblx0XHQvLyBmbGV4LXNocmlua1xuXHRcdGNhc2UgNTU0ODpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWVcblx0XHQvLyBmbGV4LWJhc2lzXG5cdFx0Y2FzZSA1MjkyOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlXG5cdFx0Ly8gZmxleC1ncm93XG5cdFx0Y2FzZSA2MDYwOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWVcblx0XHQvLyB0cmFuc2l0aW9uXG5cdFx0Y2FzZSA0NTU0OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZVxuXHRcdC8vIGN1cnNvclxuXHRcdGNhc2UgNjE4Nzpcblx0XHRcdHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlXG5cdFx0Ly8gYmFja2dyb3VuZCwgYmFja2dyb3VuZC1pbWFnZVxuXHRcdGNhc2UgNTQ5NTogY2FzZSAzOTU5OlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKVxuXHRcdC8vIGp1c3RpZnktY29udGVudFxuXHRcdGNhc2UgNDk2ODpcblx0XHRcdHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cdFx0Y2FzZSA0MDk1OiBjYXNlIDM1ODM6IGNhc2UgNDA2ODogY2FzZSAyNTMyOlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWVcblx0XHQvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXHRcdGNhc2UgODExNjogY2FzZSA3MDU5OiBjYXNlIDU3NTM6IGNhc2UgNTUzNTpcblx0XHRjYXNlIDU0NDU6IGNhc2UgNTcwMTogY2FzZSA0OTMzOiBjYXNlIDQ2Nzc6XG5cdFx0Y2FzZSA1NTMzOiBjYXNlIDU3ODk6IGNhc2UgNTAyMTogY2FzZSA0NzY1OlxuXHRcdFx0Ly8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuXHRcdFx0aWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNilcblx0XHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG5cdFx0XHRcdFx0Ly8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuXHRcdFx0XHRcdGNhc2UgMTA5OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblx0XHRcdFx0XHRjYXNlIDEwMjpcblx0XHRcdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZVxuXHRcdFx0XHRcdC8vIChzKXRyZXRjaFxuXHRcdFx0XHRcdGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0cmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlXG5cdFx0XHRcdH1cblx0XHRcdGJyZWFrXG5cdFx0Ly8gcG9zaXRpb246IHN0aWNreVxuXHRcdGNhc2UgNDk0OTpcblx0XHRcdC8vIChzKXRpY2t5P1xuXHRcdFx0aWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkgIT09IDExNSlcblx0XHRcdFx0YnJlYWtcblx0XHQvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblx0XHRjYXNlIDY0NDQ6XG5cdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAtIDMgLSAofmluZGV4b2YodmFsdWUsICchaW1wb3J0YW50JykgJiYgMTApKSkge1xuXHRcdFx0XHQvLyBzdGljKGspeVxuXHRcdFx0XHRjYXNlIDEwNzpcblx0XHRcdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWVcblx0XHRcdFx0Ly8gKGlubGluZS0pP2ZsKGUpeFxuXHRcdFx0XHRjYXNlIDEwMTpcblx0XHRcdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteOyFdKykoO3whLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWVcblx0XHRcdH1cblx0XHRcdGJyZWFrXG5cdFx0Ly8gd3JpdGluZy1tb2RlXG5cdFx0Y2FzZSA1OTM2OlxuXHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuXHRcdFx0XHQvLyB2ZXJ0aWNhbC1sKHIpXG5cdFx0XHRcdGNhc2UgMTE0OlxuXHRcdFx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlXG5cdFx0XHRcdC8vIHZlcnRpY2FsLXIobClcblx0XHRcdFx0Y2FzZSAxMDg6XG5cdFx0XHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWVcblx0XHRcdFx0Ly8gaG9yaXpvbnRhbCgtKXRiXG5cdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWVcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlXG5cdH1cblxuXHRyZXR1cm4gdmFsdWVcbn1cbiIsImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgY2FyZXQsIGFsbG9jLCBkZWFsbG9jLCBkZWxpbWl0LCB3aGl0ZXNwYWNlLCBlc2NhcGluZywgaWRlbnRpZmllciwgY29tbWVudGVyfSBmcm9tICcuL1Rva2VuaXplci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge29iamVjdFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2MocGFyc2UoJycsIG51bGwsIG51bGwsIG51bGwsIFsnJ10sIHZhbHVlID0gYWxsb2ModmFsdWUpLCAwLCBbMF0sIHZhbHVlKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzZXRzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwc2V1ZG9cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVjbGFyYXRpb25zXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgcnVsZSwgcnVsZXMsIHJ1bGVzZXRzLCBwc2V1ZG8sIHBvaW50cywgZGVjbGFyYXRpb25zKSB7XG5cdHZhciBpbmRleCA9IDBcblx0dmFyIG9mZnNldCA9IDBcblx0dmFyIGxlbmd0aCA9IHBzZXVkb1xuXHR2YXIgYXRydWxlID0gMFxuXHR2YXIgcHJvcGVydHkgPSAwXG5cdHZhciBwcmV2aW91cyA9IDBcblx0dmFyIHZhcmlhYmxlID0gMVxuXHR2YXIgc2Nhbm5pbmcgPSAxXG5cdHZhciBhbXBlcnNhbmQgPSAxXG5cdHZhciBjaGFyYWN0ZXIgPSAwXG5cdHZhciB0eXBlID0gJydcblx0dmFyIHByb3BzID0gcnVsZXNcblx0dmFyIGNoaWxkcmVuID0gcnVsZXNldHNcblx0dmFyIHJlZmVyZW5jZSA9IHJ1bGVcblx0dmFyIGNoYXJhY3RlcnMgPSB0eXBlXG5cblx0d2hpbGUgKHNjYW5uaW5nKVxuXHRcdHN3aXRjaCAocHJldmlvdXMgPSBjaGFyYWN0ZXIsIGNoYXJhY3RlciA9IG5leHQoKSkge1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHByZXZpb3VzICE9IDEwOCAmJiBjaGFyYWN0ZXJzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgPT0gNTgpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXhvZihjaGFyYWN0ZXJzICs9IHJlcGxhY2UoZGVsaW1pdChjaGFyYWN0ZXIpLCAnJicsICcmXFxmJyksICcmXFxmJykgIT0gLTEpXG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSAtMVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdC8vIFwiICcgW1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA5MTpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcdCBcXG4gXFxyIFxcc1xuXHRcdFx0Y2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IHdoaXRlc3BhY2UocHJldmlvdXMpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBlc2NhcGluZyhjYXJldCgpIC0gMSwgNylcblx0XHRcdFx0Y29udGludWVcblx0XHRcdC8vIC9cblx0XHRcdGNhc2UgNDc6XG5cdFx0XHRcdHN3aXRjaCAocGVlaygpKSB7XG5cdFx0XHRcdFx0Y2FzZSA0MjogY2FzZSA0Nzpcblx0XHRcdFx0XHRcdGFwcGVuZChjb21tZW50KGNvbW1lbnRlcihuZXh0KCksIGNhcmV0KCkpLCByb290LCBwYXJlbnQpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9ICcvJ1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyB7XG5cdFx0XHRjYXNlIDEyMyAqIHZhcmlhYmxlOlxuXHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSBzdHJsZW4oY2hhcmFjdGVycykgKiBhbXBlcnNhbmRcblx0XHRcdC8vIH0gOyBcXDBcblx0XHRcdGNhc2UgMTI1ICogdmFyaWFibGU6IGNhc2UgNTk6IGNhc2UgMDpcblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdFx0XHQvLyBcXDAgfVxuXHRcdFx0XHRcdGNhc2UgMDogY2FzZSAxMjU6IHNjYW5uaW5nID0gMFxuXHRcdFx0XHRcdC8vIDtcblx0XHRcdFx0XHRjYXNlIDU5ICsgb2Zmc2V0OlxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5ID4gMCAmJiAoc3RybGVuKGNoYXJhY3RlcnMpIC0gbGVuZ3RoKSlcblx0XHRcdFx0XHRcdFx0YXBwZW5kKHByb3BlcnR5ID4gMzIgPyBkZWNsYXJhdGlvbihjaGFyYWN0ZXJzICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDEpIDogZGVjbGFyYXRpb24ocmVwbGFjZShjaGFyYWN0ZXJzLCAnICcsICcnKSArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAyKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoKSwgcnVsZXNldHMpXG5cblx0XHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT09IDEyMylcblx0XHRcdFx0XHRcdFx0aWYgKG9mZnNldCA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByb290LCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcHJvcHMsIHJ1bGVzZXRzLCBsZW5ndGgsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGF0cnVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZCBtIHNcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMTAwOiBjYXNlIDEwOTogY2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcnVsZSAmJiBhcHBlbmQocnVsZXNldCh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIDAsIDAsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHJ1bGVzLCBwcm9wcyA9IFtdLCBsZW5ndGgpLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0dmFyIHBvc3QgPSBvZmZzZXQgLSAxXG5cdHZhciBydWxlID0gb2Zmc2V0ID09PSAwID8gcnVsZXMgOiBbJyddXG5cdHZhciBzaXplID0gc2l6ZW9mKHJ1bGUpXG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSAwLCBrID0gMDsgaSA8IGluZGV4OyArK2kpXG5cdFx0Zm9yICh2YXIgeCA9IDAsIHkgPSBzdWJzdHIodmFsdWUsIHBvc3QgKyAxLCBwb3N0ID0gYWJzKGogPSBwb2ludHNbaV0pKSwgeiA9IHZhbHVlOyB4IDwgc2l6ZTsgKyt4KVxuXHRcdFx0aWYgKHogPSB0cmltKGogPiAwID8gcnVsZVt4XSArICcgJyArIHkgOiByZXBsYWNlKHksIC8mXFxmL2csIHJ1bGVbeF0pKSlcblx0XHRcdFx0cHJvcHNbaysrXSA9IHpcblxuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBvZmZzZXQgPT09IDAgPyBSVUxFU0VUIDogdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgQ09NTUVOVCwgZnJvbShjaGFyKCkpLCBzdWJzdHIodmFsdWUsIDIsIC0yKSwgMClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBERUNMQVJBVElPTiwgc3Vic3RyKHZhbHVlLCAwLCBsZW5ndGgpLCBzdWJzdHIodmFsdWUsIGxlbmd0aCArIDEsIC0xKSwgbGVuZ3RoKVxufVxuIiwiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBzdHJpbmdpZnksIENPTU1FTlQsIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgcHJlZml4ZXIsIHNlcmlhbGl6ZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZSxcbiAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG52YXIgaWdub3JlRmxhZyA9ICdlbW90aW9uLWRpc2FibGUtc2VydmVyLXJlbmRlcmluZy11bnNhZmUtc2VsZWN0b3Itd2FybmluZy1wbGVhc2UtZG8tbm90LXVzZS10aGlzLXRoZS13YXJuaW5nLWV4aXN0cy1mb3ItYS1yZWFzb24nO1xuXG52YXIgaXNJZ25vcmluZ0NvbW1lbnQgPSBmdW5jdGlvbiBpc0lnbm9yaW5nQ29tbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdjb21tJyAmJiBlbGVtZW50LmNoaWxkcmVuLmluZGV4T2YoaWdub3JlRmxhZykgPiAtMTtcbn07XG5cbnZhciBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSA9IGZ1bmN0aW9uIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKGNhY2hlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8IGNhY2hlLmNvbXBhdCkgcmV0dXJuO1xuICAgIHZhciB1bnNhZmVQc2V1ZG9DbGFzc2VzID0gZWxlbWVudC52YWx1ZS5tYXRjaCgvKDpmaXJzdHw6bnRofDpudGgtbGFzdCktY2hpbGQvZyk7XG5cbiAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3Nlcykge1xuICAgICAgdmFyIGlzTmVzdGVkID0gZWxlbWVudC5wYXJlbnQgPT09IGNoaWxkcmVuWzBdOyAvLyBpbiBuZXN0ZWQgcnVsZXMgY29tbWVudHMgYmVjb21lIGNoaWxkcmVuIG9mIHRoZSBcImF1dG8taW5zZXJ0ZWRcIiBydWxlXG4gICAgICAvL1xuICAgICAgLy8gY29uc2lkZXJpbmcgdGhpcyBpbnB1dDpcbiAgICAgIC8vIC5hIHtcbiAgICAgIC8vICAgLmIgLyogY29tbSAqLyB7fVxuICAgICAgLy8gICBjb2xvcjogaG90cGluaztcbiAgICAgIC8vIH1cbiAgICAgIC8vIHdlIGdldCBvdXRwdXQgY29ycmVzcG9uZGluZyB0byB0aGlzOlxuICAgICAgLy8gLmEge1xuICAgICAgLy8gICAmIHtcbiAgICAgIC8vICAgICAvKiBjb21tICovXG4gICAgICAvLyAgICAgY29sb3I6IGhvdHBpbms7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vICAgLmIge31cbiAgICAgIC8vIH1cblxuICAgICAgdmFyIGNvbW1lbnRDb250YWluZXIgPSBpc05lc3RlZCA/IGNoaWxkcmVuWzBdLmNoaWxkcmVuIDogLy8gZ2xvYmFsIHJ1bGUgYXQgdGhlIHJvb3QgbGV2ZWxcbiAgICAgIGNoaWxkcmVuO1xuXG4gICAgICBmb3IgKHZhciBpID0gY29tbWVudENvbnRhaW5lci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgbm9kZSA9IGNvbW1lbnRDb250YWluZXJbaV07XG5cbiAgICAgICAgaWYgKG5vZGUubGluZSA8IGVsZW1lbnQubGluZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vIGl0IGlzIHF1aXRlIHdlaXJkIGJ1dCBjb21tZW50cyBhcmUgKnVzdWFsbHkqIHB1dCBhdCBgY29sdW1uOiBlbGVtZW50LmNvbHVtbiAtIDFgXG4gICAgICAgIC8vIHNvIHdlIHNlZWsgKmZyb20gdGhlIGVuZCogZm9yIHRoZSBub2RlIHRoYXQgaXMgZWFybGllciB0aGFuIHRoZSBydWxlJ3MgYGVsZW1lbnRgIGFuZCBjaGVjayB0aGF0XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIG1hdGNoIGlucHV0cyBsaWtlIHRoaXM6XG4gICAgICAgIC8vIC5hIHtcbiAgICAgICAgLy8gICAvKiBjb21tICovXG4gICAgICAgIC8vICAgLmIge31cbiAgICAgICAgLy8gfVxuICAgICAgICAvL1xuICAgICAgICAvLyBidXQgdGhhdCBpcyBmaW5lXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGl0IHdvdWxkIGJlIHRoZSBlYXNpZXN0IHRvIGNoYW5nZSB0aGUgcGxhY2VtZW50IG9mIHRoZSBjb21tZW50IHRvIGJlIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgcnVsZTpcbiAgICAgICAgLy8gLmEge1xuICAgICAgICAvLyAgIC5iIHsgLyogY29tbSAqLyB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gd2l0aCBzdWNoIGlucHV0cyB3ZSB3b3VsZG4ndCBoYXZlIHRvIHNlYXJjaCBmb3IgdGhlIGNvbW1lbnQgYXQgYWxsXG4gICAgICAgIC8vIFRPRE86IGNvbnNpZGVyIGNoYW5naW5nIHRoaXMgY29tbWVudCBwbGFjZW1lbnQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvblxuXG5cbiAgICAgICAgaWYgKG5vZGUuY29sdW1uIDwgZWxlbWVudC5jb2x1bW4pIHtcbiAgICAgICAgICBpZiAoaXNJZ25vcmluZ0NvbW1lbnQobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1bnNhZmVQc2V1ZG9DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKHVuc2FmZVBzZXVkb0NsYXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgcHNldWRvIGNsYXNzIFxcXCJcIiArIHVuc2FmZVBzZXVkb0NsYXNzICsgXCJcXFwiIGlzIHBvdGVudGlhbGx5IHVuc2FmZSB3aGVuIGRvaW5nIHNlcnZlci1zaWRlIHJlbmRlcmluZy4gVHJ5IGNoYW5naW5nIGl0IHRvIFxcXCJcIiArIHVuc2FmZVBzZXVkb0NsYXNzLnNwbGl0KCctY2hpbGQnKVswXSArIFwiLW9mLXR5cGVcXFwiLlwiKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBpc0ltcG9ydFJ1bGUgPSBmdW5jdGlvbiBpc0ltcG9ydFJ1bGUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMSkgPT09IDEwNSAmJiBlbGVtZW50LnR5cGUuY2hhckNvZGVBdCgwKSA9PT0gNjQ7XG59O1xuXG52YXIgaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzID0gZnVuY3Rpb24gaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzKGluZGV4LCBjaGlsZHJlbikge1xuICBmb3IgKHZhciBpID0gaW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmICghaXNJbXBvcnRSdWxlKGNoaWxkcmVuW2ldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTsgLy8gdXNlIHRoaXMgdG8gcmVtb3ZlIGluY29ycmVjdCBlbGVtZW50cyBmcm9tIGZ1cnRoZXIgcHJvY2Vzc2luZ1xuLy8gc28gdGhleSBkb24ndCBnZXQgaGFuZGVkIHRvIHRoZSBgc2hlZXRgIChvciBhbnl0aGluZyBlbHNlKVxuLy8gYXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGFkZGl0aW9uYWwgbG9ncyB3aGljaCBpbiB0dXJuIGNvdWxkIGJlIG92ZXJoZWxtaW5nIHRvIHRoZSB1c2VyXG5cblxudmFyIG51bGxpZnlFbGVtZW50ID0gZnVuY3Rpb24gbnVsbGlmeUVsZW1lbnQoZWxlbWVudCkge1xuICBlbGVtZW50LnR5cGUgPSAnJztcbiAgZWxlbWVudC52YWx1ZSA9ICcnO1xuICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gIGVsZW1lbnQuY2hpbGRyZW4gPSAnJztcbiAgZWxlbWVudC5wcm9wcyA9ICcnO1xufTtcblxudmFyIGluY29ycmVjdEltcG9ydEFsYXJtID0gZnVuY3Rpb24gaW5jb3JyZWN0SW1wb3J0QWxhcm0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gIGlmICghaXNJbXBvcnRSdWxlKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQucGFyZW50KSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBuZXN0ZWQgaW5zaWRlIG90aGVyIHJ1bGVzLiBQbGVhc2UgbW92ZSBpdCB0byB0aGUgdG9wIGxldmVsIGFuZCBwdXQgaXQgYmVmb3JlIHJlZ3VsYXIgcnVsZXMuIEtlZXAgaW4gbWluZCB0aGF0IHRoZXkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoaW4gZ2xvYmFsIHN0eWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH0gZWxzZSBpZiAoaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzKGluZGV4LCBjaGlsZHJlbikpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiYEBpbXBvcnRgIHJ1bGVzIGNhbid0IGJlIGFmdGVyIG90aGVyIHJ1bGVzLiBQbGVhc2UgcHV0IHlvdXIgYEBpbXBvcnRgIHJ1bGVzIGJlZm9yZSB5b3VyIG90aGVyIHJ1bGVzLlwiKTtcbiAgICBudWxsaWZ5RWxlbWVudChlbGVtZW50KTtcbiAgfVxufTtcblxudmFyIGRlZmF1bHRTdHlsaXNQbHVnaW5zID0gW3ByZWZpeGVyXTtcblxudmFyIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24gY3JlYXRlQ2FjaGUob3B0aW9ucykge1xuICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBoYXZlIHRvIGNvbmZpZ3VyZSBga2V5YCBmb3IgeW91ciBjYWNoZS4gUGxlYXNlIG1ha2Ugc3VyZSBpdCdzIHVuaXF1ZSAoYW5kIG5vdCBlcXVhbCB0byAnY3NzJykgYXMgaXQncyB1c2VkIGZvciBsaW5raW5nIHN0eWxlcyB0byB5b3VyIGNhY2hlLlxcblwiICsgXCJJZiBtdWx0aXBsZSBjYWNoZXMgc2hhcmUgdGhlIHNhbWUga2V5IHRoZXkgbWlnaHQgXFxcImZpZ2h0XFxcIiBmb3IgZWFjaCBvdGhlcidzIHN0eWxlIGVsZW1lbnRzLlwiKTtcbiAgfVxuXG4gIGlmICgga2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBvbW5pcHJlc2VudFBsdWdpbnMucHVzaChjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSh7XG4gICAgICBnZXQgY29tcGF0KCkge1xuICAgICAgICByZXR1cm4gY2FjaGUuY29tcGF0O1xuICAgICAgfVxuXG4gICAgfSksIGluY29ycmVjdEltcG9ydEFsYXJtKTtcbiAgfVxuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LnJvb3QpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KGVsZW1lbnRbXCJyZXR1cm5cIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudmFsdWUgJiYgZWxlbWVudC50eXBlICE9PSBDT01NRU5UKSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGVtcHR5IHJ1bGUgaW4gbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnRzXG4gICAgICAgICAgLy8gc28gQGVtb3Rpb24vamVzdCBjYW4gZ3JhYiBga2V5YCBmcm9tIHRoZSAoSlMpRE9NIGZvciBjYWNoZXMgd2l0aG91dCBhbnkgcnVsZXMgaW5zZXJ0ZWQgeWV0XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50LnZhbHVlICsgXCJ7fVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gOiBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN1cnJlbnRTaGVldCA9IHtcbiAgICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnQocnVsZSArIHNlcmlhbGl6ZWQubWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ2FjaGU7XG4iLCJpbXBvcnQge01TLCBNT1osIFdFQktJVCwgUlVMRVNFVCwgS0VZRlJBTUVTLCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHttYXRjaCwgY2hhcmF0LCBzdWJzdHIsIHN0cmxlbiwgc2l6ZW9mLCByZXBsYWNlLCBjb21iaW5lfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge2NvcHksIHRva2VuaXplfSBmcm9tICcuL1Rva2VuaXplci5qcydcbmltcG9ydCB7c2VyaWFsaXplfSBmcm9tICcuL1NlcmlhbGl6ZXIuanMnXG5pbXBvcnQge3ByZWZpeH0gZnJvbSAnLi9QcmVmaXhlci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uW119IGNvbGxlY3Rpb25cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlkZGxld2FyZSAoY29sbGVjdGlvbikge1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNvbGxlY3Rpb24pXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnXG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0b3V0cHV0ICs9IGNvbGxlY3Rpb25baV0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzaGVldCAoY2FsbGJhY2spIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0aWYgKCFlbGVtZW50LnJvb3QpXG5cdFx0XHRpZiAoZWxlbWVudCA9IGVsZW1lbnQucmV0dXJuKVxuXHRcdFx0XHRjYWxsYmFjayhlbGVtZW50KVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlciAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRpZiAoZWxlbWVudC5sZW5ndGggPiAtMSlcblx0XHRpZiAoIWVsZW1lbnQucmV0dXJuKVxuXHRcdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBERUNMQVJBVElPTjogZWxlbWVudC5yZXR1cm4gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0Y2FzZSBLRVlGUkFNRVM6XG5cdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7dmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpfSldLCBjYWxsYmFjaylcblx0XHRcdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0XHRcdGlmIChlbGVtZW50Lmxlbmd0aClcblx0XHRcdFx0XHRcdHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzpyZWFkLW9ubHknOiBjYXNlICc6cmVhZC13cml0ZSc6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHRcdC8vIDpwbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV19KVxuXHRcdFx0XHRcdFx0XHRcdFx0XSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJydcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZSAoZWxlbWVudCkge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdGVsZW1lbnQucHJvcHMgPSBlbGVtZW50LnByb3BzLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIGNvbWJpbmUodG9rZW5pemUodmFsdWUpLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjaGlsZHJlbikge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCAwKSkge1xuXHRcdFx0XHRcdFx0Ly8gXFxmXG5cdFx0XHRcdFx0XHRjYXNlIDEyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc3Vic3RyKHZhbHVlLCAxLCBzdHJsZW4odmFsdWUpKVxuXHRcdFx0XHRcdFx0Ly8gXFwwICggKyA+IH5cblx0XHRcdFx0XHRcdGNhc2UgMDogY2FzZSA0MDogY2FzZSA0MzogY2FzZSA2MjogY2FzZSAxMjY6XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0Ly8gOlxuXHRcdFx0XHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0XHRcdFx0aWYgKGNoaWxkcmVuWysraW5kZXhdID09PSAnZ2xvYmFsJylcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbltpbmRleF0gPSAnJywgY2hpbGRyZW5bKytpbmRleF0gPSAnXFxmJyArIHN1YnN0cihjaGlsZHJlbltpbmRleF0sIGluZGV4ID0gMSwgLTEpXG5cdFx0XHRcdFx0XHQvLyBcXHNcblx0XHRcdFx0XHRcdGNhc2UgMzI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDA6IGVsZW1lbnQgPSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpemVvZihjaGlsZHJlbikgPiAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgaW5kZXggPSBzaXplb2YoY2hpbGRyZW4pIC0gMTogY2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAyID8gdmFsdWUgKyBlbGVtZW50ICsgZWxlbWVudCA6IHZhbHVlICsgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0pXG5cdH1cbn1cbiIsImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZTtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIGZvcndhcmRSZWYsIGNyZWF0ZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB3ZWFrTWVtb2l6ZSBmcm9tICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCByZWdpc3RlclN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbkNhY2hlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2FjaGVDb250ZXh0Jztcbn1cblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG59O1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG52YXIgVGhlbWVDb250ZXh0ID0gLyogI19fUFVSRV9fICovY3JlYXRlQ29udGV4dCh7fSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFRoZW1lQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uVGhlbWVDb250ZXh0Jztcbn1cblxudmFyIHVzZVRoZW1lID0gZnVuY3Rpb24gdXNlVGhlbWUoKSB7XG4gIHJldHVybiB1c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG59O1xuXG52YXIgZ2V0VGhlbWUgPSBmdW5jdGlvbiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSkge1xuICBpZiAodHlwZW9mIHRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIG1lcmdlZFRoZW1lID0gdGhlbWUob3V0ZXJUaGVtZSk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAobWVyZ2VkVGhlbWUgPT0gbnVsbCB8fCB0eXBlb2YgbWVyZ2VkVGhlbWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkobWVyZ2VkVGhlbWUpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbVGhlbWVQcm92aWRlcl0gUGxlYXNlIHJldHVybiBhbiBvYmplY3QgZnJvbSB5b3VyIHRoZW1lIGZ1bmN0aW9uLCBpLmUuIHRoZW1lPXsoKSA9PiAoe30pfSEnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkVGhlbWU7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAodGhlbWUgPT0gbnVsbCB8fCB0eXBlb2YgdGhlbWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkodGhlbWUpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSBtYWtlIHlvdXIgdGhlbWUgcHJvcCBhIHBsYWluIG9iamVjdCcpO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdXRlclRoZW1lLCB0aGVtZSk7XG59O1xuXG52YXIgY3JlYXRlQ2FjaGVXaXRoVGhlbWUgPSAvKiAjX19QVVJFX18gKi93ZWFrTWVtb2l6ZShmdW5jdGlvbiAob3V0ZXJUaGVtZSkge1xuICByZXR1cm4gd2Vha01lbW9pemUoZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgcmV0dXJuIGdldFRoZW1lKG91dGVyVGhlbWUsIHRoZW1lKTtcbiAgfSk7XG59KTtcbnZhciBUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICB2YXIgdGhlbWUgPSB1c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKHByb3BzLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIHRoZW1lID0gY3JlYXRlQ2FjaGVXaXRoVGhlbWUodGhlbWUpKHByb3BzLnRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgcHJvcHMuY2hpbGRyZW4pO1xufTtcbmZ1bmN0aW9uIHdpdGhUaGVtZShDb21wb25lbnQpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG5cbiAgdmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihwcm9wcywgcmVmKSB7XG4gICAgdmFyIHRoZW1lID0gdXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMpKTtcbiAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgdmFyIFdpdGhUaGVtZSA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKHJlbmRlcik7XG4gIFdpdGhUaGVtZS5kaXNwbGF5TmFtZSA9IFwiV2l0aFRoZW1lKFwiICsgY29tcG9uZW50TmFtZSArIFwiKVwiO1xuICByZXR1cm4gaG9pc3ROb25SZWFjdFN0YXRpY3MoV2l0aFRoZW1lLCBDb21wb25lbnQpO1xufVxuXG52YXIgZ2V0TGFzdFBhcnQgPSBmdW5jdGlvbiBnZXRMYXN0UGFydChmdW5jdGlvbk5hbWUpIHtcbiAgLy8gVGhlIG1hdGNoIG1heSBiZSBzb21ldGhpbmcgbGlrZSAnT2JqZWN0LmNyZWF0ZUVtb3Rpb25Qcm9wcycgb3JcbiAgLy8gJ0xvYWRlci5wcm90b3R5cGUucmVuZGVyJ1xuICB2YXIgcGFydHMgPSBmdW5jdGlvbk5hbWUuc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xufTtcblxudmFyIGdldEZ1bmN0aW9uTmFtZUZyb21TdGFja1RyYWNlTGluZSA9IGZ1bmN0aW9uIGdldEZ1bmN0aW9uTmFtZUZyb21TdGFja1RyYWNlTGluZShsaW5lKSB7XG4gIC8vIFY4XG4gIHZhciBtYXRjaCA9IC9eXFxzK2F0XFxzKyhbQS1aYS16MC05JC5dKylcXHMvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTsgLy8gU2FmYXJpIC8gRmlyZWZveFxuXG4gIG1hdGNoID0gL14oW0EtWmEtejAtOSQuXSspQC8uZXhlYyhsaW5lKTtcbiAgaWYgKG1hdGNoKSByZXR1cm4gZ2V0TGFzdFBhcnQobWF0Y2hbMV0pO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxudmFyIGludGVybmFsUmVhY3RGdW5jdGlvbk5hbWVzID0gLyogI19fUFVSRV9fICovbmV3IFNldChbJ3JlbmRlcldpdGhIb29rcycsICdwcm9jZXNzQ2hpbGQnLCAnZmluaXNoQ2xhc3NDb21wb25lbnQnLCAncmVuZGVyVG9TdHJpbmcnXSk7IC8vIFRoZXNlIGlkZW50aWZpZXJzIGNvbWUgZnJvbSBlcnJvciBzdGFja3MsIHNvIHRoZXkgaGF2ZSB0byBiZSB2YWxpZCBKU1xuLy8gaWRlbnRpZmllcnMsIHRodXMgd2Ugb25seSBuZWVkIHRvIHJlcGxhY2Ugd2hhdCBpcyBhIHZhbGlkIGNoYXJhY3RlciBmb3IgSlMsXG4vLyBidXQgbm90IGZvciBDU1MuXG5cbnZhciBzYW5pdGl6ZUlkZW50aWZpZXIgPSBmdW5jdGlvbiBzYW5pdGl6ZUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICByZXR1cm4gaWRlbnRpZmllci5yZXBsYWNlKC9cXCQvZywgJy0nKTtcbn07XG5cbnZhciBnZXRMYWJlbEZyb21TdGFja1RyYWNlID0gZnVuY3Rpb24gZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZShzdGFja1RyYWNlKSB7XG4gIGlmICghc3RhY2tUcmFjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdmFyIGxpbmVzID0gc3RhY2tUcmFjZS5zcGxpdCgnXFxuJyk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBmdW5jdGlvbk5hbWUgPSBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZXNbaV0pOyAvLyBUaGUgZmlyc3QgbGluZSBvZiBWOCBzdGFjayB0cmFjZXMgaXMganVzdCBcIkVycm9yXCJcblxuICAgIGlmICghZnVuY3Rpb25OYW1lKSBjb250aW51ZTsgLy8gSWYgd2UgcmVhY2ggb25lIG9mIHRoZXNlLCB3ZSBoYXZlIGdvbmUgdG9vIGZhciBhbmQgc2hvdWxkIHF1aXRcblxuICAgIGlmIChpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcy5oYXMoZnVuY3Rpb25OYW1lKSkgYnJlYWs7IC8vIFRoZSBjb21wb25lbnQgbmFtZSBpcyB0aGUgZmlyc3QgZnVuY3Rpb24gaW4gdGhlIHN0YWNrIHRoYXQgc3RhcnRzIHdpdGggYW5cbiAgICAvLyB1cHBlcmNhc2UgbGV0dGVyXG5cbiAgICBpZiAoL15bQS1aXS8udGVzdChmdW5jdGlvbk5hbWUpKSByZXR1cm4gc2FuaXRpemVJZGVudGlmaWVyKGZ1bmN0aW9uTmFtZSk7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxudmFyIHR5cGVQcm9wTmFtZSA9ICdfX0VNT1RJT05fVFlQRV9QTEVBU0VfRE9fTk9UX1VTRV9fJztcbnZhciBsYWJlbFByb3BOYW1lID0gJ19fRU1PVElPTl9MQUJFTF9QTEVBU0VfRE9fTk9UX1VTRV9fJztcbnZhciBjcmVhdGVFbW90aW9uUHJvcHMgPSBmdW5jdGlvbiBjcmVhdGVFbW90aW9uUHJvcHModHlwZSwgcHJvcHMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIHByb3BzLmNzcyA9PT0gJ3N0cmluZycgJiYgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBjc3MgZGVjbGFyYXRpb25cbiAgcHJvcHMuY3NzLmluZGV4T2YoJzonKSAhPT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpbmdzIGFyZSBub3QgYWxsb3dlZCBhcyBjc3MgcHJvcCB2YWx1ZXMsIHBsZWFzZSB3cmFwIGl0IGluIGEgY3NzIHRlbXBsYXRlIGxpdGVyYWwgZnJvbSAnQGVtb3Rpb24vcmVhY3QnIGxpa2UgdGhpczogY3NzYFwiICsgcHJvcHMuY3NzICsgXCJgXCIpO1xuICB9XG5cbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIGtleSkpIHtcbiAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzW3R5cGVQcm9wTmFtZV0gPSB0eXBlOyAvLyBGb3IgcGVyZm9ybWFuY2UsIG9ubHkgY2FsbCBnZXRMYWJlbEZyb21TdGFja1RyYWNlIGluIGRldmVsb3BtZW50IGFuZCB3aGVuXG4gIC8vIHRoZSBsYWJlbCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGNvbXB1dGVkXG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgISFwcm9wcy5jc3MgJiYgKHR5cGVvZiBwcm9wcy5jc3MgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBwcm9wcy5jc3MubmFtZSAhPT0gJ3N0cmluZycgfHwgcHJvcHMuY3NzLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkpIHtcbiAgICB2YXIgbGFiZWwgPSBnZXRMYWJlbEZyb21TdGFja1RyYWNlKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICBpZiAobGFiZWwpIG5ld1Byb3BzW2xhYmVsUHJvcE5hbWVdID0gbGFiZWw7XG4gIH1cblxuICByZXR1cm4gbmV3UHJvcHM7XG59O1xuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWQgPSBfcmVmLnNlcmlhbGl6ZWQsXG4gICAgICBpc1N0cmluZ1RhZyA9IF9yZWYuaXNTdHJpbmdUYWc7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBydWxlcyA9IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgRW1vdGlvbiA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSwgcmVmKSB7XG4gIHZhciBjc3NQcm9wID0gcHJvcHMuY3NzOyAvLyBzbyB0aGF0IHVzaW5nIGBjc3NgIGZyb20gYGVtb3Rpb25gIGFuZCBwYXNzaW5nIHRoZSByZXN1bHQgdG8gdGhlIGNzcyBwcm9wIHdvcmtzXG4gIC8vIG5vdCBwYXNzaW5nIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIHNlcmlhbGl6ZVN0eWxlcyBiZWNhdXNlIGl0IHdvdWxkXG4gIC8vIG1ha2UgY2VydGFpbiBiYWJlbCBvcHRpbWlzYXRpb25zIG5vdCBwb3NzaWJsZVxuXG4gIGlmICh0eXBlb2YgY3NzUHJvcCA9PT0gJ3N0cmluZycgJiYgY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY3NzUHJvcCA9IGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF07XG4gIH1cblxuICB2YXIgV3JhcHBlZENvbXBvbmVudCA9IHByb3BzW3R5cGVQcm9wTmFtZV07XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW2Nzc1Byb3BdO1xuICB2YXIgY2xhc3NOYW1lID0gJyc7XG5cbiAgaWYgKHR5cGVvZiBwcm9wcy5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgY2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhjYWNoZS5yZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBwcm9wcy5jbGFzc05hbWUpO1xuICB9IGVsc2UgaWYgKHByb3BzLmNsYXNzTmFtZSAhPSBudWxsKSB7XG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lICsgXCIgXCI7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhyZWdpc3RlcmVkU3R5bGVzLCB1bmRlZmluZWQsIHVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2VyaWFsaXplZC5uYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICB2YXIgbGFiZWxGcm9tU3RhY2sgPSBwcm9wc1tsYWJlbFByb3BOYW1lXTtcblxuICAgIGlmIChsYWJlbEZyb21TdGFjaykge1xuICAgICAgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhbc2VyaWFsaXplZCwgJ2xhYmVsOicgKyBsYWJlbEZyb21TdGFjayArICc7J10pO1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyB8fCBrZXkgIT09IGxhYmVsUHJvcE5hbWUpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KEZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb24uZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNzc1Byb3BJbnRlcm5hbCc7XG59XG5cbmV4cG9ydCB7IENhY2hlUHJvdmlkZXIgYXMgQywgRW1vdGlvbiBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd25Qcm9wZXJ0eSBhcyBoLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hYXBwbGVieS9zbWhhc2hlci9ibG9iLzYxYTA1MzBmMjgyNzdmMmU4NTBiZmMzOTYwMGNlNjFkMDJiNTE4ZGUvc3JjL011cm11ckhhc2gyLmNwcCNMMzctTDg2XG5mdW5jdGlvbiBtdXJtdXIyKHN0cikge1xuICAvLyAnbScgYW5kICdyJyBhcmUgbWl4aW5nIGNvbnN0YW50cyBnZW5lcmF0ZWQgb2ZmbGluZS5cbiAgLy8gVGhleSdyZSBub3QgcmVhbGx5ICdtYWdpYycsIHRoZXkganVzdCBoYXBwZW4gdG8gd29yayB3ZWxsLlxuICAvLyBjb25zdCBtID0gMHg1YmQxZTk5NTtcbiAgLy8gY29uc3QgciA9IDI0O1xuICAvLyBJbml0aWFsaXplIHRoZSBoYXNoXG4gIHZhciBoID0gMDsgLy8gTWl4IDQgYnl0ZXMgYXQgYSB0aW1lIGludG8gdGhlIGhhc2hcblxuICB2YXIgayxcbiAgICAgIGkgPSAwLFxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcblxuICBmb3IgKDsgbGVuID49IDQ7ICsraSwgbGVuIC09IDQpIHtcbiAgICBrID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmIHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQ7XG4gICAgayA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gICAgayBePVxuICAgIC8qIGsgPj4+IHI6ICovXG4gICAgayA+Pj4gMjQ7XG4gICAgaCA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNikgXlxuICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIEhhbmRsZSB0aGUgbGFzdCBmZXcgYnl0ZXMgb2YgdGhlIGlucHV0IGFycmF5XG5cblxuICBzd2l0Y2ggKGxlbikge1xuICAgIGNhc2UgMzpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXG4gICAgY2FzZSAyOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcblxuICAgIGNhc2UgMTpcbiAgICAgIGggXj0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgaCA9XG4gICAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIERvIGEgZmV3IGZpbmFsIG1peGVzIG9mIHRoZSBoYXNoIHRvIGVuc3VyZSB0aGUgbGFzdCBmZXdcbiAgLy8gYnl0ZXMgYXJlIHdlbGwtaW5jb3Jwb3JhdGVkLlxuXG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9XG4gIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgcmV0dXJuICgoaCBeIGggPj4+IDE1KSA+Pj4gMCkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtdXJtdXIyO1xuIiwidmFyIHVuaXRsZXNzS2V5cyA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHRhYlNpemU6IDEsXG4gIHdpZG93czogMSxcbiAgekluZGV4OiAxLFxuICB6b29tOiAxLFxuICBXZWJraXRMaW5lQ2xhbXA6IDEsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IDEsXG4gIGZsb29kT3BhY2l0eTogMSxcbiAgc3RvcE9wYWNpdHk6IDEsXG4gIHN0cm9rZURhc2hhcnJheTogMSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogMSxcbiAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgc3Ryb2tlV2lkdGg6IDFcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVuaXRsZXNzS2V5cztcbiIsImltcG9ydCBoYXNoU3RyaW5nIGZyb20gJ0BlbW90aW9uL2hhc2gnO1xuaW1wb3J0IHVuaXRsZXNzIGZyb20gJ0BlbW90aW9uL3VuaXRsZXNzJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IgPSBcIllvdSBoYXZlIGlsbGVnYWwgZXNjYXBlIHNlcXVlbmNlIGluIHlvdXIgdGVtcGxhdGUgbGl0ZXJhbCwgbW9zdCBsaWtlbHkgaW5zaWRlIGNvbnRlbnQncyBwcm9wZXJ0eSB2YWx1ZS5cXG5CZWNhdXNlIHlvdSB3cml0ZSB5b3VyIENTUyBpbnNpZGUgYSBKYXZhU2NyaXB0IHN0cmluZyB5b3UgYWN0dWFsbHkgaGF2ZSB0byBkbyBkb3VibGUgZXNjYXBpbmcsIHNvIGZvciBleGFtcGxlIFxcXCJjb250ZW50OiAnXFxcXDAwZDcnO1xcXCIgc2hvdWxkIGJlY29tZSBcXFwiY29udGVudDogJ1xcXFxcXFxcMDBkNyc7XFxcIi5cXG5Zb3UgY2FuIHJlYWQgbW9yZSBhYm91dCB0aGlzIGhlcmU6XFxuaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvVGVtcGxhdGVfbGl0ZXJhbHMjRVMyMDE4X3JldmlzaW9uX29mX2lsbGVnYWxfZXNjYXBlX3NlcXVlbmNlc1wiO1xudmFyIFVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SID0gXCJZb3UgaGF2ZSBwYXNzZWQgaW4gZmFsc3kgdmFsdWUgYXMgc3R5bGUgb2JqZWN0J3Mga2V5IChjYW4gaGFwcGVuIHdoZW4gaW4gZXhhbXBsZSB5b3UgcGFzcyB1bmV4cG9ydGVkIGNvbXBvbmVudCBhcyBjb21wdXRlZCBrZXkpLlwiO1xudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIGFuaW1hdGlvblJlZ2V4ID0gL19FTU9fKFteX10rPylfKFteXSo/KV9FTU9fL2c7XG5cbnZhciBpc0N1c3RvbVByb3BlcnR5ID0gZnVuY3Rpb24gaXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICByZXR1cm4gcHJvcGVydHkuY2hhckNvZGVBdCgxKSA9PT0gNDU7XG59O1xuXG52YXIgaXNQcm9jZXNzYWJsZVZhbHVlID0gZnVuY3Rpb24gaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nO1xufTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSAvKiAjX19QVVJFX18gKi9tZW1vaXplKGZ1bmN0aW9uIChzdHlsZU5hbWUpIHtcbiAgcmV0dXJuIGlzQ3VzdG9tUHJvcGVydHkoc3R5bGVOYW1lKSA/IHN0eWxlTmFtZSA6IHN0eWxlTmFtZS5yZXBsYWNlKGh5cGhlbmF0ZVJlZ2V4LCAnLSQmJykudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcDEsXG4gICAgICAgICAgICAgIHN0eWxlczogcDIsXG4gICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgaWYgKHVuaXRsZXNzW2tleV0gIT09IDEgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JztcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBjb250ZW50VmFsdWVQYXR0ZXJuID0gLyh2YXJ8YXR0cnxjb3VudGVycz98dXJsfCgoKHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsKSl8Y29uaWMpLWdyYWRpZW50KVxcKHwobm8tKT8ob3BlbnxjbG9zZSktcXVvdGUvO1xuICB2YXIgY29udGVudFZhbHVlcyA9IFsnbm9ybWFsJywgJ25vbmUnLCAnaW5pdGlhbCcsICdpbmhlcml0JywgJ3Vuc2V0J107XG4gIHZhciBvbGRQcm9jZXNzU3R5bGVWYWx1ZSA9IHByb2Nlc3NTdHlsZVZhbHVlO1xuICB2YXIgbXNQYXR0ZXJuID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuICB2YXIgaHlwaGVuYXRlZENhY2hlID0ge307XG5cbiAgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCBjb250ZW50VmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSAmJiAhY29udGVudFZhbHVlUGF0dGVybi50ZXN0KHZhbHVlKSAmJiAodmFsdWUuY2hhckF0KDApICE9PSB2YWx1ZS5jaGFyQXQodmFsdWUubGVuZ3RoIC0gMSkgfHwgdmFsdWUuY2hhckF0KDApICE9PSAnXCInICYmIHZhbHVlLmNoYXJBdCgwKSAhPT0gXCInXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBzZWVtIHRvIGJlIHVzaW5nIGEgdmFsdWUgZm9yICdjb250ZW50JyB3aXRob3V0IHF1b3RlcywgdHJ5IHJlcGxhY2luZyBpdCB3aXRoIGBjb250ZW50OiAnXFxcIlwiICsgdmFsdWUgKyBcIlxcXCInYFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvY2Vzc2VkID0gb2xkUHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSk7XG5cbiAgICBpZiAocHJvY2Vzc2VkICE9PSAnJyAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIGtleS5pbmRleE9mKCctJykgIT09IC0xICYmIGh5cGhlbmF0ZWRDYWNoZVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGh5cGhlbmF0ZWRDYWNoZVtrZXldID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJVc2luZyBrZWJhYi1jYXNlIGZvciBjc3MgcHJvcGVydGllcyBpbiBvYmplY3RzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiBcIiArIGtleS5yZXBsYWNlKG1zUGF0dGVybiwgJ21zLScpLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKHN0ciwgX2NoYXIpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFyLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9KSArIFwiP1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9O1xufVxuXG52YXIgbm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UgPSAnQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJyArICdAZW1vdGlvbi9iYWJlbC1wbHVnaW4sIHRoZSBzd2MgRW1vdGlvbiBwbHVnaW4sIG9yIGFub3RoZXIgRW1vdGlvbi1hd2FyZSAnICsgJ2NvbXBpbGVyIHRyYW5zZm9ybS4nO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaW50ZXJwb2xhdGlvbi5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLnRvU3RyaW5nKCkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnBvbGF0aW9uO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZTogaW50ZXJwb2xhdGlvbi5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBpbnRlcnBvbGF0aW9uLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVycG9sYXRpb24ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBpbnRlcnBvbGF0aW9uLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gaW50ZXJwb2xhdGlvbi5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24ubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0eWxlcyArPSBpbnRlcnBvbGF0aW9uLm1hcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICBpZiAobWVyZ2VkUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0N1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgY3Vyc29yID0gcHJldmlvdXNDdXJzb3I7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Z1bmN0aW9ucyB0aGF0IGFyZSBpbnRlcnBvbGF0ZWQgaW4gY3NzIGNhbGxzIHdpbGwgYmUgc3RyaW5naWZpZWQuXFxuJyArICdJZiB5b3Ugd2FudCB0byBoYXZlIGEgY3NzIGNhbGwgYmFzZWQgb24gcHJvcHMsIGNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNzcyBjYWxsIGxpa2UgdGhpc1xcbicgKyAnbGV0IGR5bmFtaWNTdHlsZSA9IChwcm9wcykgPT4gY3NzYGNvbG9yOiAke3Byb3BzLmNvbG9yfWBcXG4nICsgJ0l0IGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgd2l0aCBwcm9wcyBvciBpbnRlcnBvbGF0ZWQgaW4gYSBzdHlsZWQgY2FsbCBsaWtlIHRoaXNcXG4nICsgXCJsZXQgU29tZUNvbXBvbmVudCA9IHN0eWxlZCgnZGl2JylgJHtkeW5hbWljU3R5bGV9YFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gW107XG4gICAgICAgIHZhciByZXBsYWNlZCA9IGludGVycG9sYXRpb24ucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgZmFrZVZhck5hbWUgPSBcImFuaW1hdGlvblwiICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgICAgbWF0Y2hlZC5wdXNoKFwiY29uc3QgXCIgKyBmYWtlVmFyTmFtZSArIFwiID0ga2V5ZnJhbWVzYFwiICsgcDIucmVwbGFjZSgvXkBrZXlmcmFtZXMgYW5pbWF0aW9uLVxcdysvLCAnJykgKyBcImBcIik7XG4gICAgICAgICAgcmV0dXJuIFwiJHtcIiArIGZha2VWYXJOYW1lICsgXCJ9XCI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2BrZXlmcmFtZXNgIG91dHB1dCBnb3QgaW50ZXJwb2xhdGVkIGludG8gcGxhaW4gc3RyaW5nLCBwbGVhc2Ugd3JhcCBpdCB3aXRoIGBjc3NgLlxcblxcbicgKyAnSW5zdGVhZCBvZiBkb2luZyB0aGlzOlxcblxcbicgKyBbXS5jb25jYXQobWF0Y2hlZCwgW1wiYFwiICsgcmVwbGFjZWQgKyBcImBcIl0pLmpvaW4oJ1xcbicpICsgJ1xcblxcbllvdSBzaG91bGQgd3JhcCBpdCB3aXRoIGBjc3NgIGxpa2UgdGhpczpcXG5cXG4nICsgKFwiY3NzYFwiICsgcmVwbGFjZWQgKyBcImBcIikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIGlmIChyZWdpc3RlcmVkID09IG51bGwpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2ludGVycG9sYXRpb25dO1xuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgPyBjYWNoZWQgOiBpbnRlcnBvbGF0aW9uO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmopIHtcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9ialtpXSkgKyBcIjtcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2tleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtfa2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIHJlZ2lzdGVyZWRbdmFsdWVdICsgXCJ9XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShfa2V5LCB2YWx1ZSkgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF9rZXkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycgJiYgKHJlZ2lzdGVyZWQgPT0gbnVsbCB8fCByZWdpc3RlcmVkW3ZhbHVlWzBdXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB2YWx1ZS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWVbX2ldKSkge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChfa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIF9rZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7XFxue10rKVxccyooO3wkKS9nO1xudmFyIHNvdXJjZU1hcFBhdHRlcm47XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNvdXJjZU1hcFBhdHRlcm4gPSAvXFwvXFwqI1xcc3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247XFxTK1xccytcXCpcXC8vZztcbn0gLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbnZhciBzZXJpYWxpemVTdHlsZXMgPSBmdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgfVxuXG4gICAgc3R5bGVzICs9IHN0cmluZ3NbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzICs9IHN0cmluZ3NbaV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHNvdXJjZU1hcDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHN0eWxlcyA9IHN0eWxlcy5yZXBsYWNlKHNvdXJjZU1hcFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgc291cmNlTWFwID0gbWF0Y2g7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gIH0gLy8gdXNpbmcgYSBnbG9iYWwgcmVnZXggd2l0aCAuZXhlYyBpcyBzdGF0ZWZ1bCBzbyBsYXN0SW5kZXggaGFzIHRvIGJlIHJlc2V0IGVhY2ggdGltZVxuXG5cbiAgbGFiZWxQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBpZGVudGlmaWVyTmFtZSA9ICcnO1xuICB2YXIgbWF0Y2g7IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWI4MDljMmNmMjk0OTgwMGEwZjYxZmI1XG5cbiAgd2hpbGUgKChtYXRjaCA9IGxhYmVsUGF0dGVybi5leGVjKHN0eWxlcykpICE9PSBudWxsKSB7XG4gICAgaWRlbnRpZmllck5hbWUgKz0gJy0nICsgLy8gJEZsb3dGaXhNZSB3ZSBrbm93IGl0J3Mgbm90IG51bGxcbiAgICBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFNlcmlhbGl6ZWRTdHlsZXMgdHlwZSBkb2Vzbid0IGhhdmUgdG9TdHJpbmcgcHJvcGVydHkgKGFuZCB3ZSBkb24ndCB3YW50IHRvIGFkZCBpdClcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHN0eWxlczogc3R5bGVzLFxuICAgICAgbWFwOiBzb3VyY2VNYXAsXG4gICAgICBuZXh0OiBjdXJzb3IsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufTtcblxuZXhwb3J0IHsgc2VyaWFsaXplU3R5bGVzIH07XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbnZhciBzeW5jRmFsbGJhY2sgPSBmdW5jdGlvbiBzeW5jRmFsbGJhY2soY3JlYXRlKSB7XG4gIHJldHVybiBjcmVhdGUoKTtcbn07XG5cbnZhciB1c2VJbnNlcnRpb25FZmZlY3QgPSBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA/IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddIDogZmFsc2U7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayA9ICB1c2VJbnNlcnRpb25FZmZlY3QgfHwgc3luY0ZhbGxiYWNrO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCB1c2VMYXlvdXRFZmZlY3Q7XG5cbmV4cG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayB9O1xuIiwidmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnO1xuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gIHZhciByYXdDbGFzc05hbWUgPSAnJztcbiAgY2xhc3NOYW1lcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGlmIChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSArIFwiO1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgcmVnaXN0ZXJTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmICggLy8gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSByZWdpc3RlcmVkIGNhY2hlIGlmIHRoZVxuICAvLyBjbGFzcyBuYW1lIGNvdWxkIGJlIHVzZWQgZnVydGhlciBkb3duXG4gIC8vIHRoZSB0cmVlIGJ1dCBpZiBpdCdzIGEgc3RyaW5nIHRhZywgd2Uga25vdyBpdCB3b24ndFxuICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGFkZCBpdCB0byByZWdpc3RlcmVkIGNhY2hlLlxuICAvLyB0aGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBzaW5jZSB3ZSBjYW4gYXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgc3R5bGUgc3RyaW5nXG4gIChpc1N0cmluZ1RhZyA9PT0gZmFsc2UgfHwgLy8gd2UgbmVlZCB0byBhbHdheXMgc3RvcmUgaXQgaWYgd2UncmUgaW4gY29tcGF0IG1vZGUgYW5kXG4gIC8vIGluIG5vZGUgc2luY2UgZW1vdGlvbi1zZXJ2ZXIgcmVsaWVzIG9uIHdoZXRoZXIgYSBzdHlsZSBpcyBpblxuICAvLyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBrbm93IHdoZXRoZXIgYSBzdHlsZSBpcyBnbG9iYWwgb3Igbm90XG4gIC8vIGFsc28sIG5vdGUgdGhhdCB0aGlzIGNoZWNrIHdpbGwgYmUgZGVhZCBjb2RlIGVsaW1pbmF0ZWQgaW4gdGhlIGJyb3dzZXJcbiAgaXNCcm93c2VyID09PSBmYWxzZSApICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cbn07XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIHZhciBtYXliZVN0eWxlcyA9IGNhY2hlLmluc2VydChzZXJpYWxpemVkID09PSBjdXJyZW50ID8gXCIuXCIgKyBjbGFzc05hbWUgOiAnJywgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMgfTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcblxudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMGgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6XCJcbn0pLCAnQWRkQm94Jyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcblxudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk0yMCA0SDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxMHYtMkg0di02aDE4VjZjMC0xLjExLS44OS0yLTItMnptMCA0SDRWNmgxNnYyem00IDl2MmgtM3YzaC0ydi0zaC0zdi0yaDN2LTNoMnYzaDN6XCJcbn0pLCAnQWRkQ2FyZCcpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG5cbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcblxudmFyIF9kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS01IDE0SDd2LTJoN3Yyem0zLTRIN3YtMmgxMHYyem0wLTRIN1Y3aDEwdjJ6XCJcbn0pLCAnQXJ0aWNsZScpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG5cbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcblxudmFyIF9kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKFsvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6XCJcbn0sIFwiMFwiKSwgLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTIwIDJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0wIDEwLTIuNS0xLjVMMTUgMTJWNGg1djh6XCJcbn0sIFwiMVwiKV0sICdDb2xsZWN0aW9uc0Jvb2ttYXJrJyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcblxudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk0xNiAxSDRjLTEuMSAwLTIgLjktMiAydjE0aDJWM2gxMlYxem0zIDRIOGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxMWMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE2SDhWN2gxMXYxNHpcIlxufSksICdDb250ZW50Q29weScpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG5cbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcblxudmFyIF9kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyelwiXG59KSwgJ0NyZWRpdENhcmQnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnpNMTkgNGgtMy41bC0xLTFoLTVsLTEgMUg1djJoMTRWNHpcIlxufSksICdEZWxldGUnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnptMi40Ni03LjEyIDEuNDEtMS40MUwxMiAxMi41OWwyLjEyLTIuMTIgMS40MSAxLjQxTDEzLjQxIDE0bDIuMTIgMi4xMi0xLjQxIDEuNDFMMTIgMTUuNDFsLTIuMTIgMi4xMi0xLjQxLTEuNDFMMTAuNTkgMTRsLTIuMTMtMi4xMnpNMTUuNSA0bC0xLTFoLTVsLTEgMUg1djJoMTRWNHpcIlxufSksICdEZWxldGVGb3JldmVyJyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcblxudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIm0xOCA3LTEuNDEtMS40MS02LjM0IDYuMzQgMS40MSAxLjQxTDE4IDd6bTQuMjQtMS40MUwxMS42NiAxNi4xNyA3LjQ4IDEybC0xLjQxIDEuNDFMMTEuNjYgMTlsMTItMTItMS40Mi0xLjQxek0uNDEgMTMuNDEgNiAxOWwxLjQxLTEuNDFMMS44MyAxMiAuNDEgMTMuNDF6XCJcbn0pLCAnRG9uZUFsbCcpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBSZWFjdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG5cbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcblxuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKSB7IGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDsgdmFyIGNhY2hlQmFiZWxJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTsgdmFyIGNhY2hlTm9kZUludGVyb3AgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChub2RlSW50ZXJvcCkgeyByZXR1cm4gbm9kZUludGVyb3AgPyBjYWNoZU5vZGVJbnRlcm9wIDogY2FjaGVCYWJlbEludGVyb3A7IH0pKG5vZGVJbnRlcm9wKTsgfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmosIG5vZGVJbnRlcm9wKSB7IGlmICghbm9kZUludGVyb3AgJiYgb2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgeyByZXR1cm4geyBkZWZhdWx0OiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApOyBpZiAoY2FjaGUgJiYgY2FjaGUuaGFzKG9iaikpIHsgcmV0dXJuIGNhY2hlLmdldChvYmopOyB9IHZhciBuZXdPYmogPSB7fTsgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChrZXkgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7IGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTsgfSBlbHNlIHsgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IH0gbmV3T2JqLmRlZmF1bHQgPSBvYmo7IGlmIChjYWNoZSkgeyBjYWNoZS5zZXQob2JqLCBuZXdPYmopOyB9IHJldHVybiBuZXdPYmo7IH1cblxudmFyIF9kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTIgMS4yN2ExMSAxMSAwIDAwLTMuNDggMjEuNDZjLjU1LjA5LjczLS4yOC43My0uNTV2LTEuODRjLTMuMDMuNjQtMy42Ny0xLjQ2LTMuNjctMS40Ni0uNTUtMS4yOS0xLjI4LTEuNjUtMS4yOC0xLjY1LS45Mi0uNjUuMS0uNjUuMS0uNjUgMS4xIDAgMS43MyAxLjEgMS43MyAxLjEuOTIgMS42NSAyLjU3IDEuMiAzLjIxLjkyYTIgMiAwIDAxLjY0LTEuNDdjLTIuNDctLjI3LTUuMDQtMS4xOS01LjA0LTUuNSAwLTEuMS40Ni0yLjEgMS4yLTIuODRhMy43NiAzLjc2IDAgMDEwLTIuOTNzLjkxLS4yOCAzLjExIDEuMWMxLjgtLjQ5IDMuNy0uNDkgNS41IDAgMi4xLTEuMzggMy4wMi0xLjEgMy4wMi0xLjFhMy43NiAzLjc2IDAgMDEwIDIuOTNjLjgzLjc0IDEuMiAxLjc0IDEuMiAyLjk0IDAgNC4yMS0yLjU3IDUuMTMtNS4wNCA1LjQuNDUuMzcuODIuOTIuODIgMi4wMnYzLjAzYzAgLjI3LjEuNjQuNzMuNTVBMTEgMTEgMCAwMDEyIDEuMjdcIlxufSksICdHaXRIdWInKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEwIDIwdi02aDR2Nmg1di04aDNMMTIgMyAyIDEyaDN2OHpcIlxufSksICdIb21lJyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcblxudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMXMtMi40Ljg0LTIuODIgMkg1Yy0uMTQgMC0uMjcuMDEtLjQuMDQtLjM5LjA4LS43NC4yOC0xLjAxLjU1LS4xOC4xOC0uMzMuNC0uNDMuNjQtLjEuMjMtLjE2LjQ5LS4xNi43N3YxNGMwIC4yNy4wNi41NC4xNi43OHMuMjUuNDUuNDMuNjRjLjI3LjI3LjYyLjQ3IDEuMDEuNTUuMTMuMDIuMjYuMDMuNC4wM2gxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOCAxMS4xNy0xLjQxIDEuNDJMNiAxMmwzLjU5LTMuNTlMMTEgOS44MyA4LjgzIDEyIDExIDE0LjE3em0xLTkuOTJjLS40MSAwLS43NS0uMzQtLjc1LS43NXMuMzQtLjc1Ljc1LS43NS43NS4zNC43NS43NS0uMzQuNzUtLjc1Ljc1em0yLjQxIDExLjM0TDEzIDE0LjE3IDE1LjE3IDEyIDEzIDkuODNsMS40MS0xLjQyTDE4IDEybC0zLjU5IDMuNTl6XCJcbn0pLCAnSW50ZWdyYXRpb25JbnN0cnVjdGlvbnMnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTExIDcgOS42IDguNGwyLjYgMi42SDJ2MmgxMC4ybC0yLjYgMi42TDExIDE3bDUtNS01LTV6bTkgMTJoLTh2Mmg4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJoLTh2Mmg4djE0elwiXG59KSwgJ0xvZ2luJyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcblxudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIm0xNyA3LTEuNDEgMS40MUwxOC4xNyAxMUg4djJoMTAuMTdsLTIuNTggMi41OEwxNyAxN2w1LTV6TTQgNWg4VjNINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmg4di0ySDRWNXpcIlxufSksICdMb2dvdXQnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0elwiXG59KSwgJ1NhdmUnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlscy5jcmVhdGVTdmdJY29uO1xuICB9XG59KTtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoXCJAbXVpL21hdGVyaWFsL3V0aWxzXCIpOyIsImNvbnN0IGNvbW1vbiA9IHtcbiAgYmxhY2s6ICcjMDAwJyxcbiAgd2hpdGU6ICcjZmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1vbjsiLCJjb25zdCBncmV5ID0ge1xuICA1MDogJyNmYWZhZmEnLFxuICAxMDA6ICcjZjVmNWY1JyxcbiAgMjAwOiAnI2VlZWVlZScsXG4gIDMwMDogJyNlMGUwZTAnLFxuICA0MDA6ICcjYmRiZGJkJyxcbiAgNTAwOiAnIzllOWU5ZScsXG4gIDYwMDogJyM3NTc1NzUnLFxuICA3MDA6ICcjNjE2MTYxJyxcbiAgODAwOiAnIzQyNDI0MicsXG4gIDkwMDogJyMyMTIxMjEnLFxuICBBMTAwOiAnI2Y1ZjVmNScsXG4gIEEyMDA6ICcjZWVlZWVlJyxcbiAgQTQwMDogJyNiZGJkYmQnLFxuICBBNzAwOiAnIzYxNjE2MSdcbn07XG5leHBvcnQgZGVmYXVsdCBncmV5OyIsImNvbnN0IHB1cnBsZSA9IHtcbiAgNTA6ICcjZjNlNWY1JyxcbiAgMTAwOiAnI2UxYmVlNycsXG4gIDIwMDogJyNjZTkzZDgnLFxuICAzMDA6ICcjYmE2OGM4JyxcbiAgNDAwOiAnI2FiNDdiYycsXG4gIDUwMDogJyM5YzI3YjAnLFxuICA2MDA6ICcjOGUyNGFhJyxcbiAgNzAwOiAnIzdiMWZhMicsXG4gIDgwMDogJyM2YTFiOWEnLFxuICA5MDA6ICcjNGExNDhjJyxcbiAgQTEwMDogJyNlYTgwZmMnLFxuICBBMjAwOiAnI2UwNDBmYicsXG4gIEE0MDA6ICcjZDUwMGY5JyxcbiAgQTcwMDogJyNhYTAwZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgcHVycGxlOyIsImNvbnN0IHJlZCA9IHtcbiAgNTA6ICcjZmZlYmVlJyxcbiAgMTAwOiAnI2ZmY2RkMicsXG4gIDIwMDogJyNlZjlhOWEnLFxuICAzMDA6ICcjZTU3MzczJyxcbiAgNDAwOiAnI2VmNTM1MCcsXG4gIDUwMDogJyNmNDQzMzYnLFxuICA2MDA6ICcjZTUzOTM1JyxcbiAgNzAwOiAnI2QzMmYyZicsXG4gIDgwMDogJyNjNjI4MjgnLFxuICA5MDA6ICcjYjcxYzFjJyxcbiAgQTEwMDogJyNmZjhhODAnLFxuICBBMjAwOiAnI2ZmNTI1MicsXG4gIEE0MDA6ICcjZmYxNzQ0JyxcbiAgQTcwMDogJyNkNTAwMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgcmVkOyIsImNvbnN0IG9yYW5nZSA9IHtcbiAgNTA6ICcjZmZmM2UwJyxcbiAgMTAwOiAnI2ZmZTBiMicsXG4gIDIwMDogJyNmZmNjODAnLFxuICAzMDA6ICcjZmZiNzRkJyxcbiAgNDAwOiAnI2ZmYTcyNicsXG4gIDUwMDogJyNmZjk4MDAnLFxuICA2MDA6ICcjZmI4YzAwJyxcbiAgNzAwOiAnI2Y1N2MwMCcsXG4gIDgwMDogJyNlZjZjMDAnLFxuICA5MDA6ICcjZTY1MTAwJyxcbiAgQTEwMDogJyNmZmQxODAnLFxuICBBMjAwOiAnI2ZmYWI0MCcsXG4gIEE0MDA6ICcjZmY5MTAwJyxcbiAgQTcwMDogJyNmZjZkMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgb3JhbmdlOyIsImNvbnN0IGJsdWUgPSB7XG4gIDUwOiAnI2UzZjJmZCcsXG4gIDEwMDogJyNiYmRlZmInLFxuICAyMDA6ICcjOTBjYWY5JyxcbiAgMzAwOiAnIzY0YjVmNicsXG4gIDQwMDogJyM0MmE1ZjUnLFxuICA1MDA6ICcjMjE5NmYzJyxcbiAgNjAwOiAnIzFlODhlNScsXG4gIDcwMDogJyMxOTc2ZDInLFxuICA4MDA6ICcjMTU2NWMwJyxcbiAgOTAwOiAnIzBkNDdhMScsXG4gIEExMDA6ICcjODJiMWZmJyxcbiAgQTIwMDogJyM0NDhhZmYnLFxuICBBNDAwOiAnIzI5NzlmZicsXG4gIEE3MDA6ICcjMjk2MmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGJsdWU7IiwiY29uc3QgbGlnaHRCbHVlID0ge1xuICA1MDogJyNlMWY1ZmUnLFxuICAxMDA6ICcjYjNlNWZjJyxcbiAgMjAwOiAnIzgxZDRmYScsXG4gIDMwMDogJyM0ZmMzZjcnLFxuICA0MDA6ICcjMjliNmY2JyxcbiAgNTAwOiAnIzAzYTlmNCcsXG4gIDYwMDogJyMwMzliZTUnLFxuICA3MDA6ICcjMDI4OGQxJyxcbiAgODAwOiAnIzAyNzdiZCcsXG4gIDkwMDogJyMwMTU3OWInLFxuICBBMTAwOiAnIzgwZDhmZicsXG4gIEEyMDA6ICcjNDBjNGZmJyxcbiAgQTQwMDogJyMwMGIwZmYnLFxuICBBNzAwOiAnIzAwOTFlYSdcbn07XG5leHBvcnQgZGVmYXVsdCBsaWdodEJsdWU7IiwiY29uc3QgZ3JlZW4gPSB7XG4gIDUwOiAnI2U4ZjVlOScsXG4gIDEwMDogJyNjOGU2YzknLFxuICAyMDA6ICcjYTVkNmE3JyxcbiAgMzAwOiAnIzgxYzc4NCcsXG4gIDQwMDogJyM2NmJiNmEnLFxuICA1MDA6ICcjNGNhZjUwJyxcbiAgNjAwOiAnIzQzYTA0NycsXG4gIDcwMDogJyMzODhlM2MnLFxuICA4MDA6ICcjMmU3ZDMyJyxcbiAgOTAwOiAnIzFiNWUyMCcsXG4gIEExMDA6ICcjYjlmNmNhJyxcbiAgQTIwMDogJyM2OWYwYWUnLFxuICBBNDAwOiAnIzAwZTY3NicsXG4gIEE3MDA6ICcjMDBjODUzJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZWVuOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgeyBmb3JtYXRNdWlFcnJvck1lc3NhZ2UgYXMgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSB9IGZyb20gXCJAbXVpL3V0aWxzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJtb2RlXCIsIFwiY29udHJhc3RUaHJlc2hvbGRcIiwgXCJ0b25hbE9mZnNldFwiXTtcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgZGFya2VuLCBnZXRDb250cmFzdFJhdGlvLCBsaWdodGVuIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGNvbW1vbiBmcm9tICcuLi9jb2xvcnMvY29tbW9uJztcbmltcG9ydCBncmV5IGZyb20gJy4uL2NvbG9ycy9ncmV5JztcbmltcG9ydCBwdXJwbGUgZnJvbSAnLi4vY29sb3JzL3B1cnBsZSc7XG5pbXBvcnQgcmVkIGZyb20gJy4uL2NvbG9ycy9yZWQnO1xuaW1wb3J0IG9yYW5nZSBmcm9tICcuLi9jb2xvcnMvb3JhbmdlJztcbmltcG9ydCBibHVlIGZyb20gJy4uL2NvbG9ycy9ibHVlJztcbmltcG9ydCBsaWdodEJsdWUgZnJvbSAnLi4vY29sb3JzL2xpZ2h0Qmx1ZSc7XG5pbXBvcnQgZ3JlZW4gZnJvbSAnLi4vY29sb3JzL2dyZWVuJztcbmV4cG9ydCBjb25zdCBsaWdodCA9IHtcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSB0ZXh0LlxuICB0ZXh0OiB7XG4gICAgLy8gVGhlIG1vc3QgaW1wb3J0YW50IHRleHQuXG4gICAgcHJpbWFyeTogJ3JnYmEoMCwgMCwgMCwgMC44NyknLFxuICAgIC8vIFNlY29uZGFyeSB0ZXh0LlxuICAgIHNlY29uZGFyeTogJ3JnYmEoMCwgMCwgMCwgMC42KScsXG4gICAgLy8gRGlzYWJsZWQgdGV4dCBoYXZlIGV2ZW4gbG93ZXIgdmlzdWFsIHByb21pbmVuY2UuXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMzgpJ1xuICB9LFxuICAvLyBUaGUgY29sb3IgdXNlZCB0byBkaXZpZGUgZGlmZmVyZW50IGVsZW1lbnRzLlxuICBkaXZpZGVyOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gIC8vIFRoZSBiYWNrZ3JvdW5kIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBzdXJmYWNlcy5cbiAgLy8gQ29uc2lzdGVuY3kgYmV0d2VlbiB0aGVzZSB2YWx1ZXMgaXMgaW1wb3J0YW50LlxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6IGNvbW1vbi53aGl0ZSxcbiAgICBkZWZhdWx0OiBjb21tb24ud2hpdGVcbiAgfSxcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBhY3Rpb24gZWxlbWVudHMuXG4gIGFjdGlvbjoge1xuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBhY3RpdmUgYWN0aW9uIGxpa2UgYW4gaWNvbiBidXR0b24uXG4gICAgYWN0aXZlOiAncmdiYSgwLCAwLCAwLCAwLjU0KScsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGFuIGhvdmVyZWQgYWN0aW9uLlxuICAgIGhvdmVyOiAncmdiYSgwLCAwLCAwLCAwLjA0KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA0LFxuICAgIC8vIFRoZSBjb2xvciBvZiBhIHNlbGVjdGVkIGFjdGlvbi5cbiAgICBzZWxlY3RlZDogJ3JnYmEoMCwgMCwgMCwgMC4wOCknLFxuICAgIHNlbGVjdGVkT3BhY2l0eTogMC4wOCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMjYpJyxcbiAgICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiBhIGRpc2FibGVkIGFjdGlvbi5cbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4xMlxuICB9XG59O1xuZXhwb3J0IGNvbnN0IGRhcmsgPSB7XG4gIHRleHQ6IHtcbiAgICBwcmltYXJ5OiBjb21tb24ud2hpdGUsXG4gICAgc2Vjb25kYXJ5OiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICBkaXNhYmxlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gICAgaWNvbjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSdcbiAgfSxcbiAgZGl2aWRlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6ICcjMTIxMjEyJyxcbiAgICBkZWZhdWx0OiAnIzEyMTIxMidcbiAgfSxcbiAgYWN0aW9uOiB7XG4gICAgYWN0aXZlOiBjb21tb24ud2hpdGUsXG4gICAgaG92ZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpJyxcbiAgICBob3Zlck9wYWNpdHk6IDAuMDgsXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMTYsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyknLFxuICAgIGRpc2FibGVkQmFja2dyb3VuZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGRpc2FibGVkT3BhY2l0eTogMC4zOCxcbiAgICBmb2N1czogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGZvY3VzT3BhY2l0eTogMC4xMixcbiAgICBhY3RpdmF0ZWRPcGFjaXR5OiAwLjI0XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFkZExpZ2h0T3JEYXJrKGludGVudCwgZGlyZWN0aW9uLCBzaGFkZSwgdG9uYWxPZmZzZXQpIHtcbiAgY29uc3QgdG9uYWxPZmZzZXRMaWdodCA9IHRvbmFsT2Zmc2V0LmxpZ2h0IHx8IHRvbmFsT2Zmc2V0O1xuICBjb25zdCB0b25hbE9mZnNldERhcmsgPSB0b25hbE9mZnNldC5kYXJrIHx8IHRvbmFsT2Zmc2V0ICogMS41O1xuXG4gIGlmICghaW50ZW50W2RpcmVjdGlvbl0pIHtcbiAgICBpZiAoaW50ZW50Lmhhc093blByb3BlcnR5KHNoYWRlKSkge1xuICAgICAgaW50ZW50W2RpcmVjdGlvbl0gPSBpbnRlbnRbc2hhZGVdO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGlnaHQnKSB7XG4gICAgICBpbnRlbnQubGlnaHQgPSBsaWdodGVuKGludGVudC5tYWluLCB0b25hbE9mZnNldExpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2RhcmsnKSB7XG4gICAgICBpbnRlbnQuZGFyayA9IGRhcmtlbihpbnRlbnQubWFpbiwgdG9uYWxPZmZzZXREYXJrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFByaW1hcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBibHVlWzIwMF0sXG4gICAgICBsaWdodDogYmx1ZVs1MF0sXG4gICAgICBkYXJrOiBibHVlWzQwMF1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBibHVlWzcwMF0sXG4gICAgbGlnaHQ6IGJsdWVbNDAwXSxcbiAgICBkYXJrOiBibHVlWzgwMF1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFNlY29uZGFyeShtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IHB1cnBsZVsyMDBdLFxuICAgICAgbGlnaHQ6IHB1cnBsZVs1MF0sXG4gICAgICBkYXJrOiBwdXJwbGVbNDAwXVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1haW46IHB1cnBsZVs1MDBdLFxuICAgIGxpZ2h0OiBwdXJwbGVbMzAwXSxcbiAgICBkYXJrOiBwdXJwbGVbNzAwXVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0RXJyb3IobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiByZWRbNTAwXSxcbiAgICAgIGxpZ2h0OiByZWRbMzAwXSxcbiAgICAgIGRhcms6IHJlZFs3MDBdXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWFpbjogcmVkWzcwMF0sXG4gICAgbGlnaHQ6IHJlZFs0MDBdLFxuICAgIGRhcms6IHJlZFs4MDBdXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRJbmZvKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogbGlnaHRCbHVlWzQwMF0sXG4gICAgICBsaWdodDogbGlnaHRCbHVlWzMwMF0sXG4gICAgICBkYXJrOiBsaWdodEJsdWVbNzAwXVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1haW46IGxpZ2h0Qmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBsaWdodEJsdWVbNTAwXSxcbiAgICBkYXJrOiBsaWdodEJsdWVbOTAwXVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0U3VjY2Vzcyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGdyZWVuWzQwMF0sXG4gICAgICBsaWdodDogZ3JlZW5bMzAwXSxcbiAgICAgIGRhcms6IGdyZWVuWzcwMF1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBncmVlbls4MDBdLFxuICAgIGxpZ2h0OiBncmVlbls1MDBdLFxuICAgIGRhcms6IGdyZWVuWzkwMF1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFdhcm5pbmcobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBvcmFuZ2VbNDAwXSxcbiAgICAgIGxpZ2h0OiBvcmFuZ2VbMzAwXSxcbiAgICAgIGRhcms6IG9yYW5nZVs3MDBdXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWFpbjogJyNlZDZjMDInLFxuICAgIC8vIGNsb3Nlc3QgdG8gb3JhbmdlWzgwMF0gdGhhdCBwYXNzIDM6MS5cbiAgICBsaWdodDogb3JhbmdlWzUwMF0sXG4gICAgZGFyazogb3JhbmdlWzkwMF1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUGFsZXR0ZShwYWxldHRlKSB7XG4gIGNvbnN0IHtcbiAgICBtb2RlID0gJ2xpZ2h0JyxcbiAgICBjb250cmFzdFRocmVzaG9sZCA9IDMsXG4gICAgdG9uYWxPZmZzZXQgPSAwLjJcbiAgfSA9IHBhbGV0dGUsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocGFsZXR0ZSwgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBwcmltYXJ5ID0gcGFsZXR0ZS5wcmltYXJ5IHx8IGdldERlZmF1bHRQcmltYXJ5KG1vZGUpO1xuICBjb25zdCBzZWNvbmRhcnkgPSBwYWxldHRlLnNlY29uZGFyeSB8fCBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUpO1xuICBjb25zdCBlcnJvciA9IHBhbGV0dGUuZXJyb3IgfHwgZ2V0RGVmYXVsdEVycm9yKG1vZGUpO1xuICBjb25zdCBpbmZvID0gcGFsZXR0ZS5pbmZvIHx8IGdldERlZmF1bHRJbmZvKG1vZGUpO1xuICBjb25zdCBzdWNjZXNzID0gcGFsZXR0ZS5zdWNjZXNzIHx8IGdldERlZmF1bHRTdWNjZXNzKG1vZGUpO1xuICBjb25zdCB3YXJuaW5nID0gcGFsZXR0ZS53YXJuaW5nIHx8IGdldERlZmF1bHRXYXJuaW5nKG1vZGUpOyAvLyBVc2UgdGhlIHNhbWUgbG9naWMgYXNcbiAgLy8gQm9vdHN0cmFwOiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi8xZDZlMzcxMGRkNDQ3ZGUxYTIwMGYyOWU4ZmE1MjFmOGEwOTA4ZjcwL3Njc3MvX2Z1bmN0aW9ucy5zY3NzI0w1OVxuICAvLyBhbmQgbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIgaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIvYmxvYi9hYzQ2Yjg4NjNjNGRhYjlmYzIyYzRjNjYyZGM2YmQxYjY1ZGQ2NTJmL3BhY2thZ2VzL21kYy10aGVtZS9fZnVuY3Rpb25zLnNjc3MjTDU0XG5cbiAgZnVuY3Rpb24gZ2V0Q29udHJhc3RUZXh0KGJhY2tncm91bmQpIHtcbiAgICBjb25zdCBjb250cmFzdFRleHQgPSBnZXRDb250cmFzdFJhdGlvKGJhY2tncm91bmQsIGRhcmsudGV4dC5wcmltYXJ5KSA+PSBjb250cmFzdFRocmVzaG9sZCA/IGRhcmsudGV4dC5wcmltYXJ5IDogbGlnaHQudGV4dC5wcmltYXJ5O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGNvbnRyYXN0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBjb250cmFzdFRleHQpO1xuXG4gICAgICBpZiAoY29udHJhc3QgPCAzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBjb250cmFzdCByYXRpbyBvZiAke2NvbnRyYXN0fToxIGZvciAke2NvbnRyYXN0VGV4dH0gb24gJHtiYWNrZ3JvdW5kfWAsICdmYWxscyBiZWxvdyB0aGUgV0NBRyByZWNvbW1lbmRlZCBhYnNvbHV0ZSBtaW5pbXVtIGNvbnRyYXN0IHJhdGlvIG9mIDM6MS4nLCAnaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jdmlzdWFsLWF1ZGlvLWNvbnRyYXN0LWNvbnRyYXN0J10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb250cmFzdFRleHQ7XG4gIH1cblxuICBjb25zdCBhdWdtZW50Q29sb3IgPSAoe1xuICAgIGNvbG9yLFxuICAgIG5hbWUsXG4gICAgbWFpblNoYWRlID0gNTAwLFxuICAgIGxpZ2h0U2hhZGUgPSAzMDAsXG4gICAgZGFya1NoYWRlID0gNzAwXG4gIH0pID0+IHtcbiAgICBjb2xvciA9IF9leHRlbmRzKHt9LCBjb2xvcik7XG5cbiAgICBpZiAoIWNvbG9yLm1haW4gJiYgY29sb3JbbWFpblNoYWRlXSkge1xuICAgICAgY29sb3IubWFpbiA9IGNvbG9yW21haW5TaGFkZV07XG4gICAgfVxuXG4gICAgaWYgKCFjb2xvci5oYXNPd25Qcm9wZXJ0eSgnbWFpbicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIGNvbG9yJHtuYW1lID8gYCAoJHtuYW1lfSlgIDogJyd9IHByb3ZpZGVkIHRvIGF1Z21lbnRDb2xvcihjb2xvcikgaXMgaW52YWxpZC5cblRoZSBjb2xvciBvYmplY3QgbmVlZHMgdG8gaGF2ZSBhIFxcYG1haW5cXGAgcHJvcGVydHkgb3IgYSBcXGAke21haW5TaGFkZX1cXGAgcHJvcGVydHkuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTEsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgbWFpblNoYWRlKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2xvci5tYWluICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5cXGBjb2xvci5tYWluXFxgIHNob3VsZCBiZSBhIHN0cmluZywgYnV0IFxcYCR7SlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbil9XFxgIHdhcyBwcm92aWRlZCBpbnN0ZWFkLlxuXG5EaWQgeW91IGludGVuZCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2hlcz9cblxuaW1wb3J0IHsgZ3JlZW4gfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9jb2xvcnNcIjtcblxuY29uc3QgdGhlbWUxID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IGdyZWVuLFxufSB9KTtcblxuY29uc3QgdGhlbWUyID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IHsgbWFpbjogZ3JlZW5bNTAwXSB9LFxufSB9KTtgIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMiwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBKU09OLnN0cmluZ2lmeShjb2xvci5tYWluKSkpO1xuICAgIH1cblxuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnbGlnaHQnLCBsaWdodFNoYWRlLCB0b25hbE9mZnNldCk7XG4gICAgYWRkTGlnaHRPckRhcmsoY29sb3IsICdkYXJrJywgZGFya1NoYWRlLCB0b25hbE9mZnNldCk7XG5cbiAgICBpZiAoIWNvbG9yLmNvbnRyYXN0VGV4dCkge1xuICAgICAgY29sb3IuY29udHJhc3RUZXh0ID0gZ2V0Q29udHJhc3RUZXh0KGNvbG9yLm1haW4pO1xuICAgIH1cblxuICAgIHJldHVybiBjb2xvcjtcbiAgfTtcblxuICBjb25zdCBtb2RlcyA9IHtcbiAgICBkYXJrLFxuICAgIGxpZ2h0XG4gIH07XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIW1vZGVzW21vZGVdKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSBwYWxldHRlIG1vZGUgXFxgJHttb2RlfVxcYCBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBhbGV0dGVPdXRwdXQgPSBkZWVwbWVyZ2UoX2V4dGVuZHMoe1xuICAgIC8vIEEgY29sbGVjdGlvbiBvZiBjb21tb24gY29sb3JzLlxuICAgIGNvbW1vbjogX2V4dGVuZHMoe30sIGNvbW1vbiksXG4gICAgLy8gcHJldmVudCBtdXRhYmxlIG9iamVjdC5cbiAgICAvLyBUaGUgcGFsZXR0ZSBtb2RlLCBjYW4gYmUgbGlnaHQgb3IgZGFyay5cbiAgICBtb2RlLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgcHJpbWFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBwcmltYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHByaW1hcnksXG4gICAgICBuYW1lOiAncHJpbWFyeSdcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHNlY29uZGFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBzZWNvbmRhcnk6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc2Vjb25kYXJ5LFxuICAgICAgbmFtZTogJ3NlY29uZGFyeScsXG4gICAgICBtYWluU2hhZGU6ICdBNDAwJyxcbiAgICAgIGxpZ2h0U2hhZGU6ICdBMjAwJyxcbiAgICAgIGRhcmtTaGFkZTogJ0E3MDAnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBpbnRlcmZhY2UgZWxlbWVudHMgdGhhdCB0aGUgdXNlciBzaG91bGQgYmUgbWFkZSBhd2FyZSBvZi5cbiAgICBlcnJvcjogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBlcnJvcixcbiAgICAgIG5hbWU6ICdlcnJvcidcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHBvdGVudGlhbGx5IGRhbmdlcm91cyBhY3Rpb25zIG9yIGltcG9ydGFudCBtZXNzYWdlcy5cbiAgICB3YXJuaW5nOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHdhcm5pbmcsXG4gICAgICBuYW1lOiAnd2FybmluZydcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcHJlc2VudCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciB0aGF0IGlzIG5ldXRyYWwgYW5kIG5vdCBuZWNlc3NhcmlseSBpbXBvcnRhbnQuXG4gICAgaW5mbzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBpbmZvLFxuICAgICAgbmFtZTogJ2luZm8nXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gYWN0aW9uIHRoYXQgdXNlciB0cmlnZ2VyZWQuXG4gICAgc3VjY2VzczogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBzdWNjZXNzLFxuICAgICAgbmFtZTogJ3N1Y2Nlc3MnXG4gICAgfSksXG4gICAgLy8gVGhlIGdyZXkgY29sb3JzLlxuICAgIGdyZXksXG4gICAgLy8gVXNlZCBieSBgZ2V0Q29udHJhc3RUZXh0KClgIHRvIG1heGltaXplIHRoZSBjb250cmFzdCBiZXR3ZWVuXG4gICAgLy8gdGhlIGJhY2tncm91bmQgYW5kIHRoZSB0ZXh0LlxuICAgIGNvbnRyYXN0VGhyZXNob2xkLFxuICAgIC8vIFRha2VzIGEgYmFja2dyb3VuZCBjb2xvciBhbmQgcmV0dXJucyB0aGUgdGV4dCBjb2xvciB0aGF0IG1heGltaXplcyB0aGUgY29udHJhc3QuXG4gICAgZ2V0Q29udHJhc3RUZXh0LFxuICAgIC8vIEdlbmVyYXRlIGEgcmljaCBjb2xvciBvYmplY3QuXG4gICAgYXVnbWVudENvbG9yLFxuICAgIC8vIFVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBiZWxvdyB0byBzaGlmdCBhIGNvbG9yJ3MgbHVtaW5hbmNlIGJ5IGFwcHJveGltYXRlbHlcbiAgICAvLyB0d28gaW5kZXhlcyB3aXRoaW4gaXRzIHRvbmFsIHBhbGV0dGUuXG4gICAgLy8gRS5nLiwgc2hpZnQgZnJvbSBSZWQgNTAwIHRvIFJlZCAzMDAgb3IgUmVkIDcwMC5cbiAgICB0b25hbE9mZnNldFxuICB9LCBtb2Rlc1ttb2RlXSksIG90aGVyKTtcbiAgcmV0dXJuIHBhbGV0dGVPdXRwdXQ7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImZvbnRGYW1pbHlcIiwgXCJmb250U2l6ZVwiLCBcImZvbnRXZWlnaHRMaWdodFwiLCBcImZvbnRXZWlnaHRSZWd1bGFyXCIsIFwiZm9udFdlaWdodE1lZGl1bVwiLCBcImZvbnRXZWlnaHRCb2xkXCIsIFwiaHRtbEZvbnRTaXplXCIsIFwiYWxsVmFyaWFudHNcIiwgXCJweFRvUmVtXCJdO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5cbmZ1bmN0aW9uIHJvdW5kKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMWU1KSAvIDFlNTtcbn1cblxuY29uc3QgY2FzZUFsbENhcHMgPSB7XG4gIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG59O1xuY29uc3QgZGVmYXVsdEZvbnRGYW1pbHkgPSAnXCJSb2JvdG9cIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBzYW5zLXNlcmlmJztcbi8qKlxuICogQHNlZSBAbGlua3todHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi90eXBvZ3JhcGh5L3RoZS10eXBlLXN5c3RlbS5odG1sfVxuICogQHNlZSBAbGlua3todHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi90eXBvZ3JhcGh5L3VuZGVyc3RhbmRpbmctdHlwb2dyYXBoeS5odG1sfVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeSkge1xuICBjb25zdCBfcmVmID0gdHlwZW9mIHR5cG9ncmFwaHkgPT09ICdmdW5jdGlvbicgPyB0eXBvZ3JhcGh5KHBhbGV0dGUpIDogdHlwb2dyYXBoeSxcbiAgICAgICAge1xuICAgIGZvbnRGYW1pbHkgPSBkZWZhdWx0Rm9udEZhbWlseSxcbiAgICAvLyBUaGUgZGVmYXVsdCBmb250IHNpemUgb2YgdGhlIE1hdGVyaWFsIFNwZWNpZmljYXRpb24uXG4gICAgZm9udFNpemUgPSAxNCxcbiAgICAvLyBweFxuICAgIGZvbnRXZWlnaHRMaWdodCA9IDMwMCxcbiAgICBmb250V2VpZ2h0UmVndWxhciA9IDQwMCxcbiAgICBmb250V2VpZ2h0TWVkaXVtID0gNTAwLFxuICAgIGZvbnRXZWlnaHRCb2xkID0gNzAwLFxuICAgIC8vIFRlbGwgTVVJIHdoYXQncyB0aGUgZm9udC1zaXplIG9uIHRoZSBodG1sIGVsZW1lbnQuXG4gICAgLy8gMTZweCBpcyB0aGUgZGVmYXVsdCBmb250LXNpemUgdXNlZCBieSBicm93c2Vycy5cbiAgICBodG1sRm9udFNpemUgPSAxNixcbiAgICAvLyBBcHBseSB0aGUgQ1NTIHByb3BlcnRpZXMgdG8gYWxsIHRoZSB2YXJpYW50cy5cbiAgICBhbGxWYXJpYW50cyxcbiAgICBweFRvUmVtOiBweFRvUmVtMlxuICB9ID0gX3JlZixcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBmb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGZvbnRTaXplYCBpcyByZXF1aXJlZCB0byBiZSBhIG51bWJlci4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGh0bWxGb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGh0bWxGb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29lZiA9IGZvbnRTaXplIC8gMTQ7XG5cbiAgY29uc3QgcHhUb1JlbSA9IHB4VG9SZW0yIHx8IChzaXplID0+IGAke3NpemUgLyBodG1sRm9udFNpemUgKiBjb2VmfXJlbWApO1xuXG4gIGNvbnN0IGJ1aWxkVmFyaWFudCA9IChmb250V2VpZ2h0LCBzaXplLCBsaW5lSGVpZ2h0LCBsZXR0ZXJTcGFjaW5nLCBjYXNpbmcpID0+IF9leHRlbmRzKHtcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRXZWlnaHQsXG4gICAgZm9udFNpemU6IHB4VG9SZW0oc2l6ZSksXG4gICAgLy8gVW5pdGxlc3MgZm9sbG93aW5nIGh0dHBzOi8vbWV5ZXJ3ZWIuY29tL2VyaWMvdGhvdWdodHMvMjAwNi8wMi8wOC91bml0bGVzcy1saW5lLWhlaWdodHMvXG4gICAgbGluZUhlaWdodFxuICB9LCBmb250RmFtaWx5ID09PSBkZWZhdWx0Rm9udEZhbWlseSA/IHtcbiAgICBsZXR0ZXJTcGFjaW5nOiBgJHtyb3VuZChsZXR0ZXJTcGFjaW5nIC8gc2l6ZSl9ZW1gXG4gIH0gOiB7fSwgY2FzaW5nLCBhbGxWYXJpYW50cyk7XG5cbiAgY29uc3QgdmFyaWFudHMgPSB7XG4gICAgaDE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TGlnaHQsIDk2LCAxLjE2NywgLTEuNSksXG4gICAgaDI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TGlnaHQsIDYwLCAxLjIsIC0wLjUpLFxuICAgIGgzOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDQ4LCAxLjE2NywgMCksXG4gICAgaDQ6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMzQsIDEuMjM1LCAwLjI1KSxcbiAgICBoNTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAyNCwgMS4zMzQsIDApLFxuICAgIGg2OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMjAsIDEuNiwgMC4xNSksXG4gICAgc3VidGl0bGUxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDE2LCAxLjc1LCAwLjE1KSxcbiAgICBzdWJ0aXRsZTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TWVkaXVtLCAxNCwgMS41NywgMC4xKSxcbiAgICBib2R5MTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS41LCAwLjE1KSxcbiAgICBib2R5MjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNCwgMS40MywgMC4xNSksXG4gICAgYnV0dG9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNzUsIDAuNCwgY2FzZUFsbENhcHMpLFxuICAgIGNhcHRpb246IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTIsIDEuNjYsIDAuNCksXG4gICAgb3ZlcmxpbmU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTIsIDIuNjYsIDEsIGNhc2VBbGxDYXBzKVxuICB9O1xuICByZXR1cm4gZGVlcG1lcmdlKF9leHRlbmRzKHtcbiAgICBodG1sRm9udFNpemUsXG4gICAgcHhUb1JlbSxcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRXZWlnaHRMaWdodCxcbiAgICBmb250V2VpZ2h0UmVndWxhcixcbiAgICBmb250V2VpZ2h0TWVkaXVtLFxuICAgIGZvbnRXZWlnaHRCb2xkXG4gIH0sIHZhcmlhbnRzKSwgb3RoZXIsIHtcbiAgICBjbG9uZTogZmFsc2UgLy8gTm8gbmVlZCB0byBjbG9uZSBkZWVwXG5cbiAgfSk7XG59IiwiY29uc3Qgc2hhZG93S2V5VW1icmFPcGFjaXR5ID0gMC4yO1xuY29uc3Qgc2hhZG93S2V5UGVudW1icmFPcGFjaXR5ID0gMC4xNDtcbmNvbnN0IHNoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5ID0gMC4xMjtcblxuZnVuY3Rpb24gY3JlYXRlU2hhZG93KC4uLnB4KSB7XG4gIHJldHVybiBbYCR7cHhbMF19cHggJHtweFsxXX1weCAke3B4WzJdfXB4ICR7cHhbM119cHggcmdiYSgwLDAsMCwke3NoYWRvd0tleVVtYnJhT3BhY2l0eX0pYCwgYCR7cHhbNF19cHggJHtweFs1XX1weCAke3B4WzZdfXB4ICR7cHhbN119cHggcmdiYSgwLDAsMCwke3NoYWRvd0tleVBlbnVtYnJhT3BhY2l0eX0pYCwgYCR7cHhbOF19cHggJHtweFs5XX1weCAke3B4WzEwXX1weCAke3B4WzExXX1weCByZ2JhKDAsMCwwLCR7c2hhZG93QW1iaWVudFNoYWRvd09wYWNpdHl9KWBdLmpvaW4oJywnKTtcbn0gLy8gVmFsdWVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIvYmxvYi9iZTg3NDdmOTQ1NzQ2NjljYjVlN2FkZDFhN2M1NGZhNDFhODljZWM3L3BhY2thZ2VzL21kYy1lbGV2YXRpb24vX3ZhcmlhYmxlcy5zY3NzXG5cblxuY29uc3Qgc2hhZG93cyA9IFsnbm9uZScsIGNyZWF0ZVNoYWRvdygwLCAyLCAxLCAtMSwgMCwgMSwgMSwgMCwgMCwgMSwgMywgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAxLCAtMiwgMCwgMiwgMiwgMCwgMCwgMSwgNSwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAzLCAtMiwgMCwgMywgNCwgMCwgMCwgMSwgOCwgMCksIGNyZWF0ZVNoYWRvdygwLCAyLCA0LCAtMSwgMCwgNCwgNSwgMCwgMCwgMSwgMTAsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgNSwgLTEsIDAsIDUsIDgsIDAsIDAsIDEsIDE0LCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA2LCAxMCwgMCwgMCwgMSwgMTgsIDApLCBjcmVhdGVTaGFkb3coMCwgNCwgNSwgLTIsIDAsIDcsIDEwLCAxLCAwLCAyLCAxNiwgMSksIGNyZWF0ZVNoYWRvdygwLCA1LCA1LCAtMywgMCwgOCwgMTAsIDEsIDAsIDMsIDE0LCAyKSwgY3JlYXRlU2hhZG93KDAsIDUsIDYsIC0zLCAwLCA5LCAxMiwgMSwgMCwgMywgMTYsIDIpLCBjcmVhdGVTaGFkb3coMCwgNiwgNiwgLTMsIDAsIDEwLCAxNCwgMSwgMCwgNCwgMTgsIDMpLCBjcmVhdGVTaGFkb3coMCwgNiwgNywgLTQsIDAsIDExLCAxNSwgMSwgMCwgNCwgMjAsIDMpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEyLCAxNywgMiwgMCwgNSwgMjIsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEzLCAxOSwgMiwgMCwgNSwgMjQsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOSwgLTQsIDAsIDE0LCAyMSwgMiwgMCwgNSwgMjYsIDQpLCBjcmVhdGVTaGFkb3coMCwgOCwgOSwgLTUsIDAsIDE1LCAyMiwgMiwgMCwgNiwgMjgsIDUpLCBjcmVhdGVTaGFkb3coMCwgOCwgMTAsIC01LCAwLCAxNiwgMjQsIDIsIDAsIDYsIDMwLCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDExLCAtNSwgMCwgMTcsIDI2LCAyLCAwLCA2LCAzMiwgNSksIGNyZWF0ZVNoYWRvdygwLCA5LCAxMSwgLTUsIDAsIDE4LCAyOCwgMiwgMCwgNywgMzQsIDYpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTIsIC02LCAwLCAxOSwgMjksIDIsIDAsIDcsIDM2LCA2KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIwLCAzMSwgMywgMCwgOCwgMzgsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDEzLCAtNiwgMCwgMjEsIDMzLCAzLCAwLCA4LCA0MCwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTQsIC02LCAwLCAyMiwgMzUsIDMsIDAsIDgsIDQyLCA3KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNCwgLTcsIDAsIDIzLCAzNiwgMywgMCwgOSwgNDQsIDgpLCBjcmVhdGVTaGFkb3coMCwgMTEsIDE1LCAtNywgMCwgMjQsIDM4LCAzLCAwLCA5LCA0NiwgOCldO1xuZXhwb3J0IGRlZmF1bHQgc2hhZG93czsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZHVyYXRpb25cIiwgXCJlYXNpbmdcIiwgXCJkZWxheVwiXTtcbi8vIEZvbGxvdyBodHRwczovL21hdGVyaWFsLmdvb2dsZS5jb20vbW90aW9uL2R1cmF0aW9uLWVhc2luZy5odG1sI2R1cmF0aW9uLWVhc2luZy1uYXR1cmFsLWVhc2luZy1jdXJ2ZXNcbi8vIHRvIGxlYXJuIHRoZSBjb250ZXh0IGluIHdoaWNoIGVhY2ggZWFzaW5nIHNob3VsZCBiZSB1c2VkLlxuZXhwb3J0IGNvbnN0IGVhc2luZyA9IHtcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gZWFzaW5nIGN1cnZlLlxuICBlYXNlSW5PdXQ6ICdjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJyxcbiAgLy8gT2JqZWN0cyBlbnRlciB0aGUgc2NyZWVuIGF0IGZ1bGwgdmVsb2NpdHkgZnJvbSBvZmYtc2NyZWVuIGFuZFxuICAvLyBzbG93bHkgZGVjZWxlcmF0ZSB0byBhIHJlc3RpbmcgcG9pbnQuXG4gIGVhc2VPdXQ6ICdjdWJpYy1iZXppZXIoMC4wLCAwLCAwLjIsIDEpJyxcbiAgLy8gT2JqZWN0cyBsZWF2ZSB0aGUgc2NyZWVuIGF0IGZ1bGwgdmVsb2NpdHkuIFRoZXkgZG8gbm90IGRlY2VsZXJhdGUgd2hlbiBvZmYtc2NyZWVuLlxuICBlYXNlSW46ICdjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKScsXG4gIC8vIFRoZSBzaGFycCBjdXJ2ZSBpcyB1c2VkIGJ5IG9iamVjdHMgdGhhdCBtYXkgcmV0dXJuIHRvIHRoZSBzY3JlZW4gYXQgYW55IHRpbWUuXG4gIHNoYXJwOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSdcbn07IC8vIEZvbGxvdyBodHRwczovL21hdGVyaWFsLmlvL2d1aWRlbGluZXMvbW90aW9uL2R1cmF0aW9uLWVhc2luZy5odG1sI2R1cmF0aW9uLWVhc2luZy1jb21tb24tZHVyYXRpb25zXG4vLyB0byBsZWFybiB3aGVuIHVzZSB3aGF0IHRpbWluZ1xuXG5leHBvcnQgY29uc3QgZHVyYXRpb24gPSB7XG4gIHNob3J0ZXN0OiAxNTAsXG4gIHNob3J0ZXI6IDIwMCxcbiAgc2hvcnQ6IDI1MCxcbiAgLy8gbW9zdCBiYXNpYyByZWNvbW1lbmRlZCB0aW1pbmdcbiAgc3RhbmRhcmQ6IDMwMCxcbiAgLy8gdGhpcyBpcyB0byBiZSB1c2VkIGluIGNvbXBsZXggYW5pbWF0aW9uc1xuICBjb21wbGV4OiAzNzUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGVudGVyaW5nIHNjcmVlblxuICBlbnRlcmluZ1NjcmVlbjogMjI1LFxuICAvLyByZWNvbW1lbmRlZCB3aGVuIHNvbWV0aGluZyBpcyBsZWF2aW5nIHNjcmVlblxuICBsZWF2aW5nU2NyZWVuOiAxOTVcbn07XG5cbmZ1bmN0aW9uIGZvcm1hdE1zKG1pbGxpc2Vjb25kcykge1xuICByZXR1cm4gYCR7TWF0aC5yb3VuZChtaWxsaXNlY29uZHMpfW1zYDtcbn1cblxuZnVuY3Rpb24gZ2V0QXV0b0hlaWdodER1cmF0aW9uKGhlaWdodCkge1xuICBpZiAoIWhlaWdodCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgY29uc3RhbnQgPSBoZWlnaHQgLyAzNjsgLy8gaHR0cHM6Ly93d3cud29sZnJhbWFscGhhLmNvbS9pbnB1dC8/aT0oNCslMkIrMTUrKisoeCslMkYrMzYrKSsqKiswLjI1KyUyQisoeCslMkYrMzYpKyUyRis1KSsqKzEwXG5cbiAgcmV0dXJuIE1hdGgucm91bmQoKDQgKyAxNSAqIGNvbnN0YW50ICoqIDAuMjUgKyBjb25zdGFudCAvIDUpICogMTApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2l0aW9ucyhpbnB1dFRyYW5zaXRpb25zKSB7XG4gIGNvbnN0IG1lcmdlZEVhc2luZyA9IF9leHRlbmRzKHt9LCBlYXNpbmcsIGlucHV0VHJhbnNpdGlvbnMuZWFzaW5nKTtcblxuICBjb25zdCBtZXJnZWREdXJhdGlvbiA9IF9leHRlbmRzKHt9LCBkdXJhdGlvbiwgaW5wdXRUcmFuc2l0aW9ucy5kdXJhdGlvbik7XG5cbiAgY29uc3QgY3JlYXRlID0gKHByb3BzID0gWydhbGwnXSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZHVyYXRpb246IGR1cmF0aW9uT3B0aW9uID0gbWVyZ2VkRHVyYXRpb24uc3RhbmRhcmQsXG4gICAgICBlYXNpbmc6IGVhc2luZ09wdGlvbiA9IG1lcmdlZEVhc2luZy5lYXNlSW5PdXQsXG4gICAgICBkZWxheSA9IDBcbiAgICB9ID0gb3B0aW9ucyxcbiAgICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc3QgaXNTdHJpbmcgPSB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnOyAvLyBJRTExIHN1cHBvcnQsIHJlcGxhY2Ugd2l0aCBOdW1iZXIuaXNOYU5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcblxuXG4gICAgICBjb25zdCBpc051bWJlciA9IHZhbHVlID0+ICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSk7XG5cbiAgICAgIGlmICghaXNTdHJpbmcocHJvcHMpICYmICFBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwicHJvcHNcIiBtdXN0IGJlIGEgc3RyaW5nIG9yIEFycmF5LicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTnVtYmVyKGR1cmF0aW9uT3B0aW9uKSAmJiAhaXNTdHJpbmcoZHVyYXRpb25PcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogQXJndW1lbnQgXCJkdXJhdGlvblwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgYnV0IGZvdW5kICR7ZHVyYXRpb25PcHRpb259LmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzU3RyaW5nKGVhc2luZ09wdGlvbikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBBcmd1bWVudCBcImVhc2luZ1wiIG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOdW1iZXIoZGVsYXkpICYmICFpc1N0cmluZyhkZWxheSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBBcmd1bWVudCBcImRlbGF5XCIgbXVzdCBiZSBhIG51bWJlciBvciBhIHN0cmluZy4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5rZXlzKG90aGVyKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBVbnJlY29nbml6ZWQgYXJndW1lbnQocykgWyR7T2JqZWN0LmtleXMob3RoZXIpLmpvaW4oJywnKX1dLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShwcm9wcykgPyBwcm9wcyA6IFtwcm9wc10pLm1hcChhbmltYXRlZFByb3AgPT4gYCR7YW5pbWF0ZWRQcm9wfSAke3R5cGVvZiBkdXJhdGlvbk9wdGlvbiA9PT0gJ3N0cmluZycgPyBkdXJhdGlvbk9wdGlvbiA6IGZvcm1hdE1zKGR1cmF0aW9uT3B0aW9uKX0gJHtlYXNpbmdPcHRpb259ICR7dHlwZW9mIGRlbGF5ID09PSAnc3RyaW5nJyA/IGRlbGF5IDogZm9ybWF0TXMoZGVsYXkpfWApLmpvaW4oJywnKTtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGdldEF1dG9IZWlnaHREdXJhdGlvbixcbiAgICBjcmVhdGVcbiAgfSwgaW5wdXRUcmFuc2l0aW9ucywge1xuICAgIGVhc2luZzogbWVyZ2VkRWFzaW5nLFxuICAgIGR1cmF0aW9uOiBtZXJnZWREdXJhdGlvblxuICB9KTtcbn0iLCIvLyBXZSBuZWVkIHRvIGNlbnRyYWxpemUgdGhlIHpJbmRleCBkZWZpbml0aW9ucyBhcyB0aGV5IHdvcmtcbi8vIGxpa2UgZ2xvYmFsIHZhbHVlcyBpbiB0aGUgYnJvd3Nlci5cbmNvbnN0IHpJbmRleCA9IHtcbiAgbW9iaWxlU3RlcHBlcjogMTAwMCxcbiAgZmFiOiAxMDUwLFxuICBzcGVlZERpYWw6IDEwNTAsXG4gIGFwcEJhcjogMTEwMCxcbiAgZHJhd2VyOiAxMjAwLFxuICBtb2RhbDogMTMwMCxcbiAgc25hY2tiYXI6IDE0MDAsXG4gIHRvb2x0aXA6IDE1MDBcbn07XG5leHBvcnQgZGVmYXVsdCB6SW5kZXg7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCB7IGZvcm1hdE11aUVycm9yTWVzc2FnZSBhcyBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIH0gZnJvbSBcIkBtdWkvdXRpbHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImJyZWFrcG9pbnRzXCIsIFwibWl4aW5zXCIsIFwic3BhY2luZ1wiLCBcInBhbGV0dGVcIiwgXCJ0cmFuc2l0aW9uc1wiLCBcInR5cG9ncmFwaHlcIiwgXCJzaGFwZVwiXTtcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgY3JlYXRlVGhlbWUgYXMgc3lzdGVtQ3JlYXRlVGhlbWUgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgY3JlYXRlTWl4aW5zIGZyb20gJy4vY3JlYXRlTWl4aW5zJztcbmltcG9ydCBjcmVhdGVQYWxldHRlIGZyb20gJy4vY3JlYXRlUGFsZXR0ZSc7XG5pbXBvcnQgY3JlYXRlVHlwb2dyYXBoeSBmcm9tICcuL2NyZWF0ZVR5cG9ncmFwaHknO1xuaW1wb3J0IHNoYWRvd3MgZnJvbSAnLi9zaGFkb3dzJztcbmltcG9ydCBjcmVhdGVUcmFuc2l0aW9ucyBmcm9tICcuL2NyZWF0ZVRyYW5zaXRpb25zJztcbmltcG9ydCB6SW5kZXggZnJvbSAnLi96SW5kZXgnO1xuXG5mdW5jdGlvbiBjcmVhdGVUaGVtZShvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgY29uc3Qge1xuICAgIG1peGluczogbWl4aW5zSW5wdXQgPSB7fSxcbiAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICB0cmFuc2l0aW9uczogdHJhbnNpdGlvbnNJbnB1dCA9IHt9LFxuICAgIHR5cG9ncmFwaHk6IHR5cG9ncmFwaHlJbnB1dCA9IHt9XG4gIH0gPSBvcHRpb25zLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG5cbiAgaWYgKG9wdGlvbnMudmFycykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBcXGB2YXJzXFxgIGlzIGEgcHJpdmF0ZSBmaWVsZCB1c2VkIGZvciBDU1MgdmFyaWFibGVzIHN1cHBvcnQuXG5QbGVhc2UgdXNlIGFub3RoZXIgbmFtZS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxOCkpO1xuICB9XG5cbiAgY29uc3QgcGFsZXR0ZSA9IGNyZWF0ZVBhbGV0dGUocGFsZXR0ZUlucHV0KTtcbiAgY29uc3Qgc3lzdGVtVGhlbWUgPSBzeXN0ZW1DcmVhdGVUaGVtZShvcHRpb25zKTtcbiAgbGV0IG11aVRoZW1lID0gZGVlcG1lcmdlKHN5c3RlbVRoZW1lLCB7XG4gICAgbWl4aW5zOiBjcmVhdGVNaXhpbnMoc3lzdGVtVGhlbWUuYnJlYWtwb2ludHMsIG1peGluc0lucHV0KSxcbiAgICBwYWxldHRlLFxuICAgIC8vIERvbid0IHVzZSBbLi4uc2hhZG93c10gdW50aWwgeW91J3ZlIHZlcmlmaWVkIGl0cyB0cmFuc3BpbGVkIGNvZGUgaXMgbm90IGludm9raW5nIHRoZSBpdGVyYXRvciBwcm90b2NvbC5cbiAgICBzaGFkb3dzOiBzaGFkb3dzLnNsaWNlKCksXG4gICAgdHlwb2dyYXBoeTogY3JlYXRlVHlwb2dyYXBoeShwYWxldHRlLCB0eXBvZ3JhcGh5SW5wdXQpLFxuICAgIHRyYW5zaXRpb25zOiBjcmVhdGVUcmFuc2l0aW9ucyh0cmFuc2l0aW9uc0lucHV0KSxcbiAgICB6SW5kZXg6IF9leHRlbmRzKHt9LCB6SW5kZXgpXG4gIH0pO1xuICBtdWlUaGVtZSA9IGRlZXBtZXJnZShtdWlUaGVtZSwgb3RoZXIpO1xuICBtdWlUaGVtZSA9IGFyZ3MucmVkdWNlKChhY2MsIGFyZ3VtZW50KSA9PiBkZWVwbWVyZ2UoYWNjLCBhcmd1bWVudCksIG11aVRoZW1lKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnN0IHN0YXRlQ2xhc3NlcyA9IFsnYWN0aXZlJywgJ2NoZWNrZWQnLCAnY29tcGxldGVkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2V4cGFuZGVkJywgJ2ZvY3VzZWQnLCAnZm9jdXNWaXNpYmxlJywgJ3JlcXVpcmVkJywgJ3NlbGVjdGVkJ107XG5cbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlLCBjb21wb25lbnQpID0+IHtcbiAgICAgIGxldCBrZXk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW4sIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cbiAgICAgIGZvciAoa2V5IGluIG5vZGUpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlW2tleV07XG5cbiAgICAgICAgaWYgKHN0YXRlQ2xhc3Nlcy5pbmRleE9mKGtleSkgIT09IC0xICYmIE9iamVjdC5rZXlzKGNoaWxkKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlQ2xhc3MgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnJywga2V5KTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBcXGAke2NvbXBvbmVudH1cXGAgY29tcG9uZW50IGluY3JlYXNlcyBgICsgYHRoZSBDU1Mgc3BlY2lmaWNpdHkgb2YgdGhlIFxcYCR7a2V5fVxcYCBpbnRlcm5hbCBzdGF0ZS5gLCAnWW91IGNhbiBub3Qgb3ZlcnJpZGUgaXQgbGlrZSB0aGlzOiAnLCBKU09OLnN0cmluZ2lmeShub2RlLCBudWxsLCAyKSwgJycsIGBJbnN0ZWFkLCB5b3UgbmVlZCB0byB1c2UgdGhlICcmLiR7c3RhdGVDbGFzc30nIHN5bnRheDpgLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIHJvb3Q6IHtcbiAgICAgICAgICAgICAgICBbYCYuJHtzdGF0ZUNsYXNzfWBdOiBjaGlsZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBudWxsLCAyKSwgJycsICdodHRwczovL211aS5jb20vci9zdGF0ZS1jbGFzc2VzLWd1aWRlJ10uam9pbignXFxuJykpO1xuICAgICAgICAgIH0gLy8gUmVtb3ZlIHRoZSBzdHlsZSB0byBwcmV2ZW50IGdsb2JhbCBjb25mbGljdHMuXG5cblxuICAgICAgICAgIG5vZGVba2V5XSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIE9iamVjdC5rZXlzKG11aVRoZW1lLmNvbXBvbmVudHMpLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IHN0eWxlT3ZlcnJpZGVzID0gbXVpVGhlbWUuY29tcG9uZW50c1tjb21wb25lbnRdLnN0eWxlT3ZlcnJpZGVzO1xuXG4gICAgICBpZiAoc3R5bGVPdmVycmlkZXMgJiYgY29tcG9uZW50LmluZGV4T2YoJ011aScpID09PSAwKSB7XG4gICAgICAgIHRyYXZlcnNlKHN0eWxlT3ZlcnJpZGVzLCBjb21wb25lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG11aVRoZW1lO1xufVxuXG5sZXQgd2FybmVkT25jZSA9IGZhbHNlO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU11aVRoZW1lKC4uLmFyZ3MpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIXdhcm5lZE9uY2UpIHtcbiAgICAgIHdhcm5lZE9uY2UgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogdGhlIGNyZWF0ZU11aVRoZW1lIGZ1bmN0aW9uIHdhcyByZW5hbWVkIHRvIGNyZWF0ZVRoZW1lLicsICcnLCBcIllvdSBzaG91bGQgdXNlIGBpbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJ2BcIl0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVUaGVtZSguLi5hcmdzKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVRoZW1lOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlTWl4aW5zKGJyZWFrcG9pbnRzLCBtaXhpbnMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICB0b29sYmFyOiB7XG4gICAgICBtaW5IZWlnaHQ6IDU2LFxuICAgICAgW2JyZWFrcG9pbnRzLnVwKCd4cycpXToge1xuICAgICAgICAnQG1lZGlhIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSc6IHtcbiAgICAgICAgICBtaW5IZWlnaHQ6IDQ4XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbYnJlYWtwb2ludHMudXAoJ3NtJyldOiB7XG4gICAgICAgIG1pbkhlaWdodDogNjRcbiAgICAgIH1cbiAgICB9XG4gIH0sIG1peGlucyk7XG59IiwiaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRUaGVtZTsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInZhcmlhbnRcIl07XG5pbXBvcnQgeyB1bnN0YWJsZV9jYXBpdGFsaXplIGFzIGNhcGl0YWxpemUgfSBmcm9tICdAbXVpL3V0aWxzJztcblxuZnVuY3Rpb24gaXNFbXB0eShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPT09IDA7XG59XG4vKipcbiAqIEdlbmVyYXRlcyBzdHJpbmcgY2xhc3NLZXkgYmFzZWQgb24gdGhlIHByb3BlcnRpZXMgcHJvdmlkZWQuIEl0IHN0YXJ0cyB3aXRoIHRoZVxuICogdmFyaWFudCBpZiBkZWZpbmVkLCBhbmQgdGhlbiBpdCBhcHBlbmRzIGFsbCBvdGhlciBwcm9wZXJ0aWVzIGluIGFscGhhYmV0aWNhbCBvcmRlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyAtIHRoZSBwcm9wZXJ0aWVzIGZvciB3aGljaCB0aGUgY2xhc3NLZXkgc2hvdWxkIGJlIGNyZWF0ZWQuXG4gKi9cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcm9wc1RvQ2xhc3NLZXkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHZhcmlhbnRcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGxldCBjbGFzc0tleSA9IHZhcmlhbnQgfHwgJyc7XG4gIE9iamVjdC5rZXlzKG90aGVyKS5zb3J0KCkuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmIChrZXkgPT09ICdjb2xvcicpIHtcbiAgICAgIGNsYXNzS2V5ICs9IGlzRW1wdHkoY2xhc3NLZXkpID8gcHJvcHNba2V5XSA6IGNhcGl0YWxpemUocHJvcHNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsYXNzS2V5ICs9IGAke2lzRW1wdHkoY2xhc3NLZXkpID8ga2V5IDogY2FwaXRhbGl6ZShrZXkpfSR7Y2FwaXRhbGl6ZShwcm9wc1trZXldLnRvU3RyaW5nKCkpfWA7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNsYXNzS2V5O1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJuYW1lXCIsIFwic2xvdFwiLCBcInNraXBWYXJpYW50c1Jlc29sdmVyXCIsIFwic2tpcFN4XCIsIFwib3ZlcnJpZGVzUmVzb2x2ZXJcIl0sXG4gICAgICBfZXhjbHVkZWQyID0gW1widGhlbWVcIl0sXG4gICAgICBfZXhjbHVkZWQzID0gW1widGhlbWVcIl07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5pbXBvcnQgc3R5bGVkRW5naW5lU3R5bGVkLCB7IGludGVybmFsX3Byb2Nlc3NTdHlsZXMgYXMgcHJvY2Vzc1N0eWxlcyB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5pbXBvcnQgeyBnZXREaXNwbGF5TmFtZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IHByb3BzVG9DbGFzc0tleSBmcm9tICcuL3Byb3BzVG9DbGFzc0tleSc7XG5pbXBvcnQgZGVmYXVsdFN0eWxlRnVuY3Rpb25TeCBmcm9tICcuL3N0eWxlRnVuY3Rpb25TeCc7XG5cbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn0gLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcblxuXG5mdW5jdGlvbiBpc1N0cmluZ1RhZyh0YWcpIHtcbiAgcmV0dXJuIHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnICYmIC8vIDk2IGlzIG9uZSBsZXNzIHRoYW4gdGhlIGNoYXIgY29kZVxuICAvLyBmb3IgXCJhXCIgc28gdGhpcyBpcyBjaGVja2luZyB0aGF0XG4gIC8vIGl0J3MgYSBsb3dlcmNhc2UgY2hhcmFjdGVyXG4gIHRhZy5jaGFyQ29kZUF0KDApID4gOTY7XG59XG5cbmNvbnN0IGdldFN0eWxlT3ZlcnJpZGVzID0gKG5hbWUsIHRoZW1lKSA9PiB7XG4gIGlmICh0aGVtZS5jb21wb25lbnRzICYmIHRoZW1lLmNvbXBvbmVudHNbbmFtZV0gJiYgdGhlbWUuY29tcG9uZW50c1tuYW1lXS5zdHlsZU92ZXJyaWRlcykge1xuICAgIHJldHVybiB0aGVtZS5jb21wb25lbnRzW25hbWVdLnN0eWxlT3ZlcnJpZGVzO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBnZXRWYXJpYW50U3R5bGVzID0gKG5hbWUsIHRoZW1lKSA9PiB7XG4gIGxldCB2YXJpYW50cyA9IFtdO1xuXG4gIGlmICh0aGVtZSAmJiB0aGVtZS5jb21wb25lbnRzICYmIHRoZW1lLmNvbXBvbmVudHNbbmFtZV0gJiYgdGhlbWUuY29tcG9uZW50c1tuYW1lXS52YXJpYW50cykge1xuICAgIHZhcmlhbnRzID0gdGhlbWUuY29tcG9uZW50c1tuYW1lXS52YXJpYW50cztcbiAgfVxuXG4gIGNvbnN0IHZhcmlhbnRzU3R5bGVzID0ge307XG4gIHZhcmlhbnRzLmZvckVhY2goZGVmaW5pdGlvbiA9PiB7XG4gICAgY29uc3Qga2V5ID0gcHJvcHNUb0NsYXNzS2V5KGRlZmluaXRpb24ucHJvcHMpO1xuICAgIHZhcmlhbnRzU3R5bGVzW2tleV0gPSBkZWZpbml0aW9uLnN0eWxlO1xuICB9KTtcbiAgcmV0dXJuIHZhcmlhbnRzU3R5bGVzO1xufTtcblxuY29uc3QgdmFyaWFudHNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzLCB0aGVtZSwgbmFtZSkgPT4ge1xuICB2YXIgX3RoZW1lJGNvbXBvbmVudHMsIF90aGVtZSRjb21wb25lbnRzJG5hbTtcblxuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZSA9IHt9XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgdmFyaWFudHNTdHlsZXMgPSBbXTtcbiAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgPyB2b2lkIDAgOiAoX3RoZW1lJGNvbXBvbmVudHMgPSB0aGVtZS5jb21wb25lbnRzKSA9PSBudWxsID8gdm9pZCAwIDogKF90aGVtZSRjb21wb25lbnRzJG5hbSA9IF90aGVtZSRjb21wb25lbnRzW25hbWVdKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJGNvbXBvbmVudHMkbmFtLnZhcmlhbnRzO1xuXG4gIGlmICh0aGVtZVZhcmlhbnRzKSB7XG4gICAgdGhlbWVWYXJpYW50cy5mb3JFYWNoKHRoZW1lVmFyaWFudCA9PiB7XG4gICAgICBsZXQgaXNNYXRjaCA9IHRydWU7XG4gICAgICBPYmplY3Qua2V5cyh0aGVtZVZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKG93bmVyU3RhdGVba2V5XSAhPT0gdGhlbWVWYXJpYW50LnByb3BzW2tleV0gJiYgcHJvcHNba2V5XSAhPT0gdGhlbWVWYXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICB2YXJpYW50c1N0eWxlcy5wdXNoKHN0eWxlc1twcm9wc1RvQ2xhc3NLZXkodGhlbWVWYXJpYW50LnByb3BzKV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhbnRzU3R5bGVzO1xufTsgLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcblxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkRm9yd2FyZFByb3AocHJvcCkge1xuICByZXR1cm4gcHJvcCAhPT0gJ293bmVyU3RhdGUnICYmIHByb3AgIT09ICd0aGVtZScgJiYgcHJvcCAhPT0gJ3N4JyAmJiBwcm9wICE9PSAnYXMnO1xufVxuZXhwb3J0IGNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5cbmNvbnN0IGxvd2VyY2FzZUZpcnN0TGV0dGVyID0gc3RyaW5nID0+IHtcbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN0eWxlZChpbnB1dCA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBkZWZhdWx0VGhlbWUgPSBzeXN0ZW1EZWZhdWx0VGhlbWUsXG4gICAgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3AsXG4gICAgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3AsXG4gICAgc3R5bGVGdW5jdGlvblN4ID0gZGVmYXVsdFN0eWxlRnVuY3Rpb25TeFxuICB9ID0gaW5wdXQ7XG5cbiAgY29uc3Qgc3lzdGVtU3ggPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgdGhlbWUgPSBpc0VtcHR5KHByb3BzLnRoZW1lKSA/IGRlZmF1bHRUaGVtZSA6IHByb3BzLnRoZW1lO1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uU3goX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICB0aGVtZVxuICAgIH0pKTtcbiAgfTtcblxuICBzeXN0ZW1TeC5fX211aV9zeXN0ZW1TeCA9IHRydWU7XG4gIHJldHVybiAodGFnLCBpbnB1dE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8vIEZpbHRlciBvdXQgdGhlIGBzeGAgc3R5bGUgZnVuY3Rpb24gZnJvbSB0aGUgcHJldmlvdXMgc3R5bGVkIGNvbXBvbmVudCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHN0eWxlcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBvc2l0ZSBjb21wb25lbnRzLlxuICAgIHByb2Nlc3NTdHlsZXModGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG5cbiAgICBjb25zdCB7XG4gICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgc2xvdDogY29tcG9uZW50U2xvdCxcbiAgICAgIHNraXBWYXJpYW50c1Jlc29sdmVyOiBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyLFxuICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgIG92ZXJyaWRlc1Jlc29sdmVyXG4gICAgfSA9IGlucHV0T3B0aW9ucyxcbiAgICAgICAgICBvcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoaW5wdXRPcHRpb25zLCBfZXhjbHVkZWQpOyAvLyBpZiBza2lwVmFyaWFudHNSZXNvbHZlciBvcHRpb24gaXMgZGVmaW5lZCwgdGFrZSB0aGUgdmFsdWUsIG90aGVyd2lzZSwgdHJ1ZSBmb3Igcm9vdCBhbmQgZmFsc2UgZm9yIG90aGVyIHNsb3RzLlxuXG5cbiAgICBjb25zdCBza2lwVmFyaWFudHNSZXNvbHZlciA9IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgIT09IHVuZGVmaW5lZCA/IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgOiBjb21wb25lbnRTbG90ICYmIGNvbXBvbmVudFNsb3QgIT09ICdSb290JyB8fCBmYWxzZTtcbiAgICBjb25zdCBza2lwU3ggPSBpbnB1dFNraXBTeCB8fCBmYWxzZTtcbiAgICBsZXQgbGFiZWw7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgbGFiZWwgPSBgJHtjb21wb25lbnROYW1lfS0ke2xvd2VyY2FzZUZpcnN0TGV0dGVyKGNvbXBvbmVudFNsb3QgfHwgJ1Jvb3QnKX1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHNob3VsZEZvcndhcmRQcm9wO1xuXG4gICAgaWYgKGNvbXBvbmVudFNsb3QgPT09ICdSb290Jykge1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSByb290U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChjb21wb25lbnRTbG90KSB7XG4gICAgICAvLyBhbnkgb3RoZXIgc2xvdCBzcGVjaWZpZWRcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2xvdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdUYWcodGFnKSkge1xuICAgICAgLy8gZm9yIHN0cmluZyAoaHRtbCkgdGFnLCBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3IgaW4gZW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzLlxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdFN0eWxlZFJlc29sdmVyID0gc3R5bGVkRW5naW5lU3R5bGVkKHRhZywgX2V4dGVuZHMoe1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3A6IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uLFxuICAgICAgbGFiZWxcbiAgICB9LCBvcHRpb25zKSk7XG5cbiAgICBjb25zdCBtdWlTdHlsZWRSZXNvbHZlciA9IChzdHlsZUFyZywgLi4uZXhwcmVzc2lvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSA9IGV4cHJlc3Npb25zID8gZXhwcmVzc2lvbnMubWFwKHN0eWxlc0FyZyA9PiB7XG4gICAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgICAvLyBjb21wb25lbnQgc3RheXMgYXMgYSBmdW5jdGlvbi4gVGhpcyBjb25kaXRpb24gbWFrZXMgc3VyZSB0aGF0IHdlIGRvIG5vdCBpbnRlcnBvbGF0ZSBmdW5jdGlvbnNcbiAgICAgICAgLy8gd2hpY2ggYXJlIGJhc2ljYWxseSBjb21wb25lbnRzIHVzZWQgYXMgYSBzZWxlY3RvcnMuXG4gICAgICAgIHJldHVybiB0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnID8gX3JlZiA9PiB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIHRoZW1lOiB0aGVtZUlucHV0XG4gICAgICAgICAgfSA9IF9yZWYsXG4gICAgICAgICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkMik7XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzQXJnKF9leHRlbmRzKHtcbiAgICAgICAgICAgIHRoZW1lOiBpc0VtcHR5KHRoZW1lSW5wdXQpID8gZGVmYXVsdFRoZW1lIDogdGhlbWVJbnB1dFxuICAgICAgICAgIH0sIG90aGVyKSk7XG4gICAgICAgIH0gOiBzdHlsZXNBcmc7XG4gICAgICB9KSA6IFtdO1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSBzdHlsZUFyZztcblxuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgb3ZlcnJpZGVzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHRoZW1lID0gaXNFbXB0eShwcm9wcy50aGVtZSkgPyBkZWZhdWx0VGhlbWUgOiBwcm9wcy50aGVtZTtcbiAgICAgICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IGdldFN0eWxlT3ZlcnJpZGVzKGNvbXBvbmVudE5hbWUsIHRoZW1lKTtcblxuICAgICAgICAgIGlmIChzdHlsZU92ZXJyaWRlcykge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyA9IHt9O1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVPdmVycmlkZXMpLmZvckVhY2goKFtzbG90S2V5LCBzbG90U3R5bGVdKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmVkU3R5bGVPdmVycmlkZXNbc2xvdEtleV0gPSB0eXBlb2Ygc2xvdFN0eWxlID09PSAnZnVuY3Rpb24nID8gc2xvdFN0eWxlKF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICAgIH0pKSA6IHNsb3RTdHlsZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmICFza2lwVmFyaWFudHNSZXNvbHZlcikge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChwcm9wcyA9PiB7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSBpc0VtcHR5KHByb3BzLnRoZW1lKSA/IGRlZmF1bHRUaGVtZSA6IHByb3BzLnRoZW1lO1xuICAgICAgICAgIHJldHVybiB2YXJpYW50c1Jlc29sdmVyKHByb3BzLCBnZXRWYXJpYW50U3R5bGVzKGNvbXBvbmVudE5hbWUsIHRoZW1lKSwgdGhlbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFza2lwU3gpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2goc3lzdGVtU3gpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPSBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUubGVuZ3RoIC0gZXhwcmVzc2lvbnMubGVuZ3RoO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzdHlsZUFyZykgJiYgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID4gMCkge1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnMgPSBuZXcgQXJyYXkobnVtT2ZDdXN0b21GbnNBcHBsaWVkKS5maWxsKCcnKTsgLy8gSWYgdGhlIHR5cGUgaXMgYXJyYXksIHRoYW4gd2UgbmVlZCB0byBhZGQgcGxhY2Vob2xkZXJzIGluIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG92ZXJyaWRlcywgdmFyaWFudHMgYW5kIHRoZSBzeCBzdHlsZXMuXG5cbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IFsuLi5zdHlsZUFyZywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZy5yYXcgPSBbLi4uc3R5bGVBcmcucmF3LCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3R5bGVBcmcgPT09ICdmdW5jdGlvbicgJiYgLy8gT24gdGhlIHNlcnZlciBFbW90aW9uIGRvZXNuJ3QgdXNlIFJlYWN0LmZvcndhcmRSZWYgZm9yIGNyZWF0aW5nIGNvbXBvbmVudHMsIHNvIHRoZSBjcmVhdGVkXG4gICAgICAvLyBjb21wb25lbnQgc3RheXMgYXMgYSBmdW5jdGlvbi4gVGhpcyBjb25kaXRpb24gbWFrZXMgc3VyZSB0aGF0IHdlIGRvIG5vdCBpbnRlcnBvbGF0ZSBmdW5jdGlvbnNcbiAgICAgIC8vIHdoaWNoIGFyZSBiYXNpY2FsbHkgY29tcG9uZW50cyB1c2VkIGFzIGEgc2VsZWN0b3JzLlxuICAgICAgc3R5bGVBcmcuX19lbW90aW9uX3JlYWwgIT09IHN0eWxlQXJnKSB7XG4gICAgICAgIC8vIElmIHRoZSB0eXBlIGlzIGZ1bmN0aW9uLCB3ZSBuZWVkIHRvIGRlZmluZSB0aGUgZGVmYXVsdCB0aGVtZS5cbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IF9yZWYyID0+IHtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgdGhlbWU6IHRoZW1lSW5wdXRcbiAgICAgICAgICB9ID0gX3JlZjIsXG4gICAgICAgICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjIsIF9leGNsdWRlZDMpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlQXJnKF9leHRlbmRzKHtcbiAgICAgICAgICAgIHRoZW1lOiBpc0VtcHR5KHRoZW1lSW5wdXQpID8gZGVmYXVsdFRoZW1lIDogdGhlbWVJbnB1dFxuICAgICAgICAgIH0sIG90aGVyKSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IENvbXBvbmVudCA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlcih0cmFuc2Zvcm1lZFN0eWxlQXJnLCAuLi5leHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUpO1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBsZXQgZGlzcGxheU5hbWU7XG5cbiAgICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGAke2NvbXBvbmVudE5hbWV9JHtjb21wb25lbnRTbG90IHx8ICcnfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYFN0eWxlZCgke2dldERpc3BsYXlOYW1lKHRhZyl9KWA7XG4gICAgICAgIH1cblxuICAgICAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbXBvbmVudDtcbiAgICB9O1xuXG4gICAgaWYgKGRlZmF1bHRTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnKSB7XG4gICAgICBtdWlTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnID0gZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsImltcG9ydCB7IGNyZWF0ZVN0eWxlZCwgc2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmV4cG9ydCBjb25zdCByb290U2hvdWxkRm9yd2FyZFByb3AgPSBwcm9wID0+IHNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICdjbGFzc2VzJztcbmV4cG9ydCBjb25zdCBzbG90U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbmNvbnN0IHN0eWxlZCA9IGNyZWF0ZVN0eWxlZCh7XG4gIGRlZmF1bHRUaGVtZSxcbiAgcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KTtcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZDsiLCJpbXBvcnQgeyB1c2VUaGVtZVByb3BzIGFzIHN5c3RlbVVzZVRoZW1lUHJvcHMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lUHJvcHMoe1xuICBwcm9wcyxcbiAgbmFtZVxufSkge1xuICByZXR1cm4gc3lzdGVtVXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHMsXG4gICAgbmFtZSxcbiAgICBkZWZhdWx0VGhlbWVcbiAgfSk7XG59IiwiaW1wb3J0IGdldFRoZW1lUHJvcHMgZnJvbSAnLi9nZXRUaGVtZVByb3BzJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi91c2VUaGVtZSc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZVByb3BzKHtcbiAgcHJvcHMsXG4gIG5hbWUsXG4gIGRlZmF1bHRUaGVtZVxufSkge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gIGNvbnN0IG1lcmdlZFByb3BzID0gZ2V0VGhlbWVQcm9wcyh7XG4gICAgdGhlbWUsXG4gICAgbmFtZSxcbiAgICBwcm9wc1xuICB9KTtcbiAgcmV0dXJuIG1lcmdlZFByb3BzO1xufSIsImltcG9ydCB7IGludGVybmFsX3Jlc29sdmVQcm9wcyBhcyByZXNvbHZlUHJvcHMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRoZW1lUHJvcHMocGFyYW1zKSB7XG4gIGNvbnN0IHtcbiAgICB0aGVtZSxcbiAgICBuYW1lLFxuICAgIHByb3BzXG4gIH0gPSBwYXJhbXM7XG5cbiAgaWYgKCF0aGVtZSB8fCAhdGhlbWUuY29tcG9uZW50cyB8fCAhdGhlbWUuY29tcG9uZW50c1tuYW1lXSB8fCAhdGhlbWUuY29tcG9uZW50c1tuYW1lXS5kZWZhdWx0UHJvcHMpIHtcbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICByZXR1cm4gcmVzb2x2ZVByb3BzKHRoZW1lLmNvbXBvbmVudHNbbmFtZV0uZGVmYXVsdFByb3BzLCBwcm9wcyk7XG59IiwiaW1wb3J0IHsgdW5zdGFibGVfY2FwaXRhbGl6ZSBhcyBjYXBpdGFsaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBjYXBpdGFsaXplOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRTdmdJY29uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlTdmdJY29uJywgc2xvdCk7XG59XG5jb25zdCBzdmdJY29uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVN2Z0ljb24nLCBbJ3Jvb3QnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2NvbG9yQWN0aW9uJywgJ2NvbG9yRXJyb3InLCAnY29sb3JEaXNhYmxlZCcsICdmb250U2l6ZUluaGVyaXQnLCAnZm9udFNpemVTbWFsbCcsICdmb250U2l6ZU1lZGl1bScsICdmb250U2l6ZUxhcmdlJ10pO1xuZXhwb3J0IGRlZmF1bHQgc3ZnSWNvbkNsYXNzZXM7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJmb250U2l6ZVwiLCBcImh0bWxDb2xvclwiLCBcImluaGVyaXRWaWV3Qm94XCIsIFwidGl0bGVBY2Nlc3NcIiwgXCJ2aWV3Qm94XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vc3ZnSWNvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbG9yLFxuICAgIGZvbnRTaXplLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNvbG9yICE9PSAnaW5oZXJpdCcgJiYgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgZm9udFNpemUke2NhcGl0YWxpemUoZm9udFNpemUpfWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBTdmdJY29uUm9vdCA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpU3ZnSWNvbicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXSwgc3R5bGVzW2Bmb250U2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmZvbnRTaXplKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfdGhlbWUkdHJhbnNpdGlvbnMsIF90aGVtZSR0cmFuc2l0aW9ucyRjciwgX3RoZW1lJHRyYW5zaXRpb25zMiwgX3RoZW1lJHRyYW5zaXRpb25zMiRkLCBfdGhlbWUkdHlwb2dyYXBoeSwgX3RoZW1lJHR5cG9ncmFwaHkkcHhULCBfdGhlbWUkdHlwb2dyYXBoeTIsIF90aGVtZSR0eXBvZ3JhcGh5MiRweCwgX3RoZW1lJHR5cG9ncmFwaHkzLCBfdGhlbWUkdHlwb2dyYXBoeTMkcHgsIF9wYWxldHRlJG93bmVyU3RhdGUkYywgX3BhbGV0dGUsIF9wYWxldHRlJG93bmVyU3RhdGUkYzIsIF9wYWxldHRlMiwgX3BhbGV0dGUyJGFjdGlvbiwgX3BhbGV0dGUzLCBfcGFsZXR0ZTMkYWN0aW9uO1xuXG4gIHJldHVybiB7XG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIHdpZHRoOiAnMWVtJyxcbiAgICBoZWlnaHQ6ICcxZW0nLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgdHJhbnNpdGlvbjogKF90aGVtZSR0cmFuc2l0aW9ucyA9IHRoZW1lLnRyYW5zaXRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF90aGVtZSR0cmFuc2l0aW9ucyRjciA9IF90aGVtZSR0cmFuc2l0aW9ucy5jcmVhdGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMkY3IuY2FsbChfdGhlbWUkdHJhbnNpdGlvbnMsICdmaWxsJywge1xuICAgICAgZHVyYXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMyID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiAoX3RoZW1lJHRyYW5zaXRpb25zMiRkID0gX3RoZW1lJHRyYW5zaXRpb25zMi5kdXJhdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0cmFuc2l0aW9uczIkZC5zaG9ydGVyXG4gICAgfSksXG4gICAgZm9udFNpemU6IHtcbiAgICAgIGluaGVyaXQ6ICdpbmhlcml0JyxcbiAgICAgIHNtYWxsOiAoKF90aGVtZSR0eXBvZ3JhcGh5ID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCA/IHZvaWQgMCA6IChfdGhlbWUkdHlwb2dyYXBoeSRweFQgPSBfdGhlbWUkdHlwb2dyYXBoeS5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkkcHhULmNhbGwoX3RoZW1lJHR5cG9ncmFwaHksIDIwKSkgfHwgJzEuMjVyZW0nLFxuICAgICAgbWVkaXVtOiAoKF90aGVtZSR0eXBvZ3JhcGh5MiA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgPyB2b2lkIDAgOiAoX3RoZW1lJHR5cG9ncmFwaHkyJHB4ID0gX3RoZW1lJHR5cG9ncmFwaHkyLnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeTIkcHguY2FsbChfdGhlbWUkdHlwb2dyYXBoeTIsIDI0KSkgfHwgJzEuNXJlbScsXG4gICAgICBsYXJnZTogKChfdGhlbWUkdHlwb2dyYXBoeTMgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsID8gdm9pZCAwIDogKF90aGVtZSR0eXBvZ3JhcGh5MyRweCA9IF90aGVtZSR0eXBvZ3JhcGh5My5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkzJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkzLCAzNSkpIHx8ICcyLjE4NzUnXG4gICAgfVtvd25lclN0YXRlLmZvbnRTaXplXSxcbiAgICAvLyBUT0RPIHY1IGRlcHJlY2F0ZSwgdjYgcmVtb3ZlIGZvciBzeFxuICAgIGNvbG9yOiAoX3BhbGV0dGUkb3duZXJTdGF0ZSRjID0gKF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgPyB2b2lkIDAgOiAoX3BhbGV0dGUkb3duZXJTdGF0ZSRjMiA9IF9wYWxldHRlW293bmVyU3RhdGUuY29sb3JdKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUkb3duZXJTdGF0ZSRjMi5tYWluKSAhPSBudWxsID8gX3BhbGV0dGUkb3duZXJTdGF0ZSRjIDoge1xuICAgICAgYWN0aW9uOiAoX3BhbGV0dGUyID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgPyB2b2lkIDAgOiAoX3BhbGV0dGUyJGFjdGlvbiA9IF9wYWxldHRlMi5hY3Rpb24pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZTIkYWN0aW9uLmFjdGl2ZSxcbiAgICAgIGRpc2FibGVkOiAoX3BhbGV0dGUzID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgPyB2b2lkIDAgOiAoX3BhbGV0dGUzJGFjdGlvbiA9IF9wYWxldHRlMy5hY3Rpb24pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZTMkYWN0aW9uLmRpc2FibGVkLFxuICAgICAgaW5oZXJpdDogdW5kZWZpbmVkXG4gICAgfVtvd25lclN0YXRlLmNvbG9yXVxuICB9O1xufSk7XG5jb25zdCBTdmdJY29uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU3ZnSWNvbihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpU3ZnSWNvbidcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb2xvciA9ICdpbmhlcml0JyxcbiAgICBjb21wb25lbnQgPSAnc3ZnJyxcbiAgICBmb250U2l6ZSA9ICdtZWRpdW0nLFxuICAgIGh0bWxDb2xvcixcbiAgICBpbmhlcml0Vmlld0JveCA9IGZhbHNlLFxuICAgIHRpdGxlQWNjZXNzLFxuICAgIHZpZXdCb3ggPSAnMCAwIDI0IDI0J1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb250U2l6ZSxcbiAgICBpbnN0YW5jZUZvbnRTaXplOiBpblByb3BzLmZvbnRTaXplLFxuICAgIGluaGVyaXRWaWV3Qm94LFxuICAgIHZpZXdCb3hcbiAgfSk7XG5cbiAgY29uc3QgbW9yZSA9IHt9O1xuXG4gIGlmICghaW5oZXJpdFZpZXdCb3gpIHtcbiAgICBtb3JlLnZpZXdCb3ggPSB2aWV3Qm94O1xuICB9XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFN2Z0ljb25Sb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgZm9jdXNhYmxlOiBcImZhbHNlXCIsXG4gICAgY29sb3I6IGh0bWxDb2xvcixcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRpdGxlQWNjZXNzID8gdW5kZWZpbmVkIDogdHJ1ZSxcbiAgICByb2xlOiB0aXRsZUFjY2VzcyA/ICdpbWcnIDogdW5kZWZpbmVkLFxuICAgIHJlZjogcmVmXG4gIH0sIG1vcmUsIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgdGl0bGVBY2Nlc3MgPyAvKiNfX1BVUkVfXyovX2pzeChcInRpdGxlXCIsIHtcbiAgICAgIGNoaWxkcmVuOiB0aXRsZUFjY2Vzc1xuICAgIH0pIDogbnVsbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTdmdJY29uLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBOb2RlIHBhc3NlZCBpbnRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2FkZGluZy1uZXctY29sb3JzKS5cbiAgICogWW91IGNhbiB1c2UgdGhlIGBodG1sQ29sb3JgIHByb3AgdG8gYXBwbHkgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ2FjdGlvbicsICdkaXNhYmxlZCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogVGhlIGZvbnRTaXplIGFwcGxpZWQgdG8gdGhlIGljb24uIERlZmF1bHRzIHRvIDI0cHgsIGJ1dCBjYW4gYmUgY29uZmlndXJlIHRvIGluaGVyaXQgZm9udCBzaXplLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgZm9udFNpemU6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnbGFyZ2UnLCAnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKi9cbiAgaHRtbENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByb290IG5vZGUgd2lsbCBpbmhlcml0IHRoZSBjdXN0b20gYGNvbXBvbmVudGAncyB2aWV3Qm94IGFuZCB0aGUgYHZpZXdCb3hgXG4gICAqIHByb3Agd2lsbCBiZSBpZ25vcmVkLlxuICAgKiBVc2VmdWwgd2hlbiB5b3Ugd2FudCB0byByZWZlcmVuY2UgYSBjdXN0b20gYGNvbXBvbmVudGAgYW5kIGhhdmUgYFN2Z0ljb25gIHBhc3MgdGhhdFxuICAgKiBgY29tcG9uZW50YCdzIHZpZXdCb3ggdG8gdGhlIHJvb3Qgbm9kZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGluaGVyaXRWaWV3Qm94OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIHNoYXBlLXJlbmRlcmluZyBhdHRyaWJ1dGUuIFRoZSBiZWhhdmlvciBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgaXMgZGVzY3JpYmVkIG9uIHRoZVxuICAgKiBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3NoYXBlLXJlbmRlcmluZykuXG4gICAqIElmIHlvdSBhcmUgaGF2aW5nIGlzc3VlcyB3aXRoIGJsdXJyeSBpY29ucyB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHRoaXMgcHJvcC5cbiAgICovXG4gIHNoYXBlUmVuZGVyaW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGEgaHVtYW4tcmVhZGFibGUgdGl0bGUgZm9yIHRoZSBlbGVtZW50IHRoYXQgY29udGFpbnMgaXQuXG4gICAqIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkctYWNjZXNzLyNFcXVpdmFsZW50XG4gICAqL1xuICB0aXRsZUFjY2VzczogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQWxsb3dzIHlvdSB0byByZWRlZmluZSB3aGF0IHRoZSBjb29yZGluYXRlcyB3aXRob3V0IHVuaXRzIG1lYW4gaW5zaWRlIGFuIFNWRyBlbGVtZW50LlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIFNWRyBlbGVtZW50IGlzIDUwMCAod2lkdGgpIGJ5IDIwMCAoaGVpZ2h0KSxcbiAgICogYW5kIHlvdSBwYXNzIHZpZXdCb3g9XCIwIDAgNTAgMjBcIixcbiAgICogdGhpcyBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlcyBpbnNpZGUgdGhlIFNWRyB3aWxsIGdvIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciAoMCwwKVxuICAgKiB0byBib3R0b20gcmlnaHQgKDUwLDIwKSBhbmQgZWFjaCB1bml0IHdpbGwgYmUgd29ydGggMTBweC5cbiAgICogQGRlZmF1bHQgJzAgMCAyNCAyNCdcbiAgICovXG4gIHZpZXdCb3g6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5TdmdJY29uLm11aU5hbWUgPSAnU3ZnSWNvbic7XG5leHBvcnQgZGVmYXVsdCBTdmdJY29uOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFN2Z0ljb24gZnJvbSAnLi4vU3ZnSWNvbic7XG4vKipcbiAqIFByaXZhdGUgbW9kdWxlIHJlc2VydmVkIGZvciBAbXVpIHBhY2thZ2VzLlxuICovXG5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTdmdJY29uKHBhdGgsIGRpc3BsYXlOYW1lKSB7XG4gIGNvbnN0IENvbXBvbmVudCA9IChwcm9wcywgcmVmKSA9PiAvKiNfX1BVUkVfXyovX2pzeChTdmdJY29uLCBfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXRlc3RpZFwiOiBgJHtkaXNwbGF5TmFtZX1JY29uYCxcbiAgICByZWY6IHJlZlxuICB9LCBwcm9wcywge1xuICAgIGNoaWxkcmVuOiBwYXRoXG4gIH0pKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIE5lZWQgdG8gc2V0IGBkaXNwbGF5TmFtZWAgb24gdGhlIGlubmVyIGNvbXBvbmVudCBmb3IgUmVhY3QubWVtby5cbiAgICAvLyBSZWFjdCBwcmlvciB0byAxNi4xNCBpZ25vcmVzIGBkaXNwbGF5TmFtZWAgb24gdGhlIHdyYXBwZXIuXG4gICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYCR7ZGlzcGxheU5hbWV9SWNvbmA7XG4gIH1cblxuICBDb21wb25lbnQubXVpTmFtZSA9IFN2Z0ljb24ubXVpTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihDb21wb25lbnQpKTtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9kZWJvdW5jZSBhcyBkZWJvdW5jZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZGVib3VuY2U7IiwiaW1wb3J0IHsgdW5zdGFibGVfY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGFzIGNyZWF0ZUNoYWluZWRGdW5jdGlvbiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uOyIsImltcG9ydCB7IHVuc3RhYmxlX2RlcHJlY2F0ZWRQcm9wVHlwZSBhcyBkZXByZWNhdGVkUHJvcFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGRlcHJlY2F0ZWRQcm9wVHlwZTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXByZWNhdGVkUHJvcFR5cGUodmFsaWRhdG9yLCByZWFzb24pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gKCkgPT4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSA9PiB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZVNhZmUgPSBjb21wb25lbnROYW1lIHx8ICc8PGFub255bW91cz4+JztcbiAgICBjb25zdCBwcm9wRnVsbE5hbWVTYWZlID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wc1twcm9wTmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKGBUaGUgJHtsb2NhdGlvbn0gXFxgJHtwcm9wRnVsbE5hbWVTYWZlfVxcYCBvZiBgICsgYFxcYCR7Y29tcG9uZW50TmFtZVNhZmV9XFxgIGlzIGRlcHJlY2F0ZWQuICR7cmVhc29ufWApO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xufSIsImltcG9ydCB7IHVuc3RhYmxlX3JlcXVpcmVQcm9wRmFjdG9yeSBhcyByZXF1aXJlUHJvcEZhY3RvcnkgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHJlcXVpcmVQcm9wRmFjdG9yeTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVQcm9wRmFjdG9yeShjb21wb25lbnROYW1lSW5FcnJvciwgQ29tcG9uZW50KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuICgpID0+IG51bGw7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2ZvcmJpZC1mb3JlaWduLXByb3AtdHlwZXNcblxuXG4gIGNvbnN0IHByZXZQcm9wVHlwZXMgPSBDb21wb25lbnQgPyBfZXh0ZW5kcyh7fSwgQ29tcG9uZW50LnByb3BUeXBlcykgOiBudWxsO1xuXG4gIGNvbnN0IHJlcXVpcmVQcm9wID0gcmVxdWlyZWRQcm9wID0+IChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBwcm9wRnVsbE5hbWVTYWZlID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuICAgIGNvbnN0IGRlZmF1bHRUeXBlQ2hlY2tlciA9IHByZXZQcm9wVHlwZXMgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZQcm9wVHlwZXNbcHJvcEZ1bGxOYW1lU2FmZV07XG5cbiAgICBpZiAoZGVmYXVsdFR5cGVDaGVja2VyKSB7XG4gICAgICBjb25zdCB0eXBlQ2hlY2tlclJlc3VsdCA9IGRlZmF1bHRUeXBlQ2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIC4uLmFyZ3MpO1xuXG4gICAgICBpZiAodHlwZUNoZWNrZXJSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVDaGVja2VyUmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJvcHNbcHJvcE5hbWVdICE9PSAndW5kZWZpbmVkJyAmJiAhcHJvcHNbcmVxdWlyZWRQcm9wXSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihgVGhlIHByb3AgXFxgJHtwcm9wRnVsbE5hbWVTYWZlfVxcYCBvZiBgICsgYFxcYCR7Y29tcG9uZW50TmFtZUluRXJyb3J9XFxgIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgXFxgJHtyZXF1aXJlZFByb3B9XFxgIHByb3AuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIHJlcXVpcmVQcm9wO1xufSIsImltcG9ydCB7IHVuc3RhYmxlX3NldFJlZiBhcyBzZXRSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHNldFJlZjsiLCJpbXBvcnQgeyB1bnN0YWJsZV91bnN1cHBvcnRlZFByb3AgYXMgdW5zdXBwb3J0ZWRQcm9wIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1bnN1cHBvcnRlZFByb3A7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5zdXBwb3J0ZWRQcm9wKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcHJvcEZ1bGxOYW1lU2FmZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICBpZiAodHlwZW9mIHByb3BzW3Byb3BOYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKGBUaGUgcHJvcCBcXGAke3Byb3BGdWxsTmFtZVNhZmV9XFxgIGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSByZW1vdmUgaXQuYCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9DbGFzc05hbWVHZW5lcmF0b3IgYXMgQ2xhc3NOYW1lR2VuZXJhdG9yIH0gZnJvbSAnQG11aS9iYXNlL2NsYXNzTmFtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNhcGl0YWxpemUgfSBmcm9tICcuL2NhcGl0YWxpemUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVDaGFpbmVkRnVuY3Rpb24gfSBmcm9tICcuL2NyZWF0ZUNoYWluZWRGdW5jdGlvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVN2Z0ljb24gfSBmcm9tICcuL2NyZWF0ZVN2Z0ljb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZWJvdW5jZSB9IGZyb20gJy4vZGVib3VuY2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZXByZWNhdGVkUHJvcFR5cGUgfSBmcm9tICcuL2RlcHJlY2F0ZWRQcm9wVHlwZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzTXVpRWxlbWVudCB9IGZyb20gJy4vaXNNdWlFbGVtZW50JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3duZXJEb2N1bWVudCB9IGZyb20gJy4vb3duZXJEb2N1bWVudCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG93bmVyV2luZG93IH0gZnJvbSAnLi9vd25lcldpbmRvdyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlcXVpcmVQcm9wRmFjdG9yeSB9IGZyb20gJy4vcmVxdWlyZVByb3BGYWN0b3J5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2V0UmVmIH0gZnJvbSAnLi9zZXRSZWYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCB9IGZyb20gJy4vdXNlRW5oYW5jZWRFZmZlY3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV91c2VJZCB9IGZyb20gJy4vdXNlSWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN1cHBvcnRlZFByb3AgfSBmcm9tICcuL3Vuc3VwcG9ydGVkUHJvcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUNvbnRyb2xsZWQgfSBmcm9tICcuL3VzZUNvbnRyb2xsZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VFdmVudENhbGxiYWNrIH0gZnJvbSAnLi91c2VFdmVudENhbGxiYWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlRm9ya1JlZiB9IGZyb20gJy4vdXNlRm9ya1JlZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUlzRm9jdXNWaXNpYmxlIH0gZnJvbSAnLi91c2VJc0ZvY3VzVmlzaWJsZSc7IC8vIFRPRE86IHJlbW92ZSB0aGlzIGV4cG9ydCBvbmNlIENsYXNzTmFtZUdlbmVyYXRvciBpcyBzdGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cblxuZXhwb3J0IGNvbnN0IHVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciA9IHtcbiAgY29uZmlndXJlOiBnZW5lcmF0b3IgPT4ge1xuICAgIGNvbnNvbGUud2FybihbJ01VSTogYENsYXNzTmFtZUdlbmVyYXRvcmAgaW1wb3J0IGZyb20gYEBtdWkvbWF0ZXJpYWwvdXRpbHNgIGlzIG91dGRhdGVkIGFuZCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGlzc3Vlcy4nLCAnJywgXCJZb3Ugc2hvdWxkIHVzZSBgaW1wb3J0IHsgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9jbGFzc05hbWUnYCBpbnN0ZWFkXCIsICcnLCAnVGhlIGRldGFpbCBvZiB0aGUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMwMDExI2lzc3VlY29tbWVudC0xMDI0OTkzNDAxJywgJycsICdUaGUgdXBkYXRlZCBkb2N1bWVudGF0aW9uOiBodHRwczovL211aS5jb20vZ3VpZGVzL2NsYXNzbmFtZS1nZW5lcmF0b3IvJ10uam9pbignXFxuJykpO1xuICAgIENsYXNzTmFtZUdlbmVyYXRvci5jb25maWd1cmUoZ2VuZXJhdG9yKTtcbiAgfVxufTsiLCJpbXBvcnQgeyB1bnN0YWJsZV9pc011aUVsZW1lbnQgYXMgaXNNdWlFbGVtZW50IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBpc011aUVsZW1lbnQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNNdWlFbGVtZW50KGVsZW1lbnQsIG11aU5hbWVzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkgJiYgbXVpTmFtZXMuaW5kZXhPZihlbGVtZW50LnR5cGUubXVpTmFtZSkgIT09IC0xO1xufSIsImltcG9ydCB7IHVuc3RhYmxlX293bmVyRG9jdW1lbnQgYXMgb3duZXJEb2N1bWVudCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgb3duZXJEb2N1bWVudDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9vd25lcldpbmRvdyBhcyBvd25lcldpbmRvdyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgb3duZXJXaW5kb3c7IiwiaW1wb3J0IHsgdW5zdGFibGVfdXNlQ29udHJvbGxlZCBhcyB1c2VDb250cm9sbGVkIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VDb250cm9sbGVkOyIsIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzLCByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUNvbnRyb2xsZWQoe1xuICBjb250cm9sbGVkLFxuICBkZWZhdWx0OiBkZWZhdWx0UHJvcCxcbiAgbmFtZSxcbiAgc3RhdGUgPSAndmFsdWUnXG59KSB7XG4gIC8vIGlzQ29udHJvbGxlZCBpcyBpZ25vcmVkIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdHMgYXMgaXQgc2hvdWxkIG5ldmVyIGNoYW5nZS5cbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKGNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IFt2YWx1ZVN0YXRlLCBzZXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZShkZWZhdWx0UHJvcCk7XG4gIGNvbnN0IHZhbHVlID0gaXNDb250cm9sbGVkID8gY29udHJvbGxlZCA6IHZhbHVlU3RhdGU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGlzQ29udHJvbGxlZCAhPT0gKGNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgdGhlICR7aXNDb250cm9sbGVkID8gJycgOiAndW4nfWNvbnRyb2xsZWQgJHtzdGF0ZX0gc3RhdGUgb2YgJHtuYW1lfSB0byBiZSAke2lzQ29udHJvbGxlZCA/ICd1bicgOiAnJ31jb250cm9sbGVkLmAsICdFbGVtZW50cyBzaG91bGQgbm90IHN3aXRjaCBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4nLCBgRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAke25hbWV9IGAgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuJywgXCJUaGUgbmF0dXJlIG9mIHRoZSBzdGF0ZSBpcyBkZXRlcm1pbmVkIGR1cmluZyB0aGUgZmlyc3QgcmVuZGVyLiBJdCdzIGNvbnNpZGVyZWQgY29udHJvbGxlZCBpZiB0aGUgdmFsdWUgaXMgbm90IGB1bmRlZmluZWRgLlwiLCAnTW9yZSBpbmZvOiBodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cyddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbc3RhdGUsIG5hbWUsIGNvbnRyb2xsZWRdKTtcbiAgICBjb25zdCB7XG4gICAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgICB9ID0gUmVhY3QudXNlUmVmKGRlZmF1bHRQcm9wKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFpc0NvbnRyb2xsZWQgJiYgZGVmYXVsdFZhbHVlICE9PSBkZWZhdWx0UHJvcCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyB0aGUgZGVmYXVsdCAke3N0YXRlfSBzdGF0ZSBvZiBhbiB1bmNvbnRyb2xsZWQgJHtuYW1lfSBhZnRlciBiZWluZyBpbml0aWFsaXplZC4gYCArIGBUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgb3B0IHRvIHVzZSBhIGNvbnRyb2xsZWQgJHtuYW1lfS5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW0pTT04uc3RyaW5naWZ5KGRlZmF1bHRQcm9wKV0pO1xuICB9XG5cbiAgY29uc3Qgc2V0VmFsdWVJZlVuY29udHJvbGxlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKG5ld1ZhbHVlID0+IHtcbiAgICBpZiAoIWlzQ29udHJvbGxlZCkge1xuICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgIH1cbiAgfSwgW10pO1xuICByZXR1cm4gW3ZhbHVlLCBzZXRWYWx1ZUlmVW5jb250cm9sbGVkXTtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCBhcyB1c2VFbmhhbmNlZEVmZmVjdCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRW5oYW5jZWRFZmZlY3Q7IiwiaW1wb3J0IHsgdW5zdGFibGVfdXNlRXZlbnRDYWxsYmFjayBhcyB1c2VFdmVudENhbGxiYWNrIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VFdmVudENhbGxiYWNrOyIsImltcG9ydCB7IHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ya1JlZjsiLCJpbXBvcnQgeyB1bnN0YWJsZV91c2VJZCBhcyB1c2VJZCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlSWQ7IiwiLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZS9ibG9iL3Y0LjEuNS9zcmMvZm9jdXMtdmlzaWJsZS5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xubGV0IGhhZEtleWJvYXJkRXZlbnQgPSB0cnVlO1xubGV0IGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5ID0gZmFsc2U7XG5sZXQgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0O1xuY29uc3QgaW5wdXRUeXBlc1doaXRlbGlzdCA9IHtcbiAgdGV4dDogdHJ1ZSxcbiAgc2VhcmNoOiB0cnVlLFxuICB1cmw6IHRydWUsXG4gIHRlbDogdHJ1ZSxcbiAgZW1haWw6IHRydWUsXG4gIHBhc3N3b3JkOiB0cnVlLFxuICBudW1iZXI6IHRydWUsXG4gIGRhdGU6IHRydWUsXG4gIG1vbnRoOiB0cnVlLFxuICB3ZWVrOiB0cnVlLFxuICB0aW1lOiB0cnVlLFxuICBkYXRldGltZTogdHJ1ZSxcbiAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZVxufTtcbi8qKlxuICogQ29tcHV0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBzaG91bGQgYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZVxuICogYGZvY3VzLXZpc2libGVgIGNsYXNzIGJlaW5nIGFkZGVkLCBpLmUuIHdoZXRoZXIgaXQgc2hvdWxkIGFsd2F5cyBtYXRjaFxuICogYDpmb2N1cy12aXNpYmxlYCB3aGVuIGZvY3VzZWQuXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5KG5vZGUpIHtcbiAgY29uc3Qge1xuICAgIHR5cGUsXG4gICAgdGFnTmFtZVxuICB9ID0gbm9kZTtcblxuICBpZiAodGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBpbnB1dFR5cGVzV2hpdGVsaXN0W3R5cGVdICYmICFub2RlLnJlYWRPbmx5KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJiAhbm9kZS5yZWFkT25seSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKG5vZGUuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogS2VlcCB0cmFjayBvZiBvdXIga2V5Ym9hcmQgbW9kYWxpdHkgc3RhdGUgd2l0aCBgaGFkS2V5Ym9hcmRFdmVudGAuXG4gKiBJZiB0aGUgbW9zdCByZWNlbnQgdXNlciBpbnRlcmFjdGlvbiB3YXMgdmlhIHRoZSBrZXlib2FyZDtcbiAqIGFuZCB0aGUga2V5IHByZXNzIGRpZCBub3QgaW5jbHVkZSBhIG1ldGEsIGFsdC9vcHRpb24sIG9yIGNvbnRyb2wga2V5O1xuICogdGhlbiB0aGUgbW9kYWxpdHkgaXMga2V5Ym9hcmQuIE90aGVyd2lzZSwgdGhlIG1vZGFsaXR5IGlzIG5vdCBrZXlib2FyZC5cbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgaWYgKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbn1cbi8qKlxuICogSWYgYXQgYW55IHBvaW50IGEgdXNlciBjbGlja3Mgd2l0aCBhIHBvaW50aW5nIGRldmljZSwgZW5zdXJlIHRoYXQgd2UgY2hhbmdlXG4gKiB0aGUgbW9kYWxpdHkgYXdheSBmcm9tIGtleWJvYXJkLlxuICogVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHVzZXIgcHJlc3NlcyBhIGtleSBvbiBhbiBhbHJlYWR5IGZvY3VzZWRcbiAqIGVsZW1lbnQsIGFuZCB0aGVuIGNsaWNrcyBvbiBhIGRpZmZlcmVudCBlbGVtZW50LCBmb2N1c2luZyBpdCB3aXRoIGFcbiAqIHBvaW50aW5nIGRldmljZSwgd2hpbGUgd2Ugc3RpbGwgdGhpbmsgd2UncmUgaW4ga2V5Ym9hcmQgbW9kYWxpdHkuXG4gKi9cblxuXG5mdW5jdGlvbiBoYW5kbGVQb2ludGVyRG93bigpIHtcbiAgaGFkS2V5Ym9hcmRFdmVudCA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCkge1xuICBpZiAodGhpcy52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgLy8gSWYgdGhlIHRhYiBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiwgdGhlIGJyb3dzZXIgd2lsbCBoYW5kbGUgY2FsbGluZyBmb2N1c1xuICAgIC8vIG9uIHRoZSBlbGVtZW50IChTYWZhcmkgYWN0dWFsbHkgY2FsbHMgaXQgdHdpY2UpLlxuICAgIC8vIElmIHRoaXMgdGFiIGNoYW5nZSBjYXVzZWQgYSBibHVyIG9uIGFuIGVsZW1lbnQgd2l0aCBmb2N1cy12aXNpYmxlLFxuICAgIC8vIHJlLWFwcGx5IHRoZSBjbGFzcyB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzIGJhY2sgdG8gdGhlIHRhYi5cbiAgICBpZiAoaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkpIHtcbiAgICAgIGhhZEtleWJvYXJkRXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlKGRvYykge1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBoYW5kbGVQb2ludGVyRG93biwgdHJ1ZSk7XG4gIGRvYy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVhcmRvd24oZG9jKSB7XG4gIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93biwgdHJ1ZSk7XG4gIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93biwgdHJ1ZSk7XG4gIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBoYW5kbGVQb2ludGVyRG93biwgdHJ1ZSk7XG4gIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzRm9jdXNWaXNpYmxlKGV2ZW50KSB7XG4gIGNvbnN0IHtcbiAgICB0YXJnZXRcbiAgfSA9IGV2ZW50O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIHRhcmdldC5tYXRjaGVzKCc6Zm9jdXMtdmlzaWJsZScpO1xuICB9IGNhdGNoIChlcnJvcikgey8vIEJyb3dzZXJzIG5vdCBpbXBsZW1lbnRpbmcgOmZvY3VzLXZpc2libGUgd2lsbCB0aHJvdyBhIFN5bnRheEVycm9yLlxuICAgIC8vIFdlIHVzZSBvdXIgb3duIGhldXJpc3RpYyBmb3IgdGhvc2UgYnJvd3NlcnMuXG4gICAgLy8gUmV0aHJvdyBtaWdodCBiZSBiZXR0ZXIgaWYgaXQncyBub3QgdGhlIGV4cGVjdGVkIGVycm9yIGJ1dCBkbyB3ZSByZWFsbHlcbiAgICAvLyB3YW50IHRvIGNyYXNoIGlmIGZvY3VzLXZpc2libGUgbWFsZnVuY3Rpb25lZD9cbiAgfSAvLyBObyBuZWVkIGZvciB2YWxpZEZvY3VzVGFyZ2V0IGNoZWNrLiBUaGUgdXNlciBkb2VzIHRoYXQgYnkgYXR0YWNoaW5nIGl0IHRvXG4gIC8vIGZvY3VzYWJsZSBldmVudHMgb25seS5cblxuXG4gIHJldHVybiBoYWRLZXlib2FyZEV2ZW50IHx8IGZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5KHRhcmdldCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlzRm9jdXNWaXNpYmxlKCkge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBwcmVwYXJlKG5vZGUub3duZXJEb2N1bWVudCk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGlzRm9jdXNWaXNpYmxlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgLyoqXG4gICAqIFNob3VsZCBiZSBjYWxsZWQgaWYgYSBibHVyIGV2ZW50IGlzIGZpcmVkXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUJsdXJWaXNpYmxlKCkge1xuICAgIC8vIGNoZWNraW5nIGFnYWluc3QgcG90ZW50aWFsIHN0YXRlIHZhcmlhYmxlIGRvZXMgbm90IHN1ZmZpY2UgaWYgd2UgZm9jdXMgYW5kIGJsdXIgc3luY2hyb25vdXNseS5cbiAgICAvLyBSZWFjdCB3b3VsZG4ndCBoYXZlIHRpbWUgdG8gdHJpZ2dlciBhIHJlLXJlbmRlciBzbyBgZm9jdXNWaXNpYmxlYCB3b3VsZCBiZSBzdGFsZS5cbiAgICAvLyBJZGVhbGx5IHdlIHdvdWxkIGFkanVzdCBgaXNGb2N1c1Zpc2libGUoZXZlbnQpYCB0byBsb29rIGF0IGByZWxhdGVkVGFyZ2V0YCBmb3IgYmx1ciBldmVudHMuXG4gICAgLy8gVGhpcyBkb2Vzbid0IHdvcmsgaW4gSUUxMSBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zNzUxXG4gICAgLy8gVE9ETzogY2hlY2sgYWdhaW4gaWYgUmVhY3QgcmVsZWFzZXMgdGhlaXIgaW50ZXJuYWwgY2hhbmdlcyB0byBmb2N1cyBldmVudCBoYW5kbGluZyAoaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkxODYpLlxuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBUbyBkZXRlY3QgYSB0YWIvd2luZG93IHN3aXRjaCwgd2UgbG9vayBmb3IgYSBibHVyIGV2ZW50IGZvbGxvd2VkXG4gICAgICAvLyByYXBpZGx5IGJ5IGEgdmlzaWJpbGl0eSBjaGFuZ2UuXG4gICAgICAvLyBJZiB3ZSBkb24ndCBzZWUgYSB2aXNpYmlsaXR5IGNoYW5nZSB3aXRoaW4gMTAwbXMsIGl0J3MgcHJvYmFibHkgYVxuICAgICAgLy8gcmVndWxhciBmb2N1cyBjaGFuZ2UuXG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IHRydWU7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5VGltZW91dCk7XG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5ID0gZmFsc2U7XG4gICAgICB9LCAxMDApO1xuICAgICAgaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTaG91bGQgYmUgY2FsbGVkIGlmIGEgYmx1ciBldmVudCBpcyBmaXJlZFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCkge1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZShldmVudCkpIHtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpc0ZvY3VzVmlzaWJsZVJlZixcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1Zpc2libGUsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyVmlzaWJsZSxcbiAgICByZWZcbiAgfTtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV91c2VJc0ZvY3VzVmlzaWJsZSBhcyB1c2VJc0ZvY3VzVmlzaWJsZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlSXNGb2N1c1Zpc2libGU7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgVGhlbWVDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFRoZW1lQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdUaGVtZUNvbnRleHQnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUaGVtZUNvbnRleHQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRoZW1lQ29udGV4dCBmcm9tICcuL1RoZW1lQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VEZWJ1Z1ZhbHVlKHRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiB0aGVtZTtcbn0iLCJpbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIHJlYWN0UHJvcHNSZWdleCA9IC9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFiYnJ8YWNjZXB0fGFjY2VwdENoYXJzZXR8YWNjZXNzS2V5fGFjdGlvbnxhbGxvd3xhbGxvd1VzZXJNZWRpYXxhbGxvd1BheW1lbnRSZXF1ZXN0fGFsbG93RnVsbFNjcmVlbnxhbGxvd1RyYW5zcGFyZW5jeXxhbHR8YXN5bmN8YXV0b0NvbXBsZXRlfGF1dG9QbGF5fGNhcHR1cmV8Y2VsbFBhZGRpbmd8Y2VsbFNwYWNpbmd8Y2hhbGxlbmdlfGNoYXJTZXR8Y2hlY2tlZHxjaXRlfGNsYXNzSUR8Y2xhc3NOYW1lfGNvbHN8Y29sU3Bhbnxjb250ZW50fGNvbnRlbnRFZGl0YWJsZXxjb250ZXh0TWVudXxjb250cm9sc3xjb250cm9sc0xpc3R8Y29vcmRzfGNyb3NzT3JpZ2lufGRhdGF8ZGF0ZVRpbWV8ZGVjb2Rpbmd8ZGVmYXVsdHxkZWZlcnxkaXJ8ZGlzYWJsZWR8ZGlzYWJsZVBpY3R1cmVJblBpY3R1cmV8ZG93bmxvYWR8ZHJhZ2dhYmxlfGVuY1R5cGV8ZW50ZXJLZXlIaW50fGZvcm18Zm9ybUFjdGlvbnxmb3JtRW5jVHlwZXxmb3JtTWV0aG9kfGZvcm1Ob1ZhbGlkYXRlfGZvcm1UYXJnZXR8ZnJhbWVCb3JkZXJ8aGVhZGVyc3xoZWlnaHR8aGlkZGVufGhpZ2h8aHJlZnxocmVmTGFuZ3xodG1sRm9yfGh0dHBFcXVpdnxpZHxpbnB1dE1vZGV8aW50ZWdyaXR5fGlzfGtleVBhcmFtc3xrZXlUeXBlfGtpbmR8bGFiZWx8bGFuZ3xsaXN0fGxvYWRpbmd8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHJhbnNsYXRlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aW5jcmVtZW50YWx8ZmFsbGJhY2t8aW5lcnR8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfG9ufG9wdGlvbnxyZXN1bHRzfHNlY3VyaXR5fHVuc2VsZWN0YWJsZXxhY2NlbnRIZWlnaHR8YWNjdW11bGF0ZXxhZGRpdGl2ZXxhbGlnbm1lbnRCYXNlbGluZXxhbGxvd1Jlb3JkZXJ8YWxwaGFiZXRpY3xhbXBsaXR1ZGV8YXJhYmljRm9ybXxhc2NlbnR8YXR0cmlidXRlTmFtZXxhdHRyaWJ1dGVUeXBlfGF1dG9SZXZlcnNlfGF6aW11dGh8YmFzZUZyZXF1ZW5jeXxiYXNlbGluZVNoaWZ0fGJhc2VQcm9maWxlfGJib3h8YmVnaW58Ymlhc3xieXxjYWxjTW9kZXxjYXBIZWlnaHR8Y2xpcHxjbGlwUGF0aFVuaXRzfGNsaXBQYXRofGNsaXBSdWxlfGNvbG9ySW50ZXJwb2xhdGlvbnxjb2xvckludGVycG9sYXRpb25GaWx0ZXJzfGNvbG9yUHJvZmlsZXxjb2xvclJlbmRlcmluZ3xjb250ZW50U2NyaXB0VHlwZXxjb250ZW50U3R5bGVUeXBlfGN1cnNvcnxjeHxjeXxkfGRlY2VsZXJhdGV8ZGVzY2VudHxkaWZmdXNlQ29uc3RhbnR8ZGlyZWN0aW9ufGRpc3BsYXl8ZGl2aXNvcnxkb21pbmFudEJhc2VsaW5lfGR1cnxkeHxkeXxlZGdlTW9kZXxlbGV2YXRpb258ZW5hYmxlQmFja2dyb3VuZHxlbmR8ZXhwb25lbnR8ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZHxmaWxsfGZpbGxPcGFjaXR5fGZpbGxSdWxlfGZpbHRlcnxmaWx0ZXJSZXN8ZmlsdGVyVW5pdHN8Zmxvb2RDb2xvcnxmbG9vZE9wYWNpdHl8Zm9jdXNhYmxlfGZvbnRGYW1pbHl8Zm9udFNpemV8Zm9udFNpemVBZGp1c3R8Zm9udFN0cmV0Y2h8Zm9udFN0eWxlfGZvbnRWYXJpYW50fGZvbnRXZWlnaHR8Zm9ybWF0fGZyb218ZnJ8Znh8Znl8ZzF8ZzJ8Z2x5cGhOYW1lfGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsfGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbHxnbHlwaFJlZnxncmFkaWVudFRyYW5zZm9ybXxncmFkaWVudFVuaXRzfGhhbmdpbmd8aG9yaXpBZHZYfGhvcml6T3JpZ2luWHxpZGVvZ3JhcGhpY3xpbWFnZVJlbmRlcmluZ3xpbnxpbjJ8aW50ZXJjZXB0fGt8azF8azJ8azN8azR8a2VybmVsTWF0cml4fGtlcm5lbFVuaXRMZW5ndGh8a2VybmluZ3xrZXlQb2ludHN8a2V5U3BsaW5lc3xrZXlUaW1lc3xsZW5ndGhBZGp1c3R8bGV0dGVyU3BhY2luZ3xsaWdodGluZ0NvbG9yfGxpbWl0aW5nQ29uZUFuZ2xlfGxvY2FsfG1hcmtlckVuZHxtYXJrZXJNaWR8bWFya2VyU3RhcnR8bWFya2VySGVpZ2h0fG1hcmtlclVuaXRzfG1hcmtlcldpZHRofG1hc2t8bWFza0NvbnRlbnRVbml0c3xtYXNrVW5pdHN8bWF0aGVtYXRpY2FsfG1vZGV8bnVtT2N0YXZlc3xvZmZzZXR8b3BhY2l0eXxvcGVyYXRvcnxvcmRlcnxvcmllbnR8b3JpZW50YXRpb258b3JpZ2lufG92ZXJmbG93fG92ZXJsaW5lUG9zaXRpb258b3ZlcmxpbmVUaGlja25lc3N8cGFub3NlMXxwYWludE9yZGVyfHBhdGhMZW5ndGh8cGF0dGVybkNvbnRlbnRVbml0c3xwYXR0ZXJuVHJhbnNmb3JtfHBhdHRlcm5Vbml0c3xwb2ludGVyRXZlbnRzfHBvaW50c3xwb2ludHNBdFh8cG9pbnRzQXRZfHBvaW50c0F0WnxwcmVzZXJ2ZUFscGhhfHByZXNlcnZlQXNwZWN0UmF0aW98cHJpbWl0aXZlVW5pdHN8cnxyYWRpdXN8cmVmWHxyZWZZfHJlbmRlcmluZ0ludGVudHxyZXBlYXRDb3VudHxyZXBlYXREdXJ8cmVxdWlyZWRFeHRlbnNpb25zfHJlcXVpcmVkRmVhdHVyZXN8cmVzdGFydHxyZXN1bHR8cm90YXRlfHJ4fHJ5fHNjYWxlfHNlZWR8c2hhcGVSZW5kZXJpbmd8c2xvcGV8c3BhY2luZ3xzcGVjdWxhckNvbnN0YW50fHNwZWN1bGFyRXhwb25lbnR8c3BlZWR8c3ByZWFkTWV0aG9kfHN0YXJ0T2Zmc2V0fHN0ZERldmlhdGlvbnxzdGVtaHxzdGVtdnxzdGl0Y2hUaWxlc3xzdG9wQ29sb3J8c3RvcE9wYWNpdHl8c3RyaWtldGhyb3VnaFBvc2l0aW9ufHN0cmlrZXRocm91Z2hUaGlja25lc3N8c3RyaW5nfHN0cm9rZXxzdHJva2VEYXNoYXJyYXl8c3Ryb2tlRGFzaG9mZnNldHxzdHJva2VMaW5lY2FwfHN0cm9rZUxpbmVqb2lufHN0cm9rZU1pdGVybGltaXR8c3Ryb2tlT3BhY2l0eXxzdHJva2VXaWR0aHxzdXJmYWNlU2NhbGV8c3lzdGVtTGFuZ3VhZ2V8dGFibGVWYWx1ZXN8dGFyZ2V0WHx0YXJnZXRZfHRleHRBbmNob3J8dGV4dERlY29yYXRpb258dGV4dFJlbmRlcmluZ3x0ZXh0TGVuZ3RofHRvfHRyYW5zZm9ybXx1MXx1Mnx1bmRlcmxpbmVQb3NpdGlvbnx1bmRlcmxpbmVUaGlja25lc3N8dW5pY29kZXx1bmljb2RlQmlkaXx1bmljb2RlUmFuZ2V8dW5pdHNQZXJFbXx2QWxwaGFiZXRpY3x2SGFuZ2luZ3x2SWRlb2dyYXBoaWN8dk1hdGhlbWF0aWNhbHx2YWx1ZXN8dmVjdG9yRWZmZWN0fHZlcnNpb258dmVydEFkdll8dmVydE9yaWdpblh8dmVydE9yaWdpbll8dmlld0JveHx2aWV3VGFyZ2V0fHZpc2liaWxpdHl8d2lkdGhzfHdvcmRTcGFjaW5nfHdyaXRpbmdNb2RlfHh8eEhlaWdodHx4MXx4Mnx4Q2hhbm5lbFNlbGVjdG9yfHhsaW5rQWN0dWF0ZXx4bGlua0FyY3JvbGV8eGxpbmtIcmVmfHhsaW5rUm9sZXx4bGlua1Nob3d8eGxpbmtUaXRsZXx4bGlua1R5cGV8eG1sQmFzZXx4bWxuc3x4bWxuc1hsaW5rfHhtbExhbmd8eG1sU3BhY2V8eXx5MXx5Mnx5Q2hhbm5lbFNlbGVjdG9yfHp8em9vbUFuZFBhbnxmb3J8Y2xhc3N8YXV0b2ZvY3VzKXwoKFtEZF1bQWFdW1R0XVtBYV18W0FhXVtScl1bSWldW0FhXXx4KS0uKikpJC87IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWJmZWU2OGE0Y2Q3ZTYwMDllZjYxZDIzXG5cbnZhciBpc1Byb3BWYWxpZCA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHByb3ApIHtcbiAgcmV0dXJuIHJlYWN0UHJvcHNSZWdleC50ZXN0KHByb3ApIHx8IHByb3AuY2hhckNvZGVBdCgwKSA9PT0gMTExXG4gIC8qIG8gKi9cbiAgJiYgcHJvcC5jaGFyQ29kZUF0KDEpID09PSAxMTBcbiAgLyogbiAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMikgPCA5MTtcbn1cbi8qIForMSAqL1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgaXNQcm9wVmFsaWQ7XG4iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCBjcmVhdGVFbGVtZW50LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBpc1Byb3BWYWxpZCBmcm9tICdAZW1vdGlvbi9pcy1wcm9wLXZhbGlkJztcbmltcG9ydCB7IHdpdGhFbW90aW9uQ2FjaGUsIFRoZW1lQ29udGV4dCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIHRlc3RPbWl0UHJvcHNPblN0cmluZ1RhZyA9IGlzUHJvcFZhbGlkO1xuXG52YXIgdGVzdE9taXRQcm9wc09uQ29tcG9uZW50ID0gZnVuY3Rpb24gdGVzdE9taXRQcm9wc09uQ29tcG9uZW50KGtleSkge1xuICByZXR1cm4ga2V5ICE9PSAndGhlbWUnO1xufTtcblxudmFyIGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCA9IGZ1bmN0aW9uIGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCh0YWcpIHtcbiAgcmV0dXJuIHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnICYmIC8vIDk2IGlzIG9uZSBsZXNzIHRoYW4gdGhlIGNoYXIgY29kZVxuICAvLyBmb3IgXCJhXCIgc28gdGhpcyBpcyBjaGVja2luZyB0aGF0XG4gIC8vIGl0J3MgYSBsb3dlcmNhc2UgY2hhcmFjdGVyXG4gIHRhZy5jaGFyQ29kZUF0KDApID4gOTYgPyB0ZXN0T21pdFByb3BzT25TdHJpbmdUYWcgOiB0ZXN0T21pdFByb3BzT25Db21wb25lbnQ7XG59O1xudmFyIGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHMgPSBmdW5jdGlvbiBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKHRhZywgb3B0aW9ucywgaXNSZWFsKSB7XG4gIHZhciBzaG91bGRGb3J3YXJkUHJvcDtcblxuICBpZiAob3B0aW9ucykge1xuICAgIHZhciBvcHRpb25zU2hvdWxkRm9yd2FyZFByb3AgPSBvcHRpb25zLnNob3VsZEZvcndhcmRQcm9wO1xuICAgIHNob3VsZEZvcndhcmRQcm9wID0gdGFnLl9fZW1vdGlvbl9mb3J3YXJkUHJvcCAmJiBvcHRpb25zU2hvdWxkRm9yd2FyZFByb3AgPyBmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICAgIHJldHVybiB0YWcuX19lbW90aW9uX2ZvcndhcmRQcm9wKHByb3BOYW1lKSAmJiBvcHRpb25zU2hvdWxkRm9yd2FyZFByb3AocHJvcE5hbWUpO1xuICAgIH0gOiBvcHRpb25zU2hvdWxkRm9yd2FyZFByb3A7XG4gIH1cblxuICBpZiAodHlwZW9mIHNob3VsZEZvcndhcmRQcm9wICE9PSAnZnVuY3Rpb24nICYmIGlzUmVhbCkge1xuICAgIHNob3VsZEZvcndhcmRQcm9wID0gdGFnLl9fZW1vdGlvbl9mb3J3YXJkUHJvcDtcbiAgfVxuXG4gIHJldHVybiBzaG91bGRGb3J3YXJkUHJvcDtcbn07XG5cbnZhciBJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUiA9IFwiWW91IGhhdmUgaWxsZWdhbCBlc2NhcGUgc2VxdWVuY2UgaW4geW91ciB0ZW1wbGF0ZSBsaXRlcmFsLCBtb3N0IGxpa2VseSBpbnNpZGUgY29udGVudCdzIHByb3BlcnR5IHZhbHVlLlxcbkJlY2F1c2UgeW91IHdyaXRlIHlvdXIgQ1NTIGluc2lkZSBhIEphdmFTY3JpcHQgc3RyaW5nIHlvdSBhY3R1YWxseSBoYXZlIHRvIGRvIGRvdWJsZSBlc2NhcGluZywgc28gZm9yIGV4YW1wbGUgXFxcImNvbnRlbnQ6ICdcXFxcMDBkNyc7XFxcIiBzaG91bGQgYmVjb21lIFxcXCJjb250ZW50OiAnXFxcXFxcXFwwMGQ3JztcXFwiLlxcbllvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRoaXMgaGVyZTpcXG5odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9UZW1wbGF0ZV9saXRlcmFscyNFUzIwMThfcmV2aXNpb25fb2ZfaWxsZWdhbF9lc2NhcGVfc2VxdWVuY2VzXCI7XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdmFyIHJ1bGVzID0gdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBjcmVhdGVTdHlsZWQgPSBmdW5jdGlvbiBjcmVhdGVTdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHRhZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBhIHN0eWxlZCBlbGVtZW50IHdpdGggYW4gdW5kZWZpbmVkIGNvbXBvbmVudC5cXG5Zb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGltcG9ydCBpdC4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaXNSZWFsID0gdGFnLl9fZW1vdGlvbl9yZWFsID09PSB0YWc7XG4gIHZhciBiYXNlVGFnID0gaXNSZWFsICYmIHRhZy5fX2Vtb3Rpb25fYmFzZSB8fCB0YWc7XG4gIHZhciBpZGVudGlmaWVyTmFtZTtcbiAgdmFyIHRhcmdldENsYXNzTmFtZTtcblxuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWRlbnRpZmllck5hbWUgPSBvcHRpb25zLmxhYmVsO1xuICAgIHRhcmdldENsYXNzTmFtZSA9IG9wdGlvbnMudGFyZ2V0O1xuICB9XG5cbiAgdmFyIHNob3VsZEZvcndhcmRQcm9wID0gY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyh0YWcsIG9wdGlvbnMsIGlzUmVhbCk7XG4gIHZhciBkZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcCB8fCBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AoYmFzZVRhZyk7XG4gIHZhciBzaG91bGRVc2VBcyA9ICFkZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AoJ2FzJyk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0eWxlcyA9IGlzUmVhbCAmJiB0YWcuX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkID8gdGFnLl9fZW1vdGlvbl9zdHlsZXMuc2xpY2UoMCkgOiBbXTtcblxuICAgIGlmIChpZGVudGlmaWVyTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdHlsZXMucHVzaChcImxhYmVsOlwiICsgaWRlbnRpZmllck5hbWUgKyBcIjtcIik7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3NbMF0gPT0gbnVsbCB8fCBhcmdzWzBdLnJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdHlsZXMucHVzaC5hcHBseShzdHlsZXMsIGFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhcmdzWzBdWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlcy5wdXNoKGFyZ3NbMF1bMF0pO1xuICAgICAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICAgICAgdmFyIGkgPSAxO1xuXG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFyZ3NbMF1baV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGVzLnB1c2goYXJnc1tpXSwgYXJnc1swXVtpXSk7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lOiB3ZSBuZWVkIHRvIGNhc3QgU3RhdGVsZXNzRnVuY3Rpb25hbENvbXBvbmVudCB0byBvdXIgUHJpdmF0ZVN0eWxlZENvbXBvbmVudCBjbGFzc1xuXG5cbiAgICB2YXIgU3R5bGVkID0gd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgICAgIHZhciBGaW5hbFRhZyA9IHNob3VsZFVzZUFzICYmIHByb3BzLmFzIHx8IGJhc2VUYWc7XG4gICAgICB2YXIgY2xhc3NOYW1lID0gJyc7XG4gICAgICB2YXIgY2xhc3NJbnRlcnBvbGF0aW9ucyA9IFtdO1xuICAgICAgdmFyIG1lcmdlZFByb3BzID0gcHJvcHM7XG5cbiAgICAgIGlmIChwcm9wcy50aGVtZSA9PSBudWxsKSB7XG4gICAgICAgIG1lcmdlZFByb3BzID0ge307XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICAgICAgbWVyZ2VkUHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICBtZXJnZWRQcm9wcy50aGVtZSA9IHVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgY2xhc3NJbnRlcnBvbGF0aW9ucywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICAgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHN0eWxlcy5jb25jYXQoY2xhc3NJbnRlcnBvbGF0aW9ucyksIGNhY2hlLnJlZ2lzdGVyZWQsIG1lcmdlZFByb3BzKTtcbiAgICAgIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICAgICAgaWYgKHRhcmdldENsYXNzTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIHRhcmdldENsYXNzTmFtZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpbmFsU2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRVc2VBcyAmJiBzaG91bGRGb3J3YXJkUHJvcCA9PT0gdW5kZWZpbmVkID8gZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wKEZpbmFsVGFnKSA6IGRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcDtcbiAgICAgIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBfa2V5IGluIHByb3BzKSB7XG4gICAgICAgIGlmIChzaG91bGRVc2VBcyAmJiBfa2V5ID09PSAnYXMnKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoIC8vICRGbG93Rml4TWVcbiAgICAgICAgZmluYWxTaG91bGRGb3J3YXJkUHJvcChfa2V5KSkge1xuICAgICAgICAgIG5ld1Byb3BzW19rZXldID0gcHJvcHNbX2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmV3UHJvcHMuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgbmV3UHJvcHMucmVmID0gcmVmO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KEZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICAgICAgY2FjaGU6IGNhY2hlLFxuICAgICAgICBzZXJpYWxpemVkOiBzZXJpYWxpemVkLFxuICAgICAgICBpc1N0cmluZ1RhZzogdHlwZW9mIEZpbmFsVGFnID09PSAnc3RyaW5nJ1xuICAgICAgfSksIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KEZpbmFsVGFnLCBuZXdQcm9wcykpO1xuICAgIH0pO1xuICAgIFN0eWxlZC5kaXNwbGF5TmFtZSA9IGlkZW50aWZpZXJOYW1lICE9PSB1bmRlZmluZWQgPyBpZGVudGlmaWVyTmFtZSA6IFwiU3R5bGVkKFwiICsgKHR5cGVvZiBiYXNlVGFnID09PSAnc3RyaW5nJyA/IGJhc2VUYWcgOiBiYXNlVGFnLmRpc3BsYXlOYW1lIHx8IGJhc2VUYWcubmFtZSB8fCAnQ29tcG9uZW50JykgKyBcIilcIjtcbiAgICBTdHlsZWQuZGVmYXVsdFByb3BzID0gdGFnLmRlZmF1bHRQcm9wcztcbiAgICBTdHlsZWQuX19lbW90aW9uX3JlYWwgPSBTdHlsZWQ7XG4gICAgU3R5bGVkLl9fZW1vdGlvbl9iYXNlID0gYmFzZVRhZztcbiAgICBTdHlsZWQuX19lbW90aW9uX3N0eWxlcyA9IHN0eWxlcztcbiAgICBTdHlsZWQuX19lbW90aW9uX2ZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3A7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0eWxlZCwgJ3RvU3RyaW5nJywge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKCkge1xuICAgICAgICBpZiAodGFyZ2V0Q2xhc3NOYW1lID09PSB1bmRlZmluZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHJldHVybiAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJztcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lOiBjb2VyY2UgdW5kZWZpbmVkIHRvIHN0cmluZ1xuXG5cbiAgICAgICAgcmV0dXJuIFwiLlwiICsgdGFyZ2V0Q2xhc3NOYW1lO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgU3R5bGVkLndpdGhDb21wb25lbnQgPSBmdW5jdGlvbiAobmV4dFRhZywgbmV4dE9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVTdHlsZWQobmV4dFRhZywgX2V4dGVuZHMoe30sIG9wdGlvbnMsIG5leHRPcHRpb25zLCB7XG4gICAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKFN0eWxlZCwgbmV4dE9wdGlvbnMsIHRydWUpXG4gICAgICB9KSkuYXBwbHkodm9pZCAwLCBzdHlsZXMpO1xuICAgIH07XG5cbiAgICByZXR1cm4gU3R5bGVkO1xuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3R5bGVkO1xuIiwiaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdyZWFjdCc7XG5pbXBvcnQgJ0BlbW90aW9uL2lzLXByb3AtdmFsaWQnO1xuaW1wb3J0IGNyZWF0ZVN0eWxlZCBmcm9tICcuLi9iYXNlL2Rpc3QvZW1vdGlvbi1zdHlsZWQtYmFzZS5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0ICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciB0YWdzID0gWydhJywgJ2FiYnInLCAnYWRkcmVzcycsICdhcmVhJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYXVkaW8nLCAnYicsICdiYXNlJywgJ2JkaScsICdiZG8nLCAnYmlnJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FudmFzJywgJ2NhcHRpb24nLCAnY2l0ZScsICdjb2RlJywgJ2NvbCcsICdjb2xncm91cCcsICdkYXRhJywgJ2RhdGFsaXN0JywgJ2RkJywgJ2RlbCcsICdkZXRhaWxzJywgJ2RmbicsICdkaWFsb2cnLCAnZGl2JywgJ2RsJywgJ2R0JywgJ2VtJywgJ2VtYmVkJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2knLCAnaWZyYW1lJywgJ2ltZycsICdpbnB1dCcsICdpbnMnLCAna2JkJywgJ2tleWdlbicsICdsYWJlbCcsICdsZWdlbmQnLCAnbGknLCAnbGluaycsICdtYWluJywgJ21hcCcsICdtYXJrJywgJ21hcnF1ZWUnLCAnbWVudScsICdtZW51aXRlbScsICdtZXRhJywgJ21ldGVyJywgJ25hdicsICdub3NjcmlwdCcsICdvYmplY3QnLCAnb2wnLCAnb3B0Z3JvdXAnLCAnb3B0aW9uJywgJ291dHB1dCcsICdwJywgJ3BhcmFtJywgJ3BpY3R1cmUnLCAncHJlJywgJ3Byb2dyZXNzJywgJ3EnLCAncnAnLCAncnQnLCAncnVieScsICdzJywgJ3NhbXAnLCAnc2NyaXB0JywgJ3NlY3Rpb24nLCAnc2VsZWN0JywgJ3NtYWxsJywgJ3NvdXJjZScsICdzcGFuJywgJ3N0cm9uZycsICdzdHlsZScsICdzdWInLCAnc3VtbWFyeScsICdzdXAnLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGltZScsICd0aXRsZScsICd0cicsICd0cmFjaycsICd1JywgJ3VsJywgJ3ZhcicsICd2aWRlbycsICd3YnInLCAvLyBTVkdcbidjaXJjbGUnLCAnY2xpcFBhdGgnLCAnZGVmcycsICdlbGxpcHNlJywgJ2ZvcmVpZ25PYmplY3QnLCAnZycsICdpbWFnZScsICdsaW5lJywgJ2xpbmVhckdyYWRpZW50JywgJ21hc2snLCAncGF0aCcsICdwYXR0ZXJuJywgJ3BvbHlnb24nLCAncG9seWxpbmUnLCAncmFkaWFsR3JhZGllbnQnLCAncmVjdCcsICdzdG9wJywgJ3N2ZycsICd0ZXh0JywgJ3RzcGFuJ107XG5cbnZhciBuZXdTdHlsZWQgPSBjcmVhdGVTdHlsZWQuYmluZCgpO1xudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWdOYW1lKSB7XG4gIC8vICRGbG93Rml4TWU6IHdlIGNhbiBpZ25vcmUgdGhpcyBiZWNhdXNlIGl0cyBleHBvc2VkIHR5cGUgaXMgZGVmaW5lZCBieSB0aGUgQ3JlYXRlU3R5bGVkIHR5cGVcbiAgbmV3U3R5bGVkW3RhZ05hbWVdID0gbmV3U3R5bGVkKHRhZ05hbWUpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG5ld1N0eWxlZDtcbiIsIi8qKiBAbGljZW5zZSBNVUkgdjUuMTAuNlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IGVtU3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0eWxlc0ZhY3RvcnkgPSBlbVN0eWxlZCh0YWcsIG9wdGlvbnMpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuICguLi5zdHlsZXMpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnID8gYFwiJHt0YWd9XCJgIDogJ2NvbXBvbmVudCc7XG5cbiAgICAgIGlmIChzdHlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFNlZW1zIGxpa2UgeW91IGNhbGxlZCBcXGBzdHlsZWQoJHtjb21wb25lbnR9KSgpXFxgIHdpdGhvdXQgYSBcXGBzdHlsZVxcYCBhcmd1bWVudC5gLCAnWW91IG11c3QgcHJvdmlkZSBhIGBzdHlsZXNgIGFyZ3VtZW50OiBgc3R5bGVkKFwiZGl2XCIpKHN0eWxlWW91Rm9yZ290VG9QYXNzKWAuJ10uam9pbignXFxuJykpO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZXMuc29tZShzdHlsZSA9PiBzdHlsZSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IHRoZSBzdHlsZWQoJHtjb21wb25lbnR9KSguLi5hcmdzKSBBUEkgcmVxdWlyZXMgYWxsIGl0cyBhcmdzIHRvIGJlIGRlZmluZWQuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZXNGYWN0b3J5KC4uLnN0eWxlcyk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZXNGYWN0b3J5O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5cbmV4cG9ydCBjb25zdCBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzID0gKHRhZywgcHJvY2Vzc29yKSA9PiB7XG4gIC8vIEVtb3Rpb24gYXR0YWNoZXMgYWxsIHRoZSBzdHlsZXMgYXMgYF9fZW1vdGlvbl9zdHlsZXNgLlxuICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vYmxvYi8xNmQ5NzFkMGRhMjI5NTk2ZDZiY2MzOWQyODJiYTk3NTNjOWVlN2NmL3BhY2thZ2VzL3N0eWxlZC9zcmMvYmFzZS5qcyNMMTg2XG4gIGlmIChBcnJheS5pc0FycmF5KHRhZy5fX2Vtb3Rpb25fc3R5bGVzKSkge1xuICAgIHRhZy5fX2Vtb3Rpb25fc3R5bGVzID0gcHJvY2Vzc29yKHRhZy5fX2Vtb3Rpb25fc3R5bGVzKTtcbiAgfVxufTtcbmV4cG9ydCB7IFRoZW1lQ29udGV4dCwga2V5ZnJhbWVzLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0eWxlZEVuZ2luZVByb3ZpZGVyIH0gZnJvbSAnLi9TdHlsZWRFbmdpbmVQcm92aWRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JhbFN0eWxlcyB9IGZyb20gJy4vR2xvYmFsU3R5bGVzJzsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJzsgLy8gVGhlIGJyZWFrcG9pbnQgKipzdGFydCoqIGF0IHRoaXMgdmFsdWUuXG4vLyBGb3IgaW5zdGFuY2Ugd2l0aCB0aGUgZmlyc3QgYnJlYWtwb2ludCB4czogW3hzLCBzbVsuXG5cbmV4cG9ydCBjb25zdCB2YWx1ZXMgPSB7XG4gIHhzOiAwLFxuICAvLyBwaG9uZVxuICBzbTogNjAwLFxuICAvLyB0YWJsZXRcbiAgbWQ6IDkwMCxcbiAgLy8gc21hbGwgbGFwdG9wXG4gIGxnOiAxMjAwLFxuICAvLyBkZXNrdG9wXG4gIHhsOiAxNTM2IC8vIGxhcmdlIHNjcmVlblxuXG59O1xuY29uc3QgZGVmYXVsdEJyZWFrcG9pbnRzID0ge1xuICAvLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4gIC8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbiAga2V5czogWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddLFxuICB1cDoga2V5ID0+IGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlc1trZXldfXB4KWBcbn07XG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKSB7XG4gIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5yZWR1Y2UoKGFjYywgaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGFjY1t0aGVtZUJyZWFrcG9pbnRzLnVwKHRoZW1lQnJlYWtwb2ludHMua2V5c1tpbmRleF0pXSA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWVbaW5kZXhdKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcFZhbHVlKS5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgLy8ga2V5IGlzIGJyZWFrcG9pbnRcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGVtZUJyZWFrcG9pbnRzLnZhbHVlcyB8fCB2YWx1ZXMpLmluZGV4T2YoYnJlYWtwb2ludCkgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG1lZGlhS2V5ID0gdGhlbWVCcmVha3BvaW50cy51cChicmVha3BvaW50KTtcbiAgICAgICAgYWNjW21lZGlhS2V5XSA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWVbYnJlYWtwb2ludF0sIGJyZWFrcG9pbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3NzS2V5ID0gYnJlYWtwb2ludDtcbiAgICAgICAgYWNjW2Nzc0tleV0gPSBwcm9wVmFsdWVbY3NzS2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlKTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gYnJlYWtwb2ludHMoc3R5bGVGdW5jdGlvbikge1xuICBjb25zdCBuZXdTdHlsZUZ1bmN0aW9uID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gICAgY29uc3QgYmFzZSA9IHN0eWxlRnVuY3Rpb24ocHJvcHMpO1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgY29uc3QgZXh0ZW5kZWQgPSB0aGVtZUJyZWFrcG9pbnRzLmtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKHByb3BzW2tleV0pIHtcbiAgICAgICAgYWNjID0gYWNjIHx8IHt9O1xuICAgICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cChrZXkpXSA9IHN0eWxlRnVuY3Rpb24oX2V4dGVuZHMoe1xuICAgICAgICAgIHRoZW1lXG4gICAgICAgIH0sIHByb3BzW2tleV0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBudWxsKTtcbiAgICByZXR1cm4gbWVyZ2UoYmFzZSwgZXh0ZW5kZWQpO1xuICB9O1xuXG4gIG5ld1N0eWxlRnVuY3Rpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IF9leHRlbmRzKHt9LCBzdHlsZUZ1bmN0aW9uLnByb3BUeXBlcywge1xuICAgIHhzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHNtOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG1kOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGxnOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHhsOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pIDoge307XG4gIG5ld1N0eWxlRnVuY3Rpb24uZmlsdGVyUHJvcHMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgLi4uc3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wc107XG4gIHJldHVybiBuZXdTdHlsZUZ1bmN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQgPSB7fSkge1xuICB2YXIgX2JyZWFrcG9pbnRzSW5wdXQka2V5O1xuXG4gIGNvbnN0IGJyZWFrcG9pbnRzSW5PcmRlciA9IChfYnJlYWtwb2ludHNJbnB1dCRrZXkgPSBicmVha3BvaW50c0lucHV0LmtleXMpID09IG51bGwgPyB2b2lkIDAgOiBfYnJlYWtwb2ludHNJbnB1dCRrZXkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRTdHlsZUtleSA9IGJyZWFrcG9pbnRzSW5wdXQudXAoa2V5KTtcbiAgICBhY2NbYnJlYWtwb2ludFN0eWxlS2V5XSA9IHt9O1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzSW5PcmRlciB8fCB7fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVVbnVzZWRCcmVha3BvaW50cyhicmVha3BvaW50S2V5cywgc3R5bGUpIHtcbiAgcmV0dXJuIGJyZWFrcG9pbnRLZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50T3V0cHV0ID0gYWNjW2tleV07XG4gICAgY29uc3QgaXNCcmVha3BvaW50VW51c2VkID0gIWJyZWFrcG9pbnRPdXRwdXQgfHwgT2JqZWN0LmtleXMoYnJlYWtwb2ludE91dHB1dCkubGVuZ3RoID09PSAwO1xuXG4gICAgaWYgKGlzQnJlYWtwb2ludFVudXNlZCkge1xuICAgICAgZGVsZXRlIGFjY1trZXldO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHN0eWxlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcihicmVha3BvaW50c0lucHV0LCAuLi5zdHlsZXMpIHtcbiAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdChicmVha3BvaW50c0lucHV0KTtcbiAgY29uc3QgbWVyZ2VkT3V0cHV0ID0gW2VtcHR5QnJlYWtwb2ludHMsIC4uLnN0eWxlc10ucmVkdWNlKChwcmV2LCBuZXh0KSA9PiBkZWVwbWVyZ2UocHJldiwgbmV4dCksIHt9KTtcbiAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpLCBtZXJnZWRPdXRwdXQpO1xufSAvLyBjb21wdXRlIGJhc2UgZm9yIHJlc3BvbnNpdmUgdmFsdWVzOyBlLmcuLFxuLy8gWzEsMiwzXSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbi8vIHt4czogMSwgc206IDIsIG1kOiAzfSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cykge1xuICAvLyBmaXhlZCB2YWx1ZVxuICBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgYmFzZSA9IHt9O1xuICBjb25zdCBicmVha3BvaW50c0tleXMgPSBPYmplY3Qua2V5cyh0aGVtZUJyZWFrcG9pbnRzKTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKChicmVha3BvaW50LCBpKSA9PiB7XG4gICAgICBpZiAoaSA8IGJyZWFrcG9pbnRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgICAgaWYgKGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgICBiYXNlW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBiYXNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgdmFsdWVzOiBicmVha3BvaW50VmFsdWVzLFxuICBicmVha3BvaW50czogdGhlbWVCcmVha3BvaW50cyxcbiAgYmFzZTogY3VzdG9tQmFzZVxufSkge1xuICBjb25zdCBiYXNlID0gY3VzdG9tQmFzZSB8fCBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYmFzZSk7XG5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJyZWFrcG9pbnRWYWx1ZXM7XG4gIH1cblxuICBsZXQgcHJldmlvdXM7XG4gIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBicmVha3BvaW50LCBpKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludFZhbHVlcykpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbaV0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbaV0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gaTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBicmVha3BvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGJyZWFrcG9pbnRzOyIsImltcG9ydCB7IGZvcm1hdE11aUVycm9yTWVzc2FnZSBhcyBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIH0gZnJvbSBcIkBtdWkvdXRpbHNcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgbnVtYmVyIHdob3NlIHZhbHVlIGlzIGxpbWl0ZWQgdG8gdGhlIGdpdmVuIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBiZSBjbGFtcGVkXG4gKiBAcGFyYW0ge251bWJlcn0gbWluIFRoZSBsb3dlciBib3VuZGFyeSBvZiB0aGUgb3V0cHV0IHJhbmdlXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4IFRoZSB1cHBlciBib3VuZGFyeSBvZiB0aGUgb3V0cHV0IHJhbmdlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBBIG51bWJlciBpbiB0aGUgcmFuZ2UgW21pbiwgbWF4XVxuICovXG5mdW5jdGlvbiBjbGFtcCh2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh2YWx1ZSA8IG1pbiB8fCB2YWx1ZSA+IG1heCkge1xuICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgJHt2YWx1ZX0gaXMgb3V0IG9mIHJhbmdlIFske21pbn0sICR7bWF4fV0uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG1pbiwgdmFsdWUpLCBtYXgpO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gQ1NTIGhleCBmb3JtYXQgdG8gQ1NTIHJnYiBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBIZXggY29sb3IsIGkuZS4gI25ubiBvciAjbm5ubm5uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyByZ2IgY29sb3Igc3RyaW5nXG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9SZ2IoY29sb3IpIHtcbiAgY29sb3IgPSBjb2xvci5zbGljZSgxKTtcbiAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGAuezEsJHtjb2xvci5sZW5ndGggPj0gNiA/IDIgOiAxfX1gLCAnZycpO1xuICBsZXQgY29sb3JzID0gY29sb3IubWF0Y2gocmUpO1xuXG4gIGlmIChjb2xvcnMgJiYgY29sb3JzWzBdLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAobiA9PiBuICsgbik7XG4gIH1cblxuICByZXR1cm4gY29sb3JzID8gYHJnYiR7Y29sb3JzLmxlbmd0aCA9PT0gNCA/ICdhJyA6ICcnfSgke2NvbG9ycy5tYXAoKG4sIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGluZGV4IDwgMyA/IHBhcnNlSW50KG4sIDE2KSA6IE1hdGgucm91bmQocGFyc2VJbnQobiwgMTYpIC8gMjU1ICogMTAwMCkgLyAxMDAwO1xuICB9KS5qb2luKCcsICcpfSlgIDogJyc7XG59XG5cbmZ1bmN0aW9uIGludFRvSGV4KGludCkge1xuICBjb25zdCBoZXggPSBpbnQudG9TdHJpbmcoMTYpO1xuICByZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/IGAwJHtoZXh9YCA6IGhleDtcbn1cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgdHlwZSBhbmQgdmFsdWVzIG9mIGEgY29sb3IuXG4gKlxuICogTm90ZTogRG9lcyBub3Qgc3VwcG9ydCByZ2IgJSB2YWx1ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIEEgTVVJIGNvbG9yIG9iamVjdDoge3R5cGU6IHN0cmluZywgdmFsdWVzOiBudW1iZXJbXX1cbiAqL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvbXBvc2VDb2xvcihjb2xvcikge1xuICAvLyBJZGVtcG90ZW50XG4gIGlmIChjb2xvci50eXBlKSB7XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG5cbiAgaWYgKGNvbG9yLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgcmV0dXJuIGRlY29tcG9zZUNvbG9yKGhleFRvUmdiKGNvbG9yKSk7XG4gIH1cblxuICBjb25zdCBtYXJrZXIgPSBjb2xvci5pbmRleE9mKCcoJyk7XG4gIGNvbnN0IHR5cGUgPSBjb2xvci5zdWJzdHJpbmcoMCwgbWFya2VyKTtcblxuICBpZiAoWydyZ2InLCAncmdiYScsICdoc2wnLCAnaHNsYScsICdjb2xvciddLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFVuc3VwcG9ydGVkIFxcYCR7Y29sb3J9XFxgIGNvbG9yLlxuVGhlIGZvbGxvd2luZyBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQ6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKCkuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoOSwgY29sb3IpKTtcbiAgfVxuXG4gIGxldCB2YWx1ZXMgPSBjb2xvci5zdWJzdHJpbmcobWFya2VyICsgMSwgY29sb3IubGVuZ3RoIC0gMSk7XG4gIGxldCBjb2xvclNwYWNlO1xuXG4gIGlmICh0eXBlID09PSAnY29sb3InKSB7XG4gICAgdmFsdWVzID0gdmFsdWVzLnNwbGl0KCcgJyk7XG4gICAgY29sb3JTcGFjZSA9IHZhbHVlcy5zaGlmdCgpO1xuXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDQgJiYgdmFsdWVzWzNdLmNoYXJBdCgwKSA9PT0gJy8nKSB7XG4gICAgICB2YWx1ZXNbM10gPSB2YWx1ZXNbM10uc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgaWYgKFsnc3JnYicsICdkaXNwbGF5LXAzJywgJ2E5OC1yZ2InLCAncHJvcGhvdG8tcmdiJywgJ3JlYy0yMDIwJ10uaW5kZXhPZihjb2xvclNwYWNlKSA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiB1bnN1cHBvcnRlZCBcXGAke2NvbG9yU3BhY2V9XFxgIGNvbG9yIHNwYWNlLlxuVGhlIGZvbGxvd2luZyBjb2xvciBzcGFjZXMgYXJlIHN1cHBvcnRlZDogc3JnYiwgZGlzcGxheS1wMywgYTk4LXJnYiwgcHJvcGhvdG8tcmdiLCByZWMtMjAyMC5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMCwgY29sb3JTcGFjZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJywnKTtcbiAgfVxuXG4gIHZhbHVlcyA9IHZhbHVlcy5tYXAodmFsdWUgPT4gcGFyc2VGbG9hdCh2YWx1ZSkpO1xuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgdmFsdWVzLFxuICAgIGNvbG9yU3BhY2VcbiAgfTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGNoYW5uZWwgY3JlYXRlZCBmcm9tIHRoZSBpbnB1dCBjb2xvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBjaGFubmVsIGZvciB0aGUgY29sb3IsIHRoYXQgY2FuIGJlIHVzZWQgaW4gcmdiYSBvciBoc2xhIGNvbG9yc1xuICovXG5cbmV4cG9ydCBjb25zdCBjb2xvckNoYW5uZWwgPSBjb2xvciA9PiB7XG4gIGNvbnN0IGRlY29tcG9zZWRDb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGRlY29tcG9zZWRDb2xvci52YWx1ZXMuc2xpY2UoMCwgMykubWFwKCh2YWwsIGlkeCkgPT4gZGVjb21wb3NlZENvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xICYmIGlkeCAhPT0gMCA/IGAke3ZhbH0lYCA6IHZhbCkuam9pbignICcpO1xufTtcbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBvYmplY3Qgd2l0aCB0eXBlIGFuZCB2YWx1ZXMgdG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0ge29iamVjdH0gY29sb3IgLSBEZWNvbXBvc2VkIGNvbG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IudHlwZSAtIE9uZSBvZjogJ3JnYicsICdyZ2JhJywgJ2hzbCcsICdoc2xhJywgJ2NvbG9yJ1xuICogQHBhcmFtIHthcnJheX0gY29sb3IudmFsdWVzIC0gW24sbixuXSBvciBbbixuLG4sbl1cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZ1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByZWNvbXBvc2VDb2xvcihjb2xvcikge1xuICBjb25zdCB7XG4gICAgdHlwZSxcbiAgICBjb2xvclNwYWNlXG4gIH0gPSBjb2xvcjtcbiAgbGV0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGNvbG9yO1xuXG4gIGlmICh0eXBlLmluZGV4T2YoJ3JnYicpICE9PSAtMSkge1xuICAgIC8vIE9ubHkgY29udmVydCB0aGUgZmlyc3QgMyB2YWx1ZXMgdG8gaW50IChpLmUuIG5vdCBhbHBoYSlcbiAgICB2YWx1ZXMgPSB2YWx1ZXMubWFwKChuLCBpKSA9PiBpIDwgMyA/IHBhcnNlSW50KG4sIDEwKSA6IG4pO1xuICB9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgdmFsdWVzWzFdID0gYCR7dmFsdWVzWzFdfSVgO1xuICAgIHZhbHVlc1syXSA9IGAke3ZhbHVlc1syXX0lYDtcbiAgfVxuXG4gIGlmICh0eXBlLmluZGV4T2YoJ2NvbG9yJykgIT09IC0xKSB7XG4gICAgdmFsdWVzID0gYCR7Y29sb3JTcGFjZX0gJHt2YWx1ZXMuam9pbignICcpfWA7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWVzID0gYCR7dmFsdWVzLmpvaW4oJywgJyl9YDtcbiAgfVxuXG4gIHJldHVybiBgJHt0eXBlfSgke3ZhbHVlc30pYDtcbn1cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIENTUyByZ2IgZm9ybWF0IHRvIENTUyBoZXggZm9ybWF0LlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gUkdCIGNvbG9yLCBpLmUuIHJnYihuLCBuLCBuKVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgcmdiIGNvbG9yIHN0cmluZywgaS5lLiAjbm5ubm5uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYlRvSGV4KGNvbG9yKSB7XG4gIC8vIElkZW1wb3RlbnRcbiAgaWYgKGNvbG9yLmluZGV4T2YoJyMnKSA9PT0gMCkge1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGAjJHt2YWx1ZXMubWFwKChuLCBpKSA9PiBpbnRUb0hleChpID09PSAzID8gTWF0aC5yb3VuZCgyNTUgKiBuKSA6IG4pKS5qb2luKCcnKX1gO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gaHNsIGZvcm1hdCB0byByZ2IgZm9ybWF0LlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gSFNMIGNvbG9yIHZhbHVlc1xuICogQHJldHVybnMge3N0cmluZ30gcmdiIGNvbG9yIHZhbHVlc1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoc2xUb1JnYihjb2xvcikge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgY29uc3Qge1xuICAgIHZhbHVlc1xuICB9ID0gY29sb3I7XG4gIGNvbnN0IGggPSB2YWx1ZXNbMF07XG4gIGNvbnN0IHMgPSB2YWx1ZXNbMV0gLyAxMDA7XG4gIGNvbnN0IGwgPSB2YWx1ZXNbMl0gLyAxMDA7XG4gIGNvbnN0IGEgPSBzICogTWF0aC5taW4obCwgMSAtIGwpO1xuXG4gIGNvbnN0IGYgPSAobiwgayA9IChuICsgaCAvIDMwKSAlIDEyKSA9PiBsIC0gYSAqIE1hdGgubWF4KE1hdGgubWluKGsgLSAzLCA5IC0gaywgMSksIC0xKTtcblxuICBsZXQgdHlwZSA9ICdyZ2InO1xuICBjb25zdCByZ2IgPSBbTWF0aC5yb3VuZChmKDApICogMjU1KSwgTWF0aC5yb3VuZChmKDgpICogMjU1KSwgTWF0aC5yb3VuZChmKDQpICogMjU1KV07XG5cbiAgaWYgKGNvbG9yLnR5cGUgPT09ICdoc2xhJykge1xuICAgIHR5cGUgKz0gJ2EnO1xuICAgIHJnYi5wdXNoKHZhbHVlc1szXSk7XG4gIH1cblxuICByZXR1cm4gcmVjb21wb3NlQ29sb3Ioe1xuICAgIHR5cGUsXG4gICAgdmFsdWVzOiByZ2JcbiAgfSk7XG59XG4vKipcbiAqIFRoZSByZWxhdGl2ZSBicmlnaHRuZXNzIG9mIGFueSBwb2ludCBpbiBhIGNvbG9yIHNwYWNlLFxuICogbm9ybWFsaXplZCB0byAwIGZvciBkYXJrZXN0IGJsYWNrIGFuZCAxIGZvciBsaWdodGVzdCB3aGl0ZS5cbiAqXG4gKiBGb3JtdWxhOiBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLVRFQ0hTL0cxNy5odG1sI0cxNy10ZXN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHJldHVybnMge251bWJlcn0gVGhlIHJlbGF0aXZlIGJyaWdodG5lc3Mgb2YgdGhlIGNvbG9yIGluIHRoZSByYW5nZSAwIC0gMVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMdW1pbmFuY2UoY29sb3IpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGxldCByZ2IgPSBjb2xvci50eXBlID09PSAnaHNsJyA/IGRlY29tcG9zZUNvbG9yKGhzbFRvUmdiKGNvbG9yKSkudmFsdWVzIDogY29sb3IudmFsdWVzO1xuICByZ2IgPSByZ2IubWFwKHZhbCA9PiB7XG4gICAgaWYgKGNvbG9yLnR5cGUgIT09ICdjb2xvcicpIHtcbiAgICAgIHZhbCAvPSAyNTU7IC8vIG5vcm1hbGl6ZWRcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsIDw9IDAuMDM5MjggPyB2YWwgLyAxMi45MiA6ICgodmFsICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNDtcbiAgfSk7IC8vIFRydW5jYXRlIGF0IDMgZGlnaXRzXG5cbiAgcmV0dXJuIE51bWJlcigoMC4yMTI2ICogcmdiWzBdICsgMC43MTUyICogcmdiWzFdICsgMC4wNzIyICogcmdiWzJdKS50b0ZpeGVkKDMpKTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgY29udHJhc3QgcmF0aW8gYmV0d2VlbiB0d28gY29sb3JzLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yZWdyb3VuZCAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKClcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYWNrZ3JvdW5kIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKVxuICogQHJldHVybnMge251bWJlcn0gQSBjb250cmFzdCByYXRpbyB2YWx1ZSBpbiB0aGUgcmFuZ2UgMCAtIDIxLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cmFzdFJhdGlvKGZvcmVncm91bmQsIGJhY2tncm91bmQpIHtcbiAgY29uc3QgbHVtQSA9IGdldEx1bWluYW5jZShmb3JlZ3JvdW5kKTtcbiAgY29uc3QgbHVtQiA9IGdldEx1bWluYW5jZShiYWNrZ3JvdW5kKTtcbiAgcmV0dXJuIChNYXRoLm1heChsdW1BLCBsdW1CKSArIDAuMDUpIC8gKE1hdGgubWluKGx1bUEsIGx1bUIpICsgMC4wNSk7XG59XG4vKipcbiAqIFNldHMgdGhlIGFic29sdXRlIHRyYW5zcGFyZW5jeSBvZiBhIGNvbG9yLlxuICogQW55IGV4aXN0aW5nIGFscGhhIHZhbHVlcyBhcmUgb3ZlcndyaXR0ZW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSB2YWx1ZSB0byBzZXQgdGhlIGFscGhhIGNoYW5uZWwgdG8gaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhbHBoYShjb2xvciwgdmFsdWUpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIHZhbHVlID0gY2xhbXAodmFsdWUpO1xuXG4gIGlmIChjb2xvci50eXBlID09PSAncmdiJyB8fCBjb2xvci50eXBlID09PSAnaHNsJykge1xuICAgIGNvbG9yLnR5cGUgKz0gJ2EnO1xuICB9XG5cbiAgaWYgKGNvbG9yLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICBjb2xvci52YWx1ZXNbM10gPSBgLyR7dmFsdWV9YDtcbiAgfSBlbHNlIHtcbiAgICBjb2xvci52YWx1ZXNbM10gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZWNvbXBvc2VDb2xvcihjb2xvcik7XG59XG4vKipcbiAqIERhcmtlbnMgYSBjb2xvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudCAtIG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb2VmZmljaWVudCA9IGNsYW1wKGNvZWZmaWNpZW50KTtcblxuICBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdoc2wnKSAhPT0gLTEpIHtcbiAgICBjb2xvci52YWx1ZXNbMl0gKj0gMSAtIGNvZWZmaWNpZW50O1xuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZigncmdiJykgIT09IC0xIHx8IGNvbG9yLnR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICo9IDEgLSBjb2VmZmljaWVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuLyoqXG4gKiBMaWdodGVucyBhIGNvbG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50IC0gbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb2VmZmljaWVudCA9IGNsYW1wKGNvZWZmaWNpZW50KTtcblxuICBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdoc2wnKSAhPT0gLTEpIHtcbiAgICBjb2xvci52YWx1ZXNbMl0gKz0gKDEwMCAtIGNvbG9yLnZhbHVlc1syXSkgKiBjb2VmZmljaWVudDtcbiAgfSBlbHNlIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ3JnYicpICE9PSAtMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICBjb2xvci52YWx1ZXNbaV0gKz0gKDI1NSAtIGNvbG9yLnZhbHVlc1tpXSkgKiBjb2VmZmljaWVudDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICBjb2xvci52YWx1ZXNbaV0gKz0gKDEgLSBjb2xvci52YWx1ZXNbaV0pICogY29lZmZpY2llbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKGNvbG9yKTtcbn1cbi8qKlxuICogRGFya2VuIG9yIGxpZ2h0ZW4gYSBjb2xvciwgZGVwZW5kaW5nIG9uIGl0cyBsdW1pbmFuY2UuXG4gKiBMaWdodCBjb2xvcnMgYXJlIGRhcmtlbmVkLCBkYXJrIGNvbG9ycyBhcmUgbGlnaHRlbmVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50PTAuMTUgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCA9IDAuMTUpIHtcbiAgcmV0dXJuIGdldEx1bWluYW5jZShjb2xvcikgPiAwLjUgPyBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSA6IGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1widmFsdWVzXCIsIFwidW5pdFwiLCBcInN0ZXBcIl07XG4vLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4vLyBJdCBjYW4ndCBiZSBjb25maWd1cmVkIGFzIGl0J3MgdXNlZCBzdGF0aWNhbGx5IGZvciBwcm9wVHlwZXMuXG5leHBvcnQgY29uc3QgYnJlYWtwb2ludEtleXMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ107XG5cbmNvbnN0IHNvcnRCcmVha3BvaW50c1ZhbHVlcyA9IHZhbHVlcyA9PiB7XG4gIGNvbnN0IGJyZWFrcG9pbnRzQXNBcnJheSA9IE9iamVjdC5rZXlzKHZhbHVlcykubWFwKGtleSA9PiAoe1xuICAgIGtleSxcbiAgICB2YWw6IHZhbHVlc1trZXldXG4gIH0pKSB8fCBbXTsgLy8gU29ydCBpbiBhc2NlbmRpbmcgb3JkZXJcblxuICBicmVha3BvaW50c0FzQXJyYXkuc29ydCgoYnJlYWtwb2ludDEsIGJyZWFrcG9pbnQyKSA9PiBicmVha3BvaW50MS52YWwgLSBicmVha3BvaW50Mi52YWwpO1xuICByZXR1cm4gYnJlYWtwb2ludHNBc0FycmF5LnJlZHVjZSgoYWNjLCBvYmopID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFjYywge1xuICAgICAgW29iai5rZXldOiBvYmoudmFsXG4gICAgfSk7XG4gIH0sIHt9KTtcbn07IC8vIEtlZXAgaW4gbWluZCB0aGF0IEBtZWRpYSBpcyBpbmNsdXNpdmUgYnkgdGhlIENTUyBzcGVjaWZpY2F0aW9uLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzKSB7XG4gIGNvbnN0IHtcbiAgICAvLyBUaGUgYnJlYWtwb2ludCAqKnN0YXJ0KiogYXQgdGhpcyB2YWx1ZS5cbiAgICAvLyBGb3IgaW5zdGFuY2Ugd2l0aCB0aGUgZmlyc3QgYnJlYWtwb2ludCB4czogW3hzLCBzbSkuXG4gICAgdmFsdWVzID0ge1xuICAgICAgeHM6IDAsXG4gICAgICAvLyBwaG9uZVxuICAgICAgc206IDYwMCxcbiAgICAgIC8vIHRhYmxldFxuICAgICAgbWQ6IDkwMCxcbiAgICAgIC8vIHNtYWxsIGxhcHRvcFxuICAgICAgbGc6IDEyMDAsXG4gICAgICAvLyBkZXNrdG9wXG4gICAgICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cblxuICAgIH0sXG4gICAgdW5pdCA9ICdweCcsXG4gICAgc3RlcCA9IDVcbiAgfSA9IGJyZWFrcG9pbnRzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGJyZWFrcG9pbnRzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IHNvcnRlZFZhbHVlcyA9IHNvcnRCcmVha3BvaW50c1ZhbHVlcyh2YWx1ZXMpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc29ydGVkVmFsdWVzKTtcblxuICBmdW5jdGlvbiB1cChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWV9JHt1bml0fSlgO1xuICB9XG5cbiAgZnVuY3Rpb24gZG93bihrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWF4LXdpZHRoOiR7dmFsdWUgLSBzdGVwIC8gMTAwfSR7dW5pdH0pYDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJldHdlZW4oc3RhcnQsIGVuZCkge1xuICAgIGNvbnN0IGVuZEluZGV4ID0ga2V5cy5pbmRleE9mKGVuZCk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDoke3R5cGVvZiB2YWx1ZXNbc3RhcnRdID09PSAnbnVtYmVyJyA/IHZhbHVlc1tzdGFydF0gOiBzdGFydH0ke3VuaXR9KSBhbmQgYCArIGAobWF4LXdpZHRoOiR7KGVuZEluZGV4ICE9PSAtMSAmJiB0eXBlb2YgdmFsdWVzW2tleXNbZW5kSW5kZXhdXSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5c1tlbmRJbmRleF1dIDogZW5kKSAtIHN0ZXAgLyAxMDB9JHt1bml0fSlgO1xuICB9XG5cbiAgZnVuY3Rpb24gb25seShrZXkpIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgKyAxIDwga2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXAoa2V5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdChrZXkpIHtcbiAgICAvLyBoYW5kbGUgZmlyc3QgYW5kIGxhc3Qga2V5IHNlcGFyYXRlbHksIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHlcbiAgICBjb25zdCBrZXlJbmRleCA9IGtleXMuaW5kZXhPZihrZXkpO1xuXG4gICAgaWYgKGtleUluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdXAoa2V5c1sxXSk7XG4gICAgfVxuXG4gICAgaWYgKGtleUluZGV4ID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBkb3duKGtleXNba2V5SW5kZXhdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmV0d2VlbihrZXksIGtleXNba2V5cy5pbmRleE9mKGtleSkgKyAxXSkucmVwbGFjZSgnQG1lZGlhJywgJ0BtZWRpYSBub3QgYWxsIGFuZCcpO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBrZXlzLFxuICAgIHZhbHVlczogc29ydGVkVmFsdWVzLFxuICAgIHVwLFxuICAgIGRvd24sXG4gICAgYmV0d2VlbixcbiAgICBvbmx5LFxuICAgIG5vdCxcbiAgICB1bml0XG4gIH0sIG90aGVyKTtcbn0iLCJjb25zdCBzaGFwZSA9IHtcbiAgYm9yZGVyUmFkaXVzOiA0XG59O1xuZXhwb3J0IGRlZmF1bHQgc2hhcGU7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImJyZWFrcG9pbnRzXCIsIFwicGFsZXR0ZVwiLCBcInNwYWNpbmdcIiwgXCJzaGFwZVwiXTtcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGNyZWF0ZUJyZWFrcG9pbnRzIGZyb20gJy4vY3JlYXRlQnJlYWtwb2ludHMnO1xuaW1wb3J0IHNoYXBlIGZyb20gJy4vc2hhcGUnO1xuaW1wb3J0IGNyZWF0ZVNwYWNpbmcgZnJvbSAnLi9jcmVhdGVTcGFjaW5nJztcblxuZnVuY3Rpb24gY3JlYXRlVGhlbWUob3B0aW9ucyA9IHt9LCAuLi5hcmdzKSB7XG4gIGNvbnN0IHtcbiAgICBicmVha3BvaW50czogYnJlYWtwb2ludHNJbnB1dCA9IHt9LFxuICAgIHBhbGV0dGU6IHBhbGV0dGVJbnB1dCA9IHt9LFxuICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dCxcbiAgICBzaGFwZTogc2hhcGVJbnB1dCA9IHt9XG4gIH0gPSBvcHRpb25zLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgYnJlYWtwb2ludHMgPSBjcmVhdGVCcmVha3BvaW50cyhicmVha3BvaW50c0lucHV0KTtcbiAgY29uc3Qgc3BhY2luZyA9IGNyZWF0ZVNwYWNpbmcoc3BhY2luZ0lucHV0KTtcbiAgbGV0IG11aVRoZW1lID0gZGVlcG1lcmdlKHtcbiAgICBicmVha3BvaW50cyxcbiAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIC8vIEluamVjdCBjb21wb25lbnQgZGVmaW5pdGlvbnMuXG4gICAgcGFsZXR0ZTogX2V4dGVuZHMoe1xuICAgICAgbW9kZTogJ2xpZ2h0J1xuICAgIH0sIHBhbGV0dGVJbnB1dCksXG4gICAgc3BhY2luZyxcbiAgICBzaGFwZTogX2V4dGVuZHMoe30sIHNoYXBlLCBzaGFwZUlucHV0KVxuICB9LCBvdGhlcik7XG4gIG11aVRoZW1lID0gYXJncy5yZWR1Y2UoKGFjYywgYXJndW1lbnQpID0+IGRlZXBtZXJnZShhY2MsIGFyZ3VtZW50KSwgbXVpVGhlbWUpO1xuICByZXR1cm4gbXVpVGhlbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVRoZW1lOyIsImltcG9ydCB7IGNyZWF0ZVVuYXJ5U3BhY2luZyB9IGZyb20gJy4uL3NwYWNpbmcnO1xuXG4vKiB0c2xpbnQ6ZW5hYmxlOnVuaWZpZWQtc2lnbmF0dXJlcyAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3BhY2luZyhzcGFjaW5nSW5wdXQgPSA4KSB7XG4gIC8vIEFscmVhZHkgdHJhbnNmb3JtZWQuXG4gIGlmIChzcGFjaW5nSW5wdXQubXVpKSB7XG4gICAgcmV0dXJuIHNwYWNpbmdJbnB1dDtcbiAgfSAvLyBNYXRlcmlhbCBEZXNpZ24gbGF5b3V0cyBhcmUgdmlzdWFsbHkgYmFsYW5jZWQuIE1vc3QgbWVhc3VyZW1lbnRzIGFsaWduIHRvIGFuIDhkcCBncmlkLCB3aGljaCBhbGlnbnMgYm90aCBzcGFjaW5nIGFuZCB0aGUgb3ZlcmFsbCBsYXlvdXQuXG4gIC8vIFNtYWxsZXIgY29tcG9uZW50cywgc3VjaCBhcyBpY29ucywgY2FuIGFsaWduIHRvIGEgNGRwIGdyaWQuXG4gIC8vIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2xheW91dC91bmRlcnN0YW5kaW5nLWxheW91dC5odG1sI3VzYWdlXG5cblxuICBjb25zdCB0cmFuc2Zvcm0gPSBjcmVhdGVVbmFyeVNwYWNpbmcoe1xuICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dFxuICB9KTtcblxuICBjb25zdCBzcGFjaW5nID0gKC4uLmFyZ3NJbnB1dCkgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIShhcmdzSW5wdXQubGVuZ3RoIDw9IDQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVG9vIG1hbnkgYXJndW1lbnRzIHByb3ZpZGVkLCBleHBlY3RlZCBiZXR3ZWVuIDAgYW5kIDQsIGdvdCAke2FyZ3NJbnB1dC5sZW5ndGh9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IGFyZ3NJbnB1dC5sZW5ndGggPT09IDAgPyBbMV0gOiBhcmdzSW5wdXQ7XG4gICAgcmV0dXJuIGFyZ3MubWFwKGFyZ3VtZW50ID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHRyYW5zZm9ybShhcmd1bWVudCk7XG4gICAgICByZXR1cm4gdHlwZW9mIG91dHB1dCA9PT0gJ251bWJlcicgPyBgJHtvdXRwdXR9cHhgIDogb3V0cHV0O1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfTtcblxuICBzcGFjaW5nLm11aSA9IHRydWU7XG4gIHJldHVybiBzcGFjaW5nO1xufSIsImltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcblxuZnVuY3Rpb24gY29tcG9zZSguLi5zdHlsZXMpIHtcbiAgY29uc3QgaGFuZGxlcnMgPSBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiB7XG4gICAgc3R5bGUuZmlsdGVyUHJvcHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgIGFjY1twcm9wXSA9IHN0eWxlO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICBpZiAoaGFuZGxlcnNbcHJvcF0pIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKGFjYywgaGFuZGxlcnNbcHJvcF0ocHJvcHMpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH07XG5cbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oYWNjLCBzdHlsZS5wcm9wVHlwZXMpLCB7fSkgOiB7fTtcbiAgZm4uZmlsdGVyUHJvcHMgPSBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBhY2MuY29uY2F0KHN0eWxlLmZpbHRlclByb3BzKSwgW10pO1xuICByZXR1cm4gZm47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2U7IiwiaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlVbml0LCBnZXRWYWx1ZSB9IGZyb20gJy4vc3BhY2luZyc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuXG5mdW5jdGlvbiBnZXRCb3JkZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gYCR7dmFsdWV9cHggc29saWRgO1xufVxuXG5leHBvcnQgY29uc3QgYm9yZGVyID0gc3R5bGUoe1xuICBwcm9wOiAnYm9yZGVyJyxcbiAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgdHJhbnNmb3JtOiBnZXRCb3JkZXJcbn0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclRvcCA9IHN0eWxlKHtcbiAgcHJvcDogJ2JvcmRlclRvcCcsXG4gIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gIHRyYW5zZm9ybTogZ2V0Qm9yZGVyXG59KTtcbmV4cG9ydCBjb25zdCBib3JkZXJSaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ2JvcmRlclJpZ2h0JyxcbiAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgdHJhbnNmb3JtOiBnZXRCb3JkZXJcbn0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlckJvdHRvbSA9IHN0eWxlKHtcbiAgcHJvcDogJ2JvcmRlckJvdHRvbScsXG4gIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gIHRyYW5zZm9ybTogZ2V0Qm9yZGVyXG59KTtcbmV4cG9ydCBjb25zdCBib3JkZXJMZWZ0ID0gc3R5bGUoe1xuICBwcm9wOiAnYm9yZGVyTGVmdCcsXG4gIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gIHRyYW5zZm9ybTogZ2V0Qm9yZGVyXG59KTtcbmV4cG9ydCBjb25zdCBib3JkZXJDb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JvcmRlckNvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJ1xufSk7XG5leHBvcnQgY29uc3QgYm9yZGVyVG9wQ29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdib3JkZXJUb3BDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZSdcbn0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclJpZ2h0Q29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdib3JkZXJSaWdodENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJ1xufSk7XG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tQ29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdib3JkZXJCb3R0b21Db2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZSdcbn0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlckxlZnRDb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JvcmRlckxlZnRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZSdcbn0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclJhZGl1cyA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmJvcmRlclJhZGl1cyAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmJvcmRlclJhZGl1cyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc2hhcGUuYm9yZGVyUmFkaXVzJywgNCwgJ2JvcmRlclJhZGl1cycpO1xuXG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBib3JkZXJSYWRpdXM6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmJvcmRlclJhZGl1cywgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbmJvcmRlclJhZGl1cy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBib3JkZXJSYWRpdXM6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuYm9yZGVyUmFkaXVzLmZpbHRlclByb3BzID0gWydib3JkZXJSYWRpdXMnXTtcbmNvbnN0IGJvcmRlcnMgPSBjb21wb3NlKGJvcmRlciwgYm9yZGVyVG9wLCBib3JkZXJSaWdodCwgYm9yZGVyQm90dG9tLCBib3JkZXJMZWZ0LCBib3JkZXJDb2xvciwgYm9yZGVyVG9wQ29sb3IsIGJvcmRlclJpZ2h0Q29sb3IsIGJvcmRlckJvdHRvbUNvbG9yLCBib3JkZXJMZWZ0Q29sb3IsIGJvcmRlclJhZGl1cyk7XG5leHBvcnQgZGVmYXVsdCBib3JkZXJzOyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgY29uc3QgZGlzcGxheVByaW50ID0gc3R5bGUoe1xuICBwcm9wOiAnZGlzcGxheVByaW50JyxcbiAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICB0cmFuc2Zvcm06IHZhbHVlID0+ICh7XG4gICAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICAgIGRpc3BsYXk6IHZhbHVlXG4gICAgfVxuICB9KVxufSk7XG5leHBvcnQgY29uc3QgZGlzcGxheVJhdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2Rpc3BsYXknXG59KTtcbmV4cG9ydCBjb25zdCBvdmVyZmxvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ292ZXJmbG93J1xufSk7XG5leHBvcnQgY29uc3QgdGV4dE92ZXJmbG93ID0gc3R5bGUoe1xuICBwcm9wOiAndGV4dE92ZXJmbG93J1xufSk7XG5leHBvcnQgY29uc3QgdmlzaWJpbGl0eSA9IHN0eWxlKHtcbiAgcHJvcDogJ3Zpc2liaWxpdHknXG59KTtcbmV4cG9ydCBjb25zdCB3aGl0ZVNwYWNlID0gc3R5bGUoe1xuICBwcm9wOiAnd2hpdGVTcGFjZSdcbn0pO1xuZXhwb3J0IGRlZmF1bHQgY29tcG9zZShkaXNwbGF5UHJpbnQsIGRpc3BsYXlSYXcsIG92ZXJmbG93LCB0ZXh0T3ZlcmZsb3csIHZpc2liaWxpdHksIHdoaXRlU3BhY2UpOyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgY29uc3QgZmxleEJhc2lzID0gc3R5bGUoe1xuICBwcm9wOiAnZmxleEJhc2lzJ1xufSk7XG5leHBvcnQgY29uc3QgZmxleERpcmVjdGlvbiA9IHN0eWxlKHtcbiAgcHJvcDogJ2ZsZXhEaXJlY3Rpb24nXG59KTtcbmV4cG9ydCBjb25zdCBmbGV4V3JhcCA9IHN0eWxlKHtcbiAgcHJvcDogJ2ZsZXhXcmFwJ1xufSk7XG5leHBvcnQgY29uc3QganVzdGlmeUNvbnRlbnQgPSBzdHlsZSh7XG4gIHByb3A6ICdqdXN0aWZ5Q29udGVudCdcbn0pO1xuZXhwb3J0IGNvbnN0IGFsaWduSXRlbXMgPSBzdHlsZSh7XG4gIHByb3A6ICdhbGlnbkl0ZW1zJ1xufSk7XG5leHBvcnQgY29uc3QgYWxpZ25Db250ZW50ID0gc3R5bGUoe1xuICBwcm9wOiAnYWxpZ25Db250ZW50J1xufSk7XG5leHBvcnQgY29uc3Qgb3JkZXIgPSBzdHlsZSh7XG4gIHByb3A6ICdvcmRlcidcbn0pO1xuZXhwb3J0IGNvbnN0IGZsZXggPSBzdHlsZSh7XG4gIHByb3A6ICdmbGV4J1xufSk7XG5leHBvcnQgY29uc3QgZmxleEdyb3cgPSBzdHlsZSh7XG4gIHByb3A6ICdmbGV4R3Jvdydcbn0pO1xuZXhwb3J0IGNvbnN0IGZsZXhTaHJpbmsgPSBzdHlsZSh7XG4gIHByb3A6ICdmbGV4U2hyaW5rJ1xufSk7XG5leHBvcnQgY29uc3QgYWxpZ25TZWxmID0gc3R5bGUoe1xuICBwcm9wOiAnYWxpZ25TZWxmJ1xufSk7XG5leHBvcnQgY29uc3QganVzdGlmeUl0ZW1zID0gc3R5bGUoe1xuICBwcm9wOiAnanVzdGlmeUl0ZW1zJ1xufSk7XG5leHBvcnQgY29uc3QganVzdGlmeVNlbGYgPSBzdHlsZSh7XG4gIHByb3A6ICdqdXN0aWZ5U2VsZidcbn0pO1xuY29uc3QgZmxleGJveCA9IGNvbXBvc2UoZmxleEJhc2lzLCBmbGV4RGlyZWN0aW9uLCBmbGV4V3JhcCwganVzdGlmeUNvbnRlbnQsIGFsaWduSXRlbXMsIGFsaWduQ29udGVudCwgb3JkZXIsIGZsZXgsIGZsZXhHcm93LCBmbGV4U2hyaW5rLCBhbGlnblNlbGYsIGp1c3RpZnlJdGVtcywganVzdGlmeVNlbGYpO1xuZXhwb3J0IGRlZmF1bHQgZmxleGJveDsiLCJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlVbml0LCBnZXRWYWx1ZSB9IGZyb20gJy4vc3BhY2luZyc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5leHBvcnQgY29uc3QgZ2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuZ2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZ2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ2dhcCcpO1xuXG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBnYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbmdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBnYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuZ2FwLmZpbHRlclByb3BzID0gWydnYXAnXTtcbmV4cG9ydCBjb25zdCBjb2x1bW5HYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5jb2x1bW5HYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jb2x1bW5HYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnY29sdW1uR2FwJyk7XG5cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGNvbHVtbkdhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcblxuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuY29sdW1uR2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuY29sdW1uR2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGNvbHVtbkdhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5jb2x1bW5HYXAuZmlsdGVyUHJvcHMgPSBbJ2NvbHVtbkdhcCddO1xuZXhwb3J0IGNvbnN0IHJvd0dhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLnJvd0dhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLnJvd0dhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdyb3dHYXAnKTtcblxuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgcm93R2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5yb3dHYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5yb3dHYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgcm93R2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbnJvd0dhcC5maWx0ZXJQcm9wcyA9IFsncm93R2FwJ107XG5leHBvcnQgY29uc3QgZ3JpZENvbHVtbiA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRDb2x1bW4nXG59KTtcbmV4cG9ydCBjb25zdCBncmlkUm93ID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFJvdydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvRmxvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvRmxvdydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvQ29sdW1ucyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvQ29sdW1ucydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvUm93cyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvUm93cydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVDb2x1bW5zJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlUm93cyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZVJvd3MnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVBcmVhcyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUFyZWFzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEFyZWEgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXJlYSdcbn0pO1xuY29uc3QgZ3JpZCA9IGNvbXBvc2UoZ2FwLCBjb2x1bW5HYXAsIHJvd0dhcCwgZ3JpZENvbHVtbiwgZ3JpZFJvdywgZ3JpZEF1dG9GbG93LCBncmlkQXV0b0NvbHVtbnMsIGdyaWRBdXRvUm93cywgZ3JpZFRlbXBsYXRlQ29sdW1ucywgZ3JpZFRlbXBsYXRlUm93cywgZ3JpZFRlbXBsYXRlQXJlYXMsIGdyaWRBcmVhKTtcbmV4cG9ydCBkZWZhdWx0IGdyaWQ7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmV4cG9ydCBjb25zdCBwb3NpdGlvbiA9IHN0eWxlKHtcbiAgcHJvcDogJ3Bvc2l0aW9uJ1xufSk7XG5leHBvcnQgY29uc3QgekluZGV4ID0gc3R5bGUoe1xuICBwcm9wOiAnekluZGV4JyxcbiAgdGhlbWVLZXk6ICd6SW5kZXgnXG59KTtcbmV4cG9ydCBjb25zdCB0b3AgPSBzdHlsZSh7XG4gIHByb3A6ICd0b3AnXG59KTtcbmV4cG9ydCBjb25zdCByaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ3JpZ2h0J1xufSk7XG5leHBvcnQgY29uc3QgYm90dG9tID0gc3R5bGUoe1xuICBwcm9wOiAnYm90dG9tJ1xufSk7XG5leHBvcnQgY29uc3QgbGVmdCA9IHN0eWxlKHtcbiAgcHJvcDogJ2xlZnQnXG59KTtcbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UocG9zaXRpb24sIHpJbmRleCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsiLCJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuZXhwb3J0IGNvbnN0IGNvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnY29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnXG59KTtcbmV4cG9ydCBjb25zdCBiZ2NvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnYmdjb2xvcicsXG4gIGNzc1Byb3BlcnR5OiAnYmFja2dyb3VuZENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJ1xufSk7XG5leHBvcnQgY29uc3QgYmFja2dyb3VuZENvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnYmFja2dyb3VuZENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJ1xufSk7XG5jb25zdCBwYWxldHRlID0gY29tcG9zZShjb2xvciwgYmdjb2xvciwgYmFja2dyb3VuZENvbG9yKTtcbmV4cG9ydCBkZWZhdWx0IHBhbGV0dGU7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuY29uc3QgYm94U2hhZG93ID0gc3R5bGUoe1xuICBwcm9wOiAnYm94U2hhZG93JyxcbiAgdGhlbWVLZXk6ICdzaGFkb3dzJ1xufSk7XG5leHBvcnQgZGVmYXVsdCBib3hTaGFkb3c7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCB2YWx1ZXMgYXMgYnJlYWtwb2ludHNWYWx1ZXMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcblxuZnVuY3Rpb24gdHJhbnNmb3JtKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8PSAxICYmIHZhbHVlICE9PSAwID8gYCR7dmFsdWUgKiAxMDB9JWAgOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHdpZHRoID0gc3R5bGUoe1xuICBwcm9wOiAnd2lkdGgnLFxuICB0cmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1heFdpZHRoID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMubWF4V2lkdGggIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5tYXhXaWR0aCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiB7XG4gICAgICB2YXIgX3Byb3BzJHRoZW1lLCBfcHJvcHMkdGhlbWUkYnJlYWtwb2ksIF9wcm9wcyR0aGVtZSRicmVha3BvaTI7XG5cbiAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSAoKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsID8gdm9pZCAwIDogKF9wcm9wcyR0aGVtZSRicmVha3BvaSA9IF9wcm9wcyR0aGVtZS5icmVha3BvaW50cykgPT0gbnVsbCA/IHZvaWQgMCA6IChfcHJvcHMkdGhlbWUkYnJlYWtwb2kyID0gX3Byb3BzJHRoZW1lJGJyZWFrcG9pLnZhbHVlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZSRicmVha3BvaTJbcHJvcFZhbHVlXSkgfHwgYnJlYWtwb2ludHNWYWx1ZXNbcHJvcFZhbHVlXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1heFdpZHRoOiBicmVha3BvaW50IHx8IHRyYW5zZm9ybShwcm9wVmFsdWUpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLm1heFdpZHRoLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xubWF4V2lkdGguZmlsdGVyUHJvcHMgPSBbJ21heFdpZHRoJ107XG5leHBvcnQgY29uc3QgbWluV2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICdtaW5XaWR0aCcsXG4gIHRyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgaGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBtYXhIZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdtYXhIZWlnaHQnLFxuICB0cmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1pbkhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ21pbkhlaWdodCcsXG4gIHRyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3Qgc2l6ZVdpZHRoID0gc3R5bGUoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnd2lkdGgnLFxuICB0cmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IHNpemVIZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJveFNpemluZyA9IHN0eWxlKHtcbiAgcHJvcDogJ2JveFNpemluZydcbn0pO1xuY29uc3Qgc2l6aW5nID0gY29tcG9zZSh3aWR0aCwgbWF4V2lkdGgsIG1pbldpZHRoLCBoZWlnaHQsIG1heEhlaWdodCwgbWluSGVpZ2h0LCBib3hTaXppbmcpO1xuZXhwb3J0IGRlZmF1bHQgc2l6aW5nOyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgY29uc3QgZm9udEZhbWlseSA9IHN0eWxlKHtcbiAgcHJvcDogJ2ZvbnRGYW1pbHknLFxuICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG59KTtcbmV4cG9ydCBjb25zdCBmb250U2l6ZSA9IHN0eWxlKHtcbiAgcHJvcDogJ2ZvbnRTaXplJyxcbiAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xufSk7XG5leHBvcnQgY29uc3QgZm9udFN0eWxlID0gc3R5bGUoe1xuICBwcm9wOiAnZm9udFN0eWxlJyxcbiAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xufSk7XG5leHBvcnQgY29uc3QgZm9udFdlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ2ZvbnRXZWlnaHQnLFxuICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG59KTtcbmV4cG9ydCBjb25zdCBsZXR0ZXJTcGFjaW5nID0gc3R5bGUoe1xuICBwcm9wOiAnbGV0dGVyU3BhY2luZydcbn0pO1xuZXhwb3J0IGNvbnN0IHRleHRUcmFuc2Zvcm0gPSBzdHlsZSh7XG4gIHByb3A6ICd0ZXh0VHJhbnNmb3JtJ1xufSk7XG5leHBvcnQgY29uc3QgbGluZUhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ2xpbmVIZWlnaHQnXG59KTtcbmV4cG9ydCBjb25zdCB0ZXh0QWxpZ24gPSBzdHlsZSh7XG4gIHByb3A6ICd0ZXh0QWxpZ24nXG59KTtcbmV4cG9ydCBjb25zdCB0eXBvZ3JhcGh5VmFyaWFudCA9IHN0eWxlKHtcbiAgcHJvcDogJ3R5cG9ncmFwaHknLFxuICBjc3NQcm9wZXJ0eTogZmFsc2UsXG4gIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbn0pO1xuY29uc3QgdHlwb2dyYXBoeSA9IGNvbXBvc2UodHlwb2dyYXBoeVZhcmlhbnQsIGZvbnRGYW1pbHksIGZvbnRTaXplLCBmb250U3R5bGUsIGZvbnRXZWlnaHQsIGxldHRlclNwYWNpbmcsIGxpbmVIZWlnaHQsIHRleHRBbGlnbiwgdGV4dFRyYW5zZm9ybSk7XG5leHBvcnQgZGVmYXVsdCB0eXBvZ3JhcGh5OyIsImltcG9ydCBib3JkZXJzIGZyb20gJy4vYm9yZGVycyc7XG5pbXBvcnQgZGlzcGxheSBmcm9tICcuL2Rpc3BsYXknO1xuaW1wb3J0IGZsZXhib3ggZnJvbSAnLi9mbGV4Ym94JztcbmltcG9ydCBncmlkIGZyb20gJy4vY3NzR3JpZCc7XG5pbXBvcnQgcG9zaXRpb25zIGZyb20gJy4vcG9zaXRpb25zJztcbmltcG9ydCBwYWxldHRlIGZyb20gJy4vcGFsZXR0ZSc7XG5pbXBvcnQgc2hhZG93cyBmcm9tICcuL3NoYWRvd3MnO1xuaW1wb3J0IHNpemluZyBmcm9tICcuL3NpemluZyc7XG5pbXBvcnQgc3BhY2luZyBmcm9tICcuL3NwYWNpbmcnO1xuaW1wb3J0IHR5cG9ncmFwaHkgZnJvbSAnLi90eXBvZ3JhcGh5JztcbmNvbnN0IGZpbHRlclByb3BzTWFwcGluZyA9IHtcbiAgYm9yZGVyczogYm9yZGVycy5maWx0ZXJQcm9wcyxcbiAgZGlzcGxheTogZGlzcGxheS5maWx0ZXJQcm9wcyxcbiAgZmxleGJveDogZmxleGJveC5maWx0ZXJQcm9wcyxcbiAgZ3JpZDogZ3JpZC5maWx0ZXJQcm9wcyxcbiAgcG9zaXRpb25zOiBwb3NpdGlvbnMuZmlsdGVyUHJvcHMsXG4gIHBhbGV0dGU6IHBhbGV0dGUuZmlsdGVyUHJvcHMsXG4gIHNoYWRvd3M6IHNoYWRvd3MuZmlsdGVyUHJvcHMsXG4gIHNpemluZzogc2l6aW5nLmZpbHRlclByb3BzLFxuICBzcGFjaW5nOiBzcGFjaW5nLmZpbHRlclByb3BzLFxuICB0eXBvZ3JhcGh5OiB0eXBvZ3JhcGh5LmZpbHRlclByb3BzXG59O1xuZXhwb3J0IGNvbnN0IHN0eWxlRnVuY3Rpb25NYXBwaW5nID0ge1xuICBib3JkZXJzLFxuICBkaXNwbGF5LFxuICBmbGV4Ym94LFxuICBncmlkLFxuICBwb3NpdGlvbnMsXG4gIHBhbGV0dGUsXG4gIHNoYWRvd3MsXG4gIHNpemluZyxcbiAgc3BhY2luZyxcbiAgdHlwb2dyYXBoeVxufTtcbmV4cG9ydCBjb25zdCBwcm9wVG9TdHlsZUZ1bmN0aW9uID0gT2JqZWN0LmtleXMoZmlsdGVyUHJvcHNNYXBwaW5nKS5yZWR1Y2UoKGFjYywgc3R5bGVGbk5hbWUpID0+IHtcbiAgZmlsdGVyUHJvcHNNYXBwaW5nW3N0eWxlRm5OYW1lXS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICBhY2NbcHJvcE5hbWVdID0gc3R5bGVGdW5jdGlvbk1hcHBpbmdbc3R5bGVGbk5hbWVdO1xuICB9KTtcbiAgcmV0dXJuIGFjYztcbn0sIHt9KTtcblxuZnVuY3Rpb24gZ2V0VGhlbWVWYWx1ZShwcm9wLCB2YWx1ZSwgdGhlbWUpIHtcbiAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICBbcHJvcF06IHZhbHVlLFxuICAgIHRoZW1lXG4gIH07XG4gIGNvbnN0IHN0eWxlRnVuY3Rpb24gPSBwcm9wVG9TdHlsZUZ1bmN0aW9uW3Byb3BdO1xuICByZXR1cm4gc3R5bGVGdW5jdGlvbiA/IHN0eWxlRnVuY3Rpb24oaW5wdXRQcm9wcykgOiB7XG4gICAgW3Byb3BdOiB2YWx1ZVxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRUaGVtZVZhbHVlOyIsImltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuXG5mdW5jdGlvbiBtZXJnZShhY2MsIGl0ZW0pIHtcbiAgaWYgKCFpdGVtKSB7XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gIHJldHVybiBkZWVwbWVyZ2UoYWNjLCBpdGVtLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcCwgaXQncyB3YXkgZmFzdGVyLlxuXG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZXJnZTsiLCJpbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICcuL21lbW9pemUnO1xuY29uc3QgcHJvcGVydGllcyA9IHtcbiAgbTogJ21hcmdpbicsXG4gIHA6ICdwYWRkaW5nJ1xufTtcbmNvbnN0IGRpcmVjdGlvbnMgPSB7XG4gIHQ6ICdUb3AnLFxuICByOiAnUmlnaHQnLFxuICBiOiAnQm90dG9tJyxcbiAgbDogJ0xlZnQnLFxuICB4OiBbJ0xlZnQnLCAnUmlnaHQnXSxcbiAgeTogWydUb3AnLCAnQm90dG9tJ11cbn07XG5jb25zdCBhbGlhc2VzID0ge1xuICBtYXJnaW5YOiAnbXgnLFxuICBtYXJnaW5ZOiAnbXknLFxuICBwYWRkaW5nWDogJ3B4JyxcbiAgcGFkZGluZ1k6ICdweSdcbn07IC8vIG1lbW9pemUoKSBpbXBhY3Q6XG4vLyBGcm9tIDMwMCwwMDAgb3BzL3NlY1xuLy8gVG8gMzUwLDAwMCBvcHMvc2VjXG5cbmNvbnN0IGdldENzc1Byb3BlcnRpZXMgPSBtZW1vaXplKHByb3AgPT4ge1xuICAvLyBJdCdzIG5vdCBhIHNob3J0aGFuZCBub3RhdGlvbi5cbiAgaWYgKHByb3AubGVuZ3RoID4gMikge1xuICAgIGlmIChhbGlhc2VzW3Byb3BdKSB7XG4gICAgICBwcm9wID0gYWxpYXNlc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBbYSwgYl0gPSBwcm9wLnNwbGl0KCcnKTtcbiAgY29uc3QgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2FdO1xuICBjb25zdCBkaXJlY3Rpb24gPSBkaXJlY3Rpb25zW2JdIHx8ICcnO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShkaXJlY3Rpb24pID8gZGlyZWN0aW9uLm1hcChkaXIgPT4gcHJvcGVydHkgKyBkaXIpIDogW3Byb3BlcnR5ICsgZGlyZWN0aW9uXTtcbn0pO1xuY29uc3QgbWFyZ2luS2V5cyA9IFsnbScsICdtdCcsICdtcicsICdtYicsICdtbCcsICdteCcsICdteScsICdtYXJnaW4nLCAnbWFyZ2luVG9wJywgJ21hcmdpblJpZ2h0JywgJ21hcmdpbkJvdHRvbScsICdtYXJnaW5MZWZ0JywgJ21hcmdpblgnLCAnbWFyZ2luWScsICdtYXJnaW5JbmxpbmUnLCAnbWFyZ2luSW5saW5lU3RhcnQnLCAnbWFyZ2luSW5saW5lRW5kJywgJ21hcmdpbkJsb2NrJywgJ21hcmdpbkJsb2NrU3RhcnQnLCAnbWFyZ2luQmxvY2tFbmQnXTtcbmNvbnN0IHBhZGRpbmdLZXlzID0gWydwJywgJ3B0JywgJ3ByJywgJ3BiJywgJ3BsJywgJ3B4JywgJ3B5JywgJ3BhZGRpbmcnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ0JvdHRvbScsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nWCcsICdwYWRkaW5nWScsICdwYWRkaW5nSW5saW5lJywgJ3BhZGRpbmdJbmxpbmVTdGFydCcsICdwYWRkaW5nSW5saW5lRW5kJywgJ3BhZGRpbmdCbG9jaycsICdwYWRkaW5nQmxvY2tTdGFydCcsICdwYWRkaW5nQmxvY2tFbmQnXTtcbmNvbnN0IHNwYWNpbmdLZXlzID0gWy4uLm1hcmdpbktleXMsIC4uLnBhZGRpbmdLZXlzXTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVbmFyeVVuaXQodGhlbWUsIHRoZW1lS2V5LCBkZWZhdWx0VmFsdWUsIHByb3BOYW1lKSB7XG4gIHZhciBfZ2V0UGF0aDtcblxuICBjb25zdCB0aGVtZVNwYWNpbmcgPSAoX2dldFBhdGggPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSwgZmFsc2UpKSAhPSBudWxsID8gX2dldFBhdGggOiBkZWZhdWx0VmFsdWU7XG5cbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhYnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBFeHBlY3RlZCAke3Byb3BOYW1lfSBhcmd1bWVudCB0byBiZSBhIG51bWJlciBvciBhIHN0cmluZywgZ290ICR7YWJzfS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhlbWVTcGFjaW5nICogYWJzO1xuICAgIH07XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZVNwYWNpbmcpKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFicykpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgYXJyYXkgdHlwZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBub24gaW50ZWdlciB2YWx1ZXMuYCArIGBZb3Ugc2hvdWxkIGVpdGhlciB1c2UgYW4gaW50ZWdlciB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGluZGV4LCBvciBkZWZpbmUgdGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFzIGEgbnVtYmVyLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfSBlbHNlIGlmIChhYnMgPiB0aGVtZVNwYWNpbmcubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAoJHthYnN9KSBvdmVyZmxvd3MuYCwgYFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZTogJHtKU09OLnN0cmluZ2lmeSh0aGVtZVNwYWNpbmcpfS5gLCBgJHthYnN9ID4gJHt0aGVtZVNwYWNpbmcubGVuZ3RoIC0gMX0sIHlvdSBuZWVkIHRvIGFkZCB0aGUgbWlzc2luZyB2YWx1ZXMuYF0uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmdbYWJzXTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdGhlbWVTcGFjaW5nO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgdmFsdWUgKCR7dGhlbWVTcGFjaW5nfSkgaXMgaW52YWxpZC5gLCAnSXQgc2hvdWxkIGJlIGEgbnVtYmVyLCBhbiBhcnJheSBvciBhIGZ1bmN0aW9uLiddLmpvaW4oJ1xcbicpKTtcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5hcnlTcGFjaW5nKHRoZW1lKSB7XG4gIHJldHVybiBjcmVhdGVVbmFyeVVuaXQodGhlbWUsICdzcGFjaW5nJywgOCwgJ3NwYWNpbmcnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyB8fCBwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wVmFsdWU7XG4gIH1cblxuICBjb25zdCBhYnMgPSBNYXRoLmFicyhwcm9wVmFsdWUpO1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybWVyKGFicyk7XG5cbiAgaWYgKHByb3BWYWx1ZSA+PSAwKSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gLXRyYW5zZm9ybWVkO1xuICB9XG5cbiAgcmV0dXJuIGAtJHt0cmFuc2Zvcm1lZH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcikge1xuICByZXR1cm4gcHJvcFZhbHVlID0+IGNzc1Byb3BlcnRpZXMucmVkdWNlKChhY2MsIGNzc1Byb3BlcnR5KSA9PiB7XG4gICAgYWNjW2Nzc1Byb3BlcnR5XSA9IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUNzc1Byb3BlcnR5KHByb3BzLCBrZXlzLCBwcm9wLCB0cmFuc2Zvcm1lcikge1xuICAvLyBVc2luZyBhIGhhc2ggY29tcHV0YXRpb24gb3ZlciBhbiBhcnJheSBpdGVyYXRpb24gY291bGQgYmUgZmFzdGVyLCBidXQgd2l0aCBvbmx5IDI4IGl0ZW1zLFxuICAvLyBpdCdzIGRvZXNuJ3Qgd29ydGggdGhlIGJ1bmRsZSBzaXplLlxuICBpZiAoa2V5cy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY3NzUHJvcGVydGllcyA9IGdldENzc1Byb3BlcnRpZXMocHJvcCk7XG4gIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcik7XG4gIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbn1cblxuZnVuY3Rpb24gc3R5bGUocHJvcHMsIGtleXMpIHtcbiAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcocHJvcHMudGhlbWUpO1xuICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLm1hcChwcm9wID0+IHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpKS5yZWR1Y2UobWVyZ2UsIHt9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcmdpbihwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIG1hcmdpbktleXMpO1xufVxubWFyZ2luLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBtYXJnaW5LZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbm1hcmdpbi5maWx0ZXJQcm9wcyA9IG1hcmdpbktleXM7XG5leHBvcnQgZnVuY3Rpb24gcGFkZGluZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHBhZGRpbmdLZXlzKTtcbn1cbnBhZGRpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHBhZGRpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnBhZGRpbmcuZmlsdGVyUHJvcHMgPSBwYWRkaW5nS2V5cztcblxuZnVuY3Rpb24gc3BhY2luZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHNwYWNpbmdLZXlzKTtcbn1cblxuc3BhY2luZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gc3BhY2luZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IHJlc3BvbnNpdmVQcm9wVHlwZTtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xuc3BhY2luZy5maWx0ZXJQcm9wcyA9IHNwYWNpbmdLZXlzO1xuZXhwb3J0IGRlZmF1bHQgc3BhY2luZzsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIGNvbnN0IGNhY2hlID0ge307XG4gIHJldHVybiBhcmcgPT4ge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZVthcmddO1xuICB9O1xufSIsImltcG9ydCB7IHVuc3RhYmxlX2NhcGl0YWxpemUgYXMgY2FwaXRhbGl6ZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGgob2JqLCBwYXRoLCBjaGVja1ZhcnMgPSB0cnVlKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBDaGVjayBpZiBDU1MgdmFyaWFibGVzIGFyZSB1c2VkXG5cblxuICBpZiAob2JqICYmIG9iai52YXJzICYmIGNoZWNrVmFycykge1xuICAgIGNvbnN0IHZhbCA9IGB2YXJzLiR7cGF0aH1gLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IGFjYyAmJiBhY2NbaXRlbV0gPyBhY2NbaXRlbV0gOiBudWxsLCBvYmopO1xuXG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICBpZiAoYWNjICYmIGFjY1tpdGVtXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYWNjW2l0ZW1dO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9LCBvYmopO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwsIHVzZXJWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsKSB7XG4gIGxldCB2YWx1ZTtcblxuICBpZiAodHlwZW9mIHRoZW1lTWFwcGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhbHVlID0gdGhlbWVNYXBwaW5nKHByb3BWYWx1ZUZpbmFsKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoZW1lTWFwcGluZykpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZ1twcm9wVmFsdWVGaW5hbF0gfHwgdXNlclZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gZ2V0UGF0aCh0aGVtZU1hcHBpbmcsIHByb3BWYWx1ZUZpbmFsKSB8fCB1c2VyVmFsdWU7XG4gIH1cblxuICBpZiAodHJhbnNmb3JtKSB7XG4gICAgdmFsdWUgPSB0cmFuc2Zvcm0odmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBzdHlsZShvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwcm9wLFxuICAgIGNzc1Byb3BlcnR5ID0gb3B0aW9ucy5wcm9wLFxuICAgIHRoZW1lS2V5LFxuICAgIHRyYW5zZm9ybVxuICB9ID0gb3B0aW9ucztcblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICBpZiAocHJvcHNbcHJvcF0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gICAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZTtcbiAgICBjb25zdCB0aGVtZU1hcHBpbmcgPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSkgfHwge307XG5cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwpO1xuXG4gICAgICBpZiAocHJvcFZhbHVlRmluYWwgPT09IHZhbHVlICYmIHR5cGVvZiBwcm9wVmFsdWVGaW5hbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGF2ZW4ndCBmb3VuZCB2YWx1ZVxuICAgICAgICB2YWx1ZSA9IGdldFZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBgJHtwcm9wfSR7cHJvcFZhbHVlRmluYWwgPT09ICdkZWZhdWx0JyA/ICcnIDogY2FwaXRhbGl6ZShwcm9wVmFsdWVGaW5hbCl9YCwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3NzUHJvcGVydHkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9O1xuXG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gICAgW3Byb3BdOiByZXNwb25zaXZlUHJvcFR5cGVcbiAgfSA6IHt9O1xuICBmbi5maWx0ZXJQcm9wcyA9IFtwcm9wXTtcbiAgcmV0dXJuIGZuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZTsiLCJpbXBvcnQgbWVyZ2UgZnJvbSAnLi4vbWVyZ2UnO1xuaW1wb3J0IHsgc3R5bGVGdW5jdGlvbk1hcHBpbmcgYXMgZGVmYXVsdFN0eWxlRnVuY3Rpb25NYXBwaW5nIH0gZnJvbSAnLi4vZ2V0VGhlbWVWYWx1ZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0LCByZW1vdmVVbnVzZWRCcmVha3BvaW50cyB9IGZyb20gJy4uL2JyZWFrcG9pbnRzJztcblxuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGNhbGxJZkZuKG1heWJlRm4sIGFyZykge1xuICByZXR1cm4gdHlwZW9mIG1heWJlRm4gPT09ICdmdW5jdGlvbicgPyBtYXliZUZuKGFyZykgOiBtYXliZUZuO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeChzdHlsZUZ1bmN0aW9uTWFwcGluZyA9IGRlZmF1bHRTdHlsZUZ1bmN0aW9uTWFwcGluZykge1xuICBjb25zdCBwcm9wVG9TdHlsZUZ1bmN0aW9uID0gT2JqZWN0LmtleXMoc3R5bGVGdW5jdGlvbk1hcHBpbmcpLnJlZHVjZSgoYWNjLCBzdHlsZUZuTmFtZSkgPT4ge1xuICAgIHN0eWxlRnVuY3Rpb25NYXBwaW5nW3N0eWxlRm5OYW1lXS5maWx0ZXJQcm9wcy5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICAgIGFjY1twcm9wTmFtZV0gPSBzdHlsZUZ1bmN0aW9uTWFwcGluZ1tzdHlsZUZuTmFtZV07XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIGZ1bmN0aW9uIGdldFRoZW1lVmFsdWUocHJvcCwgdmFsdWUsIHRoZW1lKSB7XG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgIFtwcm9wXTogdmFsdWUsXG4gICAgICB0aGVtZVxuICAgIH07XG4gICAgY29uc3Qgc3R5bGVGdW5jdGlvbiA9IHByb3BUb1N0eWxlRnVuY3Rpb25bcHJvcF07XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb24gPyBzdHlsZUZ1bmN0aW9uKGlucHV0UHJvcHMpIDoge1xuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzdHlsZUZ1bmN0aW9uU3gocHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICBzeCxcbiAgICAgIHRoZW1lID0ge31cbiAgICB9ID0gcHJvcHMgfHwge307XG5cbiAgICBpZiAoIXN4KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzIHdpbGwgbmVnbGVjdCBudWxsXG4gICAgfVxuICAgIC8qXG4gICAgICogUmVjZWl2ZSBgc3hJbnB1dGAgYXMgb2JqZWN0IG9yIGNhbGxiYWNrXG4gICAgICogYW5kIHRoZW4gcmVjdXJzaXZlbHkgY2hlY2sga2V5cyAmIHZhbHVlcyB0byBjcmVhdGUgbWVkaWEgcXVlcnkgb2JqZWN0IHN0eWxlcy5cbiAgICAgKiAodGhlIHJlc3VsdCB3aWxsIGJlIHVzZWQgaW4gYHN0eWxlZGApXG4gICAgICovXG5cblxuICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHN4SW5wdXQpIHtcbiAgICAgIGxldCBzeE9iamVjdCA9IHN4SW5wdXQ7XG5cbiAgICAgIGlmICh0eXBlb2Ygc3hJbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzeE9iamVjdCA9IHN4SW5wdXQodGhlbWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3hJbnB1dCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgcmV0dXJuIHN4SW5wdXQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3hPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVtcHR5QnJlYWtwb2ludHMgPSBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QodGhlbWUuYnJlYWtwb2ludHMpO1xuICAgICAgY29uc3QgYnJlYWtwb2ludHNLZXlzID0gT2JqZWN0LmtleXMoZW1wdHlCcmVha3BvaW50cyk7XG4gICAgICBsZXQgY3NzID0gZW1wdHlCcmVha3BvaW50cztcbiAgICAgIE9iamVjdC5rZXlzKHN4T2JqZWN0KS5mb3JFYWNoKHN0eWxlS2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjYWxsSWZGbihzeE9iamVjdFtzdHlsZUtleV0sIHRoZW1lKTtcblxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAocHJvcFRvU3R5bGVGdW5jdGlvbltzdHlsZUtleV0pIHtcbiAgICAgICAgICAgICAgY3NzID0gbWVyZ2UoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJyZWFrcG9pbnRzVmFsdWVzID0gaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICAgIH0sIHZhbHVlLCB4ID0+ICh7XG4gICAgICAgICAgICAgICAgW3N0eWxlS2V5XTogeFxuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgaWYgKG9iamVjdHNIYXZlU2FtZUtleXMoYnJlYWtwb2ludHNWYWx1ZXMsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNzc1tzdHlsZUtleV0gPSBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgICAgICAgICAgICAgc3g6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGJyZWFrcG9pbnRzVmFsdWVzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGdldFRoZW1lVmFsdWUoc3R5bGVLZXksIHZhbHVlLCB0aGVtZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoYnJlYWtwb2ludHNLZXlzLCBjc3MpO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHN4KSA/IHN4Lm1hcCh0cmF2ZXJzZSkgOiB0cmF2ZXJzZShzeCk7XG4gIH1cblxuICByZXR1cm4gc3R5bGVGdW5jdGlvblN4O1xufVxuY29uc3Qgc3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCk7XG5zdHlsZUZ1bmN0aW9uU3guZmlsdGVyUHJvcHMgPSBbJ3N4J107XG5leHBvcnQgZGVmYXVsdCBzdHlsZUZ1bmN0aW9uU3g7IiwiaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IHVzZVRoZW1lV2l0aG91dERlZmF1bHQgZnJvbSAnLi91c2VUaGVtZVdpdGhvdXREZWZhdWx0JztcbmV4cG9ydCBjb25zdCBzeXN0ZW1EZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuXG5mdW5jdGlvbiB1c2VUaGVtZShkZWZhdWx0VGhlbWUgPSBzeXN0ZW1EZWZhdWx0VGhlbWUpIHtcbiAgcmV0dXJuIHVzZVRoZW1lV2l0aG91dERlZmF1bHQoZGVmYXVsdFRoZW1lKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlVGhlbWU7IiwiaW1wb3J0IHsgdXNlVGhlbWUgYXMgbXVpVXNlVGhlbWUgfSBmcm9tICdAbXVpL3ByaXZhdGUtdGhlbWluZyc7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuZnVuY3Rpb24gdXNlVGhlbWUoZGVmYXVsdFRoZW1lID0gbnVsbCkge1xuICBjb25zdCBjb250ZXh0VGhlbWUgPSBtdWlVc2VUaGVtZSgpO1xuICByZXR1cm4gIWNvbnRleHRUaGVtZSB8fCBpc09iamVjdEVtcHR5KGNvbnRleHRUaGVtZSkgPyBkZWZhdWx0VGhlbWUgOiBjb250ZXh0VGhlbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVRoZW1lOyIsImNvbnN0IGRlZmF1bHRHZW5lcmF0b3IgPSBjb21wb25lbnROYW1lID0+IGNvbXBvbmVudE5hbWU7XG5cbmNvbnN0IGNyZWF0ZUNsYXNzTmFtZUdlbmVyYXRvciA9ICgpID0+IHtcbiAgbGV0IGdlbmVyYXRlID0gZGVmYXVsdEdlbmVyYXRvcjtcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmUoZ2VuZXJhdG9yKSB7XG4gICAgICBnZW5lcmF0ZSA9IGdlbmVyYXRvcjtcbiAgICB9LFxuXG4gICAgZ2VuZXJhdGUoY29tcG9uZW50TmFtZSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlKGNvbXBvbmVudE5hbWUpO1xuICAgIH0sXG5cbiAgICByZXNldCgpIHtcbiAgICAgIGdlbmVyYXRlID0gZGVmYXVsdEdlbmVyYXRvcjtcbiAgICB9XG5cbiAgfTtcbn07XG5cbmNvbnN0IENsYXNzTmFtZUdlbmVyYXRvciA9IGNyZWF0ZUNsYXNzTmFtZUdlbmVyYXRvcigpO1xuZXhwb3J0IGRlZmF1bHQgQ2xhc3NOYW1lR2VuZXJhdG9yOyIsImltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCIuL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuLy8gSXQgc2hvdWxkIHRvIGJlIG5vdGVkIHRoYXQgdGhpcyBmdW5jdGlvbiBpc24ndCBlcXVpdmFsZW50IHRvIGB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZWAuXG4vL1xuLy8gQSBzdHJpY3QgY2FwaXRhbGl6YXRpb24gc2hvdWxkIHVwcGVyY2FzZSB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZCBpbiB0aGUgc2VudGVuY2UuXG4vLyBXZSBvbmx5IGhhbmRsZSB0aGUgZmlyc3Qgd29yZC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBcXGBjYXBpdGFsaXplKHN0cmluZylcXGAgZXhwZWN0cyBhIHN0cmluZyBhcmd1bWVudC5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSg3KSk7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpIHtcbiAgY29uc3Qgb3V0cHV0ID0ge307XG4gIE9iamVjdC5rZXlzKHNsb3RzKS5mb3JFYWNoKCAvLyBgT2JqZXQua2V5cyhzbG90cylgIGNhbid0IGJlIHdpZGVyIHRoYW4gYFRgIGJlY2F1c2Ugd2UgaW5mZXIgYFRgIGZyb20gYHNsb3RzYC5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvcHVsbC8xMjI1MyNpc3N1ZWNvbW1lbnQtMjYzMTMyMjA4XG4gIHNsb3QgPT4ge1xuICAgIG91dHB1dFtzbG90XSA9IHNsb3RzW3Nsb3RdLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgYWNjLnB1c2goZ2V0VXRpbGl0eUNsYXNzKGtleSkpO1xuXG4gICAgICAgIGlmIChjbGFzc2VzICYmIGNsYXNzZXNba2V5XSkge1xuICAgICAgICAgIGFjYy5wdXNoKGNsYXNzZXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSkuam9pbignICcpO1xuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn0iLCIvKipcbiAqIFNhZmUgY2hhaW5lZCBmdW5jdGlvbi5cbiAqXG4gKiBXaWxsIG9ubHkgY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIGlmIG5lZWRlZCxcbiAqIG90aGVyd2lzZSB3aWxsIHBhc3MgYmFjayBleGlzdGluZyBmdW5jdGlvbnMgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKC4uLmZ1bmNzKSB7XG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoKGFjYywgZnVuYykgPT4ge1xuICAgIGlmIChmdW5jID09IG51bGwpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNoYWluZWRGdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICBhY2MuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH0sICgpID0+IHt9KTtcbn0iLCIvLyBDb3JyZXNwb25kcyB0byAxMCBmcmFtZXMgYXQgNjAgSHouXG4vLyBBIGZldyBieXRlcyBwYXlsb2FkIG92ZXJoZWFkIHdoZW4gbG9kYXNoL2RlYm91bmNlIGlzIH4zIGtCIGFuZCBkZWJvdW5jZSB+MzAwIEIuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0ID0gMTY2KSB7XG4gIGxldCB0aW1lb3V0O1xuXG4gIGZ1bmN0aW9uIGRlYm91bmNlZCguLi5hcmdzKSB7XG4gICAgY29uc3QgbGF0ZXIgPSAoKSA9PiB7XG4gICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICB9XG5cbiAgZGVib3VuY2VkLmNsZWFyID0gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfTtcblxuICByZXR1cm4gZGVib3VuY2VkO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QoaXRlbSkge1xuICByZXR1cm4gaXRlbSAhPT0gbnVsbCAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVlcG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zID0ge1xuICBjbG9uZTogdHJ1ZVxufSkge1xuICBjb25zdCBvdXRwdXQgPSBvcHRpb25zLmNsb25lID8gX2V4dGVuZHMoe30sIHRhcmdldCkgOiB0YXJnZXQ7XG5cbiAgaWYgKGlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiBpc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIC8vIEF2b2lkIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzUGxhaW5PYmplY3Qoc291cmNlW2tleV0pICYmIGtleSBpbiB0YXJnZXQgJiYgaXNQbGFpbk9iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgLy8gU2luY2UgYG91dHB1dGAgaXMgYSBjbG9uZSBvZiBgdGFyZ2V0YCBhbmQgd2UgaGF2ZSBuYXJyb3dlZCBgdGFyZ2V0YCBpbiB0aGlzIGJsb2NrIHdlIGNhbiBjYXN0IHRvIHRoZSBzYW1lIHR5cGUuXG4gICAgICAgIG91dHB1dFtrZXldID0gZGVlcG1lcmdlKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn0iLCIvKipcbiAqIFdBUk5JTkc6IERvbid0IGltcG9ydCB0aGlzIGRpcmVjdGx5LlxuICogVXNlIGBNdWlFcnJvcmAgZnJvbSBgQG11aS91dGlscy9tYWNyb3MvTXVpRXJyb3IubWFjcm9gIGluc3RlYWQuXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRNdWlFcnJvck1lc3NhZ2UoY29kZSkge1xuICAvLyBBcHBseSBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXRlbXBsYXRlLWxpdGVyYWxzIGluIGxvb3NlIG1vZGVcbiAgLy8gbG9vc2UgbW9kZSBpcyBzYWZlIGlmZiB3ZSdyZSBjb25jYXRlbmF0aW5nIHByaW1pdGl2ZXNcbiAgLy8gc2VlIGh0dHBzOi8vYmFiZWxqcy5pby9kb2NzL2VuL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tdGVtcGxhdGUtbGl0ZXJhbHMjbG9vc2VcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItdGVtcGxhdGUgKi9cbiAgbGV0IHVybCA9ICdodHRwczovL211aS5jb20vcHJvZHVjdGlvbi1lcnJvci8/Y29kZT0nICsgY29kZTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIC8vIHJlc3QgcGFyYW1zIG92ZXItdHJhbnNwaWxlIGZvciB0aGlzIGNhc2VcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgdXJsICs9ICcmYXJnc1tdPScgKyBlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2ldKTtcbiAgfVxuXG4gIHJldHVybiAnTWluaWZpZWQgTVVJIGVycm9yICMnICsgY29kZSArICc7IHZpc2l0ICcgKyB1cmwgKyAnIGZvciB0aGUgZnVsbCBtZXNzYWdlLic7XG4gIC8qIGVzbGludC1lbmFibGUgcHJlZmVyLXRlbXBsYXRlICovXG59IiwiaW1wb3J0IENsYXNzTmFtZUdlbmVyYXRvciBmcm9tICcuLi9DbGFzc05hbWVHZW5lcmF0b3InO1xuY29uc3QgZ2xvYmFsU3RhdGVDbGFzc2VzTWFwcGluZyA9IHtcbiAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjb21wbGV0ZWQ6ICdjb21wbGV0ZWQnLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZXJyb3I6ICdlcnJvcicsXG4gIGV4cGFuZGVkOiAnZXhwYW5kZWQnLFxuICBmb2N1c2VkOiAnZm9jdXNlZCcsXG4gIGZvY3VzVmlzaWJsZTogJ2ZvY3VzVmlzaWJsZScsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QsIGdsb2JhbFN0YXRlUHJlZml4ID0gJ011aScpIHtcbiAgY29uc3QgZ2xvYmFsU3RhdGVDbGFzcyA9IGdsb2JhbFN0YXRlQ2xhc3Nlc01hcHBpbmdbc2xvdF07XG4gIHJldHVybiBnbG9iYWxTdGF0ZUNsYXNzID8gYCR7Z2xvYmFsU3RhdGVQcmVmaXh9LSR7Z2xvYmFsU3RhdGVDbGFzc31gIDogYCR7Q2xhc3NOYW1lR2VuZXJhdG9yLmdlbmVyYXRlKGNvbXBvbmVudE5hbWUpfS0ke3Nsb3R9YDtcbn0iLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyhjb21wb25lbnROYW1lLCBzbG90cywgZ2xvYmFsU3RhdGVQcmVmaXggPSAnTXVpJykge1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgc2xvdHMuZm9yRWFjaChzbG90ID0+IHtcbiAgICByZXN1bHRbc2xvdF0gPSBnZW5lcmF0ZVV0aWxpdHlDbGFzcyhjb21wb25lbnROYW1lLCBzbG90LCBnbG9iYWxTdGF0ZVByZWZpeCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG93bmVyRG9jdW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG59IiwiaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnLi9vd25lckRvY3VtZW50JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG93bmVyV2luZG93KG5vZGUpIHtcbiAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChub2RlKTtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5cbi8qKlxuICogQWRkIGtleXMsIHZhbHVlcyBvZiBgZGVmYXVsdFByb3BzYCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGBwcm9wc2BcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0UHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybnMge29iamVjdH0gcmVzb2x2ZWQgcHJvcHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZVByb3BzKGRlZmF1bHRQcm9wcywgcHJvcHMpIHtcbiAgY29uc3Qgb3V0cHV0ID0gX2V4dGVuZHMoe30sIHByb3BzKTtcblxuICBPYmplY3Qua2V5cyhkZWZhdWx0UHJvcHMpLmZvckVhY2gocHJvcE5hbWUgPT4ge1xuICAgIGlmIChvdXRwdXRbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG91dHB1dFtwcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59IiwiLyoqXG4gKiBUT0RPIHY1OiBjb25zaWRlciBtYWtpbmcgaXQgcHJpdmF0ZVxuICpcbiAqIHBhc3NlcyB7dmFsdWV9IHRvIHtyZWZ9XG4gKlxuICogV0FSTklORzogQmUgc3VyZSB0byBvbmx5IGNhbGwgdGhpcyBpbnNpZGUgYSBjYWxsYmFjayB0aGF0IGlzIHBhc3NlZCBhcyBhIHJlZi5cbiAqIE90aGVyd2lzZSwgbWFrZSBzdXJlIHRvIGNsZWFudXAgdGhlIHByZXZpb3VzIHtyZWZ9IGlmIGl0IGNoYW5nZXMuIFNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMTM1MzlcbiAqXG4gKiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZXhwb3NlIHRoZSByZWYgb2YgYW4gaW5uZXIgY29tcG9uZW50IHRvIHRoZSBwdWJsaWMgQVBJXG4gKiB3aGlsZSBzdGlsbCB1c2luZyBpdCBpbnNpZGUgdGhlIGNvbXBvbmVudC5cbiAqIEBwYXJhbSByZWYgQSByZWYgY2FsbGJhY2sgb3IgcmVmIG9iamVjdC4gSWYgYW55dGhpbmcgZmFsc3ksIHRoaXMgaXMgYSBuby1vcC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0UmVmKHJlZiwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZWYodmFsdWUpO1xuICB9IGVsc2UgaWYgKHJlZikge1xuICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH1cbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCB1c2VFbmhhbmNlZEVmZmVjdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0O1xuZXhwb3J0IGRlZmF1bHQgdXNlRW5oYW5jZWRFZmZlY3Q7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4vdXNlRW5oYW5jZWRFZmZlY3QnO1xuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MDk5I2lzc3VlY29tbWVudC00NDAwMTM4OTJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VFdmVudENhbGxiYWNrKGZuKSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihmbik7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICByZWYuY3VycmVudCA9IGZuO1xuICB9KTtcbiAgcmV0dXJuIFJlYWN0LnVzZUNhbGxiYWNrKCguLi5hcmdzKSA9PiAvLyBAdHMtZXhwZWN0LWVycm9yIGhpZGUgYHRoaXNgXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpiYW4tY29tbWEtb3BlcmF0b3JcbiAgKDAsIHJlZi5jdXJyZW50KSguLi5hcmdzKSwgW10pO1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzZXRSZWYgZnJvbSAnLi9zZXRSZWYnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRm9ya1JlZihyZWZBLCByZWZCKSB7XG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIGlmIHRoZSByZWYgcHJvcHMgY2hhbmdlIGFuZCBhcmUgZGVmaW5lZC5cbiAgICogVGhpcyBtZWFucyByZWFjdCB3aWxsIGNhbGwgdGhlIG9sZCBmb3JrUmVmIHdpdGggYG51bGxgIGFuZCB0aGUgbmV3IGZvcmtSZWZcbiAgICogd2l0aCB0aGUgcmVmLiBDbGVhbnVwIG5hdHVyYWxseSBlbWVyZ2VzIGZyb20gdGhpcyBiZWhhdmlvci5cbiAgICovXG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocmVmQSA9PSBudWxsICYmIHJlZkIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZlZhbHVlID0+IHtcbiAgICAgIHNldFJlZihyZWZBLCByZWZWYWx1ZSk7XG4gICAgICBzZXRSZWYocmVmQiwgcmVmVmFsdWUpO1xuICAgIH07XG4gIH0sIFtyZWZBLCByZWZCXSk7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xubGV0IGdsb2JhbElkID0gMDtcblxuZnVuY3Rpb24gdXNlR2xvYmFsSWQoaWRPdmVycmlkZSkge1xuICBjb25zdCBbZGVmYXVsdElkLCBzZXREZWZhdWx0SWRdID0gUmVhY3QudXNlU3RhdGUoaWRPdmVycmlkZSk7XG4gIGNvbnN0IGlkID0gaWRPdmVycmlkZSB8fCBkZWZhdWx0SWQ7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlZmF1bHRJZCA9PSBudWxsKSB7XG4gICAgICAvLyBGYWxsYmFjayB0byB0aGlzIGRlZmF1bHQgaWQgd2hlbiBwb3NzaWJsZS5cbiAgICAgIC8vIFVzZSB0aGUgaW5jcmVtZW50aW5nIHZhbHVlIGZvciBjbGllbnQtc2lkZSByZW5kZXJpbmcgb25seS5cbiAgICAgIC8vIFdlIGNhbid0IHVzZSBpdCBzZXJ2ZXItc2lkZS5cbiAgICAgIC8vIElmIHlvdSB3YW50IHRvIHVzZSByYW5kb20gdmFsdWVzIHBsZWFzZSBjb25zaWRlciB0aGUgQmlydGhkYXkgUHJvYmxlbTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmlydGhkYXlfcHJvYmxlbVxuICAgICAgZ2xvYmFsSWQgKz0gMTtcbiAgICAgIHNldERlZmF1bHRJZChgbXVpLSR7Z2xvYmFsSWR9YCk7XG4gICAgfVxuICB9LCBbZGVmYXVsdElkXSk7XG4gIHJldHVybiBpZDtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uY2F0IC0tIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2svaXNzdWVzLzE0ODE0XG5cblxuY29uc3QgbWF5YmVSZWFjdFVzZUlkID0gUmVhY3RbJ3VzZUlkJyArICcnXTtcbi8qKlxuICpcbiAqIEBleGFtcGxlIDxkaXYgaWQ9e3VzZUlkKCl9IC8+XG4gKiBAcGFyYW0gaWRPdmVycmlkZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VJZChpZE92ZXJyaWRlKSB7XG4gIGlmIChtYXliZVJlYWN0VXNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHJlYWN0SWQgPSBtYXliZVJlYWN0VXNlSWQoKTtcbiAgICByZXR1cm4gaWRPdmVycmlkZSAhPSBudWxsID8gaWRPdmVycmlkZSA6IHJlYWN0SWQ7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzIC0tIGBSZWFjdC51c2VJZGAgaXMgaW52YXJpYW50IGF0IHJ1bnRpbWUuXG5cblxuICByZXR1cm4gdXNlR2xvYmFsSWQoaWRPdmVycmlkZSk7XG59IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xudmFyIHBhcnNlUHJvdG9jb2wgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIHZhciBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSAmJiB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgIHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0LCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHZhciB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCAoY2FuY2VsICYmIGNhbmNlbC50eXBlKSA/IG5ldyBDYW5jZWxlZEVycm9yKCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0RGF0YSkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woZnVsbFBhdGgpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIFsgJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScgXS5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxlZEVycm9yJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5heGlvcy5WRVJTSU9OID0gcmVxdWlyZSgnLi9lbnYvZGF0YScpLnZlcnNpb247XG5heGlvcy50b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi9oZWxwZXJzL3RvRm9ybURhdGEnKTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9saWIvY29yZS9BeGlvc0Vycm9yJyk7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4vQ2FuY2VsZWRFcnJvcicpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG5cbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgbCA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgIH1cbiAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4gPSBmdW5jdGlvbihvbmZ1bGZpbGxlZCkge1xuICAgIHZhciBfcmVzb2x2ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICB9XG59O1xuXG4vKipcbiAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAqL1xuXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4vYnVpbGRGdWxsUGF0aCcpO1xudmFyIHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdmFsaWRhdG9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWw7XG5cbiAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgdmFyIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHZhciBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHByb21pc2U7XG5cbiAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuXG4gICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICBjaGFpbiA9IGNoYWluLmNvbmNhdChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIHZhciBuZXdDb25maWcgPSBjb25maWc7XG4gIHdoaWxlIChyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICB2YXIgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHZhciBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB0cnkge1xuICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25SZWplY3RlZChlcnJvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QobmV3Q29uZmlnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG5cbiAgd2hpbGUgKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbnZhciBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbnZhciBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChmdW5jdGlvbihjb2RlKSB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSBmdW5jdGlvbihlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpIHtcbiAgdmFyIGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3NFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWQsXG4gICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0Fic29sdXRlVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIHZhciBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMocHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1lcmdlTWFwID0ge1xuICAgICd1cmwnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdtZXRob2QnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdkYXRhJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnYmFzZVVSTCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zZm9ybVJlcXVlc3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXNwb25zZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3BhcmFtc1NlcmlhbGl6ZXInOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0aW1lb3V0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dE1lc3NhZ2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd3aXRoQ3JlZGVudGlhbHMnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdhZGFwdGVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VUeXBlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkNvb2tpZU5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd4c3JmSGVhZGVyTmFtZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ29uVXBsb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvbkRvd25sb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdkZWNvbXByZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnbWF4Q29udGVudExlbmd0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heEJvZHlMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdiZWZvcmVSZWRpcmVjdCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zcG9ydCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2h0dHBBZ2VudCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2h0dHBzQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdjYW5jZWxUb2tlbic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3NvY2tldFBhdGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdyZXNwb25zZUVuY29kaW5nJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndmFsaWRhdGVTdGF0dXMnOiBtZXJnZURpcmVjdEtleXNcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKGNvbmZpZzEpLmNvbmNhdChPYmplY3Qua2V5cyhjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgdmFyIG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICB2YXIgY29uZmlnVmFsdWUgPSBtZXJnZShwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vQXhpb3NFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHtBcnJheX0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIGZucykge1xuICB2YXIgY29udGV4dCA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29udGV4dCwgZGF0YSwgaGVhZGVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi90cmFuc2l0aW9uYWwnKTtcbnZhciB0b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4uL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdmFyIGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuICAgIHZhciBjb250ZW50VHlwZSA9IGhlYWRlcnMgJiYgaGVhZGVyc1snQ29udGVudC1UeXBlJ107XG5cbiAgICB2YXIgaXNGaWxlTGlzdDtcblxuICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8IChpc09iamVjdFBheWxvYWQgJiYgY29udGVudFR5cGUgPT09ICdtdWx0aXBhcnQvZm9ybS1kYXRhJykpIHtcbiAgICAgIHZhciBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcbiAgICAgIHJldHVybiB0b0Zvcm1EYXRhKGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCkpO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vanNvbicpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICB2YXIgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgIHZhciBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgdmFyIHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcgfHwgKGZvcmNlZEpTT05QYXJzaW5nICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmIGRhdGEubGVuZ3RoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcmVxdWlyZSgnLi9lbnYvRm9ybURhdGEnKVxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBcInZlcnNpb25cIjogXCIwLjI3LjJcIlxufTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkUGFyYW1zO1xuICBpZiAocGFyYW1zU2VyaWFsaXplcikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXNTZXJpYWxpemVyKHBhcmFtcyk7XG4gIH0gZWxzZSBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSkge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFydHMgPSBbXTtcblxuICAgIHV0aWxzLmZvckVhY2gocGFyYW1zLCBmdW5jdGlvbiBzZXJpYWxpemUodmFsLCBrZXkpIHtcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGtleSA9IGtleSArICdbXSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdmFyIGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cblxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgdmFyIG9yaWdpblVSTDtcblxuICAgICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgICB2YXIgaHJlZiA9IHVybDtcblxuICAgICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxubW9kdWxlLmV4cG9ydHMgPSBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8vIEhlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG52YXIgaWdub3JlRHVwbGljYXRlT2YgPSBbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVycykge1xuICB2YXIgcGFyc2VkID0ge307XG4gIHZhciBrZXk7XG4gIHZhciB2YWw7XG4gIHZhciBpO1xuXG4gIGlmICghaGVhZGVycykgeyByZXR1cm4gcGFyc2VkOyB9XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cigwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2YuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gKHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gOiBbXSkuY29uY2F0KFt2YWxdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICB2YXIgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IEZvcm1EYXRhKCk7XG5cbiAgdmFyIHN0YWNrID0gW107XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkKGRhdGEsIHBhcmVudEtleSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGRhdGEpIHx8IHV0aWxzLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKGRhdGEpICE9PSAtMSkge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXJlbnRLZXkpO1xuICAgICAgfVxuXG4gICAgICBzdGFjay5wdXNoKGRhdGEpO1xuXG4gICAgICB1dGlscy5mb3JFYWNoKGRhdGEsIGZ1bmN0aW9uIGVhY2godmFsdWUsIGtleSkge1xuICAgICAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG4gICAgICAgIHZhciBmdWxsS2V5ID0gcGFyZW50S2V5ID8gcGFyZW50S2V5ICsgJy4nICsga2V5IDoga2V5O1xuICAgICAgICB2YXIgYXJyO1xuXG4gICAgICAgIGlmICh2YWx1ZSAmJiAhcGFyZW50S2V5ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgJiYgKGFyciA9IHV0aWxzLnRvQXJyYXkodmFsdWUpKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgICAgICAgICF1dGlscy5pc1VuZGVmaW5lZChlbCkgJiYgZm9ybURhdGEuYXBwZW5kKGZ1bGxLZXksIGNvbnZlcnRWYWx1ZShlbCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGQodmFsdWUsIGZ1bGxLZXkpO1xuICAgICAgfSk7XG5cbiAgICAgIHN0YWNrLnBvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQocGFyZW50S2V5LCBjb252ZXJ0VmFsdWUoZGF0YSkpO1xuICAgIH1cbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvRm9ybURhdGE7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBWRVJTSU9OID0gcmVxdWlyZSgnLi4vZW52L2RhdGEnKS52ZXJzaW9uO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcblxudmFyIHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKGZ1bmN0aW9uKHR5cGUsIGkpIHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbnZhciBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG9wdCwgb3B0cykge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgdmFyIG9wdCA9IGtleXNbaV07XG4gICAgdmFyIHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIHZhciByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFzc2VydE9wdGlvbnM6IGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnNcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbnZhciBraW5kT2YgPSAoZnVuY3Rpb24oY2FjaGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgdmFyIHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbiAgfTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5mdW5jdGlvbiBraW5kT2ZUZXN0KHR5cGUpIHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzS2luZE9mKHRoaW5nKSB7XG4gICAgcmV0dXJuIGtpbmRPZih0aGluZykgPT09IHR5cGU7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh0aGluZykge1xuICB2YXIgcGF0dGVybiA9ICdbb2JqZWN0IEZvcm1EYXRhXSc7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fFxuICAgIHRvU3RyaW5nLmNhbGwodGhpbmcpID09PSBwYXR0ZXJuIHx8XG4gICAgKGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09IHBhdHRlcm4pXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqIEByZXR1cm4ge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5mdW5jdGlvbiBzdHJpcEJPTShjb250ZW50KSB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICovXG5cbmZ1bmN0aW9uIGluaGVyaXRzKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZpbHRlcl1cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gdG9GbGF0T2JqZWN0KHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyKSB7XG4gIHZhciBwcm9wcztcbiAgdmFyIGk7XG4gIHZhciBwcm9wO1xuICB2YXIgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKlxuICogZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgdmFyIGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdFxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkodGhpbmcpIHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIHZhciBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoaXNVbmRlZmluZWQoaSkpIHJldHVybiBudWxsO1xuICB2YXIgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG52YXIgaXNUeXBlZEFycmF5ID0gKGZ1bmN0aW9uKFR5cGVkQXJyYXkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltLFxuICBzdHJpcEJPTTogc3RyaXBCT00sXG4gIGluaGVyaXRzOiBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0OiB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZjoga2luZE9mLFxuICBraW5kT2ZUZXN0OiBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aDogZW5kc1dpdGgsXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIGlzVHlwZWRBcnJheTogaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0OiBpc0ZpbGVMaXN0XG59O1xuIiwiZnVuY3Rpb24gcihlKXt2YXIgdCxmLG49XCJcIjtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGUpbis9ZTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBlKWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdJiYoZj1yKGVbdF0pKSYmKG4mJihuKz1cIiBcIiksbis9Zik7ZWxzZSBmb3IodCBpbiBlKWVbdF0mJihuJiYobis9XCIgXCIpLG4rPXQpO3JldHVybiBufWV4cG9ydCBmdW5jdGlvbiBjbHN4KCl7Zm9yKHZhciBlLHQsZj0wLG49XCJcIjtmPGFyZ3VtZW50cy5sZW5ndGg7KShlPWFyZ3VtZW50c1tmKytdKSYmKHQ9cihlKSkmJihuJiYobis9XCIgXCIpLG4rPXQpO3JldHVybiBufWV4cG9ydCBkZWZhdWx0IGNsc3g7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbnZhciBSRUFDVF9TVEFUSUNTID0ge1xuICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgY29udGV4dFR5cGU6IHRydWUsXG4gIGNvbnRleHRUeXBlczogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgZ2V0RGVmYXVsdFByb3BzOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcbiAgbWl4aW5zOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgS05PV05fU1RBVElDUyA9IHtcbiAgbmFtZTogdHJ1ZSxcbiAgbGVuZ3RoOiB0cnVlLFxuICBwcm90b3R5cGU6IHRydWUsXG4gIGNhbGxlcjogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBhcmd1bWVudHM6IHRydWUsXG4gIGFyaXR5OiB0cnVlXG59O1xudmFyIEZPUldBUkRfUkVGX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIHJlbmRlcjogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlXG59O1xudmFyIE1FTU9fU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgY29tcGFyZTogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIFRZUEVfU1RBVElDUyA9IHt9O1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuRm9yd2FyZFJlZl0gPSBGT1JXQVJEX1JFRl9TVEFUSUNTO1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuTWVtb10gPSBNRU1PX1NUQVRJQ1M7XG5cbmZ1bmN0aW9uIGdldFN0YXRpY3MoY29tcG9uZW50KSB7XG4gIC8vIFJlYWN0IHYxNi4xMSBhbmQgYmVsb3dcbiAgaWYgKHJlYWN0SXMuaXNNZW1vKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gTUVNT19TVEFUSUNTO1xuICB9IC8vIFJlYWN0IHYxNi4xMiBhbmQgYWJvdmVcblxuXG4gIHJldHVybiBUWVBFX1NUQVRJQ1NbY29tcG9uZW50WyckJHR5cGVvZiddXSB8fCBSRUFDVF9TVEFUSUNTO1xufVxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBvYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgICBpZiAoaW5oZXJpdGVkQ29tcG9uZW50ICYmIGluaGVyaXRlZENvbXBvbmVudCAhPT0gb2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0U3RhdGljcyA9IGdldFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50KTtcbiAgICB2YXIgc291cmNlU3RhdGljcyA9IGdldFN0YXRpY3Moc291cmNlQ29tcG9uZW50KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghS05PV05fU1RBVElDU1trZXldICYmICEoYmxhY2tsaXN0ICYmIGJsYWNrbGlzdFtrZXldKSAmJiAhKHNvdXJjZVN0YXRpY3MgJiYgc291cmNlU3RhdGljc1trZXldKSAmJiAhKHRhcmdldFN0YXRpY3MgJiYgdGFyZ2V0U3RhdGljc1trZXldKSkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBdm9pZCBmYWlsdXJlcyBmcm9tIHJlYWQtb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XG4iLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO3ZhciBiPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IsYz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLGQ9Yj9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LGU9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsZj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCxnPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LGg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksaz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLGw9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYXN5bmNfbW9kZVwiKTo2MDExMSxtPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKTo2MDExMSxuPWI/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLHA9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTMscT1iP1xuU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik6NjAxMjAscj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOjYwMTE1LHQ9Yj9TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTo2MDExNix2PWI/U3ltYm9sLmZvcihcInJlYWN0LmJsb2NrXCIpOjYwMTIxLHc9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZnVuZGFtZW50YWxcIik6NjAxMTcseD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5yZXNwb25kZXJcIik6NjAxMTgseT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTo2MDExOTtcbmZ1bmN0aW9uIHooYSl7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSl7dmFyIHU9YS4kJHR5cGVvZjtzd2l0Y2godSl7Y2FzZSBjOnN3aXRjaChhPWEudHlwZSxhKXtjYXNlIGw6Y2FzZSBtOmNhc2UgZTpjYXNlIGc6Y2FzZSBmOmNhc2UgcDpyZXR1cm4gYTtkZWZhdWx0OnN3aXRjaChhPWEmJmEuJCR0eXBlb2YsYSl7Y2FzZSBrOmNhc2UgbjpjYXNlIHQ6Y2FzZSByOmNhc2UgaDpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiB1fX1jYXNlIGQ6cmV0dXJuIHV9fX1mdW5jdGlvbiBBKGEpe3JldHVybiB6KGEpPT09bX1leHBvcnRzLkFzeW5jTW9kZT1sO2V4cG9ydHMuQ29uY3VycmVudE1vZGU9bTtleHBvcnRzLkNvbnRleHRDb25zdW1lcj1rO2V4cG9ydHMuQ29udGV4dFByb3ZpZGVyPWg7ZXhwb3J0cy5FbGVtZW50PWM7ZXhwb3J0cy5Gb3J3YXJkUmVmPW47ZXhwb3J0cy5GcmFnbWVudD1lO2V4cG9ydHMuTGF6eT10O2V4cG9ydHMuTWVtbz1yO2V4cG9ydHMuUG9ydGFsPWQ7XG5leHBvcnRzLlByb2ZpbGVyPWc7ZXhwb3J0cy5TdHJpY3RNb2RlPWY7ZXhwb3J0cy5TdXNwZW5zZT1wO2V4cG9ydHMuaXNBc3luY01vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIEEoYSl8fHooYSk9PT1sfTtleHBvcnRzLmlzQ29uY3VycmVudE1vZGU9QTtleHBvcnRzLmlzQ29udGV4dENvbnN1bWVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09a307ZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWh9O2V4cG9ydHMuaXNFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJmEuJCR0eXBlb2Y9PT1jfTtleHBvcnRzLmlzRm9yd2FyZFJlZj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PW59O2V4cG9ydHMuaXNGcmFnbWVudD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWV9O2V4cG9ydHMuaXNMYXp5PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09dH07XG5leHBvcnRzLmlzTWVtbz1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXJ9O2V4cG9ydHMuaXNQb3J0YWw9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1kfTtleHBvcnRzLmlzUHJvZmlsZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1nfTtleHBvcnRzLmlzU3RyaWN0TW9kZT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWZ9O2V4cG9ydHMuaXNTdXNwZW5zZT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXB9O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWV8fGE9PT1tfHxhPT09Z3x8YT09PWZ8fGE9PT1wfHxhPT09cXx8XCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmKGEuJCR0eXBlb2Y9PT10fHxhLiQkdHlwZW9mPT09cnx8YS4kJHR5cGVvZj09PWh8fGEuJCR0eXBlb2Y9PT1rfHxhLiQkdHlwZW9mPT09bnx8YS4kJHR5cGVvZj09PXd8fGEuJCR0eXBlb2Y9PT14fHxhLiQkdHlwZW9mPT09eXx8YS4kJHR5cGVvZj09PXYpfTtleHBvcnRzLnR5cGVPZj16O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLypcbiBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiovXG4ndXNlIHN0cmljdCc7dmFyIGFhPXJlcXVpcmUoXCJyZWFjdFwiKSxjYT1yZXF1aXJlKFwic2NoZWR1bGVyXCIpO2Z1bmN0aW9uIHAoYSl7Zm9yKHZhciBiPVwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIrYSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliKz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tjXSk7cmV0dXJuXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrYStcIjsgdmlzaXQgXCIrYitcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCJ9dmFyIGRhPW5ldyBTZXQsZWE9e307ZnVuY3Rpb24gZmEoYSxiKXtoYShhLGIpO2hhKGErXCJDYXB0dXJlXCIsYil9XG5mdW5jdGlvbiBoYShhLGIpe2VhW2FdPWI7Zm9yKGE9MDthPGIubGVuZ3RoO2ErKylkYS5hZGQoYlthXSl9XG52YXIgaWE9IShcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvd3x8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnR8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLGphPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksa2E9L15bOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFwtLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDBdKiQvLGxhPVxue30sbWE9e307ZnVuY3Rpb24gb2EoYSl7aWYoamEuY2FsbChtYSxhKSlyZXR1cm4hMDtpZihqYS5jYWxsKGxhLGEpKXJldHVybiExO2lmKGthLnRlc3QoYSkpcmV0dXJuIG1hW2FdPSEwO2xhW2FdPSEwO3JldHVybiExfWZ1bmN0aW9uIHBhKGEsYixjLGQpe2lmKG51bGwhPT1jJiYwPT09Yy50eXBlKXJldHVybiExO3N3aXRjaCh0eXBlb2YgYil7Y2FzZSBcImZ1bmN0aW9uXCI6Y2FzZSBcInN5bWJvbFwiOnJldHVybiEwO2Nhc2UgXCJib29sZWFuXCI6aWYoZClyZXR1cm4hMTtpZihudWxsIT09YylyZXR1cm4hYy5hY2NlcHRzQm9vbGVhbnM7YT1hLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw1KTtyZXR1cm5cImRhdGEtXCIhPT1hJiZcImFyaWEtXCIhPT1hO2RlZmF1bHQ6cmV0dXJuITF9fVxuZnVuY3Rpb24gcWEoYSxiLGMsZCl7aWYobnVsbD09PWJ8fFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYnx8cGEoYSxiLGMsZCkpcmV0dXJuITA7aWYoZClyZXR1cm4hMTtpZihudWxsIT09Yylzd2l0Y2goYy50eXBlKXtjYXNlIDM6cmV0dXJuIWI7Y2FzZSA0OnJldHVybiExPT09YjtjYXNlIDU6cmV0dXJuIGlzTmFOKGIpO2Nhc2UgNjpyZXR1cm4gaXNOYU4oYil8fDE+Yn1yZXR1cm4hMX1mdW5jdGlvbiB2KGEsYixjLGQsZSxmLGcpe3RoaXMuYWNjZXB0c0Jvb2xlYW5zPTI9PT1ifHwzPT09Ynx8ND09PWI7dGhpcy5hdHRyaWJ1dGVOYW1lPWQ7dGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2U9ZTt0aGlzLm11c3RVc2VQcm9wZXJ0eT1jO3RoaXMucHJvcGVydHlOYW1lPWE7dGhpcy50eXBlPWI7dGhpcy5zYW5pdGl6ZVVSTD1mO3RoaXMucmVtb3ZlRW1wdHlTdHJpbmc9Z312YXIgej17fTtcblwiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7elthXT1uZXcgdihhLDAsITEsYSxudWxsLCExLCExKX0pO1tbXCJhY2NlcHRDaGFyc2V0XCIsXCJhY2NlcHQtY2hhcnNldFwiXSxbXCJjbGFzc05hbWVcIixcImNsYXNzXCJdLFtcImh0bWxGb3JcIixcImZvclwiXSxbXCJodHRwRXF1aXZcIixcImh0dHAtZXF1aXZcIl1dLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YVswXTt6W2JdPW5ldyB2KGIsMSwhMSxhWzFdLG51bGwsITEsITEpfSk7W1wiY29udGVudEVkaXRhYmxlXCIsXCJkcmFnZ2FibGVcIixcInNwZWxsQ2hlY2tcIixcInZhbHVlXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7elthXT1uZXcgdihhLDIsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7XG5bXCJhdXRvUmV2ZXJzZVwiLFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiLFwiZm9jdXNhYmxlXCIsXCJwcmVzZXJ2ZUFscGhhXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7elthXT1uZXcgdihhLDIsITEsYSxudWxsLCExLCExKX0pO1wiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlIGRpc2FibGVSZW1vdGVQbGF5YmFjayBmb3JtTm9WYWxpZGF0ZSBoaWRkZW4gbG9vcCBub01vZHVsZSBub1ZhbGlkYXRlIG9wZW4gcGxheXNJbmxpbmUgcmVhZE9ubHkgcmVxdWlyZWQgcmV2ZXJzZWQgc2NvcGVkIHNlYW1sZXNzIGl0ZW1TY29wZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pbYV09bmV3IHYoYSwzLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuW1wiY2hlY2tlZFwiLFwibXVsdGlwbGVcIixcIm11dGVkXCIsXCJzZWxlY3RlZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pbYV09bmV3IHYoYSwzLCEwLGEsbnVsbCwhMSwhMSl9KTtbXCJjYXB0dXJlXCIsXCJkb3dubG9hZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pbYV09bmV3IHYoYSw0LCExLGEsbnVsbCwhMSwhMSl9KTtbXCJjb2xzXCIsXCJyb3dzXCIsXCJzaXplXCIsXCJzcGFuXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7elthXT1uZXcgdihhLDYsITEsYSxudWxsLCExLCExKX0pO1tcInJvd1NwYW5cIixcInN0YXJ0XCJdLmZvckVhY2goZnVuY3Rpb24oYSl7elthXT1uZXcgdihhLDUsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7dmFyIHJhPS9bXFwtOl0oW2Etel0pL2c7ZnVuY3Rpb24gc2EoYSl7cmV0dXJuIGFbMV0udG9VcHBlckNhc2UoKX1cblwiYWNjZW50LWhlaWdodCBhbGlnbm1lbnQtYmFzZWxpbmUgYXJhYmljLWZvcm0gYmFzZWxpbmUtc2hpZnQgY2FwLWhlaWdodCBjbGlwLXBhdGggY2xpcC1ydWxlIGNvbG9yLWludGVycG9sYXRpb24gY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIGNvbG9yLXByb2ZpbGUgY29sb3ItcmVuZGVyaW5nIGRvbWluYW50LWJhc2VsaW5lIGVuYWJsZS1iYWNrZ3JvdW5kIGZpbGwtb3BhY2l0eSBmaWxsLXJ1bGUgZmxvb2QtY29sb3IgZmxvb2Qtb3BhY2l0eSBmb250LWZhbWlseSBmb250LXNpemUgZm9udC1zaXplLWFkanVzdCBmb250LXN0cmV0Y2ggZm9udC1zdHlsZSBmb250LXZhcmlhbnQgZm9udC13ZWlnaHQgZ2x5cGgtbmFtZSBnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIGdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIGhvcml6LWFkdi14IGhvcml6LW9yaWdpbi14IGltYWdlLXJlbmRlcmluZyBsZXR0ZXItc3BhY2luZyBsaWdodGluZy1jb2xvciBtYXJrZXItZW5kIG1hcmtlci1taWQgbWFya2VyLXN0YXJ0IG92ZXJsaW5lLXBvc2l0aW9uIG92ZXJsaW5lLXRoaWNrbmVzcyBwYWludC1vcmRlciBwYW5vc2UtMSBwb2ludGVyLWV2ZW50cyByZW5kZXJpbmctaW50ZW50IHNoYXBlLXJlbmRlcmluZyBzdG9wLWNvbG9yIHN0b3Atb3BhY2l0eSBzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIHN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIHN0cm9rZS1kYXNoYXJyYXkgc3Ryb2tlLWRhc2hvZmZzZXQgc3Ryb2tlLWxpbmVjYXAgc3Ryb2tlLWxpbmVqb2luIHN0cm9rZS1taXRlcmxpbWl0IHN0cm9rZS1vcGFjaXR5IHN0cm9rZS13aWR0aCB0ZXh0LWFuY2hvciB0ZXh0LWRlY29yYXRpb24gdGV4dC1yZW5kZXJpbmcgdW5kZXJsaW5lLXBvc2l0aW9uIHVuZGVybGluZS10aGlja25lc3MgdW5pY29kZS1iaWRpIHVuaWNvZGUtcmFuZ2UgdW5pdHMtcGVyLWVtIHYtYWxwaGFiZXRpYyB2LWhhbmdpbmcgdi1pZGVvZ3JhcGhpYyB2LW1hdGhlbWF0aWNhbCB2ZWN0b3ItZWZmZWN0IHZlcnQtYWR2LXkgdmVydC1vcmlnaW4teCB2ZXJ0LW9yaWdpbi15IHdvcmQtc3BhY2luZyB3cml0aW5nLW1vZGUgeG1sbnM6eGxpbmsgeC1oZWlnaHRcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UocmEsXG5zYSk7eltiXT1uZXcgdihiLDEsITEsYSxudWxsLCExLCExKX0pO1wieGxpbms6YWN0dWF0ZSB4bGluazphcmNyb2xlIHhsaW5rOnJvbGUgeGxpbms6c2hvdyB4bGluazp0aXRsZSB4bGluazp0eXBlXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKHJhLHNhKTt6W2JdPW5ldyB2KGIsMSwhMSxhLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLCExLCExKX0pO1tcInhtbDpiYXNlXCIsXCJ4bWw6bGFuZ1wiLFwieG1sOnNwYWNlXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKHJhLHNhKTt6W2JdPW5ldyB2KGIsMSwhMSxhLFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsITEsITEpfSk7W1widGFiSW5kZXhcIixcImNyb3NzT3JpZ2luXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7elthXT1uZXcgdihhLDEsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7XG56LnhsaW5rSHJlZj1uZXcgdihcInhsaW5rSHJlZlwiLDEsITEsXCJ4bGluazpocmVmXCIsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsITAsITEpO1tcInNyY1wiLFwiaHJlZlwiLFwiYWN0aW9uXCIsXCJmb3JtQWN0aW9uXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7elthXT1uZXcgdihhLDEsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITAsITApfSk7XG5mdW5jdGlvbiB0YShhLGIsYyxkKXt2YXIgZT16Lmhhc093blByb3BlcnR5KGIpP3pbYl06bnVsbDtpZihudWxsIT09ZT8wIT09ZS50eXBlOmR8fCEoMjxiLmxlbmd0aCl8fFwib1wiIT09YlswXSYmXCJPXCIhPT1iWzBdfHxcIm5cIiE9PWJbMV0mJlwiTlwiIT09YlsxXSlxYShiLGMsZSxkKSYmKGM9bnVsbCksZHx8bnVsbD09PWU/b2EoYikmJihudWxsPT09Yz9hLnJlbW92ZUF0dHJpYnV0ZShiKTphLnNldEF0dHJpYnV0ZShiLFwiXCIrYykpOmUubXVzdFVzZVByb3BlcnR5P2FbZS5wcm9wZXJ0eU5hbWVdPW51bGw9PT1jPzM9PT1lLnR5cGU/ITE6XCJcIjpjOihiPWUuYXR0cmlidXRlTmFtZSxkPWUuYXR0cmlidXRlTmFtZXNwYWNlLG51bGw9PT1jP2EucmVtb3ZlQXR0cmlidXRlKGIpOihlPWUudHlwZSxjPTM9PT1lfHw0PT09ZSYmITA9PT1jP1wiXCI6XCJcIitjLGQ/YS5zZXRBdHRyaWJ1dGVOUyhkLGIsYyk6YS5zZXRBdHRyaWJ1dGUoYixjKSkpfVxudmFyIHVhPWFhLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELHZhPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLHdhPVN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIikseWE9U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLHphPVN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxBYT1TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksQmE9U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpLENhPVN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLERhPVN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxFYT1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksRmE9U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksR2E9U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksSGE9U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik7U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpO1N5bWJvbC5mb3IoXCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlXCIpO1xudmFyIElhPVN5bWJvbC5mb3IoXCJyZWFjdC5vZmZzY3JlZW5cIik7U3ltYm9sLmZvcihcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIik7U3ltYm9sLmZvcihcInJlYWN0LmNhY2hlXCIpO1N5bWJvbC5mb3IoXCJyZWFjdC50cmFjaW5nX21hcmtlclwiKTt2YXIgSmE9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIEthKGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT1KYSYmYVtKYV18fGFbXCJAQGl0ZXJhdG9yXCJdO3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBhP2E6bnVsbH12YXIgQT1PYmplY3QuYXNzaWduLExhO2Z1bmN0aW9uIE1hKGEpe2lmKHZvaWQgMD09PUxhKXRyeXt0aHJvdyBFcnJvcigpO31jYXRjaChjKXt2YXIgYj1jLnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO0xhPWImJmJbMV18fFwiXCJ9cmV0dXJuXCJcXG5cIitMYSthfXZhciBOYT0hMTtcbmZ1bmN0aW9uIE9hKGEsYil7aWYoIWF8fE5hKXJldHVyblwiXCI7TmE9ITA7dmFyIGM9RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9dm9pZCAwO3RyeXtpZihiKWlmKGI9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpO30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIucHJvdG90eXBlLFwicHJvcHNcIix7c2V0OmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKTt9fSksXCJvYmplY3RcIj09PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KGIsW10pfWNhdGNoKGwpe3ZhciBkPWx9UmVmbGVjdC5jb25zdHJ1Y3QoYSxbXSxiKX1lbHNle3RyeXtiLmNhbGwoKX1jYXRjaChsKXtkPWx9YS5jYWxsKGIucHJvdG90eXBlKX1lbHNle3RyeXt0aHJvdyBFcnJvcigpO31jYXRjaChsKXtkPWx9YSgpfX1jYXRjaChsKXtpZihsJiZkJiZcInN0cmluZ1wiPT09dHlwZW9mIGwuc3RhY2spe2Zvcih2YXIgZT1sLnN0YWNrLnNwbGl0KFwiXFxuXCIpLFxuZj1kLnN0YWNrLnNwbGl0KFwiXFxuXCIpLGc9ZS5sZW5ndGgtMSxoPWYubGVuZ3RoLTE7MTw9ZyYmMDw9aCYmZVtnXSE9PWZbaF07KWgtLTtmb3IoOzE8PWcmJjA8PWg7Zy0tLGgtLSlpZihlW2ddIT09ZltoXSl7aWYoMSE9PWd8fDEhPT1oKXtkbyBpZihnLS0saC0tLDA+aHx8ZVtnXSE9PWZbaF0pe3ZhciBrPVwiXFxuXCIrZVtnXS5yZXBsYWNlKFwiIGF0IG5ldyBcIixcIiBhdCBcIik7YS5kaXNwbGF5TmFtZSYmay5pbmNsdWRlcyhcIjxhbm9ueW1vdXM+XCIpJiYoaz1rLnJlcGxhY2UoXCI8YW5vbnltb3VzPlwiLGEuZGlzcGxheU5hbWUpKTtyZXR1cm4ga313aGlsZSgxPD1nJiYwPD1oKX1icmVha319fWZpbmFsbHl7TmE9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9Y31yZXR1cm4oYT1hP2EuZGlzcGxheU5hbWV8fGEubmFtZTpcIlwiKT9NYShhKTpcIlwifVxuZnVuY3Rpb24gUGEoYSl7c3dpdGNoKGEudGFnKXtjYXNlIDU6cmV0dXJuIE1hKGEudHlwZSk7Y2FzZSAxNjpyZXR1cm4gTWEoXCJMYXp5XCIpO2Nhc2UgMTM6cmV0dXJuIE1hKFwiU3VzcGVuc2VcIik7Y2FzZSAxOTpyZXR1cm4gTWEoXCJTdXNwZW5zZUxpc3RcIik7Y2FzZSAwOmNhc2UgMjpjYXNlIDE1OnJldHVybiBhPU9hKGEudHlwZSwhMSksYTtjYXNlIDExOnJldHVybiBhPU9hKGEudHlwZS5yZW5kZXIsITEpLGE7Y2FzZSAxOnJldHVybiBhPU9hKGEudHlwZSwhMCksYTtkZWZhdWx0OnJldHVyblwiXCJ9fVxuZnVuY3Rpb24gUWEoYSl7aWYobnVsbD09YSlyZXR1cm4gbnVsbDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSlyZXR1cm4gYS5kaXNwbGF5TmFtZXx8YS5uYW1lfHxudWxsO2lmKFwic3RyaW5nXCI9PT10eXBlb2YgYSlyZXR1cm4gYTtzd2l0Y2goYSl7Y2FzZSB5YTpyZXR1cm5cIkZyYWdtZW50XCI7Y2FzZSB3YTpyZXR1cm5cIlBvcnRhbFwiO2Nhc2UgQWE6cmV0dXJuXCJQcm9maWxlclwiO2Nhc2UgemE6cmV0dXJuXCJTdHJpY3RNb2RlXCI7Y2FzZSBFYTpyZXR1cm5cIlN1c3BlbnNlXCI7Y2FzZSBGYTpyZXR1cm5cIlN1c3BlbnNlTGlzdFwifWlmKFwib2JqZWN0XCI9PT10eXBlb2YgYSlzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBDYTpyZXR1cm4oYS5kaXNwbGF5TmFtZXx8XCJDb250ZXh0XCIpK1wiLkNvbnN1bWVyXCI7Y2FzZSBCYTpyZXR1cm4oYS5fY29udGV4dC5kaXNwbGF5TmFtZXx8XCJDb250ZXh0XCIpK1wiLlByb3ZpZGVyXCI7Y2FzZSBEYTp2YXIgYj1hLnJlbmRlcjthPWEuZGlzcGxheU5hbWU7YXx8KGE9Yi5kaXNwbGF5TmFtZXx8XG5iLm5hbWV8fFwiXCIsYT1cIlwiIT09YT9cIkZvcndhcmRSZWYoXCIrYStcIilcIjpcIkZvcndhcmRSZWZcIik7cmV0dXJuIGE7Y2FzZSBHYTpyZXR1cm4gYj1hLmRpc3BsYXlOYW1lfHxudWxsLG51bGwhPT1iP2I6UWEoYS50eXBlKXx8XCJNZW1vXCI7Y2FzZSBIYTpiPWEuX3BheWxvYWQ7YT1hLl9pbml0O3RyeXtyZXR1cm4gUWEoYShiKSl9Y2F0Y2goYyl7fX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIFJhKGEpe3ZhciBiPWEudHlwZTtzd2l0Y2goYS50YWcpe2Nhc2UgMjQ6cmV0dXJuXCJDYWNoZVwiO2Nhc2UgOTpyZXR1cm4oYi5kaXNwbGF5TmFtZXx8XCJDb250ZXh0XCIpK1wiLkNvbnN1bWVyXCI7Y2FzZSAxMDpyZXR1cm4oYi5fY29udGV4dC5kaXNwbGF5TmFtZXx8XCJDb250ZXh0XCIpK1wiLlByb3ZpZGVyXCI7Y2FzZSAxODpyZXR1cm5cIkRlaHlkcmF0ZWRGcmFnbWVudFwiO2Nhc2UgMTE6cmV0dXJuIGE9Yi5yZW5kZXIsYT1hLmRpc3BsYXlOYW1lfHxhLm5hbWV8fFwiXCIsYi5kaXNwbGF5TmFtZXx8KFwiXCIhPT1hP1wiRm9yd2FyZFJlZihcIithK1wiKVwiOlwiRm9yd2FyZFJlZlwiKTtjYXNlIDc6cmV0dXJuXCJGcmFnbWVudFwiO2Nhc2UgNTpyZXR1cm4gYjtjYXNlIDQ6cmV0dXJuXCJQb3J0YWxcIjtjYXNlIDM6cmV0dXJuXCJSb290XCI7Y2FzZSA2OnJldHVyblwiVGV4dFwiO2Nhc2UgMTY6cmV0dXJuIFFhKGIpO2Nhc2UgODpyZXR1cm4gYj09PXphP1wiU3RyaWN0TW9kZVwiOlwiTW9kZVwiO2Nhc2UgMjI6cmV0dXJuXCJPZmZzY3JlZW5cIjtcbmNhc2UgMTI6cmV0dXJuXCJQcm9maWxlclwiO2Nhc2UgMjE6cmV0dXJuXCJTY29wZVwiO2Nhc2UgMTM6cmV0dXJuXCJTdXNwZW5zZVwiO2Nhc2UgMTk6cmV0dXJuXCJTdXNwZW5zZUxpc3RcIjtjYXNlIDI1OnJldHVyblwiVHJhY2luZ01hcmtlclwiO2Nhc2UgMTpjYXNlIDA6Y2FzZSAxNzpjYXNlIDI6Y2FzZSAxNDpjYXNlIDE1OmlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBiKXJldHVybiBiLmRpc3BsYXlOYW1lfHxiLm5hbWV8fG51bGw7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBiKXJldHVybiBifXJldHVybiBudWxsfWZ1bmN0aW9uIFNhKGEpe3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSBcImJvb2xlYW5cIjpjYXNlIFwibnVtYmVyXCI6Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJ1bmRlZmluZWRcIjpyZXR1cm4gYTtjYXNlIFwib2JqZWN0XCI6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm5cIlwifX1cbmZ1bmN0aW9uIFRhKGEpe3ZhciBiPWEudHlwZTtyZXR1cm4oYT1hLm5vZGVOYW1lKSYmXCJpbnB1dFwiPT09YS50b0xvd2VyQ2FzZSgpJiYoXCJjaGVja2JveFwiPT09Ynx8XCJyYWRpb1wiPT09Yil9XG5mdW5jdGlvbiBVYShhKXt2YXIgYj1UYShhKT9cImNoZWNrZWRcIjpcInZhbHVlXCIsYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEuY29uc3RydWN0b3IucHJvdG90eXBlLGIpLGQ9XCJcIithW2JdO2lmKCFhLmhhc093blByb3BlcnR5KGIpJiZcInVuZGVmaW5lZFwiIT09dHlwZW9mIGMmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBjLmdldCYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGMuc2V0KXt2YXIgZT1jLmdldCxmPWMuc2V0O09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oYSl7ZD1cIlwiK2E7Zi5jYWxsKHRoaXMsYSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7ZW51bWVyYWJsZTpjLmVudW1lcmFibGV9KTtyZXR1cm57Z2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZH0sc2V0VmFsdWU6ZnVuY3Rpb24oYSl7ZD1cIlwiK2F9LHN0b3BUcmFja2luZzpmdW5jdGlvbigpe2EuX3ZhbHVlVHJhY2tlcj1cbm51bGw7ZGVsZXRlIGFbYl19fX19ZnVuY3Rpb24gVmEoYSl7YS5fdmFsdWVUcmFja2VyfHwoYS5fdmFsdWVUcmFja2VyPVVhKGEpKX1mdW5jdGlvbiBXYShhKXtpZighYSlyZXR1cm4hMTt2YXIgYj1hLl92YWx1ZVRyYWNrZXI7aWYoIWIpcmV0dXJuITA7dmFyIGM9Yi5nZXRWYWx1ZSgpO3ZhciBkPVwiXCI7YSYmKGQ9VGEoYSk/YS5jaGVja2VkP1widHJ1ZVwiOlwiZmFsc2VcIjphLnZhbHVlKTthPWQ7cmV0dXJuIGEhPT1jPyhiLnNldFZhbHVlKGEpLCEwKTohMX1mdW5jdGlvbiBYYShhKXthPWF8fChcInVuZGVmaW5lZFwiIT09dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCk7aWYoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBhKXJldHVybiBudWxsO3RyeXtyZXR1cm4gYS5hY3RpdmVFbGVtZW50fHxhLmJvZHl9Y2F0Y2goYil7cmV0dXJuIGEuYm9keX19XG5mdW5jdGlvbiBZYShhLGIpe3ZhciBjPWIuY2hlY2tlZDtyZXR1cm4gQSh7fSxiLHtkZWZhdWx0Q2hlY2tlZDp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCx2YWx1ZTp2b2lkIDAsY2hlY2tlZDpudWxsIT1jP2M6YS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkfSl9ZnVuY3Rpb24gWmEoYSxiKXt2YXIgYz1udWxsPT1iLmRlZmF1bHRWYWx1ZT9cIlwiOmIuZGVmYXVsdFZhbHVlLGQ9bnVsbCE9Yi5jaGVja2VkP2IuY2hlY2tlZDpiLmRlZmF1bHRDaGVja2VkO2M9U2EobnVsbCE9Yi52YWx1ZT9iLnZhbHVlOmMpO2EuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbENoZWNrZWQ6ZCxpbml0aWFsVmFsdWU6Yyxjb250cm9sbGVkOlwiY2hlY2tib3hcIj09PWIudHlwZXx8XCJyYWRpb1wiPT09Yi50eXBlP251bGwhPWIuY2hlY2tlZDpudWxsIT1iLnZhbHVlfX1mdW5jdGlvbiBhYihhLGIpe2I9Yi5jaGVja2VkO251bGwhPWImJnRhKGEsXCJjaGVja2VkXCIsYiwhMSl9XG5mdW5jdGlvbiBiYihhLGIpe2FiKGEsYik7dmFyIGM9U2EoYi52YWx1ZSksZD1iLnR5cGU7aWYobnVsbCE9YylpZihcIm51bWJlclwiPT09ZCl7aWYoMD09PWMmJlwiXCI9PT1hLnZhbHVlfHxhLnZhbHVlIT1jKWEudmFsdWU9XCJcIitjfWVsc2UgYS52YWx1ZSE9PVwiXCIrYyYmKGEudmFsdWU9XCJcIitjKTtlbHNlIGlmKFwic3VibWl0XCI9PT1kfHxcInJlc2V0XCI9PT1kKXthLnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpO3JldHVybn1iLmhhc093blByb3BlcnR5KFwidmFsdWVcIik/Y2IoYSxiLnR5cGUsYyk6Yi5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSYmY2IoYSxiLnR5cGUsU2EoYi5kZWZhdWx0VmFsdWUpKTtudWxsPT1iLmNoZWNrZWQmJm51bGwhPWIuZGVmYXVsdENoZWNrZWQmJihhLmRlZmF1bHRDaGVja2VkPSEhYi5kZWZhdWx0Q2hlY2tlZCl9XG5mdW5jdGlvbiBkYihhLGIsYyl7aWYoYi5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpfHxiLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFZhbHVlXCIpKXt2YXIgZD1iLnR5cGU7aWYoIShcInN1Ym1pdFwiIT09ZCYmXCJyZXNldFwiIT09ZHx8dm9pZCAwIT09Yi52YWx1ZSYmbnVsbCE9PWIudmFsdWUpKXJldHVybjtiPVwiXCIrYS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTtjfHxiPT09YS52YWx1ZXx8KGEudmFsdWU9Yik7YS5kZWZhdWx0VmFsdWU9Yn1jPWEubmFtZTtcIlwiIT09YyYmKGEubmFtZT1cIlwiKTthLmRlZmF1bHRDaGVja2VkPSEhYS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkO1wiXCIhPT1jJiYoYS5uYW1lPWMpfVxuZnVuY3Rpb24gY2IoYSxiLGMpe2lmKFwibnVtYmVyXCIhPT1ifHxYYShhLm93bmVyRG9jdW1lbnQpIT09YSludWxsPT1jP2EuZGVmYXVsdFZhbHVlPVwiXCIrYS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTphLmRlZmF1bHRWYWx1ZSE9PVwiXCIrYyYmKGEuZGVmYXVsdFZhbHVlPVwiXCIrYyl9dmFyIGViPUFycmF5LmlzQXJyYXk7XG5mdW5jdGlvbiBmYihhLGIsYyxkKXthPWEub3B0aW9ucztpZihiKXtiPXt9O2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKWJbXCIkXCIrY1tlXV09ITA7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyllPWIuaGFzT3duUHJvcGVydHkoXCIkXCIrYVtjXS52YWx1ZSksYVtjXS5zZWxlY3RlZCE9PWUmJihhW2NdLnNlbGVjdGVkPWUpLGUmJmQmJihhW2NdLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtjPVwiXCIrU2EoYyk7Yj1udWxsO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe2lmKGFbZV0udmFsdWU9PT1jKXthW2VdLnNlbGVjdGVkPSEwO2QmJihhW2VdLmRlZmF1bHRTZWxlY3RlZD0hMCk7cmV0dXJufW51bGwhPT1ifHxhW2VdLmRpc2FibGVkfHwoYj1hW2VdKX1udWxsIT09YiYmKGIuc2VsZWN0ZWQ9ITApfX1cbmZ1bmN0aW9uIGdiKGEsYil7aWYobnVsbCE9Yi5kYW5nZXJvdXNseVNldElubmVySFRNTCl0aHJvdyBFcnJvcihwKDkxKSk7cmV0dXJuIEEoe30sYix7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46XCJcIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlfSl9ZnVuY3Rpb24gaGIoYSxiKXt2YXIgYz1iLnZhbHVlO2lmKG51bGw9PWMpe2M9Yi5jaGlsZHJlbjtiPWIuZGVmYXVsdFZhbHVlO2lmKG51bGwhPWMpe2lmKG51bGwhPWIpdGhyb3cgRXJyb3IocCg5MikpO2lmKGViKGMpKXtpZigxPGMubGVuZ3RoKXRocm93IEVycm9yKHAoOTMpKTtjPWNbMF19Yj1jfW51bGw9PWImJihiPVwiXCIpO2M9Yn1hLl93cmFwcGVyU3RhdGU9e2luaXRpYWxWYWx1ZTpTYShjKX19XG5mdW5jdGlvbiBpYihhLGIpe3ZhciBjPVNhKGIudmFsdWUpLGQ9U2EoYi5kZWZhdWx0VmFsdWUpO251bGwhPWMmJihjPVwiXCIrYyxjIT09YS52YWx1ZSYmKGEudmFsdWU9YyksbnVsbD09Yi5kZWZhdWx0VmFsdWUmJmEuZGVmYXVsdFZhbHVlIT09YyYmKGEuZGVmYXVsdFZhbHVlPWMpKTtudWxsIT1kJiYoYS5kZWZhdWx0VmFsdWU9XCJcIitkKX1mdW5jdGlvbiBqYihhKXt2YXIgYj1hLnRleHRDb250ZW50O2I9PT1hLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlJiZcIlwiIT09YiYmbnVsbCE9PWImJihhLnZhbHVlPWIpfWZ1bmN0aW9uIGtiKGEpe3N3aXRjaChhKXtjYXNlIFwic3ZnXCI6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO2Nhc2UgXCJtYXRoXCI6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI7ZGVmYXVsdDpyZXR1cm5cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIn19XG5mdW5jdGlvbiBsYihhLGIpe3JldHVybiBudWxsPT1hfHxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj09PWE/a2IoYik6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT09YSYmXCJmb3JlaWduT2JqZWN0XCI9PT1iP1wiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiOmF9XG52YXIgbWIsbmI9ZnVuY3Rpb24oYSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBNU0FwcCYmTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24/ZnVuY3Rpb24oYixjLGQsZSl7TVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKXtyZXR1cm4gYShiLGMsZCxlKX0pfTphfShmdW5jdGlvbihhLGIpe2lmKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiE9PWEubmFtZXNwYWNlVVJJfHxcImlubmVySFRNTFwiaW4gYSlhLmlubmVySFRNTD1iO2Vsc2V7bWI9bWJ8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7bWIuaW5uZXJIVE1MPVwiPHN2Zz5cIitiLnZhbHVlT2YoKS50b1N0cmluZygpK1wiPC9zdmc+XCI7Zm9yKGI9bWIuZmlyc3RDaGlsZDthLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKTtmb3IoO2IuZmlyc3RDaGlsZDspYS5hcHBlbmRDaGlsZChiLmZpcnN0Q2hpbGQpfX0pO1xuZnVuY3Rpb24gb2IoYSxiKXtpZihiKXt2YXIgYz1hLmZpcnN0Q2hpbGQ7aWYoYyYmYz09PWEubGFzdENoaWxkJiYzPT09Yy5ub2RlVHlwZSl7Yy5ub2RlVmFsdWU9YjtyZXR1cm59fWEudGV4dENvbnRlbnQ9Yn1cbnZhciBwYj17YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsYXNwZWN0UmF0aW86ITAsYm9yZGVySW1hZ2VPdXRzZXQ6ITAsYm9yZGVySW1hZ2VTbGljZTohMCxib3JkZXJJbWFnZVdpZHRoOiEwLGJveEZsZXg6ITAsYm94RmxleEdyb3VwOiEwLGJveE9yZGluYWxHcm91cDohMCxjb2x1bW5Db3VudDohMCxjb2x1bW5zOiEwLGZsZXg6ITAsZmxleEdyb3c6ITAsZmxleFBvc2l0aXZlOiEwLGZsZXhTaHJpbms6ITAsZmxleE5lZ2F0aXZlOiEwLGZsZXhPcmRlcjohMCxncmlkQXJlYTohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1NwYW46ITAsZ3JpZFJvd1N0YXJ0OiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3BhbjohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZm9udFdlaWdodDohMCxsaW5lQ2xhbXA6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsdGFiU2l6ZTohMCx3aWRvd3M6ITAsekluZGV4OiEwLFxuem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxxYj1bXCJXZWJraXRcIixcIm1zXCIsXCJNb3pcIixcIk9cIl07T2JqZWN0LmtleXMocGIpLmZvckVhY2goZnVuY3Rpb24oYSl7cWIuZm9yRWFjaChmdW5jdGlvbihiKXtiPWIrYS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSthLnN1YnN0cmluZygxKTtwYltiXT1wYlthXX0pfSk7ZnVuY3Rpb24gcmIoYSxiLGMpe3JldHVybiBudWxsPT1ifHxcImJvb2xlYW5cIj09PXR5cGVvZiBifHxcIlwiPT09Yj9cIlwiOmN8fFwibnVtYmVyXCIhPT10eXBlb2YgYnx8MD09PWJ8fHBiLmhhc093blByb3BlcnR5KGEpJiZwYlthXT8oXCJcIitiKS50cmltKCk6YitcInB4XCJ9XG5mdW5jdGlvbiBzYihhLGIpe2E9YS5zdHlsZTtmb3IodmFyIGMgaW4gYilpZihiLmhhc093blByb3BlcnR5KGMpKXt2YXIgZD0wPT09Yy5pbmRleE9mKFwiLS1cIiksZT1yYihjLGJbY10sZCk7XCJmbG9hdFwiPT09YyYmKGM9XCJjc3NGbG9hdFwiKTtkP2Euc2V0UHJvcGVydHkoYyxlKTphW2NdPWV9fXZhciB0Yj1BKHttZW51aXRlbTohMH0se2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsZW1iZWQ6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGtleWdlbjohMCxsaW5rOiEwLG1ldGE6ITAscGFyYW06ITAsc291cmNlOiEwLHRyYWNrOiEwLHdicjohMH0pO1xuZnVuY3Rpb24gdWIoYSxiKXtpZihiKXtpZih0YlthXSYmKG51bGwhPWIuY2hpbGRyZW58fG51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKHAoMTM3LGEpKTtpZihudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKXtpZihudWxsIT1iLmNoaWxkcmVuKXRocm93IEVycm9yKHAoNjApKTtpZihcIm9iamVjdFwiIT09dHlwZW9mIGIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8fCEoXCJfX2h0bWxcImluIGIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKHAoNjEpKTt9aWYobnVsbCE9Yi5zdHlsZSYmXCJvYmplY3RcIiE9PXR5cGVvZiBiLnN0eWxlKXRocm93IEVycm9yKHAoNjIpKTt9fVxuZnVuY3Rpb24gdmIoYSxiKXtpZigtMT09PWEuaW5kZXhPZihcIi1cIikpcmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBiLmlzO3N3aXRjaChhKXtjYXNlIFwiYW5ub3RhdGlvbi14bWxcIjpjYXNlIFwiY29sb3ItcHJvZmlsZVwiOmNhc2UgXCJmb250LWZhY2VcIjpjYXNlIFwiZm9udC1mYWNlLXNyY1wiOmNhc2UgXCJmb250LWZhY2UtdXJpXCI6Y2FzZSBcImZvbnQtZmFjZS1mb3JtYXRcIjpjYXNlIFwiZm9udC1mYWNlLW5hbWVcIjpjYXNlIFwibWlzc2luZy1nbHlwaFwiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fXZhciB3Yj1udWxsO2Z1bmN0aW9uIHhiKGEpe2E9YS50YXJnZXR8fGEuc3JjRWxlbWVudHx8d2luZG93O2EuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQmJihhPWEuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpO3JldHVybiAzPT09YS5ub2RlVHlwZT9hLnBhcmVudE5vZGU6YX12YXIgeWI9bnVsbCx6Yj1udWxsLEFiPW51bGw7XG5mdW5jdGlvbiBCYihhKXtpZihhPUNiKGEpKXtpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgeWIpdGhyb3cgRXJyb3IocCgyODApKTt2YXIgYj1hLnN0YXRlTm9kZTtiJiYoYj1EYihiKSx5YihhLnN0YXRlTm9kZSxhLnR5cGUsYikpfX1mdW5jdGlvbiBFYihhKXt6Yj9BYj9BYi5wdXNoKGEpOkFiPVthXTp6Yj1hfWZ1bmN0aW9uIEZiKCl7aWYoemIpe3ZhciBhPXpiLGI9QWI7QWI9emI9bnVsbDtCYihhKTtpZihiKWZvcihhPTA7YTxiLmxlbmd0aDthKyspQmIoYlthXSl9fWZ1bmN0aW9uIEdiKGEsYil7cmV0dXJuIGEoYil9ZnVuY3Rpb24gSGIoKXt9dmFyIEliPSExO2Z1bmN0aW9uIEpiKGEsYixjKXtpZihJYilyZXR1cm4gYShiLGMpO0liPSEwO3RyeXtyZXR1cm4gR2IoYSxiLGMpfWZpbmFsbHl7aWYoSWI9ITEsbnVsbCE9PXpifHxudWxsIT09QWIpSGIoKSxGYigpfX1cbmZ1bmN0aW9uIEtiKGEsYil7dmFyIGM9YS5zdGF0ZU5vZGU7aWYobnVsbD09PWMpcmV0dXJuIG51bGw7dmFyIGQ9RGIoYyk7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7Yz1kW2JdO2E6c3dpdGNoKGIpe2Nhc2UgXCJvbkNsaWNrXCI6Y2FzZSBcIm9uQ2xpY2tDYXB0dXJlXCI6Y2FzZSBcIm9uRG91YmxlQ2xpY2tcIjpjYXNlIFwib25Eb3VibGVDbGlja0NhcHR1cmVcIjpjYXNlIFwib25Nb3VzZURvd25cIjpjYXNlIFwib25Nb3VzZURvd25DYXB0dXJlXCI6Y2FzZSBcIm9uTW91c2VNb3ZlXCI6Y2FzZSBcIm9uTW91c2VNb3ZlQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlVXBcIjpjYXNlIFwib25Nb3VzZVVwQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlRW50ZXJcIjooZD0hZC5kaXNhYmxlZCl8fChhPWEudHlwZSxkPSEoXCJidXR0b25cIj09PWF8fFwiaW5wdXRcIj09PWF8fFwic2VsZWN0XCI9PT1hfHxcInRleHRhcmVhXCI9PT1hKSk7YT0hZDticmVhayBhO2RlZmF1bHQ6YT0hMX1pZihhKXJldHVybiBudWxsO2lmKGMmJlwiZnVuY3Rpb25cIiE9PVxudHlwZW9mIGMpdGhyb3cgRXJyb3IocCgyMzEsYix0eXBlb2YgYykpO3JldHVybiBjfXZhciBMYj0hMTtpZihpYSl0cnl7dmFyIE1iPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShNYixcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7TGI9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsTWIsTWIpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLE1iLE1iKX1jYXRjaChhKXtMYj0hMX1mdW5jdGlvbiBOYihhLGIsYyxkLGUsZixnLGgsayl7dmFyIGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDMpO3RyeXtiLmFwcGx5KGMsbCl9Y2F0Y2gobSl7dGhpcy5vbkVycm9yKG0pfX12YXIgT2I9ITEsUGI9bnVsbCxRYj0hMSxSYj1udWxsLFNiPXtvbkVycm9yOmZ1bmN0aW9uKGEpe09iPSEwO1BiPWF9fTtmdW5jdGlvbiBUYihhLGIsYyxkLGUsZixnLGgsayl7T2I9ITE7UGI9bnVsbDtOYi5hcHBseShTYixhcmd1bWVudHMpfVxuZnVuY3Rpb24gVWIoYSxiLGMsZCxlLGYsZyxoLGspe1RiLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihPYil7aWYoT2Ipe3ZhciBsPVBiO09iPSExO1BiPW51bGx9ZWxzZSB0aHJvdyBFcnJvcihwKDE5OCkpO1FifHwoUWI9ITAsUmI9bCl9fWZ1bmN0aW9uIFZiKGEpe3ZhciBiPWEsYz1hO2lmKGEuYWx0ZXJuYXRlKWZvcig7Yi5yZXR1cm47KWI9Yi5yZXR1cm47ZWxzZXthPWI7ZG8gYj1hLDAhPT0oYi5mbGFncyY0MDk4KSYmKGM9Yi5yZXR1cm4pLGE9Yi5yZXR1cm47d2hpbGUoYSl9cmV0dXJuIDM9PT1iLnRhZz9jOm51bGx9ZnVuY3Rpb24gV2IoYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9YS5tZW1vaXplZFN0YXRlO251bGw9PT1iJiYoYT1hLmFsdGVybmF0ZSxudWxsIT09YSYmKGI9YS5tZW1vaXplZFN0YXRlKSk7aWYobnVsbCE9PWIpcmV0dXJuIGIuZGVoeWRyYXRlZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBYYihhKXtpZihWYihhKSE9PWEpdGhyb3cgRXJyb3IocCgxODgpKTt9XG5mdW5jdGlvbiBZYihhKXt2YXIgYj1hLmFsdGVybmF0ZTtpZighYil7Yj1WYihhKTtpZihudWxsPT09Yil0aHJvdyBFcnJvcihwKDE4OCkpO3JldHVybiBiIT09YT9udWxsOmF9Zm9yKHZhciBjPWEsZD1iOzspe3ZhciBlPWMucmV0dXJuO2lmKG51bGw9PT1lKWJyZWFrO3ZhciBmPWUuYWx0ZXJuYXRlO2lmKG51bGw9PT1mKXtkPWUucmV0dXJuO2lmKG51bGwhPT1kKXtjPWQ7Y29udGludWV9YnJlYWt9aWYoZS5jaGlsZD09PWYuY2hpbGQpe2ZvcihmPWUuY2hpbGQ7Zjspe2lmKGY9PT1jKXJldHVybiBYYihlKSxhO2lmKGY9PT1kKXJldHVybiBYYihlKSxiO2Y9Zi5zaWJsaW5nfXRocm93IEVycm9yKHAoMTg4KSk7fWlmKGMucmV0dXJuIT09ZC5yZXR1cm4pYz1lLGQ9ZjtlbHNle2Zvcih2YXIgZz0hMSxoPWUuY2hpbGQ7aDspe2lmKGg9PT1jKXtnPSEwO2M9ZTtkPWY7YnJlYWt9aWYoaD09PWQpe2c9ITA7ZD1lO2M9ZjticmVha31oPWguc2libGluZ31pZighZyl7Zm9yKGg9Zi5jaGlsZDtoOyl7aWYoaD09PVxuYyl7Zz0hMDtjPWY7ZD1lO2JyZWFrfWlmKGg9PT1kKXtnPSEwO2Q9ZjtjPWU7YnJlYWt9aD1oLnNpYmxpbmd9aWYoIWcpdGhyb3cgRXJyb3IocCgxODkpKTt9fWlmKGMuYWx0ZXJuYXRlIT09ZCl0aHJvdyBFcnJvcihwKDE5MCkpO31pZigzIT09Yy50YWcpdGhyb3cgRXJyb3IocCgxODgpKTtyZXR1cm4gYy5zdGF0ZU5vZGUuY3VycmVudD09PWM/YTpifWZ1bmN0aW9uIFpiKGEpe2E9WWIoYSk7cmV0dXJuIG51bGwhPT1hPyRiKGEpOm51bGx9ZnVuY3Rpb24gJGIoYSl7aWYoNT09PWEudGFnfHw2PT09YS50YWcpcmV0dXJuIGE7Zm9yKGE9YS5jaGlsZDtudWxsIT09YTspe3ZhciBiPSRiKGEpO2lmKG51bGwhPT1iKXJldHVybiBiO2E9YS5zaWJsaW5nfXJldHVybiBudWxsfVxudmFyIGFjPWNhLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssYmM9Y2EudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssY2M9Y2EudW5zdGFibGVfc2hvdWxkWWllbGQsZGM9Y2EudW5zdGFibGVfcmVxdWVzdFBhaW50LEI9Y2EudW5zdGFibGVfbm93LGVjPWNhLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLGZjPWNhLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LGdjPWNhLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LGhjPWNhLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LGljPWNhLnVuc3RhYmxlX0xvd1ByaW9yaXR5LGpjPWNhLnVuc3RhYmxlX0lkbGVQcmlvcml0eSxrYz1udWxsLGxjPW51bGw7ZnVuY3Rpb24gbWMoYSl7aWYobGMmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBsYy5vbkNvbW1pdEZpYmVyUm9vdCl0cnl7bGMub25Db21taXRGaWJlclJvb3Qoa2MsYSx2b2lkIDAsMTI4PT09KGEuY3VycmVudC5mbGFncyYxMjgpKX1jYXRjaChiKXt9fVxudmFyIG9jPU1hdGguY2x6MzI/TWF0aC5jbHozMjpuYyxwYz1NYXRoLmxvZyxxYz1NYXRoLkxOMjtmdW5jdGlvbiBuYyhhKXthPj4+PTA7cmV0dXJuIDA9PT1hPzMyOjMxLShwYyhhKS9xY3wwKXwwfXZhciByYz02NCxzYz00MTk0MzA0O1xuZnVuY3Rpb24gdGMoYSl7c3dpdGNoKGEmLWEpe2Nhc2UgMTpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiA0O2Nhc2UgODpyZXR1cm4gODtjYXNlIDE2OnJldHVybiAxNjtjYXNlIDMyOnJldHVybiAzMjtjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiBhJjQxOTQyNDA7Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6Y2FzZSA2NzEwODg2NDpyZXR1cm4gYSYxMzAwMjM0MjQ7Y2FzZSAxMzQyMTc3Mjg6cmV0dXJuIDEzNDIxNzcyODtjYXNlIDI2ODQzNTQ1NjpyZXR1cm4gMjY4NDM1NDU2O2Nhc2UgNTM2ODcwOTEyOnJldHVybiA1MzY4NzA5MTI7Y2FzZSAxMDczNzQxODI0OnJldHVybiAxMDczNzQxODI0O1xuZGVmYXVsdDpyZXR1cm4gYX19ZnVuY3Rpb24gdWMoYSxiKXt2YXIgYz1hLnBlbmRpbmdMYW5lcztpZigwPT09YylyZXR1cm4gMDt2YXIgZD0wLGU9YS5zdXNwZW5kZWRMYW5lcyxmPWEucGluZ2VkTGFuZXMsZz1jJjI2ODQzNTQ1NTtpZigwIT09Zyl7dmFyIGg9ZyZ+ZTswIT09aD9kPXRjKGgpOihmJj1nLDAhPT1mJiYoZD10YyhmKSkpfWVsc2UgZz1jJn5lLDAhPT1nP2Q9dGMoZyk6MCE9PWYmJihkPXRjKGYpKTtpZigwPT09ZClyZXR1cm4gMDtpZigwIT09YiYmYiE9PWQmJjA9PT0oYiZlKSYmKGU9ZCYtZCxmPWImLWIsZT49Znx8MTY9PT1lJiYwIT09KGYmNDE5NDI0MCkpKXJldHVybiBiOzAhPT0oZCY0KSYmKGR8PWMmMTYpO2I9YS5lbnRhbmdsZWRMYW5lcztpZigwIT09Yilmb3IoYT1hLmVudGFuZ2xlbWVudHMsYiY9ZDswPGI7KWM9MzEtb2MoYiksZT0xPDxjLGR8PWFbY10sYiY9fmU7cmV0dXJuIGR9XG5mdW5jdGlvbiB2YyhhLGIpe3N3aXRjaChhKXtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gYisyNTA7Y2FzZSA4OmNhc2UgMTY6Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiBiKzVFMztjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0OnJldHVybi0xO2Nhc2UgMTM0MjE3NzI4OmNhc2UgMjY4NDM1NDU2OmNhc2UgNTM2ODcwOTEyOmNhc2UgMTA3Mzc0MTgyNDpyZXR1cm4tMTtkZWZhdWx0OnJldHVybi0xfX1cbmZ1bmN0aW9uIHdjKGEsYil7Zm9yKHZhciBjPWEuc3VzcGVuZGVkTGFuZXMsZD1hLnBpbmdlZExhbmVzLGU9YS5leHBpcmF0aW9uVGltZXMsZj1hLnBlbmRpbmdMYW5lczswPGY7KXt2YXIgZz0zMS1vYyhmKSxoPTE8PGcsaz1lW2ddO2lmKC0xPT09ayl7aWYoMD09PShoJmMpfHwwIT09KGgmZCkpZVtnXT12YyhoLGIpfWVsc2Ugazw9YiYmKGEuZXhwaXJlZExhbmVzfD1oKTtmJj1+aH19ZnVuY3Rpb24geGMoYSl7YT1hLnBlbmRpbmdMYW5lcyYtMTA3Mzc0MTgyNTtyZXR1cm4gMCE9PWE/YTphJjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uIHljKCl7dmFyIGE9cmM7cmM8PD0xOzA9PT0ocmMmNDE5NDI0MCkmJihyYz02NCk7cmV0dXJuIGF9ZnVuY3Rpb24gemMoYSl7Zm9yKHZhciBiPVtdLGM9MDszMT5jO2MrKyliLnB1c2goYSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBBYyhhLGIsYyl7YS5wZW5kaW5nTGFuZXN8PWI7NTM2ODcwOTEyIT09YiYmKGEuc3VzcGVuZGVkTGFuZXM9MCxhLnBpbmdlZExhbmVzPTApO2E9YS5ldmVudFRpbWVzO2I9MzEtb2MoYik7YVtiXT1jfWZ1bmN0aW9uIEJjKGEsYil7dmFyIGM9YS5wZW5kaW5nTGFuZXMmfmI7YS5wZW5kaW5nTGFuZXM9YjthLnN1c3BlbmRlZExhbmVzPTA7YS5waW5nZWRMYW5lcz0wO2EuZXhwaXJlZExhbmVzJj1iO2EubXV0YWJsZVJlYWRMYW5lcyY9YjthLmVudGFuZ2xlZExhbmVzJj1iO2I9YS5lbnRhbmdsZW1lbnRzO3ZhciBkPWEuZXZlbnRUaW1lcztmb3IoYT1hLmV4cGlyYXRpb25UaW1lczswPGM7KXt2YXIgZT0zMS1vYyhjKSxmPTE8PGU7YltlXT0wO2RbZV09LTE7YVtlXT0tMTtjJj1+Zn19XG5mdW5jdGlvbiBDYyhhLGIpe3ZhciBjPWEuZW50YW5nbGVkTGFuZXN8PWI7Zm9yKGE9YS5lbnRhbmdsZW1lbnRzO2M7KXt2YXIgZD0zMS1vYyhjKSxlPTE8PGQ7ZSZifGFbZF0mYiYmKGFbZF18PWIpO2MmPX5lfX12YXIgQz0wO2Z1bmN0aW9uIERjKGEpe2EmPS1hO3JldHVybiAxPGE/NDxhPzAhPT0oYSYyNjg0MzU0NTUpPzE2OjUzNjg3MDkxMjo0OjF9dmFyIEVjLEZjLEdjLEhjLEljLEpjPSExLEtjPVtdLExjPW51bGwsTWM9bnVsbCxOYz1udWxsLE9jPW5ldyBNYXAsUGM9bmV3IE1hcCxRYz1bXSxSYz1cIm1vdXNlZG93biBtb3VzZXVwIHRvdWNoY2FuY2VsIHRvdWNoZW5kIHRvdWNoc3RhcnQgYXV4Y2xpY2sgZGJsY2xpY2sgcG9pbnRlcmNhbmNlbCBwb2ludGVyZG93biBwb2ludGVydXAgZHJhZ2VuZCBkcmFnc3RhcnQgZHJvcCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgaW5wdXQgdGV4dElucHV0IGNvcHkgY3V0IHBhc3RlIGNsaWNrIGNoYW5nZSBjb250ZXh0bWVudSByZXNldCBzdWJtaXRcIi5zcGxpdChcIiBcIik7XG5mdW5jdGlvbiBTYyhhLGIpe3N3aXRjaChhKXtjYXNlIFwiZm9jdXNpblwiOmNhc2UgXCJmb2N1c291dFwiOkxjPW51bGw7YnJlYWs7Y2FzZSBcImRyYWdlbnRlclwiOmNhc2UgXCJkcmFnbGVhdmVcIjpNYz1udWxsO2JyZWFrO2Nhc2UgXCJtb3VzZW92ZXJcIjpjYXNlIFwibW91c2VvdXRcIjpOYz1udWxsO2JyZWFrO2Nhc2UgXCJwb2ludGVyb3ZlclwiOmNhc2UgXCJwb2ludGVyb3V0XCI6T2MuZGVsZXRlKGIucG9pbnRlcklkKTticmVhaztjYXNlIFwiZ290cG9pbnRlcmNhcHR1cmVcIjpjYXNlIFwibG9zdHBvaW50ZXJjYXB0dXJlXCI6UGMuZGVsZXRlKGIucG9pbnRlcklkKX19XG5mdW5jdGlvbiBUYyhhLGIsYyxkLGUsZil7aWYobnVsbD09PWF8fGEubmF0aXZlRXZlbnQhPT1mKXJldHVybiBhPXtibG9ja2VkT246Yixkb21FdmVudE5hbWU6YyxldmVudFN5c3RlbUZsYWdzOmQsbmF0aXZlRXZlbnQ6Zix0YXJnZXRDb250YWluZXJzOltlXX0sbnVsbCE9PWImJihiPUNiKGIpLG51bGwhPT1iJiZGYyhiKSksYTthLmV2ZW50U3lzdGVtRmxhZ3N8PWQ7Yj1hLnRhcmdldENvbnRhaW5lcnM7bnVsbCE9PWUmJi0xPT09Yi5pbmRleE9mKGUpJiZiLnB1c2goZSk7cmV0dXJuIGF9XG5mdW5jdGlvbiBVYyhhLGIsYyxkLGUpe3N3aXRjaChiKXtjYXNlIFwiZm9jdXNpblwiOnJldHVybiBMYz1UYyhMYyxhLGIsYyxkLGUpLCEwO2Nhc2UgXCJkcmFnZW50ZXJcIjpyZXR1cm4gTWM9VGMoTWMsYSxiLGMsZCxlKSwhMDtjYXNlIFwibW91c2VvdmVyXCI6cmV0dXJuIE5jPVRjKE5jLGEsYixjLGQsZSksITA7Y2FzZSBcInBvaW50ZXJvdmVyXCI6dmFyIGY9ZS5wb2ludGVySWQ7T2Muc2V0KGYsVGMoT2MuZ2V0KGYpfHxudWxsLGEsYixjLGQsZSkpO3JldHVybiEwO2Nhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOnJldHVybiBmPWUucG9pbnRlcklkLFBjLnNldChmLFRjKFBjLmdldChmKXx8bnVsbCxhLGIsYyxkLGUpKSwhMH1yZXR1cm4hMX1cbmZ1bmN0aW9uIFZjKGEpe3ZhciBiPVdjKGEudGFyZ2V0KTtpZihudWxsIT09Yil7dmFyIGM9VmIoYik7aWYobnVsbCE9PWMpaWYoYj1jLnRhZywxMz09PWIpe2lmKGI9V2IoYyksbnVsbCE9PWIpe2EuYmxvY2tlZE9uPWI7SWMoYS5wcmlvcml0eSxmdW5jdGlvbigpe0djKGMpfSk7cmV0dXJufX1lbHNlIGlmKDM9PT1iJiZjLnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXthLmJsb2NrZWRPbj0zPT09Yy50YWc/Yy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3JldHVybn19YS5ibG9ja2VkT249bnVsbH1cbmZ1bmN0aW9uIFhjKGEpe2lmKG51bGwhPT1hLmJsb2NrZWRPbilyZXR1cm4hMTtmb3IodmFyIGI9YS50YXJnZXRDb250YWluZXJzOzA8Yi5sZW5ndGg7KXt2YXIgYz1ZYyhhLmRvbUV2ZW50TmFtZSxhLmV2ZW50U3lzdGVtRmxhZ3MsYlswXSxhLm5hdGl2ZUV2ZW50KTtpZihudWxsPT09Yyl7Yz1hLm5hdGl2ZUV2ZW50O3ZhciBkPW5ldyBjLmNvbnN0cnVjdG9yKGMudHlwZSxjKTt3Yj1kO2MudGFyZ2V0LmRpc3BhdGNoRXZlbnQoZCk7d2I9bnVsbH1lbHNlIHJldHVybiBiPUNiKGMpLG51bGwhPT1iJiZGYyhiKSxhLmJsb2NrZWRPbj1jLCExO2Iuc2hpZnQoKX1yZXR1cm4hMH1mdW5jdGlvbiBaYyhhLGIsYyl7WGMoYSkmJmMuZGVsZXRlKGIpfWZ1bmN0aW9uICRjKCl7SmM9ITE7bnVsbCE9PUxjJiZYYyhMYykmJihMYz1udWxsKTtudWxsIT09TWMmJlhjKE1jKSYmKE1jPW51bGwpO251bGwhPT1OYyYmWGMoTmMpJiYoTmM9bnVsbCk7T2MuZm9yRWFjaChaYyk7UGMuZm9yRWFjaChaYyl9XG5mdW5jdGlvbiBhZChhLGIpe2EuYmxvY2tlZE9uPT09YiYmKGEuYmxvY2tlZE9uPW51bGwsSmN8fChKYz0hMCxjYS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKGNhLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LCRjKSkpfVxuZnVuY3Rpb24gYmQoYSl7ZnVuY3Rpb24gYihiKXtyZXR1cm4gYWQoYixhKX1pZigwPEtjLmxlbmd0aCl7YWQoS2NbMF0sYSk7Zm9yKHZhciBjPTE7YzxLYy5sZW5ndGg7YysrKXt2YXIgZD1LY1tjXTtkLmJsb2NrZWRPbj09PWEmJihkLmJsb2NrZWRPbj1udWxsKX19bnVsbCE9PUxjJiZhZChMYyxhKTtudWxsIT09TWMmJmFkKE1jLGEpO251bGwhPT1OYyYmYWQoTmMsYSk7T2MuZm9yRWFjaChiKTtQYy5mb3JFYWNoKGIpO2ZvcihjPTA7YzxRYy5sZW5ndGg7YysrKWQ9UWNbY10sZC5ibG9ja2VkT249PT1hJiYoZC5ibG9ja2VkT249bnVsbCk7Zm9yKDswPFFjLmxlbmd0aCYmKGM9UWNbMF0sbnVsbD09PWMuYmxvY2tlZE9uKTspVmMoYyksbnVsbD09PWMuYmxvY2tlZE9uJiZRYy5zaGlmdCgpfXZhciBjZD11YS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxkZD0hMDtcbmZ1bmN0aW9uIGVkKGEsYixjLGQpe3ZhciBlPUMsZj1jZC50cmFuc2l0aW9uO2NkLnRyYW5zaXRpb249bnVsbDt0cnl7Qz0xLGZkKGEsYixjLGQpfWZpbmFsbHl7Qz1lLGNkLnRyYW5zaXRpb249Zn19ZnVuY3Rpb24gZ2QoYSxiLGMsZCl7dmFyIGU9QyxmPWNkLnRyYW5zaXRpb247Y2QudHJhbnNpdGlvbj1udWxsO3RyeXtDPTQsZmQoYSxiLGMsZCl9ZmluYWxseXtDPWUsY2QudHJhbnNpdGlvbj1mfX1cbmZ1bmN0aW9uIGZkKGEsYixjLGQpe2lmKGRkKXt2YXIgZT1ZYyhhLGIsYyxkKTtpZihudWxsPT09ZSloZChhLGIsZCxpZCxjKSxTYyhhLGQpO2Vsc2UgaWYoVWMoZSxhLGIsYyxkKSlkLnN0b3BQcm9wYWdhdGlvbigpO2Vsc2UgaWYoU2MoYSxkKSxiJjQmJi0xPFJjLmluZGV4T2YoYSkpe2Zvcig7bnVsbCE9PWU7KXt2YXIgZj1DYihlKTtudWxsIT09ZiYmRWMoZik7Zj1ZYyhhLGIsYyxkKTtudWxsPT09ZiYmaGQoYSxiLGQsaWQsYyk7aWYoZj09PWUpYnJlYWs7ZT1mfW51bGwhPT1lJiZkLnN0b3BQcm9wYWdhdGlvbigpfWVsc2UgaGQoYSxiLGQsbnVsbCxjKX19dmFyIGlkPW51bGw7XG5mdW5jdGlvbiBZYyhhLGIsYyxkKXtpZD1udWxsO2E9eGIoZCk7YT1XYyhhKTtpZihudWxsIT09YSlpZihiPVZiKGEpLG51bGw9PT1iKWE9bnVsbDtlbHNlIGlmKGM9Yi50YWcsMTM9PT1jKXthPVdiKGIpO2lmKG51bGwhPT1hKXJldHVybiBhO2E9bnVsbH1lbHNlIGlmKDM9PT1jKXtpZihiLnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXJldHVybiAzPT09Yi50YWc/Yi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO2E9bnVsbH1lbHNlIGIhPT1hJiYoYT1udWxsKTtpZD1hO3JldHVybiBudWxsfVxuZnVuY3Rpb24gamQoYSl7c3dpdGNoKGEpe2Nhc2UgXCJjYW5jZWxcIjpjYXNlIFwiY2xpY2tcIjpjYXNlIFwiY2xvc2VcIjpjYXNlIFwiY29udGV4dG1lbnVcIjpjYXNlIFwiY29weVwiOmNhc2UgXCJjdXRcIjpjYXNlIFwiYXV4Y2xpY2tcIjpjYXNlIFwiZGJsY2xpY2tcIjpjYXNlIFwiZHJhZ2VuZFwiOmNhc2UgXCJkcmFnc3RhcnRcIjpjYXNlIFwiZHJvcFwiOmNhc2UgXCJmb2N1c2luXCI6Y2FzZSBcImZvY3Vzb3V0XCI6Y2FzZSBcImlucHV0XCI6Y2FzZSBcImludmFsaWRcIjpjYXNlIFwia2V5ZG93blwiOmNhc2UgXCJrZXlwcmVzc1wiOmNhc2UgXCJrZXl1cFwiOmNhc2UgXCJtb3VzZWRvd25cIjpjYXNlIFwibW91c2V1cFwiOmNhc2UgXCJwYXN0ZVwiOmNhc2UgXCJwYXVzZVwiOmNhc2UgXCJwbGF5XCI6Y2FzZSBcInBvaW50ZXJjYW5jZWxcIjpjYXNlIFwicG9pbnRlcmRvd25cIjpjYXNlIFwicG9pbnRlcnVwXCI6Y2FzZSBcInJhdGVjaGFuZ2VcIjpjYXNlIFwicmVzZXRcIjpjYXNlIFwicmVzaXplXCI6Y2FzZSBcInNlZWtlZFwiOmNhc2UgXCJzdWJtaXRcIjpjYXNlIFwidG91Y2hjYW5jZWxcIjpjYXNlIFwidG91Y2hlbmRcIjpjYXNlIFwidG91Y2hzdGFydFwiOmNhc2UgXCJ2b2x1bWVjaGFuZ2VcIjpjYXNlIFwiY2hhbmdlXCI6Y2FzZSBcInNlbGVjdGlvbmNoYW5nZVwiOmNhc2UgXCJ0ZXh0SW5wdXRcIjpjYXNlIFwiY29tcG9zaXRpb25zdGFydFwiOmNhc2UgXCJjb21wb3NpdGlvbmVuZFwiOmNhc2UgXCJjb21wb3NpdGlvbnVwZGF0ZVwiOmNhc2UgXCJiZWZvcmVibHVyXCI6Y2FzZSBcImFmdGVyYmx1clwiOmNhc2UgXCJiZWZvcmVpbnB1dFwiOmNhc2UgXCJibHVyXCI6Y2FzZSBcImZ1bGxzY3JlZW5jaGFuZ2VcIjpjYXNlIFwiZm9jdXNcIjpjYXNlIFwiaGFzaGNoYW5nZVwiOmNhc2UgXCJwb3BzdGF0ZVwiOmNhc2UgXCJzZWxlY3RcIjpjYXNlIFwic2VsZWN0c3RhcnRcIjpyZXR1cm4gMTtjYXNlIFwiZHJhZ1wiOmNhc2UgXCJkcmFnZW50ZXJcIjpjYXNlIFwiZHJhZ2V4aXRcIjpjYXNlIFwiZHJhZ2xlYXZlXCI6Y2FzZSBcImRyYWdvdmVyXCI6Y2FzZSBcIm1vdXNlbW92ZVwiOmNhc2UgXCJtb3VzZW91dFwiOmNhc2UgXCJtb3VzZW92ZXJcIjpjYXNlIFwicG9pbnRlcm1vdmVcIjpjYXNlIFwicG9pbnRlcm91dFwiOmNhc2UgXCJwb2ludGVyb3ZlclwiOmNhc2UgXCJzY3JvbGxcIjpjYXNlIFwidG9nZ2xlXCI6Y2FzZSBcInRvdWNobW92ZVwiOmNhc2UgXCJ3aGVlbFwiOmNhc2UgXCJtb3VzZWVudGVyXCI6Y2FzZSBcIm1vdXNlbGVhdmVcIjpjYXNlIFwicG9pbnRlcmVudGVyXCI6Y2FzZSBcInBvaW50ZXJsZWF2ZVwiOnJldHVybiA0O1xuY2FzZSBcIm1lc3NhZ2VcIjpzd2l0Y2goZWMoKSl7Y2FzZSBmYzpyZXR1cm4gMTtjYXNlIGdjOnJldHVybiA0O2Nhc2UgaGM6Y2FzZSBpYzpyZXR1cm4gMTY7Y2FzZSBqYzpyZXR1cm4gNTM2ODcwOTEyO2RlZmF1bHQ6cmV0dXJuIDE2fWRlZmF1bHQ6cmV0dXJuIDE2fX12YXIga2Q9bnVsbCxsZD1udWxsLG1kPW51bGw7ZnVuY3Rpb24gbmQoKXtpZihtZClyZXR1cm4gbWQ7dmFyIGEsYj1sZCxjPWIubGVuZ3RoLGQsZT1cInZhbHVlXCJpbiBrZD9rZC52YWx1ZTprZC50ZXh0Q29udGVudCxmPWUubGVuZ3RoO2ZvcihhPTA7YTxjJiZiW2FdPT09ZVthXTthKyspO3ZhciBnPWMtYTtmb3IoZD0xO2Q8PWcmJmJbYy1kXT09PWVbZi1kXTtkKyspO3JldHVybiBtZD1lLnNsaWNlKGEsMTxkPzEtZDp2b2lkIDApfVxuZnVuY3Rpb24gb2QoYSl7dmFyIGI9YS5rZXlDb2RlO1wiY2hhckNvZGVcImluIGE/KGE9YS5jaGFyQ29kZSwwPT09YSYmMTM9PT1iJiYoYT0xMykpOmE9YjsxMD09PWEmJihhPTEzKTtyZXR1cm4gMzI8PWF8fDEzPT09YT9hOjB9ZnVuY3Rpb24gcGQoKXtyZXR1cm4hMH1mdW5jdGlvbiBxZCgpe3JldHVybiExfVxuZnVuY3Rpb24gcmQoYSl7ZnVuY3Rpb24gYihiLGQsZSxmLGcpe3RoaXMuX3JlYWN0TmFtZT1iO3RoaXMuX3RhcmdldEluc3Q9ZTt0aGlzLnR5cGU9ZDt0aGlzLm5hdGl2ZUV2ZW50PWY7dGhpcy50YXJnZXQ9Zzt0aGlzLmN1cnJlbnRUYXJnZXQ9bnVsbDtmb3IodmFyIGMgaW4gYSlhLmhhc093blByb3BlcnR5KGMpJiYoYj1hW2NdLHRoaXNbY109Yj9iKGYpOmZbY10pO3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPShudWxsIT1mLmRlZmF1bHRQcmV2ZW50ZWQ/Zi5kZWZhdWx0UHJldmVudGVkOiExPT09Zi5yZXR1cm5WYWx1ZSk/cGQ6cWQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1xZDtyZXR1cm4gdGhpc31BKGIucHJvdG90eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2YXIgYT10aGlzLm5hdGl2ZUV2ZW50O2EmJihhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTpcInVua25vd25cIiE9PXR5cGVvZiBhLnJldHVyblZhbHVlJiZcbihhLnJldHVyblZhbHVlPSExKSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1wZCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMubmF0aXZlRXZlbnQ7YSYmKGEuc3RvcFByb3BhZ2F0aW9uP2Euc3RvcFByb3BhZ2F0aW9uKCk6XCJ1bmtub3duXCIhPT10eXBlb2YgYS5jYW5jZWxCdWJibGUmJihhLmNhbmNlbEJ1YmJsZT0hMCksdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1wZCl9LHBlcnNpc3Q6ZnVuY3Rpb24oKXt9LGlzUGVyc2lzdGVudDpwZH0pO3JldHVybiBifVxudmFyIHNkPXtldmVudFBoYXNlOjAsYnViYmxlczowLGNhbmNlbGFibGU6MCx0aW1lU3RhbXA6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudGltZVN0YW1wfHxEYXRlLm5vdygpfSxkZWZhdWx0UHJldmVudGVkOjAsaXNUcnVzdGVkOjB9LHRkPXJkKHNkKSx1ZD1BKHt9LHNkLHt2aWV3OjAsZGV0YWlsOjB9KSx2ZD1yZCh1ZCksd2QseGQseWQsQWQ9QSh7fSx1ZCx7c2NyZWVuWDowLHNjcmVlblk6MCxjbGllbnRYOjAsY2xpZW50WTowLHBhZ2VYOjAscGFnZVk6MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTp6ZCxidXR0b246MCxidXR0b25zOjAscmVsYXRlZFRhcmdldDpmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YS5yZWxhdGVkVGFyZ2V0P2EuZnJvbUVsZW1lbnQ9PT1hLnNyY0VsZW1lbnQ/YS50b0VsZW1lbnQ6YS5mcm9tRWxlbWVudDphLnJlbGF0ZWRUYXJnZXR9LG1vdmVtZW50WDpmdW5jdGlvbihhKXtpZihcIm1vdmVtZW50WFwiaW5cbmEpcmV0dXJuIGEubW92ZW1lbnRYO2EhPT15ZCYmKHlkJiZcIm1vdXNlbW92ZVwiPT09YS50eXBlPyh3ZD1hLnNjcmVlblgteWQuc2NyZWVuWCx4ZD1hLnNjcmVlblkteWQuc2NyZWVuWSk6eGQ9d2Q9MCx5ZD1hKTtyZXR1cm4gd2R9LG1vdmVtZW50WTpmdW5jdGlvbihhKXtyZXR1cm5cIm1vdmVtZW50WVwiaW4gYT9hLm1vdmVtZW50WTp4ZH19KSxCZD1yZChBZCksQ2Q9QSh7fSxBZCx7ZGF0YVRyYW5zZmVyOjB9KSxEZD1yZChDZCksRWQ9QSh7fSx1ZCx7cmVsYXRlZFRhcmdldDowfSksRmQ9cmQoRWQpLEdkPUEoe30sc2Qse2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLEhkPXJkKEdkKSxJZD1BKHt9LHNkLHtjbGlwYm9hcmREYXRhOmZ1bmN0aW9uKGEpe3JldHVyblwiY2xpcGJvYXJkRGF0YVwiaW4gYT9hLmNsaXBib2FyZERhdGE6d2luZG93LmNsaXBib2FyZERhdGF9fSksSmQ9cmQoSWQpLEtkPUEoe30sc2Qse2RhdGE6MH0pLExkPXJkKEtkKSxNZD17RXNjOlwiRXNjYXBlXCIsXG5TcGFjZWJhcjpcIiBcIixMZWZ0OlwiQXJyb3dMZWZ0XCIsVXA6XCJBcnJvd1VwXCIsUmlnaHQ6XCJBcnJvd1JpZ2h0XCIsRG93bjpcIkFycm93RG93blwiLERlbDpcIkRlbGV0ZVwiLFdpbjpcIk9TXCIsTWVudTpcIkNvbnRleHRNZW51XCIsQXBwczpcIkNvbnRleHRNZW51XCIsU2Nyb2xsOlwiU2Nyb2xsTG9ja1wiLE1velByaW50YWJsZUtleTpcIlVuaWRlbnRpZmllZFwifSxOZD17ODpcIkJhY2tzcGFjZVwiLDk6XCJUYWJcIiwxMjpcIkNsZWFyXCIsMTM6XCJFbnRlclwiLDE2OlwiU2hpZnRcIiwxNzpcIkNvbnRyb2xcIiwxODpcIkFsdFwiLDE5OlwiUGF1c2VcIiwyMDpcIkNhcHNMb2NrXCIsMjc6XCJFc2NhcGVcIiwzMjpcIiBcIiwzMzpcIlBhZ2VVcFwiLDM0OlwiUGFnZURvd25cIiwzNTpcIkVuZFwiLDM2OlwiSG9tZVwiLDM3OlwiQXJyb3dMZWZ0XCIsMzg6XCJBcnJvd1VwXCIsMzk6XCJBcnJvd1JpZ2h0XCIsNDA6XCJBcnJvd0Rvd25cIiw0NTpcIkluc2VydFwiLDQ2OlwiRGVsZXRlXCIsMTEyOlwiRjFcIiwxMTM6XCJGMlwiLDExNDpcIkYzXCIsMTE1OlwiRjRcIiwxMTY6XCJGNVwiLDExNzpcIkY2XCIsMTE4OlwiRjdcIixcbjExOTpcIkY4XCIsMTIwOlwiRjlcIiwxMjE6XCJGMTBcIiwxMjI6XCJGMTFcIiwxMjM6XCJGMTJcIiwxNDQ6XCJOdW1Mb2NrXCIsMTQ1OlwiU2Nyb2xsTG9ja1wiLDIyNDpcIk1ldGFcIn0sT2Q9e0FsdDpcImFsdEtleVwiLENvbnRyb2w6XCJjdHJsS2V5XCIsTWV0YTpcIm1ldGFLZXlcIixTaGlmdDpcInNoaWZ0S2V5XCJ9O2Z1bmN0aW9uIFBkKGEpe3ZhciBiPXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIGIuZ2V0TW9kaWZpZXJTdGF0ZT9iLmdldE1vZGlmaWVyU3RhdGUoYSk6KGE9T2RbYV0pPyEhYlthXTohMX1mdW5jdGlvbiB6ZCgpe3JldHVybiBQZH1cbnZhciBRZD1BKHt9LHVkLHtrZXk6ZnVuY3Rpb24oYSl7aWYoYS5rZXkpe3ZhciBiPU1kW2Eua2V5XXx8YS5rZXk7aWYoXCJVbmlkZW50aWZpZWRcIiE9PWIpcmV0dXJuIGJ9cmV0dXJuXCJrZXlwcmVzc1wiPT09YS50eXBlPyhhPW9kKGEpLDEzPT09YT9cIkVudGVyXCI6U3RyaW5nLmZyb21DaGFyQ29kZShhKSk6XCJrZXlkb3duXCI9PT1hLnR5cGV8fFwia2V5dXBcIj09PWEudHlwZT9OZFthLmtleUNvZGVdfHxcIlVuaWRlbnRpZmllZFwiOlwiXCJ9LGNvZGU6MCxsb2NhdGlvbjowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxyZXBlYXQ6MCxsb2NhbGU6MCxnZXRNb2RpZmllclN0YXRlOnpkLGNoYXJDb2RlOmZ1bmN0aW9uKGEpe3JldHVyblwia2V5cHJlc3NcIj09PWEudHlwZT9vZChhKTowfSxrZXlDb2RlOmZ1bmN0aW9uKGEpe3JldHVyblwia2V5ZG93blwiPT09YS50eXBlfHxcImtleXVwXCI9PT1hLnR5cGU/YS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGEpe3JldHVyblwia2V5cHJlc3NcIj09PVxuYS50eXBlP29kKGEpOlwia2V5ZG93blwiPT09YS50eXBlfHxcImtleXVwXCI9PT1hLnR5cGU/YS5rZXlDb2RlOjB9fSksUmQ9cmQoUWQpLFNkPUEoe30sQWQse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksVGQ9cmQoU2QpLFVkPUEoe30sdWQse3RvdWNoZXM6MCx0YXJnZXRUb3VjaGVzOjAsY2hhbmdlZFRvdWNoZXM6MCxhbHRLZXk6MCxtZXRhS2V5OjAsY3RybEtleTowLHNoaWZ0S2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTp6ZH0pLFZkPXJkKFVkKSxXZD1BKHt9LHNkLHtwcm9wZXJ0eU5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLFhkPXJkKFdkKSxZZD1BKHt9LEFkLHtkZWx0YVg6ZnVuY3Rpb24oYSl7cmV0dXJuXCJkZWx0YVhcImluIGE/YS5kZWx0YVg6XCJ3aGVlbERlbHRhWFwiaW4gYT8tYS53aGVlbERlbHRhWDowfSxcbmRlbHRhWTpmdW5jdGlvbihhKXtyZXR1cm5cImRlbHRhWVwiaW4gYT9hLmRlbHRhWTpcIndoZWVsRGVsdGFZXCJpbiBhPy1hLndoZWVsRGVsdGFZOlwid2hlZWxEZWx0YVwiaW4gYT8tYS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksWmQ9cmQoWWQpLCRkPVs5LDEzLDI3LDMyXSxhZT1pYSYmXCJDb21wb3NpdGlvbkV2ZW50XCJpbiB3aW5kb3csYmU9bnVsbDtpYSYmXCJkb2N1bWVudE1vZGVcImluIGRvY3VtZW50JiYoYmU9ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTt2YXIgY2U9aWEmJlwiVGV4dEV2ZW50XCJpbiB3aW5kb3cmJiFiZSxkZT1pYSYmKCFhZXx8YmUmJjg8YmUmJjExPj1iZSksZWU9U3RyaW5nLmZyb21DaGFyQ29kZSgzMiksZmU9ITE7XG5mdW5jdGlvbiBnZShhLGIpe3N3aXRjaChhKXtjYXNlIFwia2V5dXBcIjpyZXR1cm4tMSE9PSRkLmluZGV4T2YoYi5rZXlDb2RlKTtjYXNlIFwia2V5ZG93blwiOnJldHVybiAyMjkhPT1iLmtleUNvZGU7Y2FzZSBcImtleXByZXNzXCI6Y2FzZSBcIm1vdXNlZG93blwiOmNhc2UgXCJmb2N1c291dFwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGhlKGEpe2E9YS5kZXRhaWw7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZcImRhdGFcImluIGE/YS5kYXRhOm51bGx9dmFyIGllPSExO2Z1bmN0aW9uIGplKGEsYil7c3dpdGNoKGEpe2Nhc2UgXCJjb21wb3NpdGlvbmVuZFwiOnJldHVybiBoZShiKTtjYXNlIFwia2V5cHJlc3NcIjppZigzMiE9PWIud2hpY2gpcmV0dXJuIG51bGw7ZmU9ITA7cmV0dXJuIGVlO2Nhc2UgXCJ0ZXh0SW5wdXRcIjpyZXR1cm4gYT1iLmRhdGEsYT09PWVlJiZmZT9udWxsOmE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19XG5mdW5jdGlvbiBrZShhLGIpe2lmKGllKXJldHVyblwiY29tcG9zaXRpb25lbmRcIj09PWF8fCFhZSYmZ2UoYSxiKT8oYT1uZCgpLG1kPWxkPWtkPW51bGwsaWU9ITEsYSk6bnVsbDtzd2l0Y2goYSl7Y2FzZSBcInBhc3RlXCI6cmV0dXJuIG51bGw7Y2FzZSBcImtleXByZXNzXCI6aWYoIShiLmN0cmxLZXl8fGIuYWx0S2V5fHxiLm1ldGFLZXkpfHxiLmN0cmxLZXkmJmIuYWx0S2V5KXtpZihiLmNoYXImJjE8Yi5jaGFyLmxlbmd0aClyZXR1cm4gYi5jaGFyO2lmKGIud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYi53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6cmV0dXJuIGRlJiZcImtvXCIhPT1iLmxvY2FsZT9udWxsOmIuZGF0YTtkZWZhdWx0OnJldHVybiBudWxsfX1cbnZhciBsZT17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCxcImRhdGV0aW1lLWxvY2FsXCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiBtZShhKXt2YXIgYj1hJiZhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuXCJpbnB1dFwiPT09Yj8hIWxlW2EudHlwZV06XCJ0ZXh0YXJlYVwiPT09Yj8hMDohMX1mdW5jdGlvbiBuZShhLGIsYyxkKXtFYihkKTtiPW9lKGIsXCJvbkNoYW5nZVwiKTswPGIubGVuZ3RoJiYoYz1uZXcgdGQoXCJvbkNoYW5nZVwiLFwiY2hhbmdlXCIsbnVsbCxjLGQpLGEucHVzaCh7ZXZlbnQ6YyxsaXN0ZW5lcnM6Yn0pKX12YXIgcGU9bnVsbCxxZT1udWxsO2Z1bmN0aW9uIHJlKGEpe3NlKGEsMCl9ZnVuY3Rpb24gdGUoYSl7dmFyIGI9dWUoYSk7aWYoV2EoYikpcmV0dXJuIGF9XG5mdW5jdGlvbiB2ZShhLGIpe2lmKFwiY2hhbmdlXCI9PT1hKXJldHVybiBifXZhciB3ZT0hMTtpZihpYSl7dmFyIHhlO2lmKGlhKXt2YXIgeWU9XCJvbmlucHV0XCJpbiBkb2N1bWVudDtpZigheWUpe3ZhciB6ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3plLnNldEF0dHJpYnV0ZShcIm9uaW5wdXRcIixcInJldHVybjtcIik7eWU9XCJmdW5jdGlvblwiPT09dHlwZW9mIHplLm9uaW5wdXR9eGU9eWV9ZWxzZSB4ZT0hMTt3ZT14ZSYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiBBZSgpe3BlJiYocGUuZGV0YWNoRXZlbnQoXCJvbnByb3BlcnR5Y2hhbmdlXCIsQmUpLHFlPXBlPW51bGwpfWZ1bmN0aW9uIEJlKGEpe2lmKFwidmFsdWVcIj09PWEucHJvcGVydHlOYW1lJiZ0ZShxZSkpe3ZhciBiPVtdO25lKGIscWUsYSx4YihhKSk7SmIocmUsYil9fVxuZnVuY3Rpb24gQ2UoYSxiLGMpe1wiZm9jdXNpblwiPT09YT8oQWUoKSxwZT1iLHFlPWMscGUuYXR0YWNoRXZlbnQoXCJvbnByb3BlcnR5Y2hhbmdlXCIsQmUpKTpcImZvY3Vzb3V0XCI9PT1hJiZBZSgpfWZ1bmN0aW9uIERlKGEpe2lmKFwic2VsZWN0aW9uY2hhbmdlXCI9PT1hfHxcImtleXVwXCI9PT1hfHxcImtleWRvd25cIj09PWEpcmV0dXJuIHRlKHFlKX1mdW5jdGlvbiBFZShhLGIpe2lmKFwiY2xpY2tcIj09PWEpcmV0dXJuIHRlKGIpfWZ1bmN0aW9uIEZlKGEsYil7aWYoXCJpbnB1dFwiPT09YXx8XCJjaGFuZ2VcIj09PWEpcmV0dXJuIHRlKGIpfWZ1bmN0aW9uIEdlKGEsYil7cmV0dXJuIGE9PT1iJiYoMCE9PWF8fDEvYT09PTEvYil8fGEhPT1hJiZiIT09Yn12YXIgSGU9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6R2U7XG5mdW5jdGlvbiBJZShhLGIpe2lmKEhlKGEsYikpcmV0dXJuITA7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBhfHxudWxsPT09YXx8XCJvYmplY3RcIiE9PXR5cGVvZiBifHxudWxsPT09YilyZXR1cm4hMTt2YXIgYz1PYmplY3Qua2V5cyhhKSxkPU9iamVjdC5rZXlzKGIpO2lmKGMubGVuZ3RoIT09ZC5sZW5ndGgpcmV0dXJuITE7Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTtpZighamEuY2FsbChiLGUpfHwhSGUoYVtlXSxiW2VdKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBKZShhKXtmb3IoO2EmJmEuZmlyc3RDaGlsZDspYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9XG5mdW5jdGlvbiBLZShhLGIpe3ZhciBjPUplKGEpO2E9MDtmb3IodmFyIGQ7Yzspe2lmKDM9PT1jLm5vZGVUeXBlKXtkPWErYy50ZXh0Q29udGVudC5sZW5ndGg7aWYoYTw9YiYmZD49YilyZXR1cm57bm9kZTpjLG9mZnNldDpiLWF9O2E9ZH1hOntmb3IoO2M7KXtpZihjLm5leHRTaWJsaW5nKXtjPWMubmV4dFNpYmxpbmc7YnJlYWsgYX1jPWMucGFyZW50Tm9kZX1jPXZvaWQgMH1jPUplKGMpfX1mdW5jdGlvbiBMZShhLGIpe3JldHVybiBhJiZiP2E9PT1iPyEwOmEmJjM9PT1hLm5vZGVUeXBlPyExOmImJjM9PT1iLm5vZGVUeXBlP0xlKGEsYi5wYXJlbnROb2RlKTpcImNvbnRhaW5zXCJpbiBhP2EuY29udGFpbnMoYik6YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8hIShhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjE2KTohMTohMX1cbmZ1bmN0aW9uIE1lKCl7Zm9yKHZhciBhPXdpbmRvdyxiPVhhKCk7YiBpbnN0YW5jZW9mIGEuSFRNTElGcmFtZUVsZW1lbnQ7KXt0cnl7dmFyIGM9XCJzdHJpbmdcIj09PXR5cGVvZiBiLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZn1jYXRjaChkKXtjPSExfWlmKGMpYT1iLmNvbnRlbnRXaW5kb3c7ZWxzZSBicmVhaztiPVhhKGEuZG9jdW1lbnQpfXJldHVybiBifWZ1bmN0aW9uIE5lKGEpe3ZhciBiPWEmJmEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYiYmKFwiaW5wdXRcIj09PWImJihcInRleHRcIj09PWEudHlwZXx8XCJzZWFyY2hcIj09PWEudHlwZXx8XCJ0ZWxcIj09PWEudHlwZXx8XCJ1cmxcIj09PWEudHlwZXx8XCJwYXNzd29yZFwiPT09YS50eXBlKXx8XCJ0ZXh0YXJlYVwiPT09Ynx8XCJ0cnVlXCI9PT1hLmNvbnRlbnRFZGl0YWJsZSl9XG5mdW5jdGlvbiBPZShhKXt2YXIgYj1NZSgpLGM9YS5mb2N1c2VkRWxlbSxkPWEuc2VsZWN0aW9uUmFuZ2U7aWYoYiE9PWMmJmMmJmMub3duZXJEb2N1bWVudCYmTGUoYy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxjKSl7aWYobnVsbCE9PWQmJk5lKGMpKWlmKGI9ZC5zdGFydCxhPWQuZW5kLHZvaWQgMD09PWEmJihhPWIpLFwic2VsZWN0aW9uU3RhcnRcImluIGMpYy5zZWxlY3Rpb25TdGFydD1iLGMuc2VsZWN0aW9uRW5kPU1hdGgubWluKGEsYy52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYoYT0oYj1jLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmYi5kZWZhdWx0Vmlld3x8d2luZG93LGEuZ2V0U2VsZWN0aW9uKXthPWEuZ2V0U2VsZWN0aW9uKCk7dmFyIGU9Yy50ZXh0Q29udGVudC5sZW5ndGgsZj1NYXRoLm1pbihkLnN0YXJ0LGUpO2Q9dm9pZCAwPT09ZC5lbmQ/ZjpNYXRoLm1pbihkLmVuZCxlKTshYS5leHRlbmQmJmY+ZCYmKGU9ZCxkPWYsZj1lKTtlPUtlKGMsZik7dmFyIGc9S2UoYyxcbmQpO2UmJmcmJigxIT09YS5yYW5nZUNvdW50fHxhLmFuY2hvck5vZGUhPT1lLm5vZGV8fGEuYW5jaG9yT2Zmc2V0IT09ZS5vZmZzZXR8fGEuZm9jdXNOb2RlIT09Zy5ub2RlfHxhLmZvY3VzT2Zmc2V0IT09Zy5vZmZzZXQpJiYoYj1iLmNyZWF0ZVJhbmdlKCksYi5zZXRTdGFydChlLm5vZGUsZS5vZmZzZXQpLGEucmVtb3ZlQWxsUmFuZ2VzKCksZj5kPyhhLmFkZFJhbmdlKGIpLGEuZXh0ZW5kKGcubm9kZSxnLm9mZnNldCkpOihiLnNldEVuZChnLm5vZGUsZy5vZmZzZXQpLGEuYWRkUmFuZ2UoYikpKX1iPVtdO2ZvcihhPWM7YT1hLnBhcmVudE5vZGU7KTE9PT1hLm5vZGVUeXBlJiZiLnB1c2goe2VsZW1lbnQ6YSxsZWZ0OmEuc2Nyb2xsTGVmdCx0b3A6YS5zY3JvbGxUb3B9KTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy5mb2N1cyYmYy5mb2N1cygpO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspYT1iW2NdLGEuZWxlbWVudC5zY3JvbGxMZWZ0PWEubGVmdCxhLmVsZW1lbnQuc2Nyb2xsVG9wPWEudG9wfX1cbnZhciBQZT1pYSYmXCJkb2N1bWVudE1vZGVcImluIGRvY3VtZW50JiYxMT49ZG9jdW1lbnQuZG9jdW1lbnRNb2RlLFFlPW51bGwsUmU9bnVsbCxTZT1udWxsLFRlPSExO1xuZnVuY3Rpb24gVWUoYSxiLGMpe3ZhciBkPWMud2luZG93PT09Yz9jLmRvY3VtZW50Ojk9PT1jLm5vZGVUeXBlP2M6Yy5vd25lckRvY3VtZW50O1RlfHxudWxsPT1RZXx8UWUhPT1YYShkKXx8KGQ9UWUsXCJzZWxlY3Rpb25TdGFydFwiaW4gZCYmTmUoZCk/ZD17c3RhcnQ6ZC5zZWxlY3Rpb25TdGFydCxlbmQ6ZC5zZWxlY3Rpb25FbmR9OihkPShkLm93bmVyRG9jdW1lbnQmJmQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxkPXthbmNob3JOb2RlOmQuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ZC5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOmQuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OmQuZm9jdXNPZmZzZXR9KSxTZSYmSWUoU2UsZCl8fChTZT1kLGQ9b2UoUmUsXCJvblNlbGVjdFwiKSwwPGQubGVuZ3RoJiYoYj1uZXcgdGQoXCJvblNlbGVjdFwiLFwic2VsZWN0XCIsbnVsbCxiLGMpLGEucHVzaCh7ZXZlbnQ6YixsaXN0ZW5lcnM6ZH0pLGIudGFyZ2V0PVFlKSkpfVxuZnVuY3Rpb24gVmUoYSxiKXt2YXIgYz17fTtjW2EudG9Mb3dlckNhc2UoKV09Yi50b0xvd2VyQ2FzZSgpO2NbXCJXZWJraXRcIithXT1cIndlYmtpdFwiK2I7Y1tcIk1velwiK2FdPVwibW96XCIrYjtyZXR1cm4gY312YXIgV2U9e2FuaW1hdGlvbmVuZDpWZShcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uRW5kXCIpLGFuaW1hdGlvbml0ZXJhdGlvbjpWZShcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uSXRlcmF0aW9uXCIpLGFuaW1hdGlvbnN0YXJ0OlZlKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25TdGFydFwiKSx0cmFuc2l0aW9uZW5kOlZlKFwiVHJhbnNpdGlvblwiLFwiVHJhbnNpdGlvbkVuZFwiKX0sWGU9e30sWWU9e307XG5pYSYmKFllPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGUsXCJBbmltYXRpb25FdmVudFwiaW4gd2luZG93fHwoZGVsZXRlIFdlLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIFdlLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIFdlLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksXCJUcmFuc2l0aW9uRXZlbnRcImluIHdpbmRvd3x8ZGVsZXRlIFdlLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7ZnVuY3Rpb24gWmUoYSl7aWYoWGVbYV0pcmV0dXJuIFhlW2FdO2lmKCFXZVthXSlyZXR1cm4gYTt2YXIgYj1XZVthXSxjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSYmYyBpbiBZZSlyZXR1cm4gWGVbYV09YltjXTtyZXR1cm4gYX12YXIgJGU9WmUoXCJhbmltYXRpb25lbmRcIiksYWY9WmUoXCJhbmltYXRpb25pdGVyYXRpb25cIiksYmY9WmUoXCJhbmltYXRpb25zdGFydFwiKSxjZj1aZShcInRyYW5zaXRpb25lbmRcIiksZGY9bmV3IE1hcCxlZj1cImFib3J0IGF1eENsaWNrIGNhbmNlbCBjYW5QbGF5IGNhblBsYXlUaHJvdWdoIGNsaWNrIGNsb3NlIGNvbnRleHRNZW51IGNvcHkgY3V0IGRyYWcgZHJhZ0VuZCBkcmFnRW50ZXIgZHJhZ0V4aXQgZHJhZ0xlYXZlIGRyYWdPdmVyIGRyYWdTdGFydCBkcm9wIGR1cmF0aW9uQ2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGdvdFBvaW50ZXJDYXB0dXJlIGlucHV0IGludmFsaWQga2V5RG93biBrZXlQcmVzcyBrZXlVcCBsb2FkIGxvYWRlZERhdGEgbG9hZGVkTWV0YWRhdGEgbG9hZFN0YXJ0IGxvc3RQb2ludGVyQ2FwdHVyZSBtb3VzZURvd24gbW91c2VNb3ZlIG1vdXNlT3V0IG1vdXNlT3ZlciBtb3VzZVVwIHBhc3RlIHBhdXNlIHBsYXkgcGxheWluZyBwb2ludGVyQ2FuY2VsIHBvaW50ZXJEb3duIHBvaW50ZXJNb3ZlIHBvaW50ZXJPdXQgcG9pbnRlck92ZXIgcG9pbnRlclVwIHByb2dyZXNzIHJhdGVDaGFuZ2UgcmVzZXQgcmVzaXplIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VibWl0IHN1c3BlbmQgdGltZVVwZGF0ZSB0b3VjaENhbmNlbCB0b3VjaEVuZCB0b3VjaFN0YXJ0IHZvbHVtZUNoYW5nZSBzY3JvbGwgdG9nZ2xlIHRvdWNoTW92ZSB3YWl0aW5nIHdoZWVsXCIuc3BsaXQoXCIgXCIpO1xuZnVuY3Rpb24gZmYoYSxiKXtkZi5zZXQoYSxiKTtmYShiLFthXSl9Zm9yKHZhciBnZj0wO2dmPGVmLmxlbmd0aDtnZisrKXt2YXIgaGY9ZWZbZ2ZdLGpmPWhmLnRvTG93ZXJDYXNlKCksa2Y9aGZbMF0udG9VcHBlckNhc2UoKStoZi5zbGljZSgxKTtmZihqZixcIm9uXCIra2YpfWZmKCRlLFwib25BbmltYXRpb25FbmRcIik7ZmYoYWYsXCJvbkFuaW1hdGlvbkl0ZXJhdGlvblwiKTtmZihiZixcIm9uQW5pbWF0aW9uU3RhcnRcIik7ZmYoXCJkYmxjbGlja1wiLFwib25Eb3VibGVDbGlja1wiKTtmZihcImZvY3VzaW5cIixcIm9uRm9jdXNcIik7ZmYoXCJmb2N1c291dFwiLFwib25CbHVyXCIpO2ZmKGNmLFwib25UcmFuc2l0aW9uRW5kXCIpO2hhKFwib25Nb3VzZUVudGVyXCIsW1wibW91c2VvdXRcIixcIm1vdXNlb3ZlclwiXSk7aGEoXCJvbk1vdXNlTGVhdmVcIixbXCJtb3VzZW91dFwiLFwibW91c2VvdmVyXCJdKTtoYShcIm9uUG9pbnRlckVudGVyXCIsW1wicG9pbnRlcm91dFwiLFwicG9pbnRlcm92ZXJcIl0pO1xuaGEoXCJvblBvaW50ZXJMZWF2ZVwiLFtcInBvaW50ZXJvdXRcIixcInBvaW50ZXJvdmVyXCJdKTtmYShcIm9uQ2hhbmdlXCIsXCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKSk7ZmEoXCJvblNlbGVjdFwiLFwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlXCIuc3BsaXQoXCIgXCIpKTtmYShcIm9uQmVmb3JlSW5wdXRcIixbXCJjb21wb3NpdGlvbmVuZFwiLFwia2V5cHJlc3NcIixcInRleHRJbnB1dFwiLFwicGFzdGVcIl0pO2ZhKFwib25Db21wb3NpdGlvbkVuZFwiLFwiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO2ZhKFwib25Db21wb3NpdGlvblN0YXJ0XCIsXCJjb21wb3NpdGlvbnN0YXJ0IGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpKTtcbmZhKFwib25Db21wb3NpdGlvblVwZGF0ZVwiLFwiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO3ZhciBsZj1cImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2UgcmVzaXplIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VzcGVuZCB0aW1ldXBkYXRlIHZvbHVtZWNoYW5nZSB3YWl0aW5nXCIuc3BsaXQoXCIgXCIpLG1mPW5ldyBTZXQoXCJjYW5jZWwgY2xvc2UgaW52YWxpZCBsb2FkIHNjcm9sbCB0b2dnbGVcIi5zcGxpdChcIiBcIikuY29uY2F0KGxmKSk7XG5mdW5jdGlvbiBuZihhLGIsYyl7dmFyIGQ9YS50eXBlfHxcInVua25vd24tZXZlbnRcIjthLmN1cnJlbnRUYXJnZXQ9YztVYihkLGIsdm9pZCAwLGEpO2EuY3VycmVudFRhcmdldD1udWxsfVxuZnVuY3Rpb24gc2UoYSxiKXtiPTAhPT0oYiY0KTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXSxlPWQuZXZlbnQ7ZD1kLmxpc3RlbmVyczthOnt2YXIgZj12b2lkIDA7aWYoYilmb3IodmFyIGc9ZC5sZW5ndGgtMTswPD1nO2ctLSl7dmFyIGg9ZFtnXSxrPWguaW5zdGFuY2UsbD1oLmN1cnJlbnRUYXJnZXQ7aD1oLmxpc3RlbmVyO2lmKGshPT1mJiZlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgYTtuZihlLGgsbCk7Zj1rfWVsc2UgZm9yKGc9MDtnPGQubGVuZ3RoO2crKyl7aD1kW2ddO2s9aC5pbnN0YW5jZTtsPWguY3VycmVudFRhcmdldDtoPWgubGlzdGVuZXI7aWYoayE9PWYmJmUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBhO25mKGUsaCxsKTtmPWt9fX1pZihRYil0aHJvdyBhPVJiLFFiPSExLFJiPW51bGwsYTt9XG5mdW5jdGlvbiBEKGEsYil7dmFyIGM9YltvZl07dm9pZCAwPT09YyYmKGM9YltvZl09bmV3IFNldCk7dmFyIGQ9YStcIl9fYnViYmxlXCI7Yy5oYXMoZCl8fChwZihiLGEsMiwhMSksYy5hZGQoZCkpfWZ1bmN0aW9uIHFmKGEsYixjKXt2YXIgZD0wO2ImJihkfD00KTtwZihjLGEsZCxiKX12YXIgcmY9XCJfcmVhY3RMaXN0ZW5pbmdcIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtmdW5jdGlvbiBzZihhKXtpZighYVtyZl0pe2FbcmZdPSEwO2RhLmZvckVhY2goZnVuY3Rpb24oYil7XCJzZWxlY3Rpb25jaGFuZ2VcIiE9PWImJihtZi5oYXMoYil8fHFmKGIsITEsYSkscWYoYiwhMCxhKSl9KTt2YXIgYj05PT09YS5ub2RlVHlwZT9hOmEub3duZXJEb2N1bWVudDtudWxsPT09Ynx8YltyZl18fChiW3JmXT0hMCxxZihcInNlbGVjdGlvbmNoYW5nZVwiLCExLGIpKX19XG5mdW5jdGlvbiBwZihhLGIsYyxkKXtzd2l0Y2goamQoYikpe2Nhc2UgMTp2YXIgZT1lZDticmVhaztjYXNlIDQ6ZT1nZDticmVhaztkZWZhdWx0OmU9ZmR9Yz1lLmJpbmQobnVsbCxiLGMsYSk7ZT12b2lkIDA7IUxifHxcInRvdWNoc3RhcnRcIiE9PWImJlwidG91Y2htb3ZlXCIhPT1iJiZcIndoZWVsXCIhPT1ifHwoZT0hMCk7ZD92b2lkIDAhPT1lP2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMse2NhcHR1cmU6ITAscGFzc2l2ZTplfSk6YS5hZGRFdmVudExpc3RlbmVyKGIsYywhMCk6dm9pZCAwIT09ZT9hLmFkZEV2ZW50TGlzdGVuZXIoYixjLHtwYXNzaXZlOmV9KTphLmFkZEV2ZW50TGlzdGVuZXIoYixjLCExKX1cbmZ1bmN0aW9uIGhkKGEsYixjLGQsZSl7dmFyIGY9ZDtpZigwPT09KGImMSkmJjA9PT0oYiYyKSYmbnVsbCE9PWQpYTpmb3IoOzspe2lmKG51bGw9PT1kKXJldHVybjt2YXIgZz1kLnRhZztpZigzPT09Z3x8ND09PWcpe3ZhciBoPWQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87aWYoaD09PWV8fDg9PT1oLm5vZGVUeXBlJiZoLnBhcmVudE5vZGU9PT1lKWJyZWFrO2lmKDQ9PT1nKWZvcihnPWQucmV0dXJuO251bGwhPT1nOyl7dmFyIGs9Zy50YWc7aWYoMz09PWt8fDQ9PT1rKWlmKGs9Zy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxrPT09ZXx8OD09PWsubm9kZVR5cGUmJmsucGFyZW50Tm9kZT09PWUpcmV0dXJuO2c9Zy5yZXR1cm59Zm9yKDtudWxsIT09aDspe2c9V2MoaCk7aWYobnVsbD09PWcpcmV0dXJuO2s9Zy50YWc7aWYoNT09PWt8fDY9PT1rKXtkPWY9Zztjb250aW51ZSBhfWg9aC5wYXJlbnROb2RlfX1kPWQucmV0dXJufUpiKGZ1bmN0aW9uKCl7dmFyIGQ9ZixlPXhiKGMpLGc9W107XG5hOnt2YXIgaD1kZi5nZXQoYSk7aWYodm9pZCAwIT09aCl7dmFyIGs9dGQsbj1hO3N3aXRjaChhKXtjYXNlIFwia2V5cHJlc3NcIjppZigwPT09b2QoYykpYnJlYWsgYTtjYXNlIFwia2V5ZG93blwiOmNhc2UgXCJrZXl1cFwiOms9UmQ7YnJlYWs7Y2FzZSBcImZvY3VzaW5cIjpuPVwiZm9jdXNcIjtrPUZkO2JyZWFrO2Nhc2UgXCJmb2N1c291dFwiOm49XCJibHVyXCI7az1GZDticmVhaztjYXNlIFwiYmVmb3JlYmx1clwiOmNhc2UgXCJhZnRlcmJsdXJcIjprPUZkO2JyZWFrO2Nhc2UgXCJjbGlja1wiOmlmKDI9PT1jLmJ1dHRvbilicmVhayBhO2Nhc2UgXCJhdXhjbGlja1wiOmNhc2UgXCJkYmxjbGlja1wiOmNhc2UgXCJtb3VzZWRvd25cIjpjYXNlIFwibW91c2Vtb3ZlXCI6Y2FzZSBcIm1vdXNldXBcIjpjYXNlIFwibW91c2VvdXRcIjpjYXNlIFwibW91c2VvdmVyXCI6Y2FzZSBcImNvbnRleHRtZW51XCI6az1CZDticmVhaztjYXNlIFwiZHJhZ1wiOmNhc2UgXCJkcmFnZW5kXCI6Y2FzZSBcImRyYWdlbnRlclwiOmNhc2UgXCJkcmFnZXhpdFwiOmNhc2UgXCJkcmFnbGVhdmVcIjpjYXNlIFwiZHJhZ292ZXJcIjpjYXNlIFwiZHJhZ3N0YXJ0XCI6Y2FzZSBcImRyb3BcIjprPVxuRGQ7YnJlYWs7Y2FzZSBcInRvdWNoY2FuY2VsXCI6Y2FzZSBcInRvdWNoZW5kXCI6Y2FzZSBcInRvdWNobW92ZVwiOmNhc2UgXCJ0b3VjaHN0YXJ0XCI6az1WZDticmVhaztjYXNlICRlOmNhc2UgYWY6Y2FzZSBiZjprPUhkO2JyZWFrO2Nhc2UgY2Y6az1YZDticmVhaztjYXNlIFwic2Nyb2xsXCI6az12ZDticmVhaztjYXNlIFwid2hlZWxcIjprPVpkO2JyZWFrO2Nhc2UgXCJjb3B5XCI6Y2FzZSBcImN1dFwiOmNhc2UgXCJwYXN0ZVwiOms9SmQ7YnJlYWs7Y2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6Y2FzZSBcImxvc3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJwb2ludGVyY2FuY2VsXCI6Y2FzZSBcInBvaW50ZXJkb3duXCI6Y2FzZSBcInBvaW50ZXJtb3ZlXCI6Y2FzZSBcInBvaW50ZXJvdXRcIjpjYXNlIFwicG9pbnRlcm92ZXJcIjpjYXNlIFwicG9pbnRlcnVwXCI6az1UZH12YXIgdD0wIT09KGImNCksSj0hdCYmXCJzY3JvbGxcIj09PWEseD10P251bGwhPT1oP2grXCJDYXB0dXJlXCI6bnVsbDpoO3Q9W107Zm9yKHZhciB3PWQsdTtudWxsIT09XG53Oyl7dT13O3ZhciBGPXUuc3RhdGVOb2RlOzU9PT11LnRhZyYmbnVsbCE9PUYmJih1PUYsbnVsbCE9PXgmJihGPUtiKHcseCksbnVsbCE9RiYmdC5wdXNoKHRmKHcsRix1KSkpKTtpZihKKWJyZWFrO3c9dy5yZXR1cm59MDx0Lmxlbmd0aCYmKGg9bmV3IGsoaCxuLG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OmgsbGlzdGVuZXJzOnR9KSl9fWlmKDA9PT0oYiY3KSl7YTp7aD1cIm1vdXNlb3ZlclwiPT09YXx8XCJwb2ludGVyb3ZlclwiPT09YTtrPVwibW91c2VvdXRcIj09PWF8fFwicG9pbnRlcm91dFwiPT09YTtpZihoJiZjIT09d2ImJihuPWMucmVsYXRlZFRhcmdldHx8Yy5mcm9tRWxlbWVudCkmJihXYyhuKXx8blt1Zl0pKWJyZWFrIGE7aWYoa3x8aCl7aD1lLndpbmRvdz09PWU/ZTooaD1lLm93bmVyRG9jdW1lbnQpP2guZGVmYXVsdFZpZXd8fGgucGFyZW50V2luZG93OndpbmRvdztpZihrKXtpZihuPWMucmVsYXRlZFRhcmdldHx8Yy50b0VsZW1lbnQsaz1kLG49bj9XYyhuKTpudWxsLG51bGwhPT1cbm4mJihKPVZiKG4pLG4hPT1KfHw1IT09bi50YWcmJjYhPT1uLnRhZykpbj1udWxsfWVsc2Ugaz1udWxsLG49ZDtpZihrIT09bil7dD1CZDtGPVwib25Nb3VzZUxlYXZlXCI7eD1cIm9uTW91c2VFbnRlclwiO3c9XCJtb3VzZVwiO2lmKFwicG9pbnRlcm91dFwiPT09YXx8XCJwb2ludGVyb3ZlclwiPT09YSl0PVRkLEY9XCJvblBvaW50ZXJMZWF2ZVwiLHg9XCJvblBvaW50ZXJFbnRlclwiLHc9XCJwb2ludGVyXCI7Sj1udWxsPT1rP2g6dWUoayk7dT1udWxsPT1uP2g6dWUobik7aD1uZXcgdChGLHcrXCJsZWF2ZVwiLGssYyxlKTtoLnRhcmdldD1KO2gucmVsYXRlZFRhcmdldD11O0Y9bnVsbDtXYyhlKT09PWQmJih0PW5ldyB0KHgsdytcImVudGVyXCIsbixjLGUpLHQudGFyZ2V0PXUsdC5yZWxhdGVkVGFyZ2V0PUosRj10KTtKPUY7aWYoayYmbiliOnt0PWs7eD1uO3c9MDtmb3IodT10O3U7dT12Zih1KSl3Kys7dT0wO2ZvcihGPXg7RjtGPXZmKEYpKXUrKztmb3IoOzA8dy11Oyl0PXZmKHQpLHctLTtmb3IoOzA8dS13Oyl4PVxudmYoeCksdS0tO2Zvcig7dy0tOyl7aWYodD09PXh8fG51bGwhPT14JiZ0PT09eC5hbHRlcm5hdGUpYnJlYWsgYjt0PXZmKHQpO3g9dmYoeCl9dD1udWxsfWVsc2UgdD1udWxsO251bGwhPT1rJiZ3ZihnLGgsayx0LCExKTtudWxsIT09biYmbnVsbCE9PUomJndmKGcsSixuLHQsITApfX19YTp7aD1kP3VlKGQpOndpbmRvdztrPWgubm9kZU5hbWUmJmgubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihcInNlbGVjdFwiPT09a3x8XCJpbnB1dFwiPT09ayYmXCJmaWxlXCI9PT1oLnR5cGUpdmFyIG5hPXZlO2Vsc2UgaWYobWUoaCkpaWYod2UpbmE9RmU7ZWxzZXtuYT1EZTt2YXIgeGE9Q2V9ZWxzZShrPWgubm9kZU5hbWUpJiZcImlucHV0XCI9PT1rLnRvTG93ZXJDYXNlKCkmJihcImNoZWNrYm94XCI9PT1oLnR5cGV8fFwicmFkaW9cIj09PWgudHlwZSkmJihuYT1FZSk7aWYobmEmJihuYT1uYShhLGQpKSl7bmUoZyxuYSxjLGUpO2JyZWFrIGF9eGEmJnhhKGEsaCxkKTtcImZvY3Vzb3V0XCI9PT1hJiYoeGE9aC5fd3JhcHBlclN0YXRlKSYmXG54YS5jb250cm9sbGVkJiZcIm51bWJlclwiPT09aC50eXBlJiZjYihoLFwibnVtYmVyXCIsaC52YWx1ZSl9eGE9ZD91ZShkKTp3aW5kb3c7c3dpdGNoKGEpe2Nhc2UgXCJmb2N1c2luXCI6aWYobWUoeGEpfHxcInRydWVcIj09PXhhLmNvbnRlbnRFZGl0YWJsZSlRZT14YSxSZT1kLFNlPW51bGw7YnJlYWs7Y2FzZSBcImZvY3Vzb3V0XCI6U2U9UmU9UWU9bnVsbDticmVhaztjYXNlIFwibW91c2Vkb3duXCI6VGU9ITA7YnJlYWs7Y2FzZSBcImNvbnRleHRtZW51XCI6Y2FzZSBcIm1vdXNldXBcIjpjYXNlIFwiZHJhZ2VuZFwiOlRlPSExO1VlKGcsYyxlKTticmVhaztjYXNlIFwic2VsZWN0aW9uY2hhbmdlXCI6aWYoUGUpYnJlYWs7Y2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5dXBcIjpVZShnLGMsZSl9dmFyICRhO2lmKGFlKWI6e3N3aXRjaChhKXtjYXNlIFwiY29tcG9zaXRpb25zdGFydFwiOnZhciBiYT1cIm9uQ29tcG9zaXRpb25TdGFydFwiO2JyZWFrIGI7Y2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6YmE9XCJvbkNvbXBvc2l0aW9uRW5kXCI7XG5icmVhayBiO2Nhc2UgXCJjb21wb3NpdGlvbnVwZGF0ZVwiOmJhPVwib25Db21wb3NpdGlvblVwZGF0ZVwiO2JyZWFrIGJ9YmE9dm9pZCAwfWVsc2UgaWU/Z2UoYSxjKSYmKGJhPVwib25Db21wb3NpdGlvbkVuZFwiKTpcImtleWRvd25cIj09PWEmJjIyOT09PWMua2V5Q29kZSYmKGJhPVwib25Db21wb3NpdGlvblN0YXJ0XCIpO2JhJiYoZGUmJlwia29cIiE9PWMubG9jYWxlJiYoaWV8fFwib25Db21wb3NpdGlvblN0YXJ0XCIhPT1iYT9cIm9uQ29tcG9zaXRpb25FbmRcIj09PWJhJiZpZSYmKCRhPW5kKCkpOihrZD1lLGxkPVwidmFsdWVcImluIGtkP2tkLnZhbHVlOmtkLnRleHRDb250ZW50LGllPSEwKSkseGE9b2UoZCxiYSksMDx4YS5sZW5ndGgmJihiYT1uZXcgTGQoYmEsYSxudWxsLGMsZSksZy5wdXNoKHtldmVudDpiYSxsaXN0ZW5lcnM6eGF9KSwkYT9iYS5kYXRhPSRhOigkYT1oZShjKSxudWxsIT09JGEmJihiYS5kYXRhPSRhKSkpKTtpZigkYT1jZT9qZShhLGMpOmtlKGEsYykpZD1vZShkLFwib25CZWZvcmVJbnB1dFwiKSxcbjA8ZC5sZW5ndGgmJihlPW5ldyBMZChcIm9uQmVmb3JlSW5wdXRcIixcImJlZm9yZWlucHV0XCIsbnVsbCxjLGUpLGcucHVzaCh7ZXZlbnQ6ZSxsaXN0ZW5lcnM6ZH0pLGUuZGF0YT0kYSl9c2UoZyxiKX0pfWZ1bmN0aW9uIHRmKGEsYixjKXtyZXR1cm57aW5zdGFuY2U6YSxsaXN0ZW5lcjpiLGN1cnJlbnRUYXJnZXQ6Y319ZnVuY3Rpb24gb2UoYSxiKXtmb3IodmFyIGM9YitcIkNhcHR1cmVcIixkPVtdO251bGwhPT1hOyl7dmFyIGU9YSxmPWUuc3RhdGVOb2RlOzU9PT1lLnRhZyYmbnVsbCE9PWYmJihlPWYsZj1LYihhLGMpLG51bGwhPWYmJmQudW5zaGlmdCh0ZihhLGYsZSkpLGY9S2IoYSxiKSxudWxsIT1mJiZkLnB1c2godGYoYSxmLGUpKSk7YT1hLnJldHVybn1yZXR1cm4gZH1mdW5jdGlvbiB2ZihhKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbDtkbyBhPWEucmV0dXJuO3doaWxlKGEmJjUhPT1hLnRhZyk7cmV0dXJuIGE/YTpudWxsfVxuZnVuY3Rpb24gd2YoYSxiLGMsZCxlKXtmb3IodmFyIGY9Yi5fcmVhY3ROYW1lLGc9W107bnVsbCE9PWMmJmMhPT1kOyl7dmFyIGg9YyxrPWguYWx0ZXJuYXRlLGw9aC5zdGF0ZU5vZGU7aWYobnVsbCE9PWsmJms9PT1kKWJyZWFrOzU9PT1oLnRhZyYmbnVsbCE9PWwmJihoPWwsZT8oaz1LYihjLGYpLG51bGwhPWsmJmcudW5zaGlmdCh0ZihjLGssaCkpKTplfHwoaz1LYihjLGYpLG51bGwhPWsmJmcucHVzaCh0ZihjLGssaCkpKSk7Yz1jLnJldHVybn0wIT09Zy5sZW5ndGgmJmEucHVzaCh7ZXZlbnQ6YixsaXN0ZW5lcnM6Z30pfXZhciB4Zj0vXFxyXFxuPy9nLHlmPS9cXHUwMDAwfFxcdUZGRkQvZztmdW5jdGlvbiB6ZihhKXtyZXR1cm4oXCJzdHJpbmdcIj09PXR5cGVvZiBhP2E6XCJcIithKS5yZXBsYWNlKHhmLFwiXFxuXCIpLnJlcGxhY2UoeWYsXCJcIil9ZnVuY3Rpb24gQWYoYSxiLGMpe2I9emYoYik7aWYoemYoYSkhPT1iJiZjKXRocm93IEVycm9yKHAoNDI1KSk7fWZ1bmN0aW9uIEJmKCl7fVxudmFyIENmPW51bGwsRGY9bnVsbDtmdW5jdGlvbiBFZihhLGIpe3JldHVyblwidGV4dGFyZWFcIj09PWF8fFwibm9zY3JpcHRcIj09PWF8fFwic3RyaW5nXCI9PT10eXBlb2YgYi5jaGlsZHJlbnx8XCJudW1iZXJcIj09PXR5cGVvZiBiLmNoaWxkcmVufHxcIm9iamVjdFwiPT09dHlwZW9mIGIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbH1cbnZhciBGZj1cImZ1bmN0aW9uXCI9PT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OnZvaWQgMCxHZj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDp2b2lkIDAsSGY9XCJmdW5jdGlvblwiPT09dHlwZW9mIFByb21pc2U/UHJvbWlzZTp2b2lkIDAsSmY9XCJmdW5jdGlvblwiPT09dHlwZW9mIHF1ZXVlTWljcm90YXNrP3F1ZXVlTWljcm90YXNrOlwidW5kZWZpbmVkXCIhPT10eXBlb2YgSGY/ZnVuY3Rpb24oYSl7cmV0dXJuIEhmLnJlc29sdmUobnVsbCkudGhlbihhKS5jYXRjaChJZil9OkZmO2Z1bmN0aW9uIElmKGEpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBhO30pfVxuZnVuY3Rpb24gS2YoYSxiKXt2YXIgYz1iLGQ9MDtkb3t2YXIgZT1jLm5leHRTaWJsaW5nO2EucmVtb3ZlQ2hpbGQoYyk7aWYoZSYmOD09PWUubm9kZVR5cGUpaWYoYz1lLmRhdGEsXCIvJFwiPT09Yyl7aWYoMD09PWQpe2EucmVtb3ZlQ2hpbGQoZSk7YmQoYik7cmV0dXJufWQtLX1lbHNlXCIkXCIhPT1jJiZcIiQ/XCIhPT1jJiZcIiQhXCIhPT1jfHxkKys7Yz1lfXdoaWxlKGMpO2JkKGIpfWZ1bmN0aW9uIExmKGEpe2Zvcig7bnVsbCE9YTthPWEubmV4dFNpYmxpbmcpe3ZhciBiPWEubm9kZVR5cGU7aWYoMT09PWJ8fDM9PT1iKWJyZWFrO2lmKDg9PT1iKXtiPWEuZGF0YTtpZihcIiRcIj09PWJ8fFwiJCFcIj09PWJ8fFwiJD9cIj09PWIpYnJlYWs7aWYoXCIvJFwiPT09YilyZXR1cm4gbnVsbH19cmV0dXJuIGF9XG5mdW5jdGlvbiBNZihhKXthPWEucHJldmlvdXNTaWJsaW5nO2Zvcih2YXIgYj0wO2E7KXtpZig4PT09YS5ub2RlVHlwZSl7dmFyIGM9YS5kYXRhO2lmKFwiJFwiPT09Y3x8XCIkIVwiPT09Y3x8XCIkP1wiPT09Yyl7aWYoMD09PWIpcmV0dXJuIGE7Yi0tfWVsc2VcIi8kXCI9PT1jJiZiKyt9YT1hLnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH12YXIgTmY9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksT2Y9XCJfX3JlYWN0RmliZXIkXCIrTmYsUGY9XCJfX3JlYWN0UHJvcHMkXCIrTmYsdWY9XCJfX3JlYWN0Q29udGFpbmVyJFwiK05mLG9mPVwiX19yZWFjdEV2ZW50cyRcIitOZixRZj1cIl9fcmVhY3RMaXN0ZW5lcnMkXCIrTmYsUmY9XCJfX3JlYWN0SGFuZGxlcyRcIitOZjtcbmZ1bmN0aW9uIFdjKGEpe3ZhciBiPWFbT2ZdO2lmKGIpcmV0dXJuIGI7Zm9yKHZhciBjPWEucGFyZW50Tm9kZTtjOyl7aWYoYj1jW3VmXXx8Y1tPZl0pe2M9Yi5hbHRlcm5hdGU7aWYobnVsbCE9PWIuY2hpbGR8fG51bGwhPT1jJiZudWxsIT09Yy5jaGlsZClmb3IoYT1NZihhKTtudWxsIT09YTspe2lmKGM9YVtPZl0pcmV0dXJuIGM7YT1NZihhKX1yZXR1cm4gYn1hPWM7Yz1hLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2IoYSl7YT1hW09mXXx8YVt1Zl07cmV0dXJuIWF8fDUhPT1hLnRhZyYmNiE9PWEudGFnJiYxMyE9PWEudGFnJiYzIT09YS50YWc/bnVsbDphfWZ1bmN0aW9uIHVlKGEpe2lmKDU9PT1hLnRhZ3x8Nj09PWEudGFnKXJldHVybiBhLnN0YXRlTm9kZTt0aHJvdyBFcnJvcihwKDMzKSk7fWZ1bmN0aW9uIERiKGEpe3JldHVybiBhW1BmXXx8bnVsbH12YXIgU2Y9W10sVGY9LTE7ZnVuY3Rpb24gVWYoYSl7cmV0dXJue2N1cnJlbnQ6YX19XG5mdW5jdGlvbiBFKGEpezA+VGZ8fChhLmN1cnJlbnQ9U2ZbVGZdLFNmW1RmXT1udWxsLFRmLS0pfWZ1bmN0aW9uIEcoYSxiKXtUZisrO1NmW1RmXT1hLmN1cnJlbnQ7YS5jdXJyZW50PWJ9dmFyIFZmPXt9LEg9VWYoVmYpLFdmPVVmKCExKSxYZj1WZjtmdW5jdGlvbiBZZihhLGIpe3ZhciBjPWEudHlwZS5jb250ZXh0VHlwZXM7aWYoIWMpcmV0dXJuIFZmO3ZhciBkPWEuc3RhdGVOb2RlO2lmKGQmJmQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD09PWIpcmV0dXJuIGQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7dmFyIGU9e30sZjtmb3IoZiBpbiBjKWVbZl09YltmXTtkJiYoYT1hLnN0YXRlTm9kZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9YixhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWUpO3JldHVybiBlfVxuZnVuY3Rpb24gWmYoYSl7YT1hLmNoaWxkQ29udGV4dFR5cGVzO3JldHVybiBudWxsIT09YSYmdm9pZCAwIT09YX1mdW5jdGlvbiAkZigpe0UoV2YpO0UoSCl9ZnVuY3Rpb24gYWcoYSxiLGMpe2lmKEguY3VycmVudCE9PVZmKXRocm93IEVycm9yKHAoMTY4KSk7RyhILGIpO0coV2YsYyl9ZnVuY3Rpb24gYmcoYSxiLGMpe3ZhciBkPWEuc3RhdGVOb2RlO2I9Yi5jaGlsZENvbnRleHRUeXBlcztpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZC5nZXRDaGlsZENvbnRleHQpcmV0dXJuIGM7ZD1kLmdldENoaWxkQ29udGV4dCgpO2Zvcih2YXIgZSBpbiBkKWlmKCEoZSBpbiBiKSl0aHJvdyBFcnJvcihwKDEwOCxSYShhKXx8XCJVbmtub3duXCIsZSkpO3JldHVybiBBKHt9LGMsZCl9XG5mdW5jdGlvbiBjZyhhKXthPShhPWEuc3RhdGVOb2RlKSYmYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dHx8VmY7WGY9SC5jdXJyZW50O0coSCxhKTtHKFdmLFdmLmN1cnJlbnQpO3JldHVybiEwfWZ1bmN0aW9uIGRnKGEsYixjKXt2YXIgZD1hLnN0YXRlTm9kZTtpZighZCl0aHJvdyBFcnJvcihwKDE2OSkpO2M/KGE9YmcoYSxiLFhmKSxkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0PWEsRShXZiksRShIKSxHKEgsYSkpOkUoV2YpO0coV2YsYyl9dmFyIGVnPW51bGwsZmc9ITEsZ2c9ITE7ZnVuY3Rpb24gaGcoYSl7bnVsbD09PWVnP2VnPVthXTplZy5wdXNoKGEpfWZ1bmN0aW9uIGlnKGEpe2ZnPSEwO2hnKGEpfVxuZnVuY3Rpb24gamcoKXtpZighZ2cmJm51bGwhPT1lZyl7Z2c9ITA7dmFyIGE9MCxiPUM7dHJ5e3ZhciBjPWVnO2ZvcihDPTE7YTxjLmxlbmd0aDthKyspe3ZhciBkPWNbYV07ZG8gZD1kKCEwKTt3aGlsZShudWxsIT09ZCl9ZWc9bnVsbDtmZz0hMX1jYXRjaChlKXt0aHJvdyBudWxsIT09ZWcmJihlZz1lZy5zbGljZShhKzEpKSxhYyhmYyxqZyksZTt9ZmluYWxseXtDPWIsZ2c9ITF9fXJldHVybiBudWxsfXZhciBrZz1bXSxsZz0wLG1nPW51bGwsbmc9MCxvZz1bXSxwZz0wLHFnPW51bGwscmc9MSxzZz1cIlwiO2Z1bmN0aW9uIHRnKGEsYil7a2dbbGcrK109bmc7a2dbbGcrK109bWc7bWc9YTtuZz1ifVxuZnVuY3Rpb24gdWcoYSxiLGMpe29nW3BnKytdPXJnO29nW3BnKytdPXNnO29nW3BnKytdPXFnO3FnPWE7dmFyIGQ9cmc7YT1zZzt2YXIgZT0zMi1vYyhkKS0xO2QmPX4oMTw8ZSk7Yys9MTt2YXIgZj0zMi1vYyhiKStlO2lmKDMwPGYpe3ZhciBnPWUtZSU1O2Y9KGQmKDE8PGcpLTEpLnRvU3RyaW5nKDMyKTtkPj49ZztlLT1nO3JnPTE8PDMyLW9jKGIpK2V8Yzw8ZXxkO3NnPWYrYX1lbHNlIHJnPTE8PGZ8Yzw8ZXxkLHNnPWF9ZnVuY3Rpb24gdmcoYSl7bnVsbCE9PWEucmV0dXJuJiYodGcoYSwxKSx1ZyhhLDEsMCkpfWZ1bmN0aW9uIHdnKGEpe2Zvcig7YT09PW1nOyltZz1rZ1stLWxnXSxrZ1tsZ109bnVsbCxuZz1rZ1stLWxnXSxrZ1tsZ109bnVsbDtmb3IoO2E9PT1xZzspcWc9b2dbLS1wZ10sb2dbcGddPW51bGwsc2c9b2dbLS1wZ10sb2dbcGddPW51bGwscmc9b2dbLS1wZ10sb2dbcGddPW51bGx9dmFyIHhnPW51bGwseWc9bnVsbCxJPSExLHpnPW51bGw7XG5mdW5jdGlvbiBBZyhhLGIpe3ZhciBjPUJnKDUsbnVsbCxudWxsLDApO2MuZWxlbWVudFR5cGU9XCJERUxFVEVEXCI7Yy5zdGF0ZU5vZGU9YjtjLnJldHVybj1hO2I9YS5kZWxldGlvbnM7bnVsbD09PWI/KGEuZGVsZXRpb25zPVtjXSxhLmZsYWdzfD0xNik6Yi5wdXNoKGMpfVxuZnVuY3Rpb24gQ2coYSxiKXtzd2l0Y2goYS50YWcpe2Nhc2UgNTp2YXIgYz1hLnR5cGU7Yj0xIT09Yi5ub2RlVHlwZXx8Yy50b0xvd2VyQ2FzZSgpIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP251bGw6YjtyZXR1cm4gbnVsbCE9PWI/KGEuc3RhdGVOb2RlPWIseGc9YSx5Zz1MZihiLmZpcnN0Q2hpbGQpLCEwKTohMTtjYXNlIDY6cmV0dXJuIGI9XCJcIj09PWEucGVuZGluZ1Byb3BzfHwzIT09Yi5ub2RlVHlwZT9udWxsOmIsbnVsbCE9PWI/KGEuc3RhdGVOb2RlPWIseGc9YSx5Zz1udWxsLCEwKTohMTtjYXNlIDEzOnJldHVybiBiPTghPT1iLm5vZGVUeXBlP251bGw6YixudWxsIT09Yj8oYz1udWxsIT09cWc/e2lkOnJnLG92ZXJmbG93OnNnfTpudWxsLGEubWVtb2l6ZWRTdGF0ZT17ZGVoeWRyYXRlZDpiLHRyZWVDb250ZXh0OmMscmV0cnlMYW5lOjEwNzM3NDE4MjR9LGM9QmcoMTgsbnVsbCxudWxsLDApLGMuc3RhdGVOb2RlPWIsYy5yZXR1cm49YSxhLmNoaWxkPWMseGc9YSx5Zz1cbm51bGwsITApOiExO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIERnKGEpe3JldHVybiAwIT09KGEubW9kZSYxKSYmMD09PShhLmZsYWdzJjEyOCl9ZnVuY3Rpb24gRWcoYSl7aWYoSSl7dmFyIGI9eWc7aWYoYil7dmFyIGM9YjtpZighQ2coYSxiKSl7aWYoRGcoYSkpdGhyb3cgRXJyb3IocCg0MTgpKTtiPUxmKGMubmV4dFNpYmxpbmcpO3ZhciBkPXhnO2ImJkNnKGEsYik/QWcoZCxjKTooYS5mbGFncz1hLmZsYWdzJi00MDk3fDIsST0hMSx4Zz1hKX19ZWxzZXtpZihEZyhhKSl0aHJvdyBFcnJvcihwKDQxOCkpO2EuZmxhZ3M9YS5mbGFncyYtNDA5N3wyO0k9ITE7eGc9YX19fWZ1bmN0aW9uIEZnKGEpe2ZvcihhPWEucmV0dXJuO251bGwhPT1hJiY1IT09YS50YWcmJjMhPT1hLnRhZyYmMTMhPT1hLnRhZzspYT1hLnJldHVybjt4Zz1hfVxuZnVuY3Rpb24gR2coYSl7aWYoYSE9PXhnKXJldHVybiExO2lmKCFJKXJldHVybiBGZyhhKSxJPSEwLCExO3ZhciBiOyhiPTMhPT1hLnRhZykmJiEoYj01IT09YS50YWcpJiYoYj1hLnR5cGUsYj1cImhlYWRcIiE9PWImJlwiYm9keVwiIT09YiYmIUVmKGEudHlwZSxhLm1lbW9pemVkUHJvcHMpKTtpZihiJiYoYj15Zykpe2lmKERnKGEpKXRocm93IEhnKCksRXJyb3IocCg0MTgpKTtmb3IoO2I7KUFnKGEsYiksYj1MZihiLm5leHRTaWJsaW5nKX1GZyhhKTtpZigxMz09PWEudGFnKXthPWEubWVtb2l6ZWRTdGF0ZTthPW51bGwhPT1hP2EuZGVoeWRyYXRlZDpudWxsO2lmKCFhKXRocm93IEVycm9yKHAoMzE3KSk7YTp7YT1hLm5leHRTaWJsaW5nO2ZvcihiPTA7YTspe2lmKDg9PT1hLm5vZGVUeXBlKXt2YXIgYz1hLmRhdGE7aWYoXCIvJFwiPT09Yyl7aWYoMD09PWIpe3lnPUxmKGEubmV4dFNpYmxpbmcpO2JyZWFrIGF9Yi0tfWVsc2VcIiRcIiE9PWMmJlwiJCFcIiE9PWMmJlwiJD9cIiE9PWN8fGIrK31hPWEubmV4dFNpYmxpbmd9eWc9XG5udWxsfX1lbHNlIHlnPXhnP0xmKGEuc3RhdGVOb2RlLm5leHRTaWJsaW5nKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIEhnKCl7Zm9yKHZhciBhPXlnO2E7KWE9TGYoYS5uZXh0U2libGluZyl9ZnVuY3Rpb24gSWcoKXt5Zz14Zz1udWxsO0k9ITF9ZnVuY3Rpb24gSmcoYSl7bnVsbD09PXpnP3pnPVthXTp6Zy5wdXNoKGEpfXZhciBLZz11YS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztmdW5jdGlvbiBMZyhhLGIpe2lmKGEmJmEuZGVmYXVsdFByb3BzKXtiPUEoe30sYik7YT1hLmRlZmF1bHRQcm9wcztmb3IodmFyIGMgaW4gYSl2b2lkIDA9PT1iW2NdJiYoYltjXT1hW2NdKTtyZXR1cm4gYn1yZXR1cm4gYn12YXIgTWc9VWYobnVsbCksTmc9bnVsbCxPZz1udWxsLFBnPW51bGw7ZnVuY3Rpb24gUWcoKXtQZz1PZz1OZz1udWxsfWZ1bmN0aW9uIFJnKGEpe3ZhciBiPU1nLmN1cnJlbnQ7RShNZyk7YS5fY3VycmVudFZhbHVlPWJ9XG5mdW5jdGlvbiBTZyhhLGIsYyl7Zm9yKDtudWxsIT09YTspe3ZhciBkPWEuYWx0ZXJuYXRlOyhhLmNoaWxkTGFuZXMmYikhPT1iPyhhLmNoaWxkTGFuZXN8PWIsbnVsbCE9PWQmJihkLmNoaWxkTGFuZXN8PWIpKTpudWxsIT09ZCYmKGQuY2hpbGRMYW5lcyZiKSE9PWImJihkLmNoaWxkTGFuZXN8PWIpO2lmKGE9PT1jKWJyZWFrO2E9YS5yZXR1cm59fWZ1bmN0aW9uIFRnKGEsYil7Tmc9YTtQZz1PZz1udWxsO2E9YS5kZXBlbmRlbmNpZXM7bnVsbCE9PWEmJm51bGwhPT1hLmZpcnN0Q29udGV4dCYmKDAhPT0oYS5sYW5lcyZiKSYmKFVnPSEwKSxhLmZpcnN0Q29udGV4dD1udWxsKX1cbmZ1bmN0aW9uIFZnKGEpe3ZhciBiPWEuX2N1cnJlbnRWYWx1ZTtpZihQZyE9PWEpaWYoYT17Y29udGV4dDphLG1lbW9pemVkVmFsdWU6YixuZXh0Om51bGx9LG51bGw9PT1PZyl7aWYobnVsbD09PU5nKXRocm93IEVycm9yKHAoMzA4KSk7T2c9YTtOZy5kZXBlbmRlbmNpZXM9e2xhbmVzOjAsZmlyc3RDb250ZXh0OmF9fWVsc2UgT2c9T2cubmV4dD1hO3JldHVybiBifXZhciBXZz1udWxsO2Z1bmN0aW9uIFhnKGEpe251bGw9PT1XZz9XZz1bYV06V2cucHVzaChhKX1mdW5jdGlvbiBZZyhhLGIsYyxkKXt2YXIgZT1iLmludGVybGVhdmVkO251bGw9PT1lPyhjLm5leHQ9YyxYZyhiKSk6KGMubmV4dD1lLm5leHQsZS5uZXh0PWMpO2IuaW50ZXJsZWF2ZWQ9YztyZXR1cm4gWmcoYSxkKX1cbmZ1bmN0aW9uIFpnKGEsYil7YS5sYW5lc3w9Yjt2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09YyYmKGMubGFuZXN8PWIpO2M9YTtmb3IoYT1hLnJldHVybjtudWxsIT09YTspYS5jaGlsZExhbmVzfD1iLGM9YS5hbHRlcm5hdGUsbnVsbCE9PWMmJihjLmNoaWxkTGFuZXN8PWIpLGM9YSxhPWEucmV0dXJuO3JldHVybiAzPT09Yy50YWc/Yy5zdGF0ZU5vZGU6bnVsbH12YXIgJGc9ITE7ZnVuY3Rpb24gYWgoYSl7YS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmEubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MH0sZWZmZWN0czpudWxsfX1cbmZ1bmN0aW9uIGJoKGEsYil7YT1hLnVwZGF0ZVF1ZXVlO2IudXBkYXRlUXVldWU9PT1hJiYoYi51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmEuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTphLmZpcnN0QmFzZVVwZGF0ZSxsYXN0QmFzZVVwZGF0ZTphLmxhc3RCYXNlVXBkYXRlLHNoYXJlZDphLnNoYXJlZCxlZmZlY3RzOmEuZWZmZWN0c30pfWZ1bmN0aW9uIGNoKGEsYil7cmV0dXJue2V2ZW50VGltZTphLGxhbmU6Yix0YWc6MCxwYXlsb2FkOm51bGwsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9fVxuZnVuY3Rpb24gZGgoYSxiLGMpe3ZhciBkPWEudXBkYXRlUXVldWU7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7ZD1kLnNoYXJlZDtpZigwIT09KEsmMikpe3ZhciBlPWQucGVuZGluZztudWxsPT09ZT9iLm5leHQ9YjooYi5uZXh0PWUubmV4dCxlLm5leHQ9Yik7ZC5wZW5kaW5nPWI7cmV0dXJuIFpnKGEsYyl9ZT1kLmludGVybGVhdmVkO251bGw9PT1lPyhiLm5leHQ9YixYZyhkKSk6KGIubmV4dD1lLm5leHQsZS5uZXh0PWIpO2QuaW50ZXJsZWF2ZWQ9YjtyZXR1cm4gWmcoYSxjKX1mdW5jdGlvbiBlaChhLGIsYyl7Yj1iLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1iJiYoYj1iLnNoYXJlZCwwIT09KGMmNDE5NDI0MCkpKXt2YXIgZD1iLmxhbmVzO2QmPWEucGVuZGluZ0xhbmVzO2N8PWQ7Yi5sYW5lcz1jO0NjKGEsYyl9fVxuZnVuY3Rpb24gZmgoYSxiKXt2YXIgYz1hLnVwZGF0ZVF1ZXVlLGQ9YS5hbHRlcm5hdGU7aWYobnVsbCE9PWQmJihkPWQudXBkYXRlUXVldWUsYz09PWQpKXt2YXIgZT1udWxsLGY9bnVsbDtjPWMuZmlyc3RCYXNlVXBkYXRlO2lmKG51bGwhPT1jKXtkb3t2YXIgZz17ZXZlbnRUaW1lOmMuZXZlbnRUaW1lLGxhbmU6Yy5sYW5lLHRhZzpjLnRhZyxwYXlsb2FkOmMucGF5bG9hZCxjYWxsYmFjazpjLmNhbGxiYWNrLG5leHQ6bnVsbH07bnVsbD09PWY/ZT1mPWc6Zj1mLm5leHQ9ZztjPWMubmV4dH13aGlsZShudWxsIT09Yyk7bnVsbD09PWY/ZT1mPWI6Zj1mLm5leHQ9Yn1lbHNlIGU9Zj1iO2M9e2Jhc2VTdGF0ZTpkLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZSxsYXN0QmFzZVVwZGF0ZTpmLHNoYXJlZDpkLnNoYXJlZCxlZmZlY3RzOmQuZWZmZWN0c307YS51cGRhdGVRdWV1ZT1jO3JldHVybn1hPWMubGFzdEJhc2VVcGRhdGU7bnVsbD09PWE/Yy5maXJzdEJhc2VVcGRhdGU9YjphLm5leHQ9XG5iO2MubGFzdEJhc2VVcGRhdGU9Yn1cbmZ1bmN0aW9uIGdoKGEsYixjLGQpe3ZhciBlPWEudXBkYXRlUXVldWU7JGc9ITE7dmFyIGY9ZS5maXJzdEJhc2VVcGRhdGUsZz1lLmxhc3RCYXNlVXBkYXRlLGg9ZS5zaGFyZWQucGVuZGluZztpZihudWxsIT09aCl7ZS5zaGFyZWQucGVuZGluZz1udWxsO3ZhciBrPWgsbD1rLm5leHQ7ay5uZXh0PW51bGw7bnVsbD09PWc/Zj1sOmcubmV4dD1sO2c9azt2YXIgbT1hLmFsdGVybmF0ZTtudWxsIT09bSYmKG09bS51cGRhdGVRdWV1ZSxoPW0ubGFzdEJhc2VVcGRhdGUsaCE9PWcmJihudWxsPT09aD9tLmZpcnN0QmFzZVVwZGF0ZT1sOmgubmV4dD1sLG0ubGFzdEJhc2VVcGRhdGU9aykpfWlmKG51bGwhPT1mKXt2YXIgcT1lLmJhc2VTdGF0ZTtnPTA7bT1sPWs9bnVsbDtoPWY7ZG97dmFyIHI9aC5sYW5lLHk9aC5ldmVudFRpbWU7aWYoKGQmcik9PT1yKXtudWxsIT09bSYmKG09bS5uZXh0PXtldmVudFRpbWU6eSxsYW5lOjAsdGFnOmgudGFnLHBheWxvYWQ6aC5wYXlsb2FkLGNhbGxiYWNrOmguY2FsbGJhY2ssXG5uZXh0Om51bGx9KTthOnt2YXIgbj1hLHQ9aDtyPWI7eT1jO3N3aXRjaCh0LnRhZyl7Y2FzZSAxOm49dC5wYXlsb2FkO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBuKXtxPW4uY2FsbCh5LHEscik7YnJlYWsgYX1xPW47YnJlYWsgYTtjYXNlIDM6bi5mbGFncz1uLmZsYWdzJi02NTUzN3wxMjg7Y2FzZSAwOm49dC5wYXlsb2FkO3I9XCJmdW5jdGlvblwiPT09dHlwZW9mIG4/bi5jYWxsKHkscSxyKTpuO2lmKG51bGw9PT1yfHx2b2lkIDA9PT1yKWJyZWFrIGE7cT1BKHt9LHEscik7YnJlYWsgYTtjYXNlIDI6JGc9ITB9fW51bGwhPT1oLmNhbGxiYWNrJiYwIT09aC5sYW5lJiYoYS5mbGFnc3w9NjQscj1lLmVmZmVjdHMsbnVsbD09PXI/ZS5lZmZlY3RzPVtoXTpyLnB1c2goaCkpfWVsc2UgeT17ZXZlbnRUaW1lOnksbGFuZTpyLHRhZzpoLnRhZyxwYXlsb2FkOmgucGF5bG9hZCxjYWxsYmFjazpoLmNhbGxiYWNrLG5leHQ6bnVsbH0sbnVsbD09PW0/KGw9bT15LGs9cSk6bT1tLm5leHQ9eSxnfD1yO1xuaD1oLm5leHQ7aWYobnVsbD09PWgpaWYoaD1lLnNoYXJlZC5wZW5kaW5nLG51bGw9PT1oKWJyZWFrO2Vsc2Ugcj1oLGg9ci5uZXh0LHIubmV4dD1udWxsLGUubGFzdEJhc2VVcGRhdGU9cixlLnNoYXJlZC5wZW5kaW5nPW51bGx9d2hpbGUoMSk7bnVsbD09PW0mJihrPXEpO2UuYmFzZVN0YXRlPWs7ZS5maXJzdEJhc2VVcGRhdGU9bDtlLmxhc3RCYXNlVXBkYXRlPW07Yj1lLnNoYXJlZC5pbnRlcmxlYXZlZDtpZihudWxsIT09Yil7ZT1iO2RvIGd8PWUubGFuZSxlPWUubmV4dDt3aGlsZShlIT09Yil9ZWxzZSBudWxsPT09ZiYmKGUuc2hhcmVkLmxhbmVzPTApO2hofD1nO2EubGFuZXM9ZzthLm1lbW9pemVkU3RhdGU9cX19XG5mdW5jdGlvbiBpaChhLGIsYyl7YT1iLmVmZmVjdHM7Yi5lZmZlY3RzPW51bGw7aWYobnVsbCE9PWEpZm9yKGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGQ9YVtiXSxlPWQuY2FsbGJhY2s7aWYobnVsbCE9PWUpe2QuY2FsbGJhY2s9bnVsbDtkPWM7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGUpdGhyb3cgRXJyb3IocCgxOTEsZSkpO2UuY2FsbChkKX19fXZhciBqaD0obmV3IGFhLkNvbXBvbmVudCkucmVmcztmdW5jdGlvbiBraChhLGIsYyxkKXtiPWEubWVtb2l6ZWRTdGF0ZTtjPWMoZCxiKTtjPW51bGw9PT1jfHx2b2lkIDA9PT1jP2I6QSh7fSxiLGMpO2EubWVtb2l6ZWRTdGF0ZT1jOzA9PT1hLmxhbmVzJiYoYS51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9Yyl9XG52YXIgbmg9e2lzTW91bnRlZDpmdW5jdGlvbihhKXtyZXR1cm4oYT1hLl9yZWFjdEludGVybmFscyk/VmIoYSk9PT1hOiExfSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oYSxiLGMpe2E9YS5fcmVhY3RJbnRlcm5hbHM7dmFyIGQ9TCgpLGU9bGgoYSksZj1jaChkLGUpO2YucGF5bG9hZD1iO3ZvaWQgMCE9PWMmJm51bGwhPT1jJiYoZi5jYWxsYmFjaz1jKTtiPWRoKGEsZixlKTtudWxsIT09YiYmKG1oKGIsYSxlLGQpLGVoKGIsYSxlKSl9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oYSxiLGMpe2E9YS5fcmVhY3RJbnRlcm5hbHM7dmFyIGQ9TCgpLGU9bGgoYSksZj1jaChkLGUpO2YudGFnPTE7Zi5wYXlsb2FkPWI7dm9pZCAwIT09YyYmbnVsbCE9PWMmJihmLmNhbGxiYWNrPWMpO2I9ZGgoYSxmLGUpO251bGwhPT1iJiYobWgoYixhLGUsZCksZWgoYixhLGUpKX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKGEsYil7YT1hLl9yZWFjdEludGVybmFsczt2YXIgYz1MKCksZD1cbmxoKGEpLGU9Y2goYyxkKTtlLnRhZz0yO3ZvaWQgMCE9PWImJm51bGwhPT1iJiYoZS5jYWxsYmFjaz1iKTtiPWRoKGEsZSxkKTtudWxsIT09YiYmKG1oKGIsYSxkLGMpLGVoKGIsYSxkKSl9fTtmdW5jdGlvbiBvaChhLGIsYyxkLGUsZixnKXthPWEuc3RhdGVOb2RlO3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBhLnNob3VsZENvbXBvbmVudFVwZGF0ZT9hLnNob3VsZENvbXBvbmVudFVwZGF0ZShkLGYsZyk6Yi5wcm90b3R5cGUmJmIucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50PyFJZShjLGQpfHwhSWUoZSxmKTohMH1cbmZ1bmN0aW9uIHBoKGEsYixjKXt2YXIgZD0hMSxlPVZmO3ZhciBmPWIuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBmJiZudWxsIT09Zj9mPVZnKGYpOihlPVpmKGIpP1hmOkguY3VycmVudCxkPWIuY29udGV4dFR5cGVzLGY9KGQ9bnVsbCE9PWQmJnZvaWQgMCE9PWQpP1lmKGEsZSk6VmYpO2I9bmV3IGIoYyxmKTthLm1lbW9pemVkU3RhdGU9bnVsbCE9PWIuc3RhdGUmJnZvaWQgMCE9PWIuc3RhdGU/Yi5zdGF0ZTpudWxsO2IudXBkYXRlcj1uaDthLnN0YXRlTm9kZT1iO2IuX3JlYWN0SW50ZXJuYWxzPWE7ZCYmKGE9YS5zdGF0ZU5vZGUsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PWUsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1mKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIHFoKGEsYixjLGQpe2E9Yi5zdGF0ZTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZiLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoYyxkKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmYi5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhjLGQpO2Iuc3RhdGUhPT1hJiZuaC5lbnF1ZXVlUmVwbGFjZVN0YXRlKGIsYi5zdGF0ZSxudWxsKX1cbmZ1bmN0aW9uIHJoKGEsYixjLGQpe3ZhciBlPWEuc3RhdGVOb2RlO2UucHJvcHM9YztlLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZTtlLnJlZnM9amg7YWgoYSk7dmFyIGY9Yi5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mP2UuY29udGV4dD1WZyhmKTooZj1aZihiKT9YZjpILmN1cnJlbnQsZS5jb250ZXh0PVlmKGEsZikpO2Uuc3RhdGU9YS5tZW1vaXplZFN0YXRlO2Y9Yi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XCJmdW5jdGlvblwiPT09dHlwZW9mIGYmJihraChhLGIsZixjKSxlLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZSk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGUuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGUuY29tcG9uZW50V2lsbE1vdW50fHwoYj1lLnN0YXRlLFxuXCJmdW5jdGlvblwiPT09dHlwZW9mIGUuY29tcG9uZW50V2lsbE1vdW50JiZlLmNvbXBvbmVudFdpbGxNb3VudCgpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJmUuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpLGIhPT1lLnN0YXRlJiZuaC5lbnF1ZXVlUmVwbGFjZVN0YXRlKGUsZS5zdGF0ZSxudWxsKSxnaChhLGMsZSxkKSxlLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZSk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGUuY29tcG9uZW50RGlkTW91bnQmJihhLmZsYWdzfD00MTk0MzA4KX1cbmZ1bmN0aW9uIHNoKGEsYixjKXthPWMucmVmO2lmKG51bGwhPT1hJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYSYmXCJvYmplY3RcIiE9PXR5cGVvZiBhKXtpZihjLl9vd25lcil7Yz1jLl9vd25lcjtpZihjKXtpZigxIT09Yy50YWcpdGhyb3cgRXJyb3IocCgzMDkpKTt2YXIgZD1jLnN0YXRlTm9kZX1pZighZCl0aHJvdyBFcnJvcihwKDE0NyxhKSk7dmFyIGU9ZCxmPVwiXCIrYTtpZihudWxsIT09YiYmbnVsbCE9PWIucmVmJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5yZWYmJmIucmVmLl9zdHJpbmdSZWY9PT1mKXJldHVybiBiLnJlZjtiPWZ1bmN0aW9uKGEpe3ZhciBiPWUucmVmcztiPT09amgmJihiPWUucmVmcz17fSk7bnVsbD09PWE/ZGVsZXRlIGJbZl06YltmXT1hfTtiLl9zdHJpbmdSZWY9ZjtyZXR1cm4gYn1pZihcInN0cmluZ1wiIT09dHlwZW9mIGEpdGhyb3cgRXJyb3IocCgyODQpKTtpZighYy5fb3duZXIpdGhyb3cgRXJyb3IocCgyOTAsYSkpO31yZXR1cm4gYX1cbmZ1bmN0aW9uIHRoKGEsYil7YT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYik7dGhyb3cgRXJyb3IocCgzMSxcIltvYmplY3QgT2JqZWN0XVwiPT09YT9cIm9iamVjdCB3aXRoIGtleXMge1wiK09iamVjdC5rZXlzKGIpLmpvaW4oXCIsIFwiKStcIn1cIjphKSk7fWZ1bmN0aW9uIHVoKGEpe3ZhciBiPWEuX2luaXQ7cmV0dXJuIGIoYS5fcGF5bG9hZCl9XG5mdW5jdGlvbiB2aChhKXtmdW5jdGlvbiBiKGIsYyl7aWYoYSl7dmFyIGQ9Yi5kZWxldGlvbnM7bnVsbD09PWQ/KGIuZGVsZXRpb25zPVtjXSxiLmZsYWdzfD0xNik6ZC5wdXNoKGMpfX1mdW5jdGlvbiBjKGMsZCl7aWYoIWEpcmV0dXJuIG51bGw7Zm9yKDtudWxsIT09ZDspYihjLGQpLGQ9ZC5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIGQoYSxiKXtmb3IoYT1uZXcgTWFwO251bGwhPT1iOyludWxsIT09Yi5rZXk/YS5zZXQoYi5rZXksYik6YS5zZXQoYi5pbmRleCxiKSxiPWIuc2libGluZztyZXR1cm4gYX1mdW5jdGlvbiBlKGEsYil7YT13aChhLGIpO2EuaW5kZXg9MDthLnNpYmxpbmc9bnVsbDtyZXR1cm4gYX1mdW5jdGlvbiBmKGIsYyxkKXtiLmluZGV4PWQ7aWYoIWEpcmV0dXJuIGIuZmxhZ3N8PTEwNDg1NzYsYztkPWIuYWx0ZXJuYXRlO2lmKG51bGwhPT1kKXJldHVybiBkPWQuaW5kZXgsZDxjPyhiLmZsYWdzfD0yLGMpOmQ7Yi5mbGFnc3w9MjtyZXR1cm4gY31mdW5jdGlvbiBnKGIpe2EmJlxubnVsbD09PWIuYWx0ZXJuYXRlJiYoYi5mbGFnc3w9Mik7cmV0dXJuIGJ9ZnVuY3Rpb24gaChhLGIsYyxkKXtpZihudWxsPT09Ynx8NiE9PWIudGFnKXJldHVybiBiPXhoKGMsYS5tb2RlLGQpLGIucmV0dXJuPWEsYjtiPWUoYixjKTtiLnJldHVybj1hO3JldHVybiBifWZ1bmN0aW9uIGsoYSxiLGMsZCl7dmFyIGY9Yy50eXBlO2lmKGY9PT15YSlyZXR1cm4gbShhLGIsYy5wcm9wcy5jaGlsZHJlbixkLGMua2V5KTtpZihudWxsIT09YiYmKGIuZWxlbWVudFR5cGU9PT1mfHxcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mJiZmLiQkdHlwZW9mPT09SGEmJnVoKGYpPT09Yi50eXBlKSlyZXR1cm4gZD1lKGIsYy5wcm9wcyksZC5yZWY9c2goYSxiLGMpLGQucmV0dXJuPWEsZDtkPXloKGMudHlwZSxjLmtleSxjLnByb3BzLG51bGwsYS5tb2RlLGQpO2QucmVmPXNoKGEsYixjKTtkLnJldHVybj1hO3JldHVybiBkfWZ1bmN0aW9uIGwoYSxiLGMsZCl7aWYobnVsbD09PWJ8fDQhPT1iLnRhZ3x8XG5iLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIT09Yy5jb250YWluZXJJbmZvfHxiLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiE9PWMuaW1wbGVtZW50YXRpb24pcmV0dXJuIGI9emgoYyxhLm1vZGUsZCksYi5yZXR1cm49YSxiO2I9ZShiLGMuY2hpbGRyZW58fFtdKTtiLnJldHVybj1hO3JldHVybiBifWZ1bmN0aW9uIG0oYSxiLGMsZCxmKXtpZihudWxsPT09Ynx8NyE9PWIudGFnKXJldHVybiBiPUFoKGMsYS5tb2RlLGQsZiksYi5yZXR1cm49YSxiO2I9ZShiLGMpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gcShhLGIsYyl7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBiJiZcIlwiIT09Ynx8XCJudW1iZXJcIj09PXR5cGVvZiBiKXJldHVybiBiPXhoKFwiXCIrYixhLm1vZGUsYyksYi5yZXR1cm49YSxiO2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYiYmbnVsbCE9PWIpe3N3aXRjaChiLiQkdHlwZW9mKXtjYXNlIHZhOnJldHVybiBjPXloKGIudHlwZSxiLmtleSxiLnByb3BzLG51bGwsYS5tb2RlLGMpLFxuYy5yZWY9c2goYSxudWxsLGIpLGMucmV0dXJuPWEsYztjYXNlIHdhOnJldHVybiBiPXpoKGIsYS5tb2RlLGMpLGIucmV0dXJuPWEsYjtjYXNlIEhhOnZhciBkPWIuX2luaXQ7cmV0dXJuIHEoYSxkKGIuX3BheWxvYWQpLGMpfWlmKGViKGIpfHxLYShiKSlyZXR1cm4gYj1BaChiLGEubW9kZSxjLG51bGwpLGIucmV0dXJuPWEsYjt0aChhLGIpfXJldHVybiBudWxsfWZ1bmN0aW9uIHIoYSxiLGMsZCl7dmFyIGU9bnVsbCE9PWI/Yi5rZXk6bnVsbDtpZihcInN0cmluZ1wiPT09dHlwZW9mIGMmJlwiXCIhPT1jfHxcIm51bWJlclwiPT09dHlwZW9mIGMpcmV0dXJuIG51bGwhPT1lP251bGw6aChhLGIsXCJcIitjLGQpO2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYyYmbnVsbCE9PWMpe3N3aXRjaChjLiQkdHlwZW9mKXtjYXNlIHZhOnJldHVybiBjLmtleT09PWU/ayhhLGIsYyxkKTpudWxsO2Nhc2Ugd2E6cmV0dXJuIGMua2V5PT09ZT9sKGEsYixjLGQpOm51bGw7Y2FzZSBIYTpyZXR1cm4gZT1jLl9pbml0LHIoYSxcbmIsZShjLl9wYXlsb2FkKSxkKX1pZihlYihjKXx8S2EoYykpcmV0dXJuIG51bGwhPT1lP251bGw6bShhLGIsYyxkLG51bGwpO3RoKGEsYyl9cmV0dXJuIG51bGx9ZnVuY3Rpb24geShhLGIsYyxkLGUpe2lmKFwic3RyaW5nXCI9PT10eXBlb2YgZCYmXCJcIiE9PWR8fFwibnVtYmVyXCI9PT10eXBlb2YgZClyZXR1cm4gYT1hLmdldChjKXx8bnVsbCxoKGIsYSxcIlwiK2QsZSk7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBkJiZudWxsIT09ZCl7c3dpdGNoKGQuJCR0eXBlb2Ype2Nhc2UgdmE6cmV0dXJuIGE9YS5nZXQobnVsbD09PWQua2V5P2M6ZC5rZXkpfHxudWxsLGsoYixhLGQsZSk7Y2FzZSB3YTpyZXR1cm4gYT1hLmdldChudWxsPT09ZC5rZXk/YzpkLmtleSl8fG51bGwsbChiLGEsZCxlKTtjYXNlIEhhOnZhciBmPWQuX2luaXQ7cmV0dXJuIHkoYSxiLGMsZihkLl9wYXlsb2FkKSxlKX1pZihlYihkKXx8S2EoZCkpcmV0dXJuIGE9YS5nZXQoYyl8fG51bGwsbShiLGEsZCxlLG51bGwpO3RoKGIsZCl9cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBuKGUsZyxoLGspe2Zvcih2YXIgbD1udWxsLG09bnVsbCx1PWcsdz1nPTAseD1udWxsO251bGwhPT11JiZ3PGgubGVuZ3RoO3crKyl7dS5pbmRleD53Pyh4PXUsdT1udWxsKTp4PXUuc2libGluZzt2YXIgbj1yKGUsdSxoW3ddLGspO2lmKG51bGw9PT1uKXtudWxsPT09dSYmKHU9eCk7YnJlYWt9YSYmdSYmbnVsbD09PW4uYWx0ZXJuYXRlJiZiKGUsdSk7Zz1mKG4sZyx3KTtudWxsPT09bT9sPW46bS5zaWJsaW5nPW47bT1uO3U9eH1pZih3PT09aC5sZW5ndGgpcmV0dXJuIGMoZSx1KSxJJiZ0ZyhlLHcpLGw7aWYobnVsbD09PXUpe2Zvcig7dzxoLmxlbmd0aDt3KyspdT1xKGUsaFt3XSxrKSxudWxsIT09dSYmKGc9Zih1LGcsdyksbnVsbD09PW0/bD11Om0uc2libGluZz11LG09dSk7SSYmdGcoZSx3KTtyZXR1cm4gbH1mb3IodT1kKGUsdSk7dzxoLmxlbmd0aDt3KyspeD15KHUsZSx3LGhbd10sayksbnVsbCE9PXgmJihhJiZudWxsIT09eC5hbHRlcm5hdGUmJnUuZGVsZXRlKG51bGw9PT1cbngua2V5P3c6eC5rZXkpLGc9Zih4LGcsdyksbnVsbD09PW0/bD14Om0uc2libGluZz14LG09eCk7YSYmdS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBiKGUsYSl9KTtJJiZ0ZyhlLHcpO3JldHVybiBsfWZ1bmN0aW9uIHQoZSxnLGgsayl7dmFyIGw9S2EoaCk7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGwpdGhyb3cgRXJyb3IocCgxNTApKTtoPWwuY2FsbChoKTtpZihudWxsPT1oKXRocm93IEVycm9yKHAoMTUxKSk7Zm9yKHZhciB1PWw9bnVsbCxtPWcsdz1nPTAseD1udWxsLG49aC5uZXh0KCk7bnVsbCE9PW0mJiFuLmRvbmU7dysrLG49aC5uZXh0KCkpe20uaW5kZXg+dz8oeD1tLG09bnVsbCk6eD1tLnNpYmxpbmc7dmFyIHQ9cihlLG0sbi52YWx1ZSxrKTtpZihudWxsPT09dCl7bnVsbD09PW0mJihtPXgpO2JyZWFrfWEmJm0mJm51bGw9PT10LmFsdGVybmF0ZSYmYihlLG0pO2c9Zih0LGcsdyk7bnVsbD09PXU/bD10OnUuc2libGluZz10O3U9dDttPXh9aWYobi5kb25lKXJldHVybiBjKGUsXG5tKSxJJiZ0ZyhlLHcpLGw7aWYobnVsbD09PW0pe2Zvcig7IW4uZG9uZTt3Kyssbj1oLm5leHQoKSluPXEoZSxuLnZhbHVlLGspLG51bGwhPT1uJiYoZz1mKG4sZyx3KSxudWxsPT09dT9sPW46dS5zaWJsaW5nPW4sdT1uKTtJJiZ0ZyhlLHcpO3JldHVybiBsfWZvcihtPWQoZSxtKTshbi5kb25lO3crKyxuPWgubmV4dCgpKW49eShtLGUsdyxuLnZhbHVlLGspLG51bGwhPT1uJiYoYSYmbnVsbCE9PW4uYWx0ZXJuYXRlJiZtLmRlbGV0ZShudWxsPT09bi5rZXk/dzpuLmtleSksZz1mKG4sZyx3KSxudWxsPT09dT9sPW46dS5zaWJsaW5nPW4sdT1uKTthJiZtLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGIoZSxhKX0pO0kmJnRnKGUsdyk7cmV0dXJuIGx9ZnVuY3Rpb24gSihhLGQsZixoKXtcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mJiZmLnR5cGU9PT15YSYmbnVsbD09PWYua2V5JiYoZj1mLnByb3BzLmNoaWxkcmVuKTtpZihcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mKXtzd2l0Y2goZi4kJHR5cGVvZil7Y2FzZSB2YTphOntmb3IodmFyIGs9XG5mLmtleSxsPWQ7bnVsbCE9PWw7KXtpZihsLmtleT09PWspe2s9Zi50eXBlO2lmKGs9PT15YSl7aWYoNz09PWwudGFnKXtjKGEsbC5zaWJsaW5nKTtkPWUobCxmLnByb3BzLmNoaWxkcmVuKTtkLnJldHVybj1hO2E9ZDticmVhayBhfX1lbHNlIGlmKGwuZWxlbWVudFR5cGU9PT1rfHxcIm9iamVjdFwiPT09dHlwZW9mIGsmJm51bGwhPT1rJiZrLiQkdHlwZW9mPT09SGEmJnVoKGspPT09bC50eXBlKXtjKGEsbC5zaWJsaW5nKTtkPWUobCxmLnByb3BzKTtkLnJlZj1zaChhLGwsZik7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX1jKGEsbCk7YnJlYWt9ZWxzZSBiKGEsbCk7bD1sLnNpYmxpbmd9Zi50eXBlPT09eWE/KGQ9QWgoZi5wcm9wcy5jaGlsZHJlbixhLm1vZGUsaCxmLmtleSksZC5yZXR1cm49YSxhPWQpOihoPXloKGYudHlwZSxmLmtleSxmLnByb3BzLG51bGwsYS5tb2RlLGgpLGgucmVmPXNoKGEsZCxmKSxoLnJldHVybj1hLGE9aCl9cmV0dXJuIGcoYSk7Y2FzZSB3YTphOntmb3IobD1mLmtleTtudWxsIT09XG5kOyl7aWYoZC5rZXk9PT1sKWlmKDQ9PT1kLnRhZyYmZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PWYuY29udGFpbmVySW5mbyYmZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT1mLmltcGxlbWVudGF0aW9uKXtjKGEsZC5zaWJsaW5nKTtkPWUoZCxmLmNoaWxkcmVufHxbXSk7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX1lbHNle2MoYSxkKTticmVha31lbHNlIGIoYSxkKTtkPWQuc2libGluZ31kPXpoKGYsYS5tb2RlLGgpO2QucmV0dXJuPWE7YT1kfXJldHVybiBnKGEpO2Nhc2UgSGE6cmV0dXJuIGw9Zi5faW5pdCxKKGEsZCxsKGYuX3BheWxvYWQpLGgpfWlmKGViKGYpKXJldHVybiBuKGEsZCxmLGgpO2lmKEthKGYpKXJldHVybiB0KGEsZCxmLGgpO3RoKGEsZil9cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBmJiZcIlwiIT09Znx8XCJudW1iZXJcIj09PXR5cGVvZiBmPyhmPVwiXCIrZixudWxsIT09ZCYmNj09PWQudGFnPyhjKGEsZC5zaWJsaW5nKSxkPWUoZCxmKSxkLnJldHVybj1hLGE9ZCk6XG4oYyhhLGQpLGQ9eGgoZixhLm1vZGUsaCksZC5yZXR1cm49YSxhPWQpLGcoYSkpOmMoYSxkKX1yZXR1cm4gSn12YXIgQmg9dmgoITApLENoPXZoKCExKSxEaD17fSxFaD1VZihEaCksRmg9VWYoRGgpLEdoPVVmKERoKTtmdW5jdGlvbiBIaChhKXtpZihhPT09RGgpdGhyb3cgRXJyb3IocCgxNzQpKTtyZXR1cm4gYX1mdW5jdGlvbiBJaChhLGIpe0coR2gsYik7RyhGaCxhKTtHKEVoLERoKTthPWIubm9kZVR5cGU7c3dpdGNoKGEpe2Nhc2UgOTpjYXNlIDExOmI9KGI9Yi5kb2N1bWVudEVsZW1lbnQpP2IubmFtZXNwYWNlVVJJOmxiKG51bGwsXCJcIik7YnJlYWs7ZGVmYXVsdDphPTg9PT1hP2IucGFyZW50Tm9kZTpiLGI9YS5uYW1lc3BhY2VVUkl8fG51bGwsYT1hLnRhZ05hbWUsYj1sYihiLGEpfUUoRWgpO0coRWgsYil9ZnVuY3Rpb24gSmgoKXtFKEVoKTtFKEZoKTtFKEdoKX1cbmZ1bmN0aW9uIEtoKGEpe0hoKEdoLmN1cnJlbnQpO3ZhciBiPUhoKEVoLmN1cnJlbnQpO3ZhciBjPWxiKGIsYS50eXBlKTtiIT09YyYmKEcoRmgsYSksRyhFaCxjKSl9ZnVuY3Rpb24gTGgoYSl7RmguY3VycmVudD09PWEmJihFKEVoKSxFKEZoKSl9dmFyIE09VWYoMCk7XG5mdW5jdGlvbiBNaChhKXtmb3IodmFyIGI9YTtudWxsIT09Yjspe2lmKDEzPT09Yi50YWcpe3ZhciBjPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09YyYmKGM9Yy5kZWh5ZHJhdGVkLG51bGw9PT1jfHxcIiQ/XCI9PT1jLmRhdGF8fFwiJCFcIj09PWMuZGF0YSkpcmV0dXJuIGJ9ZWxzZSBpZigxOT09PWIudGFnJiZ2b2lkIDAhPT1iLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIpe2lmKDAhPT0oYi5mbGFncyYxMjgpKXJldHVybiBifWVsc2UgaWYobnVsbCE9PWIuY2hpbGQpe2IuY2hpbGQucmV0dXJuPWI7Yj1iLmNoaWxkO2NvbnRpbnVlfWlmKGI9PT1hKWJyZWFrO2Zvcig7bnVsbD09PWIuc2libGluZzspe2lmKG51bGw9PT1iLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiBudWxsO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ31yZXR1cm4gbnVsbH12YXIgTmg9W107XG5mdW5jdGlvbiBPaCgpe2Zvcih2YXIgYT0wO2E8TmgubGVuZ3RoO2ErKylOaFthXS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeT1udWxsO05oLmxlbmd0aD0wfXZhciBQaD11YS5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFFoPXVhLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFJoPTAsTj1udWxsLE89bnVsbCxQPW51bGwsU2g9ITEsVGg9ITEsVWg9MCxWaD0wO2Z1bmN0aW9uIFEoKXt0aHJvdyBFcnJvcihwKDMyMSkpO31mdW5jdGlvbiBXaChhLGIpe2lmKG51bGw9PT1iKXJldHVybiExO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGgmJmM8YS5sZW5ndGg7YysrKWlmKCFIZShhW2NdLGJbY10pKXJldHVybiExO3JldHVybiEwfVxuZnVuY3Rpb24gWGgoYSxiLGMsZCxlLGYpe1JoPWY7Tj1iO2IubWVtb2l6ZWRTdGF0ZT1udWxsO2IudXBkYXRlUXVldWU9bnVsbDtiLmxhbmVzPTA7UGguY3VycmVudD1udWxsPT09YXx8bnVsbD09PWEubWVtb2l6ZWRTdGF0ZT9ZaDpaaDthPWMoZCxlKTtpZihUaCl7Zj0wO2Rve1RoPSExO1VoPTA7aWYoMjU8PWYpdGhyb3cgRXJyb3IocCgzMDEpKTtmKz0xO1A9Tz1udWxsO2IudXBkYXRlUXVldWU9bnVsbDtQaC5jdXJyZW50PSRoO2E9YyhkLGUpfXdoaWxlKFRoKX1QaC5jdXJyZW50PWFpO2I9bnVsbCE9PU8mJm51bGwhPT1PLm5leHQ7Umg9MDtQPU89Tj1udWxsO1NoPSExO2lmKGIpdGhyb3cgRXJyb3IocCgzMDApKTtyZXR1cm4gYX1mdW5jdGlvbiBiaSgpe3ZhciBhPTAhPT1VaDtVaD0wO3JldHVybiBhfVxuZnVuY3Rpb24gY2koKXt2YXIgYT17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtudWxsPT09UD9OLm1lbW9pemVkU3RhdGU9UD1hOlA9UC5uZXh0PWE7cmV0dXJuIFB9ZnVuY3Rpb24gZGkoKXtpZihudWxsPT09Tyl7dmFyIGE9Ti5hbHRlcm5hdGU7YT1udWxsIT09YT9hLm1lbW9pemVkU3RhdGU6bnVsbH1lbHNlIGE9Ty5uZXh0O3ZhciBiPW51bGw9PT1QP04ubWVtb2l6ZWRTdGF0ZTpQLm5leHQ7aWYobnVsbCE9PWIpUD1iLE89YTtlbHNle2lmKG51bGw9PT1hKXRocm93IEVycm9yKHAoMzEwKSk7Tz1hO2E9e21lbW9pemVkU3RhdGU6Ty5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpPLmJhc2VTdGF0ZSxiYXNlUXVldWU6Ty5iYXNlUXVldWUscXVldWU6Ty5xdWV1ZSxuZXh0Om51bGx9O251bGw9PT1QP04ubWVtb2l6ZWRTdGF0ZT1QPWE6UD1QLm5leHQ9YX1yZXR1cm4gUH1cbmZ1bmN0aW9uIGVpKGEsYil7cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGI/YihhKTpifVxuZnVuY3Rpb24gZmkoYSl7dmFyIGI9ZGkoKSxjPWIucXVldWU7aWYobnVsbD09PWMpdGhyb3cgRXJyb3IocCgzMTEpKTtjLmxhc3RSZW5kZXJlZFJlZHVjZXI9YTt2YXIgZD1PLGU9ZC5iYXNlUXVldWUsZj1jLnBlbmRpbmc7aWYobnVsbCE9PWYpe2lmKG51bGwhPT1lKXt2YXIgZz1lLm5leHQ7ZS5uZXh0PWYubmV4dDtmLm5leHQ9Z31kLmJhc2VRdWV1ZT1lPWY7Yy5wZW5kaW5nPW51bGx9aWYobnVsbCE9PWUpe2Y9ZS5uZXh0O2Q9ZC5iYXNlU3RhdGU7dmFyIGg9Zz1udWxsLGs9bnVsbCxsPWY7ZG97dmFyIG09bC5sYW5lO2lmKChSaCZtKT09PW0pbnVsbCE9PWsmJihrPWsubmV4dD17bGFuZTowLGFjdGlvbjpsLmFjdGlvbixoYXNFYWdlclN0YXRlOmwuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOmwuZWFnZXJTdGF0ZSxuZXh0Om51bGx9KSxkPWwuaGFzRWFnZXJTdGF0ZT9sLmVhZ2VyU3RhdGU6YShkLGwuYWN0aW9uKTtlbHNle3ZhciBxPXtsYW5lOm0sYWN0aW9uOmwuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6bC5oYXNFYWdlclN0YXRlLFxuZWFnZXJTdGF0ZTpsLmVhZ2VyU3RhdGUsbmV4dDpudWxsfTtudWxsPT09az8oaD1rPXEsZz1kKTprPWsubmV4dD1xO04ubGFuZXN8PW07aGh8PW19bD1sLm5leHR9d2hpbGUobnVsbCE9PWwmJmwhPT1mKTtudWxsPT09az9nPWQ6ay5uZXh0PWg7SGUoZCxiLm1lbW9pemVkU3RhdGUpfHwoVWc9ITApO2IubWVtb2l6ZWRTdGF0ZT1kO2IuYmFzZVN0YXRlPWc7Yi5iYXNlUXVldWU9aztjLmxhc3RSZW5kZXJlZFN0YXRlPWR9YT1jLmludGVybGVhdmVkO2lmKG51bGwhPT1hKXtlPWE7ZG8gZj1lLmxhbmUsTi5sYW5lc3w9ZixoaHw9ZixlPWUubmV4dDt3aGlsZShlIT09YSl9ZWxzZSBudWxsPT09ZSYmKGMubGFuZXM9MCk7cmV0dXJuW2IubWVtb2l6ZWRTdGF0ZSxjLmRpc3BhdGNoXX1cbmZ1bmN0aW9uIGdpKGEpe3ZhciBiPWRpKCksYz1iLnF1ZXVlO2lmKG51bGw9PT1jKXRocm93IEVycm9yKHAoMzExKSk7Yy5sYXN0UmVuZGVyZWRSZWR1Y2VyPWE7dmFyIGQ9Yy5kaXNwYXRjaCxlPWMucGVuZGluZyxmPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09ZSl7Yy5wZW5kaW5nPW51bGw7dmFyIGc9ZT1lLm5leHQ7ZG8gZj1hKGYsZy5hY3Rpb24pLGc9Zy5uZXh0O3doaWxlKGchPT1lKTtIZShmLGIubWVtb2l6ZWRTdGF0ZSl8fChVZz0hMCk7Yi5tZW1vaXplZFN0YXRlPWY7bnVsbD09PWIuYmFzZVF1ZXVlJiYoYi5iYXNlU3RhdGU9Zik7Yy5sYXN0UmVuZGVyZWRTdGF0ZT1mfXJldHVybltmLGRdfWZ1bmN0aW9uIGhpKCl7fVxuZnVuY3Rpb24gaWkoYSxiKXt2YXIgYz1OLGQ9ZGkoKSxlPWIoKSxmPSFIZShkLm1lbW9pemVkU3RhdGUsZSk7ZiYmKGQubWVtb2l6ZWRTdGF0ZT1lLFVnPSEwKTtkPWQucXVldWU7amkoa2kuYmluZChudWxsLGMsZCxhKSxbYV0pO2lmKGQuZ2V0U25hcHNob3QhPT1ifHxmfHxudWxsIT09UCYmUC5tZW1vaXplZFN0YXRlLnRhZyYxKXtjLmZsYWdzfD0yMDQ4O2xpKDksbWkuYmluZChudWxsLGMsZCxlLGIpLHZvaWQgMCxudWxsKTtpZihudWxsPT09Uil0aHJvdyBFcnJvcihwKDM0OSkpOzAhPT0oUmgmMzApfHxuaShjLGIsZSl9cmV0dXJuIGV9ZnVuY3Rpb24gbmkoYSxiLGMpe2EuZmxhZ3N8PTE2Mzg0O2E9e2dldFNuYXBzaG90OmIsdmFsdWU6Y307Yj1OLnVwZGF0ZVF1ZXVlO251bGw9PT1iPyhiPXtsYXN0RWZmZWN0Om51bGwsc3RvcmVzOm51bGx9LE4udXBkYXRlUXVldWU9YixiLnN0b3Jlcz1bYV0pOihjPWIuc3RvcmVzLG51bGw9PT1jP2Iuc3RvcmVzPVthXTpjLnB1c2goYSkpfVxuZnVuY3Rpb24gbWkoYSxiLGMsZCl7Yi52YWx1ZT1jO2IuZ2V0U25hcHNob3Q9ZDtvaShiKSYmcGkoYSl9ZnVuY3Rpb24ga2koYSxiLGMpe3JldHVybiBjKGZ1bmN0aW9uKCl7b2koYikmJnBpKGEpfSl9ZnVuY3Rpb24gb2koYSl7dmFyIGI9YS5nZXRTbmFwc2hvdDthPWEudmFsdWU7dHJ5e3ZhciBjPWIoKTtyZXR1cm4hSGUoYSxjKX1jYXRjaChkKXtyZXR1cm4hMH19ZnVuY3Rpb24gcGkoYSl7dmFyIGI9WmcoYSwxKTtudWxsIT09YiYmbWgoYixhLDEsLTEpfVxuZnVuY3Rpb24gcWkoYSl7dmFyIGI9Y2koKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSYmKGE9YSgpKTtiLm1lbW9pemVkU3RhdGU9Yi5iYXNlU3RhdGU9YTthPXtwZW5kaW5nOm51bGwsaW50ZXJsZWF2ZWQ6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjplaSxsYXN0UmVuZGVyZWRTdGF0ZTphfTtiLnF1ZXVlPWE7YT1hLmRpc3BhdGNoPXJpLmJpbmQobnVsbCxOLGEpO3JldHVybltiLm1lbW9pemVkU3RhdGUsYV19XG5mdW5jdGlvbiBsaShhLGIsYyxkKXthPXt0YWc6YSxjcmVhdGU6YixkZXN0cm95OmMsZGVwczpkLG5leHQ6bnVsbH07Yj1OLnVwZGF0ZVF1ZXVlO251bGw9PT1iPyhiPXtsYXN0RWZmZWN0Om51bGwsc3RvcmVzOm51bGx9LE4udXBkYXRlUXVldWU9YixiLmxhc3RFZmZlY3Q9YS5uZXh0PWEpOihjPWIubGFzdEVmZmVjdCxudWxsPT09Yz9iLmxhc3RFZmZlY3Q9YS5uZXh0PWE6KGQ9Yy5uZXh0LGMubmV4dD1hLGEubmV4dD1kLGIubGFzdEVmZmVjdD1hKSk7cmV0dXJuIGF9ZnVuY3Rpb24gc2koKXtyZXR1cm4gZGkoKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIHRpKGEsYixjLGQpe3ZhciBlPWNpKCk7Ti5mbGFnc3w9YTtlLm1lbW9pemVkU3RhdGU9bGkoMXxiLGMsdm9pZCAwLHZvaWQgMD09PWQ/bnVsbDpkKX1cbmZ1bmN0aW9uIHVpKGEsYixjLGQpe3ZhciBlPWRpKCk7ZD12b2lkIDA9PT1kP251bGw6ZDt2YXIgZj12b2lkIDA7aWYobnVsbCE9PU8pe3ZhciBnPU8ubWVtb2l6ZWRTdGF0ZTtmPWcuZGVzdHJveTtpZihudWxsIT09ZCYmV2goZCxnLmRlcHMpKXtlLm1lbW9pemVkU3RhdGU9bGkoYixjLGYsZCk7cmV0dXJufX1OLmZsYWdzfD1hO2UubWVtb2l6ZWRTdGF0ZT1saSgxfGIsYyxmLGQpfWZ1bmN0aW9uIHZpKGEsYil7cmV0dXJuIHRpKDgzOTA2NTYsOCxhLGIpfWZ1bmN0aW9uIGppKGEsYil7cmV0dXJuIHVpKDIwNDgsOCxhLGIpfWZ1bmN0aW9uIHdpKGEsYil7cmV0dXJuIHVpKDQsMixhLGIpfWZ1bmN0aW9uIHhpKGEsYil7cmV0dXJuIHVpKDQsNCxhLGIpfVxuZnVuY3Rpb24geWkoYSxiKXtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYilyZXR1cm4gYT1hKCksYihhKSxmdW5jdGlvbigpe2IobnVsbCl9O2lmKG51bGwhPT1iJiZ2b2lkIDAhPT1iKXJldHVybiBhPWEoKSxiLmN1cnJlbnQ9YSxmdW5jdGlvbigpe2IuY3VycmVudD1udWxsfX1mdW5jdGlvbiB6aShhLGIsYyl7Yz1udWxsIT09YyYmdm9pZCAwIT09Yz9jLmNvbmNhdChbYV0pOm51bGw7cmV0dXJuIHVpKDQsNCx5aS5iaW5kKG51bGwsYixhKSxjKX1mdW5jdGlvbiBBaSgpe31mdW5jdGlvbiBCaShhLGIpe3ZhciBjPWRpKCk7Yj12b2lkIDA9PT1iP251bGw6Yjt2YXIgZD1jLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWQmJm51bGwhPT1iJiZXaChiLGRbMV0pKXJldHVybiBkWzBdO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX1cbmZ1bmN0aW9uIENpKGEsYil7dmFyIGM9ZGkoKTtiPXZvaWQgMD09PWI/bnVsbDpiO3ZhciBkPWMubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09ZCYmbnVsbCE9PWImJldoKGIsZFsxXSkpcmV0dXJuIGRbMF07YT1hKCk7Yy5tZW1vaXplZFN0YXRlPVthLGJdO3JldHVybiBhfWZ1bmN0aW9uIERpKGEsYixjKXtpZigwPT09KFJoJjIxKSlyZXR1cm4gYS5iYXNlU3RhdGUmJihhLmJhc2VTdGF0ZT0hMSxVZz0hMCksYS5tZW1vaXplZFN0YXRlPWM7SGUoYyxiKXx8KGM9eWMoKSxOLmxhbmVzfD1jLGhofD1jLGEuYmFzZVN0YXRlPSEwKTtyZXR1cm4gYn1mdW5jdGlvbiBFaShhLGIpe3ZhciBjPUM7Qz0wIT09YyYmND5jP2M6NDthKCEwKTt2YXIgZD1RaC50cmFuc2l0aW9uO1FoLnRyYW5zaXRpb249e307dHJ5e2EoITEpLGIoKX1maW5hbGx5e0M9YyxRaC50cmFuc2l0aW9uPWR9fWZ1bmN0aW9uIEZpKCl7cmV0dXJuIGRpKCkubWVtb2l6ZWRTdGF0ZX1cbmZ1bmN0aW9uIEdpKGEsYixjKXt2YXIgZD1saChhKTtjPXtsYW5lOmQsYWN0aW9uOmMsaGFzRWFnZXJTdGF0ZTohMSxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfTtpZihIaShhKSlJaShiLGMpO2Vsc2UgaWYoYz1ZZyhhLGIsYyxkKSxudWxsIT09Yyl7dmFyIGU9TCgpO21oKGMsYSxkLGUpO0ppKGMsYixkKX19XG5mdW5jdGlvbiByaShhLGIsYyl7dmFyIGQ9bGgoYSksZT17bGFuZTpkLGFjdGlvbjpjLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH07aWYoSGkoYSkpSWkoYixlKTtlbHNle3ZhciBmPWEuYWx0ZXJuYXRlO2lmKDA9PT1hLmxhbmVzJiYobnVsbD09PWZ8fDA9PT1mLmxhbmVzKSYmKGY9Yi5sYXN0UmVuZGVyZWRSZWR1Y2VyLG51bGwhPT1mKSl0cnl7dmFyIGc9Yi5sYXN0UmVuZGVyZWRTdGF0ZSxoPWYoZyxjKTtlLmhhc0VhZ2VyU3RhdGU9ITA7ZS5lYWdlclN0YXRlPWg7aWYoSGUoaCxnKSl7dmFyIGs9Yi5pbnRlcmxlYXZlZDtudWxsPT09az8oZS5uZXh0PWUsWGcoYikpOihlLm5leHQ9ay5uZXh0LGsubmV4dD1lKTtiLmludGVybGVhdmVkPWU7cmV0dXJufX1jYXRjaChsKXt9ZmluYWxseXt9Yz1ZZyhhLGIsZSxkKTtudWxsIT09YyYmKGU9TCgpLG1oKGMsYSxkLGUpLEppKGMsYixkKSl9fVxuZnVuY3Rpb24gSGkoYSl7dmFyIGI9YS5hbHRlcm5hdGU7cmV0dXJuIGE9PT1OfHxudWxsIT09YiYmYj09PU59ZnVuY3Rpb24gSWkoYSxiKXtUaD1TaD0hMDt2YXIgYz1hLnBlbmRpbmc7bnVsbD09PWM/Yi5uZXh0PWI6KGIubmV4dD1jLm5leHQsYy5uZXh0PWIpO2EucGVuZGluZz1ifWZ1bmN0aW9uIEppKGEsYixjKXtpZigwIT09KGMmNDE5NDI0MCkpe3ZhciBkPWIubGFuZXM7ZCY9YS5wZW5kaW5nTGFuZXM7Y3w9ZDtiLmxhbmVzPWM7Q2MoYSxjKX19XG52YXIgYWk9e3JlYWRDb250ZXh0OlZnLHVzZUNhbGxiYWNrOlEsdXNlQ29udGV4dDpRLHVzZUVmZmVjdDpRLHVzZUltcGVyYXRpdmVIYW5kbGU6USx1c2VJbnNlcnRpb25FZmZlY3Q6USx1c2VMYXlvdXRFZmZlY3Q6USx1c2VNZW1vOlEsdXNlUmVkdWNlcjpRLHVzZVJlZjpRLHVzZVN0YXRlOlEsdXNlRGVidWdWYWx1ZTpRLHVzZURlZmVycmVkVmFsdWU6USx1c2VUcmFuc2l0aW9uOlEsdXNlTXV0YWJsZVNvdXJjZTpRLHVzZVN5bmNFeHRlcm5hbFN0b3JlOlEsdXNlSWQ6USx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LFloPXtyZWFkQ29udGV4dDpWZyx1c2VDYWxsYmFjazpmdW5jdGlvbihhLGIpe2NpKCkubWVtb2l6ZWRTdGF0ZT1bYSx2b2lkIDA9PT1iP251bGw6Yl07cmV0dXJuIGF9LHVzZUNvbnRleHQ6VmcsdXNlRWZmZWN0OnZpLHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oYSxiLGMpe2M9bnVsbCE9PWMmJnZvaWQgMCE9PWM/Yy5jb25jYXQoW2FdKTpudWxsO3JldHVybiB0aSg0MTk0MzA4LFxuNCx5aS5iaW5kKG51bGwsYixhKSxjKX0sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRpKDQxOTQzMDgsNCxhLGIpfSx1c2VJbnNlcnRpb25FZmZlY3Q6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGkoNCwyLGEsYil9LHVzZU1lbW86ZnVuY3Rpb24oYSxiKXt2YXIgYz1jaSgpO2I9dm9pZCAwPT09Yj9udWxsOmI7YT1hKCk7Yy5tZW1vaXplZFN0YXRlPVthLGJdO3JldHVybiBhfSx1c2VSZWR1Y2VyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1jaSgpO2I9dm9pZCAwIT09Yz9jKGIpOmI7ZC5tZW1vaXplZFN0YXRlPWQuYmFzZVN0YXRlPWI7YT17cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6YSxsYXN0UmVuZGVyZWRTdGF0ZTpifTtkLnF1ZXVlPWE7YT1hLmRpc3BhdGNoPUdpLmJpbmQobnVsbCxOLGEpO3JldHVybltkLm1lbW9pemVkU3RhdGUsYV19LHVzZVJlZjpmdW5jdGlvbihhKXt2YXIgYj1cbmNpKCk7YT17Y3VycmVudDphfTtyZXR1cm4gYi5tZW1vaXplZFN0YXRlPWF9LHVzZVN0YXRlOnFpLHVzZURlYnVnVmFsdWU6QWksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gY2koKS5tZW1vaXplZFN0YXRlPWF9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgYT1xaSghMSksYj1hWzBdO2E9RWkuYmluZChudWxsLGFbMV0pO2NpKCkubWVtb2l6ZWRTdGF0ZT1hO3JldHVybltiLGFdfSx1c2VNdXRhYmxlU291cmNlOmZ1bmN0aW9uKCl7fSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TixlPWNpKCk7aWYoSSl7aWYodm9pZCAwPT09Yyl0aHJvdyBFcnJvcihwKDQwNykpO2M9YygpfWVsc2V7Yz1iKCk7aWYobnVsbD09PVIpdGhyb3cgRXJyb3IocCgzNDkpKTswIT09KFJoJjMwKXx8bmkoZCxiLGMpfWUubWVtb2l6ZWRTdGF0ZT1jO3ZhciBmPXt2YWx1ZTpjLGdldFNuYXBzaG90OmJ9O2UucXVldWU9Zjt2aShraS5iaW5kKG51bGwsZCxcbmYsYSksW2FdKTtkLmZsYWdzfD0yMDQ4O2xpKDksbWkuYmluZChudWxsLGQsZixjLGIpLHZvaWQgMCxudWxsKTtyZXR1cm4gY30sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgYT1jaSgpLGI9Ui5pZGVudGlmaWVyUHJlZml4O2lmKEkpe3ZhciBjPXNnO3ZhciBkPXJnO2M9KGQmfigxPDwzMi1vYyhkKS0xKSkudG9TdHJpbmcoMzIpK2M7Yj1cIjpcIitiK1wiUlwiK2M7Yz1VaCsrOzA8YyYmKGIrPVwiSFwiK2MudG9TdHJpbmcoMzIpKTtiKz1cIjpcIn1lbHNlIGM9VmgrKyxiPVwiOlwiK2IrXCJyXCIrYy50b1N0cmluZygzMikrXCI6XCI7cmV0dXJuIGEubWVtb2l6ZWRTdGF0ZT1ifSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LFpoPXtyZWFkQ29udGV4dDpWZyx1c2VDYWxsYmFjazpCaSx1c2VDb250ZXh0OlZnLHVzZUVmZmVjdDpqaSx1c2VJbXBlcmF0aXZlSGFuZGxlOnppLHVzZUluc2VydGlvbkVmZmVjdDp3aSx1c2VMYXlvdXRFZmZlY3Q6eGksdXNlTWVtbzpDaSx1c2VSZWR1Y2VyOmZpLHVzZVJlZjpzaSx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBmaShlaSl9LFxudXNlRGVidWdWYWx1ZTpBaSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPWRpKCk7cmV0dXJuIERpKGIsTy5tZW1vaXplZFN0YXRlLGEpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9ZmkoZWkpWzBdLGI9ZGkoKS5tZW1vaXplZFN0YXRlO3JldHVyblthLGJdfSx1c2VNdXRhYmxlU291cmNlOmhpLHVzZVN5bmNFeHRlcm5hbFN0b3JlOmlpLHVzZUlkOkZpLHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sJGg9e3JlYWRDb250ZXh0OlZnLHVzZUNhbGxiYWNrOkJpLHVzZUNvbnRleHQ6VmcsdXNlRWZmZWN0OmppLHVzZUltcGVyYXRpdmVIYW5kbGU6emksdXNlSW5zZXJ0aW9uRWZmZWN0OndpLHVzZUxheW91dEVmZmVjdDp4aSx1c2VNZW1vOkNpLHVzZVJlZHVjZXI6Z2ksdXNlUmVmOnNpLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGdpKGVpKX0sdXNlRGVidWdWYWx1ZTpBaSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPWRpKCk7cmV0dXJuIG51bGw9PT1cbk8/Yi5tZW1vaXplZFN0YXRlPWE6RGkoYixPLm1lbW9pemVkU3RhdGUsYSl9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgYT1naShlaSlbMF0sYj1kaSgpLm1lbW9pemVkU3RhdGU7cmV0dXJuW2EsYl19LHVzZU11dGFibGVTb3VyY2U6aGksdXNlU3luY0V4dGVybmFsU3RvcmU6aWksdXNlSWQ6RmksdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfTtmdW5jdGlvbiBLaShhLGIpe3RyeXt2YXIgYz1cIlwiLGQ9YjtkbyBjKz1QYShkKSxkPWQucmV0dXJuO3doaWxlKGQpO3ZhciBlPWN9Y2F0Y2goZil7ZT1cIlxcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IFwiK2YubWVzc2FnZStcIlxcblwiK2Yuc3RhY2t9cmV0dXJue3ZhbHVlOmEsc291cmNlOmIsc3RhY2s6ZSxkaWdlc3Q6bnVsbH19ZnVuY3Rpb24gTGkoYSxiLGMpe3JldHVybnt2YWx1ZTphLHNvdXJjZTpudWxsLHN0YWNrOm51bGwhPWM/YzpudWxsLGRpZ2VzdDpudWxsIT1iP2I6bnVsbH19XG5mdW5jdGlvbiBNaShhLGIpe3RyeXtjb25zb2xlLmVycm9yKGIudmFsdWUpfWNhdGNoKGMpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBjO30pfX12YXIgTmk9XCJmdW5jdGlvblwiPT09dHlwZW9mIFdlYWtNYXA/V2Vha01hcDpNYXA7ZnVuY3Rpb24gT2koYSxiLGMpe2M9Y2goLTEsYyk7Yy50YWc9MztjLnBheWxvYWQ9e2VsZW1lbnQ6bnVsbH07dmFyIGQ9Yi52YWx1ZTtjLmNhbGxiYWNrPWZ1bmN0aW9uKCl7UGl8fChQaT0hMCxRaT1kKTtNaShhLGIpfTtyZXR1cm4gY31cbmZ1bmN0aW9uIFJpKGEsYixjKXtjPWNoKC0xLGMpO2MudGFnPTM7dmFyIGQ9YS50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZCl7dmFyIGU9Yi52YWx1ZTtjLnBheWxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZChlKX07Yy5jYWxsYmFjaz1mdW5jdGlvbigpe01pKGEsYil9fXZhciBmPWEuc3RhdGVOb2RlO251bGwhPT1mJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgZi5jb21wb25lbnREaWRDYXRjaCYmKGMuY2FsbGJhY2s9ZnVuY3Rpb24oKXtNaShhLGIpO1wiZnVuY3Rpb25cIiE9PXR5cGVvZiBkJiYobnVsbD09PVNpP1NpPW5ldyBTZXQoW3RoaXNdKTpTaS5hZGQodGhpcykpO3ZhciBjPWIuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaChiLnZhbHVlLHtjb21wb25lbnRTdGFjazpudWxsIT09Yz9jOlwiXCJ9KX0pO3JldHVybiBjfVxuZnVuY3Rpb24gVGkoYSxiLGMpe3ZhciBkPWEucGluZ0NhY2hlO2lmKG51bGw9PT1kKXtkPWEucGluZ0NhY2hlPW5ldyBOaTt2YXIgZT1uZXcgU2V0O2Quc2V0KGIsZSl9ZWxzZSBlPWQuZ2V0KGIpLHZvaWQgMD09PWUmJihlPW5ldyBTZXQsZC5zZXQoYixlKSk7ZS5oYXMoYyl8fChlLmFkZChjKSxhPVVpLmJpbmQobnVsbCxhLGIsYyksYi50aGVuKGEsYSkpfWZ1bmN0aW9uIFZpKGEpe2Rve3ZhciBiO2lmKGI9MTM9PT1hLnRhZyliPWEubWVtb2l6ZWRTdGF0ZSxiPW51bGwhPT1iP251bGwhPT1iLmRlaHlkcmF0ZWQ/ITA6ITE6ITA7aWYoYilyZXR1cm4gYTthPWEucmV0dXJufXdoaWxlKG51bGwhPT1hKTtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIFdpKGEsYixjLGQsZSl7aWYoMD09PShhLm1vZGUmMSkpcmV0dXJuIGE9PT1iP2EuZmxhZ3N8PTY1NTM2OihhLmZsYWdzfD0xMjgsYy5mbGFnc3w9MTMxMDcyLGMuZmxhZ3MmPS01MjgwNSwxPT09Yy50YWcmJihudWxsPT09Yy5hbHRlcm5hdGU/Yy50YWc9MTc6KGI9Y2goLTEsMSksYi50YWc9MixkaChjLGIsMSkpKSxjLmxhbmVzfD0xKSxhO2EuZmxhZ3N8PTY1NTM2O2EubGFuZXM9ZTtyZXR1cm4gYX12YXIgWGk9dWEuUmVhY3RDdXJyZW50T3duZXIsVWc9ITE7ZnVuY3Rpb24gWWkoYSxiLGMsZCl7Yi5jaGlsZD1udWxsPT09YT9DaChiLG51bGwsYyxkKTpCaChiLGEuY2hpbGQsYyxkKX1cbmZ1bmN0aW9uIFppKGEsYixjLGQsZSl7Yz1jLnJlbmRlcjt2YXIgZj1iLnJlZjtUZyhiLGUpO2Q9WGgoYSxiLGMsZCxmLGUpO2M9YmkoKTtpZihudWxsIT09YSYmIVVnKXJldHVybiBiLnVwZGF0ZVF1ZXVlPWEudXBkYXRlUXVldWUsYi5mbGFncyY9LTIwNTMsYS5sYW5lcyY9fmUsJGkoYSxiLGUpO0kmJmMmJnZnKGIpO2IuZmxhZ3N8PTE7WWkoYSxiLGQsZSk7cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBhaihhLGIsYyxkLGUpe2lmKG51bGw9PT1hKXt2YXIgZj1jLnR5cGU7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGYmJiFiaihmKSYmdm9pZCAwPT09Zi5kZWZhdWx0UHJvcHMmJm51bGw9PT1jLmNvbXBhcmUmJnZvaWQgMD09PWMuZGVmYXVsdFByb3BzKXJldHVybiBiLnRhZz0xNSxiLnR5cGU9ZixjaihhLGIsZixkLGUpO2E9eWgoYy50eXBlLG51bGwsZCxiLGIubW9kZSxlKTthLnJlZj1iLnJlZjthLnJldHVybj1iO3JldHVybiBiLmNoaWxkPWF9Zj1hLmNoaWxkO2lmKDA9PT0oYS5sYW5lcyZlKSl7dmFyIGc9Zi5tZW1vaXplZFByb3BzO2M9Yy5jb21wYXJlO2M9bnVsbCE9PWM/YzpJZTtpZihjKGcsZCkmJmEucmVmPT09Yi5yZWYpcmV0dXJuICRpKGEsYixlKX1iLmZsYWdzfD0xO2E9d2goZixkKTthLnJlZj1iLnJlZjthLnJldHVybj1iO3JldHVybiBiLmNoaWxkPWF9XG5mdW5jdGlvbiBjaihhLGIsYyxkLGUpe2lmKG51bGwhPT1hKXt2YXIgZj1hLm1lbW9pemVkUHJvcHM7aWYoSWUoZixkKSYmYS5yZWY9PT1iLnJlZilpZihVZz0hMSxiLnBlbmRpbmdQcm9wcz1kPWYsMCE9PShhLmxhbmVzJmUpKTAhPT0oYS5mbGFncyYxMzEwNzIpJiYoVWc9ITApO2Vsc2UgcmV0dXJuIGIubGFuZXM9YS5sYW5lcywkaShhLGIsZSl9cmV0dXJuIGRqKGEsYixjLGQsZSl9XG5mdW5jdGlvbiBlaihhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1kLmNoaWxkcmVuLGY9bnVsbCE9PWE/YS5tZW1vaXplZFN0YXRlOm51bGw7aWYoXCJoaWRkZW5cIj09PWQubW9kZSlpZigwPT09KGIubW9kZSYxKSliLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9LEcoZmosZ2opLGdqfD1jO2Vsc2V7aWYoMD09PShjJjEwNzM3NDE4MjQpKXJldHVybiBhPW51bGwhPT1mP2YuYmFzZUxhbmVzfGM6YyxiLmxhbmVzPWIuY2hpbGRMYW5lcz0xMDczNzQxODI0LGIubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOmEsY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6bnVsbH0sYi51cGRhdGVRdWV1ZT1udWxsLEcoZmosZ2opLGdqfD1hLG51bGw7Yi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfTtkPW51bGwhPT1mP2YuYmFzZUxhbmVzOmM7Ryhmaixnaik7Z2p8PWR9ZWxzZSBudWxsIT09XG5mPyhkPWYuYmFzZUxhbmVzfGMsYi5tZW1vaXplZFN0YXRlPW51bGwpOmQ9YyxHKGZqLGdqKSxnanw9ZDtZaShhLGIsZSxjKTtyZXR1cm4gYi5jaGlsZH1mdW5jdGlvbiBoaihhLGIpe3ZhciBjPWIucmVmO2lmKG51bGw9PT1hJiZudWxsIT09Y3x8bnVsbCE9PWEmJmEucmVmIT09YyliLmZsYWdzfD01MTIsYi5mbGFnc3w9MjA5NzE1Mn1mdW5jdGlvbiBkaihhLGIsYyxkLGUpe3ZhciBmPVpmKGMpP1hmOkguY3VycmVudDtmPVlmKGIsZik7VGcoYixlKTtjPVhoKGEsYixjLGQsZixlKTtkPWJpKCk7aWYobnVsbCE9PWEmJiFVZylyZXR1cm4gYi51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlLGIuZmxhZ3MmPS0yMDUzLGEubGFuZXMmPX5lLCRpKGEsYixlKTtJJiZkJiZ2ZyhiKTtiLmZsYWdzfD0xO1lpKGEsYixjLGUpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gaWooYSxiLGMsZCxlKXtpZihaZihjKSl7dmFyIGY9ITA7Y2coYil9ZWxzZSBmPSExO1RnKGIsZSk7aWYobnVsbD09PWIuc3RhdGVOb2RlKWpqKGEsYikscGgoYixjLGQpLHJoKGIsYyxkLGUpLGQ9ITA7ZWxzZSBpZihudWxsPT09YSl7dmFyIGc9Yi5zdGF0ZU5vZGUsaD1iLm1lbW9pemVkUHJvcHM7Zy5wcm9wcz1oO3ZhciBrPWcuY29udGV4dCxsPWMuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBsJiZudWxsIT09bD9sPVZnKGwpOihsPVpmKGMpP1hmOkguY3VycmVudCxsPVlmKGIsbCkpO3ZhciBtPWMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLHE9XCJmdW5jdGlvblwiPT09dHlwZW9mIG18fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlO3F8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHxcbihoIT09ZHx8ayE9PWwpJiZxaChiLGcsZCxsKTskZz0hMTt2YXIgcj1iLm1lbW9pemVkU3RhdGU7Zy5zdGF0ZT1yO2doKGIsZCxnLGUpO2s9Yi5tZW1vaXplZFN0YXRlO2ghPT1kfHxyIT09a3x8V2YuY3VycmVudHx8JGc/KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBtJiYoa2goYixjLG0sZCksaz1iLm1lbW9pemVkU3RhdGUpLChoPSRnfHxvaChiLGMsaCxkLHIsayxsKSk/KHF8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxNb3VudHx8KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxNb3VudCYmZy5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZnLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkTW91bnQmJihiLmZsYWdzfD00MTk0MzA4KSk6XG4oXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkTW91bnQmJihiLmZsYWdzfD00MTk0MzA4KSxiLm1lbW9pemVkUHJvcHM9ZCxiLm1lbW9pemVkU3RhdGU9ayksZy5wcm9wcz1kLGcuc3RhdGU9ayxnLmNvbnRleHQ9bCxkPWgpOihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZmxhZ3N8PTQxOTQzMDgpLGQ9ITEpfWVsc2V7Zz1iLnN0YXRlTm9kZTtiaChhLGIpO2g9Yi5tZW1vaXplZFByb3BzO2w9Yi50eXBlPT09Yi5lbGVtZW50VHlwZT9oOkxnKGIudHlwZSxoKTtnLnByb3BzPWw7cT1iLnBlbmRpbmdQcm9wcztyPWcuY29udGV4dDtrPWMuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBrJiZudWxsIT09az9rPVZnKGspOihrPVpmKGMpP1hmOkguY3VycmVudCxrPVlmKGIsaykpO3ZhciB5PWMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyhtPVwiZnVuY3Rpb25cIj09PXR5cGVvZiB5fHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSl8fFxuXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChoIT09cXx8ciE9PWspJiZxaChiLGcsZCxrKTskZz0hMTtyPWIubWVtb2l6ZWRTdGF0ZTtnLnN0YXRlPXI7Z2goYixkLGcsZSk7dmFyIG49Yi5tZW1vaXplZFN0YXRlO2ghPT1xfHxyIT09bnx8V2YuY3VycmVudHx8JGc/KFwiZnVuY3Rpb25cIj09PXR5cGVvZiB5JiYoa2goYixjLHksZCksbj1iLm1lbW9pemVkU3RhdGUpLChsPSRnfHxvaChiLGMsbCxkLHIsbixrKXx8ITEpPyhtfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50V2lsbFVwZGF0ZXx8KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxVcGRhdGUmJmcuY29tcG9uZW50V2lsbFVwZGF0ZShkLG4sayksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJlxuZy5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShkLG4saykpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudERpZFVwZGF0ZSYmKGIuZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYoYi5mbGFnc3w9MTAyNCkpOihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnI9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcj09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTEwMjQpLGIubWVtb2l6ZWRQcm9wcz1kLGIubWVtb2l6ZWRTdGF0ZT1uKSxnLnByb3BzPWQsZy5zdGF0ZT1uLGcuY29udGV4dD1rLGQ9bCk6KFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudERpZFVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcj09PVxuYS5tZW1vaXplZFN0YXRlfHwoYi5mbGFnc3w9NCksXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnI9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD0xMDI0KSxkPSExKX1yZXR1cm4ga2ooYSxiLGMsZCxmLGUpfVxuZnVuY3Rpb24ga2ooYSxiLGMsZCxlLGYpe2hqKGEsYik7dmFyIGc9MCE9PShiLmZsYWdzJjEyOCk7aWYoIWQmJiFnKXJldHVybiBlJiZkZyhiLGMsITEpLCRpKGEsYixmKTtkPWIuc3RhdGVOb2RlO1hpLmN1cnJlbnQ9Yjt2YXIgaD1nJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYy5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I/bnVsbDpkLnJlbmRlcigpO2IuZmxhZ3N8PTE7bnVsbCE9PWEmJmc/KGIuY2hpbGQ9QmgoYixhLmNoaWxkLG51bGwsZiksYi5jaGlsZD1CaChiLG51bGwsaCxmKSk6WWkoYSxiLGgsZik7Yi5tZW1vaXplZFN0YXRlPWQuc3RhdGU7ZSYmZGcoYixjLCEwKTtyZXR1cm4gYi5jaGlsZH1mdW5jdGlvbiBsaihhKXt2YXIgYj1hLnN0YXRlTm9kZTtiLnBlbmRpbmdDb250ZXh0P2FnKGEsYi5wZW5kaW5nQ29udGV4dCxiLnBlbmRpbmdDb250ZXh0IT09Yi5jb250ZXh0KTpiLmNvbnRleHQmJmFnKGEsYi5jb250ZXh0LCExKTtJaChhLGIuY29udGFpbmVySW5mbyl9XG5mdW5jdGlvbiBtaihhLGIsYyxkLGUpe0lnKCk7SmcoZSk7Yi5mbGFnc3w9MjU2O1lpKGEsYixjLGQpO3JldHVybiBiLmNoaWxkfXZhciBuaj17ZGVoeWRyYXRlZDpudWxsLHRyZWVDb250ZXh0Om51bGwscmV0cnlMYW5lOjB9O2Z1bmN0aW9uIG9qKGEpe3JldHVybntiYXNlTGFuZXM6YSxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfX1cbmZ1bmN0aW9uIHBqKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcyxlPU0uY3VycmVudCxmPSExLGc9MCE9PShiLmZsYWdzJjEyOCksaDsoaD1nKXx8KGg9bnVsbCE9PWEmJm51bGw9PT1hLm1lbW9pemVkU3RhdGU/ITE6MCE9PShlJjIpKTtpZihoKWY9ITAsYi5mbGFncyY9LTEyOTtlbHNlIGlmKG51bGw9PT1hfHxudWxsIT09YS5tZW1vaXplZFN0YXRlKWV8PTE7RyhNLGUmMSk7aWYobnVsbD09PWEpe0VnKGIpO2E9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1hJiYoYT1hLmRlaHlkcmF0ZWQsbnVsbCE9PWEpKXJldHVybiAwPT09KGIubW9kZSYxKT9iLmxhbmVzPTE6XCIkIVwiPT09YS5kYXRhP2IubGFuZXM9ODpiLmxhbmVzPTEwNzM3NDE4MjQsbnVsbDtnPWQuY2hpbGRyZW47YT1kLmZhbGxiYWNrO3JldHVybiBmPyhkPWIubW9kZSxmPWIuY2hpbGQsZz17bW9kZTpcImhpZGRlblwiLGNoaWxkcmVuOmd9LDA9PT0oZCYxKSYmbnVsbCE9PWY/KGYuY2hpbGRMYW5lcz0wLGYucGVuZGluZ1Byb3BzPVxuZyk6Zj1xaihnLGQsMCxudWxsKSxhPUFoKGEsZCxjLG51bGwpLGYucmV0dXJuPWIsYS5yZXR1cm49YixmLnNpYmxpbmc9YSxiLmNoaWxkPWYsYi5jaGlsZC5tZW1vaXplZFN0YXRlPW9qKGMpLGIubWVtb2l6ZWRTdGF0ZT1uaixhKTpyaihiLGcpfWU9YS5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1lJiYoaD1lLmRlaHlkcmF0ZWQsbnVsbCE9PWgpKXJldHVybiBzaihhLGIsZyxkLGgsZSxjKTtpZihmKXtmPWQuZmFsbGJhY2s7Zz1iLm1vZGU7ZT1hLmNoaWxkO2g9ZS5zaWJsaW5nO3ZhciBrPXttb2RlOlwiaGlkZGVuXCIsY2hpbGRyZW46ZC5jaGlsZHJlbn07MD09PShnJjEpJiZiLmNoaWxkIT09ZT8oZD1iLmNoaWxkLGQuY2hpbGRMYW5lcz0wLGQucGVuZGluZ1Byb3BzPWssYi5kZWxldGlvbnM9bnVsbCk6KGQ9d2goZSxrKSxkLnN1YnRyZWVGbGFncz1lLnN1YnRyZWVGbGFncyYxNDY4MDA2NCk7bnVsbCE9PWg/Zj13aChoLGYpOihmPUFoKGYsZyxjLG51bGwpLGYuZmxhZ3N8PTIpO2YucmV0dXJuPVxuYjtkLnJldHVybj1iO2Quc2libGluZz1mO2IuY2hpbGQ9ZDtkPWY7Zj1iLmNoaWxkO2c9YS5jaGlsZC5tZW1vaXplZFN0YXRlO2c9bnVsbD09PWc/b2ooYyk6e2Jhc2VMYW5lczpnLmJhc2VMYW5lc3xjLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOmcudHJhbnNpdGlvbnN9O2YubWVtb2l6ZWRTdGF0ZT1nO2YuY2hpbGRMYW5lcz1hLmNoaWxkTGFuZXMmfmM7Yi5tZW1vaXplZFN0YXRlPW5qO3JldHVybiBkfWY9YS5jaGlsZDthPWYuc2libGluZztkPXdoKGYse21vZGU6XCJ2aXNpYmxlXCIsY2hpbGRyZW46ZC5jaGlsZHJlbn0pOzA9PT0oYi5tb2RlJjEpJiYoZC5sYW5lcz1jKTtkLnJldHVybj1iO2Quc2libGluZz1udWxsO251bGwhPT1hJiYoYz1iLmRlbGV0aW9ucyxudWxsPT09Yz8oYi5kZWxldGlvbnM9W2FdLGIuZmxhZ3N8PTE2KTpjLnB1c2goYSkpO2IuY2hpbGQ9ZDtiLm1lbW9pemVkU3RhdGU9bnVsbDtyZXR1cm4gZH1cbmZ1bmN0aW9uIHJqKGEsYil7Yj1xaih7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjpifSxhLm1vZGUsMCxudWxsKTtiLnJldHVybj1hO3JldHVybiBhLmNoaWxkPWJ9ZnVuY3Rpb24gdGooYSxiLGMsZCl7bnVsbCE9PWQmJkpnKGQpO0JoKGIsYS5jaGlsZCxudWxsLGMpO2E9cmooYixiLnBlbmRpbmdQcm9wcy5jaGlsZHJlbik7YS5mbGFnc3w9MjtiLm1lbW9pemVkU3RhdGU9bnVsbDtyZXR1cm4gYX1cbmZ1bmN0aW9uIHNqKGEsYixjLGQsZSxmLGcpe2lmKGMpe2lmKGIuZmxhZ3MmMjU2KXJldHVybiBiLmZsYWdzJj0tMjU3LGQ9TGkoRXJyb3IocCg0MjIpKSksdGooYSxiLGcsZCk7aWYobnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSlyZXR1cm4gYi5jaGlsZD1hLmNoaWxkLGIuZmxhZ3N8PTEyOCxudWxsO2Y9ZC5mYWxsYmFjaztlPWIubW9kZTtkPXFqKHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOmQuY2hpbGRyZW59LGUsMCxudWxsKTtmPUFoKGYsZSxnLG51bGwpO2YuZmxhZ3N8PTI7ZC5yZXR1cm49YjtmLnJldHVybj1iO2Quc2libGluZz1mO2IuY2hpbGQ9ZDswIT09KGIubW9kZSYxKSYmQmgoYixhLmNoaWxkLG51bGwsZyk7Yi5jaGlsZC5tZW1vaXplZFN0YXRlPW9qKGcpO2IubWVtb2l6ZWRTdGF0ZT1uajtyZXR1cm4gZn1pZigwPT09KGIubW9kZSYxKSlyZXR1cm4gdGooYSxiLGcsbnVsbCk7aWYoXCIkIVwiPT09ZS5kYXRhKXtkPWUubmV4dFNpYmxpbmcmJmUubmV4dFNpYmxpbmcuZGF0YXNldDtcbmlmKGQpdmFyIGg9ZC5kZ3N0O2Q9aDtmPUVycm9yKHAoNDE5KSk7ZD1MaShmLGQsdm9pZCAwKTtyZXR1cm4gdGooYSxiLGcsZCl9aD0wIT09KGcmYS5jaGlsZExhbmVzKTtpZihVZ3x8aCl7ZD1SO2lmKG51bGwhPT1kKXtzd2l0Y2goZyYtZyl7Y2FzZSA0OmU9MjticmVhaztjYXNlIDE2OmU9ODticmVhaztjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOmNhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6ZT0zMjticmVhaztjYXNlIDUzNjg3MDkxMjplPTI2ODQzNTQ1NjticmVhaztkZWZhdWx0OmU9MH1lPTAhPT0oZSYoZC5zdXNwZW5kZWRMYW5lc3xnKSk/MDplO1xuMCE9PWUmJmUhPT1mLnJldHJ5TGFuZSYmKGYucmV0cnlMYW5lPWUsWmcoYSxlKSxtaChkLGEsZSwtMSkpfXVqKCk7ZD1MaShFcnJvcihwKDQyMSkpKTtyZXR1cm4gdGooYSxiLGcsZCl9aWYoXCIkP1wiPT09ZS5kYXRhKXJldHVybiBiLmZsYWdzfD0xMjgsYi5jaGlsZD1hLmNoaWxkLGI9dmouYmluZChudWxsLGEpLGUuX3JlYWN0UmV0cnk9YixudWxsO2E9Zi50cmVlQ29udGV4dDt5Zz1MZihlLm5leHRTaWJsaW5nKTt4Zz1iO0k9ITA7emc9bnVsbDtudWxsIT09YSYmKG9nW3BnKytdPXJnLG9nW3BnKytdPXNnLG9nW3BnKytdPXFnLHJnPWEuaWQsc2c9YS5vdmVyZmxvdyxxZz1iKTtiPXJqKGIsZC5jaGlsZHJlbik7Yi5mbGFnc3w9NDA5NjtyZXR1cm4gYn1mdW5jdGlvbiB3aihhLGIsYyl7YS5sYW5lc3w9Yjt2YXIgZD1hLmFsdGVybmF0ZTtudWxsIT09ZCYmKGQubGFuZXN8PWIpO1NnKGEucmV0dXJuLGIsYyl9XG5mdW5jdGlvbiB4aihhLGIsYyxkLGUpe3ZhciBmPWEubWVtb2l6ZWRTdGF0ZTtudWxsPT09Zj9hLm1lbW9pemVkU3RhdGU9e2lzQmFja3dhcmRzOmIscmVuZGVyaW5nOm51bGwscmVuZGVyaW5nU3RhcnRUaW1lOjAsbGFzdDpkLHRhaWw6Yyx0YWlsTW9kZTplfTooZi5pc0JhY2t3YXJkcz1iLGYucmVuZGVyaW5nPW51bGwsZi5yZW5kZXJpbmdTdGFydFRpbWU9MCxmLmxhc3Q9ZCxmLnRhaWw9YyxmLnRhaWxNb2RlPWUpfVxuZnVuY3Rpb24geWooYSxiLGMpe3ZhciBkPWIucGVuZGluZ1Byb3BzLGU9ZC5yZXZlYWxPcmRlcixmPWQudGFpbDtZaShhLGIsZC5jaGlsZHJlbixjKTtkPU0uY3VycmVudDtpZigwIT09KGQmMikpZD1kJjF8MixiLmZsYWdzfD0xMjg7ZWxzZXtpZihudWxsIT09YSYmMCE9PShhLmZsYWdzJjEyOCkpYTpmb3IoYT1iLmNoaWxkO251bGwhPT1hOyl7aWYoMTM9PT1hLnRhZyludWxsIT09YS5tZW1vaXplZFN0YXRlJiZ3aihhLGMsYik7ZWxzZSBpZigxOT09PWEudGFnKXdqKGEsYyxiKTtlbHNlIGlmKG51bGwhPT1hLmNoaWxkKXthLmNoaWxkLnJldHVybj1hO2E9YS5jaGlsZDtjb250aW51ZX1pZihhPT09YilicmVhayBhO2Zvcig7bnVsbD09PWEuc2libGluZzspe2lmKG51bGw9PT1hLnJldHVybnx8YS5yZXR1cm49PT1iKWJyZWFrIGE7YT1hLnJldHVybn1hLnNpYmxpbmcucmV0dXJuPWEucmV0dXJuO2E9YS5zaWJsaW5nfWQmPTF9RyhNLGQpO2lmKDA9PT0oYi5tb2RlJjEpKWIubWVtb2l6ZWRTdGF0ZT1cbm51bGw7ZWxzZSBzd2l0Y2goZSl7Y2FzZSBcImZvcndhcmRzXCI6Yz1iLmNoaWxkO2ZvcihlPW51bGw7bnVsbCE9PWM7KWE9Yy5hbHRlcm5hdGUsbnVsbCE9PWEmJm51bGw9PT1NaChhKSYmKGU9YyksYz1jLnNpYmxpbmc7Yz1lO251bGw9PT1jPyhlPWIuY2hpbGQsYi5jaGlsZD1udWxsKTooZT1jLnNpYmxpbmcsYy5zaWJsaW5nPW51bGwpO3hqKGIsITEsZSxjLGYpO2JyZWFrO2Nhc2UgXCJiYWNrd2FyZHNcIjpjPW51bGw7ZT1iLmNoaWxkO2ZvcihiLmNoaWxkPW51bGw7bnVsbCE9PWU7KXthPWUuYWx0ZXJuYXRlO2lmKG51bGwhPT1hJiZudWxsPT09TWgoYSkpe2IuY2hpbGQ9ZTticmVha31hPWUuc2libGluZztlLnNpYmxpbmc9YztjPWU7ZT1hfXhqKGIsITAsYyxudWxsLGYpO2JyZWFrO2Nhc2UgXCJ0b2dldGhlclwiOnhqKGIsITEsbnVsbCxudWxsLHZvaWQgMCk7YnJlYWs7ZGVmYXVsdDpiLm1lbW9pemVkU3RhdGU9bnVsbH1yZXR1cm4gYi5jaGlsZH1cbmZ1bmN0aW9uIGpqKGEsYil7MD09PShiLm1vZGUmMSkmJm51bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpfWZ1bmN0aW9uICRpKGEsYixjKXtudWxsIT09YSYmKGIuZGVwZW5kZW5jaWVzPWEuZGVwZW5kZW5jaWVzKTtoaHw9Yi5sYW5lcztpZigwPT09KGMmYi5jaGlsZExhbmVzKSlyZXR1cm4gbnVsbDtpZihudWxsIT09YSYmYi5jaGlsZCE9PWEuY2hpbGQpdGhyb3cgRXJyb3IocCgxNTMpKTtpZihudWxsIT09Yi5jaGlsZCl7YT1iLmNoaWxkO2M9d2goYSxhLnBlbmRpbmdQcm9wcyk7Yi5jaGlsZD1jO2ZvcihjLnJldHVybj1iO251bGwhPT1hLnNpYmxpbmc7KWE9YS5zaWJsaW5nLGM9Yy5zaWJsaW5nPXdoKGEsYS5wZW5kaW5nUHJvcHMpLGMucmV0dXJuPWI7Yy5zaWJsaW5nPW51bGx9cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiB6aihhLGIsYyl7c3dpdGNoKGIudGFnKXtjYXNlIDM6bGooYik7SWcoKTticmVhaztjYXNlIDU6S2goYik7YnJlYWs7Y2FzZSAxOlpmKGIudHlwZSkmJmNnKGIpO2JyZWFrO2Nhc2UgNDpJaChiLGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTA6dmFyIGQ9Yi50eXBlLl9jb250ZXh0LGU9Yi5tZW1vaXplZFByb3BzLnZhbHVlO0coTWcsZC5fY3VycmVudFZhbHVlKTtkLl9jdXJyZW50VmFsdWU9ZTticmVhaztjYXNlIDEzOmQ9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kKXtpZihudWxsIT09ZC5kZWh5ZHJhdGVkKXJldHVybiBHKE0sTS5jdXJyZW50JjEpLGIuZmxhZ3N8PTEyOCxudWxsO2lmKDAhPT0oYyZiLmNoaWxkLmNoaWxkTGFuZXMpKXJldHVybiBwaihhLGIsYyk7RyhNLE0uY3VycmVudCYxKTthPSRpKGEsYixjKTtyZXR1cm4gbnVsbCE9PWE/YS5zaWJsaW5nOm51bGx9RyhNLE0uY3VycmVudCYxKTticmVhaztjYXNlIDE5OmQ9MCE9PShjJlxuYi5jaGlsZExhbmVzKTtpZigwIT09KGEuZmxhZ3MmMTI4KSl7aWYoZClyZXR1cm4geWooYSxiLGMpO2IuZmxhZ3N8PTEyOH1lPWIubWVtb2l6ZWRTdGF0ZTtudWxsIT09ZSYmKGUucmVuZGVyaW5nPW51bGwsZS50YWlsPW51bGwsZS5sYXN0RWZmZWN0PW51bGwpO0coTSxNLmN1cnJlbnQpO2lmKGQpYnJlYWs7ZWxzZSByZXR1cm4gbnVsbDtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIGIubGFuZXM9MCxlaihhLGIsYyl9cmV0dXJuICRpKGEsYixjKX12YXIgQWosQmosQ2osRGo7XG5Baj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1iLmNoaWxkO251bGwhPT1jOyl7aWYoNT09PWMudGFnfHw2PT09Yy50YWcpYS5hcHBlbmRDaGlsZChjLnN0YXRlTm9kZSk7ZWxzZSBpZig0IT09Yy50YWcmJm51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09YilicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YilyZXR1cm47Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX07Qmo9ZnVuY3Rpb24oKXt9O1xuQ2o9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YS5tZW1vaXplZFByb3BzO2lmKGUhPT1kKXthPWIuc3RhdGVOb2RlO0hoKEVoLmN1cnJlbnQpO3ZhciBmPW51bGw7c3dpdGNoKGMpe2Nhc2UgXCJpbnB1dFwiOmU9WWEoYSxlKTtkPVlhKGEsZCk7Zj1bXTticmVhaztjYXNlIFwic2VsZWN0XCI6ZT1BKHt9LGUse3ZhbHVlOnZvaWQgMH0pO2Q9QSh7fSxkLHt2YWx1ZTp2b2lkIDB9KTtmPVtdO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmU9Z2IoYSxlKTtkPWdiKGEsZCk7Zj1bXTticmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlLm9uQ2xpY2smJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLm9uQ2xpY2smJihhLm9uY2xpY2s9QmYpfXViKGMsZCk7dmFyIGc7Yz1udWxsO2ZvcihsIGluIGUpaWYoIWQuaGFzT3duUHJvcGVydHkobCkmJmUuaGFzT3duUHJvcGVydHkobCkmJm51bGwhPWVbbF0paWYoXCJzdHlsZVwiPT09bCl7dmFyIGg9ZVtsXTtmb3IoZyBpbiBoKWguaGFzT3duUHJvcGVydHkoZykmJlxuKGN8fChjPXt9KSxjW2ddPVwiXCIpfWVsc2VcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCIhPT1sJiZcImNoaWxkcmVuXCIhPT1sJiZcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiIT09bCYmXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIiE9PWwmJlwiYXV0b0ZvY3VzXCIhPT1sJiYoZWEuaGFzT3duUHJvcGVydHkobCk/Znx8KGY9W10pOihmPWZ8fFtdKS5wdXNoKGwsbnVsbCkpO2ZvcihsIGluIGQpe3ZhciBrPWRbbF07aD1udWxsIT1lP2VbbF06dm9pZCAwO2lmKGQuaGFzT3duUHJvcGVydHkobCkmJmshPT1oJiYobnVsbCE9a3x8bnVsbCE9aCkpaWYoXCJzdHlsZVwiPT09bClpZihoKXtmb3IoZyBpbiBoKSFoLmhhc093blByb3BlcnR5KGcpfHxrJiZrLmhhc093blByb3BlcnR5KGcpfHwoY3x8KGM9e30pLGNbZ109XCJcIik7Zm9yKGcgaW4gaylrLmhhc093blByb3BlcnR5KGcpJiZoW2ddIT09a1tnXSYmKGN8fChjPXt9KSxjW2ddPWtbZ10pfWVsc2UgY3x8KGZ8fChmPVtdKSxmLnB1c2gobCxcbmMpKSxjPWs7ZWxzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09PWw/KGs9az9rLl9faHRtbDp2b2lkIDAsaD1oP2guX19odG1sOnZvaWQgMCxudWxsIT1rJiZoIT09ayYmKGY9Znx8W10pLnB1c2gobCxrKSk6XCJjaGlsZHJlblwiPT09bD9cInN0cmluZ1wiIT09dHlwZW9mIGsmJlwibnVtYmVyXCIhPT10eXBlb2Yga3x8KGY9Znx8W10pLnB1c2gobCxcIlwiK2spOlwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIhPT1sJiZcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiIT09bCYmKGVhLmhhc093blByb3BlcnR5KGwpPyhudWxsIT1rJiZcIm9uU2Nyb2xsXCI9PT1sJiZEKFwic2Nyb2xsXCIsYSksZnx8aD09PWt8fChmPVtdKSk6KGY9Znx8W10pLnB1c2gobCxrKSl9YyYmKGY9Znx8W10pLnB1c2goXCJzdHlsZVwiLGMpO3ZhciBsPWY7aWYoYi51cGRhdGVRdWV1ZT1sKWIuZmxhZ3N8PTR9fTtEaj1mdW5jdGlvbihhLGIsYyxkKXtjIT09ZCYmKGIuZmxhZ3N8PTQpfTtcbmZ1bmN0aW9uIEVqKGEsYil7aWYoIUkpc3dpdGNoKGEudGFpbE1vZGUpe2Nhc2UgXCJoaWRkZW5cIjpiPWEudGFpbDtmb3IodmFyIGM9bnVsbDtudWxsIT09YjspbnVsbCE9PWIuYWx0ZXJuYXRlJiYoYz1iKSxiPWIuc2libGluZztudWxsPT09Yz9hLnRhaWw9bnVsbDpjLnNpYmxpbmc9bnVsbDticmVhaztjYXNlIFwiY29sbGFwc2VkXCI6Yz1hLnRhaWw7Zm9yKHZhciBkPW51bGw7bnVsbCE9PWM7KW51bGwhPT1jLmFsdGVybmF0ZSYmKGQ9YyksYz1jLnNpYmxpbmc7bnVsbD09PWQ/Ynx8bnVsbD09PWEudGFpbD9hLnRhaWw9bnVsbDphLnRhaWwuc2libGluZz1udWxsOmQuc2libGluZz1udWxsfX1cbmZ1bmN0aW9uIFMoYSl7dmFyIGI9bnVsbCE9PWEuYWx0ZXJuYXRlJiZhLmFsdGVybmF0ZS5jaGlsZD09PWEuY2hpbGQsYz0wLGQ9MDtpZihiKWZvcih2YXIgZT1hLmNoaWxkO251bGwhPT1lOyljfD1lLmxhbmVzfGUuY2hpbGRMYW5lcyxkfD1lLnN1YnRyZWVGbGFncyYxNDY4MDA2NCxkfD1lLmZsYWdzJjE0NjgwMDY0LGUucmV0dXJuPWEsZT1lLnNpYmxpbmc7ZWxzZSBmb3IoZT1hLmNoaWxkO251bGwhPT1lOyljfD1lLmxhbmVzfGUuY2hpbGRMYW5lcyxkfD1lLnN1YnRyZWVGbGFncyxkfD1lLmZsYWdzLGUucmV0dXJuPWEsZT1lLnNpYmxpbmc7YS5zdWJ0cmVlRmxhZ3N8PWQ7YS5jaGlsZExhbmVzPWM7cmV0dXJuIGJ9XG5mdW5jdGlvbiBGaihhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHM7d2coYik7c3dpdGNoKGIudGFnKXtjYXNlIDI6Y2FzZSAxNjpjYXNlIDE1OmNhc2UgMDpjYXNlIDExOmNhc2UgNzpjYXNlIDg6Y2FzZSAxMjpjYXNlIDk6Y2FzZSAxNDpyZXR1cm4gUyhiKSxudWxsO2Nhc2UgMTpyZXR1cm4gWmYoYi50eXBlKSYmJGYoKSxTKGIpLG51bGw7Y2FzZSAzOmQ9Yi5zdGF0ZU5vZGU7SmgoKTtFKFdmKTtFKEgpO09oKCk7ZC5wZW5kaW5nQ29udGV4dCYmKGQuY29udGV4dD1kLnBlbmRpbmdDb250ZXh0LGQucGVuZGluZ0NvbnRleHQ9bnVsbCk7aWYobnVsbD09PWF8fG51bGw9PT1hLmNoaWxkKUdnKGIpP2IuZmxhZ3N8PTQ6bnVsbD09PWF8fGEubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQmJjA9PT0oYi5mbGFncyYyNTYpfHwoYi5mbGFnc3w9MTAyNCxudWxsIT09emcmJihHaih6Zyksemc9bnVsbCkpO0JqKGEsYik7UyhiKTtyZXR1cm4gbnVsbDtjYXNlIDU6TGgoYik7dmFyIGU9SGgoR2guY3VycmVudCk7XG5jPWIudHlwZTtpZihudWxsIT09YSYmbnVsbCE9Yi5zdGF0ZU5vZGUpQ2ooYSxiLGMsZCxlKSxhLnJlZiE9PWIucmVmJiYoYi5mbGFnc3w9NTEyLGIuZmxhZ3N8PTIwOTcxNTIpO2Vsc2V7aWYoIWQpe2lmKG51bGw9PT1iLnN0YXRlTm9kZSl0aHJvdyBFcnJvcihwKDE2NikpO1MoYik7cmV0dXJuIG51bGx9YT1IaChFaC5jdXJyZW50KTtpZihHZyhiKSl7ZD1iLnN0YXRlTm9kZTtjPWIudHlwZTt2YXIgZj1iLm1lbW9pemVkUHJvcHM7ZFtPZl09YjtkW1BmXT1mO2E9MCE9PShiLm1vZGUmMSk7c3dpdGNoKGMpe2Nhc2UgXCJkaWFsb2dcIjpEKFwiY2FuY2VsXCIsZCk7RChcImNsb3NlXCIsZCk7YnJlYWs7Y2FzZSBcImlmcmFtZVwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwiZW1iZWRcIjpEKFwibG9hZFwiLGQpO2JyZWFrO2Nhc2UgXCJ2aWRlb1wiOmNhc2UgXCJhdWRpb1wiOmZvcihlPTA7ZTxsZi5sZW5ndGg7ZSsrKUQobGZbZV0sZCk7YnJlYWs7Y2FzZSBcInNvdXJjZVwiOkQoXCJlcnJvclwiLGQpO2JyZWFrO2Nhc2UgXCJpbWdcIjpjYXNlIFwiaW1hZ2VcIjpjYXNlIFwibGlua1wiOkQoXCJlcnJvclwiLFxuZCk7RChcImxvYWRcIixkKTticmVhaztjYXNlIFwiZGV0YWlsc1wiOkQoXCJ0b2dnbGVcIixkKTticmVhaztjYXNlIFwiaW5wdXRcIjpaYShkLGYpO0QoXCJpbnZhbGlkXCIsZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmQuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFmLm11bHRpcGxlfTtEKFwiaW52YWxpZFwiLGQpO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmhiKGQsZiksRChcImludmFsaWRcIixkKX11YihjLGYpO2U9bnVsbDtmb3IodmFyIGcgaW4gZilpZihmLmhhc093blByb3BlcnR5KGcpKXt2YXIgaD1mW2ddO1wiY2hpbGRyZW5cIj09PWc/XCJzdHJpbmdcIj09PXR5cGVvZiBoP2QudGV4dENvbnRlbnQhPT1oJiYoITAhPT1mLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyYmQWYoZC50ZXh0Q29udGVudCxoLGEpLGU9W1wiY2hpbGRyZW5cIixoXSk6XCJudW1iZXJcIj09PXR5cGVvZiBoJiZkLnRleHRDb250ZW50IT09XCJcIitoJiYoITAhPT1mLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyYmQWYoZC50ZXh0Q29udGVudCxcbmgsYSksZT1bXCJjaGlsZHJlblwiLFwiXCIraF0pOmVhLmhhc093blByb3BlcnR5KGcpJiZudWxsIT1oJiZcIm9uU2Nyb2xsXCI9PT1nJiZEKFwic2Nyb2xsXCIsZCl9c3dpdGNoKGMpe2Nhc2UgXCJpbnB1dFwiOlZhKGQpO2RiKGQsZiwhMCk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6VmEoZCk7amIoZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmNhc2UgXCJvcHRpb25cIjpicmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIj09PXR5cGVvZiBmLm9uQ2xpY2smJihkLm9uY2xpY2s9QmYpfWQ9ZTtiLnVwZGF0ZVF1ZXVlPWQ7bnVsbCE9PWQmJihiLmZsYWdzfD00KX1lbHNle2c9OT09PWUubm9kZVR5cGU/ZTplLm93bmVyRG9jdW1lbnQ7XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI9PT1hJiYoYT1rYihjKSk7XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI9PT1hP1wic2NyaXB0XCI9PT1jPyhhPWcuY3JlYXRlRWxlbWVudChcImRpdlwiKSxhLmlubmVySFRNTD1cIjxzY3JpcHQ+XFx4M2Mvc2NyaXB0PlwiLGE9YS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpKTpcblwic3RyaW5nXCI9PT10eXBlb2YgZC5pcz9hPWcuY3JlYXRlRWxlbWVudChjLHtpczpkLmlzfSk6KGE9Zy5jcmVhdGVFbGVtZW50KGMpLFwic2VsZWN0XCI9PT1jJiYoZz1hLGQubXVsdGlwbGU/Zy5tdWx0aXBsZT0hMDpkLnNpemUmJihnLnNpemU9ZC5zaXplKSkpOmE9Zy5jcmVhdGVFbGVtZW50TlMoYSxjKTthW09mXT1iO2FbUGZdPWQ7QWooYSxiLCExLCExKTtiLnN0YXRlTm9kZT1hO2E6e2c9dmIoYyxkKTtzd2l0Y2goYyl7Y2FzZSBcImRpYWxvZ1wiOkQoXCJjYW5jZWxcIixhKTtEKFwiY2xvc2VcIixhKTtlPWQ7YnJlYWs7Y2FzZSBcImlmcmFtZVwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwiZW1iZWRcIjpEKFwibG9hZFwiLGEpO2U9ZDticmVhaztjYXNlIFwidmlkZW9cIjpjYXNlIFwiYXVkaW9cIjpmb3IoZT0wO2U8bGYubGVuZ3RoO2UrKylEKGxmW2VdLGEpO2U9ZDticmVhaztjYXNlIFwic291cmNlXCI6RChcImVycm9yXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJpbWdcIjpjYXNlIFwiaW1hZ2VcIjpjYXNlIFwibGlua1wiOkQoXCJlcnJvclwiLFxuYSk7RChcImxvYWRcIixhKTtlPWQ7YnJlYWs7Y2FzZSBcImRldGFpbHNcIjpEKFwidG9nZ2xlXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJpbnB1dFwiOlphKGEsZCk7ZT1ZYShhLGQpO0QoXCJpbnZhbGlkXCIsYSk7YnJlYWs7Y2FzZSBcIm9wdGlvblwiOmU9ZDticmVhaztjYXNlIFwic2VsZWN0XCI6YS5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIWQubXVsdGlwbGV9O2U9QSh7fSxkLHt2YWx1ZTp2b2lkIDB9KTtEKFwiaW52YWxpZFwiLGEpO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmhiKGEsZCk7ZT1nYihhLGQpO0QoXCJpbnZhbGlkXCIsYSk7YnJlYWs7ZGVmYXVsdDplPWR9dWIoYyxlKTtoPWU7Zm9yKGYgaW4gaClpZihoLmhhc093blByb3BlcnR5KGYpKXt2YXIgaz1oW2ZdO1wic3R5bGVcIj09PWY/c2IoYSxrKTpcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PT1mPyhrPWs/ay5fX2h0bWw6dm9pZCAwLG51bGwhPWsmJm5iKGEsaykpOlwiY2hpbGRyZW5cIj09PWY/XCJzdHJpbmdcIj09PXR5cGVvZiBrPyhcInRleHRhcmVhXCIhPT1cbmN8fFwiXCIhPT1rKSYmb2IoYSxrKTpcIm51bWJlclwiPT09dHlwZW9mIGsmJm9iKGEsXCJcIitrKTpcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiIT09ZiYmXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIiE9PWYmJlwiYXV0b0ZvY3VzXCIhPT1mJiYoZWEuaGFzT3duUHJvcGVydHkoZik/bnVsbCE9ayYmXCJvblNjcm9sbFwiPT09ZiYmRChcInNjcm9sbFwiLGEpOm51bGwhPWsmJnRhKGEsZixrLGcpKX1zd2l0Y2goYyl7Y2FzZSBcImlucHV0XCI6VmEoYSk7ZGIoYSxkLCExKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjpWYShhKTtqYihhKTticmVhaztjYXNlIFwib3B0aW9uXCI6bnVsbCE9ZC52YWx1ZSYmYS5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLFwiXCIrU2EoZC52YWx1ZSkpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjphLm11bHRpcGxlPSEhZC5tdWx0aXBsZTtmPWQudmFsdWU7bnVsbCE9Zj9mYihhLCEhZC5tdWx0aXBsZSxmLCExKTpudWxsIT1kLmRlZmF1bHRWYWx1ZSYmZmIoYSwhIWQubXVsdGlwbGUsZC5kZWZhdWx0VmFsdWUsXG4hMCk7YnJlYWs7ZGVmYXVsdDpcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5vbkNsaWNrJiYoYS5vbmNsaWNrPUJmKX1zd2l0Y2goYyl7Y2FzZSBcImJ1dHRvblwiOmNhc2UgXCJpbnB1dFwiOmNhc2UgXCJzZWxlY3RcIjpjYXNlIFwidGV4dGFyZWFcIjpkPSEhZC5hdXRvRm9jdXM7YnJlYWsgYTtjYXNlIFwiaW1nXCI6ZD0hMDticmVhayBhO2RlZmF1bHQ6ZD0hMX19ZCYmKGIuZmxhZ3N8PTQpfW51bGwhPT1iLnJlZiYmKGIuZmxhZ3N8PTUxMixiLmZsYWdzfD0yMDk3MTUyKX1TKGIpO3JldHVybiBudWxsO2Nhc2UgNjppZihhJiZudWxsIT1iLnN0YXRlTm9kZSlEaihhLGIsYS5tZW1vaXplZFByb3BzLGQpO2Vsc2V7aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBkJiZudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IocCgxNjYpKTtjPUhoKEdoLmN1cnJlbnQpO0hoKEVoLmN1cnJlbnQpO2lmKEdnKGIpKXtkPWIuc3RhdGVOb2RlO2M9Yi5tZW1vaXplZFByb3BzO2RbT2ZdPWI7aWYoZj1kLm5vZGVWYWx1ZSE9PWMpaWYoYT1cbnhnLG51bGwhPT1hKXN3aXRjaChhLnRhZyl7Y2FzZSAzOkFmKGQubm9kZVZhbHVlLGMsMCE9PShhLm1vZGUmMSkpO2JyZWFrO2Nhc2UgNTohMCE9PWEubWVtb2l6ZWRQcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcmJkFmKGQubm9kZVZhbHVlLGMsMCE9PShhLm1vZGUmMSkpfWYmJihiLmZsYWdzfD00KX1lbHNlIGQ9KDk9PT1jLm5vZGVUeXBlP2M6Yy5vd25lckRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZShkKSxkW09mXT1iLGIuc3RhdGVOb2RlPWR9UyhiKTtyZXR1cm4gbnVsbDtjYXNlIDEzOkUoTSk7ZD1iLm1lbW9pemVkU3RhdGU7aWYobnVsbD09PWF8fG51bGwhPT1hLm1lbW9pemVkU3RhdGUmJm51bGwhPT1hLm1lbW9pemVkU3RhdGUuZGVoeWRyYXRlZCl7aWYoSSYmbnVsbCE9PXlnJiYwIT09KGIubW9kZSYxKSYmMD09PShiLmZsYWdzJjEyOCkpSGcoKSxJZygpLGIuZmxhZ3N8PTk4NTYwLGY9ITE7ZWxzZSBpZihmPUdnKGIpLG51bGwhPT1kJiZudWxsIT09ZC5kZWh5ZHJhdGVkKXtpZihudWxsPT09XG5hKXtpZighZil0aHJvdyBFcnJvcihwKDMxOCkpO2Y9Yi5tZW1vaXplZFN0YXRlO2Y9bnVsbCE9PWY/Zi5kZWh5ZHJhdGVkOm51bGw7aWYoIWYpdGhyb3cgRXJyb3IocCgzMTcpKTtmW09mXT1ifWVsc2UgSWcoKSwwPT09KGIuZmxhZ3MmMTI4KSYmKGIubWVtb2l6ZWRTdGF0ZT1udWxsKSxiLmZsYWdzfD00O1MoYik7Zj0hMX1lbHNlIG51bGwhPT16ZyYmKEdqKHpnKSx6Zz1udWxsKSxmPSEwO2lmKCFmKXJldHVybiBiLmZsYWdzJjY1NTM2P2I6bnVsbH1pZigwIT09KGIuZmxhZ3MmMTI4KSlyZXR1cm4gYi5sYW5lcz1jLGI7ZD1udWxsIT09ZDtkIT09KG51bGwhPT1hJiZudWxsIT09YS5tZW1vaXplZFN0YXRlKSYmZCYmKGIuY2hpbGQuZmxhZ3N8PTgxOTIsMCE9PShiLm1vZGUmMSkmJihudWxsPT09YXx8MCE9PShNLmN1cnJlbnQmMSk/MD09PVQmJihUPTMpOnVqKCkpKTtudWxsIT09Yi51cGRhdGVRdWV1ZSYmKGIuZmxhZ3N8PTQpO1MoYik7cmV0dXJuIG51bGw7Y2FzZSA0OnJldHVybiBKaCgpLFxuQmooYSxiKSxudWxsPT09YSYmc2YoYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksUyhiKSxudWxsO2Nhc2UgMTA6cmV0dXJuIFJnKGIudHlwZS5fY29udGV4dCksUyhiKSxudWxsO2Nhc2UgMTc6cmV0dXJuIFpmKGIudHlwZSkmJiRmKCksUyhiKSxudWxsO2Nhc2UgMTk6RShNKTtmPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsPT09ZilyZXR1cm4gUyhiKSxudWxsO2Q9MCE9PShiLmZsYWdzJjEyOCk7Zz1mLnJlbmRlcmluZztpZihudWxsPT09ZylpZihkKUVqKGYsITEpO2Vsc2V7aWYoMCE9PVR8fG51bGwhPT1hJiYwIT09KGEuZmxhZ3MmMTI4KSlmb3IoYT1iLmNoaWxkO251bGwhPT1hOyl7Zz1NaChhKTtpZihudWxsIT09Zyl7Yi5mbGFnc3w9MTI4O0VqKGYsITEpO2Q9Zy51cGRhdGVRdWV1ZTtudWxsIT09ZCYmKGIudXBkYXRlUXVldWU9ZCxiLmZsYWdzfD00KTtiLnN1YnRyZWVGbGFncz0wO2Q9Yztmb3IoYz1iLmNoaWxkO251bGwhPT1jOylmPWMsYT1kLGYuZmxhZ3MmPTE0NjgwMDY2LFxuZz1mLmFsdGVybmF0ZSxudWxsPT09Zz8oZi5jaGlsZExhbmVzPTAsZi5sYW5lcz1hLGYuY2hpbGQ9bnVsbCxmLnN1YnRyZWVGbGFncz0wLGYubWVtb2l6ZWRQcm9wcz1udWxsLGYubWVtb2l6ZWRTdGF0ZT1udWxsLGYudXBkYXRlUXVldWU9bnVsbCxmLmRlcGVuZGVuY2llcz1udWxsLGYuc3RhdGVOb2RlPW51bGwpOihmLmNoaWxkTGFuZXM9Zy5jaGlsZExhbmVzLGYubGFuZXM9Zy5sYW5lcyxmLmNoaWxkPWcuY2hpbGQsZi5zdWJ0cmVlRmxhZ3M9MCxmLmRlbGV0aW9ucz1udWxsLGYubWVtb2l6ZWRQcm9wcz1nLm1lbW9pemVkUHJvcHMsZi5tZW1vaXplZFN0YXRlPWcubWVtb2l6ZWRTdGF0ZSxmLnVwZGF0ZVF1ZXVlPWcudXBkYXRlUXVldWUsZi50eXBlPWcudHlwZSxhPWcuZGVwZW5kZW5jaWVzLGYuZGVwZW5kZW5jaWVzPW51bGw9PT1hP251bGw6e2xhbmVzOmEubGFuZXMsZmlyc3RDb250ZXh0OmEuZmlyc3RDb250ZXh0fSksYz1jLnNpYmxpbmc7RyhNLE0uY3VycmVudCYxfDIpO3JldHVybiBiLmNoaWxkfWE9XG5hLnNpYmxpbmd9bnVsbCE9PWYudGFpbCYmQigpPkhqJiYoYi5mbGFnc3w9MTI4LGQ9ITAsRWooZiwhMSksYi5sYW5lcz00MTk0MzA0KX1lbHNle2lmKCFkKWlmKGE9TWgoZyksbnVsbCE9PWEpe2lmKGIuZmxhZ3N8PTEyOCxkPSEwLGM9YS51cGRhdGVRdWV1ZSxudWxsIT09YyYmKGIudXBkYXRlUXVldWU9YyxiLmZsYWdzfD00KSxFaihmLCEwKSxudWxsPT09Zi50YWlsJiZcImhpZGRlblwiPT09Zi50YWlsTW9kZSYmIWcuYWx0ZXJuYXRlJiYhSSlyZXR1cm4gUyhiKSxudWxsfWVsc2UgMipCKCktZi5yZW5kZXJpbmdTdGFydFRpbWU+SGomJjEwNzM3NDE4MjQhPT1jJiYoYi5mbGFnc3w9MTI4LGQ9ITAsRWooZiwhMSksYi5sYW5lcz00MTk0MzA0KTtmLmlzQmFja3dhcmRzPyhnLnNpYmxpbmc9Yi5jaGlsZCxiLmNoaWxkPWcpOihjPWYubGFzdCxudWxsIT09Yz9jLnNpYmxpbmc9ZzpiLmNoaWxkPWcsZi5sYXN0PWcpfWlmKG51bGwhPT1mLnRhaWwpcmV0dXJuIGI9Zi50YWlsLGYucmVuZGVyaW5nPVxuYixmLnRhaWw9Yi5zaWJsaW5nLGYucmVuZGVyaW5nU3RhcnRUaW1lPUIoKSxiLnNpYmxpbmc9bnVsbCxjPU0uY3VycmVudCxHKE0sZD9jJjF8MjpjJjEpLGI7UyhiKTtyZXR1cm4gbnVsbDtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIElqKCksZD1udWxsIT09Yi5tZW1vaXplZFN0YXRlLG51bGwhPT1hJiZudWxsIT09YS5tZW1vaXplZFN0YXRlIT09ZCYmKGIuZmxhZ3N8PTgxOTIpLGQmJjAhPT0oYi5tb2RlJjEpPzAhPT0oZ2omMTA3Mzc0MTgyNCkmJihTKGIpLGIuc3VidHJlZUZsYWdzJjYmJihiLmZsYWdzfD04MTkyKSk6UyhiKSxudWxsO2Nhc2UgMjQ6cmV0dXJuIG51bGw7Y2FzZSAyNTpyZXR1cm4gbnVsbH10aHJvdyBFcnJvcihwKDE1NixiLnRhZykpO31cbmZ1bmN0aW9uIEpqKGEsYil7d2coYik7c3dpdGNoKGIudGFnKXtjYXNlIDE6cmV0dXJuIFpmKGIudHlwZSkmJiRmKCksYT1iLmZsYWdzLGEmNjU1MzY/KGIuZmxhZ3M9YSYtNjU1Mzd8MTI4LGIpOm51bGw7Y2FzZSAzOnJldHVybiBKaCgpLEUoV2YpLEUoSCksT2goKSxhPWIuZmxhZ3MsMCE9PShhJjY1NTM2KSYmMD09PShhJjEyOCk/KGIuZmxhZ3M9YSYtNjU1Mzd8MTI4LGIpOm51bGw7Y2FzZSA1OnJldHVybiBMaChiKSxudWxsO2Nhc2UgMTM6RShNKTthPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09YSYmbnVsbCE9PWEuZGVoeWRyYXRlZCl7aWYobnVsbD09PWIuYWx0ZXJuYXRlKXRocm93IEVycm9yKHAoMzQwKSk7SWcoKX1hPWIuZmxhZ3M7cmV0dXJuIGEmNjU1MzY/KGIuZmxhZ3M9YSYtNjU1Mzd8MTI4LGIpOm51bGw7Y2FzZSAxOTpyZXR1cm4gRShNKSxudWxsO2Nhc2UgNDpyZXR1cm4gSmgoKSxudWxsO2Nhc2UgMTA6cmV0dXJuIFJnKGIudHlwZS5fY29udGV4dCksbnVsbDtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIElqKCksXG5udWxsO2Nhc2UgMjQ6cmV0dXJuIG51bGw7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIEtqPSExLFU9ITEsTGo9XCJmdW5jdGlvblwiPT09dHlwZW9mIFdlYWtTZXQ/V2Vha1NldDpTZXQsVj1udWxsO2Z1bmN0aW9uIE1qKGEsYil7dmFyIGM9YS5yZWY7aWYobnVsbCE9PWMpaWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGMpdHJ5e2MobnVsbCl9Y2F0Y2goZCl7VyhhLGIsZCl9ZWxzZSBjLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBOaihhLGIsYyl7dHJ5e2MoKX1jYXRjaChkKXtXKGEsYixkKX19dmFyIE9qPSExO1xuZnVuY3Rpb24gUGooYSxiKXtDZj1kZDthPU1lKCk7aWYoTmUoYSkpe2lmKFwic2VsZWN0aW9uU3RhcnRcImluIGEpdmFyIGM9e3N0YXJ0OmEuc2VsZWN0aW9uU3RhcnQsZW5kOmEuc2VsZWN0aW9uRW5kfTtlbHNlIGE6e2M9KGM9YS5vd25lckRvY3VtZW50KSYmYy5kZWZhdWx0Vmlld3x8d2luZG93O3ZhciBkPWMuZ2V0U2VsZWN0aW9uJiZjLmdldFNlbGVjdGlvbigpO2lmKGQmJjAhPT1kLnJhbmdlQ291bnQpe2M9ZC5hbmNob3JOb2RlO3ZhciBlPWQuYW5jaG9yT2Zmc2V0LGY9ZC5mb2N1c05vZGU7ZD1kLmZvY3VzT2Zmc2V0O3RyeXtjLm5vZGVUeXBlLGYubm9kZVR5cGV9Y2F0Y2goRil7Yz1udWxsO2JyZWFrIGF9dmFyIGc9MCxoPS0xLGs9LTEsbD0wLG09MCxxPWEscj1udWxsO2I6Zm9yKDs7KXtmb3IodmFyIHk7Oyl7cSE9PWN8fDAhPT1lJiYzIT09cS5ub2RlVHlwZXx8KGg9ZytlKTtxIT09Znx8MCE9PWQmJjMhPT1xLm5vZGVUeXBlfHwoaz1nK2QpOzM9PT1xLm5vZGVUeXBlJiYoZys9XG5xLm5vZGVWYWx1ZS5sZW5ndGgpO2lmKG51bGw9PT0oeT1xLmZpcnN0Q2hpbGQpKWJyZWFrO3I9cTtxPXl9Zm9yKDs7KXtpZihxPT09YSlicmVhayBiO3I9PT1jJiYrK2w9PT1lJiYoaD1nKTtyPT09ZiYmKyttPT09ZCYmKGs9Zyk7aWYobnVsbCE9PSh5PXEubmV4dFNpYmxpbmcpKWJyZWFrO3E9cjtyPXEucGFyZW50Tm9kZX1xPXl9Yz0tMT09PWh8fC0xPT09az9udWxsOntzdGFydDpoLGVuZDprfX1lbHNlIGM9bnVsbH1jPWN8fHtzdGFydDowLGVuZDowfX1lbHNlIGM9bnVsbDtEZj17Zm9jdXNlZEVsZW06YSxzZWxlY3Rpb25SYW5nZTpjfTtkZD0hMTtmb3IoVj1iO251bGwhPT1WOylpZihiPVYsYT1iLmNoaWxkLDAhPT0oYi5zdWJ0cmVlRmxhZ3MmMTAyOCkmJm51bGwhPT1hKWEucmV0dXJuPWIsVj1hO2Vsc2UgZm9yKDtudWxsIT09Vjspe2I9Vjt0cnl7dmFyIG49Yi5hbHRlcm5hdGU7aWYoMCE9PShiLmZsYWdzJjEwMjQpKXN3aXRjaChiLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpicmVhaztcbmNhc2UgMTppZihudWxsIT09bil7dmFyIHQ9bi5tZW1vaXplZFByb3BzLEo9bi5tZW1vaXplZFN0YXRlLHg9Yi5zdGF0ZU5vZGUsdz14LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGIuZWxlbWVudFR5cGU9PT1iLnR5cGU/dDpMZyhiLnR5cGUsdCksSik7eC5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZT13fWJyZWFrO2Nhc2UgMzp2YXIgdT1iLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOzE9PT11Lm5vZGVUeXBlP3UudGV4dENvbnRlbnQ9XCJcIjo5PT09dS5ub2RlVHlwZSYmdS5kb2N1bWVudEVsZW1lbnQmJnUucmVtb3ZlQ2hpbGQodS5kb2N1bWVudEVsZW1lbnQpO2JyZWFrO2Nhc2UgNTpjYXNlIDY6Y2FzZSA0OmNhc2UgMTc6YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihwKDE2MykpO319Y2F0Y2goRil7VyhiLGIucmV0dXJuLEYpfWE9Yi5zaWJsaW5nO2lmKG51bGwhPT1hKXthLnJldHVybj1iLnJldHVybjtWPWE7YnJlYWt9Vj1iLnJldHVybn1uPU9qO09qPSExO3JldHVybiBufVxuZnVuY3Rpb24gUWooYSxiLGMpe3ZhciBkPWIudXBkYXRlUXVldWU7ZD1udWxsIT09ZD9kLmxhc3RFZmZlY3Q6bnVsbDtpZihudWxsIT09ZCl7dmFyIGU9ZD1kLm5leHQ7ZG97aWYoKGUudGFnJmEpPT09YSl7dmFyIGY9ZS5kZXN0cm95O2UuZGVzdHJveT12b2lkIDA7dm9pZCAwIT09ZiYmTmooYixjLGYpfWU9ZS5uZXh0fXdoaWxlKGUhPT1kKX19ZnVuY3Rpb24gUmooYSxiKXtiPWIudXBkYXRlUXVldWU7Yj1udWxsIT09Yj9iLmxhc3RFZmZlY3Q6bnVsbDtpZihudWxsIT09Yil7dmFyIGM9Yj1iLm5leHQ7ZG97aWYoKGMudGFnJmEpPT09YSl7dmFyIGQ9Yy5jcmVhdGU7Yy5kZXN0cm95PWQoKX1jPWMubmV4dH13aGlsZShjIT09Yil9fWZ1bmN0aW9uIFNqKGEpe3ZhciBiPWEucmVmO2lmKG51bGwhPT1iKXt2YXIgYz1hLnN0YXRlTm9kZTtzd2l0Y2goYS50YWcpe2Nhc2UgNTphPWM7YnJlYWs7ZGVmYXVsdDphPWN9XCJmdW5jdGlvblwiPT09dHlwZW9mIGI/YihhKTpiLmN1cnJlbnQ9YX19XG5mdW5jdGlvbiBUaihhKXt2YXIgYj1hLmFsdGVybmF0ZTtudWxsIT09YiYmKGEuYWx0ZXJuYXRlPW51bGwsVGooYikpO2EuY2hpbGQ9bnVsbDthLmRlbGV0aW9ucz1udWxsO2Euc2libGluZz1udWxsOzU9PT1hLnRhZyYmKGI9YS5zdGF0ZU5vZGUsbnVsbCE9PWImJihkZWxldGUgYltPZl0sZGVsZXRlIGJbUGZdLGRlbGV0ZSBiW29mXSxkZWxldGUgYltRZl0sZGVsZXRlIGJbUmZdKSk7YS5zdGF0ZU5vZGU9bnVsbDthLnJldHVybj1udWxsO2EuZGVwZW5kZW5jaWVzPW51bGw7YS5tZW1vaXplZFByb3BzPW51bGw7YS5tZW1vaXplZFN0YXRlPW51bGw7YS5wZW5kaW5nUHJvcHM9bnVsbDthLnN0YXRlTm9kZT1udWxsO2EudXBkYXRlUXVldWU9bnVsbH1mdW5jdGlvbiBVaihhKXtyZXR1cm4gNT09PWEudGFnfHwzPT09YS50YWd8fDQ9PT1hLnRhZ31cbmZ1bmN0aW9uIFZqKGEpe2E6Zm9yKDs7KXtmb3IoO251bGw9PT1hLnNpYmxpbmc7KXtpZihudWxsPT09YS5yZXR1cm58fFVqKGEucmV0dXJuKSlyZXR1cm4gbnVsbDthPWEucmV0dXJufWEuc2libGluZy5yZXR1cm49YS5yZXR1cm47Zm9yKGE9YS5zaWJsaW5nOzUhPT1hLnRhZyYmNiE9PWEudGFnJiYxOCE9PWEudGFnOyl7aWYoYS5mbGFncyYyKWNvbnRpbnVlIGE7aWYobnVsbD09PWEuY2hpbGR8fDQ9PT1hLnRhZyljb250aW51ZSBhO2Vsc2UgYS5jaGlsZC5yZXR1cm49YSxhPWEuY2hpbGR9aWYoIShhLmZsYWdzJjIpKXJldHVybiBhLnN0YXRlTm9kZX19XG5mdW5jdGlvbiBXaihhLGIsYyl7dmFyIGQ9YS50YWc7aWYoNT09PWR8fDY9PT1kKWE9YS5zdGF0ZU5vZGUsYj84PT09Yy5ub2RlVHlwZT9jLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsYik6Yy5pbnNlcnRCZWZvcmUoYSxiKTooOD09PWMubm9kZVR5cGU/KGI9Yy5wYXJlbnROb2RlLGIuaW5zZXJ0QmVmb3JlKGEsYykpOihiPWMsYi5hcHBlbmRDaGlsZChhKSksYz1jLl9yZWFjdFJvb3RDb250YWluZXIsbnVsbCE9PWMmJnZvaWQgMCE9PWN8fG51bGwhPT1iLm9uY2xpY2t8fChiLm9uY2xpY2s9QmYpKTtlbHNlIGlmKDQhPT1kJiYoYT1hLmNoaWxkLG51bGwhPT1hKSlmb3IoV2ooYSxiLGMpLGE9YS5zaWJsaW5nO251bGwhPT1hOylXaihhLGIsYyksYT1hLnNpYmxpbmd9XG5mdW5jdGlvbiBYaihhLGIsYyl7dmFyIGQ9YS50YWc7aWYoNT09PWR8fDY9PT1kKWE9YS5zdGF0ZU5vZGUsYj9jLmluc2VydEJlZm9yZShhLGIpOmMuYXBwZW5kQ2hpbGQoYSk7ZWxzZSBpZig0IT09ZCYmKGE9YS5jaGlsZCxudWxsIT09YSkpZm9yKFhqKGEsYixjKSxhPWEuc2libGluZztudWxsIT09YTspWGooYSxiLGMpLGE9YS5zaWJsaW5nfXZhciBYPW51bGwsWWo9ITE7ZnVuY3Rpb24gWmooYSxiLGMpe2ZvcihjPWMuY2hpbGQ7bnVsbCE9PWM7KWFrKGEsYixjKSxjPWMuc2libGluZ31cbmZ1bmN0aW9uIGFrKGEsYixjKXtpZihsYyYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGxjLm9uQ29tbWl0RmliZXJVbm1vdW50KXRyeXtsYy5vbkNvbW1pdEZpYmVyVW5tb3VudChrYyxjKX1jYXRjaChoKXt9c3dpdGNoKGMudGFnKXtjYXNlIDU6VXx8TWooYyxiKTtjYXNlIDY6dmFyIGQ9WCxlPVlqO1g9bnVsbDtaaihhLGIsYyk7WD1kO1lqPWU7bnVsbCE9PVgmJihZaj8oYT1YLGM9Yy5zdGF0ZU5vZGUsOD09PWEubm9kZVR5cGU/YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpOmEucmVtb3ZlQ2hpbGQoYykpOlgucmVtb3ZlQ2hpbGQoYy5zdGF0ZU5vZGUpKTticmVhaztjYXNlIDE4Om51bGwhPT1YJiYoWWo/KGE9WCxjPWMuc3RhdGVOb2RlLDg9PT1hLm5vZGVUeXBlP0tmKGEucGFyZW50Tm9kZSxjKToxPT09YS5ub2RlVHlwZSYmS2YoYSxjKSxiZChhKSk6S2YoWCxjLnN0YXRlTm9kZSkpO2JyZWFrO2Nhc2UgNDpkPVg7ZT1ZajtYPWMuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87WWo9ITA7XG5aaihhLGIsYyk7WD1kO1lqPWU7YnJlYWs7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKCFVJiYoZD1jLnVwZGF0ZVF1ZXVlLG51bGwhPT1kJiYoZD1kLmxhc3RFZmZlY3QsbnVsbCE9PWQpKSl7ZT1kPWQubmV4dDtkb3t2YXIgZj1lLGc9Zi5kZXN0cm95O2Y9Zi50YWc7dm9pZCAwIT09ZyYmKDAhPT0oZiYyKT9OaihjLGIsZyk6MCE9PShmJjQpJiZOaihjLGIsZykpO2U9ZS5uZXh0fXdoaWxlKGUhPT1kKX1aaihhLGIsYyk7YnJlYWs7Y2FzZSAxOmlmKCFVJiYoTWooYyxiKSxkPWMuc3RhdGVOb2RlLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLmNvbXBvbmVudFdpbGxVbm1vdW50KSl0cnl7ZC5wcm9wcz1jLm1lbW9pemVkUHJvcHMsZC5zdGF0ZT1jLm1lbW9pemVkU3RhdGUsZC5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKGgpe1coYyxiLGgpfVpqKGEsYixjKTticmVhaztjYXNlIDIxOlpqKGEsYixjKTticmVhaztjYXNlIDIyOmMubW9kZSYxPyhVPShkPVUpfHxudWxsIT09XG5jLm1lbW9pemVkU3RhdGUsWmooYSxiLGMpLFU9ZCk6WmooYSxiLGMpO2JyZWFrO2RlZmF1bHQ6WmooYSxiLGMpfX1mdW5jdGlvbiBiayhhKXt2YXIgYj1hLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1iKXthLnVwZGF0ZVF1ZXVlPW51bGw7dmFyIGM9YS5zdGF0ZU5vZGU7bnVsbD09PWMmJihjPWEuc3RhdGVOb2RlPW5ldyBMaik7Yi5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPWNrLmJpbmQobnVsbCxhLGIpO2MuaGFzKGIpfHwoYy5hZGQoYiksYi50aGVuKGQsZCkpfSl9fVxuZnVuY3Rpb24gZGsoYSxiKXt2YXIgYz1iLmRlbGV0aW9ucztpZihudWxsIT09Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTt0cnl7dmFyIGY9YSxnPWIsaD1nO2E6Zm9yKDtudWxsIT09aDspe3N3aXRjaChoLnRhZyl7Y2FzZSA1Olg9aC5zdGF0ZU5vZGU7WWo9ITE7YnJlYWsgYTtjYXNlIDM6WD1oLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1lqPSEwO2JyZWFrIGE7Y2FzZSA0Olg9aC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztZaj0hMDticmVhayBhfWg9aC5yZXR1cm59aWYobnVsbD09PVgpdGhyb3cgRXJyb3IocCgxNjApKTthayhmLGcsZSk7WD1udWxsO1lqPSExO3ZhciBrPWUuYWx0ZXJuYXRlO251bGwhPT1rJiYoay5yZXR1cm49bnVsbCk7ZS5yZXR1cm49bnVsbH1jYXRjaChsKXtXKGUsYixsKX19aWYoYi5zdWJ0cmVlRmxhZ3MmMTI4NTQpZm9yKGI9Yi5jaGlsZDtudWxsIT09YjspZWsoYixhKSxiPWIuc2libGluZ31cbmZ1bmN0aW9uIGVrKGEsYil7dmFyIGM9YS5hbHRlcm5hdGUsZD1hLmZsYWdzO3N3aXRjaChhLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmRrKGIsYSk7ZmsoYSk7aWYoZCY0KXt0cnl7UWooMyxhLGEucmV0dXJuKSxSaigzLGEpfWNhdGNoKHQpe1coYSxhLnJldHVybix0KX10cnl7UWooNSxhLGEucmV0dXJuKX1jYXRjaCh0KXtXKGEsYS5yZXR1cm4sdCl9fWJyZWFrO2Nhc2UgMTpkayhiLGEpO2ZrKGEpO2QmNTEyJiZudWxsIT09YyYmTWooYyxjLnJldHVybik7YnJlYWs7Y2FzZSA1OmRrKGIsYSk7ZmsoYSk7ZCY1MTImJm51bGwhPT1jJiZNaihjLGMucmV0dXJuKTtpZihhLmZsYWdzJjMyKXt2YXIgZT1hLnN0YXRlTm9kZTt0cnl7b2IoZSxcIlwiKX1jYXRjaCh0KXtXKGEsYS5yZXR1cm4sdCl9fWlmKGQmNCYmKGU9YS5zdGF0ZU5vZGUsbnVsbCE9ZSkpe3ZhciBmPWEubWVtb2l6ZWRQcm9wcyxnPW51bGwhPT1jP2MubWVtb2l6ZWRQcm9wczpmLGg9YS50eXBlLGs9YS51cGRhdGVRdWV1ZTtcbmEudXBkYXRlUXVldWU9bnVsbDtpZihudWxsIT09ayl0cnl7XCJpbnB1dFwiPT09aCYmXCJyYWRpb1wiPT09Zi50eXBlJiZudWxsIT1mLm5hbWUmJmFiKGUsZik7dmIoaCxnKTt2YXIgbD12YihoLGYpO2ZvcihnPTA7ZzxrLmxlbmd0aDtnKz0yKXt2YXIgbT1rW2ddLHE9a1tnKzFdO1wic3R5bGVcIj09PW0/c2IoZSxxKTpcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PT1tP25iKGUscSk6XCJjaGlsZHJlblwiPT09bT9vYihlLHEpOnRhKGUsbSxxLGwpfXN3aXRjaChoKXtjYXNlIFwiaW5wdXRcIjpiYihlLGYpO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmliKGUsZik7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOnZhciByPWUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZTtlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU9ISFmLm11bHRpcGxlO3ZhciB5PWYudmFsdWU7bnVsbCE9eT9mYihlLCEhZi5tdWx0aXBsZSx5LCExKTpyIT09ISFmLm11bHRpcGxlJiYobnVsbCE9Zi5kZWZhdWx0VmFsdWU/ZmIoZSwhIWYubXVsdGlwbGUsXG5mLmRlZmF1bHRWYWx1ZSwhMCk6ZmIoZSwhIWYubXVsdGlwbGUsZi5tdWx0aXBsZT9bXTpcIlwiLCExKSl9ZVtQZl09Zn1jYXRjaCh0KXtXKGEsYS5yZXR1cm4sdCl9fWJyZWFrO2Nhc2UgNjpkayhiLGEpO2ZrKGEpO2lmKGQmNCl7aWYobnVsbD09PWEuc3RhdGVOb2RlKXRocm93IEVycm9yKHAoMTYyKSk7ZT1hLnN0YXRlTm9kZTtmPWEubWVtb2l6ZWRQcm9wczt0cnl7ZS5ub2RlVmFsdWU9Zn1jYXRjaCh0KXtXKGEsYS5yZXR1cm4sdCl9fWJyZWFrO2Nhc2UgMzpkayhiLGEpO2ZrKGEpO2lmKGQmNCYmbnVsbCE9PWMmJmMubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpdHJ5e2JkKGIuY29udGFpbmVySW5mbyl9Y2F0Y2godCl7VyhhLGEucmV0dXJuLHQpfWJyZWFrO2Nhc2UgNDpkayhiLGEpO2ZrKGEpO2JyZWFrO2Nhc2UgMTM6ZGsoYixhKTtmayhhKTtlPWEuY2hpbGQ7ZS5mbGFncyY4MTkyJiYoZj1udWxsIT09ZS5tZW1vaXplZFN0YXRlLGUuc3RhdGVOb2RlLmlzSGlkZGVuPWYsIWZ8fFxubnVsbCE9PWUuYWx0ZXJuYXRlJiZudWxsIT09ZS5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZXx8KGdrPUIoKSkpO2QmNCYmYmsoYSk7YnJlYWs7Y2FzZSAyMjptPW51bGwhPT1jJiZudWxsIT09Yy5tZW1vaXplZFN0YXRlO2EubW9kZSYxPyhVPShsPVUpfHxtLGRrKGIsYSksVT1sKTpkayhiLGEpO2ZrKGEpO2lmKGQmODE5Mil7bD1udWxsIT09YS5tZW1vaXplZFN0YXRlO2lmKChhLnN0YXRlTm9kZS5pc0hpZGRlbj1sKSYmIW0mJjAhPT0oYS5tb2RlJjEpKWZvcihWPWEsbT1hLmNoaWxkO251bGwhPT1tOyl7Zm9yKHE9Vj1tO251bGwhPT1WOyl7cj1WO3k9ci5jaGlsZDtzd2l0Y2goci50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpRaig0LHIsci5yZXR1cm4pO2JyZWFrO2Nhc2UgMTpNaihyLHIucmV0dXJuKTt2YXIgbj1yLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2Ygbi5jb21wb25lbnRXaWxsVW5tb3VudCl7ZD1yO2M9ci5yZXR1cm47dHJ5e2I9ZCxuLnByb3BzPVxuYi5tZW1vaXplZFByb3BzLG4uc3RhdGU9Yi5tZW1vaXplZFN0YXRlLG4uY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaCh0KXtXKGQsYyx0KX19YnJlYWs7Y2FzZSA1Ok1qKHIsci5yZXR1cm4pO2JyZWFrO2Nhc2UgMjI6aWYobnVsbCE9PXIubWVtb2l6ZWRTdGF0ZSl7aGsocSk7Y29udGludWV9fW51bGwhPT15Pyh5LnJldHVybj1yLFY9eSk6aGsocSl9bT1tLnNpYmxpbmd9YTpmb3IobT1udWxsLHE9YTs7KXtpZig1PT09cS50YWcpe2lmKG51bGw9PT1tKXttPXE7dHJ5e2U9cS5zdGF0ZU5vZGUsbD8oZj1lLnN0eWxlLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmLnNldFByb3BlcnR5P2Yuc2V0UHJvcGVydHkoXCJkaXNwbGF5XCIsXCJub25lXCIsXCJpbXBvcnRhbnRcIik6Zi5kaXNwbGF5PVwibm9uZVwiKTooaD1xLnN0YXRlTm9kZSxrPXEubWVtb2l6ZWRQcm9wcy5zdHlsZSxnPXZvaWQgMCE9PWsmJm51bGwhPT1rJiZrLmhhc093blByb3BlcnR5KFwiZGlzcGxheVwiKT9rLmRpc3BsYXk6bnVsbCxoLnN0eWxlLmRpc3BsYXk9XG5yYihcImRpc3BsYXlcIixnKSl9Y2F0Y2godCl7VyhhLGEucmV0dXJuLHQpfX19ZWxzZSBpZig2PT09cS50YWcpe2lmKG51bGw9PT1tKXRyeXtxLnN0YXRlTm9kZS5ub2RlVmFsdWU9bD9cIlwiOnEubWVtb2l6ZWRQcm9wc31jYXRjaCh0KXtXKGEsYS5yZXR1cm4sdCl9fWVsc2UgaWYoKDIyIT09cS50YWcmJjIzIT09cS50YWd8fG51bGw9PT1xLm1lbW9pemVkU3RhdGV8fHE9PT1hKSYmbnVsbCE9PXEuY2hpbGQpe3EuY2hpbGQucmV0dXJuPXE7cT1xLmNoaWxkO2NvbnRpbnVlfWlmKHE9PT1hKWJyZWFrIGE7Zm9yKDtudWxsPT09cS5zaWJsaW5nOyl7aWYobnVsbD09PXEucmV0dXJufHxxLnJldHVybj09PWEpYnJlYWsgYTttPT09cSYmKG09bnVsbCk7cT1xLnJldHVybn1tPT09cSYmKG09bnVsbCk7cS5zaWJsaW5nLnJldHVybj1xLnJldHVybjtxPXEuc2libGluZ319YnJlYWs7Y2FzZSAxOTpkayhiLGEpO2ZrKGEpO2QmNCYmYmsoYSk7YnJlYWs7Y2FzZSAyMTpicmVhaztkZWZhdWx0OmRrKGIsXG5hKSxmayhhKX19ZnVuY3Rpb24gZmsoYSl7dmFyIGI9YS5mbGFncztpZihiJjIpe3RyeXthOntmb3IodmFyIGM9YS5yZXR1cm47bnVsbCE9PWM7KXtpZihVaihjKSl7dmFyIGQ9YzticmVhayBhfWM9Yy5yZXR1cm59dGhyb3cgRXJyb3IocCgxNjApKTt9c3dpdGNoKGQudGFnKXtjYXNlIDU6dmFyIGU9ZC5zdGF0ZU5vZGU7ZC5mbGFncyYzMiYmKG9iKGUsXCJcIiksZC5mbGFncyY9LTMzKTt2YXIgZj1WaihhKTtYaihhLGYsZSk7YnJlYWs7Y2FzZSAzOmNhc2UgNDp2YXIgZz1kLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGg9VmooYSk7V2ooYSxoLGcpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IocCgxNjEpKTt9fWNhdGNoKGspe1coYSxhLnJldHVybixrKX1hLmZsYWdzJj0tM31iJjQwOTYmJihhLmZsYWdzJj0tNDA5Nyl9ZnVuY3Rpb24gaWsoYSxiLGMpe1Y9YTtqayhhLGIsYyl9XG5mdW5jdGlvbiBqayhhLGIsYyl7Zm9yKHZhciBkPTAhPT0oYS5tb2RlJjEpO251bGwhPT1WOyl7dmFyIGU9VixmPWUuY2hpbGQ7aWYoMjI9PT1lLnRhZyYmZCl7dmFyIGc9bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZXx8S2o7aWYoIWcpe3ZhciBoPWUuYWx0ZXJuYXRlLGs9bnVsbCE9PWgmJm51bGwhPT1oLm1lbW9pemVkU3RhdGV8fFU7aD1Lajt2YXIgbD1VO0tqPWc7aWYoKFU9aykmJiFsKWZvcihWPWU7bnVsbCE9PVY7KWc9VixrPWcuY2hpbGQsMjI9PT1nLnRhZyYmbnVsbCE9PWcubWVtb2l6ZWRTdGF0ZT9rayhlKTpudWxsIT09az8oay5yZXR1cm49ZyxWPWspOmtrKGUpO2Zvcig7bnVsbCE9PWY7KVY9ZixqayhmLGIsYyksZj1mLnNpYmxpbmc7Vj1lO0tqPWg7VT1sfWxrKGEsYixjKX1lbHNlIDAhPT0oZS5zdWJ0cmVlRmxhZ3MmODc3MikmJm51bGwhPT1mPyhmLnJldHVybj1lLFY9Zik6bGsoYSxiLGMpfX1cbmZ1bmN0aW9uIGxrKGEpe2Zvcig7bnVsbCE9PVY7KXt2YXIgYj1WO2lmKDAhPT0oYi5mbGFncyY4NzcyKSl7dmFyIGM9Yi5hbHRlcm5hdGU7dHJ5e2lmKDAhPT0oYi5mbGFncyY4NzcyKSlzd2l0Y2goYi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6VXx8UmooNSxiKTticmVhaztjYXNlIDE6dmFyIGQ9Yi5zdGF0ZU5vZGU7aWYoYi5mbGFncyY0JiYhVSlpZihudWxsPT09YylkLmNvbXBvbmVudERpZE1vdW50KCk7ZWxzZXt2YXIgZT1iLmVsZW1lbnRUeXBlPT09Yi50eXBlP2MubWVtb2l6ZWRQcm9wczpMZyhiLnR5cGUsYy5tZW1vaXplZFByb3BzKTtkLmNvbXBvbmVudERpZFVwZGF0ZShlLGMubWVtb2l6ZWRTdGF0ZSxkLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKX12YXIgZj1iLnVwZGF0ZVF1ZXVlO251bGwhPT1mJiZpaChiLGYsZCk7YnJlYWs7Y2FzZSAzOnZhciBnPWIudXBkYXRlUXVldWU7aWYobnVsbCE9PWcpe2M9bnVsbDtpZihudWxsIT09Yi5jaGlsZClzd2l0Y2goYi5jaGlsZC50YWcpe2Nhc2UgNTpjPVxuYi5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOmM9Yi5jaGlsZC5zdGF0ZU5vZGV9aWgoYixnLGMpfWJyZWFrO2Nhc2UgNTp2YXIgaD1iLnN0YXRlTm9kZTtpZihudWxsPT09YyYmYi5mbGFncyY0KXtjPWg7dmFyIGs9Yi5tZW1vaXplZFByb3BzO3N3aXRjaChiLnR5cGUpe2Nhc2UgXCJidXR0b25cIjpjYXNlIFwiaW5wdXRcIjpjYXNlIFwic2VsZWN0XCI6Y2FzZSBcInRleHRhcmVhXCI6ay5hdXRvRm9jdXMmJmMuZm9jdXMoKTticmVhaztjYXNlIFwiaW1nXCI6ay5zcmMmJihjLnNyYz1rLnNyYyl9fWJyZWFrO2Nhc2UgNjpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmlmKG51bGw9PT1iLm1lbW9pemVkU3RhdGUpe3ZhciBsPWIuYWx0ZXJuYXRlO2lmKG51bGwhPT1sKXt2YXIgbT1sLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PW0pe3ZhciBxPW0uZGVoeWRyYXRlZDtudWxsIT09cSYmYmQocSl9fX1icmVhaztjYXNlIDE5OmNhc2UgMTc6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6Y2FzZSAyNTpicmVhaztcbmRlZmF1bHQ6dGhyb3cgRXJyb3IocCgxNjMpKTt9VXx8Yi5mbGFncyY1MTImJlNqKGIpfWNhdGNoKHIpe1coYixiLnJldHVybixyKX19aWYoYj09PWEpe1Y9bnVsbDticmVha31jPWIuc2libGluZztpZihudWxsIT09Yyl7Yy5yZXR1cm49Yi5yZXR1cm47Vj1jO2JyZWFrfVY9Yi5yZXR1cm59fWZ1bmN0aW9uIGhrKGEpe2Zvcig7bnVsbCE9PVY7KXt2YXIgYj1WO2lmKGI9PT1hKXtWPW51bGw7YnJlYWt9dmFyIGM9Yi5zaWJsaW5nO2lmKG51bGwhPT1jKXtjLnJldHVybj1iLnJldHVybjtWPWM7YnJlYWt9Vj1iLnJldHVybn19XG5mdW5jdGlvbiBrayhhKXtmb3IoO251bGwhPT1WOyl7dmFyIGI9Vjt0cnl7c3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnZhciBjPWIucmV0dXJuO3RyeXtSaig0LGIpfWNhdGNoKGspe1coYixjLGspfWJyZWFrO2Nhc2UgMTp2YXIgZD1iLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5jb21wb25lbnREaWRNb3VudCl7dmFyIGU9Yi5yZXR1cm47dHJ5e2QuY29tcG9uZW50RGlkTW91bnQoKX1jYXRjaChrKXtXKGIsZSxrKX19dmFyIGY9Yi5yZXR1cm47dHJ5e1NqKGIpfWNhdGNoKGspe1coYixmLGspfWJyZWFrO2Nhc2UgNTp2YXIgZz1iLnJldHVybjt0cnl7U2ooYil9Y2F0Y2goayl7VyhiLGcsayl9fX1jYXRjaChrKXtXKGIsYi5yZXR1cm4sayl9aWYoYj09PWEpe1Y9bnVsbDticmVha312YXIgaD1iLnNpYmxpbmc7aWYobnVsbCE9PWgpe2gucmV0dXJuPWIucmV0dXJuO1Y9aDticmVha31WPWIucmV0dXJufX1cbnZhciBtaz1NYXRoLmNlaWwsbms9dWEuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixvaz11YS5SZWFjdEN1cnJlbnRPd25lcixwaz11YS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxLPTAsUj1udWxsLFk9bnVsbCxaPTAsZ2o9MCxmaj1VZigwKSxUPTAscWs9bnVsbCxoaD0wLHJrPTAsc2s9MCx0az1udWxsLHVrPW51bGwsZ2s9MCxIaj1JbmZpbml0eSx2az1udWxsLFBpPSExLFFpPW51bGwsU2k9bnVsbCx3az0hMSx4az1udWxsLHlrPTAsems9MCxBaz1udWxsLEJrPS0xLENrPTA7ZnVuY3Rpb24gTCgpe3JldHVybiAwIT09KEsmNik/QigpOi0xIT09Qms/Qms6Qms9QigpfVxuZnVuY3Rpb24gbGgoYSl7aWYoMD09PShhLm1vZGUmMSkpcmV0dXJuIDE7aWYoMCE9PShLJjIpJiYwIT09WilyZXR1cm4gWiYtWjtpZihudWxsIT09S2cudHJhbnNpdGlvbilyZXR1cm4gMD09PUNrJiYoQ2s9eWMoKSksQ2s7YT1DO2lmKDAhPT1hKXJldHVybiBhO2E9d2luZG93LmV2ZW50O2E9dm9pZCAwPT09YT8xNjpqZChhLnR5cGUpO3JldHVybiBhfWZ1bmN0aW9uIG1oKGEsYixjLGQpe2lmKDUwPHprKXRocm93IHprPTAsQWs9bnVsbCxFcnJvcihwKDE4NSkpO0FjKGEsYyxkKTtpZigwPT09KEsmMil8fGEhPT1SKWE9PT1SJiYoMD09PShLJjIpJiYocmt8PWMpLDQ9PT1UJiZEayhhLFopKSxFayhhLGQpLDE9PT1jJiYwPT09SyYmMD09PShiLm1vZGUmMSkmJihIaj1CKCkrNTAwLGZnJiZqZygpKX1cbmZ1bmN0aW9uIEVrKGEsYil7dmFyIGM9YS5jYWxsYmFja05vZGU7d2MoYSxiKTt2YXIgZD11YyhhLGE9PT1SP1o6MCk7aWYoMD09PWQpbnVsbCE9PWMmJmJjKGMpLGEuY2FsbGJhY2tOb2RlPW51bGwsYS5jYWxsYmFja1ByaW9yaXR5PTA7ZWxzZSBpZihiPWQmLWQsYS5jYWxsYmFja1ByaW9yaXR5IT09Yil7bnVsbCE9YyYmYmMoYyk7aWYoMT09PWIpMD09PWEudGFnP2lnKEZrLmJpbmQobnVsbCxhKSk6aGcoRmsuYmluZChudWxsLGEpKSxKZihmdW5jdGlvbigpezA9PT0oSyY2KSYmamcoKX0pLGM9bnVsbDtlbHNle3N3aXRjaChEYyhkKSl7Y2FzZSAxOmM9ZmM7YnJlYWs7Y2FzZSA0OmM9Z2M7YnJlYWs7Y2FzZSAxNjpjPWhjO2JyZWFrO2Nhc2UgNTM2ODcwOTEyOmM9amM7YnJlYWs7ZGVmYXVsdDpjPWhjfWM9R2soYyxIay5iaW5kKG51bGwsYSkpfWEuY2FsbGJhY2tQcmlvcml0eT1iO2EuY2FsbGJhY2tOb2RlPWN9fVxuZnVuY3Rpb24gSGsoYSxiKXtCaz0tMTtDaz0wO2lmKDAhPT0oSyY2KSl0aHJvdyBFcnJvcihwKDMyNykpO3ZhciBjPWEuY2FsbGJhY2tOb2RlO2lmKElrKCkmJmEuY2FsbGJhY2tOb2RlIT09YylyZXR1cm4gbnVsbDt2YXIgZD11YyhhLGE9PT1SP1o6MCk7aWYoMD09PWQpcmV0dXJuIG51bGw7aWYoMCE9PShkJjMwKXx8MCE9PShkJmEuZXhwaXJlZExhbmVzKXx8YiliPUprKGEsZCk7ZWxzZXtiPWQ7dmFyIGU9SztLfD0yO3ZhciBmPUtrKCk7aWYoUiE9PWF8fFohPT1iKXZrPW51bGwsSGo9QigpKzUwMCxMayhhLGIpO2RvIHRyeXtNaygpO2JyZWFrfWNhdGNoKGgpe05rKGEsaCl9d2hpbGUoMSk7UWcoKTtuay5jdXJyZW50PWY7Sz1lO251bGwhPT1ZP2I9MDooUj1udWxsLFo9MCxiPVQpfWlmKDAhPT1iKXsyPT09YiYmKGU9eGMoYSksMCE9PWUmJihkPWUsYj1PayhhLGUpKSk7aWYoMT09PWIpdGhyb3cgYz1xayxMayhhLDApLERrKGEsZCksRWsoYSxCKCkpLGM7aWYoNj09PWIpRGsoYSxkKTtcbmVsc2V7ZT1hLmN1cnJlbnQuYWx0ZXJuYXRlO2lmKDA9PT0oZCYzMCkmJiFQayhlKSYmKGI9SmsoYSxkKSwyPT09YiYmKGY9eGMoYSksMCE9PWYmJihkPWYsYj1PayhhLGYpKSksMT09PWIpKXRocm93IGM9cWssTGsoYSwwKSxEayhhLGQpLEVrKGEsQigpKSxjO2EuZmluaXNoZWRXb3JrPWU7YS5maW5pc2hlZExhbmVzPWQ7c3dpdGNoKGIpe2Nhc2UgMDpjYXNlIDE6dGhyb3cgRXJyb3IocCgzNDUpKTtjYXNlIDI6UWsoYSx1ayx2ayk7YnJlYWs7Y2FzZSAzOkRrKGEsZCk7aWYoKGQmMTMwMDIzNDI0KT09PWQmJihiPWdrKzUwMC1CKCksMTA8Yikpe2lmKDAhPT11YyhhLDApKWJyZWFrO2U9YS5zdXNwZW5kZWRMYW5lcztpZigoZSZkKSE9PWQpe0woKTthLnBpbmdlZExhbmVzfD1hLnN1c3BlbmRlZExhbmVzJmU7YnJlYWt9YS50aW1lb3V0SGFuZGxlPUZmKFFrLmJpbmQobnVsbCxhLHVrLHZrKSxiKTticmVha31RayhhLHVrLHZrKTticmVhaztjYXNlIDQ6RGsoYSxkKTtpZigoZCY0MTk0MjQwKT09PVxuZClicmVhaztiPWEuZXZlbnRUaW1lcztmb3IoZT0tMTswPGQ7KXt2YXIgZz0zMS1vYyhkKTtmPTE8PGc7Zz1iW2ddO2c+ZSYmKGU9Zyk7ZCY9fmZ9ZD1lO2Q9QigpLWQ7ZD0oMTIwPmQ/MTIwOjQ4MD5kPzQ4MDoxMDgwPmQ/MTA4MDoxOTIwPmQ/MTkyMDozRTM+ZD8zRTM6NDMyMD5kPzQzMjA6MTk2MCptayhkLzE5NjApKS1kO2lmKDEwPGQpe2EudGltZW91dEhhbmRsZT1GZihRay5iaW5kKG51bGwsYSx1ayx2ayksZCk7YnJlYWt9UWsoYSx1ayx2ayk7YnJlYWs7Y2FzZSA1OlFrKGEsdWssdmspO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IocCgzMjkpKTt9fX1FayhhLEIoKSk7cmV0dXJuIGEuY2FsbGJhY2tOb2RlPT09Yz9Iay5iaW5kKG51bGwsYSk6bnVsbH1cbmZ1bmN0aW9uIE9rKGEsYil7dmFyIGM9dGs7YS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkJiYoTGsoYSxiKS5mbGFnc3w9MjU2KTthPUprKGEsYik7MiE9PWEmJihiPXVrLHVrPWMsbnVsbCE9PWImJkdqKGIpKTtyZXR1cm4gYX1mdW5jdGlvbiBHaihhKXtudWxsPT09dWs/dWs9YTp1ay5wdXNoLmFwcGx5KHVrLGEpfVxuZnVuY3Rpb24gUGsoYSl7Zm9yKHZhciBiPWE7Oyl7aWYoYi5mbGFncyYxNjM4NCl7dmFyIGM9Yi51cGRhdGVRdWV1ZTtpZihudWxsIT09YyYmKGM9Yy5zdG9yZXMsbnVsbCE9PWMpKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdLGY9ZS5nZXRTbmFwc2hvdDtlPWUudmFsdWU7dHJ5e2lmKCFIZShmKCksZSkpcmV0dXJuITF9Y2F0Y2goZyl7cmV0dXJuITF9fX1jPWIuY2hpbGQ7aWYoYi5zdWJ0cmVlRmxhZ3MmMTYzODQmJm51bGwhPT1jKWMucmV0dXJuPWIsYj1jO2Vsc2V7aWYoYj09PWEpYnJlYWs7Zm9yKDtudWxsPT09Yi5zaWJsaW5nOyl7aWYobnVsbD09PWIucmV0dXJufHxiLnJldHVybj09PWEpcmV0dXJuITA7Yj1iLnJldHVybn1iLnNpYmxpbmcucmV0dXJuPWIucmV0dXJuO2I9Yi5zaWJsaW5nfX1yZXR1cm4hMH1cbmZ1bmN0aW9uIERrKGEsYil7YiY9fnNrO2ImPX5yazthLnN1c3BlbmRlZExhbmVzfD1iO2EucGluZ2VkTGFuZXMmPX5iO2ZvcihhPWEuZXhwaXJhdGlvblRpbWVzOzA8Yjspe3ZhciBjPTMxLW9jKGIpLGQ9MTw8YzthW2NdPS0xO2ImPX5kfX1mdW5jdGlvbiBGayhhKXtpZigwIT09KEsmNikpdGhyb3cgRXJyb3IocCgzMjcpKTtJaygpO3ZhciBiPXVjKGEsMCk7aWYoMD09PShiJjEpKXJldHVybiBFayhhLEIoKSksbnVsbDt2YXIgYz1KayhhLGIpO2lmKDAhPT1hLnRhZyYmMj09PWMpe3ZhciBkPXhjKGEpOzAhPT1kJiYoYj1kLGM9T2soYSxkKSl9aWYoMT09PWMpdGhyb3cgYz1xayxMayhhLDApLERrKGEsYiksRWsoYSxCKCkpLGM7aWYoNj09PWMpdGhyb3cgRXJyb3IocCgzNDUpKTthLmZpbmlzaGVkV29yaz1hLmN1cnJlbnQuYWx0ZXJuYXRlO2EuZmluaXNoZWRMYW5lcz1iO1FrKGEsdWssdmspO0VrKGEsQigpKTtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIFJrKGEsYil7dmFyIGM9SztLfD0xO3RyeXtyZXR1cm4gYShiKX1maW5hbGx5e0s9YywwPT09SyYmKEhqPUIoKSs1MDAsZmcmJmpnKCkpfX1mdW5jdGlvbiBTayhhKXtudWxsIT09eGsmJjA9PT14ay50YWcmJjA9PT0oSyY2KSYmSWsoKTt2YXIgYj1LO0t8PTE7dmFyIGM9cGsudHJhbnNpdGlvbixkPUM7dHJ5e2lmKHBrLnRyYW5zaXRpb249bnVsbCxDPTEsYSlyZXR1cm4gYSgpfWZpbmFsbHl7Qz1kLHBrLnRyYW5zaXRpb249YyxLPWIsMD09PShLJjYpJiZqZygpfX1mdW5jdGlvbiBJaigpe2dqPWZqLmN1cnJlbnQ7RShmail9XG5mdW5jdGlvbiBMayhhLGIpe2EuZmluaXNoZWRXb3JrPW51bGw7YS5maW5pc2hlZExhbmVzPTA7dmFyIGM9YS50aW1lb3V0SGFuZGxlOy0xIT09YyYmKGEudGltZW91dEhhbmRsZT0tMSxHZihjKSk7aWYobnVsbCE9PVkpZm9yKGM9WS5yZXR1cm47bnVsbCE9PWM7KXt2YXIgZD1jO3dnKGQpO3N3aXRjaChkLnRhZyl7Y2FzZSAxOmQ9ZC50eXBlLmNoaWxkQ29udGV4dFR5cGVzO251bGwhPT1kJiZ2b2lkIDAhPT1kJiYkZigpO2JyZWFrO2Nhc2UgMzpKaCgpO0UoV2YpO0UoSCk7T2goKTticmVhaztjYXNlIDU6TGgoZCk7YnJlYWs7Y2FzZSA0OkpoKCk7YnJlYWs7Y2FzZSAxMzpFKE0pO2JyZWFrO2Nhc2UgMTk6RShNKTticmVhaztjYXNlIDEwOlJnKGQudHlwZS5fY29udGV4dCk7YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOklqKCl9Yz1jLnJldHVybn1SPWE7WT1hPXdoKGEuY3VycmVudCxudWxsKTtaPWdqPWI7VD0wO3FrPW51bGw7c2s9cms9aGg9MDt1az10az1udWxsO2lmKG51bGwhPT1XZyl7Zm9yKGI9XG4wO2I8V2cubGVuZ3RoO2IrKylpZihjPVdnW2JdLGQ9Yy5pbnRlcmxlYXZlZCxudWxsIT09ZCl7Yy5pbnRlcmxlYXZlZD1udWxsO3ZhciBlPWQubmV4dCxmPWMucGVuZGluZztpZihudWxsIT09Zil7dmFyIGc9Zi5uZXh0O2YubmV4dD1lO2QubmV4dD1nfWMucGVuZGluZz1kfVdnPW51bGx9cmV0dXJuIGF9XG5mdW5jdGlvbiBOayhhLGIpe2Rve3ZhciBjPVk7dHJ5e1FnKCk7UGguY3VycmVudD1haTtpZihTaCl7Zm9yKHZhciBkPU4ubWVtb2l6ZWRTdGF0ZTtudWxsIT09ZDspe3ZhciBlPWQucXVldWU7bnVsbCE9PWUmJihlLnBlbmRpbmc9bnVsbCk7ZD1kLm5leHR9U2g9ITF9Umg9MDtQPU89Tj1udWxsO1RoPSExO1VoPTA7b2suY3VycmVudD1udWxsO2lmKG51bGw9PT1jfHxudWxsPT09Yy5yZXR1cm4pe1Q9MTtxaz1iO1k9bnVsbDticmVha31hOnt2YXIgZj1hLGc9Yy5yZXR1cm4saD1jLGs9YjtiPVo7aC5mbGFnc3w9MzI3Njg7aWYobnVsbCE9PWsmJlwib2JqZWN0XCI9PT10eXBlb2YgayYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGsudGhlbil7dmFyIGw9ayxtPWgscT1tLnRhZztpZigwPT09KG0ubW9kZSYxKSYmKDA9PT1xfHwxMT09PXF8fDE1PT09cSkpe3ZhciByPW0uYWx0ZXJuYXRlO3I/KG0udXBkYXRlUXVldWU9ci51cGRhdGVRdWV1ZSxtLm1lbW9pemVkU3RhdGU9ci5tZW1vaXplZFN0YXRlLFxubS5sYW5lcz1yLmxhbmVzKToobS51cGRhdGVRdWV1ZT1udWxsLG0ubWVtb2l6ZWRTdGF0ZT1udWxsKX12YXIgeT1WaShnKTtpZihudWxsIT09eSl7eS5mbGFncyY9LTI1NztXaSh5LGcsaCxmLGIpO3kubW9kZSYxJiZUaShmLGwsYik7Yj15O2s9bDt2YXIgbj1iLnVwZGF0ZVF1ZXVlO2lmKG51bGw9PT1uKXt2YXIgdD1uZXcgU2V0O3QuYWRkKGspO2IudXBkYXRlUXVldWU9dH1lbHNlIG4uYWRkKGspO2JyZWFrIGF9ZWxzZXtpZigwPT09KGImMSkpe1RpKGYsbCxiKTt1aigpO2JyZWFrIGF9az1FcnJvcihwKDQyNikpfX1lbHNlIGlmKEkmJmgubW9kZSYxKXt2YXIgSj1WaShnKTtpZihudWxsIT09Sil7MD09PShKLmZsYWdzJjY1NTM2KSYmKEouZmxhZ3N8PTI1Nik7V2koSixnLGgsZixiKTtKZyhLaShrLGgpKTticmVhayBhfX1mPWs9S2koayxoKTs0IT09VCYmKFQ9Mik7bnVsbD09PXRrP3RrPVtmXTp0ay5wdXNoKGYpO2Y9Zztkb3tzd2l0Y2goZi50YWcpe2Nhc2UgMzpmLmZsYWdzfD02NTUzNjtcbmImPS1iO2YubGFuZXN8PWI7dmFyIHg9T2koZixrLGIpO2ZoKGYseCk7YnJlYWsgYTtjYXNlIDE6aD1rO3ZhciB3PWYudHlwZSx1PWYuc3RhdGVOb2RlO2lmKDA9PT0oZi5mbGFncyYxMjgpJiYoXCJmdW5jdGlvblwiPT09dHlwZW9mIHcuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxudWxsIT09dSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIHUuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09U2l8fCFTaS5oYXModSkpKSl7Zi5mbGFnc3w9NjU1MzY7YiY9LWI7Zi5sYW5lc3w9Yjt2YXIgRj1SaShmLGgsYik7ZmgoZixGKTticmVhayBhfX1mPWYucmV0dXJufXdoaWxlKG51bGwhPT1mKX1UayhjKX1jYXRjaChuYSl7Yj1uYTtZPT09YyYmbnVsbCE9PWMmJihZPWM9Yy5yZXR1cm4pO2NvbnRpbnVlfWJyZWFrfXdoaWxlKDEpfWZ1bmN0aW9uIEtrKCl7dmFyIGE9bmsuY3VycmVudDtuay5jdXJyZW50PWFpO3JldHVybiBudWxsPT09YT9haTphfVxuZnVuY3Rpb24gdWooKXtpZigwPT09VHx8Mz09PVR8fDI9PT1UKVQ9NDtudWxsPT09Unx8MD09PShoaCYyNjg0MzU0NTUpJiYwPT09KHJrJjI2ODQzNTQ1NSl8fERrKFIsWil9ZnVuY3Rpb24gSmsoYSxiKXt2YXIgYz1LO0t8PTI7dmFyIGQ9S2soKTtpZihSIT09YXx8WiE9PWIpdms9bnVsbCxMayhhLGIpO2RvIHRyeXtVaygpO2JyZWFrfWNhdGNoKGUpe05rKGEsZSl9d2hpbGUoMSk7UWcoKTtLPWM7bmsuY3VycmVudD1kO2lmKG51bGwhPT1ZKXRocm93IEVycm9yKHAoMjYxKSk7Uj1udWxsO1o9MDtyZXR1cm4gVH1mdW5jdGlvbiBVaygpe2Zvcig7bnVsbCE9PVk7KVZrKFkpfWZ1bmN0aW9uIE1rKCl7Zm9yKDtudWxsIT09WSYmIWNjKCk7KVZrKFkpfWZ1bmN0aW9uIFZrKGEpe3ZhciBiPVdrKGEuYWx0ZXJuYXRlLGEsZ2opO2EubWVtb2l6ZWRQcm9wcz1hLnBlbmRpbmdQcm9wcztudWxsPT09Yj9UayhhKTpZPWI7b2suY3VycmVudD1udWxsfVxuZnVuY3Rpb24gVGsoYSl7dmFyIGI9YTtkb3t2YXIgYz1iLmFsdGVybmF0ZTthPWIucmV0dXJuO2lmKDA9PT0oYi5mbGFncyYzMjc2OCkpe2lmKGM9RmooYyxiLGdqKSxudWxsIT09Yyl7WT1jO3JldHVybn19ZWxzZXtjPUpqKGMsYik7aWYobnVsbCE9PWMpe2MuZmxhZ3MmPTMyNzY3O1k9YztyZXR1cm59aWYobnVsbCE9PWEpYS5mbGFnc3w9MzI3NjgsYS5zdWJ0cmVlRmxhZ3M9MCxhLmRlbGV0aW9ucz1udWxsO2Vsc2V7VD02O1k9bnVsbDtyZXR1cm59fWI9Yi5zaWJsaW5nO2lmKG51bGwhPT1iKXtZPWI7cmV0dXJufVk9Yj1hfXdoaWxlKG51bGwhPT1iKTswPT09VCYmKFQ9NSl9ZnVuY3Rpb24gUWsoYSxiLGMpe3ZhciBkPUMsZT1way50cmFuc2l0aW9uO3RyeXtway50cmFuc2l0aW9uPW51bGwsQz0xLFhrKGEsYixjLGQpfWZpbmFsbHl7cGsudHJhbnNpdGlvbj1lLEM9ZH1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIFhrKGEsYixjLGQpe2RvIElrKCk7d2hpbGUobnVsbCE9PXhrKTtpZigwIT09KEsmNikpdGhyb3cgRXJyb3IocCgzMjcpKTtjPWEuZmluaXNoZWRXb3JrO3ZhciBlPWEuZmluaXNoZWRMYW5lcztpZihudWxsPT09YylyZXR1cm4gbnVsbDthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO2lmKGM9PT1hLmN1cnJlbnQpdGhyb3cgRXJyb3IocCgxNzcpKTthLmNhbGxiYWNrTm9kZT1udWxsO2EuY2FsbGJhY2tQcmlvcml0eT0wO3ZhciBmPWMubGFuZXN8Yy5jaGlsZExhbmVzO0JjKGEsZik7YT09PVImJihZPVI9bnVsbCxaPTApOzA9PT0oYy5zdWJ0cmVlRmxhZ3MmMjA2NCkmJjA9PT0oYy5mbGFncyYyMDY0KXx8d2t8fCh3az0hMCxHayhoYyxmdW5jdGlvbigpe0lrKCk7cmV0dXJuIG51bGx9KSk7Zj0wIT09KGMuZmxhZ3MmMTU5OTApO2lmKDAhPT0oYy5zdWJ0cmVlRmxhZ3MmMTU5OTApfHxmKXtmPXBrLnRyYW5zaXRpb247cGsudHJhbnNpdGlvbj1udWxsO1xudmFyIGc9QztDPTE7dmFyIGg9SztLfD00O29rLmN1cnJlbnQ9bnVsbDtQaihhLGMpO2VrKGMsYSk7T2UoRGYpO2RkPSEhQ2Y7RGY9Q2Y9bnVsbDthLmN1cnJlbnQ9YztpayhjLGEsZSk7ZGMoKTtLPWg7Qz1nO3BrLnRyYW5zaXRpb249Zn1lbHNlIGEuY3VycmVudD1jO3drJiYod2s9ITEseGs9YSx5az1lKTtmPWEucGVuZGluZ0xhbmVzOzA9PT1mJiYoU2k9bnVsbCk7bWMoYy5zdGF0ZU5vZGUsZCk7RWsoYSxCKCkpO2lmKG51bGwhPT1iKWZvcihkPWEub25SZWNvdmVyYWJsZUVycm9yLGM9MDtjPGIubGVuZ3RoO2MrKyllPWJbY10sZChlLnZhbHVlLHtjb21wb25lbnRTdGFjazplLnN0YWNrLGRpZ2VzdDplLmRpZ2VzdH0pO2lmKFBpKXRocm93IFBpPSExLGE9UWksUWk9bnVsbCxhOzAhPT0oeWsmMSkmJjAhPT1hLnRhZyYmSWsoKTtmPWEucGVuZGluZ0xhbmVzOzAhPT0oZiYxKT9hPT09QWs/emsrKzooems9MCxBaz1hKTp6az0wO2pnKCk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBJaygpe2lmKG51bGwhPT14ayl7dmFyIGE9RGMoeWspLGI9cGsudHJhbnNpdGlvbixjPUM7dHJ5e3BrLnRyYW5zaXRpb249bnVsbDtDPTE2PmE/MTY6YTtpZihudWxsPT09eGspdmFyIGQ9ITE7ZWxzZXthPXhrO3hrPW51bGw7eWs9MDtpZigwIT09KEsmNikpdGhyb3cgRXJyb3IocCgzMzEpKTt2YXIgZT1LO0t8PTQ7Zm9yKFY9YS5jdXJyZW50O251bGwhPT1WOyl7dmFyIGY9VixnPWYuY2hpbGQ7aWYoMCE9PShWLmZsYWdzJjE2KSl7dmFyIGg9Zi5kZWxldGlvbnM7aWYobnVsbCE9PWgpe2Zvcih2YXIgaz0wO2s8aC5sZW5ndGg7aysrKXt2YXIgbD1oW2tdO2ZvcihWPWw7bnVsbCE9PVY7KXt2YXIgbT1WO3N3aXRjaChtLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpRaig4LG0sZil9dmFyIHE9bS5jaGlsZDtpZihudWxsIT09cSlxLnJldHVybj1tLFY9cTtlbHNlIGZvcig7bnVsbCE9PVY7KXttPVY7dmFyIHI9bS5zaWJsaW5nLHk9bS5yZXR1cm47VGoobSk7aWYobT09PVxubCl7Vj1udWxsO2JyZWFrfWlmKG51bGwhPT1yKXtyLnJldHVybj15O1Y9cjticmVha31WPXl9fX12YXIgbj1mLmFsdGVybmF0ZTtpZihudWxsIT09bil7dmFyIHQ9bi5jaGlsZDtpZihudWxsIT09dCl7bi5jaGlsZD1udWxsO2Rve3ZhciBKPXQuc2libGluZzt0LnNpYmxpbmc9bnVsbDt0PUp9d2hpbGUobnVsbCE9PXQpfX1WPWZ9fWlmKDAhPT0oZi5zdWJ0cmVlRmxhZ3MmMjA2NCkmJm51bGwhPT1nKWcucmV0dXJuPWYsVj1nO2Vsc2UgYjpmb3IoO251bGwhPT1WOyl7Zj1WO2lmKDAhPT0oZi5mbGFncyYyMDQ4KSlzd2l0Y2goZi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6UWooOSxmLGYucmV0dXJuKX12YXIgeD1mLnNpYmxpbmc7aWYobnVsbCE9PXgpe3gucmV0dXJuPWYucmV0dXJuO1Y9eDticmVhayBifVY9Zi5yZXR1cm59fXZhciB3PWEuY3VycmVudDtmb3IoVj13O251bGwhPT1WOyl7Zz1WO3ZhciB1PWcuY2hpbGQ7aWYoMCE9PShnLnN1YnRyZWVGbGFncyYyMDY0KSYmbnVsbCE9PVxudSl1LnJldHVybj1nLFY9dTtlbHNlIGI6Zm9yKGc9dztudWxsIT09Vjspe2g9VjtpZigwIT09KGguZmxhZ3MmMjA0OCkpdHJ5e3N3aXRjaChoLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpSaig5LGgpfX1jYXRjaChuYSl7VyhoLGgucmV0dXJuLG5hKX1pZihoPT09Zyl7Vj1udWxsO2JyZWFrIGJ9dmFyIEY9aC5zaWJsaW5nO2lmKG51bGwhPT1GKXtGLnJldHVybj1oLnJldHVybjtWPUY7YnJlYWsgYn1WPWgucmV0dXJufX1LPWU7amcoKTtpZihsYyYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGxjLm9uUG9zdENvbW1pdEZpYmVyUm9vdCl0cnl7bGMub25Qb3N0Q29tbWl0RmliZXJSb290KGtjLGEpfWNhdGNoKG5hKXt9ZD0hMH1yZXR1cm4gZH1maW5hbGx5e0M9Yyxway50cmFuc2l0aW9uPWJ9fXJldHVybiExfWZ1bmN0aW9uIFlrKGEsYixjKXtiPUtpKGMsYik7Yj1PaShhLGIsMSk7YT1kaChhLGIsMSk7Yj1MKCk7bnVsbCE9PWEmJihBYyhhLDEsYiksRWsoYSxiKSl9XG5mdW5jdGlvbiBXKGEsYixjKXtpZigzPT09YS50YWcpWWsoYSxhLGMpO2Vsc2UgZm9yKDtudWxsIT09Yjspe2lmKDM9PT1iLnRhZyl7WWsoYixhLGMpO2JyZWFrfWVsc2UgaWYoMT09PWIudGFnKXt2YXIgZD1iLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGQuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09U2l8fCFTaS5oYXMoZCkpKXthPUtpKGMsYSk7YT1SaShiLGEsMSk7Yj1kaChiLGEsMSk7YT1MKCk7bnVsbCE9PWImJihBYyhiLDEsYSksRWsoYixhKSk7YnJlYWt9fWI9Yi5yZXR1cm59fVxuZnVuY3Rpb24gVWkoYSxiLGMpe3ZhciBkPWEucGluZ0NhY2hlO251bGwhPT1kJiZkLmRlbGV0ZShiKTtiPUwoKTthLnBpbmdlZExhbmVzfD1hLnN1c3BlbmRlZExhbmVzJmM7Uj09PWEmJihaJmMpPT09YyYmKDQ9PT1UfHwzPT09VCYmKFomMTMwMDIzNDI0KT09PVomJjUwMD5CKCktZ2s/TGsoYSwwKTpza3w9Yyk7RWsoYSxiKX1mdW5jdGlvbiBaayhhLGIpezA9PT1iJiYoMD09PShhLm1vZGUmMSk/Yj0xOihiPXNjLHNjPDw9MSwwPT09KHNjJjEzMDAyMzQyNCkmJihzYz00MTk0MzA0KSkpO3ZhciBjPUwoKTthPVpnKGEsYik7bnVsbCE9PWEmJihBYyhhLGIsYyksRWsoYSxjKSl9ZnVuY3Rpb24gdmooYSl7dmFyIGI9YS5tZW1vaXplZFN0YXRlLGM9MDtudWxsIT09YiYmKGM9Yi5yZXRyeUxhbmUpO1prKGEsYyl9XG5mdW5jdGlvbiBjayhhLGIpe3ZhciBjPTA7c3dpdGNoKGEudGFnKXtjYXNlIDEzOnZhciBkPWEuc3RhdGVOb2RlO3ZhciBlPWEubWVtb2l6ZWRTdGF0ZTtudWxsIT09ZSYmKGM9ZS5yZXRyeUxhbmUpO2JyZWFrO2Nhc2UgMTk6ZD1hLnN0YXRlTm9kZTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKHAoMzE0KSk7fW51bGwhPT1kJiZkLmRlbGV0ZShiKTtaayhhLGMpfXZhciBXaztcbldrPWZ1bmN0aW9uKGEsYixjKXtpZihudWxsIT09YSlpZihhLm1lbW9pemVkUHJvcHMhPT1iLnBlbmRpbmdQcm9wc3x8V2YuY3VycmVudClVZz0hMDtlbHNle2lmKDA9PT0oYS5sYW5lcyZjKSYmMD09PShiLmZsYWdzJjEyOCkpcmV0dXJuIFVnPSExLHpqKGEsYixjKTtVZz0wIT09KGEuZmxhZ3MmMTMxMDcyKT8hMDohMX1lbHNlIFVnPSExLEkmJjAhPT0oYi5mbGFncyYxMDQ4NTc2KSYmdWcoYixuZyxiLmluZGV4KTtiLmxhbmVzPTA7c3dpdGNoKGIudGFnKXtjYXNlIDI6dmFyIGQ9Yi50eXBlO2pqKGEsYik7YT1iLnBlbmRpbmdQcm9wczt2YXIgZT1ZZihiLEguY3VycmVudCk7VGcoYixjKTtlPVhoKG51bGwsYixkLGEsZSxjKTt2YXIgZj1iaSgpO2IuZmxhZ3N8PTE7XCJvYmplY3RcIj09PXR5cGVvZiBlJiZudWxsIT09ZSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGUucmVuZGVyJiZ2b2lkIDA9PT1lLiQkdHlwZW9mPyhiLnRhZz0xLGIubWVtb2l6ZWRTdGF0ZT1udWxsLGIudXBkYXRlUXVldWU9XG5udWxsLFpmKGQpPyhmPSEwLGNnKGIpKTpmPSExLGIubWVtb2l6ZWRTdGF0ZT1udWxsIT09ZS5zdGF0ZSYmdm9pZCAwIT09ZS5zdGF0ZT9lLnN0YXRlOm51bGwsYWgoYiksZS51cGRhdGVyPW5oLGIuc3RhdGVOb2RlPWUsZS5fcmVhY3RJbnRlcm5hbHM9YixyaChiLGQsYSxjKSxiPWtqKG51bGwsYixkLCEwLGYsYykpOihiLnRhZz0wLEkmJmYmJnZnKGIpLFlpKG51bGwsYixlLGMpLGI9Yi5jaGlsZCk7cmV0dXJuIGI7Y2FzZSAxNjpkPWIuZWxlbWVudFR5cGU7YTp7amooYSxiKTthPWIucGVuZGluZ1Byb3BzO2U9ZC5faW5pdDtkPWUoZC5fcGF5bG9hZCk7Yi50eXBlPWQ7ZT1iLnRhZz0kayhkKTthPUxnKGQsYSk7c3dpdGNoKGUpe2Nhc2UgMDpiPWRqKG51bGwsYixkLGEsYyk7YnJlYWsgYTtjYXNlIDE6Yj1paihudWxsLGIsZCxhLGMpO2JyZWFrIGE7Y2FzZSAxMTpiPVppKG51bGwsYixkLGEsYyk7YnJlYWsgYTtjYXNlIDE0OmI9YWoobnVsbCxiLGQsTGcoZC50eXBlLGEpLGMpO2JyZWFrIGF9dGhyb3cgRXJyb3IocCgzMDYsXG5kLFwiXCIpKTt9cmV0dXJuIGI7Y2FzZSAwOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpMZyhkLGUpLGRqKGEsYixkLGUsYyk7Y2FzZSAxOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpMZyhkLGUpLGlqKGEsYixkLGUsYyk7Y2FzZSAzOmE6e2xqKGIpO2lmKG51bGw9PT1hKXRocm93IEVycm9yKHAoMzg3KSk7ZD1iLnBlbmRpbmdQcm9wcztmPWIubWVtb2l6ZWRTdGF0ZTtlPWYuZWxlbWVudDtiaChhLGIpO2doKGIsZCxudWxsLGMpO3ZhciBnPWIubWVtb2l6ZWRTdGF0ZTtkPWcuZWxlbWVudDtpZihmLmlzRGVoeWRyYXRlZClpZihmPXtlbGVtZW50OmQsaXNEZWh5ZHJhdGVkOiExLGNhY2hlOmcuY2FjaGUscGVuZGluZ1N1c3BlbnNlQm91bmRhcmllczpnLnBlbmRpbmdTdXNwZW5zZUJvdW5kYXJpZXMsdHJhbnNpdGlvbnM6Zy50cmFuc2l0aW9uc30sYi51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9XG5mLGIubWVtb2l6ZWRTdGF0ZT1mLGIuZmxhZ3MmMjU2KXtlPUtpKEVycm9yKHAoNDIzKSksYik7Yj1taihhLGIsZCxjLGUpO2JyZWFrIGF9ZWxzZSBpZihkIT09ZSl7ZT1LaShFcnJvcihwKDQyNCkpLGIpO2I9bWooYSxiLGQsYyxlKTticmVhayBhfWVsc2UgZm9yKHlnPUxmKGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8uZmlyc3RDaGlsZCkseGc9YixJPSEwLHpnPW51bGwsYz1DaChiLG51bGwsZCxjKSxiLmNoaWxkPWM7YzspYy5mbGFncz1jLmZsYWdzJi0zfDQwOTYsYz1jLnNpYmxpbmc7ZWxzZXtJZygpO2lmKGQ9PT1lKXtiPSRpKGEsYixjKTticmVhayBhfVlpKGEsYixkLGMpfWI9Yi5jaGlsZH1yZXR1cm4gYjtjYXNlIDU6cmV0dXJuIEtoKGIpLG51bGw9PT1hJiZFZyhiKSxkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGY9bnVsbCE9PWE/YS5tZW1vaXplZFByb3BzOm51bGwsZz1lLmNoaWxkcmVuLEVmKGQsZSk/Zz1udWxsOm51bGwhPT1mJiZFZihkLGYpJiYoYi5mbGFnc3w9MzIpLFxuaGooYSxiKSxZaShhLGIsZyxjKSxiLmNoaWxkO2Nhc2UgNjpyZXR1cm4gbnVsbD09PWEmJkVnKGIpLG51bGw7Y2FzZSAxMzpyZXR1cm4gcGooYSxiLGMpO2Nhc2UgNDpyZXR1cm4gSWgoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxkPWIucGVuZGluZ1Byb3BzLG51bGw9PT1hP2IuY2hpbGQ9QmgoYixudWxsLGQsYyk6WWkoYSxiLGQsYyksYi5jaGlsZDtjYXNlIDExOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpMZyhkLGUpLFppKGEsYixkLGUsYyk7Y2FzZSA3OnJldHVybiBZaShhLGIsYi5wZW5kaW5nUHJvcHMsYyksYi5jaGlsZDtjYXNlIDg6cmV0dXJuIFlpKGEsYixiLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixjKSxiLmNoaWxkO2Nhc2UgMTI6cmV0dXJuIFlpKGEsYixiLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixjKSxiLmNoaWxkO2Nhc2UgMTA6YTp7ZD1iLnR5cGUuX2NvbnRleHQ7ZT1iLnBlbmRpbmdQcm9wcztmPWIubWVtb2l6ZWRQcm9wcztcbmc9ZS52YWx1ZTtHKE1nLGQuX2N1cnJlbnRWYWx1ZSk7ZC5fY3VycmVudFZhbHVlPWc7aWYobnVsbCE9PWYpaWYoSGUoZi52YWx1ZSxnKSl7aWYoZi5jaGlsZHJlbj09PWUuY2hpbGRyZW4mJiFXZi5jdXJyZW50KXtiPSRpKGEsYixjKTticmVhayBhfX1lbHNlIGZvcihmPWIuY2hpbGQsbnVsbCE9PWYmJihmLnJldHVybj1iKTtudWxsIT09Zjspe3ZhciBoPWYuZGVwZW5kZW5jaWVzO2lmKG51bGwhPT1oKXtnPWYuY2hpbGQ7Zm9yKHZhciBrPWguZmlyc3RDb250ZXh0O251bGwhPT1rOyl7aWYoay5jb250ZXh0PT09ZCl7aWYoMT09PWYudGFnKXtrPWNoKC0xLGMmLWMpO2sudGFnPTI7dmFyIGw9Zi51cGRhdGVRdWV1ZTtpZihudWxsIT09bCl7bD1sLnNoYXJlZDt2YXIgbT1sLnBlbmRpbmc7bnVsbD09PW0/ay5uZXh0PWs6KGsubmV4dD1tLm5leHQsbS5uZXh0PWspO2wucGVuZGluZz1rfX1mLmxhbmVzfD1jO2s9Zi5hbHRlcm5hdGU7bnVsbCE9PWsmJihrLmxhbmVzfD1jKTtTZyhmLnJldHVybixcbmMsYik7aC5sYW5lc3w9YzticmVha31rPWsubmV4dH19ZWxzZSBpZigxMD09PWYudGFnKWc9Zi50eXBlPT09Yi50eXBlP251bGw6Zi5jaGlsZDtlbHNlIGlmKDE4PT09Zi50YWcpe2c9Zi5yZXR1cm47aWYobnVsbD09PWcpdGhyb3cgRXJyb3IocCgzNDEpKTtnLmxhbmVzfD1jO2g9Zy5hbHRlcm5hdGU7bnVsbCE9PWgmJihoLmxhbmVzfD1jKTtTZyhnLGMsYik7Zz1mLnNpYmxpbmd9ZWxzZSBnPWYuY2hpbGQ7aWYobnVsbCE9PWcpZy5yZXR1cm49ZjtlbHNlIGZvcihnPWY7bnVsbCE9PWc7KXtpZihnPT09Yil7Zz1udWxsO2JyZWFrfWY9Zy5zaWJsaW5nO2lmKG51bGwhPT1mKXtmLnJldHVybj1nLnJldHVybjtnPWY7YnJlYWt9Zz1nLnJldHVybn1mPWd9WWkoYSxiLGUuY2hpbGRyZW4sYyk7Yj1iLmNoaWxkfXJldHVybiBiO2Nhc2UgOTpyZXR1cm4gZT1iLnR5cGUsZD1iLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixUZyhiLGMpLGU9VmcoZSksZD1kKGUpLGIuZmxhZ3N8PTEsWWkoYSxiLGQsYyksXG5iLmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIGQ9Yi50eXBlLGU9TGcoZCxiLnBlbmRpbmdQcm9wcyksZT1MZyhkLnR5cGUsZSksYWooYSxiLGQsZSxjKTtjYXNlIDE1OnJldHVybiBjaihhLGIsYi50eXBlLGIucGVuZGluZ1Byb3BzLGMpO2Nhc2UgMTc6cmV0dXJuIGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZT1iLmVsZW1lbnRUeXBlPT09ZD9lOkxnKGQsZSksamooYSxiKSxiLnRhZz0xLFpmKGQpPyhhPSEwLGNnKGIpKTphPSExLFRnKGIsYykscGgoYixkLGUpLHJoKGIsZCxlLGMpLGtqKG51bGwsYixkLCEwLGEsYyk7Y2FzZSAxOTpyZXR1cm4geWooYSxiLGMpO2Nhc2UgMjI6cmV0dXJuIGVqKGEsYixjKX10aHJvdyBFcnJvcihwKDE1NixiLnRhZykpO307ZnVuY3Rpb24gR2soYSxiKXtyZXR1cm4gYWMoYSxiKX1cbmZ1bmN0aW9uIGFsKGEsYixjLGQpe3RoaXMudGFnPWE7dGhpcy5rZXk9Yzt0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsO3RoaXMuaW5kZXg9MDt0aGlzLnJlZj1udWxsO3RoaXMucGVuZGluZ1Byb3BzPWI7dGhpcy5kZXBlbmRlbmNpZXM9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGw7dGhpcy5tb2RlPWQ7dGhpcy5zdWJ0cmVlRmxhZ3M9dGhpcy5mbGFncz0wO3RoaXMuZGVsZXRpb25zPW51bGw7dGhpcy5jaGlsZExhbmVzPXRoaXMubGFuZXM9MDt0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIEJnKGEsYixjLGQpe3JldHVybiBuZXcgYWwoYSxiLGMsZCl9ZnVuY3Rpb24gYmooYSl7YT1hLnByb3RvdHlwZTtyZXR1cm4hKCFhfHwhYS5pc1JlYWN0Q29tcG9uZW50KX1cbmZ1bmN0aW9uICRrKGEpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXJldHVybiBiaihhKT8xOjA7aWYodm9pZCAwIT09YSYmbnVsbCE9PWEpe2E9YS4kJHR5cGVvZjtpZihhPT09RGEpcmV0dXJuIDExO2lmKGE9PT1HYSlyZXR1cm4gMTR9cmV0dXJuIDJ9XG5mdW5jdGlvbiB3aChhLGIpe3ZhciBjPWEuYWx0ZXJuYXRlO251bGw9PT1jPyhjPUJnKGEudGFnLGIsYS5rZXksYS5tb2RlKSxjLmVsZW1lbnRUeXBlPWEuZWxlbWVudFR5cGUsYy50eXBlPWEudHlwZSxjLnN0YXRlTm9kZT1hLnN0YXRlTm9kZSxjLmFsdGVybmF0ZT1hLGEuYWx0ZXJuYXRlPWMpOihjLnBlbmRpbmdQcm9wcz1iLGMudHlwZT1hLnR5cGUsYy5mbGFncz0wLGMuc3VidHJlZUZsYWdzPTAsYy5kZWxldGlvbnM9bnVsbCk7Yy5mbGFncz1hLmZsYWdzJjE0NjgwMDY0O2MuY2hpbGRMYW5lcz1hLmNoaWxkTGFuZXM7Yy5sYW5lcz1hLmxhbmVzO2MuY2hpbGQ9YS5jaGlsZDtjLm1lbW9pemVkUHJvcHM9YS5tZW1vaXplZFByb3BzO2MubWVtb2l6ZWRTdGF0ZT1hLm1lbW9pemVkU3RhdGU7Yy51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlO2I9YS5kZXBlbmRlbmNpZXM7Yy5kZXBlbmRlbmNpZXM9bnVsbD09PWI/bnVsbDp7bGFuZXM6Yi5sYW5lcyxmaXJzdENvbnRleHQ6Yi5maXJzdENvbnRleHR9O1xuYy5zaWJsaW5nPWEuc2libGluZztjLmluZGV4PWEuaW5kZXg7Yy5yZWY9YS5yZWY7cmV0dXJuIGN9XG5mdW5jdGlvbiB5aChhLGIsYyxkLGUsZil7dmFyIGc9MjtkPWE7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEpYmooYSkmJihnPTEpO2Vsc2UgaWYoXCJzdHJpbmdcIj09PXR5cGVvZiBhKWc9NTtlbHNlIGE6c3dpdGNoKGEpe2Nhc2UgeWE6cmV0dXJuIEFoKGMuY2hpbGRyZW4sZSxmLGIpO2Nhc2UgemE6Zz04O2V8PTg7YnJlYWs7Y2FzZSBBYTpyZXR1cm4gYT1CZygxMixjLGIsZXwyKSxhLmVsZW1lbnRUeXBlPUFhLGEubGFuZXM9ZixhO2Nhc2UgRWE6cmV0dXJuIGE9QmcoMTMsYyxiLGUpLGEuZWxlbWVudFR5cGU9RWEsYS5sYW5lcz1mLGE7Y2FzZSBGYTpyZXR1cm4gYT1CZygxOSxjLGIsZSksYS5lbGVtZW50VHlwZT1GYSxhLmxhbmVzPWYsYTtjYXNlIElhOnJldHVybiBxaihjLGUsZixiKTtkZWZhdWx0OmlmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpc3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2UgQmE6Zz0xMDticmVhayBhO2Nhc2UgQ2E6Zz05O2JyZWFrIGE7Y2FzZSBEYTpnPTExO1xuYnJlYWsgYTtjYXNlIEdhOmc9MTQ7YnJlYWsgYTtjYXNlIEhhOmc9MTY7ZD1udWxsO2JyZWFrIGF9dGhyb3cgRXJyb3IocCgxMzAsbnVsbD09YT9hOnR5cGVvZiBhLFwiXCIpKTt9Yj1CZyhnLGMsYixlKTtiLmVsZW1lbnRUeXBlPWE7Yi50eXBlPWQ7Yi5sYW5lcz1mO3JldHVybiBifWZ1bmN0aW9uIEFoKGEsYixjLGQpe2E9QmcoNyxhLGQsYik7YS5sYW5lcz1jO3JldHVybiBhfWZ1bmN0aW9uIHFqKGEsYixjLGQpe2E9QmcoMjIsYSxkLGIpO2EuZWxlbWVudFR5cGU9SWE7YS5sYW5lcz1jO2Euc3RhdGVOb2RlPXtpc0hpZGRlbjohMX07cmV0dXJuIGF9ZnVuY3Rpb24geGgoYSxiLGMpe2E9QmcoNixhLG51bGwsYik7YS5sYW5lcz1jO3JldHVybiBhfVxuZnVuY3Rpb24gemgoYSxiLGMpe2I9QmcoNCxudWxsIT09YS5jaGlsZHJlbj9hLmNoaWxkcmVuOltdLGEua2V5LGIpO2IubGFuZXM9YztiLnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzphLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246YS5pbXBsZW1lbnRhdGlvbn07cmV0dXJuIGJ9XG5mdW5jdGlvbiBibChhLGIsYyxkLGUpe3RoaXMudGFnPWI7dGhpcy5jb250YWluZXJJbmZvPWE7dGhpcy5maW5pc2hlZFdvcms9dGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGw7dGhpcy50aW1lb3V0SGFuZGxlPS0xO3RoaXMuY2FsbGJhY2tOb2RlPXRoaXMucGVuZGluZ0NvbnRleHQ9dGhpcy5jb250ZXh0PW51bGw7dGhpcy5jYWxsYmFja1ByaW9yaXR5PTA7dGhpcy5ldmVudFRpbWVzPXpjKDApO3RoaXMuZXhwaXJhdGlvblRpbWVzPXpjKC0xKTt0aGlzLmVudGFuZ2xlZExhbmVzPXRoaXMuZmluaXNoZWRMYW5lcz10aGlzLm11dGFibGVSZWFkTGFuZXM9dGhpcy5leHBpcmVkTGFuZXM9dGhpcy5waW5nZWRMYW5lcz10aGlzLnN1c3BlbmRlZExhbmVzPXRoaXMucGVuZGluZ0xhbmVzPTA7dGhpcy5lbnRhbmdsZW1lbnRzPXpjKDApO3RoaXMuaWRlbnRpZmllclByZWZpeD1kO3RoaXMub25SZWNvdmVyYWJsZUVycm9yPWU7dGhpcy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPVxubnVsbH1mdW5jdGlvbiBjbChhLGIsYyxkLGUsZixnLGgsayl7YT1uZXcgYmwoYSxiLGMsaCxrKTsxPT09Yj8oYj0xLCEwPT09ZiYmKGJ8PTgpKTpiPTA7Zj1CZygzLG51bGwsbnVsbCxiKTthLmN1cnJlbnQ9ZjtmLnN0YXRlTm9kZT1hO2YubWVtb2l6ZWRTdGF0ZT17ZWxlbWVudDpkLGlzRGVoeWRyYXRlZDpjLGNhY2hlOm51bGwsdHJhbnNpdGlvbnM6bnVsbCxwZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzOm51bGx9O2FoKGYpO3JldHVybiBhfWZ1bmN0aW9uIGRsKGEsYixjKXt2YXIgZD0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6d2Esa2V5Om51bGw9PWQ/bnVsbDpcIlwiK2QsY2hpbGRyZW46YSxjb250YWluZXJJbmZvOmIsaW1wbGVtZW50YXRpb246Y319XG5mdW5jdGlvbiBlbChhKXtpZighYSlyZXR1cm4gVmY7YT1hLl9yZWFjdEludGVybmFsczthOntpZihWYihhKSE9PWF8fDEhPT1hLnRhZyl0aHJvdyBFcnJvcihwKDE3MCkpO3ZhciBiPWE7ZG97c3dpdGNoKGIudGFnKXtjYXNlIDM6Yj1iLnN0YXRlTm9kZS5jb250ZXh0O2JyZWFrIGE7Y2FzZSAxOmlmKFpmKGIudHlwZSkpe2I9Yi5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7YnJlYWsgYX19Yj1iLnJldHVybn13aGlsZShudWxsIT09Yik7dGhyb3cgRXJyb3IocCgxNzEpKTt9aWYoMT09PWEudGFnKXt2YXIgYz1hLnR5cGU7aWYoWmYoYykpcmV0dXJuIGJnKGEsYyxiKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIGZsKGEsYixjLGQsZSxmLGcsaCxrKXthPWNsKGMsZCwhMCxhLGUsZixnLGgsayk7YS5jb250ZXh0PWVsKG51bGwpO2M9YS5jdXJyZW50O2Q9TCgpO2U9bGgoYyk7Zj1jaChkLGUpO2YuY2FsbGJhY2s9dm9pZCAwIT09YiYmbnVsbCE9PWI/YjpudWxsO2RoKGMsZixlKTthLmN1cnJlbnQubGFuZXM9ZTtBYyhhLGUsZCk7RWsoYSxkKTtyZXR1cm4gYX1mdW5jdGlvbiBnbChhLGIsYyxkKXt2YXIgZT1iLmN1cnJlbnQsZj1MKCksZz1saChlKTtjPWVsKGMpO251bGw9PT1iLmNvbnRleHQ/Yi5jb250ZXh0PWM6Yi5wZW5kaW5nQ29udGV4dD1jO2I9Y2goZixnKTtiLnBheWxvYWQ9e2VsZW1lbnQ6YX07ZD12b2lkIDA9PT1kP251bGw6ZDtudWxsIT09ZCYmKGIuY2FsbGJhY2s9ZCk7YT1kaChlLGIsZyk7bnVsbCE9PWEmJihtaChhLGUsZyxmKSxlaChhLGUsZykpO3JldHVybiBnfVxuZnVuY3Rpb24gaGwoYSl7YT1hLmN1cnJlbnQ7aWYoIWEuY2hpbGQpcmV0dXJuIG51bGw7c3dpdGNoKGEuY2hpbGQudGFnKXtjYXNlIDU6cmV0dXJuIGEuY2hpbGQuc3RhdGVOb2RlO2RlZmF1bHQ6cmV0dXJuIGEuY2hpbGQuc3RhdGVOb2RlfX1mdW5jdGlvbiBpbChhLGIpe2E9YS5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1hJiZudWxsIT09YS5kZWh5ZHJhdGVkKXt2YXIgYz1hLnJldHJ5TGFuZTthLnJldHJ5TGFuZT0wIT09YyYmYzxiP2M6Yn19ZnVuY3Rpb24gamwoYSxiKXtpbChhLGIpOyhhPWEuYWx0ZXJuYXRlKSYmaWwoYSxiKX1mdW5jdGlvbiBrbCgpe3JldHVybiBudWxsfXZhciBsbD1cImZ1bmN0aW9uXCI9PT10eXBlb2YgcmVwb3J0RXJyb3I/cmVwb3J0RXJyb3I6ZnVuY3Rpb24oYSl7Y29uc29sZS5lcnJvcihhKX07ZnVuY3Rpb24gbWwoYSl7dGhpcy5faW50ZXJuYWxSb290PWF9XG5ubC5wcm90b3R5cGUucmVuZGVyPW1sLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faW50ZXJuYWxSb290O2lmKG51bGw9PT1iKXRocm93IEVycm9yKHAoNDA5KSk7Z2woYSxiLG51bGwsbnVsbCl9O25sLnByb3RvdHlwZS51bm1vdW50PW1sLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faW50ZXJuYWxSb290O2lmKG51bGwhPT1hKXt0aGlzLl9pbnRlcm5hbFJvb3Q9bnVsbDt2YXIgYj1hLmNvbnRhaW5lckluZm87U2soZnVuY3Rpb24oKXtnbChudWxsLGEsbnVsbCxudWxsKX0pO2JbdWZdPW51bGx9fTtmdW5jdGlvbiBubChhKXt0aGlzLl9pbnRlcm5hbFJvb3Q9YX1cbm5sLnByb3RvdHlwZS51bnN0YWJsZV9zY2hlZHVsZUh5ZHJhdGlvbj1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1IYygpO2E9e2Jsb2NrZWRPbjpudWxsLHRhcmdldDphLHByaW9yaXR5OmJ9O2Zvcih2YXIgYz0wO2M8UWMubGVuZ3RoJiYwIT09YiYmYjxRY1tjXS5wcmlvcml0eTtjKyspO1FjLnNwbGljZShjLDAsYSk7MD09PWMmJlZjKGEpfX07ZnVuY3Rpb24gb2woYSl7cmV0dXJuISghYXx8MSE9PWEubm9kZVR5cGUmJjkhPT1hLm5vZGVUeXBlJiYxMSE9PWEubm9kZVR5cGUpfWZ1bmN0aW9uIHBsKGEpe3JldHVybiEoIWF8fDEhPT1hLm5vZGVUeXBlJiY5IT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlJiYoOCE9PWEubm9kZVR5cGV8fFwiIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlIFwiIT09YS5ub2RlVmFsdWUpKX1mdW5jdGlvbiBxbCgpe31cbmZ1bmN0aW9uIHJsKGEsYixjLGQsZSl7aWYoZSl7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGQpe3ZhciBmPWQ7ZD1mdW5jdGlvbigpe3ZhciBhPWhsKGcpO2YuY2FsbChhKX19dmFyIGc9ZmwoYixkLGEsMCxudWxsLCExLCExLFwiXCIscWwpO2EuX3JlYWN0Um9vdENvbnRhaW5lcj1nO2FbdWZdPWcuY3VycmVudDtzZig4PT09YS5ub2RlVHlwZT9hLnBhcmVudE5vZGU6YSk7U2soKTtyZXR1cm4gZ31mb3IoO2U9YS5sYXN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoZSk7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGQpe3ZhciBoPWQ7ZD1mdW5jdGlvbigpe3ZhciBhPWhsKGspO2guY2FsbChhKX19dmFyIGs9Y2woYSwwLCExLG51bGwsbnVsbCwhMSwhMSxcIlwiLHFsKTthLl9yZWFjdFJvb3RDb250YWluZXI9azthW3VmXT1rLmN1cnJlbnQ7c2YoOD09PWEubm9kZVR5cGU/YS5wYXJlbnROb2RlOmEpO1NrKGZ1bmN0aW9uKCl7Z2woYixrLGMsZCl9KTtyZXR1cm4ga31cbmZ1bmN0aW9uIHNsKGEsYixjLGQsZSl7dmFyIGY9Yy5fcmVhY3RSb290Q29udGFpbmVyO2lmKGYpe3ZhciBnPWY7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGUpe3ZhciBoPWU7ZT1mdW5jdGlvbigpe3ZhciBhPWhsKGcpO2guY2FsbChhKX19Z2woYixnLGEsZSl9ZWxzZSBnPXJsKGMsYixhLGUsZCk7cmV0dXJuIGhsKGcpfUVjPWZ1bmN0aW9uKGEpe3N3aXRjaChhLnRhZyl7Y2FzZSAzOnZhciBiPWEuc3RhdGVOb2RlO2lmKGIuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl7dmFyIGM9dGMoYi5wZW5kaW5nTGFuZXMpOzAhPT1jJiYoQ2MoYixjfDEpLEVrKGIsQigpKSwwPT09KEsmNikmJihIaj1CKCkrNTAwLGpnKCkpKX1icmVhaztjYXNlIDEzOlNrKGZ1bmN0aW9uKCl7dmFyIGI9WmcoYSwxKTtpZihudWxsIT09Yil7dmFyIGM9TCgpO21oKGIsYSwxLGMpfX0pLGpsKGEsMSl9fTtcbkZjPWZ1bmN0aW9uKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPVpnKGEsMTM0MjE3NzI4KTtpZihudWxsIT09Yil7dmFyIGM9TCgpO21oKGIsYSwxMzQyMTc3MjgsYyl9amwoYSwxMzQyMTc3MjgpfX07R2M9ZnVuY3Rpb24oYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9bGgoYSksYz1aZyhhLGIpO2lmKG51bGwhPT1jKXt2YXIgZD1MKCk7bWgoYyxhLGIsZCl9amwoYSxiKX19O0hjPWZ1bmN0aW9uKCl7cmV0dXJuIEN9O0ljPWZ1bmN0aW9uKGEsYil7dmFyIGM9Qzt0cnl7cmV0dXJuIEM9YSxiKCl9ZmluYWxseXtDPWN9fTtcbnliPWZ1bmN0aW9uKGEsYixjKXtzd2l0Y2goYil7Y2FzZSBcImlucHV0XCI6YmIoYSxjKTtiPWMubmFtZTtpZihcInJhZGlvXCI9PT1jLnR5cGUmJm51bGwhPWIpe2ZvcihjPWE7Yy5wYXJlbnROb2RlOyljPWMucGFyZW50Tm9kZTtjPWMucXVlcnlTZWxlY3RvckFsbChcImlucHV0W25hbWU9XCIrSlNPTi5zdHJpbmdpZnkoXCJcIitiKSsnXVt0eXBlPVwicmFkaW9cIl0nKTtmb3IoYj0wO2I8Yy5sZW5ndGg7YisrKXt2YXIgZD1jW2JdO2lmKGQhPT1hJiZkLmZvcm09PT1hLmZvcm0pe3ZhciBlPURiKGQpO2lmKCFlKXRocm93IEVycm9yKHAoOTApKTtXYShkKTtiYihkLGUpfX19YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6aWIoYSxjKTticmVhaztjYXNlIFwic2VsZWN0XCI6Yj1jLnZhbHVlLG51bGwhPWImJmZiKGEsISFjLm11bHRpcGxlLGIsITEpfX07R2I9Ums7SGI9U2s7XG52YXIgdGw9e3VzaW5nQ2xpZW50RW50cnlQb2ludDohMSxFdmVudHM6W0NiLHVlLERiLEViLEZiLFJrXX0sdWw9e2ZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOldjLGJ1bmRsZVR5cGU6MCx2ZXJzaW9uOlwiMTguMi4wXCIscmVuZGVyZXJQYWNrYWdlTmFtZTpcInJlYWN0LWRvbVwifTtcbnZhciB2bD17YnVuZGxlVHlwZTp1bC5idW5kbGVUeXBlLHZlcnNpb246dWwudmVyc2lvbixyZW5kZXJlclBhY2thZ2VOYW1lOnVsLnJlbmRlcmVyUGFja2FnZU5hbWUscmVuZGVyZXJDb25maWc6dWwucmVuZGVyZXJDb25maWcsb3ZlcnJpZGVIb29rU3RhdGU6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzOm51bGwsb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzUmVuYW1lUGF0aDpudWxsLHNldEVycm9ySGFuZGxlcjpudWxsLHNldFN1c3BlbnNlSGFuZGxlcjpudWxsLHNjaGVkdWxlVXBkYXRlOm51bGwsY3VycmVudERpc3BhdGNoZXJSZWY6dWEuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjpmdW5jdGlvbihhKXthPVpiKGEpO3JldHVybiBudWxsPT09YT9udWxsOmEuc3RhdGVOb2RlfSxmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTp1bC5maW5kRmliZXJCeUhvc3RJbnN0YW5jZXx8XG5rbCxmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6bnVsbCxzY2hlZHVsZVJlZnJlc2g6bnVsbCxzY2hlZHVsZVJvb3Q6bnVsbCxzZXRSZWZyZXNoSGFuZGxlcjpudWxsLGdldEN1cnJlbnRGaWJlcjpudWxsLHJlY29uY2lsZXJWZXJzaW9uOlwiMTguMi4wLW5leHQtOWUzYjc3MmI4LTIwMjIwNjA4XCJ9O2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fKXt2YXIgd2w9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO2lmKCF3bC5pc0Rpc2FibGVkJiZ3bC5zdXBwb3J0c0ZpYmVyKXRyeXtrYz13bC5pbmplY3QodmwpLGxjPXdsfWNhdGNoKGEpe319ZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD10bDtcbmV4cG9ydHMuY3JlYXRlUG9ydGFsPWZ1bmN0aW9uKGEsYil7dmFyIGM9Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoIW9sKGIpKXRocm93IEVycm9yKHAoMjAwKSk7cmV0dXJuIGRsKGEsYixudWxsLGMpfTtleHBvcnRzLmNyZWF0ZVJvb3Q9ZnVuY3Rpb24oYSxiKXtpZighb2woYSkpdGhyb3cgRXJyb3IocCgyOTkpKTt2YXIgYz0hMSxkPVwiXCIsZT1sbDtudWxsIT09YiYmdm9pZCAwIT09YiYmKCEwPT09Yi51bnN0YWJsZV9zdHJpY3RNb2RlJiYoYz0hMCksdm9pZCAwIT09Yi5pZGVudGlmaWVyUHJlZml4JiYoZD1iLmlkZW50aWZpZXJQcmVmaXgpLHZvaWQgMCE9PWIub25SZWNvdmVyYWJsZUVycm9yJiYoZT1iLm9uUmVjb3ZlcmFibGVFcnJvcikpO2I9Y2woYSwxLCExLG51bGwsbnVsbCxjLCExLGQsZSk7YVt1Zl09Yi5jdXJyZW50O3NmKDg9PT1hLm5vZGVUeXBlP2EucGFyZW50Tm9kZTphKTtyZXR1cm4gbmV3IG1sKGIpfTtcbmV4cG9ydHMuZmluZERPTU5vZGU9ZnVuY3Rpb24oYSl7aWYobnVsbD09YSlyZXR1cm4gbnVsbDtpZigxPT09YS5ub2RlVHlwZSlyZXR1cm4gYTt2YXIgYj1hLl9yZWFjdEludGVybmFscztpZih2b2lkIDA9PT1iKXtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYS5yZW5kZXIpdGhyb3cgRXJyb3IocCgxODgpKTthPU9iamVjdC5rZXlzKGEpLmpvaW4oXCIsXCIpO3Rocm93IEVycm9yKHAoMjY4LGEpKTt9YT1aYihiKTthPW51bGw9PT1hP251bGw6YS5zdGF0ZU5vZGU7cmV0dXJuIGF9O2V4cG9ydHMuZmx1c2hTeW5jPWZ1bmN0aW9uKGEpe3JldHVybiBTayhhKX07ZXhwb3J0cy5oeWRyYXRlPWZ1bmN0aW9uKGEsYixjKXtpZighcGwoYikpdGhyb3cgRXJyb3IocCgyMDApKTtyZXR1cm4gc2wobnVsbCxhLGIsITAsYyl9O1xuZXhwb3J0cy5oeWRyYXRlUm9vdD1mdW5jdGlvbihhLGIsYyl7aWYoIW9sKGEpKXRocm93IEVycm9yKHAoNDA1KSk7dmFyIGQ9bnVsbCE9YyYmYy5oeWRyYXRlZFNvdXJjZXN8fG51bGwsZT0hMSxmPVwiXCIsZz1sbDtudWxsIT09YyYmdm9pZCAwIT09YyYmKCEwPT09Yy51bnN0YWJsZV9zdHJpY3RNb2RlJiYoZT0hMCksdm9pZCAwIT09Yy5pZGVudGlmaWVyUHJlZml4JiYoZj1jLmlkZW50aWZpZXJQcmVmaXgpLHZvaWQgMCE9PWMub25SZWNvdmVyYWJsZUVycm9yJiYoZz1jLm9uUmVjb3ZlcmFibGVFcnJvcikpO2I9ZmwoYixudWxsLGEsMSxudWxsIT1jP2M6bnVsbCxlLCExLGYsZyk7YVt1Zl09Yi5jdXJyZW50O3NmKGEpO2lmKGQpZm9yKGE9MDthPGQubGVuZ3RoO2ErKyljPWRbYV0sZT1jLl9nZXRWZXJzaW9uLGU9ZShjLl9zb3VyY2UpLG51bGw9PWIubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT9iLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9W2MsZV06Yi5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2goYyxcbmUpO3JldHVybiBuZXcgbmwoYil9O2V4cG9ydHMucmVuZGVyPWZ1bmN0aW9uKGEsYixjKXtpZighcGwoYikpdGhyb3cgRXJyb3IocCgyMDApKTtyZXR1cm4gc2wobnVsbCxhLGIsITEsYyl9O2V4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZT1mdW5jdGlvbihhKXtpZighcGwoYSkpdGhyb3cgRXJyb3IocCg0MCkpO3JldHVybiBhLl9yZWFjdFJvb3RDb250YWluZXI/KFNrKGZ1bmN0aW9uKCl7c2wobnVsbCxudWxsLGEsITEsZnVuY3Rpb24oKXthLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbDthW3VmXT1udWxsfSl9KSwhMCk6ITF9O2V4cG9ydHMudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM9Ums7XG5leHBvcnRzLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyPWZ1bmN0aW9uKGEsYixjLGQpe2lmKCFwbChjKSl0aHJvdyBFcnJvcihwKDIwMCkpO2lmKG51bGw9PWF8fHZvaWQgMD09PWEuX3JlYWN0SW50ZXJuYWxzKXRocm93IEVycm9yKHAoMzgpKTtyZXR1cm4gc2woYSxiLGMsITEsZCl9O2V4cG9ydHMudmVyc2lvbj1cIjE4LjIuMC1uZXh0LTllM2I3NzJiOC0yMDIyMDYwOFwiO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbSA9IHJlcXVpcmUoJ3JlYWN0LWRvbScpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgZXhwb3J0cy5jcmVhdGVSb290ID0gbS5jcmVhdGVSb290O1xuICBleHBvcnRzLmh5ZHJhdGVSb290ID0gbS5oeWRyYXRlUm9vdDtcbn0gZWxzZSB7XG4gIHZhciBpID0gbS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcbiAgZXhwb3J0cy5jcmVhdGVSb290ID0gZnVuY3Rpb24oYywgbykge1xuICAgIGkudXNpbmdDbGllbnRFbnRyeVBvaW50ID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG0uY3JlYXRlUm9vdChjLCBvKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaS51c2luZ0NsaWVudEVudHJ5UG9pbnQgPSBmYWxzZTtcbiAgICB9XG4gIH07XG4gIGV4cG9ydHMuaHlkcmF0ZVJvb3QgPSBmdW5jdGlvbihjLCBoLCBvKSB7XG4gICAgaS51c2luZ0NsaWVudEVudHJ5UG9pbnQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbS5oeWRyYXRlUm9vdChjLCBoLCBvKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaS51c2luZ0NsaWVudEVudHJ5UG9pbnQgPSBmYWxzZTtcbiAgICB9XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNoZWNrRENFKCkge1xuICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gIGlmIChcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJyB8fFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkXG4gICAgLy8gaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBvbmx5IGluIGRldmVsb3BtZW50LlxuICAgIC8vIFRoZXJlZm9yZSBpZiB0aGUgYnJhbmNoIGlzIHN0aWxsIGhlcmUsIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3YXNuJ3RcbiAgICAvLyBwcm9wZXJseSBhcHBsaWVkLlxuICAgIC8vIERvbid0IGNoYW5nZSB0aGUgbWVzc2FnZS4gUmVhY3QgRGV2VG9vbHMgcmVsaWVzIG9uIGl0LiBBbHNvIG1ha2Ugc3VyZVxuICAgIC8vIHRoaXMgbWVzc2FnZSBkb2Vzbid0IG9jY3VyIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGNhdXNlXG4gICAgLy8gYSBmYWxzZSBwb3NpdGl2ZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ15fXicpO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvZGUgYWJvdmUgaGFzIGJlZW4gZGVhZCBjb2RlIGVsaW1pbmF0ZWQgKERDRSdkKS5cbiAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoY2hlY2tEQ0UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEZXZUb29scyBzaG91bGRuJ3QgY3Jhc2ggUmVhY3QsIG5vIG1hdHRlciB3aGF0LlxuICAgIC8vIFdlIHNob3VsZCBzdGlsbCByZXBvcnQgaW4gY2FzZSB3ZSBicmVhayB0aGlzIGNvZGUuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIERDRSBjaGVjayBzaG91bGQgaGFwcGVuIGJlZm9yZSBSZWFjdERPTSBidW5kbGUgZXhlY3V0ZXMgc28gdGhhdFxuICAvLyBEZXZUb29scyBjYW4gcmVwb3J0IGJhZCBtaW5pZmljYXRpb24gZHVyaW5nIGluamVjdGlvbi5cbiAgY2hlY2tEQ0UoKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGI9U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksYz1TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLGQ9U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLGU9U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLGY9U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLGc9U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpLGg9U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksaz1TeW1ib2wuZm9yKFwicmVhY3Quc2VydmVyX2NvbnRleHRcIiksbD1TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksbT1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksbj1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxwPVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLHE9U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksdD1TeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpLHU7dT1TeW1ib2wuZm9yKFwicmVhY3QubW9kdWxlLnJlZmVyZW5jZVwiKTtcbmZ1bmN0aW9uIHYoYSl7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSl7dmFyIHI9YS4kJHR5cGVvZjtzd2l0Y2gocil7Y2FzZSBiOnN3aXRjaChhPWEudHlwZSxhKXtjYXNlIGQ6Y2FzZSBmOmNhc2UgZTpjYXNlIG06Y2FzZSBuOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBoOmNhc2UgbDpjYXNlIHE6Y2FzZSBwOmNhc2UgZzpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiByfX1jYXNlIGM6cmV0dXJuIHJ9fX1leHBvcnRzLkNvbnRleHRDb25zdW1lcj1oO2V4cG9ydHMuQ29udGV4dFByb3ZpZGVyPWc7ZXhwb3J0cy5FbGVtZW50PWI7ZXhwb3J0cy5Gb3J3YXJkUmVmPWw7ZXhwb3J0cy5GcmFnbWVudD1kO2V4cG9ydHMuTGF6eT1xO2V4cG9ydHMuTWVtbz1wO2V4cG9ydHMuUG9ydGFsPWM7ZXhwb3J0cy5Qcm9maWxlcj1mO2V4cG9ydHMuU3RyaWN0TW9kZT1lO2V4cG9ydHMuU3VzcGVuc2U9bTtcbmV4cG9ydHMuU3VzcGVuc2VMaXN0PW47ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbigpe3JldHVybiExfTtleHBvcnRzLmlzQ29uY3VycmVudE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWh9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1nfTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Yn07ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1sfTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1kfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PXF9O2V4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09cH07XG5leHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Y307ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Zn07ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1lfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1tfTtleHBvcnRzLmlzU3VzcGVuc2VMaXN0PWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bn07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZHx8YT09PWZ8fGE9PT1lfHxhPT09bXx8YT09PW58fGE9PT10fHxcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiYoYS4kJHR5cGVvZj09PXF8fGEuJCR0eXBlb2Y9PT1wfHxhLiQkdHlwZW9mPT09Z3x8YS4kJHR5cGVvZj09PWh8fGEuJCR0eXBlb2Y9PT1sfHxhLiQkdHlwZW9mPT09dXx8dm9pZCAwIT09YS5nZXRNb2R1bGVJZCk/ITA6ITF9O2V4cG9ydHMudHlwZU9mPXY7XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZj1yZXF1aXJlKFwicmVhY3RcIiksaz1TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSxsPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxtPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbj1mLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLHA9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtcbmZ1bmN0aW9uIHEoYyxhLGcpe3ZhciBiLGQ9e30sZT1udWxsLGg9bnVsbDt2b2lkIDAhPT1nJiYoZT1cIlwiK2cpO3ZvaWQgMCE9PWEua2V5JiYoZT1cIlwiK2Eua2V5KTt2b2lkIDAhPT1hLnJlZiYmKGg9YS5yZWYpO2ZvcihiIGluIGEpbS5jYWxsKGEsYikmJiFwLmhhc093blByb3BlcnR5KGIpJiYoZFtiXT1hW2JdKTtpZihjJiZjLmRlZmF1bHRQcm9wcylmb3IoYiBpbiBhPWMuZGVmYXVsdFByb3BzLGEpdm9pZCAwPT09ZFtiXSYmKGRbYl09YVtiXSk7cmV0dXJueyQkdHlwZW9mOmssdHlwZTpjLGtleTplLHJlZjpoLHByb3BzOmQsX293bmVyOm4uY3VycmVudH19ZXhwb3J0cy5GcmFnbWVudD1sO2V4cG9ydHMuanN4PXE7ZXhwb3J0cy5qc3hzPXE7XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGw9U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksbj1TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLHA9U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLHE9U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLHI9U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLHQ9U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpLHU9U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksdj1TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksdz1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIikseD1TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSx5PVN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLHo9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIEEoYSl7aWYobnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYSlyZXR1cm4gbnVsbDthPXomJmFbel18fGFbXCJAQGl0ZXJhdG9yXCJdO3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBhP2E6bnVsbH1cbnZhciBCPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxDPU9iamVjdC5hc3NpZ24sRD17fTtmdW5jdGlvbiBFKGEsYixlKXt0aGlzLnByb3BzPWE7dGhpcy5jb250ZXh0PWI7dGhpcy5yZWZzPUQ7dGhpcy51cGRhdGVyPWV8fEJ9RS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fTtcbkUucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGEsYil7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBhJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYSYmbnVsbCE9YSl0aHJvdyBFcnJvcihcInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLlwiKTt0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsYSxiLFwic2V0U3RhdGVcIil9O0UucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGEpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxhLFwiZm9yY2VVcGRhdGVcIil9O2Z1bmN0aW9uIEYoKXt9Ri5wcm90b3R5cGU9RS5wcm90b3R5cGU7ZnVuY3Rpb24gRyhhLGIsZSl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1EO3RoaXMudXBkYXRlcj1lfHxCfXZhciBIPUcucHJvdG90eXBlPW5ldyBGO1xuSC5jb25zdHJ1Y3Rvcj1HO0MoSCxFLnByb3RvdHlwZSk7SC5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgST1BcnJheS5pc0FycmF5LEo9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxLPXtjdXJyZW50Om51bGx9LEw9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtcbmZ1bmN0aW9uIE0oYSxiLGUpe3ZhciBkLGM9e30saz1udWxsLGg9bnVsbDtpZihudWxsIT1iKWZvcihkIGluIHZvaWQgMCE9PWIucmVmJiYoaD1iLnJlZiksdm9pZCAwIT09Yi5rZXkmJihrPVwiXCIrYi5rZXkpLGIpSi5jYWxsKGIsZCkmJiFMLmhhc093blByb3BlcnR5KGQpJiYoY1tkXT1iW2RdKTt2YXIgZz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWcpYy5jaGlsZHJlbj1lO2Vsc2UgaWYoMTxnKXtmb3IodmFyIGY9QXJyYXkoZyksbT0wO208ZzttKyspZlttXT1hcmd1bWVudHNbbSsyXTtjLmNoaWxkcmVuPWZ9aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKGQgaW4gZz1hLmRlZmF1bHRQcm9wcyxnKXZvaWQgMD09PWNbZF0mJihjW2RdPWdbZF0pO3JldHVybnskJHR5cGVvZjpsLHR5cGU6YSxrZXk6ayxyZWY6aCxwcm9wczpjLF9vd25lcjpLLmN1cnJlbnR9fVxuZnVuY3Rpb24gTihhLGIpe3JldHVybnskJHR5cGVvZjpsLHR5cGU6YS50eXBlLGtleTpiLHJlZjphLnJlZixwcm9wczphLnByb3BzLF9vd25lcjphLl9vd25lcn19ZnVuY3Rpb24gTyhhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09bH1mdW5jdGlvbiBlc2NhcGUoYSl7dmFyIGI9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9O3JldHVyblwiJFwiK2EucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfSl9dmFyIFA9L1xcLysvZztmdW5jdGlvbiBRKGEsYil7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmbnVsbCE9YS5rZXk/ZXNjYXBlKFwiXCIrYS5rZXkpOmIudG9TdHJpbmcoMzYpfVxuZnVuY3Rpb24gUihhLGIsZSxkLGMpe3ZhciBrPXR5cGVvZiBhO2lmKFwidW5kZWZpbmVkXCI9PT1rfHxcImJvb2xlYW5cIj09PWspYT1udWxsO3ZhciBoPSExO2lmKG51bGw9PT1hKWg9ITA7ZWxzZSBzd2l0Y2goayl7Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJudW1iZXJcIjpoPSEwO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBsOmNhc2UgbjpoPSEwfX1pZihoKXJldHVybiBoPWEsYz1jKGgpLGE9XCJcIj09PWQ/XCIuXCIrUShoLDApOmQsSShjKT8oZT1cIlwiLG51bGwhPWEmJihlPWEucmVwbGFjZShQLFwiJCYvXCIpK1wiL1wiKSxSKGMsYixlLFwiXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KSk6bnVsbCE9YyYmKE8oYykmJihjPU4oYyxlKyghYy5rZXl8fGgmJmgua2V5PT09Yy5rZXk/XCJcIjooXCJcIitjLmtleSkucmVwbGFjZShQLFwiJCYvXCIpK1wiL1wiKSthKSksYi5wdXNoKGMpKSwxO2g9MDtkPVwiXCI9PT1kP1wiLlwiOmQrXCI6XCI7aWYoSShhKSlmb3IodmFyIGc9MDtnPGEubGVuZ3RoO2crKyl7az1cbmFbZ107dmFyIGY9ZCtRKGssZyk7aCs9UihrLGIsZSxmLGMpfWVsc2UgaWYoZj1BKGEpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmKWZvcihhPWYuY2FsbChhKSxnPTA7IShrPWEubmV4dCgpKS5kb25lOylrPWsudmFsdWUsZj1kK1EoayxnKyspLGgrPVIoayxiLGUsZixjKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1rKXRocm93IGI9U3RyaW5nKGEpLEVycm9yKFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIisoXCJbb2JqZWN0IE9iamVjdF1cIj09PWI/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhhKS5qb2luKFwiLCBcIikrXCJ9XCI6YikrXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIpO3JldHVybiBofVxuZnVuY3Rpb24gUyhhLGIsZSl7aWYobnVsbD09YSlyZXR1cm4gYTt2YXIgZD1bXSxjPTA7UihhLGQsXCJcIixcIlwiLGZ1bmN0aW9uKGEpe3JldHVybiBiLmNhbGwoZSxhLGMrKyl9KTtyZXR1cm4gZH1mdW5jdGlvbiBUKGEpe2lmKC0xPT09YS5fc3RhdHVzKXt2YXIgYj1hLl9yZXN1bHQ7Yj1iKCk7Yi50aGVuKGZ1bmN0aW9uKGIpe2lmKDA9PT1hLl9zdGF0dXN8fC0xPT09YS5fc3RhdHVzKWEuX3N0YXR1cz0xLGEuX3Jlc3VsdD1ifSxmdW5jdGlvbihiKXtpZigwPT09YS5fc3RhdHVzfHwtMT09PWEuX3N0YXR1cylhLl9zdGF0dXM9MixhLl9yZXN1bHQ9Yn0pOy0xPT09YS5fc3RhdHVzJiYoYS5fc3RhdHVzPTAsYS5fcmVzdWx0PWIpfWlmKDE9PT1hLl9zdGF0dXMpcmV0dXJuIGEuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGEuX3Jlc3VsdDt9XG52YXIgVT17Y3VycmVudDpudWxsfSxWPXt0cmFuc2l0aW9uOm51bGx9LFc9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6VSxSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzpWLFJlYWN0Q3VycmVudE93bmVyOkt9O2V4cG9ydHMuQ2hpbGRyZW49e21hcDpTLGZvckVhY2g6ZnVuY3Rpb24oYSxiLGUpe1MoYSxmdW5jdGlvbigpe2IuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlKX0sY291bnQ6ZnVuY3Rpb24oYSl7dmFyIGI9MDtTKGEsZnVuY3Rpb24oKXtiKyt9KTtyZXR1cm4gYn0sdG9BcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gUyhhLGZ1bmN0aW9uKGEpe3JldHVybiBhfSl8fFtdfSxvbmx5OmZ1bmN0aW9uKGEpe2lmKCFPKGEpKXRocm93IEVycm9yKFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCIpO3JldHVybiBhfX07ZXhwb3J0cy5Db21wb25lbnQ9RTtleHBvcnRzLkZyYWdtZW50PXA7XG5leHBvcnRzLlByb2ZpbGVyPXI7ZXhwb3J0cy5QdXJlQ29tcG9uZW50PUc7ZXhwb3J0cy5TdHJpY3RNb2RlPXE7ZXhwb3J0cy5TdXNwZW5zZT13O2V4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9VztcbmV4cG9ydHMuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGEsYixlKXtpZihudWxsPT09YXx8dm9pZCAwPT09YSl0aHJvdyBFcnJvcihcIlJlYWN0LmNsb25lRWxlbWVudCguLi4pOiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkIFwiK2ErXCIuXCIpO3ZhciBkPUMoe30sYS5wcm9wcyksYz1hLmtleSxrPWEucmVmLGg9YS5fb3duZXI7aWYobnVsbCE9Yil7dm9pZCAwIT09Yi5yZWYmJihrPWIucmVmLGg9Sy5jdXJyZW50KTt2b2lkIDAhPT1iLmtleSYmKGM9XCJcIitiLmtleSk7aWYoYS50eXBlJiZhLnR5cGUuZGVmYXVsdFByb3BzKXZhciBnPWEudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKGYgaW4gYilKLmNhbGwoYixmKSYmIUwuaGFzT3duUHJvcGVydHkoZikmJihkW2ZdPXZvaWQgMD09PWJbZl0mJnZvaWQgMCE9PWc/Z1tmXTpiW2ZdKX12YXIgZj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWYpZC5jaGlsZHJlbj1lO2Vsc2UgaWYoMTxmKXtnPUFycmF5KGYpO1xuZm9yKHZhciBtPTA7bTxmO20rKylnW21dPWFyZ3VtZW50c1ttKzJdO2QuY2hpbGRyZW49Z31yZXR1cm57JCR0eXBlb2Y6bCx0eXBlOmEudHlwZSxrZXk6YyxyZWY6ayxwcm9wczpkLF9vd25lcjpofX07ZXhwb3J0cy5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGEpe2E9eyQkdHlwZW9mOnUsX2N1cnJlbnRWYWx1ZTphLF9jdXJyZW50VmFsdWUyOmEsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsLF9kZWZhdWx0VmFsdWU6bnVsbCxfZ2xvYmFsTmFtZTpudWxsfTthLlByb3ZpZGVyPXskJHR5cGVvZjp0LF9jb250ZXh0OmF9O3JldHVybiBhLkNvbnN1bWVyPWF9O2V4cG9ydHMuY3JlYXRlRWxlbWVudD1NO2V4cG9ydHMuY3JlYXRlRmFjdG9yeT1mdW5jdGlvbihhKXt2YXIgYj1NLmJpbmQobnVsbCxhKTtiLnR5cGU9YTtyZXR1cm4gYn07ZXhwb3J0cy5jcmVhdGVSZWY9ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX07XG5leHBvcnRzLmZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnYscmVuZGVyOmF9fTtleHBvcnRzLmlzVmFsaWRFbGVtZW50PU87ZXhwb3J0cy5sYXp5PWZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjp5LF9wYXlsb2FkOntfc3RhdHVzOi0xLF9yZXN1bHQ6YX0sX2luaXQ6VH19O2V4cG9ydHMubWVtbz1mdW5jdGlvbihhLGIpe3JldHVybnskJHR5cGVvZjp4LHR5cGU6YSxjb21wYXJlOnZvaWQgMD09PWI/bnVsbDpifX07ZXhwb3J0cy5zdGFydFRyYW5zaXRpb249ZnVuY3Rpb24oYSl7dmFyIGI9Vi50cmFuc2l0aW9uO1YudHJhbnNpdGlvbj17fTt0cnl7YSgpfWZpbmFsbHl7Vi50cmFuc2l0aW9uPWJ9fTtleHBvcnRzLnVuc3RhYmxlX2FjdD1mdW5jdGlvbigpe3Rocm93IEVycm9yKFwiYWN0KC4uLikgaXMgbm90IHN1cHBvcnRlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcyBvZiBSZWFjdC5cIik7fTtcbmV4cG9ydHMudXNlQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVS5jdXJyZW50LnVzZUNhbGxiYWNrKGEsYil9O2V4cG9ydHMudXNlQ29udGV4dD1mdW5jdGlvbihhKXtyZXR1cm4gVS5jdXJyZW50LnVzZUNvbnRleHQoYSl9O2V4cG9ydHMudXNlRGVidWdWYWx1ZT1mdW5jdGlvbigpe307ZXhwb3J0cy51c2VEZWZlcnJlZFZhbHVlPWZ1bmN0aW9uKGEpe3JldHVybiBVLmN1cnJlbnQudXNlRGVmZXJyZWRWYWx1ZShhKX07ZXhwb3J0cy51c2VFZmZlY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVS5jdXJyZW50LnVzZUVmZmVjdChhLGIpfTtleHBvcnRzLnVzZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIFUuY3VycmVudC51c2VJZCgpfTtleHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGU9ZnVuY3Rpb24oYSxiLGUpe3JldHVybiBVLmN1cnJlbnQudXNlSW1wZXJhdGl2ZUhhbmRsZShhLGIsZSl9O1xuZXhwb3J0cy51c2VJbnNlcnRpb25FZmZlY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVS5jdXJyZW50LnVzZUluc2VydGlvbkVmZmVjdChhLGIpfTtleHBvcnRzLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBVLmN1cnJlbnQudXNlTGF5b3V0RWZmZWN0KGEsYil9O2V4cG9ydHMudXNlTWVtbz1mdW5jdGlvbihhLGIpe3JldHVybiBVLmN1cnJlbnQudXNlTWVtbyhhLGIpfTtleHBvcnRzLnVzZVJlZHVjZXI9ZnVuY3Rpb24oYSxiLGUpe3JldHVybiBVLmN1cnJlbnQudXNlUmVkdWNlcihhLGIsZSl9O2V4cG9ydHMudXNlUmVmPWZ1bmN0aW9uKGEpe3JldHVybiBVLmN1cnJlbnQudXNlUmVmKGEpfTtleHBvcnRzLnVzZVN0YXRlPWZ1bmN0aW9uKGEpe3JldHVybiBVLmN1cnJlbnQudXNlU3RhdGUoYSl9O2V4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmU9ZnVuY3Rpb24oYSxiLGUpe3JldHVybiBVLmN1cnJlbnQudXNlU3luY0V4dGVybmFsU3RvcmUoYSxiLGUpfTtcbmV4cG9ydHMudXNlVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiBVLmN1cnJlbnQudXNlVHJhbnNpdGlvbigpfTtleHBvcnRzLnZlcnNpb249XCIxOC4yLjBcIjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiBzY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO2Z1bmN0aW9uIGYoYSxiKXt2YXIgYz1hLmxlbmd0aDthLnB1c2goYik7YTpmb3IoOzA8Yzspe3ZhciBkPWMtMT4+PjEsZT1hW2RdO2lmKDA8ZyhlLGIpKWFbZF09YixhW2NdPWUsYz1kO2Vsc2UgYnJlYWsgYX19ZnVuY3Rpb24gaChhKXtyZXR1cm4gMD09PWEubGVuZ3RoP251bGw6YVswXX1mdW5jdGlvbiBrKGEpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgYj1hWzBdLGM9YS5wb3AoKTtpZihjIT09Yil7YVswXT1jO2E6Zm9yKHZhciBkPTAsZT1hLmxlbmd0aCx3PWU+Pj4xO2Q8dzspe3ZhciBtPTIqKGQrMSktMSxDPWFbbV0sbj1tKzEseD1hW25dO2lmKDA+ZyhDLGMpKW48ZSYmMD5nKHgsQyk/KGFbZF09eCxhW25dPWMsZD1uKTooYVtkXT1DLGFbbV09YyxkPW0pO2Vsc2UgaWYobjxlJiYwPmcoeCxjKSlhW2RdPXgsYVtuXT1jLGQ9bjtlbHNlIGJyZWFrIGF9fXJldHVybiBifVxuZnVuY3Rpb24gZyhhLGIpe3ZhciBjPWEuc29ydEluZGV4LWIuc29ydEluZGV4O3JldHVybiAwIT09Yz9jOmEuaWQtYi5pZH1pZihcIm9iamVjdFwiPT09dHlwZW9mIHBlcmZvcm1hbmNlJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgcGVyZm9ybWFuY2Uubm93KXt2YXIgbD1wZXJmb3JtYW5jZTtleHBvcnRzLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBsLm5vdygpfX1lbHNle3ZhciBwPURhdGUscT1wLm5vdygpO2V4cG9ydHMudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIHAubm93KCktcX19dmFyIHI9W10sdD1bXSx1PTEsdj1udWxsLHk9Myx6PSExLEE9ITEsQj0hMSxEPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6bnVsbCxFPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Om51bGwsRj1cInVuZGVmaW5lZFwiIT09dHlwZW9mIHNldEltbWVkaWF0ZT9zZXRJbW1lZGlhdGU6bnVsbDtcblwidW5kZWZpbmVkXCIhPT10eXBlb2YgbmF2aWdhdG9yJiZ2b2lkIDAhPT1uYXZpZ2F0b3Iuc2NoZWR1bGluZyYmdm9pZCAwIT09bmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcmJm5hdmlnYXRvci5zY2hlZHVsaW5nLmlzSW5wdXRQZW5kaW5nLmJpbmQobmF2aWdhdG9yLnNjaGVkdWxpbmcpO2Z1bmN0aW9uIEcoYSl7Zm9yKHZhciBiPWgodCk7bnVsbCE9PWI7KXtpZihudWxsPT09Yi5jYWxsYmFjaylrKHQpO2Vsc2UgaWYoYi5zdGFydFRpbWU8PWEpayh0KSxiLnNvcnRJbmRleD1iLmV4cGlyYXRpb25UaW1lLGYocixiKTtlbHNlIGJyZWFrO2I9aCh0KX19ZnVuY3Rpb24gSChhKXtCPSExO0coYSk7aWYoIUEpaWYobnVsbCE9PWgocikpQT0hMCxJKEopO2Vsc2V7dmFyIGI9aCh0KTtudWxsIT09YiYmSyhILGIuc3RhcnRUaW1lLWEpfX1cbmZ1bmN0aW9uIEooYSxiKXtBPSExO0ImJihCPSExLEUoTCksTD0tMSk7ej0hMDt2YXIgYz15O3RyeXtHKGIpO2Zvcih2PWgocik7bnVsbCE9PXYmJighKHYuZXhwaXJhdGlvblRpbWU+Yil8fGEmJiFNKCkpOyl7dmFyIGQ9di5jYWxsYmFjaztpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZCl7di5jYWxsYmFjaz1udWxsO3k9di5wcmlvcml0eUxldmVsO3ZhciBlPWQodi5leHBpcmF0aW9uVGltZTw9Yik7Yj1leHBvcnRzLnVuc3RhYmxlX25vdygpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBlP3YuY2FsbGJhY2s9ZTp2PT09aChyKSYmayhyKTtHKGIpfWVsc2UgayhyKTt2PWgocil9aWYobnVsbCE9PXYpdmFyIHc9ITA7ZWxzZXt2YXIgbT1oKHQpO251bGwhPT1tJiZLKEgsbS5zdGFydFRpbWUtYik7dz0hMX1yZXR1cm4gd31maW5hbGx5e3Y9bnVsbCx5PWMsej0hMX19dmFyIE49ITEsTz1udWxsLEw9LTEsUD01LFE9LTE7XG5mdW5jdGlvbiBNKCl7cmV0dXJuIGV4cG9ydHMudW5zdGFibGVfbm93KCktUTxQPyExOiEwfWZ1bmN0aW9uIFIoKXtpZihudWxsIT09Tyl7dmFyIGE9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtRPWE7dmFyIGI9ITA7dHJ5e2I9TyghMCxhKX1maW5hbGx5e2I/UygpOihOPSExLE89bnVsbCl9fWVsc2UgTj0hMX12YXIgUztpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgRilTPWZ1bmN0aW9uKCl7RihSKX07ZWxzZSBpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIE1lc3NhZ2VDaGFubmVsKXt2YXIgVD1uZXcgTWVzc2FnZUNoYW5uZWwsVT1ULnBvcnQyO1QucG9ydDEub25tZXNzYWdlPVI7Uz1mdW5jdGlvbigpe1UucG9zdE1lc3NhZ2UobnVsbCl9fWVsc2UgUz1mdW5jdGlvbigpe0QoUiwwKX07ZnVuY3Rpb24gSShhKXtPPWE7Tnx8KE49ITAsUygpKX1mdW5jdGlvbiBLKGEsYil7TD1EKGZ1bmN0aW9uKCl7YShleHBvcnRzLnVuc3RhYmxlX25vdygpKX0sYil9XG5leHBvcnRzLnVuc3RhYmxlX0lkbGVQcmlvcml0eT01O2V4cG9ydHMudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MTtleHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5PTQ7ZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eT0zO2V4cG9ydHMudW5zdGFibGVfUHJvZmlsaW5nPW51bGw7ZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eT0yO2V4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7YS5jYWxsYmFjaz1udWxsfTtleHBvcnRzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7QXx8enx8KEE9ITAsSShKKSl9O1xuZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZT1mdW5jdGlvbihhKXswPmF8fDEyNTxhP2NvbnNvbGUuZXJyb3IoXCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWRcIik6UD0wPGE/TWF0aC5mbG9vcigxRTMvYSk6NX07ZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiB5fTtleHBvcnRzLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIGgocil9O2V4cG9ydHMudW5zdGFibGVfbmV4dD1mdW5jdGlvbihhKXtzd2l0Y2goeSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyIGI9MzticmVhaztkZWZhdWx0OmI9eX12YXIgYz15O3k9Yjt0cnl7cmV0dXJuIGEoKX1maW5hbGx5e3k9Y319O2V4cG9ydHMudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9O1xuZXhwb3J0cy51bnN0YWJsZV9yZXF1ZXN0UGFpbnQ9ZnVuY3Rpb24oKXt9O2V4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDphPTN9dmFyIGM9eTt5PWE7dHJ5e3JldHVybiBiKCl9ZmluYWxseXt5PWN9fTtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcIm9iamVjdFwiPT09dHlwZW9mIGMmJm51bGwhPT1jPyhjPWMuZGVsYXksYz1cIm51bWJlclwiPT09dHlwZW9mIGMmJjA8Yz9kK2M6ZCk6Yz1kO3N3aXRjaChhKXtjYXNlIDE6dmFyIGU9LTE7YnJlYWs7Y2FzZSAyOmU9MjUwO2JyZWFrO2Nhc2UgNTplPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0OmU9MUU0O2JyZWFrO2RlZmF1bHQ6ZT01RTN9ZT1jK2U7YT17aWQ6dSsrLGNhbGxiYWNrOmIscHJpb3JpdHlMZXZlbDphLHN0YXJ0VGltZTpjLGV4cGlyYXRpb25UaW1lOmUsc29ydEluZGV4Oi0xfTtjPmQ/KGEuc29ydEluZGV4PWMsZih0LGEpLG51bGw9PT1oKHIpJiZhPT09aCh0KSYmKEI/KEUoTCksTD0tMSk6Qj0hMCxLKEgsYy1kKSkpOihhLnNvcnRJbmRleD1lLGYocixhKSxBfHx6fHwoQT0hMCxJKEopKSk7cmV0dXJuIGF9O1xuZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZD1NO2V4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKGEpe3ZhciBiPXk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9eTt5PWI7dHJ5e3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3k9Y319fTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgaD1yZXF1aXJlKFwicmVhY3RcIiksbj1yZXF1aXJlKFwidXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbVwiKTtmdW5jdGlvbiBwKGEsYil7cmV0dXJuIGE9PT1iJiYoMCE9PWF8fDEvYT09PTEvYil8fGEhPT1hJiZiIT09Yn12YXIgcT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpwLHI9bi51c2VTeW5jRXh0ZXJuYWxTdG9yZSx0PWgudXNlUmVmLHU9aC51c2VFZmZlY3Qsdj1oLnVzZU1lbW8sdz1oLnVzZURlYnVnVmFsdWU7XG5leHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yPWZ1bmN0aW9uKGEsYixlLGwsZyl7dmFyIGM9dChudWxsKTtpZihudWxsPT09Yy5jdXJyZW50KXt2YXIgZj17aGFzVmFsdWU6ITEsdmFsdWU6bnVsbH07Yy5jdXJyZW50PWZ9ZWxzZSBmPWMuY3VycmVudDtjPXYoZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe2lmKCFjKXtjPSEwO2Q9YTthPWwoYSk7aWYodm9pZCAwIT09ZyYmZi5oYXNWYWx1ZSl7dmFyIGI9Zi52YWx1ZTtpZihnKGIsYSkpcmV0dXJuIGs9Yn1yZXR1cm4gaz1hfWI9aztpZihxKGQsYSkpcmV0dXJuIGI7dmFyIGU9bChhKTtpZih2b2lkIDAhPT1nJiZnKGIsZSkpcmV0dXJuIGI7ZD1hO3JldHVybiBrPWV9dmFyIGM9ITEsZCxrLG09dm9pZCAwPT09ZT9udWxsOmU7cmV0dXJuW2Z1bmN0aW9uKCl7cmV0dXJuIGEoYigpKX0sbnVsbD09PW0/dm9pZCAwOmZ1bmN0aW9uKCl7cmV0dXJuIGEobSgpKX1dfSxbYixlLGwsZ10pO3ZhciBkPXIoYSxjWzBdLGNbMV0pO1xudShmdW5jdGlvbigpe2YuaGFzVmFsdWU9ITA7Zi52YWx1ZT1kfSxbZF0pO3coZCk7cmV0dXJuIGR9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgIFwiZGVmYXVsdFwiOiBvYmpcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGhsanMgPSByZXF1aXJlKCcuL2NvcmUnKTtcblxuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd4bWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy94bWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2Jhc2gnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9iYXNoJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY3BwJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY3BwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjc2hhcnAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jc2hhcnAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NzcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NzcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWFya2Rvd24nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tYXJrZG93bicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZGlmZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RpZmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3J1YnknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ydWJ5JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdnbycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2dvJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdncmFwaHFsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ3JhcGhxbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaW5pJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaW5pJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdqYXZhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvamF2YScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnamF2YXNjcmlwdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2phdmFzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2pzb24nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9qc29uJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdrb3RsaW4nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9rb3RsaW4nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xlc3MnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9sZXNzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsdWEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9sdWEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21ha2VmaWxlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWFrZWZpbGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3BlcmwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wZXJsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdvYmplY3RpdmVjJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvb2JqZWN0aXZlYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncGhwJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcGhwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwaHAtdGVtcGxhdGUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9waHAtdGVtcGxhdGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3BsYWludGV4dCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3BsYWludGV4dCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHl0aG9uJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHl0aG9uJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdweXRob24tcmVwbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3B5dGhvbi1yZXBsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdyJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncnVzdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3J1c3QnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Njc3MnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zY3NzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzaGVsbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3NoZWxsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzcWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zcWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3N3aWZ0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3dpZnQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3lhbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy95YW1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0eXBlc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdHlwZXNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndmJuZXQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy92Ym5ldCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnd2FzbScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3dhc20nKSk7XG5cbmhsanMuSGlnaGxpZ2h0SlMgPSBobGpzXG5obGpzLmRlZmF1bHQgPSBobGpzXG5tb2R1bGUuZXhwb3J0cyA9IGhsanM7IiwidmFyIGRlZXBGcmVlemVFczYgPSB7ZXhwb3J0czoge319O1xuXG5mdW5jdGlvbiBkZWVwRnJlZXplKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgb2JqLmNsZWFyID0gb2JqLmRlbGV0ZSA9IG9iai5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21hcCBpcyByZWFkLW9ubHknKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICBvYmouYWRkID0gb2JqLmNsZWFyID0gb2JqLmRlbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0IGlzIHJlYWQtb25seScpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZyZWV6ZSBzZWxmXG4gICAgT2JqZWN0LmZyZWV6ZShvYmopO1xuXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBwcm9wID0gb2JqW25hbWVdO1xuXG4gICAgICAgIC8vIEZyZWV6ZSBwcm9wIGlmIGl0IGlzIGFuIG9iamVjdFxuICAgICAgICBpZiAodHlwZW9mIHByb3AgPT0gJ29iamVjdCcgJiYgIU9iamVjdC5pc0Zyb3plbihwcm9wKSkge1xuICAgICAgICAgICAgZGVlcEZyZWV6ZShwcm9wKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuZGVlcEZyZWV6ZUVzNi5leHBvcnRzID0gZGVlcEZyZWV6ZTtcbmRlZXBGcmVlemVFczYuZXhwb3J0cy5kZWZhdWx0ID0gZGVlcEZyZWV6ZTtcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkNhbGxiYWNrUmVzcG9uc2V9IENhbGxiYWNrUmVzcG9uc2UgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Db21waWxlZE1vZGV9IENvbXBpbGVkTW9kZSAqL1xuLyoqIEBpbXBsZW1lbnRzIENhbGxiYWNrUmVzcG9uc2UgKi9cblxuY2xhc3MgUmVzcG9uc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtDb21waWxlZE1vZGV9IG1vZGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1vZGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gICAgaWYgKG1vZGUuZGF0YSA9PT0gdW5kZWZpbmVkKSBtb2RlLmRhdGEgPSB7fTtcblxuICAgIHRoaXMuZGF0YSA9IG1vZGUuZGF0YTtcbiAgICB0aGlzLmlzTWF0Y2hJZ25vcmVkID0gZmFsc2U7XG4gIH1cblxuICBpZ25vcmVNYXRjaCgpIHtcbiAgICB0aGlzLmlzTWF0Y2hJZ25vcmVkID0gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZXNjYXBlSFRNTCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWVcbiAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXG4gICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICAgIC5yZXBsYWNlKC8nL2csICcmI3gyNzsnKTtcbn1cblxuLyoqXG4gKiBwZXJmb3JtcyBhIHNoYWxsb3cgbWVyZ2Ugb2YgbXVsdGlwbGUgb2JqZWN0cyBpbnRvIG9uZVxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1R9IG9yaWdpbmFsXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsYW55PltdfSBvYmplY3RzXG4gKiBAcmV0dXJucyB7VH0gYSBzaW5nbGUgbmV3IG9iamVjdFxuICovXG5mdW5jdGlvbiBpbmhlcml0JDEob3JpZ2luYWwsIC4uLm9iamVjdHMpIHtcbiAgLyoqIEB0eXBlIFJlY29yZDxzdHJpbmcsYW55PiAqL1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIG9yaWdpbmFsKSB7XG4gICAgcmVzdWx0W2tleV0gPSBvcmlnaW5hbFtrZXldO1xuICB9XG4gIG9iamVjdHMuZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIHJlc3VsdFtrZXldID0gb2JqW2tleV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7VH0gKi8gKHJlc3VsdCk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUmVuZGVyZXJcbiAqIEBwcm9wZXJ0eSB7KHRleHQ6IHN0cmluZykgPT4gdm9pZH0gYWRkVGV4dFxuICogQHByb3BlcnR5IHsobm9kZTogTm9kZSkgPT4gdm9pZH0gb3Blbk5vZGVcbiAqIEBwcm9wZXJ0eSB7KG5vZGU6IE5vZGUpID0+IHZvaWR9IGNsb3NlTm9kZVxuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmd9IHZhbHVlXG4gKi9cblxuLyoqIEB0eXBlZGVmIHt7c2NvcGU/OiBzdHJpbmcsIGxhbmd1YWdlPzogc3RyaW5nLCBzdWJsYW5ndWFnZT86IGJvb2xlYW59fSBOb2RlICovXG4vKiogQHR5cGVkZWYge3t3YWxrOiAocjogUmVuZGVyZXIpID0+IHZvaWR9fSBUcmVlICovXG4vKiogKi9cblxuY29uc3QgU1BBTl9DTE9TRSA9ICc8L3NwYW4+JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgbm9kZSBuZWVkcyB0byBiZSB3cmFwcGVkIGluIDxzcGFuPlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAqL1xuY29uc3QgZW1pdHNXcmFwcGluZ1RhZ3MgPSAobm9kZSkgPT4ge1xuICAvLyByYXJlbHkgd2UgY2FuIGhhdmUgYSBzdWJsYW5ndWFnZSB3aGVyZSBsYW5ndWFnZSBpcyB1bmRlZmluZWRcbiAgLy8gVE9ETzogdHJhY2sgZG93biB3aHlcbiAgcmV0dXJuICEhbm9kZS5zY29wZSB8fCAobm9kZS5zdWJsYW5ndWFnZSAmJiBub2RlLmxhbmd1YWdlKTtcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3twcmVmaXg6c3RyaW5nfX0gb3B0aW9uc1xuICovXG5jb25zdCBzY29wZVRvQ1NTQ2xhc3MgPSAobmFtZSwgeyBwcmVmaXggfSkgPT4ge1xuICBpZiAobmFtZS5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICBjb25zdCBwaWVjZXMgPSBuYW1lLnNwbGl0KFwiLlwiKTtcbiAgICByZXR1cm4gW1xuICAgICAgYCR7cHJlZml4fSR7cGllY2VzLnNoaWZ0KCl9YCxcbiAgICAgIC4uLihwaWVjZXMubWFwKCh4LCBpKSA9PiBgJHt4fSR7XCJfXCIucmVwZWF0KGkgKyAxKX1gKSlcbiAgICBdLmpvaW4oXCIgXCIpO1xuICB9XG4gIHJldHVybiBgJHtwcmVmaXh9JHtuYW1lfWA7XG59O1xuXG4vKiogQHR5cGUge1JlbmRlcmVyfSAqL1xuY2xhc3MgSFRNTFJlbmRlcmVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgSFRNTFJlbmRlcmVyXG4gICAqXG4gICAqIEBwYXJhbSB7VHJlZX0gcGFyc2VUcmVlIC0gdGhlIHBhcnNlIHRyZWUgKG11c3Qgc3VwcG9ydCBgd2Fsa2AgQVBJKVxuICAgKiBAcGFyYW0ge3tjbGFzc1ByZWZpeDogc3RyaW5nfX0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IocGFyc2VUcmVlLCBvcHRpb25zKSB7XG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xuICAgIHRoaXMuY2xhc3NQcmVmaXggPSBvcHRpb25zLmNsYXNzUHJlZml4O1xuICAgIHBhcnNlVHJlZS53YWxrKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgdGV4dHMgdG8gdGhlIG91dHB1dCBzdHJlYW1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgKi9cbiAgYWRkVGV4dCh0ZXh0KSB7XG4gICAgdGhpcy5idWZmZXIgKz0gZXNjYXBlSFRNTCh0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbm9kZSBvcGVuIHRvIHRoZSBvdXRwdXQgc3RyZWFtIChpZiBuZWVkZWQpXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAqL1xuICBvcGVuTm9kZShub2RlKSB7XG4gICAgaWYgKCFlbWl0c1dyYXBwaW5nVGFncyhub2RlKSkgcmV0dXJuO1xuXG4gICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgaWYgKG5vZGUuc3VibGFuZ3VhZ2UpIHtcbiAgICAgIGNsYXNzTmFtZSA9IGBsYW5ndWFnZS0ke25vZGUubGFuZ3VhZ2V9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xhc3NOYW1lID0gc2NvcGVUb0NTU0NsYXNzKG5vZGUuc2NvcGUsIHsgcHJlZml4OiB0aGlzLmNsYXNzUHJlZml4IH0pO1xuICAgIH1cbiAgICB0aGlzLnNwYW4oY2xhc3NOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbm9kZSBjbG9zZSB0byB0aGUgb3V0cHV0IHN0cmVhbSAoaWYgbmVlZGVkKVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgKi9cbiAgY2xvc2VOb2RlKG5vZGUpIHtcbiAgICBpZiAoIWVtaXRzV3JhcHBpbmdUYWdzKG5vZGUpKSByZXR1cm47XG5cbiAgICB0aGlzLmJ1ZmZlciArPSBTUEFOX0NMT1NFO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybnMgdGhlIGFjY3VtdWxhdGVkIGJ1ZmZlclxuICAqL1xuICB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gIH1cblxuICAvLyBoZWxwZXJzXG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIHNwYW4gZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lICovXG4gIHNwYW4oY2xhc3NOYW1lKSB7XG4gICAgdGhpcy5idWZmZXIgKz0gYDxzcGFuIGNsYXNzPVwiJHtjbGFzc05hbWV9XCI+YDtcbiAgfVxufVxuXG4vKiogQHR5cGVkZWYge3tzY29wZT86IHN0cmluZywgbGFuZ3VhZ2U/OiBzdHJpbmcsIHN1Ymxhbmd1YWdlPzogYm9vbGVhbiwgY2hpbGRyZW46IE5vZGVbXX0gfCBzdHJpbmd9IE5vZGUgKi9cbi8qKiBAdHlwZWRlZiB7e3Njb3BlPzogc3RyaW5nLCBsYW5ndWFnZT86IHN0cmluZywgc3VibGFuZ3VhZ2U/OiBib29sZWFuLCBjaGlsZHJlbjogTm9kZVtdfSB9IERhdGFOb2RlICovXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuRW1pdHRlcn0gRW1pdHRlciAqL1xuLyoqICAqL1xuXG4vKiogQHJldHVybnMge0RhdGFOb2RlfSAqL1xuY29uc3QgbmV3Tm9kZSA9IChvcHRzID0ge30pID0+IHtcbiAgLyoqIEB0eXBlIERhdGFOb2RlICovXG4gIGNvbnN0IHJlc3VsdCA9IHsgY2hpbGRyZW46IFtdIH07XG4gIE9iamVjdC5hc3NpZ24ocmVzdWx0LCBvcHRzKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNsYXNzIFRva2VuVHJlZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKiBAdHlwZSBEYXRhTm9kZSAqL1xuICAgIHRoaXMucm9vdE5vZGUgPSBuZXdOb2RlKCk7XG4gICAgdGhpcy5zdGFjayA9IFt0aGlzLnJvb3ROb2RlXTtcbiAgfVxuXG4gIGdldCB0b3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIGdldCByb290KCkgeyByZXR1cm4gdGhpcy5yb290Tm9kZTsgfVxuXG4gIC8qKiBAcGFyYW0ge05vZGV9IG5vZGUgKi9cbiAgYWRkKG5vZGUpIHtcbiAgICB0aGlzLnRvcC5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7c3RyaW5nfSBzY29wZSAqL1xuICBvcGVuTm9kZShzY29wZSkge1xuICAgIC8qKiBAdHlwZSBOb2RlICovXG4gICAgY29uc3Qgbm9kZSA9IG5ld05vZGUoeyBzY29wZSB9KTtcbiAgICB0aGlzLmFkZChub2RlKTtcbiAgICB0aGlzLnN0YWNrLnB1c2gobm9kZSk7XG4gIH1cblxuICBjbG9zZU5vZGUoKSB7XG4gICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY2xvc2VBbGxOb2RlcygpIHtcbiAgICB3aGlsZSAodGhpcy5jbG9zZU5vZGUoKSk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMucm9vdE5vZGUsIG51bGwsIDQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHsgaW1wb3J0KFwiLi9odG1sX3JlbmRlcmVyXCIpLlJlbmRlcmVyIH0gUmVuZGVyZXJcbiAgICogQHBhcmFtIHtSZW5kZXJlcn0gYnVpbGRlclxuICAgKi9cbiAgd2FsayhidWlsZGVyKSB7XG4gICAgLy8gdGhpcyBkb2VzIG5vdFxuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLl93YWxrKGJ1aWxkZXIsIHRoaXMucm9vdE5vZGUpO1xuICAgIC8vIHRoaXMgd29ya3NcbiAgICAvLyByZXR1cm4gVG9rZW5UcmVlLl93YWxrKGJ1aWxkZXIsIHRoaXMucm9vdE5vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVuZGVyZXJ9IGJ1aWxkZXJcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqL1xuICBzdGF0aWMgX3dhbGsoYnVpbGRlciwgbm9kZSkge1xuICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgYnVpbGRlci5hZGRUZXh0KG5vZGUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgYnVpbGRlci5vcGVuTm9kZShub2RlKTtcbiAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHRoaXMuX3dhbGsoYnVpbGRlciwgY2hpbGQpKTtcbiAgICAgIGJ1aWxkZXIuY2xvc2VOb2RlKG5vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICovXG4gIHN0YXRpYyBfY29sbGFwc2Uobm9kZSkge1xuICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuO1xuICAgIGlmICghbm9kZS5jaGlsZHJlbikgcmV0dXJuO1xuXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4uZXZlcnkoZWwgPT4gdHlwZW9mIGVsID09PSBcInN0cmluZ1wiKSkge1xuICAgICAgLy8gbm9kZS50ZXh0ID0gbm9kZS5jaGlsZHJlbi5qb2luKFwiXCIpO1xuICAgICAgLy8gZGVsZXRlIG5vZGUuY2hpbGRyZW47XG4gICAgICBub2RlLmNoaWxkcmVuID0gW25vZGUuY2hpbGRyZW4uam9pbihcIlwiKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgVG9rZW5UcmVlLl9jb2xsYXBzZShjaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gIEN1cnJlbnRseSB0aGlzIGlzIGFsbCBwcml2YXRlIEFQSSwgYnV0IHRoaXMgaXMgdGhlIG1pbmltYWwgQVBJIG5lY2Vzc2FyeVxuICB0aGF0IGFuIEVtaXR0ZXIgbXVzdCBpbXBsZW1lbnQgdG8gZnVsbHkgc3VwcG9ydCB0aGUgcGFyc2VyLlxuXG4gIE1pbmltYWwgaW50ZXJmYWNlOlxuXG4gIC0gYWRkS2V5d29yZCh0ZXh0LCBzY29wZSlcbiAgLSBhZGRUZXh0KHRleHQpXG4gIC0gYWRkU3VibGFuZ3VhZ2UoZW1pdHRlciwgc3ViTGFuZ3VhZ2VOYW1lKVxuICAtIGZpbmFsaXplKClcbiAgLSBvcGVuTm9kZShzY29wZSlcbiAgLSBjbG9zZU5vZGUoKVxuICAtIGNsb3NlQWxsTm9kZXMoKVxuICAtIHRvSFRNTCgpXG5cbiovXG5cbi8qKlxuICogQGltcGxlbWVudHMge0VtaXR0ZXJ9XG4gKi9cbmNsYXNzIFRva2VuVHJlZUVtaXR0ZXIgZXh0ZW5kcyBUb2tlblRyZWUge1xuICAvKipcbiAgICogQHBhcmFtIHsqfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZVxuICAgKi9cbiAgYWRkS2V5d29yZCh0ZXh0LCBzY29wZSkge1xuICAgIGlmICh0ZXh0ID09PSBcIlwiKSB7IHJldHVybjsgfVxuXG4gICAgdGhpcy5vcGVuTm9kZShzY29wZSk7XG4gICAgdGhpcy5hZGRUZXh0KHRleHQpO1xuICAgIHRoaXMuY2xvc2VOb2RlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICovXG4gIGFkZFRleHQodGV4dCkge1xuICAgIGlmICh0ZXh0ID09PSBcIlwiKSB7IHJldHVybjsgfVxuXG4gICAgdGhpcy5hZGQodGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbWl0dGVyICYge3Jvb3Q6IERhdGFOb2RlfX0gZW1pdHRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgYWRkU3VibGFuZ3VhZ2UoZW1pdHRlciwgbmFtZSkge1xuICAgIC8qKiBAdHlwZSBEYXRhTm9kZSAqL1xuICAgIGNvbnN0IG5vZGUgPSBlbWl0dGVyLnJvb3Q7XG4gICAgbm9kZS5zdWJsYW5ndWFnZSA9IHRydWU7XG4gICAgbm9kZS5sYW5ndWFnZSA9IG5hbWU7XG4gICAgdGhpcy5hZGQobm9kZSk7XG4gIH1cblxuICB0b0hUTUwoKSB7XG4gICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgSFRNTFJlbmRlcmVyKHRoaXMsIHRoaXMub3B0aW9ucyk7XG4gICAgcmV0dXJuIHJlbmRlcmVyLnZhbHVlKCk7XG4gIH1cblxuICBmaW5hbGl6ZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBsb29rYWhlYWQocmUpIHtcbiAgcmV0dXJuIGNvbmNhdCgnKD89JywgcmUsICcpJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gYW55TnVtYmVyT2ZUaW1lcyhyZSkge1xuICByZXR1cm4gY29uY2F0KCcoPzonLCByZSwgJykqJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gb3B0aW9uYWwocmUpIHtcbiAgcmV0dXJuIGNvbmNhdCgnKD86JywgcmUsICcpPycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7IEFycmF5PHN0cmluZyB8IFJlZ0V4cCB8IE9iamVjdD4gfSBhcmdzXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBzdHJpcE9wdGlvbnNGcm9tQXJncyhhcmdzKSB7XG4gIGNvbnN0IG9wdHMgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiBvcHRzLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICBhcmdzLnNwbGljZShhcmdzLmxlbmd0aCAtIDEsIDEpO1xuICAgIHJldHVybiBvcHRzO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKiogQHR5cGVkZWYgeyB7Y2FwdHVyZT86IGJvb2xlYW59IH0gUmVnZXhFaXRoZXJPcHRpb25zICovXG5cbi8qKlxuICogQW55IG9mIHRoZSBwYXNzZWQgZXhwcmVzc3Npb25zIG1heSBtYXRjaFxuICpcbiAqIENyZWF0ZXMgYSBodWdlIHRoaXMgfCB0aGlzIHwgdGhhdCB8IHRoYXQgbWF0Y2hcbiAqIEBwYXJhbSB7KFJlZ0V4cCB8IHN0cmluZylbXSB8IFsuLi4oUmVnRXhwIHwgc3RyaW5nKVtdLCBSZWdleEVpdGhlck9wdGlvbnNdfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlaXRoZXIoLi4uYXJncykge1xuICAvKiogQHR5cGUgeyBvYmplY3QgJiB7Y2FwdHVyZT86IGJvb2xlYW59IH0gICovXG4gIGNvbnN0IG9wdHMgPSBzdHJpcE9wdGlvbnNGcm9tQXJncyhhcmdzKTtcbiAgY29uc3Qgam9pbmVkID0gJygnXG4gICAgKyAob3B0cy5jYXB0dXJlID8gXCJcIiA6IFwiPzpcIilcbiAgICArIGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmd9IHJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBjb3VudE1hdGNoR3JvdXBzKHJlKSB7XG4gIHJldHVybiAobmV3IFJlZ0V4cChyZS50b1N0cmluZygpICsgJ3wnKSkuZXhlYygnJykubGVuZ3RoIC0gMTtcbn1cblxuLyoqXG4gKiBEb2VzIGxleGVtZSBzdGFydCB3aXRoIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmdcbiAqIEBwYXJhbSB7UmVnRXhwfSByZVxuICogQHBhcmFtIHtzdHJpbmd9IGxleGVtZVxuICovXG5mdW5jdGlvbiBzdGFydHNXaXRoKHJlLCBsZXhlbWUpIHtcbiAgY29uc3QgbWF0Y2ggPSByZSAmJiByZS5leGVjKGxleGVtZSk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaC5pbmRleCA9PT0gMDtcbn1cblxuLy8gQkFDS1JFRl9SRSBtYXRjaGVzIGFuIG9wZW4gcGFyZW50aGVzaXMgb3IgYmFja3JlZmVyZW5jZS4gVG8gYXZvaWRcbi8vIGFuIGluY29ycmVjdCBwYXJzZSwgaXQgYWRkaXRpb25hbGx5IG1hdGNoZXMgdGhlIGZvbGxvd2luZzpcbi8vIC0gWy4uLl0gZWxlbWVudHMsIHdoZXJlIHRoZSBtZWFuaW5nIG9mIHBhcmVudGhlc2VzIGFuZCBlc2NhcGVzIGNoYW5nZVxuLy8gLSBvdGhlciBlc2NhcGUgc2VxdWVuY2VzLCBzbyB3ZSBkbyBub3QgbWlzcGFyc2UgZXNjYXBlIHNlcXVlbmNlcyBhc1xuLy8gICBpbnRlcmVzdGluZyBlbGVtZW50c1xuLy8gLSBub24tbWF0Y2hpbmcgb3IgbG9va2FoZWFkIHBhcmVudGhlc2VzLCB3aGljaCBkbyBub3QgY2FwdHVyZS4gVGhlc2Vcbi8vICAgZm9sbG93IHRoZSAnKCcgd2l0aCBhICc/Jy5cbmNvbnN0IEJBQ0tSRUZfUkUgPSAvXFxbKD86W15cXFxcXFxdXXxcXFxcLikqXFxdfFxcKFxcPz98XFxcXChbMS05XVswLTldKil8XFxcXC4vO1xuXG4vLyAqKklOVEVSTkFMKiogTm90IGludGVuZGVkIGZvciBvdXRzaWRlIHVzYWdlXG4vLyBqb2luIGxvZ2ljYWxseSBjb21wdXRlcyByZWdleHBzLmpvaW4oc2VwYXJhdG9yKSwgYnV0IGZpeGVzIHRoZVxuLy8gYmFja3JlZmVyZW5jZXMgc28gdGhleSBjb250aW51ZSB0byBtYXRjaC5cbi8vIGl0IGFsc28gcGxhY2VzIGVhY2ggaW5kaXZpZHVhbCByZWd1bGFyIGV4cHJlc3Npb24gaW50byBpdCdzIG93blxuLy8gbWF0Y2ggZ3JvdXAsIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHNlcXVlbmNpbmcgb2YgdGhvc2UgbWF0Y2ggZ3JvdXBzXG4vLyBpcyBjdXJyZW50bHkgYW4gZXhlcmNpc2UgZm9yIHRoZSBjYWxsZXIuIDotKVxuLyoqXG4gKiBAcGFyYW0geyhzdHJpbmcgfCBSZWdFeHApW119IHJlZ2V4cHNcbiAqIEBwYXJhbSB7e2pvaW5XaXRoOiBzdHJpbmd9fSBvcHRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBfcmV3cml0ZUJhY2tyZWZlcmVuY2VzKHJlZ2V4cHMsIHsgam9pbldpdGggfSkge1xuICBsZXQgbnVtQ2FwdHVyZXMgPSAwO1xuXG4gIHJldHVybiByZWdleHBzLm1hcCgocmVnZXgpID0+IHtcbiAgICBudW1DYXB0dXJlcyArPSAxO1xuICAgIGNvbnN0IG9mZnNldCA9IG51bUNhcHR1cmVzO1xuICAgIGxldCByZSA9IHNvdXJjZShyZWdleCk7XG4gICAgbGV0IG91dCA9ICcnO1xuXG4gICAgd2hpbGUgKHJlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gQkFDS1JFRl9SRS5leGVjKHJlKTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgb3V0ICs9IHJlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG91dCArPSByZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXgpO1xuICAgICAgcmUgPSByZS5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgaWYgKG1hdGNoWzBdWzBdID09PSAnXFxcXCcgJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgLy8gQWRqdXN0IHRoZSBiYWNrcmVmZXJlbmNlLlxuICAgICAgICBvdXQgKz0gJ1xcXFwnICsgU3RyaW5nKE51bWJlcihtYXRjaFsxXSkgKyBvZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9IG1hdGNoWzBdO1xuICAgICAgICBpZiAobWF0Y2hbMF0gPT09ICcoJykge1xuICAgICAgICAgIG51bUNhcHR1cmVzKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfSkubWFwKHJlID0+IGAoJHtyZX0pYCkuam9pbihqb2luV2l0aCk7XG59XG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Nb2RlfSBNb2RlICovXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuTW9kZUNhbGxiYWNrfSBNb2RlQ2FsbGJhY2sgKi9cblxuLy8gQ29tbW9uIHJlZ2V4cHNcbmNvbnN0IE1BVENIX05PVEhJTkdfUkUgPSAvXFxiXFxCLztcbmNvbnN0IElERU5UX1JFID0gJ1thLXpBLVpdXFxcXHcqJztcbmNvbnN0IFVOREVSU0NPUkVfSURFTlRfUkUgPSAnW2EtekEtWl9dXFxcXHcqJztcbmNvbnN0IE5VTUJFUl9SRSA9ICdcXFxcYlxcXFxkKyhcXFxcLlxcXFxkKyk/JztcbmNvbnN0IENfTlVNQkVSX1JFID0gJygtPykoXFxcXGIwW3hYXVthLWZBLUYwLTldK3woXFxcXGJcXFxcZCsoXFxcXC5cXFxcZCopP3xcXFxcLlxcXFxkKykoW2VFXVstK10/XFxcXGQrKT8pJzsgLy8gMHguLi4sIDAuLi4sIGRlY2ltYWwsIGZsb2F0XG5jb25zdCBCSU5BUllfTlVNQkVSX1JFID0gJ1xcXFxiKDBiWzAxXSspJzsgLy8gMGIuLi5cbmNvbnN0IFJFX1NUQVJURVJTX1JFID0gJyF8IT18IT09fCV8JT18JnwmJnwmPXxcXFxcKnxcXFxcKj18XFxcXCt8XFxcXCs9fCx8LXwtPXwvPXwvfDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXFxcP3xcXFxcW3xcXFxce3xcXFxcKHxcXFxcXnxcXFxcXj18XFxcXHx8XFxcXHw9fFxcXFx8XFxcXHx8fic7XG5cbi8qKlxuKiBAcGFyYW0geyBQYXJ0aWFsPE1vZGU+ICYge2JpbmFyeT86IHN0cmluZyB8IFJlZ0V4cH0gfSBvcHRzXG4qL1xuY29uc3QgU0hFQkFORyA9IChvcHRzID0ge30pID0+IHtcbiAgY29uc3QgYmVnaW5TaGViYW5nID0gL14jIVsgXSpcXC8vO1xuICBpZiAob3B0cy5iaW5hcnkpIHtcbiAgICBvcHRzLmJlZ2luID0gY29uY2F0KFxuICAgICAgYmVnaW5TaGViYW5nLFxuICAgICAgLy4qXFxiLyxcbiAgICAgIG9wdHMuYmluYXJ5LFxuICAgICAgL1xcYi4qLyk7XG4gIH1cbiAgcmV0dXJuIGluaGVyaXQkMSh7XG4gICAgc2NvcGU6ICdtZXRhJyxcbiAgICBiZWdpbjogYmVnaW5TaGViYW5nLFxuICAgIGVuZDogLyQvLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICAvKiogQHR5cGUge01vZGVDYWxsYmFja30gKi9cbiAgICBcIm9uOmJlZ2luXCI6IChtLCByZXNwKSA9PiB7XG4gICAgICBpZiAobS5pbmRleCAhPT0gMCkgcmVzcC5pZ25vcmVNYXRjaCgpO1xuICAgIH1cbiAgfSwgb3B0cyk7XG59O1xuXG4vLyBDb21tb24gbW9kZXNcbmNvbnN0IEJBQ0tTTEFTSF9FU0NBUEUgPSB7XG4gIGJlZ2luOiAnXFxcXFxcXFxbXFxcXHNcXFxcU10nLCByZWxldmFuY2U6IDBcbn07XG5jb25zdCBBUE9TX1NUUklOR19NT0RFID0ge1xuICBzY29wZTogJ3N0cmluZycsXG4gIGJlZ2luOiAnXFwnJyxcbiAgZW5kOiAnXFwnJyxcbiAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgY29udGFpbnM6IFtCQUNLU0xBU0hfRVNDQVBFXVxufTtcbmNvbnN0IFFVT1RFX1NUUklOR19NT0RFID0ge1xuICBzY29wZTogJ3N0cmluZycsXG4gIGJlZ2luOiAnXCInLFxuICBlbmQ6ICdcIicsXG4gIGlsbGVnYWw6ICdcXFxcbicsXG4gIGNvbnRhaW5zOiBbQkFDS1NMQVNIX0VTQ0FQRV1cbn07XG5jb25zdCBQSFJBU0FMX1dPUkRTX01PREUgPSB7XG4gIGJlZ2luOiAvXFxiKGF8YW58dGhlfGFyZXxJJ218aXNuJ3R8ZG9uJ3R8ZG9lc24ndHx3b24ndHxidXR8anVzdHxzaG91bGR8cHJldHR5fHNpbXBseXxlbm91Z2h8Z29ubmF8Z29pbmd8d3RmfHNvfHN1Y2h8d2lsbHx5b3V8eW91cnx0aGV5fGxpa2V8bW9yZSlcXGIvXG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgY29tbWVudCBtb2RlXG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBSZWdFeHB9IGJlZ2luXG4gKiBAcGFyYW0ge3N0cmluZyB8IFJlZ0V4cH0gZW5kXG4gKiBAcGFyYW0ge01vZGUgfCB7fX0gW21vZGVPcHRpb25zXVxuICogQHJldHVybnMge1BhcnRpYWw8TW9kZT59XG4gKi9cbmNvbnN0IENPTU1FTlQgPSBmdW5jdGlvbihiZWdpbiwgZW5kLCBtb2RlT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IG1vZGUgPSBpbmhlcml0JDEoXG4gICAge1xuICAgICAgc2NvcGU6ICdjb21tZW50JyxcbiAgICAgIGJlZ2luLFxuICAgICAgZW5kLFxuICAgICAgY29udGFpbnM6IFtdXG4gICAgfSxcbiAgICBtb2RlT3B0aW9uc1xuICApO1xuICBtb2RlLmNvbnRhaW5zLnB1c2goe1xuICAgIHNjb3BlOiAnZG9jdGFnJyxcbiAgICAvLyBoYWNrIHRvIGF2b2lkIHRoZSBzcGFjZSBmcm9tIGJlaW5nIGluY2x1ZGVkLiB0aGUgc3BhY2UgaXMgbmVjZXNzYXJ5IHRvXG4gICAgLy8gbWF0Y2ggaGVyZSB0byBwcmV2ZW50IHRoZSBwbGFpbiB0ZXh0IHJ1bGUgYmVsb3cgZnJvbSBnb2JibGluZyB1cCBkb2N0YWdzXG4gICAgYmVnaW46ICdbIF0qKD89KFRPRE98RklYTUV8Tk9URXxCVUd8T1BUSU1JWkV8SEFDS3xYWFgpOiknLFxuICAgIGVuZDogLyhUT0RPfEZJWE1FfE5PVEV8QlVHfE9QVElNSVpFfEhBQ0t8WFhYKTovLFxuICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfSk7XG4gIGNvbnN0IEVOR0xJU0hfV09SRCA9IGVpdGhlcihcbiAgICAvLyBsaXN0IG9mIGNvbW1vbiAxIGFuZCAyIGxldHRlciB3b3JkcyBpbiBFbmdsaXNoXG4gICAgXCJJXCIsXG4gICAgXCJhXCIsXG4gICAgXCJpc1wiLFxuICAgIFwic29cIixcbiAgICBcInVzXCIsXG4gICAgXCJ0b1wiLFxuICAgIFwiYXRcIixcbiAgICBcImlmXCIsXG4gICAgXCJpblwiLFxuICAgIFwiaXRcIixcbiAgICBcIm9uXCIsXG4gICAgLy8gbm90ZTogdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0IG9mIGNvbnRyYWN0aW9ucywganVzdCBwb3B1bGFyIG9uZXNcbiAgICAvW0EtWmEtel0rWyddKGR8dmV8cmV8bGx8dHxzfG4pLywgLy8gY29udHJhY3Rpb25zIC0gY2FuJ3Qgd2UnZCB0aGV5J3JlIGxldCdzLCBldGNcbiAgICAvW0EtWmEtel0rWy1dW2Etel0rLywgLy8gYG5vLXdheWAsIGV0Yy5cbiAgICAvW0EtWmEtel1bYS16XXsyLH0vIC8vIGFsbG93IGNhcGl0YWxpemVkIHdvcmRzIGF0IGJlZ2lubmluZyBvZiBzZW50ZW5jZXNcbiAgKTtcbiAgLy8gbG9va2luZyBsaWtlIHBsYWluIHRleHQsIG1vcmUgbGlrZWx5IHRvIGJlIGEgY29tbWVudFxuICBtb2RlLmNvbnRhaW5zLnB1c2goXG4gICAge1xuICAgICAgLy8gVE9ETzogaG93IHRvIGluY2x1ZGUgXCIsICgsICkgd2l0aG91dCBicmVha2luZyBncmFtbWFycyB0aGF0IHVzZSB0aGVzZSBmb3JcbiAgICAgIC8vIGNvbW1lbnQgZGVsaW1pdGVycz9cbiAgICAgIC8vIGJlZ2luOiAvWyBdKyhbKClcIl0/KFtBLVphLXonLV17Myx9fGlzfGF8SXxzb3x1c3xbdFRdW29PXXxhdHxpZnxpbnxpdHxvbilbLl0/WygpXCI6XT8oWy5dWyBdfFsgXXxcXCkpKXszfS9cbiAgICAgIC8vIC0tLVxuXG4gICAgICAvLyB0aGlzIHRyaWVzIHRvIGZpbmQgc2VxdWVuY2VzIG9mIDMgZW5nbGlzaCB3b3JkcyBpbiBhIHJvdyAod2l0aG91dCBhbnlcbiAgICAgIC8vIFwicHJvZ3JhbW1pbmdcIiB0eXBlIHN5bnRheCkgdGhpcyBnaXZlcyB1cyBhIHN0cm9uZyBzaWduYWwgdGhhdCB3ZSd2ZVxuICAgICAgLy8gVFJVTFkgZm91bmQgYSBjb21tZW50IC0gdnMgcGVyaGFwcyBzY2FubmluZyB3aXRoIHRoZSB3cm9uZyBsYW5ndWFnZS5cbiAgICAgIC8vIEl0J3MgcG9zc2libGUgdG8gZmluZCBzb21ldGhpbmcgdGhhdCBMT09LUyBsaWtlIHRoZSBzdGFydCBvZiB0aGVcbiAgICAgIC8vIGNvbW1lbnQgLSBidXQgdGhlbiBpZiB0aGVyZSBpcyBubyByZWFkYWJsZSB0ZXh0IC0gZ29vZCBjaGFuY2UgaXQgaXMgYVxuICAgICAgLy8gZmFsc2UgbWF0Y2ggYW5kIG5vdCBhIGNvbW1lbnQuXG4gICAgICAvL1xuICAgICAgLy8gZm9yIGEgdmlzdWFsIGV4YW1wbGUgcGxlYXNlIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzI4MjdcblxuICAgICAgYmVnaW46IGNvbmNhdChcbiAgICAgICAgL1sgXSsvLCAvLyBuZWNlc3NhcnkgdG8gcHJldmVudCB1cyBnb2JibGluZyB1cCBkb2N0YWdzIGxpa2UgLyogQGF1dGhvciBCb2IgTWNnaWxsICovXG4gICAgICAgICcoJyxcbiAgICAgICAgRU5HTElTSF9XT1JELFxuICAgICAgICAvWy5dP1s6XT8oWy5dWyBdfFsgXSkvLFxuICAgICAgICAnKXszfScpIC8vIGxvb2sgZm9yIDMgd29yZHMgaW4gYSByb3dcbiAgICB9XG4gICk7XG4gIHJldHVybiBtb2RlO1xufTtcbmNvbnN0IENfTElORV9DT01NRU5UX01PREUgPSBDT01NRU5UKCcvLycsICckJyk7XG5jb25zdCBDX0JMT0NLX0NPTU1FTlRfTU9ERSA9IENPTU1FTlQoJy9cXFxcKicsICdcXFxcKi8nKTtcbmNvbnN0IEhBU0hfQ09NTUVOVF9NT0RFID0gQ09NTUVOVCgnIycsICckJyk7XG5jb25zdCBOVU1CRVJfTU9ERSA9IHtcbiAgc2NvcGU6ICdudW1iZXInLFxuICBiZWdpbjogTlVNQkVSX1JFLFxuICByZWxldmFuY2U6IDBcbn07XG5jb25zdCBDX05VTUJFUl9NT0RFID0ge1xuICBzY29wZTogJ251bWJlcicsXG4gIGJlZ2luOiBDX05VTUJFUl9SRSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuY29uc3QgQklOQVJZX05VTUJFUl9NT0RFID0ge1xuICBzY29wZTogJ251bWJlcicsXG4gIGJlZ2luOiBCSU5BUllfTlVNQkVSX1JFLFxuICByZWxldmFuY2U6IDBcbn07XG5jb25zdCBSRUdFWFBfTU9ERSA9IHtcbiAgLy8gdGhpcyBvdXRlciBydWxlIG1ha2VzIHN1cmUgd2UgYWN0dWFsbHkgaGF2ZSBhIFdIT0xFIHJlZ2V4IGFuZCBub3Qgc2ltcGx5XG4gIC8vIGFuIGV4cHJlc3Npb24gc3VjaCBhczpcbiAgLy9cbiAgLy8gICAgIDMgLyBzb21ldGhpbmdcbiAgLy9cbiAgLy8gKHdoaWNoIHdpbGwgdGhlbiBibG93IHVwIHdoZW4gcmVnZXgncyBgaWxsZWdhbGAgc2VlcyB0aGUgbmV3bGluZSlcbiAgYmVnaW46IC8oPz1cXC9bXi9cXG5dKlxcLykvLFxuICBjb250YWluczogW3tcbiAgICBzY29wZTogJ3JlZ2V4cCcsXG4gICAgYmVnaW46IC9cXC8vLFxuICAgIGVuZDogL1xcL1tnaW11eV0qLyxcbiAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICBjb250YWluczogW1xuICAgICAgQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFsvLFxuICAgICAgICBlbmQ6IC9cXF0vLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH1cbiAgICBdXG4gIH1dXG59O1xuY29uc3QgVElUTEVfTU9ERSA9IHtcbiAgc2NvcGU6ICd0aXRsZScsXG4gIGJlZ2luOiBJREVOVF9SRSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuY29uc3QgVU5ERVJTQ09SRV9USVRMRV9NT0RFID0ge1xuICBzY29wZTogJ3RpdGxlJyxcbiAgYmVnaW46IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gIHJlbGV2YW5jZTogMFxufTtcbmNvbnN0IE1FVEhPRF9HVUFSRCA9IHtcbiAgLy8gZXhjbHVkZXMgbWV0aG9kIG5hbWVzIGZyb20ga2V5d29yZCBwcm9jZXNzaW5nXG4gIGJlZ2luOiAnXFxcXC5cXFxccyonICsgVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuXG4vKipcbiAqIEFkZHMgZW5kIHNhbWUgYXMgYmVnaW4gbWVjaGFuaWNzIHRvIGEgbW9kZVxuICpcbiAqIFlvdXIgbW9kZSBtdXN0IGluY2x1ZGUgYXQgbGVhc3QgYSBzaW5nbGUgKCkgbWF0Y2ggZ3JvdXAgYXMgdGhhdCBmaXJzdCBtYXRjaFxuICogZ3JvdXAgaXMgd2hhdCBpcyB1c2VkIGZvciBjb21wYXJpc29uXG4gKiBAcGFyYW0ge1BhcnRpYWw8TW9kZT59IG1vZGVcbiAqL1xuY29uc3QgRU5EX1NBTUVfQVNfQkVHSU4gPSBmdW5jdGlvbihtb2RlKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG1vZGUsXG4gICAge1xuICAgICAgLyoqIEB0eXBlIHtNb2RlQ2FsbGJhY2t9ICovXG4gICAgICAnb246YmVnaW4nOiAobSwgcmVzcCkgPT4geyByZXNwLmRhdGEuX2JlZ2luTWF0Y2ggPSBtWzFdOyB9LFxuICAgICAgLyoqIEB0eXBlIHtNb2RlQ2FsbGJhY2t9ICovXG4gICAgICAnb246ZW5kJzogKG0sIHJlc3ApID0+IHsgaWYgKHJlc3AuZGF0YS5fYmVnaW5NYXRjaCAhPT0gbVsxXSkgcmVzcC5pZ25vcmVNYXRjaCgpOyB9XG4gICAgfSk7XG59O1xuXG52YXIgTU9ERVMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIE1BVENIX05PVEhJTkdfUkU6IE1BVENIX05PVEhJTkdfUkUsXG4gICAgSURFTlRfUkU6IElERU5UX1JFLFxuICAgIFVOREVSU0NPUkVfSURFTlRfUkU6IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgTlVNQkVSX1JFOiBOVU1CRVJfUkUsXG4gICAgQ19OVU1CRVJfUkU6IENfTlVNQkVSX1JFLFxuICAgIEJJTkFSWV9OVU1CRVJfUkU6IEJJTkFSWV9OVU1CRVJfUkUsXG4gICAgUkVfU1RBUlRFUlNfUkU6IFJFX1NUQVJURVJTX1JFLFxuICAgIFNIRUJBTkc6IFNIRUJBTkcsXG4gICAgQkFDS1NMQVNIX0VTQ0FQRTogQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICBBUE9TX1NUUklOR19NT0RFOiBBUE9TX1NUUklOR19NT0RFLFxuICAgIFFVT1RFX1NUUklOR19NT0RFOiBRVU9URV9TVFJJTkdfTU9ERSxcbiAgICBQSFJBU0FMX1dPUkRTX01PREU6IFBIUkFTQUxfV09SRFNfTU9ERSxcbiAgICBDT01NRU5UOiBDT01NRU5ULFxuICAgIENfTElORV9DT01NRU5UX01PREU6IENfTElORV9DT01NRU5UX01PREUsXG4gICAgQ19CTE9DS19DT01NRU5UX01PREU6IENfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIEhBU0hfQ09NTUVOVF9NT0RFOiBIQVNIX0NPTU1FTlRfTU9ERSxcbiAgICBOVU1CRVJfTU9ERTogTlVNQkVSX01PREUsXG4gICAgQ19OVU1CRVJfTU9ERTogQ19OVU1CRVJfTU9ERSxcbiAgICBCSU5BUllfTlVNQkVSX01PREU6IEJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICBSRUdFWFBfTU9ERTogUkVHRVhQX01PREUsXG4gICAgVElUTEVfTU9ERTogVElUTEVfTU9ERSxcbiAgICBVTkRFUlNDT1JFX1RJVExFX01PREU6IFVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICBNRVRIT0RfR1VBUkQ6IE1FVEhPRF9HVUFSRCxcbiAgICBFTkRfU0FNRV9BU19CRUdJTjogRU5EX1NBTUVfQVNfQkVHSU5cbn0pO1xuXG4vKipcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkNhbGxiYWNrUmVzcG9uc2V9IENhbGxiYWNrUmVzcG9uc2VcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkNvbXBpbGVyRXh0fSBDb21waWxlckV4dFxuKi9cblxuLy8gR3JhbW1hciBleHRlbnNpb25zIC8gcGx1Z2luc1xuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL2lzc3Vlcy8yODMzXG5cbi8vIEdyYW1tYXIgZXh0ZW5zaW9ucyBhbGxvdyBcInN5bnRhY3RpYyBzdWdhclwiIHRvIGJlIGFkZGVkIHRvIHRoZSBncmFtbWFyIG1vZGVzXG4vLyB3aXRob3V0IHJlcXVpcmluZyBhbnkgdW5kZXJseWluZyBjaGFuZ2VzIHRvIHRoZSBjb21waWxlciBpbnRlcm5hbHMuXG5cbi8vIGBjb21waWxlTWF0Y2hgIGJlaW5nIHRoZSBwZXJmZWN0IHNtYWxsIGV4YW1wbGUgb2Ygbm93IGFsbG93aW5nIGEgZ3JhbW1hclxuLy8gYXV0aG9yIHRvIHdyaXRlIGBtYXRjaGAgd2hlbiB0aGV5IGRlc2lyZSB0byBtYXRjaCBhIHNpbmdsZSBleHByZXNzaW9uIHJhdGhlclxuLy8gdGhhbiBiZWluZyBmb3JjZWQgdG8gdXNlIGBiZWdpbmAuICBUaGUgZXh0ZW5zaW9uIHRoZW4ganVzdCBtb3ZlcyBgbWF0Y2hgIGludG9cbi8vIGBiZWdpbmAgd2hlbiBpdCBydW5zLiAgSWUsIG5vIGZlYXR1cmVzIGhhdmUgYmVlbiBhZGRlZCwgYnV0IHdlJ3ZlIGp1c3QgbWFkZVxuLy8gdGhlIGV4cGVyaWVuY2Ugb2Ygd3JpdGluZyAoYW5kIHJlYWRpbmcgZ3JhbW1hcnMpIGEgbGl0dGxlIGJpdCBuaWNlci5cblxuLy8gLS0tLS0tXG5cbi8vIFRPRE86IFdlIG5lZWQgbmVnYXRpdmUgbG9vay1iZWhpbmQgc3VwcG9ydCB0byBkbyB0aGlzIHByb3Blcmx5XG4vKipcbiAqIFNraXAgYSBtYXRjaCBpZiBpdCBoYXMgYSBwcmVjZWRpbmcgZG90XG4gKlxuICogVGhpcyBpcyB1c2VkIGZvciBgYmVnaW5LZXl3b3Jkc2AgdG8gcHJldmVudCBtYXRjaGluZyBleHByZXNzaW9ucyBzdWNoIGFzXG4gKiBgYm9iLmtleXdvcmQuZG8oKWAuIFRoZSBtb2RlIGNvbXBpbGVyIGF1dG9tYXRpY2FsbHkgd2lyZXMgdGhpcyB1cCBhcyBhXG4gKiBzcGVjaWFsIF9pbnRlcm5hbF8gJ29uOmJlZ2luJyBjYWxsYmFjayBmb3IgbW9kZXMgd2l0aCBgYmVnaW5LZXl3b3Jkc2BcbiAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2hcbiAqIEBwYXJhbSB7Q2FsbGJhY2tSZXNwb25zZX0gcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gc2tpcElmSGFzUHJlY2VkaW5nRG90KG1hdGNoLCByZXNwb25zZSkge1xuICBjb25zdCBiZWZvcmUgPSBtYXRjaC5pbnB1dFttYXRjaC5pbmRleCAtIDFdO1xuICBpZiAoYmVmb3JlID09PSBcIi5cIikge1xuICAgIHJlc3BvbnNlLmlnbm9yZU1hdGNoKCk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHR5cGUge0NvbXBpbGVyRXh0fVxuICovXG5mdW5jdGlvbiBzY29wZUNsYXNzTmFtZShtb2RlLCBfcGFyZW50KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgaWYgKG1vZGUuY2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBtb2RlLnNjb3BlID0gbW9kZS5jbGFzc05hbWU7XG4gICAgZGVsZXRlIG1vZGUuY2xhc3NOYW1lO1xuICB9XG59XG5cbi8qKlxuICogYGJlZ2luS2V5d29yZHNgIHN5bnRhY3RpYyBzdWdhclxuICogQHR5cGUge0NvbXBpbGVyRXh0fVxuICovXG5mdW5jdGlvbiBiZWdpbktleXdvcmRzKG1vZGUsIHBhcmVudCkge1xuICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICBpZiAoIW1vZGUuYmVnaW5LZXl3b3JkcykgcmV0dXJuO1xuXG4gIC8vIGZvciBsYW5ndWFnZXMgd2l0aCBrZXl3b3JkcyB0aGF0IGluY2x1ZGUgbm9uLXdvcmQgY2hhcmFjdGVycyBjaGVja2luZyBmb3JcbiAgLy8gYSB3b3JkIGJvdW5kYXJ5IGlzIG5vdCBzdWZmaWNpZW50LCBzbyBpbnN0ZWFkIHdlIGNoZWNrIGZvciBhIHdvcmQgYm91bmRhcnlcbiAgLy8gb3Igd2hpdGVzcGFjZSAtIHRoaXMgZG9lcyBubyBoYXJtIGluIGFueSBjYXNlIHNpbmNlIG91ciBrZXl3b3JkIGVuZ2luZVxuICAvLyBkb2Vzbid0IGFsbG93IHNwYWNlcyBpbiBrZXl3b3JkcyBhbnl3YXlzIGFuZCB3ZSBzdGlsbCBjaGVjayBmb3IgdGhlIGJvdW5kYXJ5XG4gIC8vIGZpcnN0XG4gIG1vZGUuYmVnaW4gPSAnXFxcXGIoJyArIG1vZGUuYmVnaW5LZXl3b3Jkcy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcpKD8hXFxcXC4pKD89XFxcXGJ8XFxcXHMpJztcbiAgbW9kZS5fX2JlZm9yZUJlZ2luID0gc2tpcElmSGFzUHJlY2VkaW5nRG90O1xuICBtb2RlLmtleXdvcmRzID0gbW9kZS5rZXl3b3JkcyB8fCBtb2RlLmJlZ2luS2V5d29yZHM7XG4gIGRlbGV0ZSBtb2RlLmJlZ2luS2V5d29yZHM7XG5cbiAgLy8gcHJldmVudHMgZG91YmxlIHJlbGV2YW5jZSwgdGhlIGtleXdvcmRzIHRoZW1zZWx2ZXMgcHJvdmlkZVxuICAvLyByZWxldmFuY2UsIHRoZSBtb2RlIGRvZXNuJ3QgbmVlZCB0byBkb3VibGUgaXRcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmaW5lZFxuICBpZiAobW9kZS5yZWxldmFuY2UgPT09IHVuZGVmaW5lZCkgbW9kZS5yZWxldmFuY2UgPSAwO1xufVxuXG4vKipcbiAqIEFsbG93IGBpbGxlZ2FsYCB0byBjb250YWluIGFuIGFycmF5IG9mIGlsbGVnYWwgdmFsdWVzXG4gKiBAdHlwZSB7Q29tcGlsZXJFeHR9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVJbGxlZ2FsKG1vZGUsIF9wYXJlbnQpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG1vZGUuaWxsZWdhbCkpIHJldHVybjtcblxuICBtb2RlLmlsbGVnYWwgPSBlaXRoZXIoLi4ubW9kZS5pbGxlZ2FsKTtcbn1cblxuLyoqXG4gKiBgbWF0Y2hgIHRvIG1hdGNoIGEgc2luZ2xlIGV4cHJlc3Npb24gZm9yIHJlYWRhYmlsaXR5XG4gKiBAdHlwZSB7Q29tcGlsZXJFeHR9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVNYXRjaChtb2RlLCBfcGFyZW50KSB7XG4gIGlmICghbW9kZS5tYXRjaCkgcmV0dXJuO1xuICBpZiAobW9kZS5iZWdpbiB8fCBtb2RlLmVuZCkgdGhyb3cgbmV3IEVycm9yKFwiYmVnaW4gJiBlbmQgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBtYXRjaFwiKTtcblxuICBtb2RlLmJlZ2luID0gbW9kZS5tYXRjaDtcbiAgZGVsZXRlIG1vZGUubWF0Y2g7XG59XG5cbi8qKlxuICogcHJvdmlkZXMgdGhlIGRlZmF1bHQgMSByZWxldmFuY2UgdG8gYWxsIG1vZGVzXG4gKiBAdHlwZSB7Q29tcGlsZXJFeHR9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVSZWxldmFuY2UobW9kZSwgX3BhcmVudCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gIGlmIChtb2RlLnJlbGV2YW5jZSA9PT0gdW5kZWZpbmVkKSBtb2RlLnJlbGV2YW5jZSA9IDE7XG59XG5cbi8vIGFsbG93IGJlZm9yZU1hdGNoIHRvIGFjdCBhcyBhIFwicXVhbGlmaWVyXCIgZm9yIHRoZSBtYXRjaFxuLy8gdGhlIGZ1bGwgbWF0Y2ggYmVnaW4gbXVzdCBiZSBbYmVmb3JlTWF0Y2hdW2JlZ2luXVxuY29uc3QgYmVmb3JlTWF0Y2hFeHQgPSAobW9kZSwgcGFyZW50KSA9PiB7XG4gIGlmICghbW9kZS5iZWZvcmVNYXRjaCkgcmV0dXJuO1xuICAvLyBzdGFydHMgY29uZmxpY3RzIHdpdGggZW5kc1BhcmVudCB3aGljaCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY2hpbGRcbiAgLy8gcnVsZSBpcyBub3QgbWF0Y2hlZCBtdWx0aXBsZSB0aW1lc1xuICBpZiAobW9kZS5zdGFydHMpIHRocm93IG5ldyBFcnJvcihcImJlZm9yZU1hdGNoIGNhbm5vdCBiZSB1c2VkIHdpdGggc3RhcnRzXCIpO1xuXG4gIGNvbnN0IG9yaWdpbmFsTW9kZSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGUpO1xuICBPYmplY3Qua2V5cyhtb2RlKS5mb3JFYWNoKChrZXkpID0+IHsgZGVsZXRlIG1vZGVba2V5XTsgfSk7XG5cbiAgbW9kZS5rZXl3b3JkcyA9IG9yaWdpbmFsTW9kZS5rZXl3b3JkcztcbiAgbW9kZS5iZWdpbiA9IGNvbmNhdChvcmlnaW5hbE1vZGUuYmVmb3JlTWF0Y2gsIGxvb2thaGVhZChvcmlnaW5hbE1vZGUuYmVnaW4pKTtcbiAgbW9kZS5zdGFydHMgPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBPYmplY3QuYXNzaWduKG9yaWdpbmFsTW9kZSwgeyBlbmRzUGFyZW50OiB0cnVlIH0pXG4gICAgXVxuICB9O1xuICBtb2RlLnJlbGV2YW5jZSA9IDA7XG5cbiAgZGVsZXRlIG9yaWdpbmFsTW9kZS5iZWZvcmVNYXRjaDtcbn07XG5cbi8vIGtleXdvcmRzIHRoYXQgc2hvdWxkIGhhdmUgbm8gZGVmYXVsdCByZWxldmFuY2UgdmFsdWVcbmNvbnN0IENPTU1PTl9LRVlXT1JEUyA9IFtcbiAgJ29mJyxcbiAgJ2FuZCcsXG4gICdmb3InLFxuICAnaW4nLFxuICAnbm90JyxcbiAgJ29yJyxcbiAgJ2lmJyxcbiAgJ3RoZW4nLFxuICAncGFyZW50JywgLy8gY29tbW9uIHZhcmlhYmxlIG5hbWVcbiAgJ2xpc3QnLCAvLyBjb21tb24gdmFyaWFibGUgbmFtZVxuICAndmFsdWUnIC8vIGNvbW1vbiB2YXJpYWJsZSBuYW1lXG5dO1xuXG5jb25zdCBERUZBVUxUX0tFWVdPUkRfU0NPUEUgPSBcImtleXdvcmRcIjtcblxuLyoqXG4gKiBHaXZlbiByYXcga2V5d29yZHMgZnJvbSBhIGxhbmd1YWdlIGRlZmluaXRpb24sIGNvbXBpbGUgdGhlbS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IFJlY29yZDxzdHJpbmcsc3RyaW5nfHN0cmluZ1tdPiB8IEFycmF5PHN0cmluZz59IHJhd0tleXdvcmRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhc2VJbnNlbnNpdGl2ZVxuICovXG5mdW5jdGlvbiBjb21waWxlS2V5d29yZHMocmF3S2V5d29yZHMsIGNhc2VJbnNlbnNpdGl2ZSwgc2NvcGVOYW1lID0gREVGQVVMVF9LRVlXT1JEX1NDT1BFKSB7XG4gIC8qKiBAdHlwZSBLZXl3b3JkRGljdCAqL1xuICBjb25zdCBjb21waWxlZEtleXdvcmRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvLyBpbnB1dCBjYW4gYmUgYSBzdHJpbmcgb2Yga2V5d29yZHMsIGFuIGFycmF5IG9mIGtleXdvcmRzLCBvciBhIG9iamVjdCB3aXRoXG4gIC8vIG5hbWVkIGtleXMgcmVwcmVzZW50aW5nIHNjb3BlTmFtZSAod2hpY2ggY2FuIHRoZW4gcG9pbnQgdG8gYSBzdHJpbmcgb3IgYXJyYXkpXG4gIGlmICh0eXBlb2YgcmF3S2V5d29yZHMgPT09ICdzdHJpbmcnKSB7XG4gICAgY29tcGlsZUxpc3Qoc2NvcGVOYW1lLCByYXdLZXl3b3Jkcy5zcGxpdChcIiBcIikpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmF3S2V5d29yZHMpKSB7XG4gICAgY29tcGlsZUxpc3Qoc2NvcGVOYW1lLCByYXdLZXl3b3Jkcyk7XG4gIH0gZWxzZSB7XG4gICAgT2JqZWN0LmtleXMocmF3S2V5d29yZHMpLmZvckVhY2goZnVuY3Rpb24oc2NvcGVOYW1lKSB7XG4gICAgICAvLyBjb2xsYXBzZSBhbGwgb3VyIG9iamVjdHMgYmFjayBpbnRvIHRoZSBwYXJlbnQgb2JqZWN0XG4gICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICBjb21waWxlZEtleXdvcmRzLFxuICAgICAgICBjb21waWxlS2V5d29yZHMocmF3S2V5d29yZHNbc2NvcGVOYW1lXSwgY2FzZUluc2Vuc2l0aXZlLCBzY29wZU5hbWUpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21waWxlZEtleXdvcmRzO1xuXG4gIC8vIC0tLVxuXG4gIC8qKlxuICAgKiBDb21waWxlcyBhbiBpbmRpdmlkdWFsIGxpc3Qgb2Yga2V5d29yZHNcbiAgICpcbiAgICogRXg6IFwiZm9yIGlmIHdoZW4gd2hpbGV8NVwiXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZU5hbWVcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBrZXl3b3JkTGlzdFxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGlsZUxpc3Qoc2NvcGVOYW1lLCBrZXl3b3JkTGlzdCkge1xuICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICAgIGtleXdvcmRMaXN0ID0ga2V5d29yZExpc3QubWFwKHggPT4geC50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG4gICAga2V5d29yZExpc3QuZm9yRWFjaChmdW5jdGlvbihrZXl3b3JkKSB7XG4gICAgICBjb25zdCBwYWlyID0ga2V5d29yZC5zcGxpdCgnfCcpO1xuICAgICAgY29tcGlsZWRLZXl3b3Jkc1twYWlyWzBdXSA9IFtzY29wZU5hbWUsIHNjb3JlRm9yS2V5d29yZChwYWlyWzBdLCBwYWlyWzFdKV07XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm9wZXIgc2NvcmUgZm9yIGEgZ2l2ZW4ga2V5d29yZFxuICpcbiAqIEFsc28gdGFrZXMgaW50byBhY2NvdW50IGNvbW1lbnQga2V5d29yZHMsIHdoaWNoIHdpbGwgYmUgc2NvcmVkIDAgVU5MRVNTXG4gKiBhbm90aGVyIHNjb3JlIGhhcyBiZWVuIG1hbnVhbGx5IGFzc2lnbmVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGtleXdvcmRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvdmlkZWRTY29yZV1cbiAqL1xuZnVuY3Rpb24gc2NvcmVGb3JLZXl3b3JkKGtleXdvcmQsIHByb3ZpZGVkU2NvcmUpIHtcbiAgLy8gbWFudWFsIHNjb3JlcyBhbHdheXMgd2luIG92ZXIgY29tbW9uIGtleXdvcmRzXG4gIC8vIHNvIHlvdSBjYW4gZm9yY2UgYSBzY29yZSBvZiAxIGlmIHlvdSByZWFsbHkgaW5zaXN0XG4gIGlmIChwcm92aWRlZFNjb3JlKSB7XG4gICAgcmV0dXJuIE51bWJlcihwcm92aWRlZFNjb3JlKTtcbiAgfVxuXG4gIHJldHVybiBjb21tb25LZXl3b3JkKGtleXdvcmQpID8gMCA6IDE7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIGtleXdvcmQgaXMgY29tbW9uIG9yIG5vdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXl3b3JkICovXG5mdW5jdGlvbiBjb21tb25LZXl3b3JkKGtleXdvcmQpIHtcbiAgcmV0dXJuIENPTU1PTl9LRVlXT1JEUy5pbmNsdWRlcyhrZXl3b3JkLnRvTG93ZXJDYXNlKCkpO1xufVxuXG4vKlxuXG5Gb3IgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBwbGVhc2Ugc2VlOlxuaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjg4MCNpc3N1ZWNvbW1lbnQtNzQ3Mjc1NDE5XG5cbiovXG5cbi8qKlxuICogQHR5cGUge1JlY29yZDxzdHJpbmcsIGJvb2xlYW4+fVxuICovXG5jb25zdCBzZWVuRGVwcmVjYXRpb25zID0ge307XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqL1xuY29uc3QgZXJyb3IgPSAobWVzc2FnZSkgPT4ge1xuICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHBhcmFtIHthbnl9IGFyZ3NcbiAqL1xuY29uc3Qgd2FybiA9IChtZXNzYWdlLCAuLi5hcmdzKSA9PiB7XG4gIGNvbnNvbGUubG9nKGBXQVJOOiAke21lc3NhZ2V9YCwgLi4uYXJncyk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5jb25zdCBkZXByZWNhdGVkID0gKHZlcnNpb24sIG1lc3NhZ2UpID0+IHtcbiAgaWYgKHNlZW5EZXByZWNhdGlvbnNbYCR7dmVyc2lvbn0vJHttZXNzYWdlfWBdKSByZXR1cm47XG5cbiAgY29uc29sZS5sb2coYERlcHJlY2F0ZWQgYXMgb2YgJHt2ZXJzaW9ufS4gJHttZXNzYWdlfWApO1xuICBzZWVuRGVwcmVjYXRpb25zW2Ake3ZlcnNpb259LyR7bWVzc2FnZX1gXSA9IHRydWU7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10aHJvdy1saXRlcmFsICovXG5cbi8qKlxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuQ29tcGlsZWRNb2RlfSBDb21waWxlZE1vZGVcbiovXG5cbmNvbnN0IE11bHRpQ2xhc3NFcnJvciA9IG5ldyBFcnJvcigpO1xuXG4vKipcbiAqIFJlbnVtYmVycyBsYWJlbGVkIHNjb3BlIG5hbWVzIHRvIGFjY291bnQgZm9yIGFkZGl0aW9uYWwgaW5uZXIgbWF0Y2hcbiAqIGdyb3VwcyB0aGF0IG90aGVyd2lzZSB3b3VsZCBicmVhayBldmVyeXRoaW5nLlxuICpcbiAqIExldHMgc2F5IHdlIDMgbWF0Y2ggc2NvcGVzOlxuICpcbiAqICAgeyAxID0+IC4uLiwgMiA9PiAuLi4sIDMgPT4gLi4uIH1cbiAqXG4gKiBTbyB3aGF0IHdlIG5lZWQgaXMgYSBjbGVhbiBtYXRjaCBsaWtlIHRoaXM6XG4gKlxuICogICAoYSkoYikoYykgPT4gWyBcImFcIiwgXCJiXCIsIFwiY1wiIF1cbiAqXG4gKiBCdXQgdGhpcyBmYWxscyBhcGFydCB3aXRoIGlubmVyIG1hdGNoIGdyb3VwczpcbiAqXG4gKiAoYSkoKChiKSkpKGMpID0+IFtcImFcIiwgXCJiXCIsIFwiYlwiLCBcImJcIiwgXCJjXCIgXVxuICpcbiAqIE91ciBzY29wZXMgYXJlIG5vdyBcIm91dCBvZiBhbGlnbm1lbnRcIiBhbmQgd2UncmUgcmVwZWF0aW5nIGBiYCAzIHRpbWVzLlxuICogV2hhdCBuZWVkcyB0byBoYXBwZW4gaXMgdGhlIG51bWJlcnMgYXJlIHJlbWFwcGVkOlxuICpcbiAqICAgeyAxID0+IC4uLiwgMiA9PiAuLi4sIDUgPT4gLi4uIH1cbiAqXG4gKiBXZSBhbHNvIG5lZWQgdG8ga25vdyB0aGF0IHRoZSBPTkxZIGdyb3VwcyB0aGF0IHNob3VsZCBiZSBvdXRwdXRcbiAqIGFyZSAxLCAyLCBhbmQgNS4gIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGlzIGJlaGF2aW9yLlxuICpcbiAqIEBwYXJhbSB7Q29tcGlsZWRNb2RlfSBtb2RlXG4gKiBAcGFyYW0ge0FycmF5PFJlZ0V4cCB8IHN0cmluZz59IHJlZ2V4ZXNcbiAqIEBwYXJhbSB7e2tleTogXCJiZWdpblNjb3BlXCJ8XCJlbmRTY29wZVwifX0gb3B0c1xuICovXG5mdW5jdGlvbiByZW1hcFNjb3BlTmFtZXMobW9kZSwgcmVnZXhlcywgeyBrZXkgfSkge1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgY29uc3Qgc2NvcGVOYW1lcyA9IG1vZGVba2V5XTtcbiAgLyoqIEB0eXBlIFJlY29yZDxudW1iZXIsYm9vbGVhbj4gKi9cbiAgY29uc3QgZW1pdCA9IHt9O1xuICAvKiogQHR5cGUgUmVjb3JkPG51bWJlcixzdHJpbmc+ICovXG4gIGNvbnN0IHBvc2l0aW9ucyA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IHJlZ2V4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICBwb3NpdGlvbnNbaSArIG9mZnNldF0gPSBzY29wZU5hbWVzW2ldO1xuICAgIGVtaXRbaSArIG9mZnNldF0gPSB0cnVlO1xuICAgIG9mZnNldCArPSBjb3VudE1hdGNoR3JvdXBzKHJlZ2V4ZXNbaSAtIDFdKTtcbiAgfVxuICAvLyB3ZSB1c2UgX2VtaXQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBtYXRjaCBncm91cHMgYXJlIFwidG9wLWxldmVsXCIgdG8gYXZvaWQgZG91YmxlXG4gIC8vIG91dHB1dCBmcm9tIGluc2lkZSBtYXRjaCBncm91cHNcbiAgbW9kZVtrZXldID0gcG9zaXRpb25zO1xuICBtb2RlW2tleV0uX2VtaXQgPSBlbWl0O1xuICBtb2RlW2tleV0uX211bHRpID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0NvbXBpbGVkTW9kZX0gbW9kZVxuICovXG5mdW5jdGlvbiBiZWdpbk11bHRpQ2xhc3MobW9kZSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobW9kZS5iZWdpbikpIHJldHVybjtcblxuICBpZiAobW9kZS5za2lwIHx8IG1vZGUuZXhjbHVkZUJlZ2luIHx8IG1vZGUucmV0dXJuQmVnaW4pIHtcbiAgICBlcnJvcihcInNraXAsIGV4Y2x1ZGVCZWdpbiwgcmV0dXJuQmVnaW4gbm90IGNvbXBhdGlibGUgd2l0aCBiZWdpblNjb3BlOiB7fVwiKTtcbiAgICB0aHJvdyBNdWx0aUNsYXNzRXJyb3I7XG4gIH1cblxuICBpZiAodHlwZW9mIG1vZGUuYmVnaW5TY29wZSAhPT0gXCJvYmplY3RcIiB8fCBtb2RlLmJlZ2luU2NvcGUgPT09IG51bGwpIHtcbiAgICBlcnJvcihcImJlZ2luU2NvcGUgbXVzdCBiZSBvYmplY3RcIik7XG4gICAgdGhyb3cgTXVsdGlDbGFzc0Vycm9yO1xuICB9XG5cbiAgcmVtYXBTY29wZU5hbWVzKG1vZGUsIG1vZGUuYmVnaW4sIHsga2V5OiBcImJlZ2luU2NvcGVcIiB9KTtcbiAgbW9kZS5iZWdpbiA9IF9yZXdyaXRlQmFja3JlZmVyZW5jZXMobW9kZS5iZWdpbiwgeyBqb2luV2l0aDogXCJcIiB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0NvbXBpbGVkTW9kZX0gbW9kZVxuICovXG5mdW5jdGlvbiBlbmRNdWx0aUNsYXNzKG1vZGUpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG1vZGUuZW5kKSkgcmV0dXJuO1xuXG4gIGlmIChtb2RlLnNraXAgfHwgbW9kZS5leGNsdWRlRW5kIHx8IG1vZGUucmV0dXJuRW5kKSB7XG4gICAgZXJyb3IoXCJza2lwLCBleGNsdWRlRW5kLCByZXR1cm5FbmQgbm90IGNvbXBhdGlibGUgd2l0aCBlbmRTY29wZToge31cIik7XG4gICAgdGhyb3cgTXVsdGlDbGFzc0Vycm9yO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBtb2RlLmVuZFNjb3BlICE9PSBcIm9iamVjdFwiIHx8IG1vZGUuZW5kU2NvcGUgPT09IG51bGwpIHtcbiAgICBlcnJvcihcImVuZFNjb3BlIG11c3QgYmUgb2JqZWN0XCIpO1xuICAgIHRocm93IE11bHRpQ2xhc3NFcnJvcjtcbiAgfVxuXG4gIHJlbWFwU2NvcGVOYW1lcyhtb2RlLCBtb2RlLmVuZCwgeyBrZXk6IFwiZW5kU2NvcGVcIiB9KTtcbiAgbW9kZS5lbmQgPSBfcmV3cml0ZUJhY2tyZWZlcmVuY2VzKG1vZGUuZW5kLCB7IGpvaW5XaXRoOiBcIlwiIH0pO1xufVxuXG4vKipcbiAqIHRoaXMgZXhpc3RzIG9ubHkgdG8gYWxsb3cgYHNjb3BlOiB7fWAgdG8gYmUgdXNlZCBiZXNpZGUgYG1hdGNoOmBcbiAqIE90aGVyd2lzZSBgYmVnaW5TY29wZWAgd291bGQgbmVjZXNzYXJ5IGFuZCB0aGF0IHdvdWxkIGxvb2sgd2VpcmRcblxuICB7XG4gICAgbWF0Y2g6IFsgL2RlZi8sIC9cXHcrLyBdXG4gICAgc2NvcGU6IHsgMTogXCJrZXl3b3JkXCIgLCAyOiBcInRpdGxlXCIgfVxuICB9XG5cbiAqIEBwYXJhbSB7Q29tcGlsZWRNb2RlfSBtb2RlXG4gKi9cbmZ1bmN0aW9uIHNjb3BlU3VnYXIobW9kZSkge1xuICBpZiAobW9kZS5zY29wZSAmJiB0eXBlb2YgbW9kZS5zY29wZSA9PT0gXCJvYmplY3RcIiAmJiBtb2RlLnNjb3BlICE9PSBudWxsKSB7XG4gICAgbW9kZS5iZWdpblNjb3BlID0gbW9kZS5zY29wZTtcbiAgICBkZWxldGUgbW9kZS5zY29wZTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Q29tcGlsZWRNb2RlfSBtb2RlXG4gKi9cbmZ1bmN0aW9uIE11bHRpQ2xhc3MobW9kZSkge1xuICBzY29wZVN1Z2FyKG1vZGUpO1xuXG4gIGlmICh0eXBlb2YgbW9kZS5iZWdpblNjb3BlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbW9kZS5iZWdpblNjb3BlID0geyBfd3JhcDogbW9kZS5iZWdpblNjb3BlIH07XG4gIH1cbiAgaWYgKHR5cGVvZiBtb2RlLmVuZFNjb3BlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbW9kZS5lbmRTY29wZSA9IHsgX3dyYXA6IG1vZGUuZW5kU2NvcGUgfTtcbiAgfVxuXG4gIGJlZ2luTXVsdGlDbGFzcyhtb2RlKTtcbiAgZW5kTXVsdGlDbGFzcyhtb2RlKTtcbn1cblxuLyoqXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Nb2RlfSBNb2RlXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Db21waWxlZE1vZGV9IENvbXBpbGVkTW9kZVxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuTGFuZ3VhZ2V9IExhbmd1YWdlXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5ITEpTUGx1Z2lufSBITEpTUGx1Z2luXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Db21waWxlZExhbmd1YWdlfSBDb21waWxlZExhbmd1YWdlXG4qL1xuXG4vLyBjb21waWxhdGlvblxuXG4vKipcbiAqIENvbXBpbGVzIGEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiByZXN1bHRcbiAqXG4gKiBHaXZlbiB0aGUgcmF3IHJlc3VsdCBvZiBhIGxhbmd1YWdlIGRlZmluaXRpb24gKExhbmd1YWdlKSwgY29tcGlsZXMgdGhpcyBzb1xuICogdGhhdCBpdCBpcyByZWFkeSBmb3IgaGlnaGxpZ2h0aW5nIGNvZGUuXG4gKiBAcGFyYW0ge0xhbmd1YWdlfSBsYW5ndWFnZVxuICogQHJldHVybnMge0NvbXBpbGVkTGFuZ3VhZ2V9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVMYW5ndWFnZShsYW5ndWFnZSkge1xuICAvKipcbiAgICogQnVpbGRzIGEgcmVnZXggd2l0aCB0aGUgY2FzZSBzZW5zaXRpdml0eSBvZiB0aGUgY3VycmVudCBsYW5ndWFnZVxuICAgKlxuICAgKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHtib29sZWFufSBbZ2xvYmFsXVxuICAgKi9cbiAgZnVuY3Rpb24gbGFuZ1JlKHZhbHVlLCBnbG9iYWwpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICAgIHNvdXJjZSh2YWx1ZSksXG4gICAgICAnbSdcbiAgICAgICsgKGxhbmd1YWdlLmNhc2VfaW5zZW5zaXRpdmUgPyAnaScgOiAnJylcbiAgICAgICsgKGxhbmd1YWdlLnVuaWNvZGVSZWdleCA/ICd1JyA6ICcnKVxuICAgICAgKyAoZ2xvYmFsID8gJ2cnIDogJycpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgIFN0b3JlcyBtdWx0aXBsZSByZWd1bGFyIGV4cHJlc3Npb25zIGFuZCBhbGxvd3MgeW91IHRvIHF1aWNrbHkgc2VhcmNoIGZvclxuICAgIHRoZW0gYWxsIGluIGEgc3RyaW5nIHNpbXVsdGFuZW91c2x5IC0gcmV0dXJuaW5nIHRoZSBmaXJzdCBtYXRjaC4gIEl0IGRvZXNcbiAgICB0aGlzIGJ5IGNyZWF0aW5nIGEgaHVnZSAoYXxifGMpIHJlZ2V4IC0gZWFjaCBpbmRpdmlkdWFsIGl0ZW0gd3JhcHBlZCB3aXRoICgpXG4gICAgYW5kIGpvaW5lZCBieSBgfGAgLSB1c2luZyBtYXRjaCBncm91cHMgdG8gdHJhY2sgcG9zaXRpb24uICBXaGVuIGEgbWF0Y2ggaXNcbiAgICBmb3VuZCBjaGVja2luZyB3aGljaCBwb3NpdGlvbiBpbiB0aGUgYXJyYXkgaGFzIGNvbnRlbnQgYWxsb3dzIHVzIHRvIGZpZ3VyZVxuICAgIG91dCB3aGljaCBvZiB0aGUgb3JpZ2luYWwgcmVnZXhlcyAvIG1hdGNoIGdyb3VwcyB0cmlnZ2VyZWQgdGhlIG1hdGNoLlxuXG4gICAgVGhlIG1hdGNoIG9iamVjdCBpdHNlbGYgKHRoZSByZXN1bHQgb2YgYFJlZ2V4LmV4ZWNgKSBpcyByZXR1cm5lZCBidXQgYWxzb1xuICAgIGVuaGFuY2VkIGJ5IG1lcmdpbmcgaW4gYW55IG1ldGEtZGF0YSB0aGF0IHdhcyByZWdpc3RlcmVkIHdpdGggdGhlIHJlZ2V4LlxuICAgIFRoaXMgaXMgaG93IHdlIGtlZXAgdHJhY2sgb2Ygd2hpY2ggbW9kZSBtYXRjaGVkLCBhbmQgd2hhdCB0eXBlIG9mIHJ1bGVcbiAgICAoYGlsbGVnYWxgLCBgYmVnaW5gLCBlbmQsIGV0YykuXG4gICovXG4gIGNsYXNzIE11bHRpUmVnZXgge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5tYXRjaEluZGV4ZXMgPSB7fTtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMucmVnZXhlcyA9IFtdO1xuICAgICAgdGhpcy5tYXRjaEF0ID0gMTtcbiAgICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBhZGRSdWxlKHJlLCBvcHRzKSB7XG4gICAgICBvcHRzLnBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbisrO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5tYXRjaEluZGV4ZXNbdGhpcy5tYXRjaEF0XSA9IG9wdHM7XG4gICAgICB0aGlzLnJlZ2V4ZXMucHVzaChbb3B0cywgcmVdKTtcbiAgICAgIHRoaXMubWF0Y2hBdCArPSBjb3VudE1hdGNoR3JvdXBzKHJlKSArIDE7XG4gICAgfVxuXG4gICAgY29tcGlsZSgpIHtcbiAgICAgIGlmICh0aGlzLnJlZ2V4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGF2b2lkcyB0aGUgbmVlZCB0byBjaGVjayBsZW5ndGggZXZlcnkgdGltZSBleGVjIGlzIGNhbGxlZFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuZXhlYyA9ICgpID0+IG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB0ZXJtaW5hdG9ycyA9IHRoaXMucmVnZXhlcy5tYXAoZWwgPT4gZWxbMV0pO1xuICAgICAgdGhpcy5tYXRjaGVyUmUgPSBsYW5nUmUoX3Jld3JpdGVCYWNrcmVmZXJlbmNlcyh0ZXJtaW5hdG9ycywgeyBqb2luV2l0aDogJ3wnIH0pLCB0cnVlKTtcbiAgICAgIHRoaXMubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICAvKiogQHBhcmFtIHtzdHJpbmd9IHMgKi9cbiAgICBleGVjKHMpIHtcbiAgICAgIHRoaXMubWF0Y2hlclJlLmxhc3RJbmRleCA9IHRoaXMubGFzdEluZGV4O1xuICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLm1hdGNoZXJSZS5leGVjKHMpO1xuICAgICAgaWYgKCFtYXRjaCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gICAgICBjb25zdCBpID0gbWF0Y2guZmluZEluZGV4KChlbCwgaSkgPT4gaSA+IDAgJiYgZWwgIT09IHVuZGVmaW5lZCk7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBtYXRjaERhdGEgPSB0aGlzLm1hdGNoSW5kZXhlc1tpXTtcbiAgICAgIC8vIHRyaW0gb2ZmIGFueSBlYXJsaWVyIG5vbi1yZWxldmFudCBtYXRjaCBncm91cHMgKGllLCB0aGUgb3RoZXIgcmVnZXhcbiAgICAgIC8vIG1hdGNoIGdyb3VwcyB0aGF0IG1ha2UgdXAgdGhlIG11bHRpLW1hdGNoZXIpXG4gICAgICBtYXRjaC5zcGxpY2UoMCwgaSk7XG5cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG1hdGNoLCBtYXRjaERhdGEpO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAgQ3JlYXRlZCB0byBzb2x2ZSB0aGUga2V5IGRlZmljaWVudGx5IHdpdGggTXVsdGlSZWdleCAtIHRoZXJlIGlzIG5vIHdheSB0b1xuICAgIHRlc3QgZm9yIG11bHRpcGxlIG1hdGNoZXMgYXQgYSBzaW5nbGUgbG9jYXRpb24uICBXaHkgd291bGQgd2UgbmVlZCB0byBkb1xuICAgIHRoYXQ/ICBJbiB0aGUgZnV0dXJlIGEgbW9yZSBkeW5hbWljIGVuZ2luZSB3aWxsIGFsbG93IGNlcnRhaW4gbWF0Y2hlcyB0byBiZVxuICAgIGlnbm9yZWQuICBBbiBleGFtcGxlOiBpZiB3ZSBtYXRjaGVkIHNheSB0aGUgM3JkIHJlZ2V4IGluIGEgbGFyZ2UgZ3JvdXAgYnV0XG4gICAgZGVjaWRlZCB0byBpZ25vcmUgaXQgLSB3ZSdkIG5lZWQgdG8gc3RhcnRlZCB0ZXN0aW5nIGFnYWluIGF0IHRoZSA0dGhcbiAgICByZWdleC4uLiBidXQgTXVsdGlSZWdleCBpdHNlbGYgZ2l2ZXMgdXMgbm8gcmVhbCB3YXkgdG8gZG8gdGhhdC5cblxuICAgIFNvIHdoYXQgdGhpcyBjbGFzcyBjcmVhdGVzIE11bHRpUmVnZXhzIG9uIHRoZSBmbHkgZm9yIHdoYXRldmVyIHNlYXJjaFxuICAgIHBvc2l0aW9uIHRoZXkgYXJlIG5lZWRlZC5cblxuICAgIE5PVEU6IFRoZXNlIGFkZGl0aW9uYWwgTXVsdGlSZWdleCBvYmplY3RzIGFyZSBjcmVhdGVkIGR5bmFtaWNhbGx5LiAgRm9yIG1vc3RcbiAgICBncmFtbWFycyBtb3N0IG9mIHRoZSB0aW1lIHdlIHdpbGwgbmV2ZXIgYWN0dWFsbHkgbmVlZCBhbnl0aGluZyBtb3JlIHRoYW4gdGhlXG4gICAgZmlyc3QgTXVsdGlSZWdleCAtIHNvIHRoaXMgc2hvdWxkbid0IGhhdmUgdG9vIG11Y2ggb3ZlcmhlYWQuXG5cbiAgICBTYXkgdGhpcyBpcyBvdXIgc2VhcmNoIGdyb3VwLCBhbmQgd2UgbWF0Y2ggcmVnZXgzLCBidXQgd2lzaCB0byBpZ25vcmUgaXQuXG5cbiAgICAgIHJlZ2V4MSB8IHJlZ2V4MiB8IHJlZ2V4MyB8IHJlZ2V4NCB8IHJlZ2V4NSAgICAnIGllLCBzdGFydEF0ID0gMFxuXG4gICAgV2hhdCB3ZSBuZWVkIGlzIGEgbmV3IE11bHRpUmVnZXggdGhhdCBvbmx5IGluY2x1ZGVzIHRoZSByZW1haW5pbmdcbiAgICBwb3NzaWJpbGl0aWVzOlxuXG4gICAgICByZWdleDQgfCByZWdleDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpZSwgc3RhcnRBdCA9IDNcblxuICAgIFRoaXMgY2xhc3Mgd3JhcHMgYWxsIHRoYXQgY29tcGxleGl0eSB1cCBpbiBhIHNpbXBsZSBBUEkuLi4gYHN0YXJ0QXRgIGRlY2lkZXNcbiAgICB3aGVyZSBpbiB0aGUgYXJyYXkgb2YgZXhwcmVzc2lvbnMgdG8gc3RhcnQgZG9pbmcgdGhlIG1hdGNoaW5nLiBJdFxuICAgIGF1dG8taW5jcmVtZW50cywgc28gaWYgYSBtYXRjaCBpcyBmb3VuZCBhdCBwb3NpdGlvbiAyLCB0aGVuIHN0YXJ0QXQgd2lsbCBiZVxuICAgIHNldCB0byAzLiAgSWYgdGhlIGVuZCBpcyByZWFjaGVkIHN0YXJ0QXQgd2lsbCByZXR1cm4gdG8gMC5cblxuICAgIE1PU1Qgb2YgdGhlIHRpbWUgdGhlIHBhcnNlciB3aWxsIGJlIHNldHRpbmcgc3RhcnRBdCBtYW51YWxseSB0byAwLlxuICAqL1xuICBjbGFzcyBSZXN1bWFibGVNdWx0aVJlZ2V4IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMucnVsZXMgPSBbXTtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMubXVsdGlSZWdleGVzID0gW107XG4gICAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgICAgdGhpcy5sYXN0SW5kZXggPSAwO1xuICAgICAgdGhpcy5yZWdleEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZ2V0TWF0Y2hlcihpbmRleCkge1xuICAgICAgaWYgKHRoaXMubXVsdGlSZWdleGVzW2luZGV4XSkgcmV0dXJuIHRoaXMubXVsdGlSZWdleGVzW2luZGV4XTtcblxuICAgICAgY29uc3QgbWF0Y2hlciA9IG5ldyBNdWx0aVJlZ2V4KCk7XG4gICAgICB0aGlzLnJ1bGVzLnNsaWNlKGluZGV4KS5mb3JFYWNoKChbcmUsIG9wdHNdKSA9PiBtYXRjaGVyLmFkZFJ1bGUocmUsIG9wdHMpKTtcbiAgICAgIG1hdGNoZXIuY29tcGlsZSgpO1xuICAgICAgdGhpcy5tdWx0aVJlZ2V4ZXNbaW5kZXhdID0gbWF0Y2hlcjtcbiAgICAgIHJldHVybiBtYXRjaGVyO1xuICAgIH1cblxuICAgIHJlc3VtaW5nU2NhbkF0U2FtZVBvc2l0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVnZXhJbmRleCAhPT0gMDtcbiAgICB9XG5cbiAgICBjb25zaWRlckFsbCgpIHtcbiAgICAgIHRoaXMucmVnZXhJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGFkZFJ1bGUocmUsIG9wdHMpIHtcbiAgICAgIHRoaXMucnVsZXMucHVzaChbcmUsIG9wdHNdKTtcbiAgICAgIGlmIChvcHRzLnR5cGUgPT09IFwiYmVnaW5cIikgdGhpcy5jb3VudCsrO1xuICAgIH1cblxuICAgIC8qKiBAcGFyYW0ge3N0cmluZ30gcyAqL1xuICAgIGV4ZWMocykge1xuICAgICAgY29uc3QgbSA9IHRoaXMuZ2V0TWF0Y2hlcih0aGlzLnJlZ2V4SW5kZXgpO1xuICAgICAgbS5sYXN0SW5kZXggPSB0aGlzLmxhc3RJbmRleDtcbiAgICAgIGxldCByZXN1bHQgPSBtLmV4ZWMocyk7XG5cbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmVjYXVzZSB3ZSBoYXZlIG5vIGVhc3kgd2F5IHRvIHNheSBcInJlc3VtZSBzY2FubmluZyBhdCB0aGVcbiAgICAgIC8vIGV4aXN0aW5nIHBvc2l0aW9uIGJ1dCBhbHNvIHNraXAgdGhlIGN1cnJlbnQgcnVsZSBPTkxZXCIuIFdoYXQgaGFwcGVucyBpc1xuICAgICAgLy8gYWxsIHByaW9yIHJ1bGVzIGFyZSBhbHNvIHNraXBwZWQgd2hpY2ggY2FuIHJlc3VsdCBpbiBtYXRjaGluZyB0aGUgd3JvbmdcbiAgICAgIC8vIHRoaW5nLiBFeGFtcGxlIG9mIG1hdGNoaW5nIFwiYm9vZ2VyXCI6XG5cbiAgICAgIC8vIG91ciBtYXRjaGVyIGlzIFtzdHJpbmcsIFwiYm9vZ2VyXCIsIG51bWJlcl1cbiAgICAgIC8vXG4gICAgICAvLyAuLi4uYm9vZ2VyLi4uLlxuXG4gICAgICAvLyBpZiBcImJvb2dlclwiIGlzIGlnbm9yZWQgdGhlbiB3ZSdkIHJlYWxseSBuZWVkIGEgcmVnZXggdG8gc2NhbiBmcm9tIHRoZVxuICAgICAgLy8gU0FNRSBwb3NpdGlvbiBmb3Igb25seTogW3N0cmluZywgbnVtYmVyXSBidXQgaWdub3JpbmcgXCJib29nZXJcIiAoaWYgaXRcbiAgICAgIC8vIHdhcyB0aGUgZmlyc3QgbWF0Y2gpLCBhIHNpbXBsZSByZXN1bWUgd291bGQgc2NhbiBhaGVhZCB3aG8ga25vd3MgaG93XG4gICAgICAvLyBmYXIgbG9va2luZyBvbmx5IGZvciBcIm51bWJlclwiLCBpZ25vcmluZyBwb3RlbnRpYWwgc3RyaW5nIG1hdGNoZXMgKG9yXG4gICAgICAvLyBmdXR1cmUgXCJib29nZXJcIiBtYXRjaGVzIHRoYXQgbWlnaHQgYmUgdmFsaWQuKVxuXG4gICAgICAvLyBTbyB3aGF0IHdlIGRvOiBXZSBleGVjdXRlIHR3byBtYXRjaGVycywgb25lIHJlc3VtaW5nIGF0IHRoZSBzYW1lXG4gICAgICAvLyBwb3NpdGlvbiwgYnV0IHRoZSBzZWNvbmQgZnVsbCBtYXRjaGVyIHN0YXJ0aW5nIGF0IHRoZSBwb3NpdGlvbiBhZnRlcjpcblxuICAgICAgLy8gICAgIC8tLS0gcmVzdW1lIGZpcnN0IHJlZ2V4IG1hdGNoIGhlcmUgKGZvciBbbnVtYmVyXSlcbiAgICAgIC8vICAgICB8Ly0tLS0gZnVsbCBtYXRjaCBoZXJlIGZvciBbc3RyaW5nLCBcImJvb2dlclwiLCBudW1iZXJdXG4gICAgICAvLyAgICAgdnZcbiAgICAgIC8vIC4uLi5ib29nZXIuLi4uXG5cbiAgICAgIC8vIFdoaWNoIGV2ZXIgcmVzdWx0cyBpbiBhIG1hdGNoIGZpcnN0IGlzIHRoZW4gdXNlZC4gU28gdGhpcyAzLTQgc3RlcFxuICAgICAgLy8gcHJvY2VzcyBlc3NlbnRpYWxseSBhbGxvd3MgdXMgdG8gc2F5IFwibWF0Y2ggYXQgdGhpcyBwb3NpdGlvbiwgZXhjbHVkaW5nXG4gICAgICAvLyBhIHByaW9yIHJ1bGUgdGhhdCB3YXMgaWdub3JlZFwiLlxuICAgICAgLy9cbiAgICAgIC8vIDEuIE1hdGNoIFwiYm9vZ2VyXCIgZmlyc3QsIGlnbm9yZS4gQWxzbyBwcm92ZXMgdGhhdCBbc3RyaW5nXSBkb2VzIG5vbiBtYXRjaC5cbiAgICAgIC8vIDIuIFJlc3VtZSBtYXRjaGluZyBmb3IgW251bWJlcl1cbiAgICAgIC8vIDMuIE1hdGNoIGF0IGluZGV4ICsgMSBmb3IgW3N0cmluZywgXCJib29nZXJcIiwgbnVtYmVyXVxuICAgICAgLy8gNC4gSWYgIzIgYW5kICMzIHJlc3VsdCBpbiBtYXRjaGVzLCB3aGljaCBjYW1lIGZpcnN0P1xuICAgICAgaWYgKHRoaXMucmVzdW1pbmdTY2FuQXRTYW1lUG9zaXRpb24oKSkge1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5pbmRleCA9PT0gdGhpcy5sYXN0SW5kZXgpIDsgZWxzZSB7IC8vIHVzZSB0aGUgc2Vjb25kIG1hdGNoZXIgcmVzdWx0XG4gICAgICAgICAgY29uc3QgbTIgPSB0aGlzLmdldE1hdGNoZXIoMCk7XG4gICAgICAgICAgbTIubGFzdEluZGV4ID0gdGhpcy5sYXN0SW5kZXggKyAxO1xuICAgICAgICAgIHJlc3VsdCA9IG0yLmV4ZWMocyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLnJlZ2V4SW5kZXggKz0gcmVzdWx0LnBvc2l0aW9uICsgMTtcbiAgICAgICAgaWYgKHRoaXMucmVnZXhJbmRleCA9PT0gdGhpcy5jb3VudCkge1xuICAgICAgICAgIC8vIHdyYXAtYXJvdW5kIHRvIGNvbnNpZGVyaW5nIGFsbCBtYXRjaGVzIGFnYWluXG4gICAgICAgICAgdGhpcy5jb25zaWRlckFsbCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgbW9kZSwgYnVpbGRzIGEgaHVnZSBSZXN1bWFibGVNdWx0aVJlZ2V4IHRoYXQgY2FuIGJlIHVzZWQgdG8gd2Fsa1xuICAgKiB0aGUgY29udGVudCBhbmQgZmluZCBtYXRjaGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZX0gbW9kZVxuICAgKiBAcmV0dXJucyB7UmVzdW1hYmxlTXVsdGlSZWdleH1cbiAgICovXG4gIGZ1bmN0aW9uIGJ1aWxkTW9kZVJlZ2V4KG1vZGUpIHtcbiAgICBjb25zdCBtbSA9IG5ldyBSZXN1bWFibGVNdWx0aVJlZ2V4KCk7XG5cbiAgICBtb2RlLmNvbnRhaW5zLmZvckVhY2godGVybSA9PiBtbS5hZGRSdWxlKHRlcm0uYmVnaW4sIHsgcnVsZTogdGVybSwgdHlwZTogXCJiZWdpblwiIH0pKTtcblxuICAgIGlmIChtb2RlLnRlcm1pbmF0b3JFbmQpIHtcbiAgICAgIG1tLmFkZFJ1bGUobW9kZS50ZXJtaW5hdG9yRW5kLCB7IHR5cGU6IFwiZW5kXCIgfSk7XG4gICAgfVxuICAgIGlmIChtb2RlLmlsbGVnYWwpIHtcbiAgICAgIG1tLmFkZFJ1bGUobW9kZS5pbGxlZ2FsLCB7IHR5cGU6IFwiaWxsZWdhbFwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtbTtcbiAgfVxuXG4gIC8qKiBza2lwIHZzIGFib3J0IHZzIGlnbm9yZVxuICAgKlxuICAgKiBAc2tpcCAgIC0gVGhlIG1vZGUgaXMgc3RpbGwgZW50ZXJlZCBhbmQgZXhpdGVkIG5vcm1hbGx5IChhbmQgY29udGFpbnMgcnVsZXMgYXBwbHkpLFxuICAgKiAgICAgICAgICAgYnV0IGFsbCBjb250ZW50IGlzIGhlbGQgYW5kIGFkZGVkIHRvIHRoZSBwYXJlbnQgYnVmZmVyIHJhdGhlciB0aGFuIGJlaW5nXG4gICAqICAgICAgICAgICBvdXRwdXQgd2hlbiB0aGUgbW9kZSBlbmRzLiAgTW9zdGx5IHVzZWQgd2l0aCBgc3VibGFuZ3VhZ2VgIHRvIGJ1aWxkIHVwXG4gICAqICAgICAgICAgICBhIHNpbmdsZSBsYXJnZSBidWZmZXIgdGhhbiBjYW4gYmUgcGFyc2VkIGJ5IHN1Ymxhbmd1YWdlLlxuICAgKlxuICAgKiAgICAgICAgICAgICAtIFRoZSBtb2RlIGJlZ2luIGFuZHMgZW5kcyBub3JtYWxseS5cbiAgICogICAgICAgICAgICAgLSBDb250ZW50IG1hdGNoZWQgaXMgYWRkZWQgdG8gdGhlIHBhcmVudCBtb2RlIGJ1ZmZlci5cbiAgICogICAgICAgICAgICAgLSBUaGUgcGFyc2VyIGN1cnNvciBpcyBtb3ZlZCBmb3J3YXJkIG5vcm1hbGx5LlxuICAgKlxuICAgKiBAYWJvcnQgIC0gQSBoYWNrIHBsYWNlaG9sZGVyIHVudGlsIHdlIGhhdmUgaWdub3JlLiAgQWJvcnRzIHRoZSBtb2RlIChhcyBpZiBpdFxuICAgKiAgICAgICAgICAgbmV2ZXIgbWF0Y2hlZCkgYnV0IERPRVMgTk9UIGNvbnRpbnVlIHRvIG1hdGNoIHN1YnNlcXVlbnQgYGNvbnRhaW5zYFxuICAgKiAgICAgICAgICAgbW9kZXMuICBBYm9ydCBpcyBiYWQvc3Vib3B0aW1hbCBiZWNhdXNlIGl0IGNhbiByZXN1bHQgaW4gbW9kZXNcbiAgICogICAgICAgICAgIGZhcnRoZXIgZG93biBub3QgZ2V0dGluZyBhcHBsaWVkIGJlY2F1c2UgYW4gZWFybGllciBydWxlIGVhdHMgdGhlXG4gICAqICAgICAgICAgICBjb250ZW50IGJ1dCB0aGVuIGFib3J0cy5cbiAgICpcbiAgICogICAgICAgICAgICAgLSBUaGUgbW9kZSBkb2VzIG5vdCBiZWdpbi5cbiAgICogICAgICAgICAgICAgLSBDb250ZW50IG1hdGNoZWQgYnkgYGJlZ2luYCBpcyBhZGRlZCB0byB0aGUgbW9kZSBidWZmZXIuXG4gICAqICAgICAgICAgICAgIC0gVGhlIHBhcnNlciBjdXJzb3IgaXMgbW92ZWQgZm9yd2FyZCBhY2NvcmRpbmdseS5cbiAgICpcbiAgICogQGlnbm9yZSAtIElnbm9yZXMgdGhlIG1vZGUgKGFzIGlmIGl0IG5ldmVyIG1hdGNoZWQpIGFuZCBjb250aW51ZXMgdG8gbWF0Y2ggYW55XG4gICAqICAgICAgICAgICBzdWJzZXF1ZW50IGBjb250YWluc2AgbW9kZXMuICBJZ25vcmUgaXNuJ3QgdGVjaG5pY2FsbHkgcG9zc2libGUgd2l0aFxuICAgKiAgICAgICAgICAgdGhlIGN1cnJlbnQgcGFyc2VyIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiAgICAgICAgICAgICAtIFRoZSBtb2RlIGRvZXMgbm90IGJlZ2luLlxuICAgKiAgICAgICAgICAgICAtIENvbnRlbnQgbWF0Y2hlZCBieSBgYmVnaW5gIGlzIGlnbm9yZWQuXG4gICAqICAgICAgICAgICAgIC0gVGhlIHBhcnNlciBjdXJzb3IgaXMgbm90IG1vdmVkIGZvcndhcmQuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDb21waWxlcyBhbiBpbmRpdmlkdWFsIG1vZGVcbiAgICpcbiAgICogVGhpcyBjYW4gcmFpc2UgYW4gZXJyb3IgaWYgdGhlIG1vZGUgY29udGFpbnMgY2VydGFpbiBkZXRlY3RhYmxlIGtub3duIGxvZ2ljXG4gICAqIGlzc3Vlcy5cbiAgICogQHBhcmFtIHtNb2RlfSBtb2RlXG4gICAqIEBwYXJhbSB7Q29tcGlsZWRNb2RlIHwgbnVsbH0gW3BhcmVudF1cbiAgICogQHJldHVybnMge0NvbXBpbGVkTW9kZSB8IG5ldmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGlsZU1vZGUobW9kZSwgcGFyZW50KSB7XG4gICAgY29uc3QgY21vZGUgPSAvKiogQHR5cGUgQ29tcGlsZWRNb2RlICovIChtb2RlKTtcbiAgICBpZiAobW9kZS5pc0NvbXBpbGVkKSByZXR1cm4gY21vZGU7XG5cbiAgICBbXG4gICAgICBzY29wZUNsYXNzTmFtZSxcbiAgICAgIC8vIGRvIHRoaXMgZWFybHkgc28gY29tcGlsZXIgZXh0ZW5zaW9ucyBnZW5lcmFsbHkgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dFxuICAgICAgLy8gdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gbWF0Y2gvYmVnaW5cbiAgICAgIGNvbXBpbGVNYXRjaCxcbiAgICAgIE11bHRpQ2xhc3MsXG4gICAgICBiZWZvcmVNYXRjaEV4dFxuICAgIF0uZm9yRWFjaChleHQgPT4gZXh0KG1vZGUsIHBhcmVudCkpO1xuXG4gICAgbGFuZ3VhZ2UuY29tcGlsZXJFeHRlbnNpb25zLmZvckVhY2goZXh0ID0+IGV4dChtb2RlLCBwYXJlbnQpKTtcblxuICAgIC8vIF9fYmVmb3JlQmVnaW4gaXMgY29uc2lkZXJlZCBwcml2YXRlIEFQSSwgaW50ZXJuYWwgdXNlIG9ubHlcbiAgICBtb2RlLl9fYmVmb3JlQmVnaW4gPSBudWxsO1xuXG4gICAgW1xuICAgICAgYmVnaW5LZXl3b3JkcyxcbiAgICAgIC8vIGRvIHRoaXMgbGF0ZXIgc28gY29tcGlsZXIgZXh0ZW5zaW9ucyB0aGF0IGNvbWUgZWFybGllciBoYXZlIGFjY2VzcyB0byB0aGVcbiAgICAgIC8vIHJhdyBhcnJheSBpZiB0aGV5IHdhbnRlZCB0byBwZXJoYXBzIG1hbmlwdWxhdGUgaXQsIGV0Yy5cbiAgICAgIGNvbXBpbGVJbGxlZ2FsLFxuICAgICAgLy8gZGVmYXVsdCB0byAxIHJlbGV2YW5jZSBpZiBub3Qgc3BlY2lmaWVkXG4gICAgICBjb21waWxlUmVsZXZhbmNlXG4gICAgXS5mb3JFYWNoKGV4dCA9PiBleHQobW9kZSwgcGFyZW50KSk7XG5cbiAgICBtb2RlLmlzQ29tcGlsZWQgPSB0cnVlO1xuXG4gICAgbGV0IGtleXdvcmRQYXR0ZXJuID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIG1vZGUua2V5d29yZHMgPT09IFwib2JqZWN0XCIgJiYgbW9kZS5rZXl3b3Jkcy4kcGF0dGVybikge1xuICAgICAgLy8gd2UgbmVlZCBhIGNvcHkgYmVjYXVzZSBrZXl3b3JkcyBtaWdodCBiZSBjb21waWxlZCBtdWx0aXBsZSB0aW1lc1xuICAgICAgLy8gc28gd2UgY2FuJ3QgZ28gZGVsZXRpbmcgJHBhdHRlcm4gZnJvbSB0aGUgb3JpZ2luYWwgb24gdGhlIGZpcnN0XG4gICAgICAvLyBwYXNzXG4gICAgICBtb2RlLmtleXdvcmRzID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kZS5rZXl3b3Jkcyk7XG4gICAgICBrZXl3b3JkUGF0dGVybiA9IG1vZGUua2V5d29yZHMuJHBhdHRlcm47XG4gICAgICBkZWxldGUgbW9kZS5rZXl3b3Jkcy4kcGF0dGVybjtcbiAgICB9XG4gICAga2V5d29yZFBhdHRlcm4gPSBrZXl3b3JkUGF0dGVybiB8fCAvXFx3Ky87XG5cbiAgICBpZiAobW9kZS5rZXl3b3Jkcykge1xuICAgICAgbW9kZS5rZXl3b3JkcyA9IGNvbXBpbGVLZXl3b3Jkcyhtb2RlLmtleXdvcmRzLCBsYW5ndWFnZS5jYXNlX2luc2Vuc2l0aXZlKTtcbiAgICB9XG5cbiAgICBjbW9kZS5rZXl3b3JkUGF0dGVyblJlID0gbGFuZ1JlKGtleXdvcmRQYXR0ZXJuLCB0cnVlKTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGlmICghbW9kZS5iZWdpbikgbW9kZS5iZWdpbiA9IC9cXEJ8XFxiLztcbiAgICAgIGNtb2RlLmJlZ2luUmUgPSBsYW5nUmUoY21vZGUuYmVnaW4pO1xuICAgICAgaWYgKCFtb2RlLmVuZCAmJiAhbW9kZS5lbmRzV2l0aFBhcmVudCkgbW9kZS5lbmQgPSAvXFxCfFxcYi87XG4gICAgICBpZiAobW9kZS5lbmQpIGNtb2RlLmVuZFJlID0gbGFuZ1JlKGNtb2RlLmVuZCk7XG4gICAgICBjbW9kZS50ZXJtaW5hdG9yRW5kID0gc291cmNlKGNtb2RlLmVuZCkgfHwgJyc7XG4gICAgICBpZiAobW9kZS5lbmRzV2l0aFBhcmVudCAmJiBwYXJlbnQudGVybWluYXRvckVuZCkge1xuICAgICAgICBjbW9kZS50ZXJtaW5hdG9yRW5kICs9IChtb2RlLmVuZCA/ICd8JyA6ICcnKSArIHBhcmVudC50ZXJtaW5hdG9yRW5kO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobW9kZS5pbGxlZ2FsKSBjbW9kZS5pbGxlZ2FsUmUgPSBsYW5nUmUoLyoqIEB0eXBlIHtSZWdFeHAgfCBzdHJpbmd9ICovIChtb2RlLmlsbGVnYWwpKTtcbiAgICBpZiAoIW1vZGUuY29udGFpbnMpIG1vZGUuY29udGFpbnMgPSBbXTtcblxuICAgIG1vZGUuY29udGFpbnMgPSBbXS5jb25jYXQoLi4ubW9kZS5jb250YWlucy5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgcmV0dXJuIGV4cGFuZE9yQ2xvbmVNb2RlKGMgPT09ICdzZWxmJyA/IG1vZGUgOiBjKTtcbiAgICB9KSk7XG4gICAgbW9kZS5jb250YWlucy5mb3JFYWNoKGZ1bmN0aW9uKGMpIHsgY29tcGlsZU1vZGUoLyoqIEB0eXBlIE1vZGUgKi8gKGMpLCBjbW9kZSk7IH0pO1xuXG4gICAgaWYgKG1vZGUuc3RhcnRzKSB7XG4gICAgICBjb21waWxlTW9kZShtb2RlLnN0YXJ0cywgcGFyZW50KTtcbiAgICB9XG5cbiAgICBjbW9kZS5tYXRjaGVyID0gYnVpbGRNb2RlUmVnZXgoY21vZGUpO1xuICAgIHJldHVybiBjbW9kZTtcbiAgfVxuXG4gIGlmICghbGFuZ3VhZ2UuY29tcGlsZXJFeHRlbnNpb25zKSBsYW5ndWFnZS5jb21waWxlckV4dGVuc2lvbnMgPSBbXTtcblxuICAvLyBzZWxmIGlzIG5vdCB2YWxpZCBhdCB0aGUgdG9wLWxldmVsXG4gIGlmIChsYW5ndWFnZS5jb250YWlucyAmJiBsYW5ndWFnZS5jb250YWlucy5pbmNsdWRlcygnc2VsZicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRVJSOiBjb250YWlucyBgc2VsZmAgaXMgbm90IHN1cHBvcnRlZCBhdCB0aGUgdG9wLWxldmVsIG9mIGEgbGFuZ3VhZ2UuICBTZWUgZG9jdW1lbnRhdGlvbi5cIik7XG4gIH1cblxuICAvLyB3ZSBuZWVkIGEgbnVsbCBvYmplY3QsIHdoaWNoIGluaGVyaXQgd2lsbCBndWFyYW50ZWVcbiAgbGFuZ3VhZ2UuY2xhc3NOYW1lQWxpYXNlcyA9IGluaGVyaXQkMShsYW5ndWFnZS5jbGFzc05hbWVBbGlhc2VzIHx8IHt9KTtcblxuICByZXR1cm4gY29tcGlsZU1vZGUoLyoqIEB0eXBlIE1vZGUgKi8gKGxhbmd1YWdlKSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIG1vZGUgaGFzIGEgZGVwZW5kZW5jeSBvbiBpdCdzIHBhcmVudCBvciBub3RcbiAqXG4gKiBJZiBhIG1vZGUgZG9lcyBoYXZlIGEgcGFyZW50IGRlcGVuZGVuY3kgdGhlbiBvZnRlbiB3ZSBuZWVkIHRvIGNsb25lIGl0IGlmXG4gKiBpdCdzIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzIHNvIHRoYXQgZWFjaCBjb3B5IHBvaW50cyB0byB0aGUgY29ycmVjdCBwYXJlbnQsXG4gKiB3aGVyZS1hcyBtb2RlcyB3aXRob3V0IGEgcGFyZW50IGNhbiBvZnRlbiBzYWZlbHkgYmUgcmUtdXNlZCBhdCB0aGUgYm90dG9tIG9mXG4gKiBhIG1vZGUgY2hhaW4uXG4gKlxuICogQHBhcmFtIHtNb2RlIHwgbnVsbH0gbW9kZVxuICogQHJldHVybnMge2Jvb2xlYW59IC0gaXMgdGhlcmUgYSBkZXBlbmRlbmN5IG9uIHRoZSBwYXJlbnQ/XG4gKiAqL1xuZnVuY3Rpb24gZGVwZW5kZW5jeU9uUGFyZW50KG1vZGUpIHtcbiAgaWYgKCFtb2RlKSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIG1vZGUuZW5kc1dpdGhQYXJlbnQgfHwgZGVwZW5kZW5jeU9uUGFyZW50KG1vZGUuc3RhcnRzKTtcbn1cblxuLyoqXG4gKiBFeHBhbmRzIGEgbW9kZSBvciBjbG9uZXMgaXQgaWYgbmVjZXNzYXJ5XG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgZm9yIG1vZGVzIHdpdGggcGFyZW50YWwgZGVwZW5kZW5jZWlzIChzZWUgbm90ZXMgb25cbiAqIGBkZXBlbmRlbmN5T25QYXJlbnRgKSBhbmQgZm9yIG5vZGVzIHRoYXQgaGF2ZSBgdmFyaWFudHNgIC0gd2hpY2ggbXVzdCB0aGVuIGJlXG4gKiBleHBsb2RlZCBpbnRvIHRoZWlyIG93biBpbmRpdmlkdWFsIG1vZGVzIGF0IGNvbXBpbGUgdGltZS5cbiAqXG4gKiBAcGFyYW0ge01vZGV9IG1vZGVcbiAqIEByZXR1cm5zIHtNb2RlIHwgTW9kZVtdfVxuICogKi9cbmZ1bmN0aW9uIGV4cGFuZE9yQ2xvbmVNb2RlKG1vZGUpIHtcbiAgaWYgKG1vZGUudmFyaWFudHMgJiYgIW1vZGUuY2FjaGVkVmFyaWFudHMpIHtcbiAgICBtb2RlLmNhY2hlZFZhcmlhbnRzID0gbW9kZS52YXJpYW50cy5tYXAoZnVuY3Rpb24odmFyaWFudCkge1xuICAgICAgcmV0dXJuIGluaGVyaXQkMShtb2RlLCB7IHZhcmlhbnRzOiBudWxsIH0sIHZhcmlhbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRVhQQU5EXG4gIC8vIGlmIHdlIGhhdmUgdmFyaWFudHMgdGhlbiBlc3NlbnRpYWxseSBcInJlcGxhY2VcIiB0aGUgbW9kZSB3aXRoIHRoZSB2YXJpYW50c1xuICAvLyB0aGlzIGhhcHBlbnMgaW4gY29tcGlsZU1vZGUsIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb21cbiAgaWYgKG1vZGUuY2FjaGVkVmFyaWFudHMpIHtcbiAgICByZXR1cm4gbW9kZS5jYWNoZWRWYXJpYW50cztcbiAgfVxuXG4gIC8vIENMT05FXG4gIC8vIGlmIHdlIGhhdmUgZGVwZW5kZW5jaWVzIG9uIHBhcmVudHMgdGhlbiB3ZSBuZWVkIGEgdW5pcXVlXG4gIC8vIGluc3RhbmNlIG9mIG91cnNlbHZlcywgc28gd2UgY2FuIGJlIHJldXNlZCB3aXRoIG1hbnlcbiAgLy8gZGlmZmVyZW50IHBhcmVudHMgd2l0aG91dCBpc3N1ZVxuICBpZiAoZGVwZW5kZW5jeU9uUGFyZW50KG1vZGUpKSB7XG4gICAgcmV0dXJuIGluaGVyaXQkMShtb2RlLCB7IHN0YXJ0czogbW9kZS5zdGFydHMgPyBpbmhlcml0JDEobW9kZS5zdGFydHMpIDogbnVsbCB9KTtcbiAgfVxuXG4gIGlmIChPYmplY3QuaXNGcm96ZW4obW9kZSkpIHtcbiAgICByZXR1cm4gaW5oZXJpdCQxKG1vZGUpO1xuICB9XG5cbiAgLy8gbm8gc3BlY2lhbCBkZXBlbmRlbmN5IGlzc3VlcywganVzdCByZXR1cm4gb3Vyc2VsdmVzXG4gIHJldHVybiBtb2RlO1xufVxuXG52YXIgdmVyc2lvbiA9IFwiMTEuNi4wXCI7XG5cbmNsYXNzIEhUTUxJbmplY3Rpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhc29uLCBodG1sKSB7XG4gICAgc3VwZXIocmVhc29uKTtcbiAgICB0aGlzLm5hbWUgPSBcIkhUTUxJbmplY3Rpb25FcnJvclwiO1xuICAgIHRoaXMuaHRtbCA9IGh0bWw7XG4gIH1cbn1cblxuLypcblN5bnRheCBoaWdobGlnaHRpbmcgd2l0aCBsYW5ndWFnZSBhdXRvZGV0ZWN0aW9uLlxuaHR0cHM6Ly9oaWdobGlnaHRqcy5vcmcvXG4qL1xuXG4vKipcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLk1vZGV9IE1vZGVcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkNvbXBpbGVkTW9kZX0gQ29tcGlsZWRNb2RlXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Db21waWxlZFNjb3BlfSBDb21waWxlZFNjb3BlXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5MYW5ndWFnZX0gTGFuZ3VhZ2VcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkhMSlNBcGl9IEhMSlNBcGlcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkhMSlNQbHVnaW59IEhMSlNQbHVnaW5cbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLlBsdWdpbkV2ZW50fSBQbHVnaW5FdmVudFxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuSExKU09wdGlvbnN9IEhMSlNPcHRpb25zXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5MYW5ndWFnZUZufSBMYW5ndWFnZUZuXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5IaWdobGlnaHRlZEhUTUxFbGVtZW50fSBIaWdobGlnaHRlZEhUTUxFbGVtZW50XG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5CZWZvcmVIaWdobGlnaHRDb250ZXh0fSBCZWZvcmVIaWdobGlnaHRDb250ZXh0XG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMvcHJpdmF0ZScpLk1hdGNoVHlwZX0gTWF0Y2hUeXBlXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMvcHJpdmF0ZScpLktleXdvcmREYXRhfSBLZXl3b3JkRGF0YVxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzL3ByaXZhdGUnKS5FbmhhbmNlZE1hdGNofSBFbmhhbmNlZE1hdGNoXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMvcHJpdmF0ZScpLkFubm90YXRlZEVycm9yfSBBbm5vdGF0ZWRFcnJvclxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuQXV0b0hpZ2hsaWdodFJlc3VsdH0gQXV0b0hpZ2hsaWdodFJlc3VsdFxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuSGlnaGxpZ2h0T3B0aW9uc30gSGlnaGxpZ2h0T3B0aW9uc1xuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuSGlnaGxpZ2h0UmVzdWx0fSBIaWdobGlnaHRSZXN1bHRcbiovXG5cblxuY29uc3QgZXNjYXBlID0gZXNjYXBlSFRNTDtcbmNvbnN0IGluaGVyaXQgPSBpbmhlcml0JDE7XG5jb25zdCBOT19NQVRDSCA9IFN5bWJvbChcIm5vbWF0Y2hcIik7XG5jb25zdCBNQVhfS0VZV09SRF9ISVRTID0gNztcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gaGxqcyAtIG9iamVjdCB0aGF0IGlzIGV4dGVuZGVkIChsZWdhY3kpXG4gKiBAcmV0dXJucyB7SExKU0FwaX1cbiAqL1xuY29uc3QgSExKUyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgLy8gR2xvYmFsIGludGVybmFsIHZhcmlhYmxlcyB1c2VkIHdpdGhpbiB0aGUgaGlnaGxpZ2h0LmpzIGxpYnJhcnkuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgTGFuZ3VhZ2U+fSAqL1xuICBjb25zdCBsYW5ndWFnZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IGFsaWFzZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvKiogQHR5cGUge0hMSlNQbHVnaW5bXX0gKi9cbiAgY29uc3QgcGx1Z2lucyA9IFtdO1xuXG4gIC8vIHNhZmUvcHJvZHVjdGlvbiBtb2RlIC0gc3dhbGxvd3MgbW9yZSBlcnJvcnMsIHRyaWVzIHRvIGtlZXAgcnVubmluZ1xuICAvLyBldmVuIGlmIGEgc2luZ2xlIHN5bnRheCBvciBwYXJzZSBoaXRzIGEgZmF0YWwgZXJyb3JcbiAgbGV0IFNBRkVfTU9ERSA9IHRydWU7XG4gIGNvbnN0IExBTkdVQUdFX05PVF9GT1VORCA9IFwiQ291bGQgbm90IGZpbmQgdGhlIGxhbmd1YWdlICd7fScsIGRpZCB5b3UgZm9yZ2V0IHRvIGxvYWQvaW5jbHVkZSBhIGxhbmd1YWdlIG1vZHVsZT9cIjtcbiAgLyoqIEB0eXBlIHtMYW5ndWFnZX0gKi9cbiAgY29uc3QgUExBSU5URVhUX0xBTkdVQUdFID0geyBkaXNhYmxlQXV0b2RldGVjdDogdHJ1ZSwgbmFtZTogJ1BsYWluIHRleHQnLCBjb250YWluczogW10gfTtcblxuICAvLyBHbG9iYWwgb3B0aW9ucyB1c2VkIHdoZW4gd2l0aGluIGV4dGVybmFsIEFQSXMuIFRoaXMgaXMgbW9kaWZpZWQgd2hlblxuICAvLyBjYWxsaW5nIHRoZSBgaGxqcy5jb25maWd1cmVgIGZ1bmN0aW9uLlxuICAvKiogQHR5cGUgSExKU09wdGlvbnMgKi9cbiAgbGV0IG9wdGlvbnMgPSB7XG4gICAgaWdub3JlVW5lc2NhcGVkSFRNTDogZmFsc2UsXG4gICAgdGhyb3dVbmVzY2FwZWRIVE1MOiBmYWxzZSxcbiAgICBub0hpZ2hsaWdodFJlOiAvXihuby0/aGlnaGxpZ2h0KSQvaSxcbiAgICBsYW5ndWFnZURldGVjdFJlOiAvXFxibGFuZyg/OnVhZ2UpPy0oW1xcdy1dKylcXGIvaSxcbiAgICBjbGFzc1ByZWZpeDogJ2hsanMtJyxcbiAgICBjc3NTZWxlY3RvcjogJ3ByZSBjb2RlJyxcbiAgICBsYW5ndWFnZXM6IG51bGwsXG4gICAgLy8gYmV0YSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHN1YmplY3QgdG8gY2hhbmdlLCB3ZWxjb21lIHRvIGRpc2N1c3NcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL2lzc3Vlcy8xMDg2XG4gICAgX19lbWl0dGVyOiBUb2tlblRyZWVFbWl0dGVyXG4gIH07XG5cbiAgLyogVXRpbGl0eSBmdW5jdGlvbnMgKi9cblxuICAvKipcbiAgICogVGVzdHMgYSBsYW5ndWFnZSBuYW1lIHRvIHNlZSBpZiBoaWdobGlnaHRpbmcgc2hvdWxkIGJlIHNraXBwZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlTmFtZVxuICAgKi9cbiAgZnVuY3Rpb24gc2hvdWxkTm90SGlnaGxpZ2h0KGxhbmd1YWdlTmFtZSkge1xuICAgIHJldHVybiBvcHRpb25zLm5vSGlnaGxpZ2h0UmUudGVzdChsYW5ndWFnZU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SGlnaGxpZ2h0ZWRIVE1MRWxlbWVudH0gYmxvY2sgLSB0aGUgSFRNTCBlbGVtZW50IHRvIGRldGVybWluZSBsYW5ndWFnZSBmb3JcbiAgICovXG4gIGZ1bmN0aW9uIGJsb2NrTGFuZ3VhZ2UoYmxvY2spIHtcbiAgICBsZXQgY2xhc3NlcyA9IGJsb2NrLmNsYXNzTmFtZSArICcgJztcblxuICAgIGNsYXNzZXMgKz0gYmxvY2sucGFyZW50Tm9kZSA/IGJsb2NrLnBhcmVudE5vZGUuY2xhc3NOYW1lIDogJyc7XG5cbiAgICAvLyBsYW5ndWFnZS0qIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBub24tcHJlZml4ZWQgY2xhc3MgbmFtZXMuXG4gICAgY29uc3QgbWF0Y2ggPSBvcHRpb25zLmxhbmd1YWdlRGV0ZWN0UmUuZXhlYyhjbGFzc2VzKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UobWF0Y2hbMV0pO1xuICAgICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgICB3YXJuKExBTkdVQUdFX05PVF9GT1VORC5yZXBsYWNlKFwie31cIiwgbWF0Y2hbMV0pKTtcbiAgICAgICAgd2FybihcIkZhbGxpbmcgYmFjayB0byBuby1oaWdobGlnaHQgbW9kZSBmb3IgdGhpcyBibG9jay5cIiwgYmxvY2spO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhbmd1YWdlID8gbWF0Y2hbMV0gOiAnbm8taGlnaGxpZ2h0JztcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3Nlc1xuICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgIC5maW5kKChfY2xhc3MpID0+IHNob3VsZE5vdEhpZ2hsaWdodChfY2xhc3MpIHx8IGdldExhbmd1YWdlKF9jbGFzcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcmUgaGlnaGxpZ2h0aW5nIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBPTEQgQVBJXG4gICAqIGhpZ2hsaWdodChsYW5nLCBjb2RlLCBpZ25vcmVJbGxlZ2FscywgY29udGludWF0aW9uKVxuICAgKlxuICAgKiBORVcgQVBJXG4gICAqIGhpZ2hsaWdodChjb2RlLCB7bGFuZywgaWdub3JlSWxsZWdhbHN9KVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZU9yTGFuZ3VhZ2VOYW1lIC0gdGhlIGxhbmd1YWdlIHRvIHVzZSBmb3IgaGlnaGxpZ2h0aW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgSGlnaGxpZ2h0T3B0aW9uc30gb3B0aW9uc09yQ29kZSAtIHRoZSBjb2RlIHRvIGhpZ2hsaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpZ25vcmVJbGxlZ2Fsc10gLSB3aGV0aGVyIHRvIGlnbm9yZSBpbGxlZ2FsIG1hdGNoZXMsIGRlZmF1bHQgaXMgdG8gYmFpbFxuICAgKlxuICAgKiBAcmV0dXJucyB7SGlnaGxpZ2h0UmVzdWx0fSBSZXN1bHQgLSBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSByZXN1bHRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGxhbmd1YWdlIC0gdGhlIGxhbmd1YWdlIG5hbWVcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHJlbGV2YW5jZSAtIHRoZSByZWxldmFuY2Ugc2NvcmVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlIC0gdGhlIGhpZ2hsaWdodGVkIEhUTUwgY29kZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gY29kZSAtIHRoZSBvcmlnaW5hbCByYXcgY29kZVxuICAgKiBAcHJvcGVydHkge0NvbXBpbGVkTW9kZX0gdG9wIC0gdG9wIG9mIHRoZSBjdXJyZW50IG1vZGUgc3RhY2tcbiAgICogQHByb3BlcnR5IHtib29sZWFufSBpbGxlZ2FsIC0gaW5kaWNhdGVzIHdoZXRoZXIgYW55IGlsbGVnYWwgbWF0Y2hlcyB3ZXJlIGZvdW5kXG4gICovXG4gIGZ1bmN0aW9uIGhpZ2hsaWdodChjb2RlT3JMYW5ndWFnZU5hbWUsIG9wdGlvbnNPckNvZGUsIGlnbm9yZUlsbGVnYWxzKSB7XG4gICAgbGV0IGNvZGUgPSBcIlwiO1xuICAgIGxldCBsYW5ndWFnZU5hbWUgPSBcIlwiO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ29kZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgY29kZSA9IGNvZGVPckxhbmd1YWdlTmFtZTtcbiAgICAgIGlnbm9yZUlsbGVnYWxzID0gb3B0aW9uc09yQ29kZS5pZ25vcmVJbGxlZ2FscztcbiAgICAgIGxhbmd1YWdlTmFtZSA9IG9wdGlvbnNPckNvZGUubGFuZ3VhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG9sZCBBUElcbiAgICAgIGRlcHJlY2F0ZWQoXCIxMC43LjBcIiwgXCJoaWdobGlnaHQobGFuZywgY29kZSwgLi4uYXJncykgaGFzIGJlZW4gZGVwcmVjYXRlZC5cIik7XG4gICAgICBkZXByZWNhdGVkKFwiMTAuNy4wXCIsIFwiUGxlYXNlIHVzZSBoaWdobGlnaHQoY29kZSwgb3B0aW9ucykgaW5zdGVhZC5cXG5odHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL2lzc3Vlcy8yMjc3XCIpO1xuICAgICAgbGFuZ3VhZ2VOYW1lID0gY29kZU9yTGFuZ3VhZ2VOYW1lO1xuICAgICAgY29kZSA9IG9wdGlvbnNPckNvZGU7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMzE0OVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgICBpZiAoaWdub3JlSWxsZWdhbHMgPT09IHVuZGVmaW5lZCkgeyBpZ25vcmVJbGxlZ2FscyA9IHRydWU7IH1cblxuICAgIC8qKiBAdHlwZSB7QmVmb3JlSGlnaGxpZ2h0Q29udGV4dH0gKi9cbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgY29kZSxcbiAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZU5hbWVcbiAgICB9O1xuICAgIC8vIHRoZSBwbHVnaW4gY2FuIGNoYW5nZSB0aGUgZGVzaXJlZCBsYW5ndWFnZSBvciB0aGUgY29kZSB0byBiZSBoaWdobGlnaHRlZFxuICAgIC8vIGp1c3QgYmUgY2hhbmdpbmcgdGhlIG9iamVjdCBpdCB3YXMgcGFzc2VkXG4gICAgZmlyZShcImJlZm9yZTpoaWdobGlnaHRcIiwgY29udGV4dCk7XG5cbiAgICAvLyBhIGJlZm9yZSBwbHVnaW4gY2FuIHVzdXJwIHRoZSByZXN1bHQgY29tcGxldGVseSBieSBwcm92aWRpbmcgaXQncyBvd25cbiAgICAvLyBpbiB3aGljaCBjYXNlIHdlIGRvbid0IGV2ZW4gbmVlZCB0byBjYWxsIGhpZ2hsaWdodFxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQucmVzdWx0XG4gICAgICA/IGNvbnRleHQucmVzdWx0XG4gICAgICA6IF9oaWdobGlnaHQoY29udGV4dC5sYW5ndWFnZSwgY29udGV4dC5jb2RlLCBpZ25vcmVJbGxlZ2Fscyk7XG5cbiAgICByZXN1bHQuY29kZSA9IGNvbnRleHQuY29kZTtcbiAgICAvLyB0aGUgcGx1Z2luIGNhbiBjaGFuZ2UgYW55dGhpbmcgaW4gcmVzdWx0IHRvIHN1aXRlIGl0XG4gICAgZmlyZShcImFmdGVyOmhpZ2hsaWdodFwiLCByZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBwcml2YXRlIGhpZ2hsaWdodCB0aGF0J3MgdXNlZCBpbnRlcm5hbGx5IGFuZCBkb2VzIG5vdCBmaXJlIGNhbGxiYWNrc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VOYW1lIC0gdGhlIGxhbmd1YWdlIHRvIHVzZSBmb3IgaGlnaGxpZ2h0aW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlVG9IaWdobGlnaHQgLSB0aGUgY29kZSB0byBoaWdobGlnaHRcbiAgICogQHBhcmFtIHtib29sZWFuP30gW2lnbm9yZUlsbGVnYWxzXSAtIHdoZXRoZXIgdG8gaWdub3JlIGlsbGVnYWwgbWF0Y2hlcywgZGVmYXVsdCBpcyB0byBiYWlsXG4gICAqIEBwYXJhbSB7Q29tcGlsZWRNb2RlP30gW2NvbnRpbnVhdGlvbl0gLSBjdXJyZW50IGNvbnRpbnVhdGlvbiBtb2RlLCBpZiBhbnlcbiAgICogQHJldHVybnMge0hpZ2hsaWdodFJlc3VsdH0gLSByZXN1bHQgb2YgdGhlIGhpZ2hsaWdodCBvcGVyYXRpb25cbiAgKi9cbiAgZnVuY3Rpb24gX2hpZ2hsaWdodChsYW5ndWFnZU5hbWUsIGNvZGVUb0hpZ2hsaWdodCwgaWdub3JlSWxsZWdhbHMsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGtleXdvcmRIaXRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybiBrZXl3b3JkIGRhdGEgaWYgYSBtYXRjaCBpcyBhIGtleXdvcmRcbiAgICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZX0gbW9kZSAtIGN1cnJlbnQgbW9kZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtYXRjaFRleHQgLSB0aGUgdGV4dHVhbCBtYXRjaFxuICAgICAqIEByZXR1cm5zIHtLZXl3b3JkRGF0YSB8IGZhbHNlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGtleXdvcmREYXRhKG1vZGUsIG1hdGNoVGV4dCkge1xuICAgICAgcmV0dXJuIG1vZGUua2V5d29yZHNbbWF0Y2hUZXh0XTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzS2V5d29yZHMoKSB7XG4gICAgICBpZiAoIXRvcC5rZXl3b3Jkcykge1xuICAgICAgICBlbWl0dGVyLmFkZFRleHQobW9kZUJ1ZmZlcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGxhc3RJbmRleCA9IDA7XG4gICAgICB0b3Aua2V5d29yZFBhdHRlcm5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgbGV0IG1hdGNoID0gdG9wLmtleXdvcmRQYXR0ZXJuUmUuZXhlYyhtb2RlQnVmZmVyKTtcbiAgICAgIGxldCBidWYgPSBcIlwiO1xuXG4gICAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgYnVmICs9IG1vZGVCdWZmZXIuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpO1xuICAgICAgICBjb25zdCB3b3JkID0gbGFuZ3VhZ2UuY2FzZV9pbnNlbnNpdGl2ZSA/IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCkgOiBtYXRjaFswXTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGtleXdvcmREYXRhKHRvcCwgd29yZCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgY29uc3QgW2tpbmQsIGtleXdvcmRSZWxldmFuY2VdID0gZGF0YTtcbiAgICAgICAgICBlbWl0dGVyLmFkZFRleHQoYnVmKTtcbiAgICAgICAgICBidWYgPSBcIlwiO1xuXG4gICAgICAgICAga2V5d29yZEhpdHNbd29yZF0gPSAoa2V5d29yZEhpdHNbd29yZF0gfHwgMCkgKyAxO1xuICAgICAgICAgIGlmIChrZXl3b3JkSGl0c1t3b3JkXSA8PSBNQVhfS0VZV09SRF9ISVRTKSByZWxldmFuY2UgKz0ga2V5d29yZFJlbGV2YW5jZTtcbiAgICAgICAgICBpZiAoa2luZC5zdGFydHNXaXRoKFwiX1wiKSkge1xuICAgICAgICAgICAgLy8gXyBpbXBsaWVkIGZvciByZWxldmFuY2Ugb25seSwgZG8gbm90IGhpZ2hsaWdodFxuICAgICAgICAgICAgLy8gYnkgYXBwbHlpbmcgYSBjbGFzcyBuYW1lXG4gICAgICAgICAgICBidWYgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNzc0NsYXNzID0gbGFuZ3VhZ2UuY2xhc3NOYW1lQWxpYXNlc1traW5kXSB8fCBraW5kO1xuICAgICAgICAgICAgZW1pdHRlci5hZGRLZXl3b3JkKG1hdGNoWzBdLCBjc3NDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZiArPSBtYXRjaFswXTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0SW5kZXggPSB0b3Aua2V5d29yZFBhdHRlcm5SZS5sYXN0SW5kZXg7XG4gICAgICAgIG1hdGNoID0gdG9wLmtleXdvcmRQYXR0ZXJuUmUuZXhlYyhtb2RlQnVmZmVyKTtcbiAgICAgIH1cbiAgICAgIGJ1ZiArPSBtb2RlQnVmZmVyLnN1YnN0cmluZyhsYXN0SW5kZXgpO1xuICAgICAgZW1pdHRlci5hZGRUZXh0KGJ1Zik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1N1Ykxhbmd1YWdlKCkge1xuICAgICAgaWYgKG1vZGVCdWZmZXIgPT09IFwiXCIpIHJldHVybjtcbiAgICAgIC8qKiBAdHlwZSBIaWdobGlnaHRSZXN1bHQgKi9cbiAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuXG4gICAgICBpZiAodHlwZW9mIHRvcC5zdWJMYW5ndWFnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKCFsYW5ndWFnZXNbdG9wLnN1Ykxhbmd1YWdlXSkge1xuICAgICAgICAgIGVtaXR0ZXIuYWRkVGV4dChtb2RlQnVmZmVyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gX2hpZ2hsaWdodCh0b3Auc3ViTGFuZ3VhZ2UsIG1vZGVCdWZmZXIsIHRydWUsIGNvbnRpbnVhdGlvbnNbdG9wLnN1Ykxhbmd1YWdlXSk7XG4gICAgICAgIGNvbnRpbnVhdGlvbnNbdG9wLnN1Ykxhbmd1YWdlXSA9IC8qKiBAdHlwZSB7Q29tcGlsZWRNb2RlfSAqLyAocmVzdWx0Ll90b3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaGlnaGxpZ2h0QXV0byhtb2RlQnVmZmVyLCB0b3Auc3ViTGFuZ3VhZ2UubGVuZ3RoID8gdG9wLnN1Ykxhbmd1YWdlIDogbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENvdW50aW5nIGVtYmVkZGVkIGxhbmd1YWdlIHNjb3JlIHRvd2FyZHMgdGhlIGhvc3QgbGFuZ3VhZ2UgbWF5IGJlIGRpc2FibGVkXG4gICAgICAvLyB3aXRoIHplcm9pbmcgdGhlIGNvbnRhaW5pbmcgbW9kZSByZWxldmFuY2UuIFVzZSBjYXNlIGluIHBvaW50IGlzIE1hcmtkb3duIHRoYXRcbiAgICAgIC8vIGFsbG93cyBYTUwgZXZlcnl3aGVyZSBhbmQgbWFrZXMgZXZlcnkgWE1MIHNuaXBwZXQgdG8gaGF2ZSBhIG11Y2ggbGFyZ2VyIE1hcmtkb3duXG4gICAgICAvLyBzY29yZS5cbiAgICAgIGlmICh0b3AucmVsZXZhbmNlID4gMCkge1xuICAgICAgICByZWxldmFuY2UgKz0gcmVzdWx0LnJlbGV2YW5jZTtcbiAgICAgIH1cbiAgICAgIGVtaXR0ZXIuYWRkU3VibGFuZ3VhZ2UocmVzdWx0Ll9lbWl0dGVyLCByZXN1bHQubGFuZ3VhZ2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NCdWZmZXIoKSB7XG4gICAgICBpZiAodG9wLnN1Ykxhbmd1YWdlICE9IG51bGwpIHtcbiAgICAgICAgcHJvY2Vzc1N1Ykxhbmd1YWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzS2V5d29yZHMoKTtcbiAgICAgIH1cbiAgICAgIG1vZGVCdWZmZXIgPSAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0NvbXBpbGVkU2NvcGV9IHNjb3BlXG4gICAgICogQHBhcmFtIHtSZWdFeHBNYXRjaEFycmF5fSBtYXRjaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVtaXRNdWx0aUNsYXNzKHNjb3BlLCBtYXRjaCkge1xuICAgICAgbGV0IGkgPSAxO1xuICAgICAgY29uc3QgbWF4ID0gbWF0Y2gubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlIChpIDw9IG1heCkge1xuICAgICAgICBpZiAoIXNjb3BlLl9lbWl0W2ldKSB7IGkrKzsgY29udGludWU7IH1cbiAgICAgICAgY29uc3Qga2xhc3MgPSBsYW5ndWFnZS5jbGFzc05hbWVBbGlhc2VzW3Njb3BlW2ldXSB8fCBzY29wZVtpXTtcbiAgICAgICAgY29uc3QgdGV4dCA9IG1hdGNoW2ldO1xuICAgICAgICBpZiAoa2xhc3MpIHtcbiAgICAgICAgICBlbWl0dGVyLmFkZEtleXdvcmQodGV4dCwga2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1vZGVCdWZmZXIgPSB0ZXh0O1xuICAgICAgICAgIHByb2Nlc3NLZXl3b3JkcygpO1xuICAgICAgICAgIG1vZGVCdWZmZXIgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZX0gbW9kZSAtIG5ldyBtb2RlIHRvIHN0YXJ0XG4gICAgICogQHBhcmFtIHtSZWdFeHBNYXRjaEFycmF5fSBtYXRjaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YXJ0TmV3TW9kZShtb2RlLCBtYXRjaCkge1xuICAgICAgaWYgKG1vZGUuc2NvcGUgJiYgdHlwZW9mIG1vZGUuc2NvcGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZW1pdHRlci5vcGVuTm9kZShsYW5ndWFnZS5jbGFzc05hbWVBbGlhc2VzW21vZGUuc2NvcGVdIHx8IG1vZGUuc2NvcGUpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGUuYmVnaW5TY29wZSkge1xuICAgICAgICAvLyBiZWdpblNjb3BlIGp1c3Qgd3JhcHMgdGhlIGJlZ2luIG1hdGNoIGl0c2VsZiBpbiBhIHNjb3BlXG4gICAgICAgIGlmIChtb2RlLmJlZ2luU2NvcGUuX3dyYXApIHtcbiAgICAgICAgICBlbWl0dGVyLmFkZEtleXdvcmQobW9kZUJ1ZmZlciwgbGFuZ3VhZ2UuY2xhc3NOYW1lQWxpYXNlc1ttb2RlLmJlZ2luU2NvcGUuX3dyYXBdIHx8IG1vZGUuYmVnaW5TY29wZS5fd3JhcCk7XG4gICAgICAgICAgbW9kZUJ1ZmZlciA9IFwiXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobW9kZS5iZWdpblNjb3BlLl9tdWx0aSkge1xuICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQgbW9kZUJ1ZmZlciBzaG91bGQganVzdCBiZSB0aGUgbWF0Y2hcbiAgICAgICAgICBlbWl0TXVsdGlDbGFzcyhtb2RlLmJlZ2luU2NvcGUsIG1hdGNoKTtcbiAgICAgICAgICBtb2RlQnVmZmVyID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0b3AgPSBPYmplY3QuY3JlYXRlKG1vZGUsIHsgcGFyZW50OiB7IHZhbHVlOiB0b3AgfSB9KTtcbiAgICAgIHJldHVybiB0b3A7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDb21waWxlZE1vZGUgfSBtb2RlIC0gdGhlIG1vZGUgdG8gcG90ZW50aWFsbHkgZW5kXG4gICAgICogQHBhcmFtIHtSZWdFeHBNYXRjaEFycmF5fSBtYXRjaCAtIHRoZSBsYXRlc3QgbWF0Y2hcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWF0Y2hQbHVzUmVtYWluZGVyIC0gbWF0Y2ggcGx1cyByZW1haW5kZXIgb2YgY29udGVudFxuICAgICAqIEByZXR1cm5zIHtDb21waWxlZE1vZGUgfCB2b2lkfSAtIHRoZSBuZXh0IG1vZGUsIG9yIGlmIHZvaWQgY29udGludWUgb24gaW4gY3VycmVudCBtb2RlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZW5kT2ZNb2RlKG1vZGUsIG1hdGNoLCBtYXRjaFBsdXNSZW1haW5kZXIpIHtcbiAgICAgIGxldCBtYXRjaGVkID0gc3RhcnRzV2l0aChtb2RlLmVuZFJlLCBtYXRjaFBsdXNSZW1haW5kZXIpO1xuXG4gICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICBpZiAobW9kZVtcIm9uOmVuZFwiXSkge1xuICAgICAgICAgIGNvbnN0IHJlc3AgPSBuZXcgUmVzcG9uc2UobW9kZSk7XG4gICAgICAgICAgbW9kZVtcIm9uOmVuZFwiXShtYXRjaCwgcmVzcCk7XG4gICAgICAgICAgaWYgKHJlc3AuaXNNYXRjaElnbm9yZWQpIG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgd2hpbGUgKG1vZGUuZW5kc1BhcmVudCAmJiBtb2RlLnBhcmVudCkge1xuICAgICAgICAgICAgbW9kZSA9IG1vZGUucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbW9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gZXZlbiBpZiBvbjplbmQgZmlyZXMgYW4gYGlnbm9yZWAgaXQncyBzdGlsbCBwb3NzaWJsZVxuICAgICAgLy8gdGhhdCB3ZSBtaWdodCB0cmlnZ2VyIHRoZSBlbmQgbm9kZSBiZWNhdXNlIG9mIGEgcGFyZW50IG1vZGVcbiAgICAgIGlmIChtb2RlLmVuZHNXaXRoUGFyZW50KSB7XG4gICAgICAgIHJldHVybiBlbmRPZk1vZGUobW9kZS5wYXJlbnQsIG1hdGNoLCBtYXRjaFBsdXNSZW1haW5kZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBtYXRjaGluZyBidXQgdGhlbiBpZ25vcmluZyBhIHNlcXVlbmNlIG9mIHRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsZXhlbWUgLSBzdHJpbmcgY29udGFpbmluZyBmdWxsIG1hdGNoIHRleHRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb0lnbm9yZShsZXhlbWUpIHtcbiAgICAgIGlmICh0b3AubWF0Y2hlci5yZWdleEluZGV4ID09PSAwKSB7XG4gICAgICAgIC8vIG5vIG1vcmUgcmVnZXhlcyB0byBwb3RlbnRpYWxseSBtYXRjaCBoZXJlLCBzbyB3ZSBtb3ZlIHRoZSBjdXJzb3IgZm9yd2FyZCBvbmVcbiAgICAgICAgLy8gc3BhY2VcbiAgICAgICAgbW9kZUJ1ZmZlciArPSBsZXhlbWVbMF07XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm8gbmVlZCB0byBtb3ZlIHRoZSBjdXJzb3IsIHdlIHN0aWxsIGhhdmUgYWRkaXRpb25hbCByZWdleGVzIHRvIHRyeSBhbmRcbiAgICAgICAgLy8gbWF0Y2ggYXQgdGhpcyB2ZXJ5IHNwb3RcbiAgICAgICAgcmVzdW1lU2NhbkF0U2FtZVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHRoZSBzdGFydCBvZiBhIG5ldyBwb3RlbnRpYWwgbW9kZSBtYXRjaFxuICAgICAqXG4gICAgICogQHBhcmFtIHtFbmhhbmNlZE1hdGNofSBtYXRjaCAtIHRoZSBjdXJyZW50IG1hdGNoXG4gICAgICogQHJldHVybnMge251bWJlcn0gaG93IGZhciB0byBhZHZhbmNlIHRoZSBwYXJzZSBjdXJzb3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb0JlZ2luTWF0Y2gobWF0Y2gpIHtcbiAgICAgIGNvbnN0IGxleGVtZSA9IG1hdGNoWzBdO1xuICAgICAgY29uc3QgbmV3TW9kZSA9IG1hdGNoLnJ1bGU7XG5cbiAgICAgIGNvbnN0IHJlc3AgPSBuZXcgUmVzcG9uc2UobmV3TW9kZSk7XG4gICAgICAvLyBmaXJzdCBpbnRlcm5hbCBiZWZvcmUgY2FsbGJhY2tzLCB0aGVuIHRoZSBwdWJsaWMgb25lc1xuICAgICAgY29uc3QgYmVmb3JlQ2FsbGJhY2tzID0gW25ld01vZGUuX19iZWZvcmVCZWdpbiwgbmV3TW9kZVtcIm9uOmJlZ2luXCJdXTtcbiAgICAgIGZvciAoY29uc3QgY2Igb2YgYmVmb3JlQ2FsbGJhY2tzKSB7XG4gICAgICAgIGlmICghY2IpIGNvbnRpbnVlO1xuICAgICAgICBjYihtYXRjaCwgcmVzcCk7XG4gICAgICAgIGlmIChyZXNwLmlzTWF0Y2hJZ25vcmVkKSByZXR1cm4gZG9JZ25vcmUobGV4ZW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld01vZGUuc2tpcCkge1xuICAgICAgICBtb2RlQnVmZmVyICs9IGxleGVtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZXdNb2RlLmV4Y2x1ZGVCZWdpbikge1xuICAgICAgICAgIG1vZGVCdWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NCdWZmZXIoKTtcbiAgICAgICAgaWYgKCFuZXdNb2RlLnJldHVybkJlZ2luICYmICFuZXdNb2RlLmV4Y2x1ZGVCZWdpbikge1xuICAgICAgICAgIG1vZGVCdWZmZXIgPSBsZXhlbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXJ0TmV3TW9kZShuZXdNb2RlLCBtYXRjaCk7XG4gICAgICByZXR1cm4gbmV3TW9kZS5yZXR1cm5CZWdpbiA/IDAgOiBsZXhlbWUubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSB0aGUgcG90ZW50aWFsIGVuZCBvZiBtb2RlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cE1hdGNoQXJyYXl9IG1hdGNoIC0gdGhlIGN1cnJlbnQgbWF0Y2hcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb0VuZE1hdGNoKG1hdGNoKSB7XG4gICAgICBjb25zdCBsZXhlbWUgPSBtYXRjaFswXTtcbiAgICAgIGNvbnN0IG1hdGNoUGx1c1JlbWFpbmRlciA9IGNvZGVUb0hpZ2hsaWdodC5zdWJzdHJpbmcobWF0Y2guaW5kZXgpO1xuXG4gICAgICBjb25zdCBlbmRNb2RlID0gZW5kT2ZNb2RlKHRvcCwgbWF0Y2gsIG1hdGNoUGx1c1JlbWFpbmRlcik7XG4gICAgICBpZiAoIWVuZE1vZGUpIHsgcmV0dXJuIE5PX01BVENIOyB9XG5cbiAgICAgIGNvbnN0IG9yaWdpbiA9IHRvcDtcbiAgICAgIGlmICh0b3AuZW5kU2NvcGUgJiYgdG9wLmVuZFNjb3BlLl93cmFwKSB7XG4gICAgICAgIHByb2Nlc3NCdWZmZXIoKTtcbiAgICAgICAgZW1pdHRlci5hZGRLZXl3b3JkKGxleGVtZSwgdG9wLmVuZFNjb3BlLl93cmFwKTtcbiAgICAgIH0gZWxzZSBpZiAodG9wLmVuZFNjb3BlICYmIHRvcC5lbmRTY29wZS5fbXVsdGkpIHtcbiAgICAgICAgcHJvY2Vzc0J1ZmZlcigpO1xuICAgICAgICBlbWl0TXVsdGlDbGFzcyh0b3AuZW5kU2NvcGUsIG1hdGNoKTtcbiAgICAgIH0gZWxzZSBpZiAob3JpZ2luLnNraXApIHtcbiAgICAgICAgbW9kZUJ1ZmZlciArPSBsZXhlbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIShvcmlnaW4ucmV0dXJuRW5kIHx8IG9yaWdpbi5leGNsdWRlRW5kKSkge1xuICAgICAgICAgIG1vZGVCdWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NCdWZmZXIoKTtcbiAgICAgICAgaWYgKG9yaWdpbi5leGNsdWRlRW5kKSB7XG4gICAgICAgICAgbW9kZUJ1ZmZlciA9IGxleGVtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZG8ge1xuICAgICAgICBpZiAodG9wLnNjb3BlKSB7XG4gICAgICAgICAgZW1pdHRlci5jbG9zZU5vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRvcC5za2lwICYmICF0b3Auc3ViTGFuZ3VhZ2UpIHtcbiAgICAgICAgICByZWxldmFuY2UgKz0gdG9wLnJlbGV2YW5jZTtcbiAgICAgICAgfVxuICAgICAgICB0b3AgPSB0b3AucGFyZW50O1xuICAgICAgfSB3aGlsZSAodG9wICE9PSBlbmRNb2RlLnBhcmVudCk7XG4gICAgICBpZiAoZW5kTW9kZS5zdGFydHMpIHtcbiAgICAgICAgc3RhcnROZXdNb2RlKGVuZE1vZGUuc3RhcnRzLCBtYXRjaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3JpZ2luLnJldHVybkVuZCA/IDAgOiBsZXhlbWUubGVuZ3RoO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NDb250aW51YXRpb25zKCkge1xuICAgICAgY29uc3QgbGlzdCA9IFtdO1xuICAgICAgZm9yIChsZXQgY3VycmVudCA9IHRvcDsgY3VycmVudCAhPT0gbGFuZ3VhZ2U7IGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudCkge1xuICAgICAgICBpZiAoY3VycmVudC5zY29wZSkge1xuICAgICAgICAgIGxpc3QudW5zaGlmdChjdXJyZW50LnNjb3BlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4gZW1pdHRlci5vcGVuTm9kZShpdGVtKSk7XG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHt7dHlwZT86IE1hdGNoVHlwZSwgaW5kZXg/OiBudW1iZXIsIHJ1bGU/OiBNb2RlfX19ICovXG4gICAgbGV0IGxhc3RNYXRjaCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogIFByb2Nlc3MgYW4gaW5kaXZpZHVhbCBtYXRjaFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRCZWZvcmVNYXRjaCAtIHRleHQgcHJlY2VkaW5nIHRoZSBtYXRjaCAoc2luY2UgdGhlIGxhc3QgbWF0Y2gpXG4gICAgICogQHBhcmFtIHtFbmhhbmNlZE1hdGNofSBbbWF0Y2hdIC0gdGhlIG1hdGNoIGl0c2VsZlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb2Nlc3NMZXhlbWUodGV4dEJlZm9yZU1hdGNoLCBtYXRjaCkge1xuICAgICAgY29uc3QgbGV4ZW1lID0gbWF0Y2ggJiYgbWF0Y2hbMF07XG5cbiAgICAgIC8vIGFkZCBub24tbWF0Y2hlZCB0ZXh0IHRvIHRoZSBjdXJyZW50IG1vZGUgYnVmZmVyXG4gICAgICBtb2RlQnVmZmVyICs9IHRleHRCZWZvcmVNYXRjaDtcblxuICAgICAgaWYgKGxleGVtZSA9PSBudWxsKSB7XG4gICAgICAgIHByb2Nlc3NCdWZmZXIoKTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIC8vIHdlJ3ZlIGZvdW5kIGEgMCB3aWR0aCBtYXRjaCBhbmQgd2UncmUgc3R1Y2ssIHNvIHdlIG5lZWQgdG8gYWR2YW5jZVxuICAgICAgLy8gdGhpcyBoYXBwZW5zIHdoZW4gd2UgaGF2ZSBiYWRseSBiZWhhdmVkIHJ1bGVzIHRoYXQgaGF2ZSBvcHRpb25hbCBtYXRjaGVycyB0byB0aGUgZGVncmVlIHRoYXRcbiAgICAgIC8vIHNvbWV0aW1lcyB0aGV5IGNhbiBlbmQgdXAgbWF0Y2hpbmcgbm90aGluZyBhdCBhbGxcbiAgICAgIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjE0MFxuICAgICAgaWYgKGxhc3RNYXRjaC50eXBlID09PSBcImJlZ2luXCIgJiYgbWF0Y2gudHlwZSA9PT0gXCJlbmRcIiAmJiBsYXN0TWF0Y2guaW5kZXggPT09IG1hdGNoLmluZGV4ICYmIGxleGVtZSA9PT0gXCJcIikge1xuICAgICAgICAvLyBzcGl0IHRoZSBcInNraXBwZWRcIiBjaGFyYWN0ZXIgdGhhdCBvdXIgcmVnZXggY2hva2VkIG9uIGJhY2sgaW50byB0aGUgb3V0cHV0IHNlcXVlbmNlXG4gICAgICAgIG1vZGVCdWZmZXIgKz0gY29kZVRvSGlnaGxpZ2h0LnNsaWNlKG1hdGNoLmluZGV4LCBtYXRjaC5pbmRleCArIDEpO1xuICAgICAgICBpZiAoIVNBRkVfTU9ERSkge1xuICAgICAgICAgIC8qKiBAdHlwZSB7QW5ub3RhdGVkRXJyb3J9ICovXG4gICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGAwIHdpZHRoIG1hdGNoIHJlZ2V4ICgke2xhbmd1YWdlTmFtZX0pYCk7XG4gICAgICAgICAgZXJyLmxhbmd1YWdlTmFtZSA9IGxhbmd1YWdlTmFtZTtcbiAgICAgICAgICBlcnIuYmFkUnVsZSA9IGxhc3RNYXRjaC5ydWxlO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGxhc3RNYXRjaCA9IG1hdGNoO1xuXG4gICAgICBpZiAobWF0Y2gudHlwZSA9PT0gXCJiZWdpblwiKSB7XG4gICAgICAgIHJldHVybiBkb0JlZ2luTWF0Y2gobWF0Y2gpO1xuICAgICAgfSBlbHNlIGlmIChtYXRjaC50eXBlID09PSBcImlsbGVnYWxcIiAmJiAhaWdub3JlSWxsZWdhbHMpIHtcbiAgICAgICAgLy8gaWxsZWdhbCBtYXRjaCwgd2UgZG8gbm90IGNvbnRpbnVlIHByb2Nlc3NpbmdcbiAgICAgICAgLyoqIEB0eXBlIHtBbm5vdGF0ZWRFcnJvcn0gKi9cbiAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdJbGxlZ2FsIGxleGVtZSBcIicgKyBsZXhlbWUgKyAnXCIgZm9yIG1vZGUgXCInICsgKHRvcC5zY29wZSB8fCAnPHVubmFtZWQ+JykgKyAnXCInKTtcbiAgICAgICAgZXJyLm1vZGUgPSB0b3A7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2gudHlwZSA9PT0gXCJlbmRcIikge1xuICAgICAgICBjb25zdCBwcm9jZXNzZWQgPSBkb0VuZE1hdGNoKG1hdGNoKTtcbiAgICAgICAgaWYgKHByb2Nlc3NlZCAhPT0gTk9fTUFUQ0gpIHtcbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGVkZ2UgY2FzZSBmb3Igd2hlbiBpbGxlZ2FsIG1hdGNoZXMgJCAoZW5kIG9mIGxpbmUpIHdoaWNoIGlzIHRlY2huaWNhbGx5XG4gICAgICAvLyBhIDAgd2lkdGggbWF0Y2ggYnV0IG5vdCBhIGJlZ2luL2VuZCBtYXRjaCBzbyBpdCdzIG5vdCBjYXVnaHQgYnkgdGhlXG4gICAgICAvLyBmaXJzdCBoYW5kbGVyICh3aGVuIGlnbm9yZUlsbGVnYWxzIGlzIHRydWUpXG4gICAgICBpZiAobWF0Y2gudHlwZSA9PT0gXCJpbGxlZ2FsXCIgJiYgbGV4ZW1lID09PSBcIlwiKSB7XG4gICAgICAgIC8vIGFkdmFuY2Ugc28gd2UgYXJlbid0IHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3BcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIC8vIGluZmluaXRlIGxvb3BzIGFyZSBCQUQsIHRoaXMgaXMgYSBsYXN0IGRpdGNoIGNhdGNoIGFsbC4gaWYgd2UgaGF2ZSBhXG4gICAgICAvLyBkZWNlbnQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgeWV0IG91ciBpbmRleCAoY3Vyc29yIHBvc2l0aW9uIGluIG91clxuICAgICAgLy8gcGFyc2luZykgc3RpbGwgM3ggYmVoaW5kIG91ciBpbmRleCB0aGVuIHNvbWV0aGluZyBpcyB2ZXJ5IHdyb25nXG4gICAgICAvLyBzbyB3ZSBiYWlsXG4gICAgICBpZiAoaXRlcmF0aW9ucyA+IDEwMDAwMCAmJiBpdGVyYXRpb25zID4gbWF0Y2guaW5kZXggKiAzKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcigncG90ZW50aWFsIGluZmluaXRlIGxvb3AsIHdheSBtb3JlIGl0ZXJhdGlvbnMgdGhhbiBtYXRjaGVzJyk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIFdoeSBtaWdodCBiZSBmaW5kIG91cnNlbHZlcyBoZXJlPyAgQW4gcG90ZW50aWFsIGVuZCBtYXRjaCB0aGF0IHdhc1xuICAgICAgdHJpZ2dlcmVkIGJ1dCBjb3VsZCBub3QgYmUgY29tcGxldGVkLiAgSUUsIGBkb0VuZE1hdGNoYCByZXR1cm5lZCBOT19NQVRDSC5cbiAgICAgICh0aGlzIGNvdWxkIGJlIGJlY2F1c2UgYSBjYWxsYmFjayByZXF1ZXN0cyB0aGUgbWF0Y2ggYmUgaWdub3JlZCwgZXRjKVxuXG4gICAgICBUaGlzIGNhdXNlcyBubyByZWFsIGhhcm0gb3RoZXIgdGhhbiBzdG9wcGluZyBhIGZldyB0aW1lcyB0b28gbWFueS5cbiAgICAgICovXG5cbiAgICAgIG1vZGVCdWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgcmV0dXJuIGxleGVtZS5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZShsYW5ndWFnZU5hbWUpO1xuICAgIGlmICghbGFuZ3VhZ2UpIHtcbiAgICAgIGVycm9yKExBTkdVQUdFX05PVF9GT1VORC5yZXBsYWNlKFwie31cIiwgbGFuZ3VhZ2VOYW1lKSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbGFuZ3VhZ2U6IFwiJyArIGxhbmd1YWdlTmFtZSArICdcIicpO1xuICAgIH1cblxuICAgIGNvbnN0IG1kID0gY29tcGlsZUxhbmd1YWdlKGxhbmd1YWdlKTtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgLyoqIEB0eXBlIHtDb21waWxlZE1vZGV9ICovXG4gICAgbGV0IHRvcCA9IGNvbnRpbnVhdGlvbiB8fCBtZDtcbiAgICAvKiogQHR5cGUgUmVjb3JkPHN0cmluZyxDb21waWxlZE1vZGU+ICovXG4gICAgY29uc3QgY29udGludWF0aW9ucyA9IHt9OyAvLyBrZWVwIGNvbnRpbnVhdGlvbnMgZm9yIHN1Yi1sYW5ndWFnZXNcbiAgICBjb25zdCBlbWl0dGVyID0gbmV3IG9wdGlvbnMuX19lbWl0dGVyKG9wdGlvbnMpO1xuICAgIHByb2Nlc3NDb250aW51YXRpb25zKCk7XG4gICAgbGV0IG1vZGVCdWZmZXIgPSAnJztcbiAgICBsZXQgcmVsZXZhbmNlID0gMDtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBpdGVyYXRpb25zID0gMDtcbiAgICBsZXQgcmVzdW1lU2NhbkF0U2FtZVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgdG9wLm1hdGNoZXIuY29uc2lkZXJBbGwoKTtcblxuICAgICAgZm9yICg7Oykge1xuICAgICAgICBpdGVyYXRpb25zKys7XG4gICAgICAgIGlmIChyZXN1bWVTY2FuQXRTYW1lUG9zaXRpb24pIHtcbiAgICAgICAgICAvLyBvbmx5IHJlZ2V4ZXMgbm90IG1hdGNoZWQgcHJldmlvdXNseSB3aWxsIG5vdyBiZVxuICAgICAgICAgIC8vIGNvbnNpZGVyZWQgZm9yIGEgcG90ZW50aWFsIG1hdGNoXG4gICAgICAgICAgcmVzdW1lU2NhbkF0U2FtZVBvc2l0aW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wLm1hdGNoZXIuY29uc2lkZXJBbGwoKTtcbiAgICAgICAgfVxuICAgICAgICB0b3AubWF0Y2hlci5sYXN0SW5kZXggPSBpbmRleDtcblxuICAgICAgICBjb25zdCBtYXRjaCA9IHRvcC5tYXRjaGVyLmV4ZWMoY29kZVRvSGlnaGxpZ2h0KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJtYXRjaFwiLCBtYXRjaFswXSwgbWF0Y2gucnVsZSAmJiBtYXRjaC5ydWxlLmJlZ2luKVxuXG4gICAgICAgIGlmICghbWF0Y2gpIGJyZWFrO1xuXG4gICAgICAgIGNvbnN0IGJlZm9yZU1hdGNoID0gY29kZVRvSGlnaGxpZ2h0LnN1YnN0cmluZyhpbmRleCwgbWF0Y2guaW5kZXgpO1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRDb3VudCA9IHByb2Nlc3NMZXhlbWUoYmVmb3JlTWF0Y2gsIG1hdGNoKTtcbiAgICAgICAgaW5kZXggPSBtYXRjaC5pbmRleCArIHByb2Nlc3NlZENvdW50O1xuICAgICAgfVxuICAgICAgcHJvY2Vzc0xleGVtZShjb2RlVG9IaWdobGlnaHQuc3Vic3RyaW5nKGluZGV4KSk7XG4gICAgICBlbWl0dGVyLmNsb3NlQWxsTm9kZXMoKTtcbiAgICAgIGVtaXR0ZXIuZmluYWxpemUoKTtcbiAgICAgIHJlc3VsdCA9IGVtaXR0ZXIudG9IVE1MKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZU5hbWUsXG4gICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgIHJlbGV2YW5jZTogcmVsZXZhbmNlLFxuICAgICAgICBpbGxlZ2FsOiBmYWxzZSxcbiAgICAgICAgX2VtaXR0ZXI6IGVtaXR0ZXIsXG4gICAgICAgIF90b3A6IHRvcFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnSWxsZWdhbCcpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlTmFtZSxcbiAgICAgICAgICB2YWx1ZTogZXNjYXBlKGNvZGVUb0hpZ2hsaWdodCksXG4gICAgICAgICAgaWxsZWdhbDogdHJ1ZSxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgX2lsbGVnYWxCeToge1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBjb250ZXh0OiBjb2RlVG9IaWdobGlnaHQuc2xpY2UoaW5kZXggLSAxMDAsIGluZGV4ICsgMTAwKSxcbiAgICAgICAgICAgIG1vZGU6IGVyci5tb2RlLFxuICAgICAgICAgICAgcmVzdWx0U29GYXI6IHJlc3VsdFxuICAgICAgICAgIH0sXG4gICAgICAgICAgX2VtaXR0ZXI6IGVtaXR0ZXJcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoU0FGRV9NT0RFKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlTmFtZSxcbiAgICAgICAgICB2YWx1ZTogZXNjYXBlKGNvZGVUb0hpZ2hsaWdodCksXG4gICAgICAgICAgaWxsZWdhbDogZmFsc2UsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGVycm9yUmFpc2VkOiBlcnIsXG4gICAgICAgICAgX2VtaXR0ZXI6IGVtaXR0ZXIsXG4gICAgICAgICAgX3RvcDogdG9wXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybnMgYSB2YWxpZCBoaWdobGlnaHQgcmVzdWx0LCB3aXRob3V0IGFjdHVhbGx5IGRvaW5nIGFueSBhY3R1YWwgd29yayxcbiAgICogYXV0byBoaWdobGlnaHQgc3RhcnRzIHdpdGggdGhpcyBhbmQgaXQncyBwb3NzaWJsZSBmb3Igc21hbGwgc25pcHBldHMgdGhhdFxuICAgKiBhdXRvLWRldGVjdGlvbiBtYXkgbm90IGZpbmQgYSBiZXR0ZXIgbWF0Y2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGVcbiAgICogQHJldHVybnMge0hpZ2hsaWdodFJlc3VsdH1cbiAgICovXG4gIGZ1bmN0aW9uIGp1c3RUZXh0SGlnaGxpZ2h0UmVzdWx0KGNvZGUpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICB2YWx1ZTogZXNjYXBlKGNvZGUpLFxuICAgICAgaWxsZWdhbDogZmFsc2UsXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBfdG9wOiBQTEFJTlRFWFRfTEFOR1VBR0UsXG4gICAgICBfZW1pdHRlcjogbmV3IG9wdGlvbnMuX19lbWl0dGVyKG9wdGlvbnMpXG4gICAgfTtcbiAgICByZXN1bHQuX2VtaXR0ZXIuYWRkVGV4dChjb2RlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gIEhpZ2hsaWdodGluZyB3aXRoIGxhbmd1YWdlIGRldGVjdGlvbi4gQWNjZXB0cyBhIHN0cmluZyB3aXRoIHRoZSBjb2RlIHRvXG4gIGhpZ2hsaWdodC4gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG5cbiAgLSBsYW5ndWFnZSAoZGV0ZWN0ZWQgbGFuZ3VhZ2UpXG4gIC0gcmVsZXZhbmNlIChpbnQpXG4gIC0gdmFsdWUgKGFuIEhUTUwgc3RyaW5nIHdpdGggaGlnaGxpZ2h0aW5nIG1hcmt1cClcbiAgLSBzZWNvbmRCZXN0IChvYmplY3Qgd2l0aCB0aGUgc2FtZSBzdHJ1Y3R1cmUgZm9yIHNlY29uZC1iZXN0IGhldXJpc3RpY2FsbHlcbiAgICBkZXRlY3RlZCBsYW5ndWFnZSwgbWF5IGJlIGFic2VudClcblxuICAgIEBwYXJhbSB7c3RyaW5nfSBjb2RlXG4gICAgQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBbbGFuZ3VhZ2VTdWJzZXRdXG4gICAgQHJldHVybnMge0F1dG9IaWdobGlnaHRSZXN1bHR9XG4gICovXG4gIGZ1bmN0aW9uIGhpZ2hsaWdodEF1dG8oY29kZSwgbGFuZ3VhZ2VTdWJzZXQpIHtcbiAgICBsYW5ndWFnZVN1YnNldCA9IGxhbmd1YWdlU3Vic2V0IHx8IG9wdGlvbnMubGFuZ3VhZ2VzIHx8IE9iamVjdC5rZXlzKGxhbmd1YWdlcyk7XG4gICAgY29uc3QgcGxhaW50ZXh0ID0ganVzdFRleHRIaWdobGlnaHRSZXN1bHQoY29kZSk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gbGFuZ3VhZ2VTdWJzZXQuZmlsdGVyKGdldExhbmd1YWdlKS5maWx0ZXIoYXV0b0RldGVjdGlvbikubWFwKG5hbWUgPT5cbiAgICAgIF9oaWdobGlnaHQobmFtZSwgY29kZSwgZmFsc2UpXG4gICAgKTtcbiAgICByZXN1bHRzLnVuc2hpZnQocGxhaW50ZXh0KTsgLy8gcGxhaW50ZXh0IGlzIGFsd2F5cyBhbiBvcHRpb25cblxuICAgIGNvbnN0IHNvcnRlZCA9IHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgLy8gc29ydCBiYXNlIG9uIHJlbGV2YW5jZVxuICAgICAgaWYgKGEucmVsZXZhbmNlICE9PSBiLnJlbGV2YW5jZSkgcmV0dXJuIGIucmVsZXZhbmNlIC0gYS5yZWxldmFuY2U7XG5cbiAgICAgIC8vIGFsd2F5cyBhd2FyZCB0aGUgdGllIHRvIHRoZSBiYXNlIGxhbmd1YWdlXG4gICAgICAvLyBpZSBpZiBDKysgYW5kIEFyZHVpbm8gYXJlIHRpZWQsIGl0J3MgbW9yZSBsaWtlbHkgdG8gYmUgQysrXG4gICAgICBpZiAoYS5sYW5ndWFnZSAmJiBiLmxhbmd1YWdlKSB7XG4gICAgICAgIGlmIChnZXRMYW5ndWFnZShhLmxhbmd1YWdlKS5zdXBlcnNldE9mID09PSBiLmxhbmd1YWdlKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoZ2V0TGFuZ3VhZ2UoYi5sYW5ndWFnZSkuc3VwZXJzZXRPZiA9PT0gYS5sYW5ndWFnZSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBvdGhlcndpc2Ugc2F5IHRoZXkgYXJlIGVxdWFsLCB3aGljaCBoYXMgdGhlIGVmZmVjdCBvZiBzb3J0aW5nIG9uXG4gICAgICAvLyByZWxldmFuY2Ugd2hpbGUgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgb3JkZXJpbmcgLSB3aGljaCBpcyBob3cgdGllc1xuICAgICAgLy8gaGF2ZSBoaXN0b3JpY2FsbHkgYmVlbiBzZXR0bGVkLCBpZSB0aGUgbGFuZ3VhZ2UgdGhhdCBjb21lcyBmaXJzdCBhbHdheXNcbiAgICAgIC8vIHdpbnMgaW4gdGhlIGNhc2Ugb2YgYSB0aWVcbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuXG4gICAgY29uc3QgW2Jlc3QsIHNlY29uZEJlc3RdID0gc29ydGVkO1xuXG4gICAgLyoqIEB0eXBlIHtBdXRvSGlnaGxpZ2h0UmVzdWx0fSAqL1xuICAgIGNvbnN0IHJlc3VsdCA9IGJlc3Q7XG4gICAgcmVzdWx0LnNlY29uZEJlc3QgPSBzZWNvbmRCZXN0O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgbmV3IGNsYXNzIG5hbWUgZm9yIGJsb2NrIGdpdmVuIHRoZSBsYW5ndWFnZSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjdXJyZW50TGFuZ11cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZXN1bHRMYW5nXVxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlQ2xhc3NOYW1lKGVsZW1lbnQsIGN1cnJlbnRMYW5nLCByZXN1bHRMYW5nKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSAoY3VycmVudExhbmcgJiYgYWxpYXNlc1tjdXJyZW50TGFuZ10pIHx8IHJlc3VsdExhbmc7XG5cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJobGpzXCIpO1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbGFuZ3VhZ2UtJHtsYW5ndWFnZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGhpZ2hsaWdodGluZyB0byBhIERPTSBub2RlIGNvbnRhaW5pbmcgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIHtIaWdobGlnaHRlZEhUTUxFbGVtZW50fSBlbGVtZW50IC0gdGhlIEhUTUwgZWxlbWVudCB0byBoaWdobGlnaHRcbiAgKi9cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0RWxlbWVudChlbGVtZW50KSB7XG4gICAgLyoqIEB0eXBlIEhUTUxFbGVtZW50ICovXG4gICAgbGV0IG5vZGUgPSBudWxsO1xuICAgIGNvbnN0IGxhbmd1YWdlID0gYmxvY2tMYW5ndWFnZShlbGVtZW50KTtcblxuICAgIGlmIChzaG91bGROb3RIaWdobGlnaHQobGFuZ3VhZ2UpKSByZXR1cm47XG5cbiAgICBmaXJlKFwiYmVmb3JlOmhpZ2hsaWdodEVsZW1lbnRcIixcbiAgICAgIHsgZWw6IGVsZW1lbnQsIGxhbmd1YWdlOiBsYW5ndWFnZSB9KTtcblxuICAgIC8vIHdlIHNob3VsZCBiZSBhbGwgdGV4dCwgbm8gY2hpbGQgbm9kZXMgKHVuZXNjYXBlZCBIVE1MKSAtIHRoaXMgaXMgcG9zc2libHlcbiAgICAvLyBhbiBIVE1MIGluamVjdGlvbiBhdHRhY2sgLSBpdCdzIGxpa2VseSB0b28gbGF0ZSBpZiB0aGlzIGlzIGFscmVhZHkgaW5cbiAgICAvLyBwcm9kdWN0aW9uICh0aGUgY29kZSBoYXMgbGlrZWx5IGFscmVhZHkgZG9uZSBpdHMgZGFtYWdlIGJ5IHRoZSB0aW1lXG4gICAgLy8gd2UncmUgc2VlaW5nIGl0KS4uLiBidXQgd2UgeWVsbCBsb3VkbHkgYWJvdXQgdGhpcyBzbyB0aGF0IGhvcGVmdWxseSBpdCdzXG4gICAgLy8gbW9yZSBsaWtlbHkgdG8gYmUgY2F1Z2h0IGluIGRldmVsb3BtZW50IGJlZm9yZSBtYWtpbmcgaXQgdG8gcHJvZHVjdGlvblxuICAgIGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVVbmVzY2FwZWRIVE1MKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIk9uZSBvZiB5b3VyIGNvZGUgYmxvY2tzIGluY2x1ZGVzIHVuZXNjYXBlZCBIVE1MLiBUaGlzIGlzIGEgcG90ZW50aWFsbHkgc2VyaW91cyBzZWN1cml0eSByaXNrLlwiKTtcbiAgICAgICAgY29uc29sZS53YXJuKFwiaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy93aWtpL3NlY3VyaXR5XCIpO1xuICAgICAgICBjb25zb2xlLndhcm4oXCJUaGUgZWxlbWVudCB3aXRoIHVuZXNjYXBlZCBIVE1MOlwiKTtcbiAgICAgICAgY29uc29sZS53YXJuKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMudGhyb3dVbmVzY2FwZWRIVE1MKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBIVE1MSW5qZWN0aW9uRXJyb3IoXG4gICAgICAgICAgXCJPbmUgb2YgeW91ciBjb2RlIGJsb2NrcyBpbmNsdWRlcyB1bmVzY2FwZWQgSFRNTC5cIixcbiAgICAgICAgICBlbGVtZW50LmlubmVySFRNTFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IGVsZW1lbnQ7XG4gICAgY29uc3QgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7XG4gICAgY29uc3QgcmVzdWx0ID0gbGFuZ3VhZ2UgPyBoaWdobGlnaHQodGV4dCwgeyBsYW5ndWFnZSwgaWdub3JlSWxsZWdhbHM6IHRydWUgfSkgOiBoaWdobGlnaHRBdXRvKHRleHQpO1xuXG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSByZXN1bHQudmFsdWU7XG4gICAgdXBkYXRlQ2xhc3NOYW1lKGVsZW1lbnQsIGxhbmd1YWdlLCByZXN1bHQubGFuZ3VhZ2UpO1xuICAgIGVsZW1lbnQucmVzdWx0ID0ge1xuICAgICAgbGFuZ3VhZ2U6IHJlc3VsdC5sYW5ndWFnZSxcbiAgICAgIC8vIFRPRE86IHJlbW92ZSB3aXRoIHZlcnNpb24gMTEuMFxuICAgICAgcmU6IHJlc3VsdC5yZWxldmFuY2UsXG4gICAgICByZWxldmFuY2U6IHJlc3VsdC5yZWxldmFuY2VcbiAgICB9O1xuICAgIGlmIChyZXN1bHQuc2Vjb25kQmVzdCkge1xuICAgICAgZWxlbWVudC5zZWNvbmRCZXN0ID0ge1xuICAgICAgICBsYW5ndWFnZTogcmVzdWx0LnNlY29uZEJlc3QubGFuZ3VhZ2UsXG4gICAgICAgIHJlbGV2YW5jZTogcmVzdWx0LnNlY29uZEJlc3QucmVsZXZhbmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZpcmUoXCJhZnRlcjpoaWdobGlnaHRFbGVtZW50XCIsIHsgZWw6IGVsZW1lbnQsIHJlc3VsdCwgdGV4dCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGhpZ2hsaWdodC5qcyBnbG9iYWwgb3B0aW9ucyB3aXRoIHRoZSBwYXNzZWQgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpYWw8SExKU09wdGlvbnM+fSB1c2VyT3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gY29uZmlndXJlKHVzZXJPcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IGluaGVyaXQob3B0aW9ucywgdXNlck9wdGlvbnMpO1xuICB9XG5cbiAgLy8gVE9ETzogcmVtb3ZlIHYxMiwgZGVwcmVjYXRlZFxuICBjb25zdCBpbml0SGlnaGxpZ2h0aW5nID0gKCkgPT4ge1xuICAgIGhpZ2hsaWdodEFsbCgpO1xuICAgIGRlcHJlY2F0ZWQoXCIxMC42LjBcIiwgXCJpbml0SGlnaGxpZ2h0aW5nKCkgZGVwcmVjYXRlZC4gIFVzZSBoaWdobGlnaHRBbGwoKSBub3cuXCIpO1xuICB9O1xuXG4gIC8vIFRPRE86IHJlbW92ZSB2MTIsIGRlcHJlY2F0ZWRcbiAgZnVuY3Rpb24gaW5pdEhpZ2hsaWdodGluZ09uTG9hZCgpIHtcbiAgICBoaWdobGlnaHRBbGwoKTtcbiAgICBkZXByZWNhdGVkKFwiMTAuNi4wXCIsIFwiaW5pdEhpZ2hsaWdodGluZ09uTG9hZCgpIGRlcHJlY2F0ZWQuICBVc2UgaGlnaGxpZ2h0QWxsKCkgbm93LlwiKTtcbiAgfVxuXG4gIGxldCB3YW50c0hpZ2hsaWdodCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBhdXRvLWhpZ2hsaWdodHMgYWxsIHByZT5jb2RlIGVsZW1lbnRzIG9uIHRoZSBwYWdlXG4gICAqL1xuICBmdW5jdGlvbiBoaWdobGlnaHRBbGwoKSB7XG4gICAgLy8gaWYgd2UgYXJlIGNhbGxlZCB0b28gZWFybHkgaW4gdGhlIGxvYWRpbmcgcHJvY2Vzc1xuICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImxvYWRpbmdcIikge1xuICAgICAgd2FudHNIaWdobGlnaHQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJsb2NrcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwob3B0aW9ucy5jc3NTZWxlY3Rvcik7XG4gICAgYmxvY2tzLmZvckVhY2goaGlnaGxpZ2h0RWxlbWVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBib290KCkge1xuICAgIC8vIGlmIGEgaGlnaGxpZ2h0IHdhcyByZXF1ZXN0ZWQgYmVmb3JlIERPTSB3YXMgbG9hZGVkLCBkbyBub3dcbiAgICBpZiAod2FudHNIaWdobGlnaHQpIGhpZ2hsaWdodEFsbCgpO1xuICB9XG5cbiAgLy8gbWFrZSBzdXJlIHdlIGFyZSBpbiB0aGUgYnJvd3NlciBlbnZpcm9ubWVudFxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGJvb3QsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGxhbmd1YWdlIGdyYW1tYXIgbW9kdWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZU5hbWVcbiAgICogQHBhcmFtIHtMYW5ndWFnZUZufSBsYW5ndWFnZURlZmluaXRpb25cbiAgICovXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyTGFuZ3VhZ2UobGFuZ3VhZ2VOYW1lLCBsYW5ndWFnZURlZmluaXRpb24pIHtcbiAgICBsZXQgbGFuZyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGxhbmcgPSBsYW5ndWFnZURlZmluaXRpb24oaGxqcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IkMSkge1xuICAgICAgZXJyb3IoXCJMYW5ndWFnZSBkZWZpbml0aW9uIGZvciAne30nIGNvdWxkIG5vdCBiZSByZWdpc3RlcmVkLlwiLnJlcGxhY2UoXCJ7fVwiLCBsYW5ndWFnZU5hbWUpKTtcbiAgICAgIC8vIGhhcmQgb3Igc29mdCBlcnJvclxuICAgICAgaWYgKCFTQUZFX01PREUpIHsgdGhyb3cgZXJyb3IkMTsgfSBlbHNlIHsgZXJyb3IoZXJyb3IkMSk7IH1cbiAgICAgIC8vIGxhbmd1YWdlcyB0aGF0IGhhdmUgc2VyaW91cyBlcnJvcnMgYXJlIHJlcGxhY2VkIHdpdGggZXNzZW50aWFsbHkgYVxuICAgICAgLy8gXCJwbGFpbnRleHRcIiBzdGFuZC1pbiBzbyB0aGF0IHRoZSBjb2RlIGJsb2NrcyB3aWxsIHN0aWxsIGdldCBub3JtYWxcbiAgICAgIC8vIGNzcyBjbGFzc2VzIGFwcGxpZWQgdG8gdGhlbSAtIGFuZCBvbmUgYmFkIGxhbmd1YWdlIHdvbid0IGJyZWFrIHRoZVxuICAgICAgLy8gZW50aXJlIGhpZ2hsaWdodGVyXG4gICAgICBsYW5nID0gUExBSU5URVhUX0xBTkdVQUdFO1xuICAgIH1cbiAgICAvLyBnaXZlIGl0IGEgdGVtcG9yYXJ5IG5hbWUgaWYgaXQgZG9lc24ndCBoYXZlIG9uZSBpbiB0aGUgbWV0YS1kYXRhXG4gICAgaWYgKCFsYW5nLm5hbWUpIGxhbmcubmFtZSA9IGxhbmd1YWdlTmFtZTtcbiAgICBsYW5ndWFnZXNbbGFuZ3VhZ2VOYW1lXSA9IGxhbmc7XG4gICAgbGFuZy5yYXdEZWZpbml0aW9uID0gbGFuZ3VhZ2VEZWZpbml0aW9uLmJpbmQobnVsbCwgaGxqcyk7XG5cbiAgICBpZiAobGFuZy5hbGlhc2VzKSB7XG4gICAgICByZWdpc3RlckFsaWFzZXMobGFuZy5hbGlhc2VzLCB7IGxhbmd1YWdlTmFtZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgbGFuZ3VhZ2UgZ3JhbW1hciBtb2R1bGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlTmFtZVxuICAgKi9cbiAgZnVuY3Rpb24gdW5yZWdpc3Rlckxhbmd1YWdlKGxhbmd1YWdlTmFtZSkge1xuICAgIGRlbGV0ZSBsYW5ndWFnZXNbbGFuZ3VhZ2VOYW1lXTtcbiAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIE9iamVjdC5rZXlzKGFsaWFzZXMpKSB7XG4gICAgICBpZiAoYWxpYXNlc1thbGlhc10gPT09IGxhbmd1YWdlTmFtZSkge1xuICAgICAgICBkZWxldGUgYWxpYXNlc1thbGlhc107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gTGlzdCBvZiBsYW5ndWFnZSBpbnRlcm5hbCBuYW1lc1xuICAgKi9cbiAgZnVuY3Rpb24gbGlzdExhbmd1YWdlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm5zIHtMYW5ndWFnZSB8IHVuZGVmaW5lZH1cbiAgICovXG4gIGZ1bmN0aW9uIGdldExhbmd1YWdlKG5hbWUpIHtcbiAgICBuYW1lID0gKG5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGxhbmd1YWdlc1tuYW1lXSB8fCBsYW5ndWFnZXNbYWxpYXNlc1tuYW1lXV07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IGFsaWFzTGlzdCAtIHNpbmdsZSBhbGlhcyBvciBsaXN0IG9mIGFsaWFzZXNcbiAgICogQHBhcmFtIHt7bGFuZ3VhZ2VOYW1lOiBzdHJpbmd9fSBvcHRzXG4gICAqL1xuICBmdW5jdGlvbiByZWdpc3RlckFsaWFzZXMoYWxpYXNMaXN0LCB7IGxhbmd1YWdlTmFtZSB9KSB7XG4gICAgaWYgKHR5cGVvZiBhbGlhc0xpc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBhbGlhc0xpc3QgPSBbYWxpYXNMaXN0XTtcbiAgICB9XG4gICAgYWxpYXNMaXN0LmZvckVhY2goYWxpYXMgPT4geyBhbGlhc2VzW2FsaWFzLnRvTG93ZXJDYXNlKCldID0gbGFuZ3VhZ2VOYW1lOyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gbGFuZ3VhZ2UgaGFzIGF1dG8tZGV0ZWN0aW9uIGVuYWJsZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIHRoZSBsYW5ndWFnZVxuICAgKi9cbiAgZnVuY3Rpb24gYXV0b0RldGVjdGlvbihuYW1lKSB7XG4gICAgY29uc3QgbGFuZyA9IGdldExhbmd1YWdlKG5hbWUpO1xuICAgIHJldHVybiBsYW5nICYmICFsYW5nLmRpc2FibGVBdXRvZGV0ZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZ3JhZGVzIHRoZSBvbGQgaGlnaGxpZ2h0QmxvY2sgcGx1Z2lucyB0byB0aGUgbmV3XG4gICAqIGhpZ2hsaWdodEVsZW1lbnQgQVBJXG4gICAqIEBwYXJhbSB7SExKU1BsdWdpbn0gcGx1Z2luXG4gICAqL1xuICBmdW5jdGlvbiB1cGdyYWRlUGx1Z2luQVBJKHBsdWdpbikge1xuICAgIC8vIFRPRE86IHJlbW92ZSB3aXRoIHYxMlxuICAgIGlmIChwbHVnaW5bXCJiZWZvcmU6aGlnaGxpZ2h0QmxvY2tcIl0gJiYgIXBsdWdpbltcImJlZm9yZTpoaWdobGlnaHRFbGVtZW50XCJdKSB7XG4gICAgICBwbHVnaW5bXCJiZWZvcmU6aGlnaGxpZ2h0RWxlbWVudFwiXSA9IChkYXRhKSA9PiB7XG4gICAgICAgIHBsdWdpbltcImJlZm9yZTpoaWdobGlnaHRCbG9ja1wiXShcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHsgYmxvY2s6IGRhdGEuZWwgfSwgZGF0YSlcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChwbHVnaW5bXCJhZnRlcjpoaWdobGlnaHRCbG9ja1wiXSAmJiAhcGx1Z2luW1wiYWZ0ZXI6aGlnaGxpZ2h0RWxlbWVudFwiXSkge1xuICAgICAgcGx1Z2luW1wiYWZ0ZXI6aGlnaGxpZ2h0RWxlbWVudFwiXSA9IChkYXRhKSA9PiB7XG4gICAgICAgIHBsdWdpbltcImFmdGVyOmhpZ2hsaWdodEJsb2NrXCJdKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oeyBibG9jazogZGF0YS5lbCB9LCBkYXRhKVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtITEpTUGx1Z2lufSBwbHVnaW5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZFBsdWdpbihwbHVnaW4pIHtcbiAgICB1cGdyYWRlUGx1Z2luQVBJKHBsdWdpbik7XG4gICAgcGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtQbHVnaW5FdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHthbnl9IGFyZ3NcbiAgICovXG4gIGZ1bmN0aW9uIGZpcmUoZXZlbnQsIGFyZ3MpIHtcbiAgICBjb25zdCBjYiA9IGV2ZW50O1xuICAgIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbihwbHVnaW4pIHtcbiAgICAgIGlmIChwbHVnaW5bY2JdKSB7XG4gICAgICAgIHBsdWdpbltjYl0oYXJncyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogREVQUkVDQVRFRFxuICAgKiBAcGFyYW0ge0hpZ2hsaWdodGVkSFRNTEVsZW1lbnR9IGVsXG4gICAqL1xuICBmdW5jdGlvbiBkZXByZWNhdGVIaWdobGlnaHRCbG9jayhlbCkge1xuICAgIGRlcHJlY2F0ZWQoXCIxMC43LjBcIiwgXCJoaWdobGlnaHRCbG9jayB3aWxsIGJlIHJlbW92ZWQgZW50aXJlbHkgaW4gdjEyLjBcIik7XG4gICAgZGVwcmVjYXRlZChcIjEwLjcuMFwiLCBcIlBsZWFzZSB1c2UgaGlnaGxpZ2h0RWxlbWVudCBub3cuXCIpO1xuXG4gICAgcmV0dXJuIGhpZ2hsaWdodEVsZW1lbnQoZWwpO1xuICB9XG5cbiAgLyogSW50ZXJmYWNlIGRlZmluaXRpb24gKi9cbiAgT2JqZWN0LmFzc2lnbihobGpzLCB7XG4gICAgaGlnaGxpZ2h0LFxuICAgIGhpZ2hsaWdodEF1dG8sXG4gICAgaGlnaGxpZ2h0QWxsLFxuICAgIGhpZ2hsaWdodEVsZW1lbnQsXG4gICAgLy8gVE9ETzogUmVtb3ZlIHdpdGggdjEyIEFQSVxuICAgIGhpZ2hsaWdodEJsb2NrOiBkZXByZWNhdGVIaWdobGlnaHRCbG9jayxcbiAgICBjb25maWd1cmUsXG4gICAgaW5pdEhpZ2hsaWdodGluZyxcbiAgICBpbml0SGlnaGxpZ2h0aW5nT25Mb2FkLFxuICAgIHJlZ2lzdGVyTGFuZ3VhZ2UsXG4gICAgdW5yZWdpc3Rlckxhbmd1YWdlLFxuICAgIGxpc3RMYW5ndWFnZXMsXG4gICAgZ2V0TGFuZ3VhZ2UsXG4gICAgcmVnaXN0ZXJBbGlhc2VzLFxuICAgIGF1dG9EZXRlY3Rpb24sXG4gICAgaW5oZXJpdCxcbiAgICBhZGRQbHVnaW5cbiAgfSk7XG5cbiAgaGxqcy5kZWJ1Z01vZGUgPSBmdW5jdGlvbigpIHsgU0FGRV9NT0RFID0gZmFsc2U7IH07XG4gIGhsanMuc2FmZU1vZGUgPSBmdW5jdGlvbigpIHsgU0FGRV9NT0RFID0gdHJ1ZTsgfTtcbiAgaGxqcy52ZXJzaW9uU3RyaW5nID0gdmVyc2lvbjtcblxuICBobGpzLnJlZ2V4ID0ge1xuICAgIGNvbmNhdDogY29uY2F0LFxuICAgIGxvb2thaGVhZDogbG9va2FoZWFkLFxuICAgIGVpdGhlcjogZWl0aGVyLFxuICAgIG9wdGlvbmFsOiBvcHRpb25hbCxcbiAgICBhbnlOdW1iZXJPZlRpbWVzOiBhbnlOdW1iZXJPZlRpbWVzXG4gIH07XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gTU9ERVMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHR5cGVvZiBNT0RFU1trZXldID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkZWVwRnJlZXplRXM2LmV4cG9ydHMoTU9ERVNba2V5XSk7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2UgYWxsIHRoZSBtb2Rlcy9yZWdleGVzIGludG8gb3VyIG1haW4gb2JqZWN0XG4gIE9iamVjdC5hc3NpZ24oaGxqcywgTU9ERVMpO1xuXG4gIHJldHVybiBobGpzO1xufTtcblxuLy8gZXhwb3J0IGFuIFwiaW5zdGFuY2VcIiBvZiB0aGUgaGlnaGxpZ2h0ZXJcbnZhciBoaWdobGlnaHQgPSBITEpTKHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBoaWdobGlnaHQ7XG5oaWdobGlnaHQuSGlnaGxpZ2h0SlMgPSBoaWdobGlnaHQ7XG5oaWdobGlnaHQuZGVmYXVsdCA9IGhpZ2hsaWdodDtcbiIsIi8qXG5MYW5ndWFnZTogQmFzaFxuQXV0aG9yOiB2YWggPHZhaHRlbmJlcmdAZ21haWwuY29tPlxuQ29udHJpYnV0cm9yczogQmVuamFtaW4gUGFubmVsbCA8Y29udGFjdEBzaWVycmFzb2Z0d29ya3MuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL1xuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGJhc2goaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIGNvbnN0IFZBUiA9IHt9O1xuICBjb25zdCBCUkFDRURfVkFSID0ge1xuICAgIGJlZ2luOiAvXFwkXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBcInNlbGZcIixcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC86LS8sXG4gICAgICAgIGNvbnRhaW5zOiBbIFZBUiBdXG4gICAgICB9IC8vIGRlZmF1bHQgdmFsdWVzXG4gICAgXVxuICB9O1xuICBPYmplY3QuYXNzaWduKFZBUiwge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogcmVnZXguY29uY2F0KC9cXCRbXFx3XFxkI0BdW1xcd1xcZF9dKi8sXG4gICAgICAgIC8vIG5lZ2F0aXZlIGxvb2stYWhlYWQgdHJpZXMgdG8gYXZvaWQgbWF0Y2hpbmcgcGF0dGVybnMgdGhhdCBhcmUgbm90XG4gICAgICAgIC8vIFBlcmwgYXQgYWxsIGxpa2UgJGlkZW50JCwgQGlkZW50QCwgZXRjLlxuICAgICAgICBgKD8hW1xcXFx3XFxcXGRdKSg/IVskXSlgKSB9LFxuICAgICAgQlJBQ0VEX1ZBUlxuICAgIF1cbiAgfSk7XG5cbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvXFwkXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gIH07XG4gIGNvbnN0IEhFUkVfRE9DID0ge1xuICAgIGJlZ2luOiAvPDwtP1xccyooPz1cXHcrKS8sXG4gICAgc3RhcnRzOiB7IGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHtcbiAgICAgICAgYmVnaW46IC8oXFx3KykvLFxuICAgICAgICBlbmQ6IC8oXFx3KykvLFxuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnXG4gICAgICB9KVxuICAgIF0gfVxuICB9O1xuICBjb25zdCBRVU9URV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1wiLyxcbiAgICBlbmQ6IC9cIi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFZBUixcbiAgICAgIFNVQlNUXG4gICAgXVxuICB9O1xuICBTVUJTVC5jb250YWlucy5wdXNoKFFVT1RFX1NUUklORyk7XG4gIGNvbnN0IEVTQ0FQRURfUVVPVEUgPSB7XG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBiZWdpbjogL1xcXFxcIi9cblxuICB9O1xuICBjb25zdCBBUE9TX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJy8sXG4gICAgZW5kOiAvJy9cbiAgfTtcbiAgY29uc3QgQVJJVEhNRVRJQyA9IHtcbiAgICBiZWdpbjogL1xcJFxcKFxcKC8sXG4gICAgZW5kOiAvXFwpXFwpLyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcZCsjWzAtOWEtZl0rLyxcbiAgICAgICAgY2xhc3NOYW1lOiBcIm51bWJlclwiXG4gICAgICB9LFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIFZBUlxuICAgIF1cbiAgfTtcbiAgY29uc3QgU0hfTElLRV9TSEVMTFMgPSBbXG4gICAgXCJmaXNoXCIsXG4gICAgXCJiYXNoXCIsXG4gICAgXCJ6c2hcIixcbiAgICBcInNoXCIsXG4gICAgXCJjc2hcIixcbiAgICBcImtzaFwiLFxuICAgIFwidGNzaFwiLFxuICAgIFwiZGFzaFwiLFxuICAgIFwic2NzaFwiLFxuICBdO1xuICBjb25zdCBLTk9XTl9TSEVCQU5HID0gaGxqcy5TSEVCQU5HKHtcbiAgICBiaW5hcnk6IGAoJHtTSF9MSUtFX1NIRUxMUy5qb2luKFwifFwiKX0pYCxcbiAgICByZWxldmFuY2U6IDEwXG4gIH0pO1xuICBjb25zdCBGVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46IC9cXHdbXFx3XFxkX10qXFxzKlxcKFxccypcXClcXHMqXFx7LyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogWyBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7IGJlZ2luOiAvXFx3W1xcd1xcZF9dKi8gfSkgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBLRVlXT1JEUyA9IFtcbiAgICBcImlmXCIsXG4gICAgXCJ0aGVuXCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJlbGlmXCIsXG4gICAgXCJmaVwiLFxuICAgIFwiZm9yXCIsXG4gICAgXCJ3aGlsZVwiLFxuICAgIFwiaW5cIixcbiAgICBcImRvXCIsXG4gICAgXCJkb25lXCIsXG4gICAgXCJjYXNlXCIsXG4gICAgXCJlc2FjXCIsXG4gICAgXCJmdW5jdGlvblwiXG4gIF07XG5cbiAgY29uc3QgTElURVJBTFMgPSBbXG4gICAgXCJ0cnVlXCIsXG4gICAgXCJmYWxzZVwiXG4gIF07XG5cbiAgLy8gdG8gY29uc3VtZSBwYXRocyB0byBwcmV2ZW50IGtleXdvcmQgbWF0Y2hlcyBpbnNpZGUgdGhlbVxuICBjb25zdCBQQVRIX01PREUgPSB7IG1hdGNoOiAvKFxcL1thLXouXy1dKykrLyB9O1xuXG4gIC8vIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvU2hlbGwtQnVpbHRpbi1Db21tYW5kcy5odG1sXG4gIGNvbnN0IFNIRUxMX0JVSUxUX0lOUyA9IFtcbiAgICBcImJyZWFrXCIsXG4gICAgXCJjZFwiLFxuICAgIFwiY29udGludWVcIixcbiAgICBcImV2YWxcIixcbiAgICBcImV4ZWNcIixcbiAgICBcImV4aXRcIixcbiAgICBcImV4cG9ydFwiLFxuICAgIFwiZ2V0b3B0c1wiLFxuICAgIFwiaGFzaFwiLFxuICAgIFwicHdkXCIsXG4gICAgXCJyZWFkb25seVwiLFxuICAgIFwicmV0dXJuXCIsXG4gICAgXCJzaGlmdFwiLFxuICAgIFwidGVzdFwiLFxuICAgIFwidGltZXNcIixcbiAgICBcInRyYXBcIixcbiAgICBcInVtYXNrXCIsXG4gICAgXCJ1bnNldFwiXG4gIF07XG5cbiAgY29uc3QgQkFTSF9CVUlMVF9JTlMgPSBbXG4gICAgXCJhbGlhc1wiLFxuICAgIFwiYmluZFwiLFxuICAgIFwiYnVpbHRpblwiLFxuICAgIFwiY2FsbGVyXCIsXG4gICAgXCJjb21tYW5kXCIsXG4gICAgXCJkZWNsYXJlXCIsXG4gICAgXCJlY2hvXCIsXG4gICAgXCJlbmFibGVcIixcbiAgICBcImhlbHBcIixcbiAgICBcImxldFwiLFxuICAgIFwibG9jYWxcIixcbiAgICBcImxvZ291dFwiLFxuICAgIFwibWFwZmlsZVwiLFxuICAgIFwicHJpbnRmXCIsXG4gICAgXCJyZWFkXCIsXG4gICAgXCJyZWFkYXJyYXlcIixcbiAgICBcInNvdXJjZVwiLFxuICAgIFwidHlwZVwiLFxuICAgIFwidHlwZXNldFwiLFxuICAgIFwidWxpbWl0XCIsXG4gICAgXCJ1bmFsaWFzXCJcbiAgXTtcblxuICBjb25zdCBaU0hfQlVJTFRfSU5TID0gW1xuICAgIFwiYXV0b2xvYWRcIixcbiAgICBcImJnXCIsXG4gICAgXCJiaW5ka2V5XCIsXG4gICAgXCJieWVcIixcbiAgICBcImNhcFwiLFxuICAgIFwiY2hkaXJcIixcbiAgICBcImNsb25lXCIsXG4gICAgXCJjb21wYXJndW1lbnRzXCIsXG4gICAgXCJjb21wY2FsbFwiLFxuICAgIFwiY29tcGN0bFwiLFxuICAgIFwiY29tcGRlc2NyaWJlXCIsXG4gICAgXCJjb21wZmlsZXNcIixcbiAgICBcImNvbXBncm91cHNcIixcbiAgICBcImNvbXBxdW90ZVwiLFxuICAgIFwiY29tcHRhZ3NcIixcbiAgICBcImNvbXB0cnlcIixcbiAgICBcImNvbXB2YWx1ZXNcIixcbiAgICBcImRpcnNcIixcbiAgICBcImRpc2FibGVcIixcbiAgICBcImRpc293blwiLFxuICAgIFwiZWNob3RjXCIsXG4gICAgXCJlY2hvdGlcIixcbiAgICBcImVtdWxhdGVcIixcbiAgICBcImZjXCIsXG4gICAgXCJmZ1wiLFxuICAgIFwiZmxvYXRcIixcbiAgICBcImZ1bmN0aW9uc1wiLFxuICAgIFwiZ2V0Y2FwXCIsXG4gICAgXCJnZXRsblwiLFxuICAgIFwiaGlzdG9yeVwiLFxuICAgIFwiaW50ZWdlclwiLFxuICAgIFwiam9ic1wiLFxuICAgIFwia2lsbFwiLFxuICAgIFwibGltaXRcIixcbiAgICBcImxvZ1wiLFxuICAgIFwibm9nbG9iXCIsXG4gICAgXCJwb3BkXCIsXG4gICAgXCJwcmludFwiLFxuICAgIFwicHVzaGRcIixcbiAgICBcInB1c2hsblwiLFxuICAgIFwicmVoYXNoXCIsXG4gICAgXCJzY2hlZFwiLFxuICAgIFwic2V0Y2FwXCIsXG4gICAgXCJzZXRvcHRcIixcbiAgICBcInN0YXRcIixcbiAgICBcInN1c3BlbmRcIixcbiAgICBcInR0eWN0bFwiLFxuICAgIFwidW5mdW5jdGlvblwiLFxuICAgIFwidW5oYXNoXCIsXG4gICAgXCJ1bmxpbWl0XCIsXG4gICAgXCJ1bnNldG9wdFwiLFxuICAgIFwidmFyZWRcIixcbiAgICBcIndhaXRcIixcbiAgICBcIndoZW5jZVwiLFxuICAgIFwid2hlcmVcIixcbiAgICBcIndoaWNoXCIsXG4gICAgXCJ6Y29tcGlsZVwiLFxuICAgIFwiemZvcm1hdFwiLFxuICAgIFwiemZ0cFwiLFxuICAgIFwiemxlXCIsXG4gICAgXCJ6bW9kbG9hZFwiLFxuICAgIFwienBhcnNlb3B0c1wiLFxuICAgIFwienByb2ZcIixcbiAgICBcInpwdHlcIixcbiAgICBcInpyZWdleHBhcnNlXCIsXG4gICAgXCJ6c29ja2V0XCIsXG4gICAgXCJ6c3R5bGVcIixcbiAgICBcInp0Y3BcIlxuICBdO1xuXG4gIGNvbnN0IEdOVV9DT1JFX1VUSUxTID0gW1xuICAgIFwiY2hjb25cIixcbiAgICBcImNoZ3JwXCIsXG4gICAgXCJjaG93blwiLFxuICAgIFwiY2htb2RcIixcbiAgICBcImNwXCIsXG4gICAgXCJkZFwiLFxuICAgIFwiZGZcIixcbiAgICBcImRpclwiLFxuICAgIFwiZGlyY29sb3JzXCIsXG4gICAgXCJsblwiLFxuICAgIFwibHNcIixcbiAgICBcIm1rZGlyXCIsXG4gICAgXCJta2ZpZm9cIixcbiAgICBcIm1rbm9kXCIsXG4gICAgXCJta3RlbXBcIixcbiAgICBcIm12XCIsXG4gICAgXCJyZWFscGF0aFwiLFxuICAgIFwicm1cIixcbiAgICBcInJtZGlyXCIsXG4gICAgXCJzaHJlZFwiLFxuICAgIFwic3luY1wiLFxuICAgIFwidG91Y2hcIixcbiAgICBcInRydW5jYXRlXCIsXG4gICAgXCJ2ZGlyXCIsXG4gICAgXCJiMnN1bVwiLFxuICAgIFwiYmFzZTMyXCIsXG4gICAgXCJiYXNlNjRcIixcbiAgICBcImNhdFwiLFxuICAgIFwiY2tzdW1cIixcbiAgICBcImNvbW1cIixcbiAgICBcImNzcGxpdFwiLFxuICAgIFwiY3V0XCIsXG4gICAgXCJleHBhbmRcIixcbiAgICBcImZtdFwiLFxuICAgIFwiZm9sZFwiLFxuICAgIFwiaGVhZFwiLFxuICAgIFwiam9pblwiLFxuICAgIFwibWQ1c3VtXCIsXG4gICAgXCJubFwiLFxuICAgIFwibnVtZm10XCIsXG4gICAgXCJvZFwiLFxuICAgIFwicGFzdGVcIixcbiAgICBcInB0eFwiLFxuICAgIFwicHJcIixcbiAgICBcInNoYTFzdW1cIixcbiAgICBcInNoYTIyNHN1bVwiLFxuICAgIFwic2hhMjU2c3VtXCIsXG4gICAgXCJzaGEzODRzdW1cIixcbiAgICBcInNoYTUxMnN1bVwiLFxuICAgIFwic2h1ZlwiLFxuICAgIFwic29ydFwiLFxuICAgIFwic3BsaXRcIixcbiAgICBcInN1bVwiLFxuICAgIFwidGFjXCIsXG4gICAgXCJ0YWlsXCIsXG4gICAgXCJ0clwiLFxuICAgIFwidHNvcnRcIixcbiAgICBcInVuZXhwYW5kXCIsXG4gICAgXCJ1bmlxXCIsXG4gICAgXCJ3Y1wiLFxuICAgIFwiYXJjaFwiLFxuICAgIFwiYmFzZW5hbWVcIixcbiAgICBcImNocm9vdFwiLFxuICAgIFwiZGF0ZVwiLFxuICAgIFwiZGlybmFtZVwiLFxuICAgIFwiZHVcIixcbiAgICBcImVjaG9cIixcbiAgICBcImVudlwiLFxuICAgIFwiZXhwclwiLFxuICAgIFwiZmFjdG9yXCIsXG4gICAgLy8gXCJmYWxzZVwiLCAvLyBrZXl3b3JkIGxpdGVyYWwgYWxyZWFkeVxuICAgIFwiZ3JvdXBzXCIsXG4gICAgXCJob3N0aWRcIixcbiAgICBcImlkXCIsXG4gICAgXCJsaW5rXCIsXG4gICAgXCJsb2duYW1lXCIsXG4gICAgXCJuaWNlXCIsXG4gICAgXCJub2h1cFwiLFxuICAgIFwibnByb2NcIixcbiAgICBcInBhdGhjaGtcIixcbiAgICBcInBpbmt5XCIsXG4gICAgXCJwcmludGVudlwiLFxuICAgIFwicHJpbnRmXCIsXG4gICAgXCJwd2RcIixcbiAgICBcInJlYWRsaW5rXCIsXG4gICAgXCJydW5jb25cIixcbiAgICBcInNlcVwiLFxuICAgIFwic2xlZXBcIixcbiAgICBcInN0YXRcIixcbiAgICBcInN0ZGJ1ZlwiLFxuICAgIFwic3R0eVwiLFxuICAgIFwidGVlXCIsXG4gICAgXCJ0ZXN0XCIsXG4gICAgXCJ0aW1lb3V0XCIsXG4gICAgLy8gXCJ0cnVlXCIsIC8vIGtleXdvcmQgbGl0ZXJhbCBhbHJlYWR5XG4gICAgXCJ0dHlcIixcbiAgICBcInVuYW1lXCIsXG4gICAgXCJ1bmxpbmtcIixcbiAgICBcInVwdGltZVwiLFxuICAgIFwidXNlcnNcIixcbiAgICBcIndob1wiLFxuICAgIFwid2hvYW1pXCIsXG4gICAgXCJ5ZXNcIlxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0Jhc2gnLFxuICAgIGFsaWFzZXM6IFsgJ3NoJyBdLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogL1xcYlthLXpdW2EtejAtOS5fLV0rXFxiLyxcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkRTLFxuICAgICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgICBidWlsdF9pbjogW1xuICAgICAgICAuLi5TSEVMTF9CVUlMVF9JTlMsXG4gICAgICAgIC4uLkJBU0hfQlVJTFRfSU5TLFxuICAgICAgICAvLyBTaGVsbCBtb2RpZmllcnNcbiAgICAgICAgXCJzZXRcIixcbiAgICAgICAgXCJzaG9wdFwiLFxuICAgICAgICAuLi5aU0hfQlVJTFRfSU5TLFxuICAgICAgICAuLi5HTlVfQ09SRV9VVElMU1xuICAgICAgXVxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEtOT1dOX1NIRUJBTkcsIC8vIHRvIGNhdGNoIGtub3duIHNoZWxscyBhbmQgYm9vc3QgcmVsZXZhbmN5XG4gICAgICBobGpzLlNIRUJBTkcoKSwgLy8gdG8gY2F0Y2ggdW5rbm93biBzaGVsbHMgYnV0IHN0aWxsIGhpZ2hsaWdodCB0aGUgc2hlYmFuZ1xuICAgICAgRlVOQ1RJT04sXG4gICAgICBBUklUSE1FVElDLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIEhFUkVfRE9DLFxuICAgICAgUEFUSF9NT0RFLFxuICAgICAgUVVPVEVfU1RSSU5HLFxuICAgICAgRVNDQVBFRF9RVU9URSxcbiAgICAgIEFQT1NfU1RSSU5HLFxuICAgICAgVkFSXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2g7XG4iLCIvKlxuTGFuZ3VhZ2U6IENcbkNhdGVnb3J5OiBjb21tb24sIHN5c3RlbVxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ18ocHJvZ3JhbW1pbmdfbGFuZ3VhZ2UpXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gYyhobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgLy8gYWRkZWQgZm9yIGhpc3RvcmljIHJlYXNvbnMgYmVjYXVzZSBgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFYCBkb2VzXG4gIC8vIG5vdCBpbmNsdWRlIHN1Y2ggc3VwcG9ydCBub3IgY2FuIHdlIGJlIHN1cmUgYWxsIHRoZSBncmFtbWFycyBkZXBlbmRpbmdcbiAgLy8gb24gaXQgd291bGQgZGVzaXJlIHRoaXMgYmVoYXZpb3JcbiAgY29uc3QgQ19MSU5FX0NPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnLy8nLCAnJCcsIHsgY29udGFpbnM6IFsgeyBiZWdpbjogL1xcXFxcXG4vIH0gXSB9KTtcbiAgY29uc3QgREVDTFRZUEVfQVVUT19SRSA9ICdkZWNsdHlwZVxcXFwoYXV0b1xcXFwpJztcbiAgY29uc3QgTkFNRVNQQUNFX1JFID0gJ1thLXpBLVpfXVxcXFx3Kjo6JztcbiAgY29uc3QgVEVNUExBVEVfQVJHVU1FTlRfUkUgPSAnPFtePD5dKz4nO1xuICBjb25zdCBGVU5DVElPTl9UWVBFX1JFID0gJygnXG4gICAgKyBERUNMVFlQRV9BVVRPX1JFICsgJ3wnXG4gICAgKyByZWdleC5vcHRpb25hbChOQU1FU1BBQ0VfUkUpXG4gICAgKyAnW2EtekEtWl9dXFxcXHcqJyArIHJlZ2V4Lm9wdGlvbmFsKFRFTVBMQVRFX0FSR1VNRU5UX1JFKVxuICArICcpJztcblxuXG4gIGNvbnN0IFRZUEVTID0ge1xuICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnXFxcXGJbYS16XFxcXGRfXSpfdFxcXFxiJyB9LFxuICAgICAgeyBtYXRjaDogL1xcYmF0b21pY19bYS16XXszLDZ9XFxiLyB9XG4gICAgXVxuXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2xhbmd1YWdlL2VzY2FwZVxuICAvLyBcXFxcIFxceCBcXHhGRiBcXHUyODM3IFxcdTAwMzIzNzQ3IFxcMzc0XG4gIGNvbnN0IENIQVJBQ1RFUl9FU0NBUEVTID0gJ1xcXFxcXFxcKHhbMC05QS1GYS1mXXsyfXx1WzAtOUEtRmEtZl17NCw4fXxbMC03XXszfXxcXFxcUyknO1xuICBjb25zdCBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFV8TCk/XCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyh1OD98VXxMKT9cXCcoJyArIENIQVJBQ1RFUl9FU0NBUEVTICsgXCJ8LilcIixcbiAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJy4nXG4gICAgICB9LFxuICAgICAgaGxqcy5FTkRfU0FNRV9BU19CRUdJTih7XG4gICAgICAgIGJlZ2luOiAvKD86dTg/fFV8TCk/UlwiKFteKClcXFxcIF17MCwxNn0pXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpKFteKClcXFxcIF17MCwxNn0pXCIvXG4gICAgICB9KVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBOVU1CRVJTID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46ICdcXFxcYigwYlswMVxcJ10rKScgfSxcbiAgICAgIHsgYmVnaW46ICcoLT8pXFxcXGIoW1xcXFxkXFwnXSsoXFxcXC5bXFxcXGRcXCddKik/fFxcXFwuW1xcXFxkXFwnXSspKChsbHxMTHxsfEwpKHV8VSk/fCh1fFUpKGxsfExMfGx8TCk/fGZ8RnxifEIpJyB9LFxuICAgICAgeyBiZWdpbjogJygtPykoXFxcXGIwW3hYXVthLWZBLUYwLTlcXCddK3woXFxcXGJbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykoW2VFXVstK10/W1xcXFxkXFwnXSspPyknIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IFBSRVBST0NFU1NPUiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogLyNcXHMqW2Etel0rXFxiLyxcbiAgICBlbmQ6IC8kLyxcbiAgICBrZXl3b3JkczogeyBrZXl3b3JkOlxuICAgICAgICAnaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgJ1xuICAgICAgICArICdwcmFnbWEgX1ByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZScgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcXFxcXG4vLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLmluaGVyaXQoU1RSSU5HUywgeyBjbGFzc05hbWU6ICdzdHJpbmcnIH0pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogLzwuKj8+L1xuICAgICAgfSxcbiAgICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFRJVExFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgIGJlZ2luOiByZWdleC5vcHRpb25hbChOQU1FU1BBQ0VfUkUpICsgaGxqcy5JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9USVRMRSA9IHJlZ2V4Lm9wdGlvbmFsKE5BTUVTUEFDRV9SRSkgKyBobGpzLklERU5UX1JFICsgJ1xcXFxzKlxcXFwoJztcblxuICBjb25zdCBDX0tFWVdPUkRTID0gW1xuICAgIFwiYXNtXCIsXG4gICAgXCJhdXRvXCIsXG4gICAgXCJicmVha1wiLFxuICAgIFwiY2FzZVwiLFxuICAgIFwiY29udGludWVcIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImRvXCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJlbnVtXCIsXG4gICAgXCJleHRlcm5cIixcbiAgICBcImZvclwiLFxuICAgIFwiZm9ydHJhblwiLFxuICAgIFwiZ290b1wiLFxuICAgIFwiaWZcIixcbiAgICBcImlubGluZVwiLFxuICAgIFwicmVnaXN0ZXJcIixcbiAgICBcInJlc3RyaWN0XCIsXG4gICAgXCJyZXR1cm5cIixcbiAgICBcInNpemVvZlwiLFxuICAgIFwic3RydWN0XCIsXG4gICAgXCJzd2l0Y2hcIixcbiAgICBcInR5cGVkZWZcIixcbiAgICBcInVuaW9uXCIsXG4gICAgXCJ2b2xhdGlsZVwiLFxuICAgIFwid2hpbGVcIixcbiAgICBcIl9BbGlnbmFzXCIsXG4gICAgXCJfQWxpZ25vZlwiLFxuICAgIFwiX0F0b21pY1wiLFxuICAgIFwiX0dlbmVyaWNcIixcbiAgICBcIl9Ob3JldHVyblwiLFxuICAgIFwiX1N0YXRpY19hc3NlcnRcIixcbiAgICBcIl9UaHJlYWRfbG9jYWxcIixcbiAgICAvLyBhbGlhc2VzXG4gICAgXCJhbGlnbmFzXCIsXG4gICAgXCJhbGlnbm9mXCIsXG4gICAgXCJub3JldHVyblwiLFxuICAgIFwic3RhdGljX2Fzc2VydFwiLFxuICAgIFwidGhyZWFkX2xvY2FsXCIsXG4gICAgLy8gbm90IGEgQyBrZXl3b3JkIGJ1dCBpcywgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcywgdHJlYXRlZCBleGFjdGx5IGxpa2Ugb25lLlxuICAgIFwiX1ByYWdtYVwiXG4gIF07XG5cbiAgY29uc3QgQ19UWVBFUyA9IFtcbiAgICBcImZsb2F0XCIsXG4gICAgXCJkb3VibGVcIixcbiAgICBcInNpZ25lZFwiLFxuICAgIFwidW5zaWduZWRcIixcbiAgICBcImludFwiLFxuICAgIFwic2hvcnRcIixcbiAgICBcImxvbmdcIixcbiAgICBcImNoYXJcIixcbiAgICBcInZvaWRcIixcbiAgICBcIl9Cb29sXCIsXG4gICAgXCJfQ29tcGxleFwiLFxuICAgIFwiX0ltYWdpbmFyeVwiLFxuICAgIFwiX0RlY2ltYWwzMlwiLFxuICAgIFwiX0RlY2ltYWw2NFwiLFxuICAgIFwiX0RlY2ltYWwxMjhcIixcbiAgICAvLyBtb2RpZmllcnNcbiAgICBcImNvbnN0XCIsXG4gICAgXCJzdGF0aWNcIixcbiAgICAvLyBhbGlhc2VzXG4gICAgXCJjb21wbGV4XCIsXG4gICAgXCJib29sXCIsXG4gICAgXCJpbWFnaW5hcnlcIlxuICBdO1xuXG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6IENfS0VZV09SRFMsXG4gICAgdHlwZTogQ19UWVBFUyxcbiAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBOVUxMJyxcbiAgICAvLyBUT0RPOiBhcHBseSBoaW50aW5nIHdvcmsgc2ltaWxhciB0byB3aGF0IHdhcyBkb25lIGluIGNwcC5qc1xuICAgIGJ1aWx0X2luOiAnc3RkIHN0cmluZyB3c3RyaW5nIGNpbiBjb3V0IGNlcnIgY2xvZyBzdGRpbiBzdGRvdXQgc3RkZXJyIHN0cmluZ3N0cmVhbSBpc3RyaW5nc3RyZWFtIG9zdHJpbmdzdHJlYW0gJ1xuICAgICAgKyAnYXV0b19wdHIgZGVxdWUgbGlzdCBxdWV1ZSBzdGFjayB2ZWN0b3IgbWFwIHNldCBwYWlyIGJpdHNldCBtdWx0aXNldCBtdWx0aW1hcCB1bm9yZGVyZWRfc2V0ICdcbiAgICAgICsgJ3Vub3JkZXJlZF9tYXAgdW5vcmRlcmVkX211bHRpc2V0IHVub3JkZXJlZF9tdWx0aW1hcCBwcmlvcml0eV9xdWV1ZSBtYWtlX3BhaXIgYXJyYXkgc2hhcmVkX3B0ciBhYm9ydCB0ZXJtaW5hdGUgYWJzIGFjb3MgJ1xuICAgICAgKyAnYXNpbiBhdGFuMiBhdGFuIGNhbGxvYyBjZWlsIGNvc2ggY29zIGV4aXQgZXhwIGZhYnMgZmxvb3IgZm1vZCBmcHJpbnRmIGZwdXRzIGZyZWUgZnJleHAgJ1xuICAgICAgKyAnZnNjYW5mIGZ1dHVyZSBpc2FsbnVtIGlzYWxwaGEgaXNjbnRybCBpc2RpZ2l0IGlzZ3JhcGggaXNsb3dlciBpc3ByaW50IGlzcHVuY3QgaXNzcGFjZSBpc3VwcGVyICdcbiAgICAgICsgJ2lzeGRpZ2l0IHRvbG93ZXIgdG91cHBlciBsYWJzIGxkZXhwIGxvZzEwIGxvZyBtYWxsb2MgcmVhbGxvYyBtZW1jaHIgbWVtY21wIG1lbWNweSBtZW1zZXQgbW9kZiBwb3cgJ1xuICAgICAgKyAncHJpbnRmIHB1dGNoYXIgcHV0cyBzY2FuZiBzaW5oIHNpbiBzbnByaW50ZiBzcHJpbnRmIHNxcnQgc3NjYW5mIHN0cmNhdCBzdHJjaHIgc3RyY21wICdcbiAgICAgICsgJ3N0cmNweSBzdHJjc3BuIHN0cmxlbiBzdHJuY2F0IHN0cm5jbXAgc3RybmNweSBzdHJwYnJrIHN0cnJjaHIgc3Ryc3BuIHN0cnN0ciB0YW5oIHRhbiAnXG4gICAgICArICd2ZnByaW50ZiB2cHJpbnRmIHZzcHJpbnRmIGVuZGwgaW5pdGlhbGl6ZXJfbGlzdCB1bmlxdWVfcHRyJyxcbiAgfTtcblxuICBjb25zdCBFWFBSRVNTSU9OX0NPTlRBSU5TID0gW1xuICAgIFBSRVBST0NFU1NPUixcbiAgICBUWVBFUyxcbiAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgTlVNQkVSUyxcbiAgICBTVFJJTkdTXG4gIF07XG5cbiAgY29uc3QgRVhQUkVTU0lPTl9DT05URVhUID0ge1xuICAgIC8vIFRoaXMgbW9kZSBjb3ZlcnMgZXhwcmVzc2lvbiBjb250ZXh0IHdoZXJlIHdlIGNhbid0IGV4cGVjdCBhIGZ1bmN0aW9uXG4gICAgLy8gZGVmaW5pdGlvbiBhbmQgc2hvdWxkbid0IGhpZ2hsaWdodCBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2Ugb25lOlxuICAgIC8vIGByZXR1cm4gc29tZSgpYCwgYGVsc2UgaWYoKWAsIGAoeCpzdW0oMSwgMikpYFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvPS8sXG4gICAgICAgIGVuZDogLzsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICduZXcgdGhyb3cgcmV0dXJuIGVsc2UnLFxuICAgICAgICBlbmQ6IC87L1xuICAgICAgfVxuICAgIF0sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OX0NPTlRBSU5TLmNvbmNhdChbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBjb250YWluczogRVhQUkVTU0lPTl9DT05UQUlOUy5jb25jYXQoWyAnc2VsZicgXSksXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0pLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IEZVTkNUSU9OX0RFQ0xBUkFUSU9OID0ge1xuICAgIGJlZ2luOiAnKCcgKyBGVU5DVElPTl9UWVBFX1JFICsgJ1tcXFxcKiZcXFxcc10rKSsnICsgRlVOQ1RJT05fVElUTEUsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgZW5kOiAvW3s7PV0vLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC9bXlxcd1xcc1xcKiY6PD4uXS8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgLy8gdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGNvbmZ1c2VkIGFzIHRoZSBmdW5jdGlvbiB0aXRsZVxuICAgICAgICBiZWdpbjogREVDTFRZUEVfQVVUT19SRSxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBGVU5DVElPTl9USVRMRSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuaW5oZXJpdChUSVRMRV9NT0RFLCB7IGNsYXNzTmFtZTogXCJ0aXRsZS5mdW5jdGlvblwiIH0pIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIGFsbG93IGZvciBtdWx0aXBsZSBkZWNsYXJhdGlvbnMsIGUuZy46XG4gICAgICAvLyBleHRlcm4gdm9pZCBmKGludCksIGcoY2hhcik7XG4gICAgICB7XG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgbWF0Y2g6IC8sL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgU1RSSU5HUyxcbiAgICAgICAgICBOVU1CRVJTLFxuICAgICAgICAgIFRZUEVTLFxuICAgICAgICAgIC8vIENvdW50IG1hdGNoaW5nIHBhcmVudGhlc2VzLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIFNUUklOR1MsXG4gICAgICAgICAgICAgIE5VTUJFUlMsXG4gICAgICAgICAgICAgIFRZUEVTXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgVFlQRVMsXG4gICAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIFBSRVBST0NFU1NPUlxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwiQ1wiLFxuICAgIGFsaWFzZXM6IFsgJ2gnIF0sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIC8vIFVudGlsIGRpZmZlcmVudGlhdGlvbnMgYXJlIGFkZGVkIGJldHdlZW4gYGNgIGFuZCBgY3BwYCwgYGNgIHdpbGxcbiAgICAvLyBub3QgYmUgYXV0by1kZXRlY3RlZCB0byBhdm9pZCBhdXRvLWRldGVjdCBjb25mbGljdHMgYmV0d2VlbiBDIGFuZCBDKytcbiAgICBkaXNhYmxlQXV0b2RldGVjdDogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXS5jb25jYXQoXG4gICAgICBFWFBSRVNTSU9OX0NPTlRFWFQsXG4gICAgICBGVU5DVElPTl9ERUNMQVJBVElPTixcbiAgICAgIEVYUFJFU1NJT05fQ09OVEFJTlMsXG4gICAgICBbXG4gICAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJzo6JyxcbiAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZW51bSBjbGFzcyBzdHJ1Y3QgdW5pb24nLFxuICAgICAgICAgIGVuZDogL1t7Ozo8Pj1dLyxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgeyBiZWdpbktleXdvcmRzOiBcImZpbmFsIGNsYXNzIHN0cnVjdFwiIH0sXG4gICAgICAgICAgICBobGpzLlRJVExFX01PREVcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0pLFxuICAgIGV4cG9ydHM6IHtcbiAgICAgIHByZXByb2Nlc3NvcjogUFJFUFJPQ0VTU09SLFxuICAgICAgc3RyaW5nczogU1RSSU5HUyxcbiAgICAgIGtleXdvcmRzOiBLRVlXT1JEU1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjO1xuIiwiLypcbkxhbmd1YWdlOiBDKytcbkNhdGVnb3J5OiBjb21tb24sIHN5c3RlbVxuV2Vic2l0ZTogaHR0cHM6Ly9pc29jcHAub3JnXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gY3BwKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICAvLyBhZGRlZCBmb3IgaGlzdG9yaWMgcmVhc29ucyBiZWNhdXNlIGBobGpzLkNfTElORV9DT01NRU5UX01PREVgIGRvZXNcbiAgLy8gbm90IGluY2x1ZGUgc3VjaCBzdXBwb3J0IG5vciBjYW4gd2UgYmUgc3VyZSBhbGwgdGhlIGdyYW1tYXJzIGRlcGVuZGluZ1xuICAvLyBvbiBpdCB3b3VsZCBkZXNpcmUgdGhpcyBiZWhhdmlvclxuICBjb25zdCBDX0xJTkVfQ09NTUVOVF9NT0RFID0gaGxqcy5DT01NRU5UKCcvLycsICckJywgeyBjb250YWluczogWyB7IGJlZ2luOiAvXFxcXFxcbi8gfSBdIH0pO1xuICBjb25zdCBERUNMVFlQRV9BVVRPX1JFID0gJ2RlY2x0eXBlXFxcXChhdXRvXFxcXCknO1xuICBjb25zdCBOQU1FU1BBQ0VfUkUgPSAnW2EtekEtWl9dXFxcXHcqOjonO1xuICBjb25zdCBURU1QTEFURV9BUkdVTUVOVF9SRSA9ICc8W148Pl0rPic7XG4gIGNvbnN0IEZVTkNUSU9OX1RZUEVfUkUgPSAnKD8hc3RydWN0KSgnXG4gICAgKyBERUNMVFlQRV9BVVRPX1JFICsgJ3wnXG4gICAgKyByZWdleC5vcHRpb25hbChOQU1FU1BBQ0VfUkUpXG4gICAgKyAnW2EtekEtWl9dXFxcXHcqJyArIHJlZ2V4Lm9wdGlvbmFsKFRFTVBMQVRFX0FSR1VNRU5UX1JFKVxuICArICcpJztcblxuICBjb25zdCBDUFBfUFJJTUlUSVZFX1RZUEVTID0ge1xuICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgIGJlZ2luOiAnXFxcXGJbYS16XFxcXGRfXSpfdFxcXFxiJ1xuICB9O1xuXG4gIC8vIGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9sYW5ndWFnZS9lc2NhcGVcbiAgLy8gXFxcXCBcXHggXFx4RkYgXFx1MjgzNyBcXHUwMDMyMzc0NyBcXDM3NFxuICBjb25zdCBDSEFSQUNURVJfRVNDQVBFUyA9ICdcXFxcXFxcXCh4WzAtOUEtRmEtZl17Mn18dVswLTlBLUZhLWZdezQsOH18WzAtN117M318XFxcXFMpJztcbiAgY29uc3QgU1RSSU5HUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKHU4P3xVfEwpP1wiJyxcbiAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFV8TCk/XFwnKCcgKyBDSEFSQUNURVJfRVNDQVBFUyArICd8LiknLFxuICAgICAgICBlbmQ6ICdcXCcnLFxuICAgICAgICBpbGxlZ2FsOiAnLidcbiAgICAgIH0sXG4gICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHtcbiAgICAgICAgYmVnaW46IC8oPzp1OD98VXxMKT9SXCIoW14oKVxcXFwgXXswLDE2fSlcXCgvLFxuICAgICAgICBlbmQ6IC9cXCkoW14oKVxcXFwgXXswLDE2fSlcIi9cbiAgICAgIH0pXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFxiKDBiWzAxXFwnXSspJyB9LFxuICAgICAgeyBiZWdpbjogJygtPylcXFxcYihbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykoKGxsfExMfGx8TCkodXxVKT98KHV8VSkobGx8TEx8bHxMKT98ZnxGfGJ8QiknIH0sXG4gICAgICB7IGJlZ2luOiAnKC0/KShcXFxcYjBbeFhdW2EtZkEtRjAtOVxcJ10rfChcXFxcYltcXFxcZFxcJ10rKFxcXFwuW1xcXFxkXFwnXSopP3xcXFxcLltcXFxcZFxcJ10rKShbZUVdWy0rXT9bXFxcXGRcXCddKyk/KScgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgUFJFUFJPQ0VTU09SID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAvI1xccypbYS16XStcXGIvLFxuICAgIGVuZDogLyQvLFxuICAgIGtleXdvcmRzOiB7IGtleXdvcmQ6XG4gICAgICAgICdpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSAnXG4gICAgICAgICsgJ3ByYWdtYSBfUHJhZ21hIGlmZGVmIGlmbmRlZiBpbmNsdWRlJyB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxcXFxcbi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuaW5oZXJpdChTVFJJTkdTLCB7IGNsYXNzTmFtZTogJ3N0cmluZycgfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvPC4qPz4vXG4gICAgICB9LFxuICAgICAgQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgVElUTEVfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgYmVnaW46IHJlZ2V4Lm9wdGlvbmFsKE5BTUVTUEFDRV9SRSkgKyBobGpzLklERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IEZVTkNUSU9OX1RJVExFID0gcmVnZXgub3B0aW9uYWwoTkFNRVNQQUNFX1JFKSArIGhsanMuSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnO1xuXG4gIC8vIGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9rZXl3b3JkXG4gIGNvbnN0IFJFU0VSVkVEX0tFWVdPUkRTID0gW1xuICAgICdhbGlnbmFzJyxcbiAgICAnYWxpZ25vZicsXG4gICAgJ2FuZCcsXG4gICAgJ2FuZF9lcScsXG4gICAgJ2FzbScsXG4gICAgJ2F0b21pY19jYW5jZWwnLFxuICAgICdhdG9taWNfY29tbWl0JyxcbiAgICAnYXRvbWljX25vZXhjZXB0JyxcbiAgICAnYXV0bycsXG4gICAgJ2JpdGFuZCcsXG4gICAgJ2JpdG9yJyxcbiAgICAnYnJlYWsnLFxuICAgICdjYXNlJyxcbiAgICAnY2F0Y2gnLFxuICAgICdjbGFzcycsXG4gICAgJ2NvX2F3YWl0JyxcbiAgICAnY29fcmV0dXJuJyxcbiAgICAnY29feWllbGQnLFxuICAgICdjb21wbCcsXG4gICAgJ2NvbmNlcHQnLFxuICAgICdjb25zdF9jYXN0fDEwJyxcbiAgICAnY29uc3RldmFsJyxcbiAgICAnY29uc3RleHByJyxcbiAgICAnY29uc3Rpbml0JyxcbiAgICAnY29udGludWUnLFxuICAgICdkZWNsdHlwZScsXG4gICAgJ2RlZmF1bHQnLFxuICAgICdkZWxldGUnLFxuICAgICdkbycsXG4gICAgJ2R5bmFtaWNfY2FzdHwxMCcsXG4gICAgJ2Vsc2UnLFxuICAgICdlbnVtJyxcbiAgICAnZXhwbGljaXQnLFxuICAgICdleHBvcnQnLFxuICAgICdleHRlcm4nLFxuICAgICdmYWxzZScsXG4gICAgJ2ZpbmFsJyxcbiAgICAnZm9yJyxcbiAgICAnZnJpZW5kJyxcbiAgICAnZ290bycsXG4gICAgJ2lmJyxcbiAgICAnaW1wb3J0JyxcbiAgICAnaW5saW5lJyxcbiAgICAnbW9kdWxlJyxcbiAgICAnbXV0YWJsZScsXG4gICAgJ25hbWVzcGFjZScsXG4gICAgJ25ldycsXG4gICAgJ25vZXhjZXB0JyxcbiAgICAnbm90JyxcbiAgICAnbm90X2VxJyxcbiAgICAnbnVsbHB0cicsXG4gICAgJ29wZXJhdG9yJyxcbiAgICAnb3InLFxuICAgICdvcl9lcScsXG4gICAgJ292ZXJyaWRlJyxcbiAgICAncHJpdmF0ZScsXG4gICAgJ3Byb3RlY3RlZCcsXG4gICAgJ3B1YmxpYycsXG4gICAgJ3JlZmxleHByJyxcbiAgICAncmVnaXN0ZXInLFxuICAgICdyZWludGVycHJldF9jYXN0fDEwJyxcbiAgICAncmVxdWlyZXMnLFxuICAgICdyZXR1cm4nLFxuICAgICdzaXplb2YnLFxuICAgICdzdGF0aWNfYXNzZXJ0JyxcbiAgICAnc3RhdGljX2Nhc3R8MTAnLFxuICAgICdzdHJ1Y3QnLFxuICAgICdzd2l0Y2gnLFxuICAgICdzeW5jaHJvbml6ZWQnLFxuICAgICd0ZW1wbGF0ZScsXG4gICAgJ3RoaXMnLFxuICAgICd0aHJlYWRfbG9jYWwnLFxuICAgICd0aHJvdycsXG4gICAgJ3RyYW5zYWN0aW9uX3NhZmUnLFxuICAgICd0cmFuc2FjdGlvbl9zYWZlX2R5bmFtaWMnLFxuICAgICd0cnVlJyxcbiAgICAndHJ5JyxcbiAgICAndHlwZWRlZicsXG4gICAgJ3R5cGVpZCcsXG4gICAgJ3R5cGVuYW1lJyxcbiAgICAndW5pb24nLFxuICAgICd1c2luZycsXG4gICAgJ3ZpcnR1YWwnLFxuICAgICd2b2xhdGlsZScsXG4gICAgJ3doaWxlJyxcbiAgICAneG9yJyxcbiAgICAneG9yX2VxJ1xuICBdO1xuXG4gIC8vIGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9rZXl3b3JkXG4gIGNvbnN0IFJFU0VSVkVEX1RZUEVTID0gW1xuICAgICdib29sJyxcbiAgICAnY2hhcicsXG4gICAgJ2NoYXIxNl90JyxcbiAgICAnY2hhcjMyX3QnLFxuICAgICdjaGFyOF90JyxcbiAgICAnZG91YmxlJyxcbiAgICAnZmxvYXQnLFxuICAgICdpbnQnLFxuICAgICdsb25nJyxcbiAgICAnc2hvcnQnLFxuICAgICd2b2lkJyxcbiAgICAnd2NoYXJfdCcsXG4gICAgJ3Vuc2lnbmVkJyxcbiAgICAnc2lnbmVkJyxcbiAgICAnY29uc3QnLFxuICAgICdzdGF0aWMnXG4gIF07XG5cbiAgY29uc3QgVFlQRV9ISU5UUyA9IFtcbiAgICAnYW55JyxcbiAgICAnYXV0b19wdHInLFxuICAgICdiYXJyaWVyJyxcbiAgICAnYmluYXJ5X3NlbWFwaG9yZScsXG4gICAgJ2JpdHNldCcsXG4gICAgJ2NvbXBsZXgnLFxuICAgICdjb25kaXRpb25fdmFyaWFibGUnLFxuICAgICdjb25kaXRpb25fdmFyaWFibGVfYW55JyxcbiAgICAnY291bnRpbmdfc2VtYXBob3JlJyxcbiAgICAnZGVxdWUnLFxuICAgICdmYWxzZV90eXBlJyxcbiAgICAnZnV0dXJlJyxcbiAgICAnaW1hZ2luYXJ5JyxcbiAgICAnaW5pdGlhbGl6ZXJfbGlzdCcsXG4gICAgJ2lzdHJpbmdzdHJlYW0nLFxuICAgICdqdGhyZWFkJyxcbiAgICAnbGF0Y2gnLFxuICAgICdsb2NrX2d1YXJkJyxcbiAgICAnbXVsdGltYXAnLFxuICAgICdtdWx0aXNldCcsXG4gICAgJ211dGV4JyxcbiAgICAnb3B0aW9uYWwnLFxuICAgICdvc3RyaW5nc3RyZWFtJyxcbiAgICAncGFja2FnZWRfdGFzaycsXG4gICAgJ3BhaXInLFxuICAgICdwcm9taXNlJyxcbiAgICAncHJpb3JpdHlfcXVldWUnLFxuICAgICdxdWV1ZScsXG4gICAgJ3JlY3Vyc2l2ZV9tdXRleCcsXG4gICAgJ3JlY3Vyc2l2ZV90aW1lZF9tdXRleCcsXG4gICAgJ3Njb3BlZF9sb2NrJyxcbiAgICAnc2V0JyxcbiAgICAnc2hhcmVkX2Z1dHVyZScsXG4gICAgJ3NoYXJlZF9sb2NrJyxcbiAgICAnc2hhcmVkX211dGV4JyxcbiAgICAnc2hhcmVkX3RpbWVkX211dGV4JyxcbiAgICAnc2hhcmVkX3B0cicsXG4gICAgJ3N0YWNrJyxcbiAgICAnc3RyaW5nX3ZpZXcnLFxuICAgICdzdHJpbmdzdHJlYW0nLFxuICAgICd0aW1lZF9tdXRleCcsXG4gICAgJ3RocmVhZCcsXG4gICAgJ3RydWVfdHlwZScsXG4gICAgJ3R1cGxlJyxcbiAgICAndW5pcXVlX2xvY2snLFxuICAgICd1bmlxdWVfcHRyJyxcbiAgICAndW5vcmRlcmVkX21hcCcsXG4gICAgJ3Vub3JkZXJlZF9tdWx0aW1hcCcsXG4gICAgJ3Vub3JkZXJlZF9tdWx0aXNldCcsXG4gICAgJ3Vub3JkZXJlZF9zZXQnLFxuICAgICd2YXJpYW50JyxcbiAgICAndmVjdG9yJyxcbiAgICAnd2Vha19wdHInLFxuICAgICd3c3RyaW5nJyxcbiAgICAnd3N0cmluZ192aWV3J1xuICBdO1xuXG4gIGNvbnN0IEZVTkNUSU9OX0hJTlRTID0gW1xuICAgICdhYm9ydCcsXG4gICAgJ2FicycsXG4gICAgJ2Fjb3MnLFxuICAgICdhcHBseScsXG4gICAgJ2FzX2NvbnN0JyxcbiAgICAnYXNpbicsXG4gICAgJ2F0YW4nLFxuICAgICdhdGFuMicsXG4gICAgJ2NhbGxvYycsXG4gICAgJ2NlaWwnLFxuICAgICdjZXJyJyxcbiAgICAnY2luJyxcbiAgICAnY2xvZycsXG4gICAgJ2NvcycsXG4gICAgJ2Nvc2gnLFxuICAgICdjb3V0JyxcbiAgICAnZGVjbHZhbCcsXG4gICAgJ2VuZGwnLFxuICAgICdleGNoYW5nZScsXG4gICAgJ2V4aXQnLFxuICAgICdleHAnLFxuICAgICdmYWJzJyxcbiAgICAnZmxvb3InLFxuICAgICdmbW9kJyxcbiAgICAnZm9yd2FyZCcsXG4gICAgJ2ZwcmludGYnLFxuICAgICdmcHV0cycsXG4gICAgJ2ZyZWUnLFxuICAgICdmcmV4cCcsXG4gICAgJ2ZzY2FuZicsXG4gICAgJ2Z1dHVyZScsXG4gICAgJ2ludm9rZScsXG4gICAgJ2lzYWxudW0nLFxuICAgICdpc2FscGhhJyxcbiAgICAnaXNjbnRybCcsXG4gICAgJ2lzZGlnaXQnLFxuICAgICdpc2dyYXBoJyxcbiAgICAnaXNsb3dlcicsXG4gICAgJ2lzcHJpbnQnLFxuICAgICdpc3B1bmN0JyxcbiAgICAnaXNzcGFjZScsXG4gICAgJ2lzdXBwZXInLFxuICAgICdpc3hkaWdpdCcsXG4gICAgJ2xhYnMnLFxuICAgICdsYXVuZGVyJyxcbiAgICAnbGRleHAnLFxuICAgICdsb2cnLFxuICAgICdsb2cxMCcsXG4gICAgJ21ha2VfcGFpcicsXG4gICAgJ21ha2Vfc2hhcmVkJyxcbiAgICAnbWFrZV9zaGFyZWRfZm9yX292ZXJ3cml0ZScsXG4gICAgJ21ha2VfdHVwbGUnLFxuICAgICdtYWtlX3VuaXF1ZScsXG4gICAgJ21hbGxvYycsXG4gICAgJ21lbWNocicsXG4gICAgJ21lbWNtcCcsXG4gICAgJ21lbWNweScsXG4gICAgJ21lbXNldCcsXG4gICAgJ21vZGYnLFxuICAgICdtb3ZlJyxcbiAgICAncG93JyxcbiAgICAncHJpbnRmJyxcbiAgICAncHV0Y2hhcicsXG4gICAgJ3B1dHMnLFxuICAgICdyZWFsbG9jJyxcbiAgICAnc2NhbmYnLFxuICAgICdzaW4nLFxuICAgICdzaW5oJyxcbiAgICAnc25wcmludGYnLFxuICAgICdzcHJpbnRmJyxcbiAgICAnc3FydCcsXG4gICAgJ3NzY2FuZicsXG4gICAgJ3N0ZCcsXG4gICAgJ3N0ZGVycicsXG4gICAgJ3N0ZGluJyxcbiAgICAnc3Rkb3V0JyxcbiAgICAnc3RyY2F0JyxcbiAgICAnc3RyY2hyJyxcbiAgICAnc3RyY21wJyxcbiAgICAnc3RyY3B5JyxcbiAgICAnc3RyY3NwbicsXG4gICAgJ3N0cmxlbicsXG4gICAgJ3N0cm5jYXQnLFxuICAgICdzdHJuY21wJyxcbiAgICAnc3RybmNweScsXG4gICAgJ3N0cnBicmsnLFxuICAgICdzdHJyY2hyJyxcbiAgICAnc3Ryc3BuJyxcbiAgICAnc3Ryc3RyJyxcbiAgICAnc3dhcCcsXG4gICAgJ3RhbicsXG4gICAgJ3RhbmgnLFxuICAgICd0ZXJtaW5hdGUnLFxuICAgICd0b191bmRlcmx5aW5nJyxcbiAgICAndG9sb3dlcicsXG4gICAgJ3RvdXBwZXInLFxuICAgICd2ZnByaW50ZicsXG4gICAgJ3Zpc2l0JyxcbiAgICAndnByaW50ZicsXG4gICAgJ3ZzcHJpbnRmJ1xuICBdO1xuXG4gIGNvbnN0IExJVEVSQUxTID0gW1xuICAgICdOVUxMJyxcbiAgICAnZmFsc2UnLFxuICAgICdudWxsb3B0JyxcbiAgICAnbnVsbHB0cicsXG4gICAgJ3RydWUnXG4gIF07XG5cbiAgLy8gaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2tleXdvcmRcbiAgY29uc3QgQlVJTFRfSU4gPSBbICdfUHJhZ21hJyBdO1xuXG4gIGNvbnN0IENQUF9LRVlXT1JEUyA9IHtcbiAgICB0eXBlOiBSRVNFUlZFRF9UWVBFUyxcbiAgICBrZXl3b3JkOiBSRVNFUlZFRF9LRVlXT1JEUyxcbiAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICBidWlsdF9pbjogQlVJTFRfSU4sXG4gICAgX3R5cGVfaGludHM6IFRZUEVfSElOVFNcbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9ESVNQQVRDSCA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbi5kaXNwYXRjaCcsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAvLyBPbmx5IGZvciByZWxldmFuY2UsIG5vdCBoaWdobGlnaHRpbmcuXG4gICAgICBfaGludDogRlVOQ1RJT05fSElOVFMgfSxcbiAgICBiZWdpbjogcmVnZXguY29uY2F0KFxuICAgICAgL1xcYi8sXG4gICAgICAvKD8hZGVjbHR5cGUpLyxcbiAgICAgIC8oPyFpZikvLFxuICAgICAgLyg/IWZvcikvLFxuICAgICAgLyg/IXN3aXRjaCkvLFxuICAgICAgLyg/IXdoaWxlKS8sXG4gICAgICBobGpzLklERU5UX1JFLFxuICAgICAgcmVnZXgubG9va2FoZWFkKC8oPFtePD5dKz58KVxccypcXCgvKSlcbiAgfTtcblxuICBjb25zdCBFWFBSRVNTSU9OX0NPTlRBSU5TID0gW1xuICAgIEZVTkNUSU9OX0RJU1BBVENILFxuICAgIFBSRVBST0NFU1NPUixcbiAgICBDUFBfUFJJTUlUSVZFX1RZUEVTLFxuICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBOVU1CRVJTLFxuICAgIFNUUklOR1NcbiAgXTtcblxuICBjb25zdCBFWFBSRVNTSU9OX0NPTlRFWFQgPSB7XG4gICAgLy8gVGhpcyBtb2RlIGNvdmVycyBleHByZXNzaW9uIGNvbnRleHQgd2hlcmUgd2UgY2FuJ3QgZXhwZWN0IGEgZnVuY3Rpb25cbiAgICAvLyBkZWZpbml0aW9uIGFuZCBzaG91bGRuJ3QgaGlnaGxpZ2h0IGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZSBvbmU6XG4gICAgLy8gYHJldHVybiBzb21lKClgLCBgZWxzZSBpZigpYCwgYCh4KnN1bSgxLCAyKSlgXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC89LyxcbiAgICAgICAgZW5kOiAvOy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyB0aHJvdyByZXR1cm4gZWxzZScsXG4gICAgICAgIGVuZDogLzsvXG4gICAgICB9XG4gICAgXSxcbiAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OX0NPTlRBSU5TLmNvbmNhdChbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IEVYUFJFU1NJT05fQ09OVEFJTlMuY29uY2F0KFsgJ3NlbGYnIF0pLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdKSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9ERUNMQVJBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46ICcoJyArIEZVTkNUSU9OX1RZUEVfUkUgKyAnW1xcXFwqJlxcXFxzXSspKycgKyBGVU5DVElPTl9USVRMRSxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBlbmQ6IC9bezs9XS8sXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC9bXlxcd1xcc1xcKiY6PD4uXS8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgLy8gdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGNvbmZ1c2VkIGFzIHRoZSBmdW5jdGlvbiB0aXRsZVxuICAgICAgICBiZWdpbjogREVDTFRZUEVfQVVUT19SRSxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogRlVOQ1RJT05fVElUTEUsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogWyBUSVRMRV9NT0RFIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIG5lZWRlZCBiZWNhdXNlIHdlIGRvIG5vdCBoYXZlIGxvb2stYmVoaW5kIG9uIHRoZSBiZWxvdyBydWxlXG4gICAgICAvLyB0byBwcmV2ZW50IGl0IGZyb20gZ3JhYmJpbmcgdGhlIGZpbmFsIDogaW4gYSA6OiBwYWlyXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvOjovLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBpbml0aWFsaXplcnNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC86LyxcbiAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgU1RSSU5HUyxcbiAgICAgICAgICBOVU1CRVJTXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBhbGxvdyBmb3IgbXVsdGlwbGUgZGVjbGFyYXRpb25zLCBlLmcuOlxuICAgICAgLy8gZXh0ZXJuIHZvaWQgZihpbnQpLCBnKGNoYXIpO1xuICAgICAge1xuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIG1hdGNoOiAvLC9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgIE5VTUJFUlMsXG4gICAgICAgICAgQ1BQX1BSSU1JVElWRV9UWVBFUyxcbiAgICAgICAgICAvLyBDb3VudCBtYXRjaGluZyBwYXJlbnRoZXNlcy5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgICAgQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgU1RSSU5HUyxcbiAgICAgICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICAgICAgQ1BQX1BSSU1JVElWRV9UWVBFU1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIENQUF9QUklNSVRJVkVfVFlQRVMsXG4gICAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIFBSRVBST0NFU1NPUlxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdDKysnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdjYycsXG4gICAgICAnYysrJyxcbiAgICAgICdoKysnLFxuICAgICAgJ2hwcCcsXG4gICAgICAnaGgnLFxuICAgICAgJ2h4eCcsXG4gICAgICAnY3h4J1xuICAgIF0sXG4gICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNsYXNzTmFtZUFsaWFzZXM6IHsgJ2Z1bmN0aW9uLmRpc3BhdGNoJzogJ2J1aWx0X2luJyB9LFxuICAgIGNvbnRhaW5zOiBbXS5jb25jYXQoXG4gICAgICBFWFBSRVNTSU9OX0NPTlRFWFQsXG4gICAgICBGVU5DVElPTl9ERUNMQVJBVElPTixcbiAgICAgIEZVTkNUSU9OX0RJU1BBVENILFxuICAgICAgRVhQUkVTU0lPTl9DT05UQUlOUyxcbiAgICAgIFtcbiAgICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAgICB7IC8vIGNvbnRhaW5lcnM6IGllLCBgdmVjdG9yIDxpbnQ+IHJvb21zICg5KTtgXG4gICAgICAgICAgYmVnaW46ICdcXFxcYihkZXF1ZXxsaXN0fHF1ZXVlfHByaW9yaXR5X3F1ZXVlfHBhaXJ8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5fHR1cGxlfG9wdGlvbmFsfHZhcmlhbnR8ZnVuY3Rpb24pXFxcXHMqPCg/ITwpJyxcbiAgICAgICAgICBlbmQ6ICc+JyxcbiAgICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICBDUFBfUFJJTUlUSVZFX1RZUEVTXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnOjonLFxuICAgICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgICAvLyBleHRyYSBjb21wbGV4aXR5IHRvIGRlYWwgd2l0aCBgZW51bSBjbGFzc2AgYW5kIGBlbnVtIHN0cnVjdGBcbiAgICAgICAgICAgIC9cXGIoPzplbnVtKD86XFxzKyg/OmNsYXNzfHN0cnVjdCkpP3xjbGFzc3xzdHJ1Y3R8dW5pb24pLyxcbiAgICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICAgIC9cXHcrL1xuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3NOYW1lOiB7XG4gICAgICAgICAgICAxOiAna2V5d29yZCcsXG4gICAgICAgICAgICAzOiAndGl0bGUuY2xhc3MnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNwcDtcbiIsIi8qXG5MYW5ndWFnZTogQyNcbkF1dGhvcjogSmFzb24gRGlhbW9uZCA8amFzb25AZGlhbW9uZC5uYW1lPlxuQ29udHJpYnV0b3I6IE5pY29sYXMgTExPQkVSQSA8bmxsb2JlcmFAZ21haWwuY29tPiwgUGlldGVyIFZhbnRvcnJlIDxwaWV0ZXJ2YW50b3JyZUBnbWFpbC5jb20+LCBEYXZpZCBQaW5lIDxkYXZpZC5waW5lQG1pY3Jvc29mdC5jb20+XG5XZWJzaXRlOiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9kb3RuZXQvY3NoYXJwL1xuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGNzaGFycChobGpzKSB7XG4gIGNvbnN0IEJVSUxUX0lOX0tFWVdPUkRTID0gW1xuICAgICdib29sJyxcbiAgICAnYnl0ZScsXG4gICAgJ2NoYXInLFxuICAgICdkZWNpbWFsJyxcbiAgICAnZGVsZWdhdGUnLFxuICAgICdkb3VibGUnLFxuICAgICdkeW5hbWljJyxcbiAgICAnZW51bScsXG4gICAgJ2Zsb2F0JyxcbiAgICAnaW50JyxcbiAgICAnbG9uZycsXG4gICAgJ25pbnQnLFxuICAgICdudWludCcsXG4gICAgJ29iamVjdCcsXG4gICAgJ3NieXRlJyxcbiAgICAnc2hvcnQnLFxuICAgICdzdHJpbmcnLFxuICAgICd1bG9uZycsXG4gICAgJ3VpbnQnLFxuICAgICd1c2hvcnQnXG4gIF07XG4gIGNvbnN0IEZVTkNUSU9OX01PRElGSUVSUyA9IFtcbiAgICAncHVibGljJyxcbiAgICAncHJpdmF0ZScsXG4gICAgJ3Byb3RlY3RlZCcsXG4gICAgJ3N0YXRpYycsXG4gICAgJ2ludGVybmFsJyxcbiAgICAncHJvdGVjdGVkJyxcbiAgICAnYWJzdHJhY3QnLFxuICAgICdhc3luYycsXG4gICAgJ2V4dGVybicsXG4gICAgJ292ZXJyaWRlJyxcbiAgICAndW5zYWZlJyxcbiAgICAndmlydHVhbCcsXG4gICAgJ25ldycsXG4gICAgJ3NlYWxlZCcsXG4gICAgJ3BhcnRpYWwnXG4gIF07XG4gIGNvbnN0IExJVEVSQUxfS0VZV09SRFMgPSBbXG4gICAgJ2RlZmF1bHQnLFxuICAgICdmYWxzZScsXG4gICAgJ251bGwnLFxuICAgICd0cnVlJ1xuICBdO1xuICBjb25zdCBOT1JNQUxfS0VZV09SRFMgPSBbXG4gICAgJ2Fic3RyYWN0JyxcbiAgICAnYXMnLFxuICAgICdiYXNlJyxcbiAgICAnYnJlYWsnLFxuICAgICdjYXNlJyxcbiAgICAnY2F0Y2gnLFxuICAgICdjbGFzcycsXG4gICAgJ2NvbnN0JyxcbiAgICAnY29udGludWUnLFxuICAgICdkbycsXG4gICAgJ2Vsc2UnLFxuICAgICdldmVudCcsXG4gICAgJ2V4cGxpY2l0JyxcbiAgICAnZXh0ZXJuJyxcbiAgICAnZmluYWxseScsXG4gICAgJ2ZpeGVkJyxcbiAgICAnZm9yJyxcbiAgICAnZm9yZWFjaCcsXG4gICAgJ2dvdG8nLFxuICAgICdpZicsXG4gICAgJ2ltcGxpY2l0JyxcbiAgICAnaW4nLFxuICAgICdpbnRlcmZhY2UnLFxuICAgICdpbnRlcm5hbCcsXG4gICAgJ2lzJyxcbiAgICAnbG9jaycsXG4gICAgJ25hbWVzcGFjZScsXG4gICAgJ25ldycsXG4gICAgJ29wZXJhdG9yJyxcbiAgICAnb3V0JyxcbiAgICAnb3ZlcnJpZGUnLFxuICAgICdwYXJhbXMnLFxuICAgICdwcml2YXRlJyxcbiAgICAncHJvdGVjdGVkJyxcbiAgICAncHVibGljJyxcbiAgICAncmVhZG9ubHknLFxuICAgICdyZWNvcmQnLFxuICAgICdyZWYnLFxuICAgICdyZXR1cm4nLFxuICAgICdzY29wZWQnLFxuICAgICdzZWFsZWQnLFxuICAgICdzaXplb2YnLFxuICAgICdzdGFja2FsbG9jJyxcbiAgICAnc3RhdGljJyxcbiAgICAnc3RydWN0JyxcbiAgICAnc3dpdGNoJyxcbiAgICAndGhpcycsXG4gICAgJ3Rocm93JyxcbiAgICAndHJ5JyxcbiAgICAndHlwZW9mJyxcbiAgICAndW5jaGVja2VkJyxcbiAgICAndW5zYWZlJyxcbiAgICAndXNpbmcnLFxuICAgICd2aXJ0dWFsJyxcbiAgICAndm9pZCcsXG4gICAgJ3ZvbGF0aWxlJyxcbiAgICAnd2hpbGUnXG4gIF07XG4gIGNvbnN0IENPTlRFWFRVQUxfS0VZV09SRFMgPSBbXG4gICAgJ2FkZCcsXG4gICAgJ2FsaWFzJyxcbiAgICAnYW5kJyxcbiAgICAnYXNjZW5kaW5nJyxcbiAgICAnYXN5bmMnLFxuICAgICdhd2FpdCcsXG4gICAgJ2J5JyxcbiAgICAnZGVzY2VuZGluZycsXG4gICAgJ2VxdWFscycsXG4gICAgJ2Zyb20nLFxuICAgICdnZXQnLFxuICAgICdnbG9iYWwnLFxuICAgICdncm91cCcsXG4gICAgJ2luaXQnLFxuICAgICdpbnRvJyxcbiAgICAnam9pbicsXG4gICAgJ2xldCcsXG4gICAgJ25hbWVvZicsXG4gICAgJ25vdCcsXG4gICAgJ25vdG51bGwnLFxuICAgICdvbicsXG4gICAgJ29yJyxcbiAgICAnb3JkZXJieScsXG4gICAgJ3BhcnRpYWwnLFxuICAgICdyZW1vdmUnLFxuICAgICdzZWxlY3QnLFxuICAgICdzZXQnLFxuICAgICd1bm1hbmFnZWQnLFxuICAgICd2YWx1ZXwwJyxcbiAgICAndmFyJyxcbiAgICAnd2hlbicsXG4gICAgJ3doZXJlJyxcbiAgICAnd2l0aCcsXG4gICAgJ3lpZWxkJ1xuICBdO1xuXG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6IE5PUk1BTF9LRVlXT1JEUy5jb25jYXQoQ09OVEVYVFVBTF9LRVlXT1JEUyksXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOX0tFWVdPUkRTLFxuICAgIGxpdGVyYWw6IExJVEVSQUxfS0VZV09SRFNcbiAgfTtcbiAgY29uc3QgVElUTEVfTU9ERSA9IGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHsgYmVnaW46ICdbYS16QS1aXShcXFxcLj9cXFxcdykqJyB9KTtcbiAgY29uc3QgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnXFxcXGIoMGJbMDFcXCddKyknIH0sXG4gICAgICB7IGJlZ2luOiAnKC0/KVxcXFxiKFtcXFxcZFxcJ10rKFxcXFwuW1xcXFxkXFwnXSopP3xcXFxcLltcXFxcZFxcJ10rKSh1fFV8bHxMfHVsfFVMfGZ8RnxifEIpJyB9LFxuICAgICAgeyBiZWdpbjogJygtPykoXFxcXGIwW3hYXVthLWZBLUYwLTlcXCddK3woXFxcXGJbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykoW2VFXVstK10/W1xcXFxkXFwnXSspPyknIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBWRVJCQVRJTV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ0BcIicsXG4gICAgZW5kOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbIHsgYmVnaW46ICdcIlwiJyB9IF1cbiAgfTtcbiAgY29uc3QgVkVSQkFUSU1fU1RSSU5HX05PX0xGID0gaGxqcy5pbmhlcml0KFZFUkJBVElNX1NUUklORywgeyBpbGxlZ2FsOiAvXFxuLyB9KTtcbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEU1xuICB9O1xuICBjb25zdCBTVUJTVF9OT19MRiA9IGhsanMuaW5oZXJpdChTVUJTVCwgeyBpbGxlZ2FsOiAvXFxuLyB9KTtcbiAgY29uc3QgSU5URVJQT0xBVEVEX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXFwkXCIvLFxuICAgIGVuZDogJ1wiJyxcbiAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICBjb250YWluczogW1xuICAgICAgeyBiZWdpbjogL1xce1xcey8gfSxcbiAgICAgIHsgYmVnaW46IC9cXH1cXH0vIH0sXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBTVUJTVF9OT19MRlxuICAgIF1cbiAgfTtcbiAgY29uc3QgSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXFwkQFwiLyxcbiAgICBlbmQ6ICdcIicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgYmVnaW46IC9cXHtcXHsvIH0sXG4gICAgICB7IGJlZ2luOiAvXFx9XFx9LyB9LFxuICAgICAgeyBiZWdpbjogJ1wiXCInIH0sXG4gICAgICBTVUJTVFxuICAgIF1cbiAgfTtcbiAgY29uc3QgSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklOR19OT19MRiA9IGhsanMuaW5oZXJpdChJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HLCB7XG4gICAgaWxsZWdhbDogL1xcbi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgYmVnaW46IC9cXHtcXHsvIH0sXG4gICAgICB7IGJlZ2luOiAvXFx9XFx9LyB9LFxuICAgICAgeyBiZWdpbjogJ1wiXCInIH0sXG4gICAgICBTVUJTVF9OT19MRlxuICAgIF1cbiAgfSk7XG4gIFNVQlNULmNvbnRhaW5zID0gW1xuICAgIElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkcsXG4gICAgSU5URVJQT0xBVEVEX1NUUklORyxcbiAgICBWRVJCQVRJTV9TVFJJTkcsXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgTlVNQkVSUyxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gIF07XG4gIFNVQlNUX05PX0xGLmNvbnRhaW5zID0gW1xuICAgIElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkdfTk9fTEYsXG4gICAgSU5URVJQT0xBVEVEX1NUUklORyxcbiAgICBWRVJCQVRJTV9TVFJJTkdfTk9fTEYsXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgTlVNQkVSUyxcbiAgICBobGpzLmluaGVyaXQoaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSwgeyBpbGxlZ2FsOiAvXFxuLyB9KVxuICBdO1xuICBjb25zdCBTVFJJTkcgPSB7IHZhcmlhbnRzOiBbXG4gICAgSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklORyxcbiAgICBJTlRFUlBPTEFURURfU1RSSU5HLFxuICAgIFZFUkJBVElNX1NUUklORyxcbiAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICBdIH07XG5cbiAgY29uc3QgR0VORVJJQ19NT0RJRklFUiA9IHtcbiAgICBiZWdpbjogXCI8XCIsXG4gICAgZW5kOiBcIj5cIixcbiAgICBjb250YWluczogW1xuICAgICAgeyBiZWdpbktleXdvcmRzOiBcImluIG91dFwiIH0sXG4gICAgICBUSVRMRV9NT0RFXG4gICAgXVxuICB9O1xuICBjb25zdCBUWVBFX0lERU5UX1JFID0gaGxqcy5JREVOVF9SRSArICcoPCcgKyBobGpzLklERU5UX1JFICsgJyhcXFxccyosXFxcXHMqJyArIGhsanMuSURFTlRfUkUgKyAnKSo+KT8oXFxcXFtcXFxcXSk/JztcbiAgY29uc3QgQVRfSURFTlRJRklFUiA9IHtcbiAgICAvLyBwcmV2ZW50cyBleHByZXNzaW9ucyBsaWtlIGBAY2xhc3NgIGZyb20gaW5jb3JyZWN0IGZsYWdnaW5nXG4gICAgLy8gYGNsYXNzYCBhcyBhIGtleXdvcmRcbiAgICBiZWdpbjogXCJAXCIgKyBobGpzLklERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0MjJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnY3MnLFxuICAgICAgJ2MjJ1xuICAgIF0sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC86Oi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJy8vLycsXG4gICAgICAgICckJyxcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYmVnaW46ICcvLy8nLFxuICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7IGJlZ2luOiAnPCEtLXwtLT4nIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYmVnaW46ICc8Lz8nLFxuICAgICAgICAgICAgICAgICAgZW5kOiAnPidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJyxcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7IGtleXdvcmQ6ICdpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSByZWdpb24gZW5kcmVnaW9uIHByYWdtYSBjaGVja3N1bScgfVxuICAgICAgfSxcbiAgICAgIFNUUklORyxcbiAgICAgIE5VTUJFUlMsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgaWxsZWdhbDogL1teXFxzOixdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7IGJlZ2luS2V5d29yZHM6IFwid2hlcmUgY2xhc3NcIiB9LFxuICAgICAgICAgIFRJVExFX01PREUsXG4gICAgICAgICAgR0VORVJJQ19NT0RJRklFUixcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbmFtZXNwYWNlJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBlbmQ6IC9bezs9XS8sXG4gICAgICAgIGlsbGVnYWw6IC9bXlxcczpdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBUSVRMRV9NT0RFLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdyZWNvcmQnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgaWxsZWdhbDogL1teXFxzOl0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFRJVExFX01PREUsXG4gICAgICAgICAgR0VORVJJQ19NT0RJRklFUixcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBbQXR0cmlidXRlcyhcIlwiKV1cbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKlxcXFxbKD89W1xcXFx3XSknLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46IC9cIi8sXG4gICAgICAgICAgICBlbmQ6IC9cIi9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEV4cHJlc3Npb24ga2V5d29yZHMgcHJldmVudCAna2V5d29yZCBOYW1lKC4uLiknIGZyb20gYmVpbmdcbiAgICAgICAgLy8gcmVjb2duaXplZCBhcyBhIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyByZXR1cm4gdGhyb3cgYXdhaXQgZWxzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJygnICsgVFlQRV9JREVOVF9SRSArICdcXFxccyspKycgKyBobGpzLklERU5UX1JFICsgJ1xcXFxzKig8W149XSs+XFxcXHMqKT9cXFxcKCcsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBlbmQ6IC9cXHMqW3s7PV0vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgLy8gcHJldmVudHMgdGhlc2UgZnJvbSBiZWluZyBoaWdobGlnaHRlZCBgdGl0bGVgXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogRlVOQ1RJT05fTU9ESUZJRVJTLmpvaW4oXCIgXCIpLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICdcXFxccyooPFtePV0rPlxcXFxzKik/XFxcXCgnLFxuICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICAgICAgICAgIEdFTkVSSUNfTU9ESUZJRVJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgbWF0Y2g6IC9cXChcXCkvIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgICAgICBOVU1CRVJTLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgQVRfSURFTlRJRklFUlxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjc2hhcnA7XG4iLCJjb25zdCBNT0RFUyA9IChobGpzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgSU1QT1JUQU5UOiB7XG4gICAgICBzY29wZTogJ21ldGEnLFxuICAgICAgYmVnaW46ICchaW1wb3J0YW50J1xuICAgIH0sXG4gICAgQkxPQ0tfQ09NTUVOVDogaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBIRVhDT0xPUjoge1xuICAgICAgc2NvcGU6ICdudW1iZXInLFxuICAgICAgYmVnaW46IC8jKChbMC05YS1mQS1GXXszLDR9KXwoKFswLTlhLWZBLUZdezJ9KXszLDR9KSlcXGIvXG4gICAgfSxcbiAgICBGVU5DVElPTl9ESVNQQVRDSDoge1xuICAgICAgY2xhc3NOYW1lOiBcImJ1aWx0X2luXCIsXG4gICAgICBiZWdpbjogL1tcXHctXSsoPz1cXCgpL1xuICAgIH0sXG4gICAgQVRUUklCVVRFX1NFTEVDVE9SX01PREU6IHtcbiAgICAgIHNjb3BlOiAnc2VsZWN0b3ItYXR0cicsXG4gICAgICBiZWdpbjogL1xcWy8sXG4gICAgICBlbmQ6IC9cXF0vLFxuICAgICAgaWxsZWdhbDogJyQnLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICBdXG4gICAgfSxcbiAgICBDU1NfTlVNQkVSX01PREU6IHtcbiAgICAgIHNjb3BlOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRSArICcoJyArXG4gICAgICAgICclfGVtfGV4fGNofHJlbScgK1xuICAgICAgICAnfHZ3fHZofHZtaW58dm1heCcgK1xuICAgICAgICAnfGNtfG1tfGlufHB0fHBjfHB4JyArXG4gICAgICAgICd8ZGVnfGdyYWR8cmFkfHR1cm4nICtcbiAgICAgICAgJ3xzfG1zJyArXG4gICAgICAgICd8SHp8a0h6JyArXG4gICAgICAgICd8ZHBpfGRwY218ZHBweCcgK1xuICAgICAgICAnKT8nLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICBDU1NfVkFSSUFCTEU6IHtcbiAgICAgIGNsYXNzTmFtZTogXCJhdHRyXCIsXG4gICAgICBiZWdpbjogLy0tW0EtWmEtel1bQS1aYS16MC05Xy1dKi9cbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBUQUdTID0gW1xuICAnYScsXG4gICdhYmJyJyxcbiAgJ2FkZHJlc3MnLFxuICAnYXJ0aWNsZScsXG4gICdhc2lkZScsXG4gICdhdWRpbycsXG4gICdiJyxcbiAgJ2Jsb2NrcXVvdGUnLFxuICAnYm9keScsXG4gICdidXR0b24nLFxuICAnY2FudmFzJyxcbiAgJ2NhcHRpb24nLFxuICAnY2l0ZScsXG4gICdjb2RlJyxcbiAgJ2RkJyxcbiAgJ2RlbCcsXG4gICdkZXRhaWxzJyxcbiAgJ2RmbicsXG4gICdkaXYnLFxuICAnZGwnLFxuICAnZHQnLFxuICAnZW0nLFxuICAnZmllbGRzZXQnLFxuICAnZmlnY2FwdGlvbicsXG4gICdmaWd1cmUnLFxuICAnZm9vdGVyJyxcbiAgJ2Zvcm0nLFxuICAnaDEnLFxuICAnaDInLFxuICAnaDMnLFxuICAnaDQnLFxuICAnaDUnLFxuICAnaDYnLFxuICAnaGVhZGVyJyxcbiAgJ2hncm91cCcsXG4gICdodG1sJyxcbiAgJ2knLFxuICAnaWZyYW1lJyxcbiAgJ2ltZycsXG4gICdpbnB1dCcsXG4gICdpbnMnLFxuICAna2JkJyxcbiAgJ2xhYmVsJyxcbiAgJ2xlZ2VuZCcsXG4gICdsaScsXG4gICdtYWluJyxcbiAgJ21hcmsnLFxuICAnbWVudScsXG4gICduYXYnLFxuICAnb2JqZWN0JyxcbiAgJ29sJyxcbiAgJ3AnLFxuICAncScsXG4gICdxdW90ZScsXG4gICdzYW1wJyxcbiAgJ3NlY3Rpb24nLFxuICAnc3BhbicsXG4gICdzdHJvbmcnLFxuICAnc3VtbWFyeScsXG4gICdzdXAnLFxuICAndGFibGUnLFxuICAndGJvZHknLFxuICAndGQnLFxuICAndGV4dGFyZWEnLFxuICAndGZvb3QnLFxuICAndGgnLFxuICAndGhlYWQnLFxuICAndGltZScsXG4gICd0cicsXG4gICd1bCcsXG4gICd2YXInLFxuICAndmlkZW8nXG5dO1xuXG5jb25zdCBNRURJQV9GRUFUVVJFUyA9IFtcbiAgJ2FueS1ob3ZlcicsXG4gICdhbnktcG9pbnRlcicsXG4gICdhc3BlY3QtcmF0aW8nLFxuICAnY29sb3InLFxuICAnY29sb3ItZ2FtdXQnLFxuICAnY29sb3ItaW5kZXgnLFxuICAnZGV2aWNlLWFzcGVjdC1yYXRpbycsXG4gICdkZXZpY2UtaGVpZ2h0JyxcbiAgJ2RldmljZS13aWR0aCcsXG4gICdkaXNwbGF5LW1vZGUnLFxuICAnZm9yY2VkLWNvbG9ycycsXG4gICdncmlkJyxcbiAgJ2hlaWdodCcsXG4gICdob3ZlcicsXG4gICdpbnZlcnRlZC1jb2xvcnMnLFxuICAnbW9ub2Nocm9tZScsXG4gICdvcmllbnRhdGlvbicsXG4gICdvdmVyZmxvdy1ibG9jaycsXG4gICdvdmVyZmxvdy1pbmxpbmUnLFxuICAncG9pbnRlcicsXG4gICdwcmVmZXJzLWNvbG9yLXNjaGVtZScsXG4gICdwcmVmZXJzLWNvbnRyYXN0JyxcbiAgJ3ByZWZlcnMtcmVkdWNlZC1tb3Rpb24nLFxuICAncHJlZmVycy1yZWR1Y2VkLXRyYW5zcGFyZW5jeScsXG4gICdyZXNvbHV0aW9uJyxcbiAgJ3NjYW4nLFxuICAnc2NyaXB0aW5nJyxcbiAgJ3VwZGF0ZScsXG4gICd3aWR0aCcsXG4gIC8vIFRPRE86IGZpbmQgYSBiZXR0ZXIgc29sdXRpb24/XG4gICdtaW4td2lkdGgnLFxuICAnbWF4LXdpZHRoJyxcbiAgJ21pbi1oZWlnaHQnLFxuICAnbWF4LWhlaWdodCdcbl07XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Qc2V1ZG8tY2xhc3Nlc1xuY29uc3QgUFNFVURPX0NMQVNTRVMgPSBbXG4gICdhY3RpdmUnLFxuICAnYW55LWxpbmsnLFxuICAnYmxhbmsnLFxuICAnY2hlY2tlZCcsXG4gICdjdXJyZW50JyxcbiAgJ2RlZmF1bHQnLFxuICAnZGVmaW5lZCcsXG4gICdkaXInLCAvLyBkaXIoKVxuICAnZGlzYWJsZWQnLFxuICAnZHJvcCcsXG4gICdlbXB0eScsXG4gICdlbmFibGVkJyxcbiAgJ2ZpcnN0JyxcbiAgJ2ZpcnN0LWNoaWxkJyxcbiAgJ2ZpcnN0LW9mLXR5cGUnLFxuICAnZnVsbHNjcmVlbicsXG4gICdmdXR1cmUnLFxuICAnZm9jdXMnLFxuICAnZm9jdXMtdmlzaWJsZScsXG4gICdmb2N1cy13aXRoaW4nLFxuICAnaGFzJywgLy8gaGFzKClcbiAgJ2hvc3QnLCAvLyBob3N0IG9yIGhvc3QoKVxuICAnaG9zdC1jb250ZXh0JywgLy8gaG9zdC1jb250ZXh0KClcbiAgJ2hvdmVyJyxcbiAgJ2luZGV0ZXJtaW5hdGUnLFxuICAnaW4tcmFuZ2UnLFxuICAnaW52YWxpZCcsXG4gICdpcycsIC8vIGlzKClcbiAgJ2xhbmcnLCAvLyBsYW5nKClcbiAgJ2xhc3QtY2hpbGQnLFxuICAnbGFzdC1vZi10eXBlJyxcbiAgJ2xlZnQnLFxuICAnbGluaycsXG4gICdsb2NhbC1saW5rJyxcbiAgJ25vdCcsIC8vIG5vdCgpXG4gICdudGgtY2hpbGQnLCAvLyBudGgtY2hpbGQoKVxuICAnbnRoLWNvbCcsIC8vIG50aC1jb2woKVxuICAnbnRoLWxhc3QtY2hpbGQnLCAvLyBudGgtbGFzdC1jaGlsZCgpXG4gICdudGgtbGFzdC1jb2wnLCAvLyBudGgtbGFzdC1jb2woKVxuICAnbnRoLWxhc3Qtb2YtdHlwZScsIC8vbnRoLWxhc3Qtb2YtdHlwZSgpXG4gICdudGgtb2YtdHlwZScsIC8vbnRoLW9mLXR5cGUoKVxuICAnb25seS1jaGlsZCcsXG4gICdvbmx5LW9mLXR5cGUnLFxuICAnb3B0aW9uYWwnLFxuICAnb3V0LW9mLXJhbmdlJyxcbiAgJ3Bhc3QnLFxuICAncGxhY2Vob2xkZXItc2hvd24nLFxuICAncmVhZC1vbmx5JyxcbiAgJ3JlYWQtd3JpdGUnLFxuICAncmVxdWlyZWQnLFxuICAncmlnaHQnLFxuICAncm9vdCcsXG4gICdzY29wZScsXG4gICd0YXJnZXQnLFxuICAndGFyZ2V0LXdpdGhpbicsXG4gICd1c2VyLWludmFsaWQnLFxuICAndmFsaWQnLFxuICAndmlzaXRlZCcsXG4gICd3aGVyZScgLy8gd2hlcmUoKVxuXTtcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL1BzZXVkby1lbGVtZW50c1xuY29uc3QgUFNFVURPX0VMRU1FTlRTID0gW1xuICAnYWZ0ZXInLFxuICAnYmFja2Ryb3AnLFxuICAnYmVmb3JlJyxcbiAgJ2N1ZScsXG4gICdjdWUtcmVnaW9uJyxcbiAgJ2ZpcnN0LWxldHRlcicsXG4gICdmaXJzdC1saW5lJyxcbiAgJ2dyYW1tYXItZXJyb3InLFxuICAnbWFya2VyJyxcbiAgJ3BhcnQnLFxuICAncGxhY2Vob2xkZXInLFxuICAnc2VsZWN0aW9uJyxcbiAgJ3Nsb3R0ZWQnLFxuICAnc3BlbGxpbmctZXJyb3InXG5dO1xuXG5jb25zdCBBVFRSSUJVVEVTID0gW1xuICAnYWxpZ24tY29udGVudCcsXG4gICdhbGlnbi1pdGVtcycsXG4gICdhbGlnbi1zZWxmJyxcbiAgJ2FsbCcsXG4gICdhbmltYXRpb24nLFxuICAnYW5pbWF0aW9uLWRlbGF5JyxcbiAgJ2FuaW1hdGlvbi1kaXJlY3Rpb24nLFxuICAnYW5pbWF0aW9uLWR1cmF0aW9uJyxcbiAgJ2FuaW1hdGlvbi1maWxsLW1vZGUnLFxuICAnYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCcsXG4gICdhbmltYXRpb24tbmFtZScsXG4gICdhbmltYXRpb24tcGxheS1zdGF0ZScsXG4gICdhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uJyxcbiAgJ2JhY2tmYWNlLXZpc2liaWxpdHknLFxuICAnYmFja2dyb3VuZCcsXG4gICdiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnLFxuICAnYmFja2dyb3VuZC1ibGVuZC1tb2RlJyxcbiAgJ2JhY2tncm91bmQtY2xpcCcsXG4gICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgJ2JhY2tncm91bmQtaW1hZ2UnLFxuICAnYmFja2dyb3VuZC1vcmlnaW4nLFxuICAnYmFja2dyb3VuZC1wb3NpdGlvbicsXG4gICdiYWNrZ3JvdW5kLXJlcGVhdCcsXG4gICdiYWNrZ3JvdW5kLXNpemUnLFxuICAnYmxvY2stc2l6ZScsXG4gICdib3JkZXInLFxuICAnYm9yZGVyLWJsb2NrJyxcbiAgJ2JvcmRlci1ibG9jay1jb2xvcicsXG4gICdib3JkZXItYmxvY2stZW5kJyxcbiAgJ2JvcmRlci1ibG9jay1lbmQtY29sb3InLFxuICAnYm9yZGVyLWJsb2NrLWVuZC1zdHlsZScsXG4gICdib3JkZXItYmxvY2stZW5kLXdpZHRoJyxcbiAgJ2JvcmRlci1ibG9jay1zdGFydCcsXG4gICdib3JkZXItYmxvY2stc3RhcnQtY29sb3InLFxuICAnYm9yZGVyLWJsb2NrLXN0YXJ0LXN0eWxlJyxcbiAgJ2JvcmRlci1ibG9jay1zdGFydC13aWR0aCcsXG4gICdib3JkZXItYmxvY2stc3R5bGUnLFxuICAnYm9yZGVyLWJsb2NrLXdpZHRoJyxcbiAgJ2JvcmRlci1ib3R0b20nLFxuICAnYm9yZGVyLWJvdHRvbS1jb2xvcicsXG4gICdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJyxcbiAgJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJyxcbiAgJ2JvcmRlci1ib3R0b20tc3R5bGUnLFxuICAnYm9yZGVyLWJvdHRvbS13aWR0aCcsXG4gICdib3JkZXItY29sbGFwc2UnLFxuICAnYm9yZGVyLWNvbG9yJyxcbiAgJ2JvcmRlci1pbWFnZScsXG4gICdib3JkZXItaW1hZ2Utb3V0c2V0JyxcbiAgJ2JvcmRlci1pbWFnZS1yZXBlYXQnLFxuICAnYm9yZGVyLWltYWdlLXNsaWNlJyxcbiAgJ2JvcmRlci1pbWFnZS1zb3VyY2UnLFxuICAnYm9yZGVyLWltYWdlLXdpZHRoJyxcbiAgJ2JvcmRlci1pbmxpbmUnLFxuICAnYm9yZGVyLWlubGluZS1jb2xvcicsXG4gICdib3JkZXItaW5saW5lLWVuZCcsXG4gICdib3JkZXItaW5saW5lLWVuZC1jb2xvcicsXG4gICdib3JkZXItaW5saW5lLWVuZC1zdHlsZScsXG4gICdib3JkZXItaW5saW5lLWVuZC13aWR0aCcsXG4gICdib3JkZXItaW5saW5lLXN0YXJ0JyxcbiAgJ2JvcmRlci1pbmxpbmUtc3RhcnQtY29sb3InLFxuICAnYm9yZGVyLWlubGluZS1zdGFydC1zdHlsZScsXG4gICdib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoJyxcbiAgJ2JvcmRlci1pbmxpbmUtc3R5bGUnLFxuICAnYm9yZGVyLWlubGluZS13aWR0aCcsXG4gICdib3JkZXItbGVmdCcsXG4gICdib3JkZXItbGVmdC1jb2xvcicsXG4gICdib3JkZXItbGVmdC1zdHlsZScsXG4gICdib3JkZXItbGVmdC13aWR0aCcsXG4gICdib3JkZXItcmFkaXVzJyxcbiAgJ2JvcmRlci1yaWdodCcsXG4gICdib3JkZXItcmlnaHQtY29sb3InLFxuICAnYm9yZGVyLXJpZ2h0LXN0eWxlJyxcbiAgJ2JvcmRlci1yaWdodC13aWR0aCcsXG4gICdib3JkZXItc3BhY2luZycsXG4gICdib3JkZXItc3R5bGUnLFxuICAnYm9yZGVyLXRvcCcsXG4gICdib3JkZXItdG9wLWNvbG9yJyxcbiAgJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnLFxuICAnYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnLFxuICAnYm9yZGVyLXRvcC1zdHlsZScsXG4gICdib3JkZXItdG9wLXdpZHRoJyxcbiAgJ2JvcmRlci13aWR0aCcsXG4gICdib3R0b20nLFxuICAnYm94LWRlY29yYXRpb24tYnJlYWsnLFxuICAnYm94LXNoYWRvdycsXG4gICdib3gtc2l6aW5nJyxcbiAgJ2JyZWFrLWFmdGVyJyxcbiAgJ2JyZWFrLWJlZm9yZScsXG4gICdicmVhay1pbnNpZGUnLFxuICAnY2FwdGlvbi1zaWRlJyxcbiAgJ2NhcmV0LWNvbG9yJyxcbiAgJ2NsZWFyJyxcbiAgJ2NsaXAnLFxuICAnY2xpcC1wYXRoJyxcbiAgJ2NsaXAtcnVsZScsXG4gICdjb2xvcicsXG4gICdjb2x1bW4tY291bnQnLFxuICAnY29sdW1uLWZpbGwnLFxuICAnY29sdW1uLWdhcCcsXG4gICdjb2x1bW4tcnVsZScsXG4gICdjb2x1bW4tcnVsZS1jb2xvcicsXG4gICdjb2x1bW4tcnVsZS1zdHlsZScsXG4gICdjb2x1bW4tcnVsZS13aWR0aCcsXG4gICdjb2x1bW4tc3BhbicsXG4gICdjb2x1bW4td2lkdGgnLFxuICAnY29sdW1ucycsXG4gICdjb250YWluJyxcbiAgJ2NvbnRlbnQnLFxuICAnY29udGVudC12aXNpYmlsaXR5JyxcbiAgJ2NvdW50ZXItaW5jcmVtZW50JyxcbiAgJ2NvdW50ZXItcmVzZXQnLFxuICAnY3VlJyxcbiAgJ2N1ZS1hZnRlcicsXG4gICdjdWUtYmVmb3JlJyxcbiAgJ2N1cnNvcicsXG4gICdkaXJlY3Rpb24nLFxuICAnZGlzcGxheScsXG4gICdlbXB0eS1jZWxscycsXG4gICdmaWx0ZXInLFxuICAnZmxleCcsXG4gICdmbGV4LWJhc2lzJyxcbiAgJ2ZsZXgtZGlyZWN0aW9uJyxcbiAgJ2ZsZXgtZmxvdycsXG4gICdmbGV4LWdyb3cnLFxuICAnZmxleC1zaHJpbmsnLFxuICAnZmxleC13cmFwJyxcbiAgJ2Zsb2F0JyxcbiAgJ2Zsb3cnLFxuICAnZm9udCcsXG4gICdmb250LWRpc3BsYXknLFxuICAnZm9udC1mYW1pbHknLFxuICAnZm9udC1mZWF0dXJlLXNldHRpbmdzJyxcbiAgJ2ZvbnQta2VybmluZycsXG4gICdmb250LWxhbmd1YWdlLW92ZXJyaWRlJyxcbiAgJ2ZvbnQtc2l6ZScsXG4gICdmb250LXNpemUtYWRqdXN0JyxcbiAgJ2ZvbnQtc21vb3RoaW5nJyxcbiAgJ2ZvbnQtc3RyZXRjaCcsXG4gICdmb250LXN0eWxlJyxcbiAgJ2ZvbnQtc3ludGhlc2lzJyxcbiAgJ2ZvbnQtdmFyaWFudCcsXG4gICdmb250LXZhcmlhbnQtY2FwcycsXG4gICdmb250LXZhcmlhbnQtZWFzdC1hc2lhbicsXG4gICdmb250LXZhcmlhbnQtbGlnYXR1cmVzJyxcbiAgJ2ZvbnQtdmFyaWFudC1udW1lcmljJyxcbiAgJ2ZvbnQtdmFyaWFudC1wb3NpdGlvbicsXG4gICdmb250LXZhcmlhdGlvbi1zZXR0aW5ncycsXG4gICdmb250LXdlaWdodCcsXG4gICdnYXAnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnLFxuICAnZ3JpZCcsXG4gICdncmlkLWFyZWEnLFxuICAnZ3JpZC1hdXRvLWNvbHVtbnMnLFxuICAnZ3JpZC1hdXRvLWZsb3cnLFxuICAnZ3JpZC1hdXRvLXJvd3MnLFxuICAnZ3JpZC1jb2x1bW4nLFxuICAnZ3JpZC1jb2x1bW4tZW5kJyxcbiAgJ2dyaWQtY29sdW1uLXN0YXJ0JyxcbiAgJ2dyaWQtZ2FwJyxcbiAgJ2dyaWQtcm93JyxcbiAgJ2dyaWQtcm93LWVuZCcsXG4gICdncmlkLXJvdy1zdGFydCcsXG4gICdncmlkLXRlbXBsYXRlJyxcbiAgJ2dyaWQtdGVtcGxhdGUtYXJlYXMnLFxuICAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJyxcbiAgJ2dyaWQtdGVtcGxhdGUtcm93cycsXG4gICdoYW5naW5nLXB1bmN0dWF0aW9uJyxcbiAgJ2hlaWdodCcsXG4gICdoeXBoZW5zJyxcbiAgJ2ljb24nLFxuICAnaW1hZ2Utb3JpZW50YXRpb24nLFxuICAnaW1hZ2UtcmVuZGVyaW5nJyxcbiAgJ2ltYWdlLXJlc29sdXRpb24nLFxuICAnaW1lLW1vZGUnLFxuICAnaW5saW5lLXNpemUnLFxuICAnaXNvbGF0aW9uJyxcbiAgJ2p1c3RpZnktY29udGVudCcsXG4gICdsZWZ0JyxcbiAgJ2xldHRlci1zcGFjaW5nJyxcbiAgJ2xpbmUtYnJlYWsnLFxuICAnbGluZS1oZWlnaHQnLFxuICAnbGlzdC1zdHlsZScsXG4gICdsaXN0LXN0eWxlLWltYWdlJyxcbiAgJ2xpc3Qtc3R5bGUtcG9zaXRpb24nLFxuICAnbGlzdC1zdHlsZS10eXBlJyxcbiAgJ21hcmdpbicsXG4gICdtYXJnaW4tYmxvY2snLFxuICAnbWFyZ2luLWJsb2NrLWVuZCcsXG4gICdtYXJnaW4tYmxvY2stc3RhcnQnLFxuICAnbWFyZ2luLWJvdHRvbScsXG4gICdtYXJnaW4taW5saW5lJyxcbiAgJ21hcmdpbi1pbmxpbmUtZW5kJyxcbiAgJ21hcmdpbi1pbmxpbmUtc3RhcnQnLFxuICAnbWFyZ2luLWxlZnQnLFxuICAnbWFyZ2luLXJpZ2h0JyxcbiAgJ21hcmdpbi10b3AnLFxuICAnbWFya3MnLFxuICAnbWFzaycsXG4gICdtYXNrLWJvcmRlcicsXG4gICdtYXNrLWJvcmRlci1tb2RlJyxcbiAgJ21hc2stYm9yZGVyLW91dHNldCcsXG4gICdtYXNrLWJvcmRlci1yZXBlYXQnLFxuICAnbWFzay1ib3JkZXItc2xpY2UnLFxuICAnbWFzay1ib3JkZXItc291cmNlJyxcbiAgJ21hc2stYm9yZGVyLXdpZHRoJyxcbiAgJ21hc2stY2xpcCcsXG4gICdtYXNrLWNvbXBvc2l0ZScsXG4gICdtYXNrLWltYWdlJyxcbiAgJ21hc2stbW9kZScsXG4gICdtYXNrLW9yaWdpbicsXG4gICdtYXNrLXBvc2l0aW9uJyxcbiAgJ21hc2stcmVwZWF0JyxcbiAgJ21hc2stc2l6ZScsXG4gICdtYXNrLXR5cGUnLFxuICAnbWF4LWJsb2NrLXNpemUnLFxuICAnbWF4LWhlaWdodCcsXG4gICdtYXgtaW5saW5lLXNpemUnLFxuICAnbWF4LXdpZHRoJyxcbiAgJ21pbi1ibG9jay1zaXplJyxcbiAgJ21pbi1oZWlnaHQnLFxuICAnbWluLWlubGluZS1zaXplJyxcbiAgJ21pbi13aWR0aCcsXG4gICdtaXgtYmxlbmQtbW9kZScsXG4gICduYXYtZG93bicsXG4gICduYXYtaW5kZXgnLFxuICAnbmF2LWxlZnQnLFxuICAnbmF2LXJpZ2h0JyxcbiAgJ25hdi11cCcsXG4gICdub25lJyxcbiAgJ25vcm1hbCcsXG4gICdvYmplY3QtZml0JyxcbiAgJ29iamVjdC1wb3NpdGlvbicsXG4gICdvcGFjaXR5JyxcbiAgJ29yZGVyJyxcbiAgJ29ycGhhbnMnLFxuICAnb3V0bGluZScsXG4gICdvdXRsaW5lLWNvbG9yJyxcbiAgJ291dGxpbmUtb2Zmc2V0JyxcbiAgJ291dGxpbmUtc3R5bGUnLFxuICAnb3V0bGluZS13aWR0aCcsXG4gICdvdmVyZmxvdycsXG4gICdvdmVyZmxvdy13cmFwJyxcbiAgJ292ZXJmbG93LXgnLFxuICAnb3ZlcmZsb3cteScsXG4gICdwYWRkaW5nJyxcbiAgJ3BhZGRpbmctYmxvY2snLFxuICAncGFkZGluZy1ibG9jay1lbmQnLFxuICAncGFkZGluZy1ibG9jay1zdGFydCcsXG4gICdwYWRkaW5nLWJvdHRvbScsXG4gICdwYWRkaW5nLWlubGluZScsXG4gICdwYWRkaW5nLWlubGluZS1lbmQnLFxuICAncGFkZGluZy1pbmxpbmUtc3RhcnQnLFxuICAncGFkZGluZy1sZWZ0JyxcbiAgJ3BhZGRpbmctcmlnaHQnLFxuICAncGFkZGluZy10b3AnLFxuICAncGFnZS1icmVhay1hZnRlcicsXG4gICdwYWdlLWJyZWFrLWJlZm9yZScsXG4gICdwYWdlLWJyZWFrLWluc2lkZScsXG4gICdwYXVzZScsXG4gICdwYXVzZS1hZnRlcicsXG4gICdwYXVzZS1iZWZvcmUnLFxuICAncGVyc3BlY3RpdmUnLFxuICAncGVyc3BlY3RpdmUtb3JpZ2luJyxcbiAgJ3BvaW50ZXItZXZlbnRzJyxcbiAgJ3Bvc2l0aW9uJyxcbiAgJ3F1b3RlcycsXG4gICdyZXNpemUnLFxuICAncmVzdCcsXG4gICdyZXN0LWFmdGVyJyxcbiAgJ3Jlc3QtYmVmb3JlJyxcbiAgJ3JpZ2h0JyxcbiAgJ3Jvdy1nYXAnLFxuICAnc2Nyb2xsLW1hcmdpbicsXG4gICdzY3JvbGwtbWFyZ2luLWJsb2NrJyxcbiAgJ3Njcm9sbC1tYXJnaW4tYmxvY2stZW5kJyxcbiAgJ3Njcm9sbC1tYXJnaW4tYmxvY2stc3RhcnQnLFxuICAnc2Nyb2xsLW1hcmdpbi1ib3R0b20nLFxuICAnc2Nyb2xsLW1hcmdpbi1pbmxpbmUnLFxuICAnc2Nyb2xsLW1hcmdpbi1pbmxpbmUtZW5kJyxcbiAgJ3Njcm9sbC1tYXJnaW4taW5saW5lLXN0YXJ0JyxcbiAgJ3Njcm9sbC1tYXJnaW4tbGVmdCcsXG4gICdzY3JvbGwtbWFyZ2luLXJpZ2h0JyxcbiAgJ3Njcm9sbC1tYXJnaW4tdG9wJyxcbiAgJ3Njcm9sbC1wYWRkaW5nJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWJsb2NrJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWJsb2NrLWVuZCcsXG4gICdzY3JvbGwtcGFkZGluZy1ibG9jay1zdGFydCcsXG4gICdzY3JvbGwtcGFkZGluZy1ib3R0b20nLFxuICAnc2Nyb2xsLXBhZGRpbmctaW5saW5lJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWlubGluZS1lbmQnLFxuICAnc2Nyb2xsLXBhZGRpbmctaW5saW5lLXN0YXJ0JyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWxlZnQnLFxuICAnc2Nyb2xsLXBhZGRpbmctcmlnaHQnLFxuICAnc2Nyb2xsLXBhZGRpbmctdG9wJyxcbiAgJ3Njcm9sbC1zbmFwLWFsaWduJyxcbiAgJ3Njcm9sbC1zbmFwLXN0b3AnLFxuICAnc2Nyb2xsLXNuYXAtdHlwZScsXG4gICdzY3JvbGxiYXItY29sb3InLFxuICAnc2Nyb2xsYmFyLWd1dHRlcicsXG4gICdzY3JvbGxiYXItd2lkdGgnLFxuICAnc2hhcGUtaW1hZ2UtdGhyZXNob2xkJyxcbiAgJ3NoYXBlLW1hcmdpbicsXG4gICdzaGFwZS1vdXRzaWRlJyxcbiAgJ3NwZWFrJyxcbiAgJ3NwZWFrLWFzJyxcbiAgJ3NyYycsIC8vIEBmb250LWZhY2VcbiAgJ3RhYi1zaXplJyxcbiAgJ3RhYmxlLWxheW91dCcsXG4gICd0ZXh0LWFsaWduJyxcbiAgJ3RleHQtYWxpZ24tYWxsJyxcbiAgJ3RleHQtYWxpZ24tbGFzdCcsXG4gICd0ZXh0LWNvbWJpbmUtdXByaWdodCcsXG4gICd0ZXh0LWRlY29yYXRpb24nLFxuICAndGV4dC1kZWNvcmF0aW9uLWNvbG9yJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi1saW5lJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi1zdHlsZScsXG4gICd0ZXh0LWVtcGhhc2lzJyxcbiAgJ3RleHQtZW1waGFzaXMtY29sb3InLFxuICAndGV4dC1lbXBoYXNpcy1wb3NpdGlvbicsXG4gICd0ZXh0LWVtcGhhc2lzLXN0eWxlJyxcbiAgJ3RleHQtaW5kZW50JyxcbiAgJ3RleHQtanVzdGlmeScsXG4gICd0ZXh0LW9yaWVudGF0aW9uJyxcbiAgJ3RleHQtb3ZlcmZsb3cnLFxuICAndGV4dC1yZW5kZXJpbmcnLFxuICAndGV4dC1zaGFkb3cnLFxuICAndGV4dC10cmFuc2Zvcm0nLFxuICAndGV4dC11bmRlcmxpbmUtcG9zaXRpb24nLFxuICAndG9wJyxcbiAgJ3RyYW5zZm9ybScsXG4gICd0cmFuc2Zvcm0tYm94JyxcbiAgJ3RyYW5zZm9ybS1vcmlnaW4nLFxuICAndHJhbnNmb3JtLXN0eWxlJyxcbiAgJ3RyYW5zaXRpb24nLFxuICAndHJhbnNpdGlvbi1kZWxheScsXG4gICd0cmFuc2l0aW9uLWR1cmF0aW9uJyxcbiAgJ3RyYW5zaXRpb24tcHJvcGVydHknLFxuICAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nLFxuICAndW5pY29kZS1iaWRpJyxcbiAgJ3ZlcnRpY2FsLWFsaWduJyxcbiAgJ3Zpc2liaWxpdHknLFxuICAndm9pY2UtYmFsYW5jZScsXG4gICd2b2ljZS1kdXJhdGlvbicsXG4gICd2b2ljZS1mYW1pbHknLFxuICAndm9pY2UtcGl0Y2gnLFxuICAndm9pY2UtcmFuZ2UnLFxuICAndm9pY2UtcmF0ZScsXG4gICd2b2ljZS1zdHJlc3MnLFxuICAndm9pY2Utdm9sdW1lJyxcbiAgJ3doaXRlLXNwYWNlJyxcbiAgJ3dpZG93cycsXG4gICd3aWR0aCcsXG4gICd3aWxsLWNoYW5nZScsXG4gICd3b3JkLWJyZWFrJyxcbiAgJ3dvcmQtc3BhY2luZycsXG4gICd3b3JkLXdyYXAnLFxuICAnd3JpdGluZy1tb2RlJyxcbiAgJ3otaW5kZXgnXG4gIC8vIHJldmVyc2UgbWFrZXMgc3VyZSBsb25nZXIgYXR0cmlidXRlcyBgZm9udC13ZWlnaHRgIGFyZSBtYXRjaGVkIGZ1bGx5XG4gIC8vIGluc3RlYWQgb2YgZ2V0dGluZyBmYWxzZSBwb3NpdGl2ZXMgb24gc2F5IGBmb250YFxuXS5yZXZlcnNlKCk7XG5cbi8qXG5MYW5ndWFnZTogQ1NTXG5DYXRlZ29yeTogY29tbW9uLCBjc3MsIHdlYlxuV2Vic2l0ZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gY3NzKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICBjb25zdCBtb2RlcyA9IE1PREVTKGhsanMpO1xuICBjb25zdCBWRU5ET1JfUFJFRklYID0geyBiZWdpbjogLy0od2Via2l0fG1venxtc3xvKS0oPz1bYS16XSkvIH07XG4gIGNvbnN0IEFUX01PRElGSUVSUyA9IFwiYW5kIG9yIG5vdCBvbmx5XCI7XG4gIGNvbnN0IEFUX1BST1BFUlRZX1JFID0gL0AtP1xcd1tcXHddKigtXFx3KykqLzsgLy8gQC13ZWJraXQta2V5ZnJhbWVzXG4gIGNvbnN0IElERU5UX1JFID0gJ1thLXpBLVotXVthLXpBLVowLTlfLV0qJztcbiAgY29uc3QgU1RSSU5HUyA9IFtcbiAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0NTUycsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvWz18J1xcJF0vLFxuICAgIGtleXdvcmRzOiB7IGtleWZyYW1lUG9zaXRpb246IFwiZnJvbSB0b1wiIH0sXG4gICAgY2xhc3NOYW1lQWxpYXNlczoge1xuICAgICAgLy8gZm9yIHZpc3VhbCBjb250aW51aXR5IHdpdGggYHRhZyB7fWAgYW5kIGJlY2F1c2Ugd2VcbiAgICAgIC8vIGRvbid0IGhhdmUgYSBncmVhdCBjbGFzcyBmb3IgdGhpcz9cbiAgICAgIGtleWZyYW1lUG9zaXRpb246IFwic2VsZWN0b3ItdGFnXCIgfSxcbiAgICBjb250YWluczogW1xuICAgICAgbW9kZXMuQkxPQ0tfQ09NTUVOVCxcbiAgICAgIFZFTkRPUl9QUkVGSVgsXG4gICAgICAvLyB0byByZWNvZ25pemUga2V5ZnJhbWUgNDAlIGV0YyB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2Ygb3VyXG4gICAgICAvLyBhdHRyaWJ1dGUgdmFsdWUgbW9kZVxuICAgICAgbW9kZXMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1pZCcsXG4gICAgICAgIGJlZ2luOiAvI1tBLVphLXowLTlfLV0rLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1jbGFzcycsXG4gICAgICAgIGJlZ2luOiAnXFxcXC4nICsgSURFTlRfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIG1vZGVzLkFUVFJJQlVURV9TRUxFQ1RPUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1wc2V1ZG8nLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW46ICc6KCcgKyBQU0VVRE9fQ0xBU1NFUy5qb2luKCd8JykgKyAnKScgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnOig6KT8oJyArIFBTRVVET19FTEVNRU5UUy5qb2luKCd8JykgKyAnKScgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gd2UgbWF5IGFjdHVhbGx5IG5lZWQgdGhpcyAoMTIvMjAyMClcbiAgICAgIC8vIHsgLy8gcHNldWRvLXNlbGVjdG9yIHBhcmFtc1xuICAgICAgLy8gICBiZWdpbjogL1xcKC8sXG4gICAgICAvLyAgIGVuZDogL1xcKS8sXG4gICAgICAvLyAgIGNvbnRhaW5zOiBbIGhsanMuQ1NTX05VTUJFUl9NT0RFIF1cbiAgICAgIC8vIH0sXG4gICAgICBtb2Rlcy5DU1NfVkFSSUFCTEUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIEFUVFJJQlVURVMuam9pbignfCcpICsgJylcXFxcYidcbiAgICAgIH0sXG4gICAgICAvLyBhdHRyaWJ1dGUgdmFsdWVzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvOi8sXG4gICAgICAgIGVuZDogL1s7fXtdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBtb2Rlcy5CTE9DS19DT01NRU5ULFxuICAgICAgICAgIG1vZGVzLkhFWENPTE9SLFxuICAgICAgICAgIG1vZGVzLklNUE9SVEFOVCxcbiAgICAgICAgICBtb2Rlcy5DU1NfTlVNQkVSX01PREUsXG4gICAgICAgICAgLi4uU1RSSU5HUyxcbiAgICAgICAgICAvLyBuZWVkZWQgdG8gaGlnaGxpZ2h0IHRoZXNlIGFzIHN0cmluZ3MgYW5kIHRvIGF2b2lkIGlzc3VlcyB3aXRoXG4gICAgICAgICAgLy8gaWxsZWdhbCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYmUgaW5zaWRlIHVybHMgdGhhdCB3b3VsZCB0aWdnZXIgdGhlXG4gICAgICAgICAgLy8gbGFuZ3VhZ2VzIGlsbGVnYWwgc3RhY2tcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogLyh1cmx8ZGF0YS11cmkpXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsIC8vIGZyb20ga2V5d29yZHNcbiAgICAgICAgICAgIGtleXdvcmRzOiB7IGJ1aWx0X2luOiBcInVybCBkYXRhLXVyaVwiIH0sXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAuLi5TVFJJTkdTLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIC8vIGFueSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiBgKWAgYXMgaW4gYHVybCgpYCB3aWxsIGJlIHRoZSBzdGFydFxuICAgICAgICAgICAgICAgIC8vIG9mIGEgc3RyaW5nLCB3aGljaCBlbmRzIHdpdGggYClgIChmcm9tIHRoZSBwYXJlbnQgbW9kZSlcbiAgICAgICAgICAgICAgICBiZWdpbjogL1teKV0vLFxuICAgICAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbW9kZXMuRlVOQ1RJT05fRElTUEFUQ0hcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IHJlZ2V4Lmxvb2thaGVhZCgvQC8pLFxuICAgICAgICBlbmQ6ICdbeztdJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBpbGxlZ2FsOiAvOi8sIC8vIGJyZWFrIG9uIExlc3MgdmFyaWFibGVzIEB2YXI6IC4uLlxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgICAgYmVnaW46IEFUX1BST1BFUlRZX1JFXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xccy8sXG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgICAkcGF0dGVybjogL1thLXotXSsvLFxuICAgICAgICAgICAgICBrZXl3b3JkOiBBVF9NT0RJRklFUlMsXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZTogTUVESUFfRkVBVFVSRVMuam9pbihcIiBcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IC9bYS16LV0rKD89OikvLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAuLi5TVFJJTkdTLFxuICAgICAgICAgICAgICBtb2Rlcy5DU1NfTlVNQkVSX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXRhZycsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIFRBR1Muam9pbignfCcpICsgJylcXFxcYidcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3NzO1xuIiwiLypcbkxhbmd1YWdlOiBEaWZmXG5EZXNjcmlwdGlvbjogVW5pZmllZCBhbmQgY29udGV4dCBkaWZmXG5BdXRob3I6IFZhc2lseSBQb2xvdm55b3YgPHZhc3RAd2hpdGVhbnRzLm5ldD5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZGlmZnV0aWxzL1xuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGRpZmYoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0RpZmYnLFxuICAgIGFsaWFzZXM6IFsgJ3BhdGNoJyBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICBtYXRjaDogcmVnZXguZWl0aGVyKFxuICAgICAgICAgIC9eQEAgKy1cXGQrLFxcZCsgK1xcK1xcZCssXFxkKyArQEAvLFxuICAgICAgICAgIC9eXFwqXFwqXFwqICtcXGQrLFxcZCsgK1xcKlxcKlxcKlxcKiQvLFxuICAgICAgICAgIC9eLS0tICtcXGQrLFxcZCsgKy0tLS0kL1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogcmVnZXguZWl0aGVyKFxuICAgICAgICAgICAgICAvSW5kZXg6IC8sXG4gICAgICAgICAgICAgIC9eaW5kZXgvLFxuICAgICAgICAgICAgICAvPXszLH0vLFxuICAgICAgICAgICAgICAvXi17M30vLFxuICAgICAgICAgICAgICAvXlxcKnszfSAvLFxuICAgICAgICAgICAgICAvXlxcK3szfS8sXG4gICAgICAgICAgICAgIC9eZGlmZiAtLWdpdC9cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBlbmQ6IC8kL1xuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBtYXRjaDogL15cXCp7MTV9JC8gfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhZGRpdGlvbicsXG4gICAgICAgIGJlZ2luOiAvXlxcKy8sXG4gICAgICAgIGVuZDogLyQvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdkZWxldGlvbicsXG4gICAgICAgIGJlZ2luOiAvXi0vLFxuICAgICAgICBlbmQ6IC8kL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYWRkaXRpb24nLFxuICAgICAgICBiZWdpbjogL14hLyxcbiAgICAgICAgZW5kOiAvJC9cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGlmZjtcbiIsIi8qXG5MYW5ndWFnZTogR29cbkF1dGhvcjogU3RlcGhhbiBLb3VudHNvIGFrYSBTdGVwTGcgPHN0ZXBsZ0BnbWFpbC5jb20+XG5Db250cmlidXRvcnM6IEV2Z2VueSBTdGVwYW5pc2NoZXYgPGltYm9sa0BnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogR29vZ2xlIGdvIGxhbmd1YWdlIChnb2xhbmcpLiBGb3IgaW5mbyBhYm91dCBsYW5ndWFnZVxuV2Vic2l0ZTogaHR0cDovL2dvbGFuZy5vcmcvXG5DYXRlZ29yeTogY29tbW9uLCBzeXN0ZW1cbiovXG5cbmZ1bmN0aW9uIGdvKGhsanMpIHtcbiAgY29uc3QgTElURVJBTFMgPSBbXG4gICAgXCJ0cnVlXCIsXG4gICAgXCJmYWxzZVwiLFxuICAgIFwiaW90YVwiLFxuICAgIFwibmlsXCJcbiAgXTtcbiAgY29uc3QgQlVJTFRfSU5TID0gW1xuICAgIFwiYXBwZW5kXCIsXG4gICAgXCJjYXBcIixcbiAgICBcImNsb3NlXCIsXG4gICAgXCJjb21wbGV4XCIsXG4gICAgXCJjb3B5XCIsXG4gICAgXCJpbWFnXCIsXG4gICAgXCJsZW5cIixcbiAgICBcIm1ha2VcIixcbiAgICBcIm5ld1wiLFxuICAgIFwicGFuaWNcIixcbiAgICBcInByaW50XCIsXG4gICAgXCJwcmludGxuXCIsXG4gICAgXCJyZWFsXCIsXG4gICAgXCJyZWNvdmVyXCIsXG4gICAgXCJkZWxldGVcIlxuICBdO1xuICBjb25zdCBUWVBFUyA9IFtcbiAgICBcImJvb2xcIixcbiAgICBcImJ5dGVcIixcbiAgICBcImNvbXBsZXg2NFwiLFxuICAgIFwiY29tcGxleDEyOFwiLFxuICAgIFwiZXJyb3JcIixcbiAgICBcImZsb2F0MzJcIixcbiAgICBcImZsb2F0NjRcIixcbiAgICBcImludDhcIixcbiAgICBcImludDE2XCIsXG4gICAgXCJpbnQzMlwiLFxuICAgIFwiaW50NjRcIixcbiAgICBcInN0cmluZ1wiLFxuICAgIFwidWludDhcIixcbiAgICBcInVpbnQxNlwiLFxuICAgIFwidWludDMyXCIsXG4gICAgXCJ1aW50NjRcIixcbiAgICBcImludFwiLFxuICAgIFwidWludFwiLFxuICAgIFwidWludHB0clwiLFxuICAgIFwicnVuZVwiXG4gIF07XG4gIGNvbnN0IEtXUyA9IFtcbiAgICBcImJyZWFrXCIsXG4gICAgXCJjYXNlXCIsXG4gICAgXCJjaGFuXCIsXG4gICAgXCJjb25zdFwiLFxuICAgIFwiY29udGludWVcIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImRlZmVyXCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJmYWxsdGhyb3VnaFwiLFxuICAgIFwiZm9yXCIsXG4gICAgXCJmdW5jXCIsXG4gICAgXCJnb1wiLFxuICAgIFwiZ290b1wiLFxuICAgIFwiaWZcIixcbiAgICBcImltcG9ydFwiLFxuICAgIFwiaW50ZXJmYWNlXCIsXG4gICAgXCJtYXBcIixcbiAgICBcInBhY2thZ2VcIixcbiAgICBcInJhbmdlXCIsXG4gICAgXCJyZXR1cm5cIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic3RydWN0XCIsXG4gICAgXCJzd2l0Y2hcIixcbiAgICBcInR5cGVcIixcbiAgICBcInZhclwiLFxuICBdO1xuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOiBLV1MsXG4gICAgdHlwZTogVFlQRVMsXG4gICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOU1xuICB9O1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdHbycsXG4gICAgYWxpYXNlczogWyAnZ29sYW5nJyBdLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnYCcsXG4gICAgICAgICAgICBlbmQ6ICdgJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSArICdbaV0nLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHsgYmVnaW46IC86PS8gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmMnLFxuICAgICAgICBlbmQ6ICdcXFxccyooXFxcXHt8JCknLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICBpbGxlZ2FsOiAvW1wiJ10vXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdvO1xuIiwiLypcbiBMYW5ndWFnZTogR3JhcGhRTFxuIEF1dGhvcjogSm9obiBGb3N0ZXIgKEdIIGpmOTkwKSwgYW5kIG90aGVyc1xuIERlc2NyaXB0aW9uOiBHcmFwaFFMIGlzIGEgcXVlcnkgbGFuZ3VhZ2UgZm9yIEFQSXNcbiBDYXRlZ29yeTogd2ViLCBjb21tb25cbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBncmFwaHFsKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICBjb25zdCBHUUxfTkFNRSA9IC9bX0EtWmEtel1bXzAtOUEtWmEtel0qLztcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcIkdyYXBoUUxcIixcbiAgICBhbGlhc2VzOiBbIFwiZ3FsXCIgXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGRpc2FibGVBdXRvZGV0ZWN0OiBmYWxzZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogW1xuICAgICAgICBcInF1ZXJ5XCIsXG4gICAgICAgIFwibXV0YXRpb25cIixcbiAgICAgICAgXCJzdWJzY3JpcHRpb25cIixcbiAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgIFwiaW5wdXRcIixcbiAgICAgICAgXCJzY2hlbWFcIixcbiAgICAgICAgXCJkaXJlY3RpdmVcIixcbiAgICAgICAgXCJpbnRlcmZhY2VcIixcbiAgICAgICAgXCJ1bmlvblwiLFxuICAgICAgICBcInNjYWxhclwiLFxuICAgICAgICBcImZyYWdtZW50XCIsXG4gICAgICAgIFwiZW51bVwiLFxuICAgICAgICBcIm9uXCJcbiAgICAgIF0sXG4gICAgICBsaXRlcmFsOiBbXG4gICAgICAgIFwidHJ1ZVwiLFxuICAgICAgICBcImZhbHNlXCIsXG4gICAgICAgIFwibnVsbFwiXG4gICAgICBdXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBzY29wZTogXCJwdW5jdHVhdGlvblwiLFxuICAgICAgICBtYXRjaDogL1suXXszfS8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6IFwicHVuY3R1YXRpb25cIixcbiAgICAgICAgYmVnaW46IC9bXFwhXFwoXFwpXFw6XFw9XFxbXFxdXFx7XFx8XFx9XXsxfS8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6IFwidmFyaWFibGVcIixcbiAgICAgICAgYmVnaW46IC9cXCQvLFxuICAgICAgICBlbmQ6IC9cXFcvLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNjb3BlOiBcIm1ldGFcIixcbiAgICAgICAgbWF0Y2g6IC9AXFx3Ky8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNjb3BlOiBcInN5bWJvbFwiLFxuICAgICAgICBiZWdpbjogcmVnZXguY29uY2F0KEdRTF9OQU1FLCByZWdleC5sb29rYWhlYWQoL1xccyo6LykpLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6IFtcbiAgICAgIC9bOzwnXS8sXG4gICAgICAvQkVHSU4vXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdyYXBocWw7XG4iLCIvKlxuTGFuZ3VhZ2U6IFRPTUwsIGFsc28gSU5JXG5EZXNjcmlwdGlvbjogVE9NTCBhaW1zIHRvIGJlIGEgbWluaW1hbCBjb25maWd1cmF0aW9uIGZpbGUgZm9ybWF0IHRoYXQncyBlYXN5IHRvIHJlYWQgZHVlIHRvIG9idmlvdXMgc2VtYW50aWNzLlxuQ29udHJpYnV0b3JzOiBHdWlsbGF1bWUgR29tZXogPGd1aWxsYXVtZTEuZ29tZXpAZ21haWwuY29tPlxuQ2F0ZWdvcnk6IGNvbW1vbiwgY29uZmlnXG5XZWJzaXRlOiBodHRwczovL2dpdGh1Yi5jb20vdG9tbC1sYW5nL3RvbWxcbiovXG5cbmZ1bmN0aW9uIGluaShobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogLyhbKy1dKyk/W1xcZF0rX1tcXGRfXSsvIH0sXG4gICAgICB7IGJlZ2luOiBobGpzLk5VTUJFUl9SRSB9XG4gICAgXVxuICB9O1xuICBjb25zdCBDT01NRU5UUyA9IGhsanMuQ09NTUVOVCgpO1xuICBDT01NRU5UUy52YXJpYW50cyA9IFtcbiAgICB7XG4gICAgICBiZWdpbjogLzsvLFxuICAgICAgZW5kOiAvJC9cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAvIy8sXG4gICAgICBlbmQ6IC8kL1xuICAgIH1cbiAgXTtcbiAgY29uc3QgVkFSSUFCTEVTID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogL1xcJFtcXHdcXGRcIl1bXFx3XFxkX10qLyB9LFxuICAgICAgeyBiZWdpbjogL1xcJFxceyguKj8pXFx9LyB9XG4gICAgXVxuICB9O1xuICBjb25zdCBMSVRFUkFMUyA9IHtcbiAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICBiZWdpbjogL1xcYm9ufG9mZnx0cnVlfGZhbHNlfHllc3xub1xcYi9cbiAgfTtcbiAgY29uc3QgU1RSSU5HUyA9IHtcbiAgICBjbGFzc05hbWU6IFwic3RyaW5nXCIsXG4gICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiJycnXCIsXG4gICAgICAgIGVuZDogXCInJydcIixcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIlwiXCInLFxuICAgICAgICBlbmQ6ICdcIlwiXCInLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogXCInXCIsXG4gICAgICAgIGVuZDogXCInXCJcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IEFSUkFZID0ge1xuICAgIGJlZ2luOiAvXFxbLyxcbiAgICBlbmQ6IC9cXF0vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDT01NRU5UUyxcbiAgICAgIExJVEVSQUxTLFxuICAgICAgVkFSSUFCTEVTLFxuICAgICAgU1RSSU5HUyxcbiAgICAgIE5VTUJFUlMsXG4gICAgICAnc2VsZidcbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IEJBUkVfS0VZID0gL1tBLVphLXowLTlfLV0rLztcbiAgY29uc3QgUVVPVEVEX0tFWV9ET1VCTEVfUVVPVEUgPSAvXCIoXFxcXFwifFteXCJdKSpcIi87XG4gIGNvbnN0IFFVT1RFRF9LRVlfU0lOR0xFX1FVT1RFID0gLydbXiddKicvO1xuICBjb25zdCBBTllfS0VZID0gcmVnZXguZWl0aGVyKFxuICAgIEJBUkVfS0VZLCBRVU9URURfS0VZX0RPVUJMRV9RVU9URSwgUVVPVEVEX0tFWV9TSU5HTEVfUVVPVEVcbiAgKTtcbiAgY29uc3QgRE9UVEVEX0tFWSA9IHJlZ2V4LmNvbmNhdChcbiAgICBBTllfS0VZLCAnKFxcXFxzKlxcXFwuXFxcXHMqJywgQU5ZX0tFWSwgJykqJyxcbiAgICByZWdleC5sb29rYWhlYWQoL1xccyo9XFxzKlteI1xcc10vKVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1RPTUwsIGFsc28gSU5JJyxcbiAgICBhbGlhc2VzOiBbICd0b21sJyBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogL1xcUy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIENPTU1FTlRTLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICAgICAgYmVnaW46IC9cXFsrLyxcbiAgICAgICAgZW5kOiAvXFxdKy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBET1RURURfS0VZLFxuICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAvJC8sXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIENPTU1FTlRTLFxuICAgICAgICAgICAgQVJSQVksXG4gICAgICAgICAgICBMSVRFUkFMUyxcbiAgICAgICAgICAgIFZBUklBQkxFUyxcbiAgICAgICAgICAgIFNUUklOR1MsXG4gICAgICAgICAgICBOVU1CRVJTXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaTtcbiIsIi8vIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS9zcGVjcy9qbHMvc2UxNS9odG1sL2pscy0zLmh0bWwjamxzLTMuMTBcbnZhciBkZWNpbWFsRGlnaXRzID0gJ1swLTldKF8qWzAtOV0pKic7XG52YXIgZnJhYyA9IGBcXFxcLigke2RlY2ltYWxEaWdpdHN9KWA7XG52YXIgaGV4RGlnaXRzID0gJ1swLTlhLWZBLUZdKF8qWzAtOWEtZkEtRl0pKic7XG52YXIgTlVNRVJJQyA9IHtcbiAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgdmFyaWFudHM6IFtcbiAgICAvLyBEZWNpbWFsRmxvYXRpbmdQb2ludExpdGVyYWxcbiAgICAvLyBpbmNsdWRpbmcgRXhwb25lbnRQYXJ0XG4gICAgeyBiZWdpbjogYChcXFxcYigke2RlY2ltYWxEaWdpdHN9KSgoJHtmcmFjfSl8XFxcXC4pP3woJHtmcmFjfSkpYCArXG4gICAgICBgW2VFXVsrLV0/KCR7ZGVjaW1hbERpZ2l0c30pW2ZGZERdP1xcXFxiYCB9LFxuICAgIC8vIGV4Y2x1ZGluZyBFeHBvbmVudFBhcnRcbiAgICB7IGJlZ2luOiBgXFxcXGIoJHtkZWNpbWFsRGlnaXRzfSkoKCR7ZnJhY30pW2ZGZERdP1xcXFxifFxcXFwuKFtmRmREXVxcXFxiKT8pYCB9LFxuICAgIHsgYmVnaW46IGAoJHtmcmFjfSlbZkZkRF0/XFxcXGJgIH0sXG4gICAgeyBiZWdpbjogYFxcXFxiKCR7ZGVjaW1hbERpZ2l0c30pW2ZGZERdXFxcXGJgIH0sXG5cbiAgICAvLyBIZXhhZGVjaW1hbEZsb2F0aW5nUG9pbnRMaXRlcmFsXG4gICAgeyBiZWdpbjogYFxcXFxiMFt4WF0oKCR7aGV4RGlnaXRzfSlcXFxcLj98KCR7aGV4RGlnaXRzfSk/XFxcXC4oJHtoZXhEaWdpdHN9KSlgICtcbiAgICAgIGBbcFBdWystXT8oJHtkZWNpbWFsRGlnaXRzfSlbZkZkRF0/XFxcXGJgIH0sXG5cbiAgICAvLyBEZWNpbWFsSW50ZWdlckxpdGVyYWxcbiAgICB7IGJlZ2luOiAnXFxcXGIoMHxbMS05XShfKlswLTldKSopW2xMXT9cXFxcYicgfSxcblxuICAgIC8vIEhleEludGVnZXJMaXRlcmFsXG4gICAgeyBiZWdpbjogYFxcXFxiMFt4WF0oJHtoZXhEaWdpdHN9KVtsTF0/XFxcXGJgIH0sXG5cbiAgICAvLyBPY3RhbEludGVnZXJMaXRlcmFsXG4gICAgeyBiZWdpbjogJ1xcXFxiMChfKlswLTddKSpbbExdP1xcXFxiJyB9LFxuXG4gICAgLy8gQmluYXJ5SW50ZWdlckxpdGVyYWxcbiAgICB7IGJlZ2luOiAnXFxcXGIwW2JCXVswMV0oXypbMDFdKSpbbExdP1xcXFxiJyB9LFxuICBdLFxuICByZWxldmFuY2U6IDBcbn07XG5cbi8qXG5MYW5ndWFnZTogSmF2YVxuQXV0aG9yOiBWc2V2b2xvZCBTb2xvdnlvdiA8dnNldm9sb2Quc29sb3Z5b3ZAZ21haWwuY29tPlxuQ2F0ZWdvcnk6IGNvbW1vbiwgZW50ZXJwcmlzZVxuV2Vic2l0ZTogaHR0cHM6Ly93d3cuamF2YS5jb20vXG4qL1xuXG4vKipcbiAqIEFsbG93cyByZWN1cnNpdmUgcmVnZXggZXhwcmVzc2lvbnMgdG8gYSBnaXZlbiBkZXB0aFxuICpcbiAqIGllOiByZWN1clJlZ2V4KFwiKGFiY35+filcIiwgL35+fi9nLCAyKSBiZWNvbWVzOlxuICogKGFiYyhhYmMoYWJjKSkpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlXG4gKiBAcGFyYW0ge1JlZ0V4cH0gc3Vic3RpdHV0aW9uIChzaG91bGQgYmUgYSBnIG1vZGUgcmVnZXgpXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9YGBcbiAqL1xuZnVuY3Rpb24gcmVjdXJSZWdleChyZSwgc3Vic3RpdHV0aW9uLCBkZXB0aCkge1xuICBpZiAoZGVwdGggPT09IC0xKSByZXR1cm4gXCJcIjtcblxuICByZXR1cm4gcmUucmVwbGFjZShzdWJzdGl0dXRpb24sIF8gPT4ge1xuICAgIHJldHVybiByZWN1clJlZ2V4KHJlLCBzdWJzdGl0dXRpb24sIGRlcHRoIC0gMSk7XG4gIH0pO1xufVxuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gamF2YShobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgSkFWQV9JREVOVF9SRSA9ICdbXFx1MDBDMC1cXHUwMkI4YS16QS1aXyRdW1xcdTAwQzAtXFx1MDJCOGEtekEtWl8kMC05XSonO1xuICBjb25zdCBHRU5FUklDX0lERU5UX1JFID0gSkFWQV9JREVOVF9SRVxuICAgICsgcmVjdXJSZWdleCgnKD86PCcgKyBKQVZBX0lERU5UX1JFICsgJ35+fig/OlxcXFxzKixcXFxccyonICsgSkFWQV9JREVOVF9SRSArICd+fn4pKj4pPycsIC9+fn4vZywgMik7XG4gIGNvbnN0IE1BSU5fS0VZV09SRFMgPSBbXG4gICAgJ3N5bmNocm9uaXplZCcsXG4gICAgJ2Fic3RyYWN0JyxcbiAgICAncHJpdmF0ZScsXG4gICAgJ3ZhcicsXG4gICAgJ3N0YXRpYycsXG4gICAgJ2lmJyxcbiAgICAnY29uc3QgJyxcbiAgICAnZm9yJyxcbiAgICAnd2hpbGUnLFxuICAgICdzdHJpY3RmcCcsXG4gICAgJ2ZpbmFsbHknLFxuICAgICdwcm90ZWN0ZWQnLFxuICAgICdpbXBvcnQnLFxuICAgICduYXRpdmUnLFxuICAgICdmaW5hbCcsXG4gICAgJ3ZvaWQnLFxuICAgICdlbnVtJyxcbiAgICAnZWxzZScsXG4gICAgJ2JyZWFrJyxcbiAgICAndHJhbnNpZW50JyxcbiAgICAnY2F0Y2gnLFxuICAgICdpbnN0YW5jZW9mJyxcbiAgICAndm9sYXRpbGUnLFxuICAgICdjYXNlJyxcbiAgICAnYXNzZXJ0JyxcbiAgICAncGFja2FnZScsXG4gICAgJ2RlZmF1bHQnLFxuICAgICdwdWJsaWMnLFxuICAgICd0cnknLFxuICAgICdzd2l0Y2gnLFxuICAgICdjb250aW51ZScsXG4gICAgJ3Rocm93cycsXG4gICAgJ3Byb3RlY3RlZCcsXG4gICAgJ3B1YmxpYycsXG4gICAgJ3ByaXZhdGUnLFxuICAgICdtb2R1bGUnLFxuICAgICdyZXF1aXJlcycsXG4gICAgJ2V4cG9ydHMnLFxuICAgICdkbycsXG4gICAgJ3NlYWxlZCdcbiAgXTtcblxuICBjb25zdCBCVUlMVF9JTlMgPSBbXG4gICAgJ3N1cGVyJyxcbiAgICAndGhpcydcbiAgXTtcblxuICBjb25zdCBMSVRFUkFMUyA9IFtcbiAgICAnZmFsc2UnLFxuICAgICd0cnVlJyxcbiAgICAnbnVsbCdcbiAgXTtcblxuICBjb25zdCBUWVBFUyA9IFtcbiAgICAnY2hhcicsXG4gICAgJ2Jvb2xlYW4nLFxuICAgICdsb25nJyxcbiAgICAnZmxvYXQnLFxuICAgICdpbnQnLFxuICAgICdieXRlJyxcbiAgICAnc2hvcnQnLFxuICAgICdkb3VibGUnXG4gIF07XG5cbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDogTUFJTl9LRVlXT1JEUyxcbiAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICB0eXBlOiBUWVBFUyxcbiAgICBidWlsdF9pbjogQlVJTFRfSU5TXG4gIH07XG5cbiAgY29uc3QgQU5OT1RBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0AnICsgSkFWQV9JREVOVF9SRSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGNvbnRhaW5zOiBbIFwic2VsZlwiIF0gLy8gYWxsb3cgbmVzdGVkICgpIGluc2lkZSBvdXIgYW5ub3RhdGlvblxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46IC9cXCgvLFxuICAgIGVuZDogL1xcKS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogWyBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFIF0sXG4gICAgZW5kc1BhcmVudDogdHJ1ZVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0phdmEnLFxuICAgIGFsaWFzZXM6IFsgJ2pzcCcgXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLzxcXC98Iy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJy9cXFxcKlxcXFwqJyxcbiAgICAgICAgJ1xcXFwqLycsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gZWF0IHVwIEAncyBpbiBlbWFpbHMgdG8gcHJldmVudCB0aGVtIHRvIGJlIHJlY29nbml6ZWQgYXMgZG9jdGFnc1xuICAgICAgICAgICAgICBiZWdpbjogL1xcdytALyxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICBiZWdpbjogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLy8gcmVsZXZhbmNlIGJvb3N0XG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvaW1wb3J0IGphdmFcXC5bYS16XStcXC4vLFxuICAgICAgICBrZXl3b3JkczogXCJpbXBvcnRcIixcbiAgICAgICAgcmVsZXZhbmNlOiAyXG4gICAgICB9LFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cIlwiXCIvLFxuICAgICAgICBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICBjbGFzc05hbWU6IFwic3RyaW5nXCIsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAvXFxiKD86Y2xhc3N8aW50ZXJmYWNlfGVudW18ZXh0ZW5kc3xpbXBsZW1lbnRzfG5ldykvLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICBKQVZBX0lERU5UX1JFXG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzTmFtZToge1xuICAgICAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDM6IFwidGl0bGUuY2xhc3NcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBFeGNlcHRpb25zIGZvciBoeXBoZW5hdGVkIGtleXdvcmRzXG4gICAgICAgIG1hdGNoOiAvbm9uLXNlYWxlZC8sXG4gICAgICAgIHNjb3BlOiBcImtleXdvcmRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFtcbiAgICAgICAgICByZWdleC5jb25jYXQoLyg/IWVsc2UpLywgSkFWQV9JREVOVF9SRSksXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIEpBVkFfSURFTlRfUkUsXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIC89KD8hPSkvXG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzTmFtZToge1xuICAgICAgICAgIDE6IFwidHlwZVwiLFxuICAgICAgICAgIDM6IFwidmFyaWFibGVcIixcbiAgICAgICAgICA1OiBcIm9wZXJhdG9yXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFtcbiAgICAgICAgICAvcmVjb3JkLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgSkFWQV9JREVOVF9SRVxuICAgICAgICBdLFxuICAgICAgICBjbGFzc05hbWU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInRpdGxlLmNsYXNzXCJcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBQQVJBTVMsXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gRXhwcmVzc2lvbiBrZXl3b3JkcyBwcmV2ZW50ICdrZXl3b3JkIE5hbWUoLi4uKScgZnJvbSBiZWluZ1xuICAgICAgICAvLyByZWNvZ25pemVkIGFzIGEgZnVuY3Rpb24gZGVmaW5pdGlvblxuICAgICAgICBiZWdpbktleXdvcmRzOiAnbmV3IHRocm93IHJldHVybiBlbHNlJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogW1xuICAgICAgICAgICcoPzonICsgR0VORVJJQ19JREVOVF9SRSArICdcXFxccyspJyxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICAgICAgL1xccyooPz1cXCgpL1xuICAgICAgICBdLFxuICAgICAgICBjbGFzc05hbWU6IHsgMjogXCJ0aXRsZS5mdW5jdGlvblwiIH0sXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIEFOTk9UQVRJT04sXG4gICAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgTlVNRVJJQyxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIE5VTUVSSUMsXG4gICAgICBBTk5PVEFUSU9OXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGphdmE7XG4iLCJjb25zdCBJREVOVF9SRSA9ICdbQS1aYS16JF9dWzAtOUEtWmEteiRfXSonO1xuY29uc3QgS0VZV09SRFMgPSBbXG4gIFwiYXNcIiwgLy8gZm9yIGV4cG9ydHNcbiAgXCJpblwiLFxuICBcIm9mXCIsXG4gIFwiaWZcIixcbiAgXCJmb3JcIixcbiAgXCJ3aGlsZVwiLFxuICBcImZpbmFsbHlcIixcbiAgXCJ2YXJcIixcbiAgXCJuZXdcIixcbiAgXCJmdW5jdGlvblwiLFxuICBcImRvXCIsXG4gIFwicmV0dXJuXCIsXG4gIFwidm9pZFwiLFxuICBcImVsc2VcIixcbiAgXCJicmVha1wiLFxuICBcImNhdGNoXCIsXG4gIFwiaW5zdGFuY2VvZlwiLFxuICBcIndpdGhcIixcbiAgXCJ0aHJvd1wiLFxuICBcImNhc2VcIixcbiAgXCJkZWZhdWx0XCIsXG4gIFwidHJ5XCIsXG4gIFwic3dpdGNoXCIsXG4gIFwiY29udGludWVcIixcbiAgXCJ0eXBlb2ZcIixcbiAgXCJkZWxldGVcIixcbiAgXCJsZXRcIixcbiAgXCJ5aWVsZFwiLFxuICBcImNvbnN0XCIsXG4gIFwiY2xhc3NcIixcbiAgLy8gSlMgaGFuZGxlcyB0aGVzZSB3aXRoIGEgc3BlY2lhbCBydWxlXG4gIC8vIFwiZ2V0XCIsXG4gIC8vIFwic2V0XCIsXG4gIFwiZGVidWdnZXJcIixcbiAgXCJhc3luY1wiLFxuICBcImF3YWl0XCIsXG4gIFwic3RhdGljXCIsXG4gIFwiaW1wb3J0XCIsXG4gIFwiZnJvbVwiLFxuICBcImV4cG9ydFwiLFxuICBcImV4dGVuZHNcIlxuXTtcbmNvbnN0IExJVEVSQUxTID0gW1xuICBcInRydWVcIixcbiAgXCJmYWxzZVwiLFxuICBcIm51bGxcIixcbiAgXCJ1bmRlZmluZWRcIixcbiAgXCJOYU5cIixcbiAgXCJJbmZpbml0eVwiXG5dO1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0c1xuY29uc3QgVFlQRVMgPSBbXG4gIC8vIEZ1bmRhbWVudGFsIG9iamVjdHNcbiAgXCJPYmplY3RcIixcbiAgXCJGdW5jdGlvblwiLFxuICBcIkJvb2xlYW5cIixcbiAgXCJTeW1ib2xcIixcbiAgLy8gbnVtYmVycyBhbmQgZGF0ZXNcbiAgXCJNYXRoXCIsXG4gIFwiRGF0ZVwiLFxuICBcIk51bWJlclwiLFxuICBcIkJpZ0ludFwiLFxuICAvLyB0ZXh0XG4gIFwiU3RyaW5nXCIsXG4gIFwiUmVnRXhwXCIsXG4gIC8vIEluZGV4ZWQgY29sbGVjdGlvbnNcbiAgXCJBcnJheVwiLFxuICBcIkZsb2F0MzJBcnJheVwiLFxuICBcIkZsb2F0NjRBcnJheVwiLFxuICBcIkludDhBcnJheVwiLFxuICBcIlVpbnQ4QXJyYXlcIixcbiAgXCJVaW50OENsYW1wZWRBcnJheVwiLFxuICBcIkludDE2QXJyYXlcIixcbiAgXCJJbnQzMkFycmF5XCIsXG4gIFwiVWludDE2QXJyYXlcIixcbiAgXCJVaW50MzJBcnJheVwiLFxuICBcIkJpZ0ludDY0QXJyYXlcIixcbiAgXCJCaWdVaW50NjRBcnJheVwiLFxuICAvLyBLZXllZCBjb2xsZWN0aW9uc1xuICBcIlNldFwiLFxuICBcIk1hcFwiLFxuICBcIldlYWtTZXRcIixcbiAgXCJXZWFrTWFwXCIsXG4gIC8vIFN0cnVjdHVyZWQgZGF0YVxuICBcIkFycmF5QnVmZmVyXCIsXG4gIFwiU2hhcmVkQXJyYXlCdWZmZXJcIixcbiAgXCJBdG9taWNzXCIsXG4gIFwiRGF0YVZpZXdcIixcbiAgXCJKU09OXCIsXG4gIC8vIENvbnRyb2wgYWJzdHJhY3Rpb24gb2JqZWN0c1xuICBcIlByb21pc2VcIixcbiAgXCJHZW5lcmF0b3JcIixcbiAgXCJHZW5lcmF0b3JGdW5jdGlvblwiLFxuICBcIkFzeW5jRnVuY3Rpb25cIixcbiAgLy8gUmVmbGVjdGlvblxuICBcIlJlZmxlY3RcIixcbiAgXCJQcm94eVwiLFxuICAvLyBJbnRlcm5hdGlvbmFsaXphdGlvblxuICBcIkludGxcIixcbiAgLy8gV2ViQXNzZW1ibHlcbiAgXCJXZWJBc3NlbWJseVwiXG5dO1xuXG5jb25zdCBFUlJPUl9UWVBFUyA9IFtcbiAgXCJFcnJvclwiLFxuICBcIkV2YWxFcnJvclwiLFxuICBcIkludGVybmFsRXJyb3JcIixcbiAgXCJSYW5nZUVycm9yXCIsXG4gIFwiUmVmZXJlbmNlRXJyb3JcIixcbiAgXCJTeW50YXhFcnJvclwiLFxuICBcIlR5cGVFcnJvclwiLFxuICBcIlVSSUVycm9yXCJcbl07XG5cbmNvbnN0IEJVSUxUX0lOX0dMT0JBTFMgPSBbXG4gIFwic2V0SW50ZXJ2YWxcIixcbiAgXCJzZXRUaW1lb3V0XCIsXG4gIFwiY2xlYXJJbnRlcnZhbFwiLFxuICBcImNsZWFyVGltZW91dFwiLFxuXG4gIFwicmVxdWlyZVwiLFxuICBcImV4cG9ydHNcIixcblxuICBcImV2YWxcIixcbiAgXCJpc0Zpbml0ZVwiLFxuICBcImlzTmFOXCIsXG4gIFwicGFyc2VGbG9hdFwiLFxuICBcInBhcnNlSW50XCIsXG4gIFwiZGVjb2RlVVJJXCIsXG4gIFwiZGVjb2RlVVJJQ29tcG9uZW50XCIsXG4gIFwiZW5jb2RlVVJJXCIsXG4gIFwiZW5jb2RlVVJJQ29tcG9uZW50XCIsXG4gIFwiZXNjYXBlXCIsXG4gIFwidW5lc2NhcGVcIlxuXTtcblxuY29uc3QgQlVJTFRfSU5fVkFSSUFCTEVTID0gW1xuICBcImFyZ3VtZW50c1wiLFxuICBcInRoaXNcIixcbiAgXCJzdXBlclwiLFxuICBcImNvbnNvbGVcIixcbiAgXCJ3aW5kb3dcIixcbiAgXCJkb2N1bWVudFwiLFxuICBcImxvY2FsU3RvcmFnZVwiLFxuICBcIm1vZHVsZVwiLFxuICBcImdsb2JhbFwiIC8vIE5vZGUuanNcbl07XG5cbmNvbnN0IEJVSUxUX0lOUyA9IFtdLmNvbmNhdChcbiAgQlVJTFRfSU5fR0xPQkFMUyxcbiAgVFlQRVMsXG4gIEVSUk9SX1RZUEVTXG4pO1xuXG4vKlxuTGFuZ3VhZ2U6IEphdmFTY3JpcHRcbkRlc2NyaXB0aW9uOiBKYXZhU2NyaXB0IChKUykgaXMgYSBsaWdodHdlaWdodCwgaW50ZXJwcmV0ZWQsIG9yIGp1c3QtaW4tdGltZSBjb21waWxlZCBwcm9ncmFtbWluZyBsYW5ndWFnZSB3aXRoIGZpcnN0LWNsYXNzIGZ1bmN0aW9ucy5cbkNhdGVnb3J5OiBjb21tb24sIHNjcmlwdGluZywgd2ViXG5XZWJzaXRlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0XG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gamF2YXNjcmlwdChobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgLyoqXG4gICAqIFRha2VzIGEgc3RyaW5nIGxpa2UgXCI8Qm9vZ2VyXCIgYW5kIGNoZWNrcyB0byBzZWVcbiAgICogaWYgd2UgY2FuIGZpbmQgYSBtYXRjaGluZyBcIjwvQm9vZ2VyXCIgbGF0ZXIgaW4gdGhlXG4gICAqIGNvbnRlbnQuXG4gICAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2hcbiAgICogQHBhcmFtIHt7YWZ0ZXI6bnVtYmVyfX0gcGFyYW0xXG4gICAqL1xuICBjb25zdCBoYXNDbG9zaW5nVGFnID0gKG1hdGNoLCB7IGFmdGVyIH0pID0+IHtcbiAgICBjb25zdCB0YWcgPSBcIjwvXCIgKyBtYXRjaFswXS5zbGljZSgxKTtcbiAgICBjb25zdCBwb3MgPSBtYXRjaC5pbnB1dC5pbmRleE9mKHRhZywgYWZ0ZXIpO1xuICAgIHJldHVybiBwb3MgIT09IC0xO1xuICB9O1xuXG4gIGNvbnN0IElERU5UX1JFJDEgPSBJREVOVF9SRTtcbiAgY29uc3QgRlJBR01FTlQgPSB7XG4gICAgYmVnaW46ICc8PicsXG4gICAgZW5kOiAnPC8+J1xuICB9O1xuICAvLyB0byBhdm9pZCBzb21lIHNwZWNpYWwgY2FzZXMgaW5zaWRlIGlzVHJ1bHlPcGVuaW5nVGFnXG4gIGNvbnN0IFhNTF9TRUxGX0NMT1NJTkcgPSAvPFtBLVphLXowLTlcXFxcLl86LV0rXFxzKlxcLz4vO1xuICBjb25zdCBYTUxfVEFHID0ge1xuICAgIGJlZ2luOiAvPFtBLVphLXowLTlcXFxcLl86LV0rLyxcbiAgICBlbmQ6IC9cXC9bQS1aYS16MC05XFxcXC5fOi1dKz58XFwvPi8sXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtSZWdFeHBNYXRjaEFycmF5fSBtYXRjaFxuICAgICAqIEBwYXJhbSB7Q2FsbGJhY2tSZXNwb25zZX0gcmVzcG9uc2VcbiAgICAgKi9cbiAgICBpc1RydWx5T3BlbmluZ1RhZzogKG1hdGNoLCByZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgYWZ0ZXJNYXRjaEluZGV4ID0gbWF0Y2hbMF0ubGVuZ3RoICsgbWF0Y2guaW5kZXg7XG4gICAgICBjb25zdCBuZXh0Q2hhciA9IG1hdGNoLmlucHV0W2FmdGVyTWF0Y2hJbmRleF07XG4gICAgICBpZiAoXG4gICAgICAgIC8vIEhUTUwgc2hvdWxkIG5vdCBpbmNsdWRlIGFub3RoZXIgcmF3IGA8YCBpbnNpZGUgYSB0YWdcbiAgICAgICAgLy8gbmVzdGVkIHR5cGU/XG4gICAgICAgIC8vIGA8QXJyYXk8QXJyYXk8bnVtYmVyPj5gLCBldGMuXG4gICAgICAgIG5leHRDaGFyID09PSBcIjxcIiB8fFxuICAgICAgICAvLyB0aGUgLCBnaXZlcyBhd2F5IHRoYXQgdGhpcyBpcyBub3QgSFRNTFxuICAgICAgICAvLyBgPFQsIEEgZXh0ZW5kcyBrZXlvZiBULCBWPmBcbiAgICAgICAgbmV4dENoYXIgPT09IFwiLFwiKSB7XG4gICAgICAgIHJlc3BvbnNlLmlnbm9yZU1hdGNoKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYDxzb21ldGhpbmc+YFxuICAgICAgLy8gUXVpdGUgcG9zc2libHkgYSB0YWcsIGxldHMgbG9vayBmb3IgYSBtYXRjaGluZyBjbG9zaW5nIHRhZy4uLlxuICAgICAgaWYgKG5leHRDaGFyID09PSBcIj5cIikge1xuICAgICAgICAvLyBpZiB3ZSBjYW5ub3QgZmluZCBhIG1hdGNoaW5nIGNsb3NpbmcgdGFnLCB0aGVuIHdlXG4gICAgICAgIC8vIHdpbGwgaWdub3JlIGl0XG4gICAgICAgIGlmICghaGFzQ2xvc2luZ1RhZyhtYXRjaCwgeyBhZnRlcjogYWZ0ZXJNYXRjaEluZGV4IH0pKSB7XG4gICAgICAgICAgcmVzcG9uc2UuaWdub3JlTWF0Y2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBgPGJsYWggLz5gIChzZWxmLWNsb3NpbmcpXG4gICAgICAvLyBoYW5kbGVkIGJ5IHNpbXBsZVNlbGZDbG9zaW5nIHJ1bGVcblxuICAgICAgLy8gYDxGcm9tIGV4dGVuZHMgc3RyaW5nPmBcbiAgICAgIC8vIHRlY2huaWNhbGx5IHRoaXMgY291bGQgYmUgSFRNTCwgYnV0IGl0IHNtZWxscyBsaWtlIGEgdHlwZVxuICAgICAgbGV0IG07XG4gICAgICBjb25zdCBhZnRlck1hdGNoID0gbWF0Y2guaW5wdXQuc3Vic3RyaW5nKGFmdGVyTWF0Y2hJbmRleCk7XG4gICAgICAvLyBOT1RFOiBUaGlzIGlzIHVnaCwgYnV0IGFkZGVkIHNwZWNpZmljYWxseSBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMzI3NlxuICAgICAgaWYgKChtID0gYWZ0ZXJNYXRjaC5tYXRjaCgvXlxccytleHRlbmRzXFxzKy8pKSkge1xuICAgICAgICBpZiAobS5pbmRleCA9PT0gMCkge1xuICAgICAgICAgIHJlc3BvbnNlLmlnbm9yZU1hdGNoKCk7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtcmV0dXJuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBLRVlXT1JEUyQxID0ge1xuICAgICRwYXR0ZXJuOiBJREVOVF9SRSxcbiAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICBidWlsdF9pbjogQlVJTFRfSU5TLFxuICAgIFwidmFyaWFibGUubGFuZ3VhZ2VcIjogQlVJTFRfSU5fVkFSSUFCTEVTXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1saXRlcmFscy1udW1lcmljLWxpdGVyYWxzXG4gIGNvbnN0IGRlY2ltYWxEaWdpdHMgPSAnWzAtOV0oXz9bMC05XSkqJztcbiAgY29uc3QgZnJhYyA9IGBcXFxcLigke2RlY2ltYWxEaWdpdHN9KWA7XG4gIC8vIERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCwgaW5jbHVkaW5nIEFubmV4IEIgTm9uT2N0YWxEZWNpbWFsSW50ZWdlckxpdGVyYWxcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZGRpdGlvbmFsLXN5bnRheC1udW1lcmljLWxpdGVyYWxzXG4gIGNvbnN0IGRlY2ltYWxJbnRlZ2VyID0gYDB8WzEtOV0oXz9bMC05XSkqfDBbMC03XSpbODldWzAtOV0qYDtcbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIC8vIERlY2ltYWxMaXRlcmFsXG4gICAgICB7IGJlZ2luOiBgKFxcXFxiKCR7ZGVjaW1hbEludGVnZXJ9KSgoJHtmcmFjfSl8XFxcXC4pP3woJHtmcmFjfSkpYCArXG4gICAgICAgIGBbZUVdWystXT8oJHtkZWNpbWFsRGlnaXRzfSlcXFxcYmAgfSxcbiAgICAgIHsgYmVnaW46IGBcXFxcYigke2RlY2ltYWxJbnRlZ2VyfSlcXFxcYigoJHtmcmFjfSlcXFxcYnxcXFxcLik/fCgke2ZyYWN9KVxcXFxiYCB9LFxuXG4gICAgICAvLyBEZWNpbWFsQmlnSW50ZWdlckxpdGVyYWxcbiAgICAgIHsgYmVnaW46IGBcXFxcYigwfFsxLTldKF8/WzAtOV0pKiluXFxcXGJgIH0sXG5cbiAgICAgIC8vIE5vbkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbFxuICAgICAgeyBiZWdpbjogXCJcXFxcYjBbeFhdWzAtOWEtZkEtRl0oXz9bMC05YS1mQS1GXSkqbj9cXFxcYlwiIH0sXG4gICAgICB7IGJlZ2luOiBcIlxcXFxiMFtiQl1bMC0xXShfP1swLTFdKSpuP1xcXFxiXCIgfSxcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwW29PXVswLTddKF8/WzAtN10pKm4/XFxcXGJcIiB9LFxuXG4gICAgICAvLyBMZWdhY3lPY3RhbEludGVnZXJMaXRlcmFsIChkb2VzIG5vdCBpbmNsdWRlIHVuZGVyc2NvcmUgc2VwYXJhdG9ycylcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWRkaXRpb25hbC1zeW50YXgtbnVtZXJpYy1saXRlcmFsc1xuICAgICAgeyBiZWdpbjogXCJcXFxcYjBbMC03XStuP1xcXFxiXCIgfSxcbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ1xcXFwkXFxcXHsnLFxuICAgIGVuZDogJ1xcXFx9JyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICBjb250YWluczogW10gLy8gZGVmaW5lZCBsYXRlclxuICB9O1xuICBjb25zdCBIVE1MX1RFTVBMQVRFID0ge1xuICAgIGJlZ2luOiAnaHRtbGAnLFxuICAgIGVuZDogJycsXG4gICAgc3RhcnRzOiB7XG4gICAgICBlbmQ6ICdgJyxcbiAgICAgIHJldHVybkVuZDogZmFsc2UsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgIFNVQlNUXG4gICAgICBdLFxuICAgICAgc3ViTGFuZ3VhZ2U6ICd4bWwnXG4gICAgfVxuICB9O1xuICBjb25zdCBDU1NfVEVNUExBVEUgPSB7XG4gICAgYmVnaW46ICdjc3NgJyxcbiAgICBlbmQ6ICcnLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnYCcsXG4gICAgICByZXR1cm5FbmQ6IGZhbHNlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICBTVUJTVFxuICAgICAgXSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAnY3NzJ1xuICAgIH1cbiAgfTtcbiAgY29uc3QgVEVNUExBVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdgJyxcbiAgICBlbmQ6ICdgJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgU1VCU1RcbiAgICBdXG4gIH07XG4gIGNvbnN0IEpTRE9DX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgL1xcL1xcKlxcKig/IVxcLykvLFxuICAgICdcXFxcKi8nLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJyg/PUBbQS1aYS16XSspJyxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgIGJlZ2luOiAnXFxcXHsnLFxuICAgICAgICAgICAgICBlbmQ6ICdcXFxcfScsXG4gICAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgICAgICAgIGJlZ2luOiBJREVOVF9SRSQxICsgJyg/PVxcXFxzKigtKXwkKScsXG4gICAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGVhdCBzcGFjZXMgKG5vdCBuZXdsaW5lcykgc28gd2UgY2FuIGZpbmRcbiAgICAgICAgICAgIC8vIHR5cGVzIG9yIHZhcmlhYmxlc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbjogLyg/PVteXFxuXSlcXHMvLFxuICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gICk7XG4gIGNvbnN0IENPTU1FTlQgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbW1lbnRcIixcbiAgICB2YXJpYW50czogW1xuICAgICAgSlNET0NfQ09NTUVOVCxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG4gIGNvbnN0IFNVQlNUX0lOVEVSTkFMUyA9IFtcbiAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICBIVE1MX1RFTVBMQVRFLFxuICAgIENTU19URU1QTEFURSxcbiAgICBURU1QTEFURV9TVFJJTkcsXG4gICAgTlVNQkVSLFxuICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWw6XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzMyODhcbiAgICAvLyBobGpzLlJFR0VYUF9NT0RFXG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gU1VCU1RfSU5URVJOQUxTXG4gICAgLmNvbmNhdCh7XG4gICAgICAvLyB3ZSBuZWVkIHRvIHBhaXIgdXAge30gaW5zaWRlIG91ciBzdWJzdCB0byBwcmV2ZW50XG4gICAgICAvLyBpdCBmcm9tIGVuZGluZyB0b28gZWFybHkgYnkgbWF0Y2hpbmcgYW5vdGhlciB9XG4gICAgICBiZWdpbjogL1xcey8sXG4gICAgICBlbmQ6IC9cXH0vLFxuICAgICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBcInNlbGZcIlxuICAgICAgXS5jb25jYXQoU1VCU1RfSU5URVJOQUxTKVxuICAgIH0pO1xuICBjb25zdCBTVUJTVF9BTkRfQ09NTUVOVFMgPSBbXS5jb25jYXQoQ09NTUVOVCwgU1VCU1QuY29udGFpbnMpO1xuICBjb25zdCBQQVJBTVNfQ09OVEFJTlMgPSBTVUJTVF9BTkRfQ09NTUVOVFMuY29uY2F0KFtcbiAgICAvLyBlYXQgcmVjdXJzaXZlIHBhcmVucyBpbiBzdWIgZXhwcmVzc2lvbnNcbiAgICB7XG4gICAgICBiZWdpbjogL1xcKC8sXG4gICAgICBlbmQ6IC9cXCkvLFxuICAgICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgICBjb250YWluczogW1wic2VsZlwiXS5jb25jYXQoU1VCU1RfQU5EX0NPTU1FTlRTKVxuICAgIH1cbiAgXSk7XG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgIGNvbnRhaW5zOiBQQVJBTVNfQ09OVEFJTlNcbiAgfTtcblxuICAvLyBFUzYgY2xhc3Nlc1xuICBjb25zdCBDTEFTU19PUl9FWFRFTkRTID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBjbGFzcyBDYXIgZXh0ZW5kcyB2ZWhpY2xlXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL2NsYXNzLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgSURFTlRfUkUkMSxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgL2V4dGVuZHMvLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICByZWdleC5jb25jYXQoSURFTlRfUkUkMSwgXCIoXCIsIHJlZ2V4LmNvbmNhdCgvXFwuLywgSURFTlRfUkUkMSksIFwiKSpcIilcbiAgICAgICAgXSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInRpdGxlLmNsYXNzXCIsXG4gICAgICAgICAgNTogXCJrZXl3b3JkXCIsXG4gICAgICAgICAgNzogXCJ0aXRsZS5jbGFzcy5pbmhlcml0ZWRcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gY2xhc3MgQ2FyXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL2NsYXNzLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgSURFTlRfUkUkMVxuICAgICAgICBdLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDM6IFwidGl0bGUuY2xhc3NcIlxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IENMQVNTX1JFRkVSRU5DRSA9IHtcbiAgICByZWxldmFuY2U6IDAsXG4gICAgbWF0Y2g6XG4gICAgcmVnZXguZWl0aGVyKFxuICAgICAgLy8gSGFyZCBjb2RlZCBleGNlcHRpb25zXG4gICAgICAvXFxiSlNPTi8sXG4gICAgICAvLyBGbG9hdDMyQXJyYXksIE91dFRcbiAgICAgIC9cXGJbQS1aXVthLXpdKyhbQS1aXVthLXpdKnxcXGQpKi8sXG4gICAgICAvLyBDU1NGYWN0b3J5LCBDU1NGYWN0b3J5VFxuICAgICAgL1xcYltBLVpdezIsfShbQS1aXVthLXpdK3xcXGQpKyhbQS1aXVthLXpdKikqLyxcbiAgICAgIC8vIEZQcywgRlBzVFxuICAgICAgL1xcYltBLVpdezIsfVthLXpdKyhbQS1aXVthLXpdK3xcXGQpKihbQS1aXVthLXpdKikqLyxcbiAgICAgIC8vIFBcbiAgICAgIC8vIHNpbmdsZSBsZXR0ZXJzIGFyZSBub3QgaGlnaGxpZ2h0ZWRcbiAgICAgIC8vIEJMQUhcbiAgICAgIC8vIHRoaXMgd2lsbCBiZSBmbGFnZ2VkIGFzIGEgVVBQRVJfQ0FTRV9DT05TVEFOVCBpbnN0ZWFkXG4gICAgKSxcbiAgICBjbGFzc05hbWU6IFwidGl0bGUuY2xhc3NcIixcbiAgICBrZXl3b3Jkczoge1xuICAgICAgXzogW1xuICAgICAgICAvLyBzZSB3ZSBzdGlsbCBnZXQgcmVsZXZhbmNlIGNyZWRpdCBmb3IgSlMgbGlicmFyeSBjbGFzc2VzXG4gICAgICAgIC4uLlRZUEVTLFxuICAgICAgICAuLi5FUlJPUl9UWVBFU1xuICAgICAgXVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBVU0VfU1RSSUNUID0ge1xuICAgIGxhYmVsOiBcInVzZV9zdHJpY3RcIixcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICByZWxldmFuY2U6IDEwLFxuICAgIGJlZ2luOiAvXlxccypbJ1wiXXVzZSAoc3RyaWN0fGFzbSlbJ1wiXS9cbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9ERUZJTklUSU9OID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL2Z1bmN0aW9uLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgSURFTlRfUkUkMSxcbiAgICAgICAgICAvKD89XFxzKlxcKCkvXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBhbm9ueW1vdXMgZnVuY3Rpb25cbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAvZnVuY3Rpb24vLFxuICAgICAgICAgIC9cXHMqKD89XFwoKS9cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0sXG4gICAgY2xhc3NOYW1lOiB7XG4gICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgIDM6IFwidGl0bGUuZnVuY3Rpb25cIlxuICAgIH0sXG4gICAgbGFiZWw6IFwiZnVuYy5kZWZcIixcbiAgICBjb250YWluczogWyBQQVJBTVMgXSxcbiAgICBpbGxlZ2FsOiAvJS9cbiAgfTtcblxuICBjb25zdCBVUFBFUl9DQVNFX0NPTlNUQU5UID0ge1xuICAgIHJlbGV2YW5jZTogMCxcbiAgICBtYXRjaDogL1xcYltBLVpdW0EtWl8wLTldK1xcYi8sXG4gICAgY2xhc3NOYW1lOiBcInZhcmlhYmxlLmNvbnN0YW50XCJcbiAgfTtcblxuICBmdW5jdGlvbiBub25lT2YobGlzdCkge1xuICAgIHJldHVybiByZWdleC5jb25jYXQoXCIoPyFcIiwgbGlzdC5qb2luKFwifFwiKSwgXCIpXCIpO1xuICB9XG5cbiAgY29uc3QgRlVOQ1RJT05fQ0FMTCA9IHtcbiAgICBtYXRjaDogcmVnZXguY29uY2F0KFxuICAgICAgL1xcYi8sXG4gICAgICBub25lT2YoW1xuICAgICAgICAuLi5CVUlMVF9JTl9HTE9CQUxTLFxuICAgICAgICBcInN1cGVyXCJcbiAgICAgIF0pLFxuICAgICAgSURFTlRfUkUkMSwgcmVnZXgubG9va2FoZWFkKC9cXCgvKSksXG4gICAgY2xhc3NOYW1lOiBcInRpdGxlLmZ1bmN0aW9uXCIsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgUFJPUEVSVFlfQUNDRVNTID0ge1xuICAgIGJlZ2luOiByZWdleC5jb25jYXQoL1xcLi8sIHJlZ2V4Lmxvb2thaGVhZChcbiAgICAgIHJlZ2V4LmNvbmNhdChJREVOVF9SRSQxLCAvKD8hWzAtOUEtWmEteiRfKF0pLylcbiAgICApKSxcbiAgICBlbmQ6IElERU5UX1JFJDEsXG4gICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgIGtleXdvcmRzOiBcInByb3RvdHlwZVwiLFxuICAgIGNsYXNzTmFtZTogXCJwcm9wZXJ0eVwiLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IEdFVFRFUl9PUl9TRVRURVIgPSB7XG4gICAgbWF0Y2g6IFtcbiAgICAgIC9nZXR8c2V0LyxcbiAgICAgIC9cXHMrLyxcbiAgICAgIElERU5UX1JFJDEsXG4gICAgICAvKD89XFwoKS9cbiAgICBdLFxuICAgIGNsYXNzTmFtZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInRpdGxlLmZ1bmN0aW9uXCJcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IC8vIGVhdCB0byBhdm9pZCBlbXB0eSBwYXJhbXNcbiAgICAgICAgYmVnaW46IC9cXChcXCkvXG4gICAgICB9LFxuICAgICAgUEFSQU1TXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IEZVTkNfTEVBRF9JTl9SRSA9ICcoXFxcXCgnICtcbiAgICAnW14oKV0qKFxcXFwoJyArXG4gICAgJ1teKCldKihcXFxcKCcgK1xuICAgICdbXigpXSonICtcbiAgICAnXFxcXClbXigpXSopKicgK1xuICAgICdcXFxcKVteKCldKikqJyArXG4gICAgJ1xcXFwpfCcgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnKVxcXFxzKj0+JztcblxuICBjb25zdCBGVU5DVElPTl9WQVJJQUJMRSA9IHtcbiAgICBtYXRjaDogW1xuICAgICAgL2NvbnN0fHZhcnxsZXQvLCAvXFxzKy8sXG4gICAgICBJREVOVF9SRSQxLCAvXFxzKi8sXG4gICAgICAvPVxccyovLFxuICAgICAgLyhhc3luY1xccyopPy8sIC8vIGFzeW5jIGlzIG9wdGlvbmFsXG4gICAgICByZWdleC5sb29rYWhlYWQoRlVOQ19MRUFEX0lOX1JFKVxuICAgIF0sXG4gICAga2V5d29yZHM6IFwiYXN5bmNcIixcbiAgICBjbGFzc05hbWU6IHtcbiAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgMzogXCJ0aXRsZS5mdW5jdGlvblwiXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgUEFSQU1TXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0phdmFzY3JpcHQnLFxuICAgIGFsaWFzZXM6IFsnanMnLCAnanN4JywgJ21qcycsICdjanMnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICAvLyB0aGlzIHdpbGwgYmUgZXh0ZW5kZWQgYnkgVHlwZVNjcmlwdFxuICAgIGV4cG9ydHM6IHsgUEFSQU1TX0NPTlRBSU5TLCBDTEFTU19SRUZFUkVOQ0UgfSxcbiAgICBpbGxlZ2FsOiAvIyg/IVskX0Etel0pLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5TSEVCQU5HKHtcbiAgICAgICAgbGFiZWw6IFwic2hlYmFuZ1wiLFxuICAgICAgICBiaW5hcnk6IFwibm9kZVwiLFxuICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgIH0pLFxuICAgICAgVVNFX1NUUklDVCxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBIVE1MX1RFTVBMQVRFLFxuICAgICAgQ1NTX1RFTVBMQVRFLFxuICAgICAgVEVNUExBVEVfU1RSSU5HLFxuICAgICAgQ09NTUVOVCxcbiAgICAgIE5VTUJFUixcbiAgICAgIENMQVNTX1JFRkVSRU5DRSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIGJlZ2luOiBJREVOVF9SRSQxICsgcmVnZXgubG9va2FoZWFkKCc6JyksXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIEZVTkNUSU9OX1ZBUklBQkxFLFxuICAgICAgeyAvLyBcInZhbHVlXCIgY29udGFpbmVyXG4gICAgICAgIGJlZ2luOiAnKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3xcXFxcYihjYXNlfHJldHVybnx0aHJvdylcXFxcYilcXFxccyonLFxuICAgICAgICBrZXl3b3JkczogJ3JldHVybiB0aHJvdyBjYXNlJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIENPTU1FTlQsXG4gICAgICAgICAgaGxqcy5SRUdFWFBfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGNvdW50IHRoZSBwYXJlbnMgdG8gbWFrZSBzdXJlIHdlIGFjdHVhbGx5IGhhdmUgdGhlXG4gICAgICAgICAgICAvLyBjb3JyZWN0IGJvdW5kaW5nICggKSBiZWZvcmUgdGhlID0+LiAgVGhlcmUgY291bGQgYmUgYW55IG51bWJlciBvZlxuICAgICAgICAgICAgLy8gc3ViLWV4cHJlc3Npb25zIGluc2lkZSBhbHNvIHN1cnJvdW5kZWQgYnkgcGFyZW5zLlxuICAgICAgICAgICAgYmVnaW46IEZVTkNfTEVBRF9JTl9SRSxcbiAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZW5kOiAnXFxcXHMqPT4nLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFwoXFxzKlxcKS8sXG4gICAgICAgICAgICAgICAgICAgIHNraXA6IHRydWVcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6IFBBUkFNU19DT05UQUlOU1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyAvLyBjb3VsZCBiZSBhIGNvbW1hIGRlbGltaXRlZCBsaXN0IG9mIHBhcmFtcyB0byBhIGZ1bmN0aW9uIGNhbGxcbiAgICAgICAgICAgIGJlZ2luOiAvLC8sXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hdGNoOiAvXFxzKy8sXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLy8gSlNYXG4gICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICB7IGJlZ2luOiBGUkFHTUVOVC5iZWdpbiwgZW5kOiBGUkFHTUVOVC5lbmQgfSxcbiAgICAgICAgICAgICAgeyBtYXRjaDogWE1MX1NFTEZfQ0xPU0lORyB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IFhNTF9UQUcuYmVnaW4sXG4gICAgICAgICAgICAgICAgLy8gd2UgY2FyZWZ1bGx5IGNoZWNrIHRoZSBvcGVuaW5nIHRhZyB0byBzZWUgaWYgaXQgdHJ1bHlcbiAgICAgICAgICAgICAgICAvLyBpcyBhIHRhZyBhbmQgbm90IGEgZmFsc2UgcG9zaXRpdmVcbiAgICAgICAgICAgICAgICAnb246YmVnaW4nOiBYTUxfVEFHLmlzVHJ1bHlPcGVuaW5nVGFnLFxuICAgICAgICAgICAgICAgIGVuZDogWE1MX1RBRy5lbmRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogWE1MX1RBRy5iZWdpbixcbiAgICAgICAgICAgICAgICBlbmQ6IFhNTF9UQUcuZW5kLFxuICAgICAgICAgICAgICAgIHNraXA6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFsnc2VsZiddXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgRlVOQ1RJT05fREVGSU5JVElPTixcbiAgICAgIHtcbiAgICAgICAgLy8gcHJldmVudCB0aGlzIGZyb20gZ2V0dGluZyBzd2FsbG93ZWQgdXAgYnkgZnVuY3Rpb25cbiAgICAgICAgLy8gc2luY2UgdGhleSBhcHBlYXIgXCJmdW5jdGlvbiBsaWtlXCJcbiAgICAgICAgYmVnaW5LZXl3b3JkczogXCJ3aGlsZSBpZiBzd2l0Y2ggY2F0Y2ggZm9yXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIHdlIGhhdmUgdG8gY291bnQgdGhlIHBhcmVucyB0byBtYWtlIHN1cmUgd2UgYWN0dWFsbHkgaGF2ZSB0aGUgY29ycmVjdFxuICAgICAgICAvLyBib3VuZGluZyAoICkuICBUaGVyZSBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mIHN1Yi1leHByZXNzaW9ucyBpbnNpZGVcbiAgICAgICAgLy8gYWxzbyBzdXJyb3VuZGVkIGJ5IHBhcmVucy5cbiAgICAgICAgYmVnaW46ICdcXFxcYig/IWZ1bmN0aW9uKScgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgK1xuICAgICAgICAgICdcXFxcKCcgKyAvLyBmaXJzdCBwYXJlbnNcbiAgICAgICAgICAnW14oKV0qKFxcXFwoJyArXG4gICAgICAgICAgICAnW14oKV0qKFxcXFwoJyArXG4gICAgICAgICAgICAgICdbXigpXSonICtcbiAgICAgICAgICAgICdcXFxcKVteKCldKikqJyArXG4gICAgICAgICAgJ1xcXFwpW14oKV0qKSonICtcbiAgICAgICAgICAnXFxcXClcXFxccypcXFxceycsIC8vIGVuZCBwYXJlbnNcbiAgICAgICAgcmV0dXJuQmVnaW46dHJ1ZSxcbiAgICAgICAgbGFiZWw6IFwiZnVuYy5kZWZcIixcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBQQVJBTVMsXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBiZWdpbjogSURFTlRfUkUkMSwgY2xhc3NOYW1lOiBcInRpdGxlLmZ1bmN0aW9uXCIgfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGNhdGNoIC4uLiBzbyBpdCB3b24ndCB0cmlnZ2VyIHRoZSBwcm9wZXJ0eSBydWxlIGJlbG93XG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAvXFwuXFwuXFwuLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgUFJPUEVSVFlfQUNDRVNTLFxuICAgICAgLy8gaGFjazogcHJldmVudHMgZGV0ZWN0aW9uIG9mIGtleXdvcmRzIGluIHNvbWUgY2lyY3Vtc3RhbmNlc1xuICAgICAgLy8gLmtleXdvcmQoKVxuICAgICAgLy8gJGtleXdvcmQgPSB4XG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAnXFxcXCQnICsgSURFTlRfUkUkMSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtYXRjaDogWyAvXFxiY29uc3RydWN0b3IoPz1cXHMqXFwoKS8gXSxcbiAgICAgICAgY2xhc3NOYW1lOiB7IDE6IFwidGl0bGUuZnVuY3Rpb25cIiB9LFxuICAgICAgICBjb250YWluczogWyBQQVJBTVMgXVxuICAgICAgfSxcbiAgICAgIEZVTkNUSU9OX0NBTEwsXG4gICAgICBVUFBFUl9DQVNFX0NPTlNUQU5ULFxuICAgICAgQ0xBU1NfT1JfRVhURU5EUyxcbiAgICAgIEdFVFRFUl9PUl9TRVRURVIsXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAvXFwkWyguXS8gLy8gcmVsZXZhbmNlIGJvb3N0ZXIgZm9yIGEgcGF0dGVybiBjb21tb24gdG8gSlMgbGliczogYCQoc29tZXRoaW5nKWAgYW5kIGAkLnNvbWV0aGluZ2BcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gamF2YXNjcmlwdDtcbiIsIi8qXG5MYW5ndWFnZTogSlNPTlxuRGVzY3JpcHRpb246IEpTT04gKEphdmFTY3JpcHQgT2JqZWN0IE5vdGF0aW9uKSBpcyBhIGxpZ2h0d2VpZ2h0IGRhdGEtaW50ZXJjaGFuZ2UgZm9ybWF0LlxuQXV0aG9yOiBJdmFuIFNhZ2FsYWV2IDxtYW5pYWNAc29mdHdhcmVtYW5pYWNzLm9yZz5cbldlYnNpdGU6IGh0dHA6Ly93d3cuanNvbi5vcmdcbkNhdGVnb3J5OiBjb21tb24sIHByb3RvY29scywgd2ViXG4qL1xuXG5mdW5jdGlvbiBqc29uKGhsanMpIHtcbiAgY29uc3QgQVRUUklCVVRFID0ge1xuICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgIGJlZ2luOiAvXCIoXFxcXC58W15cXFxcXCJcXHJcXG5dKSpcIig/PVxccyo6KS8sXG4gICAgcmVsZXZhbmNlOiAxLjAxXG4gIH07XG4gIGNvbnN0IFBVTkNUVUFUSU9OID0ge1xuICAgIG1hdGNoOiAvW3t9W1xcXSw6XS8sXG4gICAgY2xhc3NOYW1lOiBcInB1bmN0dWF0aW9uXCIsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IExJVEVSQUxTID0gW1xuICAgIFwidHJ1ZVwiLFxuICAgIFwiZmFsc2VcIixcbiAgICBcIm51bGxcIlxuICBdO1xuICAvLyBOT1RFOiBub3JtYWxseSB3ZSB3b3VsZCByZWx5IG9uIGBrZXl3b3Jkc2AgZm9yIHRoaXMgYnV0IHVzaW5nIGEgbW9kZSBoZXJlIGFsbG93cyB1c1xuICAvLyAtIHRvIHVzZSB0aGUgdmVyeSB0aWdodCBgaWxsZWdhbDogXFxTYCBydWxlIGxhdGVyIHRvIGZsYWcgYW55IG90aGVyIGNoYXJhY3RlclxuICAvLyAtIGFzIGlsbGVnYWwgaW5kaWNhdGluZyB0aGF0IGRlc3BpdGUgbG9va2luZyBsaWtlIEpTT04gd2UgZG8gbm90IHRydWx5IGhhdmVcbiAgLy8gLSBKU09OIGFuZCB0aHVzIGltcHJvdmUgZmFsc2UtcG9zaXRpdmVseSBncmVhdGx5IHNpbmNlIEpTT04gd2lsbCB0cnkgYW5kIGNsYWltXG4gIC8vIC0gYWxsIHNvcnRzIG9mIEpTT04gbG9va2luZyBzdHVmZlxuICBjb25zdCBMSVRFUkFMU19NT0RFID0ge1xuICAgIHNjb3BlOiBcImxpdGVyYWxcIixcbiAgICBiZWdpbktleXdvcmRzOiBMSVRFUkFMUy5qb2luKFwiIFwiKSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdKU09OJyxcbiAgICBrZXl3b3Jkczp7XG4gICAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBBVFRSSUJVVEUsXG4gICAgICBQVU5DVFVBVElPTixcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBMSVRFUkFMU19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF0sXG4gICAgaWxsZWdhbDogJ1xcXFxTJ1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb247XG4iLCIvLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2Uvc3BlY3MvamxzL3NlMTUvaHRtbC9qbHMtMy5odG1sI2pscy0zLjEwXG52YXIgZGVjaW1hbERpZ2l0cyA9ICdbMC05XShfKlswLTldKSonO1xudmFyIGZyYWMgPSBgXFxcXC4oJHtkZWNpbWFsRGlnaXRzfSlgO1xudmFyIGhleERpZ2l0cyA9ICdbMC05YS1mQS1GXShfKlswLTlhLWZBLUZdKSonO1xudmFyIE5VTUVSSUMgPSB7XG4gIGNsYXNzTmFtZTogJ251bWJlcicsXG4gIHZhcmlhbnRzOiBbXG4gICAgLy8gRGVjaW1hbEZsb2F0aW5nUG9pbnRMaXRlcmFsXG4gICAgLy8gaW5jbHVkaW5nIEV4cG9uZW50UGFydFxuICAgIHsgYmVnaW46IGAoXFxcXGIoJHtkZWNpbWFsRGlnaXRzfSkoKCR7ZnJhY30pfFxcXFwuKT98KCR7ZnJhY30pKWAgK1xuICAgICAgYFtlRV1bKy1dPygke2RlY2ltYWxEaWdpdHN9KVtmRmREXT9cXFxcYmAgfSxcbiAgICAvLyBleGNsdWRpbmcgRXhwb25lbnRQYXJ0XG4gICAgeyBiZWdpbjogYFxcXFxiKCR7ZGVjaW1hbERpZ2l0c30pKCgke2ZyYWN9KVtmRmREXT9cXFxcYnxcXFxcLihbZkZkRF1cXFxcYik/KWAgfSxcbiAgICB7IGJlZ2luOiBgKCR7ZnJhY30pW2ZGZERdP1xcXFxiYCB9LFxuICAgIHsgYmVnaW46IGBcXFxcYigke2RlY2ltYWxEaWdpdHN9KVtmRmREXVxcXFxiYCB9LFxuXG4gICAgLy8gSGV4YWRlY2ltYWxGbG9hdGluZ1BvaW50TGl0ZXJhbFxuICAgIHsgYmVnaW46IGBcXFxcYjBbeFhdKCgke2hleERpZ2l0c30pXFxcXC4/fCgke2hleERpZ2l0c30pP1xcXFwuKCR7aGV4RGlnaXRzfSkpYCArXG4gICAgICBgW3BQXVsrLV0/KCR7ZGVjaW1hbERpZ2l0c30pW2ZGZERdP1xcXFxiYCB9LFxuXG4gICAgLy8gRGVjaW1hbEludGVnZXJMaXRlcmFsXG4gICAgeyBiZWdpbjogJ1xcXFxiKDB8WzEtOV0oXypbMC05XSkqKVtsTF0/XFxcXGInIH0sXG5cbiAgICAvLyBIZXhJbnRlZ2VyTGl0ZXJhbFxuICAgIHsgYmVnaW46IGBcXFxcYjBbeFhdKCR7aGV4RGlnaXRzfSlbbExdP1xcXFxiYCB9LFxuXG4gICAgLy8gT2N0YWxJbnRlZ2VyTGl0ZXJhbFxuICAgIHsgYmVnaW46ICdcXFxcYjAoXypbMC03XSkqW2xMXT9cXFxcYicgfSxcblxuICAgIC8vIEJpbmFyeUludGVnZXJMaXRlcmFsXG4gICAgeyBiZWdpbjogJ1xcXFxiMFtiQl1bMDFdKF8qWzAxXSkqW2xMXT9cXFxcYicgfSxcbiAgXSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuXG4vKlxuIExhbmd1YWdlOiBLb3RsaW5cbiBEZXNjcmlwdGlvbjogS290bGluIGlzIGFuIE9TUyBzdGF0aWNhbGx5IHR5cGVkIHByb2dyYW1taW5nIGxhbmd1YWdlIHRoYXQgdGFyZ2V0cyB0aGUgSlZNLCBBbmRyb2lkLCBKYXZhU2NyaXB0IGFuZCBOYXRpdmUuXG4gQXV0aG9yOiBTZXJnZXkgTWFzaGtvdiA8Y3k2ZXJHbjBtQGdtYWlsLmNvbT5cbiBXZWJzaXRlOiBodHRwczovL2tvdGxpbmxhbmcub3JnXG4gQ2F0ZWdvcnk6IGNvbW1vblxuICovXG5cbmZ1bmN0aW9uIGtvdGxpbihobGpzKSB7XG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnYWJzdHJhY3QgYXMgdmFsIHZhciB2YXJhcmcgZ2V0IHNldCBjbGFzcyBvYmplY3Qgb3BlbiBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgbm9pbmxpbmUgJ1xuICAgICAgKyAnY3Jvc3NpbmxpbmUgZHluYW1pYyBmaW5hbCBlbnVtIGlmIGVsc2UgZG8gd2hpbGUgZm9yIHdoZW4gdGhyb3cgdHJ5IGNhdGNoIGZpbmFsbHkgJ1xuICAgICAgKyAnaW1wb3J0IHBhY2thZ2UgaXMgaW4gZnVuIG92ZXJyaWRlIGNvbXBhbmlvbiByZWlmaWVkIGlubGluZSBsYXRlaW5pdCBpbml0ICdcbiAgICAgICsgJ2ludGVyZmFjZSBhbm5vdGF0aW9uIGRhdGEgc2VhbGVkIGludGVybmFsIGluZml4IG9wZXJhdG9yIG91dCBieSBjb25zdHJ1Y3RvciBzdXBlciAnXG4gICAgICArICd0YWlscmVjIHdoZXJlIGNvbnN0IGlubmVyIHN1c3BlbmQgdHlwZWFsaWFzIGV4dGVybmFsIGV4cGVjdCBhY3R1YWwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ0J5dGUgU2hvcnQgQ2hhciBJbnQgTG9uZyBCb29sZWFuIEZsb2F0IERvdWJsZSBWb2lkIFVuaXQgTm90aGluZycsXG4gICAgbGl0ZXJhbDpcbiAgICAgICd0cnVlIGZhbHNlIG51bGwnXG4gIH07XG4gIGNvbnN0IEtFWVdPUkRTX1dJVEhfTEFCRUwgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46IC9cXGIoYnJlYWt8Y29udGludWV8cmV0dXJufHRoaXMpXFxiLyxcbiAgICBzdGFydHM6IHsgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC9AXFx3Ky9cbiAgICAgIH1cbiAgICBdIH1cbiAgfTtcbiAgY29uc3QgTEFCRUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ0AnXG4gIH07XG5cbiAgLy8gZm9yIHN0cmluZyB0ZW1wbGF0ZXNcbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvXFwkXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIGNvbnRhaW5zOiBbIGhsanMuQ19OVU1CRVJfTU9ERSBdXG4gIH07XG4gIGNvbnN0IFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogJ1xcXFwkJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICB9O1xuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiXCJcIicsXG4gICAgICAgIGVuZDogJ1wiXCJcIig/PVteXCJdKScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgU1VCU1RcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIENhbid0IHVzZSBidWlsdC1pbiBtb2RlcyBlYXNpbHksIGFzIHdlIHdhbnQgdG8gdXNlIFNUUklORyBpbiB0aGUgbWV0YVxuICAgICAgLy8gY29udGV4dCBhcyAnbWV0YS1zdHJpbmcnIGFuZCB0aGVyZSdzIG5vIHN5bnRheCB0byByZW1vdmUgZXhwbGljaXRseSBzZXRcbiAgICAgIC8vIGNsYXNzTmFtZXMgaW4gYnVpbHQtaW4gbW9kZXMuXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgU1VCU1RcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgU1VCU1QuY29udGFpbnMucHVzaChTVFJJTkcpO1xuXG4gIGNvbnN0IEFOTk9UQVRJT05fVVNFX1NJVEUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdAKD86ZmlsZXxwcm9wZXJ0eXxmaWVsZHxnZXR8c2V0fHJlY2VpdmVyfHBhcmFtfHNldHBhcmFtfGRlbGVnYXRlKVxcXFxzKjooPzpcXFxccyonICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJyk/J1xuICB9O1xuICBjb25zdCBBTk5PVEFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnQCcgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChTVFJJTkcsIHsgY2xhc3NOYW1lOiAnc3RyaW5nJyB9KSxcbiAgICAgICAgICBcInNlbGZcIlxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIC8vIGh0dHBzOi8va290bGlubGFuZy5vcmcvZG9jcy9yZWZlcmVuY2Uvd2hhdHNuZXcxMS5odG1sI3VuZGVyc2NvcmVzLWluLW51bWVyaWMtbGl0ZXJhbHNcbiAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkb2MgYWJvdmUsIHRoZSBudW1iZXIgbW9kZSBvZiBrb3RsaW4gaXMgdGhlIHNhbWUgYXMgamF2YSA4LFxuICAvLyBzbyB0aGUgY29kZSBiZWxvdyBpcyBjb3BpZWQgZnJvbSBqYXZhLmpzXG4gIGNvbnN0IEtPVExJTl9OVU1CRVJfTU9ERSA9IE5VTUVSSUM7XG4gIGNvbnN0IEtPVExJTl9ORVNURURfQ09NTUVOVCA9IGhsanMuQ09NTUVOVChcbiAgICAnL1xcXFwqJywgJ1xcXFwqLycsXG4gICAgeyBjb250YWluczogWyBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFIF0gfVxuICApO1xuICBjb25zdCBLT1RMSU5fUEFSRU5fVFlQRSA9IHsgdmFyaWFudHM6IFtcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkVcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgIGVuZDogL1xcKS8sXG4gICAgICBjb250YWluczogW10gLy8gZGVmaW5lZCBsYXRlclxuICAgIH1cbiAgXSB9O1xuICBjb25zdCBLT1RMSU5fUEFSRU5fVFlQRTIgPSBLT1RMSU5fUEFSRU5fVFlQRTtcbiAgS09UTElOX1BBUkVOX1RZUEUyLnZhcmlhbnRzWzFdLmNvbnRhaW5zID0gWyBLT1RMSU5fUEFSRU5fVFlQRSBdO1xuICBLT1RMSU5fUEFSRU5fVFlQRS52YXJpYW50c1sxXS5jb250YWlucyA9IFsgS09UTElOX1BBUkVOX1RZUEUyIF07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnS290bGluJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAna3QnLFxuICAgICAgJ2t0cydcbiAgICBdLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnL1xcXFwqXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICBiZWdpbjogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgS09UTElOX05FU1RFRF9DT01NRU5ULFxuICAgICAgS0VZV09SRFNfV0lUSF9MQUJFTCxcbiAgICAgIExBQkVMLFxuICAgICAgQU5OT1RBVElPTl9VU0VfU0lURSxcbiAgICAgIEFOTk9UQVRJT04sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bicsXG4gICAgICAgIGVuZDogJ1soXXwkJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgcmVsZXZhbmNlOiA1LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLFxuICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogWyBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgIGJlZ2luOiAvPC8sXG4gICAgICAgICAgICBlbmQ6IC8+LyxcbiAgICAgICAgICAgIGtleXdvcmRzOiAncmVpZmllZCcsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogLzovLFxuICAgICAgICAgICAgICAgIGVuZDogL1s9LFxcL10vLFxuICAgICAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICBLT1RMSU5fUEFSRU5fVFlQRSxcbiAgICAgICAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgICAgIEtPVExJTl9ORVNURURfQ09NTUVOVFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgS09UTElOX05FU1RFRF9DT01NRU5ULFxuICAgICAgICAgICAgICBBTk5PVEFUSU9OX1VTRV9TSVRFLFxuICAgICAgICAgICAgICBBTk5PVEFUSU9OLFxuICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgS09UTElOX05FU1RFRF9DT01NRU5UXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBbXG4gICAgICAgICAgL2NsYXNzfGludGVyZmFjZXx0cmFpdC8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICAgICAgICBdLFxuICAgICAgICBiZWdpblNjb3BlOiB7XG4gICAgICAgICAgMzogXCJ0aXRsZS5jbGFzc1wiXG4gICAgICAgIH0sXG4gICAgICAgIGtleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlIHRyYWl0JyxcbiAgICAgICAgZW5kOiAvWzpcXHsoXXwkLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogJ2V4dGVuZHMgaW1wbGVtZW50cycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBiZWdpbktleXdvcmRzOiAncHVibGljIHByb3RlY3RlZCBpbnRlcm5hbCBwcml2YXRlIGNvbnN0cnVjdG9yJyB9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46IC88LyxcbiAgICAgICAgICAgIGVuZDogLz4vLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICBiZWdpbjogL1ssOl1cXHMqLyxcbiAgICAgICAgICAgIGVuZDogL1s8XFwoLCl7XFxzXXwkLyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHJldHVybkVuZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgQU5OT1RBVElPTl9VU0VfU0lURSxcbiAgICAgICAgICBBTk5PVEFUSU9OXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogXCJeIyEvdXNyL2Jpbi9lbnZcIixcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGlsbGVnYWw6ICdcXG4nXG4gICAgICB9LFxuICAgICAgS09UTElOX05VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtvdGxpbjtcbiIsImNvbnN0IE1PREVTID0gKGhsanMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBJTVBPUlRBTlQ6IHtcbiAgICAgIHNjb3BlOiAnbWV0YScsXG4gICAgICBiZWdpbjogJyFpbXBvcnRhbnQnXG4gICAgfSxcbiAgICBCTE9DS19DT01NRU5UOiBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIEhFWENPTE9SOiB7XG4gICAgICBzY29wZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogLyMoKFswLTlhLWZBLUZdezMsNH0pfCgoWzAtOWEtZkEtRl17Mn0pezMsNH0pKVxcYi9cbiAgICB9LFxuICAgIEZVTkNUSU9OX0RJU1BBVENIOiB7XG4gICAgICBjbGFzc05hbWU6IFwiYnVpbHRfaW5cIixcbiAgICAgIGJlZ2luOiAvW1xcdy1dKyg/PVxcKCkvXG4gICAgfSxcbiAgICBBVFRSSUJVVEVfU0VMRUNUT1JfTU9ERToge1xuICAgICAgc2NvcGU6ICdzZWxlY3Rvci1hdHRyJyxcbiAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgIGVuZDogL1xcXS8sXG4gICAgICBpbGxlZ2FsOiAnJCcsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgIF1cbiAgICB9LFxuICAgIENTU19OVU1CRVJfTU9ERToge1xuICAgICAgc2NvcGU6ICdudW1iZXInLFxuICAgICAgYmVnaW46IGhsanMuTlVNQkVSX1JFICsgJygnICtcbiAgICAgICAgJyV8ZW18ZXh8Y2h8cmVtJyArXG4gICAgICAgICd8dnd8dmh8dm1pbnx2bWF4JyArXG4gICAgICAgICd8Y218bW18aW58cHR8cGN8cHgnICtcbiAgICAgICAgJ3xkZWd8Z3JhZHxyYWR8dHVybicgK1xuICAgICAgICAnfHN8bXMnICtcbiAgICAgICAgJ3xIenxrSHonICtcbiAgICAgICAgJ3xkcGl8ZHBjbXxkcHB4JyArXG4gICAgICAgICcpPycsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIENTU19WQVJJQUJMRToge1xuICAgICAgY2xhc3NOYW1lOiBcImF0dHJcIixcbiAgICAgIGJlZ2luOiAvLS1bQS1aYS16XVtBLVphLXowLTlfLV0qL1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFRBR1MgPSBbXG4gICdhJyxcbiAgJ2FiYnInLFxuICAnYWRkcmVzcycsXG4gICdhcnRpY2xlJyxcbiAgJ2FzaWRlJyxcbiAgJ2F1ZGlvJyxcbiAgJ2InLFxuICAnYmxvY2txdW90ZScsXG4gICdib2R5JyxcbiAgJ2J1dHRvbicsXG4gICdjYW52YXMnLFxuICAnY2FwdGlvbicsXG4gICdjaXRlJyxcbiAgJ2NvZGUnLFxuICAnZGQnLFxuICAnZGVsJyxcbiAgJ2RldGFpbHMnLFxuICAnZGZuJyxcbiAgJ2RpdicsXG4gICdkbCcsXG4gICdkdCcsXG4gICdlbScsXG4gICdmaWVsZHNldCcsXG4gICdmaWdjYXB0aW9uJyxcbiAgJ2ZpZ3VyZScsXG4gICdmb290ZXInLFxuICAnZm9ybScsXG4gICdoMScsXG4gICdoMicsXG4gICdoMycsXG4gICdoNCcsXG4gICdoNScsXG4gICdoNicsXG4gICdoZWFkZXInLFxuICAnaGdyb3VwJyxcbiAgJ2h0bWwnLFxuICAnaScsXG4gICdpZnJhbWUnLFxuICAnaW1nJyxcbiAgJ2lucHV0JyxcbiAgJ2lucycsXG4gICdrYmQnLFxuICAnbGFiZWwnLFxuICAnbGVnZW5kJyxcbiAgJ2xpJyxcbiAgJ21haW4nLFxuICAnbWFyaycsXG4gICdtZW51JyxcbiAgJ25hdicsXG4gICdvYmplY3QnLFxuICAnb2wnLFxuICAncCcsXG4gICdxJyxcbiAgJ3F1b3RlJyxcbiAgJ3NhbXAnLFxuICAnc2VjdGlvbicsXG4gICdzcGFuJyxcbiAgJ3N0cm9uZycsXG4gICdzdW1tYXJ5JyxcbiAgJ3N1cCcsXG4gICd0YWJsZScsXG4gICd0Ym9keScsXG4gICd0ZCcsXG4gICd0ZXh0YXJlYScsXG4gICd0Zm9vdCcsXG4gICd0aCcsXG4gICd0aGVhZCcsXG4gICd0aW1lJyxcbiAgJ3RyJyxcbiAgJ3VsJyxcbiAgJ3ZhcicsXG4gICd2aWRlbydcbl07XG5cbmNvbnN0IE1FRElBX0ZFQVRVUkVTID0gW1xuICAnYW55LWhvdmVyJyxcbiAgJ2FueS1wb2ludGVyJyxcbiAgJ2FzcGVjdC1yYXRpbycsXG4gICdjb2xvcicsXG4gICdjb2xvci1nYW11dCcsXG4gICdjb2xvci1pbmRleCcsXG4gICdkZXZpY2UtYXNwZWN0LXJhdGlvJyxcbiAgJ2RldmljZS1oZWlnaHQnLFxuICAnZGV2aWNlLXdpZHRoJyxcbiAgJ2Rpc3BsYXktbW9kZScsXG4gICdmb3JjZWQtY29sb3JzJyxcbiAgJ2dyaWQnLFxuICAnaGVpZ2h0JyxcbiAgJ2hvdmVyJyxcbiAgJ2ludmVydGVkLWNvbG9ycycsXG4gICdtb25vY2hyb21lJyxcbiAgJ29yaWVudGF0aW9uJyxcbiAgJ292ZXJmbG93LWJsb2NrJyxcbiAgJ292ZXJmbG93LWlubGluZScsXG4gICdwb2ludGVyJyxcbiAgJ3ByZWZlcnMtY29sb3Itc2NoZW1lJyxcbiAgJ3ByZWZlcnMtY29udHJhc3QnLFxuICAncHJlZmVycy1yZWR1Y2VkLW1vdGlvbicsXG4gICdwcmVmZXJzLXJlZHVjZWQtdHJhbnNwYXJlbmN5JyxcbiAgJ3Jlc29sdXRpb24nLFxuICAnc2NhbicsXG4gICdzY3JpcHRpbmcnLFxuICAndXBkYXRlJyxcbiAgJ3dpZHRoJyxcbiAgLy8gVE9ETzogZmluZCBhIGJldHRlciBzb2x1dGlvbj9cbiAgJ21pbi13aWR0aCcsXG4gICdtYXgtd2lkdGgnLFxuICAnbWluLWhlaWdodCcsXG4gICdtYXgtaGVpZ2h0J1xuXTtcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL1BzZXVkby1jbGFzc2VzXG5jb25zdCBQU0VVRE9fQ0xBU1NFUyA9IFtcbiAgJ2FjdGl2ZScsXG4gICdhbnktbGluaycsXG4gICdibGFuaycsXG4gICdjaGVja2VkJyxcbiAgJ2N1cnJlbnQnLFxuICAnZGVmYXVsdCcsXG4gICdkZWZpbmVkJyxcbiAgJ2RpcicsIC8vIGRpcigpXG4gICdkaXNhYmxlZCcsXG4gICdkcm9wJyxcbiAgJ2VtcHR5JyxcbiAgJ2VuYWJsZWQnLFxuICAnZmlyc3QnLFxuICAnZmlyc3QtY2hpbGQnLFxuICAnZmlyc3Qtb2YtdHlwZScsXG4gICdmdWxsc2NyZWVuJyxcbiAgJ2Z1dHVyZScsXG4gICdmb2N1cycsXG4gICdmb2N1cy12aXNpYmxlJyxcbiAgJ2ZvY3VzLXdpdGhpbicsXG4gICdoYXMnLCAvLyBoYXMoKVxuICAnaG9zdCcsIC8vIGhvc3Qgb3IgaG9zdCgpXG4gICdob3N0LWNvbnRleHQnLCAvLyBob3N0LWNvbnRleHQoKVxuICAnaG92ZXInLFxuICAnaW5kZXRlcm1pbmF0ZScsXG4gICdpbi1yYW5nZScsXG4gICdpbnZhbGlkJyxcbiAgJ2lzJywgLy8gaXMoKVxuICAnbGFuZycsIC8vIGxhbmcoKVxuICAnbGFzdC1jaGlsZCcsXG4gICdsYXN0LW9mLXR5cGUnLFxuICAnbGVmdCcsXG4gICdsaW5rJyxcbiAgJ2xvY2FsLWxpbmsnLFxuICAnbm90JywgLy8gbm90KClcbiAgJ250aC1jaGlsZCcsIC8vIG50aC1jaGlsZCgpXG4gICdudGgtY29sJywgLy8gbnRoLWNvbCgpXG4gICdudGgtbGFzdC1jaGlsZCcsIC8vIG50aC1sYXN0LWNoaWxkKClcbiAgJ250aC1sYXN0LWNvbCcsIC8vIG50aC1sYXN0LWNvbCgpXG4gICdudGgtbGFzdC1vZi10eXBlJywgLy9udGgtbGFzdC1vZi10eXBlKClcbiAgJ250aC1vZi10eXBlJywgLy9udGgtb2YtdHlwZSgpXG4gICdvbmx5LWNoaWxkJyxcbiAgJ29ubHktb2YtdHlwZScsXG4gICdvcHRpb25hbCcsXG4gICdvdXQtb2YtcmFuZ2UnLFxuICAncGFzdCcsXG4gICdwbGFjZWhvbGRlci1zaG93bicsXG4gICdyZWFkLW9ubHknLFxuICAncmVhZC13cml0ZScsXG4gICdyZXF1aXJlZCcsXG4gICdyaWdodCcsXG4gICdyb290JyxcbiAgJ3Njb3BlJyxcbiAgJ3RhcmdldCcsXG4gICd0YXJnZXQtd2l0aGluJyxcbiAgJ3VzZXItaW52YWxpZCcsXG4gICd2YWxpZCcsXG4gICd2aXNpdGVkJyxcbiAgJ3doZXJlJyAvLyB3aGVyZSgpXG5dO1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvUHNldWRvLWVsZW1lbnRzXG5jb25zdCBQU0VVRE9fRUxFTUVOVFMgPSBbXG4gICdhZnRlcicsXG4gICdiYWNrZHJvcCcsXG4gICdiZWZvcmUnLFxuICAnY3VlJyxcbiAgJ2N1ZS1yZWdpb24nLFxuICAnZmlyc3QtbGV0dGVyJyxcbiAgJ2ZpcnN0LWxpbmUnLFxuICAnZ3JhbW1hci1lcnJvcicsXG4gICdtYXJrZXInLFxuICAncGFydCcsXG4gICdwbGFjZWhvbGRlcicsXG4gICdzZWxlY3Rpb24nLFxuICAnc2xvdHRlZCcsXG4gICdzcGVsbGluZy1lcnJvcidcbl07XG5cbmNvbnN0IEFUVFJJQlVURVMgPSBbXG4gICdhbGlnbi1jb250ZW50JyxcbiAgJ2FsaWduLWl0ZW1zJyxcbiAgJ2FsaWduLXNlbGYnLFxuICAnYWxsJyxcbiAgJ2FuaW1hdGlvbicsXG4gICdhbmltYXRpb24tZGVsYXknLFxuICAnYW5pbWF0aW9uLWRpcmVjdGlvbicsXG4gICdhbmltYXRpb24tZHVyYXRpb24nLFxuICAnYW5pbWF0aW9uLWZpbGwtbW9kZScsXG4gICdhbmltYXRpb24taXRlcmF0aW9uLWNvdW50JyxcbiAgJ2FuaW1hdGlvbi1uYW1lJyxcbiAgJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJyxcbiAgJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLFxuICAnYmFja2ZhY2UtdmlzaWJpbGl0eScsXG4gICdiYWNrZ3JvdW5kJyxcbiAgJ2JhY2tncm91bmQtYXR0YWNobWVudCcsXG4gICdiYWNrZ3JvdW5kLWJsZW5kLW1vZGUnLFxuICAnYmFja2dyb3VuZC1jbGlwJyxcbiAgJ2JhY2tncm91bmQtY29sb3InLFxuICAnYmFja2dyb3VuZC1pbWFnZScsXG4gICdiYWNrZ3JvdW5kLW9yaWdpbicsXG4gICdiYWNrZ3JvdW5kLXBvc2l0aW9uJyxcbiAgJ2JhY2tncm91bmQtcmVwZWF0JyxcbiAgJ2JhY2tncm91bmQtc2l6ZScsXG4gICdibG9jay1zaXplJyxcbiAgJ2JvcmRlcicsXG4gICdib3JkZXItYmxvY2snLFxuICAnYm9yZGVyLWJsb2NrLWNvbG9yJyxcbiAgJ2JvcmRlci1ibG9jay1lbmQnLFxuICAnYm9yZGVyLWJsb2NrLWVuZC1jb2xvcicsXG4gICdib3JkZXItYmxvY2stZW5kLXN0eWxlJyxcbiAgJ2JvcmRlci1ibG9jay1lbmQtd2lkdGgnLFxuICAnYm9yZGVyLWJsb2NrLXN0YXJ0JyxcbiAgJ2JvcmRlci1ibG9jay1zdGFydC1jb2xvcicsXG4gICdib3JkZXItYmxvY2stc3RhcnQtc3R5bGUnLFxuICAnYm9yZGVyLWJsb2NrLXN0YXJ0LXdpZHRoJyxcbiAgJ2JvcmRlci1ibG9jay1zdHlsZScsXG4gICdib3JkZXItYmxvY2std2lkdGgnLFxuICAnYm9yZGVyLWJvdHRvbScsXG4gICdib3JkZXItYm90dG9tLWNvbG9yJyxcbiAgJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnLFxuICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnLFxuICAnYm9yZGVyLWJvdHRvbS1zdHlsZScsXG4gICdib3JkZXItYm90dG9tLXdpZHRoJyxcbiAgJ2JvcmRlci1jb2xsYXBzZScsXG4gICdib3JkZXItY29sb3InLFxuICAnYm9yZGVyLWltYWdlJyxcbiAgJ2JvcmRlci1pbWFnZS1vdXRzZXQnLFxuICAnYm9yZGVyLWltYWdlLXJlcGVhdCcsXG4gICdib3JkZXItaW1hZ2Utc2xpY2UnLFxuICAnYm9yZGVyLWltYWdlLXNvdXJjZScsXG4gICdib3JkZXItaW1hZ2Utd2lkdGgnLFxuICAnYm9yZGVyLWlubGluZScsXG4gICdib3JkZXItaW5saW5lLWNvbG9yJyxcbiAgJ2JvcmRlci1pbmxpbmUtZW5kJyxcbiAgJ2JvcmRlci1pbmxpbmUtZW5kLWNvbG9yJyxcbiAgJ2JvcmRlci1pbmxpbmUtZW5kLXN0eWxlJyxcbiAgJ2JvcmRlci1pbmxpbmUtZW5kLXdpZHRoJyxcbiAgJ2JvcmRlci1pbmxpbmUtc3RhcnQnLFxuICAnYm9yZGVyLWlubGluZS1zdGFydC1jb2xvcicsXG4gICdib3JkZXItaW5saW5lLXN0YXJ0LXN0eWxlJyxcbiAgJ2JvcmRlci1pbmxpbmUtc3RhcnQtd2lkdGgnLFxuICAnYm9yZGVyLWlubGluZS1zdHlsZScsXG4gICdib3JkZXItaW5saW5lLXdpZHRoJyxcbiAgJ2JvcmRlci1sZWZ0JyxcbiAgJ2JvcmRlci1sZWZ0LWNvbG9yJyxcbiAgJ2JvcmRlci1sZWZ0LXN0eWxlJyxcbiAgJ2JvcmRlci1sZWZ0LXdpZHRoJyxcbiAgJ2JvcmRlci1yYWRpdXMnLFxuICAnYm9yZGVyLXJpZ2h0JyxcbiAgJ2JvcmRlci1yaWdodC1jb2xvcicsXG4gICdib3JkZXItcmlnaHQtc3R5bGUnLFxuICAnYm9yZGVyLXJpZ2h0LXdpZHRoJyxcbiAgJ2JvcmRlci1zcGFjaW5nJyxcbiAgJ2JvcmRlci1zdHlsZScsXG4gICdib3JkZXItdG9wJyxcbiAgJ2JvcmRlci10b3AtY29sb3InLFxuICAnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cycsXG4gICdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cycsXG4gICdib3JkZXItdG9wLXN0eWxlJyxcbiAgJ2JvcmRlci10b3Atd2lkdGgnLFxuICAnYm9yZGVyLXdpZHRoJyxcbiAgJ2JvdHRvbScsXG4gICdib3gtZGVjb3JhdGlvbi1icmVhaycsXG4gICdib3gtc2hhZG93JyxcbiAgJ2JveC1zaXppbmcnLFxuICAnYnJlYWstYWZ0ZXInLFxuICAnYnJlYWstYmVmb3JlJyxcbiAgJ2JyZWFrLWluc2lkZScsXG4gICdjYXB0aW9uLXNpZGUnLFxuICAnY2FyZXQtY29sb3InLFxuICAnY2xlYXInLFxuICAnY2xpcCcsXG4gICdjbGlwLXBhdGgnLFxuICAnY2xpcC1ydWxlJyxcbiAgJ2NvbG9yJyxcbiAgJ2NvbHVtbi1jb3VudCcsXG4gICdjb2x1bW4tZmlsbCcsXG4gICdjb2x1bW4tZ2FwJyxcbiAgJ2NvbHVtbi1ydWxlJyxcbiAgJ2NvbHVtbi1ydWxlLWNvbG9yJyxcbiAgJ2NvbHVtbi1ydWxlLXN0eWxlJyxcbiAgJ2NvbHVtbi1ydWxlLXdpZHRoJyxcbiAgJ2NvbHVtbi1zcGFuJyxcbiAgJ2NvbHVtbi13aWR0aCcsXG4gICdjb2x1bW5zJyxcbiAgJ2NvbnRhaW4nLFxuICAnY29udGVudCcsXG4gICdjb250ZW50LXZpc2liaWxpdHknLFxuICAnY291bnRlci1pbmNyZW1lbnQnLFxuICAnY291bnRlci1yZXNldCcsXG4gICdjdWUnLFxuICAnY3VlLWFmdGVyJyxcbiAgJ2N1ZS1iZWZvcmUnLFxuICAnY3Vyc29yJyxcbiAgJ2RpcmVjdGlvbicsXG4gICdkaXNwbGF5JyxcbiAgJ2VtcHR5LWNlbGxzJyxcbiAgJ2ZpbHRlcicsXG4gICdmbGV4JyxcbiAgJ2ZsZXgtYmFzaXMnLFxuICAnZmxleC1kaXJlY3Rpb24nLFxuICAnZmxleC1mbG93JyxcbiAgJ2ZsZXgtZ3JvdycsXG4gICdmbGV4LXNocmluaycsXG4gICdmbGV4LXdyYXAnLFxuICAnZmxvYXQnLFxuICAnZmxvdycsXG4gICdmb250JyxcbiAgJ2ZvbnQtZGlzcGxheScsXG4gICdmb250LWZhbWlseScsXG4gICdmb250LWZlYXR1cmUtc2V0dGluZ3MnLFxuICAnZm9udC1rZXJuaW5nJyxcbiAgJ2ZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGUnLFxuICAnZm9udC1zaXplJyxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnLFxuICAnZm9udC1zbW9vdGhpbmcnLFxuICAnZm9udC1zdHJldGNoJyxcbiAgJ2ZvbnQtc3R5bGUnLFxuICAnZm9udC1zeW50aGVzaXMnLFxuICAnZm9udC12YXJpYW50JyxcbiAgJ2ZvbnQtdmFyaWFudC1jYXBzJyxcbiAgJ2ZvbnQtdmFyaWFudC1lYXN0LWFzaWFuJyxcbiAgJ2ZvbnQtdmFyaWFudC1saWdhdHVyZXMnLFxuICAnZm9udC12YXJpYW50LW51bWVyaWMnLFxuICAnZm9udC12YXJpYW50LXBvc2l0aW9uJyxcbiAgJ2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzJyxcbiAgJ2ZvbnQtd2VpZ2h0JyxcbiAgJ2dhcCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcsXG4gICdncmlkJyxcbiAgJ2dyaWQtYXJlYScsXG4gICdncmlkLWF1dG8tY29sdW1ucycsXG4gICdncmlkLWF1dG8tZmxvdycsXG4gICdncmlkLWF1dG8tcm93cycsXG4gICdncmlkLWNvbHVtbicsXG4gICdncmlkLWNvbHVtbi1lbmQnLFxuICAnZ3JpZC1jb2x1bW4tc3RhcnQnLFxuICAnZ3JpZC1nYXAnLFxuICAnZ3JpZC1yb3cnLFxuICAnZ3JpZC1yb3ctZW5kJyxcbiAgJ2dyaWQtcm93LXN0YXJ0JyxcbiAgJ2dyaWQtdGVtcGxhdGUnLFxuICAnZ3JpZC10ZW1wbGF0ZS1hcmVhcycsXG4gICdncmlkLXRlbXBsYXRlLWNvbHVtbnMnLFxuICAnZ3JpZC10ZW1wbGF0ZS1yb3dzJyxcbiAgJ2hhbmdpbmctcHVuY3R1YXRpb24nLFxuICAnaGVpZ2h0JyxcbiAgJ2h5cGhlbnMnLFxuICAnaWNvbicsXG4gICdpbWFnZS1vcmllbnRhdGlvbicsXG4gICdpbWFnZS1yZW5kZXJpbmcnLFxuICAnaW1hZ2UtcmVzb2x1dGlvbicsXG4gICdpbWUtbW9kZScsXG4gICdpbmxpbmUtc2l6ZScsXG4gICdpc29sYXRpb24nLFxuICAnanVzdGlmeS1jb250ZW50JyxcbiAgJ2xlZnQnLFxuICAnbGV0dGVyLXNwYWNpbmcnLFxuICAnbGluZS1icmVhaycsXG4gICdsaW5lLWhlaWdodCcsXG4gICdsaXN0LXN0eWxlJyxcbiAgJ2xpc3Qtc3R5bGUtaW1hZ2UnLFxuICAnbGlzdC1zdHlsZS1wb3NpdGlvbicsXG4gICdsaXN0LXN0eWxlLXR5cGUnLFxuICAnbWFyZ2luJyxcbiAgJ21hcmdpbi1ibG9jaycsXG4gICdtYXJnaW4tYmxvY2stZW5kJyxcbiAgJ21hcmdpbi1ibG9jay1zdGFydCcsXG4gICdtYXJnaW4tYm90dG9tJyxcbiAgJ21hcmdpbi1pbmxpbmUnLFxuICAnbWFyZ2luLWlubGluZS1lbmQnLFxuICAnbWFyZ2luLWlubGluZS1zdGFydCcsXG4gICdtYXJnaW4tbGVmdCcsXG4gICdtYXJnaW4tcmlnaHQnLFxuICAnbWFyZ2luLXRvcCcsXG4gICdtYXJrcycsXG4gICdtYXNrJyxcbiAgJ21hc2stYm9yZGVyJyxcbiAgJ21hc2stYm9yZGVyLW1vZGUnLFxuICAnbWFzay1ib3JkZXItb3V0c2V0JyxcbiAgJ21hc2stYm9yZGVyLXJlcGVhdCcsXG4gICdtYXNrLWJvcmRlci1zbGljZScsXG4gICdtYXNrLWJvcmRlci1zb3VyY2UnLFxuICAnbWFzay1ib3JkZXItd2lkdGgnLFxuICAnbWFzay1jbGlwJyxcbiAgJ21hc2stY29tcG9zaXRlJyxcbiAgJ21hc2staW1hZ2UnLFxuICAnbWFzay1tb2RlJyxcbiAgJ21hc2stb3JpZ2luJyxcbiAgJ21hc2stcG9zaXRpb24nLFxuICAnbWFzay1yZXBlYXQnLFxuICAnbWFzay1zaXplJyxcbiAgJ21hc2stdHlwZScsXG4gICdtYXgtYmxvY2stc2l6ZScsXG4gICdtYXgtaGVpZ2h0JyxcbiAgJ21heC1pbmxpbmUtc2l6ZScsXG4gICdtYXgtd2lkdGgnLFxuICAnbWluLWJsb2NrLXNpemUnLFxuICAnbWluLWhlaWdodCcsXG4gICdtaW4taW5saW5lLXNpemUnLFxuICAnbWluLXdpZHRoJyxcbiAgJ21peC1ibGVuZC1tb2RlJyxcbiAgJ25hdi1kb3duJyxcbiAgJ25hdi1pbmRleCcsXG4gICduYXYtbGVmdCcsXG4gICduYXYtcmlnaHQnLFxuICAnbmF2LXVwJyxcbiAgJ25vbmUnLFxuICAnbm9ybWFsJyxcbiAgJ29iamVjdC1maXQnLFxuICAnb2JqZWN0LXBvc2l0aW9uJyxcbiAgJ29wYWNpdHknLFxuICAnb3JkZXInLFxuICAnb3JwaGFucycsXG4gICdvdXRsaW5lJyxcbiAgJ291dGxpbmUtY29sb3InLFxuICAnb3V0bGluZS1vZmZzZXQnLFxuICAnb3V0bGluZS1zdHlsZScsXG4gICdvdXRsaW5lLXdpZHRoJyxcbiAgJ292ZXJmbG93JyxcbiAgJ292ZXJmbG93LXdyYXAnLFxuICAnb3ZlcmZsb3cteCcsXG4gICdvdmVyZmxvdy15JyxcbiAgJ3BhZGRpbmcnLFxuICAncGFkZGluZy1ibG9jaycsXG4gICdwYWRkaW5nLWJsb2NrLWVuZCcsXG4gICdwYWRkaW5nLWJsb2NrLXN0YXJ0JyxcbiAgJ3BhZGRpbmctYm90dG9tJyxcbiAgJ3BhZGRpbmctaW5saW5lJyxcbiAgJ3BhZGRpbmctaW5saW5lLWVuZCcsXG4gICdwYWRkaW5nLWlubGluZS1zdGFydCcsXG4gICdwYWRkaW5nLWxlZnQnLFxuICAncGFkZGluZy1yaWdodCcsXG4gICdwYWRkaW5nLXRvcCcsXG4gICdwYWdlLWJyZWFrLWFmdGVyJyxcbiAgJ3BhZ2UtYnJlYWstYmVmb3JlJyxcbiAgJ3BhZ2UtYnJlYWstaW5zaWRlJyxcbiAgJ3BhdXNlJyxcbiAgJ3BhdXNlLWFmdGVyJyxcbiAgJ3BhdXNlLWJlZm9yZScsXG4gICdwZXJzcGVjdGl2ZScsXG4gICdwZXJzcGVjdGl2ZS1vcmlnaW4nLFxuICAncG9pbnRlci1ldmVudHMnLFxuICAncG9zaXRpb24nLFxuICAncXVvdGVzJyxcbiAgJ3Jlc2l6ZScsXG4gICdyZXN0JyxcbiAgJ3Jlc3QtYWZ0ZXInLFxuICAncmVzdC1iZWZvcmUnLFxuICAncmlnaHQnLFxuICAncm93LWdhcCcsXG4gICdzY3JvbGwtbWFyZ2luJyxcbiAgJ3Njcm9sbC1tYXJnaW4tYmxvY2snLFxuICAnc2Nyb2xsLW1hcmdpbi1ibG9jay1lbmQnLFxuICAnc2Nyb2xsLW1hcmdpbi1ibG9jay1zdGFydCcsXG4gICdzY3JvbGwtbWFyZ2luLWJvdHRvbScsXG4gICdzY3JvbGwtbWFyZ2luLWlubGluZScsXG4gICdzY3JvbGwtbWFyZ2luLWlubGluZS1lbmQnLFxuICAnc2Nyb2xsLW1hcmdpbi1pbmxpbmUtc3RhcnQnLFxuICAnc2Nyb2xsLW1hcmdpbi1sZWZ0JyxcbiAgJ3Njcm9sbC1tYXJnaW4tcmlnaHQnLFxuICAnc2Nyb2xsLW1hcmdpbi10b3AnLFxuICAnc2Nyb2xsLXBhZGRpbmcnLFxuICAnc2Nyb2xsLXBhZGRpbmctYmxvY2snLFxuICAnc2Nyb2xsLXBhZGRpbmctYmxvY2stZW5kJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWJsb2NrLXN0YXJ0JyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWJvdHRvbScsXG4gICdzY3JvbGwtcGFkZGluZy1pbmxpbmUnLFxuICAnc2Nyb2xsLXBhZGRpbmctaW5saW5lLWVuZCcsXG4gICdzY3JvbGwtcGFkZGluZy1pbmxpbmUtc3RhcnQnLFxuICAnc2Nyb2xsLXBhZGRpbmctbGVmdCcsXG4gICdzY3JvbGwtcGFkZGluZy1yaWdodCcsXG4gICdzY3JvbGwtcGFkZGluZy10b3AnLFxuICAnc2Nyb2xsLXNuYXAtYWxpZ24nLFxuICAnc2Nyb2xsLXNuYXAtc3RvcCcsXG4gICdzY3JvbGwtc25hcC10eXBlJyxcbiAgJ3Njcm9sbGJhci1jb2xvcicsXG4gICdzY3JvbGxiYXItZ3V0dGVyJyxcbiAgJ3Njcm9sbGJhci13aWR0aCcsXG4gICdzaGFwZS1pbWFnZS10aHJlc2hvbGQnLFxuICAnc2hhcGUtbWFyZ2luJyxcbiAgJ3NoYXBlLW91dHNpZGUnLFxuICAnc3BlYWsnLFxuICAnc3BlYWstYXMnLFxuICAnc3JjJywgLy8gQGZvbnQtZmFjZVxuICAndGFiLXNpemUnLFxuICAndGFibGUtbGF5b3V0JyxcbiAgJ3RleHQtYWxpZ24nLFxuICAndGV4dC1hbGlnbi1hbGwnLFxuICAndGV4dC1hbGlnbi1sYXN0JyxcbiAgJ3RleHQtY29tYmluZS11cHJpZ2h0JyxcbiAgJ3RleHQtZGVjb3JhdGlvbicsXG4gICd0ZXh0LWRlY29yYXRpb24tY29sb3InLFxuICAndGV4dC1kZWNvcmF0aW9uLWxpbmUnLFxuICAndGV4dC1kZWNvcmF0aW9uLXN0eWxlJyxcbiAgJ3RleHQtZW1waGFzaXMnLFxuICAndGV4dC1lbXBoYXNpcy1jb2xvcicsXG4gICd0ZXh0LWVtcGhhc2lzLXBvc2l0aW9uJyxcbiAgJ3RleHQtZW1waGFzaXMtc3R5bGUnLFxuICAndGV4dC1pbmRlbnQnLFxuICAndGV4dC1qdXN0aWZ5JyxcbiAgJ3RleHQtb3JpZW50YXRpb24nLFxuICAndGV4dC1vdmVyZmxvdycsXG4gICd0ZXh0LXJlbmRlcmluZycsXG4gICd0ZXh0LXNoYWRvdycsXG4gICd0ZXh0LXRyYW5zZm9ybScsXG4gICd0ZXh0LXVuZGVybGluZS1wb3NpdGlvbicsXG4gICd0b3AnLFxuICAndHJhbnNmb3JtJyxcbiAgJ3RyYW5zZm9ybS1ib3gnLFxuICAndHJhbnNmb3JtLW9yaWdpbicsXG4gICd0cmFuc2Zvcm0tc3R5bGUnLFxuICAndHJhbnNpdGlvbicsXG4gICd0cmFuc2l0aW9uLWRlbGF5JyxcbiAgJ3RyYW5zaXRpb24tZHVyYXRpb24nLFxuICAndHJhbnNpdGlvbi1wcm9wZXJ0eScsXG4gICd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsXG4gICd1bmljb2RlLWJpZGknLFxuICAndmVydGljYWwtYWxpZ24nLFxuICAndmlzaWJpbGl0eScsXG4gICd2b2ljZS1iYWxhbmNlJyxcbiAgJ3ZvaWNlLWR1cmF0aW9uJyxcbiAgJ3ZvaWNlLWZhbWlseScsXG4gICd2b2ljZS1waXRjaCcsXG4gICd2b2ljZS1yYW5nZScsXG4gICd2b2ljZS1yYXRlJyxcbiAgJ3ZvaWNlLXN0cmVzcycsXG4gICd2b2ljZS12b2x1bWUnLFxuICAnd2hpdGUtc3BhY2UnLFxuICAnd2lkb3dzJyxcbiAgJ3dpZHRoJyxcbiAgJ3dpbGwtY2hhbmdlJyxcbiAgJ3dvcmQtYnJlYWsnLFxuICAnd29yZC1zcGFjaW5nJyxcbiAgJ3dvcmQtd3JhcCcsXG4gICd3cml0aW5nLW1vZGUnLFxuICAnei1pbmRleCdcbiAgLy8gcmV2ZXJzZSBtYWtlcyBzdXJlIGxvbmdlciBhdHRyaWJ1dGVzIGBmb250LXdlaWdodGAgYXJlIG1hdGNoZWQgZnVsbHlcbiAgLy8gaW5zdGVhZCBvZiBnZXR0aW5nIGZhbHNlIHBvc2l0aXZlcyBvbiBzYXkgYGZvbnRgXG5dLnJldmVyc2UoKTtcblxuLy8gc29tZSBncmFtbWFycyB1c2UgdGhlbSBhbGwgYXMgYSBzaW5nbGUgZ3JvdXBcbmNvbnN0IFBTRVVET19TRUxFQ1RPUlMgPSBQU0VVRE9fQ0xBU1NFUy5jb25jYXQoUFNFVURPX0VMRU1FTlRTKTtcblxuLypcbkxhbmd1YWdlOiBMZXNzXG5EZXNjcmlwdGlvbjogSXQncyBDU1MsIHdpdGgganVzdCBhIGxpdHRsZSBtb3JlLlxuQXV0aG9yOiAgIE1heCBNaWtoYWlsb3YgPHNldmVuLnBoYXNlcy5tYXhAZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cDovL2xlc3Njc3Mub3JnXG5DYXRlZ29yeTogY29tbW9uLCBjc3MsIHdlYlxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGxlc3MoaGxqcykge1xuICBjb25zdCBtb2RlcyA9IE1PREVTKGhsanMpO1xuICBjb25zdCBQU0VVRE9fU0VMRUNUT1JTJDEgPSBQU0VVRE9fU0VMRUNUT1JTO1xuXG4gIGNvbnN0IEFUX01PRElGSUVSUyA9IFwiYW5kIG9yIG5vdCBvbmx5XCI7XG4gIGNvbnN0IElERU5UX1JFID0gJ1tcXFxcdy1dKyc7IC8vIHllcywgTGVzcyBpZGVudGlmaWVycyBtYXkgYmVnaW4gd2l0aCBhIGRpZ2l0XG4gIGNvbnN0IElOVEVSUF9JREVOVF9SRSA9ICcoJyArIElERU5UX1JFICsgJ3xAXFxcXHsnICsgSURFTlRfUkUgKyAnXFxcXH0pJztcblxuICAvKiBHZW5lcmljIE1vZGVzICovXG5cbiAgY29uc3QgUlVMRVMgPSBbXTsgY29uc3QgVkFMVUVfTU9ERVMgPSBbXTsgLy8gZm9yd2FyZCBkZWYuIGZvciByZWN1cnNpdmUgbW9kZXNcblxuICBjb25zdCBTVFJJTkdfTU9ERSA9IGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4ge1xuICAgIC8vIExlc3Mgc3RyaW5ncyBhcmUgbm90IG11bHRpbGluZSAoYWxzbyBpbmNsdWRlICd+JyBmb3IgbW9yZSBjb25zaXN0ZW50IGNvbG9yaW5nIG9mIFwiZXNjYXBlZFwiIHN0cmluZ3MpXG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgYmVnaW46ICd+PycgKyBjICsgJy4qPycgKyBjXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBJREVOVF9NT0RFID0gZnVuY3Rpb24obmFtZSwgYmVnaW4sIHJlbGV2YW5jZSkge1xuICAgIHJldHVybiB7XG4gICAgICBjbGFzc05hbWU6IG5hbWUsXG4gICAgICBiZWdpbjogYmVnaW4sXG4gICAgICByZWxldmFuY2U6IHJlbGV2YW5jZVxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgQVRfS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IC9bYS16LV0rLyxcbiAgICBrZXl3b3JkOiBBVF9NT0RJRklFUlMsXG4gICAgYXR0cmlidXRlOiBNRURJQV9GRUFUVVJFUy5qb2luKFwiIFwiKVxuICB9O1xuXG4gIGNvbnN0IFBBUkVOU19NT0RFID0ge1xuICAgIC8vIHVzZWQgb25seSB0byBwcm9wZXJseSBiYWxhbmNlIG5lc3RlZCBwYXJlbnMgaW5zaWRlIG1peGluIGNhbGwsIGRlZi4gYXJnIGxpc3RcbiAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICBlbmQ6ICdcXFxcKScsXG4gICAgY29udGFpbnM6IFZBTFVFX01PREVTLFxuICAgIGtleXdvcmRzOiBBVF9LRVlXT1JEUyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvLyBnZW5lcmljIExlc3MgaGlnaGxpZ2h0ZXIgKHVzZWQgYWxtb3N0IGV2ZXJ5d2hlcmUgZXhjZXB0IHNlbGVjdG9ycyk6XG4gIFZBTFVFX01PREVTLnB1c2goXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgU1RSSU5HX01PREUoXCInXCIpLFxuICAgIFNUUklOR19NT0RFKCdcIicpLFxuICAgIG1vZGVzLkNTU19OVU1CRVJfTU9ERSwgLy8gZml4bWU6IGl0IGRvZXMgbm90IGluY2x1ZGUgZG90IGZvciBudW1iZXJzIGxpa2UgLjVlbSA6KFxuICAgIHtcbiAgICAgIGJlZ2luOiAnKHVybHxkYXRhLXVyaSlcXFxcKCcsXG4gICAgICBzdGFydHM6IHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgZW5kOiAnW1xcXFwpXFxcXG5dJyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAgbW9kZXMuSEVYQ09MT1IsXG4gICAgUEFSRU5TX01PREUsXG4gICAgSURFTlRfTU9ERSgndmFyaWFibGUnLCAnQEA/JyArIElERU5UX1JFLCAxMCksXG4gICAgSURFTlRfTU9ERSgndmFyaWFibGUnLCAnQFxcXFx7JyArIElERU5UX1JFICsgJ1xcXFx9JyksXG4gICAgSURFTlRfTU9ERSgnYnVpbHRfaW4nLCAnfj9gW15gXSo/YCcpLCAvLyBpbmxpbmUgamF2YXNjcmlwdCAob3Igd2hhdGV2ZXIgaG9zdCBsYW5ndWFnZSkgKm11bHRpbGluZSogc3RyaW5nXG4gICAgeyAvLyBAbWVkaWEgZmVhdHVyZXMgKGl04oCZcyBoZXJlIHRvIG5vdCBkdXBsaWNhdGUgdGhpbmdzIGluIEFUX1JVTEVfTU9ERSB3aXRoIGV4dHJhIFBBUkVOU19NT0RFIG92ZXJyaWRpbmcpOlxuICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgIGJlZ2luOiBJREVOVF9SRSArICdcXFxccyo6JyxcbiAgICAgIGVuZDogJzonLFxuICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgfSxcbiAgICBtb2Rlcy5JTVBPUlRBTlQsXG4gICAgeyBiZWdpbktleXdvcmRzOiAnYW5kIG5vdCcgfSxcbiAgICBtb2Rlcy5GVU5DVElPTl9ESVNQQVRDSFxuICApO1xuXG4gIGNvbnN0IFZBTFVFX1dJVEhfUlVMRVNFVFMgPSBWQUxVRV9NT0RFUy5jb25jYXQoe1xuICAgIGJlZ2luOiAvXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIGNvbnRhaW5zOiBSVUxFU1xuICB9KTtcblxuICBjb25zdCBNSVhJTl9HVUFSRF9NT0RFID0ge1xuICAgIGJlZ2luS2V5d29yZHM6ICd3aGVuJyxcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICBjb250YWluczogWyB7IGJlZ2luS2V5d29yZHM6ICdhbmQgbm90JyB9IF0uY29uY2F0KFZBTFVFX01PREVTKSAvLyB1c2luZyB0aGlzIGZvcm0gdG8gb3ZlcnJpZGUgVkFMVUXigJlzICdmdW5jdGlvbicgbWF0Y2hcbiAgfTtcblxuICAvKiBSdWxlLUxldmVsIE1vZGVzICovXG5cbiAgY29uc3QgUlVMRV9NT0RFID0ge1xuICAgIGJlZ2luOiBJTlRFUlBfSURFTlRfUkUgKyAnXFxcXHMqOicsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgZW5kOiAvWzt9XS8sXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGJlZ2luOiAvLSh3ZWJraXR8bW96fG1zfG8pLS8gfSxcbiAgICAgIG1vZGVzLkNTU19WQVJJQUJMRSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYignICsgQVRUUklCVVRFUy5qb2luKCd8JykgKyAnKVxcXFxiJyxcbiAgICAgICAgZW5kOiAvKD89OikvLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICBpbGxlZ2FsOiAnWzw9JF0nLFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBjb250YWluczogVkFMVUVfTU9ERVNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBBVF9SVUxFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICdAKGltcG9ydHxtZWRpYXxjaGFyc2V0fGZvbnQtZmFjZXwoLVthLXpdKy0pP2tleWZyYW1lc3xzdXBwb3J0c3xkb2N1bWVudHxuYW1lc3BhY2V8cGFnZXx2aWV3cG9ydHxob3N0KVxcXFxiJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJ1s7e31dJyxcbiAgICAgIGtleXdvcmRzOiBBVF9LRVlXT1JEUyxcbiAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgIGNvbnRhaW5zOiBWQUxVRV9NT0RFUyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgfTtcblxuICAvLyB2YXJpYWJsZSBkZWZpbml0aW9ucyBhbmQgY2FsbHNcbiAgY29uc3QgVkFSX1JVTEVfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIC8vIHVzaW5nIG1vcmUgc3RyaWN0IHBhdHRlcm4gZm9yIGhpZ2hlciByZWxldmFuY2UgdG8gaW5jcmVhc2UgY2hhbmNlcyBvZiBMZXNzIGRldGVjdGlvbi5cbiAgICAgIC8vIHRoaXMgaXMgKnRoZSBvbmx5KiBMZXNzIHNwZWNpZmljIHN0YXRlbWVudCB1c2VkIGluIG1vc3Qgb2YgdGhlIHNvdXJjZXMsIHNvLi4uXG4gICAgICAvLyAod2XigJlsbCBzdGlsbCBvZnRlbiBsb29zZSB0byB0aGUgY3NzLXBhcnNlciB1bmxlc3MgdGhlcmUncyAnLy8nIGNvbW1lbnQsXG4gICAgICAvLyBzaW1wbHkgYmVjYXVzZSAxIHZhcmlhYmxlIGp1c3QgY2FuJ3QgYmVhdCA5OSBwcm9wZXJ0aWVzIDopXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnQCcgKyBJREVOVF9SRSArICdcXFxccyo6JyxcbiAgICAgICAgcmVsZXZhbmNlOiAxNVxuICAgICAgfSxcbiAgICAgIHsgYmVnaW46ICdAJyArIElERU5UX1JFIH1cbiAgICBdLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnWzt9XScsXG4gICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICBjb250YWluczogVkFMVUVfV0lUSF9SVUxFU0VUU1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBTRUxFQ1RPUl9NT0RFID0ge1xuICAgIC8vIGZpcnN0IHBhcnNlIHVuYW1iaWd1b3VzIHNlbGVjdG9ycyAoaS5lLiB0aG9zZSBub3Qgc3RhcnRpbmcgd2l0aCB0YWcpXG4gICAgLy8gdGhlbiBmYWxsIGludG8gdGhlIHNjYXJ5IGxvb2thaGVhZC1kaXNjcmltaW5hdG9yIHZhcmlhbnQuXG4gICAgLy8gdGhpcyBtb2RlIGFsc28gaGFuZGxlcyBtaXhpbiBkZWZpbml0aW9ucyBhbmQgY2FsbHNcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1tcXFxcLiM6JlxcXFxbPl0nLFxuICAgICAgICBlbmQ6ICdbO3t9XScgLy8gbWl4aW4gY2FsbHMgZW5kIHdpdGggJzsnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogSU5URVJQX0lERU5UX1JFLFxuICAgICAgICBlbmQ6IC9cXHsvXG4gICAgICB9XG4gICAgXSxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgaWxsZWdhbDogJ1s8PVxcJyRcIl0nLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIE1JWElOX0dVQVJEX01PREUsXG4gICAgICBJREVOVF9NT0RFKCdrZXl3b3JkJywgJ2FsbFxcXFxiJyksXG4gICAgICBJREVOVF9NT0RFKCd2YXJpYWJsZScsICdAXFxcXHsnICsgSURFTlRfUkUgKyAnXFxcXH0nKSwgLy8gb3RoZXJ3aXNlIGl04oCZcyBpZGVudGlmaWVkIGFzIHRhZ1xuICAgICAgXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIFRBR1Muam9pbignfCcpICsgJylcXFxcYicsXG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXRhZydcbiAgICAgIH0sXG4gICAgICBtb2Rlcy5DU1NfTlVNQkVSX01PREUsXG4gICAgICBJREVOVF9NT0RFKCdzZWxlY3Rvci10YWcnLCBJTlRFUlBfSURFTlRfUkUsIDApLFxuICAgICAgSURFTlRfTU9ERSgnc2VsZWN0b3ItaWQnLCAnIycgKyBJTlRFUlBfSURFTlRfUkUpLFxuICAgICAgSURFTlRfTU9ERSgnc2VsZWN0b3ItY2xhc3MnLCAnXFxcXC4nICsgSU5URVJQX0lERU5UX1JFLCAwKSxcbiAgICAgIElERU5UX01PREUoJ3NlbGVjdG9yLXRhZycsICcmJywgMCksXG4gICAgICBtb2Rlcy5BVFRSSUJVVEVfU0VMRUNUT1JfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItcHNldWRvJyxcbiAgICAgICAgYmVnaW46ICc6KCcgKyBQU0VVRE9fQ0xBU1NFUy5qb2luKCd8JykgKyAnKSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXBzZXVkbycsXG4gICAgICAgIGJlZ2luOiAnOig6KT8oJyArIFBTRVVET19FTEVNRU5UUy5qb2luKCd8JykgKyAnKSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogVkFMVUVfV0lUSF9SVUxFU0VUU1xuICAgICAgfSwgLy8gYXJndW1lbnQgbGlzdCBvZiBwYXJhbWV0cmljIG1peGluc1xuICAgICAgeyBiZWdpbjogJyFpbXBvcnRhbnQnIH0sIC8vIGVhdCAhaW1wb3J0YW50IGFmdGVyIG1peGluIGNhbGwgb3IgaXQgd2lsbCBiZSBjb2xvcmVkIGFzIHRhZ1xuICAgICAgbW9kZXMuRlVOQ1RJT05fRElTUEFUQ0hcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgUFNFVURPX1NFTEVDVE9SX01PREUgPSB7XG4gICAgYmVnaW46IElERU5UX1JFICsgJzooOik/JyArIGAoJHtQU0VVRE9fU0VMRUNUT1JTJDEuam9pbignfCcpfSlgLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbIFNFTEVDVE9SX01PREUgXVxuICB9O1xuXG4gIFJVTEVTLnB1c2goXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgQVRfUlVMRV9NT0RFLFxuICAgIFZBUl9SVUxFX01PREUsXG4gICAgUFNFVURPX1NFTEVDVE9SX01PREUsXG4gICAgUlVMRV9NT0RFLFxuICAgIFNFTEVDVE9SX01PREUsXG4gICAgTUlYSU5fR1VBUkRfTU9ERSxcbiAgICBtb2Rlcy5GVU5DVElPTl9ESVNQQVRDSFxuICApO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0xlc3MnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogJ1s9PlxcJy88KCRcIl0nLFxuICAgIGNvbnRhaW5zOiBSVUxFU1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxlc3M7XG4iLCIvKlxuTGFuZ3VhZ2U6IEx1YVxuRGVzY3JpcHRpb246IEx1YSBpcyBhIHBvd2VyZnVsLCBlZmZpY2llbnQsIGxpZ2h0d2VpZ2h0LCBlbWJlZGRhYmxlIHNjcmlwdGluZyBsYW5ndWFnZS5cbkF1dGhvcjogQW5kcmV3IEZlZG9yb3YgPGRtbWRyc0BtYWlsLnJ1PlxuQ2F0ZWdvcnk6IGNvbW1vbiwgc2NyaXB0aW5nXG5XZWJzaXRlOiBodHRwczovL3d3dy5sdWEub3JnXG4qL1xuXG5mdW5jdGlvbiBsdWEoaGxqcykge1xuICBjb25zdCBPUEVOSU5HX0xPTkdfQlJBQ0tFVCA9ICdcXFxcWz0qXFxcXFsnO1xuICBjb25zdCBDTE9TSU5HX0xPTkdfQlJBQ0tFVCA9ICdcXFxcXT0qXFxcXF0nO1xuICBjb25zdCBMT05HX0JSQUNLRVRTID0ge1xuICAgIGJlZ2luOiBPUEVOSU5HX0xPTkdfQlJBQ0tFVCxcbiAgICBlbmQ6IENMT1NJTkdfTE9OR19CUkFDS0VULFxuICAgIGNvbnRhaW5zOiBbICdzZWxmJyBdXG4gIH07XG4gIGNvbnN0IENPTU1FTlRTID0gW1xuICAgIGhsanMuQ09NTUVOVCgnLS0oPyEnICsgT1BFTklOR19MT05HX0JSQUNLRVQgKyAnKScsICckJyksXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgJy0tJyArIE9QRU5JTkdfTE9OR19CUkFDS0VULFxuICAgICAgQ0xPU0lOR19MT05HX0JSQUNLRVQsXG4gICAgICB7XG4gICAgICAgIGNvbnRhaW5zOiBbIExPTkdfQlJBQ0tFVFMgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfVxuICAgIClcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnTHVhJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgIGxpdGVyYWw6IFwidHJ1ZSBmYWxzZSBuaWxcIixcbiAgICAgIGtleXdvcmQ6IFwiYW5kIGJyZWFrIGRvIGVsc2UgZWxzZWlmIGVuZCBmb3IgZ290byBpZiBpbiBsb2NhbCBub3Qgb3IgcmVwZWF0IHJldHVybiB0aGVuIHVudGlsIHdoaWxlXCIsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLy8gTWV0YXRhZ3MgYW5kIGdsb2JhbHM6XG4gICAgICAgICdfRyBfRU5WIF9WRVJTSU9OIF9faW5kZXggX19uZXdpbmRleCBfX21vZGUgX19jYWxsIF9fbWV0YXRhYmxlIF9fdG9zdHJpbmcgX19sZW4gJ1xuICAgICAgICArICdfX2djIF9fYWRkIF9fc3ViIF9fbXVsIF9fZGl2IF9fbW9kIF9fcG93IF9fY29uY2F0IF9fdW5tIF9fZXEgX19sdCBfX2xlIGFzc2VydCAnXG4gICAgICAgIC8vIFN0YW5kYXJkIG1ldGhvZHMgYW5kIHByb3BlcnRpZXM6XG4gICAgICAgICsgJ2NvbGxlY3RnYXJiYWdlIGRvZmlsZSBlcnJvciBnZXRmZW52IGdldG1ldGF0YWJsZSBpcGFpcnMgbG9hZCBsb2FkZmlsZSBsb2Fkc3RyaW5nICdcbiAgICAgICAgKyAnbW9kdWxlIG5leHQgcGFpcnMgcGNhbGwgcHJpbnQgcmF3ZXF1YWwgcmF3Z2V0IHJhd3NldCByZXF1aXJlIHNlbGVjdCBzZXRmZW52ICdcbiAgICAgICAgKyAnc2V0bWV0YXRhYmxlIHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgdW5wYWNrIHhwY2FsbCBhcmcgc2VsZiAnXG4gICAgICAgIC8vIExpYnJhcnkgbWV0aG9kcyBhbmQgcHJvcGVydGllcyAob25lIGxpbmUgcGVyIGxpYnJhcnkpOlxuICAgICAgICArICdjb3JvdXRpbmUgcmVzdW1lIHlpZWxkIHN0YXR1cyB3cmFwIGNyZWF0ZSBydW5uaW5nIGRlYnVnIGdldHVwdmFsdWUgJ1xuICAgICAgICArICdkZWJ1ZyBzZXRob29rIGdldG1ldGF0YWJsZSBnZXRob29rIHNldG1ldGF0YWJsZSBzZXRsb2NhbCB0cmFjZWJhY2sgc2V0ZmVudiBnZXRpbmZvIHNldHVwdmFsdWUgZ2V0bG9jYWwgZ2V0cmVnaXN0cnkgZ2V0ZmVudiAnXG4gICAgICAgICsgJ2lvIGxpbmVzIHdyaXRlIGNsb3NlIGZsdXNoIG9wZW4gb3V0cHV0IHR5cGUgcmVhZCBzdGRlcnIgc3RkaW4gaW5wdXQgc3Rkb3V0IHBvcGVuIHRtcGZpbGUgJ1xuICAgICAgICArICdtYXRoIGxvZyBtYXggYWNvcyBodWdlIGxkZXhwIHBpIGNvcyB0YW5oIHBvdyBkZWcgdGFuIGNvc2ggc2luaCByYW5kb20gcmFuZG9tc2VlZCBmcmV4cCBjZWlsIGZsb29yIHJhZCBhYnMgc3FydCBtb2RmIGFzaW4gbWluIG1vZCBmbW9kIGxvZzEwIGF0YW4yIGV4cCBzaW4gYXRhbiAnXG4gICAgICAgICsgJ29zIGV4aXQgc2V0bG9jYWxlIGRhdGUgZ2V0ZW52IGRpZmZ0aW1lIHJlbW92ZSB0aW1lIGNsb2NrIHRtcG5hbWUgcmVuYW1lIGV4ZWN1dGUgcGFja2FnZSBwcmVsb2FkIGxvYWRsaWIgbG9hZGVkIGxvYWRlcnMgY3BhdGggY29uZmlnIHBhdGggc2VlYWxsICdcbiAgICAgICAgKyAnc3RyaW5nIHN1YiB1cHBlciBsZW4gZ2ZpbmQgcmVwIGZpbmQgbWF0Y2ggY2hhciBkdW1wIGdtYXRjaCByZXZlcnNlIGJ5dGUgZm9ybWF0IGdzdWIgbG93ZXIgJ1xuICAgICAgICArICd0YWJsZSBzZXRuIGluc2VydCBnZXRuIGZvcmVhY2hpIG1heG4gZm9yZWFjaCBjb25jYXQgc29ydCByZW1vdmUnXG4gICAgfSxcbiAgICBjb250YWluczogQ09NTUVOVFMuY29uY2F0KFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLFxuICAgICAgICBlbmQ6ICdcXFxcKScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBiZWdpbjogJyhbX2EtekEtWl1cXFxcdypcXFxcLikqKFtfYS16QS1aXVxcXFx3KjopP1tfYS16QS1aXVxcXFx3KicgfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBjb250YWluczogQ09NTUVOVFNcbiAgICAgICAgICB9XG4gICAgICAgIF0uY29uY2F0KENPTU1FTlRTKVxuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiBPUEVOSU5HX0xPTkdfQlJBQ0tFVCxcbiAgICAgICAgZW5kOiBDTE9TSU5HX0xPTkdfQlJBQ0tFVCxcbiAgICAgICAgY29udGFpbnM6IFsgTE9OR19CUkFDS0VUUyBdLFxuICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgIH1cbiAgICBdKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGx1YTtcbiIsIi8qXG5MYW5ndWFnZTogTWFrZWZpbGVcbkF1dGhvcjogSXZhbiBTYWdhbGFldiA8bWFuaWFjQHNvZnR3YXJlbWFuaWFjcy5vcmc+XG5Db250cmlidXRvcnM6IEpvw6tsIFBvcnF1ZXQgPGpvZWxAcG9ycXVldC5vcmc+XG5XZWJzaXRlOiBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL21ha2UvbWFudWFsL2h0bWxfbm9kZS9JbnRyb2R1Y3Rpb24uaHRtbFxuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuZnVuY3Rpb24gbWFrZWZpbGUoaGxqcykge1xuICAvKiBWYXJpYWJsZXM6IHNpbXBsZSAoZWcgJCh2YXIpKSBhbmQgc3BlY2lhbCAoZWcgJEApICovXG4gIGNvbnN0IFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwkXFxcXCgnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFwpJyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgICAgIH0sXG4gICAgICB7IGJlZ2luOiAvXFwkW0AlPD9cXF5cXCtcXCpdLyB9XG4gICAgXVxuICB9O1xuICAvKiBRdW90ZWQgc3RyaW5nIHdpdGggdmFyaWFibGVzIGluc2lkZSAqL1xuICBjb25zdCBRVU9URV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1wiLyxcbiAgICBlbmQ6IC9cIi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFZBUklBQkxFXG4gICAgXVxuICB9O1xuICAvKiBGdW5jdGlvbjogJChmdW5jIGFyZywuLi4pICovXG4gIGNvbnN0IEZVTkMgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFwkXFwoW1xcdy1dK1xccy8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICBrZXl3b3JkczogeyBidWlsdF9pbjpcbiAgICAgICAgJ3N1YnN0IHBhdHN1YnN0IHN0cmlwIGZpbmRzdHJpbmcgZmlsdGVyIGZpbHRlci1vdXQgc29ydCAnXG4gICAgICAgICsgJ3dvcmQgd29yZGxpc3QgZmlyc3R3b3JkIGxhc3R3b3JkIGRpciBub3RkaXIgc3VmZml4IGJhc2VuYW1lICdcbiAgICAgICAgKyAnYWRkc3VmZml4IGFkZHByZWZpeCBqb2luIHdpbGRjYXJkIHJlYWxwYXRoIGFic3BhdGggZXJyb3Igd2FybmluZyAnXG4gICAgICAgICsgJ3NoZWxsIG9yaWdpbiBmbGF2b3IgZm9yZWFjaCBpZiBvciBhbmQgY2FsbCBldmFsIGZpbGUgdmFsdWUnIH0sXG4gICAgY29udGFpbnM6IFsgVkFSSUFCTEUgXVxuICB9O1xuICAvKiBWYXJpYWJsZSBhc3NpZ25tZW50ICovXG4gIGNvbnN0IEFTU0lHTk1FTlQgPSB7IGJlZ2luOiAnXicgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqKD89WzorP10/PSknIH07XG4gIC8qIE1ldGEgdGFyZ2V0cyAoLlBIT05ZKSAqL1xuICBjb25zdCBNRVRBID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAvXlxcLlBIT05ZOi8sXG4gICAgZW5kOiAvJC8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAvW1xcLlxcd10rLyxcbiAgICAgIGtleXdvcmQ6ICcuUEhPTlknXG4gICAgfVxuICB9O1xuICAvKiBUYXJnZXRzICovXG4gIGNvbnN0IFRBUkdFVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICBiZWdpbjogL15bXlxcc10rOi8sXG4gICAgZW5kOiAvJC8sXG4gICAgY29udGFpbnM6IFsgVkFSSUFCTEUgXVxuICB9O1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNYWtlZmlsZScsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ21rJyxcbiAgICAgICdtYWsnLFxuICAgICAgJ21ha2UnLFxuICAgIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAvW1xcdy1dKy8sXG4gICAgICBrZXl3b3JkOiAnZGVmaW5lIGVuZGVmIHVuZGVmaW5lIGlmZGVmIGlmbmRlZiBpZmVxIGlmbmVxIGVsc2UgZW5kaWYgJ1xuICAgICAgKyAnaW5jbHVkZSAtaW5jbHVkZSBzaW5jbHVkZSBvdmVycmlkZSBleHBvcnQgdW5leHBvcnQgcHJpdmF0ZSB2cGF0aCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBRVU9URV9TVFJJTkcsXG4gICAgICBGVU5DLFxuICAgICAgQVNTSUdOTUVOVCxcbiAgICAgIE1FVEEsXG4gICAgICBUQVJHRVRcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFrZWZpbGU7XG4iLCIvKlxuTGFuZ3VhZ2U6IE1hcmtkb3duXG5SZXF1aXJlczogeG1sLmpzXG5BdXRob3I6IEpvaG4gQ3JlcGV6emkgPGpvaG4uY3JlcGV6emlAZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9kYXJpbmdmaXJlYmFsbC5uZXQvcHJvamVjdHMvbWFya2Rvd24vXG5DYXRlZ29yeTogY29tbW9uLCBtYXJrdXBcbiovXG5cbmZ1bmN0aW9uIG1hcmtkb3duKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICBjb25zdCBJTkxJTkVfSFRNTCA9IHtcbiAgICBiZWdpbjogLzxcXC8/W0EtWmEtel9dLyxcbiAgICBlbmQ6ICc+JyxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IEhPUklaT05UQUxfUlVMRSA9IHtcbiAgICBiZWdpbjogJ15bLVxcXFwqXXszLH0nLFxuICAgIGVuZDogJyQnXG4gIH07XG4gIGNvbnN0IENPREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnY29kZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIC8vIFRPRE86IGZpeCB0byBhbGxvdyB0aGVzZSB0byB3b3JrIHdpdGggc3VibGFuZ3VhZ2UgYWxzb1xuICAgICAgeyBiZWdpbjogJyhgezMsfSlbXmBdKC58XFxcXG4pKj9cXFxcMWAqWyBdKicgfSxcbiAgICAgIHsgYmVnaW46ICcofnszLH0pW15+XSgufFxcXFxuKSo/XFxcXDF+KlsgXSonIH0sXG4gICAgICAvLyBuZWVkZWQgdG8gYWxsb3cgbWFya2Rvd24gYXMgYSBzdWJsYW5ndWFnZSB0byB3b3JrXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnYGBgJyxcbiAgICAgICAgZW5kOiAnYGBgK1sgXSokJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICd+fn4nLFxuICAgICAgICBlbmQ6ICd+fn4rWyBdKiQnXG4gICAgICB9LFxuICAgICAgeyBiZWdpbjogJ2AuKz9gJyB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyg/PV4oIHs0fXxcXFxcdCkpJyxcbiAgICAgICAgLy8gdXNlIGNvbnRhaW5zIHRvIGdvYmJsZSB1cCBtdWx0aXBsZSBsaW5lcyB0byBhbGxvdyB0aGUgYmxvY2sgdG8gYmUgd2hhdGV2ZXIgc2l6ZVxuICAgICAgICAvLyBidXQgb25seSBoYXZlIGEgc2luZ2xlIG9wZW4vY2xvc2UgdGFnIHZzIG9uZSBwZXIgbGluZVxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXiggezR9fFxcXFx0KScsXG4gICAgICAgICAgICBlbmQ6ICcoXFxcXG4pJCdcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgTElTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdidWxsZXQnLFxuICAgIGJlZ2luOiAnXlsgXFx0XSooWyorLV18KFxcXFxkK1xcXFwuKSkoPz1cXFxccyspJyxcbiAgICBlbmQ6ICdcXFxccysnLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgfTtcbiAgY29uc3QgTElOS19SRUZFUkVOQ0UgPSB7XG4gICAgYmVnaW46IC9eXFxbW15cXG5dK1xcXTovLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgICAgZW5kOiAvXFxdLyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaW5rJyxcbiAgICAgICAgYmVnaW46IC86XFxzKi8sXG4gICAgICAgIGVuZDogLyQvLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFVSTF9TQ0hFTUUgPSAvW0EtWmEtel1bQS1aYS16MC05Ky4tXSovO1xuICBjb25zdCBMSU5LID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyB0b28gbXVjaCBsaWtlIG5lc3RlZCBhcnJheSBhY2Nlc3MgaW4gc28gbWFueSBsYW5ndWFnZXNcbiAgICAgIC8vIHRvIGhhdmUgYW55IHJlYWwgcmVsZXZhbmNlXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLis/XFxdXFxbLio/XFxdLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gcG9wdWxhciBpbnRlcm5ldCBVUkxzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLis/XFxdXFwoKChkYXRhfGphdmFzY3JpcHR8bWFpbHRvKTp8KD86aHR0cHxmdHApcz86XFwvXFwvKS4qP1xcKS8sXG4gICAgICAgIHJlbGV2YW5jZTogMlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IHJlZ2V4LmNvbmNhdCgvXFxbLis/XFxdXFwoLywgVVJMX1NDSEVNRSwgLzpcXC9cXC8uKj9cXCkvKSxcbiAgICAgICAgcmVsZXZhbmNlOiAyXG4gICAgICB9LFxuICAgICAgLy8gcmVsYXRpdmUgdXJsc1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcWy4rP1xcXVxcKFsuLz8mI10uKj9cXCkvLFxuICAgICAgICByZWxldmFuY2U6IDFcbiAgICAgIH0sXG4gICAgICAvLyB3aGF0ZXZlciBlbHNlLCBsb3dlciByZWxldmFuY2UgKG1pZ2h0IG5vdCBiZSBhIGxpbmsgYXQgYWxsKVxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcWy4qP1xcXVxcKC4qP1xcKS8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0sXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgLy8gZW1wdHkgc3RyaW5ncyBmb3IgYWx0IG9yIGxpbmsgdGV4dFxuICAgICAgICBtYXRjaDogL1xcWyg/PVxcXSkvIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgYmVnaW46ICdcXFxcWycsXG4gICAgICAgIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICByZXR1cm5FbmQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpbmsnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGJlZ2luOiAnXFxcXF1cXFxcKCcsXG4gICAgICAgIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGJlZ2luOiAnXFxcXF1cXFxcWycsXG4gICAgICAgIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBCT0xEID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cm9uZycsXG4gICAgY29udGFpbnM6IFtdLCAvLyBkZWZpbmVkIGxhdGVyXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9fezJ9LyxcbiAgICAgICAgZW5kOiAvX3syfS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwqezJ9LyxcbiAgICAgICAgZW5kOiAvXFwqezJ9L1xuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgSVRBTElDID0ge1xuICAgIGNsYXNzTmFtZTogJ2VtcGhhc2lzJyxcbiAgICBjb250YWluczogW10sIC8vIGRlZmluZWQgbGF0ZXJcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKig/IVxcKikvLFxuICAgICAgICBlbmQ6IC9cXCovXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL18oPyFfKS8sXG4gICAgICAgIGVuZDogL18vLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgLy8gMyBsZXZlbCBkZWVwIG5lc3RpbmcgaXMgbm90IGFsbG93ZWQgYmVjYXVzZSBpdCB3b3VsZCBjcmVhdGUgY29uZnVzaW9uXG4gIC8vIGluIGNhc2VzIGxpa2UgYCoqKnRlc3RpbmcqKipgIGJlY2F1c2Ugd2hlcmUgd2UgZG9uJ3Qga25vdyBpZiB0aGUgbGFzdFxuICAvLyBgKioqYCBpcyBzdGFydGluZyBhIG5ldyBib2xkL2l0YWxpYyBvciBmaW5pc2hpbmcgdGhlIGxhc3Qgb25lXG4gIGNvbnN0IEJPTERfV0lUSE9VVF9JVEFMSUMgPSBobGpzLmluaGVyaXQoQk9MRCwgeyBjb250YWluczogW10gfSk7XG4gIGNvbnN0IElUQUxJQ19XSVRIT1VUX0JPTEQgPSBobGpzLmluaGVyaXQoSVRBTElDLCB7IGNvbnRhaW5zOiBbXSB9KTtcbiAgQk9MRC5jb250YWlucy5wdXNoKElUQUxJQ19XSVRIT1VUX0JPTEQpO1xuICBJVEFMSUMuY29udGFpbnMucHVzaChCT0xEX1dJVEhPVVRfSVRBTElDKTtcblxuICBsZXQgQ09OVEFJTkFCTEUgPSBbXG4gICAgSU5MSU5FX0hUTUwsXG4gICAgTElOS1xuICBdO1xuXG4gIFtcbiAgICBCT0xELFxuICAgIElUQUxJQyxcbiAgICBCT0xEX1dJVEhPVVRfSVRBTElDLFxuICAgIElUQUxJQ19XSVRIT1VUX0JPTERcbiAgXS5mb3JFYWNoKG0gPT4ge1xuICAgIG0uY29udGFpbnMgPSBtLmNvbnRhaW5zLmNvbmNhdChDT05UQUlOQUJMRSk7XG4gIH0pO1xuXG4gIENPTlRBSU5BQkxFID0gQ09OVEFJTkFCTEUuY29uY2F0KEJPTEQsIElUQUxJQyk7XG5cbiAgY29uc3QgSEVBREVSID0ge1xuICAgIGNsYXNzTmFtZTogJ3NlY3Rpb24nLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXiN7MSw2fScsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogQ09OVEFJTkFCTEVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKD89Xi4rP1xcXFxuWz0tXXsyLH0kKScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ15bPS1dKiQnIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdeJyxcbiAgICAgICAgICAgIGVuZDogXCJcXFxcblwiLFxuICAgICAgICAgICAgY29udGFpbnM6IENPTlRBSU5BQkxFXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IEJMT0NLUVVPVEUgPSB7XG4gICAgY2xhc3NOYW1lOiAncXVvdGUnLFxuICAgIGJlZ2luOiAnXj5cXFxccysnLFxuICAgIGNvbnRhaW5zOiBDT05UQUlOQUJMRSxcbiAgICBlbmQ6ICckJ1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ01hcmtkb3duJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnbWQnLFxuICAgICAgJ21rZG93bicsXG4gICAgICAnbWtkJ1xuICAgIF0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEhFQURFUixcbiAgICAgIElOTElORV9IVE1MLFxuICAgICAgTElTVCxcbiAgICAgIEJPTEQsXG4gICAgICBJVEFMSUMsXG4gICAgICBCTE9DS1FVT1RFLFxuICAgICAgQ09ERSxcbiAgICAgIEhPUklaT05UQUxfUlVMRSxcbiAgICAgIExJTkssXG4gICAgICBMSU5LX1JFRkVSRU5DRVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXJrZG93bjtcbiIsIi8qXG5MYW5ndWFnZTogT2JqZWN0aXZlLUNcbkF1dGhvcjogVmFsZXJpaSBIaW9yYSA8dmFsZXJpaS5oaW9yYUBnbWFpbC5jb20+XG5Db250cmlidXRvcnM6IEFuZ2VsIEcuIE9sbG9xdWkgPGFuZ2VsZ2FyY2lhLm1haWxAZ21haWwuY29tPiwgTWF0dCBEaWVwaG91c2UgPG1hdHRAZGllcGhvdXNlLmNvbT4sIEFuZHJldyBGYXJtZXIgPGFoZmFybWVyQGdtYWlsLmNvbT4sIE1pbmggTmd1eeG7hW4gPG14bkAxZWM1Lm9yZz5cbldlYnNpdGU6IGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL29iamVjdGl2ZWNcbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbmZ1bmN0aW9uIG9iamVjdGl2ZWMoaGxqcykge1xuICBjb25zdCBBUElfQ0xBU1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIGJlZ2luOiAnXFxcXGIoQVZ8Q0F8Q0Z8Q0d8Q0l8Q0x8Q018Q058Q1R8TUt8TVB8TVRLfE1UTHxOU3xTQ058U0t8VUl8V0t8WEMpXFxcXHcrJ1xuICB9O1xuICBjb25zdCBJREVOVElGSUVSX1JFID0gL1thLXpBLVpAXVthLXpBLVowLTlfXSovO1xuICBjb25zdCBUWVBFUyA9IFtcbiAgICBcImludFwiLFxuICAgIFwiZmxvYXRcIixcbiAgICBcImNoYXJcIixcbiAgICBcInVuc2lnbmVkXCIsXG4gICAgXCJzaWduZWRcIixcbiAgICBcInNob3J0XCIsXG4gICAgXCJsb25nXCIsXG4gICAgXCJkb3VibGVcIixcbiAgICBcIndjaGFyX3RcIixcbiAgICBcInVuaWNoYXJcIixcbiAgICBcInZvaWRcIixcbiAgICBcImJvb2xcIixcbiAgICBcIkJPT0xcIixcbiAgICBcImlkfDBcIixcbiAgICBcIl9Cb29sXCJcbiAgXTtcbiAgY29uc3QgS1dTID0gW1xuICAgIFwid2hpbGVcIixcbiAgICBcImV4cG9ydFwiLFxuICAgIFwic2l6ZW9mXCIsXG4gICAgXCJ0eXBlZGVmXCIsXG4gICAgXCJjb25zdFwiLFxuICAgIFwic3RydWN0XCIsXG4gICAgXCJmb3JcIixcbiAgICBcInVuaW9uXCIsXG4gICAgXCJ2b2xhdGlsZVwiLFxuICAgIFwic3RhdGljXCIsXG4gICAgXCJtdXRhYmxlXCIsXG4gICAgXCJpZlwiLFxuICAgIFwiZG9cIixcbiAgICBcInJldHVyblwiLFxuICAgIFwiZ290b1wiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwiYnJlYWtcIixcbiAgICBcImV4dGVyblwiLFxuICAgIFwiYXNtXCIsXG4gICAgXCJjYXNlXCIsXG4gICAgXCJkZWZhdWx0XCIsXG4gICAgXCJyZWdpc3RlclwiLFxuICAgIFwiZXhwbGljaXRcIixcbiAgICBcInR5cGVuYW1lXCIsXG4gICAgXCJzd2l0Y2hcIixcbiAgICBcImNvbnRpbnVlXCIsXG4gICAgXCJpbmxpbmVcIixcbiAgICBcInJlYWRvbmx5XCIsXG4gICAgXCJhc3NpZ25cIixcbiAgICBcInJlYWR3cml0ZVwiLFxuICAgIFwic2VsZlwiLFxuICAgIFwiQHN5bmNocm9uaXplZFwiLFxuICAgIFwiaWRcIixcbiAgICBcInR5cGVvZlwiLFxuICAgIFwibm9uYXRvbWljXCIsXG4gICAgXCJJQk91dGxldFwiLFxuICAgIFwiSUJBY3Rpb25cIixcbiAgICBcInN0cm9uZ1wiLFxuICAgIFwid2Vha1wiLFxuICAgIFwiY29weVwiLFxuICAgIFwiaW5cIixcbiAgICBcIm91dFwiLFxuICAgIFwiaW5vdXRcIixcbiAgICBcImJ5Y29weVwiLFxuICAgIFwiYnlyZWZcIixcbiAgICBcIm9uZXdheVwiLFxuICAgIFwiX19zdHJvbmdcIixcbiAgICBcIl9fd2Vha1wiLFxuICAgIFwiX19ibG9ja1wiLFxuICAgIFwiX19hdXRvcmVsZWFzaW5nXCIsXG4gICAgXCJAcHJpdmF0ZVwiLFxuICAgIFwiQHByb3RlY3RlZFwiLFxuICAgIFwiQHB1YmxpY1wiLFxuICAgIFwiQHRyeVwiLFxuICAgIFwiQHByb3BlcnR5XCIsXG4gICAgXCJAZW5kXCIsXG4gICAgXCJAdGhyb3dcIixcbiAgICBcIkBjYXRjaFwiLFxuICAgIFwiQGZpbmFsbHlcIixcbiAgICBcIkBhdXRvcmVsZWFzZXBvb2xcIixcbiAgICBcIkBzeW50aGVzaXplXCIsXG4gICAgXCJAZHluYW1pY1wiLFxuICAgIFwiQHNlbGVjdG9yXCIsXG4gICAgXCJAb3B0aW9uYWxcIixcbiAgICBcIkByZXF1aXJlZFwiLFxuICAgIFwiQGVuY29kZVwiLFxuICAgIFwiQHBhY2thZ2VcIixcbiAgICBcIkBpbXBvcnRcIixcbiAgICBcIkBkZWZzXCIsXG4gICAgXCJAY29tcGF0aWJpbGl0eV9hbGlhc1wiLFxuICAgIFwiX19icmlkZ2VcIixcbiAgICBcIl9fYnJpZGdlX3RyYW5zZmVyXCIsXG4gICAgXCJfX2JyaWRnZV9yZXRhaW5lZFwiLFxuICAgIFwiX19icmlkZ2VfcmV0YWluXCIsXG4gICAgXCJfX2NvdmFyaWFudFwiLFxuICAgIFwiX19jb250cmF2YXJpYW50XCIsXG4gICAgXCJfX2tpbmRvZlwiLFxuICAgIFwiX05vbm51bGxcIixcbiAgICBcIl9OdWxsYWJsZVwiLFxuICAgIFwiX051bGxfdW5zcGVjaWZpZWRcIixcbiAgICBcIl9fRlVOQ1RJT05fX1wiLFxuICAgIFwiX19QUkVUVFlfRlVOQ1RJT05fX1wiLFxuICAgIFwiX19hdHRyaWJ1dGVfX1wiLFxuICAgIFwiZ2V0dGVyXCIsXG4gICAgXCJzZXR0ZXJcIixcbiAgICBcInJldGFpblwiLFxuICAgIFwidW5zYWZlX3VucmV0YWluZWRcIixcbiAgICBcIm5vbm51bGxcIixcbiAgICBcIm51bGxhYmxlXCIsXG4gICAgXCJudWxsX3Vuc3BlY2lmaWVkXCIsXG4gICAgXCJudWxsX3Jlc2V0dGFibGVcIixcbiAgICBcImNsYXNzXCIsXG4gICAgXCJpbnN0YW5jZXR5cGVcIixcbiAgICBcIk5TX0RFU0lHTkFURURfSU5JVElBTElaRVJcIixcbiAgICBcIk5TX1VOQVZBSUxBQkxFXCIsXG4gICAgXCJOU19SRVFVSVJFU19TVVBFUlwiLFxuICAgIFwiTlNfUkVUVVJOU19JTk5FUl9QT0lOVEVSXCIsXG4gICAgXCJOU19JTkxJTkVcIixcbiAgICBcIk5TX0FWQUlMQUJMRVwiLFxuICAgIFwiTlNfREVQUkVDQVRFRFwiLFxuICAgIFwiTlNfRU5VTVwiLFxuICAgIFwiTlNfT1BUSU9OU1wiLFxuICAgIFwiTlNfU1dJRlRfVU5BVkFJTEFCTEVcIixcbiAgICBcIk5TX0FTU1VNRV9OT05OVUxMX0JFR0lOXCIsXG4gICAgXCJOU19BU1NVTUVfTk9OTlVMTF9FTkRcIixcbiAgICBcIk5TX1JFRklORURfRk9SX1NXSUZUXCIsXG4gICAgXCJOU19TV0lGVF9OQU1FXCIsXG4gICAgXCJOU19TV0lGVF9OT1RIUk9XXCIsXG4gICAgXCJOU19EVVJJTkdcIixcbiAgICBcIk5TX0hBTkRMRVJcIixcbiAgICBcIk5TX0VOREhBTkRMRVJcIixcbiAgICBcIk5TX1ZBTFVFUkVUVVJOXCIsXG4gICAgXCJOU19WT0lEUkVUVVJOXCJcbiAgXTtcbiAgY29uc3QgTElURVJBTFMgPSBbXG4gICAgXCJmYWxzZVwiLFxuICAgIFwidHJ1ZVwiLFxuICAgIFwiRkFMU0VcIixcbiAgICBcIlRSVUVcIixcbiAgICBcIm5pbFwiLFxuICAgIFwiWUVTXCIsXG4gICAgXCJOT1wiLFxuICAgIFwiTlVMTFwiXG4gIF07XG4gIGNvbnN0IEJVSUxUX0lOUyA9IFtcbiAgICBcImRpc3BhdGNoX29uY2VfdFwiLFxuICAgIFwiZGlzcGF0Y2hfcXVldWVfdFwiLFxuICAgIFwiZGlzcGF0Y2hfc3luY1wiLFxuICAgIFwiZGlzcGF0Y2hfYXN5bmNcIixcbiAgICBcImRpc3BhdGNoX29uY2VcIlxuICBdO1xuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICBcInZhcmlhYmxlLmxhbmd1YWdlXCI6IFtcbiAgICAgIFwidGhpc1wiLFxuICAgICAgXCJzdXBlclwiXG4gICAgXSxcbiAgICAkcGF0dGVybjogSURFTlRJRklFUl9SRSxcbiAgICBrZXl3b3JkOiBLV1MsXG4gICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOUyxcbiAgICB0eXBlOiBUWVBFU1xuICB9O1xuICBjb25zdCBDTEFTU19LRVlXT1JEUyA9IHtcbiAgICAkcGF0dGVybjogSURFTlRJRklFUl9SRSxcbiAgICBrZXl3b3JkOiBbXG4gICAgICBcIkBpbnRlcmZhY2VcIixcbiAgICAgIFwiQGNsYXNzXCIsXG4gICAgICBcIkBwcm90b2NvbFwiLFxuICAgICAgXCJAaW1wbGVtZW50YXRpb25cIlxuICAgIF1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnT2JqZWN0aXZlLUMnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdtbScsXG4gICAgICAnb2JqYycsXG4gICAgICAnb2JqLWMnLFxuICAgICAgJ29iai1jKysnLFxuICAgICAgJ29iamVjdGl2ZS1jKysnXG4gICAgXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogJzwvJyxcbiAgICBjb250YWluczogW1xuICAgICAgQVBJX0NMQVNTLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdAXCInLFxuICAgICAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC8jXFxzKlthLXpdK1xcYi8sXG4gICAgICAgIGVuZDogLyQvLFxuICAgICAgICBrZXl3b3JkczogeyBrZXl3b3JkOlxuICAgICAgICAgICAgJ2lmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lICdcbiAgICAgICAgICAgICsgJ3ByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZScgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcXFxcXG4vLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwgeyBjbGFzc05hbWU6ICdzdHJpbmcnIH0pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogLzwuKj8+LyxcbiAgICAgICAgICAgIGVuZDogLyQvLFxuICAgICAgICAgICAgaWxsZWdhbDogJ1xcXFxuJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbjogJygnICsgQ0xBU1NfS0VZV09SRFMua2V5d29yZC5qb2luKCd8JykgKyAnKVxcXFxiJyxcbiAgICAgICAgZW5kOiAvKFxce3wkKS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBDTEFTU19LRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcLicgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RpdmVjO1xuIiwiLypcbkxhbmd1YWdlOiBQZXJsXG5BdXRob3I6IFBldGVyIExlb25vdiA8Z29qcGVnQHlhbmRleC5ydT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnBlcmwub3JnXG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gcGVybChobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgS0VZV09SRFMgPSBbXG4gICAgJ2FicycsXG4gICAgJ2FjY2VwdCcsXG4gICAgJ2FsYXJtJyxcbiAgICAnYW5kJyxcbiAgICAnYXRhbjInLFxuICAgICdiaW5kJyxcbiAgICAnYmlubW9kZScsXG4gICAgJ2JsZXNzJyxcbiAgICAnYnJlYWsnLFxuICAgICdjYWxsZXInLFxuICAgICdjaGRpcicsXG4gICAgJ2NobW9kJyxcbiAgICAnY2hvbXAnLFxuICAgICdjaG9wJyxcbiAgICAnY2hvd24nLFxuICAgICdjaHInLFxuICAgICdjaHJvb3QnLFxuICAgICdjbG9zZScsXG4gICAgJ2Nsb3NlZGlyJyxcbiAgICAnY29ubmVjdCcsXG4gICAgJ2NvbnRpbnVlJyxcbiAgICAnY29zJyxcbiAgICAnY3J5cHQnLFxuICAgICdkYm1jbG9zZScsXG4gICAgJ2RibW9wZW4nLFxuICAgICdkZWZpbmVkJyxcbiAgICAnZGVsZXRlJyxcbiAgICAnZGllJyxcbiAgICAnZG8nLFxuICAgICdkdW1wJyxcbiAgICAnZWFjaCcsXG4gICAgJ2Vsc2UnLFxuICAgICdlbHNpZicsXG4gICAgJ2VuZGdyZW50JyxcbiAgICAnZW5kaG9zdGVudCcsXG4gICAgJ2VuZG5ldGVudCcsXG4gICAgJ2VuZHByb3RvZW50JyxcbiAgICAnZW5kcHdlbnQnLFxuICAgICdlbmRzZXJ2ZW50JyxcbiAgICAnZW9mJyxcbiAgICAnZXZhbCcsXG4gICAgJ2V4ZWMnLFxuICAgICdleGlzdHMnLFxuICAgICdleGl0JyxcbiAgICAnZXhwJyxcbiAgICAnZmNudGwnLFxuICAgICdmaWxlbm8nLFxuICAgICdmbG9jaycsXG4gICAgJ2ZvcicsXG4gICAgJ2ZvcmVhY2gnLFxuICAgICdmb3JrJyxcbiAgICAnZm9ybWF0JyxcbiAgICAnZm9ybWxpbmUnLFxuICAgICdnZXRjJyxcbiAgICAnZ2V0Z3JlbnQnLFxuICAgICdnZXRncmdpZCcsXG4gICAgJ2dldGdybmFtJyxcbiAgICAnZ2V0aG9zdGJ5YWRkcicsXG4gICAgJ2dldGhvc3RieW5hbWUnLFxuICAgICdnZXRob3N0ZW50JyxcbiAgICAnZ2V0bG9naW4nLFxuICAgICdnZXRuZXRieWFkZHInLFxuICAgICdnZXRuZXRieW5hbWUnLFxuICAgICdnZXRuZXRlbnQnLFxuICAgICdnZXRwZWVybmFtZScsXG4gICAgJ2dldHBncnAnLFxuICAgICdnZXRwcmlvcml0eScsXG4gICAgJ2dldHByb3RvYnluYW1lJyxcbiAgICAnZ2V0cHJvdG9ieW51bWJlcicsXG4gICAgJ2dldHByb3RvZW50JyxcbiAgICAnZ2V0cHdlbnQnLFxuICAgICdnZXRwd25hbScsXG4gICAgJ2dldHB3dWlkJyxcbiAgICAnZ2V0c2VydmJ5bmFtZScsXG4gICAgJ2dldHNlcnZieXBvcnQnLFxuICAgICdnZXRzZXJ2ZW50JyxcbiAgICAnZ2V0c29ja25hbWUnLFxuICAgICdnZXRzb2Nrb3B0JyxcbiAgICAnZ2l2ZW4nLFxuICAgICdnbG9iJyxcbiAgICAnZ210aW1lJyxcbiAgICAnZ290bycsXG4gICAgJ2dyZXAnLFxuICAgICdndCcsXG4gICAgJ2hleCcsXG4gICAgJ2lmJyxcbiAgICAnaW5kZXgnLFxuICAgICdpbnQnLFxuICAgICdpb2N0bCcsXG4gICAgJ2pvaW4nLFxuICAgICdrZXlzJyxcbiAgICAna2lsbCcsXG4gICAgJ2xhc3QnLFxuICAgICdsYycsXG4gICAgJ2xjZmlyc3QnLFxuICAgICdsZW5ndGgnLFxuICAgICdsaW5rJyxcbiAgICAnbGlzdGVuJyxcbiAgICAnbG9jYWwnLFxuICAgICdsb2NhbHRpbWUnLFxuICAgICdsb2cnLFxuICAgICdsc3RhdCcsXG4gICAgJ2x0JyxcbiAgICAnbWEnLFxuICAgICdtYXAnLFxuICAgICdta2RpcicsXG4gICAgJ21zZ2N0bCcsXG4gICAgJ21zZ2dldCcsXG4gICAgJ21zZ3JjdicsXG4gICAgJ21zZ3NuZCcsXG4gICAgJ215JyxcbiAgICAnbmUnLFxuICAgICduZXh0JyxcbiAgICAnbm8nLFxuICAgICdub3QnLFxuICAgICdvY3QnLFxuICAgICdvcGVuJyxcbiAgICAnb3BlbmRpcicsXG4gICAgJ29yJyxcbiAgICAnb3JkJyxcbiAgICAnb3VyJyxcbiAgICAncGFjaycsXG4gICAgJ3BhY2thZ2UnLFxuICAgICdwaXBlJyxcbiAgICAncG9wJyxcbiAgICAncG9zJyxcbiAgICAncHJpbnQnLFxuICAgICdwcmludGYnLFxuICAgICdwcm90b3R5cGUnLFxuICAgICdwdXNoJyxcbiAgICAncXwwJyxcbiAgICAncXEnLFxuICAgICdxdW90ZW1ldGEnLFxuICAgICdxdycsXG4gICAgJ3F4JyxcbiAgICAncmFuZCcsXG4gICAgJ3JlYWQnLFxuICAgICdyZWFkZGlyJyxcbiAgICAncmVhZGxpbmUnLFxuICAgICdyZWFkbGluaycsXG4gICAgJ3JlYWRwaXBlJyxcbiAgICAncmVjdicsXG4gICAgJ3JlZG8nLFxuICAgICdyZWYnLFxuICAgICdyZW5hbWUnLFxuICAgICdyZXF1aXJlJyxcbiAgICAncmVzZXQnLFxuICAgICdyZXR1cm4nLFxuICAgICdyZXZlcnNlJyxcbiAgICAncmV3aW5kZGlyJyxcbiAgICAncmluZGV4JyxcbiAgICAncm1kaXInLFxuICAgICdzYXknLFxuICAgICdzY2FsYXInLFxuICAgICdzZWVrJyxcbiAgICAnc2Vla2RpcicsXG4gICAgJ3NlbGVjdCcsXG4gICAgJ3NlbWN0bCcsXG4gICAgJ3NlbWdldCcsXG4gICAgJ3NlbW9wJyxcbiAgICAnc2VuZCcsXG4gICAgJ3NldGdyZW50JyxcbiAgICAnc2V0aG9zdGVudCcsXG4gICAgJ3NldG5ldGVudCcsXG4gICAgJ3NldHBncnAnLFxuICAgICdzZXRwcmlvcml0eScsXG4gICAgJ3NldHByb3RvZW50JyxcbiAgICAnc2V0cHdlbnQnLFxuICAgICdzZXRzZXJ2ZW50JyxcbiAgICAnc2V0c29ja29wdCcsXG4gICAgJ3NoaWZ0JyxcbiAgICAnc2htY3RsJyxcbiAgICAnc2htZ2V0JyxcbiAgICAnc2htcmVhZCcsXG4gICAgJ3NobXdyaXRlJyxcbiAgICAnc2h1dGRvd24nLFxuICAgICdzaW4nLFxuICAgICdzbGVlcCcsXG4gICAgJ3NvY2tldCcsXG4gICAgJ3NvY2tldHBhaXInLFxuICAgICdzb3J0JyxcbiAgICAnc3BsaWNlJyxcbiAgICAnc3BsaXQnLFxuICAgICdzcHJpbnRmJyxcbiAgICAnc3FydCcsXG4gICAgJ3NyYW5kJyxcbiAgICAnc3RhdCcsXG4gICAgJ3N0YXRlJyxcbiAgICAnc3R1ZHknLFxuICAgICdzdWInLFxuICAgICdzdWJzdHInLFxuICAgICdzeW1saW5rJyxcbiAgICAnc3lzY2FsbCcsXG4gICAgJ3N5c29wZW4nLFxuICAgICdzeXNyZWFkJyxcbiAgICAnc3lzc2VlaycsXG4gICAgJ3N5c3RlbScsXG4gICAgJ3N5c3dyaXRlJyxcbiAgICAndGVsbCcsXG4gICAgJ3RlbGxkaXInLFxuICAgICd0aWUnLFxuICAgICd0aWVkJyxcbiAgICAndGltZScsXG4gICAgJ3RpbWVzJyxcbiAgICAndHInLFxuICAgICd0cnVuY2F0ZScsXG4gICAgJ3VjJyxcbiAgICAndWNmaXJzdCcsXG4gICAgJ3VtYXNrJyxcbiAgICAndW5kZWYnLFxuICAgICd1bmxlc3MnLFxuICAgICd1bmxpbmsnLFxuICAgICd1bnBhY2snLFxuICAgICd1bnNoaWZ0JyxcbiAgICAndW50aWUnLFxuICAgICd1bnRpbCcsXG4gICAgJ3VzZScsXG4gICAgJ3V0aW1lJyxcbiAgICAndmFsdWVzJyxcbiAgICAndmVjJyxcbiAgICAnd2FpdCcsXG4gICAgJ3dhaXRwaWQnLFxuICAgICd3YW50YXJyYXknLFxuICAgICd3YXJuJyxcbiAgICAnd2hlbicsXG4gICAgJ3doaWxlJyxcbiAgICAnd3JpdGUnLFxuICAgICd4fDAnLFxuICAgICd4b3InLFxuICAgICd5fDAnXG4gIF07XG5cbiAgLy8gaHR0cHM6Ly9wZXJsZG9jLnBlcmwub3JnL3BlcmxyZSNNb2RpZmllcnNcbiAgY29uc3QgUkVHRVhfTU9ESUZJRVJTID0gL1tkdWFseG1zaXBuZ3JdezAsMTJ9LzsgLy8gYWEgYW5kIHh4IGFyZSB2YWxpZCwgbWFraW5nIG1heCBsZW5ndGggMTJcbiAgY29uc3QgUEVSTF9LRVlXT1JEUyA9IHtcbiAgICAkcGF0dGVybjogL1tcXHcuXSsvLFxuICAgIGtleXdvcmQ6IEtFWVdPUkRTLmpvaW4oXCIgXCIpXG4gIH07XG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ1skQF1cXFxceycsXG4gICAgZW5kOiAnXFxcXH0nLFxuICAgIGtleXdvcmRzOiBQRVJMX0tFWVdPUkRTXG4gIH07XG4gIGNvbnN0IE1FVEhPRCA9IHtcbiAgICBiZWdpbjogLy0+XFx7LyxcbiAgICBlbmQ6IC9cXH0vXG4gICAgLy8gY29udGFpbnMgZGVmaW5lZCBsYXRlclxuICB9O1xuICBjb25zdCBWQVIgPSB7IHZhcmlhbnRzOiBbXG4gICAgeyBiZWdpbjogL1xcJFxcZC8gfSxcbiAgICB7IGJlZ2luOiByZWdleC5jb25jYXQoXG4gICAgICAvWyQlQF0oXFxeXFx3XFxifCNcXHcrKDo6XFx3KykqfFxce1xcdytcXH18XFx3Kyg6OlxcdyopKikvLFxuICAgICAgLy8gbmVnYXRpdmUgbG9vay1haGVhZCB0cmllcyB0byBhdm9pZCBtYXRjaGluZyBwYXR0ZXJucyB0aGF0IGFyZSBub3RcbiAgICAgIC8vIFBlcmwgYXQgYWxsIGxpa2UgJGlkZW50JCwgQGlkZW50QCwgZXRjLlxuICAgICAgYCg/IVtBLVphLXpdKSg/IVtAJCVdKWBcbiAgICApIH0sXG4gICAge1xuICAgICAgYmVnaW46IC9bJCVAXVteXFxzXFx3e10vLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfVxuICBdIH07XG4gIGNvbnN0IFNUUklOR19DT05UQUlOUyA9IFtcbiAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgU1VCU1QsXG4gICAgVkFSXG4gIF07XG4gIGNvbnN0IFJFR0VYX0RFTElNUyA9IFtcbiAgICAvIS8sXG4gICAgL1xcLy8sXG4gICAgL1xcfC8sXG4gICAgL1xcPy8sXG4gICAgLycvLFxuICAgIC9cIi8sIC8vIHZhbGlkIGJ1dCBpbmZyZXF1ZW50IGFuZCB3ZWlyZFxuICAgIC8jLyAvLyB2YWxpZCBidXQgaW5mcmVxdWVudCBhbmQgd2VpcmRcbiAgXTtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gb3BlblxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IGNsb3NlXG4gICAqL1xuICBjb25zdCBQQUlSRURfRE9VQkxFX1JFID0gKHByZWZpeCwgb3BlbiwgY2xvc2UgPSAnXFxcXDEnKSA9PiB7XG4gICAgY29uc3QgbWlkZGxlID0gKGNsb3NlID09PSAnXFxcXDEnKVxuICAgICAgPyBjbG9zZVxuICAgICAgOiByZWdleC5jb25jYXQoY2xvc2UsIG9wZW4pO1xuICAgIHJldHVybiByZWdleC5jb25jYXQoXG4gICAgICByZWdleC5jb25jYXQoXCIoPzpcIiwgcHJlZml4LCBcIilcIiksXG4gICAgICBvcGVuLFxuICAgICAgLyg/OlxcXFwufFteXFxcXFxcL10pKj8vLFxuICAgICAgbWlkZGxlLFxuICAgICAgLyg/OlxcXFwufFteXFxcXFxcL10pKj8vLFxuICAgICAgY2xvc2UsXG4gICAgICBSRUdFWF9NT0RJRklFUlNcbiAgICApO1xuICB9O1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSBwcmVmaXhcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSBvcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gY2xvc2VcbiAgICovXG4gIGNvbnN0IFBBSVJFRF9SRSA9IChwcmVmaXgsIG9wZW4sIGNsb3NlKSA9PiB7XG4gICAgcmV0dXJuIHJlZ2V4LmNvbmNhdChcbiAgICAgIHJlZ2V4LmNvbmNhdChcIig/OlwiLCBwcmVmaXgsIFwiKVwiKSxcbiAgICAgIG9wZW4sXG4gICAgICAvKD86XFxcXC58W15cXFxcXFwvXSkqPy8sXG4gICAgICBjbG9zZSxcbiAgICAgIFJFR0VYX01PRElGSUVSU1xuICAgICk7XG4gIH07XG4gIGNvbnN0IFBFUkxfREVGQVVMVF9DT05UQUlOUyA9IFtcbiAgICBWQVIsXG4gICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNPTU1FTlQoXG4gICAgICAvXj1cXHcvLFxuICAgICAgLz1jdXQvLFxuICAgICAgeyBlbmRzV2l0aFBhcmVudDogdHJ1ZSB9XG4gICAgKSxcbiAgICBNRVRIT0QsXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGNvbnRhaW5zOiBTVFJJTkdfQ09OVEFJTlMsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFwoJyxcbiAgICAgICAgICBlbmQ6ICdcXFxcKScsXG4gICAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ3FbcXd4cl0/XFxcXHMqXFxcXFsnLFxuICAgICAgICAgIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAncVtxd3hyXT9cXFxccypcXFxceycsXG4gICAgICAgICAgZW5kOiAnXFxcXH0nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFx8JyxcbiAgICAgICAgICBlbmQ6ICdcXFxcfCcsXG4gICAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ3FbcXd4cl0/XFxcXHMqPCcsXG4gICAgICAgICAgZW5kOiAnPicsXG4gICAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ3F3XFxcXHMrcScsXG4gICAgICAgICAgZW5kOiAncScsXG4gICAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgICAgZW5kOiAnXCInXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ2AnLFxuICAgICAgICAgIGVuZDogJ2AnLFxuICAgICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogL1xce1xcdytcXH0vLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICctP1xcXFx3K1xcXFxzKj0+JyxcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAnKFxcXFxiMFswLTdfXSspfChcXFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcXFxiWzEtOV1bMC05X10qKFxcXFwuWzAtOV9dKyk/KXxbMF9dXFxcXGInLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7IC8vIHJlZ2V4cCBjb250YWluZXJcbiAgICAgIGJlZ2luOiAnKFxcXFwvXFxcXC98JyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKHNwbGl0fHJldHVybnxwcmludHxyZXZlcnNlfGdyZXApXFxcXGIpXFxcXHMqJyxcbiAgICAgIGtleXdvcmRzOiAnc3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCcsXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAncmVnZXhwJyxcbiAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgLy8gYWxsb3cgbWF0Y2hpbmcgY29tbW9uIGRlbGltaXRlcnNcbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9ET1VCTEVfUkUoXCJzfHRyfHlcIiwgcmVnZXguZWl0aGVyKC4uLlJFR0VYX0RFTElNUywgeyBjYXB0dXJlOiB0cnVlIH0pKSB9LFxuICAgICAgICAgICAgLy8gYW5kIHRoZW4gcGFpcmVkIGRlbG1pc1xuICAgICAgICAgICAgeyBiZWdpbjogUEFJUkVEX0RPVUJMRV9SRShcInN8dHJ8eVwiLCBcIlxcXFwoXCIsIFwiXFxcXClcIikgfSxcbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9ET1VCTEVfUkUoXCJzfHRyfHlcIiwgXCJcXFxcW1wiLCBcIlxcXFxdXCIpIH0sXG4gICAgICAgICAgICB7IGJlZ2luOiBQQUlSRURfRE9VQkxFX1JFKFwic3x0cnx5XCIsIFwiXFxcXHtcIiwgXCJcXFxcfVwiKSB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICByZWxldmFuY2U6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gY291bGQgYmUgYSBjb21tZW50IGluIG1hbnkgbGFuZ3VhZ2VzIHNvIGRvIG5vdCBjb3VudFxuICAgICAgICAgICAgICAvLyBhcyByZWxldmFudFxuICAgICAgICAgICAgICBiZWdpbjogLyhtfHFyKVxcL1xcLy8sXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIHByZWZpeCBpcyBvcHRpb25hbCB3aXRoIC9yZWdleC9cbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9SRShcIig/Om18cXIpP1wiLCAvXFwvLywgL1xcLy8pIH0sXG4gICAgICAgICAgICAvLyBhbGxvdyBtYXRjaGluZyBjb21tb24gZGVsaW1pdGVyc1xuICAgICAgICAgICAgeyBiZWdpbjogUEFJUkVEX1JFKFwibXxxclwiLCByZWdleC5laXRoZXIoLi4uUkVHRVhfREVMSU1TLCB7IGNhcHR1cmU6IHRydWUgfSksIC9cXDEvKSB9LFxuICAgICAgICAgICAgLy8gYWxsb3cgY29tbW9uIHBhaXJlZCBkZWxtaW5zXG4gICAgICAgICAgICB7IGJlZ2luOiBQQUlSRURfUkUoXCJtfHFyXCIsIC9cXCgvLCAvXFwpLykgfSxcbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9SRShcIm18cXJcIiwgL1xcWy8sIC9cXF0vKSB9LFxuICAgICAgICAgICAgeyBiZWdpbjogUEFJUkVEX1JFKFwibXxxclwiLCAvXFx7LywgL1xcfS8pIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdzdWInLFxuICAgICAgZW5kOiAnKFxcXFxzKlxcXFwoLio/XFxcXCkpP1s7e10nLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIHJlbGV2YW5jZTogNSxcbiAgICAgIGNvbnRhaW5zOiBbIGhsanMuVElUTEVfTU9ERSBdXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogJy1cXFxcd1xcXFxiJyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IFwiXl9fREFUQV9fJFwiLFxuICAgICAgZW5kOiBcIl5fX0VORF9fJFwiLFxuICAgICAgc3ViTGFuZ3VhZ2U6ICdtb2pvbGljaW91cycsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IFwiXkBALipcIixcbiAgICAgICAgICBlbmQ6IFwiJFwiLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgXTtcbiAgU1VCU1QuY29udGFpbnMgPSBQRVJMX0RFRkFVTFRfQ09OVEFJTlM7XG4gIE1FVEhPRC5jb250YWlucyA9IFBFUkxfREVGQVVMVF9DT05UQUlOUztcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdQZXJsJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAncGwnLFxuICAgICAgJ3BtJ1xuICAgIF0sXG4gICAga2V5d29yZHM6IFBFUkxfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFBFUkxfREVGQVVMVF9DT05UQUlOU1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBlcmw7XG4iLCIvKlxuTGFuZ3VhZ2U6IFBIUCBUZW1wbGF0ZVxuUmVxdWlyZXM6IHhtbC5qcywgcGhwLmpzXG5BdXRob3I6IEpvc2ggR29lYmVsIDxoZWxsb0Bqb3NoZ29lYmVsLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnBocC5uZXRcbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbmZ1bmN0aW9uIHBocFRlbXBsYXRlKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcIlBIUCB0ZW1wbGF0ZVwiLFxuICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLzxcXD8ocGhwfD0pPy8sXG4gICAgICAgIGVuZDogL1xcPz4vLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3BocCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgcGhwIGNsb3NpbmcgdGFnID8+IHRvIGNsb3NlIHRoZSBQSFAgYmxvY2sgd2hlblxuICAgICAgICAgIC8vIGluc2lkZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBibG9ja3M6XG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICcvXFxcXConLFxuICAgICAgICAgICAgZW5kOiAnXFxcXCovJyxcbiAgICAgICAgICAgIHNraXA6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnYlwiJyxcbiAgICAgICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgICAgIHNraXA6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnYlxcJycsXG4gICAgICAgICAgICBlbmQ6ICdcXCcnLFxuICAgICAgICAgICAgc2tpcDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge1xuICAgICAgICAgICAgaWxsZWdhbDogbnVsbCxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBudWxsLFxuICAgICAgICAgICAgc2tpcDogdHJ1ZVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7XG4gICAgICAgICAgICBpbGxlZ2FsOiBudWxsLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBudWxsLFxuICAgICAgICAgICAgY29udGFpbnM6IG51bGwsXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwaHBUZW1wbGF0ZTtcbiIsIi8qXG5MYW5ndWFnZTogUEhQXG5BdXRob3I6IFZpY3RvciBLYXJhbXppbiA8VmljdG9yLkthcmFtemluQGVudGVycmEtaW5jLmNvbT5cbkNvbnRyaWJ1dG9yczogRXZnZW55IFN0ZXBhbmlzY2hldiA8aW1ib2xrQGdtYWlsLmNvbT4sIEl2YW4gU2FnYWxhZXYgPG1hbmlhY0Bzb2Z0d2FyZW1hbmlhY3Mub3JnPlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cucGhwLm5ldFxuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hMSlNBcGl9IGhsanNcbiAqIEByZXR1cm5zIHtMYW5ndWFnZURldGFpbH1cbiAqICovXG5mdW5jdGlvbiBwaHAoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIC8vIG5lZ2F0aXZlIGxvb2stYWhlYWQgdHJpZXMgdG8gYXZvaWQgbWF0Y2hpbmcgcGF0dGVybnMgdGhhdCBhcmUgbm90XG4gIC8vIFBlcmwgYXQgYWxsIGxpa2UgJGlkZW50JCwgQGlkZW50QCwgZXRjLlxuICBjb25zdCBOT1RfUEVSTF9FVEMgPSAvKD8hW0EtWmEtejAtOV0pKD8hWyRdKS87XG4gIGNvbnN0IElERU5UX1JFID0gcmVnZXguY29uY2F0KFxuICAgIC9bYS16QS1aX1xceDdmLVxceGZmXVthLXpBLVowLTlfXFx4N2YtXFx4ZmZdKi8sXG4gICAgTk9UX1BFUkxfRVRDKTtcbiAgLy8gV2lsbCBub3QgZGV0ZWN0IGNhbWVsQ2FzZSBjbGFzc2VzXG4gIGNvbnN0IFBBU0NBTF9DQVNFX0NMQVNTX05BTUVfUkUgPSByZWdleC5jb25jYXQoXG4gICAgLyhcXFxcP1tBLVpdW2EtejAtOV9cXHg3Zi1cXHhmZl0rfFxcXFw/W0EtWl0rKD89W0EtWl1bYS16MC05X1xceDdmLVxceGZmXSkpezEsfS8sXG4gICAgTk9UX1BFUkxfRVRDKTtcbiAgY29uc3QgVkFSSUFCTEUgPSB7XG4gICAgc2NvcGU6ICd2YXJpYWJsZScsXG4gICAgbWF0Y2g6ICdcXFxcJCsnICsgSURFTlRfUkUsXG4gIH07XG4gIGNvbnN0IFBSRVBST0NFU1NPUiA9IHtcbiAgICBzY29wZTogJ21ldGEnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAvPFxcP3BocC8sIHJlbGV2YW5jZTogMTAgfSwgLy8gYm9vc3QgZm9yIG9idmlvdXMgUEhQXG4gICAgICB7IGJlZ2luOiAvPFxcPz0vIH0sXG4gICAgICAvLyBsZXNzIHJlbGV2YW50IHBlciBQU1ItMSB3aGljaCBzYXlzIG5vdCB0byB1c2Ugc2hvcnQtdGFnc1xuICAgICAgeyBiZWdpbjogLzxcXD8vLCByZWxldmFuY2U6IDAuMSB9LFxuICAgICAgeyBiZWdpbjogL1xcPz4vIH0gLy8gZW5kIHBocCB0YWdcbiAgICBdXG4gIH07XG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIHNjb3BlOiAnc3Vic3QnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAvXFwkXFx3Ky8gfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXHtcXCQvLFxuICAgICAgICBlbmQ6IC9cXH0vXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBTSU5HTEVfUVVPVEVEID0gaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwgeyBpbGxlZ2FsOiBudWxsLCB9KTtcbiAgY29uc3QgRE9VQkxFX1FVT1RFRCA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7XG4gICAgaWxsZWdhbDogbnVsbCxcbiAgICBjb250YWluczogaGxqcy5RVU9URV9TVFJJTkdfTU9ERS5jb250YWlucy5jb25jYXQoU1VCU1QpLFxuICB9KTtcbiAgY29uc3QgSEVSRURPQyA9IGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgIGJlZ2luOiAvPDw8WyBcXHRdKihcXHcrKVxcbi8sXG4gICAgZW5kOiAvWyBcXHRdKihcXHcrKVxcYi8sXG4gICAgY29udGFpbnM6IGhsanMuUVVPVEVfU1RSSU5HX01PREUuY29udGFpbnMuY29uY2F0KFNVQlNUKSxcbiAgfSk7XG4gIC8vIGxpc3Qgb2YgdmFsaWQgd2hpdGVzcGFjZXMgYmVjYXVzZSBub24tYnJlYWtpbmcgc3BhY2UgbWlnaHQgYmUgcGFydCBvZiBhIElERU5UX1JFXG4gIGNvbnN0IFdISVRFU1BBQ0UgPSAnWyBcXHRcXG5dJztcbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIHNjb3BlOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgRE9VQkxFX1FVT1RFRCxcbiAgICAgIFNJTkdMRV9RVU9URUQsXG4gICAgICBIRVJFRE9DXG4gICAgXVxuICB9O1xuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgc2NvcGU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiBgXFxcXGIwW2JCXVswMV0rKD86X1swMV0rKSpcXFxcYmAgfSwgLy8gQmluYXJ5IHcvIHVuZGVyc2NvcmUgc3VwcG9ydFxuICAgICAgeyBiZWdpbjogYFxcXFxiMFtvT11bMC03XSsoPzpfWzAtN10rKSpcXFxcYmAgfSwgLy8gT2N0YWxzIHcvIHVuZGVyc2NvcmUgc3VwcG9ydFxuICAgICAgeyBiZWdpbjogYFxcXFxiMFt4WF1bXFxcXGRhLWZBLUZdKyg/Ol9bXFxcXGRhLWZBLUZdKykqXFxcXGJgIH0sIC8vIEhleCB3LyB1bmRlcnNjb3JlIHN1cHBvcnRcbiAgICAgIC8vIERlY2ltYWxzIHcvIHVuZGVyc2NvcmUgc3VwcG9ydCwgd2l0aCBvcHRpb25hbCBmcmFnbWVudHMgYW5kIHNjaWVudGlmaWMgZXhwb25lbnQgKGUpIHN1ZmZpeC5cbiAgICAgIHsgYmVnaW46IGAoPzpcXFxcYlxcXFxkKyg/Ol9cXFxcZCspKihcXFxcLig/OlxcXFxkKyg/Ol9cXFxcZCspKikpP3xcXFxcQlxcXFwuXFxcXGQrKSg/OltlRV1bKy1dP1xcXFxkKyk/YCB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgTElURVJBTFMgPSBbXG4gICAgXCJmYWxzZVwiLFxuICAgIFwibnVsbFwiLFxuICAgIFwidHJ1ZVwiXG4gIF07XG4gIGNvbnN0IEtXUyA9IFtcbiAgICAvLyBNYWdpYyBjb25zdGFudHM6XG4gICAgLy8gPGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLmNvbnN0YW50cy5wcmVkZWZpbmVkLnBocD5cbiAgICBcIl9fQ0xBU1NfX1wiLFxuICAgIFwiX19ESVJfX1wiLFxuICAgIFwiX19GSUxFX19cIixcbiAgICBcIl9fRlVOQ1RJT05fX1wiLFxuICAgIFwiX19DT01QSUxFUl9IQUxUX09GRlNFVF9fXCIsXG4gICAgXCJfX0xJTkVfX1wiLFxuICAgIFwiX19NRVRIT0RfX1wiLFxuICAgIFwiX19OQU1FU1BBQ0VfX1wiLFxuICAgIFwiX19UUkFJVF9fXCIsXG4gICAgLy8gRnVuY3Rpb24gdGhhdCBsb29rIGxpa2UgbGFuZ3VhZ2UgY29uc3RydWN0IG9yIGxhbmd1YWdlIGNvbnN0cnVjdCB0aGF0IGxvb2sgbGlrZSBmdW5jdGlvbjpcbiAgICAvLyBMaXN0IG9mIGtleXdvcmRzIHRoYXQgbWF5IG5vdCByZXF1aXJlIHBhcmVudGhlc2lzXG4gICAgXCJkaWVcIixcbiAgICBcImVjaG9cIixcbiAgICBcImV4aXRcIixcbiAgICBcImluY2x1ZGVcIixcbiAgICBcImluY2x1ZGVfb25jZVwiLFxuICAgIFwicHJpbnRcIixcbiAgICBcInJlcXVpcmVcIixcbiAgICBcInJlcXVpcmVfb25jZVwiLFxuICAgIC8vIFRoZXNlIGFyZSBub3QgbGFuZ3VhZ2UgY29uc3RydWN0IChmdW5jdGlvbikgYnV0IG9wZXJhdGUgb24gdGhlIGN1cnJlbnRseS1leGVjdXRpbmcgZnVuY3Rpb24gYW5kIGNhbiBhY2Nlc3MgdGhlIGN1cnJlbnQgc3ltYm9sIHRhYmxlXG4gICAgLy8gJ2NvbXBhY3QgZXh0cmFjdCBmdW5jX2dldF9hcmcgZnVuY19nZXRfYXJncyBmdW5jX251bV9hcmdzIGdldF9jYWxsZWRfY2xhc3MgZ2V0X3BhcmVudF9jbGFzcyAnICtcbiAgICAvLyBPdGhlciBrZXl3b3JkczpcbiAgICAvLyA8aHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQucGhwPlxuICAgIC8vIDxodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy50eXBlLWp1Z2dsaW5nLnBocD5cbiAgICBcImFycmF5XCIsXG4gICAgXCJhYnN0cmFjdFwiLFxuICAgIFwiYW5kXCIsXG4gICAgXCJhc1wiLFxuICAgIFwiYmluYXJ5XCIsXG4gICAgXCJib29sXCIsXG4gICAgXCJib29sZWFuXCIsXG4gICAgXCJicmVha1wiLFxuICAgIFwiY2FsbGFibGVcIixcbiAgICBcImNhc2VcIixcbiAgICBcImNhdGNoXCIsXG4gICAgXCJjbGFzc1wiLFxuICAgIFwiY2xvbmVcIixcbiAgICBcImNvbnN0XCIsXG4gICAgXCJjb250aW51ZVwiLFxuICAgIFwiZGVjbGFyZVwiLFxuICAgIFwiZGVmYXVsdFwiLFxuICAgIFwiZG9cIixcbiAgICBcImRvdWJsZVwiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwiZWxzZWlmXCIsXG4gICAgXCJlbXB0eVwiLFxuICAgIFwiZW5kZGVjbGFyZVwiLFxuICAgIFwiZW5kZm9yXCIsXG4gICAgXCJlbmRmb3JlYWNoXCIsXG4gICAgXCJlbmRpZlwiLFxuICAgIFwiZW5kc3dpdGNoXCIsXG4gICAgXCJlbmR3aGlsZVwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZXZhbFwiLFxuICAgIFwiZXh0ZW5kc1wiLFxuICAgIFwiZmluYWxcIixcbiAgICBcImZpbmFsbHlcIixcbiAgICBcImZsb2F0XCIsXG4gICAgXCJmb3JcIixcbiAgICBcImZvcmVhY2hcIixcbiAgICBcImZyb21cIixcbiAgICBcImdsb2JhbFwiLFxuICAgIFwiZ290b1wiLFxuICAgIFwiaWZcIixcbiAgICBcImltcGxlbWVudHNcIixcbiAgICBcImluc3RhbmNlb2ZcIixcbiAgICBcImluc3RlYWRvZlwiLFxuICAgIFwiaW50XCIsXG4gICAgXCJpbnRlZ2VyXCIsXG4gICAgXCJpbnRlcmZhY2VcIixcbiAgICBcImlzc2V0XCIsXG4gICAgXCJpdGVyYWJsZVwiLFxuICAgIFwibGlzdFwiLFxuICAgIFwibWF0Y2h8MFwiLFxuICAgIFwibWl4ZWRcIixcbiAgICBcIm5ld1wiLFxuICAgIFwibmV2ZXJcIixcbiAgICBcIm9iamVjdFwiLFxuICAgIFwib3JcIixcbiAgICBcInByaXZhdGVcIixcbiAgICBcInByb3RlY3RlZFwiLFxuICAgIFwicHVibGljXCIsXG4gICAgXCJyZWFkb25seVwiLFxuICAgIFwicmVhbFwiLFxuICAgIFwicmV0dXJuXCIsXG4gICAgXCJzdHJpbmdcIixcbiAgICBcInN3aXRjaFwiLFxuICAgIFwidGhyb3dcIixcbiAgICBcInRyYWl0XCIsXG4gICAgXCJ0cnlcIixcbiAgICBcInVuc2V0XCIsXG4gICAgXCJ1c2VcIixcbiAgICBcInZhclwiLFxuICAgIFwidm9pZFwiLFxuICAgIFwid2hpbGVcIixcbiAgICBcInhvclwiLFxuICAgIFwieWllbGRcIlxuICBdO1xuXG4gIGNvbnN0IEJVSUxUX0lOUyA9IFtcbiAgICAvLyBTdGFuZGFyZCBQSFAgbGlicmFyeTpcbiAgICAvLyA8aHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vYm9vay5zcGwucGhwPlxuICAgIFwiRXJyb3J8MFwiLFxuICAgIFwiQXBwZW5kSXRlcmF0b3JcIixcbiAgICBcIkFyZ3VtZW50Q291bnRFcnJvclwiLFxuICAgIFwiQXJpdGhtZXRpY0Vycm9yXCIsXG4gICAgXCJBcnJheUl0ZXJhdG9yXCIsXG4gICAgXCJBcnJheU9iamVjdFwiLFxuICAgIFwiQXNzZXJ0aW9uRXJyb3JcIixcbiAgICBcIkJhZEZ1bmN0aW9uQ2FsbEV4Y2VwdGlvblwiLFxuICAgIFwiQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvblwiLFxuICAgIFwiQ2FjaGluZ0l0ZXJhdG9yXCIsXG4gICAgXCJDYWxsYmFja0ZpbHRlckl0ZXJhdG9yXCIsXG4gICAgXCJDb21waWxlRXJyb3JcIixcbiAgICBcIkNvdW50YWJsZVwiLFxuICAgIFwiRGlyZWN0b3J5SXRlcmF0b3JcIixcbiAgICBcIkRpdmlzaW9uQnlaZXJvRXJyb3JcIixcbiAgICBcIkRvbWFpbkV4Y2VwdGlvblwiLFxuICAgIFwiRW1wdHlJdGVyYXRvclwiLFxuICAgIFwiRXJyb3JFeGNlcHRpb25cIixcbiAgICBcIkV4Y2VwdGlvblwiLFxuICAgIFwiRmlsZXN5c3RlbUl0ZXJhdG9yXCIsXG4gICAgXCJGaWx0ZXJJdGVyYXRvclwiLFxuICAgIFwiR2xvYkl0ZXJhdG9yXCIsXG4gICAgXCJJbmZpbml0ZUl0ZXJhdG9yXCIsXG4gICAgXCJJbnZhbGlkQXJndW1lbnRFeGNlcHRpb25cIixcbiAgICBcIkl0ZXJhdG9ySXRlcmF0b3JcIixcbiAgICBcIkxlbmd0aEV4Y2VwdGlvblwiLFxuICAgIFwiTGltaXRJdGVyYXRvclwiLFxuICAgIFwiTG9naWNFeGNlcHRpb25cIixcbiAgICBcIk11bHRpcGxlSXRlcmF0b3JcIixcbiAgICBcIk5vUmV3aW5kSXRlcmF0b3JcIixcbiAgICBcIk91dE9mQm91bmRzRXhjZXB0aW9uXCIsXG4gICAgXCJPdXRPZlJhbmdlRXhjZXB0aW9uXCIsXG4gICAgXCJPdXRlckl0ZXJhdG9yXCIsXG4gICAgXCJPdmVyZmxvd0V4Y2VwdGlvblwiLFxuICAgIFwiUGFyZW50SXRlcmF0b3JcIixcbiAgICBcIlBhcnNlRXJyb3JcIixcbiAgICBcIlJhbmdlRXhjZXB0aW9uXCIsXG4gICAgXCJSZWN1cnNpdmVBcnJheUl0ZXJhdG9yXCIsXG4gICAgXCJSZWN1cnNpdmVDYWNoaW5nSXRlcmF0b3JcIixcbiAgICBcIlJlY3Vyc2l2ZUNhbGxiYWNrRmlsdGVySXRlcmF0b3JcIixcbiAgICBcIlJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yXCIsXG4gICAgXCJSZWN1cnNpdmVGaWx0ZXJJdGVyYXRvclwiLFxuICAgIFwiUmVjdXJzaXZlSXRlcmF0b3JcIixcbiAgICBcIlJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3JcIixcbiAgICBcIlJlY3Vyc2l2ZVJlZ2V4SXRlcmF0b3JcIixcbiAgICBcIlJlY3Vyc2l2ZVRyZWVJdGVyYXRvclwiLFxuICAgIFwiUmVnZXhJdGVyYXRvclwiLFxuICAgIFwiUnVudGltZUV4Y2VwdGlvblwiLFxuICAgIFwiU2Vla2FibGVJdGVyYXRvclwiLFxuICAgIFwiU3BsRG91Ymx5TGlua2VkTGlzdFwiLFxuICAgIFwiU3BsRmlsZUluZm9cIixcbiAgICBcIlNwbEZpbGVPYmplY3RcIixcbiAgICBcIlNwbEZpeGVkQXJyYXlcIixcbiAgICBcIlNwbEhlYXBcIixcbiAgICBcIlNwbE1heEhlYXBcIixcbiAgICBcIlNwbE1pbkhlYXBcIixcbiAgICBcIlNwbE9iamVjdFN0b3JhZ2VcIixcbiAgICBcIlNwbE9ic2VydmVyXCIsXG4gICAgXCJTcGxQcmlvcml0eVF1ZXVlXCIsXG4gICAgXCJTcGxRdWV1ZVwiLFxuICAgIFwiU3BsU3RhY2tcIixcbiAgICBcIlNwbFN1YmplY3RcIixcbiAgICBcIlNwbFRlbXBGaWxlT2JqZWN0XCIsXG4gICAgXCJUeXBlRXJyb3JcIixcbiAgICBcIlVuZGVyZmxvd0V4Y2VwdGlvblwiLFxuICAgIFwiVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uXCIsXG4gICAgXCJVbmhhbmRsZWRNYXRjaEVycm9yXCIsXG4gICAgLy8gUmVzZXJ2ZWQgaW50ZXJmYWNlczpcbiAgICAvLyA8aHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQuaW50ZXJmYWNlcy5waHA+XG4gICAgXCJBcnJheUFjY2Vzc1wiLFxuICAgIFwiQmFja2VkRW51bVwiLFxuICAgIFwiQ2xvc3VyZVwiLFxuICAgIFwiRmliZXJcIixcbiAgICBcIkdlbmVyYXRvclwiLFxuICAgIFwiSXRlcmF0b3JcIixcbiAgICBcIkl0ZXJhdG9yQWdncmVnYXRlXCIsXG4gICAgXCJTZXJpYWxpemFibGVcIixcbiAgICBcIlN0cmluZ2FibGVcIixcbiAgICBcIlRocm93YWJsZVwiLFxuICAgIFwiVHJhdmVyc2FibGVcIixcbiAgICBcIlVuaXRFbnVtXCIsXG4gICAgXCJXZWFrUmVmZXJlbmNlXCIsXG4gICAgXCJXZWFrTWFwXCIsXG4gICAgLy8gUmVzZXJ2ZWQgY2xhc3NlczpcbiAgICAvLyA8aHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQuY2xhc3Nlcy5waHA+XG4gICAgXCJEaXJlY3RvcnlcIixcbiAgICBcIl9fUEhQX0luY29tcGxldGVfQ2xhc3NcIixcbiAgICBcInBhcmVudFwiLFxuICAgIFwicGhwX3VzZXJfZmlsdGVyXCIsXG4gICAgXCJzZWxmXCIsXG4gICAgXCJzdGF0aWNcIixcbiAgICBcInN0ZENsYXNzXCJcbiAgXTtcblxuICAvKiogRHVhbC1jYXNlIGtleXdvcmRzXG4gICAqXG4gICAqIFtcInRoZW5cIixcIkZJTEVcIl0gPT5cbiAgICogICAgIFtcInRoZW5cIiwgXCJUSEVOXCIsIFwiRklMRVwiLCBcImZpbGVcIl1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gaXRlbXMgKi9cbiAgY29uc3QgZHVhbENhc2UgPSAoaXRlbXMpID0+IHtcbiAgICAvKiogQHR5cGUgc3RyaW5nW10gKi9cbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICBpZiAoaXRlbS50b0xvd2VyQ2FzZSgpID09PSBpdGVtKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0udG9VcHBlckNhc2UoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQucHVzaChpdGVtLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDogS1dTLFxuICAgIGxpdGVyYWw6IGR1YWxDYXNlKExJVEVSQUxTKSxcbiAgICBidWlsdF9pbjogQlVJTFRfSU5TLFxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpdGVtcyAqL1xuICBjb25zdCBub3JtYWxpemVLZXl3b3JkcyA9IChpdGVtcykgPT4ge1xuICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICByZXR1cm4gaXRlbS5yZXBsYWNlKC9cXHxcXGQrJC8sIFwiXCIpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IENPTlNUUlVDVE9SX0NBTEwgPSB7IHZhcmlhbnRzOiBbXG4gICAge1xuICAgICAgbWF0Y2g6IFtcbiAgICAgICAgL25ldy8sXG4gICAgICAgIHJlZ2V4LmNvbmNhdChXSElURVNQQUNFLCBcIitcIiksXG4gICAgICAgIC8vIHRvIHByZXZlbnQgYnVpbHQgaW5zIGZyb20gYmVpbmcgY29uZnVzZWQgYXMgdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGNhbGxcbiAgICAgICAgcmVnZXguY29uY2F0KFwiKD8hXCIsIG5vcm1hbGl6ZUtleXdvcmRzKEJVSUxUX0lOUykuam9pbihcIlxcXFxifFwiKSwgXCJcXFxcYilcIiksXG4gICAgICAgIFBBU0NBTF9DQVNFX0NMQVNTX05BTUVfUkUsXG4gICAgICBdLFxuICAgICAgc2NvcGU6IHtcbiAgICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAgIDQ6IFwidGl0bGUuY2xhc3NcIixcbiAgICAgIH0sXG4gICAgfVxuICBdIH07XG5cbiAgY29uc3QgQ09OU1RBTlRfUkVGRVJFTkNFID0gcmVnZXguY29uY2F0KElERU5UX1JFLCBcIlxcXFxiKD8hXFxcXCgpXCIpO1xuXG4gIGNvbnN0IExFRlRfQU5EX1JJR0hUX1NJREVfT0ZfRE9VQkxFX0NPTE9OID0geyB2YXJpYW50czogW1xuICAgIHtcbiAgICAgIG1hdGNoOiBbXG4gICAgICAgIHJlZ2V4LmNvbmNhdChcbiAgICAgICAgICAvOjovLFxuICAgICAgICAgIHJlZ2V4Lmxvb2thaGVhZCgvKD8hY2xhc3NcXGIpLylcbiAgICAgICAgKSxcbiAgICAgICAgQ09OU1RBTlRfUkVGRVJFTkNFLFxuICAgICAgXSxcbiAgICAgIHNjb3BlOiB7IDI6IFwidmFyaWFibGUuY29uc3RhbnRcIiwgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG1hdGNoOiBbXG4gICAgICAgIC86Oi8sXG4gICAgICAgIC9jbGFzcy8sXG4gICAgICBdLFxuICAgICAgc2NvcGU6IHsgMjogXCJ2YXJpYWJsZS5sYW5ndWFnZVwiLCB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbWF0Y2g6IFtcbiAgICAgICAgUEFTQ0FMX0NBU0VfQ0xBU1NfTkFNRV9SRSxcbiAgICAgICAgcmVnZXguY29uY2F0KFxuICAgICAgICAgIC86Oi8sXG4gICAgICAgICAgcmVnZXgubG9va2FoZWFkKC8oPyFjbGFzc1xcYikvKVxuICAgICAgICApLFxuICAgICAgICBDT05TVEFOVF9SRUZFUkVOQ0UsXG4gICAgICBdLFxuICAgICAgc2NvcGU6IHtcbiAgICAgICAgMTogXCJ0aXRsZS5jbGFzc1wiLFxuICAgICAgICAzOiBcInZhcmlhYmxlLmNvbnN0YW50XCIsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbWF0Y2g6IFtcbiAgICAgICAgUEFTQ0FMX0NBU0VfQ0xBU1NfTkFNRV9SRSxcbiAgICAgICAgcmVnZXguY29uY2F0KFxuICAgICAgICAgIFwiOjpcIixcbiAgICAgICAgICByZWdleC5sb29rYWhlYWQoLyg/IWNsYXNzXFxiKS8pXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICAgc2NvcGU6IHsgMTogXCJ0aXRsZS5jbGFzc1wiLCB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbWF0Y2g6IFtcbiAgICAgICAgUEFTQ0FMX0NBU0VfQ0xBU1NfTkFNRV9SRSxcbiAgICAgICAgLzo6LyxcbiAgICAgICAgL2NsYXNzLyxcbiAgICAgIF0sXG4gICAgICBzY29wZToge1xuICAgICAgICAxOiBcInRpdGxlLmNsYXNzXCIsXG4gICAgICAgIDM6IFwidmFyaWFibGUubGFuZ3VhZ2VcIixcbiAgICAgIH0sXG4gICAgfVxuICBdIH07XG5cbiAgY29uc3QgTkFNRURfQVJHVU1FTlQgPSB7XG4gICAgc2NvcGU6ICdhdHRyJyxcbiAgICBtYXRjaDogcmVnZXguY29uY2F0KElERU5UX1JFLCByZWdleC5sb29rYWhlYWQoJzonKSwgcmVnZXgubG9va2FoZWFkKC8oPyE6OikvKSksXG4gIH07XG4gIGNvbnN0IFBBUkFNU19NT0RFID0ge1xuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIE5BTUVEX0FSR1VNRU5ULFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBMRUZUX0FORF9SSUdIVF9TSURFX09GX0RPVUJMRV9DT0xPTixcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBTVFJJTkcsXG4gICAgICBOVU1CRVIsXG4gICAgICBDT05TVFJVQ1RPUl9DQUxMLFxuICAgIF0sXG4gIH07XG4gIGNvbnN0IEZVTkNUSU9OX0lOVk9LRSA9IHtcbiAgICByZWxldmFuY2U6IDAsXG4gICAgbWF0Y2g6IFtcbiAgICAgIC9cXGIvLFxuICAgICAgLy8gdG8gcHJldmVudCBrZXl3b3JkcyBmcm9tIGJlaW5nIGNvbmZ1c2VkIGFzIHRoZSBmdW5jdGlvbiB0aXRsZVxuICAgICAgcmVnZXguY29uY2F0KFwiKD8hZm5cXFxcYnxmdW5jdGlvblxcXFxifFwiLCBub3JtYWxpemVLZXl3b3JkcyhLV1MpLmpvaW4oXCJcXFxcYnxcIiksIFwifFwiLCBub3JtYWxpemVLZXl3b3JkcyhCVUlMVF9JTlMpLmpvaW4oXCJcXFxcYnxcIiksIFwiXFxcXGIpXCIpLFxuICAgICAgSURFTlRfUkUsXG4gICAgICByZWdleC5jb25jYXQoV0hJVEVTUEFDRSwgXCIqXCIpLFxuICAgICAgcmVnZXgubG9va2FoZWFkKC8oPz1cXCgpLylcbiAgICBdLFxuICAgIHNjb3BlOiB7IDM6IFwidGl0bGUuZnVuY3Rpb24uaW52b2tlXCIsIH0sXG4gICAgY29udGFpbnM6IFsgUEFSQU1TX01PREUgXVxuICB9O1xuICBQQVJBTVNfTU9ERS5jb250YWlucy5wdXNoKEZVTkNUSU9OX0lOVk9LRSk7XG5cbiAgY29uc3QgQVRUUklCVVRFX0NPTlRBSU5TID0gW1xuICAgIE5BTUVEX0FSR1VNRU5ULFxuICAgIExFRlRfQU5EX1JJR0hUX1NJREVfT0ZfRE9VQkxFX0NPTE9OLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgU1RSSU5HLFxuICAgIE5VTUJFUixcbiAgICBDT05TVFJVQ1RPUl9DQUxMLFxuICBdO1xuXG4gIGNvbnN0IEFUVFJJQlVURVMgPSB7XG4gICAgYmVnaW46IHJlZ2V4LmNvbmNhdCgvI1xcW1xccyovLCBQQVNDQUxfQ0FTRV9DTEFTU19OQU1FX1JFKSxcbiAgICBiZWdpblNjb3BlOiBcIm1ldGFcIixcbiAgICBlbmQ6IC9dLyxcbiAgICBlbmRTY29wZTogXCJtZXRhXCIsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgICAga2V5d29yZDogW1xuICAgICAgICAnbmV3JyxcbiAgICAgICAgJ2FycmF5JyxcbiAgICAgIF1cbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgICAgZW5kOiAvXS8sXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgICAgICAga2V5d29yZDogW1xuICAgICAgICAgICAgJ25ldycsXG4gICAgICAgICAgICAnYXJyYXknLFxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgLi4uQVRUUklCVVRFX0NPTlRBSU5TLFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLi4uQVRUUklCVVRFX0NPTlRBSU5TLFxuICAgICAge1xuICAgICAgICBzY29wZTogJ21ldGEnLFxuICAgICAgICBtYXRjaDogUEFTQ0FMX0NBU0VfQ0xBU1NfTkFNRV9SRVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IGZhbHNlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgQVRUUklCVVRFUyxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJy8vJywgJyQnKSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJy9cXFxcKicsXG4gICAgICAgICdcXFxcKi8nLFxuICAgICAgICB7IGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2NvcGU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgbWF0Y2g6ICdAW0EtWmEtel0rJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBtYXRjaDogL19faGFsdF9jb21waWxlclxcKFxcKTsvLFxuICAgICAgICBrZXl3b3JkczogJ19faGFsdF9jb21waWxlcicsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIHNjb3BlOiBcImNvbW1lbnRcIixcbiAgICAgICAgICBlbmQ6IGhsanMuTUFUQ0hfTk9USElOR19SRSxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtYXRjaDogL1xcPz4vLFxuICAgICAgICAgICAgICBzY29wZTogXCJtZXRhXCIsXG4gICAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBQUkVQUk9DRVNTT1IsXG4gICAgICB7XG4gICAgICAgIHNjb3BlOiAndmFyaWFibGUubGFuZ3VhZ2UnLFxuICAgICAgICBtYXRjaDogL1xcJHRoaXNcXGIvXG4gICAgICB9LFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBGVU5DVElPTl9JTlZPS0UsXG4gICAgICBMRUZUX0FORF9SSUdIVF9TSURFX09GX0RPVUJMRV9DT0xPTixcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAvY29uc3QvLFxuICAgICAgICAgIC9cXHMvLFxuICAgICAgICAgIElERU5UX1JFLFxuICAgICAgICBdLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDM6IFwidmFyaWFibGUuY29uc3RhbnRcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBDT05TVFJVQ1RPUl9DQUxMLFxuICAgICAge1xuICAgICAgICBzY29wZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZm4gZnVuY3Rpb24nLFxuICAgICAgICBlbmQ6IC9bO3tdLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogJ1skJVxcXFxbXScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBiZWdpbktleXdvcmRzOiAndXNlJywgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJz0+JywgLy8gTm8gbWFya3VwLCBqdXN0IGEgcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgICAgICAgICAgZW5kOiAnXFxcXCknLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgICAgIExFRlRfQU5EX1JJR0hUX1NJREVfT0ZfRE9VQkxFX0NPTE9OLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgIE5VTUJFUlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNjb3BlOiAnY2xhc3MnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6IFwiZW51bVwiLFxuICAgICAgICAgICAgaWxsZWdhbDogL1soJFwiXS9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6IFwiY2xhc3MgaW50ZXJmYWNlIHRyYWl0XCIsXG4gICAgICAgICAgICBpbGxlZ2FsOiAvWzooJFwiXS9cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgZW5kOiAvXFx7LyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7IGJlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnIH0sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGJvdGggdXNlIGFuZCBuYW1lc3BhY2Ugc3RpbGwgdXNlIFwib2xkIHN0eWxlXCIgcnVsZXMgKHZzIG11bHRpLW1hdGNoKVxuICAgICAgLy8gYmVjYXVzZSB0aGUgbmFtZXNwYWNlIG5hbWUgY2FuIGluY2x1ZGUgYFxcYCBhbmQgd2Ugc3RpbGwgd2FudCBlYWNoXG4gICAgICAvLyBlbGVtZW50IHRvIGJlIHRyZWF0ZWQgYXMgaXRzIG93biAqaW5kaXZpZHVhbCogdGl0bGVcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25hbWVzcGFjZScsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgZW5kOiAnOycsXG4gICAgICAgIGlsbGVnYWw6IC9bLiddLyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5pbmhlcml0KGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCB7IHNjb3BlOiBcInRpdGxlLmNsYXNzXCIgfSkgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3VzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgZW5kOiAnOycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgLy8gVE9ETzogdGl0bGUuZnVuY3Rpb24gdnMgdGl0bGUuY2xhc3NcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYXRjaDogL1xcYihhc3xjb25zdHxmdW5jdGlvbilcXGIvLFxuICAgICAgICAgICAgc2NvcGU6IFwia2V5d29yZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBUT0RPOiBjb3VsZCBiZSB0aXRsZS5jbGFzcyBvciB0aXRsZS5mdW5jdGlvblxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICBOVU1CRVIsXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBocDtcbiIsIi8qXG5MYW5ndWFnZTogUGxhaW4gdGV4dFxuQXV0aG9yOiBFZ29yIFJvZ292IChlLnJvZ292QHBvc3RncmVzcHJvLnJ1KVxuRGVzY3JpcHRpb246IFBsYWluIHRleHQgd2l0aG91dCBhbnkgaGlnaGxpZ2h0aW5nLlxuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuZnVuY3Rpb24gcGxhaW50ZXh0KGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUGxhaW4gdGV4dCcsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ3RleHQnLFxuICAgICAgJ3R4dCdcbiAgICBdLFxuICAgIGRpc2FibGVBdXRvZGV0ZWN0OiB0cnVlXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGxhaW50ZXh0O1xuIiwiLypcbkxhbmd1YWdlOiBQeXRob24gUkVQTFxuUmVxdWlyZXM6IHB5dGhvbi5qc1xuQXV0aG9yOiBKb3NoIEdvZWJlbCA8aGVsbG9Aam9zaGdvZWJlbC5jb20+XG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG5mdW5jdGlvbiBweXRob25SZXBsKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbICdweWNvbicgXSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhLnByb21wdCcsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIC8vIGEgc3BhY2Ugc2VwYXJhdGVzIHRoZSBSRVBMIHByZWZpeCBmcm9tIHRoZSBhY3R1YWwgY29kZVxuICAgICAgICAgIC8vIHRoaXMgaXMgcHVyZWx5IGZvciBjbGVhbmVyIEhUTUwgb3V0cHV0XG4gICAgICAgICAgZW5kOiAvIHwkLyxcbiAgICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAgIGVuZDogJyQnLFxuICAgICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdweXRob24nXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW46IC9ePj4+KD89WyBdfCQpLyB9LFxuICAgICAgICAgIHsgYmVnaW46IC9eXFwuXFwuXFwuKD89WyBdfCQpLyB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHl0aG9uUmVwbDtcbiIsIi8qXG5MYW5ndWFnZTogUHl0aG9uXG5EZXNjcmlwdGlvbjogUHl0aG9uIGlzIGFuIGludGVycHJldGVkLCBvYmplY3Qtb3JpZW50ZWQsIGhpZ2gtbGV2ZWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugd2l0aCBkeW5hbWljIHNlbWFudGljcy5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnB5dGhvbi5vcmdcbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbmZ1bmN0aW9uIHB5dGhvbihobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgSURFTlRfUkUgPSAvW1xccHtYSURfU3RhcnR9X11cXHB7WElEX0NvbnRpbnVlfSovdTtcbiAgY29uc3QgUkVTRVJWRURfV09SRFMgPSBbXG4gICAgJ2FuZCcsXG4gICAgJ2FzJyxcbiAgICAnYXNzZXJ0JyxcbiAgICAnYXN5bmMnLFxuICAgICdhd2FpdCcsXG4gICAgJ2JyZWFrJyxcbiAgICAnY2FzZScsXG4gICAgJ2NsYXNzJyxcbiAgICAnY29udGludWUnLFxuICAgICdkZWYnLFxuICAgICdkZWwnLFxuICAgICdlbGlmJyxcbiAgICAnZWxzZScsXG4gICAgJ2V4Y2VwdCcsXG4gICAgJ2ZpbmFsbHknLFxuICAgICdmb3InLFxuICAgICdmcm9tJyxcbiAgICAnZ2xvYmFsJyxcbiAgICAnaWYnLFxuICAgICdpbXBvcnQnLFxuICAgICdpbicsXG4gICAgJ2lzJyxcbiAgICAnbGFtYmRhJyxcbiAgICAnbWF0Y2gnLFxuICAgICdub25sb2NhbHwxMCcsXG4gICAgJ25vdCcsXG4gICAgJ29yJyxcbiAgICAncGFzcycsXG4gICAgJ3JhaXNlJyxcbiAgICAncmV0dXJuJyxcbiAgICAndHJ5JyxcbiAgICAnd2hpbGUnLFxuICAgICd3aXRoJyxcbiAgICAneWllbGQnXG4gIF07XG5cbiAgY29uc3QgQlVJTFRfSU5TID0gW1xuICAgICdfX2ltcG9ydF9fJyxcbiAgICAnYWJzJyxcbiAgICAnYWxsJyxcbiAgICAnYW55JyxcbiAgICAnYXNjaWknLFxuICAgICdiaW4nLFxuICAgICdib29sJyxcbiAgICAnYnJlYWtwb2ludCcsXG4gICAgJ2J5dGVhcnJheScsXG4gICAgJ2J5dGVzJyxcbiAgICAnY2FsbGFibGUnLFxuICAgICdjaHInLFxuICAgICdjbGFzc21ldGhvZCcsXG4gICAgJ2NvbXBpbGUnLFxuICAgICdjb21wbGV4JyxcbiAgICAnZGVsYXR0cicsXG4gICAgJ2RpY3QnLFxuICAgICdkaXInLFxuICAgICdkaXZtb2QnLFxuICAgICdlbnVtZXJhdGUnLFxuICAgICdldmFsJyxcbiAgICAnZXhlYycsXG4gICAgJ2ZpbHRlcicsXG4gICAgJ2Zsb2F0JyxcbiAgICAnZm9ybWF0JyxcbiAgICAnZnJvemVuc2V0JyxcbiAgICAnZ2V0YXR0cicsXG4gICAgJ2dsb2JhbHMnLFxuICAgICdoYXNhdHRyJyxcbiAgICAnaGFzaCcsXG4gICAgJ2hlbHAnLFxuICAgICdoZXgnLFxuICAgICdpZCcsXG4gICAgJ2lucHV0JyxcbiAgICAnaW50JyxcbiAgICAnaXNpbnN0YW5jZScsXG4gICAgJ2lzc3ViY2xhc3MnLFxuICAgICdpdGVyJyxcbiAgICAnbGVuJyxcbiAgICAnbGlzdCcsXG4gICAgJ2xvY2FscycsXG4gICAgJ21hcCcsXG4gICAgJ21heCcsXG4gICAgJ21lbW9yeXZpZXcnLFxuICAgICdtaW4nLFxuICAgICduZXh0JyxcbiAgICAnb2JqZWN0JyxcbiAgICAnb2N0JyxcbiAgICAnb3BlbicsXG4gICAgJ29yZCcsXG4gICAgJ3BvdycsXG4gICAgJ3ByaW50JyxcbiAgICAncHJvcGVydHknLFxuICAgICdyYW5nZScsXG4gICAgJ3JlcHInLFxuICAgICdyZXZlcnNlZCcsXG4gICAgJ3JvdW5kJyxcbiAgICAnc2V0JyxcbiAgICAnc2V0YXR0cicsXG4gICAgJ3NsaWNlJyxcbiAgICAnc29ydGVkJyxcbiAgICAnc3RhdGljbWV0aG9kJyxcbiAgICAnc3RyJyxcbiAgICAnc3VtJyxcbiAgICAnc3VwZXInLFxuICAgICd0dXBsZScsXG4gICAgJ3R5cGUnLFxuICAgICd2YXJzJyxcbiAgICAnemlwJ1xuICBdO1xuXG4gIGNvbnN0IExJVEVSQUxTID0gW1xuICAgICdfX2RlYnVnX18nLFxuICAgICdFbGxpcHNpcycsXG4gICAgJ0ZhbHNlJyxcbiAgICAnTm9uZScsXG4gICAgJ05vdEltcGxlbWVudGVkJyxcbiAgICAnVHJ1ZSdcbiAgXTtcblxuICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWxcbiAgLy8gVE9ETzogQ291bGQgdGhlc2UgYmUgc3VwcGxlbWVudGVkIGJ5IGEgQ2FtZWxDYXNlIG1hdGNoZXIgaW4gY2VydGFpblxuICAvLyBjb250ZXh0cywgbGVhdmluZyB0aGVzZSByZW1haW5pbmcgb25seSBmb3IgcmVsZXZhbmNlIGhpbnRpbmc/XG4gIGNvbnN0IFRZUEVTID0gW1xuICAgIFwiQW55XCIsXG4gICAgXCJDYWxsYWJsZVwiLFxuICAgIFwiQ29yb3V0aW5lXCIsXG4gICAgXCJEaWN0XCIsXG4gICAgXCJMaXN0XCIsXG4gICAgXCJMaXRlcmFsXCIsXG4gICAgXCJHZW5lcmljXCIsXG4gICAgXCJPcHRpb25hbFwiLFxuICAgIFwiU2VxdWVuY2VcIixcbiAgICBcIlNldFwiLFxuICAgIFwiVHVwbGVcIixcbiAgICBcIlR5cGVcIixcbiAgICBcIlVuaW9uXCJcbiAgXTtcblxuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICAkcGF0dGVybjogL1tBLVphLXpdXFx3K3xfX1xcdytfXy8sXG4gICAga2V5d29yZDogUkVTRVJWRURfV09SRFMsXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOUyxcbiAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICB0eXBlOiBUWVBFU1xuICB9O1xuXG4gIGNvbnN0IFBST01QVCA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogL14oPj4+fFxcLlxcLlxcLikgL1xuICB9O1xuXG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLyMvXG4gIH07XG5cbiAgY29uc3QgTElURVJBTF9CUkFDS0VUID0ge1xuICAgIGJlZ2luOiAvXFx7XFx7LyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXSxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbdVVdfFtiQl18W3JSXXxbYkJdW3JSXXxbclJdW2JCXSk/JycnLyxcbiAgICAgICAgZW5kOiAvJycnLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgUFJPTVBUXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFt1VV18W2JCXXxbclJdfFtiQl1bclJdfFtyUl1bYkJdKT9cIlwiXCIvLFxuICAgICAgICBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICBQUk9NUFRcbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oW2ZGXVtyUl18W3JSXVtmRl18W2ZGXSknJycvLFxuICAgICAgICBlbmQ6IC8nJycvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICBQUk9NUFQsXG4gICAgICAgICAgTElURVJBTF9CUkFDS0VULFxuICAgICAgICAgIFNVQlNUXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFtmRl1bclJdfFtyUl1bZkZdfFtmRl0pXCJcIlwiLyxcbiAgICAgICAgZW5kOiAvXCJcIlwiLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgUFJPTVBULFxuICAgICAgICAgIExJVEVSQUxfQlJBQ0tFVCxcbiAgICAgICAgICBTVUJTVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbdVVdfFtyUl0pJy8sXG4gICAgICAgIGVuZDogLycvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbdVVdfFtyUl0pXCIvLFxuICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFtiQl18W2JCXVtyUl18W3JSXVtiQl0pJy8sXG4gICAgICAgIGVuZDogLycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbYkJdfFtiQl1bclJdfFtyUl1bYkJdKVwiLyxcbiAgICAgICAgZW5kOiAvXCIvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbZkZdW3JSXXxbclJdW2ZGXXxbZkZdKScvLFxuICAgICAgICBlbmQ6IC8nLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgTElURVJBTF9CUkFDS0VULFxuICAgICAgICAgIFNVQlNUXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFtmRl1bclJdfFtyUl1bZkZdfFtmRl0pXCIvLFxuICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIExJVEVSQUxfQlJBQ0tFVCxcbiAgICAgICAgICBTVUJTVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgIF1cbiAgfTtcblxuICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNudW1lcmljLWxpdGVyYWxzXG4gIGNvbnN0IGRpZ2l0cGFydCA9ICdbMC05XShfP1swLTldKSonO1xuICBjb25zdCBwb2ludGZsb2F0ID0gYChcXFxcYigke2RpZ2l0cGFydH0pKT9cXFxcLigke2RpZ2l0cGFydH0pfFxcXFxiKCR7ZGlnaXRwYXJ0fSlcXFxcLmA7XG4gIC8vIFdoaXRlc3BhY2UgYWZ0ZXIgYSBudW1iZXIgKG9yIGFueSBsZXhpY2FsIHRva2VuKSBpcyBuZWVkZWQgb25seSBpZiBpdHMgYWJzZW5jZVxuICAvLyB3b3VsZCBjaGFuZ2UgdGhlIHRva2VuaXphdGlvblxuICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCN3aGl0ZXNwYWNlLWJldHdlZW4tdG9rZW5zXG4gIC8vIFdlIGRldmlhdGUgc2xpZ2h0bHksIHJlcXVpcmluZyBhIHdvcmQgYm91bmRhcnkgb3IgYSBrZXl3b3JkXG4gIC8vIHRvIGF2b2lkIGFjY2lkZW50YWxseSByZWNvZ25pemluZyAqcHJlZml4ZXMqIChlLmcuLCBgMGAgaW4gYDB4NDFgIG9yIGAwOGAgb3IgYDBfXzFgKVxuICBjb25zdCBsb29rYWhlYWQgPSBgXFxcXGJ8JHtSRVNFUlZFRF9XT1JEUy5qb2luKCd8Jyl9YDtcbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBleHBvbmVudGZsb2F0LCBwb2ludGZsb2F0XG4gICAgICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNmbG9hdGluZy1wb2ludC1saXRlcmFsc1xuICAgICAgLy8gb3B0aW9uYWxseSBpbWFnaW5hcnlcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMuOS9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2ltYWdpbmFyeS1saXRlcmFsc1xuICAgICAgLy8gTm90ZTogbm8gbGVhZGluZyBcXGIgYmVjYXVzZSBmbG9hdHMgY2FuIHN0YXJ0IHdpdGggYSBkZWNpbWFsIHBvaW50XG4gICAgICAvLyBhbmQgd2UgZG9uJ3Qgd2FudCB0byBtaXNoYW5kbGUgZS5nLiBgZm4oLjUpYCxcbiAgICAgIC8vIG5vIHRyYWlsaW5nIFxcYiBmb3IgcG9pbnRmbG9hdCBiZWNhdXNlIGl0IGNhbiBlbmQgd2l0aCBhIGRlY2ltYWwgcG9pbnRcbiAgICAgIC8vIGFuZCB3ZSBkb24ndCB3YW50IHRvIG1pc2hhbmRsZSBlLmcuIGAwLi5oZXgoKWA7IHRoaXMgc2hvdWxkIGJlIHNhZmVcbiAgICAgIC8vIGJlY2F1c2UgYm90aCBNVVNUIGNvbnRhaW4gYSBkZWNpbWFsIHBvaW50IGFuZCBzbyBjYW5ub3QgYmUgY29uZnVzZWQgd2l0aFxuICAgICAgLy8gdGhlIGludGVyaW9yIHBhcnQgb2YgYW4gaWRlbnRpZmllclxuICAgICAge1xuICAgICAgICBiZWdpbjogYChcXFxcYigke2RpZ2l0cGFydH0pfCgke3BvaW50ZmxvYXR9KSlbZUVdWystXT8oJHtkaWdpdHBhcnR9KVtqSl0/KD89JHtsb29rYWhlYWR9KWBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBgKCR7cG9pbnRmbG9hdH0pW2pKXT9gXG4gICAgICB9LFxuXG4gICAgICAvLyBkZWNpbnRlZ2VyLCBiaW5pbnRlZ2VyLCBvY3RpbnRlZ2VyLCBoZXhpbnRlZ2VyXG4gICAgICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpbnRlZ2VyLWxpdGVyYWxzXG4gICAgICAvLyBvcHRpb25hbGx5IFwibG9uZ1wiIGluIFB5dGhvbiAyXG4gICAgICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8yLjcvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpbnRlZ2VyLWFuZC1sb25nLWludGVnZXItbGl0ZXJhbHNcbiAgICAgIC8vIGRlY2ludGVnZXIgaXMgb3B0aW9uYWxseSBpbWFnaW5hcnlcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMuOS9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2ltYWdpbmFyeS1saXRlcmFsc1xuICAgICAge1xuICAgICAgICBiZWdpbjogYFxcXFxiKFsxLTldKF8/WzAtOV0pKnwwKyhfPzApKilbbExqSl0/KD89JHtsb29rYWhlYWR9KWBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBgXFxcXGIwW2JCXShfP1swMV0pK1tsTF0/KD89JHtsb29rYWhlYWR9KWBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBgXFxcXGIwW29PXShfP1swLTddKStbbExdPyg/PSR7bG9va2FoZWFkfSlgXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogYFxcXFxiMFt4WF0oXz9bMC05YS1mQS1GXSkrW2xMXT8oPz0ke2xvb2thaGVhZH0pYFxuICAgICAgfSxcblxuICAgICAgLy8gaW1hZ251bWJlciAoZGlnaXRwYXJ0LWJhc2VkKVxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy45L3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaW1hZ2luYXJ5LWxpdGVyYWxzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBgXFxcXGIoJHtkaWdpdHBhcnR9KVtqSl0oPz0ke2xvb2thaGVhZH0pYFxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgQ09NTUVOVF9UWVBFID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCIsXG4gICAgYmVnaW46IHJlZ2V4Lmxvb2thaGVhZCgvIyB0eXBlOi8pLFxuICAgIGVuZDogLyQvLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgeyAvLyBwcmV2ZW50IGtleXdvcmRzIGZyb20gY29sb3JpbmcgYHR5cGVgXG4gICAgICAgIGJlZ2luOiAvIyB0eXBlOi9cbiAgICAgIH0sXG4gICAgICAvLyBjb21tZW50IHdpdGhpbiBhIGRhdGF0eXBlIGNvbW1lbnQgaW5jbHVkZXMgbm8ga2V5d29yZHNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8jLyxcbiAgICAgICAgZW5kOiAvXFxiXFxCLyxcbiAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBFeGNsdWRlIHBhcmFtcyBpbiBmdW5jdGlvbnMgd2l0aG91dCBwYXJhbXNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcIlwiLFxuICAgICAgICBiZWdpbjogL1xcKFxccypcXCkvLFxuICAgICAgICBza2lwOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICBQUk9NUFQsXG4gICAgICAgICAgTlVNQkVSLFxuICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zID0gW1xuICAgIFNUUklORyxcbiAgICBOVU1CRVIsXG4gICAgUFJPTVBUXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUHl0aG9uJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAncHknLFxuICAgICAgJ2d5cCcsXG4gICAgICAnaXB5dGhvbidcbiAgICBdLFxuICAgIHVuaWNvZGVSZWdleDogdHJ1ZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLyg8XFwvfC0+fFxcPyl8PT4vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBQUk9NUFQsXG4gICAgICBOVU1CRVIsXG4gICAgICB7XG4gICAgICAgIC8vIHZlcnkgY29tbW9uIGNvbnZlbnRpb25cbiAgICAgICAgYmVnaW46IC9cXGJzZWxmXFxiL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gZWF0IFwiaWZcIiBwcmlvciB0byBzdHJpbmcgc28gdGhhdCBpdCB3b24ndCBhY2NpZGVudGFsbHkgYmVcbiAgICAgICAgLy8gbGFiZWxlZCBhcyBhbiBmLXN0cmluZ1xuICAgICAgICBiZWdpbktleXdvcmRzOiBcImlmXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIFNUUklORyxcbiAgICAgIENPTU1FTlRfVFlQRSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL1xcYmRlZi8sIC9cXHMrLyxcbiAgICAgICAgICBJREVOVF9SRSxcbiAgICAgICAgXSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInRpdGxlLmZ1bmN0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFsgUEFSQU1TIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAgICAgL1xcYmNsYXNzLywgL1xccysvLFxuICAgICAgICAgICAgICBJREVOVF9SRSwgL1xccyovLFxuICAgICAgICAgICAgICAvXFwoXFxzKi8sIElERU5UX1JFLC9cXHMqXFwpL1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgICAgIC9cXGJjbGFzcy8sIC9cXHMrLyxcbiAgICAgICAgICAgICAgSURFTlRfUkVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDM6IFwidGl0bGUuY2xhc3NcIixcbiAgICAgICAgICA2OiBcInRpdGxlLmNsYXNzLmluaGVyaXRlZFwiLFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC9eW1xcdCBdKkAvLFxuICAgICAgICBlbmQ6IC8oPz0jKXwkLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBOVU1CRVIsXG4gICAgICAgICAgUEFSQU1TLFxuICAgICAgICAgIFNUUklOR1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHB5dGhvbjtcbiIsIi8qXG5MYW5ndWFnZTogUlxuRGVzY3JpcHRpb246IFIgaXMgYSBmcmVlIHNvZnR3YXJlIGVudmlyb25tZW50IGZvciBzdGF0aXN0aWNhbCBjb21wdXRpbmcgYW5kIGdyYXBoaWNzLlxuQXV0aG9yOiBKb2UgQ2hlbmcgPGpvZUByc3R1ZGlvLm9yZz5cbkNvbnRyaWJ1dG9yczogS29ucmFkIFJ1ZG9scGggPGtvbnJhZC5ydWRvbHBoQGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnItcHJvamVjdC5vcmdcbkNhdGVnb3J5OiBjb21tb24sc2NpZW50aWZpY1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIHIoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIC8vIElkZW50aWZpZXJzIGluIFIgY2Fubm90IHN0YXJ0IHdpdGggYF9gLCBidXQgdGhleSBjYW4gc3RhcnQgd2l0aCBgLmAgaWYgaXRcbiAgLy8gaXMgbm90IGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgZGlnaXQuXG4gIC8vIFIgYWxzbyBzdXBwb3J0cyBxdW90ZWQgaWRlbnRpZmllcnMsIHdoaWNoIGFyZSBuZWFyLWFyYml0cmFyeSBzZXF1ZW5jZXNcbiAgLy8gZGVsaW1pdGVkIGJ5IGJhY2t0aWNrcyAoYOKApmApLCB3aGljaCBtYXkgY29udGFpbiBlc2NhcGUgc2VxdWVuY2VzLiBUaGVzZSBhcmVcbiAgLy8gaGFuZGxlZCBpbiBhIHNlcGFyYXRlIG1vZGUuIFNlZSBgdGVzdC9tYXJrdXAvci9uYW1lcy50eHRgIGZvciBleGFtcGxlcy5cbiAgLy8gRklYTUU6IFN1cHBvcnQgVW5pY29kZSBpZGVudGlmaWVycy5cbiAgY29uc3QgSURFTlRfUkUgPSAvKD86KD86W2EtekEtWl18XFwuWy5fYS16QS1aXSlbLl9hLXpBLVowLTldKil8XFwuKD8hXFxkKS87XG4gIGNvbnN0IE5VTUJFUl9UWVBFU19SRSA9IHJlZ2V4LmVpdGhlcihcbiAgICAvLyBTcGVjaWFsIGNhc2U6IG9ubHkgaGV4YWRlY2ltYWwgYmluYXJ5IHBvd2VycyBjYW4gY29udGFpbiBmcmFjdGlvbnNcbiAgICAvMFt4WF1bMC05YS1mQS1GXStcXC5bMC05YS1mQS1GXSpbcFBdWystXT9cXGQraT8vLFxuICAgIC8vIEhleGFkZWNpbWFsIG51bWJlcnMgd2l0aG91dCBmcmFjdGlvbiBhbmQgb3B0aW9uYWwgYmluYXJ5IHBvd2VyXG4gICAgLzBbeFhdWzAtOWEtZkEtRl0rKD86W3BQXVsrLV0/XFxkKyk/W0xpXT8vLFxuICAgIC8vIERlY2ltYWwgbnVtYmVyc1xuICAgIC8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86W2VFXVsrLV0/XFxkKyk/W0xpXT8vXG4gICk7XG4gIGNvbnN0IE9QRVJBVE9SU19SRSA9IC9bPSE8PjpdPXxcXHxcXHx8JiZ8Ojo6P3w8LXw8PC18LT4+fC0+fFxcfD58Wy0rKlxcLz8hJCZ8Ojw9PkBefl18XFwqXFwqLztcbiAgY29uc3QgUFVOQ1RVQVRJT05fUkUgPSByZWdleC5laXRoZXIoXG4gICAgL1soKV0vLFxuICAgIC9be31dLyxcbiAgICAvXFxbXFxbLyxcbiAgICAvW1tcXF1dLyxcbiAgICAvXFxcXC8sXG4gICAgLywvXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUicsXG5cbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IElERU5UX1JFLFxuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2Z1bmN0aW9uIGlmIGluIGJyZWFrIG5leHQgcmVwZWF0IGVsc2UgZm9yIHdoaWxlJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICdOVUxMIE5BIFRSVUUgRkFMU0UgSW5mIE5hTiBOQV9pbnRlZ2VyX3wxMCBOQV9yZWFsX3wxMCAnXG4gICAgICAgICsgJ05BX2NoYXJhY3Rlcl98MTAgTkFfY29tcGxleF98MTAnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgIC8vIEJ1aWx0aW4gY29uc3RhbnRzXG4gICAgICAgICdMRVRURVJTIGxldHRlcnMgbW9udGguYWJiIG1vbnRoLm5hbWUgcGkgVCBGICdcbiAgICAgICAgLy8gUHJpbWl0aXZlIGZ1bmN0aW9uc1xuICAgICAgICAvLyBUaGVzZSBhcmUgYWxsIHRoZSBmdW5jdGlvbnMgaW4gYGJhc2VgIHRoYXQgYXJlIGltcGxlbWVudGVkIGFzIGFcbiAgICAgICAgLy8gYC5QcmltaXRpdmVgLCBtaW51cyB0aG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgYWxzbyBrZXl3b3Jkcy5cbiAgICAgICAgKyAnYWJzIGFjb3MgYWNvc2ggYWxsIGFueSBhbnlOQSBBcmcgYXMuY2FsbCBhcy5jaGFyYWN0ZXIgJ1xuICAgICAgICArICdhcy5jb21wbGV4IGFzLmRvdWJsZSBhcy5lbnZpcm9ubWVudCBhcy5pbnRlZ2VyIGFzLmxvZ2ljYWwgJ1xuICAgICAgICArICdhcy5udWxsLmRlZmF1bHQgYXMubnVtZXJpYyBhcy5yYXcgYXNpbiBhc2luaCBhdGFuIGF0YW5oIGF0dHIgJ1xuICAgICAgICArICdhdHRyaWJ1dGVzIGJhc2VlbnYgYnJvd3NlciBjIGNhbGwgY2VpbGluZyBjbGFzcyBDb25qIGNvcyBjb3NoICdcbiAgICAgICAgKyAnY29zcGkgY3VtbWF4IGN1bW1pbiBjdW1wcm9kIGN1bXN1bSBkaWdhbW1hIGRpbSBkaW1uYW1lcyAnXG4gICAgICAgICsgJ2VtcHR5ZW52IGV4cCBleHByZXNzaW9uIGZsb29yIGZvcmNlQW5kQ2FsbCBnYW1tYSBnYy50aW1lICdcbiAgICAgICAgKyAnZ2xvYmFsZW52IEltIGludGVyYWN0aXZlIGludmlzaWJsZSBpcy5hcnJheSBpcy5hdG9taWMgaXMuY2FsbCAnXG4gICAgICAgICsgJ2lzLmNoYXJhY3RlciBpcy5jb21wbGV4IGlzLmRvdWJsZSBpcy5lbnZpcm9ubWVudCBpcy5leHByZXNzaW9uICdcbiAgICAgICAgKyAnaXMuZmluaXRlIGlzLmZ1bmN0aW9uIGlzLmluZmluaXRlIGlzLmludGVnZXIgaXMubGFuZ3VhZ2UgJ1xuICAgICAgICArICdpcy5saXN0IGlzLmxvZ2ljYWwgaXMubWF0cml4IGlzLm5hIGlzLm5hbWUgaXMubmFuIGlzLm51bGwgJ1xuICAgICAgICArICdpcy5udW1lcmljIGlzLm9iamVjdCBpcy5wYWlybGlzdCBpcy5yYXcgaXMucmVjdXJzaXZlIGlzLnNpbmdsZSAnXG4gICAgICAgICsgJ2lzLnN5bWJvbCBsYXp5TG9hZERCZmV0Y2ggbGVuZ3RoIGxnYW1tYSBsaXN0IGxvZyBtYXggbWluICdcbiAgICAgICAgKyAnbWlzc2luZyBNb2QgbmFtZXMgbmFyZ3MgbnpjaGFyIG9sZENsYXNzIG9uLmV4aXQgcG9zLnRvLmVudiAnXG4gICAgICAgICsgJ3Byb2MudGltZSBwcm9kIHF1b3RlIHJhbmdlIFJlIHJlcCByZXRyYWNlbWVtIHJldHVybiByb3VuZCAnXG4gICAgICAgICsgJ3NlcV9hbG9uZyBzZXFfbGVuIHNlcS5pbnQgc2lnbiBzaWduaWYgc2luIHNpbmggc2lucGkgc3FydCAnXG4gICAgICAgICsgJ3N0YW5kYXJkR2VuZXJpYyBzdWJzdGl0dXRlIHN1bSBzd2l0Y2ggdGFuIHRhbmggdGFucGkgdHJhY2VtZW0gJ1xuICAgICAgICArICd0cmlnYW1tYSB0cnVuYyB1bmNsYXNzIHVudHJhY2VtZW0gVXNlTWV0aG9kIHh0ZnJtJyxcbiAgICB9LFxuXG4gICAgY29udGFpbnM6IFtcbiAgICAgIC8vIFJveHlnZW4gY29tbWVudHNcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgLyMnLyxcbiAgICAgICAgLyQvLFxuICAgICAgICB7IGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGBAZXhhbXBsZXNgIHNlcGFyYXRlbHkgdG8gY2F1c2UgYWxsIHN1YnNlcXVlbnQgY29kZVxuICAgICAgICAgICAgLy8gdW50aWwgdGhlIG5leHQgYEBgLXRhZyBvbiBpdHMgb3duIGxpbmUgdG8gYmUga2VwdCBhcy1pcyxcbiAgICAgICAgICAgIC8vIHByZXZlbnRpbmcgaGlnaGxpZ2h0aW5nLiBUaGlzIGNvZGUgaXMgZXhhbXBsZSBSIGNvZGUsIHNvIG5lc3RlZFxuICAgICAgICAgICAgLy8gZG9jdGFncyBzaG91bGRu4oCZdCBiZSB0cmVhdGVkIGFzIHN1Y2guIFNlZVxuICAgICAgICAgICAgLy8gYHRlc3QvbWFya3VwL3Ivcm94eWdlbi50eHRgIGZvciBhbiBleGFtcGxlLlxuICAgICAgICAgICAgc2NvcGU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgbWF0Y2g6IC9AZXhhbXBsZXMvLFxuICAgICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICAgIGVuZDogcmVnZXgubG9va2FoZWFkKHJlZ2V4LmVpdGhlcihcbiAgICAgICAgICAgICAgICAvLyBlbmQgaWYgYW5vdGhlciBkb2MgY29tbWVudFxuICAgICAgICAgICAgICAgIC9cXG5eIydcXHMqKD89QFthLXpBLVpdKykvLFxuICAgICAgICAgICAgICAgIC8vIG9yIGEgbGluZSB3aXRoIG5vIGNvbW1lbnRcbiAgICAgICAgICAgICAgICAvXFxuXig/ISMnKS9cbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBgQHBhcmFtYCB0byBoaWdobGlnaHQgdGhlIHBhcmFtZXRlciBuYW1lIGZvbGxvd2luZ1xuICAgICAgICAgICAgLy8gYWZ0ZXIuXG4gICAgICAgICAgICBzY29wZTogJ2RvY3RhZycsXG4gICAgICAgICAgICBiZWdpbjogJ0BwYXJhbScsXG4gICAgICAgICAgICBlbmQ6IC8kLyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzY29wZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgeyBtYXRjaDogSURFTlRfUkUgfSxcbiAgICAgICAgICAgICAgICAgIHsgbWF0Y2g6IC9gKD86XFxcXC58W15gXFxcXF0pK2AvIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2NvcGU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgbWF0Y2g6IC9AW2EtekEtWl0rL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2NvcGU6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgIG1hdGNoOiAvXFxcXFthLXpBLVpdKy9cbiAgICAgICAgICB9XG4gICAgICAgIF0gfVxuICAgICAgKSxcblxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcblxuICAgICAge1xuICAgICAgICBzY29wZTogJ3N0cmluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgICAgICAgICAgYmVnaW46IC9bclJdXCIoLSopXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKSgtKilcIi9cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHtcbiAgICAgICAgICAgIGJlZ2luOiAvW3JSXVwiKC0qKVxcey8sXG4gICAgICAgICAgICBlbmQ6IC9cXH0oLSopXCIvXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGxqcy5FTkRfU0FNRV9BU19CRUdJTih7XG4gICAgICAgICAgICBiZWdpbjogL1tyUl1cIigtKilcXFsvLFxuICAgICAgICAgICAgZW5kOiAvXFxdKC0qKVwiL1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgICAgICAgICAgYmVnaW46IC9bclJdJygtKilcXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpKC0qKScvXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGxqcy5FTkRfU0FNRV9BU19CRUdJTih7XG4gICAgICAgICAgICBiZWdpbjogL1tyUl0nKC0qKVxcey8sXG4gICAgICAgICAgICBlbmQ6IC9cXH0oLSopJy9cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHtcbiAgICAgICAgICAgIGJlZ2luOiAvW3JSXScoLSopXFxbLyxcbiAgICAgICAgICAgIGVuZDogL1xcXSgtKiknL1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogXCInXCIsXG4gICAgICAgICAgICBlbmQ6IFwiJ1wiLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgfSxcblxuICAgICAgLy8gTWF0Y2hpbmcgbnVtYmVycyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgcHVuY3R1YXRpb24gYW5kIG9wZXJhdG9ycyBpc1xuICAgICAgLy8gdHJpY2t5IHNpbmNlIHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgY2hhcmFjdGVyIGFoZWFkIG9mIGEgbnVtYmVyIHRvXG4gICAgICAvLyBlbnN1cmUgdGhlIG51bWJlciBpcyBub3QgcGFydCBvZiBhbiBpZGVudGlmaWVyLCBhbmQgd2UgY2Fubm90IHVzZVxuICAgICAgLy8gbmVnYXRpdmUgbG9vay1iZWhpbmQgYXNzZXJ0aW9ucy4gU28gaW5zdGVhZCB3ZSBleHBsaWNpdGx5IGhhbmRsZSBhbGxcbiAgICAgIC8vIHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiAob3BlcmF0b3J8cHVuY3R1YXRpb24pLCBudW1iZXIuXG4gICAgICAvLyBUT0RPOiByZXBsYWNlIHdpdGggbmVnYXRpdmUgbG9vay1iZWhpbmQgd2hlbiBhdmFpbGFibGVcbiAgICAgIC8vIHsgYmVnaW46IC8oPzwhW2EtekEtWjAtOS5fXSkwW3hYXVswLTlhLWZBLUZdK1xcLlswLTlhLWZBLUZdKltwUF1bKy1dP1xcZCtpPy8gfSxcbiAgICAgIC8vIHsgYmVnaW46IC8oPzwhW2EtekEtWjAtOS5fXSkwW3hYXVswLTlhLWZBLUZdKyhbcFBdWystXT9cXGQrKT9bTGldPy8gfSxcbiAgICAgIC8vIHsgYmVnaW46IC8oPzwhW2EtekEtWjAtOS5fXSkoXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVsrLV0/XFxkKyk/W0xpXT8vIH1cbiAgICAgIHtcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgICAgIDE6ICdvcGVyYXRvcicsXG4gICAgICAgICAgICAgIDI6ICdudW1iZXInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAgICAgT1BFUkFUT1JTX1JFLFxuICAgICAgICAgICAgICBOVU1CRVJfVFlQRVNfUkVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgICAgIDE6ICdvcGVyYXRvcicsXG4gICAgICAgICAgICAgIDI6ICdudW1iZXInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAgICAgLyVbXiVdKiUvLFxuICAgICAgICAgICAgICBOVU1CRVJfVFlQRVNfUkVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgICAgIDE6ICdwdW5jdHVhdGlvbicsXG4gICAgICAgICAgICAgIDI6ICdudW1iZXInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAgICAgUFVOQ1RVQVRJT05fUkUsXG4gICAgICAgICAgICAgIE5VTUJFUl9UWVBFU19SRVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2NvcGU6IHsgMjogJ251bWJlcicgfSxcbiAgICAgICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgICAgIC9bXmEtekEtWjAtOS5fXXxeLywgLy8gbm90IHBhcnQgb2YgYW4gaWRlbnRpZmllciwgb3Igc3RhcnQgb2YgZG9jdW1lbnRcbiAgICAgICAgICAgICAgTlVNQkVSX1RZUEVTX1JFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICAvLyBPcGVyYXRvcnMvcHVuY3R1YXRpb24gd2hlbiB0aGV5J3JlIG5vdCBkaXJlY3RseSBmb2xsb3dlZCBieSBudW1iZXJzXG4gICAgICB7XG4gICAgICAgIC8vIFJlbGV2YW5jZSBib29zdCBmb3IgdGhlIG1vc3QgY29tbW9uIGFzc2lnbm1lbnQgZm9ybS5cbiAgICAgICAgc2NvcGU6IHsgMzogJ29wZXJhdG9yJyB9LFxuICAgICAgICBtYXRjaDogW1xuICAgICAgICAgIElERU5UX1JFLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICAvPC0vLFxuICAgICAgICAgIC9cXHMrL1xuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICB7XG4gICAgICAgIHNjb3BlOiAnb3BlcmF0b3InLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBtYXRjaDogT1BFUkFUT1JTX1JFIH0sXG4gICAgICAgICAgeyBtYXRjaDogLyVbXiVdKiUvIH1cbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAge1xuICAgICAgICBzY29wZTogJ3B1bmN0dWF0aW9uJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBtYXRjaDogUFVOQ1RVQVRJT05fUkVcbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgLy8gRXNjYXBlZCBpZGVudGlmaWVyXG4gICAgICAgIGJlZ2luOiAnYCcsXG4gICAgICAgIGVuZDogJ2AnLFxuICAgICAgICBjb250YWluczogWyB7IGJlZ2luOiAvXFxcXC4vIH0gXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByO1xuIiwiLypcbkxhbmd1YWdlOiBSdWJ5XG5EZXNjcmlwdGlvbjogUnVieSBpcyBhIGR5bmFtaWMsIG9wZW4gc291cmNlIHByb2dyYW1taW5nIGxhbmd1YWdlIHdpdGggYSBmb2N1cyBvbiBzaW1wbGljaXR5IGFuZCBwcm9kdWN0aXZpdHkuXG5XZWJzaXRlOiBodHRwczovL3d3dy5ydWJ5LWxhbmcub3JnL1xuQXV0aG9yOiBBbnRvbiBLb3ZhbHlvdiA8YW50b25Aa292YWx5b3YubmV0PlxuQ29udHJpYnV0b3JzOiBQZXRlciBMZW9ub3YgPGdvanBlZ0B5YW5kZXgucnU+LCBWYXNpbHkgUG9sb3ZueW92IDx2YXN0QHdoaXRlYW50cy5uZXQ+LCBMb3JlbiBTZWdhbCA8bHNlZ2FsQHNvZW4uY2E+LCBQYXNjYWwgSHVybmkgPHBoaUBydWJ5LXJlYWN0aXZlLm9yZz4sIENlZHJpYyBTb2hyYXVlciA8c29ocmF1ZXJAZ29vZ2xlbWFpbC5jb20+XG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG5mdW5jdGlvbiBydWJ5KGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICBjb25zdCBSVUJZX01FVEhPRF9SRSA9ICcoW2EtekEtWl9dXFxcXHcqWyE/PV0/fFstK35dQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFxcXCpcXFxcKnxbLS8rJV4mKn5gfF18XFxcXFtcXFxcXT0/KSc7XG4gIC8vIFRPRE86IG1vdmUgY29uY2VwdHMgbGlrZSBDQU1FTF9DQVNFIGludG8gYG1vZGVzLmpzYFxuICBjb25zdCBDTEFTU19OQU1FX1JFID0gcmVnZXguZWl0aGVyKFxuICAgIC9cXGIoW0EtWl0rW2EtejAtOV0rKSsvLFxuICAgIC8vIGVuZHMgaW4gY2Fwc1xuICAgIC9cXGIoW0EtWl0rW2EtejAtOV0rKStbQS1aXSsvLFxuICApXG4gIDtcbiAgY29uc3QgQ0xBU1NfTkFNRV9XSVRIX05BTUVTUEFDRV9SRSA9IHJlZ2V4LmNvbmNhdChDTEFTU19OQU1FX1JFLCAvKDo6XFx3KykqLyk7XG4gIGNvbnN0IFJVQllfS0VZV09SRFMgPSB7XG4gICAgXCJ2YXJpYWJsZS5jb25zdGFudFwiOiBbXG4gICAgICBcIl9fRklMRV9fXCIsXG4gICAgICBcIl9fTElORV9fXCJcbiAgICBdLFxuICAgIFwidmFyaWFibGUubGFuZ3VhZ2VcIjogW1xuICAgICAgXCJzZWxmXCIsXG4gICAgICBcInN1cGVyXCIsXG4gICAgXSxcbiAgICBrZXl3b3JkOiBbXG4gICAgICBcImFsaWFzXCIsXG4gICAgICBcImFuZFwiLFxuICAgICAgXCJhdHRyX2FjY2Vzc29yXCIsXG4gICAgICBcImF0dHJfcmVhZGVyXCIsXG4gICAgICBcImF0dHJfd3JpdGVyXCIsXG4gICAgICBcImJlZ2luXCIsXG4gICAgICBcIkJFR0lOXCIsXG4gICAgICBcImJyZWFrXCIsXG4gICAgICBcImNhc2VcIixcbiAgICAgIFwiY2xhc3NcIixcbiAgICAgIFwiZGVmaW5lZFwiLFxuICAgICAgXCJkb1wiLFxuICAgICAgXCJlbHNlXCIsXG4gICAgICBcImVsc2lmXCIsXG4gICAgICBcImVuZFwiLFxuICAgICAgXCJFTkRcIixcbiAgICAgIFwiZW5zdXJlXCIsXG4gICAgICBcImZvclwiLFxuICAgICAgXCJpZlwiLFxuICAgICAgXCJpblwiLFxuICAgICAgXCJpbmNsdWRlXCIsXG4gICAgICBcIm1vZHVsZVwiLFxuICAgICAgXCJuZXh0XCIsXG4gICAgICBcIm5vdFwiLFxuICAgICAgXCJvclwiLFxuICAgICAgXCJyZWRvXCIsXG4gICAgICBcInJlcXVpcmVcIixcbiAgICAgIFwicmVzY3VlXCIsXG4gICAgICBcInJldHJ5XCIsXG4gICAgICBcInJldHVyblwiLFxuICAgICAgXCJ0aGVuXCIsXG4gICAgICBcInVuZGVmXCIsXG4gICAgICBcInVubGVzc1wiLFxuICAgICAgXCJ1bnRpbFwiLFxuICAgICAgXCJ3aGVuXCIsXG4gICAgICBcIndoaWxlXCIsXG4gICAgICBcInlpZWxkXCIsXG4gICAgXSxcbiAgICBidWlsdF9pbjogW1xuICAgICAgXCJwcm9jXCIsXG4gICAgICBcImxhbWJkYVwiXG4gICAgXSxcbiAgICBsaXRlcmFsOiBbXG4gICAgICBcInRydWVcIixcbiAgICAgIFwiZmFsc2VcIixcbiAgICAgIFwibmlsXCJcbiAgICBdXG4gIH07XG4gIGNvbnN0IFlBUkRPQ1RBRyA9IHtcbiAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgfTtcbiAgY29uc3QgSVJCX09CSkVDVCA9IHtcbiAgICBiZWdpbjogJyM8JyxcbiAgICBlbmQ6ICc+J1xuICB9O1xuICBjb25zdCBDT01NRU5UX01PREVTID0gW1xuICAgIGhsanMuQ09NTUVOVChcbiAgICAgICcjJyxcbiAgICAgICckJyxcbiAgICAgIHsgY29udGFpbnM6IFsgWUFSRE9DVEFHIF0gfVxuICAgICksXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgJ149YmVnaW4nLFxuICAgICAgJ149ZW5kJyxcbiAgICAgIHtcbiAgICAgICAgY29udGFpbnM6IFsgWUFSRE9DVEFHIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH1cbiAgICApLFxuICAgIGhsanMuQ09NTUVOVCgnXl9fRU5EX18nLCBobGpzLk1BVENIX05PVEhJTkdfUkUpXG4gIF07XG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogLyNcXHsvLFxuICAgIGVuZDogL1xcfS8sXG4gICAga2V5d29yZHM6IFJVQllfS0VZV09SRFNcbiAgfTtcbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFNVQlNUXG4gICAgXSxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICBlbmQ6IC8nL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cIi8sXG4gICAgICAgIGVuZDogL1wiL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9gLyxcbiAgICAgICAgZW5kOiAvYC9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJVtxUXdXeF0/XFwoLyxcbiAgICAgICAgZW5kOiAvXFwpL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8lW3FRd1d4XT9cXFsvLFxuICAgICAgICBlbmQ6IC9cXF0vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyVbcVF3V3hdP1xcey8sXG4gICAgICAgIGVuZDogL1xcfS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJVtxUXdXeF0/PC8sXG4gICAgICAgIGVuZDogLz4vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyVbcVF3V3hdP1xcLy8sXG4gICAgICAgIGVuZDogL1xcLy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJVtxUXdXeF0/JS8sXG4gICAgICAgIGVuZDogLyUvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyVbcVF3V3hdPy0vLFxuICAgICAgICBlbmQ6IC8tL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8lW3FRd1d4XT9cXHwvLFxuICAgICAgICBlbmQ6IC9cXHwvXG4gICAgICB9LFxuICAgICAgLy8gaW4gdGhlIGZvbGxvd2luZyBleHByZXNzaW9ucywgXFxCIGluIHRoZSBiZWdpbm5pbmcgc3VwcHJlc3NlcyByZWNvZ25pdGlvbiBvZiA/LXNlcXVlbmNlc1xuICAgICAgLy8gd2hlcmUgPyBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgYSBwcmVjZWRpbmcgaWRlbnRpZmllciwgYXMgaW46IGBmdW5jPzRgXG4gICAgICB7IGJlZ2luOiAvXFxCXFw/KFxcXFxcXGR7MSwzfSkvIH0sXG4gICAgICB7IGJlZ2luOiAvXFxCXFw/KFxcXFx4W0EtRmEtZjAtOV17MSwyfSkvIH0sXG4gICAgICB7IGJlZ2luOiAvXFxCXFw/KFxcXFx1XFx7P1tBLUZhLWYwLTldezEsNn1cXH0/KS8gfSxcbiAgICAgIHsgYmVnaW46IC9cXEJcXD8oXFxcXE0tXFxcXEMtfFxcXFxNLVxcXFxjfFxcXFxjXFxcXE0tfFxcXFxNLXxcXFxcQy1cXFxcTS0pW1xceDIwLVxceDdlXS8gfSxcbiAgICAgIHsgYmVnaW46IC9cXEJcXD9cXFxcKGN8Qy0pW1xceDIwLVxceDdlXS8gfSxcbiAgICAgIHsgYmVnaW46IC9cXEJcXD9cXFxcP1xcUy8gfSxcbiAgICAgIC8vIGhlcmVkb2NzXG4gICAgICB7XG4gICAgICAgIC8vIHRoaXMgZ3VhcmQgbWFrZXMgc3VyZSB0aGF0IHdlIGhhdmUgYW4gZW50aXJlIGhlcmVkb2MgYW5kIG5vdCBhIGZhbHNlXG4gICAgICAgIC8vIHBvc2l0aXZlIChhdXRvLWRldGVjdCwgZXRjLilcbiAgICAgICAgYmVnaW46IHJlZ2V4LmNvbmNhdChcbiAgICAgICAgICAvPDxbLX5dPyc/LyxcbiAgICAgICAgICByZWdleC5sb29rYWhlYWQoLyhcXHcrKSg/PVxcVylbXlxcbl0qXFxuKD86W15cXG5dKlxcbikqP1xccypcXDFcXGIvKVxuICAgICAgICApLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgICAgICAgICAgYmVnaW46IC8oXFx3KykvLFxuICAgICAgICAgICAgZW5kOiAvKFxcdyspLyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICAgICAgU1VCU1RcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIC8vIFJ1Ynkgc3ludGF4IGlzIHVuZGVyZG9jdW1lbnRlZCwgYnV0IHRoaXMgZ3JhbW1hciBzZWVtcyB0byBiZSBhY2N1cmF0ZVxuICAvLyBhcyBvZiB2ZXJzaW9uIDIuNy4yIChjb25maXJtZWQgd2l0aCAoaXJiIGFuZCBgUmlwcGVyLnNleHAoLi4uKWApXG4gIC8vIGh0dHBzOi8vZG9jcy5ydWJ5LWxhbmcub3JnL2VuLzIuNy4wL2RvYy9zeW50YXgvbGl0ZXJhbHNfcmRvYy5odG1sI2xhYmVsLU51bWJlcnNcbiAgY29uc3QgZGVjaW1hbCA9ICdbMS05XShfP1swLTldKSp8MCc7XG4gIGNvbnN0IGRpZ2l0cyA9ICdbMC05XShfP1swLTldKSonO1xuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIC8vIGRlY2ltYWwgaW50ZWdlci9mbG9hdCwgb3B0aW9uYWxseSBleHBvbmVudGlhbCBvciByYXRpb25hbCwgb3B0aW9uYWxseSBpbWFnaW5hcnlcbiAgICAgIHsgYmVnaW46IGBcXFxcYigke2RlY2ltYWx9KShcXFxcLigke2RpZ2l0c30pKT8oW2VFXVsrLV0/KCR7ZGlnaXRzfSl8cik/aT9cXFxcYmAgfSxcblxuICAgICAgLy8gZXhwbGljaXQgZGVjaW1hbC9iaW5hcnkvb2N0YWwvaGV4YWRlY2ltYWwgaW50ZWdlcixcbiAgICAgIC8vIG9wdGlvbmFsbHkgcmF0aW9uYWwgYW5kL29yIGltYWdpbmFyeVxuICAgICAgeyBiZWdpbjogXCJcXFxcYjBbZERdWzAtOV0oXz9bMC05XSkqcj9pP1xcXFxiXCIgfSxcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwW2JCXVswLTFdKF8/WzAtMV0pKnI/aT9cXFxcYlwiIH0sXG4gICAgICB7IGJlZ2luOiBcIlxcXFxiMFtvT11bMC03XShfP1swLTddKSpyP2k/XFxcXGJcIiB9LFxuICAgICAgeyBiZWdpbjogXCJcXFxcYjBbeFhdWzAtOWEtZkEtRl0oXz9bMC05YS1mQS1GXSkqcj9pP1xcXFxiXCIgfSxcblxuICAgICAgLy8gMC1wcmVmaXhlZCBpbXBsaWNpdCBvY3RhbCBpbnRlZ2VyLCBvcHRpb25hbGx5IHJhdGlvbmFsIGFuZC9vciBpbWFnaW5hcnlcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwKF8/WzAtN10pK3I/aT9cXFxcYlwiIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgUEFSQU1TID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAvXFwoXFwpLyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvKD89XFwpKS8sXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IFJVQllfS0VZV09SRFMsXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IENMQVNTX0RFRklOSVRJT04gPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAvY2xhc3NcXHMrLyxcbiAgICAgICAgICBDTEFTU19OQU1FX1dJVEhfTkFNRVNQQUNFX1JFLFxuICAgICAgICAgIC9cXHMrPFxccysvLFxuICAgICAgICAgIENMQVNTX05BTUVfV0lUSF9OQU1FU1BBQ0VfUkVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAvY2xhc3NcXHMrLyxcbiAgICAgICAgICBDTEFTU19OQU1FX1dJVEhfTkFNRVNQQUNFX1JFXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdLFxuICAgIHNjb3BlOiB7XG4gICAgICAyOiBcInRpdGxlLmNsYXNzXCIsXG4gICAgICA0OiBcInRpdGxlLmNsYXNzLmluaGVyaXRlZFwiXG4gICAgfSxcbiAgICBrZXl3b3JkczogUlVCWV9LRVlXT1JEU1xuICB9O1xuXG4gIGNvbnN0IFVQUEVSX0NBU0VfQ09OU1RBTlQgPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIG1hdGNoOiAvXFxiW0EtWl1bQS1aXzAtOV0rXFxiLyxcbiAgICBjbGFzc05hbWU6IFwidmFyaWFibGUuY29uc3RhbnRcIlxuICB9O1xuXG4gIGNvbnN0IE1FVEhPRF9ERUZJTklUSU9OID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvZGVmLywgL1xccysvLFxuICAgICAgUlVCWV9NRVRIT0RfUkVcbiAgICBdLFxuICAgIHNjb3BlOiB7XG4gICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgIDM6IFwidGl0bGUuZnVuY3Rpb25cIlxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFBBUkFNU1xuICAgIF1cbiAgfTtcblxuICBjb25zdCBPQkpFQ1RfQ1JFQVRJT04gPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIG1hdGNoOiBbXG4gICAgICBDTEFTU19OQU1FX1dJVEhfTkFNRVNQQUNFX1JFLFxuICAgICAgL1xcLm5ld1sgKF0vXG4gICAgXSxcbiAgICBzY29wZToge1xuICAgICAgMTogXCJ0aXRsZS5jbGFzc1wiXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IFJVQllfREVGQVVMVF9DT05UQUlOUyA9IFtcbiAgICBTVFJJTkcsXG4gICAgQ0xBU1NfREVGSU5JVElPTixcbiAgICBPQkpFQ1RfQ1JFQVRJT04sXG4gICAgVVBQRVJfQ0FTRV9DT05TVEFOVCxcbiAgICBNRVRIT0RfREVGSU5JVElPTixcbiAgICB7XG4gICAgICAvLyBzd2FsbG93IG5hbWVzcGFjZSBxdWFsaWZpZXJzIGJlZm9yZSBzeW1ib2xzXG4gICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICc6OicgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcoIXxcXFxcPyk/OicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICBiZWdpbjogJzooPyFcXFxccyknLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgU1RSSU5HLFxuICAgICAgICB7IGJlZ2luOiBSVUJZX01FVEhPRF9SRSB9XG4gICAgICBdLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICBOVU1CRVIsXG4gICAge1xuICAgICAgLy8gbmVnYXRpdmUtbG9vayBmb3J3YXJkIGF0dGVtcHRzIHRvIHByZXZlbnQgZmFsc2UgbWF0Y2hlcyBsaWtlOlxuICAgICAgLy8gQGlkZW50QCBvciAkaWRlbnQkIHRoYXQgbWlnaHQgaW5kaWNhdGUgdGhpcyBpcyBub3QgcnVieSBhdCBhbGxcbiAgICAgIGNsYXNzTmFtZTogXCJ2YXJpYWJsZVwiLFxuICAgICAgYmVnaW46ICcoXFxcXCRcXFxcVyl8KChcXFxcJHxAQD8pKFxcXFx3KykpKD89W15AJD9dKScgKyBgKD8hW0EtWmEtel0pKD8hW0AkPyddKWBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICBiZWdpbjogL1xcfC8sXG4gICAgICBlbmQ6IC9cXHwvLFxuICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIHJlbGV2YW5jZTogMCwgLy8gdGhpcyBjb3VsZCBiZSBhIGxvdCBvZiB0aGluZ3MgKGluIG90aGVyIGxhbmd1YWdlcykgb3RoZXIgdGhhbiBwYXJhbXNcbiAgICAgIGtleXdvcmRzOiBSVUJZX0tFWVdPUkRTXG4gICAgfSxcbiAgICB7IC8vIHJlZ2V4cCBjb250YWluZXJcbiAgICAgIGJlZ2luOiAnKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3x1bmxlc3MpXFxcXHMqJyxcbiAgICAgIGtleXdvcmRzOiAndW5sZXNzJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgICBTVUJTVFxuICAgICAgICAgIF0sXG4gICAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmVnaW46ICcvJyxcbiAgICAgICAgICAgICAgZW5kOiAnL1thLXpdKidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAvJXJcXHsvLFxuICAgICAgICAgICAgICBlbmQ6IC9cXH1bYS16XSovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbjogJyVyXFxcXCgnLFxuICAgICAgICAgICAgICBlbmQ6ICdcXFxcKVthLXpdKidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAnJXIhJyxcbiAgICAgICAgICAgICAgZW5kOiAnIVthLXpdKidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAnJXJcXFxcWycsXG4gICAgICAgICAgICAgIGVuZDogJ1xcXFxdW2Etel0qJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXS5jb25jYXQoSVJCX09CSkVDVCwgQ09NTUVOVF9NT0RFUyksXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gIF0uY29uY2F0KElSQl9PQkpFQ1QsIENPTU1FTlRfTU9ERVMpO1xuXG4gIFNVQlNULmNvbnRhaW5zID0gUlVCWV9ERUZBVUxUX0NPTlRBSU5TO1xuICBQQVJBTVMuY29udGFpbnMgPSBSVUJZX0RFRkFVTFRfQ09OVEFJTlM7XG5cbiAgLy8gPj5cbiAgLy8gPz5cbiAgY29uc3QgU0lNUExFX1BST01QVCA9IFwiWz4/XT5cIjtcbiAgLy8gaXJiKG1haW4pOjAwMTowPlxuICBjb25zdCBERUZBVUxUX1BST01QVCA9IFwiW1xcXFx3I10rXFxcXChcXFxcdytcXFxcKTpcXFxcZCs6XFxcXGQrWz4qXVwiO1xuICBjb25zdCBSVk1fUFJPTVBUID0gXCIoXFxcXHcrLSk/XFxcXGQrXFxcXC5cXFxcZCtcXFxcLlxcXFxkKyhwXFxcXGQrKT9bXlxcXFxkXVtePl0rPlwiO1xuXG4gIGNvbnN0IElSQl9ERUZBVUxUID0gW1xuICAgIHtcbiAgICAgIGJlZ2luOiAvXlxccyo9Pi8sXG4gICAgICBzdGFydHM6IHtcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBSVUJZX0RFRkFVTFRfQ09OVEFJTlNcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ21ldGEucHJvbXB0JyxcbiAgICAgIGJlZ2luOiAnXignICsgU0lNUExFX1BST01QVCArIFwifFwiICsgREVGQVVMVF9QUk9NUFQgKyAnfCcgKyBSVk1fUFJPTVBUICsgJykoPz1bIF0pJyxcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6IFJVQllfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBSVUJZX0RFRkFVTFRfQ09OVEFJTlNcbiAgICAgIH1cbiAgICB9XG4gIF07XG5cbiAgQ09NTUVOVF9NT0RFUy51bnNoaWZ0KElSQl9PQkpFQ1QpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1J1YnknLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdyYicsXG4gICAgICAnZ2Vtc3BlYycsXG4gICAgICAncG9kc3BlYycsXG4gICAgICAndGhvcicsXG4gICAgICAnaXJiJ1xuICAgIF0sXG4gICAga2V5d29yZHM6IFJVQllfS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IFsgaGxqcy5TSEVCQU5HKHsgYmluYXJ5OiBcInJ1YnlcIiB9KSBdXG4gICAgICAuY29uY2F0KElSQl9ERUZBVUxUKVxuICAgICAgLmNvbmNhdChDT01NRU5UX01PREVTKVxuICAgICAgLmNvbmNhdChSVUJZX0RFRkFVTFRfQ09OVEFJTlMpXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcnVieTtcbiIsIi8qXG5MYW5ndWFnZTogUnVzdFxuQXV0aG9yOiBBbmRyZXkgVmxhc292c2tpa2ggPGFuZHJleS52bGFzb3Zza2lraEBnbWFpbC5jb20+XG5Db250cmlidXRvcnM6IFJvbWFuIFNobWF0b3YgPHJvbWFuc2htYXRvdkBnbWFpbC5jb20+LCBLYXNwZXIgQW5kZXJzZW4gPGttYV91bnRydXN0ZWRAcHJvdG9ubWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL3d3dy5ydXN0LWxhbmcub3JnXG5DYXRlZ29yeTogY29tbW9uLCBzeXN0ZW1cbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBydXN0KGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICBjb25zdCBGVU5DVElPTl9JTlZPS0UgPSB7XG4gICAgY2xhc3NOYW1lOiBcInRpdGxlLmZ1bmN0aW9uLmludm9rZVwiLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogcmVnZXguY29uY2F0KFxuICAgICAgL1xcYi8sXG4gICAgICAvKD8hbGV0XFxiKS8sXG4gICAgICBobGpzLklERU5UX1JFLFxuICAgICAgcmVnZXgubG9va2FoZWFkKC9cXHMqXFwoLykpXG4gIH07XG4gIGNvbnN0IE5VTUJFUl9TVUZGSVggPSAnKFt1aV0oOHwxNnwzMnw2NHwxMjh8c2l6ZSl8ZigzMnw2NCkpXFw/JztcbiAgY29uc3QgS0VZV09SRFMgPSBbXG4gICAgXCJhYnN0cmFjdFwiLFxuICAgIFwiYXNcIixcbiAgICBcImFzeW5jXCIsXG4gICAgXCJhd2FpdFwiLFxuICAgIFwiYmVjb21lXCIsXG4gICAgXCJib3hcIixcbiAgICBcImJyZWFrXCIsXG4gICAgXCJjb25zdFwiLFxuICAgIFwiY29udGludWVcIixcbiAgICBcImNyYXRlXCIsXG4gICAgXCJkb1wiLFxuICAgIFwiZHluXCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJlbnVtXCIsXG4gICAgXCJleHRlcm5cIixcbiAgICBcImZhbHNlXCIsXG4gICAgXCJmaW5hbFwiLFxuICAgIFwiZm5cIixcbiAgICBcImZvclwiLFxuICAgIFwiaWZcIixcbiAgICBcImltcGxcIixcbiAgICBcImluXCIsXG4gICAgXCJsZXRcIixcbiAgICBcImxvb3BcIixcbiAgICBcIm1hY3JvXCIsXG4gICAgXCJtYXRjaFwiLFxuICAgIFwibW9kXCIsXG4gICAgXCJtb3ZlXCIsXG4gICAgXCJtdXRcIixcbiAgICBcIm92ZXJyaWRlXCIsXG4gICAgXCJwcml2XCIsXG4gICAgXCJwdWJcIixcbiAgICBcInJlZlwiLFxuICAgIFwicmV0dXJuXCIsXG4gICAgXCJzZWxmXCIsXG4gICAgXCJTZWxmXCIsXG4gICAgXCJzdGF0aWNcIixcbiAgICBcInN0cnVjdFwiLFxuICAgIFwic3VwZXJcIixcbiAgICBcInRyYWl0XCIsXG4gICAgXCJ0cnVlXCIsXG4gICAgXCJ0cnlcIixcbiAgICBcInR5cGVcIixcbiAgICBcInR5cGVvZlwiLFxuICAgIFwidW5zYWZlXCIsXG4gICAgXCJ1bnNpemVkXCIsXG4gICAgXCJ1c2VcIixcbiAgICBcInZpcnR1YWxcIixcbiAgICBcIndoZXJlXCIsXG4gICAgXCJ3aGlsZVwiLFxuICAgIFwieWllbGRcIlxuICBdO1xuICBjb25zdCBMSVRFUkFMUyA9IFtcbiAgICBcInRydWVcIixcbiAgICBcImZhbHNlXCIsXG4gICAgXCJTb21lXCIsXG4gICAgXCJOb25lXCIsXG4gICAgXCJPa1wiLFxuICAgIFwiRXJyXCJcbiAgXTtcbiAgY29uc3QgQlVJTFRJTlMgPSBbXG4gICAgLy8gZnVuY3Rpb25zXG4gICAgJ2Ryb3AgJyxcbiAgICAvLyB0cmFpdHNcbiAgICBcIkNvcHlcIixcbiAgICBcIlNlbmRcIixcbiAgICBcIlNpemVkXCIsXG4gICAgXCJTeW5jXCIsXG4gICAgXCJEcm9wXCIsXG4gICAgXCJGblwiLFxuICAgIFwiRm5NdXRcIixcbiAgICBcIkZuT25jZVwiLFxuICAgIFwiVG9Pd25lZFwiLFxuICAgIFwiQ2xvbmVcIixcbiAgICBcIkRlYnVnXCIsXG4gICAgXCJQYXJ0aWFsRXFcIixcbiAgICBcIlBhcnRpYWxPcmRcIixcbiAgICBcIkVxXCIsXG4gICAgXCJPcmRcIixcbiAgICBcIkFzUmVmXCIsXG4gICAgXCJBc011dFwiLFxuICAgIFwiSW50b1wiLFxuICAgIFwiRnJvbVwiLFxuICAgIFwiRGVmYXVsdFwiLFxuICAgIFwiSXRlcmF0b3JcIixcbiAgICBcIkV4dGVuZFwiLFxuICAgIFwiSW50b0l0ZXJhdG9yXCIsXG4gICAgXCJEb3VibGVFbmRlZEl0ZXJhdG9yXCIsXG4gICAgXCJFeGFjdFNpemVJdGVyYXRvclwiLFxuICAgIFwiU2xpY2VDb25jYXRFeHRcIixcbiAgICBcIlRvU3RyaW5nXCIsXG4gICAgLy8gbWFjcm9zXG4gICAgXCJhc3NlcnQhXCIsXG4gICAgXCJhc3NlcnRfZXEhXCIsXG4gICAgXCJiaXRmbGFncyFcIixcbiAgICBcImJ5dGVzIVwiLFxuICAgIFwiY2ZnIVwiLFxuICAgIFwiY29sIVwiLFxuICAgIFwiY29uY2F0IVwiLFxuICAgIFwiY29uY2F0X2lkZW50cyFcIixcbiAgICBcImRlYnVnX2Fzc2VydCFcIixcbiAgICBcImRlYnVnX2Fzc2VydF9lcSFcIixcbiAgICBcImVudiFcIixcbiAgICBcInBhbmljIVwiLFxuICAgIFwiZmlsZSFcIixcbiAgICBcImZvcm1hdCFcIixcbiAgICBcImZvcm1hdF9hcmdzIVwiLFxuICAgIFwiaW5jbHVkZV9ieXRlcyFcIixcbiAgICBcImluY2x1ZGVfc3RyIVwiLFxuICAgIFwibGluZSFcIixcbiAgICBcImxvY2FsX2RhdGFfa2V5IVwiLFxuICAgIFwibW9kdWxlX3BhdGghXCIsXG4gICAgXCJvcHRpb25fZW52IVwiLFxuICAgIFwicHJpbnQhXCIsXG4gICAgXCJwcmludGxuIVwiLFxuICAgIFwic2VsZWN0IVwiLFxuICAgIFwic3RyaW5naWZ5IVwiLFxuICAgIFwidHJ5IVwiLFxuICAgIFwidW5pbXBsZW1lbnRlZCFcIixcbiAgICBcInVucmVhY2hhYmxlIVwiLFxuICAgIFwidmVjIVwiLFxuICAgIFwid3JpdGUhXCIsXG4gICAgXCJ3cml0ZWxuIVwiLFxuICAgIFwibWFjcm9fcnVsZXMhXCIsXG4gICAgXCJhc3NlcnRfbmUhXCIsXG4gICAgXCJkZWJ1Z19hc3NlcnRfbmUhXCJcbiAgXTtcbiAgY29uc3QgVFlQRVMgPSBbXG4gICAgXCJpOFwiLFxuICAgIFwiaTE2XCIsXG4gICAgXCJpMzJcIixcbiAgICBcImk2NFwiLFxuICAgIFwiaTEyOFwiLFxuICAgIFwiaXNpemVcIixcbiAgICBcInU4XCIsXG4gICAgXCJ1MTZcIixcbiAgICBcInUzMlwiLFxuICAgIFwidTY0XCIsXG4gICAgXCJ1MTI4XCIsXG4gICAgXCJ1c2l6ZVwiLFxuICAgIFwiZjMyXCIsXG4gICAgXCJmNjRcIixcbiAgICBcInN0clwiLFxuICAgIFwiY2hhclwiLFxuICAgIFwiYm9vbFwiLFxuICAgIFwiQm94XCIsXG4gICAgXCJPcHRpb25cIixcbiAgICBcIlJlc3VsdFwiLFxuICAgIFwiU3RyaW5nXCIsXG4gICAgXCJWZWNcIlxuICBdO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdSdXN0JyxcbiAgICBhbGlhc2VzOiBbICdycycgXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IGhsanMuSURFTlRfUkUgKyAnIT8nLFxuICAgICAgdHlwZTogVFlQRVMsXG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgICAgYnVpbHRfaW46IEJVSUxUSU5TXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJy9cXFxcKicsICdcXFxcKi8nLCB7IGNvbnRhaW5zOiBbICdzZWxmJyBdIH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtcbiAgICAgICAgYmVnaW46IC9iP1wiLyxcbiAgICAgICAgaWxsZWdhbDogbnVsbFxuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogL2I/cigjKilcIigufFxcbikqP1wiXFwxKD8hIykvIH0sXG4gICAgICAgICAgeyBiZWdpbjogL2I/J1xcXFw/KHhcXHd7Mn18dVxcd3s0fXxVXFx3ezh9fC4pJy8gfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogLydbYS16QS1aX11bYS16QS1aMC05X10qL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIwYihbMDFfXSspJyArIE5VTUJFUl9TVUZGSVggfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIwbyhbMC03X10rKScgKyBOVU1CRVJfU1VGRklYIH0sXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFxiMHgoW0EtRmEtZjAtOV9dKyknICsgTlVNQkVSX1NVRkZJWCB9LFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYihcXFxcZFtcXFxcZF9dKihcXFxcLlswLTlfXSspPyhbZUVdWystXT9bMC05X10rKT8pJ1xuICAgICAgICAgICAgICAgICAgICsgTlVNQkVSX1NVRkZJWCB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFtcbiAgICAgICAgICAvZm4vLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfSURFTlRfUkVcbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3NOYW1lOiB7XG4gICAgICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAgICAgMzogXCJ0aXRsZS5mdW5jdGlvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyMhP1xcXFxbJyxcbiAgICAgICAgZW5kOiAnXFxcXF0nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogL1wiLyxcbiAgICAgICAgICAgIGVuZDogL1wiL1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFtcbiAgICAgICAgICAvbGV0LyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgLyg/Om11dFxccyspPy8sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzTmFtZToge1xuICAgICAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDM6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDQ6IFwidmFyaWFibGVcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gbXVzdCBjb21lIGJlZm9yZSBpbXBsL2ZvciBydWxlIGxhdGVyXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBbXG4gICAgICAgICAgL2Zvci8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgL2luL1xuICAgICAgICBdLFxuICAgICAgICBjbGFzc05hbWU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInZhcmlhYmxlXCIsXG4gICAgICAgICAgNTogXCJrZXl3b3JkXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFtcbiAgICAgICAgICAvdHlwZS8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICAgICAgICBdLFxuICAgICAgICBjbGFzc05hbWU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInRpdGxlLmNsYXNzXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFtcbiAgICAgICAgICAvKD86dHJhaXR8ZW51bXxzdHJ1Y3R8dW5pb258aW1wbHxmb3IpLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzTmFtZToge1xuICAgICAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDM6IFwidGl0bGUuY2xhc3NcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICc6OicsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAga2V5d29yZDogXCJTZWxmXCIsXG4gICAgICAgICAgYnVpbHRfaW46IEJVSUxUSU5TLFxuICAgICAgICAgIHR5cGU6IFRZUEVTXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJwdW5jdHVhdGlvblwiLFxuICAgICAgICBiZWdpbjogJy0+J1xuICAgICAgfSxcbiAgICAgIEZVTkNUSU9OX0lOVk9LRVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBydXN0O1xuIiwiY29uc3QgTU9ERVMgPSAoaGxqcykgPT4ge1xuICByZXR1cm4ge1xuICAgIElNUE9SVEFOVDoge1xuICAgICAgc2NvcGU6ICdtZXRhJyxcbiAgICAgIGJlZ2luOiAnIWltcG9ydGFudCdcbiAgICB9LFxuICAgIEJMT0NLX0NPTU1FTlQ6IGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgSEVYQ09MT1I6IHtcbiAgICAgIHNjb3BlOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAvIygoWzAtOWEtZkEtRl17Myw0fSl8KChbMC05YS1mQS1GXXsyfSl7Myw0fSkpXFxiL1xuICAgIH0sXG4gICAgRlVOQ1RJT05fRElTUEFUQ0g6IHtcbiAgICAgIGNsYXNzTmFtZTogXCJidWlsdF9pblwiLFxuICAgICAgYmVnaW46IC9bXFx3LV0rKD89XFwoKS9cbiAgICB9LFxuICAgIEFUVFJJQlVURV9TRUxFQ1RPUl9NT0RFOiB7XG4gICAgICBzY29wZTogJ3NlbGVjdG9yLWF0dHInLFxuICAgICAgYmVnaW46IC9cXFsvLFxuICAgICAgZW5kOiAvXFxdLyxcbiAgICAgIGlsbGVnYWw6ICckJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgXVxuICAgIH0sXG4gICAgQ1NTX05VTUJFUl9NT0RFOiB7XG4gICAgICBzY29wZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogaGxqcy5OVU1CRVJfUkUgKyAnKCcgK1xuICAgICAgICAnJXxlbXxleHxjaHxyZW0nICtcbiAgICAgICAgJ3x2d3x2aHx2bWlufHZtYXgnICtcbiAgICAgICAgJ3xjbXxtbXxpbnxwdHxwY3xweCcgK1xuICAgICAgICAnfGRlZ3xncmFkfHJhZHx0dXJuJyArXG4gICAgICAgICd8c3xtcycgK1xuICAgICAgICAnfEh6fGtIeicgK1xuICAgICAgICAnfGRwaXxkcGNtfGRwcHgnICtcbiAgICAgICAgJyk/JyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAgQ1NTX1ZBUklBQkxFOiB7XG4gICAgICBjbGFzc05hbWU6IFwiYXR0clwiLFxuICAgICAgYmVnaW46IC8tLVtBLVphLXpdW0EtWmEtejAtOV8tXSovXG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgVEFHUyA9IFtcbiAgJ2EnLFxuICAnYWJicicsXG4gICdhZGRyZXNzJyxcbiAgJ2FydGljbGUnLFxuICAnYXNpZGUnLFxuICAnYXVkaW8nLFxuICAnYicsXG4gICdibG9ja3F1b3RlJyxcbiAgJ2JvZHknLFxuICAnYnV0dG9uJyxcbiAgJ2NhbnZhcycsXG4gICdjYXB0aW9uJyxcbiAgJ2NpdGUnLFxuICAnY29kZScsXG4gICdkZCcsXG4gICdkZWwnLFxuICAnZGV0YWlscycsXG4gICdkZm4nLFxuICAnZGl2JyxcbiAgJ2RsJyxcbiAgJ2R0JyxcbiAgJ2VtJyxcbiAgJ2ZpZWxkc2V0JyxcbiAgJ2ZpZ2NhcHRpb24nLFxuICAnZmlndXJlJyxcbiAgJ2Zvb3RlcicsXG4gICdmb3JtJyxcbiAgJ2gxJyxcbiAgJ2gyJyxcbiAgJ2gzJyxcbiAgJ2g0JyxcbiAgJ2g1JyxcbiAgJ2g2JyxcbiAgJ2hlYWRlcicsXG4gICdoZ3JvdXAnLFxuICAnaHRtbCcsXG4gICdpJyxcbiAgJ2lmcmFtZScsXG4gICdpbWcnLFxuICAnaW5wdXQnLFxuICAnaW5zJyxcbiAgJ2tiZCcsXG4gICdsYWJlbCcsXG4gICdsZWdlbmQnLFxuICAnbGknLFxuICAnbWFpbicsXG4gICdtYXJrJyxcbiAgJ21lbnUnLFxuICAnbmF2JyxcbiAgJ29iamVjdCcsXG4gICdvbCcsXG4gICdwJyxcbiAgJ3EnLFxuICAncXVvdGUnLFxuICAnc2FtcCcsXG4gICdzZWN0aW9uJyxcbiAgJ3NwYW4nLFxuICAnc3Ryb25nJyxcbiAgJ3N1bW1hcnknLFxuICAnc3VwJyxcbiAgJ3RhYmxlJyxcbiAgJ3Rib2R5JyxcbiAgJ3RkJyxcbiAgJ3RleHRhcmVhJyxcbiAgJ3Rmb290JyxcbiAgJ3RoJyxcbiAgJ3RoZWFkJyxcbiAgJ3RpbWUnLFxuICAndHInLFxuICAndWwnLFxuICAndmFyJyxcbiAgJ3ZpZGVvJ1xuXTtcblxuY29uc3QgTUVESUFfRkVBVFVSRVMgPSBbXG4gICdhbnktaG92ZXInLFxuICAnYW55LXBvaW50ZXInLFxuICAnYXNwZWN0LXJhdGlvJyxcbiAgJ2NvbG9yJyxcbiAgJ2NvbG9yLWdhbXV0JyxcbiAgJ2NvbG9yLWluZGV4JyxcbiAgJ2RldmljZS1hc3BlY3QtcmF0aW8nLFxuICAnZGV2aWNlLWhlaWdodCcsXG4gICdkZXZpY2Utd2lkdGgnLFxuICAnZGlzcGxheS1tb2RlJyxcbiAgJ2ZvcmNlZC1jb2xvcnMnLFxuICAnZ3JpZCcsXG4gICdoZWlnaHQnLFxuICAnaG92ZXInLFxuICAnaW52ZXJ0ZWQtY29sb3JzJyxcbiAgJ21vbm9jaHJvbWUnLFxuICAnb3JpZW50YXRpb24nLFxuICAnb3ZlcmZsb3ctYmxvY2snLFxuICAnb3ZlcmZsb3ctaW5saW5lJyxcbiAgJ3BvaW50ZXInLFxuICAncHJlZmVycy1jb2xvci1zY2hlbWUnLFxuICAncHJlZmVycy1jb250cmFzdCcsXG4gICdwcmVmZXJzLXJlZHVjZWQtbW90aW9uJyxcbiAgJ3ByZWZlcnMtcmVkdWNlZC10cmFuc3BhcmVuY3knLFxuICAncmVzb2x1dGlvbicsXG4gICdzY2FuJyxcbiAgJ3NjcmlwdGluZycsXG4gICd1cGRhdGUnLFxuICAnd2lkdGgnLFxuICAvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIHNvbHV0aW9uP1xuICAnbWluLXdpZHRoJyxcbiAgJ21heC13aWR0aCcsXG4gICdtaW4taGVpZ2h0JyxcbiAgJ21heC1oZWlnaHQnXG5dO1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvUHNldWRvLWNsYXNzZXNcbmNvbnN0IFBTRVVET19DTEFTU0VTID0gW1xuICAnYWN0aXZlJyxcbiAgJ2FueS1saW5rJyxcbiAgJ2JsYW5rJyxcbiAgJ2NoZWNrZWQnLFxuICAnY3VycmVudCcsXG4gICdkZWZhdWx0JyxcbiAgJ2RlZmluZWQnLFxuICAnZGlyJywgLy8gZGlyKClcbiAgJ2Rpc2FibGVkJyxcbiAgJ2Ryb3AnLFxuICAnZW1wdHknLFxuICAnZW5hYmxlZCcsXG4gICdmaXJzdCcsXG4gICdmaXJzdC1jaGlsZCcsXG4gICdmaXJzdC1vZi10eXBlJyxcbiAgJ2Z1bGxzY3JlZW4nLFxuICAnZnV0dXJlJyxcbiAgJ2ZvY3VzJyxcbiAgJ2ZvY3VzLXZpc2libGUnLFxuICAnZm9jdXMtd2l0aGluJyxcbiAgJ2hhcycsIC8vIGhhcygpXG4gICdob3N0JywgLy8gaG9zdCBvciBob3N0KClcbiAgJ2hvc3QtY29udGV4dCcsIC8vIGhvc3QtY29udGV4dCgpXG4gICdob3ZlcicsXG4gICdpbmRldGVybWluYXRlJyxcbiAgJ2luLXJhbmdlJyxcbiAgJ2ludmFsaWQnLFxuICAnaXMnLCAvLyBpcygpXG4gICdsYW5nJywgLy8gbGFuZygpXG4gICdsYXN0LWNoaWxkJyxcbiAgJ2xhc3Qtb2YtdHlwZScsXG4gICdsZWZ0JyxcbiAgJ2xpbmsnLFxuICAnbG9jYWwtbGluaycsXG4gICdub3QnLCAvLyBub3QoKVxuICAnbnRoLWNoaWxkJywgLy8gbnRoLWNoaWxkKClcbiAgJ250aC1jb2wnLCAvLyBudGgtY29sKClcbiAgJ250aC1sYXN0LWNoaWxkJywgLy8gbnRoLWxhc3QtY2hpbGQoKVxuICAnbnRoLWxhc3QtY29sJywgLy8gbnRoLWxhc3QtY29sKClcbiAgJ250aC1sYXN0LW9mLXR5cGUnLCAvL250aC1sYXN0LW9mLXR5cGUoKVxuICAnbnRoLW9mLXR5cGUnLCAvL250aC1vZi10eXBlKClcbiAgJ29ubHktY2hpbGQnLFxuICAnb25seS1vZi10eXBlJyxcbiAgJ29wdGlvbmFsJyxcbiAgJ291dC1vZi1yYW5nZScsXG4gICdwYXN0JyxcbiAgJ3BsYWNlaG9sZGVyLXNob3duJyxcbiAgJ3JlYWQtb25seScsXG4gICdyZWFkLXdyaXRlJyxcbiAgJ3JlcXVpcmVkJyxcbiAgJ3JpZ2h0JyxcbiAgJ3Jvb3QnLFxuICAnc2NvcGUnLFxuICAndGFyZ2V0JyxcbiAgJ3RhcmdldC13aXRoaW4nLFxuICAndXNlci1pbnZhbGlkJyxcbiAgJ3ZhbGlkJyxcbiAgJ3Zpc2l0ZWQnLFxuICAnd2hlcmUnIC8vIHdoZXJlKClcbl07XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Qc2V1ZG8tZWxlbWVudHNcbmNvbnN0IFBTRVVET19FTEVNRU5UUyA9IFtcbiAgJ2FmdGVyJyxcbiAgJ2JhY2tkcm9wJyxcbiAgJ2JlZm9yZScsXG4gICdjdWUnLFxuICAnY3VlLXJlZ2lvbicsXG4gICdmaXJzdC1sZXR0ZXInLFxuICAnZmlyc3QtbGluZScsXG4gICdncmFtbWFyLWVycm9yJyxcbiAgJ21hcmtlcicsXG4gICdwYXJ0JyxcbiAgJ3BsYWNlaG9sZGVyJyxcbiAgJ3NlbGVjdGlvbicsXG4gICdzbG90dGVkJyxcbiAgJ3NwZWxsaW5nLWVycm9yJ1xuXTtcblxuY29uc3QgQVRUUklCVVRFUyA9IFtcbiAgJ2FsaWduLWNvbnRlbnQnLFxuICAnYWxpZ24taXRlbXMnLFxuICAnYWxpZ24tc2VsZicsXG4gICdhbGwnLFxuICAnYW5pbWF0aW9uJyxcbiAgJ2FuaW1hdGlvbi1kZWxheScsXG4gICdhbmltYXRpb24tZGlyZWN0aW9uJyxcbiAgJ2FuaW1hdGlvbi1kdXJhdGlvbicsXG4gICdhbmltYXRpb24tZmlsbC1tb2RlJyxcbiAgJ2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQnLFxuICAnYW5pbWF0aW9uLW5hbWUnLFxuICAnYW5pbWF0aW9uLXBsYXktc3RhdGUnLFxuICAnYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbicsXG4gICdiYWNrZmFjZS12aXNpYmlsaXR5JyxcbiAgJ2JhY2tncm91bmQnLFxuICAnYmFja2dyb3VuZC1hdHRhY2htZW50JyxcbiAgJ2JhY2tncm91bmQtYmxlbmQtbW9kZScsXG4gICdiYWNrZ3JvdW5kLWNsaXAnLFxuICAnYmFja2dyb3VuZC1jb2xvcicsXG4gICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgJ2JhY2tncm91bmQtb3JpZ2luJyxcbiAgJ2JhY2tncm91bmQtcG9zaXRpb24nLFxuICAnYmFja2dyb3VuZC1yZXBlYXQnLFxuICAnYmFja2dyb3VuZC1zaXplJyxcbiAgJ2Jsb2NrLXNpemUnLFxuICAnYm9yZGVyJyxcbiAgJ2JvcmRlci1ibG9jaycsXG4gICdib3JkZXItYmxvY2stY29sb3InLFxuICAnYm9yZGVyLWJsb2NrLWVuZCcsXG4gICdib3JkZXItYmxvY2stZW5kLWNvbG9yJyxcbiAgJ2JvcmRlci1ibG9jay1lbmQtc3R5bGUnLFxuICAnYm9yZGVyLWJsb2NrLWVuZC13aWR0aCcsXG4gICdib3JkZXItYmxvY2stc3RhcnQnLFxuICAnYm9yZGVyLWJsb2NrLXN0YXJ0LWNvbG9yJyxcbiAgJ2JvcmRlci1ibG9jay1zdGFydC1zdHlsZScsXG4gICdib3JkZXItYmxvY2stc3RhcnQtd2lkdGgnLFxuICAnYm9yZGVyLWJsb2NrLXN0eWxlJyxcbiAgJ2JvcmRlci1ibG9jay13aWR0aCcsXG4gICdib3JkZXItYm90dG9tJyxcbiAgJ2JvcmRlci1ib3R0b20tY29sb3InLFxuICAnYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLXN0eWxlJyxcbiAgJ2JvcmRlci1ib3R0b20td2lkdGgnLFxuICAnYm9yZGVyLWNvbGxhcHNlJyxcbiAgJ2JvcmRlci1jb2xvcicsXG4gICdib3JkZXItaW1hZ2UnLFxuICAnYm9yZGVyLWltYWdlLW91dHNldCcsXG4gICdib3JkZXItaW1hZ2UtcmVwZWF0JyxcbiAgJ2JvcmRlci1pbWFnZS1zbGljZScsXG4gICdib3JkZXItaW1hZ2Utc291cmNlJyxcbiAgJ2JvcmRlci1pbWFnZS13aWR0aCcsXG4gICdib3JkZXItaW5saW5lJyxcbiAgJ2JvcmRlci1pbmxpbmUtY29sb3InLFxuICAnYm9yZGVyLWlubGluZS1lbmQnLFxuICAnYm9yZGVyLWlubGluZS1lbmQtY29sb3InLFxuICAnYm9yZGVyLWlubGluZS1lbmQtc3R5bGUnLFxuICAnYm9yZGVyLWlubGluZS1lbmQtd2lkdGgnLFxuICAnYm9yZGVyLWlubGluZS1zdGFydCcsXG4gICdib3JkZXItaW5saW5lLXN0YXJ0LWNvbG9yJyxcbiAgJ2JvcmRlci1pbmxpbmUtc3RhcnQtc3R5bGUnLFxuICAnYm9yZGVyLWlubGluZS1zdGFydC13aWR0aCcsXG4gICdib3JkZXItaW5saW5lLXN0eWxlJyxcbiAgJ2JvcmRlci1pbmxpbmUtd2lkdGgnLFxuICAnYm9yZGVyLWxlZnQnLFxuICAnYm9yZGVyLWxlZnQtY29sb3InLFxuICAnYm9yZGVyLWxlZnQtc3R5bGUnLFxuICAnYm9yZGVyLWxlZnQtd2lkdGgnLFxuICAnYm9yZGVyLXJhZGl1cycsXG4gICdib3JkZXItcmlnaHQnLFxuICAnYm9yZGVyLXJpZ2h0LWNvbG9yJyxcbiAgJ2JvcmRlci1yaWdodC1zdHlsZScsXG4gICdib3JkZXItcmlnaHQtd2lkdGgnLFxuICAnYm9yZGVyLXNwYWNpbmcnLFxuICAnYm9yZGVyLXN0eWxlJyxcbiAgJ2JvcmRlci10b3AnLFxuICAnYm9yZGVyLXRvcC1jb2xvcicsXG4gICdib3JkZXItdG9wLWxlZnQtcmFkaXVzJyxcbiAgJ2JvcmRlci10b3AtcmlnaHQtcmFkaXVzJyxcbiAgJ2JvcmRlci10b3Atc3R5bGUnLFxuICAnYm9yZGVyLXRvcC13aWR0aCcsXG4gICdib3JkZXItd2lkdGgnLFxuICAnYm90dG9tJyxcbiAgJ2JveC1kZWNvcmF0aW9uLWJyZWFrJyxcbiAgJ2JveC1zaGFkb3cnLFxuICAnYm94LXNpemluZycsXG4gICdicmVhay1hZnRlcicsXG4gICdicmVhay1iZWZvcmUnLFxuICAnYnJlYWstaW5zaWRlJyxcbiAgJ2NhcHRpb24tc2lkZScsXG4gICdjYXJldC1jb2xvcicsXG4gICdjbGVhcicsXG4gICdjbGlwJyxcbiAgJ2NsaXAtcGF0aCcsXG4gICdjbGlwLXJ1bGUnLFxuICAnY29sb3InLFxuICAnY29sdW1uLWNvdW50JyxcbiAgJ2NvbHVtbi1maWxsJyxcbiAgJ2NvbHVtbi1nYXAnLFxuICAnY29sdW1uLXJ1bGUnLFxuICAnY29sdW1uLXJ1bGUtY29sb3InLFxuICAnY29sdW1uLXJ1bGUtc3R5bGUnLFxuICAnY29sdW1uLXJ1bGUtd2lkdGgnLFxuICAnY29sdW1uLXNwYW4nLFxuICAnY29sdW1uLXdpZHRoJyxcbiAgJ2NvbHVtbnMnLFxuICAnY29udGFpbicsXG4gICdjb250ZW50JyxcbiAgJ2NvbnRlbnQtdmlzaWJpbGl0eScsXG4gICdjb3VudGVyLWluY3JlbWVudCcsXG4gICdjb3VudGVyLXJlc2V0JyxcbiAgJ2N1ZScsXG4gICdjdWUtYWZ0ZXInLFxuICAnY3VlLWJlZm9yZScsXG4gICdjdXJzb3InLFxuICAnZGlyZWN0aW9uJyxcbiAgJ2Rpc3BsYXknLFxuICAnZW1wdHktY2VsbHMnLFxuICAnZmlsdGVyJyxcbiAgJ2ZsZXgnLFxuICAnZmxleC1iYXNpcycsXG4gICdmbGV4LWRpcmVjdGlvbicsXG4gICdmbGV4LWZsb3cnLFxuICAnZmxleC1ncm93JyxcbiAgJ2ZsZXgtc2hyaW5rJyxcbiAgJ2ZsZXgtd3JhcCcsXG4gICdmbG9hdCcsXG4gICdmbG93JyxcbiAgJ2ZvbnQnLFxuICAnZm9udC1kaXNwbGF5JyxcbiAgJ2ZvbnQtZmFtaWx5JyxcbiAgJ2ZvbnQtZmVhdHVyZS1zZXR0aW5ncycsXG4gICdmb250LWtlcm5pbmcnLFxuICAnZm9udC1sYW5ndWFnZS1vdmVycmlkZScsXG4gICdmb250LXNpemUnLFxuICAnZm9udC1zaXplLWFkanVzdCcsXG4gICdmb250LXNtb290aGluZycsXG4gICdmb250LXN0cmV0Y2gnLFxuICAnZm9udC1zdHlsZScsXG4gICdmb250LXN5bnRoZXNpcycsXG4gICdmb250LXZhcmlhbnQnLFxuICAnZm9udC12YXJpYW50LWNhcHMnLFxuICAnZm9udC12YXJpYW50LWVhc3QtYXNpYW4nLFxuICAnZm9udC12YXJpYW50LWxpZ2F0dXJlcycsXG4gICdmb250LXZhcmlhbnQtbnVtZXJpYycsXG4gICdmb250LXZhcmlhbnQtcG9zaXRpb24nLFxuICAnZm9udC12YXJpYXRpb24tc2V0dGluZ3MnLFxuICAnZm9udC13ZWlnaHQnLFxuICAnZ2FwJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJyxcbiAgJ2dyaWQnLFxuICAnZ3JpZC1hcmVhJyxcbiAgJ2dyaWQtYXV0by1jb2x1bW5zJyxcbiAgJ2dyaWQtYXV0by1mbG93JyxcbiAgJ2dyaWQtYXV0by1yb3dzJyxcbiAgJ2dyaWQtY29sdW1uJyxcbiAgJ2dyaWQtY29sdW1uLWVuZCcsXG4gICdncmlkLWNvbHVtbi1zdGFydCcsXG4gICdncmlkLWdhcCcsXG4gICdncmlkLXJvdycsXG4gICdncmlkLXJvdy1lbmQnLFxuICAnZ3JpZC1yb3ctc3RhcnQnLFxuICAnZ3JpZC10ZW1wbGF0ZScsXG4gICdncmlkLXRlbXBsYXRlLWFyZWFzJyxcbiAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucycsXG4gICdncmlkLXRlbXBsYXRlLXJvd3MnLFxuICAnaGFuZ2luZy1wdW5jdHVhdGlvbicsXG4gICdoZWlnaHQnLFxuICAnaHlwaGVucycsXG4gICdpY29uJyxcbiAgJ2ltYWdlLW9yaWVudGF0aW9uJyxcbiAgJ2ltYWdlLXJlbmRlcmluZycsXG4gICdpbWFnZS1yZXNvbHV0aW9uJyxcbiAgJ2ltZS1tb2RlJyxcbiAgJ2lubGluZS1zaXplJyxcbiAgJ2lzb2xhdGlvbicsXG4gICdqdXN0aWZ5LWNvbnRlbnQnLFxuICAnbGVmdCcsXG4gICdsZXR0ZXItc3BhY2luZycsXG4gICdsaW5lLWJyZWFrJyxcbiAgJ2xpbmUtaGVpZ2h0JyxcbiAgJ2xpc3Qtc3R5bGUnLFxuICAnbGlzdC1zdHlsZS1pbWFnZScsXG4gICdsaXN0LXN0eWxlLXBvc2l0aW9uJyxcbiAgJ2xpc3Qtc3R5bGUtdHlwZScsXG4gICdtYXJnaW4nLFxuICAnbWFyZ2luLWJsb2NrJyxcbiAgJ21hcmdpbi1ibG9jay1lbmQnLFxuICAnbWFyZ2luLWJsb2NrLXN0YXJ0JyxcbiAgJ21hcmdpbi1ib3R0b20nLFxuICAnbWFyZ2luLWlubGluZScsXG4gICdtYXJnaW4taW5saW5lLWVuZCcsXG4gICdtYXJnaW4taW5saW5lLXN0YXJ0JyxcbiAgJ21hcmdpbi1sZWZ0JyxcbiAgJ21hcmdpbi1yaWdodCcsXG4gICdtYXJnaW4tdG9wJyxcbiAgJ21hcmtzJyxcbiAgJ21hc2snLFxuICAnbWFzay1ib3JkZXInLFxuICAnbWFzay1ib3JkZXItbW9kZScsXG4gICdtYXNrLWJvcmRlci1vdXRzZXQnLFxuICAnbWFzay1ib3JkZXItcmVwZWF0JyxcbiAgJ21hc2stYm9yZGVyLXNsaWNlJyxcbiAgJ21hc2stYm9yZGVyLXNvdXJjZScsXG4gICdtYXNrLWJvcmRlci13aWR0aCcsXG4gICdtYXNrLWNsaXAnLFxuICAnbWFzay1jb21wb3NpdGUnLFxuICAnbWFzay1pbWFnZScsXG4gICdtYXNrLW1vZGUnLFxuICAnbWFzay1vcmlnaW4nLFxuICAnbWFzay1wb3NpdGlvbicsXG4gICdtYXNrLXJlcGVhdCcsXG4gICdtYXNrLXNpemUnLFxuICAnbWFzay10eXBlJyxcbiAgJ21heC1ibG9jay1zaXplJyxcbiAgJ21heC1oZWlnaHQnLFxuICAnbWF4LWlubGluZS1zaXplJyxcbiAgJ21heC13aWR0aCcsXG4gICdtaW4tYmxvY2stc2l6ZScsXG4gICdtaW4taGVpZ2h0JyxcbiAgJ21pbi1pbmxpbmUtc2l6ZScsXG4gICdtaW4td2lkdGgnLFxuICAnbWl4LWJsZW5kLW1vZGUnLFxuICAnbmF2LWRvd24nLFxuICAnbmF2LWluZGV4JyxcbiAgJ25hdi1sZWZ0JyxcbiAgJ25hdi1yaWdodCcsXG4gICduYXYtdXAnLFxuICAnbm9uZScsXG4gICdub3JtYWwnLFxuICAnb2JqZWN0LWZpdCcsXG4gICdvYmplY3QtcG9zaXRpb24nLFxuICAnb3BhY2l0eScsXG4gICdvcmRlcicsXG4gICdvcnBoYW5zJyxcbiAgJ291dGxpbmUnLFxuICAnb3V0bGluZS1jb2xvcicsXG4gICdvdXRsaW5lLW9mZnNldCcsXG4gICdvdXRsaW5lLXN0eWxlJyxcbiAgJ291dGxpbmUtd2lkdGgnLFxuICAnb3ZlcmZsb3cnLFxuICAnb3ZlcmZsb3ctd3JhcCcsXG4gICdvdmVyZmxvdy14JyxcbiAgJ292ZXJmbG93LXknLFxuICAncGFkZGluZycsXG4gICdwYWRkaW5nLWJsb2NrJyxcbiAgJ3BhZGRpbmctYmxvY2stZW5kJyxcbiAgJ3BhZGRpbmctYmxvY2stc3RhcnQnLFxuICAncGFkZGluZy1ib3R0b20nLFxuICAncGFkZGluZy1pbmxpbmUnLFxuICAncGFkZGluZy1pbmxpbmUtZW5kJyxcbiAgJ3BhZGRpbmctaW5saW5lLXN0YXJ0JyxcbiAgJ3BhZGRpbmctbGVmdCcsXG4gICdwYWRkaW5nLXJpZ2h0JyxcbiAgJ3BhZGRpbmctdG9wJyxcbiAgJ3BhZ2UtYnJlYWstYWZ0ZXInLFxuICAncGFnZS1icmVhay1iZWZvcmUnLFxuICAncGFnZS1icmVhay1pbnNpZGUnLFxuICAncGF1c2UnLFxuICAncGF1c2UtYWZ0ZXInLFxuICAncGF1c2UtYmVmb3JlJyxcbiAgJ3BlcnNwZWN0aXZlJyxcbiAgJ3BlcnNwZWN0aXZlLW9yaWdpbicsXG4gICdwb2ludGVyLWV2ZW50cycsXG4gICdwb3NpdGlvbicsXG4gICdxdW90ZXMnLFxuICAncmVzaXplJyxcbiAgJ3Jlc3QnLFxuICAncmVzdC1hZnRlcicsXG4gICdyZXN0LWJlZm9yZScsXG4gICdyaWdodCcsXG4gICdyb3ctZ2FwJyxcbiAgJ3Njcm9sbC1tYXJnaW4nLFxuICAnc2Nyb2xsLW1hcmdpbi1ibG9jaycsXG4gICdzY3JvbGwtbWFyZ2luLWJsb2NrLWVuZCcsXG4gICdzY3JvbGwtbWFyZ2luLWJsb2NrLXN0YXJ0JyxcbiAgJ3Njcm9sbC1tYXJnaW4tYm90dG9tJyxcbiAgJ3Njcm9sbC1tYXJnaW4taW5saW5lJyxcbiAgJ3Njcm9sbC1tYXJnaW4taW5saW5lLWVuZCcsXG4gICdzY3JvbGwtbWFyZ2luLWlubGluZS1zdGFydCcsXG4gICdzY3JvbGwtbWFyZ2luLWxlZnQnLFxuICAnc2Nyb2xsLW1hcmdpbi1yaWdodCcsXG4gICdzY3JvbGwtbWFyZ2luLXRvcCcsXG4gICdzY3JvbGwtcGFkZGluZycsXG4gICdzY3JvbGwtcGFkZGluZy1ibG9jaycsXG4gICdzY3JvbGwtcGFkZGluZy1ibG9jay1lbmQnLFxuICAnc2Nyb2xsLXBhZGRpbmctYmxvY2stc3RhcnQnLFxuICAnc2Nyb2xsLXBhZGRpbmctYm90dG9tJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWlubGluZScsXG4gICdzY3JvbGwtcGFkZGluZy1pbmxpbmUtZW5kJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWlubGluZS1zdGFydCcsXG4gICdzY3JvbGwtcGFkZGluZy1sZWZ0JyxcbiAgJ3Njcm9sbC1wYWRkaW5nLXJpZ2h0JyxcbiAgJ3Njcm9sbC1wYWRkaW5nLXRvcCcsXG4gICdzY3JvbGwtc25hcC1hbGlnbicsXG4gICdzY3JvbGwtc25hcC1zdG9wJyxcbiAgJ3Njcm9sbC1zbmFwLXR5cGUnLFxuICAnc2Nyb2xsYmFyLWNvbG9yJyxcbiAgJ3Njcm9sbGJhci1ndXR0ZXInLFxuICAnc2Nyb2xsYmFyLXdpZHRoJyxcbiAgJ3NoYXBlLWltYWdlLXRocmVzaG9sZCcsXG4gICdzaGFwZS1tYXJnaW4nLFxuICAnc2hhcGUtb3V0c2lkZScsXG4gICdzcGVhaycsXG4gICdzcGVhay1hcycsXG4gICdzcmMnLCAvLyBAZm9udC1mYWNlXG4gICd0YWItc2l6ZScsXG4gICd0YWJsZS1sYXlvdXQnLFxuICAndGV4dC1hbGlnbicsXG4gICd0ZXh0LWFsaWduLWFsbCcsXG4gICd0ZXh0LWFsaWduLWxhc3QnLFxuICAndGV4dC1jb21iaW5lLXVwcmlnaHQnLFxuICAndGV4dC1kZWNvcmF0aW9uJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi1jb2xvcicsXG4gICd0ZXh0LWRlY29yYXRpb24tbGluZScsXG4gICd0ZXh0LWRlY29yYXRpb24tc3R5bGUnLFxuICAndGV4dC1lbXBoYXNpcycsXG4gICd0ZXh0LWVtcGhhc2lzLWNvbG9yJyxcbiAgJ3RleHQtZW1waGFzaXMtcG9zaXRpb24nLFxuICAndGV4dC1lbXBoYXNpcy1zdHlsZScsXG4gICd0ZXh0LWluZGVudCcsXG4gICd0ZXh0LWp1c3RpZnknLFxuICAndGV4dC1vcmllbnRhdGlvbicsXG4gICd0ZXh0LW92ZXJmbG93JyxcbiAgJ3RleHQtcmVuZGVyaW5nJyxcbiAgJ3RleHQtc2hhZG93JyxcbiAgJ3RleHQtdHJhbnNmb3JtJyxcbiAgJ3RleHQtdW5kZXJsaW5lLXBvc2l0aW9uJyxcbiAgJ3RvcCcsXG4gICd0cmFuc2Zvcm0nLFxuICAndHJhbnNmb3JtLWJveCcsXG4gICd0cmFuc2Zvcm0tb3JpZ2luJyxcbiAgJ3RyYW5zZm9ybS1zdHlsZScsXG4gICd0cmFuc2l0aW9uJyxcbiAgJ3RyYW5zaXRpb24tZGVsYXknLFxuICAndHJhbnNpdGlvbi1kdXJhdGlvbicsXG4gICd0cmFuc2l0aW9uLXByb3BlcnR5JyxcbiAgJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJyxcbiAgJ3VuaWNvZGUtYmlkaScsXG4gICd2ZXJ0aWNhbC1hbGlnbicsXG4gICd2aXNpYmlsaXR5JyxcbiAgJ3ZvaWNlLWJhbGFuY2UnLFxuICAndm9pY2UtZHVyYXRpb24nLFxuICAndm9pY2UtZmFtaWx5JyxcbiAgJ3ZvaWNlLXBpdGNoJyxcbiAgJ3ZvaWNlLXJhbmdlJyxcbiAgJ3ZvaWNlLXJhdGUnLFxuICAndm9pY2Utc3RyZXNzJyxcbiAgJ3ZvaWNlLXZvbHVtZScsXG4gICd3aGl0ZS1zcGFjZScsXG4gICd3aWRvd3MnLFxuICAnd2lkdGgnLFxuICAnd2lsbC1jaGFuZ2UnLFxuICAnd29yZC1icmVhaycsXG4gICd3b3JkLXNwYWNpbmcnLFxuICAnd29yZC13cmFwJyxcbiAgJ3dyaXRpbmctbW9kZScsXG4gICd6LWluZGV4J1xuICAvLyByZXZlcnNlIG1ha2VzIHN1cmUgbG9uZ2VyIGF0dHJpYnV0ZXMgYGZvbnQtd2VpZ2h0YCBhcmUgbWF0Y2hlZCBmdWxseVxuICAvLyBpbnN0ZWFkIG9mIGdldHRpbmcgZmFsc2UgcG9zaXRpdmVzIG9uIHNheSBgZm9udGBcbl0ucmV2ZXJzZSgpO1xuXG4vKlxuTGFuZ3VhZ2U6IFNDU1NcbkRlc2NyaXB0aW9uOiBTY3NzIGlzIGFuIGV4dGVuc2lvbiBvZiB0aGUgc3ludGF4IG9mIENTUy5cbkF1dGhvcjogS3VydCBFbWNoIDxrdXJ0QGt1cnRlbWNoLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vc2Fzcy1sYW5nLmNvbVxuQ2F0ZWdvcnk6IGNvbW1vbiwgY3NzLCB3ZWJcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBzY3NzKGhsanMpIHtcbiAgY29uc3QgbW9kZXMgPSBNT0RFUyhobGpzKTtcbiAgY29uc3QgUFNFVURPX0VMRU1FTlRTJDEgPSBQU0VVRE9fRUxFTUVOVFM7XG4gIGNvbnN0IFBTRVVET19DTEFTU0VTJDEgPSBQU0VVRE9fQ0xBU1NFUztcblxuICBjb25zdCBBVF9JREVOVElGSUVSID0gJ0BbYS16LV0rJzsgLy8gQGZvbnQtZmFjZVxuICBjb25zdCBBVF9NT0RJRklFUlMgPSBcImFuZCBvciBub3Qgb25seVwiO1xuICBjb25zdCBJREVOVF9SRSA9ICdbYS16QS1aLV1bYS16QS1aMC05Xy1dKic7XG4gIGNvbnN0IFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogJyhcXFxcJCcgKyBJREVOVF9SRSArICcpXFxcXGInLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1NDU1MnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogJ1s9L3xcXCddJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIC8vIHRvIHJlY29nbml6ZSBrZXlmcmFtZSA0MCUgZXRjIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBvdXJcbiAgICAgIC8vIGF0dHJpYnV0ZSB2YWx1ZSBtb2RlXG4gICAgICBtb2Rlcy5DU1NfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLWlkJyxcbiAgICAgICAgYmVnaW46ICcjW0EtWmEtejAtOV8tXSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLWNsYXNzJyxcbiAgICAgICAgYmVnaW46ICdcXFxcLltBLVphLXowLTlfLV0rJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgbW9kZXMuQVRUUklCVVRFX1NFTEVDVE9SX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXRhZycsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIFRBR1Muam9pbignfCcpICsgJylcXFxcYicsXG4gICAgICAgIC8vIHdhcyB0aGVyZSwgYmVmb3JlLCBidXQgd2h5P1xuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXBzZXVkbycsXG4gICAgICAgIGJlZ2luOiAnOignICsgUFNFVURPX0NMQVNTRVMkMS5qb2luKCd8JykgKyAnKSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXBzZXVkbycsXG4gICAgICAgIGJlZ2luOiAnOig6KT8oJyArIFBTRVVET19FTEVNRU5UUyQxLmpvaW4oJ3wnKSArICcpJ1xuICAgICAgfSxcbiAgICAgIFZBUklBQkxFLFxuICAgICAgeyAvLyBwc2V1ZG8tc2VsZWN0b3IgcGFyYW1zXG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgY29udGFpbnM6IFsgbW9kZXMuQ1NTX05VTUJFUl9NT0RFIF1cbiAgICAgIH0sXG4gICAgICBtb2Rlcy5DU1NfVkFSSUFCTEUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIEFUVFJJQlVURVMuam9pbignfCcpICsgJylcXFxcYidcbiAgICAgIH0sXG4gICAgICB7IGJlZ2luOiAnXFxcXGIod2hpdGVzcGFjZXx3YWl0fHctcmVzaXplfHZpc2libGV8dmVydGljYWwtdGV4dHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x1cHBlcmNhc2V8dXBwZXItcm9tYW58dXBwZXItYWxwaGF8dW5kZXJsaW5lfHRyYW5zcGFyZW50fHRvcHx0aGlufHRoaWNrfHRleHR8dGV4dC10b3B8dGV4dC1ib3R0b218dGItcmx8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLWZvb3Rlci1ncm91cHxzdy1yZXNpemV8c3VwZXJ8c3RyaWN0fHN0YXRpY3xzcXVhcmV8c29saWR8c21hbGwtY2Fwc3xzZXBhcmF0ZXxzZS1yZXNpemV8c2Nyb2xsfHMtcmVzaXplfHJ0bHxyb3ctcmVzaXplfHJpZGdlfHJpZ2h0fHJlcGVhdHxyZXBlYXQteXxyZXBlYXQteHxyZWxhdGl2ZXxwcm9ncmVzc3xwb2ludGVyfG92ZXJsaW5lfG91dHNpZGV8b3V0c2V0fG9ibGlxdWV8bm93cmFwfG5vdC1hbGxvd2VkfG5vcm1hbHxub25lfG53LXJlc2l6ZXxuby1yZXBlYXR8bm8tZHJvcHxuZXdzcGFwZXJ8bmUtcmVzaXplfG4tcmVzaXplfG1vdmV8bWlkZGxlfG1lZGl1bXxsdHJ8bHItdGJ8bG93ZXJjYXNlfGxvd2VyLXJvbWFufGxvd2VyLWFscGhhfGxvb3NlfGxpc3QtaXRlbXxsaW5lfGxpbmUtdGhyb3VnaHxsaW5lLWVkZ2V8bGlnaHRlcnxsZWZ0fGtlZXAtYWxsfGp1c3RpZnl8aXRhbGljfGludGVyLXdvcmR8aW50ZXItaWRlb2dyYXBofGluc2lkZXxpbnNldHxpbmxpbmV8aW5saW5lLWJsb2NrfGluaGVyaXR8aW5hY3RpdmV8aWRlb2dyYXBoLXNwYWNlfGlkZW9ncmFwaC1wYXJlbnRoZXNpc3xpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtYWxwaGF8aG9yaXpvbnRhbHxoaWRkZW58aGVscHxoYW5kfGdyb292ZXxmaXhlZHxlbGxpcHNpc3xlLXJlc2l6ZXxkb3VibGV8ZG90dGVkfGRpc3RyaWJ1dGV8ZGlzdHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLWFsbC1saW5lc3xkaXNjfGRpc2FibGVkfGRlZmF1bHR8ZGVjaW1hbHxkYXNoZWR8Y3Jvc3NoYWlyfGNvbGxhcHNlfGNvbC1yZXNpemV8Y2lyY2xlfGNoYXJ8Y2VudGVyfGNhcGl0YWxpemV8YnJlYWstd29yZHxicmVhay1hbGx8Ym90dG9tfGJvdGh8Ym9sZGVyfGJvbGR8YmxvY2t8YmlkaS1vdmVycmlkZXxiZWxvd3xiYXNlbGluZXxhdXRvfGFsd2F5c3xhbGwtc2Nyb2xsfGFic29sdXRlfHRhYmxlfHRhYmxlLWNlbGwpXFxcXGInIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvOi8sXG4gICAgICAgIGVuZDogL1s7fXtdLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIG1vZGVzLkJMT0NLX0NPTU1FTlQsXG4gICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgbW9kZXMuSEVYQ09MT1IsXG4gICAgICAgICAgbW9kZXMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIG1vZGVzLklNUE9SVEFOVCxcbiAgICAgICAgICBtb2Rlcy5GVU5DVElPTl9ESVNQQVRDSFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gbWF0Y2hpbmcgdGhlc2UgaGVyZSBhbGxvd3MgdXMgdG8gdHJlYXQgdGhlbSBtb3JlIGxpa2UgcmVndWxhciBDU1NcbiAgICAgIC8vIHJ1bGVzIHNvIGV2ZXJ5dGhpbmcgYmV0d2VlbiB0aGUge30gZ2V0cyByZWd1bGFyIHJ1bGUgaGlnaGxpZ2h0aW5nLFxuICAgICAgLy8gd2hpY2ggaXMgd2hhdCB3ZSB3YW50IGZvciBwYWdlIGFuZCBmb250LWZhY2VcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdAKHBhZ2V8Zm9udC1mYWNlKScsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgJHBhdHRlcm46IEFUX0lERU5USUZJRVIsXG4gICAgICAgICAga2V5d29yZDogJ0BwYWdlIEBmb250LWZhY2UnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnQCcsXG4gICAgICAgIGVuZDogJ1t7O10nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAkcGF0dGVybjogL1thLXotXSsvLFxuICAgICAgICAgIGtleXdvcmQ6IEFUX01PRElGSUVSUyxcbiAgICAgICAgICBhdHRyaWJ1dGU6IE1FRElBX0ZFQVRVUkVTLmpvaW4oXCIgXCIpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IEFUX0lERU5USUZJRVIsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwia2V5d29yZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1thLXotXSsoPz06KS8sXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiYXR0cmlidXRlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIG1vZGVzLkhFWENPTE9SLFxuICAgICAgICAgIG1vZGVzLkNTU19OVU1CRVJfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgbW9kZXMuRlVOQ1RJT05fRElTUEFUQ0hcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2NzcztcbiIsIi8qXG5MYW5ndWFnZTogU2hlbGwgU2Vzc2lvblxuUmVxdWlyZXM6IGJhc2guanNcbkF1dGhvcjogVFNVWVVTQVRPIEtpdHN1bmUgPG1ha2UuanVzdC5vbkBnbWFpbC5jb20+XG5DYXRlZ29yeTogY29tbW9uXG5BdWRpdDogMjAyMFxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIHNoZWxsKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU2hlbGwgU2Vzc2lvbicsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ2NvbnNvbGUnLFxuICAgICAgJ3NoZWxsc2Vzc2lvbidcbiAgICBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEucHJvbXB0JyxcbiAgICAgICAgLy8gV2UgY2Fubm90IGFkZCBcXHMgKHNwYWNlcykgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBvdGhlcndpc2UgaXQgd2lsbCBiZSB0b28gYnJvYWQgYW5kIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHQuXG4gICAgICAgIC8vIEZvciBpbnN0YW5jZSwgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBpdCB3b3VsZCBtYXRjaCBcImVjaG8gL3BhdGgvdG8vaG9tZSA+XCIgYXMgYSBwcm9tcHQ6XG4gICAgICAgIC8vIGVjaG8gL3BhdGgvdG8vaG9tZSA+IHQuZXhlXG4gICAgICAgIGJlZ2luOiAvXlxcc3swLDN9Wy9+XFx3XFxkW1xcXSgpQC1dKls+JSQjXVsgXT8vLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6IC9bXlxcXFxdKD89XFxzKiQpLyxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogJ2Jhc2gnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hlbGw7XG4iLCIvKlxuIExhbmd1YWdlOiBTUUxcbiBXZWJzaXRlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUUxcbiBDYXRlZ29yeTogY29tbW9uLCBkYXRhYmFzZVxuICovXG5cbi8qXG5cbkdvYWxzOlxuXG5TUUwgaXMgaW50ZW5kZWQgdG8gaGlnaGxpZ2h0IGJhc2ljL2NvbW1vbiBTUUwga2V5d29yZHMgYW5kIGV4cHJlc3Npb25zXG5cbi0gSWYgcHJldHR5IG11Y2ggZXZlcnkgc2luZ2xlIFNRTCBzZXJ2ZXIgaW5jbHVkZXMgc3VwcG9ydHMsIHRoZW4gaXQncyBhIGNhbmlkYXRlLlxuLSBJdCBpcyBOT1QgaW50ZW5kZWQgdG8gaW5jbHVkZSB0b25zIG9mIHZlbmRvciBzcGVjaWZpYyBrZXl3b3JkcyAoT3JhY2xlLCBNeVNRTCxcbiAgUG9zdGdyZVNRTCkgYWx0aG91Z2ggdGhlIGxpc3Qgb2YgZGF0YSB0eXBlcyBpcyBwdXJwb3NlbHkgYSBiaXQgbW9yZSBleHBhbnNpdmUuXG4tIEZvciBtb3JlIHNwZWNpZmljIFNRTCBncmFtbWFycyBwbGVhc2Ugc2VlOlxuICAtIFBvc3RncmVTUUwgYW5kIFBML3BnU1FMIC0gY29yZVxuICAtIFQtU1FMIC0gaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodGpzLXRzcWxcbiAgLSBzcWxfbW9yZSAoY29yZSlcblxuICovXG5cbmZ1bmN0aW9uIHNxbChobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgQ09NTUVOVF9NT0RFID0gaGxqcy5DT01NRU5UKCctLScsICckJyk7XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJy8sXG4gICAgICAgIGVuZDogLycvLFxuICAgICAgICBjb250YWluczogWyB7IGJlZ2luOiAvJycvIH0gXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgUVVPVEVEX0lERU5USUZJRVIgPSB7XG4gICAgYmVnaW46IC9cIi8sXG4gICAgZW5kOiAvXCIvLFxuICAgIGNvbnRhaW5zOiBbIHsgYmVnaW46IC9cIlwiLyB9IF1cbiAgfTtcblxuICBjb25zdCBMSVRFUkFMUyA9IFtcbiAgICBcInRydWVcIixcbiAgICBcImZhbHNlXCIsXG4gICAgLy8gTm90IHN1cmUgaXQncyBjb3JyZWN0IHRvIGNhbGwgTlVMTCBsaXRlcmFsLCBhbmQgY2xhdXNlcyBsaWtlIElTIFtOT1RdIE5VTEwgbG9vayBzdHJhbmdlIHRoYXQgd2F5LlxuICAgIC8vIFwibnVsbFwiLFxuICAgIFwidW5rbm93blwiXG4gIF07XG5cbiAgY29uc3QgTVVMVElfV09SRF9UWVBFUyA9IFtcbiAgICBcImRvdWJsZSBwcmVjaXNpb25cIixcbiAgICBcImxhcmdlIG9iamVjdFwiLFxuICAgIFwid2l0aCB0aW1lem9uZVwiLFxuICAgIFwid2l0aG91dCB0aW1lem9uZVwiXG4gIF07XG5cbiAgY29uc3QgVFlQRVMgPSBbXG4gICAgJ2JpZ2ludCcsXG4gICAgJ2JpbmFyeScsXG4gICAgJ2Jsb2InLFxuICAgICdib29sZWFuJyxcbiAgICAnY2hhcicsXG4gICAgJ2NoYXJhY3RlcicsXG4gICAgJ2Nsb2InLFxuICAgICdkYXRlJyxcbiAgICAnZGVjJyxcbiAgICAnZGVjZmxvYXQnLFxuICAgICdkZWNpbWFsJyxcbiAgICAnZmxvYXQnLFxuICAgICdpbnQnLFxuICAgICdpbnRlZ2VyJyxcbiAgICAnaW50ZXJ2YWwnLFxuICAgICduY2hhcicsXG4gICAgJ25jbG9iJyxcbiAgICAnbmF0aW9uYWwnLFxuICAgICdudW1lcmljJyxcbiAgICAncmVhbCcsXG4gICAgJ3JvdycsXG4gICAgJ3NtYWxsaW50JyxcbiAgICAndGltZScsXG4gICAgJ3RpbWVzdGFtcCcsXG4gICAgJ3ZhcmNoYXInLFxuICAgICd2YXJ5aW5nJywgLy8gbW9kaWZpZXIgKGNoYXJhY3RlciB2YXJ5aW5nKVxuICAgICd2YXJiaW5hcnknXG4gIF07XG5cbiAgY29uc3QgTk9OX1JFU0VSVkVEX1dPUkRTID0gW1xuICAgIFwiYWRkXCIsXG4gICAgXCJhc2NcIixcbiAgICBcImNvbGxhdGlvblwiLFxuICAgIFwiZGVzY1wiLFxuICAgIFwiZmluYWxcIixcbiAgICBcImZpcnN0XCIsXG4gICAgXCJsYXN0XCIsXG4gICAgXCJ2aWV3XCJcbiAgXTtcblxuICAvLyBodHRwczovL2pha2V3aGVhdC5naXRodWIuaW8vc3FsLW92ZXJ2aWV3L3NxbC0yMDE2LWZvdW5kYXRpb24tZ3JhbW1hci5odG1sI3Jlc2VydmVkLXdvcmRcbiAgY29uc3QgUkVTRVJWRURfV09SRFMgPSBbXG4gICAgXCJhYnNcIixcbiAgICBcImFjb3NcIixcbiAgICBcImFsbFwiLFxuICAgIFwiYWxsb2NhdGVcIixcbiAgICBcImFsdGVyXCIsXG4gICAgXCJhbmRcIixcbiAgICBcImFueVwiLFxuICAgIFwiYXJlXCIsXG4gICAgXCJhcnJheVwiLFxuICAgIFwiYXJyYXlfYWdnXCIsXG4gICAgXCJhcnJheV9tYXhfY2FyZGluYWxpdHlcIixcbiAgICBcImFzXCIsXG4gICAgXCJhc2Vuc2l0aXZlXCIsXG4gICAgXCJhc2luXCIsXG4gICAgXCJhc3ltbWV0cmljXCIsXG4gICAgXCJhdFwiLFxuICAgIFwiYXRhblwiLFxuICAgIFwiYXRvbWljXCIsXG4gICAgXCJhdXRob3JpemF0aW9uXCIsXG4gICAgXCJhdmdcIixcbiAgICBcImJlZ2luXCIsXG4gICAgXCJiZWdpbl9mcmFtZVwiLFxuICAgIFwiYmVnaW5fcGFydGl0aW9uXCIsXG4gICAgXCJiZXR3ZWVuXCIsXG4gICAgXCJiaWdpbnRcIixcbiAgICBcImJpbmFyeVwiLFxuICAgIFwiYmxvYlwiLFxuICAgIFwiYm9vbGVhblwiLFxuICAgIFwiYm90aFwiLFxuICAgIFwiYnlcIixcbiAgICBcImNhbGxcIixcbiAgICBcImNhbGxlZFwiLFxuICAgIFwiY2FyZGluYWxpdHlcIixcbiAgICBcImNhc2NhZGVkXCIsXG4gICAgXCJjYXNlXCIsXG4gICAgXCJjYXN0XCIsXG4gICAgXCJjZWlsXCIsXG4gICAgXCJjZWlsaW5nXCIsXG4gICAgXCJjaGFyXCIsXG4gICAgXCJjaGFyX2xlbmd0aFwiLFxuICAgIFwiY2hhcmFjdGVyXCIsXG4gICAgXCJjaGFyYWN0ZXJfbGVuZ3RoXCIsXG4gICAgXCJjaGVja1wiLFxuICAgIFwiY2xhc3NpZmllclwiLFxuICAgIFwiY2xvYlwiLFxuICAgIFwiY2xvc2VcIixcbiAgICBcImNvYWxlc2NlXCIsXG4gICAgXCJjb2xsYXRlXCIsXG4gICAgXCJjb2xsZWN0XCIsXG4gICAgXCJjb2x1bW5cIixcbiAgICBcImNvbW1pdFwiLFxuICAgIFwiY29uZGl0aW9uXCIsXG4gICAgXCJjb25uZWN0XCIsXG4gICAgXCJjb25zdHJhaW50XCIsXG4gICAgXCJjb250YWluc1wiLFxuICAgIFwiY29udmVydFwiLFxuICAgIFwiY29weVwiLFxuICAgIFwiY29yclwiLFxuICAgIFwiY29ycmVzcG9uZGluZ1wiLFxuICAgIFwiY29zXCIsXG4gICAgXCJjb3NoXCIsXG4gICAgXCJjb3VudFwiLFxuICAgIFwiY292YXJfcG9wXCIsXG4gICAgXCJjb3Zhcl9zYW1wXCIsXG4gICAgXCJjcmVhdGVcIixcbiAgICBcImNyb3NzXCIsXG4gICAgXCJjdWJlXCIsXG4gICAgXCJjdW1lX2Rpc3RcIixcbiAgICBcImN1cnJlbnRcIixcbiAgICBcImN1cnJlbnRfY2F0YWxvZ1wiLFxuICAgIFwiY3VycmVudF9kYXRlXCIsXG4gICAgXCJjdXJyZW50X2RlZmF1bHRfdHJhbnNmb3JtX2dyb3VwXCIsXG4gICAgXCJjdXJyZW50X3BhdGhcIixcbiAgICBcImN1cnJlbnRfcm9sZVwiLFxuICAgIFwiY3VycmVudF9yb3dcIixcbiAgICBcImN1cnJlbnRfc2NoZW1hXCIsXG4gICAgXCJjdXJyZW50X3RpbWVcIixcbiAgICBcImN1cnJlbnRfdGltZXN0YW1wXCIsXG4gICAgXCJjdXJyZW50X3BhdGhcIixcbiAgICBcImN1cnJlbnRfcm9sZVwiLFxuICAgIFwiY3VycmVudF90cmFuc2Zvcm1fZ3JvdXBfZm9yX3R5cGVcIixcbiAgICBcImN1cnJlbnRfdXNlclwiLFxuICAgIFwiY3Vyc29yXCIsXG4gICAgXCJjeWNsZVwiLFxuICAgIFwiZGF0ZVwiLFxuICAgIFwiZGF5XCIsXG4gICAgXCJkZWFsbG9jYXRlXCIsXG4gICAgXCJkZWNcIixcbiAgICBcImRlY2ltYWxcIixcbiAgICBcImRlY2Zsb2F0XCIsXG4gICAgXCJkZWNsYXJlXCIsXG4gICAgXCJkZWZhdWx0XCIsXG4gICAgXCJkZWZpbmVcIixcbiAgICBcImRlbGV0ZVwiLFxuICAgIFwiZGVuc2VfcmFua1wiLFxuICAgIFwiZGVyZWZcIixcbiAgICBcImRlc2NyaWJlXCIsXG4gICAgXCJkZXRlcm1pbmlzdGljXCIsXG4gICAgXCJkaXNjb25uZWN0XCIsXG4gICAgXCJkaXN0aW5jdFwiLFxuICAgIFwiZG91YmxlXCIsXG4gICAgXCJkcm9wXCIsXG4gICAgXCJkeW5hbWljXCIsXG4gICAgXCJlYWNoXCIsXG4gICAgXCJlbGVtZW50XCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJlbXB0eVwiLFxuICAgIFwiZW5kXCIsXG4gICAgXCJlbmRfZnJhbWVcIixcbiAgICBcImVuZF9wYXJ0aXRpb25cIixcbiAgICBcImVuZC1leGVjXCIsXG4gICAgXCJlcXVhbHNcIixcbiAgICBcImVzY2FwZVwiLFxuICAgIFwiZXZlcnlcIixcbiAgICBcImV4Y2VwdFwiLFxuICAgIFwiZXhlY1wiLFxuICAgIFwiZXhlY3V0ZVwiLFxuICAgIFwiZXhpc3RzXCIsXG4gICAgXCJleHBcIixcbiAgICBcImV4dGVybmFsXCIsXG4gICAgXCJleHRyYWN0XCIsXG4gICAgXCJmYWxzZVwiLFxuICAgIFwiZmV0Y2hcIixcbiAgICBcImZpbHRlclwiLFxuICAgIFwiZmlyc3RfdmFsdWVcIixcbiAgICBcImZsb2F0XCIsXG4gICAgXCJmbG9vclwiLFxuICAgIFwiZm9yXCIsXG4gICAgXCJmb3JlaWduXCIsXG4gICAgXCJmcmFtZV9yb3dcIixcbiAgICBcImZyZWVcIixcbiAgICBcImZyb21cIixcbiAgICBcImZ1bGxcIixcbiAgICBcImZ1bmN0aW9uXCIsXG4gICAgXCJmdXNpb25cIixcbiAgICBcImdldFwiLFxuICAgIFwiZ2xvYmFsXCIsXG4gICAgXCJncmFudFwiLFxuICAgIFwiZ3JvdXBcIixcbiAgICBcImdyb3VwaW5nXCIsXG4gICAgXCJncm91cHNcIixcbiAgICBcImhhdmluZ1wiLFxuICAgIFwiaG9sZFwiLFxuICAgIFwiaG91clwiLFxuICAgIFwiaWRlbnRpdHlcIixcbiAgICBcImluXCIsXG4gICAgXCJpbmRpY2F0b3JcIixcbiAgICBcImluaXRpYWxcIixcbiAgICBcImlubmVyXCIsXG4gICAgXCJpbm91dFwiLFxuICAgIFwiaW5zZW5zaXRpdmVcIixcbiAgICBcImluc2VydFwiLFxuICAgIFwiaW50XCIsXG4gICAgXCJpbnRlZ2VyXCIsXG4gICAgXCJpbnRlcnNlY3RcIixcbiAgICBcImludGVyc2VjdGlvblwiLFxuICAgIFwiaW50ZXJ2YWxcIixcbiAgICBcImludG9cIixcbiAgICBcImlzXCIsXG4gICAgXCJqb2luXCIsXG4gICAgXCJqc29uX2FycmF5XCIsXG4gICAgXCJqc29uX2FycmF5YWdnXCIsXG4gICAgXCJqc29uX2V4aXN0c1wiLFxuICAgIFwianNvbl9vYmplY3RcIixcbiAgICBcImpzb25fb2JqZWN0YWdnXCIsXG4gICAgXCJqc29uX3F1ZXJ5XCIsXG4gICAgXCJqc29uX3RhYmxlXCIsXG4gICAgXCJqc29uX3RhYmxlX3ByaW1pdGl2ZVwiLFxuICAgIFwianNvbl92YWx1ZVwiLFxuICAgIFwibGFnXCIsXG4gICAgXCJsYW5ndWFnZVwiLFxuICAgIFwibGFyZ2VcIixcbiAgICBcImxhc3RfdmFsdWVcIixcbiAgICBcImxhdGVyYWxcIixcbiAgICBcImxlYWRcIixcbiAgICBcImxlYWRpbmdcIixcbiAgICBcImxlZnRcIixcbiAgICBcImxpa2VcIixcbiAgICBcImxpa2VfcmVnZXhcIixcbiAgICBcImxpc3RhZ2dcIixcbiAgICBcImxuXCIsXG4gICAgXCJsb2NhbFwiLFxuICAgIFwibG9jYWx0aW1lXCIsXG4gICAgXCJsb2NhbHRpbWVzdGFtcFwiLFxuICAgIFwibG9nXCIsXG4gICAgXCJsb2cxMFwiLFxuICAgIFwibG93ZXJcIixcbiAgICBcIm1hdGNoXCIsXG4gICAgXCJtYXRjaF9udW1iZXJcIixcbiAgICBcIm1hdGNoX3JlY29nbml6ZVwiLFxuICAgIFwibWF0Y2hlc1wiLFxuICAgIFwibWF4XCIsXG4gICAgXCJtZW1iZXJcIixcbiAgICBcIm1lcmdlXCIsXG4gICAgXCJtZXRob2RcIixcbiAgICBcIm1pblwiLFxuICAgIFwibWludXRlXCIsXG4gICAgXCJtb2RcIixcbiAgICBcIm1vZGlmaWVzXCIsXG4gICAgXCJtb2R1bGVcIixcbiAgICBcIm1vbnRoXCIsXG4gICAgXCJtdWx0aXNldFwiLFxuICAgIFwibmF0aW9uYWxcIixcbiAgICBcIm5hdHVyYWxcIixcbiAgICBcIm5jaGFyXCIsXG4gICAgXCJuY2xvYlwiLFxuICAgIFwibmV3XCIsXG4gICAgXCJub1wiLFxuICAgIFwibm9uZVwiLFxuICAgIFwibm9ybWFsaXplXCIsXG4gICAgXCJub3RcIixcbiAgICBcIm50aF92YWx1ZVwiLFxuICAgIFwibnRpbGVcIixcbiAgICBcIm51bGxcIixcbiAgICBcIm51bGxpZlwiLFxuICAgIFwibnVtZXJpY1wiLFxuICAgIFwib2N0ZXRfbGVuZ3RoXCIsXG4gICAgXCJvY2N1cnJlbmNlc19yZWdleFwiLFxuICAgIFwib2ZcIixcbiAgICBcIm9mZnNldFwiLFxuICAgIFwib2xkXCIsXG4gICAgXCJvbWl0XCIsXG4gICAgXCJvblwiLFxuICAgIFwib25lXCIsXG4gICAgXCJvbmx5XCIsXG4gICAgXCJvcGVuXCIsXG4gICAgXCJvclwiLFxuICAgIFwib3JkZXJcIixcbiAgICBcIm91dFwiLFxuICAgIFwib3V0ZXJcIixcbiAgICBcIm92ZXJcIixcbiAgICBcIm92ZXJsYXBzXCIsXG4gICAgXCJvdmVybGF5XCIsXG4gICAgXCJwYXJhbWV0ZXJcIixcbiAgICBcInBhcnRpdGlvblwiLFxuICAgIFwicGF0dGVyblwiLFxuICAgIFwicGVyXCIsXG4gICAgXCJwZXJjZW50XCIsXG4gICAgXCJwZXJjZW50X3JhbmtcIixcbiAgICBcInBlcmNlbnRpbGVfY29udFwiLFxuICAgIFwicGVyY2VudGlsZV9kaXNjXCIsXG4gICAgXCJwZXJpb2RcIixcbiAgICBcInBvcnRpb25cIixcbiAgICBcInBvc2l0aW9uXCIsXG4gICAgXCJwb3NpdGlvbl9yZWdleFwiLFxuICAgIFwicG93ZXJcIixcbiAgICBcInByZWNlZGVzXCIsXG4gICAgXCJwcmVjaXNpb25cIixcbiAgICBcInByZXBhcmVcIixcbiAgICBcInByaW1hcnlcIixcbiAgICBcInByb2NlZHVyZVwiLFxuICAgIFwicHRmXCIsXG4gICAgXCJyYW5nZVwiLFxuICAgIFwicmFua1wiLFxuICAgIFwicmVhZHNcIixcbiAgICBcInJlYWxcIixcbiAgICBcInJlY3Vyc2l2ZVwiLFxuICAgIFwicmVmXCIsXG4gICAgXCJyZWZlcmVuY2VzXCIsXG4gICAgXCJyZWZlcmVuY2luZ1wiLFxuICAgIFwicmVncl9hdmd4XCIsXG4gICAgXCJyZWdyX2F2Z3lcIixcbiAgICBcInJlZ3JfY291bnRcIixcbiAgICBcInJlZ3JfaW50ZXJjZXB0XCIsXG4gICAgXCJyZWdyX3IyXCIsXG4gICAgXCJyZWdyX3Nsb3BlXCIsXG4gICAgXCJyZWdyX3N4eFwiLFxuICAgIFwicmVncl9zeHlcIixcbiAgICBcInJlZ3Jfc3l5XCIsXG4gICAgXCJyZWxlYXNlXCIsXG4gICAgXCJyZXN1bHRcIixcbiAgICBcInJldHVyblwiLFxuICAgIFwicmV0dXJuc1wiLFxuICAgIFwicmV2b2tlXCIsXG4gICAgXCJyaWdodFwiLFxuICAgIFwicm9sbGJhY2tcIixcbiAgICBcInJvbGx1cFwiLFxuICAgIFwicm93XCIsXG4gICAgXCJyb3dfbnVtYmVyXCIsXG4gICAgXCJyb3dzXCIsXG4gICAgXCJydW5uaW5nXCIsXG4gICAgXCJzYXZlcG9pbnRcIixcbiAgICBcInNjb3BlXCIsXG4gICAgXCJzY3JvbGxcIixcbiAgICBcInNlYXJjaFwiLFxuICAgIFwic2Vjb25kXCIsXG4gICAgXCJzZWVrXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInNlbnNpdGl2ZVwiLFxuICAgIFwic2Vzc2lvbl91c2VyXCIsXG4gICAgXCJzZXRcIixcbiAgICBcInNob3dcIixcbiAgICBcInNpbWlsYXJcIixcbiAgICBcInNpblwiLFxuICAgIFwic2luaFwiLFxuICAgIFwic2tpcFwiLFxuICAgIFwic21hbGxpbnRcIixcbiAgICBcInNvbWVcIixcbiAgICBcInNwZWNpZmljXCIsXG4gICAgXCJzcGVjaWZpY3R5cGVcIixcbiAgICBcInNxbFwiLFxuICAgIFwic3FsZXhjZXB0aW9uXCIsXG4gICAgXCJzcWxzdGF0ZVwiLFxuICAgIFwic3Fsd2FybmluZ1wiLFxuICAgIFwic3FydFwiLFxuICAgIFwic3RhcnRcIixcbiAgICBcInN0YXRpY1wiLFxuICAgIFwic3RkZGV2X3BvcFwiLFxuICAgIFwic3RkZGV2X3NhbXBcIixcbiAgICBcInN1Ym11bHRpc2V0XCIsXG4gICAgXCJzdWJzZXRcIixcbiAgICBcInN1YnN0cmluZ1wiLFxuICAgIFwic3Vic3RyaW5nX3JlZ2V4XCIsXG4gICAgXCJzdWNjZWVkc1wiLFxuICAgIFwic3VtXCIsXG4gICAgXCJzeW1tZXRyaWNcIixcbiAgICBcInN5c3RlbVwiLFxuICAgIFwic3lzdGVtX3RpbWVcIixcbiAgICBcInN5c3RlbV91c2VyXCIsXG4gICAgXCJ0YWJsZVwiLFxuICAgIFwidGFibGVzYW1wbGVcIixcbiAgICBcInRhblwiLFxuICAgIFwidGFuaFwiLFxuICAgIFwidGhlblwiLFxuICAgIFwidGltZVwiLFxuICAgIFwidGltZXN0YW1wXCIsXG4gICAgXCJ0aW1lem9uZV9ob3VyXCIsXG4gICAgXCJ0aW1lem9uZV9taW51dGVcIixcbiAgICBcInRvXCIsXG4gICAgXCJ0cmFpbGluZ1wiLFxuICAgIFwidHJhbnNsYXRlXCIsXG4gICAgXCJ0cmFuc2xhdGVfcmVnZXhcIixcbiAgICBcInRyYW5zbGF0aW9uXCIsXG4gICAgXCJ0cmVhdFwiLFxuICAgIFwidHJpZ2dlclwiLFxuICAgIFwidHJpbVwiLFxuICAgIFwidHJpbV9hcnJheVwiLFxuICAgIFwidHJ1ZVwiLFxuICAgIFwidHJ1bmNhdGVcIixcbiAgICBcInVlc2NhcGVcIixcbiAgICBcInVuaW9uXCIsXG4gICAgXCJ1bmlxdWVcIixcbiAgICBcInVua25vd25cIixcbiAgICBcInVubmVzdFwiLFxuICAgIFwidXBkYXRlXCIsXG4gICAgXCJ1cHBlclwiLFxuICAgIFwidXNlclwiLFxuICAgIFwidXNpbmdcIixcbiAgICBcInZhbHVlXCIsXG4gICAgXCJ2YWx1ZXNcIixcbiAgICBcInZhbHVlX29mXCIsXG4gICAgXCJ2YXJfcG9wXCIsXG4gICAgXCJ2YXJfc2FtcFwiLFxuICAgIFwidmFyYmluYXJ5XCIsXG4gICAgXCJ2YXJjaGFyXCIsXG4gICAgXCJ2YXJ5aW5nXCIsXG4gICAgXCJ2ZXJzaW9uaW5nXCIsXG4gICAgXCJ3aGVuXCIsXG4gICAgXCJ3aGVuZXZlclwiLFxuICAgIFwid2hlcmVcIixcbiAgICBcIndpZHRoX2J1Y2tldFwiLFxuICAgIFwid2luZG93XCIsXG4gICAgXCJ3aXRoXCIsXG4gICAgXCJ3aXRoaW5cIixcbiAgICBcIndpdGhvdXRcIixcbiAgICBcInllYXJcIixcbiAgXTtcblxuICAvLyB0aGVzZSBhcmUgcmVzZXJ2ZWQgd29yZHMgd2UgaGF2ZSBpZGVudGlmaWVkIHRvIGJlIGZ1bmN0aW9uc1xuICAvLyBhbmQgc2hvdWxkIG9ubHkgYmUgaGlnaGxpZ2h0ZWQgaW4gYSBkaXNwYXRjaC1saWtlIGNvbnRleHRcbiAgLy8gaWUsIGFycmF5X2FnZyguLi4pLCBldGMuXG4gIGNvbnN0IFJFU0VSVkVEX0ZVTkNUSU9OUyA9IFtcbiAgICBcImFic1wiLFxuICAgIFwiYWNvc1wiLFxuICAgIFwiYXJyYXlfYWdnXCIsXG4gICAgXCJhc2luXCIsXG4gICAgXCJhdGFuXCIsXG4gICAgXCJhdmdcIixcbiAgICBcImNhc3RcIixcbiAgICBcImNlaWxcIixcbiAgICBcImNlaWxpbmdcIixcbiAgICBcImNvYWxlc2NlXCIsXG4gICAgXCJjb3JyXCIsXG4gICAgXCJjb3NcIixcbiAgICBcImNvc2hcIixcbiAgICBcImNvdW50XCIsXG4gICAgXCJjb3Zhcl9wb3BcIixcbiAgICBcImNvdmFyX3NhbXBcIixcbiAgICBcImN1bWVfZGlzdFwiLFxuICAgIFwiZGVuc2VfcmFua1wiLFxuICAgIFwiZGVyZWZcIixcbiAgICBcImVsZW1lbnRcIixcbiAgICBcImV4cFwiLFxuICAgIFwiZXh0cmFjdFwiLFxuICAgIFwiZmlyc3RfdmFsdWVcIixcbiAgICBcImZsb29yXCIsXG4gICAgXCJqc29uX2FycmF5XCIsXG4gICAgXCJqc29uX2FycmF5YWdnXCIsXG4gICAgXCJqc29uX2V4aXN0c1wiLFxuICAgIFwianNvbl9vYmplY3RcIixcbiAgICBcImpzb25fb2JqZWN0YWdnXCIsXG4gICAgXCJqc29uX3F1ZXJ5XCIsXG4gICAgXCJqc29uX3RhYmxlXCIsXG4gICAgXCJqc29uX3RhYmxlX3ByaW1pdGl2ZVwiLFxuICAgIFwianNvbl92YWx1ZVwiLFxuICAgIFwibGFnXCIsXG4gICAgXCJsYXN0X3ZhbHVlXCIsXG4gICAgXCJsZWFkXCIsXG4gICAgXCJsaXN0YWdnXCIsXG4gICAgXCJsblwiLFxuICAgIFwibG9nXCIsXG4gICAgXCJsb2cxMFwiLFxuICAgIFwibG93ZXJcIixcbiAgICBcIm1heFwiLFxuICAgIFwibWluXCIsXG4gICAgXCJtb2RcIixcbiAgICBcIm50aF92YWx1ZVwiLFxuICAgIFwibnRpbGVcIixcbiAgICBcIm51bGxpZlwiLFxuICAgIFwicGVyY2VudF9yYW5rXCIsXG4gICAgXCJwZXJjZW50aWxlX2NvbnRcIixcbiAgICBcInBlcmNlbnRpbGVfZGlzY1wiLFxuICAgIFwicG9zaXRpb25cIixcbiAgICBcInBvc2l0aW9uX3JlZ2V4XCIsXG4gICAgXCJwb3dlclwiLFxuICAgIFwicmFua1wiLFxuICAgIFwicmVncl9hdmd4XCIsXG4gICAgXCJyZWdyX2F2Z3lcIixcbiAgICBcInJlZ3JfY291bnRcIixcbiAgICBcInJlZ3JfaW50ZXJjZXB0XCIsXG4gICAgXCJyZWdyX3IyXCIsXG4gICAgXCJyZWdyX3Nsb3BlXCIsXG4gICAgXCJyZWdyX3N4eFwiLFxuICAgIFwicmVncl9zeHlcIixcbiAgICBcInJlZ3Jfc3l5XCIsXG4gICAgXCJyb3dfbnVtYmVyXCIsXG4gICAgXCJzaW5cIixcbiAgICBcInNpbmhcIixcbiAgICBcInNxcnRcIixcbiAgICBcInN0ZGRldl9wb3BcIixcbiAgICBcInN0ZGRldl9zYW1wXCIsXG4gICAgXCJzdWJzdHJpbmdcIixcbiAgICBcInN1YnN0cmluZ19yZWdleFwiLFxuICAgIFwic3VtXCIsXG4gICAgXCJ0YW5cIixcbiAgICBcInRhbmhcIixcbiAgICBcInRyYW5zbGF0ZVwiLFxuICAgIFwidHJhbnNsYXRlX3JlZ2V4XCIsXG4gICAgXCJ0cmVhdFwiLFxuICAgIFwidHJpbVwiLFxuICAgIFwidHJpbV9hcnJheVwiLFxuICAgIFwidW5uZXN0XCIsXG4gICAgXCJ1cHBlclwiLFxuICAgIFwidmFsdWVfb2ZcIixcbiAgICBcInZhcl9wb3BcIixcbiAgICBcInZhcl9zYW1wXCIsXG4gICAgXCJ3aWR0aF9idWNrZXRcIixcbiAgXTtcblxuICAvLyB0aGVzZSBmdW5jdGlvbnMgY2FuXG4gIGNvbnN0IFBPU1NJQkxFX1dJVEhPVVRfUEFSRU5TID0gW1xuICAgIFwiY3VycmVudF9jYXRhbG9nXCIsXG4gICAgXCJjdXJyZW50X2RhdGVcIixcbiAgICBcImN1cnJlbnRfZGVmYXVsdF90cmFuc2Zvcm1fZ3JvdXBcIixcbiAgICBcImN1cnJlbnRfcGF0aFwiLFxuICAgIFwiY3VycmVudF9yb2xlXCIsXG4gICAgXCJjdXJyZW50X3NjaGVtYVwiLFxuICAgIFwiY3VycmVudF90cmFuc2Zvcm1fZ3JvdXBfZm9yX3R5cGVcIixcbiAgICBcImN1cnJlbnRfdXNlclwiLFxuICAgIFwic2Vzc2lvbl91c2VyXCIsXG4gICAgXCJzeXN0ZW1fdGltZVwiLFxuICAgIFwic3lzdGVtX3VzZXJcIixcbiAgICBcImN1cnJlbnRfdGltZVwiLFxuICAgIFwibG9jYWx0aW1lXCIsXG4gICAgXCJjdXJyZW50X3RpbWVzdGFtcFwiLFxuICAgIFwibG9jYWx0aW1lc3RhbXBcIlxuICBdO1xuXG4gIC8vIHRob3NlIGV4aXN0IHRvIGJvb3N0IHJlbGV2YW5jZSBtYWtpbmcgdGhlc2UgdmVyeVxuICAvLyBcIlNRTCBsaWtlXCIga2V5d29yZCBjb21ib3Mgd29ydGggKzEgZXh0cmEgcmVsZXZhbmNlXG4gIGNvbnN0IENPTUJPUyA9IFtcbiAgICBcImNyZWF0ZSB0YWJsZVwiLFxuICAgIFwiaW5zZXJ0IGludG9cIixcbiAgICBcInByaW1hcnkga2V5XCIsXG4gICAgXCJmb3JlaWduIGtleVwiLFxuICAgIFwibm90IG51bGxcIixcbiAgICBcImFsdGVyIHRhYmxlXCIsXG4gICAgXCJhZGQgY29uc3RyYWludFwiLFxuICAgIFwiZ3JvdXBpbmcgc2V0c1wiLFxuICAgIFwib24gb3ZlcmZsb3dcIixcbiAgICBcImNoYXJhY3RlciBzZXRcIixcbiAgICBcInJlc3BlY3QgbnVsbHNcIixcbiAgICBcImlnbm9yZSBudWxsc1wiLFxuICAgIFwibnVsbHMgZmlyc3RcIixcbiAgICBcIm51bGxzIGxhc3RcIixcbiAgICBcImRlcHRoIGZpcnN0XCIsXG4gICAgXCJicmVhZHRoIGZpcnN0XCJcbiAgXTtcblxuICBjb25zdCBGVU5DVElPTlMgPSBSRVNFUlZFRF9GVU5DVElPTlM7XG5cbiAgY29uc3QgS0VZV09SRFMgPSBbXG4gICAgLi4uUkVTRVJWRURfV09SRFMsXG4gICAgLi4uTk9OX1JFU0VSVkVEX1dPUkRTXG4gIF0uZmlsdGVyKChrZXl3b3JkKSA9PiB7XG4gICAgcmV0dXJuICFSRVNFUlZFRF9GVU5DVElPTlMuaW5jbHVkZXMoa2V5d29yZCk7XG4gIH0pO1xuXG4gIGNvbnN0IFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogXCJ2YXJpYWJsZVwiLFxuICAgIGJlZ2luOiAvQFthLXowLTldKy8sXG4gIH07XG5cbiAgY29uc3QgT1BFUkFUT1IgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm9wZXJhdG9yXCIsXG4gICAgYmVnaW46IC9bLSsqLz0lXn5dfCYmP3xcXHxcXHw/fCE9P3w8KD86PT4/fDx8Pik/fD5bPj1dPy8sXG4gICAgcmVsZXZhbmNlOiAwLFxuICB9O1xuXG4gIGNvbnN0IEZVTkNUSU9OX0NBTEwgPSB7XG4gICAgYmVnaW46IHJlZ2V4LmNvbmNhdCgvXFxiLywgcmVnZXguZWl0aGVyKC4uLkZVTkNUSU9OUyksIC9cXHMqXFwoLyksXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGtleXdvcmRzOiB7IGJ1aWx0X2luOiBGVU5DVElPTlMgfVxuICB9O1xuXG4gIC8vIGtleXdvcmRzIHdpdGggbGVzcyB0aGFuIDMgbGV0dGVycyBhcmUgcmVkdWNlZCBpbiByZWxldmFuY3lcbiAgZnVuY3Rpb24gcmVkdWNlUmVsZXZhbmN5KGxpc3QsIHtcbiAgICBleGNlcHRpb25zLCB3aGVuXG4gIH0gPSB7fSkge1xuICAgIGNvbnN0IHF1YWxpZnlGbiA9IHdoZW47XG4gICAgZXhjZXB0aW9ucyA9IGV4Y2VwdGlvbnMgfHwgW107XG4gICAgcmV0dXJuIGxpc3QubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS5tYXRjaCgvXFx8XFxkKyQvKSB8fCBleGNlcHRpb25zLmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSBlbHNlIGlmIChxdWFsaWZ5Rm4oaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIGAke2l0ZW19fDBgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdTUUwnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgLy8gZG9lcyBub3QgaW5jbHVkZSB7fSBvciBIVE1MIHRhZ3MgYDwvYFxuICAgIGlsbGVnYWw6IC9be31dfDxcXC8vLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogL1xcYltcXHdcXC5dKy8sXG4gICAgICBrZXl3b3JkOlxuICAgICAgICByZWR1Y2VSZWxldmFuY3koS0VZV09SRFMsIHsgd2hlbjogKHgpID0+IHgubGVuZ3RoIDwgMyB9KSxcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgICAgdHlwZTogVFlQRVMsXG4gICAgICBidWlsdF9pbjogUE9TU0lCTEVfV0lUSE9VVF9QQVJFTlNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiByZWdleC5laXRoZXIoLi4uQ09NQk9TKSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICRwYXR0ZXJuOiAvW1xcd1xcLl0rLyxcbiAgICAgICAgICBrZXl3b3JkOiBLRVlXT1JEUy5jb25jYXQoQ09NQk9TKSxcbiAgICAgICAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICAgICAgICB0eXBlOiBUWVBFU1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInR5cGVcIixcbiAgICAgICAgYmVnaW46IHJlZ2V4LmVpdGhlciguLi5NVUxUSV9XT1JEX1RZUEVTKVxuICAgICAgfSxcbiAgICAgIEZVTkNUSU9OX0NBTEwsXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIFNUUklORyxcbiAgICAgIFFVT1RFRF9JREVOVElGSUVSLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIENPTU1FTlRfTU9ERSxcbiAgICAgIE9QRVJBVE9SXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNxbDtcbiIsIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICogKi9cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzb3VyY2UocmUpIHtcbiAgaWYgKCFyZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgcmUgPT09IFwic3RyaW5nXCIpIHJldHVybiByZTtcblxuICByZXR1cm4gcmUuc291cmNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGxvb2thaGVhZChyZSkge1xuICByZXR1cm4gY29uY2F0KCcoPz0nLCByZSwgJyknKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyBBcnJheTxzdHJpbmcgfCBSZWdFeHAgfCBPYmplY3Q+IH0gYXJnc1xuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gc3RyaXBPcHRpb25zRnJvbUFyZ3MoYXJncykge1xuICBjb25zdCBvcHRzID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgb3B0cy5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gICAgYXJncy5zcGxpY2UoYXJncy5sZW5ndGggLSAxLCAxKTtcbiAgICByZXR1cm4gb3B0cztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuLyoqIEB0eXBlZGVmIHsge2NhcHR1cmU/OiBib29sZWFufSB9IFJlZ2V4RWl0aGVyT3B0aW9ucyAqL1xuXG4vKipcbiAqIEFueSBvZiB0aGUgcGFzc2VkIGV4cHJlc3NzaW9ucyBtYXkgbWF0Y2hcbiAqXG4gKiBDcmVhdGVzIGEgaHVnZSB0aGlzIHwgdGhpcyB8IHRoYXQgfCB0aGF0IG1hdGNoXG4gKiBAcGFyYW0geyhSZWdFeHAgfCBzdHJpbmcpW10gfCBbLi4uKFJlZ0V4cCB8IHN0cmluZylbXSwgUmVnZXhFaXRoZXJPcHRpb25zXX0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZWl0aGVyKC4uLmFyZ3MpIHtcbiAgLyoqIEB0eXBlIHsgb2JqZWN0ICYge2NhcHR1cmU/OiBib29sZWFufSB9ICAqL1xuICBjb25zdCBvcHRzID0gc3RyaXBPcHRpb25zRnJvbUFyZ3MoYXJncyk7XG4gIGNvbnN0IGpvaW5lZCA9ICcoJ1xuICAgICsgKG9wdHMuY2FwdHVyZSA/IFwiXCIgOiBcIj86XCIpXG4gICAgKyBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwifFwiKSArIFwiKVwiO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG5jb25zdCBrZXl3b3JkV3JhcHBlciA9IGtleXdvcmQgPT4gY29uY2F0KFxuICAvXFxiLyxcbiAga2V5d29yZCxcbiAgL1xcdyQvLnRlc3Qoa2V5d29yZCkgPyAvXFxiLyA6IC9cXEIvXG4pO1xuXG4vLyBLZXl3b3JkcyB0aGF0IHJlcXVpcmUgYSBsZWFkaW5nIGRvdC5cbmNvbnN0IGRvdEtleXdvcmRzID0gW1xuICAnUHJvdG9jb2wnLCAvLyBjb250ZXh0dWFsXG4gICdUeXBlJyAvLyBjb250ZXh0dWFsXG5dLm1hcChrZXl3b3JkV3JhcHBlcik7XG5cbi8vIEtleXdvcmRzIHRoYXQgbWF5IGhhdmUgYSBsZWFkaW5nIGRvdC5cbmNvbnN0IG9wdGlvbmFsRG90S2V5d29yZHMgPSBbXG4gICdpbml0JyxcbiAgJ3NlbGYnXG5dLm1hcChrZXl3b3JkV3JhcHBlcik7XG5cbi8vIHNob3VsZCByZWdpc3RlciBhcyBrZXl3b3JkLCBub3QgdHlwZVxuY29uc3Qga2V5d29yZFR5cGVzID0gW1xuICAnQW55JyxcbiAgJ1NlbGYnXG5dO1xuXG4vLyBSZWd1bGFyIGtleXdvcmRzIGFuZCBsaXRlcmFscy5cbmNvbnN0IGtleXdvcmRzID0gW1xuICAvLyBzdHJpbmdzIGJlbG93IHdpbGwgYmUgZmVkIGludG8gdGhlIHJlZ3VsYXIgYGtleXdvcmRzYCBlbmdpbmUgd2hpbGUgcmVnZXhcbiAgLy8gd2lsbCByZXN1bHQgaW4gYWRkaXRpb25hbCBtb2RlcyBiZWluZyBjcmVhdGVkIHRvIHNjYW4gZm9yIHRob3NlIGtleXdvcmRzIHRvXG4gIC8vIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIHJ1bGVzXG4gICdhY3RvcicsXG4gICdhbnknLCAvLyBjb250ZXh0dWFsXG4gICdhc3NvY2lhdGVkdHlwZScsXG4gICdhc3luYycsXG4gICdhd2FpdCcsXG4gIC9hc1xcPy8sIC8vIG9wZXJhdG9yXG4gIC9hcyEvLCAvLyBvcGVyYXRvclxuICAnYXMnLCAvLyBvcGVyYXRvclxuICAnYnJlYWsnLFxuICAnY2FzZScsXG4gICdjYXRjaCcsXG4gICdjbGFzcycsXG4gICdjb250aW51ZScsXG4gICdjb252ZW5pZW5jZScsIC8vIGNvbnRleHR1YWxcbiAgJ2RlZmF1bHQnLFxuICAnZGVmZXInLFxuICAnZGVpbml0JyxcbiAgJ2RpZFNldCcsIC8vIGNvbnRleHR1YWxcbiAgJ2Rpc3RyaWJ1dGVkJyxcbiAgJ2RvJyxcbiAgJ2R5bmFtaWMnLCAvLyBjb250ZXh0dWFsXG4gICdlbHNlJyxcbiAgJ2VudW0nLFxuICAnZXh0ZW5zaW9uJyxcbiAgJ2ZhbGx0aHJvdWdoJyxcbiAgL2ZpbGVwcml2YXRlXFwoc2V0XFwpLyxcbiAgJ2ZpbGVwcml2YXRlJyxcbiAgJ2ZpbmFsJywgLy8gY29udGV4dHVhbFxuICAnZm9yJyxcbiAgJ2Z1bmMnLFxuICAnZ2V0JywgLy8gY29udGV4dHVhbFxuICAnZ3VhcmQnLFxuICAnaWYnLFxuICAnaW1wb3J0JyxcbiAgJ2luZGlyZWN0JywgLy8gY29udGV4dHVhbFxuICAnaW5maXgnLCAvLyBjb250ZXh0dWFsXG4gIC9pbml0XFw/LyxcbiAgL2luaXQhLyxcbiAgJ2lub3V0JyxcbiAgL2ludGVybmFsXFwoc2V0XFwpLyxcbiAgJ2ludGVybmFsJyxcbiAgJ2luJyxcbiAgJ2lzJywgLy8gb3BlcmF0b3JcbiAgJ2lzb2xhdGVkJywgLy8gY29udGV4dHVhbFxuICAnbm9uaXNvbGF0ZWQnLCAvLyBjb250ZXh0dWFsXG4gICdsYXp5JywgLy8gY29udGV4dHVhbFxuICAnbGV0JyxcbiAgJ211dGF0aW5nJywgLy8gY29udGV4dHVhbFxuICAnbm9ubXV0YXRpbmcnLCAvLyBjb250ZXh0dWFsXG4gIC9vcGVuXFwoc2V0XFwpLywgLy8gY29udGV4dHVhbFxuICAnb3BlbicsIC8vIGNvbnRleHR1YWxcbiAgJ29wZXJhdG9yJyxcbiAgJ29wdGlvbmFsJywgLy8gY29udGV4dHVhbFxuICAnb3ZlcnJpZGUnLCAvLyBjb250ZXh0dWFsXG4gICdwb3N0Zml4JywgLy8gY29udGV4dHVhbFxuICAncHJlY2VkZW5jZWdyb3VwJyxcbiAgJ3ByZWZpeCcsIC8vIGNvbnRleHR1YWxcbiAgL3ByaXZhdGVcXChzZXRcXCkvLFxuICAncHJpdmF0ZScsXG4gICdwcm90b2NvbCcsXG4gIC9wdWJsaWNcXChzZXRcXCkvLFxuICAncHVibGljJyxcbiAgJ3JlcGVhdCcsXG4gICdyZXF1aXJlZCcsIC8vIGNvbnRleHR1YWxcbiAgJ3JldGhyb3dzJyxcbiAgJ3JldHVybicsXG4gICdzZXQnLCAvLyBjb250ZXh0dWFsXG4gICdzb21lJywgLy8gY29udGV4dHVhbFxuICAnc3RhdGljJyxcbiAgJ3N0cnVjdCcsXG4gICdzdWJzY3JpcHQnLFxuICAnc3VwZXInLFxuICAnc3dpdGNoJyxcbiAgJ3Rocm93cycsXG4gICd0aHJvdycsXG4gIC90cnlcXD8vLCAvLyBvcGVyYXRvclxuICAvdHJ5IS8sIC8vIG9wZXJhdG9yXG4gICd0cnknLCAvLyBvcGVyYXRvclxuICAndHlwZWFsaWFzJyxcbiAgL3Vub3duZWRcXChzYWZlXFwpLywgLy8gY29udGV4dHVhbFxuICAvdW5vd25lZFxcKHVuc2FmZVxcKS8sIC8vIGNvbnRleHR1YWxcbiAgJ3Vub3duZWQnLCAvLyBjb250ZXh0dWFsXG4gICd2YXInLFxuICAnd2VhaycsIC8vIGNvbnRleHR1YWxcbiAgJ3doZXJlJyxcbiAgJ3doaWxlJyxcbiAgJ3dpbGxTZXQnIC8vIGNvbnRleHR1YWxcbl07XG5cbi8vIE5PVEU6IENvbnRleHR1YWwga2V5d29yZHMgYXJlIHJlc2VydmVkIG9ubHkgaW4gc3BlY2lmaWMgY29udGV4dHMuXG4vLyBJZGVhbGx5LCB0aGVzZSBzaG91bGQgYmUgbWF0Y2hlZCB1c2luZyBtb2RlcyB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMuXG5cbi8vIExpdGVyYWxzLlxuY29uc3QgbGl0ZXJhbHMgPSBbXG4gICdmYWxzZScsXG4gICduaWwnLFxuICAndHJ1ZSdcbl07XG5cbi8vIEtleXdvcmRzIHVzZWQgaW4gcHJlY2VkZW5jZSBncm91cHMuXG5jb25zdCBwcmVjZWRlbmNlZ3JvdXBLZXl3b3JkcyA9IFtcbiAgJ2Fzc2lnbm1lbnQnLFxuICAnYXNzb2NpYXRpdml0eScsXG4gICdoaWdoZXJUaGFuJyxcbiAgJ2xlZnQnLFxuICAnbG93ZXJUaGFuJyxcbiAgJ25vbmUnLFxuICAncmlnaHQnXG5dO1xuXG4vLyBLZXl3b3JkcyB0aGF0IHN0YXJ0IHdpdGggYSBudW1iZXIgc2lnbiAoIykuXG4vLyAjKHVuKWF2YWlsYWJsZSBpcyBoYW5kbGVkIHNlcGFyYXRlbHkuXG5jb25zdCBudW1iZXJTaWduS2V5d29yZHMgPSBbXG4gICcjY29sb3JMaXRlcmFsJyxcbiAgJyNjb2x1bW4nLFxuICAnI2Rzb2hhbmRsZScsXG4gICcjZWxzZScsXG4gICcjZWxzZWlmJyxcbiAgJyNlbmRpZicsXG4gICcjZXJyb3InLFxuICAnI2ZpbGUnLFxuICAnI2ZpbGVJRCcsXG4gICcjZmlsZUxpdGVyYWwnLFxuICAnI2ZpbGVQYXRoJyxcbiAgJyNmdW5jdGlvbicsXG4gICcjaWYnLFxuICAnI2ltYWdlTGl0ZXJhbCcsXG4gICcja2V5UGF0aCcsXG4gICcjbGluZScsXG4gICcjc2VsZWN0b3InLFxuICAnI3NvdXJjZUxvY2F0aW9uJyxcbiAgJyN3YXJuX3VucXVhbGlmaWVkX2FjY2VzcycsXG4gICcjd2FybmluZydcbl07XG5cbi8vIEdsb2JhbCBmdW5jdGlvbnMgaW4gdGhlIFN0YW5kYXJkIExpYnJhcnkuXG5jb25zdCBidWlsdElucyA9IFtcbiAgJ2FicycsXG4gICdhbGwnLFxuICAnYW55JyxcbiAgJ2Fzc2VydCcsXG4gICdhc3NlcnRpb25GYWlsdXJlJyxcbiAgJ2RlYnVnUHJpbnQnLFxuICAnZHVtcCcsXG4gICdmYXRhbEVycm9yJyxcbiAgJ2dldFZhTGlzdCcsXG4gICdpc0tub3duVW5pcXVlbHlSZWZlcmVuY2VkJyxcbiAgJ21heCcsXG4gICdtaW4nLFxuICAnbnVtZXJpY0Nhc3QnLFxuICAncG9pbnR3aXNlTWF4JyxcbiAgJ3BvaW50d2lzZU1pbicsXG4gICdwcmVjb25kaXRpb24nLFxuICAncHJlY29uZGl0aW9uRmFpbHVyZScsXG4gICdwcmludCcsXG4gICdyZWFkTGluZScsXG4gICdyZXBlYXRFbGVtZW50JyxcbiAgJ3NlcXVlbmNlJyxcbiAgJ3N0cmlkZScsXG4gICdzd2FwJyxcbiAgJ3N3aWZ0X3VuYm94RnJvbVN3aWZ0VmFsdWVXaXRoVHlwZScsXG4gICd0cmFuc2NvZGUnLFxuICAndHlwZScsXG4gICd1bnNhZmVCaXRDYXN0JyxcbiAgJ3Vuc2FmZURvd25jYXN0JyxcbiAgJ3dpdGhFeHRlbmRlZExpZmV0aW1lJyxcbiAgJ3dpdGhVbnNhZmVNdXRhYmxlUG9pbnRlcicsXG4gICd3aXRoVW5zYWZlUG9pbnRlcicsXG4gICd3aXRoVmFMaXN0JyxcbiAgJ3dpdGhvdXRBY3R1YWxseUVzY2FwaW5nJyxcbiAgJ3ppcCdcbl07XG5cbi8vIFZhbGlkIGZpcnN0IGNoYXJhY3RlcnMgZm9yIG9wZXJhdG9ycy5cbmNvbnN0IG9wZXJhdG9ySGVhZCA9IGVpdGhlcihcbiAgL1svPVxcLSshKiU8PiZ8Xn4/XS8sXG4gIC9bXFx1MDBBMS1cXHUwMEE3XS8sXG4gIC9bXFx1MDBBOVxcdTAwQUJdLyxcbiAgL1tcXHUwMEFDXFx1MDBBRV0vLFxuICAvW1xcdTAwQjBcXHUwMEIxXS8sXG4gIC9bXFx1MDBCNlxcdTAwQkJcXHUwMEJGXFx1MDBEN1xcdTAwRjddLyxcbiAgL1tcXHUyMDE2LVxcdTIwMTddLyxcbiAgL1tcXHUyMDIwLVxcdTIwMjddLyxcbiAgL1tcXHUyMDMwLVxcdTIwM0VdLyxcbiAgL1tcXHUyMDQxLVxcdTIwNTNdLyxcbiAgL1tcXHUyMDU1LVxcdTIwNUVdLyxcbiAgL1tcXHUyMTkwLVxcdTIzRkZdLyxcbiAgL1tcXHUyNTAwLVxcdTI3NzVdLyxcbiAgL1tcXHUyNzk0LVxcdTJCRkZdLyxcbiAgL1tcXHUyRTAwLVxcdTJFN0ZdLyxcbiAgL1tcXHUzMDAxLVxcdTMwMDNdLyxcbiAgL1tcXHUzMDA4LVxcdTMwMjBdLyxcbiAgL1tcXHUzMDMwXS9cbik7XG5cbi8vIFZhbGlkIGNoYXJhY3RlcnMgZm9yIG9wZXJhdG9ycy5cbmNvbnN0IG9wZXJhdG9yQ2hhcmFjdGVyID0gZWl0aGVyKFxuICBvcGVyYXRvckhlYWQsXG4gIC9bXFx1MDMwMC1cXHUwMzZGXS8sXG4gIC9bXFx1MURDMC1cXHUxREZGXS8sXG4gIC9bXFx1MjBEMC1cXHUyMEZGXS8sXG4gIC9bXFx1RkUwMC1cXHVGRTBGXS8sXG4gIC9bXFx1RkUyMC1cXHVGRTJGXS9cbiAgLy8gVE9ETzogVGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGFyZSBhbHNvIGFsbG93ZWQsIGJ1dCB0aGUgcmVnZXggaXNuJ3Qgc3VwcG9ydGVkIHlldC5cbiAgLy8gL1tcXHV7RTAxMDB9LVxcdXtFMDFFRn1dL3Vcbik7XG5cbi8vIFZhbGlkIG9wZXJhdG9yLlxuY29uc3Qgb3BlcmF0b3IgPSBjb25jYXQob3BlcmF0b3JIZWFkLCBvcGVyYXRvckNoYXJhY3RlciwgJyonKTtcblxuLy8gVmFsaWQgZmlyc3QgY2hhcmFjdGVycyBmb3IgaWRlbnRpZmllcnMuXG5jb25zdCBpZGVudGlmaWVySGVhZCA9IGVpdGhlcihcbiAgL1thLXpBLVpfXS8sXG4gIC9bXFx1MDBBOFxcdTAwQUFcXHUwMEFEXFx1MDBBRlxcdTAwQjItXFx1MDBCNVxcdTAwQjctXFx1MDBCQV0vLFxuICAvW1xcdTAwQkMtXFx1MDBCRVxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDBGRl0vLFxuICAvW1xcdTAxMDAtXFx1MDJGRlxcdTAzNzAtXFx1MTY3RlxcdTE2ODEtXFx1MTgwRFxcdTE4MEYtXFx1MURCRl0vLFxuICAvW1xcdTFFMDAtXFx1MUZGRl0vLFxuICAvW1xcdTIwMEItXFx1MjAwRFxcdTIwMkEtXFx1MjAyRVxcdTIwM0YtXFx1MjA0MFxcdTIwNTRcXHUyMDYwLVxcdTIwNkZdLyxcbiAgL1tcXHUyMDcwLVxcdTIwQ0ZcXHUyMTAwLVxcdTIxOEZcXHUyNDYwLVxcdTI0RkZcXHUyNzc2LVxcdTI3OTNdLyxcbiAgL1tcXHUyQzAwLVxcdTJERkZcXHUyRTgwLVxcdTJGRkZdLyxcbiAgL1tcXHUzMDA0LVxcdTMwMDdcXHUzMDIxLVxcdTMwMkZcXHUzMDMxLVxcdTMwM0ZcXHUzMDQwLVxcdUQ3RkZdLyxcbiAgL1tcXHVGOTAwLVxcdUZEM0RcXHVGRDQwLVxcdUZEQ0ZcXHVGREYwLVxcdUZFMUZcXHVGRTMwLVxcdUZFNDRdLyxcbiAgL1tcXHVGRTQ3LVxcdUZFRkVcXHVGRjAwLVxcdUZGRkRdLyAvLyBTaG91bGQgYmUgL1tcXHVGRTQ3LVxcdUZGRkRdLywgYnV0IHdlIGhhdmUgdG8gZXhjbHVkZSBGRUZGLlxuICAvLyBUaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIGFsc28gYWxsb3dlZCwgYnV0IHRoZSByZWdleGVzIGFyZW4ndCBzdXBwb3J0ZWQgeWV0LlxuICAvLyAvW1xcdXsxMDAwMH0tXFx1ezFGRkZEfVxcdXsyMDAwMC1cXHV7MkZGRkR9XFx1ezMwMDAwfS1cXHV7M0ZGRkR9XFx1ezQwMDAwfS1cXHV7NEZGRkR9XS91LFxuICAvLyAvW1xcdXs1MDAwMH0tXFx1ezVGRkZEfVxcdXs2MDAwMC1cXHV7NkZGRkR9XFx1ezcwMDAwfS1cXHV7N0ZGRkR9XFx1ezgwMDAwfS1cXHV7OEZGRkR9XS91LFxuICAvLyAvW1xcdXs5MDAwMH0tXFx1ezlGRkZEfVxcdXtBMDAwMC1cXHV7QUZGRkR9XFx1e0IwMDAwfS1cXHV7QkZGRkR9XFx1e0MwMDAwfS1cXHV7Q0ZGRkR9XS91LFxuICAvLyAvW1xcdXtEMDAwMH0tXFx1e0RGRkZEfVxcdXtFMDAwMC1cXHV7RUZGRkR9XS91XG4pO1xuXG4vLyBWYWxpZCBjaGFyYWN0ZXJzIGZvciBpZGVudGlmaWVycy5cbmNvbnN0IGlkZW50aWZpZXJDaGFyYWN0ZXIgPSBlaXRoZXIoXG4gIGlkZW50aWZpZXJIZWFkLFxuICAvXFxkLyxcbiAgL1tcXHUwMzAwLVxcdTAzNkZcXHUxREMwLVxcdTFERkZcXHUyMEQwLVxcdTIwRkZcXHVGRTIwLVxcdUZFMkZdL1xuKTtcblxuLy8gVmFsaWQgaWRlbnRpZmllci5cbmNvbnN0IGlkZW50aWZpZXIgPSBjb25jYXQoaWRlbnRpZmllckhlYWQsIGlkZW50aWZpZXJDaGFyYWN0ZXIsICcqJyk7XG5cbi8vIFZhbGlkIHR5cGUgaWRlbnRpZmllci5cbmNvbnN0IHR5cGVJZGVudGlmaWVyID0gY29uY2F0KC9bQS1aXS8sIGlkZW50aWZpZXJDaGFyYWN0ZXIsICcqJyk7XG5cbi8vIEJ1aWx0LWluIGF0dHJpYnV0ZXMsIHdoaWNoIGFyZSBoaWdobGlnaHRlZCBhcyBrZXl3b3Jkcy5cbi8vIEBhdmFpbGFibGUgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LlxuY29uc3Qga2V5d29yZEF0dHJpYnV0ZXMgPSBbXG4gICdhdXRvY2xvc3VyZScsXG4gIGNvbmNhdCgvY29udmVudGlvblxcKC8sIGVpdGhlcignc3dpZnQnLCAnYmxvY2snLCAnYycpLCAvXFwpLyksXG4gICdkaXNjYXJkYWJsZVJlc3VsdCcsXG4gICdkeW5hbWljQ2FsbGFibGUnLFxuICAnZHluYW1pY01lbWJlckxvb2t1cCcsXG4gICdlc2NhcGluZycsXG4gICdmcm96ZW4nLFxuICAnR0tJbnNwZWN0YWJsZScsXG4gICdJQkFjdGlvbicsXG4gICdJQkRlc2lnbmFibGUnLFxuICAnSUJJbnNwZWN0YWJsZScsXG4gICdJQk91dGxldCcsXG4gICdJQlNlZ3VlQWN0aW9uJyxcbiAgJ2lubGluYWJsZScsXG4gICdtYWluJyxcbiAgJ25vbm9iamMnLFxuICAnTlNBcHBsaWNhdGlvbk1haW4nLFxuICAnTlNDb3B5aW5nJyxcbiAgJ05TTWFuYWdlZCcsXG4gIGNvbmNhdCgvb2JqY1xcKC8sIGlkZW50aWZpZXIsIC9cXCkvKSxcbiAgJ29iamMnLFxuICAnb2JqY01lbWJlcnMnLFxuICAncHJvcGVydHlXcmFwcGVyJyxcbiAgJ3JlcXVpcmVzX3N0b3JlZF9wcm9wZXJ0eV9pbml0cycsXG4gICdyZXN1bHRCdWlsZGVyJyxcbiAgJ3Rlc3RhYmxlJyxcbiAgJ1VJQXBwbGljYXRpb25NYWluJyxcbiAgJ3Vua25vd24nLFxuICAndXNhYmxlRnJvbUlubGluZSdcbl07XG5cbi8vIENvbnRleHR1YWwga2V5d29yZHMgdXNlZCBpbiBAYXZhaWxhYmxlIGFuZCAjKHVuKWF2YWlsYWJsZS5cbmNvbnN0IGF2YWlsYWJpbGl0eUtleXdvcmRzID0gW1xuICAnaU9TJyxcbiAgJ2lPU0FwcGxpY2F0aW9uRXh0ZW5zaW9uJyxcbiAgJ21hY09TJyxcbiAgJ21hY09TQXBwbGljYXRpb25FeHRlbnNpb24nLFxuICAnbWFjQ2F0YWx5c3QnLFxuICAnbWFjQ2F0YWx5c3RBcHBsaWNhdGlvbkV4dGVuc2lvbicsXG4gICd3YXRjaE9TJyxcbiAgJ3dhdGNoT1NBcHBsaWNhdGlvbkV4dGVuc2lvbicsXG4gICd0dk9TJyxcbiAgJ3R2T1NBcHBsaWNhdGlvbkV4dGVuc2lvbicsXG4gICdzd2lmdCdcbl07XG5cbi8qXG5MYW5ndWFnZTogU3dpZnRcbkRlc2NyaXB0aW9uOiBTd2lmdCBpcyBhIGdlbmVyYWwtcHVycG9zZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBidWlsdCB1c2luZyBhIG1vZGVybiBhcHByb2FjaCB0byBzYWZldHksIHBlcmZvcm1hbmNlLCBhbmQgc29mdHdhcmUgZGVzaWduIHBhdHRlcm5zLlxuQXV0aG9yOiBTdGV2ZW4gVmFuIEltcGUgPHN0ZXZlbi52YW5pbXBlQGljbG91ZC5jb20+XG5Db250cmlidXRvcnM6IENocmlzIEVpZGhvZiA8Y2hyaXNAZWlkaG9mLm5sPiwgTmF0ZSBDb29rIDxuYXRlY29va0BnbWFpbC5jb20+LCBBbGV4YW5kZXIgTGljaHRlciA8bWFubmlMQGdteC5uZXQ+LCBSaWNoYXJkIEdpYnNvbiA8Z2lic29uMDQyQGdpdGh1Yj5cbldlYnNpdGU6IGh0dHBzOi8vc3dpZnQub3JnXG5DYXRlZ29yeTogY29tbW9uLCBzeXN0ZW1cbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBzd2lmdChobGpzKSB7XG4gIGNvbnN0IFdISVRFU1BBQ0UgPSB7XG4gICAgbWF0Y2g6IC9cXHMrLyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9MZXhpY2FsU3RydWN0dXJlLmh0bWwjSUQ0MTFcbiAgY29uc3QgQkxPQ0tfQ09NTUVOVCA9IGhsanMuQ09NTUVOVChcbiAgICAnL1xcXFwqJyxcbiAgICAnXFxcXCovJyxcbiAgICB7IGNvbnRhaW5zOiBbICdzZWxmJyBdIH1cbiAgKTtcbiAgY29uc3QgQ09NTUVOVFMgPSBbXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIEJMT0NLX0NPTU1FTlRcbiAgXTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0xleGljYWxTdHJ1Y3R1cmUuaHRtbCNJRDQxM1xuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL3p6U3VtbWFyeU9mVGhlR3JhbW1hci5odG1sXG4gIGNvbnN0IERPVF9LRVlXT1JEID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvXFwuLyxcbiAgICAgIGVpdGhlciguLi5kb3RLZXl3b3JkcywgLi4ub3B0aW9uYWxEb3RLZXl3b3JkcylcbiAgICBdLFxuICAgIGNsYXNzTmFtZTogeyAyOiBcImtleXdvcmRcIiB9XG4gIH07XG4gIGNvbnN0IEtFWVdPUkRfR1VBUkQgPSB7XG4gICAgLy8gQ29uc3VtZSAua2V5d29yZCB0byBwcmV2ZW50IGhpZ2hsaWdodGluZyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGFzIGtleXdvcmRzLlxuICAgIG1hdGNoOiBjb25jYXQoL1xcLi8sIGVpdGhlciguLi5rZXl3b3JkcykpLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBQTEFJTl9LRVlXT1JEUyA9IGtleXdvcmRzXG4gICAgLmZpbHRlcihrdyA9PiB0eXBlb2Yga3cgPT09ICdzdHJpbmcnKVxuICAgIC5jb25jYXQoWyBcIl98MFwiIF0pOyAvLyBzZWVtcyBjb21tb24sIHNvIDAgcmVsZXZhbmNlXG4gIGNvbnN0IFJFR0VYX0tFWVdPUkRTID0ga2V5d29yZHNcbiAgICAuZmlsdGVyKGt3ID0+IHR5cGVvZiBrdyAhPT0gJ3N0cmluZycpIC8vIGZpbmQgcmVnZXhcbiAgICAuY29uY2F0KGtleXdvcmRUeXBlcylcbiAgICAubWFwKGtleXdvcmRXcmFwcGVyKTtcbiAgY29uc3QgS0VZV09SRCA9IHsgdmFyaWFudHM6IFtcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgIG1hdGNoOiBlaXRoZXIoLi4uUkVHRVhfS0VZV09SRFMsIC4uLm9wdGlvbmFsRG90S2V5d29yZHMpXG4gICAgfVxuICBdIH07XG4gIC8vIGZpbmQgYWxsIHRoZSByZWd1bGFyIGtleXdvcmRzXG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgICRwYXR0ZXJuOiBlaXRoZXIoXG4gICAgICAvXFxiXFx3Ky8sIC8vIHJlZ3VsYXIga2V5d29yZHNcbiAgICAgIC8jXFx3Ky8gLy8gbnVtYmVyIGtleXdvcmRzXG4gICAgKSxcbiAgICBrZXl3b3JkOiBQTEFJTl9LRVlXT1JEU1xuICAgICAgLmNvbmNhdChudW1iZXJTaWduS2V5d29yZHMpLFxuICAgIGxpdGVyYWw6IGxpdGVyYWxzXG4gIH07XG4gIGNvbnN0IEtFWVdPUkRfTU9ERVMgPSBbXG4gICAgRE9UX0tFWVdPUkQsXG4gICAgS0VZV09SRF9HVUFSRCxcbiAgICBLRVlXT1JEXG4gIF07XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGxlL3N3aWZ0L3RyZWUvbWFpbi9zdGRsaWIvcHVibGljL2NvcmVcbiAgY29uc3QgQlVJTFRfSU5fR1VBUkQgPSB7XG4gICAgLy8gQ29uc3VtZSAuYnVpbHRfaW4gdG8gcHJldmVudCBoaWdobGlnaHRpbmcgcHJvcGVydGllcyBhbmQgbWV0aG9kcy5cbiAgICBtYXRjaDogY29uY2F0KC9cXC4vLCBlaXRoZXIoLi4uYnVpbHRJbnMpKSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgQlVJTFRfSU4gPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIG1hdGNoOiBjb25jYXQoL1xcYi8sIGVpdGhlciguLi5idWlsdElucyksIC8oPz1cXCgpLylcbiAgfTtcbiAgY29uc3QgQlVJTFRfSU5TID0gW1xuICAgIEJVSUxUX0lOX0dVQVJELFxuICAgIEJVSUxUX0lOXG4gIF07XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9MZXhpY2FsU3RydWN0dXJlLmh0bWwjSUQ0MThcbiAgY29uc3QgT1BFUkFUT1JfR1VBUkQgPSB7XG4gICAgLy8gUHJldmVudCAtPiBmcm9tIGJlaW5nIGhpZ2hsaWdodGluZyBhcyBhbiBvcGVyYXRvci5cbiAgICBtYXRjaDogLy0+LyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgT1BFUkFUT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnb3BlcmF0b3InLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBtYXRjaDogb3BlcmF0b3IgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gZG90LW9wZXJhdG9yOiBvbmx5IG9wZXJhdG9ycyB0aGF0IHN0YXJ0IHdpdGggYSBkb3QgYXJlIGFsbG93ZWQgdG8gdXNlIGRvdHMgYXNcbiAgICAgICAgLy8gY2hhcmFjdGVycyAoLi4uLCAuLi48LCAuKiwgZXRjKS4gU28gdGhlcmUgcnVsZSBoZXJlIGlzOiBhIGRvdCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZVxuICAgICAgICAvLyBjaGFyYWN0ZXJzIHRoYXQgbWF5IGFsc28gaW5jbHVkZSBkb3RzLlxuICAgICAgICBtYXRjaDogYFxcXFwuKFxcXFwufCR7b3BlcmF0b3JDaGFyYWN0ZXJ9KStgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IE9QRVJBVE9SUyA9IFtcbiAgICBPUEVSQVRPUl9HVUFSRCxcbiAgICBPUEVSQVRPUlxuICBdO1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvTGV4aWNhbFN0cnVjdHVyZS5odG1sI2dyYW1tYXJfbnVtZXJpYy1saXRlcmFsXG4gIC8vIFRPRE86IFVwZGF0ZSBmb3IgbGVhZGluZyBgLWAgYWZ0ZXIgbG9va2JlaGluZCBpcyBzdXBwb3J0ZWQgZXZlcnl3aGVyZVxuICBjb25zdCBkZWNpbWFsRGlnaXRzID0gJyhbMC05XV8qKSsnO1xuICBjb25zdCBoZXhEaWdpdHMgPSAnKFswLTlhLWZBLUZdXyopKyc7XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gZGVjaW1hbCBmbG9hdGluZy1wb2ludC1saXRlcmFsIChzdWJzdW1lcyBkZWNpbWFsLWxpdGVyYWwpXG4gICAgICB7IG1hdGNoOiBgXFxcXGIoJHtkZWNpbWFsRGlnaXRzfSkoXFxcXC4oJHtkZWNpbWFsRGlnaXRzfSkpP2AgKyBgKFtlRV1bKy1dPygke2RlY2ltYWxEaWdpdHN9KSk/XFxcXGJgIH0sXG4gICAgICAvLyBoZXhhZGVjaW1hbCBmbG9hdGluZy1wb2ludC1saXRlcmFsIChzdWJzdW1lcyBoZXhhZGVjaW1hbC1saXRlcmFsKVxuICAgICAgeyBtYXRjaDogYFxcXFxiMHgoJHtoZXhEaWdpdHN9KShcXFxcLigke2hleERpZ2l0c30pKT9gICsgYChbcFBdWystXT8oJHtkZWNpbWFsRGlnaXRzfSkpP1xcXFxiYCB9LFxuICAgICAgLy8gb2N0YWwtbGl0ZXJhbFxuICAgICAgeyBtYXRjaDogL1xcYjBvKFswLTddXyopK1xcYi8gfSxcbiAgICAgIC8vIGJpbmFyeS1saXRlcmFsXG4gICAgICB7IG1hdGNoOiAvXFxiMGIoWzAxXV8qKStcXGIvIH1cbiAgICBdXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9MZXhpY2FsU3RydWN0dXJlLmh0bWwjZ3JhbW1hcl9zdHJpbmctbGl0ZXJhbFxuICBjb25zdCBFU0NBUEVEX0NIQVJBQ1RFUiA9IChyYXdEZWxpbWl0ZXIgPSBcIlwiKSA9PiAoe1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBtYXRjaDogY29uY2F0KC9cXFxcLywgcmF3RGVsaW1pdGVyLCAvWzBcXFxcdG5yXCInXS8pIH0sXG4gICAgICB7IG1hdGNoOiBjb25jYXQoL1xcXFwvLCByYXdEZWxpbWl0ZXIsIC91XFx7WzAtOWEtZkEtRl17MSw4fVxcfS8pIH1cbiAgICBdXG4gIH0pO1xuICBjb25zdCBFU0NBUEVEX05FV0xJTkUgPSAocmF3RGVsaW1pdGVyID0gXCJcIikgPT4gKHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgbWF0Y2g6IGNvbmNhdCgvXFxcXC8sIHJhd0RlbGltaXRlciwgL1tcXHQgXSooPzpbXFxyXFxuXXxcXHJcXG4pLylcbiAgfSk7XG4gIGNvbnN0IElOVEVSUE9MQVRJT04gPSAocmF3RGVsaW1pdGVyID0gXCJcIikgPT4gKHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgbGFiZWw6IFwiaW50ZXJwb2xcIixcbiAgICBiZWdpbjogY29uY2F0KC9cXFxcLywgcmF3RGVsaW1pdGVyLCAvXFwoLyksXG4gICAgZW5kOiAvXFwpL1xuICB9KTtcbiAgY29uc3QgTVVMVElMSU5FX1NUUklORyA9IChyYXdEZWxpbWl0ZXIgPSBcIlwiKSA9PiAoe1xuICAgIGJlZ2luOiBjb25jYXQocmF3RGVsaW1pdGVyLCAvXCJcIlwiLyksXG4gICAgZW5kOiBjb25jYXQoL1wiXCJcIi8sIHJhd0RlbGltaXRlciksXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEVTQ0FQRURfQ0hBUkFDVEVSKHJhd0RlbGltaXRlciksXG4gICAgICBFU0NBUEVEX05FV0xJTkUocmF3RGVsaW1pdGVyKSxcbiAgICAgIElOVEVSUE9MQVRJT04ocmF3RGVsaW1pdGVyKVxuICAgIF1cbiAgfSk7XG4gIGNvbnN0IFNJTkdMRV9MSU5FX1NUUklORyA9IChyYXdEZWxpbWl0ZXIgPSBcIlwiKSA9PiAoe1xuICAgIGJlZ2luOiBjb25jYXQocmF3RGVsaW1pdGVyLCAvXCIvKSxcbiAgICBlbmQ6IGNvbmNhdCgvXCIvLCByYXdEZWxpbWl0ZXIpLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBFU0NBUEVEX0NIQVJBQ1RFUihyYXdEZWxpbWl0ZXIpLFxuICAgICAgSU5URVJQT0xBVElPTihyYXdEZWxpbWl0ZXIpXG4gICAgXVxuICB9KTtcbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIE1VTFRJTElORV9TVFJJTkcoKSxcbiAgICAgIE1VTFRJTElORV9TVFJJTkcoXCIjXCIpLFxuICAgICAgTVVMVElMSU5FX1NUUklORyhcIiMjXCIpLFxuICAgICAgTVVMVElMSU5FX1NUUklORyhcIiMjI1wiKSxcbiAgICAgIFNJTkdMRV9MSU5FX1NUUklORygpLFxuICAgICAgU0lOR0xFX0xJTkVfU1RSSU5HKFwiI1wiKSxcbiAgICAgIFNJTkdMRV9MSU5FX1NUUklORyhcIiMjXCIpLFxuICAgICAgU0lOR0xFX0xJTkVfU1RSSU5HKFwiIyMjXCIpXG4gICAgXVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvTGV4aWNhbFN0cnVjdHVyZS5odG1sI0lENDEyXG4gIGNvbnN0IFFVT1RFRF9JREVOVElGSUVSID0geyBtYXRjaDogY29uY2F0KC9gLywgaWRlbnRpZmllciwgL2AvKSB9O1xuICBjb25zdCBJTVBMSUNJVF9QQVJBTUVURVIgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIG1hdGNoOiAvXFwkXFxkKy9cbiAgfTtcbiAgY29uc3QgUFJPUEVSVFlfV1JBUFBFUl9QUk9KRUNUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBtYXRjaDogYFxcXFwkJHtpZGVudGlmaWVyQ2hhcmFjdGVyfStgXG4gIH07XG4gIGNvbnN0IElERU5USUZJRVJTID0gW1xuICAgIFFVT1RFRF9JREVOVElGSUVSLFxuICAgIElNUExJQ0lUX1BBUkFNRVRFUixcbiAgICBQUk9QRVJUWV9XUkFQUEVSX1BST0pFQ1RJT05cbiAgXTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0F0dHJpYnV0ZXMuaHRtbFxuICBjb25zdCBBVkFJTEFCTEVfQVRUUklCVVRFID0ge1xuICAgIG1hdGNoOiAvKEB8Iyh1bik/KWF2YWlsYWJsZS8sXG4gICAgY2xhc3NOYW1lOiBcImtleXdvcmRcIixcbiAgICBzdGFydHM6IHsgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogYXZhaWxhYmlsaXR5S2V5d29yZHMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgLi4uT1BFUkFUT1JTLFxuICAgICAgICAgIE5VTUJFUixcbiAgICAgICAgICBTVFJJTkdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0gfVxuICB9O1xuICBjb25zdCBLRVlXT1JEX0FUVFJJQlVURSA9IHtcbiAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICBtYXRjaDogY29uY2F0KC9ALywgZWl0aGVyKC4uLmtleXdvcmRBdHRyaWJ1dGVzKSlcbiAgfTtcbiAgY29uc3QgVVNFUl9ERUZJTkVEX0FUVFJJQlVURSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBtYXRjaDogY29uY2F0KC9ALywgaWRlbnRpZmllcilcbiAgfTtcbiAgY29uc3QgQVRUUklCVVRFUyA9IFtcbiAgICBBVkFJTEFCTEVfQVRUUklCVVRFLFxuICAgIEtFWVdPUkRfQVRUUklCVVRFLFxuICAgIFVTRVJfREVGSU5FRF9BVFRSSUJVVEVcbiAgXTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL1R5cGVzLmh0bWxcbiAgY29uc3QgVFlQRSA9IHtcbiAgICBtYXRjaDogbG9va2FoZWFkKC9cXGJbQS1aXS8pLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAgeyAvLyBDb21tb24gQXBwbGUgZnJhbWV3b3JrcywgZm9yIHJlbGV2YW5jZSBib29zdFxuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgbWF0Y2g6IGNvbmNhdCgvKEFWfENBfENGfENHfENJfENMfENNfENOfENUfE1LfE1QfE1US3xNVEx8TlN8U0NOfFNLfFVJfFdLfFhDKS8sIGlkZW50aWZpZXJDaGFyYWN0ZXIsICcrJylcbiAgICAgIH0sXG4gICAgICB7IC8vIFR5cGUgaWRlbnRpZmllclxuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgbWF0Y2g6IHR5cGVJZGVudGlmaWVyLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8vIE9wdGlvbmFsIHR5cGVcbiAgICAgICAgbWF0Y2g6IC9bPyFdKy8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHsgLy8gVmFyaWFkaWMgcGFyYW1ldGVyXG4gICAgICAgIG1hdGNoOiAvXFwuXFwuXFwuLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgeyAvLyBQcm90b2NvbCBjb21wb3NpdGlvblxuICAgICAgICBtYXRjaDogY29uY2F0KC9cXHMrJlxccysvLCBsb29rYWhlYWQodHlwZUlkZW50aWZpZXIpKSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBHRU5FUklDX0FSR1VNRU5UUyA9IHtcbiAgICBiZWdpbjogLzwvLFxuICAgIGVuZDogLz4vLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgLi4uQ09NTUVOVFMsXG4gICAgICAuLi5LRVlXT1JEX01PREVTLFxuICAgICAgLi4uQVRUUklCVVRFUyxcbiAgICAgIE9QRVJBVE9SX0dVQVJELFxuICAgICAgVFlQRVxuICAgIF1cbiAgfTtcbiAgVFlQRS5jb250YWlucy5wdXNoKEdFTkVSSUNfQVJHVU1FTlRTKTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0V4cHJlc3Npb25zLmh0bWwjSUQ1NTJcbiAgLy8gUHJldmVudHMgZWxlbWVudCBuYW1lcyBmcm9tIGJlaW5nIGhpZ2hsaWdodGVkIGFzIGtleXdvcmRzLlxuICBjb25zdCBUVVBMRV9FTEVNRU5UX05BTUUgPSB7XG4gICAgbWF0Y2g6IGNvbmNhdChpZGVudGlmaWVyLCAvXFxzKjovKSxcbiAgICBrZXl3b3JkczogXCJffDBcIixcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgLy8gTWF0Y2hlcyB0dXBsZXMgYXMgd2VsbCBhcyB0aGUgcGFyYW1ldGVyIGxpc3Qgb2YgYSBmdW5jdGlvbiB0eXBlLlxuICBjb25zdCBUVVBMRSA9IHtcbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAnc2VsZicsXG4gICAgICBUVVBMRV9FTEVNRU5UX05BTUUsXG4gICAgICAuLi5DT01NRU5UUyxcbiAgICAgIC4uLktFWVdPUkRfTU9ERVMsXG4gICAgICAuLi5CVUlMVF9JTlMsXG4gICAgICAuLi5PUEVSQVRPUlMsXG4gICAgICBOVU1CRVIsXG4gICAgICBTVFJJTkcsXG4gICAgICAuLi5JREVOVElGSUVSUyxcbiAgICAgIC4uLkFUVFJJQlVURVMsXG4gICAgICBUWVBFXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IEdFTkVSSUNfUEFSQU1FVEVSUyA9IHtcbiAgICBiZWdpbjogLzwvLFxuICAgIGVuZDogLz4vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAuLi5DT01NRU5UUyxcbiAgICAgIFRZUEVcbiAgICBdXG4gIH07XG4gIGNvbnN0IEZVTkNUSU9OX1BBUkFNRVRFUl9OQU1FID0ge1xuICAgIGJlZ2luOiBlaXRoZXIoXG4gICAgICBsb29rYWhlYWQoY29uY2F0KGlkZW50aWZpZXIsIC9cXHMqOi8pKSxcbiAgICAgIGxvb2thaGVhZChjb25jYXQoaWRlbnRpZmllciwgL1xccysvLCBpZGVudGlmaWVyLCAvXFxzKjovKSlcbiAgICApLFxuICAgIGVuZDogLzovLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgbWF0Y2g6IC9cXGJfXFxiL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgbWF0Y2g6IGlkZW50aWZpZXJcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IEZVTkNUSU9OX1BBUkFNRVRFUlMgPSB7XG4gICAgYmVnaW46IC9cXCgvLFxuICAgIGVuZDogL1xcKS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBGVU5DVElPTl9QQVJBTUVURVJfTkFNRSxcbiAgICAgIC4uLkNPTU1FTlRTLFxuICAgICAgLi4uS0VZV09SRF9NT0RFUyxcbiAgICAgIC4uLk9QRVJBVE9SUyxcbiAgICAgIE5VTUJFUixcbiAgICAgIFNUUklORyxcbiAgICAgIC4uLkFUVFJJQlVURVMsXG4gICAgICBUWVBFLFxuICAgICAgVFVQTEVcbiAgICBdLFxuICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgaWxsZWdhbDogL1tcIiddL1xuICB9O1xuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0RlY2xhcmF0aW9ucy5odG1sI0lEMzYyXG4gIGNvbnN0IEZVTkNUSU9OID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvZnVuYy8sXG4gICAgICAvXFxzKy8sXG4gICAgICBlaXRoZXIoUVVPVEVEX0lERU5USUZJRVIubWF0Y2gsIGlkZW50aWZpZXIsIG9wZXJhdG9yKVxuICAgIF0sXG4gICAgY2xhc3NOYW1lOiB7XG4gICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgIDM6IFwidGl0bGUuZnVuY3Rpb25cIlxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEdFTkVSSUNfUEFSQU1FVEVSUyxcbiAgICAgIEZVTkNUSU9OX1BBUkFNRVRFUlMsXG4gICAgICBXSElURVNQQUNFXG4gICAgXSxcbiAgICBpbGxlZ2FsOiBbXG4gICAgICAvXFxbLyxcbiAgICAgIC8lL1xuICAgIF1cbiAgfTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0RlY2xhcmF0aW9ucy5odG1sI0lEMzc1XG4gIC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvRGVjbGFyYXRpb25zLmh0bWwjSUQzNzlcbiAgY29uc3QgSU5JVF9TVUJTQ1JJUFQgPSB7XG4gICAgbWF0Y2g6IFtcbiAgICAgIC9cXGIoPzpzdWJzY3JpcHR8aW5pdFs/IV0/KS8sXG4gICAgICAvXFxzKig/PVs8KF0pLyxcbiAgICBdLFxuICAgIGNsYXNzTmFtZTogeyAxOiBcImtleXdvcmRcIiB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBHRU5FUklDX1BBUkFNRVRFUlMsXG4gICAgICBGVU5DVElPTl9QQVJBTUVURVJTLFxuICAgICAgV0hJVEVTUEFDRVxuICAgIF0sXG4gICAgaWxsZWdhbDogL1xcW3wlL1xuICB9O1xuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0RlY2xhcmF0aW9ucy5odG1sI0lEMzgwXG4gIGNvbnN0IE9QRVJBVE9SX0RFQ0xBUkFUSU9OID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvb3BlcmF0b3IvLFxuICAgICAgL1xccysvLFxuICAgICAgb3BlcmF0b3JcbiAgICBdLFxuICAgIGNsYXNzTmFtZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInRpdGxlXCJcbiAgICB9XG4gIH07XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9EZWNsYXJhdGlvbnMuaHRtbCNJRDU1MFxuICBjb25zdCBQUkVDRURFTkNFR1JPVVAgPSB7XG4gICAgYmVnaW46IFtcbiAgICAgIC9wcmVjZWRlbmNlZ3JvdXAvLFxuICAgICAgL1xccysvLFxuICAgICAgdHlwZUlkZW50aWZpZXJcbiAgICBdLFxuICAgIGNsYXNzTmFtZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInRpdGxlXCJcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbIFRZUEUgXSxcbiAgICBrZXl3b3JkczogW1xuICAgICAgLi4ucHJlY2VkZW5jZWdyb3VwS2V5d29yZHMsXG4gICAgICAuLi5saXRlcmFsc1xuICAgIF0sXG4gICAgZW5kOiAvfS9cbiAgfTtcblxuICAvLyBBZGQgc3VwcG9ydGVkIHN1Ym1vZGVzIHRvIHN0cmluZyBpbnRlcnBvbGF0aW9uLlxuICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgU1RSSU5HLnZhcmlhbnRzKSB7XG4gICAgY29uc3QgaW50ZXJwb2xhdGlvbiA9IHZhcmlhbnQuY29udGFpbnMuZmluZChtb2RlID0+IG1vZGUubGFiZWwgPT09IFwiaW50ZXJwb2xcIik7XG4gICAgLy8gVE9ETzogSW50ZXJwb2xhdGlvbiBjYW4gY29udGFpbiBhbnkgZXhwcmVzc2lvbiwgc28gdGhlcmUncyByb29tIGZvciBpbXByb3ZlbWVudCBoZXJlLlxuICAgIGludGVycG9sYXRpb24ua2V5d29yZHMgPSBLRVlXT1JEUztcbiAgICBjb25zdCBzdWJtb2RlcyA9IFtcbiAgICAgIC4uLktFWVdPUkRfTU9ERVMsXG4gICAgICAuLi5CVUlMVF9JTlMsXG4gICAgICAuLi5PUEVSQVRPUlMsXG4gICAgICBOVU1CRVIsXG4gICAgICBTVFJJTkcsXG4gICAgICAuLi5JREVOVElGSUVSU1xuICAgIF07XG4gICAgaW50ZXJwb2xhdGlvbi5jb250YWlucyA9IFtcbiAgICAgIC4uLnN1Ym1vZGVzLFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgIC4uLnN1Ym1vZGVzXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU3dpZnQnLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgLi4uQ09NTUVOVFMsXG4gICAgICBGVU5DVElPTixcbiAgICAgIElOSVRfU1VCU0NSSVBULFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnc3RydWN0IHByb3RvY29sIGNsYXNzIGV4dGVuc2lvbiBlbnVtIGFjdG9yJyxcbiAgICAgICAgZW5kOiAnXFxcXHsnLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcInRpdGxlLmNsYXNzXCIsXG4gICAgICAgICAgICBiZWdpbjogL1tBLVphLXokX11bXFx1MDBDMC1cXHUwMkI4MC05QS1aYS16JF9dKi9cbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi5LRVlXT1JEX01PREVTXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBPUEVSQVRPUl9ERUNMQVJBVElPTixcbiAgICAgIFBSRUNFREVOQ0VHUk9VUCxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ltcG9ydCcsXG4gICAgICAgIGVuZDogLyQvLFxuICAgICAgICBjb250YWluczogWyAuLi5DT01NRU5UUyBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAuLi5LRVlXT1JEX01PREVTLFxuICAgICAgLi4uQlVJTFRfSU5TLFxuICAgICAgLi4uT1BFUkFUT1JTLFxuICAgICAgTlVNQkVSLFxuICAgICAgU1RSSU5HLFxuICAgICAgLi4uSURFTlRJRklFUlMsXG4gICAgICAuLi5BVFRSSUJVVEVTLFxuICAgICAgVFlQRSxcbiAgICAgIFRVUExFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN3aWZ0O1xuIiwiY29uc3QgSURFTlRfUkUgPSAnW0EtWmEteiRfXVswLTlBLVphLXokX10qJztcbmNvbnN0IEtFWVdPUkRTID0gW1xuICBcImFzXCIsIC8vIGZvciBleHBvcnRzXG4gIFwiaW5cIixcbiAgXCJvZlwiLFxuICBcImlmXCIsXG4gIFwiZm9yXCIsXG4gIFwid2hpbGVcIixcbiAgXCJmaW5hbGx5XCIsXG4gIFwidmFyXCIsXG4gIFwibmV3XCIsXG4gIFwiZnVuY3Rpb25cIixcbiAgXCJkb1wiLFxuICBcInJldHVyblwiLFxuICBcInZvaWRcIixcbiAgXCJlbHNlXCIsXG4gIFwiYnJlYWtcIixcbiAgXCJjYXRjaFwiLFxuICBcImluc3RhbmNlb2ZcIixcbiAgXCJ3aXRoXCIsXG4gIFwidGhyb3dcIixcbiAgXCJjYXNlXCIsXG4gIFwiZGVmYXVsdFwiLFxuICBcInRyeVwiLFxuICBcInN3aXRjaFwiLFxuICBcImNvbnRpbnVlXCIsXG4gIFwidHlwZW9mXCIsXG4gIFwiZGVsZXRlXCIsXG4gIFwibGV0XCIsXG4gIFwieWllbGRcIixcbiAgXCJjb25zdFwiLFxuICBcImNsYXNzXCIsXG4gIC8vIEpTIGhhbmRsZXMgdGhlc2Ugd2l0aCBhIHNwZWNpYWwgcnVsZVxuICAvLyBcImdldFwiLFxuICAvLyBcInNldFwiLFxuICBcImRlYnVnZ2VyXCIsXG4gIFwiYXN5bmNcIixcbiAgXCJhd2FpdFwiLFxuICBcInN0YXRpY1wiLFxuICBcImltcG9ydFwiLFxuICBcImZyb21cIixcbiAgXCJleHBvcnRcIixcbiAgXCJleHRlbmRzXCJcbl07XG5jb25zdCBMSVRFUkFMUyA9IFtcbiAgXCJ0cnVlXCIsXG4gIFwiZmFsc2VcIixcbiAgXCJudWxsXCIsXG4gIFwidW5kZWZpbmVkXCIsXG4gIFwiTmFOXCIsXG4gIFwiSW5maW5pdHlcIlxuXTtcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHNcbmNvbnN0IFRZUEVTID0gW1xuICAvLyBGdW5kYW1lbnRhbCBvYmplY3RzXG4gIFwiT2JqZWN0XCIsXG4gIFwiRnVuY3Rpb25cIixcbiAgXCJCb29sZWFuXCIsXG4gIFwiU3ltYm9sXCIsXG4gIC8vIG51bWJlcnMgYW5kIGRhdGVzXG4gIFwiTWF0aFwiLFxuICBcIkRhdGVcIixcbiAgXCJOdW1iZXJcIixcbiAgXCJCaWdJbnRcIixcbiAgLy8gdGV4dFxuICBcIlN0cmluZ1wiLFxuICBcIlJlZ0V4cFwiLFxuICAvLyBJbmRleGVkIGNvbGxlY3Rpb25zXG4gIFwiQXJyYXlcIixcbiAgXCJGbG9hdDMyQXJyYXlcIixcbiAgXCJGbG9hdDY0QXJyYXlcIixcbiAgXCJJbnQ4QXJyYXlcIixcbiAgXCJVaW50OEFycmF5XCIsXG4gIFwiVWludDhDbGFtcGVkQXJyYXlcIixcbiAgXCJJbnQxNkFycmF5XCIsXG4gIFwiSW50MzJBcnJheVwiLFxuICBcIlVpbnQxNkFycmF5XCIsXG4gIFwiVWludDMyQXJyYXlcIixcbiAgXCJCaWdJbnQ2NEFycmF5XCIsXG4gIFwiQmlnVWludDY0QXJyYXlcIixcbiAgLy8gS2V5ZWQgY29sbGVjdGlvbnNcbiAgXCJTZXRcIixcbiAgXCJNYXBcIixcbiAgXCJXZWFrU2V0XCIsXG4gIFwiV2Vha01hcFwiLFxuICAvLyBTdHJ1Y3R1cmVkIGRhdGFcbiAgXCJBcnJheUJ1ZmZlclwiLFxuICBcIlNoYXJlZEFycmF5QnVmZmVyXCIsXG4gIFwiQXRvbWljc1wiLFxuICBcIkRhdGFWaWV3XCIsXG4gIFwiSlNPTlwiLFxuICAvLyBDb250cm9sIGFic3RyYWN0aW9uIG9iamVjdHNcbiAgXCJQcm9taXNlXCIsXG4gIFwiR2VuZXJhdG9yXCIsXG4gIFwiR2VuZXJhdG9yRnVuY3Rpb25cIixcbiAgXCJBc3luY0Z1bmN0aW9uXCIsXG4gIC8vIFJlZmxlY3Rpb25cbiAgXCJSZWZsZWN0XCIsXG4gIFwiUHJveHlcIixcbiAgLy8gSW50ZXJuYXRpb25hbGl6YXRpb25cbiAgXCJJbnRsXCIsXG4gIC8vIFdlYkFzc2VtYmx5XG4gIFwiV2ViQXNzZW1ibHlcIlxuXTtcblxuY29uc3QgRVJST1JfVFlQRVMgPSBbXG4gIFwiRXJyb3JcIixcbiAgXCJFdmFsRXJyb3JcIixcbiAgXCJJbnRlcm5hbEVycm9yXCIsXG4gIFwiUmFuZ2VFcnJvclwiLFxuICBcIlJlZmVyZW5jZUVycm9yXCIsXG4gIFwiU3ludGF4RXJyb3JcIixcbiAgXCJUeXBlRXJyb3JcIixcbiAgXCJVUklFcnJvclwiXG5dO1xuXG5jb25zdCBCVUlMVF9JTl9HTE9CQUxTID0gW1xuICBcInNldEludGVydmFsXCIsXG4gIFwic2V0VGltZW91dFwiLFxuICBcImNsZWFySW50ZXJ2YWxcIixcbiAgXCJjbGVhclRpbWVvdXRcIixcblxuICBcInJlcXVpcmVcIixcbiAgXCJleHBvcnRzXCIsXG5cbiAgXCJldmFsXCIsXG4gIFwiaXNGaW5pdGVcIixcbiAgXCJpc05hTlwiLFxuICBcInBhcnNlRmxvYXRcIixcbiAgXCJwYXJzZUludFwiLFxuICBcImRlY29kZVVSSVwiLFxuICBcImRlY29kZVVSSUNvbXBvbmVudFwiLFxuICBcImVuY29kZVVSSVwiLFxuICBcImVuY29kZVVSSUNvbXBvbmVudFwiLFxuICBcImVzY2FwZVwiLFxuICBcInVuZXNjYXBlXCJcbl07XG5cbmNvbnN0IEJVSUxUX0lOX1ZBUklBQkxFUyA9IFtcbiAgXCJhcmd1bWVudHNcIixcbiAgXCJ0aGlzXCIsXG4gIFwic3VwZXJcIixcbiAgXCJjb25zb2xlXCIsXG4gIFwid2luZG93XCIsXG4gIFwiZG9jdW1lbnRcIixcbiAgXCJsb2NhbFN0b3JhZ2VcIixcbiAgXCJtb2R1bGVcIixcbiAgXCJnbG9iYWxcIiAvLyBOb2RlLmpzXG5dO1xuXG5jb25zdCBCVUlMVF9JTlMgPSBbXS5jb25jYXQoXG4gIEJVSUxUX0lOX0dMT0JBTFMsXG4gIFRZUEVTLFxuICBFUlJPUl9UWVBFU1xuKTtcblxuLypcbkxhbmd1YWdlOiBKYXZhU2NyaXB0XG5EZXNjcmlwdGlvbjogSmF2YVNjcmlwdCAoSlMpIGlzIGEgbGlnaHR3ZWlnaHQsIGludGVycHJldGVkLCBvciBqdXN0LWluLXRpbWUgY29tcGlsZWQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugd2l0aCBmaXJzdC1jbGFzcyBmdW5jdGlvbnMuXG5DYXRlZ29yeTogY29tbW9uLCBzY3JpcHRpbmcsIHdlYlxuV2Vic2l0ZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdFxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGphdmFzY3JpcHQoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIC8qKlxuICAgKiBUYWtlcyBhIHN0cmluZyBsaWtlIFwiPEJvb2dlclwiIGFuZCBjaGVja3MgdG8gc2VlXG4gICAqIGlmIHdlIGNhbiBmaW5kIGEgbWF0Y2hpbmcgXCI8L0Jvb2dlclwiIGxhdGVyIGluIHRoZVxuICAgKiBjb250ZW50LlxuICAgKiBAcGFyYW0ge1JlZ0V4cE1hdGNoQXJyYXl9IG1hdGNoXG4gICAqIEBwYXJhbSB7e2FmdGVyOm51bWJlcn19IHBhcmFtMVxuICAgKi9cbiAgY29uc3QgaGFzQ2xvc2luZ1RhZyA9IChtYXRjaCwgeyBhZnRlciB9KSA9PiB7XG4gICAgY29uc3QgdGFnID0gXCI8L1wiICsgbWF0Y2hbMF0uc2xpY2UoMSk7XG4gICAgY29uc3QgcG9zID0gbWF0Y2guaW5wdXQuaW5kZXhPZih0YWcsIGFmdGVyKTtcbiAgICByZXR1cm4gcG9zICE9PSAtMTtcbiAgfTtcblxuICBjb25zdCBJREVOVF9SRSQxID0gSURFTlRfUkU7XG4gIGNvbnN0IEZSQUdNRU5UID0ge1xuICAgIGJlZ2luOiAnPD4nLFxuICAgIGVuZDogJzwvPidcbiAgfTtcbiAgLy8gdG8gYXZvaWQgc29tZSBzcGVjaWFsIGNhc2VzIGluc2lkZSBpc1RydWx5T3BlbmluZ1RhZ1xuICBjb25zdCBYTUxfU0VMRl9DTE9TSU5HID0gLzxbQS1aYS16MC05XFxcXC5fOi1dK1xccypcXC8+LztcbiAgY29uc3QgWE1MX1RBRyA9IHtcbiAgICBiZWdpbjogLzxbQS1aYS16MC05XFxcXC5fOi1dKy8sXG4gICAgZW5kOiAvXFwvW0EtWmEtejAtOVxcXFwuXzotXSs+fFxcLz4vLFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2hcbiAgICAgKiBAcGFyYW0ge0NhbGxiYWNrUmVzcG9uc2V9IHJlc3BvbnNlXG4gICAgICovXG4gICAgaXNUcnVseU9wZW5pbmdUYWc6IChtYXRjaCwgcmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGFmdGVyTWF0Y2hJbmRleCA9IG1hdGNoWzBdLmxlbmd0aCArIG1hdGNoLmluZGV4O1xuICAgICAgY29uc3QgbmV4dENoYXIgPSBtYXRjaC5pbnB1dFthZnRlck1hdGNoSW5kZXhdO1xuICAgICAgaWYgKFxuICAgICAgICAvLyBIVE1MIHNob3VsZCBub3QgaW5jbHVkZSBhbm90aGVyIHJhdyBgPGAgaW5zaWRlIGEgdGFnXG4gICAgICAgIC8vIG5lc3RlZCB0eXBlP1xuICAgICAgICAvLyBgPEFycmF5PEFycmF5PG51bWJlcj4+YCwgZXRjLlxuICAgICAgICBuZXh0Q2hhciA9PT0gXCI8XCIgfHxcbiAgICAgICAgLy8gdGhlICwgZ2l2ZXMgYXdheSB0aGF0IHRoaXMgaXMgbm90IEhUTUxcbiAgICAgICAgLy8gYDxULCBBIGV4dGVuZHMga2V5b2YgVCwgVj5gXG4gICAgICAgIG5leHRDaGFyID09PSBcIixcIikge1xuICAgICAgICByZXNwb25zZS5pZ25vcmVNYXRjaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGA8c29tZXRoaW5nPmBcbiAgICAgIC8vIFF1aXRlIHBvc3NpYmx5IGEgdGFnLCBsZXRzIGxvb2sgZm9yIGEgbWF0Y2hpbmcgY2xvc2luZyB0YWcuLi5cbiAgICAgIGlmIChuZXh0Q2hhciA9PT0gXCI+XCIpIHtcbiAgICAgICAgLy8gaWYgd2UgY2Fubm90IGZpbmQgYSBtYXRjaGluZyBjbG9zaW5nIHRhZywgdGhlbiB3ZVxuICAgICAgICAvLyB3aWxsIGlnbm9yZSBpdFxuICAgICAgICBpZiAoIWhhc0Nsb3NpbmdUYWcobWF0Y2gsIHsgYWZ0ZXI6IGFmdGVyTWF0Y2hJbmRleCB9KSkge1xuICAgICAgICAgIHJlc3BvbnNlLmlnbm9yZU1hdGNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gYDxibGFoIC8+YCAoc2VsZi1jbG9zaW5nKVxuICAgICAgLy8gaGFuZGxlZCBieSBzaW1wbGVTZWxmQ2xvc2luZyBydWxlXG5cbiAgICAgIC8vIGA8RnJvbSBleHRlbmRzIHN0cmluZz5gXG4gICAgICAvLyB0ZWNobmljYWxseSB0aGlzIGNvdWxkIGJlIEhUTUwsIGJ1dCBpdCBzbWVsbHMgbGlrZSBhIHR5cGVcbiAgICAgIGxldCBtO1xuICAgICAgY29uc3QgYWZ0ZXJNYXRjaCA9IG1hdGNoLmlucHV0LnN1YnN0cmluZyhhZnRlck1hdGNoSW5kZXgpO1xuICAgICAgLy8gTk9URTogVGhpcyBpcyB1Z2gsIGJ1dCBhZGRlZCBzcGVjaWZpY2FsbHkgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzMyNzZcbiAgICAgIGlmICgobSA9IGFmdGVyTWF0Y2gubWF0Y2goL15cXHMrZXh0ZW5kc1xccysvKSkpIHtcbiAgICAgICAgaWYgKG0uaW5kZXggPT09IDApIHtcbiAgICAgICAgICByZXNwb25zZS5pZ25vcmVNYXRjaCgpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLXJldHVyblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgS0VZV09SRFMkMSA9IHtcbiAgICAkcGF0dGVybjogSURFTlRfUkUsXG4gICAga2V5d29yZDogS0VZV09SRFMsXG4gICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOUyxcbiAgICBcInZhcmlhYmxlLmxhbmd1YWdlXCI6IEJVSUxUX0lOX1ZBUklBQkxFU1xuICB9O1xuXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGl0ZXJhbHMtbnVtZXJpYy1saXRlcmFsc1xuICBjb25zdCBkZWNpbWFsRGlnaXRzID0gJ1swLTldKF8/WzAtOV0pKic7XG4gIGNvbnN0IGZyYWMgPSBgXFxcXC4oJHtkZWNpbWFsRGlnaXRzfSlgO1xuICAvLyBEZWNpbWFsSW50ZWdlckxpdGVyYWwsIGluY2x1ZGluZyBBbm5leCBCIE5vbk9jdGFsRGVjaW1hbEludGVnZXJMaXRlcmFsXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWRkaXRpb25hbC1zeW50YXgtbnVtZXJpYy1saXRlcmFsc1xuICBjb25zdCBkZWNpbWFsSW50ZWdlciA9IGAwfFsxLTldKF8/WzAtOV0pKnwwWzAtN10qWzg5XVswLTldKmA7XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBEZWNpbWFsTGl0ZXJhbFxuICAgICAgeyBiZWdpbjogYChcXFxcYigke2RlY2ltYWxJbnRlZ2VyfSkoKCR7ZnJhY30pfFxcXFwuKT98KCR7ZnJhY30pKWAgK1xuICAgICAgICBgW2VFXVsrLV0/KCR7ZGVjaW1hbERpZ2l0c30pXFxcXGJgIH0sXG4gICAgICB7IGJlZ2luOiBgXFxcXGIoJHtkZWNpbWFsSW50ZWdlcn0pXFxcXGIoKCR7ZnJhY30pXFxcXGJ8XFxcXC4pP3woJHtmcmFjfSlcXFxcYmAgfSxcblxuICAgICAgLy8gRGVjaW1hbEJpZ0ludGVnZXJMaXRlcmFsXG4gICAgICB7IGJlZ2luOiBgXFxcXGIoMHxbMS05XShfP1swLTldKSopblxcXFxiYCB9LFxuXG4gICAgICAvLyBOb25EZWNpbWFsSW50ZWdlckxpdGVyYWxcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwW3hYXVswLTlhLWZBLUZdKF8/WzAtOWEtZkEtRl0pKm4/XFxcXGJcIiB9LFxuICAgICAgeyBiZWdpbjogXCJcXFxcYjBbYkJdWzAtMV0oXz9bMC0xXSkqbj9cXFxcYlwiIH0sXG4gICAgICB7IGJlZ2luOiBcIlxcXFxiMFtvT11bMC03XShfP1swLTddKSpuP1xcXFxiXCIgfSxcblxuICAgICAgLy8gTGVnYWN5T2N0YWxJbnRlZ2VyTGl0ZXJhbCAoZG9lcyBub3QgaW5jbHVkZSB1bmRlcnNjb3JlIHNlcGFyYXRvcnMpXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkZGl0aW9uYWwtc3ludGF4LW51bWVyaWMtbGl0ZXJhbHNcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwWzAtN10rbj9cXFxcYlwiIH0sXG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdcXFxcJFxcXFx7JyxcbiAgICBlbmQ6ICdcXFxcfScsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgY29udGFpbnM6IFtdIC8vIGRlZmluZWQgbGF0ZXJcbiAgfTtcbiAgY29uc3QgSFRNTF9URU1QTEFURSA9IHtcbiAgICBiZWdpbjogJ2h0bWxgJyxcbiAgICBlbmQ6ICcnLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnYCcsXG4gICAgICByZXR1cm5FbmQ6IGZhbHNlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICBTVUJTVFxuICAgICAgXSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAneG1sJ1xuICAgIH1cbiAgfTtcbiAgY29uc3QgQ1NTX1RFTVBMQVRFID0ge1xuICAgIGJlZ2luOiAnY3NzYCcsXG4gICAgZW5kOiAnJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJ2AnLFxuICAgICAgcmV0dXJuRW5kOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgU1VCU1RcbiAgICAgIF0sXG4gICAgICBzdWJMYW5ndWFnZTogJ2NzcydcbiAgICB9XG4gIH07XG4gIGNvbnN0IFRFTVBMQVRFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnYCcsXG4gICAgZW5kOiAnYCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFNVQlNUXG4gICAgXVxuICB9O1xuICBjb25zdCBKU0RPQ19DT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgIC9cXC9cXCpcXCooPyFcXC8pLyxcbiAgICAnXFxcXCovJyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICcoPz1AW0EtWmEtel0rKScsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx7JyxcbiAgICAgICAgICAgICAgZW5kOiAnXFxcXH0nLFxuICAgICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICBiZWdpbjogSURFTlRfUkUkMSArICcoPz1cXFxccyooLSl8JCknLFxuICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBlYXQgc3BhY2VzIChub3QgbmV3bGluZXMpIHNvIHdlIGNhbiBmaW5kXG4gICAgICAgICAgICAvLyB0eXBlcyBvciB2YXJpYWJsZXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmVnaW46IC8oPz1bXlxcbl0pXFxzLyxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICApO1xuICBjb25zdCBDT01NRU5UID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCIsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIEpTRE9DX0NPTU1FTlQsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xuICBjb25zdCBTVUJTVF9JTlRFUk5BTFMgPSBbXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgSFRNTF9URU1QTEFURSxcbiAgICBDU1NfVEVNUExBVEUsXG4gICAgVEVNUExBVEVfU1RSSU5HLFxuICAgIE5VTUJFUixcbiAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsOlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL2lzc3Vlcy8zMjg4XG4gICAgLy8gaGxqcy5SRUdFWFBfTU9ERVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IFNVQlNUX0lOVEVSTkFMU1xuICAgIC5jb25jYXQoe1xuICAgICAgLy8gd2UgbmVlZCB0byBwYWlyIHVwIHt9IGluc2lkZSBvdXIgc3Vic3QgdG8gcHJldmVudFxuICAgICAgLy8gaXQgZnJvbSBlbmRpbmcgdG9vIGVhcmx5IGJ5IG1hdGNoaW5nIGFub3RoZXIgfVxuICAgICAgYmVnaW46IC9cXHsvLFxuICAgICAgZW5kOiAvXFx9LyxcbiAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgXCJzZWxmXCJcbiAgICAgIF0uY29uY2F0KFNVQlNUX0lOVEVSTkFMUylcbiAgICB9KTtcbiAgY29uc3QgU1VCU1RfQU5EX0NPTU1FTlRTID0gW10uY29uY2F0KENPTU1FTlQsIFNVQlNULmNvbnRhaW5zKTtcbiAgY29uc3QgUEFSQU1TX0NPTlRBSU5TID0gU1VCU1RfQU5EX0NPTU1FTlRTLmNvbmNhdChbXG4gICAgLy8gZWF0IHJlY3Vyc2l2ZSBwYXJlbnMgaW4gc3ViIGV4cHJlc3Npb25zXG4gICAge1xuICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgZW5kOiAvXFwpLyxcbiAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgICAgY29udGFpbnM6IFtcInNlbGZcIl0uY29uY2F0KFNVQlNUX0FORF9DT01NRU5UUylcbiAgICB9XG4gIF0pO1xuICBjb25zdCBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICBjb250YWluczogUEFSQU1TX0NPTlRBSU5TXG4gIH07XG5cbiAgLy8gRVM2IGNsYXNzZXNcbiAgY29uc3QgQ0xBU1NfT1JfRVhURU5EUyA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gY2xhc3MgQ2FyIGV4dGVuZHMgdmVoaWNsZVxuICAgICAge1xuICAgICAgICBtYXRjaDogW1xuICAgICAgICAgIC9jbGFzcy8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIElERU5UX1JFJDEsXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIC9leHRlbmRzLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgcmVnZXguY29uY2F0KElERU5UX1JFJDEsIFwiKFwiLCByZWdleC5jb25jYXQoL1xcLi8sIElERU5UX1JFJDEpLCBcIikqXCIpXG4gICAgICAgIF0sXG4gICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAgICAgMzogXCJ0aXRsZS5jbGFzc1wiLFxuICAgICAgICAgIDU6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDc6IFwidGl0bGUuY2xhc3MuaW5oZXJpdGVkXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGNsYXNzIENhclxuICAgICAge1xuICAgICAgICBtYXRjaDogW1xuICAgICAgICAgIC9jbGFzcy8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIElERU5UX1JFJDFcbiAgICAgICAgXSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInRpdGxlLmNsYXNzXCJcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgIF1cbiAgfTtcblxuICBjb25zdCBDTEFTU19SRUZFUkVOQ0UgPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIG1hdGNoOlxuICAgIHJlZ2V4LmVpdGhlcihcbiAgICAgIC8vIEhhcmQgY29kZWQgZXhjZXB0aW9uc1xuICAgICAgL1xcYkpTT04vLFxuICAgICAgLy8gRmxvYXQzMkFycmF5LCBPdXRUXG4gICAgICAvXFxiW0EtWl1bYS16XSsoW0EtWl1bYS16XSp8XFxkKSovLFxuICAgICAgLy8gQ1NTRmFjdG9yeSwgQ1NTRmFjdG9yeVRcbiAgICAgIC9cXGJbQS1aXXsyLH0oW0EtWl1bYS16XSt8XFxkKSsoW0EtWl1bYS16XSopKi8sXG4gICAgICAvLyBGUHMsIEZQc1RcbiAgICAgIC9cXGJbQS1aXXsyLH1bYS16XSsoW0EtWl1bYS16XSt8XFxkKSooW0EtWl1bYS16XSopKi8sXG4gICAgICAvLyBQXG4gICAgICAvLyBzaW5nbGUgbGV0dGVycyBhcmUgbm90IGhpZ2hsaWdodGVkXG4gICAgICAvLyBCTEFIXG4gICAgICAvLyB0aGlzIHdpbGwgYmUgZmxhZ2dlZCBhcyBhIFVQUEVSX0NBU0VfQ09OU1RBTlQgaW5zdGVhZFxuICAgICksXG4gICAgY2xhc3NOYW1lOiBcInRpdGxlLmNsYXNzXCIsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIF86IFtcbiAgICAgICAgLy8gc2Ugd2Ugc3RpbGwgZ2V0IHJlbGV2YW5jZSBjcmVkaXQgZm9yIEpTIGxpYnJhcnkgY2xhc3Nlc1xuICAgICAgICAuLi5UWVBFUyxcbiAgICAgICAgLi4uRVJST1JfVFlQRVNcbiAgICAgIF1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgVVNFX1NUUklDVCA9IHtcbiAgICBsYWJlbDogXCJ1c2Vfc3RyaWN0XCIsXG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgcmVsZXZhbmNlOiAxMCxcbiAgICBiZWdpbjogL15cXHMqWydcIl11c2UgKHN0cmljdHxhc20pWydcIl0vXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT05fREVGSU5JVElPTiA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBtYXRjaDogW1xuICAgICAgICAgIC9mdW5jdGlvbi8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIElERU5UX1JFJDEsXG4gICAgICAgICAgLyg/PVxccypcXCgpL1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gYW5vbnltb3VzIGZ1bmN0aW9uXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL2Z1bmN0aW9uLyxcbiAgICAgICAgICAvXFxzKig/PVxcKCkvXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdLFxuICAgIGNsYXNzTmFtZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInRpdGxlLmZ1bmN0aW9uXCJcbiAgICB9LFxuICAgIGxhYmVsOiBcImZ1bmMuZGVmXCIsXG4gICAgY29udGFpbnM6IFsgUEFSQU1TIF0sXG4gICAgaWxsZWdhbDogLyUvXG4gIH07XG5cbiAgY29uc3QgVVBQRVJfQ0FTRV9DT05TVEFOVCA9IHtcbiAgICByZWxldmFuY2U6IDAsXG4gICAgbWF0Y2g6IC9cXGJbQS1aXVtBLVpfMC05XStcXGIvLFxuICAgIGNsYXNzTmFtZTogXCJ2YXJpYWJsZS5jb25zdGFudFwiXG4gIH07XG5cbiAgZnVuY3Rpb24gbm9uZU9mKGxpc3QpIHtcbiAgICByZXR1cm4gcmVnZXguY29uY2F0KFwiKD8hXCIsIGxpc3Quam9pbihcInxcIiksIFwiKVwiKTtcbiAgfVxuXG4gIGNvbnN0IEZVTkNUSU9OX0NBTEwgPSB7XG4gICAgbWF0Y2g6IHJlZ2V4LmNvbmNhdChcbiAgICAgIC9cXGIvLFxuICAgICAgbm9uZU9mKFtcbiAgICAgICAgLi4uQlVJTFRfSU5fR0xPQkFMUyxcbiAgICAgICAgXCJzdXBlclwiXG4gICAgICBdKSxcbiAgICAgIElERU5UX1JFJDEsIHJlZ2V4Lmxvb2thaGVhZCgvXFwoLykpLFxuICAgIGNsYXNzTmFtZTogXCJ0aXRsZS5mdW5jdGlvblwiLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IFBST1BFUlRZX0FDQ0VTUyA9IHtcbiAgICBiZWdpbjogcmVnZXguY29uY2F0KC9cXC4vLCByZWdleC5sb29rYWhlYWQoXG4gICAgICByZWdleC5jb25jYXQoSURFTlRfUkUkMSwgLyg/IVswLTlBLVphLXokXyhdKS8pXG4gICAgKSksXG4gICAgZW5kOiBJREVOVF9SRSQxLFxuICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICBrZXl3b3JkczogXCJwcm90b3R5cGVcIixcbiAgICBjbGFzc05hbWU6IFwicHJvcGVydHlcIixcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBHRVRURVJfT1JfU0VUVEVSID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvZ2V0fHNldC8sXG4gICAgICAvXFxzKy8sXG4gICAgICBJREVOVF9SRSQxLFxuICAgICAgLyg/PVxcKCkvXG4gICAgXSxcbiAgICBjbGFzc05hbWU6IHtcbiAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgMzogXCJ0aXRsZS5mdW5jdGlvblwiXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgeyAvLyBlYXQgdG8gYXZvaWQgZW1wdHkgcGFyYW1zXG4gICAgICAgIGJlZ2luOiAvXFwoXFwpL1xuICAgICAgfSxcbiAgICAgIFBBUkFNU1xuICAgIF1cbiAgfTtcblxuICBjb25zdCBGVU5DX0xFQURfSU5fUkUgPSAnKFxcXFwoJyArXG4gICAgJ1teKCldKihcXFxcKCcgK1xuICAgICdbXigpXSooXFxcXCgnICtcbiAgICAnW14oKV0qJyArXG4gICAgJ1xcXFwpW14oKV0qKSonICtcbiAgICAnXFxcXClbXigpXSopKicgK1xuICAgICdcXFxcKXwnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJylcXFxccyo9Pic7XG5cbiAgY29uc3QgRlVOQ1RJT05fVkFSSUFCTEUgPSB7XG4gICAgbWF0Y2g6IFtcbiAgICAgIC9jb25zdHx2YXJ8bGV0LywgL1xccysvLFxuICAgICAgSURFTlRfUkUkMSwgL1xccyovLFxuICAgICAgLz1cXHMqLyxcbiAgICAgIC8oYXN5bmNcXHMqKT8vLCAvLyBhc3luYyBpcyBvcHRpb25hbFxuICAgICAgcmVnZXgubG9va2FoZWFkKEZVTkNfTEVBRF9JTl9SRSlcbiAgICBdLFxuICAgIGtleXdvcmRzOiBcImFzeW5jXCIsXG4gICAgY2xhc3NOYW1lOiB7XG4gICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgIDM6IFwidGl0bGUuZnVuY3Rpb25cIlxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFBBUkFNU1xuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdKYXZhc2NyaXB0JyxcbiAgICBhbGlhc2VzOiBbJ2pzJywgJ2pzeCcsICdtanMnLCAnY2pzJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgLy8gdGhpcyB3aWxsIGJlIGV4dGVuZGVkIGJ5IFR5cGVTY3JpcHRcbiAgICBleHBvcnRzOiB7IFBBUkFNU19DT05UQUlOUywgQ0xBU1NfUkVGRVJFTkNFIH0sXG4gICAgaWxsZWdhbDogLyMoPyFbJF9BLXpdKS8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuU0hFQkFORyh7XG4gICAgICAgIGxhYmVsOiBcInNoZWJhbmdcIixcbiAgICAgICAgYmluYXJ5OiBcIm5vZGVcIixcbiAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICB9KSxcbiAgICAgIFVTRV9TVFJJQ1QsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgSFRNTF9URU1QTEFURSxcbiAgICAgIENTU19URU1QTEFURSxcbiAgICAgIFRFTVBMQVRFX1NUUklORyxcbiAgICAgIENPTU1FTlQsXG4gICAgICBOVU1CRVIsXG4gICAgICBDTEFTU19SRUZFUkVOQ0UsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICBiZWdpbjogSURFTlRfUkUkMSArIHJlZ2V4Lmxvb2thaGVhZCgnOicpLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBGVU5DVElPTl9WQVJJQUJMRSxcbiAgICAgIHsgLy8gXCJ2YWx1ZVwiIGNvbnRhaW5lclxuICAgICAgICBiZWdpbjogJygnICsgaGxqcy5SRV9TVEFSVEVSU19SRSArICd8XFxcXGIoY2FzZXxyZXR1cm58dGhyb3cpXFxcXGIpXFxcXHMqJyxcbiAgICAgICAga2V5d29yZHM6ICdyZXR1cm4gdGhyb3cgY2FzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBDT01NRU5ULFxuICAgICAgICAgIGhsanMuUkVHRVhQX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjb3VudCB0aGUgcGFyZW5zIHRvIG1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYXZlIHRoZVxuICAgICAgICAgICAgLy8gY29ycmVjdCBib3VuZGluZyAoICkgYmVmb3JlIHRoZSA9Pi4gIFRoZXJlIGNvdWxkIGJlIGFueSBudW1iZXIgb2ZcbiAgICAgICAgICAgIC8vIHN1Yi1leHByZXNzaW9ucyBpbnNpZGUgYWxzbyBzdXJyb3VuZGVkIGJ5IHBhcmVucy5cbiAgICAgICAgICAgIGJlZ2luOiBGVU5DX0xFQURfSU5fUkUsXG4gICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxzKj0+JyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcKFxccypcXCkvLFxuICAgICAgICAgICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBQQVJBTVNfQ09OVEFJTlNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLy8gY291bGQgYmUgYSBjb21tYSBkZWxpbWl0ZWQgbGlzdCBvZiBwYXJhbXMgdG8gYSBmdW5jdGlvbiBjYWxsXG4gICAgICAgICAgICBiZWdpbjogLywvLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYXRjaDogL1xccysvLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IC8vIEpTWFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgeyBiZWdpbjogRlJBR01FTlQuYmVnaW4sIGVuZDogRlJBR01FTlQuZW5kIH0sXG4gICAgICAgICAgICAgIHsgbWF0Y2g6IFhNTF9TRUxGX0NMT1NJTkcgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiBYTUxfVEFHLmJlZ2luLFxuICAgICAgICAgICAgICAgIC8vIHdlIGNhcmVmdWxseSBjaGVjayB0aGUgb3BlbmluZyB0YWcgdG8gc2VlIGlmIGl0IHRydWx5XG4gICAgICAgICAgICAgICAgLy8gaXMgYSB0YWcgYW5kIG5vdCBhIGZhbHNlIHBvc2l0aXZlXG4gICAgICAgICAgICAgICAgJ29uOmJlZ2luJzogWE1MX1RBRy5pc1RydWx5T3BlbmluZ1RhZyxcbiAgICAgICAgICAgICAgICBlbmQ6IFhNTF9UQUcuZW5kXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IFhNTF9UQUcuYmVnaW4sXG4gICAgICAgICAgICAgICAgZW5kOiBYTUxfVEFHLmVuZCxcbiAgICAgICAgICAgICAgICBza2lwOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIEZVTkNUSU9OX0RFRklOSVRJT04sXG4gICAgICB7XG4gICAgICAgIC8vIHByZXZlbnQgdGhpcyBmcm9tIGdldHRpbmcgc3dhbGxvd2VkIHVwIGJ5IGZ1bmN0aW9uXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYXBwZWFyIFwiZnVuY3Rpb24gbGlrZVwiXG4gICAgICAgIGJlZ2luS2V5d29yZHM6IFwid2hpbGUgaWYgc3dpdGNoIGNhdGNoIGZvclwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyB3ZSBoYXZlIHRvIGNvdW50IHRoZSBwYXJlbnMgdG8gbWFrZSBzdXJlIHdlIGFjdHVhbGx5IGhhdmUgdGhlIGNvcnJlY3RcbiAgICAgICAgLy8gYm91bmRpbmcgKCApLiAgVGhlcmUgY291bGQgYmUgYW55IG51bWJlciBvZiBzdWItZXhwcmVzc2lvbnMgaW5zaWRlXG4gICAgICAgIC8vIGFsc28gc3Vycm91bmRlZCBieSBwYXJlbnMuXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoPyFmdW5jdGlvbiknICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICtcbiAgICAgICAgICAnXFxcXCgnICsgLy8gZmlyc3QgcGFyZW5zXG4gICAgICAgICAgJ1teKCldKihcXFxcKCcgK1xuICAgICAgICAgICAgJ1teKCldKihcXFxcKCcgK1xuICAgICAgICAgICAgICAnW14oKV0qJyArXG4gICAgICAgICAgICAnXFxcXClbXigpXSopKicgK1xuICAgICAgICAgICdcXFxcKVteKCldKikqJyArXG4gICAgICAgICAgJ1xcXFwpXFxcXHMqXFxcXHsnLCAvLyBlbmQgcGFyZW5zXG4gICAgICAgIHJldHVybkJlZ2luOnRydWUsXG4gICAgICAgIGxhYmVsOiBcImZ1bmMuZGVmXCIsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgUEFSQU1TLFxuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHsgYmVnaW46IElERU5UX1JFJDEsIGNsYXNzTmFtZTogXCJ0aXRsZS5mdW5jdGlvblwiIH0pXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBjYXRjaCAuLi4gc28gaXQgd29uJ3QgdHJpZ2dlciB0aGUgcHJvcGVydHkgcnVsZSBiZWxvd1xuICAgICAge1xuICAgICAgICBtYXRjaDogL1xcLlxcLlxcLi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIFBST1BFUlRZX0FDQ0VTUyxcbiAgICAgIC8vIGhhY2s6IHByZXZlbnRzIGRldGVjdGlvbiBvZiBrZXl3b3JkcyBpbiBzb21lIGNpcmN1bXN0YW5jZXNcbiAgICAgIC8vIC5rZXl3b3JkKClcbiAgICAgIC8vICRrZXl3b3JkID0geFxuICAgICAge1xuICAgICAgICBtYXRjaDogJ1xcXFwkJyArIElERU5UX1JFJDEsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IFsgL1xcYmNvbnN0cnVjdG9yKD89XFxzKlxcKCkvIF0sXG4gICAgICAgIGNsYXNzTmFtZTogeyAxOiBcInRpdGxlLmZ1bmN0aW9uXCIgfSxcbiAgICAgICAgY29udGFpbnM6IFsgUEFSQU1TIF1cbiAgICAgIH0sXG4gICAgICBGVU5DVElPTl9DQUxMLFxuICAgICAgVVBQRVJfQ0FTRV9DT05TVEFOVCxcbiAgICAgIENMQVNTX09SX0VYVEVORFMsXG4gICAgICBHRVRURVJfT1JfU0VUVEVSLFxuICAgICAge1xuICAgICAgICBtYXRjaDogL1xcJFsoLl0vIC8vIHJlbGV2YW5jZSBib29zdGVyIGZvciBhIHBhdHRlcm4gY29tbW9uIHRvIEpTIGxpYnM6IGAkKHNvbWV0aGluZylgIGFuZCBgJC5zb21ldGhpbmdgXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG4vKlxuTGFuZ3VhZ2U6IFR5cGVTY3JpcHRcbkF1dGhvcjogUGFudSBIb3JzbWFsYWh0aSA8cGFudS5ob3JzbWFsYWh0aUBpa2kuZmk+XG5Db250cmlidXRvcnM6IElrZSBLdSA8ZGVtcGZpQHlhaG9vLmNvbT5cbkRlc2NyaXB0aW9uOiBUeXBlU2NyaXB0IGlzIGEgc3RyaWN0IHN1cGVyc2V0IG9mIEphdmFTY3JpcHRcbldlYnNpdGU6IGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZ1xuQ2F0ZWdvcnk6IGNvbW1vbiwgc2NyaXB0aW5nXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gdHlwZXNjcmlwdChobGpzKSB7XG4gIGNvbnN0IHRzTGFuZ3VhZ2UgPSBqYXZhc2NyaXB0KGhsanMpO1xuXG4gIGNvbnN0IElERU5UX1JFJDEgPSBJREVOVF9SRTtcbiAgY29uc3QgVFlQRVMgPSBbXG4gICAgXCJhbnlcIixcbiAgICBcInZvaWRcIixcbiAgICBcIm51bWJlclwiLFxuICAgIFwiYm9vbGVhblwiLFxuICAgIFwic3RyaW5nXCIsXG4gICAgXCJvYmplY3RcIixcbiAgICBcIm5ldmVyXCIsXG4gICAgXCJzeW1ib2xcIixcbiAgICBcImJpZ2ludFwiLFxuICAgIFwidW5rbm93blwiXG4gIF07XG4gIGNvbnN0IE5BTUVTUEFDRSA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAnbmFtZXNwYWNlJyxcbiAgICBlbmQ6IC9cXHsvLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgY29udGFpbnM6IFsgdHNMYW5ndWFnZS5leHBvcnRzLkNMQVNTX1JFRkVSRU5DRSBdXG4gIH07XG4gIGNvbnN0IElOVEVSRkFDRSA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAnaW50ZXJmYWNlJyxcbiAgICBlbmQ6IC9cXHsvLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdpbnRlcmZhY2UgZXh0ZW5kcycsXG4gICAgICBidWlsdF9pbjogVFlQRVNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbIHRzTGFuZ3VhZ2UuZXhwb3J0cy5DTEFTU19SRUZFUkVOQ0UgXVxuICB9O1xuICBjb25zdCBVU0VfU1RSSUNUID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIHJlbGV2YW5jZTogMTAsXG4gICAgYmVnaW46IC9eXFxzKlsnXCJddXNlIHN0cmljdFsnXCJdL1xuICB9O1xuICBjb25zdCBUU19TUEVDSUZJQ19LRVlXT1JEUyA9IFtcbiAgICBcInR5cGVcIixcbiAgICBcIm5hbWVzcGFjZVwiLFxuICAgIFwiaW50ZXJmYWNlXCIsXG4gICAgXCJwdWJsaWNcIixcbiAgICBcInByaXZhdGVcIixcbiAgICBcInByb3RlY3RlZFwiLFxuICAgIFwiaW1wbGVtZW50c1wiLFxuICAgIFwiZGVjbGFyZVwiLFxuICAgIFwiYWJzdHJhY3RcIixcbiAgICBcInJlYWRvbmx5XCIsXG4gICAgXCJlbnVtXCIsXG4gICAgXCJvdmVycmlkZVwiXG4gIF07XG4gIGNvbnN0IEtFWVdPUkRTJDEgPSB7XG4gICAgJHBhdHRlcm46IElERU5UX1JFLFxuICAgIGtleXdvcmQ6IEtFWVdPUkRTLmNvbmNhdChUU19TUEVDSUZJQ19LRVlXT1JEUyksXG4gICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOUy5jb25jYXQoVFlQRVMpLFxuICAgIFwidmFyaWFibGUubGFuZ3VhZ2VcIjogQlVJTFRfSU5fVkFSSUFCTEVTXG4gIH07XG4gIGNvbnN0IERFQ09SQVRPUiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0AnICsgSURFTlRfUkUkMSxcbiAgfTtcblxuICBjb25zdCBzd2FwTW9kZSA9IChtb2RlLCBsYWJlbCwgcmVwbGFjZW1lbnQpID0+IHtcbiAgICBjb25zdCBpbmR4ID0gbW9kZS5jb250YWlucy5maW5kSW5kZXgobSA9PiBtLmxhYmVsID09PSBsYWJlbCk7XG4gICAgaWYgKGluZHggPT09IC0xKSB7IHRocm93IG5ldyBFcnJvcihcImNhbiBub3QgZmluZCBtb2RlIHRvIHJlcGxhY2VcIik7IH1cblxuICAgIG1vZGUuY29udGFpbnMuc3BsaWNlKGluZHgsIDEsIHJlcGxhY2VtZW50KTtcbiAgfTtcblxuXG4gIC8vIHRoaXMgc2hvdWxkIHVwZGF0ZSBhbnl3aGVyZSBrZXl3b3JkcyBpcyB1c2VkIHNpbmNlXG4gIC8vIGl0IHdpbGwgYmUgdGhlIHNhbWUgYWN0dWFsIEpTIG9iamVjdFxuICBPYmplY3QuYXNzaWduKHRzTGFuZ3VhZ2Uua2V5d29yZHMsIEtFWVdPUkRTJDEpO1xuXG4gIHRzTGFuZ3VhZ2UuZXhwb3J0cy5QQVJBTVNfQ09OVEFJTlMucHVzaChERUNPUkFUT1IpO1xuICB0c0xhbmd1YWdlLmNvbnRhaW5zID0gdHNMYW5ndWFnZS5jb250YWlucy5jb25jYXQoW1xuICAgIERFQ09SQVRPUixcbiAgICBOQU1FU1BBQ0UsXG4gICAgSU5URVJGQUNFLFxuICBdKTtcblxuICAvLyBUUyBnZXRzIGEgc2ltcGxlciBzaGViYW5nIHJ1bGUgdGhhbiBKU1xuICBzd2FwTW9kZSh0c0xhbmd1YWdlLCBcInNoZWJhbmdcIiwgaGxqcy5TSEVCQU5HKCkpO1xuICAvLyBKUyB1c2Ugc3RyaWN0IHJ1bGUgcHVycG9zZWx5IGV4Y2x1ZGVzIGBhc21gIHdoaWNoIG1ha2VzIG5vIHNlbnNlXG4gIHN3YXBNb2RlKHRzTGFuZ3VhZ2UsIFwidXNlX3N0cmljdFwiLCBVU0VfU1RSSUNUKTtcblxuICBjb25zdCBmdW5jdGlvbkRlY2xhcmF0aW9uID0gdHNMYW5ndWFnZS5jb250YWlucy5maW5kKG0gPT4gbS5sYWJlbCA9PT0gXCJmdW5jLmRlZlwiKTtcbiAgZnVuY3Rpb25EZWNsYXJhdGlvbi5yZWxldmFuY2UgPSAwOyAvLyAoKSA9PiB7fSBpcyBtb3JlIHR5cGljYWwgaW4gVHlwZVNjcmlwdFxuXG4gIE9iamVjdC5hc3NpZ24odHNMYW5ndWFnZSwge1xuICAgIG5hbWU6ICdUeXBlU2NyaXB0JyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAndHMnLFxuICAgICAgJ3RzeCdcbiAgICBdXG4gIH0pO1xuXG4gIHJldHVybiB0c0xhbmd1YWdlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVzY3JpcHQ7XG4iLCIvKlxuTGFuZ3VhZ2U6IFZpc3VhbCBCYXNpYyAuTkVUXG5EZXNjcmlwdGlvbjogVmlzdWFsIEJhc2ljIC5ORVQgKFZCLk5FVCkgaXMgYSBtdWx0aS1wYXJhZGlnbSwgb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIGxhbmd1YWdlLCBpbXBsZW1lbnRlZCBvbiB0aGUgLk5FVCBGcmFtZXdvcmsuXG5BdXRob3JzOiBQb3JlbiBDaGlhbmcgPHJlbi5jaGlhbmdAZ21haWwuY29tPiwgSmFuIFBpbHplclxuV2Vic2l0ZTogaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZG90bmV0L3Zpc3VhbC1iYXNpYy9nZXR0aW5nLXN0YXJ0ZWRcbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiB2Ym5ldChobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgLyoqXG4gICAqIENoYXJhY3RlciBMaXRlcmFsXG4gICAqIEVpdGhlciBhIHNpbmdsZSBjaGFyYWN0ZXIgKFwiYVwiQykgb3IgYW4gZXNjYXBlZCBkb3VibGUgcXVvdGUgKFwiXCJcIlwiQykuXG4gICAqL1xuICBjb25zdCBDSEFSQUNURVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1wiKFwiXCJ8W14vbl0pXCJDXFxiL1xuICB9O1xuXG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLFxuICAgIGVuZDogL1wiLyxcbiAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICAvLyBkb3VibGUgcXVvdGUgZXNjYXBlXG4gICAgICAgIGJlZ2luOiAvXCJcIi8gfVxuICAgIF1cbiAgfTtcblxuICAvKiogRGF0ZSBMaXRlcmFscyBjb25zaXN0IG9mIGEgZGF0ZSwgYSB0aW1lLCBvciBib3RoIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLCBzdXJyb3VuZGVkIGJ5ICMgKi9cbiAgY29uc3QgTU1fRERfWVlZWSA9IC9cXGR7MSwyfVxcL1xcZHsxLDJ9XFwvXFxkezR9LztcbiAgY29uc3QgWVlZWV9NTV9ERCA9IC9cXGR7NH0tXFxkezEsMn0tXFxkezEsMn0vO1xuICBjb25zdCBUSU1FXzEySCA9IC8oXFxkfDFbMDEyXSkoOlxcZCspezAsMn0gKihBTXxQTSkvO1xuICBjb25zdCBUSU1FXzI0SCA9IC9cXGR7MSwyfSg6XFxkezEsMn0pezEsMn0vO1xuICBjb25zdCBEQVRFID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIC8vICNZWVlZLU1NLUREIyAoSVNPLURhdGUpIG9yICNNL0QvWVlZWSMgKFVTLURhdGUpXG4gICAgICAgIGJlZ2luOiByZWdleC5jb25jYXQoLyMgKi8sIHJlZ2V4LmVpdGhlcihZWVlZX01NX0RELCBNTV9ERF9ZWVlZKSwgLyAqIy8pIH0sXG4gICAgICB7XG4gICAgICAgIC8vICNIOm1tWzpzc10jICgyNGggVGltZSlcbiAgICAgICAgYmVnaW46IHJlZ2V4LmNvbmNhdCgvIyAqLywgVElNRV8yNEgsIC8gKiMvKSB9LFxuICAgICAge1xuICAgICAgICAvLyAjaFs6bW1bOnNzXV0gQSMgKDEyaCBUaW1lKVxuICAgICAgICBiZWdpbjogcmVnZXguY29uY2F0KC8jICovLCBUSU1FXzEySCwgLyAqIy8pIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGRhdGUgcGx1cyB0aW1lXG4gICAgICAgIGJlZ2luOiByZWdleC5jb25jYXQoXG4gICAgICAgICAgLyMgKi8sXG4gICAgICAgICAgcmVnZXguZWl0aGVyKFlZWVlfTU1fREQsIE1NX0REX1lZWVkpLFxuICAgICAgICAgIC8gKy8sXG4gICAgICAgICAgcmVnZXguZWl0aGVyKFRJTUVfMTJILCBUSU1FXzI0SCksXG4gICAgICAgICAgLyAqIy9cbiAgICAgICAgKSB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICAvLyBGbG9hdFxuICAgICAgICBiZWdpbjogL1xcYlxcZFtcXGRfXSooKFxcLltcXGRfXSsoRVsrLV0/W1xcZF9dKyk/KXwoRVsrLV0/W1xcZF9dKykpW1JGREAhI10/LyB9LFxuICAgICAge1xuICAgICAgICAvLyBJbnRlZ2VyIChiYXNlIDEwKVxuICAgICAgICBiZWdpbjogL1xcYlxcZFtcXGRfXSooKFU/W1NJTF0pfFslJl0pPy8gfSxcbiAgICAgIHtcbiAgICAgICAgLy8gSW50ZWdlciAoYmFzZSAxNilcbiAgICAgICAgYmVnaW46IC8mSFtcXGRBLUZfXSsoKFU/W1NJTF0pfFslJl0pPy8gfSxcbiAgICAgIHtcbiAgICAgICAgLy8gSW50ZWdlciAoYmFzZSA4KVxuICAgICAgICBiZWdpbjogLyZPWzAtN19dKygoVT9bU0lMXSl8WyUmXSk/LyB9LFxuICAgICAge1xuICAgICAgICAvLyBJbnRlZ2VyIChiYXNlIDIpXG4gICAgICAgIGJlZ2luOiAvJkJbMDFfXSsoKFU/W1NJTF0pfFslJl0pPy8gfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBMQUJFTCA9IHtcbiAgICBjbGFzc05hbWU6ICdsYWJlbCcsXG4gICAgYmVnaW46IC9eXFx3KzovXG4gIH07XG5cbiAgY29uc3QgRE9DX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoLycnJy8sIC8kLywgeyBjb250YWluczogW1xuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICBiZWdpbjogLzxcXC8/LyxcbiAgICAgIGVuZDogLz4vXG4gICAgfVxuICBdIH0pO1xuXG4gIGNvbnN0IENPTU1FTlQgPSBobGpzLkNPTU1FTlQobnVsbCwgLyQvLCB7IHZhcmlhbnRzOiBbXG4gICAgeyBiZWdpbjogLycvIH0sXG4gICAge1xuICAgICAgLy8gVE9ETzogVXNlIG11bHRpLWNsYXNzIGZvciBsZWFkaW5nIHNwYWNlc1xuICAgICAgYmVnaW46IC8oW1xcdCBdfF4pUkVNKD89XFxzKS8gfVxuICBdIH0pO1xuXG4gIGNvbnN0IERJUkVDVElWRVMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgLy8gVE9ETzogVXNlIG11bHRpLWNsYXNzIGZvciBpbmRlbnRhdGlvbiBvbmNlIGF2YWlsYWJsZVxuICAgIGJlZ2luOiAvW1xcdCBdKiMoY29uc3R8ZGlzYWJsZXxlbHNlfGVsc2VpZnxlbmFibGV8ZW5kfGV4dGVybmFsc291cmNlfGlmfHJlZ2lvbilcXGIvLFxuICAgIGVuZDogLyQvLFxuICAgIGtleXdvcmRzOiB7IGtleXdvcmQ6XG4gICAgICAgICdjb25zdCBkaXNhYmxlIGVsc2UgZWxzZWlmIGVuYWJsZSBlbmQgZXh0ZXJuYWxzb3VyY2UgaWYgcmVnaW9uIHRoZW4nIH0sXG4gICAgY29udGFpbnM6IFsgQ09NTUVOVCBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnVmlzdWFsIEJhc2ljIC5ORVQnLFxuICAgIGFsaWFzZXM6IFsgJ3ZiJyBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY2xhc3NOYW1lQWxpYXNlczogeyBsYWJlbDogJ3N5bWJvbCcgfSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2FkZGhhbmRsZXIgYWxpYXMgYWdncmVnYXRlIGFuc2kgYXMgYXN5bmMgYXNzZW1ibHkgYXV0byBiaW5hcnkgYnkgYnlyZWYgYnl2YWwgJyAvKiBhLWIgKi9cbiAgICAgICAgKyAnY2FsbCBjYXNlIGNhdGNoIGNsYXNzIGNvbXBhcmUgY29uc3QgY29udGludWUgY3VzdG9tIGRlY2xhcmUgZGVmYXVsdCBkZWxlZ2F0ZSBkaW0gZGlzdGluY3QgZG8gJyAvKiBjLWQgKi9cbiAgICAgICAgKyAnZWFjaCBlcXVhbHMgZWxzZSBlbHNlaWYgZW5kIGVudW0gZXJhc2UgZXJyb3IgZXZlbnQgZXhpdCBleHBsaWNpdCBmaW5hbGx5IGZvciBmcmllbmQgZnJvbSBmdW5jdGlvbiAnIC8qIGUtZiAqL1xuICAgICAgICArICdnZXQgZ2xvYmFsIGdvdG8gZ3JvdXAgaGFuZGxlcyBpZiBpbXBsZW1lbnRzIGltcG9ydHMgaW4gaW5oZXJpdHMgaW50ZXJmYWNlIGludG8gaXRlcmF0b3IgJyAvKiBnLWkgKi9cbiAgICAgICAgKyAnam9pbiBrZXkgbGV0IGxpYiBsb29wIG1lIG1pZCBtb2R1bGUgbXVzdGluaGVyaXQgbXVzdG92ZXJyaWRlIG15YmFzZSBteWNsYXNzICcgLyogai1tICovXG4gICAgICAgICsgJ25hbWVzcGFjZSBuYXJyb3dpbmcgbmV3IG5leHQgbm90aW5oZXJpdGFibGUgbm90b3ZlcnJpZGFibGUgJyAvKiBuICovXG4gICAgICAgICsgJ29mIG9mZiBvbiBvcGVyYXRvciBvcHRpb24gb3B0aW9uYWwgb3JkZXIgb3ZlcmxvYWRzIG92ZXJyaWRhYmxlIG92ZXJyaWRlcyAnIC8qIG8gKi9cbiAgICAgICAgKyAncGFyYW1hcnJheSBwYXJ0aWFsIHByZXNlcnZlIHByaXZhdGUgcHJvcGVydHkgcHJvdGVjdGVkIHB1YmxpYyAnIC8qIHAgKi9cbiAgICAgICAgKyAncmFpc2VldmVudCByZWFkb25seSByZWRpbSByZW1vdmVoYW5kbGVyIHJlc3VtZSByZXR1cm4gJyAvKiByICovXG4gICAgICAgICsgJ3NlbGVjdCBzZXQgc2hhZG93cyBzaGFyZWQgc2tpcCBzdGF0aWMgc3RlcCBzdG9wIHN0cnVjdHVyZSBzdHJpY3Qgc3ViIHN5bmNsb2NrICcgLyogcyAqL1xuICAgICAgICArICd0YWtlIHRleHQgdGhlbiB0aHJvdyB0byB0cnkgdW5pY29kZSB1bnRpbCB1c2luZyB3aGVuIHdoZXJlIHdoaWxlIHdpZGVuaW5nIHdpdGggd2l0aGV2ZW50cyB3cml0ZW9ubHkgeWllbGQnIC8qIHQteSAqLyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAvLyBPcGVyYXRvcnMgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZG90bmV0L3Zpc3VhbC1iYXNpYy9sYW5ndWFnZS1yZWZlcmVuY2Uvb3BlcmF0b3JzXG4gICAgICAgICdhZGRyZXNzb2YgYW5kIGFuZGFsc28gYXdhaXQgZGlyZWN0Y2FzdCBnZXR0eXBlIGdldHhtbG5hbWVzcGFjZSBpcyBpc2ZhbHNlIGlzbm90IGlzdHJ1ZSBsaWtlIG1vZCBuYW1lb2YgbmV3IG5vdCBvciBvcmVsc2UgdHJ5Y2FzdCB0eXBlb2YgeG9yICdcbiAgICAgICAgLy8gVHlwZSBDb252ZXJzaW9uIEZ1bmN0aW9ucyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9kb3RuZXQvdmlzdWFsLWJhc2ljL2xhbmd1YWdlLXJlZmVyZW5jZS9mdW5jdGlvbnMvdHlwZS1jb252ZXJzaW9uLWZ1bmN0aW9uc1xuICAgICAgICArICdjYm9vbCBjYnl0ZSBjY2hhciBjZGF0ZSBjZGJsIGNkZWMgY2ludCBjbG5nIGNvYmogY3NieXRlIGNzaG9ydCBjc25nIGNzdHIgY3VpbnQgY3VsbmcgY3VzaG9ydCcsXG4gICAgICB0eXBlOlxuICAgICAgICAvLyBEYXRhIHR5cGVzIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2RvdG5ldC92aXN1YWwtYmFzaWMvbGFuZ3VhZ2UtcmVmZXJlbmNlL2RhdGEtdHlwZXNcbiAgICAgICAgJ2Jvb2xlYW4gYnl0ZSBjaGFyIGRhdGUgZGVjaW1hbCBkb3VibGUgaW50ZWdlciBsb25nIG9iamVjdCBzYnl0ZSBzaG9ydCBzaW5nbGUgc3RyaW5nIHVpbnRlZ2VyIHVsb25nIHVzaG9ydCcsXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBub3RoaW5nJ1xuICAgIH0sXG4gICAgaWxsZWdhbDpcbiAgICAgICcvL3xcXFxce3xcXFxcfXxlbmRpZnxnb3N1Ynx2YXJpYW50fHdlbmR8XlxcXFwkICcgLyogcmVzZXJ2ZWQgZGVwcmVjYXRlZCBrZXl3b3JkcyAqLyxcbiAgICBjb250YWluczogW1xuICAgICAgQ0hBUkFDVEVSLFxuICAgICAgU1RSSU5HLFxuICAgICAgREFURSxcbiAgICAgIE5VTUJFUixcbiAgICAgIExBQkVMLFxuICAgICAgRE9DX0NPTU1FTlQsXG4gICAgICBDT01NRU5ULFxuICAgICAgRElSRUNUSVZFU1xuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2Ym5ldDtcbiIsIi8qXG5MYW5ndWFnZTogV2ViQXNzZW1ibHlcbldlYnNpdGU6IGh0dHBzOi8vd2ViYXNzZW1ibHkub3JnXG5EZXNjcmlwdGlvbjogIFdhc20gaXMgZGVzaWduZWQgYXMgYSBwb3J0YWJsZSBjb21waWxhdGlvbiB0YXJnZXQgZm9yIHByb2dyYW1taW5nIGxhbmd1YWdlcywgZW5hYmxpbmcgZGVwbG95bWVudCBvbiB0aGUgd2ViIGZvciBjbGllbnQgYW5kIHNlcnZlciBhcHBsaWNhdGlvbnMuXG5DYXRlZ29yeTogd2ViLCBjb21tb25cbkF1ZGl0OiAyMDIwXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gd2FzbShobGpzKSB7XG4gIGhsanMucmVnZXg7XG4gIGNvbnN0IEJMT0NLX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoL1xcKDsvLCAvO1xcKS8pO1xuICBCTE9DS19DT01NRU5ULmNvbnRhaW5zLnB1c2goXCJzZWxmXCIpO1xuICBjb25zdCBMSU5FX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoLzs7LywgLyQvKTtcblxuICBjb25zdCBLV1MgPSBbXG4gICAgXCJhbnlmdW5jXCIsXG4gICAgXCJibG9ja1wiLFxuICAgIFwiYnJcIixcbiAgICBcImJyX2lmXCIsXG4gICAgXCJicl90YWJsZVwiLFxuICAgIFwiY2FsbFwiLFxuICAgIFwiY2FsbF9pbmRpcmVjdFwiLFxuICAgIFwiZGF0YVwiLFxuICAgIFwiZHJvcFwiLFxuICAgIFwiZWxlbVwiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwiZW5kXCIsXG4gICAgXCJleHBvcnRcIixcbiAgICBcImZ1bmNcIixcbiAgICBcImdsb2JhbC5nZXRcIixcbiAgICBcImdsb2JhbC5zZXRcIixcbiAgICBcImxvY2FsLmdldFwiLFxuICAgIFwibG9jYWwuc2V0XCIsXG4gICAgXCJsb2NhbC50ZWVcIixcbiAgICBcImdldF9nbG9iYWxcIixcbiAgICBcImdldF9sb2NhbFwiLFxuICAgIFwiZ2xvYmFsXCIsXG4gICAgXCJpZlwiLFxuICAgIFwiaW1wb3J0XCIsXG4gICAgXCJsb2NhbFwiLFxuICAgIFwibG9vcFwiLFxuICAgIFwibWVtb3J5XCIsXG4gICAgXCJtZW1vcnkuZ3Jvd1wiLFxuICAgIFwibWVtb3J5LnNpemVcIixcbiAgICBcIm1vZHVsZVwiLFxuICAgIFwibXV0XCIsXG4gICAgXCJub3BcIixcbiAgICBcIm9mZnNldFwiLFxuICAgIFwicGFyYW1cIixcbiAgICBcInJlc3VsdFwiLFxuICAgIFwicmV0dXJuXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInNldF9nbG9iYWxcIixcbiAgICBcInNldF9sb2NhbFwiLFxuICAgIFwic3RhcnRcIixcbiAgICBcInRhYmxlXCIsXG4gICAgXCJ0ZWVfbG9jYWxcIixcbiAgICBcInRoZW5cIixcbiAgICBcInR5cGVcIixcbiAgICBcInVucmVhY2hhYmxlXCJcbiAgXTtcblxuICBjb25zdCBGVU5DVElPTl9SRUZFUkVOQ0UgPSB7XG4gICAgYmVnaW46IFtcbiAgICAgIC8oPzpmdW5jfGNhbGx8Y2FsbF9pbmRpcmVjdCkvLFxuICAgICAgL1xccysvLFxuICAgICAgL1xcJFteXFxzKV0rL1xuICAgIF0sXG4gICAgY2xhc3NOYW1lOiB7XG4gICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgIDM6IFwidGl0bGUuZnVuY3Rpb25cIlxuICAgIH1cbiAgfTtcblxuICBjb25zdCBBUkdVTUVOVCA9IHtcbiAgICBjbGFzc05hbWU6IFwidmFyaWFibGVcIixcbiAgICBiZWdpbjogL1xcJFtcXHdfXSsvXG4gIH07XG5cbiAgY29uc3QgUEFSRU5TID0ge1xuICAgIG1hdGNoOiAvKFxcKCg/ITspfFxcKSkrLyxcbiAgICBjbGFzc05hbWU6IFwicHVuY3R1YXRpb25cIixcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm51bWJlclwiLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICAvLyBib3Jyb3dlZCBmcm9tIFByaXNtLCBUT0RPOiBzcGxpdCBvdXQgaW50byB2YXJpYW50c1xuICAgIG1hdGNoOiAvWystXT9cXGIoPzpcXGQoPzpfP1xcZCkqKD86XFwuXFxkKD86Xz9cXGQpKik/KD86W2VFXVsrLV0/XFxkKD86Xz9cXGQpKik/fDB4W1xcZGEtZkEtRl0oPzpfP1tcXGRhLWZBLUZdKSooPzpcXC5bXFxkYS1mQS1GXSg/Ol8/W1xcZGEtZkEtRF0pKik/KD86W3BQXVsrLV0/XFxkKD86Xz9cXGQpKik/KVxcYnxcXGJpbmZcXGJ8XFxibmFuKD86OjB4W1xcZGEtZkEtRl0oPzpfP1tcXGRhLWZBLURdKSopP1xcYi9cbiAgfTtcblxuICBjb25zdCBUWVBFID0ge1xuICAgIC8vIGxvb2stYWhlYWQgcHJldmVudHMgdXMgZnJvbSBnb2JibGluZyB1cCBvcGNvZGVzXG4gICAgbWF0Y2g6IC8oaTMyfGk2NHxmMzJ8ZjY0KSg/IVxcLikvLFxuICAgIGNsYXNzTmFtZTogXCJ0eXBlXCJcbiAgfTtcblxuICBjb25zdCBNQVRIX09QRVJBVElPTlMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImtleXdvcmRcIixcbiAgICAvLyBib3Jyb3dlZCBmcm9tIFByaXNtLCBUT0RPOiBzcGxpdCBvdXQgaW50byB2YXJpYW50c1xuICAgIG1hdGNoOiAvXFxiKGYzMnxmNjR8aTMyfGk2NCkoPzpcXC4oPzphYnN8YWRkfGFuZHxjZWlsfGNsenxjb25zdHxjb252ZXJ0X1tzdV1cXC9pKD86MzJ8NjQpfGNvcHlzaWdufGN0enxkZW1vdGVcXC9mNjR8ZGl2KD86X1tzdV0pP3xlcXo/fGV4dGVuZF9bc3VdXFwvaTMyfGZsb29yfGdlKD86X1tzdV0pP3xndCg/Ol9bc3VdKT98bGUoPzpfW3N1XSk/fGxvYWQoPzooPzo4fDE2fDMyKV9bc3VdKT98bHQoPzpfW3N1XSk/fG1heHxtaW58bXVsfG5lYXJlc3R8bmVnP3xvcnxwb3BjbnR8cHJvbW90ZVxcL2YzMnxyZWludGVycHJldFxcL1tmaV0oPzozMnw2NCl8cmVtX1tzdV18cm90W2xyXXxzaGx8c2hyX1tzdV18c3RvcmUoPzo4fDE2fDMyKT98c3FydHxzdWJ8dHJ1bmMoPzpfW3N1XVxcL2YoPzozMnw2NCkpP3x3cmFwXFwvaTY0fHhvcikpXFxiL1xuICB9O1xuXG4gIGNvbnN0IE9GRlNFVF9BTElHTiA9IHtcbiAgICBtYXRjaDogW1xuICAgICAgLyg/Om9mZnNldHxhbGlnbikvLFxuICAgICAgL1xccyovLFxuICAgICAgLz0vXG4gICAgXSxcbiAgICBjbGFzc05hbWU6IHtcbiAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgMzogXCJvcGVyYXRvclwiXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1dlYkFzc2VtYmx5JyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IC9bXFx3Ll0rLyxcbiAgICAgIGtleXdvcmQ6IEtXU1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIExJTkVfQ09NTUVOVCxcbiAgICAgIEJMT0NLX0NPTU1FTlQsXG4gICAgICBPRkZTRVRfQUxJR04sXG4gICAgICBBUkdVTUVOVCxcbiAgICAgIFBBUkVOUyxcbiAgICAgIEZVTkNUSU9OX1JFRkVSRU5DRSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBUWVBFLFxuICAgICAgTUFUSF9PUEVSQVRJT05TLFxuICAgICAgTlVNQkVSXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhc207XG4iLCIvKlxuTGFuZ3VhZ2U6IEhUTUwsIFhNTFxuV2Vic2l0ZTogaHR0cHM6Ly93d3cudzMub3JnL1hNTC9cbkNhdGVnb3J5OiBjb21tb24sIHdlYlxuQXVkaXQ6IDIwMjBcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiB4bWwoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIC8vIFhNTCBuYW1lcyBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbGV0dGVyczogaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC8jTlQtTmFtZUNoYXJcbiAgLy8gT1RIRVJfTkFNRV9DSEFSUyA9IC9bOlxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXS87XG4gIC8vIEVsZW1lbnQgbmFtZXMgc3RhcnQgd2l0aCBOQU1FX1NUQVJUX0NIQVIgZm9sbG93ZWQgYnkgb3B0aW9uYWwgb3RoZXIgVW5pY29kZSBsZXR0ZXJzLCBBU0NJSSBkaWdpdHMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBhbmQgcGVyaW9kc1xuICAvLyBjb25zdCBUQUdfTkFNRV9SRSA9IHJlZ2V4LmNvbmNhdCgvW0EtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdLywgcmVnZXgub3B0aW9uYWwoL1tBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFwtLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDBdKjovKSwgL1tBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFwtLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDBdKi8pOztcbiAgLy8gY29uc3QgWE1MX0lERU5UX1JFID0gL1tBLVpfYS16OlxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXSsvO1xuICAvLyBjb25zdCBUQUdfTkFNRV9SRSA9IHJlZ2V4LmNvbmNhdCgvW0EtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdLywgcmVnZXgub3B0aW9uYWwoL1tBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFwtLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDBdKjovKSwgL1tBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFwtLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDBdKi8pO1xuICAvLyBob3dldmVyLCB0byBjYXRlciBmb3IgcGVyZm9ybWFuY2UgYW5kIG1vcmUgVW5pY29kZSBzdXBwb3J0IHJlbHkgc2ltcGx5IG9uIHRoZSBVbmljb2RlIGxldHRlciBjbGFzc1xuICBjb25zdCBUQUdfTkFNRV9SRSA9IHJlZ2V4LmNvbmNhdCgvW1xccHtMfV9dL3UsIHJlZ2V4Lm9wdGlvbmFsKC9bXFxwe0x9MC05Xy4tXSo6L3UpLCAvW1xccHtMfTAtOV8uLV0qL3UpO1xuICBjb25zdCBYTUxfSURFTlRfUkUgPSAvW1xccHtMfTAtOS5fOi1dKy91O1xuICBjb25zdCBYTUxfRU5USVRJRVMgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogLyZbYS16XSs7fCYjWzAtOV0rO3wmI3hbYS1mMC05XSs7L1xuICB9O1xuICBjb25zdCBYTUxfTUVUQV9LRVlXT1JEUyA9IHtcbiAgICBiZWdpbjogL1xccy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAvIz9bYS16X11bYS16MS05Xy1dKy8sXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBYTUxfTUVUQV9QQVJfS0VZV09SRFMgPSBobGpzLmluaGVyaXQoWE1MX01FVEFfS0VZV09SRFMsIHtcbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpL1xuICB9KTtcbiAgY29uc3QgQVBPU19NRVRBX1NUUklOR19NT0RFID0gaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwgeyBjbGFzc05hbWU6ICdzdHJpbmcnIH0pO1xuICBjb25zdCBRVU9URV9NRVRBX1NUUklOR19NT0RFID0gaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHsgY2xhc3NOYW1lOiAnc3RyaW5nJyB9KTtcbiAgY29uc3QgVEFHX0lOVEVSTkFMUyA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvPC8sXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICBiZWdpbjogWE1MX0lERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvPVxccyovLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IC9cIi8sXG4gICAgICAgICAgICAgICAgZW5kOiAvXCIvLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbIFhNTF9FTlRJVElFUyBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICAgICAgICAgIGVuZDogLycvLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbIFhNTF9FTlRJVElFUyBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9bXlxcc1wiJz08PmBdKy8gfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnSFRNTCwgWE1MJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnaHRtbCcsXG4gICAgICAneGh0bWwnLFxuICAgICAgJ3JzcycsXG4gICAgICAnYXRvbScsXG4gICAgICAneGpiJyxcbiAgICAgICd4c2QnLFxuICAgICAgJ3hzbCcsXG4gICAgICAncGxpc3QnLFxuICAgICAgJ3dzZicsXG4gICAgICAnc3ZnJ1xuICAgIF0sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICB1bmljb2RlUmVnZXg6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvPCFbYS16XS8sXG4gICAgICAgIGVuZDogLz4vLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFhNTF9NRVRBX0tFWVdPUkRTLFxuICAgICAgICAgIFFVT1RFX01FVEFfU1RSSU5HX01PREUsXG4gICAgICAgICAgQVBPU19NRVRBX1NUUklOR19NT0RFLFxuICAgICAgICAgIFhNTF9NRVRBX1BBUl9LRVlXT1JEUyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcWy8sXG4gICAgICAgICAgICBlbmQ6IC9cXF0vLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvPCFbYS16XS8sXG4gICAgICAgICAgICAgICAgZW5kOiAvPi8sXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIFhNTF9NRVRBX0tFWVdPUkRTLFxuICAgICAgICAgICAgICAgICAgWE1MX01FVEFfUEFSX0tFWVdPUkRTLFxuICAgICAgICAgICAgICAgICAgUVVPVEVfTUVUQV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgICAgIEFQT1NfTUVUQV9TVFJJTkdfTU9ERVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgLzwhLS0vLFxuICAgICAgICAvLS0+LyxcbiAgICAgICAgeyByZWxldmFuY2U6IDEwIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvPCFcXFtDREFUQVxcWy8sXG4gICAgICAgIGVuZDogL1xcXVxcXT4vLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgWE1MX0VOVElUSUVTLFxuICAgICAgLy8geG1sIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBlbmQ6IC9cXD8+LyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogLzxcXD94bWwvLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIFFVT1RFX01FVEFfU1RSSU5HX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvPFxcP1thLXpdW2EtejAtOV0rLyxcbiAgICAgICAgICB9XG4gICAgICAgIF1cblxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgLypcbiAgICAgICAgVGhlIGxvb2thaGVhZCBwYXR0ZXJuICg/PS4uLikgZW5zdXJlcyB0aGF0ICdiZWdpbicgb25seSBtYXRjaGVzXG4gICAgICAgICc8c3R5bGUnIGFzIGEgc2luZ2xlIHdvcmQsIGZvbGxvd2VkIGJ5IGEgd2hpdGVzcGFjZSBvciBhblxuICAgICAgICBlbmRpbmcgYnJhY2tldC5cbiAgICAgICAgKi9cbiAgICAgICAgYmVnaW46IC88c3R5bGUoPz1cXHN8PikvLFxuICAgICAgICBlbmQ6IC8+LyxcbiAgICAgICAga2V5d29yZHM6IHsgbmFtZTogJ3N0eWxlJyB9LFxuICAgICAgICBjb250YWluczogWyBUQUdfSU5URVJOQUxTIF0sXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogLzxcXC9zdHlsZT4vLFxuICAgICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogW1xuICAgICAgICAgICAgJ2NzcycsXG4gICAgICAgICAgICAneG1sJ1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZSA8c3R5bGUgdGFnIGFib3V0IHRoZSBsb29rYWhlYWQgcGF0dGVyblxuICAgICAgICBiZWdpbjogLzxzY3JpcHQoPz1cXHN8PikvLFxuICAgICAgICBlbmQ6IC8+LyxcbiAgICAgICAga2V5d29yZHM6IHsgbmFtZTogJ3NjcmlwdCcgfSxcbiAgICAgICAgY29udGFpbnM6IFsgVEFHX0lOVEVSTkFMUyBdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6IC88XFwvc2NyaXB0Pi8sXG4gICAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICAgIHN1Ykxhbmd1YWdlOiBbXG4gICAgICAgICAgICAnamF2YXNjcmlwdCcsXG4gICAgICAgICAgICAnaGFuZGxlYmFycycsXG4gICAgICAgICAgICAneG1sJ1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHdlIG5lZWQgdGhpcyBmb3Igbm93IGZvciBqU1hcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgYmVnaW46IC88Pnw8XFwvPi9cbiAgICAgIH0sXG4gICAgICAvLyBvcGVuIHRhZ1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0YWcnLFxuICAgICAgICBiZWdpbjogcmVnZXguY29uY2F0KFxuICAgICAgICAgIC88LyxcbiAgICAgICAgICByZWdleC5sb29rYWhlYWQocmVnZXguY29uY2F0KFxuICAgICAgICAgICAgVEFHX05BTUVfUkUsXG4gICAgICAgICAgICAvLyA8dGFnLz5cbiAgICAgICAgICAgIC8vIDx0YWc+XG4gICAgICAgICAgICAvLyA8dGFnIC4uLlxuICAgICAgICAgICAgcmVnZXguZWl0aGVyKC9cXC8+LywgLz4vLCAvXFxzLylcbiAgICAgICAgICApKVxuICAgICAgICApLFxuICAgICAgICBlbmQ6IC9cXC8/Pi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgICAgICAgICBiZWdpbjogVEFHX05BTUVfUkUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBzdGFydHM6IFRBR19JTlRFUk5BTFNcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBjbG9zZSB0YWdcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgYmVnaW46IHJlZ2V4LmNvbmNhdChcbiAgICAgICAgICAvPFxcLy8sXG4gICAgICAgICAgcmVnZXgubG9va2FoZWFkKHJlZ2V4LmNvbmNhdChcbiAgICAgICAgICAgIFRBR19OQU1FX1JFLCAvPi9cbiAgICAgICAgICApKVxuICAgICAgICApLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgYmVnaW46IFRBR19OQU1FX1JFLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogLz4vLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB4bWw7XG4iLCIvKlxuTGFuZ3VhZ2U6IFlBTUxcbkRlc2NyaXB0aW9uOiBZZXQgQW5vdGhlciBNYXJrZG93biBMYW5ndWFnZVxuQXV0aG9yOiBTdGVmYW4gV2llbmVydCA8c3R3aWVuZXJ0QGdtYWlsLmNvbT5cbkNvbnRyaWJ1dG9yczogQ2FybCBCYXh0ZXIgPGNhcmxAY2JheC50ZWNoPlxuUmVxdWlyZXM6IHJ1YnkuanNcbldlYnNpdGU6IGh0dHBzOi8veWFtbC5vcmdcbkNhdGVnb3J5OiBjb21tb24sIGNvbmZpZ1xuKi9cbmZ1bmN0aW9uIHlhbWwoaGxqcykge1xuICBjb25zdCBMSVRFUkFMUyA9ICd0cnVlIGZhbHNlIHllcyBubyBudWxsJztcblxuICAvLyBZQU1MIHNwZWMgYWxsb3dzIG5vbi1yZXNlcnZlZCBVUkkgY2hhcmFjdGVycyBpbiB0YWdzLlxuICBjb25zdCBVUklfQ0hBUkFDVEVSUyA9ICdbXFxcXHcjOy8/OkAmPSskLC5+KlxcJygpW1xcXFxdXSsnO1xuXG4gIC8vIERlZmluZSBrZXlzIGFzIHN0YXJ0aW5nIHdpdGggYSB3b3JkIGNoYXJhY3RlclxuICAvLyAuLi5jb250YWluaW5nIHdvcmQgY2hhcnMsIHNwYWNlcywgY29sb25zLCBmb3J3YXJkLXNsYXNoZXMsIGh5cGhlbnMgYW5kIHBlcmlvZHNcbiAgLy8gLi4uYW5kIGVuZGluZyB3aXRoIGEgY29sb24gZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgYSBzcGFjZSwgdGFiIG9yIG5ld2xpbmUuXG4gIC8vIFRoZSBZQU1MIHNwZWMgYWxsb3dzIGZvciBtdWNoIG1vcmUgdGhhbiB0aGlzLCBidXQgdGhpcyBjb3ZlcnMgbW9zdCB1c2UtY2FzZXMuXG4gIGNvbnN0IEtFWSA9IHtcbiAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFx3W1xcXFx3IDpcXFxcLy4tXSo6KD89WyBcXHRdfCQpJyB9LFxuICAgICAgeyAvLyBkb3VibGUgcXVvdGVkIGtleXNcbiAgICAgICAgYmVnaW46ICdcIlxcXFx3W1xcXFx3IDpcXFxcLy4tXSpcIjooPz1bIFxcdF18JCknIH0sXG4gICAgICB7IC8vIHNpbmdsZSBxdW90ZWQga2V5c1xuICAgICAgICBiZWdpbjogJ1xcJ1xcXFx3W1xcXFx3IDpcXFxcLy4tXSpcXCc6KD89WyBcXHRdfCQpJyB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFRFTVBMQVRFX1ZBUklBQkxFUyA9IHtcbiAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS12YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgLy8gamluamEgdGVtcGxhdGVzIEFuc2libGVcbiAgICAgICAgYmVnaW46IC9cXHtcXHsvLFxuICAgICAgICBlbmQ6IC9cXH1cXH0vXG4gICAgICB9LFxuICAgICAgeyAvLyBSdWJ5IGkxOG5cbiAgICAgICAgYmVnaW46IC8lXFx7LyxcbiAgICAgICAgZW5kOiAvXFx9L1xuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJy8sXG4gICAgICAgIGVuZDogLycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1wiLyxcbiAgICAgICAgZW5kOiAvXCIvXG4gICAgICB9LFxuICAgICAgeyBiZWdpbjogL1xcUysvIH1cbiAgICBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBURU1QTEFURV9WQVJJQUJMRVNcbiAgICBdXG4gIH07XG5cbiAgLy8gU3RyaW5ncyBpbnNpZGUgb2YgdmFsdWUgY29udGFpbmVycyAob2JqZWN0cykgY2FuJ3QgY29udGFpbiBicmFjZXMsXG4gIC8vIGJyYWNrZXRzLCBvciBjb21tYXNcbiAgY29uc3QgQ09OVEFJTkVSX1NUUklORyA9IGhsanMuaW5oZXJpdChTVFJJTkcsIHsgdmFyaWFudHM6IFtcbiAgICB7XG4gICAgICBiZWdpbjogLycvLFxuICAgICAgZW5kOiAvJy9cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgZW5kOiAvXCIvXG4gICAgfSxcbiAgICB7IGJlZ2luOiAvW15cXHMse31bXFxdXSsvIH1cbiAgXSB9KTtcblxuICBjb25zdCBEQVRFX1JFID0gJ1swLTldezR9KC1bMC05XVswLTldKXswLDJ9JztcbiAgY29uc3QgVElNRV9SRSA9ICcoW1R0IFxcXFx0XVswLTldWzAtOV0/KDpbMC05XVswLTldKXsyfSk/JztcbiAgY29uc3QgRlJBQ1RJT05fUkUgPSAnKFxcXFwuWzAtOV0qKT8nO1xuICBjb25zdCBaT05FX1JFID0gJyhbIFxcXFx0XSkqKFp8Wy0rXVswLTldWzAtOV0/KDpbMC05XVswLTldKT8pPyc7XG4gIGNvbnN0IFRJTUVTVEFNUCA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAnXFxcXGInICsgREFURV9SRSArIFRJTUVfUkUgKyBGUkFDVElPTl9SRSArIFpPTkVfUkUgKyAnXFxcXGInXG4gIH07XG5cbiAgY29uc3QgVkFMVUVfQ09OVEFJTkVSID0ge1xuICAgIGVuZDogJywnLFxuICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAga2V5d29yZHM6IExJVEVSQUxTLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBPQkpFQ1QgPSB7XG4gICAgYmVnaW46IC9cXHsvLFxuICAgIGVuZDogL1xcfS8sXG4gICAgY29udGFpbnM6IFsgVkFMVUVfQ09OVEFJTkVSIF0sXG4gICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgQVJSQVkgPSB7XG4gICAgYmVnaW46ICdcXFxcWycsXG4gICAgZW5kOiAnXFxcXF0nLFxuICAgIGNvbnRhaW5zOiBbIFZBTFVFX0NPTlRBSU5FUiBdLFxuICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgTU9ERVMgPSBbXG4gICAgS0VZLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgYmVnaW46ICdeLS0tXFxcXHMqJCcsXG4gICAgICByZWxldmFuY2U6IDEwXG4gICAgfSxcbiAgICB7IC8vIG11bHRpIGxpbmUgc3RyaW5nXG4gICAgICAvLyBCbG9ja3Mgc3RhcnQgd2l0aCBhIHwgb3IgPiBmb2xsb3dlZCBieSBhIG5ld2xpbmVcbiAgICAgIC8vXG4gICAgICAvLyBJbmRlbnRhdGlvbiBvZiBzdWJzZXF1ZW50IGxpbmVzIG11c3QgYmUgdGhlIHNhbWUgdG9cbiAgICAgIC8vIGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgYmxvY2tcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ1tcXFxcfD5dKFsxLTldP1srLV0pP1sgXSpcXFxcbiggKylbXiBdW15cXFxcbl0qXFxcXG4oXFxcXDJbXlxcXFxuXStcXFxcbj8pKidcbiAgICB9LFxuICAgIHsgLy8gUnVieS9SYWlscyBlcmJcbiAgICAgIGJlZ2luOiAnPCVbJT0tXT8nLFxuICAgICAgZW5kOiAnWyUtXT8lPicsXG4gICAgICBzdWJMYW5ndWFnZTogJ3J1YnknLFxuICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAgeyAvLyBuYW1lZCB0YWdzXG4gICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgIGJlZ2luOiAnIVxcXFx3KyEnICsgVVJJX0NIQVJBQ1RFUlNcbiAgICB9LFxuICAgIC8vIGh0dHBzOi8veWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjc4NDA2NFxuICAgIHsgLy8gdmVyYmF0aW0gdGFnc1xuICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICBiZWdpbjogJyE8JyArIFVSSV9DSEFSQUNURVJTICsgXCI+XCJcbiAgICB9LFxuICAgIHsgLy8gcHJpbWFyeSB0YWdzXG4gICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgIGJlZ2luOiAnIScgKyBVUklfQ0hBUkFDVEVSU1xuICAgIH0sXG4gICAgeyAvLyBzZWNvbmRhcnkgdGFnc1xuICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICBiZWdpbjogJyEhJyArIFVSSV9DSEFSQUNURVJTXG4gICAgfSxcbiAgICB7IC8vIGZyYWdtZW50IGlkICZyZWZcbiAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgYmVnaW46ICcmJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICckJ1xuICAgIH0sXG4gICAgeyAvLyBmcmFnbWVudCByZWZlcmVuY2UgKnJlZlxuICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICBiZWdpbjogJ1xcXFwqJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICckJ1xuICAgIH0sXG4gICAgeyAvLyBhcnJheSBsaXN0aW5nXG4gICAgICBjbGFzc05hbWU6ICdidWxsZXQnLFxuICAgICAgLy8gVE9ETzogcmVtb3ZlIHwkIGhhY2sgd2hlbiB3ZSBoYXZlIHByb3BlciBsb29rLWFoZWFkIHN1cHBvcnRcbiAgICAgIGJlZ2luOiAnLSg/PVsgXXwkKScsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAge1xuICAgICAgYmVnaW5LZXl3b3JkczogTElURVJBTFMsXG4gICAgICBrZXl3b3JkczogeyBsaXRlcmFsOiBMSVRFUkFMUyB9XG4gICAgfSxcbiAgICBUSU1FU1RBTVAsXG4gICAgLy8gbnVtYmVycyBhcmUgYW55IHZhbGlkIEMtc3R5bGUgbnVtYmVyIHRoYXRcbiAgICAvLyBzaXQgaXNvbGF0ZWQgZnJvbSBvdGhlciB3b3Jkc1xuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSArICdcXFxcYicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIE9CSkVDVCxcbiAgICBBUlJBWSxcbiAgICBTVFJJTkdcbiAgXTtcblxuICBjb25zdCBWQUxVRV9NT0RFUyA9IFsgLi4uTU9ERVMgXTtcbiAgVkFMVUVfTU9ERVMucG9wKCk7XG4gIFZBTFVFX01PREVTLnB1c2goQ09OVEFJTkVSX1NUUklORyk7XG4gIFZBTFVFX0NPTlRBSU5FUi5jb250YWlucyA9IFZBTFVFX01PREVTO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1lBTUwnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgYWxpYXNlczogWyAneW1sJyBdLFxuICAgIGNvbnRhaW5zOiBNT0RFU1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHlhbWw7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJzeFwiXTtcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHByb3BUb1N0eWxlRnVuY3Rpb24gfSBmcm9tICcuLi9nZXRUaGVtZVZhbHVlJztcblxuY29uc3Qgc3BsaXRQcm9wcyA9IHByb3BzID0+IHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHN5c3RlbVByb3BzOiB7fSxcbiAgICBvdGhlclByb3BzOiB7fVxuICB9O1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICBpZiAocHJvcFRvU3R5bGVGdW5jdGlvbltwcm9wXSkge1xuICAgICAgcmVzdWx0LnN5c3RlbVByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5vdGhlclByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4dGVuZFN4UHJvcChwcm9wcykge1xuICBjb25zdCB7XG4gICAgc3g6IGluU3hcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IHtcbiAgICBzeXN0ZW1Qcm9wcyxcbiAgICBvdGhlclByb3BzXG4gIH0gPSBzcGxpdFByb3BzKG90aGVyKTtcbiAgbGV0IGZpbmFsU3g7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5TeCkpIHtcbiAgICBmaW5hbFN4ID0gW3N5c3RlbVByb3BzLCAuLi5pblN4XTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5TeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZpbmFsU3ggPSAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaW5TeCguLi5hcmdzKTtcblxuICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHN5c3RlbVByb3BzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN5c3RlbVByb3BzLCByZXN1bHQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZmluYWxTeCA9IF9leHRlbmRzKHt9LCBzeXN0ZW1Qcm9wcywgaW5TeCk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIG90aGVyUHJvcHMsIHtcbiAgICBzeDogZmluYWxTeFxuICB9KTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5pbXBvcnQgZGVmYXVsdFN0eWxlRnVuY3Rpb25TeCwgeyBleHRlbmRTeFByb3AgfSBmcm9tICcuL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi91c2VUaGVtZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQm94KG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZGVmYXVsdFRoZW1lLFxuICAgIGRlZmF1bHRDbGFzc05hbWUgPSAnTXVpQm94LXJvb3QnLFxuICAgIGdlbmVyYXRlQ2xhc3NOYW1lLFxuICAgIHN0eWxlRnVuY3Rpb25TeCA9IGRlZmF1bHRTdHlsZUZ1bmN0aW9uU3hcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IEJveFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJ1xuICB9KShzdHlsZUZ1bmN0aW9uU3gpO1xuICBjb25zdCBCb3ggPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCb3goaW5Qcm9wcywgcmVmKSB7XG4gICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZShkZWZhdWx0VGhlbWUpO1xuXG4gICAgY29uc3QgX2V4dGVuZFN4UHJvcCA9IGV4dGVuZFN4UHJvcChpblByb3BzKSxcbiAgICAgICAgICB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnZGl2J1xuICAgIH0gPSBfZXh0ZW5kU3hQcm9wLFxuICAgICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX2V4dGVuZFN4UHJvcCwgX2V4Y2x1ZGVkKTtcblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChCb3hSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgcmVmOiByZWYsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3NOYW1lLCBnZW5lcmF0ZUNsYXNzTmFtZSA/IGdlbmVyYXRlQ2xhc3NOYW1lKGRlZmF1bHRDbGFzc05hbWUpIDogZGVmYXVsdENsYXNzTmFtZSksXG4gICAgICB0aGVtZTogdGhlbWVcbiAgICB9LCBvdGhlcikpO1xuICB9KTtcbiAgcmV0dXJuIEJveDtcbn0iLCJpbXBvcnQgeyBjcmVhdGVCb3ggfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yIGFzIENsYXNzTmFtZUdlbmVyYXRvciB9IGZyb20gJy4uL2NsYXNzTmFtZSc7XG5pbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gJy4uL3N0eWxlcyc7XG5jb25zdCBkZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuY29uc3QgQm94ID0gY3JlYXRlQm94KHtcbiAgZGVmYXVsdFRoZW1lLFxuICBkZWZhdWx0Q2xhc3NOYW1lOiAnTXVpQm94LXJvb3QnLFxuICBnZW5lcmF0ZUNsYXNzTmFtZTogQ2xhc3NOYW1lR2VuZXJhdG9yLmdlbmVyYXRlXG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJveC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQm94OyIsImNvbnN0IGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbmV4cG9ydCBkZWZhdWx0IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ211aS5uZXN0ZWQnKSA6ICdfX1RIRU1FX05FU1RFRF9fJzsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBleGFjdFByb3AgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBUaGVtZUNvbnRleHQgZnJvbSAnLi4vdXNlVGhlbWUvVGhlbWVDb250ZXh0JztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi91c2VUaGVtZSc7XG5pbXBvcnQgbmVzdGVkIGZyb20gJy4vbmVzdGVkJzsgLy8gVG8gc3VwcG9ydCBjb21wb3NpdGlvbiBvZiB0aGVtZS5cblxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuZnVuY3Rpb24gbWVyZ2VPdXRlckxvY2FsVGhlbWUob3V0ZXJUaGVtZSwgbG9jYWxUaGVtZSkge1xuICBpZiAodHlwZW9mIGxvY2FsVGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBtZXJnZWRUaGVtZSA9IGxvY2FsVGhlbWUob3V0ZXJUaGVtZSk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCFtZXJnZWRUaGVtZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3Ugc2hvdWxkIHJldHVybiBhbiBvYmplY3QgZnJvbSB5b3VyIHRoZW1lIGZ1bmN0aW9uLCBpLmUuJywgJzxUaGVtZVByb3ZpZGVyIHRoZW1lPXsoKSA9PiAoe30pfSAvPiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkVGhlbWU7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIG91dGVyVGhlbWUsIGxvY2FsVGhlbWUpO1xufVxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCB0YWtlcyBhIGB0aGVtZWAgcHJvcC5cbiAqIEl0IG1ha2VzIHRoZSBgdGhlbWVgIGF2YWlsYWJsZSBkb3duIHRoZSBSZWFjdCB0cmVlIHRoYW5rcyB0byBSZWFjdCBjb250ZXh0LlxuICogVGhpcyBjb21wb25lbnQgc2hvdWxkIHByZWZlcmFibHkgYmUgdXNlZCBhdCAqKnRoZSByb290IG9mIHlvdXIgY29tcG9uZW50IHRyZWUqKi5cbiAqL1xuXG5cbmZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIHRoZW1lOiBsb2NhbFRoZW1lXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb3V0ZXJUaGVtZSA9IHVzZVRoZW1lKCk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAob3V0ZXJUaGVtZSA9PT0gbnVsbCAmJiB0eXBlb2YgbG9jYWxUaGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IGFyZSBwcm92aWRpbmcgYSB0aGVtZSBmdW5jdGlvbiBwcm9wIHRvIHRoZSBUaGVtZVByb3ZpZGVyIGNvbXBvbmVudDonLCAnPFRoZW1lUHJvdmlkZXIgdGhlbWU9e291dGVyVGhlbWUgPT4gb3V0ZXJUaGVtZX0gLz4nLCAnJywgJ0hvd2V2ZXIsIG5vIG91dGVyIHRoZW1lIGlzIHByZXNlbnQuJywgJ01ha2Ugc3VyZSBhIHRoZW1lIGlzIGFscmVhZHkgaW5qZWN0ZWQgaGlnaGVyIGluIHRoZSBSZWFjdCB0cmVlICcgKyAnb3IgcHJvdmlkZSBhIHRoZW1lIG9iamVjdC4nXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBvdXRlclRoZW1lID09PSBudWxsID8gbG9jYWxUaGVtZSA6IG1lcmdlT3V0ZXJMb2NhbFRoZW1lKG91dGVyVGhlbWUsIGxvY2FsVGhlbWUpO1xuXG4gICAgaWYgKG91dHB1dCAhPSBudWxsKSB7XG4gICAgICBvdXRwdXRbbmVzdGVkXSA9IG91dGVyVGhlbWUgIT09IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSwgW2xvY2FsVGhlbWUsIG91dGVyVGhlbWVdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB0aGVtZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfSk7XG59XG5cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQSB0aGVtZSBvYmplY3QuIFlvdSBjYW4gcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIGV4dGVuZCB0aGUgb3V0ZXIgdGhlbWUuXG4gICAqL1xuICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKS5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUaGVtZVByb3ZpZGVyLnByb3BUeXBlcyA9IGV4YWN0UHJvcChUaGVtZVByb3ZpZGVyLnByb3BUeXBlcykgOiB2b2lkIDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRoZW1lUHJvdmlkZXI7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIgYXMgTXVpVGhlbWVQcm92aWRlciB9IGZyb20gJ0BtdWkvcHJpdmF0ZS10aGVtaW5nJztcbmltcG9ydCB7IGV4YWN0UHJvcCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVGhlbWVDb250ZXh0IGFzIFN0eWxlZEVuZ2luZVRoZW1lQ29udGV4dCB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vdXNlVGhlbWUnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuZnVuY3Rpb24gSW5uZXJUaGVtZVByb3ZpZGVyKHByb3BzKSB7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN0eWxlZEVuZ2luZVRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB0eXBlb2YgdGhlbWUgPT09ICdvYmplY3QnID8gdGhlbWUgOiB7fSxcbiAgICBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW5cbiAgfSk7XG59XG5cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IElubmVyVGhlbWVQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBZb3VyIGNvbXBvbmVudCB0cmVlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59IDogdm9pZCAwO1xuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCBtYWtlcyB0aGUgYHRoZW1lYCBhdmFpbGFibGUgZG93biB0aGUgUmVhY3QgdHJlZS5cbiAqIEl0IHNob3VsZCBwcmVmZXJhYmx5IGJlIHVzZWQgYXQgKip0aGUgcm9vdCBvZiB5b3VyIGNvbXBvbmVudCB0cmVlKiouXG4gKi9cblxuZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgdGhlbWU6IGxvY2FsVGhlbWVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTXVpVGhlbWVQcm92aWRlciwge1xuICAgIHRoZW1lOiBsb2NhbFRoZW1lLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChJbm5lclRoZW1lUHJvdmlkZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pXG4gIH0pO1xufVxuXG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUaGVtZVByb3ZpZGVyLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBZb3VyIGNvbXBvbmVudCB0cmVlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBBIHRoZW1lIG9iamVjdC4gWW91IGNhbiBwcm92aWRlIGEgZnVuY3Rpb24gdG8gZXh0ZW5kIHRoZSBvdXRlciB0aGVtZS5cbiAgICovXG4gIHRoZW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0gZXhhY3RQcm9wKFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzKSA6IHZvaWQgMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGhlbWVQcm92aWRlcjsiLCIvKipcbiAqIEByZW1peC1ydW4vcm91dGVyIHYxLjAuMVxuICpcbiAqIENvcHlyaWdodCAoYykgUmVtaXggU29mdHdhcmUgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRS5tZCBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBsaWNlbnNlIE1JVFxuICovXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyNyZWdpb24gVHlwZXMgYW5kIENvbnN0YW50c1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBBY3Rpb25zIHJlcHJlc2VudCB0aGUgdHlwZSBvZiBjaGFuZ2UgdG8gYSBsb2NhdGlvbiB2YWx1ZS5cbiAqL1xudmFyIEFjdGlvbjtcblxuKGZ1bmN0aW9uIChBY3Rpb24pIHtcbiAgLyoqXG4gICAqIEEgUE9QIGluZGljYXRlcyBhIGNoYW5nZSB0byBhbiBhcmJpdHJhcnkgaW5kZXggaW4gdGhlIGhpc3Rvcnkgc3RhY2ssIHN1Y2hcbiAgICogYXMgYSBiYWNrIG9yIGZvcndhcmQgbmF2aWdhdGlvbi4gSXQgZG9lcyBub3QgZGVzY3JpYmUgdGhlIGRpcmVjdGlvbiBvZiB0aGVcbiAgICogbmF2aWdhdGlvbiwgb25seSB0aGF0IHRoZSBjdXJyZW50IGluZGV4IGNoYW5nZWQuXG4gICAqXG4gICAqIE5vdGU6IFRoaXMgaXMgdGhlIGRlZmF1bHQgYWN0aW9uIGZvciBuZXdseSBjcmVhdGVkIGhpc3Rvcnkgb2JqZWN0cy5cbiAgICovXG4gIEFjdGlvbltcIlBvcFwiXSA9IFwiUE9QXCI7XG4gIC8qKlxuICAgKiBBIFBVU0ggaW5kaWNhdGVzIGEgbmV3IGVudHJ5IGJlaW5nIGFkZGVkIHRvIHRoZSBoaXN0b3J5IHN0YWNrLCBzdWNoIGFzIHdoZW5cbiAgICogYSBsaW5rIGlzIGNsaWNrZWQgYW5kIGEgbmV3IHBhZ2UgbG9hZHMuIFdoZW4gdGhpcyBoYXBwZW5zLCBhbGwgc3Vic2VxdWVudFxuICAgKiBlbnRyaWVzIGluIHRoZSBzdGFjayBhcmUgbG9zdC5cbiAgICovXG5cbiAgQWN0aW9uW1wiUHVzaFwiXSA9IFwiUFVTSFwiO1xuICAvKipcbiAgICogQSBSRVBMQUNFIGluZGljYXRlcyB0aGUgZW50cnkgYXQgdGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIGhpc3Rvcnkgc3RhY2tcbiAgICogYmVpbmcgcmVwbGFjZWQgYnkgYSBuZXcgb25lLlxuICAgKi9cblxuICBBY3Rpb25bXCJSZXBsYWNlXCJdID0gXCJSRVBMQUNFXCI7XG59KShBY3Rpb24gfHwgKEFjdGlvbiA9IHt9KSk7XG5cbmNvbnN0IFBvcFN0YXRlRXZlbnRUeXBlID0gXCJwb3BzdGF0ZVwiO1xuLyoqXG4gKiBNZW1vcnkgaGlzdG9yeSBzdG9yZXMgdGhlIGN1cnJlbnQgbG9jYXRpb24gaW4gbWVtb3J5LiBJdCBpcyBkZXNpZ25lZCBmb3IgdXNlXG4gKiBpbiBzdGF0ZWZ1bCBub24tYnJvd3NlciBlbnZpcm9ubWVudHMgbGlrZSB0ZXN0cyBhbmQgUmVhY3QgTmF0aXZlLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZU1lbW9yeUhpc3Rvcnkob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgbGV0IHtcbiAgICBpbml0aWFsRW50cmllcyA9IFtcIi9cIl0sXG4gICAgaW5pdGlhbEluZGV4LFxuICAgIHY1Q29tcGF0ID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGxldCBlbnRyaWVzOyAvLyBEZWNsYXJlIHNvIHdlIGNhbiBhY2Nlc3MgZnJvbSBjcmVhdGVNZW1vcnlMb2NhdGlvblxuXG4gIGVudHJpZXMgPSBpbml0aWFsRW50cmllcy5tYXAoKGVudHJ5LCBpbmRleCkgPT4gY3JlYXRlTWVtb3J5TG9jYXRpb24oZW50cnksIHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiA/IG51bGwgOiBlbnRyeS5zdGF0ZSwgaW5kZXggPT09IDAgPyBcImRlZmF1bHRcIiA6IHVuZGVmaW5lZCkpO1xuICBsZXQgaW5kZXggPSBjbGFtcEluZGV4KGluaXRpYWxJbmRleCA9PSBudWxsID8gZW50cmllcy5sZW5ndGggLSAxIDogaW5pdGlhbEluZGV4KTtcbiAgbGV0IGFjdGlvbiA9IEFjdGlvbi5Qb3A7XG4gIGxldCBsaXN0ZW5lciA9IG51bGw7XG5cbiAgZnVuY3Rpb24gY2xhbXBJbmRleChuKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG4sIDApLCBlbnRyaWVzLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uKCkge1xuICAgIHJldHVybiBlbnRyaWVzW2luZGV4XTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeUxvY2F0aW9uKHRvLCBzdGF0ZSwga2V5KSB7XG4gICAgaWYgKHN0YXRlID09PSB2b2lkIDApIHtcbiAgICAgIHN0YXRlID0gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihlbnRyaWVzID8gZ2V0Q3VycmVudExvY2F0aW9uKCkucGF0aG5hbWUgOiBcIi9cIiwgdG8sIHN0YXRlLCBrZXkpO1xuICAgIHdhcm5pbmckMShsb2NhdGlvbi5wYXRobmFtZS5jaGFyQXQoMCkgPT09IFwiL1wiLCBcInJlbGF0aXZlIHBhdGhuYW1lcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBtZW1vcnkgaGlzdG9yeTogXCIgKyBKU09OLnN0cmluZ2lmeSh0bykpO1xuICAgIHJldHVybiBsb2NhdGlvbjtcbiAgfVxuXG4gIGxldCBoaXN0b3J5ID0ge1xuICAgIGdldCBpbmRleCgpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9LFxuXG4gICAgZ2V0IGFjdGlvbigpIHtcbiAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfSxcblxuICAgIGdldCBsb2NhdGlvbigpIHtcbiAgICAgIHJldHVybiBnZXRDdXJyZW50TG9jYXRpb24oKTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSHJlZih0bykge1xuICAgICAgcmV0dXJuIHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIiA/IHRvIDogY3JlYXRlUGF0aCh0byk7XG4gICAgfSxcblxuICAgIHB1c2godG8sIHN0YXRlKSB7XG4gICAgICBhY3Rpb24gPSBBY3Rpb24uUHVzaDtcbiAgICAgIGxldCBuZXh0TG9jYXRpb24gPSBjcmVhdGVNZW1vcnlMb2NhdGlvbih0bywgc3RhdGUpO1xuICAgICAgaW5kZXggKz0gMTtcbiAgICAgIGVudHJpZXMuc3BsaWNlKGluZGV4LCBlbnRyaWVzLmxlbmd0aCwgbmV4dExvY2F0aW9uKTtcblxuICAgICAgaWYgKHY1Q29tcGF0ICYmIGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgbG9jYXRpb246IG5leHRMb2NhdGlvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZSh0bywgc3RhdGUpIHtcbiAgICAgIGFjdGlvbiA9IEFjdGlvbi5SZXBsYWNlO1xuICAgICAgbGV0IG5leHRMb2NhdGlvbiA9IGNyZWF0ZU1lbW9yeUxvY2F0aW9uKHRvLCBzdGF0ZSk7XG4gICAgICBlbnRyaWVzW2luZGV4XSA9IG5leHRMb2NhdGlvbjtcblxuICAgICAgaWYgKHY1Q29tcGF0ICYmIGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgbG9jYXRpb246IG5leHRMb2NhdGlvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ28oZGVsdGEpIHtcbiAgICAgIGFjdGlvbiA9IEFjdGlvbi5Qb3A7XG4gICAgICBpbmRleCA9IGNsYW1wSW5kZXgoaW5kZXggKyBkZWx0YSk7XG5cbiAgICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGxvY2F0aW9uOiBnZXRDdXJyZW50TG9jYXRpb24oKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbGlzdGVuKGZuKSB7XG4gICAgICBsaXN0ZW5lciA9IGZuO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgbGlzdGVuZXIgPSBudWxsO1xuICAgICAgfTtcbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIGhpc3Rvcnk7XG59XG4vKipcbiAqIEJyb3dzZXIgaGlzdG9yeSBzdG9yZXMgdGhlIGxvY2F0aW9uIGluIHJlZ3VsYXIgVVJMcy4gVGhpcyBpcyB0aGUgc3RhbmRhcmQgZm9yXG4gKiBtb3N0IHdlYiBhcHBzLCBidXQgaXQgcmVxdWlyZXMgc29tZSBjb25maWd1cmF0aW9uIG9uIHRoZSBzZXJ2ZXIgdG8gZW5zdXJlIHlvdVxuICogc2VydmUgdGhlIHNhbWUgYXBwIGF0IG11bHRpcGxlIFVSTHMuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVtaXgtcnVuL2hpc3RvcnkvdHJlZS9tYWluL2RvY3MvYXBpLXJlZmVyZW5jZS5tZCNjcmVhdGVicm93c2VyaGlzdG9yeVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJIaXN0b3J5KG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJMb2NhdGlvbih3aW5kb3csIGdsb2JhbEhpc3RvcnkpIHtcbiAgICBsZXQge1xuICAgICAgcGF0aG5hbWUsXG4gICAgICBzZWFyY2gsXG4gICAgICBoYXNoXG4gICAgfSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICByZXR1cm4gY3JlYXRlTG9jYXRpb24oXCJcIiwge1xuICAgICAgcGF0aG5hbWUsXG4gICAgICBzZWFyY2gsXG4gICAgICBoYXNoXG4gICAgfSwgLy8gc3RhdGUgZGVmYXVsdHMgdG8gYG51bGxgIGJlY2F1c2UgYHdpbmRvdy5oaXN0b3J5LnN0YXRlYCBkb2VzXG4gICAgZ2xvYmFsSGlzdG9yeS5zdGF0ZSAmJiBnbG9iYWxIaXN0b3J5LnN0YXRlLnVzciB8fCBudWxsLCBnbG9iYWxIaXN0b3J5LnN0YXRlICYmIGdsb2JhbEhpc3Rvcnkuc3RhdGUua2V5IHx8IFwiZGVmYXVsdFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJIcmVmKHdpbmRvdywgdG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIHRvID09PSBcInN0cmluZ1wiID8gdG8gOiBjcmVhdGVQYXRoKHRvKTtcbiAgfVxuXG4gIHJldHVybiBnZXRVcmxCYXNlZEhpc3RvcnkoY3JlYXRlQnJvd3NlckxvY2F0aW9uLCBjcmVhdGVCcm93c2VySHJlZiwgbnVsbCwgb3B0aW9ucyk7XG59XG4vKipcbiAqIEhhc2ggaGlzdG9yeSBzdG9yZXMgdGhlIGxvY2F0aW9uIGluIHdpbmRvdy5sb2NhdGlvbi5oYXNoLiBUaGlzIG1ha2VzIGl0IGlkZWFsXG4gKiBmb3Igc2l0dWF0aW9ucyB3aGVyZSB5b3UgZG9uJ3Qgd2FudCB0byBzZW5kIHRoZSBsb2NhdGlvbiB0byB0aGUgc2VydmVyIGZvclxuICogc29tZSByZWFzb24sIGVpdGhlciBiZWNhdXNlIHlvdSBkbyBjYW5ub3QgY29uZmlndXJlIGl0IG9yIHRoZSBVUkwgc3BhY2UgaXNcbiAqIHJlc2VydmVkIGZvciBzb21ldGhpbmcgZWxzZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZW1peC1ydW4vaGlzdG9yeS90cmVlL21haW4vZG9jcy9hcGktcmVmZXJlbmNlLm1kI2NyZWF0ZWhhc2hoaXN0b3J5XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlSGFzaEhpc3Rvcnkob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSGFzaExvY2F0aW9uKHdpbmRvdywgZ2xvYmFsSGlzdG9yeSkge1xuICAgIGxldCB7XG4gICAgICBwYXRobmFtZSA9IFwiL1wiLFxuICAgICAgc2VhcmNoID0gXCJcIixcbiAgICAgIGhhc2ggPSBcIlwiXG4gICAgfSA9IHBhcnNlUGF0aCh3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHIoMSkpO1xuICAgIHJldHVybiBjcmVhdGVMb2NhdGlvbihcIlwiLCB7XG4gICAgICBwYXRobmFtZSxcbiAgICAgIHNlYXJjaCxcbiAgICAgIGhhc2hcbiAgICB9LCAvLyBzdGF0ZSBkZWZhdWx0cyB0byBgbnVsbGAgYmVjYXVzZSBgd2luZG93Lmhpc3Rvcnkuc3RhdGVgIGRvZXNcbiAgICBnbG9iYWxIaXN0b3J5LnN0YXRlICYmIGdsb2JhbEhpc3Rvcnkuc3RhdGUudXNyIHx8IG51bGwsIGdsb2JhbEhpc3Rvcnkuc3RhdGUgJiYgZ2xvYmFsSGlzdG9yeS5zdGF0ZS5rZXkgfHwgXCJkZWZhdWx0XCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSGFzaEhyZWYod2luZG93LCB0bykge1xuICAgIGxldCBiYXNlID0gd2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJiYXNlXCIpO1xuICAgIGxldCBocmVmID0gXCJcIjtcblxuICAgIGlmIChiYXNlICYmIGJhc2UuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSkge1xuICAgICAgbGV0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgbGV0IGhhc2hJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcbiAgICAgIGhyZWYgPSBoYXNoSW5kZXggPT09IC0xID8gdXJsIDogdXJsLnNsaWNlKDAsIGhhc2hJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhyZWYgKyBcIiNcIiArICh0eXBlb2YgdG8gPT09IFwic3RyaW5nXCIgPyB0byA6IGNyZWF0ZVBhdGgodG8pKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlSGFzaExvY2F0aW9uKGxvY2F0aW9uLCB0bykge1xuICAgIHdhcm5pbmckMShsb2NhdGlvbi5wYXRobmFtZS5jaGFyQXQoMCkgPT09IFwiL1wiLCBcInJlbGF0aXZlIHBhdGhuYW1lcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBoYXNoIGhpc3RvcnkucHVzaChcIiArIEpTT04uc3RyaW5naWZ5KHRvKSArIFwiKVwiKTtcbiAgfVxuXG4gIHJldHVybiBnZXRVcmxCYXNlZEhpc3RvcnkoY3JlYXRlSGFzaExvY2F0aW9uLCBjcmVhdGVIYXNoSHJlZiwgdmFsaWRhdGVIYXNoTG9jYXRpb24sIG9wdGlvbnMpO1xufSAvLyNlbmRyZWdpb25cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyNyZWdpb24gVVRJTFNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHdhcm5pbmckMShjb25kLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiKSBjb25zb2xlLndhcm4obWVzc2FnZSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gV2VsY29tZSB0byBkZWJ1Z2dpbmcgaGlzdG9yeSFcbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGVycm9yIGlzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHlvdSBjYW4gbW9yZSBlYXNpbHlcbiAgICAgIC8vIGZpbmQgdGhlIHNvdXJjZSBmb3IgYSB3YXJuaW5nIHRoYXQgYXBwZWFycyBpbiB0aGUgY29uc29sZSBieVxuICAgICAgLy8gZW5hYmxpbmcgXCJwYXVzZSBvbiBleGNlcHRpb25zXCIgaW4geW91ciBKYXZhU2NyaXB0IGRlYnVnZ2VyLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleSgpIHtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA4KTtcbn1cbi8qKlxuICogRm9yIGJyb3dzZXItYmFzZWQgaGlzdG9yaWVzLCB3ZSBjb21iaW5lIHRoZSBzdGF0ZSBhbmQga2V5IGludG8gYW4gb2JqZWN0XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRIaXN0b3J5U3RhdGUobG9jYXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICB1c3I6IGxvY2F0aW9uLnN0YXRlLFxuICAgIGtleTogbG9jYXRpb24ua2V5XG4gIH07XG59XG4vKipcbiAqIENyZWF0ZXMgYSBMb2NhdGlvbiBvYmplY3Qgd2l0aCBhIHVuaXF1ZSBrZXkgZnJvbSB0aGUgZ2l2ZW4gUGF0aFxuICovXG5cblxuZnVuY3Rpb24gY3JlYXRlTG9jYXRpb24oY3VycmVudCwgdG8sIHN0YXRlLCBrZXkpIHtcbiAgaWYgKHN0YXRlID09PSB2b2lkIDApIHtcbiAgICBzdGF0ZSA9IG51bGw7XG4gIH1cblxuICBsZXQgbG9jYXRpb24gPSBfZXh0ZW5kcyh7XG4gICAgcGF0aG5hbWU6IHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiID8gY3VycmVudCA6IGN1cnJlbnQucGF0aG5hbWUsXG4gICAgc2VhcmNoOiBcIlwiLFxuICAgIGhhc2g6IFwiXCJcbiAgfSwgdHlwZW9mIHRvID09PSBcInN0cmluZ1wiID8gcGFyc2VQYXRoKHRvKSA6IHRvLCB7XG4gICAgc3RhdGUsXG4gICAgLy8gVE9ETzogVGhpcyBjb3VsZCBiZSBjbGVhbmVkIHVwLiAgcHVzaC9yZXBsYWNlIHNob3VsZCBwcm9iYWJseSBqdXN0IHRha2VcbiAgICAvLyBmdWxsIExvY2F0aW9ucyBub3cgYW5kIGF2b2lkIHRoZSBuZWVkIHRvIHJ1biB0aHJvdWdoIHRoaXMgZmxvdyBhdCBhbGxcbiAgICAvLyBCdXQgdGhhdCdzIGEgcHJldHR5IGJpZyByZWZhY3RvciB0byB0aGUgY3VycmVudCB0ZXN0IHN1aXRlIHNvIGdvaW5nIHRvXG4gICAgLy8ga2VlcCBhcyBpcyBmb3IgdGhlIHRpbWUgYmVpbmcgYW5kIGp1c3QgbGV0IGFueSBpbmNvbWluZyBrZXlzIHRha2UgcHJlY2VkZW5jZVxuICAgIGtleTogdG8gJiYgdG8ua2V5IHx8IGtleSB8fCBjcmVhdGVLZXkoKVxuICB9KTtcblxuICByZXR1cm4gbG9jYXRpb247XG59XG4vKipcbiAqIENyZWF0ZXMgYSBzdHJpbmcgVVJMIHBhdGggZnJvbSB0aGUgZ2l2ZW4gcGF0aG5hbWUsIHNlYXJjaCwgYW5kIGhhc2ggY29tcG9uZW50cy5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVQYXRoKF9yZWYpIHtcbiAgbGV0IHtcbiAgICBwYXRobmFtZSA9IFwiL1wiLFxuICAgIHNlYXJjaCA9IFwiXCIsXG4gICAgaGFzaCA9IFwiXCJcbiAgfSA9IF9yZWY7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoICE9PSBcIj9cIikgcGF0aG5hbWUgKz0gc2VhcmNoLmNoYXJBdCgwKSA9PT0gXCI/XCIgPyBzZWFyY2ggOiBcIj9cIiArIHNlYXJjaDtcbiAgaWYgKGhhc2ggJiYgaGFzaCAhPT0gXCIjXCIpIHBhdGhuYW1lICs9IGhhc2guY2hhckF0KDApID09PSBcIiNcIiA/IGhhc2ggOiBcIiNcIiArIGhhc2g7XG4gIHJldHVybiBwYXRobmFtZTtcbn1cbi8qKlxuICogUGFyc2VzIGEgc3RyaW5nIFVSTCBwYXRoIGludG8gaXRzIHNlcGFyYXRlIHBhdGhuYW1lLCBzZWFyY2gsIGFuZCBoYXNoIGNvbXBvbmVudHMuXG4gKi9cblxuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcbiAgbGV0IHBhcnNlZFBhdGggPSB7fTtcblxuICBpZiAocGF0aCkge1xuICAgIGxldCBoYXNoSW5kZXggPSBwYXRoLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2hJbmRleCA+PSAwKSB7XG4gICAgICBwYXJzZWRQYXRoLmhhc2ggPSBwYXRoLnN1YnN0cihoYXNoSW5kZXgpO1xuICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDAsIGhhc2hJbmRleCk7XG4gICAgfVxuXG4gICAgbGV0IHNlYXJjaEluZGV4ID0gcGF0aC5pbmRleE9mKFwiP1wiKTtcblxuICAgIGlmIChzZWFyY2hJbmRleCA+PSAwKSB7XG4gICAgICBwYXJzZWRQYXRoLnNlYXJjaCA9IHBhdGguc3Vic3RyKHNlYXJjaEluZGV4KTtcbiAgICAgIHBhdGggPSBwYXRoLnN1YnN0cigwLCBzZWFyY2hJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIHBhcnNlZFBhdGgucGF0aG5hbWUgPSBwYXRoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWRQYXRoO1xufVxuXG5mdW5jdGlvbiBnZXRVcmxCYXNlZEhpc3RvcnkoZ2V0TG9jYXRpb24sIGNyZWF0ZUhyZWYsIHZhbGlkYXRlTG9jYXRpb24sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGxldCB7XG4gICAgd2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcsXG4gICAgdjVDb21wYXQgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgbGV0IGdsb2JhbEhpc3RvcnkgPSB3aW5kb3cuaGlzdG9yeTtcbiAgbGV0IGFjdGlvbiA9IEFjdGlvbi5Qb3A7XG4gIGxldCBsaXN0ZW5lciA9IG51bGw7XG5cbiAgZnVuY3Rpb24gaGFuZGxlUG9wKCkge1xuICAgIGFjdGlvbiA9IEFjdGlvbi5Qb3A7XG5cbiAgICBpZiAobGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBsb2NhdGlvbjogaGlzdG9yeS5sb2NhdGlvblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHVzaCh0bywgc3RhdGUpIHtcbiAgICBhY3Rpb24gPSBBY3Rpb24uUHVzaDtcbiAgICBsZXQgbG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihoaXN0b3J5LmxvY2F0aW9uLCB0bywgc3RhdGUpO1xuICAgIGlmICh2YWxpZGF0ZUxvY2F0aW9uKSB2YWxpZGF0ZUxvY2F0aW9uKGxvY2F0aW9uLCB0byk7XG4gICAgbGV0IGhpc3RvcnlTdGF0ZSA9IGdldEhpc3RvcnlTdGF0ZShsb2NhdGlvbik7XG4gICAgbGV0IHVybCA9IGhpc3RvcnkuY3JlYXRlSHJlZihsb2NhdGlvbik7IC8vIHRyeS4uLmNhdGNoIGJlY2F1c2UgaU9TIGxpbWl0cyB1cyB0byAxMDAgcHVzaFN0YXRlIGNhbGxzIDovXG5cbiAgICB0cnkge1xuICAgICAgZ2xvYmFsSGlzdG9yeS5wdXNoU3RhdGUoaGlzdG9yeVN0YXRlLCBcIlwiLCB1cmwpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUaGV5IGFyZSBnb2luZyB0byBsb3NlIHN0YXRlIGhlcmUsIGJ1dCB0aGVyZSBpcyBubyByZWFsXG4gICAgICAvLyB3YXkgdG8gd2FybiB0aGVtIGFib3V0IGl0IHNpbmNlIHRoZSBwYWdlIHdpbGwgcmVmcmVzaC4uLlxuICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmwpO1xuICAgIH1cblxuICAgIGlmICh2NUNvbXBhdCAmJiBsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXBsYWNlKHRvLCBzdGF0ZSkge1xuICAgIGFjdGlvbiA9IEFjdGlvbi5SZXBsYWNlO1xuICAgIGxldCBsb2NhdGlvbiA9IGNyZWF0ZUxvY2F0aW9uKGhpc3RvcnkubG9jYXRpb24sIHRvLCBzdGF0ZSk7XG4gICAgaWYgKHZhbGlkYXRlTG9jYXRpb24pIHZhbGlkYXRlTG9jYXRpb24obG9jYXRpb24sIHRvKTtcbiAgICBsZXQgaGlzdG9yeVN0YXRlID0gZ2V0SGlzdG9yeVN0YXRlKGxvY2F0aW9uKTtcbiAgICBsZXQgdXJsID0gaGlzdG9yeS5jcmVhdGVIcmVmKGxvY2F0aW9uKTtcbiAgICBnbG9iYWxIaXN0b3J5LnJlcGxhY2VTdGF0ZShoaXN0b3J5U3RhdGUsIFwiXCIsIHVybCk7XG5cbiAgICBpZiAodjVDb21wYXQgJiYgbGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxldCBoaXN0b3J5ID0ge1xuICAgIGdldCBhY3Rpb24oKSB7XG4gICAgICByZXR1cm4gYWN0aW9uO1xuICAgIH0sXG5cbiAgICBnZXQgbG9jYXRpb24oKSB7XG4gICAgICByZXR1cm4gZ2V0TG9jYXRpb24od2luZG93LCBnbG9iYWxIaXN0b3J5KTtcbiAgICB9LFxuXG4gICAgbGlzdGVuKGZuKSB7XG4gICAgICBpZiAobGlzdGVuZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBoaXN0b3J5IG9ubHkgYWNjZXB0cyBvbmUgYWN0aXZlIGxpc3RlbmVyXCIpO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihQb3BTdGF0ZUV2ZW50VHlwZSwgaGFuZGxlUG9wKTtcbiAgICAgIGxpc3RlbmVyID0gZm47XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihQb3BTdGF0ZUV2ZW50VHlwZSwgaGFuZGxlUG9wKTtcbiAgICAgICAgbGlzdGVuZXIgPSBudWxsO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSHJlZih0bykge1xuICAgICAgcmV0dXJuIGNyZWF0ZUhyZWYod2luZG93LCB0byk7XG4gICAgfSxcblxuICAgIHB1c2gsXG4gICAgcmVwbGFjZSxcblxuICAgIGdvKG4pIHtcbiAgICAgIHJldHVybiBnbG9iYWxIaXN0b3J5LmdvKG4pO1xuICAgIH1cblxuICB9O1xuICByZXR1cm4gaGlzdG9yeTtcbn0gLy8jZW5kcmVnaW9uXG5cbnZhciBSZXN1bHRUeXBlO1xuXG4oZnVuY3Rpb24gKFJlc3VsdFR5cGUpIHtcbiAgUmVzdWx0VHlwZVtcImRhdGFcIl0gPSBcImRhdGFcIjtcbiAgUmVzdWx0VHlwZVtcImRlZmVycmVkXCJdID0gXCJkZWZlcnJlZFwiO1xuICBSZXN1bHRUeXBlW1wicmVkaXJlY3RcIl0gPSBcInJlZGlyZWN0XCI7XG4gIFJlc3VsdFR5cGVbXCJlcnJvclwiXSA9IFwiZXJyb3JcIjtcbn0pKFJlc3VsdFR5cGUgfHwgKFJlc3VsdFR5cGUgPSB7fSkpOyAvLyBXYWxrIHRoZSByb3V0ZSB0cmVlIGdlbmVyYXRpbmcgdW5pcXVlIElEcyB3aGVyZSBuZWNlc3Nhcnkgc28gd2UgYXJlIHdvcmtpbmdcbi8vIHNvbGVseSB3aXRoIEFnbm9zdGljRGF0YVJvdXRlT2JqZWN0J3Mgd2l0aGluIHRoZSBSb3V0ZXJcblxuXG5mdW5jdGlvbiBjb252ZXJ0Um91dGVzVG9EYXRhUm91dGVzKHJvdXRlcywgcGFyZW50UGF0aCwgYWxsSWRzKSB7XG4gIGlmIChwYXJlbnRQYXRoID09PSB2b2lkIDApIHtcbiAgICBwYXJlbnRQYXRoID0gW107XG4gIH1cblxuICBpZiAoYWxsSWRzID09PSB2b2lkIDApIHtcbiAgICBhbGxJZHMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICByZXR1cm4gcm91dGVzLm1hcCgocm91dGUsIGluZGV4KSA9PiB7XG4gICAgbGV0IHRyZWVQYXRoID0gWy4uLnBhcmVudFBhdGgsIGluZGV4XTtcbiAgICBsZXQgaWQgPSB0eXBlb2Ygcm91dGUuaWQgPT09IFwic3RyaW5nXCIgPyByb3V0ZS5pZCA6IHRyZWVQYXRoLmpvaW4oXCItXCIpO1xuICAgIGludmFyaWFudCghYWxsSWRzLmhhcyhpZCksIFwiRm91bmQgYSByb3V0ZSBpZCBjb2xsaXNpb24gb24gaWQgXFxcIlwiICsgaWQgKyBcIlxcXCIuICBSb3V0ZSBcIiArIFwiaWQncyBtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSB3aXRoaW4gRGF0YSBSb3V0ZXIgdXNhZ2VzXCIpO1xuICAgIGFsbElkcy5hZGQoaWQpO1xuXG4gICAgbGV0IGRhdGFSb3V0ZSA9IF9leHRlbmRzKHt9LCByb3V0ZSwge1xuICAgICAgaWQsXG4gICAgICBjaGlsZHJlbjogcm91dGUuY2hpbGRyZW4gPyBjb252ZXJ0Um91dGVzVG9EYXRhUm91dGVzKHJvdXRlLmNoaWxkcmVuLCB0cmVlUGF0aCwgYWxsSWRzKSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhdGFSb3V0ZTtcbiAgfSk7XG59XG4vKipcbiAqIE1hdGNoZXMgdGhlIGdpdmVuIHJvdXRlcyB0byBhIGxvY2F0aW9uIGFuZCByZXR1cm5zIHRoZSBtYXRjaCBkYXRhLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni91dGlscy9tYXRjaC1yb3V0ZXNcbiAqL1xuXG5mdW5jdGlvbiBtYXRjaFJvdXRlcyhyb3V0ZXMsIGxvY2F0aW9uQXJnLCBiYXNlbmFtZSkge1xuICBpZiAoYmFzZW5hbWUgPT09IHZvaWQgMCkge1xuICAgIGJhc2VuYW1lID0gXCIvXCI7XG4gIH1cblxuICBsZXQgbG9jYXRpb24gPSB0eXBlb2YgbG9jYXRpb25BcmcgPT09IFwic3RyaW5nXCIgPyBwYXJzZVBhdGgobG9jYXRpb25BcmcpIDogbG9jYXRpb25Bcmc7XG4gIGxldCBwYXRobmFtZSA9IHN0cmlwQmFzZW5hbWUobG9jYXRpb24ucGF0aG5hbWUgfHwgXCIvXCIsIGJhc2VuYW1lKTtcblxuICBpZiAocGF0aG5hbWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IGJyYW5jaGVzID0gZmxhdHRlblJvdXRlcyhyb3V0ZXMpO1xuICByYW5rUm91dGVCcmFuY2hlcyhicmFuY2hlcyk7XG4gIGxldCBtYXRjaGVzID0gbnVsbDtcblxuICBmb3IgKGxldCBpID0gMDsgbWF0Y2hlcyA9PSBudWxsICYmIGkgPCBicmFuY2hlcy5sZW5ndGg7ICsraSkge1xuICAgIG1hdGNoZXMgPSBtYXRjaFJvdXRlQnJhbmNoKGJyYW5jaGVzW2ldLCBwYXRobmFtZSk7XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gZmxhdHRlblJvdXRlcyhyb3V0ZXMsIGJyYW5jaGVzLCBwYXJlbnRzTWV0YSwgcGFyZW50UGF0aCkge1xuICBpZiAoYnJhbmNoZXMgPT09IHZvaWQgMCkge1xuICAgIGJyYW5jaGVzID0gW107XG4gIH1cblxuICBpZiAocGFyZW50c01ldGEgPT09IHZvaWQgMCkge1xuICAgIHBhcmVudHNNZXRhID0gW107XG4gIH1cblxuICBpZiAocGFyZW50UGF0aCA9PT0gdm9pZCAwKSB7XG4gICAgcGFyZW50UGF0aCA9IFwiXCI7XG4gIH1cblxuICByb3V0ZXMuZm9yRWFjaCgocm91dGUsIGluZGV4KSA9PiB7XG4gICAgbGV0IG1ldGEgPSB7XG4gICAgICByZWxhdGl2ZVBhdGg6IHJvdXRlLnBhdGggfHwgXCJcIixcbiAgICAgIGNhc2VTZW5zaXRpdmU6IHJvdXRlLmNhc2VTZW5zaXRpdmUgPT09IHRydWUsXG4gICAgICBjaGlsZHJlbkluZGV4OiBpbmRleCxcbiAgICAgIHJvdXRlXG4gICAgfTtcblxuICAgIGlmIChtZXRhLnJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgaW52YXJpYW50KG1ldGEucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgocGFyZW50UGF0aCksIFwiQWJzb2x1dGUgcm91dGUgcGF0aCBcXFwiXCIgKyBtZXRhLnJlbGF0aXZlUGF0aCArIFwiXFxcIiBuZXN0ZWQgdW5kZXIgcGF0aCBcIiArIChcIlxcXCJcIiArIHBhcmVudFBhdGggKyBcIlxcXCIgaXMgbm90IHZhbGlkLiBBbiBhYnNvbHV0ZSBjaGlsZCByb3V0ZSBwYXRoIFwiKSArIFwibXVzdCBzdGFydCB3aXRoIHRoZSBjb21iaW5lZCBwYXRoIG9mIGFsbCBpdHMgcGFyZW50IHJvdXRlcy5cIik7XG4gICAgICBtZXRhLnJlbGF0aXZlUGF0aCA9IG1ldGEucmVsYXRpdmVQYXRoLnNsaWNlKHBhcmVudFBhdGgubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBsZXQgcGF0aCA9IGpvaW5QYXRocyhbcGFyZW50UGF0aCwgbWV0YS5yZWxhdGl2ZVBhdGhdKTtcbiAgICBsZXQgcm91dGVzTWV0YSA9IHBhcmVudHNNZXRhLmNvbmNhdChtZXRhKTsgLy8gQWRkIHRoZSBjaGlsZHJlbiBiZWZvcmUgYWRkaW5nIHRoaXMgcm91dGUgdG8gdGhlIGFycmF5IHNvIHdlIHRyYXZlcnNlIHRoZVxuICAgIC8vIHJvdXRlIHRyZWUgZGVwdGgtZmlyc3QgYW5kIGNoaWxkIHJvdXRlcyBhcHBlYXIgYmVmb3JlIHRoZWlyIHBhcmVudHMgaW5cbiAgICAvLyB0aGUgXCJmbGF0dGVuZWRcIiB2ZXJzaW9uLlxuXG4gICAgaWYgKHJvdXRlLmNoaWxkcmVuICYmIHJvdXRlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGludmFyaWFudChyb3V0ZS5pbmRleCAhPT0gdHJ1ZSwgXCJJbmRleCByb3V0ZXMgbXVzdCBub3QgaGF2ZSBjaGlsZCByb3V0ZXMuIFBsZWFzZSByZW1vdmUgXCIgKyAoXCJhbGwgY2hpbGQgcm91dGVzIGZyb20gcm91dGUgcGF0aCBcXFwiXCIgKyBwYXRoICsgXCJcXFwiLlwiKSk7XG4gICAgICBmbGF0dGVuUm91dGVzKHJvdXRlLmNoaWxkcmVuLCBicmFuY2hlcywgcm91dGVzTWV0YSwgcGF0aCk7XG4gICAgfSAvLyBSb3V0ZXMgd2l0aG91dCBhIHBhdGggc2hvdWxkbid0IGV2ZXIgbWF0Y2ggYnkgdGhlbXNlbHZlcyB1bmxlc3MgdGhleSBhcmVcbiAgICAvLyBpbmRleCByb3V0ZXMsIHNvIGRvbid0IGFkZCB0aGVtIHRvIHRoZSBsaXN0IG9mIHBvc3NpYmxlIGJyYW5jaGVzLlxuXG5cbiAgICBpZiAocm91dGUucGF0aCA9PSBudWxsICYmICFyb3V0ZS5pbmRleCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJyYW5jaGVzLnB1c2goe1xuICAgICAgcGF0aCxcbiAgICAgIHNjb3JlOiBjb21wdXRlU2NvcmUocGF0aCwgcm91dGUuaW5kZXgpLFxuICAgICAgcm91dGVzTWV0YVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGJyYW5jaGVzO1xufVxuXG5mdW5jdGlvbiByYW5rUm91dGVCcmFuY2hlcyhicmFuY2hlcykge1xuICBicmFuY2hlcy5zb3J0KChhLCBiKSA9PiBhLnNjb3JlICE9PSBiLnNjb3JlID8gYi5zY29yZSAtIGEuc2NvcmUgLy8gSGlnaGVyIHNjb3JlIGZpcnN0XG4gIDogY29tcGFyZUluZGV4ZXMoYS5yb3V0ZXNNZXRhLm1hcChtZXRhID0+IG1ldGEuY2hpbGRyZW5JbmRleCksIGIucm91dGVzTWV0YS5tYXAobWV0YSA9PiBtZXRhLmNoaWxkcmVuSW5kZXgpKSk7XG59XG5cbmNvbnN0IHBhcmFtUmUgPSAvXjpcXHcrJC87XG5jb25zdCBkeW5hbWljU2VnbWVudFZhbHVlID0gMztcbmNvbnN0IGluZGV4Um91dGVWYWx1ZSA9IDI7XG5jb25zdCBlbXB0eVNlZ21lbnRWYWx1ZSA9IDE7XG5jb25zdCBzdGF0aWNTZWdtZW50VmFsdWUgPSAxMDtcbmNvbnN0IHNwbGF0UGVuYWx0eSA9IC0yO1xuXG5jb25zdCBpc1NwbGF0ID0gcyA9PiBzID09PSBcIipcIjtcblxuZnVuY3Rpb24gY29tcHV0ZVNjb3JlKHBhdGgsIGluZGV4KSB7XG4gIGxldCBzZWdtZW50cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICBsZXQgaW5pdGlhbFNjb3JlID0gc2VnbWVudHMubGVuZ3RoO1xuXG4gIGlmIChzZWdtZW50cy5zb21lKGlzU3BsYXQpKSB7XG4gICAgaW5pdGlhbFNjb3JlICs9IHNwbGF0UGVuYWx0eTtcbiAgfVxuXG4gIGlmIChpbmRleCkge1xuICAgIGluaXRpYWxTY29yZSArPSBpbmRleFJvdXRlVmFsdWU7XG4gIH1cblxuICByZXR1cm4gc2VnbWVudHMuZmlsdGVyKHMgPT4gIWlzU3BsYXQocykpLnJlZHVjZSgoc2NvcmUsIHNlZ21lbnQpID0+IHNjb3JlICsgKHBhcmFtUmUudGVzdChzZWdtZW50KSA/IGR5bmFtaWNTZWdtZW50VmFsdWUgOiBzZWdtZW50ID09PSBcIlwiID8gZW1wdHlTZWdtZW50VmFsdWUgOiBzdGF0aWNTZWdtZW50VmFsdWUpLCBpbml0aWFsU2NvcmUpO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlSW5kZXhlcyhhLCBiKSB7XG4gIGxldCBzaWJsaW5ncyA9IGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLnNsaWNlKDAsIC0xKS5ldmVyeSgobiwgaSkgPT4gbiA9PT0gYltpXSk7XG4gIHJldHVybiBzaWJsaW5ncyA/IC8vIElmIHR3byByb3V0ZXMgYXJlIHNpYmxpbmdzLCB3ZSBzaG91bGQgdHJ5IHRvIG1hdGNoIHRoZSBlYXJsaWVyIHNpYmxpbmdcbiAgLy8gZmlyc3QuIFRoaXMgYWxsb3dzIHBlb3BsZSB0byBoYXZlIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIG1hdGNoaW5nXG4gIC8vIGJlaGF2aW9yIGJ5IHNpbXBseSBwdXR0aW5nIHJvdXRlcyB3aXRoIGlkZW50aWNhbCBwYXRocyBpbiB0aGUgb3JkZXIgdGhleVxuICAvLyB3YW50IHRoZW0gdHJpZWQuXG4gIGFbYS5sZW5ndGggLSAxXSAtIGJbYi5sZW5ndGggLSAxXSA6IC8vIE90aGVyd2lzZSwgaXQgZG9lc24ndCByZWFsbHkgbWFrZSBzZW5zZSB0byByYW5rIG5vbi1zaWJsaW5ncyBieSBpbmRleCxcbiAgLy8gc28gdGhleSBzb3J0IGVxdWFsbHkuXG4gIDA7XG59XG5cbmZ1bmN0aW9uIG1hdGNoUm91dGVCcmFuY2goYnJhbmNoLCBwYXRobmFtZSkge1xuICBsZXQge1xuICAgIHJvdXRlc01ldGFcbiAgfSA9IGJyYW5jaDtcbiAgbGV0IG1hdGNoZWRQYXJhbXMgPSB7fTtcbiAgbGV0IG1hdGNoZWRQYXRobmFtZSA9IFwiL1wiO1xuICBsZXQgbWF0Y2hlcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGVzTWV0YS5sZW5ndGg7ICsraSkge1xuICAgIGxldCBtZXRhID0gcm91dGVzTWV0YVtpXTtcbiAgICBsZXQgZW5kID0gaSA9PT0gcm91dGVzTWV0YS5sZW5ndGggLSAxO1xuICAgIGxldCByZW1haW5pbmdQYXRobmFtZSA9IG1hdGNoZWRQYXRobmFtZSA9PT0gXCIvXCIgPyBwYXRobmFtZSA6IHBhdGhuYW1lLnNsaWNlKG1hdGNoZWRQYXRobmFtZS5sZW5ndGgpIHx8IFwiL1wiO1xuICAgIGxldCBtYXRjaCA9IG1hdGNoUGF0aCh7XG4gICAgICBwYXRoOiBtZXRhLnJlbGF0aXZlUGF0aCxcbiAgICAgIGNhc2VTZW5zaXRpdmU6IG1ldGEuY2FzZVNlbnNpdGl2ZSxcbiAgICAgIGVuZFxuICAgIH0sIHJlbWFpbmluZ1BhdGhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcbiAgICBPYmplY3QuYXNzaWduKG1hdGNoZWRQYXJhbXMsIG1hdGNoLnBhcmFtcyk7XG4gICAgbGV0IHJvdXRlID0gbWV0YS5yb3V0ZTtcbiAgICBtYXRjaGVzLnB1c2goe1xuICAgICAgLy8gVE9ETzogQ2FuIHRoaXMgYXMgYmUgYXZvaWRlZD9cbiAgICAgIHBhcmFtczogbWF0Y2hlZFBhcmFtcyxcbiAgICAgIHBhdGhuYW1lOiBqb2luUGF0aHMoW21hdGNoZWRQYXRobmFtZSwgbWF0Y2gucGF0aG5hbWVdKSxcbiAgICAgIHBhdGhuYW1lQmFzZTogbm9ybWFsaXplUGF0aG5hbWUoam9pblBhdGhzKFttYXRjaGVkUGF0aG5hbWUsIG1hdGNoLnBhdGhuYW1lQmFzZV0pKSxcbiAgICAgIHJvdXRlXG4gICAgfSk7XG5cbiAgICBpZiAobWF0Y2gucGF0aG5hbWVCYXNlICE9PSBcIi9cIikge1xuICAgICAgbWF0Y2hlZFBhdGhuYW1lID0gam9pblBhdGhzKFttYXRjaGVkUGF0aG5hbWUsIG1hdGNoLnBhdGhuYW1lQmFzZV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgcGF0aCB3aXRoIHBhcmFtcyBpbnRlcnBvbGF0ZWQuXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L3V0aWxzL2dlbmVyYXRlLXBhdGhcbiAqL1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlUGF0aChwYXRoLCBwYXJhbXMpIHtcbiAgaWYgKHBhcmFtcyA9PT0gdm9pZCAwKSB7XG4gICAgcGFyYW1zID0ge307XG4gIH1cblxuICByZXR1cm4gcGF0aC5yZXBsYWNlKC86KFxcdyspL2csIChfLCBrZXkpID0+IHtcbiAgICBpbnZhcmlhbnQocGFyYW1zW2tleV0gIT0gbnVsbCwgXCJNaXNzaW5nIFxcXCI6XCIgKyBrZXkgKyBcIlxcXCIgcGFyYW1cIik7XG4gICAgcmV0dXJuIHBhcmFtc1trZXldO1xuICB9KS5yZXBsYWNlKC8oXFwvPylcXCovLCAoXywgcHJlZml4LCBfXywgc3RyKSA9PiB7XG4gICAgY29uc3Qgc3RhciA9IFwiKlwiO1xuXG4gICAgaWYgKHBhcmFtc1tzdGFyXSA9PSBudWxsKSB7XG4gICAgICAvLyBJZiBubyBzcGxhdCB3YXMgcHJvdmlkZWQsIHRyaW0gdGhlIHRyYWlsaW5nIHNsYXNoIF91bmxlc3NfIGl0J3NcbiAgICAgIC8vIHRoZSBlbnRpcmUgcGF0aFxuICAgICAgcmV0dXJuIHN0ciA9PT0gXCIvKlwiID8gXCIvXCIgOiBcIlwiO1xuICAgIH0gLy8gQXBwbHkgdGhlIHNwbGF0XG5cblxuICAgIHJldHVybiBcIlwiICsgcHJlZml4ICsgcGFyYW1zW3N0YXJdO1xuICB9KTtcbn1cbi8qKlxuICogUGVyZm9ybXMgcGF0dGVybiBtYXRjaGluZyBvbiBhIFVSTCBwYXRobmFtZSBhbmQgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dFxuICogdGhlIG1hdGNoLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni91dGlscy9tYXRjaC1wYXRoXG4gKi9cblxuZnVuY3Rpb24gbWF0Y2hQYXRoKHBhdHRlcm4sIHBhdGhuYW1lKSB7XG4gIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gXCJzdHJpbmdcIikge1xuICAgIHBhdHRlcm4gPSB7XG4gICAgICBwYXRoOiBwYXR0ZXJuLFxuICAgICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UsXG4gICAgICBlbmQ6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgbGV0IFttYXRjaGVyLCBwYXJhbU5hbWVzXSA9IGNvbXBpbGVQYXRoKHBhdHRlcm4ucGF0aCwgcGF0dGVybi5jYXNlU2Vuc2l0aXZlLCBwYXR0ZXJuLmVuZCk7XG4gIGxldCBtYXRjaCA9IHBhdGhuYW1lLm1hdGNoKG1hdGNoZXIpO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcbiAgbGV0IG1hdGNoZWRQYXRobmFtZSA9IG1hdGNoWzBdO1xuICBsZXQgcGF0aG5hbWVCYXNlID0gbWF0Y2hlZFBhdGhuYW1lLnJlcGxhY2UoLyguKVxcLyskLywgXCIkMVwiKTtcbiAgbGV0IGNhcHR1cmVHcm91cHMgPSBtYXRjaC5zbGljZSgxKTtcbiAgbGV0IHBhcmFtcyA9IHBhcmFtTmFtZXMucmVkdWNlKChtZW1vLCBwYXJhbU5hbWUsIGluZGV4KSA9PiB7XG4gICAgLy8gV2UgbmVlZCB0byBjb21wdXRlIHRoZSBwYXRobmFtZUJhc2UgaGVyZSB1c2luZyB0aGUgcmF3IHNwbGF0IHZhbHVlXG4gICAgLy8gaW5zdGVhZCBvZiB1c2luZyBwYXJhbXNbXCIqXCJdIGxhdGVyIGJlY2F1c2UgaXQgd2lsbCBiZSBkZWNvZGVkIHRoZW5cbiAgICBpZiAocGFyYW1OYW1lID09PSBcIipcIikge1xuICAgICAgbGV0IHNwbGF0VmFsdWUgPSBjYXB0dXJlR3JvdXBzW2luZGV4XSB8fCBcIlwiO1xuICAgICAgcGF0aG5hbWVCYXNlID0gbWF0Y2hlZFBhdGhuYW1lLnNsaWNlKDAsIG1hdGNoZWRQYXRobmFtZS5sZW5ndGggLSBzcGxhdFZhbHVlLmxlbmd0aCkucmVwbGFjZSgvKC4pXFwvKyQvLCBcIiQxXCIpO1xuICAgIH1cblxuICAgIG1lbW9bcGFyYW1OYW1lXSA9IHNhZmVseURlY29kZVVSSUNvbXBvbmVudChjYXB0dXJlR3JvdXBzW2luZGV4XSB8fCBcIlwiLCBwYXJhbU5hbWUpO1xuICAgIHJldHVybiBtZW1vO1xuICB9LCB7fSk7XG4gIHJldHVybiB7XG4gICAgcGFyYW1zLFxuICAgIHBhdGhuYW1lOiBtYXRjaGVkUGF0aG5hbWUsXG4gICAgcGF0aG5hbWVCYXNlLFxuICAgIHBhdHRlcm5cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcGlsZVBhdGgocGF0aCwgY2FzZVNlbnNpdGl2ZSwgZW5kKSB7XG4gIGlmIChjYXNlU2Vuc2l0aXZlID09PSB2b2lkIDApIHtcbiAgICBjYXNlU2Vuc2l0aXZlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoZW5kID09PSB2b2lkIDApIHtcbiAgICBlbmQgPSB0cnVlO1xuICB9XG5cbiAgd2FybmluZyhwYXRoID09PSBcIipcIiB8fCAhcGF0aC5lbmRzV2l0aChcIipcIikgfHwgcGF0aC5lbmRzV2l0aChcIi8qXCIpLCBcIlJvdXRlIHBhdGggXFxcIlwiICsgcGF0aCArIFwiXFxcIiB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZSBcIiArIChcIlxcXCJcIiArIHBhdGgucmVwbGFjZSgvXFwqJC8sIFwiLypcIikgKyBcIlxcXCIgYmVjYXVzZSB0aGUgYCpgIGNoYXJhY3RlciBtdXN0IFwiKSArIFwiYWx3YXlzIGZvbGxvdyBhIGAvYCBpbiB0aGUgcGF0dGVybi4gVG8gZ2V0IHJpZCBvZiB0aGlzIHdhcm5pbmcsIFwiICsgKFwicGxlYXNlIGNoYW5nZSB0aGUgcm91dGUgcGF0aCB0byBcXFwiXCIgKyBwYXRoLnJlcGxhY2UoL1xcKiQvLCBcIi8qXCIpICsgXCJcXFwiLlwiKSk7XG4gIGxldCBwYXJhbU5hbWVzID0gW107XG4gIGxldCByZWdleHBTb3VyY2UgPSBcIl5cIiArIHBhdGgucmVwbGFjZSgvXFwvKlxcKj8kLywgXCJcIikgLy8gSWdub3JlIHRyYWlsaW5nIC8gYW5kIC8qLCB3ZSdsbCBoYW5kbGUgaXQgYmVsb3dcbiAgLnJlcGxhY2UoL15cXC8qLywgXCIvXCIpIC8vIE1ha2Ugc3VyZSBpdCBoYXMgYSBsZWFkaW5nIC9cbiAgLnJlcGxhY2UoL1tcXFxcLiorXiQ/e318KClbXFxdXS9nLCBcIlxcXFwkJlwiKSAvLyBFc2NhcGUgc3BlY2lhbCByZWdleCBjaGFyc1xuICAucmVwbGFjZSgvOihcXHcrKS9nLCAoXywgcGFyYW1OYW1lKSA9PiB7XG4gICAgcGFyYW1OYW1lcy5wdXNoKHBhcmFtTmFtZSk7XG4gICAgcmV0dXJuIFwiKFteXFxcXC9dKylcIjtcbiAgfSk7XG5cbiAgaWYgKHBhdGguZW5kc1dpdGgoXCIqXCIpKSB7XG4gICAgcGFyYW1OYW1lcy5wdXNoKFwiKlwiKTtcbiAgICByZWdleHBTb3VyY2UgKz0gcGF0aCA9PT0gXCIqXCIgfHwgcGF0aCA9PT0gXCIvKlwiID8gXCIoLiopJFwiIC8vIEFscmVhZHkgbWF0Y2hlZCB0aGUgaW5pdGlhbCAvLCBqdXN0IG1hdGNoIHRoZSByZXN0XG4gICAgOiBcIig/OlxcXFwvKC4rKXxcXFxcLyopJFwiOyAvLyBEb24ndCBpbmNsdWRlIHRoZSAvIGluIHBhcmFtc1tcIipcIl1cbiAgfSBlbHNlIHtcbiAgICByZWdleHBTb3VyY2UgKz0gZW5kID8gXCJcXFxcLyokXCIgLy8gV2hlbiBtYXRjaGluZyB0byB0aGUgZW5kLCBpZ25vcmUgdHJhaWxpbmcgc2xhc2hlc1xuICAgIDogLy8gT3RoZXJ3aXNlLCBtYXRjaCBhIHdvcmQgYm91bmRhcnkgb3IgYSBwcm9jZWVkaW5nIC8uIFRoZSB3b3JkIGJvdW5kYXJ5IHJlc3RyaWN0c1xuICAgIC8vIHBhcmVudCByb3V0ZXMgdG8gbWF0Y2hpbmcgb25seSB0aGVpciBvd24gd29yZHMgYW5kIG5vdGhpbmcgbW9yZSwgZS5nLiBwYXJlbnRcbiAgICAvLyByb3V0ZSBcIi9ob21lXCIgc2hvdWxkIG5vdCBtYXRjaCBcIi9ob21lMlwiLlxuICAgIC8vIEFkZGl0aW9uYWxseSwgYWxsb3cgcGF0aHMgc3RhcnRpbmcgd2l0aCBgLmAsIGAtYCwgYH5gLCBhbmQgdXJsLWVuY29kZWQgZW50aXRpZXMsXG4gICAgLy8gYnV0IGRvIG5vdCBjb25zdW1lIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIG1hdGNoZWQgcGF0aCBzbyB0aGV5IGNhbiBtYXRjaCBhZ2FpbnN0XG4gICAgLy8gbmVzdGVkIHBhdGhzLlxuICAgIFwiKD86KD89W0Aufi1dfCVbMC05QS1GXXsyfSl8XFxcXGJ8XFxcXC98JClcIjtcbiAgfVxuXG4gIGxldCBtYXRjaGVyID0gbmV3IFJlZ0V4cChyZWdleHBTb3VyY2UsIGNhc2VTZW5zaXRpdmUgPyB1bmRlZmluZWQgOiBcImlcIik7XG4gIHJldHVybiBbbWF0Y2hlciwgcGFyYW1OYW1lc107XG59XG5cbmZ1bmN0aW9uIHNhZmVseURlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSwgcGFyYW1OYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2FybmluZyhmYWxzZSwgXCJUaGUgdmFsdWUgZm9yIHRoZSBVUkwgcGFyYW0gXFxcIlwiICsgcGFyYW1OYW1lICsgXCJcXFwiIHdpbGwgbm90IGJlIGRlY29kZWQgYmVjYXVzZVwiICsgKFwiIHRoZSBzdHJpbmcgXFxcIlwiICsgdmFsdWUgKyBcIlxcXCIgaXMgYSBtYWxmb3JtZWQgVVJMIHNlZ21lbnQuIFRoaXMgaXMgcHJvYmFibHlcIikgKyAoXCIgZHVlIHRvIGEgYmFkIHBlcmNlbnQgZW5jb2RpbmcgKFwiICsgZXJyb3IgKyBcIikuXCIpKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIHN0cmlwQmFzZW5hbWUocGF0aG5hbWUsIGJhc2VuYW1lKSB7XG4gIGlmIChiYXNlbmFtZSA9PT0gXCIvXCIpIHJldHVybiBwYXRobmFtZTtcblxuICBpZiAoIXBhdGhuYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChiYXNlbmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFdlIHdhbnQgdG8gbGVhdmUgdHJhaWxpbmcgc2xhc2ggYmVoYXZpb3IgaW4gdGhlIHVzZXIncyBjb250cm9sLCBzbyBpZiB0aGV5XG4gIC8vIHNwZWNpZnkgYSBiYXNlbmFtZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2gsIHdlIHNob3VsZCBzdXBwb3J0IGl0XG5cblxuICBsZXQgc3RhcnRJbmRleCA9IGJhc2VuYW1lLmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VuYW1lLmxlbmd0aCAtIDEgOiBiYXNlbmFtZS5sZW5ndGg7XG4gIGxldCBuZXh0Q2hhciA9IHBhdGhuYW1lLmNoYXJBdChzdGFydEluZGV4KTtcblxuICBpZiAobmV4dENoYXIgJiYgbmV4dENoYXIgIT09IFwiL1wiKSB7XG4gICAgLy8gcGF0aG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCBiYXNlbmFtZS9cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBwYXRobmFtZS5zbGljZShzdGFydEluZGV4KSB8fCBcIi9cIjtcbn1cbmZ1bmN0aW9uIGludmFyaWFudCh2YWx1ZSwgbWVzc2FnZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHdhcm5pbmcoY29uZCwgbWVzc2FnZSkge1xuICBpZiAoIWNvbmQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIikgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IFJvdXRlciFcbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGVycm9yIGlzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHlvdSBjYW4gbW9yZSBlYXNpbHlcbiAgICAgIC8vIGZpbmQgdGhlIHNvdXJjZSBmb3IgYSB3YXJuaW5nIHRoYXQgYXBwZWFycyBpbiB0aGUgY29uc29sZSBieVxuICAgICAgLy8gZW5hYmxpbmcgXCJwYXVzZSBvbiBleGNlcHRpb25zXCIgaW4geW91ciBKYXZhU2NyaXB0IGRlYnVnZ2VyLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG59XG4vKipcbiAqIFJldHVybnMgYSByZXNvbHZlZCBwYXRoIG9iamVjdCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcGF0aG5hbWUuXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L3V0aWxzL3Jlc29sdmUtcGF0aFxuICovXG5cbmZ1bmN0aW9uIHJlc29sdmVQYXRoKHRvLCBmcm9tUGF0aG5hbWUpIHtcbiAgaWYgKGZyb21QYXRobmFtZSA9PT0gdm9pZCAwKSB7XG4gICAgZnJvbVBhdGhuYW1lID0gXCIvXCI7XG4gIH1cblxuICBsZXQge1xuICAgIHBhdGhuYW1lOiB0b1BhdGhuYW1lLFxuICAgIHNlYXJjaCA9IFwiXCIsXG4gICAgaGFzaCA9IFwiXCJcbiAgfSA9IHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlUGF0aCh0bykgOiB0bztcbiAgbGV0IHBhdGhuYW1lID0gdG9QYXRobmFtZSA/IHRvUGF0aG5hbWUuc3RhcnRzV2l0aChcIi9cIikgPyB0b1BhdGhuYW1lIDogcmVzb2x2ZVBhdGhuYW1lKHRvUGF0aG5hbWUsIGZyb21QYXRobmFtZSkgOiBmcm9tUGF0aG5hbWU7XG4gIHJldHVybiB7XG4gICAgcGF0aG5hbWUsXG4gICAgc2VhcmNoOiBub3JtYWxpemVTZWFyY2goc2VhcmNoKSxcbiAgICBoYXNoOiBub3JtYWxpemVIYXNoKGhhc2gpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVQYXRobmFtZShyZWxhdGl2ZVBhdGgsIGZyb21QYXRobmFtZSkge1xuICBsZXQgc2VnbWVudHMgPSBmcm9tUGF0aG5hbWUucmVwbGFjZSgvXFwvKyQvLCBcIlwiKS5zcGxpdChcIi9cIik7XG4gIGxldCByZWxhdGl2ZVNlZ21lbnRzID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKTtcbiAgcmVsYXRpdmVTZWdtZW50cy5mb3JFYWNoKHNlZ21lbnQgPT4ge1xuICAgIGlmIChzZWdtZW50ID09PSBcIi4uXCIpIHtcbiAgICAgIC8vIEtlZXAgdGhlIHJvb3QgXCJcIiBzZWdtZW50IHNvIHRoZSBwYXRobmFtZSBzdGFydHMgYXQgL1xuICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA+IDEpIHNlZ21lbnRzLnBvcCgpO1xuICAgIH0gZWxzZSBpZiAoc2VnbWVudCAhPT0gXCIuXCIpIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNlZ21lbnRzLmxlbmd0aCA+IDEgPyBzZWdtZW50cy5qb2luKFwiL1wiKSA6IFwiL1wiO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gcmVzb2x2ZVRvKHRvQXJnLCByb3V0ZVBhdGhuYW1lcywgbG9jYXRpb25QYXRobmFtZSwgaXNQYXRoUmVsYXRpdmUpIHtcbiAgaWYgKGlzUGF0aFJlbGF0aXZlID09PSB2b2lkIDApIHtcbiAgICBpc1BhdGhSZWxhdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IHRvID0gdHlwZW9mIHRvQXJnID09PSBcInN0cmluZ1wiID8gcGFyc2VQYXRoKHRvQXJnKSA6IF9leHRlbmRzKHt9LCB0b0FyZyk7XG4gIGxldCBpc0VtcHR5UGF0aCA9IHRvQXJnID09PSBcIlwiIHx8IHRvLnBhdGhuYW1lID09PSBcIlwiO1xuICBsZXQgdG9QYXRobmFtZSA9IGlzRW1wdHlQYXRoID8gXCIvXCIgOiB0by5wYXRobmFtZTtcbiAgbGV0IGZyb207IC8vIFJvdXRpbmcgaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcGF0aG5hbWUgaWYgZXhwbGljaXRseSByZXF1ZXN0ZWQuXG4gIC8vXG4gIC8vIElmIGEgcGF0aG5hbWUgaXMgZXhwbGljaXRseSBwcm92aWRlZCBpbiBgdG9gLCBpdCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlXG4gIC8vIHJvdXRlIGNvbnRleHQuIFRoaXMgaXMgZXhwbGFpbmVkIGluIGBOb3RlIG9uIGA8TGluayB0bz5gIHZhbHVlc2AgaW4gb3VyXG4gIC8vIG1pZ3JhdGlvbiBndWlkZSBmcm9tIHY1IGFzIGEgbWVhbnMgb2YgZGlzYW1iaWd1YXRpb24gYmV0d2VlbiBgdG9gIHZhbHVlc1xuICAvLyB0aGF0IGJlZ2luIHdpdGggYC9gIGFuZCB0aG9zZSB0aGF0IGRvIG5vdC4gSG93ZXZlciwgdGhpcyBpcyBwcm9ibGVtYXRpYyBmb3JcbiAgLy8gYHRvYCB2YWx1ZXMgdGhhdCBkbyBub3QgcHJvdmlkZSBhIHBhdGhuYW1lLiBgdG9gIGNhbiBzaW1wbHkgYmUgYSBzZWFyY2ggb3JcbiAgLy8gaGFzaCBzdHJpbmcsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIGFzc3VtZSB0aGF0IHRoZSBuYXZpZ2F0aW9uIGlzIHJlbGF0aXZlXG4gIC8vIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uJ3MgcGF0aG5hbWUgYW5kICpub3QqIHRoZSByb3V0ZSBwYXRobmFtZS5cblxuICBpZiAoaXNQYXRoUmVsYXRpdmUgfHwgdG9QYXRobmFtZSA9PSBudWxsKSB7XG4gICAgZnJvbSA9IGxvY2F0aW9uUGF0aG5hbWU7XG4gIH0gZWxzZSB7XG4gICAgbGV0IHJvdXRlUGF0aG5hbWVJbmRleCA9IHJvdXRlUGF0aG5hbWVzLmxlbmd0aCAtIDE7XG5cbiAgICBpZiAodG9QYXRobmFtZS5zdGFydHNXaXRoKFwiLi5cIikpIHtcbiAgICAgIGxldCB0b1NlZ21lbnRzID0gdG9QYXRobmFtZS5zcGxpdChcIi9cIik7IC8vIEVhY2ggbGVhZGluZyAuLiBzZWdtZW50IG1lYW5zIFwiZ28gdXAgb25lIHJvdXRlXCIgaW5zdGVhZCBvZiBcImdvIHVwIG9uZVxuICAgICAgLy8gVVJMIHNlZ21lbnRcIi4gIFRoaXMgaXMgYSBrZXkgZGlmZmVyZW5jZSBmcm9tIGhvdyA8YSBocmVmPiB3b3JrcyBhbmQgYVxuICAgICAgLy8gbWFqb3IgcmVhc29uIHdlIGNhbGwgdGhpcyBhIFwidG9cIiB2YWx1ZSBpbnN0ZWFkIG9mIGEgXCJocmVmXCIuXG5cbiAgICAgIHdoaWxlICh0b1NlZ21lbnRzWzBdID09PSBcIi4uXCIpIHtcbiAgICAgICAgdG9TZWdtZW50cy5zaGlmdCgpO1xuICAgICAgICByb3V0ZVBhdGhuYW1lSW5kZXggLT0gMTtcbiAgICAgIH1cblxuICAgICAgdG8ucGF0aG5hbWUgPSB0b1NlZ21lbnRzLmpvaW4oXCIvXCIpO1xuICAgIH0gLy8gSWYgdGhlcmUgYXJlIG1vcmUgXCIuLlwiIHNlZ21lbnRzIHRoYW4gcGFyZW50IHJvdXRlcywgcmVzb2x2ZSByZWxhdGl2ZSB0b1xuICAgIC8vIHRoZSByb290IC8gVVJMLlxuXG5cbiAgICBmcm9tID0gcm91dGVQYXRobmFtZUluZGV4ID49IDAgPyByb3V0ZVBhdGhuYW1lc1tyb3V0ZVBhdGhuYW1lSW5kZXhdIDogXCIvXCI7XG4gIH1cblxuICBsZXQgcGF0aCA9IHJlc29sdmVQYXRoKHRvLCBmcm9tKTsgLy8gRW5zdXJlIHRoZSBwYXRobmFtZSBoYXMgYSB0cmFpbGluZyBzbGFzaCBpZiB0aGUgb3JpZ2luYWwgXCJ0b1wiIGhhZCBvbmVcblxuICBsZXQgaGFzRXhwbGljaXRUcmFpbGluZ1NsYXNoID0gdG9QYXRobmFtZSAmJiB0b1BhdGhuYW1lICE9PSBcIi9cIiAmJiB0b1BhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKTsgLy8gT3IgaWYgdGhpcyB3YXMgYSBsaW5rIHRvIHRoZSBjdXJyZW50IHBhdGggd2hpY2ggaGFzIGEgdHJhaWxpbmcgc2xhc2hcblxuICBsZXQgaGFzQ3VycmVudFRyYWlsaW5nU2xhc2ggPSAoaXNFbXB0eVBhdGggfHwgdG9QYXRobmFtZSA9PT0gXCIuXCIpICYmIGxvY2F0aW9uUGF0aG5hbWUuZW5kc1dpdGgoXCIvXCIpO1xuXG4gIGlmICghcGF0aC5wYXRobmFtZS5lbmRzV2l0aChcIi9cIikgJiYgKGhhc0V4cGxpY2l0VHJhaWxpbmdTbGFzaCB8fCBoYXNDdXJyZW50VHJhaWxpbmdTbGFzaCkpIHtcbiAgICBwYXRoLnBhdGhuYW1lICs9IFwiL1wiO1xuICB9XG5cbiAgcmV0dXJuIHBhdGg7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZ2V0VG9QYXRobmFtZSh0bykge1xuICAvLyBFbXB0eSBzdHJpbmdzIHNob3VsZCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIC8gcGF0aHNcbiAgcmV0dXJuIHRvID09PSBcIlwiIHx8IHRvLnBhdGhuYW1lID09PSBcIlwiID8gXCIvXCIgOiB0eXBlb2YgdG8gPT09IFwic3RyaW5nXCIgPyBwYXJzZVBhdGgodG8pLnBhdGhuYW1lIDogdG8ucGF0aG5hbWU7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY29uc3Qgam9pblBhdGhzID0gcGF0aHMgPT4gcGF0aHMuam9pbihcIi9cIikucmVwbGFjZSgvXFwvXFwvKy9nLCBcIi9cIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY29uc3Qgbm9ybWFsaXplUGF0aG5hbWUgPSBwYXRobmFtZSA9PiBwYXRobmFtZS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpLnJlcGxhY2UoL15cXC8qLywgXCIvXCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNvbnN0IG5vcm1hbGl6ZVNlYXJjaCA9IHNlYXJjaCA9PiAhc2VhcmNoIHx8IHNlYXJjaCA9PT0gXCI/XCIgPyBcIlwiIDogc2VhcmNoLnN0YXJ0c1dpdGgoXCI/XCIpID8gc2VhcmNoIDogXCI/XCIgKyBzZWFyY2g7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY29uc3Qgbm9ybWFsaXplSGFzaCA9IGhhc2ggPT4gIWhhc2ggfHwgaGFzaCA9PT0gXCIjXCIgPyBcIlwiIDogaGFzaC5zdGFydHNXaXRoKFwiI1wiKSA/IGhhc2ggOiBcIiNcIiArIGhhc2g7XG4vKipcbiAqIFRoaXMgaXMgYSBzaG9ydGN1dCBmb3IgY3JlYXRpbmcgYGFwcGxpY2F0aW9uL2pzb25gIHJlc3BvbnNlcy4gQ29udmVydHMgYGRhdGFgXG4gKiB0byBKU09OIGFuZCBzZXRzIHRoZSBgQ29udGVudC1UeXBlYCBoZWFkZXIuXG4gKi9cblxuY29uc3QganNvbiA9IGZ1bmN0aW9uIGpzb24oZGF0YSwgaW5pdCkge1xuICBpZiAoaW5pdCA9PT0gdm9pZCAwKSB7XG4gICAgaW5pdCA9IHt9O1xuICB9XG5cbiAgbGV0IHJlc3BvbnNlSW5pdCA9IHR5cGVvZiBpbml0ID09PSBcIm51bWJlclwiID8ge1xuICAgIHN0YXR1czogaW5pdFxuICB9IDogaW5pdDtcbiAgbGV0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhyZXNwb25zZUluaXQuaGVhZGVycyk7XG5cbiAgaWYgKCFoZWFkZXJzLmhhcyhcIkNvbnRlbnQtVHlwZVwiKSkge1xuICAgIGhlYWRlcnMuc2V0KFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSksIF9leHRlbmRzKHt9LCByZXNwb25zZUluaXQsIHtcbiAgICBoZWFkZXJzXG4gIH0pKTtcbn07XG5jbGFzcyBBYm9ydGVkRGVmZXJyZWRFcnJvciBleHRlbmRzIEVycm9yIHt9XG5jbGFzcyBEZWZlcnJlZERhdGEge1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgdGhpcy5wZW5kaW5nS2V5cyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLnN1YnNjcmliZXIgPSB1bmRlZmluZWQ7XG4gICAgaW52YXJpYW50KGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSksIFwiZGVmZXIoKSBvbmx5IGFjY2VwdHMgcGxhaW4gb2JqZWN0c1wiKTsgLy8gU2V0IHVwIGFuIEFib3J0Q29udHJvbGxlciArIFByb21pc2Ugd2UgY2FuIHJhY2UgYWdhaW5zdCB0byBleGl0IGVhcmx5XG4gICAgLy8gY2FuY2VsbGF0aW9uXG5cbiAgICBsZXQgcmVqZWN0O1xuICAgIHRoaXMuYWJvcnRQcm9taXNlID0gbmV3IFByb21pc2UoKF8sIHIpID0+IHJlamVjdCA9IHIpO1xuICAgIHRoaXMuY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGxldCBvbkFib3J0ID0gKCkgPT4gcmVqZWN0KG5ldyBBYm9ydGVkRGVmZXJyZWRFcnJvcihcIkRlZmVycmVkIGRhdGEgYWJvcnRlZFwiKSk7XG5cbiAgICB0aGlzLnVubGlzdGVuQWJvcnRTaWduYWwgPSAoKSA9PiB0aGlzLmNvbnRyb2xsZXIuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcblxuICAgIHRoaXMuY29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgIHRoaXMuZGF0YSA9IE9iamVjdC5lbnRyaWVzKGRhdGEpLnJlZHVjZSgoYWNjLCBfcmVmKSA9PiB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gX3JlZjtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywge1xuICAgICAgICBba2V5XTogdGhpcy50cmFja1Byb21pc2Uoa2V5LCB2YWx1ZSlcbiAgICAgIH0pO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHRyYWNrUHJvbWlzZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ0tleXMuYWRkKGtleSk7IC8vIFdlIHN0b3JlIGEgbGl0dGxlIHdyYXBwZXIgcHJvbWlzZSB0aGF0IHdpbGwgYmUgZXh0ZW5kZWQgd2l0aFxuICAgIC8vIF9kYXRhL19lcnJvciBwcm9wcyB1cG9uIHJlc29sdmUvcmVqZWN0XG5cbiAgICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmFjZShbdmFsdWUsIHRoaXMuYWJvcnRQcm9taXNlXSkudGhlbihkYXRhID0+IHRoaXMub25TZXR0bGUocHJvbWlzZSwga2V5LCBudWxsLCBkYXRhKSwgZXJyb3IgPT4gdGhpcy5vblNldHRsZShwcm9taXNlLCBrZXksIGVycm9yKSk7IC8vIFJlZ2lzdGVyIHJlamVjdGlvbiBsaXN0ZW5lcnMgdG8gYXZvaWQgdW5jYXVnaHQgcHJvbWlzZSByZWplY3Rpb25zIG9uXG4gICAgLy8gZXJyb3JzIG9yIGFib3J0ZWQgZGVmZXJyZWQgdmFsdWVzXG5cbiAgICBwcm9taXNlLmNhdGNoKCgpID0+IHt9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgXCJfdHJhY2tlZFwiLCB7XG4gICAgICBnZXQ6ICgpID0+IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIG9uU2V0dGxlKHByb21pc2UsIGtleSwgZXJyb3IsIGRhdGEpIHtcbiAgICBpZiAodGhpcy5jb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkICYmIGVycm9yIGluc3RhbmNlb2YgQWJvcnRlZERlZmVycmVkRXJyb3IpIHtcbiAgICAgIHRoaXMudW5saXN0ZW5BYm9ydFNpZ25hbCgpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsIFwiX2Vycm9yXCIsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiBlcnJvclxuICAgICAgfSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ0tleXMuZGVsZXRlKGtleSk7XG5cbiAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAvLyBOb3RoaW5nIGxlZnQgdG8gYWJvcnQhXG4gICAgICB0aGlzLnVubGlzdGVuQWJvcnRTaWduYWwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJzY3JpYmVyID0gdGhpcy5zdWJzY3JpYmVyO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgXCJfZXJyb3JcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IGVycm9yXG4gICAgICB9KTtcbiAgICAgIHN1YnNjcmliZXIgJiYgc3Vic2NyaWJlcihmYWxzZSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl9kYXRhXCIsIHtcbiAgICAgIGdldDogKCkgPT4gZGF0YVxuICAgIH0pO1xuICAgIHN1YnNjcmliZXIgJiYgc3Vic2NyaWJlcihmYWxzZSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBzdWJzY3JpYmUoZm4pIHtcbiAgICB0aGlzLnN1YnNjcmliZXIgPSBmbjtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB0aGlzLnBlbmRpbmdLZXlzLmZvckVhY2goKHYsIGspID0+IHRoaXMucGVuZGluZ0tleXMuZGVsZXRlKGspKTtcbiAgICBsZXQgc3Vic2NyaWJlciA9IHRoaXMuc3Vic2NyaWJlcjtcbiAgICBzdWJzY3JpYmVyICYmIHN1YnNjcmliZXIodHJ1ZSk7XG4gIH1cblxuICBhc3luYyByZXNvbHZlRGF0YShzaWduYWwpIHtcbiAgICBsZXQgYWJvcnRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIGxldCBvbkFib3J0ID0gKCkgPT4gdGhpcy5jYW5jZWwoKTtcblxuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIGFib3J0ZWQgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYWJvcnRlZCA9PiB7XG4gICAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcblxuICAgICAgICAgIGlmIChhYm9ydGVkIHx8IHRoaXMuZG9uZSkge1xuICAgICAgICAgICAgcmVzb2x2ZShhYm9ydGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFib3J0ZWQ7XG4gIH1cblxuICBnZXQgZG9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wZW5kaW5nS2V5cy5zaXplID09PSAwO1xuICB9XG5cbiAgZ2V0IHVud3JhcHBlZERhdGEoKSB7XG4gICAgaW52YXJpYW50KHRoaXMuZGF0YSAhPT0gbnVsbCAmJiB0aGlzLmRvbmUsIFwiQ2FuIG9ubHkgdW53cmFwIGRhdGEgb24gaW5pdGlhbGl6ZWQgYW5kIHNldHRsZWQgZGVmZXJyZWRzXCIpO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmRhdGEpLnJlZHVjZSgoYWNjLCBfcmVmMikgPT4ge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IF9yZWYyO1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWNjLCB7XG4gICAgICAgIFtrZXldOiB1bndyYXBUcmFja2VkUHJvbWlzZSh2YWx1ZSlcbiAgICAgIH0pO1xuICAgIH0sIHt9KTtcbiAgfVxuXG59XG5cbmZ1bmN0aW9uIGlzVHJhY2tlZFByb21pc2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSAmJiB2YWx1ZS5fdHJhY2tlZCA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdW53cmFwVHJhY2tlZFByb21pc2UodmFsdWUpIHtcbiAgaWYgKCFpc1RyYWNrZWRQcm9taXNlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGlmICh2YWx1ZS5fZXJyb3IpIHtcbiAgICB0aHJvdyB2YWx1ZS5fZXJyb3I7XG4gIH1cblxuICByZXR1cm4gdmFsdWUuX2RhdGE7XG59XG5cbmZ1bmN0aW9uIGRlZmVyKGRhdGEpIHtcbiAgcmV0dXJuIG5ldyBEZWZlcnJlZERhdGEoZGF0YSk7XG59XG4vKipcbiAqIEEgcmVkaXJlY3QgcmVzcG9uc2UuIFNldHMgdGhlIHN0YXR1cyBjb2RlIGFuZCB0aGUgYExvY2F0aW9uYCBoZWFkZXIuXG4gKiBEZWZhdWx0cyB0byBcIjMwMiBGb3VuZFwiLlxuICovXG5cbmNvbnN0IHJlZGlyZWN0ID0gZnVuY3Rpb24gcmVkaXJlY3QodXJsLCBpbml0KSB7XG4gIGlmIChpbml0ID09PSB2b2lkIDApIHtcbiAgICBpbml0ID0gMzAyO1xuICB9XG5cbiAgbGV0IHJlc3BvbnNlSW5pdCA9IGluaXQ7XG5cbiAgaWYgKHR5cGVvZiByZXNwb25zZUluaXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlSW5pdFxuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZW9mIHJlc3BvbnNlSW5pdC5zdGF0dXMgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZUluaXQuc3RhdHVzID0gMzAyO1xuICB9XG5cbiAgbGV0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhyZXNwb25zZUluaXQuaGVhZGVycyk7XG4gIGhlYWRlcnMuc2V0KFwiTG9jYXRpb25cIiwgdXJsKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCBfZXh0ZW5kcyh7fSwgcmVzcG9uc2VJbml0LCB7XG4gICAgaGVhZGVyc1xuICB9KSk7XG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogVXRpbGl0eSBjbGFzcyB3ZSB1c2UgdG8gaG9sZCBhdXRvLXVud3JhcHBlZCA0eHgvNXh4IFJlc3BvbnNlIGJvZGllc1xuICovXG5cbmNsYXNzIEVycm9yUmVzcG9uc2Uge1xuICBjb25zdHJ1Y3RvcihzdGF0dXMsIHN0YXR1c1RleHQsIGRhdGEpIHtcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICB0aGlzLnN0YXR1c1RleHQgPSBzdGF0dXNUZXh0IHx8IFwiXCI7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxuXG59XG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiBlcnJvciBpcyBhbiBFcnJvclJlc3BvbnNlIGdlbmVyYXRlZCBmcm9tIGEgNHh4LzV4eFxuICogUmVzcG9uc2UgdGhyb3cgZnJvbSBhbiBhY3Rpb24vbG9hZGVyXG4gKi9cblxuZnVuY3Rpb24gaXNSb3V0ZUVycm9yUmVzcG9uc2UoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2U7XG59XG5cbmNvbnN0IElETEVfTkFWSUdBVElPTiA9IHtcbiAgc3RhdGU6IFwiaWRsZVwiLFxuICBsb2NhdGlvbjogdW5kZWZpbmVkLFxuICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgZm9ybURhdGE6IHVuZGVmaW5lZFxufTtcbmNvbnN0IElETEVfRkVUQ0hFUiA9IHtcbiAgc3RhdGU6IFwiaWRsZVwiLFxuICBkYXRhOiB1bmRlZmluZWQsXG4gIGZvcm1NZXRob2Q6IHVuZGVmaW5lZCxcbiAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICBmb3JtRGF0YTogdW5kZWZpbmVkXG59OyAvLyNlbmRyZWdpb25cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyNyZWdpb24gY3JlYXRlUm91dGVyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIENyZWF0ZSBhIHJvdXRlciBhbmQgbGlzdGVuIHRvIGhpc3RvcnkgUE9QIG5hdmlnYXRpb25zXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlUm91dGVyKGluaXQpIHtcbiAgaW52YXJpYW50KGluaXQucm91dGVzLmxlbmd0aCA+IDAsIFwiWW91IG11c3QgcHJvdmlkZSBhIG5vbi1lbXB0eSByb3V0ZXMgYXJyYXkgdG8gY3JlYXRlUm91dGVyXCIpO1xuICBsZXQgZGF0YVJvdXRlcyA9IGNvbnZlcnRSb3V0ZXNUb0RhdGFSb3V0ZXMoaW5pdC5yb3V0ZXMpOyAvLyBDbGVhbnVwIGZ1bmN0aW9uIGZvciBoaXN0b3J5XG5cbiAgbGV0IHVubGlzdGVuSGlzdG9yeSA9IG51bGw7IC8vIEV4dGVybmFsbHktcHJvdmlkZWQgZnVuY3Rpb25zIHRvIGNhbGwgb24gYWxsIHN0YXRlIGNoYW5nZXNcblxuICBsZXQgc3Vic2NyaWJlcnMgPSBuZXcgU2V0KCk7IC8vIEV4dGVybmFsbHktcHJvdmlkZWQgb2JqZWN0IHRvIGhvbGQgc2Nyb2xsIHJlc3RvcmF0aW9uIGxvY2F0aW9ucyBkdXJpbmcgcm91dGluZ1xuXG4gIGxldCBzYXZlZFNjcm9sbFBvc2l0aW9ucyA9IG51bGw7IC8vIEV4dGVybmFsbHktcHJvdmlkZWQgZnVuY3Rpb24gdG8gZ2V0IHNjcm9sbCByZXN0b3JhdGlvbiBrZXlzXG5cbiAgbGV0IGdldFNjcm9sbFJlc3RvcmF0aW9uS2V5ID0gbnVsbDsgLy8gRXh0ZXJuYWxseS1wcm92aWRlZCBmdW5jdGlvbiB0byBnZXQgY3VycmVudCBzY3JvbGwgcG9zaXRpb25cblxuICBsZXQgZ2V0U2Nyb2xsUG9zaXRpb24gPSBudWxsOyAvLyBPbmUtdGltZSBmbGFnIHRvIGNvbnRyb2wgdGhlIGluaXRpYWwgaHlkcmF0aW9uIHNjcm9sbCByZXN0b3JhdGlvbi4gIEJlY2F1c2VcbiAgLy8gd2UgZG9uJ3QgZ2V0IHRoZSBzYXZlZCBwb3NpdGlvbnMgZnJvbSA8U2Nyb2xsUmVzdG9yYXRpb24gLz4gdW50aWwgX2FmdGVyX1xuICAvLyB0aGUgaW5pdGlhbCByZW5kZXIsIHdlIG5lZWQgdG8gbWFudWFsbHkgdHJpZ2dlciBhIHNlcGFyYXRlIHVwZGF0ZVN0YXRlIHRvXG4gIC8vIHNlbmQgYWxvbmcgdGhlIHJlc3RvcmVTY3JvbGxQb3NpdGlvblxuXG4gIGxldCBpbml0aWFsU2Nyb2xsUmVzdG9yZWQgPSBmYWxzZTtcbiAgbGV0IGluaXRpYWxNYXRjaGVzID0gbWF0Y2hSb3V0ZXMoZGF0YVJvdXRlcywgaW5pdC5oaXN0b3J5LmxvY2F0aW9uLCBpbml0LmJhc2VuYW1lKTtcbiAgbGV0IGluaXRpYWxFcnJvcnMgPSBudWxsO1xuXG4gIGlmIChpbml0aWFsTWF0Y2hlcyA9PSBudWxsKSB7XG4gICAgLy8gSWYgd2UgZG8gbm90IG1hdGNoIGEgdXNlci1wcm92aWRlZC1yb3V0ZSwgZmFsbCBiYWNrIHRvIHRoZSByb290XG4gICAgLy8gdG8gYWxsb3cgdGhlIGVycm9yIGJvdW5kYXJ5IHRvIHRha2Ugb3ZlclxuICAgIGxldCB7XG4gICAgICBtYXRjaGVzLFxuICAgICAgcm91dGUsXG4gICAgICBlcnJvclxuICAgIH0gPSBnZXROb3RGb3VuZE1hdGNoZXMoZGF0YVJvdXRlcyk7XG4gICAgaW5pdGlhbE1hdGNoZXMgPSBtYXRjaGVzO1xuICAgIGluaXRpYWxFcnJvcnMgPSB7XG4gICAgICBbcm91dGUuaWRdOiBlcnJvclxuICAgIH07XG4gIH1cblxuICBsZXQgaW5pdGlhbGl6ZWQgPSAhaW5pdGlhbE1hdGNoZXMuc29tZShtID0+IG0ucm91dGUubG9hZGVyKSB8fCBpbml0Lmh5ZHJhdGlvbkRhdGEgIT0gbnVsbDtcbiAgbGV0IHJvdXRlcjtcbiAgbGV0IHN0YXRlID0ge1xuICAgIGhpc3RvcnlBY3Rpb246IGluaXQuaGlzdG9yeS5hY3Rpb24sXG4gICAgbG9jYXRpb246IGluaXQuaGlzdG9yeS5sb2NhdGlvbixcbiAgICBtYXRjaGVzOiBpbml0aWFsTWF0Y2hlcyxcbiAgICBpbml0aWFsaXplZCxcbiAgICBuYXZpZ2F0aW9uOiBJRExFX05BVklHQVRJT04sXG4gICAgcmVzdG9yZVNjcm9sbFBvc2l0aW9uOiBudWxsLFxuICAgIHByZXZlbnRTY3JvbGxSZXNldDogZmFsc2UsXG4gICAgcmV2YWxpZGF0aW9uOiBcImlkbGVcIixcbiAgICBsb2FkZXJEYXRhOiBpbml0Lmh5ZHJhdGlvbkRhdGEgJiYgaW5pdC5oeWRyYXRpb25EYXRhLmxvYWRlckRhdGEgfHwge30sXG4gICAgYWN0aW9uRGF0YTogaW5pdC5oeWRyYXRpb25EYXRhICYmIGluaXQuaHlkcmF0aW9uRGF0YS5hY3Rpb25EYXRhIHx8IG51bGwsXG4gICAgZXJyb3JzOiBpbml0Lmh5ZHJhdGlvbkRhdGEgJiYgaW5pdC5oeWRyYXRpb25EYXRhLmVycm9ycyB8fCBpbml0aWFsRXJyb3JzLFxuICAgIGZldGNoZXJzOiBuZXcgTWFwKClcbiAgfTsgLy8gLS0gU3RhdGVmdWwgaW50ZXJuYWwgdmFyaWFibGVzIHRvIG1hbmFnZSBuYXZpZ2F0aW9ucyAtLVxuICAvLyBDdXJyZW50IG5hdmlnYXRpb24gaW4gcHJvZ3Jlc3MgKHRvIGJlIGNvbW1pdHRlZCBpbiBjb21wbGV0ZU5hdmlnYXRpb24pXG5cbiAgbGV0IHBlbmRpbmdBY3Rpb24gPSBBY3Rpb24uUG9wOyAvLyBTaG91bGQgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwcmV2ZW50IHRoZSBzY3JvbGwgcmVzZXQgaWYgc2Nyb2xsIGNhbm5vdFxuICAvLyBiZSByZXN0b3JlZD9cblxuICBsZXQgcGVuZGluZ1ByZXZlbnRTY3JvbGxSZXNldCA9IGZhbHNlOyAvLyBBYm9ydENvbnRyb2xsZXIgZm9yIHRoZSBhY3RpdmUgbmF2aWdhdGlvblxuXG4gIGxldCBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXI7IC8vIFdlIHVzZSB0aGlzIHRvIGF2b2lkIHRvdWNoaW5nIGhpc3RvcnkgaW4gY29tcGxldGVOYXZpZ2F0aW9uIGlmIGFcbiAgLy8gcmV2YWxpZGF0aW9uIGlzIGVudGlyZWx5IHVuaW50ZXJydXB0ZWRcblxuICBsZXQgaXNVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uID0gZmFsc2U7IC8vIFVzZSB0aGlzIGludGVybmFsIGZsYWcgdG8gZm9yY2UgcmV2YWxpZGF0aW9uIG9mIGFsbCBsb2FkZXJzOlxuICAvLyAgLSBzdWJtaXNzaW9ucyAoY29tcGxldGVkIG9yIGludGVycnVwdGVkKVxuICAvLyAgLSB1c2VSZXZhbGlkYXRlKClcbiAgLy8gIC0gWC1SZW1peC1SZXZhbGlkYXRlIChmcm9tIHJlZGlyZWN0KVxuXG4gIGxldCBpc1JldmFsaWRhdGlvblJlcXVpcmVkID0gZmFsc2U7IC8vIFVzZSB0aGlzIGludGVybmFsIGFycmF5IHRvIGNhcHR1cmUgcm91dGVzIHRoYXQgcmVxdWlyZSByZXZhbGlkYXRpb24gZHVlXG4gIC8vIHRvIGEgY2FuY2VsbGVkIGRlZmVycmVkIG9uIGFjdGlvbiBzdWJtaXNzaW9uXG5cbiAgbGV0IGNhbmNlbGxlZERlZmVycmVkUm91dGVzID0gW107IC8vIFVzZSB0aGlzIGludGVybmFsIGFycmF5IHRvIGNhcHR1cmUgZmV0Y2hlciBsb2FkcyB0aGF0IHdlcmUgY2FuY2VsbGVkIGJ5IGFuXG4gIC8vIGFjdGlvbiBuYXZpZ2F0aW9uIGFuZCByZXF1aXJlIHJldmFsaWRhdGlvblxuXG4gIGxldCBjYW5jZWxsZWRGZXRjaGVyTG9hZHMgPSBbXTsgLy8gQWJvcnRDb250cm9sbGVycyBmb3IgYW55IGluLWZsaWdodCBmZXRjaGVyc1xuXG4gIGxldCBmZXRjaENvbnRyb2xsZXJzID0gbmV3IE1hcCgpOyAvLyBUcmFjayBsb2FkcyBiYXNlZCBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBzdGFydGVkXG5cbiAgbGV0IGluY3JlbWVudGluZ0xvYWRJZCA9IDA7IC8vIFRyYWNrIHRoZSBvdXRzdGFuZGluZyBwZW5kaW5nIG5hdmlnYXRpb24gZGF0YSBsb2FkIHRvIGJlIGNvbXBhcmVkIGFnYWluc3RcbiAgLy8gdGhlIGdsb2JhbGx5IGluY3JlbWVudGluZyBsb2FkIHdoZW4gYSBmZXRjaGVyIGxvYWQgbGFuZHMgYWZ0ZXIgYSBjb21wbGV0ZWRcbiAgLy8gbmF2aWdhdGlvblxuXG4gIGxldCBwZW5kaW5nTmF2aWdhdGlvbkxvYWRJZCA9IC0xOyAvLyBGZXRjaGVycyB0aGF0IHRyaWdnZXJlZCBkYXRhIHJlbG9hZHMgYXMgYSByZXN1bHQgb2YgdGhlaXIgYWN0aW9uc1xuXG4gIGxldCBmZXRjaFJlbG9hZElkcyA9IG5ldyBNYXAoKTsgLy8gRmV0Y2hlcnMgdGhhdCB0cmlnZ2VyZWQgcmVkaXJlY3QgbmF2aWdhdGlvbnMgZnJvbSB0aGVpciBhY3Rpb25zXG5cbiAgbGV0IGZldGNoUmVkaXJlY3RJZHMgPSBuZXcgU2V0KCk7IC8vIE1vc3QgcmVjZW50IGhyZWYvbWF0Y2ggZm9yIGZldGNoZXIubG9hZCBjYWxscyBmb3IgZmV0Y2hlcnNcblxuICBsZXQgZmV0Y2hMb2FkTWF0Y2hlcyA9IG5ldyBNYXAoKTsgLy8gU3RvcmUgRGVmZXJyZWREYXRhIGluc3RhbmNlcyBmb3IgYWN0aXZlIHJvdXRlIG1hdGNoZXMuICBXaGVuIGFcbiAgLy8gcm91dGUgbG9hZGVyIHJldHVybnMgZGVmZXIoKSB3ZSBzdGljayBvbmUgaW4gaGVyZS4gIFRoZW4sIHdoZW4gYSBuZXN0ZWRcbiAgLy8gcHJvbWlzZSByZXNvbHZlcyB3ZSB1cGRhdGUgbG9hZGVyRGF0YS4gIElmIGEgbmV3IG5hdmlnYXRpb24gc3RhcnRzIHdlXG4gIC8vIGNhbmNlbCBhY3RpdmUgZGVmZXJyZWRzIGZvciBlbGltaW5hdGVkIHJvdXRlcy5cblxuICBsZXQgYWN0aXZlRGVmZXJyZWRzID0gbmV3IE1hcCgpOyAvLyBJbml0aWFsaXplIHRoZSByb3V0ZXIsIGFsbCBzaWRlIGVmZmVjdHMgc2hvdWxkIGJlIGtpY2tlZCBvZmYgZnJvbSBoZXJlLlxuICAvLyBJbXBsZW1lbnRlZCBhcyBhIEZsdWVudCBBUEkgZm9yIGVhc2Ugb2Y6XG4gIC8vICAgbGV0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcihpbml0KS5pbml0aWFsaXplKCk7XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICAvLyBJZiBoaXN0b3J5IGluZm9ybXMgdXMgb2YgYSBQT1AgbmF2aWdhdGlvbiwgc3RhcnQgdGhlIG5hdmlnYXRpb24gYnV0IGRvIG5vdCB1cGRhdGVcbiAgICAvLyBzdGF0ZS4gIFdlJ2xsIHVwZGF0ZSBvdXIgb3duIHN0YXRlIG9uY2UgdGhlIG5hdmlnYXRpb24gY29tcGxldGVzXG4gICAgdW5saXN0ZW5IaXN0b3J5ID0gaW5pdC5oaXN0b3J5Lmxpc3RlbihfcmVmID0+IHtcbiAgICAgIGxldCB7XG4gICAgICAgIGFjdGlvbjogaGlzdG9yeUFjdGlvbixcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0gPSBfcmVmO1xuICAgICAgcmV0dXJuIHN0YXJ0TmF2aWdhdGlvbihoaXN0b3J5QWN0aW9uLCBsb2NhdGlvbik7XG4gICAgfSk7IC8vIEtpY2sgb2ZmIGluaXRpYWwgZGF0YSBsb2FkIGlmIG5lZWRlZC4gIFVzZSBQb3AgdG8gYXZvaWQgbW9kaWZ5aW5nIGhpc3RvcnlcblxuICAgIGlmICghc3RhdGUuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHN0YXJ0TmF2aWdhdGlvbihBY3Rpb24uUG9wLCBzdGF0ZS5sb2NhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvdXRlcjtcbiAgfSAvLyBDbGVhbiB1cCBhIHJvdXRlciBhbmQgaXQncyBzaWRlIGVmZmVjdHNcblxuXG4gIGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHVubGlzdGVuSGlzdG9yeSkge1xuICAgICAgdW5saXN0ZW5IaXN0b3J5KCk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlcnMuY2xlYXIoKTtcbiAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgJiYgcGVuZGluZ05hdmlnYXRpb25Db250cm9sbGVyLmFib3J0KCk7XG4gICAgc3RhdGUuZmV0Y2hlcnMuZm9yRWFjaCgoXywga2V5KSA9PiBkZWxldGVGZXRjaGVyKGtleSkpO1xuICB9IC8vIFN1YnNjcmliZSB0byBzdGF0ZSB1cGRhdGVzIGZvciB0aGUgcm91dGVyXG5cblxuICBmdW5jdGlvbiBzdWJzY3JpYmUoZm4pIHtcbiAgICBzdWJzY3JpYmVycy5hZGQoZm4pO1xuICAgIHJldHVybiAoKSA9PiBzdWJzY3JpYmVycy5kZWxldGUoZm4pO1xuICB9IC8vIFVwZGF0ZSBvdXIgc3RhdGUgYW5kIG5vdGlmeSB0aGUgY2FsbGluZyBjb250ZXh0IG9mIHRoZSBjaGFuZ2VcblxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc3RhdGUgPSBfZXh0ZW5kcyh7fSwgc3RhdGUsIG5ld1N0YXRlKTtcbiAgICBzdWJzY3JpYmVycy5mb3JFYWNoKHN1YnNjcmliZXIgPT4gc3Vic2NyaWJlcihzdGF0ZSkpO1xuICB9IC8vIENvbXBsZXRlIGEgbmF2aWdhdGlvbiByZXR1cm5pbmcgdGhlIHN0YXRlLm5hdmlnYXRpb24gYmFjayB0byB0aGUgSURMRV9OQVZJR0FUSU9OXG4gIC8vIGFuZCBzZXR0aW5nIHN0YXRlLltoaXN0b3J5QWN0aW9uL2xvY2F0aW9uL21hdGNoZXNdIHRvIHRoZSBuZXcgcm91dGUuXG4gIC8vIC0gTG9jYXRpb24gaXMgYSByZXF1aXJlZCBwYXJhbVxuICAvLyAtIE5hdmlnYXRpb24gd2lsbCBhbHdheXMgYmUgc2V0IHRvIElETEVfTkFWSUdBVElPTlxuICAvLyAtIENhbiBwYXNzIGFueSBvdGhlciBzdGF0ZSBpbiBuZXdTdGF0ZVxuXG5cbiAgZnVuY3Rpb24gY29tcGxldGVOYXZpZ2F0aW9uKGxvY2F0aW9uLCBuZXdTdGF0ZSkge1xuICAgIC8vIERlZHVjZSBpZiB3ZSdyZSBpbiBhIGxvYWRpbmcvYWN0aW9uUmVsb2FkIHN0YXRlOlxuICAgIC8vIC0gV2UgaGF2ZSBjb21taXR0ZWQgYWN0aW9uRGF0YSBpbiB0aGUgc3RvcmVcbiAgICAvLyAtIFRoZSBjdXJyZW50IG5hdmlnYXRpb24gd2FzIGEgc3VibWlzc2lvblxuICAgIC8vIC0gV2UncmUgcGFzdCB0aGUgc3VibWl0dGluZyBzdGF0ZSBhbmQgaW50byB0aGUgbG9hZGluZyBzdGF0ZVxuICAgIC8vIC0gVGhpcyBzaG91bGQgbm90IGJlIHN1c2NlcHRpYmxlIHRvIGZhbHNlIHBvc2l0aXZlcyBmb3JcbiAgICAvLyAgIGxvYWRpbmcvc3VibWlzc2lvblJlZGlyZWN0IHNpbmNlIHRoZXJlIHdvdWxkIG5vdCBiZSBhY3Rpb25EYXRhIGluIHRoZVxuICAgIC8vICAgc3RhdGUgc2luY2UgdGhlIHByaW9yIGFjdGlvbiB3b3VsZCBoYXZlIHJldHVybmVkIGEgcmVkaXJlY3QgcmVzcG9uc2VcbiAgICAvLyAgIGFuZCBzaG9ydCBjaXJjdWl0ZWRcbiAgICBsZXQgaXNBY3Rpb25SZWxvYWQgPSBzdGF0ZS5hY3Rpb25EYXRhICE9IG51bGwgJiYgc3RhdGUubmF2aWdhdGlvbi5mb3JtTWV0aG9kICE9IG51bGwgJiYgc3RhdGUubmF2aWdhdGlvbi5zdGF0ZSA9PT0gXCJsb2FkaW5nXCI7IC8vIEFsd2F5cyBwcmVzZXJ2ZSBhbnkgZXhpc3RpbmcgbG9hZGVyRGF0YSBmcm9tIHJlLXVzZWQgcm91dGVzXG5cbiAgICBsZXQgbmV3TG9hZGVyRGF0YSA9IG5ld1N0YXRlLmxvYWRlckRhdGEgPyB7XG4gICAgICBsb2FkZXJEYXRhOiBtZXJnZUxvYWRlckRhdGEoc3RhdGUubG9hZGVyRGF0YSwgbmV3U3RhdGUubG9hZGVyRGF0YSwgbmV3U3RhdGUubWF0Y2hlcyB8fCBbXSlcbiAgICB9IDoge307XG4gICAgdXBkYXRlU3RhdGUoX2V4dGVuZHMoe30sIGlzQWN0aW9uUmVsb2FkID8ge30gOiB7XG4gICAgICBhY3Rpb25EYXRhOiBudWxsXG4gICAgfSwgbmV3U3RhdGUsIG5ld0xvYWRlckRhdGEsIHtcbiAgICAgIGhpc3RvcnlBY3Rpb246IHBlbmRpbmdBY3Rpb24sXG4gICAgICBsb2NhdGlvbixcbiAgICAgIGluaXRpYWxpemVkOiB0cnVlLFxuICAgICAgbmF2aWdhdGlvbjogSURMRV9OQVZJR0FUSU9OLFxuICAgICAgcmV2YWxpZGF0aW9uOiBcImlkbGVcIixcbiAgICAgIC8vIERvbid0IHJlc3RvcmUgb24gc3VibWlzc2lvbiBuYXZpZ2F0aW9uc1xuICAgICAgcmVzdG9yZVNjcm9sbFBvc2l0aW9uOiBzdGF0ZS5uYXZpZ2F0aW9uLmZvcm1EYXRhID8gZmFsc2UgOiBnZXRTYXZlZFNjcm9sbFBvc2l0aW9uKGxvY2F0aW9uLCBuZXdTdGF0ZS5tYXRjaGVzIHx8IHN0YXRlLm1hdGNoZXMpLFxuICAgICAgcHJldmVudFNjcm9sbFJlc2V0OiBwZW5kaW5nUHJldmVudFNjcm9sbFJlc2V0XG4gICAgfSkpO1xuXG4gICAgaWYgKGlzVW5pbnRlcnJ1cHRlZFJldmFsaWRhdGlvbikgOyBlbHNlIGlmIChwZW5kaW5nQWN0aW9uID09PSBBY3Rpb24uUG9wKSA7IGVsc2UgaWYgKHBlbmRpbmdBY3Rpb24gPT09IEFjdGlvbi5QdXNoKSB7XG4gICAgICBpbml0Lmhpc3RvcnkucHVzaChsb2NhdGlvbiwgbG9jYXRpb24uc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAocGVuZGluZ0FjdGlvbiA9PT0gQWN0aW9uLlJlcGxhY2UpIHtcbiAgICAgIGluaXQuaGlzdG9yeS5yZXBsYWNlKGxvY2F0aW9uLCBsb2NhdGlvbi5zdGF0ZSk7XG4gICAgfSAvLyBSZXNldCBzdGF0ZWZ1bCBuYXZpZ2F0aW9uIHZhcnNcblxuXG4gICAgcGVuZGluZ0FjdGlvbiA9IEFjdGlvbi5Qb3A7XG4gICAgcGVuZGluZ1ByZXZlbnRTY3JvbGxSZXNldCA9IGZhbHNlO1xuICAgIGlzVW5pbnRlcnJ1cHRlZFJldmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQgPSBmYWxzZTtcbiAgICBjYW5jZWxsZWREZWZlcnJlZFJvdXRlcyA9IFtdO1xuICAgIGNhbmNlbGxlZEZldGNoZXJMb2FkcyA9IFtdO1xuICB9IC8vIFRyaWdnZXIgYSBuYXZpZ2F0aW9uIGV2ZW50LCB3aGljaCBjYW4gZWl0aGVyIGJlIGEgbnVtZXJpY2FsIFBPUCBvciBhIFBVU0hcbiAgLy8gcmVwbGFjZSB3aXRoIGFuIG9wdGlvbmFsIHN1Ym1pc3Npb25cblxuXG4gIGFzeW5jIGZ1bmN0aW9uIG5hdmlnYXRlKHRvLCBvcHRzKSB7XG4gICAgaWYgKHR5cGVvZiB0byA9PT0gXCJudW1iZXJcIikge1xuICAgICAgaW5pdC5oaXN0b3J5LmdvKHRvKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQge1xuICAgICAgcGF0aCxcbiAgICAgIHN1Ym1pc3Npb24sXG4gICAgICBlcnJvclxuICAgIH0gPSBub3JtYWxpemVOYXZpZ2F0ZU9wdGlvbnModG8sIG9wdHMpO1xuICAgIGxldCBsb2NhdGlvbiA9IGNyZWF0ZUxvY2F0aW9uKHN0YXRlLmxvY2F0aW9uLCBwYXRoLCBvcHRzICYmIG9wdHMuc3RhdGUpO1xuICAgIGxldCBoaXN0b3J5QWN0aW9uID0gKG9wdHMgJiYgb3B0cy5yZXBsYWNlKSA9PT0gdHJ1ZSB8fCBzdWJtaXNzaW9uICE9IG51bGwgPyBBY3Rpb24uUmVwbGFjZSA6IEFjdGlvbi5QdXNoO1xuICAgIGxldCBwcmV2ZW50U2Nyb2xsUmVzZXQgPSBvcHRzICYmIFwicHJldmVudFNjcm9sbFJlc2V0XCIgaW4gb3B0cyA/IG9wdHMucHJldmVudFNjcm9sbFJlc2V0ID09PSB0cnVlIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBhd2FpdCBzdGFydE5hdmlnYXRpb24oaGlzdG9yeUFjdGlvbiwgbG9jYXRpb24sIHtcbiAgICAgIHN1Ym1pc3Npb24sXG4gICAgICAvLyBTZW5kIHRocm91Z2ggdGhlIGZvcm1EYXRhIHNlcmlhbGl6YXRpb24gZXJyb3IgaWYgd2UgaGF2ZSBvbmUgc28gd2UgY2FuXG4gICAgICAvLyByZW5kZXIgYXQgdGhlIHJpZ2h0IGVycm9yIGJvdW5kYXJ5IGFmdGVyIHdlIG1hdGNoIHJvdXRlc1xuICAgICAgcGVuZGluZ0Vycm9yOiBlcnJvcixcbiAgICAgIHByZXZlbnRTY3JvbGxSZXNldCxcbiAgICAgIHJlcGxhY2U6IG9wdHMgJiYgb3B0cy5yZXBsYWNlXG4gICAgfSk7XG4gIH0gLy8gUmV2YWxpZGF0ZSBhbGwgY3VycmVudCBsb2FkZXJzLiAgSWYgYSBuYXZpZ2F0aW9uIGlzIGluIHByb2dyZXNzIG9yIGlmIHRoaXNcbiAgLy8gaXMgaW50ZXJydXB0ZWQgYnkgYSBuYXZpZ2F0aW9uLCBhbGxvdyB0aGlzIHRvIFwic3VjY2VlZFwiIGJ5IGNhbGxpbmcgYWxsXG4gIC8vIGxvYWRlcnMgZHVyaW5nIHRoZSBuZXh0IGxvYWRlciByb3VuZFxuXG5cbiAgZnVuY3Rpb24gcmV2YWxpZGF0ZSgpIHtcbiAgICBpbnRlcnJ1cHRBY3RpdmVMb2FkcygpO1xuICAgIHVwZGF0ZVN0YXRlKHtcbiAgICAgIHJldmFsaWRhdGlvbjogXCJsb2FkaW5nXCJcbiAgICB9KTsgLy8gSWYgd2UncmUgY3VycmVudGx5IHN1Ym1pdHRpbmcgYW4gYWN0aW9uLCB3ZSBkb24ndCBuZWVkIHRvIHN0YXJ0IGEgbmV3XG4gICAgLy8gbmF2aWdhdGlvbiwgd2UnbGwganVzdCBsZXQgdGhlIGZvbGxvdyB1cCBsb2FkZXIgZXhlY3V0aW9uIGNhbGwgYWxsIGxvYWRlcnNcblxuICAgIGlmIChzdGF0ZS5uYXZpZ2F0aW9uLnN0YXRlID09PSBcInN1Ym1pdHRpbmdcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UncmUgY3VycmVudGx5IGluIGFuIGlkbGUgc3RhdGUsIHN0YXJ0IGEgbmV3IG5hdmlnYXRpb24gZm9yIHRoZSBjdXJyZW50XG4gICAgLy8gYWN0aW9uL2xvY2F0aW9uIGFuZCBtYXJrIGl0IGFzIHVuaW50ZXJydXB0ZWQsIHdoaWNoIHdpbGwgc2tpcCB0aGUgaGlzdG9yeVxuICAgIC8vIHVwZGF0ZSBpbiBjb21wbGV0ZU5hdmlnYXRpb25cblxuXG4gICAgaWYgKHN0YXRlLm5hdmlnYXRpb24uc3RhdGUgPT09IFwiaWRsZVwiKSB7XG4gICAgICBzdGFydE5hdmlnYXRpb24oc3RhdGUuaGlzdG9yeUFjdGlvbiwgc3RhdGUubG9jYXRpb24sIHtcbiAgICAgICAgc3RhcnRVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIE90aGVyd2lzZSwgaWYgd2UncmUgY3VycmVudGx5IGluIGEgbG9hZGluZyBzdGF0ZSwganVzdCBzdGFydCBhIG5ld1xuICAgIC8vIG5hdmlnYXRpb24gdG8gdGhlIG5hdmlnYXRpb24ubG9jYXRpb24gYnV0IGRvIG5vdCB0cmlnZ2VyIGFuIHVuaW50ZXJydXB0ZWRcbiAgICAvLyByZXZhbGlkYXRpb24gc28gdGhhdCBoaXN0b3J5IGNvcnJlY3RseSB1cGRhdGVzIG9uY2UgdGhlIG5hdmlnYXRpb24gY29tcGxldGVzXG5cblxuICAgIHN0YXJ0TmF2aWdhdGlvbihwZW5kaW5nQWN0aW9uIHx8IHN0YXRlLmhpc3RvcnlBY3Rpb24sIHN0YXRlLm5hdmlnYXRpb24ubG9jYXRpb24sIHtcbiAgICAgIG92ZXJyaWRlTmF2aWdhdGlvbjogc3RhdGUubmF2aWdhdGlvblxuICAgIH0pO1xuICB9IC8vIFN0YXJ0IGEgbmF2aWdhdGlvbiB0byB0aGUgZ2l2ZW4gYWN0aW9uL2xvY2F0aW9uLiAgQ2FuIG9wdGlvbmFsbHkgcHJvdmlkZSBhXG4gIC8vIG92ZXJyaWRlTmF2aWdhdGlvbiB3aGljaCB3aWxsIG92ZXJyaWRlIHRoZSBub3JtYWxMb2FkIGluIHRoZSBjYXNlIG9mIGEgcmVkaXJlY3RcbiAgLy8gbmF2aWdhdGlvblxuXG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RhcnROYXZpZ2F0aW9uKGhpc3RvcnlBY3Rpb24sIGxvY2F0aW9uLCBvcHRzKSB7XG4gICAgLy8gQWJvcnQgYW55IGluLXByb2dyZXNzIG5hdmlnYXRpb25zIGFuZCBzdGFydCBhIG5ldyBvbmUuIFVuc2V0IGFueSBvbmdvaW5nXG4gICAgLy8gdW5pbnRlcnJ1cHRlZCByZXZhbGlkYXRpb25zIHVubGVzcyB0b2xkIG90aGVyd2lzZSwgc2luY2Ugd2Ugd2FudCB0aGlzXG4gICAgLy8gbmV3IG5hdmlnYXRpb24gdG8gdXBkYXRlIGhpc3Rvcnkgbm9ybWFsbHlcbiAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgJiYgcGVuZGluZ05hdmlnYXRpb25Db250cm9sbGVyLmFib3J0KCk7XG4gICAgcGVuZGluZ05hdmlnYXRpb25Db250cm9sbGVyID0gbnVsbDtcbiAgICBwZW5kaW5nQWN0aW9uID0gaGlzdG9yeUFjdGlvbjtcbiAgICBpc1VuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb24gPSAob3B0cyAmJiBvcHRzLnN0YXJ0VW5pbnRlcnJ1cHRlZFJldmFsaWRhdGlvbikgPT09IHRydWU7IC8vIFNhdmUgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGV2ZXJ5IHRpbWUgd2Ugc3RhcnQgYSBuZXcgbmF2aWdhdGlvbixcbiAgICAvLyBhbmQgdHJhY2sgd2hldGhlciB3ZSBzaG91bGQgcmVzZXQgc2Nyb2xsIG9uIGNvbXBsZXRpb25cblxuICAgIHNhdmVTY3JvbGxQb3NpdGlvbihzdGF0ZS5sb2NhdGlvbiwgc3RhdGUubWF0Y2hlcyk7XG4gICAgcGVuZGluZ1ByZXZlbnRTY3JvbGxSZXNldCA9IChvcHRzICYmIG9wdHMucHJldmVudFNjcm9sbFJlc2V0KSA9PT0gdHJ1ZTtcbiAgICBsZXQgbG9hZGluZ05hdmlnYXRpb24gPSBvcHRzICYmIG9wdHMub3ZlcnJpZGVOYXZpZ2F0aW9uO1xuICAgIGxldCBtYXRjaGVzID0gbWF0Y2hSb3V0ZXMoZGF0YVJvdXRlcywgbG9jYXRpb24sIGluaXQuYmFzZW5hbWUpOyAvLyBTaG9ydCBjaXJjdWl0IHdpdGggYSA0MDQgb24gdGhlIHJvb3QgZXJyb3IgYm91bmRhcnkgaWYgd2UgbWF0Y2ggbm90aGluZ1xuXG4gICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICBsZXQge1xuICAgICAgICBtYXRjaGVzOiBub3RGb3VuZE1hdGNoZXMsXG4gICAgICAgIHJvdXRlLFxuICAgICAgICBlcnJvclxuICAgICAgfSA9IGdldE5vdEZvdW5kTWF0Y2hlcyhkYXRhUm91dGVzKTsgLy8gQ2FuY2VsIGFsbCBwZW5kaW5nIGRlZmVycmVkIG9uIDQwNHMgc2luY2Ugd2UgZG9uJ3Qga2VlcCBhbnkgcm91dGVzXG5cbiAgICAgIGNhbmNlbEFjdGl2ZURlZmVycmVkcygpO1xuICAgICAgY29tcGxldGVOYXZpZ2F0aW9uKGxvY2F0aW9uLCB7XG4gICAgICAgIG1hdGNoZXM6IG5vdEZvdW5kTWF0Y2hlcyxcbiAgICAgICAgbG9hZGVyRGF0YToge30sXG4gICAgICAgIGVycm9yczoge1xuICAgICAgICAgIFtyb3V0ZS5pZF06IGVycm9yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gU2hvcnQgY2lyY3VpdCBpZiBpdCdzIG9ubHkgYSBoYXNoIGNoYW5nZVxuXG5cbiAgICBpZiAoaXNIYXNoQ2hhbmdlT25seShzdGF0ZS5sb2NhdGlvbiwgbG9jYXRpb24pKSB7XG4gICAgICBjb21wbGV0ZU5hdmlnYXRpb24obG9jYXRpb24sIHtcbiAgICAgICAgbWF0Y2hlc1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBDcmVhdGUgYSBjb250cm9sbGVyL1JlcXVlc3QgZm9yIHRoaXMgbmF2aWdhdGlvblxuXG5cbiAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgbGV0IHJlcXVlc3QgPSBjcmVhdGVSZXF1ZXN0KGxvY2F0aW9uLCBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIuc2lnbmFsLCBvcHRzICYmIG9wdHMuc3VibWlzc2lvbik7XG4gICAgbGV0IHBlbmRpbmdBY3Rpb25EYXRhO1xuICAgIGxldCBwZW5kaW5nRXJyb3I7XG5cbiAgICBpZiAob3B0cyAmJiBvcHRzLnBlbmRpbmdFcnJvcikge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBhIHBlbmRpbmdFcnJvciwgaXQgbWVhbnMgdGhlIHVzZXIgYXR0ZW1wdGVkIGEgR0VUIHN1Ym1pc3Npb25cbiAgICAgIC8vIHdpdGggYmluYXJ5IEZvcm1EYXRhIHNvIGFzc2lnbiBoZXJlIGFuZCBza2lwIHRvIGhhbmRsZUxvYWRlcnMuICBUaGF0XG4gICAgICAvLyB3YXkgd2UgaGFuZGxlIGNhbGxpbmcgbG9hZGVycyBhYm92ZSB0aGUgYm91bmRhcnkgZXRjLiAgSXQncyBub3QgcmVhbGx5XG4gICAgICAvLyBkaWZmZXJlbnQgZnJvbSBhbiBhY3Rpb25FcnJvciBpbiB0aGF0IHNlbnNlLlxuICAgICAgcGVuZGluZ0Vycm9yID0ge1xuICAgICAgICBbZmluZE5lYXJlc3RCb3VuZGFyeShtYXRjaGVzKS5yb3V0ZS5pZF06IG9wdHMucGVuZGluZ0Vycm9yXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAob3B0cyAmJiBvcHRzLnN1Ym1pc3Npb24pIHtcbiAgICAgIC8vIENhbGwgYWN0aW9uIGlmIHdlIHJlY2VpdmVkIGFuIGFjdGlvbiBzdWJtaXNzaW9uXG4gICAgICBsZXQgYWN0aW9uT3V0cHV0ID0gYXdhaXQgaGFuZGxlQWN0aW9uKHJlcXVlc3QsIGxvY2F0aW9uLCBvcHRzLnN1Ym1pc3Npb24sIG1hdGNoZXMsIHtcbiAgICAgICAgcmVwbGFjZTogb3B0cy5yZXBsYWNlXG4gICAgICB9KTtcblxuICAgICAgaWYgKGFjdGlvbk91dHB1dC5zaG9ydENpcmN1aXRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHBlbmRpbmdBY3Rpb25EYXRhID0gYWN0aW9uT3V0cHV0LnBlbmRpbmdBY3Rpb25EYXRhO1xuICAgICAgcGVuZGluZ0Vycm9yID0gYWN0aW9uT3V0cHV0LnBlbmRpbmdBY3Rpb25FcnJvcjtcblxuICAgICAgbGV0IG5hdmlnYXRpb24gPSBfZXh0ZW5kcyh7XG4gICAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIG9wdHMuc3VibWlzc2lvbik7XG5cbiAgICAgIGxvYWRpbmdOYXZpZ2F0aW9uID0gbmF2aWdhdGlvbjtcbiAgICB9IC8vIENhbGwgbG9hZGVyc1xuXG5cbiAgICBsZXQge1xuICAgICAgc2hvcnRDaXJjdWl0ZWQsXG4gICAgICBsb2FkZXJEYXRhLFxuICAgICAgZXJyb3JzXG4gICAgfSA9IGF3YWl0IGhhbmRsZUxvYWRlcnMocmVxdWVzdCwgbG9jYXRpb24sIG1hdGNoZXMsIGxvYWRpbmdOYXZpZ2F0aW9uLCBvcHRzICYmIG9wdHMuc3VibWlzc2lvbiwgb3B0cyAmJiBvcHRzLnJlcGxhY2UsIHBlbmRpbmdBY3Rpb25EYXRhLCBwZW5kaW5nRXJyb3IpO1xuXG4gICAgaWYgKHNob3J0Q2lyY3VpdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBDbGVhbiB1cCBub3cgdGhhdCB0aGUgYWN0aW9uL2xvYWRlcnMgaGF2ZSBjb21wbGV0ZWQuICBEb24ndCBjbGVhbiB1cCBpZlxuICAgIC8vIHdlIHNob3J0IGNpcmN1aXRlZCBiZWNhdXNlIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciB3aWxsIGhhdmUgYWxyZWFkeVxuICAgIC8vIGJlZW4gYXNzaWduZWQgdG8gYSBuZXcgY29udHJvbGxlciBmb3IgdGhlIG5leHQgbmF2aWdhdGlvblxuXG5cbiAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBudWxsO1xuICAgIGNvbXBsZXRlTmF2aWdhdGlvbihsb2NhdGlvbiwge1xuICAgICAgbWF0Y2hlcyxcbiAgICAgIGxvYWRlckRhdGEsXG4gICAgICBlcnJvcnNcbiAgICB9KTtcbiAgfSAvLyBDYWxsIHRoZSBhY3Rpb24gbWF0Y2hlZCBieSB0aGUgbGVhZiByb3V0ZSBmb3IgdGhpcyBuYXZpZ2F0aW9uIGFuZCBoYW5kbGVcbiAgLy8gcmVkaXJlY3RzL2Vycm9yc1xuXG5cbiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlQWN0aW9uKHJlcXVlc3QsIGxvY2F0aW9uLCBzdWJtaXNzaW9uLCBtYXRjaGVzLCBvcHRzKSB7XG4gICAgaW50ZXJydXB0QWN0aXZlTG9hZHMoKTsgLy8gUHV0IHVzIGluIGEgc3VibWl0dGluZyBzdGF0ZVxuXG4gICAgbGV0IG5hdmlnYXRpb24gPSBfZXh0ZW5kcyh7XG4gICAgICBzdGF0ZTogXCJzdWJtaXR0aW5nXCIsXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHN1Ym1pc3Npb24pO1xuXG4gICAgdXBkYXRlU3RhdGUoe1xuICAgICAgbmF2aWdhdGlvblxuICAgIH0pOyAvLyBDYWxsIG91ciBhY3Rpb24gYW5kIGdldCB0aGUgcmVzdWx0XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIGxldCBhY3Rpb25NYXRjaCA9IGdldFRhcmdldE1hdGNoKG1hdGNoZXMsIGxvY2F0aW9uKTtcblxuICAgIGlmICghYWN0aW9uTWF0Y2gucm91dGUuYWN0aW9uKSB7XG4gICAgICByZXN1bHQgPSBnZXRNZXRob2ROb3RBbGxvd2VkUmVzdWx0KGxvY2F0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbExvYWRlck9yQWN0aW9uKFwiYWN0aW9uXCIsIHJlcXVlc3QsIGFjdGlvbk1hdGNoKTtcblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzaG9ydENpcmN1aXRlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1JlZGlyZWN0UmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIGxldCByZWRpcmVjdE5hdmlnYXRpb24gPSBfZXh0ZW5kcyh7XG4gICAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgICAgbG9jYXRpb246IGNyZWF0ZUxvY2F0aW9uKHN0YXRlLmxvY2F0aW9uLCByZXN1bHQubG9jYXRpb24pXG4gICAgICB9LCBzdWJtaXNzaW9uKTtcblxuICAgICAgYXdhaXQgc3RhcnRSZWRpcmVjdE5hdmlnYXRpb24ocmVzdWx0LCByZWRpcmVjdE5hdmlnYXRpb24sIG9wdHMgJiYgb3B0cy5yZXBsYWNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNob3J0Q2lyY3VpdGVkOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpc0Vycm9yUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIC8vIFN0b3JlIG9mZiB0aGUgcGVuZGluZyBlcnJvciAtIHdlIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hpY2ggbG9hZGVyc1xuICAgICAgLy8gdG8gY2FsbCBhbmQgd2lsbCBjb21taXQgaXQgd2hlbiB3ZSBjb21wbGV0ZSB0aGUgbmF2aWdhdGlvblxuICAgICAgbGV0IGJvdW5kYXJ5TWF0Y2ggPSBmaW5kTmVhcmVzdEJvdW5kYXJ5KG1hdGNoZXMsIGFjdGlvbk1hdGNoLnJvdXRlLmlkKTsgLy8gQnkgZGVmYXVsdCwgYWxsIHN1Ym1pc3Npb25zIGFyZSBSRVBMQUNFIG5hdmlnYXRpb25zLCBidXQgaWYgdGhlXG4gICAgICAvLyBhY3Rpb24gdGhyZXcgYW4gZXJyb3IgdGhhdCdsbCBiZSByZW5kZXJlZCBpbiBhbiBlcnJvckVsZW1lbnQsIHdlIGZhbGxcbiAgICAgIC8vIGJhY2sgdG8gUFVTSCBzbyB0aGF0IHRoZSB1c2VyIGNhbiB1c2UgdGhlIGJhY2sgYnV0dG9uIHRvIGdldCBiYWNrIHRvXG4gICAgICAvLyB0aGUgcHJlLXN1Ym1pc3Npb24gZm9ybSBsb2NhdGlvbiB0byB0cnkgYWdhaW5cblxuICAgICAgaWYgKChvcHRzICYmIG9wdHMucmVwbGFjZSkgIT09IHRydWUpIHtcbiAgICAgICAgcGVuZGluZ0FjdGlvbiA9IEFjdGlvbi5QdXNoO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwZW5kaW5nQWN0aW9uRXJyb3I6IHtcbiAgICAgICAgICBbYm91bmRhcnlNYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5lcnJvclxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImRlZmVyKCkgaXMgbm90IHN1cHBvcnRlZCBpbiBhY3Rpb25zXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwZW5kaW5nQWN0aW9uRGF0YToge1xuICAgICAgICBbYWN0aW9uTWF0Y2gucm91dGUuaWRdOiByZXN1bHQuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gLy8gQ2FsbCBhbGwgYXBwbGljYWJsZSBsb2FkZXJzIGZvciB0aGUgZ2l2ZW4gbWF0Y2hlcywgaGFuZGxpbmcgcmVkaXJlY3RzLFxuICAvLyBlcnJvcnMsIGV0Yy5cblxuXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUxvYWRlcnMocmVxdWVzdCwgbG9jYXRpb24sIG1hdGNoZXMsIG92ZXJyaWRlTmF2aWdhdGlvbiwgc3VibWlzc2lvbiwgcmVwbGFjZSwgcGVuZGluZ0FjdGlvbkRhdGEsIHBlbmRpbmdFcnJvcikge1xuICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHJpZ2h0IG5hdmlnYXRpb24gd2Ugd2FudCB0byB1c2UgZm9yIGRhdGEgbG9hZGluZ1xuICAgIGxldCBsb2FkaW5nTmF2aWdhdGlvbiA9IG92ZXJyaWRlTmF2aWdhdGlvbjtcblxuICAgIGlmICghbG9hZGluZ05hdmlnYXRpb24pIHtcbiAgICAgIGxldCBuYXZpZ2F0aW9uID0ge1xuICAgICAgICBzdGF0ZTogXCJsb2FkaW5nXCIsXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybURhdGE6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIGxvYWRpbmdOYXZpZ2F0aW9uID0gbmF2aWdhdGlvbjtcbiAgICB9XG5cbiAgICBsZXQgW21hdGNoZXNUb0xvYWQsIHJldmFsaWRhdGluZ0ZldGNoZXJzXSA9IGdldE1hdGNoZXNUb0xvYWQoc3RhdGUsIG1hdGNoZXMsIHN1Ym1pc3Npb24sIGxvY2F0aW9uLCBpc1JldmFsaWRhdGlvblJlcXVpcmVkLCBjYW5jZWxsZWREZWZlcnJlZFJvdXRlcywgY2FuY2VsbGVkRmV0Y2hlckxvYWRzLCBwZW5kaW5nQWN0aW9uRGF0YSwgcGVuZGluZ0Vycm9yLCBmZXRjaExvYWRNYXRjaGVzKTsgLy8gQ2FuY2VsIHBlbmRpbmcgZGVmZXJyZWRzIGZvciBuby1sb25nZXItbWF0Y2hlZCByb3V0ZXMgb3Igcm91dGVzIHdlJ3JlXG4gICAgLy8gYWJvdXQgdG8gcmVsb2FkLiAgTm90ZSB0aGF0IGlmIHRoaXMgaXMgYW4gYWN0aW9uIHJlbG9hZCB3ZSB3b3VsZCBoYXZlXG4gICAgLy8gYWxyZWFkeSBjYW5jZWxsZWQgYWxsIHBlbmRpbmcgZGVmZXJyZWRzIHNvIHRoaXMgd291bGQgYmUgYSBuby1vcFxuXG4gICAgY2FuY2VsQWN0aXZlRGVmZXJyZWRzKHJvdXRlSWQgPT4gIShtYXRjaGVzICYmIG1hdGNoZXMuc29tZShtID0+IG0ucm91dGUuaWQgPT09IHJvdXRlSWQpKSB8fCBtYXRjaGVzVG9Mb2FkICYmIG1hdGNoZXNUb0xvYWQuc29tZShtID0+IG0ucm91dGUuaWQgPT09IHJvdXRlSWQpKTsgLy8gU2hvcnQgY2lyY3VpdCBpZiB3ZSBoYXZlIG5vIGxvYWRlcnMgdG8gcnVuXG5cbiAgICBpZiAobWF0Y2hlc1RvTG9hZC5sZW5ndGggPT09IDAgJiYgcmV2YWxpZGF0aW5nRmV0Y2hlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb21wbGV0ZU5hdmlnYXRpb24obG9jYXRpb24sIHtcbiAgICAgICAgbWF0Y2hlcyxcbiAgICAgICAgbG9hZGVyRGF0YTogbWVyZ2VMb2FkZXJEYXRhKHN0YXRlLmxvYWRlckRhdGEsIHt9LCBtYXRjaGVzKSxcbiAgICAgICAgLy8gQ29tbWl0IHBlbmRpbmcgZXJyb3IgaWYgd2UncmUgc2hvcnQgY2lyY3VpdGluZ1xuICAgICAgICBlcnJvcnM6IHBlbmRpbmdFcnJvciB8fCBudWxsLFxuICAgICAgICBhY3Rpb25EYXRhOiBwZW5kaW5nQWN0aW9uRGF0YSB8fCBudWxsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNob3J0Q2lyY3VpdGVkOiB0cnVlXG4gICAgICB9O1xuICAgIH0gLy8gSWYgdGhpcyBpcyBhbiB1bmludGVycnVwdGVkIHJldmFsaWRhdGlvbiwgd2UgcmVtYWluIGluIG91ciBjdXJyZW50IGlkbGVcbiAgICAvLyBzdGF0ZS4gIElmIG5vdCwgd2UgbmVlZCB0byBzd2l0Y2ggdG8gb3VyIGxvYWRpbmcgc3RhdGUgYW5kIGxvYWQgZGF0YSxcbiAgICAvLyBwcmVzZXJ2aW5nIGFueSBuZXcgYWN0aW9uIGRhdGEgb3IgZXhpc3RpbmcgYWN0aW9uIGRhdGEgKGluIHRoZSBjYXNlIG9mXG4gICAgLy8gYSByZXZhbGlkYXRpb24gaW50ZXJydXB0aW5nIGFuIGFjdGlvblJlbG9hZClcblxuXG4gICAgaWYgKCFpc1VuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb24pIHtcbiAgICAgIHJldmFsaWRhdGluZ0ZldGNoZXJzLmZvckVhY2goX3JlZjIgPT4ge1xuICAgICAgICBsZXQgW2tleV0gPSBfcmVmMjtcbiAgICAgICAgY29uc3QgZmV0Y2hlciA9IHN0YXRlLmZldGNoZXJzLmdldChrZXkpO1xuICAgICAgICBsZXQgcmV2YWxpZGF0aW5nRmV0Y2hlciA9IHtcbiAgICAgICAgICBzdGF0ZTogXCJsb2FkaW5nXCIsXG4gICAgICAgICAgZGF0YTogZmV0Y2hlciAmJiBmZXRjaGVyLmRhdGEsXG4gICAgICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgICAgIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdGUuZmV0Y2hlcnMuc2V0KGtleSwgcmV2YWxpZGF0aW5nRmV0Y2hlcik7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZVN0YXRlKF9leHRlbmRzKHtcbiAgICAgICAgbmF2aWdhdGlvbjogbG9hZGluZ05hdmlnYXRpb24sXG4gICAgICAgIGFjdGlvbkRhdGE6IHBlbmRpbmdBY3Rpb25EYXRhIHx8IHN0YXRlLmFjdGlvbkRhdGEgfHwgbnVsbFxuICAgICAgfSwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMubGVuZ3RoID4gMCA/IHtcbiAgICAgICAgZmV0Y2hlcnM6IG5ldyBNYXAoc3RhdGUuZmV0Y2hlcnMpXG4gICAgICB9IDoge30pKTtcbiAgICB9XG5cbiAgICBwZW5kaW5nTmF2aWdhdGlvbkxvYWRJZCA9ICsraW5jcmVtZW50aW5nTG9hZElkO1xuICAgIHJldmFsaWRhdGluZ0ZldGNoZXJzLmZvckVhY2goX3JlZjMgPT4ge1xuICAgICAgbGV0IFtrZXldID0gX3JlZjM7XG4gICAgICByZXR1cm4gZmV0Y2hDb250cm9sbGVycy5zZXQoa2V5LCBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIpO1xuICAgIH0pO1xuICAgIGxldCB7XG4gICAgICByZXN1bHRzLFxuICAgICAgbG9hZGVyUmVzdWx0cyxcbiAgICAgIGZldGNoZXJSZXN1bHRzXG4gICAgfSA9IGF3YWl0IGNhbGxMb2FkZXJzQW5kTWF5YmVSZXNvbHZlRGF0YShzdGF0ZS5tYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCByZXZhbGlkYXRpbmdGZXRjaGVycywgcmVxdWVzdCk7XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2hvcnRDaXJjdWl0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfSAvLyBDbGVhbiB1cCBfYWZ0ZXJfIGxvYWRlcnMgaGF2ZSBjb21wbGV0ZWQuICBEb24ndCBjbGVhbiB1cCBpZiB3ZSBzaG9ydFxuICAgIC8vIGNpcmN1aXRlZCBiZWNhdXNlIGZldGNoQ29udHJvbGxlcnMgd291bGQgaGF2ZSBiZWVuIGFib3J0ZWQgYW5kXG4gICAgLy8gcmVhc3NpZ25lZCB0byBuZXcgY29udHJvbGxlcnMgZm9yIHRoZSBuZXh0IG5hdmlnYXRpb25cblxuXG4gICAgcmV2YWxpZGF0aW5nRmV0Y2hlcnMuZm9yRWFjaChfcmVmNCA9PiB7XG4gICAgICBsZXQgW2tleV0gPSBfcmVmNDtcbiAgICAgIHJldHVybiBmZXRjaENvbnRyb2xsZXJzLmRlbGV0ZShrZXkpO1xuICAgIH0pOyAvLyBJZiBhbnkgbG9hZGVycyByZXR1cm5lZCBhIHJlZGlyZWN0IFJlc3BvbnNlLCBzdGFydCBhIG5ldyBSRVBMQUNFIG5hdmlnYXRpb25cblxuICAgIGxldCByZWRpcmVjdCA9IGZpbmRSZWRpcmVjdChyZXN1bHRzKTtcblxuICAgIGlmIChyZWRpcmVjdCkge1xuICAgICAgbGV0IHJlZGlyZWN0TmF2aWdhdGlvbiA9IGdldExvYWRlclJlZGlyZWN0KHN0YXRlLCByZWRpcmVjdCk7XG4gICAgICBhd2FpdCBzdGFydFJlZGlyZWN0TmF2aWdhdGlvbihyZWRpcmVjdCwgcmVkaXJlY3ROYXZpZ2F0aW9uLCByZXBsYWNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNob3J0Q2lyY3VpdGVkOiB0cnVlXG4gICAgICB9O1xuICAgIH0gLy8gUHJvY2VzcyBhbmQgY29tbWl0IG91dHB1dCBmcm9tIGxvYWRlcnNcblxuXG4gICAgbGV0IHtcbiAgICAgIGxvYWRlckRhdGEsXG4gICAgICBlcnJvcnNcbiAgICB9ID0gcHJvY2Vzc0xvYWRlckRhdGEoc3RhdGUsIG1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIGxvYWRlclJlc3VsdHMsIHBlbmRpbmdFcnJvciwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMsIGZldGNoZXJSZXN1bHRzLCBhY3RpdmVEZWZlcnJlZHMpOyAvLyBXaXJlIHVwIHN1YnNjcmliZXJzIHRvIHVwZGF0ZSBsb2FkZXJEYXRhIGFzIHByb21pc2VzIHNldHRsZVxuXG4gICAgYWN0aXZlRGVmZXJyZWRzLmZvckVhY2goKGRlZmVycmVkRGF0YSwgcm91dGVJZCkgPT4ge1xuICAgICAgZGVmZXJyZWREYXRhLnN1YnNjcmliZShhYm9ydGVkID0+IHtcbiAgICAgICAgLy8gTm90ZTogTm8gbmVlZCB0byB1cGRhdGVTdGF0ZSBoZXJlIHNpbmNlIHRoZSBUcmFja2VkUHJvbWlzZSBvblxuICAgICAgICAvLyBsb2FkZXJEYXRhIGlzIHN0YWJsZSBhY3Jvc3MgcmVzb2x2ZS9yZWplY3RcbiAgICAgICAgLy8gUmVtb3ZlIHRoaXMgaW5zdGFuY2UgaWYgd2Ugd2VyZSBhYm9ydGVkIG9yIGlmIHByb21pc2VzIGhhdmUgc2V0dGxlZFxuICAgICAgICBpZiAoYWJvcnRlZCB8fCBkZWZlcnJlZERhdGEuZG9uZSkge1xuICAgICAgICAgIGFjdGl2ZURlZmVycmVkcy5kZWxldGUocm91dGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG1hcmtGZXRjaFJlZGlyZWN0c0RvbmUoKTtcbiAgICBsZXQgZGlkQWJvcnRGZXRjaExvYWRzID0gYWJvcnRTdGFsZUZldGNoTG9hZHMocGVuZGluZ05hdmlnYXRpb25Mb2FkSWQpO1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBsb2FkZXJEYXRhLFxuICAgICAgZXJyb3JzXG4gICAgfSwgZGlkQWJvcnRGZXRjaExvYWRzIHx8IHJldmFsaWRhdGluZ0ZldGNoZXJzLmxlbmd0aCA+IDAgPyB7XG4gICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICB9IDoge30pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RmV0Y2hlcihrZXkpIHtcbiAgICByZXR1cm4gc3RhdGUuZmV0Y2hlcnMuZ2V0KGtleSkgfHwgSURMRV9GRVRDSEVSO1xuICB9IC8vIFRyaWdnZXIgYSBmZXRjaGVyIGxvYWQvc3VibWl0IGZvciB0aGUgZ2l2ZW4gZmV0Y2hlciBrZXlcblxuXG4gIGZ1bmN0aW9uIGZldGNoKGtleSwgcm91dGVJZCwgaHJlZiwgb3B0cykge1xuICAgIGlmICh0eXBlb2YgQWJvcnRDb250cm9sbGVyID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyb3V0ZXIuZmV0Y2goKSB3YXMgY2FsbGVkIGR1cmluZyB0aGUgc2VydmVyIHJlbmRlciwgYnV0IGl0IHNob3VsZG4ndCBiZS4gXCIgKyBcIllvdSBhcmUgbGlrZWx5IGNhbGxpbmcgYSB1c2VGZXRjaGVyKCkgbWV0aG9kIGluIHRoZSBib2R5IG9mIHlvdXIgY29tcG9uZW50LiBcIiArIFwiVHJ5IG1vdmluZyBpdCB0byBhIHVzZUVmZmVjdCBvciBhIGNhbGxiYWNrLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoZmV0Y2hDb250cm9sbGVycy5oYXMoa2V5KSkgYWJvcnRGZXRjaGVyKGtleSk7XG4gICAgbGV0IG1hdGNoZXMgPSBtYXRjaFJvdXRlcyhkYXRhUm91dGVzLCBocmVmLCBpbml0LmJhc2VuYW1lKTtcblxuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgc2V0RmV0Y2hlckVycm9yKGtleSwgcm91dGVJZCwgbmV3IEVycm9yUmVzcG9uc2UoNDA0LCBcIk5vdCBGb3VuZFwiLCBudWxsKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHtcbiAgICAgIHBhdGgsXG4gICAgICBzdWJtaXNzaW9uXG4gICAgfSA9IG5vcm1hbGl6ZU5hdmlnYXRlT3B0aW9ucyhocmVmLCBvcHRzLCB0cnVlKTtcbiAgICBsZXQgbWF0Y2ggPSBnZXRUYXJnZXRNYXRjaChtYXRjaGVzLCBwYXRoKTtcblxuICAgIGlmIChzdWJtaXNzaW9uKSB7XG4gICAgICBoYW5kbGVGZXRjaGVyQWN0aW9uKGtleSwgcm91dGVJZCwgcGF0aCwgbWF0Y2gsIHN1Ym1pc3Npb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gU3RvcmUgb2ZmIHRoZSBtYXRjaCBzbyB3ZSBjYW4gY2FsbCBpdCdzIHNob3VsZFJldmFsaWRhdGUgb24gc3Vic2VxdWVudFxuICAgIC8vIHJldmFsaWRhdGlvbnNcblxuXG4gICAgZmV0Y2hMb2FkTWF0Y2hlcy5zZXQoa2V5LCBbcGF0aCwgbWF0Y2hdKTtcbiAgICBoYW5kbGVGZXRjaGVyTG9hZGVyKGtleSwgcm91dGVJZCwgcGF0aCwgbWF0Y2gpO1xuICB9IC8vIENhbGwgdGhlIGFjdGlvbiBmb3IgdGhlIG1hdGNoZWQgZmV0Y2hlci5zdWJtaXQoKSwgYW5kIHRoZW4gaGFuZGxlIHJlZGlyZWN0cyxcbiAgLy8gZXJyb3JzLCBhbmQgcmV2YWxpZGF0aW9uXG5cblxuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVGZXRjaGVyQWN0aW9uKGtleSwgcm91dGVJZCwgcGF0aCwgbWF0Y2gsIHN1Ym1pc3Npb24pIHtcbiAgICBpbnRlcnJ1cHRBY3RpdmVMb2FkcygpO1xuICAgIGZldGNoTG9hZE1hdGNoZXMuZGVsZXRlKGtleSk7XG5cbiAgICBpZiAoIW1hdGNoLnJvdXRlLmFjdGlvbikge1xuICAgICAgbGV0IHtcbiAgICAgICAgZXJyb3JcbiAgICAgIH0gPSBnZXRNZXRob2ROb3RBbGxvd2VkUmVzdWx0KHBhdGgpO1xuICAgICAgc2V0RmV0Y2hlckVycm9yKGtleSwgcm91dGVJZCwgZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gUHV0IHRoaXMgZmV0Y2hlciBpbnRvIGl0J3Mgc3VibWl0dGluZyBzdGF0ZVxuXG5cbiAgICBsZXQgZXhpc3RpbmdGZXRjaGVyID0gc3RhdGUuZmV0Y2hlcnMuZ2V0KGtleSk7XG5cbiAgICBsZXQgZmV0Y2hlciA9IF9leHRlbmRzKHtcbiAgICAgIHN0YXRlOiBcInN1Ym1pdHRpbmdcIlxuICAgIH0sIHN1Ym1pc3Npb24sIHtcbiAgICAgIGRhdGE6IGV4aXN0aW5nRmV0Y2hlciAmJiBleGlzdGluZ0ZldGNoZXIuZGF0YVxuICAgIH0pO1xuXG4gICAgc3RhdGUuZmV0Y2hlcnMuc2V0KGtleSwgZmV0Y2hlcik7XG4gICAgdXBkYXRlU3RhdGUoe1xuICAgICAgZmV0Y2hlcnM6IG5ldyBNYXAoc3RhdGUuZmV0Y2hlcnMpXG4gICAgfSk7IC8vIENhbGwgdGhlIGFjdGlvbiBmb3IgdGhlIGZldGNoZXJcblxuICAgIGxldCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgbGV0IGZldGNoUmVxdWVzdCA9IGNyZWF0ZVJlcXVlc3QocGF0aCwgYWJvcnRDb250cm9sbGVyLnNpZ25hbCwgc3VibWlzc2lvbik7XG4gICAgZmV0Y2hDb250cm9sbGVycy5zZXQoa2V5LCBhYm9ydENvbnRyb2xsZXIpO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBhd2FpdCBjYWxsTG9hZGVyT3JBY3Rpb24oXCJhY3Rpb25cIiwgZmV0Y2hSZXF1ZXN0LCBtYXRjaCk7XG5cbiAgICBpZiAoZmV0Y2hSZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAvLyBXZSBjYW4gZGVsZXRlIHRoaXMgc28gbG9uZyBhcyB3ZSB3ZXJlbid0IGFib3J0ZWQgYnkgb3Ugb3VyIG93biBmZXRjaGVyXG4gICAgICAvLyByZS1zdWJtaXQgd2hpY2ggd291bGQgaGF2ZSBwdXQgX25ld18gY29udHJvbGxlciBpcyBpbiBmZXRjaENvbnRyb2xsZXJzXG4gICAgICBpZiAoZmV0Y2hDb250cm9sbGVycy5nZXQoa2V5KSA9PT0gYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAgIGZldGNoQ29udHJvbGxlcnMuZGVsZXRlKGtleSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNSZWRpcmVjdFJlc3VsdChhY3Rpb25SZXN1bHQpKSB7XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLmRlbGV0ZShrZXkpO1xuICAgICAgZmV0Y2hSZWRpcmVjdElkcy5hZGQoa2V5KTtcblxuICAgICAgbGV0IGxvYWRpbmdGZXRjaGVyID0gX2V4dGVuZHMoe1xuICAgICAgICBzdGF0ZTogXCJsb2FkaW5nXCJcbiAgICAgIH0sIHN1Ym1pc3Npb24sIHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgc3RhdGUuZmV0Y2hlcnMuc2V0KGtleSwgbG9hZGluZ0ZldGNoZXIpO1xuICAgICAgdXBkYXRlU3RhdGUoe1xuICAgICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgcmVkaXJlY3ROYXZpZ2F0aW9uID0gX2V4dGVuZHMoe1xuICAgICAgICBzdGF0ZTogXCJsb2FkaW5nXCIsXG4gICAgICAgIGxvY2F0aW9uOiBjcmVhdGVMb2NhdGlvbihzdGF0ZS5sb2NhdGlvbiwgYWN0aW9uUmVzdWx0LmxvY2F0aW9uKVxuICAgICAgfSwgc3VibWlzc2lvbik7XG5cbiAgICAgIGF3YWl0IHN0YXJ0UmVkaXJlY3ROYXZpZ2F0aW9uKGFjdGlvblJlc3VsdCwgcmVkaXJlY3ROYXZpZ2F0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFByb2Nlc3MgYW55IG5vbi1yZWRpcmVjdCBlcnJvcnMgdGhyb3duXG5cblxuICAgIGlmIChpc0Vycm9yUmVzdWx0KGFjdGlvblJlc3VsdCkpIHtcbiAgICAgIHNldEZldGNoZXJFcnJvcihrZXksIHJvdXRlSWQsIGFjdGlvblJlc3VsdC5lcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzRGVmZXJyZWRSZXN1bHQoYWN0aW9uUmVzdWx0KSkge1xuICAgICAgaW52YXJpYW50KGZhbHNlLCBcImRlZmVyKCkgaXMgbm90IHN1cHBvcnRlZCBpbiBhY3Rpb25zXCIpO1xuICAgIH0gLy8gU3RhcnQgdGhlIGRhdGEgbG9hZCBmb3IgY3VycmVudCBtYXRjaGVzLCBvciB0aGUgbmV4dCBsb2NhdGlvbiBpZiB3ZSdyZVxuICAgIC8vIGluIHRoZSBtaWRkbGUgb2YgYSBuYXZpZ2F0aW9uXG5cblxuICAgIGxldCBuZXh0TG9jYXRpb24gPSBzdGF0ZS5uYXZpZ2F0aW9uLmxvY2F0aW9uIHx8IHN0YXRlLmxvY2F0aW9uO1xuICAgIGxldCByZXZhbGlkYXRpb25SZXF1ZXN0ID0gY3JlYXRlUmVxdWVzdChuZXh0TG9jYXRpb24sIGFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICAgIGxldCBtYXRjaGVzID0gc3RhdGUubmF2aWdhdGlvbi5zdGF0ZSAhPT0gXCJpZGxlXCIgPyBtYXRjaFJvdXRlcyhkYXRhUm91dGVzLCBzdGF0ZS5uYXZpZ2F0aW9uLmxvY2F0aW9uLCBpbml0LmJhc2VuYW1lKSA6IHN0YXRlLm1hdGNoZXM7XG4gICAgaW52YXJpYW50KG1hdGNoZXMsIFwiRGlkbid0IGZpbmQgYW55IG1hdGNoZXMgYWZ0ZXIgZmV0Y2hlciBhY3Rpb25cIik7XG4gICAgbGV0IGxvYWRJZCA9ICsraW5jcmVtZW50aW5nTG9hZElkO1xuICAgIGZldGNoUmVsb2FkSWRzLnNldChrZXksIGxvYWRJZCk7XG5cbiAgICBsZXQgbG9hZEZldGNoZXIgPSBfZXh0ZW5kcyh7XG4gICAgICBzdGF0ZTogXCJsb2FkaW5nXCIsXG4gICAgICBkYXRhOiBhY3Rpb25SZXN1bHQuZGF0YVxuICAgIH0sIHN1Ym1pc3Npb24pO1xuXG4gICAgc3RhdGUuZmV0Y2hlcnMuc2V0KGtleSwgbG9hZEZldGNoZXIpO1xuICAgIGxldCBbbWF0Y2hlc1RvTG9hZCwgcmV2YWxpZGF0aW5nRmV0Y2hlcnNdID0gZ2V0TWF0Y2hlc1RvTG9hZChzdGF0ZSwgbWF0Y2hlcywgc3VibWlzc2lvbiwgbmV4dExvY2F0aW9uLCBpc1JldmFsaWRhdGlvblJlcXVpcmVkLCBjYW5jZWxsZWREZWZlcnJlZFJvdXRlcywgY2FuY2VsbGVkRmV0Y2hlckxvYWRzLCB7XG4gICAgICBbbWF0Y2gucm91dGUuaWRdOiBhY3Rpb25SZXN1bHQuZGF0YVxuICAgIH0sIHVuZGVmaW5lZCwgLy8gTm8gbmVlZCB0byBzZW5kIHRocm91Z2ggZXJyb3JzIHNpbmNlIHdlIHNob3J0IGNpcmN1aXQgYWJvdmVcbiAgICBmZXRjaExvYWRNYXRjaGVzKTsgLy8gUHV0IGFsbCByZXZhbGlkYXRpbmcgZmV0Y2hlcnMgaW50byB0aGUgbG9hZGluZyBzdGF0ZSwgZXhjZXB0IGZvciB0aGVcbiAgICAvLyBjdXJyZW50IGZldGNoZXIgd2hpY2ggd2Ugd2FudCB0byBrZWVwIGluIGl0J3MgY3VycmVudCBsb2FkaW5nIHN0YXRlIHdoaWNoXG4gICAgLy8gY29udGFpbnMgaXQncyBhY3Rpb24gc3VibWlzc2lvbiBpbmZvICsgYWN0aW9uIGRhdGFcblxuICAgIHJldmFsaWRhdGluZ0ZldGNoZXJzLmZpbHRlcihfcmVmNSA9PiB7XG4gICAgICBsZXQgW3N0YWxlS2V5XSA9IF9yZWY1O1xuICAgICAgcmV0dXJuIHN0YWxlS2V5ICE9PSBrZXk7XG4gICAgfSkuZm9yRWFjaChfcmVmNiA9PiB7XG4gICAgICBsZXQgW3N0YWxlS2V5XSA9IF9yZWY2O1xuICAgICAgbGV0IGV4aXN0aW5nRmV0Y2hlciA9IHN0YXRlLmZldGNoZXJzLmdldChzdGFsZUtleSk7XG4gICAgICBsZXQgcmV2YWxpZGF0aW5nRmV0Y2hlciA9IHtcbiAgICAgICAgc3RhdGU6IFwibG9hZGluZ1wiLFxuICAgICAgICBkYXRhOiBleGlzdGluZ0ZldGNoZXIgJiYgZXhpc3RpbmdGZXRjaGVyLmRhdGEsXG4gICAgICAgIGZvcm1NZXRob2Q6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtRGF0YTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgc3RhdGUuZmV0Y2hlcnMuc2V0KHN0YWxlS2V5LCByZXZhbGlkYXRpbmdGZXRjaGVyKTtcbiAgICAgIGZldGNoQ29udHJvbGxlcnMuc2V0KHN0YWxlS2V5LCBhYm9ydENvbnRyb2xsZXIpO1xuICAgIH0pO1xuICAgIHVwZGF0ZVN0YXRlKHtcbiAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgIH0pO1xuICAgIGxldCB7XG4gICAgICByZXN1bHRzLFxuICAgICAgbG9hZGVyUmVzdWx0cyxcbiAgICAgIGZldGNoZXJSZXN1bHRzXG4gICAgfSA9IGF3YWl0IGNhbGxMb2FkZXJzQW5kTWF5YmVSZXNvbHZlRGF0YShzdGF0ZS5tYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCByZXZhbGlkYXRpbmdGZXRjaGVycywgcmV2YWxpZGF0aW9uUmVxdWVzdCk7XG5cbiAgICBpZiAoYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmV0Y2hSZWxvYWRJZHMuZGVsZXRlKGtleSk7XG4gICAgZmV0Y2hDb250cm9sbGVycy5kZWxldGUoa2V5KTtcbiAgICByZXZhbGlkYXRpbmdGZXRjaGVycy5mb3JFYWNoKF9yZWY3ID0+IHtcbiAgICAgIGxldCBbc3RhbGVLZXldID0gX3JlZjc7XG4gICAgICByZXR1cm4gZmV0Y2hDb250cm9sbGVycy5kZWxldGUoc3RhbGVLZXkpO1xuICAgIH0pO1xuICAgIGxldCByZWRpcmVjdCA9IGZpbmRSZWRpcmVjdChyZXN1bHRzKTtcblxuICAgIGlmIChyZWRpcmVjdCkge1xuICAgICAgbGV0IHJlZGlyZWN0TmF2aWdhdGlvbiA9IGdldExvYWRlclJlZGlyZWN0KHN0YXRlLCByZWRpcmVjdCk7XG4gICAgICBhd2FpdCBzdGFydFJlZGlyZWN0TmF2aWdhdGlvbihyZWRpcmVjdCwgcmVkaXJlY3ROYXZpZ2F0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFByb2Nlc3MgYW5kIGNvbW1pdCBvdXRwdXQgZnJvbSBsb2FkZXJzXG5cblxuICAgIGxldCB7XG4gICAgICBsb2FkZXJEYXRhLFxuICAgICAgZXJyb3JzXG4gICAgfSA9IHByb2Nlc3NMb2FkZXJEYXRhKHN0YXRlLCBzdGF0ZS5tYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCBsb2FkZXJSZXN1bHRzLCB1bmRlZmluZWQsIHJldmFsaWRhdGluZ0ZldGNoZXJzLCBmZXRjaGVyUmVzdWx0cywgYWN0aXZlRGVmZXJyZWRzKTtcbiAgICBsZXQgZG9uZUZldGNoZXIgPSB7XG4gICAgICBzdGF0ZTogXCJpZGxlXCIsXG4gICAgICBkYXRhOiBhY3Rpb25SZXN1bHQuZGF0YSxcbiAgICAgIGZvcm1NZXRob2Q6IHVuZGVmaW5lZCxcbiAgICAgIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gICAgICBmb3JtRGF0YTogdW5kZWZpbmVkXG4gICAgfTtcbiAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCBkb25lRmV0Y2hlcik7XG4gICAgbGV0IGRpZEFib3J0RmV0Y2hMb2FkcyA9IGFib3J0U3RhbGVGZXRjaExvYWRzKGxvYWRJZCk7IC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW4gYSBuYXZpZ2F0aW9uIGxvYWRpbmcgc3RhdGUgYW5kIHRoaXMgZmV0Y2hlciBpc1xuICAgIC8vIG1vcmUgcmVjZW50IHRoYW4gdGhlIG5hdmlnYXRpb24sIHdlIHdhbnQgdGhlIG5ld2VyIGRhdGEgc28gYWJvcnQgdGhlXG4gICAgLy8gbmF2aWdhdGlvbiBhbmQgY29tcGxldGUgaXQgd2l0aCB0aGUgZmV0Y2hlciBkYXRhXG5cbiAgICBpZiAoc3RhdGUubmF2aWdhdGlvbi5zdGF0ZSA9PT0gXCJsb2FkaW5nXCIgJiYgbG9hZElkID4gcGVuZGluZ05hdmlnYXRpb25Mb2FkSWQpIHtcbiAgICAgIGludmFyaWFudChwZW5kaW5nQWN0aW9uLCBcIkV4cGVjdGVkIHBlbmRpbmcgYWN0aW9uXCIpO1xuICAgICAgcGVuZGluZ05hdmlnYXRpb25Db250cm9sbGVyICYmIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgY29tcGxldGVOYXZpZ2F0aW9uKHN0YXRlLm5hdmlnYXRpb24ubG9jYXRpb24sIHtcbiAgICAgICAgbWF0Y2hlcyxcbiAgICAgICAgbG9hZGVyRGF0YSxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBvdGhlcndpc2UganVzdCB1cGRhdGUgd2l0aCB0aGUgZmV0Y2hlciBkYXRhLCBwcmVzZXJ2aW5nIGFueSBleGlzdGluZ1xuICAgICAgLy8gbG9hZGVyRGF0YSBmb3IgbG9hZGVycyB0aGF0IGRpZCBub3QgbmVlZCB0byByZWxvYWQuICBXZSBoYXZlIHRvXG4gICAgICAvLyBtYW51YWxseSBtZXJnZSBoZXJlIHNpbmNlIHdlIGFyZW4ndCBnb2luZyB0aHJvdWdoIGNvbXBsZXRlTmF2aWdhdGlvblxuICAgICAgdXBkYXRlU3RhdGUoX2V4dGVuZHMoe1xuICAgICAgICBlcnJvcnMsXG4gICAgICAgIGxvYWRlckRhdGE6IG1lcmdlTG9hZGVyRGF0YShzdGF0ZS5sb2FkZXJEYXRhLCBsb2FkZXJEYXRhLCBtYXRjaGVzKVxuICAgICAgfSwgZGlkQWJvcnRGZXRjaExvYWRzID8ge1xuICAgICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICAgIH0gOiB7fSkpO1xuICAgICAgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSAvLyBDYWxsIHRoZSBtYXRjaGVkIGxvYWRlciBmb3IgZmV0Y2hlci5sb2FkKCksIGhhbmRsaW5nIHJlZGlyZWN0cywgZXJyb3JzLCBldGMuXG5cblxuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVGZXRjaGVyTG9hZGVyKGtleSwgcm91dGVJZCwgcGF0aCwgbWF0Y2gpIHtcbiAgICBsZXQgZXhpc3RpbmdGZXRjaGVyID0gc3RhdGUuZmV0Y2hlcnMuZ2V0KGtleSk7IC8vIFB1dCB0aGlzIGZldGNoZXIgaW50byBpdCdzIGxvYWRpbmcgc3RhdGVcblxuICAgIGxldCBsb2FkaW5nRmV0Y2hlciA9IHtcbiAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgIGZvcm1NZXRob2Q6IHVuZGVmaW5lZCxcbiAgICAgIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gICAgICBmb3JtRGF0YTogdW5kZWZpbmVkLFxuICAgICAgZGF0YTogZXhpc3RpbmdGZXRjaGVyICYmIGV4aXN0aW5nRmV0Y2hlci5kYXRhXG4gICAgfTtcbiAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCBsb2FkaW5nRmV0Y2hlcik7XG4gICAgdXBkYXRlU3RhdGUoe1xuICAgICAgZmV0Y2hlcnM6IG5ldyBNYXAoc3RhdGUuZmV0Y2hlcnMpXG4gICAgfSk7IC8vIENhbGwgdGhlIGxvYWRlciBmb3IgdGhpcyBmZXRjaGVyIHJvdXRlIG1hdGNoXG5cbiAgICBsZXQgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGxldCBmZXRjaFJlcXVlc3QgPSBjcmVhdGVSZXF1ZXN0KHBhdGgsIGFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICAgIGZldGNoQ29udHJvbGxlcnMuc2V0KGtleSwgYWJvcnRDb250cm9sbGVyKTtcbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbExvYWRlck9yQWN0aW9uKFwibG9hZGVyXCIsIGZldGNoUmVxdWVzdCwgbWF0Y2gpOyAvLyBEZWZlcnJlZCBpc24ndCBzdXBwb3J0ZWQgb3IgZmV0Y2hlciBsb2FkcywgYXdhaXQgZXZlcnl0aGluZyBhbmQgdHJlYXQgaXRcbiAgICAvLyBhcyBhIG5vcm1hbCBsb2FkLiAgcmVzb2x2ZURlZmVycmVkRGF0YSB3aWxsIHJldHVybiB1bmRlZmluZWQgaWYgdGhpc1xuICAgIC8vIGZldGNoZXIgZ2V0cyBhYm9ydGVkLCBzbyB3ZSBqdXN0IGxlYXZlIHJlc3VsdCB1bnRvdWNoZWQgYW5kIHNob3J0IGNpcmN1aXRcbiAgICAvLyBiZWxvdyBpZiB0aGF0IGhhcHBlbnNcblxuICAgIGlmIChpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIHJlc3VsdCA9IChhd2FpdCByZXNvbHZlRGVmZXJyZWREYXRhKHJlc3VsdCwgZmV0Y2hSZXF1ZXN0LnNpZ25hbCwgdHJ1ZSkpIHx8IHJlc3VsdDtcbiAgICB9IC8vIFdlIGNhbiBkZWxldGUgdGhpcyBzbyBsb25nIGFzIHdlIHdlcmVuJ3QgYWJvcnRlZCBieSBvdSBvdXIgb3duIGZldGNoZXJcbiAgICAvLyByZS1sb2FkIHdoaWNoIHdvdWxkIGhhdmUgcHV0IF9uZXdfIGNvbnRyb2xsZXIgaXMgaW4gZmV0Y2hDb250cm9sbGVyc1xuXG5cbiAgICBpZiAoZmV0Y2hDb250cm9sbGVycy5nZXQoa2V5KSA9PT0gYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIGlmIChmZXRjaFJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHRoZSBsb2FkZXIgdGhyZXcgYSByZWRpcmVjdCBSZXNwb25zZSwgc3RhcnQgYSBuZXcgUkVQTEFDRSBuYXZpZ2F0aW9uXG5cblxuICAgIGlmIChpc1JlZGlyZWN0UmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIGxldCByZWRpcmVjdE5hdmlnYXRpb24gPSBnZXRMb2FkZXJSZWRpcmVjdChzdGF0ZSwgcmVzdWx0KTtcbiAgICAgIGF3YWl0IHN0YXJ0UmVkaXJlY3ROYXZpZ2F0aW9uKHJlc3VsdCwgcmVkaXJlY3ROYXZpZ2F0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFByb2Nlc3MgYW55IG5vbi1yZWRpcmVjdCBlcnJvcnMgdGhyb3duXG5cblxuICAgIGlmIChpc0Vycm9yUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIGxldCBib3VuZGFyeU1hdGNoID0gZmluZE5lYXJlc3RCb3VuZGFyeShzdGF0ZS5tYXRjaGVzLCByb3V0ZUlkKTtcbiAgICAgIHN0YXRlLmZldGNoZXJzLmRlbGV0ZShrZXkpOyAvLyBUT0RPOiBJbiByZW1peCwgdGhpcyB3b3VsZCByZXNldCB0byBJRExFX05BVklHQVRJT04gaWYgaXQgd2FzIGEgY2F0Y2ggLVxuICAgICAgLy8gZG8gd2UgbmVlZCB0byBiZWhhdmUgYW55IGRpZmZlcmVudGx5IHdpdGggb3VyIG5vbi1yZWRpcmVjdCBlcnJvcnM/XG4gICAgICAvLyBXaGF0IGlmIGl0IHdhcyBhIG5vbi1yZWRpcmVjdCBSZXNwb25zZT9cblxuICAgICAgdXBkYXRlU3RhdGUoe1xuICAgICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycyksXG4gICAgICAgIGVycm9yczoge1xuICAgICAgICAgIFtib3VuZGFyeU1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmVycm9yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGludmFyaWFudCghaXNEZWZlcnJlZFJlc3VsdChyZXN1bHQpLCBcIlVuaGFuZGxlZCBmZXRjaGVyIGRlZmVycmVkIGRhdGFcIik7IC8vIFB1dCB0aGUgZmV0Y2hlciBiYWNrIGludG8gYW4gaWRsZSBzdGF0ZVxuXG4gICAgbGV0IGRvbmVGZXRjaGVyID0ge1xuICAgICAgc3RhdGU6IFwiaWRsZVwiLFxuICAgICAgZGF0YTogcmVzdWx0LmRhdGEsXG4gICAgICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gICAgICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICAgICAgZm9ybURhdGE6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgc3RhdGUuZmV0Y2hlcnMuc2V0KGtleSwgZG9uZUZldGNoZXIpO1xuICAgIHVwZGF0ZVN0YXRlKHtcbiAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGhhbmRsZSByZWRpcmVjdHMgcmV0dXJuZWQgZnJvbSBhbiBhY3Rpb24gb3IgbG9hZGVyLlxuICAgKiBOb3JtYWxseSwgYSByZWRpcmVjdCBcInJlcGxhY2VzXCIgdGhlIG5hdmlnYXRpb24gdGhhdCB0cmlnZ2VyZWQgaXQuICBTbywgZm9yXG4gICAqIGV4YW1wbGU6XG4gICAqXG4gICAqICAtIHVzZXIgaXMgb24gL2FcbiAgICogIC0gdXNlciBjbGlja3MgYSBsaW5rIHRvIC9iXG4gICAqICAtIGxvYWRlciBmb3IgL2IgcmVkaXJlY3RzIHRvIC9jXG4gICAqXG4gICAqIEluIGEgbm9uLUpTIGFwcCB0aGUgYnJvd3NlciB3b3VsZCB0cmFjayB0aGUgaW4tZmxpZ2h0IG5hdmlnYXRpb24gdG8gL2IgYW5kXG4gICAqIHRoZW4gcmVwbGFjZSBpdCB3aXRoIC9jIHdoZW4gaXQgZW5jb3VudGVyZWQgdGhlIHJlZGlyZWN0IHJlc3BvbnNlLiAgSW5cbiAgICogdGhlIGVuZCBpdCB3b3VsZCBvbmx5IGV2ZXIgdXBkYXRlIHRoZSBVUkwgYmFyIHdpdGggL2MuXG4gICAqXG4gICAqIEluIGNsaWVudC1zaWRlIHJvdXRpbmcgdXNpbmcgcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZSwgd2UgYWltIHRvIGVtdWxhdGVcbiAgICogdGhpcyBiZWhhdmlvciBhbmQgd2UgYWxzbyBkbyBub3QgdXBkYXRlIGhpc3RvcnkgdW50aWwgdGhlIGVuZCBvZiB0aGVcbiAgICogbmF2aWdhdGlvbiAoaW5jbHVkaW5nIHByb2Nlc3NlZCByZWRpcmVjdHMpLiAgVGhpcyBtZWFucyB0aGF0IHdlIG5ldmVyXG4gICAqIGFjdHVhbGx5IHRvdWNoIGhpc3RvcnkgdW50aWwgd2UndmUgcHJvY2Vzc2VkIHJlZGlyZWN0cywgc28gd2UganVzdCB1c2VcbiAgICogdGhlIGhpc3RvcnkgYWN0aW9uIGZyb20gdGhlIG9yaWdpbmFsIG5hdmlnYXRpb24gKFBVU0ggb3IgUkVQTEFDRSkuXG4gICAqL1xuXG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RhcnRSZWRpcmVjdE5hdmlnYXRpb24ocmVkaXJlY3QsIG5hdmlnYXRpb24sIHJlcGxhY2UpIHtcbiAgICBpZiAocmVkaXJlY3QucmV2YWxpZGF0ZSkge1xuICAgICAgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaW52YXJpYW50KG5hdmlnYXRpb24ubG9jYXRpb24sIFwiRXhwZWN0ZWQgYSBsb2NhdGlvbiBvbiB0aGUgcmVkaXJlY3QgbmF2aWdhdGlvblwiKTsgLy8gVGhlcmUncyBubyBuZWVkIHRvIGFib3J0IG9uIHJlZGlyZWN0cywgc2luY2Ugd2UgZG9uJ3QgZGV0ZWN0IHRoZVxuICAgIC8vIHJlZGlyZWN0IHVudGlsIHRoZSBhY3Rpb24vbG9hZGVycyBoYXZlIHNldHRsZWRcblxuICAgIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciA9IG51bGw7XG4gICAgbGV0IHJlZGlyZWN0SGlzdG9yeUFjdGlvbiA9IHJlcGxhY2UgPT09IHRydWUgPyBBY3Rpb24uUmVwbGFjZSA6IEFjdGlvbi5QdXNoO1xuICAgIGF3YWl0IHN0YXJ0TmF2aWdhdGlvbihyZWRpcmVjdEhpc3RvcnlBY3Rpb24sIG5hdmlnYXRpb24ubG9jYXRpb24sIHtcbiAgICAgIG92ZXJyaWRlTmF2aWdhdGlvbjogbmF2aWdhdGlvblxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2FsbExvYWRlcnNBbmRNYXliZVJlc29sdmVEYXRhKGN1cnJlbnRNYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCBmZXRjaGVyc1RvTG9hZCwgcmVxdWVzdCkge1xuICAgIC8vIENhbGwgYWxsIG5hdmlnYXRpb24gbG9hZGVycyBhbmQgcmV2YWxpZGF0aW5nIGZldGNoZXIgbG9hZGVycyBpbiBwYXJhbGxlbCxcbiAgICAvLyB0aGVuIHNsaWNlIG9mZiB0aGUgcmVzdWx0cyBpbnRvIHNlcGFyYXRlIGFycmF5cyBzbyB3ZSBjYW4gaGFuZGxlIHRoZW1cbiAgICAvLyBhY2NvcmRpbmdseVxuICAgIGxldCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoWy4uLm1hdGNoZXNUb0xvYWQubWFwKG0gPT4gY2FsbExvYWRlck9yQWN0aW9uKFwibG9hZGVyXCIsIHJlcXVlc3QsIG0pKSwgLi4uZmV0Y2hlcnNUb0xvYWQubWFwKF9yZWY4ID0+IHtcbiAgICAgIGxldCBbLCBocmVmLCBtYXRjaF0gPSBfcmVmODtcbiAgICAgIHJldHVybiBjYWxsTG9hZGVyT3JBY3Rpb24oXCJsb2FkZXJcIiwgY3JlYXRlUmVxdWVzdChocmVmLCByZXF1ZXN0LnNpZ25hbCksIG1hdGNoKTtcbiAgICB9KV0pO1xuICAgIGxldCBsb2FkZXJSZXN1bHRzID0gcmVzdWx0cy5zbGljZSgwLCBtYXRjaGVzVG9Mb2FkLmxlbmd0aCk7XG4gICAgbGV0IGZldGNoZXJSZXN1bHRzID0gcmVzdWx0cy5zbGljZShtYXRjaGVzVG9Mb2FkLmxlbmd0aCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW3Jlc29sdmVEZWZlcnJlZFJlc3VsdHMoY3VycmVudE1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIGxvYWRlclJlc3VsdHMsIHJlcXVlc3Quc2lnbmFsLCBmYWxzZSwgc3RhdGUubG9hZGVyRGF0YSksIHJlc29sdmVEZWZlcnJlZFJlc3VsdHMoY3VycmVudE1hdGNoZXMsIGZldGNoZXJzVG9Mb2FkLm1hcChfcmVmOSA9PiB7XG4gICAgICBsZXQgWywsIG1hdGNoXSA9IF9yZWY5O1xuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pLCBmZXRjaGVyUmVzdWx0cywgcmVxdWVzdC5zaWduYWwsIHRydWUpXSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdHMsXG4gICAgICBsb2FkZXJSZXN1bHRzLFxuICAgICAgZmV0Y2hlclJlc3VsdHNcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJydXB0QWN0aXZlTG9hZHMoKSB7XG4gICAgLy8gRXZlcnkgaW50ZXJydXB0aW9uIHRyaWdnZXJzIGEgcmV2YWxpZGF0aW9uXG4gICAgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCA9IHRydWU7IC8vIENhbmNlbCBwZW5kaW5nIHJvdXRlLWxldmVsIGRlZmVycmVkcyBhbmQgbWFyayBjYW5jZWxsZWQgcm91dGVzIGZvclxuICAgIC8vIHJldmFsaWRhdGlvblxuXG4gICAgY2FuY2VsbGVkRGVmZXJyZWRSb3V0ZXMucHVzaCguLi5jYW5jZWxBY3RpdmVEZWZlcnJlZHMoKSk7IC8vIEFib3J0IGluLWZsaWdodCBmZXRjaGVyIGxvYWRzXG5cbiAgICBmZXRjaExvYWRNYXRjaGVzLmZvckVhY2goKF8sIGtleSkgPT4ge1xuICAgICAgaWYgKGZldGNoQ29udHJvbGxlcnMuaGFzKGtleSkpIHtcbiAgICAgICAgY2FuY2VsbGVkRmV0Y2hlckxvYWRzLnB1c2goa2V5KTtcbiAgICAgICAgYWJvcnRGZXRjaGVyKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRGZXRjaGVyRXJyb3Ioa2V5LCByb3V0ZUlkLCBlcnJvcikge1xuICAgIGxldCBib3VuZGFyeU1hdGNoID0gZmluZE5lYXJlc3RCb3VuZGFyeShzdGF0ZS5tYXRjaGVzLCByb3V0ZUlkKTtcbiAgICBkZWxldGVGZXRjaGVyKGtleSk7XG4gICAgdXBkYXRlU3RhdGUoe1xuICAgICAgZXJyb3JzOiB7XG4gICAgICAgIFtib3VuZGFyeU1hdGNoLnJvdXRlLmlkXTogZXJyb3JcbiAgICAgIH0sXG4gICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZUZldGNoZXIoa2V5KSB7XG4gICAgaWYgKGZldGNoQ29udHJvbGxlcnMuaGFzKGtleSkpIGFib3J0RmV0Y2hlcihrZXkpO1xuICAgIGZldGNoTG9hZE1hdGNoZXMuZGVsZXRlKGtleSk7XG4gICAgZmV0Y2hSZWxvYWRJZHMuZGVsZXRlKGtleSk7XG4gICAgZmV0Y2hSZWRpcmVjdElkcy5kZWxldGUoa2V5KTtcbiAgICBzdGF0ZS5mZXRjaGVycy5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFib3J0RmV0Y2hlcihrZXkpIHtcbiAgICBsZXQgY29udHJvbGxlciA9IGZldGNoQ29udHJvbGxlcnMuZ2V0KGtleSk7XG4gICAgaW52YXJpYW50KGNvbnRyb2xsZXIsIFwiRXhwZWN0ZWQgZmV0Y2ggY29udHJvbGxlcjogXCIgKyBrZXkpO1xuICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBmZXRjaENvbnRyb2xsZXJzLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFya0ZldGNoZXJzRG9uZShrZXlzKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgICAgIGxldCBmZXRjaGVyID0gZ2V0RmV0Y2hlcihrZXkpO1xuICAgICAgbGV0IGRvbmVGZXRjaGVyID0ge1xuICAgICAgICBzdGF0ZTogXCJpZGxlXCIsXG4gICAgICAgIGRhdGE6IGZldGNoZXIuZGF0YSxcbiAgICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCBkb25lRmV0Y2hlcik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya0ZldGNoUmVkaXJlY3RzRG9uZSgpIHtcbiAgICBsZXQgZG9uZUtleXMgPSBbXTtcblxuICAgIGZvciAobGV0IGtleSBvZiBmZXRjaFJlZGlyZWN0SWRzKSB7XG4gICAgICBsZXQgZmV0Y2hlciA9IHN0YXRlLmZldGNoZXJzLmdldChrZXkpO1xuICAgICAgaW52YXJpYW50KGZldGNoZXIsIFwiRXhwZWN0ZWQgZmV0Y2hlcjogXCIgKyBrZXkpO1xuXG4gICAgICBpZiAoZmV0Y2hlci5zdGF0ZSA9PT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgICAgZmV0Y2hSZWRpcmVjdElkcy5kZWxldGUoa2V5KTtcbiAgICAgICAgZG9uZUtleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1hcmtGZXRjaGVyc0RvbmUoZG9uZUtleXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWJvcnRTdGFsZUZldGNoTG9hZHMobGFuZGVkSWQpIHtcbiAgICBsZXQgeWVldGVkS2V5cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgW2tleSwgaWRdIG9mIGZldGNoUmVsb2FkSWRzKSB7XG4gICAgICBpZiAoaWQgPCBsYW5kZWRJZCkge1xuICAgICAgICBsZXQgZmV0Y2hlciA9IHN0YXRlLmZldGNoZXJzLmdldChrZXkpO1xuICAgICAgICBpbnZhcmlhbnQoZmV0Y2hlciwgXCJFeHBlY3RlZCBmZXRjaGVyOiBcIiArIGtleSk7XG5cbiAgICAgICAgaWYgKGZldGNoZXIuc3RhdGUgPT09IFwibG9hZGluZ1wiKSB7XG4gICAgICAgICAgYWJvcnRGZXRjaGVyKGtleSk7XG4gICAgICAgICAgZmV0Y2hSZWxvYWRJZHMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgeWVldGVkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrRmV0Y2hlcnNEb25lKHllZXRlZEtleXMpO1xuICAgIHJldHVybiB5ZWV0ZWRLZXlzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWxBY3RpdmVEZWZlcnJlZHMocHJlZGljYXRlKSB7XG4gICAgbGV0IGNhbmNlbGxlZFJvdXRlSWRzID0gW107XG4gICAgYWN0aXZlRGVmZXJyZWRzLmZvckVhY2goKGRmZCwgcm91dGVJZCkgPT4ge1xuICAgICAgaWYgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKHJvdXRlSWQpKSB7XG4gICAgICAgIC8vIENhbmNlbCB0aGUgZGVmZXJyZWQgLSBidXQgZG8gbm90IHJlbW92ZSBmcm9tIGFjdGl2ZURlZmVycmVkcyBoZXJlIC1cbiAgICAgICAgLy8gd2UgcmVseSBvbiB0aGUgc3Vic2NyaWJlcnMgdG8gZG8gdGhhdCBzbyBvdXIgdGVzdHMgY2FuIGFzc2VydCBwcm9wZXJcbiAgICAgICAgLy8gY2xlYW51cCB2aWEgX2ludGVybmFsQWN0aXZlRGVmZXJyZWRzXG4gICAgICAgIGRmZC5jYW5jZWwoKTtcbiAgICAgICAgY2FuY2VsbGVkUm91dGVJZHMucHVzaChyb3V0ZUlkKTtcbiAgICAgICAgYWN0aXZlRGVmZXJyZWRzLmRlbGV0ZShyb3V0ZUlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2FuY2VsbGVkUm91dGVJZHM7XG4gIH0gLy8gT3B0IGluIHRvIGNhcHR1cmluZyBhbmQgcmVwb3J0aW5nIHNjcm9sbCBwb3NpdGlvbnMgZHVyaW5nIG5hdmlnYXRpb25zLFxuICAvLyB1c2VkIGJ5IHRoZSA8U2Nyb2xsUmVzdG9yYXRpb24+IGNvbXBvbmVudFxuXG5cbiAgZnVuY3Rpb24gZW5hYmxlU2Nyb2xsUmVzdG9yYXRpb24ocG9zaXRpb25zLCBnZXRQb3NpdGlvbiwgZ2V0S2V5KSB7XG4gICAgc2F2ZWRTY3JvbGxQb3NpdGlvbnMgPSBwb3NpdGlvbnM7XG4gICAgZ2V0U2Nyb2xsUG9zaXRpb24gPSBnZXRQb3NpdGlvbjtcblxuICAgIGdldFNjcm9sbFJlc3RvcmF0aW9uS2V5ID0gZ2V0S2V5IHx8IChsb2NhdGlvbiA9PiBsb2NhdGlvbi5rZXkpOyAvLyBQZXJmb3JtIGluaXRpYWwgaHlkcmF0aW9uIHNjcm9sbCByZXN0b3JhdGlvbiwgc2luY2Ugd2UgbWlzcyB0aGUgYm9hdCBvblxuICAgIC8vIHRoZSBpbml0aWFsIHVwZGF0ZVN0YXRlKCkgYmVjYXVzZSB3ZSd2ZSBub3QgeWV0IHJlbmRlcmVkIDxTY3JvbGxSZXN0b3JhdGlvbi8+XG4gICAgLy8gYW5kIHRoZXJlZm9yZSBoYXZlIG5vIHNhdmVkU2Nyb2xsUG9zaXRpb25zIGF2YWlsYWJsZVxuXG5cbiAgICBpZiAoIWluaXRpYWxTY3JvbGxSZXN0b3JlZCAmJiBzdGF0ZS5uYXZpZ2F0aW9uID09PSBJRExFX05BVklHQVRJT04pIHtcbiAgICAgIGluaXRpYWxTY3JvbGxSZXN0b3JlZCA9IHRydWU7XG4gICAgICBsZXQgeSA9IGdldFNhdmVkU2Nyb2xsUG9zaXRpb24oc3RhdGUubG9jYXRpb24sIHN0YXRlLm1hdGNoZXMpO1xuXG4gICAgICBpZiAoeSAhPSBudWxsKSB7XG4gICAgICAgIHVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICByZXN0b3JlU2Nyb2xsUG9zaXRpb246IHlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHNhdmVkU2Nyb2xsUG9zaXRpb25zID0gbnVsbDtcbiAgICAgIGdldFNjcm9sbFBvc2l0aW9uID0gbnVsbDtcbiAgICAgIGdldFNjcm9sbFJlc3RvcmF0aW9uS2V5ID0gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2F2ZVNjcm9sbFBvc2l0aW9uKGxvY2F0aW9uLCBtYXRjaGVzKSB7XG4gICAgaWYgKHNhdmVkU2Nyb2xsUG9zaXRpb25zICYmIGdldFNjcm9sbFJlc3RvcmF0aW9uS2V5ICYmIGdldFNjcm9sbFBvc2l0aW9uKSB7XG4gICAgICBsZXQgdXNlck1hdGNoZXMgPSBtYXRjaGVzLm1hcChtID0+IGNyZWF0ZVVzZU1hdGNoZXNNYXRjaChtLCBzdGF0ZS5sb2FkZXJEYXRhKSk7XG4gICAgICBsZXQga2V5ID0gZ2V0U2Nyb2xsUmVzdG9yYXRpb25LZXkobG9jYXRpb24sIHVzZXJNYXRjaGVzKSB8fCBsb2NhdGlvbi5rZXk7XG4gICAgICBzYXZlZFNjcm9sbFBvc2l0aW9uc1trZXldID0gZ2V0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTYXZlZFNjcm9sbFBvc2l0aW9uKGxvY2F0aW9uLCBtYXRjaGVzKSB7XG4gICAgaWYgKHNhdmVkU2Nyb2xsUG9zaXRpb25zICYmIGdldFNjcm9sbFJlc3RvcmF0aW9uS2V5ICYmIGdldFNjcm9sbFBvc2l0aW9uKSB7XG4gICAgICBsZXQgdXNlck1hdGNoZXMgPSBtYXRjaGVzLm1hcChtID0+IGNyZWF0ZVVzZU1hdGNoZXNNYXRjaChtLCBzdGF0ZS5sb2FkZXJEYXRhKSk7XG4gICAgICBsZXQga2V5ID0gZ2V0U2Nyb2xsUmVzdG9yYXRpb25LZXkobG9jYXRpb24sIHVzZXJNYXRjaGVzKSB8fCBsb2NhdGlvbi5rZXk7XG4gICAgICBsZXQgeSA9IHNhdmVkU2Nyb2xsUG9zaXRpb25zW2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgeSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4geTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJvdXRlciA9IHtcbiAgICBnZXQgYmFzZW5hbWUoKSB7XG4gICAgICByZXR1cm4gaW5pdC5iYXNlbmFtZTtcbiAgICB9LFxuXG4gICAgZ2V0IHN0YXRlKCkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH0sXG5cbiAgICBnZXQgcm91dGVzKCkge1xuICAgICAgcmV0dXJuIGRhdGFSb3V0ZXM7XG4gICAgfSxcblxuICAgIGluaXRpYWxpemUsXG4gICAgc3Vic2NyaWJlLFxuICAgIGVuYWJsZVNjcm9sbFJlc3RvcmF0aW9uLFxuICAgIG5hdmlnYXRlLFxuICAgIGZldGNoLFxuICAgIHJldmFsaWRhdGUsXG4gICAgY3JlYXRlSHJlZixcbiAgICBnZXRGZXRjaGVyLFxuICAgIGRlbGV0ZUZldGNoZXIsXG4gICAgZGlzcG9zZSxcbiAgICBfaW50ZXJuYWxGZXRjaENvbnRyb2xsZXJzOiBmZXRjaENvbnRyb2xsZXJzLFxuICAgIF9pbnRlcm5hbEFjdGl2ZURlZmVycmVkczogYWN0aXZlRGVmZXJyZWRzXG4gIH07XG4gIHJldHVybiByb3V0ZXI7XG59IC8vI2VuZHJlZ2lvblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vI3JlZ2lvbiBjcmVhdGVTdGF0aWNIYW5kbGVyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiB1bnN0YWJsZV9jcmVhdGVTdGF0aWNIYW5kbGVyKHJvdXRlcykge1xuICBpbnZhcmlhbnQocm91dGVzLmxlbmd0aCA+IDAsIFwiWW91IG11c3QgcHJvdmlkZSBhIG5vbi1lbXB0eSByb3V0ZXMgYXJyYXkgdG8gdW5zdGFibGVfY3JlYXRlU3RhdGljSGFuZGxlclwiKTtcbiAgbGV0IGRhdGFSb3V0ZXMgPSBjb252ZXJ0Um91dGVzVG9EYXRhUm91dGVzKHJvdXRlcyk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcXVlcnkocmVxdWVzdCkge1xuICAgIGxldCB7XG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJlc3VsdFxuICAgIH0gPSBhd2FpdCBxdWVyeUltcGwocmVxdWVzdCk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSAvLyBXaGVuIHJldHVybmluZyBTdGF0aWNIYW5kbGVyQ29udGV4dCwgd2UgcGF0Y2ggYmFjayBpbiB0aGUgbG9jYXRpb24gaGVyZVxuICAgIC8vIHNpbmNlIHdlIG5lZWQgaXQgZm9yIFJlYWN0IENvbnRleHQuICBCdXQgdGhpcyBoZWxwcyBrZWVwIG91ciBzdWJtaXQgYW5kXG4gICAgLy8gbG9hZFJvdXRlRGF0YSBvcGVyYXRpbmcgb24gYSBSZXF1ZXN0IGluc3RlYWQgb2YgYSBMb2NhdGlvblxuXG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgbG9jYXRpb25cbiAgICB9LCByZXN1bHQpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcXVlcnlSb3V0ZShyZXF1ZXN0LCByb3V0ZUlkKSB7XG4gICAgbGV0IHtcbiAgICAgIHJlc3VsdFxuICAgIH0gPSBhd2FpdCBxdWVyeUltcGwocmVxdWVzdCwgcm91dGVJZCk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSAvLyBQaWNrIG9mZiB0aGUgcmlnaHQgc3RhdGUgdmFsdWUgdG8gcmV0dXJuXG5cblxuICAgIGxldCByb3V0ZURhdGEgPSBbcmVzdWx0LmVycm9ycywgcmVzdWx0LmFjdGlvbkRhdGEsIHJlc3VsdC5sb2FkZXJEYXRhXS5maW5kKHYgPT4gdik7XG4gICAgbGV0IHZhbHVlID0gT2JqZWN0LnZhbHVlcyhyb3V0ZURhdGEgfHwge30pWzBdO1xuXG4gICAgaWYgKGlzUm91dGVFcnJvclJlc3BvbnNlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSh2YWx1ZS5kYXRhLCB7XG4gICAgICAgIHN0YXR1czogdmFsdWUuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB2YWx1ZS5zdGF0dXNUZXh0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBxdWVyeUltcGwocmVxdWVzdCwgcm91dGVJZCkge1xuICAgIGludmFyaWFudChyZXF1ZXN0Lm1ldGhvZCAhPT0gXCJIRUFEXCIsIFwicXVlcnkoKS9xdWVyeVJvdXRlKCkgZG8gbm90IHN1cHBvcnQgSEVBRCByZXF1ZXN0c1wiKTtcbiAgICBpbnZhcmlhbnQocmVxdWVzdC5zaWduYWwsIFwicXVlcnkoKS9xdWVyeVJvdXRlKCkgcmVxdWVzdHMgbXVzdCBjb250YWluIGFuIEFib3J0Q29udHJvbGxlciBzaWduYWxcIik7XG4gICAgbGV0IHtcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbWF0Y2hlcyxcbiAgICAgIHNob3J0Q2lyY3VpdFN0YXRlXG4gICAgfSA9IG1hdGNoUmVxdWVzdChyZXF1ZXN0LCByb3V0ZUlkKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoc2hvcnRDaXJjdWl0U3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICByZXN1bHQ6IHNob3J0Q2lyY3VpdFN0YXRlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gXCJHRVRcIikge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgc3VibWl0KHJlcXVlc3QsIG1hdGNoZXMsIGdldFRhcmdldE1hdGNoKG1hdGNoZXMsIGxvY2F0aW9uKSwgcm91dGVJZCAhPSBudWxsKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICByZXN1bHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGxvYWRSb3V0ZURhdGEocmVxdWVzdCwgbWF0Y2hlcywgcm91dGVJZCAhPSBudWxsKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByZXN1bHQ6IF9leHRlbmRzKHt9LCByZXN1bHQsIHtcbiAgICAgICAgICBhY3Rpb25EYXRhOiBudWxsLFxuICAgICAgICAgIGFjdGlvbkhlYWRlcnM6IHt9XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICByZXN1bHQ6IGVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzdWJtaXQocmVxdWVzdCwgbWF0Y2hlcywgYWN0aW9uTWF0Y2gsIGlzUm91dGVSZXF1ZXN0KSB7XG4gICAgbGV0IHJlc3VsdDtcblxuICAgIGlmICghYWN0aW9uTWF0Y2gucm91dGUuYWN0aW9uKSB7XG4gICAgICBsZXQgaHJlZiA9IGNyZWF0ZUhyZWYobmV3IFVSTChyZXF1ZXN0LnVybCkpO1xuICAgICAgcmVzdWx0ID0gZ2V0TWV0aG9kTm90QWxsb3dlZFJlc3VsdChocmVmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbExvYWRlck9yQWN0aW9uKFwiYWN0aW9uXCIsIHJlcXVlc3QsIGFjdGlvbk1hdGNoLCB0cnVlLCBpc1JvdXRlUmVxdWVzdCk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGxldCBtZXRob2QgPSBpc1JvdXRlUmVxdWVzdCA/IFwicXVlcnlSb3V0ZVwiIDogXCJxdWVyeVwiO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWV0aG9kICsgXCIoKSBjYWxsIGFib3J0ZWRcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzUmVkaXJlY3RSZXN1bHQocmVzdWx0KSkge1xuICAgICAgLy8gVWhoaGggLSB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIHdlIHNob3VsZCBhbHdheXMgdGhyb3cgdGhlc2UgZnJvbVxuICAgICAgLy8gY2FsTG9hZGVyT3JBY3Rpb24sIGJ1dCB0aGUgdHlwZSBuYXJyb3dpbmcgaGVyZSBrZWVwcyBUUyBoYXBweSBhbmQgd2VcbiAgICAgIC8vIGNhbiBnZXQgYmFjayBvbiB0aGUgXCJ0aHJvdyBhbGwgcmVkaXJlY3QgcmVzcG9uc2VzXCIgdHJhaW4gaGVyZSBzaG91bGRcbiAgICAgIC8vIHRoaXMgZXZlciBoYXBwZW4gOi9cbiAgICAgIHRocm93IG5ldyBSZXNwb25zZShudWxsLCB7XG4gICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIExvY2F0aW9uOiByZXN1bHQubG9jYXRpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGlzRGVmZXJyZWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGVmZXIoKSBpcyBub3Qgc3VwcG9ydGVkIGluIGFjdGlvbnNcIik7XG4gICAgfVxuXG4gICAgaWYgKGlzUm91dGVSZXF1ZXN0KSB7XG4gICAgICBpZiAoaXNFcnJvclJlc3VsdChyZXN1bHQpKSB7XG4gICAgICAgIGxldCBib3VuZGFyeU1hdGNoID0gZmluZE5lYXJlc3RCb3VuZGFyeShtYXRjaGVzLCBhY3Rpb25NYXRjaC5yb3V0ZS5pZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF0Y2hlczogW2FjdGlvbk1hdGNoXSxcbiAgICAgICAgICBsb2FkZXJEYXRhOiB7fSxcbiAgICAgICAgICBhY3Rpb25EYXRhOiBudWxsLFxuICAgICAgICAgIGVycm9yczoge1xuICAgICAgICAgICAgW2JvdW5kYXJ5TWF0Y2gucm91dGUuaWRdOiByZXN1bHQuZXJyb3JcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIE5vdGU6IHN0YXR1c0NvZGUgKyBoZWFkZXJzIGFyZSB1bnVzZWQgaGVyZSBzaW5jZSBxdWVyeVJvdXRlIHdpbGxcbiAgICAgICAgICAvLyByZXR1cm4gdGhlIHJhdyBSZXNwb25zZSBvciB2YWx1ZVxuICAgICAgICAgIHN0YXR1c0NvZGU6IDUwMCxcbiAgICAgICAgICBsb2FkZXJIZWFkZXJzOiB7fSxcbiAgICAgICAgICBhY3Rpb25IZWFkZXJzOiB7fVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXRjaGVzOiBbYWN0aW9uTWF0Y2hdLFxuICAgICAgICBsb2FkZXJEYXRhOiB7fSxcbiAgICAgICAgYWN0aW9uRGF0YToge1xuICAgICAgICAgIFthY3Rpb25NYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5kYXRhXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yczogbnVsbCxcbiAgICAgICAgLy8gTm90ZTogc3RhdHVzQ29kZSArIGhlYWRlcnMgYXJlIHVudXNlZCBoZXJlIHNpbmNlIHF1ZXJ5Um91dGUgd2lsbFxuICAgICAgICAvLyByZXR1cm4gdGhlIHJhdyBSZXNwb25zZSBvciB2YWx1ZVxuICAgICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICAgIGxvYWRlckhlYWRlcnM6IHt9LFxuICAgICAgICBhY3Rpb25IZWFkZXJzOiB7fVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNFcnJvclJlc3VsdChyZXN1bHQpKSB7XG4gICAgICAvLyBTdG9yZSBvZmYgdGhlIHBlbmRpbmcgZXJyb3IgLSB3ZSB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxvYWRlcnNcbiAgICAgIC8vIHRvIGNhbGwgYW5kIHdpbGwgY29tbWl0IGl0IHdoZW4gd2UgY29tcGxldGUgdGhlIG5hdmlnYXRpb25cbiAgICAgIGxldCBib3VuZGFyeU1hdGNoID0gZmluZE5lYXJlc3RCb3VuZGFyeShtYXRjaGVzLCBhY3Rpb25NYXRjaC5yb3V0ZS5pZCk7XG4gICAgICBsZXQgY29udGV4dCA9IGF3YWl0IGxvYWRSb3V0ZURhdGEocmVxdWVzdCwgbWF0Y2hlcywgaXNSb3V0ZVJlcXVlc3QsIHtcbiAgICAgICAgW2JvdW5kYXJ5TWF0Y2gucm91dGUuaWRdOiByZXN1bHQuZXJyb3JcbiAgICAgIH0pOyAvLyBhY3Rpb24gc3RhdHVzIGNvZGVzIHRha2UgcHJlY2VkZW5jZSBvdmVyIGxvYWRlciBzdGF0dXMgY29kZXNcblxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBjb250ZXh0LCB7XG4gICAgICAgIHN0YXR1c0NvZGU6IGlzUm91dGVFcnJvclJlc3BvbnNlKHJlc3VsdC5lcnJvcikgPyByZXN1bHQuZXJyb3Iuc3RhdHVzIDogNTAwLFxuICAgICAgICBhY3Rpb25EYXRhOiBudWxsLFxuICAgICAgICBhY3Rpb25IZWFkZXJzOiBfZXh0ZW5kcyh7fSwgcmVzdWx0LmhlYWRlcnMgPyB7XG4gICAgICAgICAgW2FjdGlvbk1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmhlYWRlcnNcbiAgICAgICAgfSA6IHt9KVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRleHQgPSBhd2FpdCBsb2FkUm91dGVEYXRhKHJlcXVlc3QsIG1hdGNoZXMsIGlzUm91dGVSZXF1ZXN0KTtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGNvbnRleHQsIHJlc3VsdC5zdGF0dXNDb2RlID8ge1xuICAgICAgc3RhdHVzQ29kZTogcmVzdWx0LnN0YXR1c0NvZGVcbiAgICB9IDoge30sIHtcbiAgICAgIGFjdGlvbkRhdGE6IHtcbiAgICAgICAgW2FjdGlvbk1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmRhdGFcbiAgICAgIH0sXG4gICAgICBhY3Rpb25IZWFkZXJzOiBfZXh0ZW5kcyh7fSwgcmVzdWx0LmhlYWRlcnMgPyB7XG4gICAgICAgIFthY3Rpb25NYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5oZWFkZXJzXG4gICAgICB9IDoge30pXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBsb2FkUm91dGVEYXRhKHJlcXVlc3QsIG1hdGNoZXMsIGlzUm91dGVSZXF1ZXN0LCBwZW5kaW5nQWN0aW9uRXJyb3IpIHtcbiAgICBsZXQgbWF0Y2hlc1RvTG9hZCA9IGdldExvYWRlck1hdGNoZXNVbnRpbEJvdW5kYXJ5KG1hdGNoZXMsIE9iamVjdC5rZXlzKHBlbmRpbmdBY3Rpb25FcnJvciB8fCB7fSlbMF0pLmZpbHRlcihtID0+IG0ucm91dGUubG9hZGVyKTsgLy8gU2hvcnQgY2lyY3VpdCBpZiB3ZSBoYXZlIG5vIGxvYWRlcnMgdG8gcnVuXG5cbiAgICBpZiAobWF0Y2hlc1RvTG9hZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hdGNoZXMsXG4gICAgICAgIGxvYWRlckRhdGE6IHt9LFxuICAgICAgICBlcnJvcnM6IHBlbmRpbmdBY3Rpb25FcnJvciB8fCBudWxsLFxuICAgICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICAgIGxvYWRlckhlYWRlcnM6IHt9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoWy4uLm1hdGNoZXNUb0xvYWQubWFwKG0gPT4gY2FsbExvYWRlck9yQWN0aW9uKFwibG9hZGVyXCIsIHJlcXVlc3QsIG0sIHRydWUsIGlzUm91dGVSZXF1ZXN0KSldKTtcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBsZXQgbWV0aG9kID0gaXNSb3V0ZVJlcXVlc3QgPyBcInF1ZXJ5Um91dGVcIiA6IFwicXVlcnlcIjtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXRob2QgKyBcIigpIGNhbGwgYWJvcnRlZFwiKTtcbiAgICB9IC8vIENhbid0IGRvIGFueXRoaW5nIHdpdGggdGhlc2Ugd2l0aG91dCB0aGUgUmVtaXggc2lkZSBvZiB0aGluZ3MsIHNvIGp1c3RcbiAgICAvLyBjYW5jZWwgdGhlbSBmb3Igbm93XG5cblxuICAgIHJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgaWYgKGlzRGVmZXJyZWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgICByZXN1bHQuZGVmZXJyZWREYXRhLmNhbmNlbCgpO1xuICAgICAgfVxuICAgIH0pOyAvLyBQcm9jZXNzIGFuZCBjb21taXQgb3V0cHV0IGZyb20gbG9hZGVyc1xuXG4gICAgbGV0IGNvbnRleHQgPSBwcm9jZXNzUm91dGVMb2FkZXJEYXRhKG1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIHJlc3VsdHMsIHBlbmRpbmdBY3Rpb25FcnJvcik7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBjb250ZXh0LCB7XG4gICAgICBtYXRjaGVzXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBtYXRjaFJlcXVlc3QocmVxLCByb3V0ZUlkKSB7XG4gICAgbGV0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgbGV0IGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24oXCJcIiwgY3JlYXRlUGF0aCh1cmwpLCBudWxsLCBcImRlZmF1bHRcIik7XG4gICAgbGV0IG1hdGNoZXMgPSBtYXRjaFJvdXRlcyhkYXRhUm91dGVzLCBsb2NhdGlvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAmJiByb3V0ZUlkKSB7XG4gICAgICBtYXRjaGVzID0gbWF0Y2hlcy5maWx0ZXIobSA9PiBtLnJvdXRlLmlkID09PSByb3V0ZUlkKTtcbiAgICB9IC8vIFNob3J0IGNpcmN1aXQgd2l0aCBhIDQwNCBpZiB3ZSBtYXRjaCBub3RoaW5nXG5cblxuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgbGV0IHtcbiAgICAgICAgbWF0Y2hlczogbm90Rm91bmRNYXRjaGVzLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0gPSBnZXROb3RGb3VuZE1hdGNoZXMoZGF0YVJvdXRlcyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgbWF0Y2hlczogbm90Rm91bmRNYXRjaGVzLFxuICAgICAgICBzaG9ydENpcmN1aXRTdGF0ZToge1xuICAgICAgICAgIG1hdGNoZXM6IG5vdEZvdW5kTWF0Y2hlcyxcbiAgICAgICAgICBsb2FkZXJEYXRhOiB7fSxcbiAgICAgICAgICBhY3Rpb25EYXRhOiBudWxsLFxuICAgICAgICAgIGVycm9yczoge1xuICAgICAgICAgICAgW3JvdXRlLmlkXTogZXJyb3JcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1c0NvZGU6IDQwNCxcbiAgICAgICAgICBsb2FkZXJIZWFkZXJzOiB7fSxcbiAgICAgICAgICBhY3Rpb25IZWFkZXJzOiB7fVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsb2NhdGlvbixcbiAgICAgIG1hdGNoZXNcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhUm91dGVzLFxuICAgIHF1ZXJ5LFxuICAgIHF1ZXJ5Um91dGVcbiAgfTtcbn0gLy8jZW5kcmVnaW9uXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8jcmVnaW9uIEhlbHBlcnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogR2l2ZW4gYW4gZXhpc3RpbmcgU3RhdGljSGFuZGxlckNvbnRleHQgYW5kIGFuIGVycm9yIHRocm93biBhdCByZW5kZXIgdGltZSxcbiAqIHByb3ZpZGUgYW4gdXBkYXRlZCBTdGF0aWNIYW5kbGVyQ29udGV4dCBzdWl0YWJsZSBmb3IgYSBzZWNvbmQgU1NSIHJlbmRlclxuICovXG5cbmZ1bmN0aW9uIGdldFN0YXRpY0NvbnRleHRGcm9tRXJyb3Iocm91dGVzLCBjb250ZXh0LCBlcnJvcikge1xuICBsZXQgbmV3Q29udGV4dCA9IF9leHRlbmRzKHt9LCBjb250ZXh0LCB7XG4gICAgc3RhdHVzQ29kZTogNTAwLFxuICAgIGVycm9yczoge1xuICAgICAgW2NvbnRleHQuX2RlZXBlc3RSZW5kZXJlZEJvdW5kYXJ5SWQgfHwgcm91dGVzWzBdLmlkXTogZXJyb3JcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBuZXdDb250ZXh0O1xufSAvLyBOb3JtYWxpemUgbmF2aWdhdGlvbiBvcHRpb25zIGJ5IGNvbnZlcnRpbmcgZm9ybU1ldGhvZD1HRVQgZm9ybURhdGEgb2JqZWN0cyB0b1xuLy8gVVJMU2VhcmNoUGFyYW1zIHNvIHRoZXkgYmVoYXZlIGlkZW50aWNhbGx5IHRvIGxpbmtzIHdpdGggcXVlcnkgcGFyYW1zXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hdmlnYXRlT3B0aW9ucyh0bywgb3B0cywgaXNGZXRjaGVyKSB7XG4gIGlmIChpc0ZldGNoZXIgPT09IHZvaWQgMCkge1xuICAgIGlzRmV0Y2hlciA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IHBhdGggPSB0eXBlb2YgdG8gPT09IFwic3RyaW5nXCIgPyB0byA6IGNyZWF0ZVBhdGgodG8pOyAvLyBSZXR1cm4gbG9jYXRpb24gdmVyYmF0aW0gb24gbm9uLXN1Ym1pc3Npb24gbmF2aWdhdGlvbnNcblxuICBpZiAoIW9wdHMgfHwgIShcImZvcm1NZXRob2RcIiBpbiBvcHRzKSAmJiAhKFwiZm9ybURhdGFcIiBpbiBvcHRzKSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoXG4gICAgfTtcbiAgfSAvLyBDcmVhdGUgYSBTdWJtaXNzaW9uIG9uIG5vbi1HRVQgbmF2aWdhdGlvbnNcblxuXG4gIGlmIChvcHRzLmZvcm1NZXRob2QgIT0gbnVsbCAmJiBvcHRzLmZvcm1NZXRob2QgIT09IFwiZ2V0XCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aCxcbiAgICAgIHN1Ym1pc3Npb246IHtcbiAgICAgICAgZm9ybU1ldGhvZDogb3B0cy5mb3JtTWV0aG9kLFxuICAgICAgICBmb3JtQWN0aW9uOiBjcmVhdGVIcmVmKHBhcnNlUGF0aChwYXRoKSksXG4gICAgICAgIGZvcm1FbmNUeXBlOiBvcHRzICYmIG9wdHMuZm9ybUVuY1R5cGUgfHwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIixcbiAgICAgICAgZm9ybURhdGE6IG9wdHMuZm9ybURhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IC8vIE5vIGZvcm1EYXRhIHRvIGZsYXR0ZW4gZm9yIEdFVCBzdWJtaXNzaW9uXG5cblxuICBpZiAoIW9wdHMuZm9ybURhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aFxuICAgIH07XG4gIH0gLy8gRmxhdHRlbiBzdWJtaXNzaW9uIG9udG8gVVJMU2VhcmNoUGFyYW1zIGZvciBHRVQgc3VibWlzc2lvbnNcblxuXG4gIGxldCBwYXJzZWRQYXRoID0gcGFyc2VQYXRoKHBhdGgpO1xuXG4gIHRyeSB7XG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9IGNvbnZlcnRGb3JtRGF0YVRvU2VhcmNoUGFyYW1zKG9wdHMuZm9ybURhdGEpOyAvLyBTaW5jZSBmZXRjaGVyIEdFVCBzdWJtaXNzaW9ucyBvbmx5IHJ1biBhIHNpbmdsZSBsb2FkZXIgKGFzIG9wcG9zZWQgdG9cbiAgICAvLyBuYXZpZ2F0aW9uIEdFVCBzdWJtaXNzaW9ucyB3aGljaCBydW4gYWxsIGxvYWRlcnMpLCB3ZSBuZWVkIHRvIHByZXNlcnZlXG4gICAgLy8gYW55IGluY29taW5nID9pbmRleCBwYXJhbXNcblxuICAgIGlmIChpc0ZldGNoZXIgJiYgcGFyc2VkUGF0aC5zZWFyY2ggJiYgaGFzTmFrZWRJbmRleFF1ZXJ5KHBhcnNlZFBhdGguc2VhcmNoKSkge1xuICAgICAgc2VhcmNoUGFyYW1zLmFwcGVuZChcImluZGV4XCIsIFwiXCIpO1xuICAgIH1cblxuICAgIHBhcnNlZFBhdGguc2VhcmNoID0gXCI/XCIgKyBzZWFyY2hQYXJhbXM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aCxcbiAgICAgIGVycm9yOiBuZXcgRXJyb3JSZXNwb25zZSg0MDAsIFwiQmFkIFJlcXVlc3RcIiwgXCJDYW5ub3Qgc3VibWl0IGJpbmFyeSBmb3JtIGRhdGEgdXNpbmcgR0VUXCIpXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aDogY3JlYXRlUGF0aChwYXJzZWRQYXRoKVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRMb2FkZXJSZWRpcmVjdChzdGF0ZSwgcmVkaXJlY3QpIHtcbiAgbGV0IHtcbiAgICBmb3JtTWV0aG9kLFxuICAgIGZvcm1BY3Rpb24sXG4gICAgZm9ybUVuY1R5cGUsXG4gICAgZm9ybURhdGFcbiAgfSA9IHN0YXRlLm5hdmlnYXRpb247XG4gIGxldCBuYXZpZ2F0aW9uID0ge1xuICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICBsb2NhdGlvbjogY3JlYXRlTG9jYXRpb24oc3RhdGUubG9jYXRpb24sIHJlZGlyZWN0LmxvY2F0aW9uKSxcbiAgICBmb3JtTWV0aG9kOiBmb3JtTWV0aG9kIHx8IHVuZGVmaW5lZCxcbiAgICBmb3JtQWN0aW9uOiBmb3JtQWN0aW9uIHx8IHVuZGVmaW5lZCxcbiAgICBmb3JtRW5jVHlwZTogZm9ybUVuY1R5cGUgfHwgdW5kZWZpbmVkLFxuICAgIGZvcm1EYXRhOiBmb3JtRGF0YSB8fCB1bmRlZmluZWRcbiAgfTtcbiAgcmV0dXJuIG5hdmlnYXRpb247XG59IC8vIEZpbHRlciBvdXQgYWxsIHJvdXRlcyBiZWxvdyBhbnkgY2F1Z2h0IGVycm9yIGFzIHRoZXkgYXJlbid0IGdvaW5nIHRvXG4vLyByZW5kZXIgc28gd2UgZG9uJ3QgbmVlZCB0byBsb2FkIHRoZW1cblxuXG5mdW5jdGlvbiBnZXRMb2FkZXJNYXRjaGVzVW50aWxCb3VuZGFyeShtYXRjaGVzLCBib3VuZGFyeUlkKSB7XG4gIGxldCBib3VuZGFyeU1hdGNoZXMgPSBtYXRjaGVzO1xuXG4gIGlmIChib3VuZGFyeUlkKSB7XG4gICAgbGV0IGluZGV4ID0gbWF0Y2hlcy5maW5kSW5kZXgobSA9PiBtLnJvdXRlLmlkID09PSBib3VuZGFyeUlkKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICBib3VuZGFyeU1hdGNoZXMgPSBtYXRjaGVzLnNsaWNlKDAsIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYm91bmRhcnlNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBnZXRNYXRjaGVzVG9Mb2FkKHN0YXRlLCBtYXRjaGVzLCBzdWJtaXNzaW9uLCBsb2NhdGlvbiwgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCwgY2FuY2VsbGVkRGVmZXJyZWRSb3V0ZXMsIGNhbmNlbGxlZEZldGNoZXJMb2FkcywgcGVuZGluZ0FjdGlvbkRhdGEsIHBlbmRpbmdFcnJvciwgZmV0Y2hMb2FkTWF0Y2hlcykge1xuICBsZXQgYWN0aW9uUmVzdWx0ID0gcGVuZGluZ0Vycm9yID8gT2JqZWN0LnZhbHVlcyhwZW5kaW5nRXJyb3IpWzBdIDogcGVuZGluZ0FjdGlvbkRhdGEgPyBPYmplY3QudmFsdWVzKHBlbmRpbmdBY3Rpb25EYXRhKVswXSA6IG51bGw7IC8vIFBpY2sgbmF2aWdhdGlvbiBtYXRjaGVzIHRoYXQgYXJlIG5ldC1uZXcgb3IgcXVhbGlmeSBmb3IgcmV2YWxpZGF0aW9uXG5cbiAgbGV0IGJvdW5kYXJ5SWQgPSBwZW5kaW5nRXJyb3IgPyBPYmplY3Qua2V5cyhwZW5kaW5nRXJyb3IpWzBdIDogdW5kZWZpbmVkO1xuICBsZXQgYm91bmRhcnlNYXRjaGVzID0gZ2V0TG9hZGVyTWF0Y2hlc1VudGlsQm91bmRhcnkobWF0Y2hlcywgYm91bmRhcnlJZCk7XG4gIGxldCBuYXZpZ2F0aW9uTWF0Y2hlcyA9IGJvdW5kYXJ5TWF0Y2hlcy5maWx0ZXIoKG1hdGNoLCBpbmRleCkgPT4gbWF0Y2gucm91dGUubG9hZGVyICE9IG51bGwgJiYgKGlzTmV3TG9hZGVyKHN0YXRlLmxvYWRlckRhdGEsIHN0YXRlLm1hdGNoZXNbaW5kZXhdLCBtYXRjaCkgfHwgLy8gSWYgdGhpcyByb3V0ZSBoYWQgYSBwZW5kaW5nIGRlZmVycmVkIGNhbmNlbGxlZCBpdCBtdXN0IGJlIHJldmFsaWRhdGVkXG4gIGNhbmNlbGxlZERlZmVycmVkUm91dGVzLnNvbWUoaWQgPT4gaWQgPT09IG1hdGNoLnJvdXRlLmlkKSB8fCBzaG91bGRSZXZhbGlkYXRlTG9hZGVyKHN0YXRlLmxvY2F0aW9uLCBzdGF0ZS5tYXRjaGVzW2luZGV4XSwgc3VibWlzc2lvbiwgbG9jYXRpb24sIG1hdGNoLCBpc1JldmFsaWRhdGlvblJlcXVpcmVkLCBhY3Rpb25SZXN1bHQpKSk7IC8vIFBpY2sgZmV0Y2hlci5sb2FkcyB0aGF0IG5lZWQgdG8gYmUgcmV2YWxpZGF0ZWRcblxuICBsZXQgcmV2YWxpZGF0aW5nRmV0Y2hlcnMgPSBbXTtcbiAgZmV0Y2hMb2FkTWF0Y2hlcyAmJiBmZXRjaExvYWRNYXRjaGVzLmZvckVhY2goKF9yZWYxMCwga2V5KSA9PiB7XG4gICAgbGV0IFtocmVmLCBtYXRjaF0gPSBfcmVmMTA7XG5cbiAgICAvLyBUaGlzIGZldGNoZXIgd2FzIGNhbmNlbGxlZCBmcm9tIGEgcHJpb3IgYWN0aW9uIHN1Ym1pc3Npb24gLSBmb3JjZSByZWxvYWRcbiAgICBpZiAoY2FuY2VsbGVkRmV0Y2hlckxvYWRzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldmFsaWRhdGluZ0ZldGNoZXJzLnB1c2goW2tleSwgaHJlZiwgbWF0Y2hdKTtcbiAgICB9IGVsc2UgaWYgKGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIGxldCBzaG91bGRSZXZhbGlkYXRlID0gc2hvdWxkUmV2YWxpZGF0ZUxvYWRlcihocmVmLCBtYXRjaCwgc3VibWlzc2lvbiwgaHJlZiwgbWF0Y2gsIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQsIGFjdGlvblJlc3VsdCk7XG5cbiAgICAgIGlmIChzaG91bGRSZXZhbGlkYXRlKSB7XG4gICAgICAgIHJldmFsaWRhdGluZ0ZldGNoZXJzLnB1c2goW2tleSwgaHJlZiwgbWF0Y2hdKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gW25hdmlnYXRpb25NYXRjaGVzLCByZXZhbGlkYXRpbmdGZXRjaGVyc107XG59XG5cbmZ1bmN0aW9uIGlzTmV3TG9hZGVyKGN1cnJlbnRMb2FkZXJEYXRhLCBjdXJyZW50TWF0Y2gsIG1hdGNoKSB7XG4gIGxldCBpc05ldyA9IC8vIFthXSAtPiBbYSwgYl1cbiAgIWN1cnJlbnRNYXRjaCB8fCAvLyBbYSwgYl0gLT4gW2EsIGNdXG4gIG1hdGNoLnJvdXRlLmlkICE9PSBjdXJyZW50TWF0Y2gucm91dGUuaWQ7IC8vIEhhbmRsZSB0aGUgY2FzZSB0aGF0IHdlIGRvbid0IGhhdmUgZGF0YSBmb3IgYSByZS11c2VkIHJvdXRlLCBwb3RlbnRpYWxseVxuICAvLyBmcm9tIGEgcHJpb3IgZXJyb3Igb3IgZnJvbSBhIGNhbmNlbGxlZCBwZW5kaW5nIGRlZmVycmVkXG5cbiAgbGV0IGlzTWlzc2luZ0RhdGEgPSBjdXJyZW50TG9hZGVyRGF0YVttYXRjaC5yb3V0ZS5pZF0gPT09IHVuZGVmaW5lZDsgLy8gQWx3YXlzIGxvYWQgaWYgdGhpcyBpcyBhIG5ldC1uZXcgcm91dGUgb3Igd2UgZG9uJ3QgeWV0IGhhdmUgZGF0YVxuXG4gIHJldHVybiBpc05ldyB8fCBpc01pc3NpbmdEYXRhO1xufVxuXG5mdW5jdGlvbiBpc05ld1JvdXRlSW5zdGFuY2UoY3VycmVudE1hdGNoLCBtYXRjaCkge1xuICBsZXQgY3VycmVudFBhdGggPSBjdXJyZW50TWF0Y2gucm91dGUucGF0aDtcbiAgcmV0dXJuICgvLyBwYXJhbSBjaGFuZ2UgZm9yIHRoaXMgbWF0Y2gsIC91c2Vycy8xMjMgLT4gL3VzZXJzLzQ1NlxuICAgIGN1cnJlbnRNYXRjaC5wYXRobmFtZSAhPT0gbWF0Y2gucGF0aG5hbWUgfHwgLy8gc3BsYXQgcGFyYW0gY2hhbmdlZCwgd2hpY2ggaXMgbm90IHByZXNlbnQgaW4gbWF0Y2gucGF0aFxuICAgIC8vIGUuZy4gL2ZpbGVzL2ltYWdlcy9hdmF0YXIuanBnIC0+IGZpbGVzL2ZpbmFuY2VzLnhsc1xuICAgIGN1cnJlbnRQYXRoICYmIGN1cnJlbnRQYXRoLmVuZHNXaXRoKFwiKlwiKSAmJiBjdXJyZW50TWF0Y2gucGFyYW1zW1wiKlwiXSAhPT0gbWF0Y2gucGFyYW1zW1wiKlwiXVxuICApO1xufVxuXG5mdW5jdGlvbiBzaG91bGRSZXZhbGlkYXRlTG9hZGVyKGN1cnJlbnRMb2NhdGlvbiwgY3VycmVudE1hdGNoLCBzdWJtaXNzaW9uLCBsb2NhdGlvbiwgbWF0Y2gsIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQsIGFjdGlvblJlc3VsdCkge1xuICBsZXQgY3VycmVudFVybCA9IGNyZWF0ZVVSTChjdXJyZW50TG9jYXRpb24pO1xuICBsZXQgY3VycmVudFBhcmFtcyA9IGN1cnJlbnRNYXRjaC5wYXJhbXM7XG4gIGxldCBuZXh0VXJsID0gY3JlYXRlVVJMKGxvY2F0aW9uKTtcbiAgbGV0IG5leHRQYXJhbXMgPSBtYXRjaC5wYXJhbXM7IC8vIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYXMgdG8gd2hlbiB3ZSByZXZhbGlkYXRlLiAgSWYgdGhlIHJvdXRlXG4gIC8vIHByb3ZpZGVzIGl0J3Mgb3duIGltcGxlbWVudGF0aW9uLCB0aGVuIHdlIGdpdmUgdGhlbSBmdWxsIGNvbnRyb2wgYnV0XG4gIC8vIHByb3ZpZGUgdGhpcyB2YWx1ZSBzbyB0aGV5IGNhbiBsZXZlcmFnZSBpdCBpZiBuZWVkZWQgYWZ0ZXIgdGhleSBjaGVja1xuICAvLyB0aGVpciBvd24gc3BlY2lmaWMgdXNlIGNhc2VzXG4gIC8vIE5vdGUgdGhhdCBmZXRjaGVycyBhbHdheXMgcHJvdmlkZSB0aGUgc2FtZSBjdXJyZW50L25leHQgbG9jYXRpb25zIHNvIHRoZVxuICAvLyBVUkwtYmFzZWQgY2hlY2tzIGhlcmUgZG9uJ3QgYXBwbHkgdG8gZmV0Y2hlciBzaG91bGRSZXZhbGlkYXRlIGNhbGxzXG5cbiAgbGV0IGRlZmF1bHRTaG91bGRSZXZhbGlkYXRlID0gaXNOZXdSb3V0ZUluc3RhbmNlKGN1cnJlbnRNYXRjaCwgbWF0Y2gpIHx8IC8vIENsaWNrZWQgdGhlIHNhbWUgbGluaywgcmVzdWJtaXR0ZWQgYSBHRVQgZm9ybVxuICBjdXJyZW50VXJsLnRvU3RyaW5nKCkgPT09IG5leHRVcmwudG9TdHJpbmcoKSB8fCAvLyBTZWFyY2ggcGFyYW1zIGFmZmVjdCBhbGwgbG9hZGVyc1xuICBjdXJyZW50VXJsLnNlYXJjaCAhPT0gbmV4dFVybC5zZWFyY2ggfHwgLy8gRm9yY2VkIHJldmFsaWRhdGlvbiBkdWUgdG8gc3VibWlzc2lvbiwgdXNlUmV2YWxpZGF0ZSwgb3IgWC1SZW1peC1SZXZhbGlkYXRlXG4gIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQ7XG5cbiAgaWYgKG1hdGNoLnJvdXRlLnNob3VsZFJldmFsaWRhdGUpIHtcbiAgICBsZXQgcm91dGVDaG9pY2UgPSBtYXRjaC5yb3V0ZS5zaG91bGRSZXZhbGlkYXRlKF9leHRlbmRzKHtcbiAgICAgIGN1cnJlbnRVcmwsXG4gICAgICBjdXJyZW50UGFyYW1zLFxuICAgICAgbmV4dFVybCxcbiAgICAgIG5leHRQYXJhbXNcbiAgICB9LCBzdWJtaXNzaW9uLCB7XG4gICAgICBhY3Rpb25SZXN1bHQsXG4gICAgICBkZWZhdWx0U2hvdWxkUmV2YWxpZGF0ZVxuICAgIH0pKTtcblxuICAgIGlmICh0eXBlb2Ygcm91dGVDaG9pY2UgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gcm91dGVDaG9pY2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRTaG91bGRSZXZhbGlkYXRlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxsTG9hZGVyT3JBY3Rpb24odHlwZSwgcmVxdWVzdCwgbWF0Y2gsIHNraXBSZWRpcmVjdHMsIGlzUm91dGVSZXF1ZXN0KSB7XG4gIGlmIChza2lwUmVkaXJlY3RzID09PSB2b2lkIDApIHtcbiAgICBza2lwUmVkaXJlY3RzID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNSb3V0ZVJlcXVlc3QgPT09IHZvaWQgMCkge1xuICAgIGlzUm91dGVSZXF1ZXN0ID0gZmFsc2U7XG4gIH1cblxuICBsZXQgcmVzdWx0VHlwZTtcbiAgbGV0IHJlc3VsdDsgLy8gU2V0dXAgYSBwcm9taXNlIHdlIGNhbiByYWNlIGFnYWluc3Qgc28gdGhhdCBhYm9ydCBzaWduYWxzIHNob3J0IGNpcmN1aXRcblxuICBsZXQgcmVqZWN0O1xuICBsZXQgYWJvcnRQcm9taXNlID0gbmV3IFByb21pc2UoKF8sIHIpID0+IHJlamVjdCA9IHIpO1xuXG4gIGxldCBvblJlamVjdCA9ICgpID0+IHJlamVjdCgpO1xuXG4gIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvblJlamVjdCk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgaGFuZGxlciA9IG1hdGNoLnJvdXRlW3R5cGVdO1xuICAgIGludmFyaWFudChoYW5kbGVyLCBcIkNvdWxkIG5vdCBmaW5kIHRoZSBcIiArIHR5cGUgKyBcIiB0byBydW4gb24gdGhlIFxcXCJcIiArIG1hdGNoLnJvdXRlLmlkICsgXCJcXFwiIHJvdXRlXCIpO1xuICAgIHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbaGFuZGxlcih7XG4gICAgICByZXF1ZXN0LFxuICAgICAgcGFyYW1zOiBtYXRjaC5wYXJhbXNcbiAgICB9KSwgYWJvcnRQcm9taXNlXSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5lcnJvcjtcbiAgICByZXN1bHQgPSBlO1xuICB9IGZpbmFsbHkge1xuICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvblJlamVjdCk7XG4gIH1cblxuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcbiAgICAvLyBQcm9jZXNzIHJlZGlyZWN0c1xuICAgIGxldCBzdGF0dXMgPSByZXN1bHQuc3RhdHVzO1xuICAgIGxldCBsb2NhdGlvbiA9IHJlc3VsdC5oZWFkZXJzLmdldChcIkxvY2F0aW9uXCIpOyAvLyBGb3IgU1NSIHNpbmdsZS1yb3V0ZSByZXF1ZXN0cywgd2Ugd2FudCB0byBoYW5kIFJlc3BvbnNlcyBiYWNrIGRpcmVjdGx5XG4gICAgLy8gd2l0aG91dCB1bndyYXBwaW5nXG5cbiAgICBpZiAoaXNSb3V0ZVJlcXVlc3QpIHtcbiAgICAgIHRocm93IHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID49IDMwMCAmJiBzdGF0dXMgPD0gMzk5ICYmIGxvY2F0aW9uICE9IG51bGwpIHtcbiAgICAgIC8vIERvbid0IHByb2Nlc3MgcmVkaXJlY3RzIGluIHRoZSByb3V0ZXIgZHVyaW5nIFNTUiBkb2N1bWVudCByZXF1ZXN0cy5cbiAgICAgIC8vIEluc3RlYWQsIHRocm93IHRoZSBSZXNwb25zZSBhbmQgbGV0IHRoZSBzZXJ2ZXIgaGFuZGxlIGl0IHdpdGggYW4gSFRUUFxuICAgICAgLy8gcmVkaXJlY3RcbiAgICAgIGlmIChza2lwUmVkaXJlY3RzKSB7XG4gICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogUmVzdWx0VHlwZS5yZWRpcmVjdCxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmV2YWxpZGF0ZTogcmVzdWx0LmhlYWRlcnMuZ2V0KFwiWC1SZW1peC1SZXZhbGlkYXRlXCIpICE9PSBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBkYXRhO1xuICAgIGxldCBjb250ZW50VHlwZSA9IHJlc3VsdC5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcblxuICAgIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5zdGFydHNXaXRoKFwiYXBwbGljYXRpb24vanNvblwiKSkge1xuICAgICAgZGF0YSA9IGF3YWl0IHJlc3VsdC5qc29uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBhd2FpdCByZXN1bHQudGV4dCgpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLmVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiByZXN1bHRUeXBlLFxuICAgICAgICBlcnJvcjogbmV3IEVycm9yUmVzcG9uc2Uoc3RhdHVzLCByZXN1bHQuc3RhdHVzVGV4dCwgZGF0YSksXG4gICAgICAgIGhlYWRlcnM6IHJlc3VsdC5oZWFkZXJzXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBSZXN1bHRUeXBlLmRhdGEsXG4gICAgICBkYXRhLFxuICAgICAgc3RhdHVzQ29kZTogcmVzdWx0LnN0YXR1cyxcbiAgICAgIGhlYWRlcnM6IHJlc3VsdC5oZWFkZXJzXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLmVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHJlc3VsdFR5cGUsXG4gICAgICBlcnJvcjogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBEZWZlcnJlZERhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogUmVzdWx0VHlwZS5kZWZlcnJlZCxcbiAgICAgIGRlZmVycmVkRGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogUmVzdWx0VHlwZS5kYXRhLFxuICAgIGRhdGE6IHJlc3VsdFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXF1ZXN0KGxvY2F0aW9uLCBzaWduYWwsIHN1Ym1pc3Npb24pIHtcbiAgbGV0IHVybCA9IGNyZWF0ZVVSTChsb2NhdGlvbikudG9TdHJpbmcoKTtcbiAgbGV0IGluaXQgPSB7XG4gICAgc2lnbmFsXG4gIH07XG5cbiAgaWYgKHN1Ym1pc3Npb24pIHtcbiAgICBsZXQge1xuICAgICAgZm9ybU1ldGhvZCxcbiAgICAgIGZvcm1FbmNUeXBlLFxuICAgICAgZm9ybURhdGFcbiAgICB9ID0gc3VibWlzc2lvbjtcbiAgICBpbml0Lm1ldGhvZCA9IGZvcm1NZXRob2QudG9VcHBlckNhc2UoKTtcbiAgICBpbml0LmJvZHkgPSBmb3JtRW5jVHlwZSA9PT0gXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiA/IGNvbnZlcnRGb3JtRGF0YVRvU2VhcmNoUGFyYW1zKGZvcm1EYXRhKSA6IGZvcm1EYXRhO1xuICB9IC8vIENvbnRlbnQtVHlwZSBpcyBpbmZlcnJlZCAoaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXF1ZXN0KVxuXG5cbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHVybCwgaW5pdCk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRGb3JtRGF0YVRvU2VhcmNoUGFyYW1zKGZvcm1EYXRhKSB7XG4gIGxldCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGZvcm1EYXRhLmVudHJpZXMoKSkge1xuICAgIGludmFyaWFudCh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIsICdGaWxlIGlucHV0cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGVuY1R5cGUgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiwgJyArICdwbGVhc2UgdXNlIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIGluc3RlYWQuJyk7XG4gICAgc2VhcmNoUGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBzZWFyY2hQYXJhbXM7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NSb3V0ZUxvYWRlckRhdGEobWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgcmVzdWx0cywgcGVuZGluZ0Vycm9yLCBhY3RpdmVEZWZlcnJlZHMpIHtcbiAgLy8gRmlsbCBpbiBsb2FkZXJEYXRhL2Vycm9ycyBmcm9tIG91ciBsb2FkZXJzXG4gIGxldCBsb2FkZXJEYXRhID0ge307XG4gIGxldCBlcnJvcnMgPSBudWxsO1xuICBsZXQgc3RhdHVzQ29kZTtcbiAgbGV0IGZvdW5kRXJyb3IgPSBmYWxzZTtcbiAgbGV0IGxvYWRlckhlYWRlcnMgPSB7fTsgLy8gUHJvY2VzcyBsb2FkZXIgcmVzdWx0cyBpbnRvIHN0YXRlLmxvYWRlckRhdGEvc3RhdGUuZXJyb3JzXG5cbiAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgbGV0IGlkID0gbWF0Y2hlc1RvTG9hZFtpbmRleF0ucm91dGUuaWQ7XG4gICAgaW52YXJpYW50KCFpc1JlZGlyZWN0UmVzdWx0KHJlc3VsdCksIFwiQ2Fubm90IGhhbmRsZSByZWRpcmVjdCByZXN1bHRzIGluIHByb2Nlc3NMb2FkZXJEYXRhXCIpO1xuXG4gICAgaWYgKGlzRXJyb3JSZXN1bHQocmVzdWx0KSkge1xuICAgICAgLy8gTG9vayB1cHdhcmRzIGZyb20gdGhlIG1hdGNoZWQgcm91dGUgZm9yIHRoZSBjbG9zZXN0IGFuY2VzdG9yXG4gICAgICAvLyBlcnJvciBib3VuZGFyeSwgZGVmYXVsdGluZyB0byB0aGUgcm9vdCBtYXRjaFxuICAgICAgbGV0IGJvdW5kYXJ5TWF0Y2ggPSBmaW5kTmVhcmVzdEJvdW5kYXJ5KG1hdGNoZXMsIGlkKTtcbiAgICAgIGxldCBlcnJvciA9IHJlc3VsdC5lcnJvcjsgLy8gSWYgd2UgaGF2ZSBhIHBlbmRpbmcgYWN0aW9uIGVycm9yLCB3ZSByZXBvcnQgaXQgYXQgdGhlIGhpZ2hlc3Qtcm91dGVcbiAgICAgIC8vIHRoYXQgdGhyb3dzIGEgbG9hZGVyIGVycm9yLCBhbmQgdGhlbiBjbGVhciBpdCBvdXQgdG8gaW5kaWNhdGUgdGhhdFxuICAgICAgLy8gaXQgd2FzIGNvbnN1bWVkXG5cbiAgICAgIGlmIChwZW5kaW5nRXJyb3IpIHtcbiAgICAgICAgZXJyb3IgPSBPYmplY3QudmFsdWVzKHBlbmRpbmdFcnJvcilbMF07XG4gICAgICAgIHBlbmRpbmdFcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgZXJyb3JzID0gT2JqZWN0LmFzc2lnbihlcnJvcnMgfHwge30sIHtcbiAgICAgICAgW2JvdW5kYXJ5TWF0Y2gucm91dGUuaWRdOiBlcnJvclxuICAgICAgfSk7IC8vIE9uY2Ugd2UgZmluZCBvdXIgZmlyc3QgKGhpZ2hlc3QpIGVycm9yLCB3ZSBzZXQgdGhlIHN0YXR1cyBjb2RlIGFuZFxuICAgICAgLy8gcHJldmVudCBkZWVwZXIgc3RhdHVzIGNvZGVzIGZyb20gb3ZlcnJpZGluZ1xuXG4gICAgICBpZiAoIWZvdW5kRXJyb3IpIHtcbiAgICAgICAgZm91bmRFcnJvciA9IHRydWU7XG4gICAgICAgIHN0YXR1c0NvZGUgPSBpc1JvdXRlRXJyb3JSZXNwb25zZShyZXN1bHQuZXJyb3IpID8gcmVzdWx0LmVycm9yLnN0YXR1cyA6IDUwMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgIGxvYWRlckhlYWRlcnNbaWRdID0gcmVzdWx0LmhlYWRlcnM7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIGFjdGl2ZURlZmVycmVkcyAmJiBhY3RpdmVEZWZlcnJlZHMuc2V0KGlkLCByZXN1bHQuZGVmZXJyZWREYXRhKTtcbiAgICAgIGxvYWRlckRhdGFbaWRdID0gcmVzdWx0LmRlZmVycmVkRGF0YS5kYXRhOyAvLyBUT0RPOiBBZGQgc3RhdHVzQ29kZS9oZWFkZXJzIG9uY2Ugd2Ugd2lyZSB1cCBzdHJlYW1pbmcgaW4gUmVtaXhcbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZGVyRGF0YVtpZF0gPSByZXN1bHQuZGF0YTsgLy8gRXJyb3Igc3RhdHVzIGNvZGVzIGFsd2F5cyBvdmVycmlkZSBzdWNjZXNzIHN0YXR1cyBjb2RlcywgYnV0IGlmIGFsbFxuICAgICAgLy8gbG9hZGVycyBhcmUgc3VjY2Vzc2Z1bCB3ZSB0YWtlIHRoZSBkZWVwZXN0IHN0YXR1cyBjb2RlLlxuXG4gICAgICBpZiAocmVzdWx0LnN0YXR1c0NvZGUgIT09IDIwMCAmJiAhZm91bmRFcnJvcikge1xuICAgICAgICBzdGF0dXNDb2RlID0gcmVzdWx0LnN0YXR1c0NvZGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuaGVhZGVycykge1xuICAgICAgICBsb2FkZXJIZWFkZXJzW2lkXSA9IHJlc3VsdC5oZWFkZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfSk7IC8vIElmIHdlIGRpZG4ndCBjb25zdW1lIHRoZSBwZW5kaW5nIGFjdGlvbiBlcnJvciAoaS5lLiwgYWxsIGxvYWRlcnNcbiAgLy8gcmVzb2x2ZWQpLCB0aGVuIGNvbnN1bWUgaXQgaGVyZVxuXG4gIGlmIChwZW5kaW5nRXJyb3IpIHtcbiAgICBlcnJvcnMgPSBwZW5kaW5nRXJyb3I7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvYWRlckRhdGEsXG4gICAgZXJyb3JzLFxuICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUgfHwgMjAwLFxuICAgIGxvYWRlckhlYWRlcnNcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0xvYWRlckRhdGEoc3RhdGUsIG1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIHJlc3VsdHMsIHBlbmRpbmdFcnJvciwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMsIGZldGNoZXJSZXN1bHRzLCBhY3RpdmVEZWZlcnJlZHMpIHtcbiAgbGV0IHtcbiAgICBsb2FkZXJEYXRhLFxuICAgIGVycm9yc1xuICB9ID0gcHJvY2Vzc1JvdXRlTG9hZGVyRGF0YShtYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCByZXN1bHRzLCBwZW5kaW5nRXJyb3IsIGFjdGl2ZURlZmVycmVkcyk7IC8vIFByb2Nlc3MgcmVzdWx0cyBmcm9tIG91ciByZXZhbGlkYXRpbmcgZmV0Y2hlcnNcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbGV0IFtrZXksLCBtYXRjaF0gPSByZXZhbGlkYXRpbmdGZXRjaGVyc1tpbmRleF07XG4gICAgaW52YXJpYW50KGZldGNoZXJSZXN1bHRzICE9PSB1bmRlZmluZWQgJiYgZmV0Y2hlclJlc3VsdHNbaW5kZXhdICE9PSB1bmRlZmluZWQsIFwiRGlkIG5vdCBmaW5kIGNvcnJlc3BvbmRpbmcgZmV0Y2hlciByZXN1bHRcIik7XG4gICAgbGV0IHJlc3VsdCA9IGZldGNoZXJSZXN1bHRzW2luZGV4XTsgLy8gUHJvY2VzcyBmZXRjaGVyIG5vbi1yZWRpcmVjdCBlcnJvcnNcblxuICAgIGlmIChpc0Vycm9yUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIGxldCBib3VuZGFyeU1hdGNoID0gZmluZE5lYXJlc3RCb3VuZGFyeShzdGF0ZS5tYXRjaGVzLCBtYXRjaC5yb3V0ZS5pZCk7XG5cbiAgICAgIGlmICghKGVycm9ycyAmJiBlcnJvcnNbYm91bmRhcnlNYXRjaC5yb3V0ZS5pZF0pKSB7XG4gICAgICAgIGVycm9ycyA9IF9leHRlbmRzKHt9LCBlcnJvcnMsIHtcbiAgICAgICAgICBbYm91bmRhcnlNYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5lcnJvclxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUuZmV0Y2hlcnMuZGVsZXRlKGtleSk7XG4gICAgfSBlbHNlIGlmIChpc1JlZGlyZWN0UmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIC8vIFNob3VsZCBuZXZlciBnZXQgaGVyZSwgcmVkaXJlY3RzIHNob3VsZCBnZXQgcHJvY2Vzc2VkIGFib3ZlLCBidXQgd2VcbiAgICAgIC8vIGtlZXAgdGhpcyB0byB0eXBlIG5hcnJvdyB0byBhIHN1Y2Nlc3MgcmVzdWx0IGluIHRoZSBlbHNlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmhhbmRsZWQgZmV0Y2hlciByZXZhbGlkYXRpb24gcmVkaXJlY3RcIik7XG4gICAgfSBlbHNlIGlmIChpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIC8vIFNob3VsZCBuZXZlciBnZXQgaGVyZSwgZGVmZXJyZWQgZGF0YSBzaG91bGQgYmUgYXdhaXRlZCBmb3IgZmV0Y2hlcnNcbiAgICAgIC8vIGluIHJlc29sdmVEZWZlcnJlZFJlc3VsdHNcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBmZXRjaGVyIGRlZmVycmVkIGRhdGFcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBkb25lRmV0Y2hlciA9IHtcbiAgICAgICAgc3RhdGU6IFwiaWRsZVwiLFxuICAgICAgICBkYXRhOiByZXN1bHQuZGF0YSxcbiAgICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCBkb25lRmV0Y2hlcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2FkZXJEYXRhLFxuICAgIGVycm9yc1xuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZUxvYWRlckRhdGEobG9hZGVyRGF0YSwgbmV3TG9hZGVyRGF0YSwgbWF0Y2hlcykge1xuICBsZXQgbWVyZ2VkTG9hZGVyRGF0YSA9IF9leHRlbmRzKHt9LCBuZXdMb2FkZXJEYXRhKTtcblxuICBtYXRjaGVzLmZvckVhY2gobWF0Y2ggPT4ge1xuICAgIGxldCBpZCA9IG1hdGNoLnJvdXRlLmlkO1xuXG4gICAgaWYgKG5ld0xvYWRlckRhdGFbaWRdID09PSB1bmRlZmluZWQgJiYgbG9hZGVyRGF0YVtpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbWVyZ2VkTG9hZGVyRGF0YVtpZF0gPSBsb2FkZXJEYXRhW2lkXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbWVyZ2VkTG9hZGVyRGF0YTtcbn0gLy8gRmluZCB0aGUgbmVhcmVzdCBlcnJvciBib3VuZGFyeSwgbG9va2luZyB1cHdhcmRzIGZyb20gdGhlIGxlYWYgcm91dGUgKG9yIHRoZVxuLy8gcm91dGUgc3BlY2lmaWVkIGJ5IHJvdXRlSWQpIGZvciB0aGUgY2xvc2VzdCBhbmNlc3RvciBlcnJvciBib3VuZGFyeSxcbi8vIGRlZmF1bHRpbmcgdG8gdGhlIHJvb3QgbWF0Y2hcblxuXG5mdW5jdGlvbiBmaW5kTmVhcmVzdEJvdW5kYXJ5KG1hdGNoZXMsIHJvdXRlSWQpIHtcbiAgbGV0IGVsaWdpYmxlTWF0Y2hlcyA9IHJvdXRlSWQgPyBtYXRjaGVzLnNsaWNlKDAsIG1hdGNoZXMuZmluZEluZGV4KG0gPT4gbS5yb3V0ZS5pZCA9PT0gcm91dGVJZCkgKyAxKSA6IFsuLi5tYXRjaGVzXTtcbiAgcmV0dXJuIGVsaWdpYmxlTWF0Y2hlcy5yZXZlcnNlKCkuZmluZChtID0+IG0ucm91dGUuaGFzRXJyb3JCb3VuZGFyeSA9PT0gdHJ1ZSkgfHwgbWF0Y2hlc1swXTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm90Rm91bmRNYXRjaGVzKHJvdXRlcykge1xuICAvLyBQcmVmZXIgYSByb290IGxheW91dCByb3V0ZSBpZiBwcmVzZW50LCBvdGhlcndpc2Ugc2hpbSBpbiBhIHJvdXRlIG9iamVjdFxuICBsZXQgcm91dGUgPSByb3V0ZXMuZmluZChyID0+IHIuaW5kZXggfHwgci5wYXRoID09PSBcIlwiIHx8IHIucGF0aCA9PT0gXCIvXCIpIHx8IHtcbiAgICBpZDogXCJfX3NoaW0tNDA0LXJvdXRlX19cIlxuICB9O1xuICByZXR1cm4ge1xuICAgIG1hdGNoZXM6IFt7XG4gICAgICBwYXJhbXM6IHt9LFxuICAgICAgcGF0aG5hbWU6IFwiXCIsXG4gICAgICBwYXRobmFtZUJhc2U6IFwiXCIsXG4gICAgICByb3V0ZVxuICAgIH1dLFxuICAgIHJvdXRlLFxuICAgIGVycm9yOiBuZXcgRXJyb3JSZXNwb25zZSg0MDQsIFwiTm90IEZvdW5kXCIsIG51bGwpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldE1ldGhvZE5vdEFsbG93ZWRSZXN1bHQocGF0aCkge1xuICBsZXQgaHJlZiA9IHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiID8gcGF0aCA6IGNyZWF0ZUhyZWYocGF0aCk7XG4gIGNvbnNvbGUud2FybihcIllvdSdyZSB0cnlpbmcgdG8gc3VibWl0IHRvIGEgcm91dGUgdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGFjdGlvbi4gIFRvIFwiICsgXCJmaXggdGhpcywgcGxlYXNlIGFkZCBhbiBgYWN0aW9uYCBmdW5jdGlvbiB0byB0aGUgcm91dGUgZm9yIFwiICsgKFwiW1wiICsgaHJlZiArIFwiXVwiKSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogUmVzdWx0VHlwZS5lcnJvcixcbiAgICBlcnJvcjogbmV3IEVycm9yUmVzcG9uc2UoNDA1LCBcIk1ldGhvZCBOb3QgQWxsb3dlZFwiLCBcIk5vIGFjdGlvbiBmb3VuZCBmb3IgW1wiICsgaHJlZiArIFwiXVwiKVxuICB9O1xufSAvLyBGaW5kIGFueSByZXR1cm5lZCByZWRpcmVjdCBlcnJvcnMsIHN0YXJ0aW5nIGZyb20gdGhlIGxvd2VzdCBtYXRjaFxuXG5cbmZ1bmN0aW9uIGZpbmRSZWRpcmVjdChyZXN1bHRzKSB7XG4gIGZvciAobGV0IGkgPSByZXN1bHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGV0IHJlc3VsdCA9IHJlc3VsdHNbaV07XG5cbiAgICBpZiAoaXNSZWRpcmVjdFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxufSAvLyBDcmVhdGUgYW4gaHJlZiB0byByZXByZXNlbnQgYSBcInNlcnZlclwiIFVSTCB3aXRob3V0IHRoZSBoYXNoXG5cblxuZnVuY3Rpb24gY3JlYXRlSHJlZihsb2NhdGlvbikge1xuICByZXR1cm4gKGxvY2F0aW9uLnBhdGhuYW1lIHx8IFwiXCIpICsgKGxvY2F0aW9uLnNlYXJjaCB8fCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gaXNIYXNoQ2hhbmdlT25seShhLCBiKSB7XG4gIHJldHVybiBhLnBhdGhuYW1lID09PSBiLnBhdGhuYW1lICYmIGEuc2VhcmNoID09PSBiLnNlYXJjaCAmJiBhLmhhc2ggIT09IGIuaGFzaDtcbn1cblxuZnVuY3Rpb24gaXNEZWZlcnJlZFJlc3VsdChyZXN1bHQpIHtcbiAgcmV0dXJuIHJlc3VsdC50eXBlID09PSBSZXN1bHRUeXBlLmRlZmVycmVkO1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yUmVzdWx0KHJlc3VsdCkge1xuICByZXR1cm4gcmVzdWx0LnR5cGUgPT09IFJlc3VsdFR5cGUuZXJyb3I7XG59XG5cbmZ1bmN0aW9uIGlzUmVkaXJlY3RSZXN1bHQocmVzdWx0KSB7XG4gIHJldHVybiAocmVzdWx0ICYmIHJlc3VsdC50eXBlKSA9PT0gUmVzdWx0VHlwZS5yZWRpcmVjdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZURlZmVycmVkUmVzdWx0cyhjdXJyZW50TWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgcmVzdWx0cywgc2lnbmFsLCBpc0ZldGNoZXIsIGN1cnJlbnRMb2FkZXJEYXRhKSB7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByZXN1bHRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGxldCByZXN1bHQgPSByZXN1bHRzW2luZGV4XTtcbiAgICBsZXQgbWF0Y2ggPSBtYXRjaGVzVG9Mb2FkW2luZGV4XTtcbiAgICBsZXQgY3VycmVudE1hdGNoID0gY3VycmVudE1hdGNoZXMuZmluZChtID0+IG0ucm91dGUuaWQgPT09IG1hdGNoLnJvdXRlLmlkKTtcbiAgICBsZXQgaXNSZXZhbGlkYXRpbmdMb2FkZXIgPSBjdXJyZW50TWF0Y2ggIT0gbnVsbCAmJiAhaXNOZXdSb3V0ZUluc3RhbmNlKGN1cnJlbnRNYXRjaCwgbWF0Y2gpICYmIChjdXJyZW50TG9hZGVyRGF0YSAmJiBjdXJyZW50TG9hZGVyRGF0YVttYXRjaC5yb3V0ZS5pZF0pICE9PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNEZWZlcnJlZFJlc3VsdChyZXN1bHQpICYmIChpc0ZldGNoZXIgfHwgaXNSZXZhbGlkYXRpbmdMb2FkZXIpKSB7XG4gICAgICAvLyBOb3RlOiB3ZSBkbyBub3QgaGF2ZSB0byB0b3VjaCBhY3RpdmVEZWZlcnJlZHMgaGVyZSBzaW5jZSB3ZSByYWNlIHRoZW1cbiAgICAgIC8vIGFnYWluc3QgdGhlIHNpZ25hbCBpbiByZXNvbHZlRGVmZXJyZWREYXRhIGFuZCB0aGV5J2xsIGdldCBhYm9ydGVkXG4gICAgICAvLyB0aGVyZSBpZiBuZWVkZWRcbiAgICAgIGF3YWl0IHJlc29sdmVEZWZlcnJlZERhdGEocmVzdWx0LCBzaWduYWwsIGlzRmV0Y2hlcikudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0c1tpbmRleF0gPSByZXN1bHQgfHwgcmVzdWx0c1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRGVmZXJyZWREYXRhKHJlc3VsdCwgc2lnbmFsLCB1bndyYXApIHtcbiAgaWYgKHVud3JhcCA9PT0gdm9pZCAwKSB7XG4gICAgdW53cmFwID0gZmFsc2U7XG4gIH1cblxuICBsZXQgYWJvcnRlZCA9IGF3YWl0IHJlc3VsdC5kZWZlcnJlZERhdGEucmVzb2x2ZURhdGEoc2lnbmFsKTtcblxuICBpZiAoYWJvcnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh1bndyYXApIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogUmVzdWx0VHlwZS5kYXRhLFxuICAgICAgICBkYXRhOiByZXN1bHQuZGVmZXJyZWREYXRhLnVud3JhcHBlZERhdGFcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSGFuZGxlIGFueSBUcmFja2VkUHJvbWlzZS5fZXJyb3IgdmFsdWVzIGVuY291bnRlcmVkIHdoaWxlIHVud3JhcHBpbmdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFJlc3VsdFR5cGUuZXJyb3IsXG4gICAgICAgIGVycm9yOiBlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogUmVzdWx0VHlwZS5kYXRhLFxuICAgIGRhdGE6IHJlc3VsdC5kZWZlcnJlZERhdGEuZGF0YVxuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNOYWtlZEluZGV4UXVlcnkoc2VhcmNoKSB7XG4gIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHNlYXJjaCkuZ2V0QWxsKFwiaW5kZXhcIikuc29tZSh2ID0+IHYgPT09IFwiXCIpO1xufSAvLyBOb3RlOiBUaGlzIHNob3VsZCBtYXRjaCB0aGUgZm9ybWF0IGV4cG9ydGVkIGJ5IHVzZU1hdGNoZXMsIHNvIGlmIHlvdSBjaGFuZ2Vcbi8vIHRoaXMgcGxlYXNlIGFsc28gY2hhbmdlIHRoYXQgOikgIEV2ZW50dWFsbHkgd2UnbGwgRFJZIHRoaXMgdXBcblxuXG5mdW5jdGlvbiBjcmVhdGVVc2VNYXRjaGVzTWF0Y2gobWF0Y2gsIGxvYWRlckRhdGEpIHtcbiAgbGV0IHtcbiAgICByb3V0ZSxcbiAgICBwYXRobmFtZSxcbiAgICBwYXJhbXNcbiAgfSA9IG1hdGNoO1xuICByZXR1cm4ge1xuICAgIGlkOiByb3V0ZS5pZCxcbiAgICBwYXRobmFtZSxcbiAgICBwYXJhbXMsXG4gICAgZGF0YTogbG9hZGVyRGF0YVtyb3V0ZS5pZF0sXG4gICAgaGFuZGxlOiByb3V0ZS5oYW5kbGVcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0TWF0Y2gobWF0Y2hlcywgbG9jYXRpb24pIHtcbiAgbGV0IHNlYXJjaCA9IHR5cGVvZiBsb2NhdGlvbiA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlUGF0aChsb2NhdGlvbikuc2VhcmNoIDogbG9jYXRpb24uc2VhcmNoO1xuXG4gIGlmIChtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0ucm91dGUuaW5kZXggJiYgIWhhc05ha2VkSW5kZXhRdWVyeShzZWFyY2ggfHwgXCJcIikpIHtcbiAgICByZXR1cm4gbWF0Y2hlcy5zbGljZSgtMilbMF07XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlcy5zbGljZSgtMSlbMF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVSTChsb2NhdGlvbikge1xuICBsZXQgYmFzZSA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5sb2NhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gOiBcInVua25vd246Ly91bmtub3duXCI7XG4gIGxldCBocmVmID0gdHlwZW9mIGxvY2F0aW9uID09PSBcInN0cmluZ1wiID8gbG9jYXRpb24gOiBjcmVhdGVIcmVmKGxvY2F0aW9uKTtcbiAgcmV0dXJuIG5ldyBVUkwoaHJlZiwgYmFzZSk7XG59IC8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBBYm9ydGVkRGVmZXJyZWRFcnJvciwgQWN0aW9uLCBFcnJvclJlc3BvbnNlLCBJRExFX0ZFVENIRVIsIElETEVfTkFWSUdBVElPTiwgY29udmVydFJvdXRlc1RvRGF0YVJvdXRlcyBhcyBVTlNBRkVfY29udmVydFJvdXRlc1RvRGF0YVJvdXRlcywgY3JlYXRlQnJvd3Nlckhpc3RvcnksIGNyZWF0ZUhhc2hIaXN0b3J5LCBjcmVhdGVNZW1vcnlIaXN0b3J5LCBjcmVhdGVQYXRoLCBjcmVhdGVSb3V0ZXIsIGRlZmVyLCBnZW5lcmF0ZVBhdGgsIGdldFN0YXRpY0NvbnRleHRGcm9tRXJyb3IsIGdldFRvUGF0aG5hbWUsIGludmFyaWFudCwgaXNSb3V0ZUVycm9yUmVzcG9uc2UsIGpvaW5QYXRocywganNvbiwgbWF0Y2hQYXRoLCBtYXRjaFJvdXRlcywgbm9ybWFsaXplUGF0aG5hbWUsIHBhcnNlUGF0aCwgcmVkaXJlY3QsIHJlc29sdmVQYXRoLCByZXNvbHZlVG8sIHN0cmlwQmFzZW5hbWUsIHVuc3RhYmxlX2NyZWF0ZVN0YXRpY0hhbmRsZXIsIHdhcm5pbmcgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJvdXRlci5qcy5tYXBcbiIsIi8qKlxuICogUmVhY3QgUm91dGVyIHY2LjQuMVxuICpcbiAqIENvcHlyaWdodCAoYykgUmVtaXggU29mdHdhcmUgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRS5tZCBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBsaWNlbnNlIE1JVFxuICovXG5pbXBvcnQgeyBpbnZhcmlhbnQsIHJlc29sdmVUbywgam9pblBhdGhzLCBtYXRjaFBhdGgsIHdhcm5pbmcsIHBhcnNlUGF0aCwgbWF0Y2hSb3V0ZXMsIEFjdGlvbiwgaXNSb3V0ZUVycm9yUmVzcG9uc2UsIGNyZWF0ZU1lbW9yeUhpc3RvcnksIHN0cmlwQmFzZW5hbWUsIEFib3J0ZWREZWZlcnJlZEVycm9yLCBjcmVhdGVSb3V0ZXIgfSBmcm9tICdAcmVtaXgtcnVuL3JvdXRlcic7XG5leHBvcnQgeyBBYm9ydGVkRGVmZXJyZWRFcnJvciwgQWN0aW9uIGFzIE5hdmlnYXRpb25UeXBlLCBjcmVhdGVQYXRoLCBkZWZlciwgZ2VuZXJhdGVQYXRoLCBpc1JvdXRlRXJyb3JSZXNwb25zZSwganNvbiwgbWF0Y2hQYXRoLCBtYXRjaFJvdXRlcywgcGFyc2VQYXRoLCByZWRpcmVjdCwgcmVzb2x2ZVBhdGggfSBmcm9tICdAcmVtaXgtcnVuL3JvdXRlcic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLyoqXG4gKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAqL1xuXG5mdW5jdGlvbiBpc1BvbHlmaWxsKHgsIHkpIHtcbiAgcmV0dXJuIHggPT09IHkgJiYgKHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5KSB8fCB4ICE9PSB4ICYmIHkgIT09IHkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgO1xufVxuXG5jb25zdCBpcyA9IHR5cGVvZiBPYmplY3QuaXMgPT09IFwiZnVuY3Rpb25cIiA/IE9iamVjdC5pcyA6IGlzUG9seWZpbGw7IC8vIEludGVudGlvbmFsbHkgbm90IHVzaW5nIG5hbWVkIGltcG9ydHMgYmVjYXVzZSBSb2xsdXAgdXNlcyBkeW5hbWljXG4vLyBkaXNwYXRjaCBmb3IgQ29tbW9uSlMgaW50ZXJvcCBuYW1lZCBpbXBvcnRzLlxuXG5jb25zdCB7XG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlRGVidWdWYWx1ZVxufSA9IFJlYWN0O1xubGV0IGRpZFdhcm5PbGQxOEFscGhhID0gZmFsc2U7XG5sZXQgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSBmYWxzZTsgLy8gRGlzY2xhaW1lcjogVGhpcyBzaGltIGJyZWFrcyBtYW55IG9mIHRoZSBydWxlcyBvZiBSZWFjdCwgYW5kIG9ubHkgd29ya3Ncbi8vIGJlY2F1c2Ugb2YgYSB2ZXJ5IHBhcnRpY3VsYXIgc2V0IG9mIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGFzc3VtcHRpb25zXG4vLyAtLSBjaGFuZ2UgYW55IG9uZSBvZiB0aGVtIGFuZCBpdCB3aWxsIGJyZWFrLiBUaGUgbW9zdCBpbXBvcnRhbnQgYXNzdW1wdGlvblxuLy8gaXMgdGhhdCB1cGRhdGVzIGFyZSBhbHdheXMgc3luY2hyb25vdXMsIGJlY2F1c2UgY29uY3VycmVudCByZW5kZXJpbmcgaXNcbi8vIG9ubHkgYXZhaWxhYmxlIGluIHZlcnNpb25zIG9mIFJlYWN0IHRoYXQgYWxzbyBoYXZlIGEgYnVpbHQtaW5cbi8vIHVzZVN5bmNFeHRlcm5hbFN0b3JlIEFQSS4gQW5kIHdlIG9ubHkgdXNlIHRoaXMgc2hpbSB3aGVuIHRoZSBidWlsdC1pbiBBUElcbi8vIGRvZXMgbm90IGV4aXN0LlxuLy9cbi8vIERvIG5vdCBhc3N1bWUgdGhhdCB0aGUgY2xldmVyIGhhY2tzIHVzZWQgYnkgdGhpcyBob29rIGFsc28gd29yayBpbiBnZW5lcmFsLlxuLy8gVGhlIHBvaW50IG9mIHRoaXMgc2hpbSBpcyB0byByZXBsYWNlIHRoZSBuZWVkIGZvciBoYWNrcyBieSBvdGhlciBsaWJyYXJpZXMuXG5cbmZ1bmN0aW9uIHVzZVN5bmNFeHRlcm5hbFN0b3JlJDIoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgLy8gTm90ZTogVGhlIHNoaW0gZG9lcyBub3QgdXNlIGdldFNlcnZlclNuYXBzaG90LCBiZWNhdXNlIHByZS0xOCB2ZXJzaW9ucyBvZlxuLy8gUmVhY3QgZG8gbm90IGV4cG9zZSBhIHdheSB0byBjaGVjayBpZiB3ZSdyZSBoeWRyYXRpbmcuIFNvIHVzZXJzIG9mIHRoZSBzaGltXG4vLyB3aWxsIG5lZWQgdG8gdHJhY2sgdGhhdCB0aGVtc2VsdmVzIGFuZCByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWVcbi8vIGZyb20gYGdldFNuYXBzaG90YC5cbmdldFNlcnZlclNuYXBzaG90KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAoIWRpZFdhcm5PbGQxOEFscGhhKSB7XG4gICAgICBpZiAoXCJzdGFydFRyYW5zaXRpb25cIiBpbiBSZWFjdCkge1xuICAgICAgICBkaWRXYXJuT2xkMThBbHBoYSA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UgYXJlIHVzaW5nIGFuIG91dGRhdGVkLCBwcmUtcmVsZWFzZSBhbHBoYSBvZiBSZWFjdCAxOCB0aGF0IFwiICsgXCJkb2VzIG5vdCBzdXBwb3J0IHVzZVN5bmNFeHRlcm5hbFN0b3JlLiBUaGUgXCIgKyBcInVzZS1zeW5jLWV4dGVybmFsLXN0b3JlIHNoaW0gd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuIFVwZ3JhZGUgXCIgKyBcInRvIGEgbmV3ZXIgcHJlLXJlbGVhc2UuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBSZWFkIHRoZSBjdXJyZW50IHNuYXBzaG90IGZyb20gdGhlIHN0b3JlIG9uIGV2ZXJ5IHJlbmRlci4gQWdhaW4sIHRoaXNcbiAgLy8gYnJlYWtzIHRoZSBydWxlcyBvZiBSZWFjdCwgYW5kIG9ubHkgd29ya3MgaGVyZSBiZWNhdXNlIG9mIHNwZWNpZmljXG4gIC8vIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG1vc3QgaW1wb3J0YW50bHkgdGhhdCB1cGRhdGVzIGFyZVxuICAvLyBhbHdheXMgc3luY2hyb25vdXMuXG5cblxuICBjb25zdCB2YWx1ZSA9IGdldFNuYXBzaG90KCk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmICghZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QpIHtcbiAgICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gZ2V0U25hcHNob3QoKTtcblxuICAgICAgaWYgKCFpcyh2YWx1ZSwgY2FjaGVkVmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgcmVzdWx0IG9mIGdldFNuYXBzaG90IHNob3VsZCBiZSBjYWNoZWQgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcFwiKTtcbiAgICAgICAgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBCZWNhdXNlIHVwZGF0ZXMgYXJlIHN5bmNocm9ub3VzLCB3ZSBkb24ndCBxdWV1ZSB0aGVtLiBJbnN0ZWFkIHdlIGZvcmNlIGFcbiAgLy8gcmUtcmVuZGVyIHdoZW5ldmVyIHRoZSBzdWJzY3JpYmVkIHN0YXRlIGNoYW5nZXMgYnkgdXBkYXRpbmcgYW4gc29tZVxuICAvLyBhcmJpdHJhcnkgdXNlU3RhdGUgaG9vay4gVGhlbiwgZHVyaW5nIHJlbmRlciwgd2UgY2FsbCBnZXRTbmFwc2hvdCB0byByZWFkXG4gIC8vIHRoZSBjdXJyZW50IHZhbHVlLlxuICAvL1xuICAvLyBCZWNhdXNlIHdlIGRvbid0IGFjdHVhbGx5IHVzZSB0aGUgc3RhdGUgcmV0dXJuZWQgYnkgdGhlIHVzZVN0YXRlIGhvb2ssIHdlXG4gIC8vIGNhbiBzYXZlIGEgYml0IG9mIG1lbW9yeSBieSBzdG9yaW5nIG90aGVyIHN0dWZmIGluIHRoYXQgc2xvdC5cbiAgLy9cbiAgLy8gVG8gaW1wbGVtZW50IHRoZSBlYXJseSBiYWlsb3V0LCB3ZSBuZWVkIHRvIHRyYWNrIHNvbWUgdGhpbmdzIG9uIGEgbXV0YWJsZVxuICAvLyBvYmplY3QuIFVzdWFsbHksIHdlIHdvdWxkIHB1dCB0aGF0IGluIGEgdXNlUmVmIGhvb2ssIGJ1dCB3ZSBjYW4gc3Rhc2ggaXQgaW5cbiAgLy8gb3VyIHVzZVN0YXRlIGhvb2sgaW5zdGVhZC5cbiAgLy9cbiAgLy8gVG8gZm9yY2UgYSByZS1yZW5kZXIsIHdlIGNhbGwgZm9yY2VVcGRhdGUoe2luc3R9KS4gVGhhdCB3b3JrcyBiZWNhdXNlIHRoZVxuICAvLyBuZXcgb2JqZWN0IGFsd2F5cyBmYWlscyBhbiBlcXVhbGl0eSBjaGVjay5cblxuXG4gIGNvbnN0IFt7XG4gICAgaW5zdFxuICB9LCBmb3JjZVVwZGF0ZV0gPSB1c2VTdGF0ZSh7XG4gICAgaW5zdDoge1xuICAgICAgdmFsdWUsXG4gICAgICBnZXRTbmFwc2hvdFxuICAgIH1cbiAgfSk7IC8vIFRyYWNrIHRoZSBsYXRlc3QgZ2V0U25hcHNob3QgZnVuY3Rpb24gd2l0aCBhIHJlZi4gVGhpcyBuZWVkcyB0byBiZSB1cGRhdGVkXG4gIC8vIGluIHRoZSBsYXlvdXQgcGhhc2Ugc28gd2UgY2FuIGFjY2VzcyBpdCBkdXJpbmcgdGhlIHRlYXJpbmcgY2hlY2sgdGhhdFxuICAvLyBoYXBwZW5zIG9uIHN1YnNjcmliZS5cblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGluc3QudmFsdWUgPSB2YWx1ZTtcbiAgICBpbnN0LmdldFNuYXBzaG90ID0gZ2V0U25hcHNob3Q7IC8vIFdoZW5ldmVyIGdldFNuYXBzaG90IG9yIHN1YnNjcmliZSBjaGFuZ2VzLCB3ZSBuZWVkIHRvIGNoZWNrIGluIHRoZVxuICAgIC8vIGNvbW1pdCBwaGFzZSBpZiB0aGVyZSB3YXMgYW4gaW50ZXJsZWF2ZWQgbXV0YXRpb24uIEluIGNvbmN1cnJlbnQgbW9kZVxuICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBhbGwgdGhlIHRpbWUsIGJ1dCBldmVuIGluIHN5bmNocm9ub3VzIG1vZGUsIGFuIGVhcmxpZXJcbiAgICAvLyBlZmZlY3QgbWF5IGhhdmUgbXV0YXRlZCB0aGUgc3RvcmUuXG5cbiAgICBpZiAoY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSkge1xuICAgICAgLy8gRm9yY2UgYSByZS1yZW5kZXIuXG4gICAgICBmb3JjZVVwZGF0ZSh7XG4gICAgICAgIGluc3RcbiAgICAgIH0pO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuXG4gIH0sIFtzdWJzY3JpYmUsIHZhbHVlLCBnZXRTbmFwc2hvdF0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIENoZWNrIGZvciBjaGFuZ2VzIHJpZ2h0IGJlZm9yZSBzdWJzY3JpYmluZy4gU3Vic2VxdWVudCBjaGFuZ2VzIHdpbGwgYmVcbiAgICAvLyBkZXRlY3RlZCBpbiB0aGUgc3Vic2NyaXB0aW9uIGhhbmRsZXIuXG4gICAgaWYgKGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkpIHtcbiAgICAgIC8vIEZvcmNlIGEgcmUtcmVuZGVyLlxuICAgICAgZm9yY2VVcGRhdGUoe1xuICAgICAgICBpbnN0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVTdG9yZUNoYW5nZSA9ICgpID0+IHtcbiAgICAgIC8vIFRPRE86IEJlY2F1c2UgdGhlcmUgaXMgbm8gY3Jvc3MtcmVuZGVyZXIgQVBJIGZvciBiYXRjaGluZyB1cGRhdGVzLCBpdCdzXG4gICAgICAvLyB1cCB0byB0aGUgY29uc3VtZXIgb2YgdGhpcyBsaWJyYXJ5IHRvIHdyYXAgdGhlaXIgc3Vic2NyaXB0aW9uIGV2ZW50XG4gICAgICAvLyB3aXRoIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLiBTaG91bGQgd2UgdHJ5IHRvIGRldGVjdCB3aGVuIHRoaXMgaXNuJ3RcbiAgICAgIC8vIHRoZSBjYXNlIGFuZCBwcmludCBhIHdhcm5pbmcgaW4gZGV2ZWxvcG1lbnQ/XG4gICAgICAvLyBUaGUgc3RvcmUgY2hhbmdlZC4gQ2hlY2sgaWYgdGhlIHNuYXBzaG90IGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZVxuICAgICAgLy8gcmVhZCBmcm9tIHRoZSBzdG9yZS5cbiAgICAgIGlmIChjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpKSB7XG4gICAgICAgIC8vIEZvcmNlIGEgcmUtcmVuZGVyLlxuICAgICAgICBmb3JjZVVwZGF0ZSh7XG4gICAgICAgICAgaW5zdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9OyAvLyBTdWJzY3JpYmUgdG8gdGhlIHN0b3JlIGFuZCByZXR1cm4gYSBjbGVhbi11cCBmdW5jdGlvbi5cblxuXG4gICAgcmV0dXJuIHN1YnNjcmliZShoYW5kbGVTdG9yZUNoYW5nZSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW3N1YnNjcmliZV0pO1xuICB1c2VEZWJ1Z1ZhbHVlKHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpIHtcbiAgY29uc3QgbGF0ZXN0R2V0U25hcHNob3QgPSBpbnN0LmdldFNuYXBzaG90O1xuICBjb25zdCBwcmV2VmFsdWUgPSBpbnN0LnZhbHVlO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbGF0ZXN0R2V0U25hcHNob3QoKTtcbiAgICByZXR1cm4gIWlzKHByZXZWYWx1ZSwgbmV4dFZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKi9cbmZ1bmN0aW9uIHVzZVN5bmNFeHRlcm5hbFN0b3JlJDEoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgLy8gTm90ZTogVGhlIHNoaW0gZG9lcyBub3QgdXNlIGdldFNlcnZlclNuYXBzaG90LCBiZWNhdXNlIHByZS0xOCB2ZXJzaW9ucyBvZlxuICAvLyBSZWFjdCBkbyBub3QgZXhwb3NlIGEgd2F5IHRvIGNoZWNrIGlmIHdlJ3JlIGh5ZHJhdGluZy4gU28gdXNlcnMgb2YgdGhlIHNoaW1cbiAgLy8gd2lsbCBuZWVkIHRvIHRyYWNrIHRoYXQgdGhlbXNlbHZlcyBhbmQgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlXG4gIC8vIGZyb20gYGdldFNuYXBzaG90YC5cbiAgcmV0dXJuIGdldFNuYXBzaG90KCk7XG59XG5cbi8qKlxuICogSW5saW5lZCBpbnRvIHRoZSByZWFjdC1yb3V0ZXIgcmVwbyBzaW5jZSB1c2Utc3luYy1leHRlcm5hbC1zdG9yZSBkb2VzIG5vdFxuICogcHJvdmlkZSBhIFVNRC1jb21wYXRpYmxlIHBhY2thZ2UsIHNvIHdlIG5lZWQgdGhpcyB0byBiZSBhYmxlIHRvIGRpc3RyaWJ1dGVcbiAqIFVNRCByZWFjdC1yb3V0ZXIgYnVuZGxlc1xuICovXG5jb25zdCBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiKTtcbmNvbnN0IGlzU2VydmVyRW52aXJvbm1lbnQgPSAhY2FuVXNlRE9NO1xuY29uc3Qgc2hpbSA9IGlzU2VydmVyRW52aXJvbm1lbnQgPyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQxIDogdXNlU3luY0V4dGVybmFsU3RvcmUkMjtcbmNvbnN0IHVzZVN5bmNFeHRlcm5hbFN0b3JlID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiIGluIFJlYWN0ID8gKG1vZHVsZSA9PiBtb2R1bGUudXNlU3luY0V4dGVybmFsU3RvcmUpKFJlYWN0KSA6IHNoaW07XG5cbi8vIENvbnRleHRzIGZvciBkYXRhIHJvdXRlcnNcbmNvbnN0IERhdGFTdGF0aWNSb3V0ZXJDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgRGF0YVN0YXRpY1JvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSBcIkRhdGFTdGF0aWNSb3V0ZXJDb250ZXh0XCI7XG59XG5cbmNvbnN0IERhdGFSb3V0ZXJDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgRGF0YVJvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSBcIkRhdGFSb3V0ZXJcIjtcbn1cblxuY29uc3QgRGF0YVJvdXRlclN0YXRlQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIERhdGFSb3V0ZXJTdGF0ZUNvbnRleHQuZGlzcGxheU5hbWUgPSBcIkRhdGFSb3V0ZXJTdGF0ZVwiO1xufVxuXG5jb25zdCBBd2FpdENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBBd2FpdENvbnRleHQuZGlzcGxheU5hbWUgPSBcIkF3YWl0XCI7XG59XG5cbmNvbnN0IE5hdmlnYXRpb25Db250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgTmF2aWdhdGlvbkNvbnRleHQuZGlzcGxheU5hbWUgPSBcIk5hdmlnYXRpb25cIjtcbn1cblxuY29uc3QgTG9jYXRpb25Db250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgTG9jYXRpb25Db250ZXh0LmRpc3BsYXlOYW1lID0gXCJMb2NhdGlvblwiO1xufVxuXG5jb25zdCBSb3V0ZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7XG4gIG91dGxldDogbnVsbCxcbiAgbWF0Y2hlczogW11cbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIFJvdXRlQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiUm91dGVcIjtcbn1cblxuY29uc3QgUm91dGVFcnJvckNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBSb3V0ZUVycm9yQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiUm91dGVFcnJvclwiO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZ1bGwgaHJlZiBmb3IgdGhlIGdpdmVuIFwidG9cIiB2YWx1ZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGJ1aWxkaW5nXG4gKiBjdXN0b20gbGlua3MgdGhhdCBhcmUgYWxzbyBhY2Nlc3NpYmxlIGFuZCBwcmVzZXJ2ZSByaWdodC1jbGljayBiZWhhdmlvci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLWhyZWZcbiAqL1xuXG5mdW5jdGlvbiB1c2VIcmVmKHRvLCBfdGVtcCkge1xuICBsZXQge1xuICAgIHJlbGF0aXZlXG4gIH0gPSBfdGVtcCA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDtcbiAgIXVzZUluUm91dGVyQ29udGV4dCgpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAvLyBUT0RPOiBUaGlzIGVycm9yIGlzIHByb2JhYmx5IGJlY2F1c2UgdGhleSBzb21laG93IGhhdmUgMiB2ZXJzaW9ucyBvZiB0aGVcbiAgLy8gcm91dGVyIGxvYWRlZC4gV2UgY2FuIGhlbHAgdGhlbSB1bmRlcnN0YW5kIGhvdyB0byBhdm9pZCB0aGF0LlxuICBcInVzZUhyZWYoKSBtYXkgYmUgdXNlZCBvbmx5IGluIHRoZSBjb250ZXh0IG9mIGEgPFJvdXRlcj4gY29tcG9uZW50LlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCB7XG4gICAgYmFzZW5hbWUsXG4gICAgbmF2aWdhdG9yXG4gIH0gPSBSZWFjdC51c2VDb250ZXh0KE5hdmlnYXRpb25Db250ZXh0KTtcbiAgbGV0IHtcbiAgICBoYXNoLFxuICAgIHBhdGhuYW1lLFxuICAgIHNlYXJjaFxuICB9ID0gdXNlUmVzb2x2ZWRQYXRoKHRvLCB7XG4gICAgcmVsYXRpdmVcbiAgfSk7XG4gIGxldCBqb2luZWRQYXRobmFtZSA9IHBhdGhuYW1lOyAvLyBJZiB3ZSdyZSBvcGVyYXRpbmcgd2l0aGluIGEgYmFzZW5hbWUsIHByZXBlbmQgaXQgdG8gdGhlIHBhdGhuYW1lIHByaW9yXG4gIC8vIHRvIGNyZWF0aW5nIHRoZSBocmVmLiAgSWYgdGhpcyBpcyBhIHJvb3QgbmF2aWdhdGlvbiwgdGhlbiBqdXN0IHVzZSB0aGUgcmF3XG4gIC8vIGJhc2VuYW1lIHdoaWNoIGFsbG93cyB0aGUgYmFzZW5hbWUgdG8gaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgcHJlc2VuY2VcbiAgLy8gb2YgYSB0cmFpbGluZyBzbGFzaCBvbiByb290IGxpbmtzXG5cbiAgaWYgKGJhc2VuYW1lICE9PSBcIi9cIikge1xuICAgIGpvaW5lZFBhdGhuYW1lID0gcGF0aG5hbWUgPT09IFwiL1wiID8gYmFzZW5hbWUgOiBqb2luUGF0aHMoW2Jhc2VuYW1lLCBwYXRobmFtZV0pO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci5jcmVhdGVIcmVmKHtcbiAgICBwYXRobmFtZTogam9pbmVkUGF0aG5hbWUsXG4gICAgc2VhcmNoLFxuICAgIGhhc2hcbiAgfSk7XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNvbXBvbmVudCBpcyBhIGRlc2NlbmRhbnQgb2YgYSA8Um91dGVyPi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLWluLXJvdXRlci1jb250ZXh0XG4gKi9cblxuZnVuY3Rpb24gdXNlSW5Sb3V0ZXJDb250ZXh0KCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChMb2NhdGlvbkNvbnRleHQpICE9IG51bGw7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2JqZWN0LCB3aGljaCByZXByZXNlbnRzIHRoZSBjdXJyZW50IFVSTCBpbiB3ZWJcbiAqIGJyb3dzZXJzLlxuICpcbiAqIE5vdGU6IElmIHlvdSdyZSB1c2luZyB0aGlzIGl0IG1heSBtZWFuIHlvdSdyZSBkb2luZyBzb21lIG9mIHlvdXIgb3duXG4gKiBcInJvdXRpbmdcIiBpbiB5b3VyIGFwcCwgYW5kIHdlJ2QgbGlrZSB0byBrbm93IHdoYXQgeW91ciB1c2UgY2FzZSBpcy4gV2UgbWF5XG4gKiBiZSBhYmxlIHRvIHByb3ZpZGUgc29tZXRoaW5nIGhpZ2hlci1sZXZlbCB0byBiZXR0ZXIgc3VpdCB5b3VyIG5lZWRzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2UtbG9jYXRpb25cbiAqL1xuXG5mdW5jdGlvbiB1c2VMb2NhdGlvbigpIHtcbiAgIXVzZUluUm91dGVyQ29udGV4dCgpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAvLyBUT0RPOiBUaGlzIGVycm9yIGlzIHByb2JhYmx5IGJlY2F1c2UgdGhleSBzb21laG93IGhhdmUgMiB2ZXJzaW9ucyBvZiB0aGVcbiAgLy8gcm91dGVyIGxvYWRlZC4gV2UgY2FuIGhlbHAgdGhlbSB1bmRlcnN0YW5kIGhvdyB0byBhdm9pZCB0aGF0LlxuICBcInVzZUxvY2F0aW9uKCkgbWF5IGJlIHVzZWQgb25seSBpbiB0aGUgY29udGV4dCBvZiBhIDxSb3V0ZXI+IGNvbXBvbmVudC5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChMb2NhdGlvbkNvbnRleHQpLmxvY2F0aW9uO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gYWN0aW9uIHdoaWNoIGRlc2NyaWJlcyBob3cgdGhlIHJvdXRlciBjYW1lIHRvXG4gKiB0aGUgY3VycmVudCBsb2NhdGlvbiwgZWl0aGVyIGJ5IGEgcG9wLCBwdXNoLCBvciByZXBsYWNlIG9uIHRoZSBoaXN0b3J5IHN0YWNrLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2UtbmF2aWdhdGlvbi10eXBlXG4gKi9cblxuZnVuY3Rpb24gdXNlTmF2aWdhdGlvblR5cGUoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KExvY2F0aW9uQ29udGV4dCkubmF2aWdhdGlvblR5cGU7XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgVVJMIGZvciB0aGUgZ2l2ZW4gXCJ0b1wiIHZhbHVlIG1hdGNoZXMgdGhlIGN1cnJlbnQgVVJMLlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIGNvbXBvbmVudHMgdGhhdCBuZWVkIHRvIGtub3cgXCJhY3RpdmVcIiBzdGF0ZSwgZS5nLlxuICogPE5hdkxpbms+LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2UtbWF0Y2hcbiAqL1xuXG5mdW5jdGlvbiB1c2VNYXRjaChwYXR0ZXJuKSB7XG4gICF1c2VJblJvdXRlckNvbnRleHQoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgLy8gVE9ETzogVGhpcyBlcnJvciBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZXkgc29tZWhvdyBoYXZlIDIgdmVyc2lvbnMgb2YgdGhlXG4gIC8vIHJvdXRlciBsb2FkZWQuIFdlIGNhbiBoZWxwIHRoZW0gdW5kZXJzdGFuZCBob3cgdG8gYXZvaWQgdGhhdC5cbiAgXCJ1c2VNYXRjaCgpIG1heSBiZSB1c2VkIG9ubHkgaW4gdGhlIGNvbnRleHQgb2YgYSA8Um91dGVyPiBjb21wb25lbnQuXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IHtcbiAgICBwYXRobmFtZVxuICB9ID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4gbWF0Y2hQYXRoKHBhdHRlcm4sIHBhdGhuYW1lKSwgW3BhdGhuYW1lLCBwYXR0ZXJuXSk7XG59XG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBuYXZpZ2F0ZSgpIGZ1bmN0aW9uIHJldHVybmVkIGZyb20gdXNlTmF2aWdhdGUoKS5cbiAqL1xuXG4vKipcbiAqIFdoZW4gcHJvY2Vzc2luZyByZWxhdGl2ZSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gaWdub3JlIGFuY2VzdG9yIHJvdXRlcyB0aGF0XG4gKiBkbyBub3QgY29udHJpYnV0ZSB0byB0aGUgcGF0aCwgc3VjaCB0aGF0IGluZGV4L3BhdGhsZXNzIGxheW91dCByb3V0ZXMgZG9uJ3RcbiAqIGludGVyZmVyZS5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgd2hlbiBtb3ZpbmcgYSByb3V0ZSBlbGVtZW50IGludG8gYW4gaW5kZXggcm91dGUgYW5kL29yIGFcbiAqIHBhdGhsZXNzIGxheW91dCByb3V0ZSwgcmVsYXRpdmUgbGluayBiZWhhdmlvciBjb250YWluZWQgd2l0aGluIHNob3VsZCBzdGF5XG4gKiB0aGUgc2FtZS4gIEJvdGggb2YgdGhlIGZvbGxvd2luZyBleGFtcGxlcyBzaG91bGQgbGluayBiYWNrIHRvIHRoZSByb290OlxuICpcbiAqICAgPFJvdXRlIHBhdGg9XCIvXCI+XG4gKiAgICAgPFJvdXRlIHBhdGg9XCJhY2NvdW50c1wiIGVsZW1lbnQ9ezxMaW5rIHRvPVwiLi5cIn0+XG4gKiAgIDwvUm91dGU+XG4gKlxuICogICA8Um91dGUgcGF0aD1cIi9cIj5cbiAqICAgICA8Um91dGUgcGF0aD1cImFjY291bnRzXCI+XG4gKiAgICAgICA8Um91dGUgZWxlbWVudD17PEFjY291bnRzTGF5b3V0IC8+fT4gICAgICAgLy8gPC0tIERvZXMgbm90IGNvbnRyaWJ1dGVcbiAqICAgICAgICAgPFJvdXRlIGluZGV4IGVsZW1lbnQ9ezxMaW5rIHRvPVwiLi5cIn0gLz4gIC8vIDwtLSBEb2VzIG5vdCBjb250cmlidXRlXG4gKiAgICAgICA8L1JvdXRlXG4gKiAgICAgPC9Sb3V0ZT5cbiAqICAgPC9Sb3V0ZT5cbiAqL1xuZnVuY3Rpb24gZ2V0UGF0aENvbnRyaWJ1dGluZ01hdGNoZXMobWF0Y2hlcykge1xuICByZXR1cm4gbWF0Y2hlcy5maWx0ZXIoKG1hdGNoLCBpbmRleCkgPT4gaW5kZXggPT09IDAgfHwgIW1hdGNoLnJvdXRlLmluZGV4ICYmIG1hdGNoLnBhdGhuYW1lQmFzZSAhPT0gbWF0Y2hlc1tpbmRleCAtIDFdLnBhdGhuYW1lQmFzZSk7XG59XG4vKipcbiAqIFJldHVybnMgYW4gaW1wZXJhdGl2ZSBtZXRob2QgZm9yIGNoYW5naW5nIHRoZSBsb2NhdGlvbi4gVXNlZCBieSA8TGluaz5zLCBidXRcbiAqIG1heSBhbHNvIGJlIHVzZWQgYnkgb3RoZXIgZWxlbWVudHMgdG8gY2hhbmdlIHRoZSBsb2NhdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLW5hdmlnYXRlXG4gKi9cblxuXG5mdW5jdGlvbiB1c2VOYXZpZ2F0ZSgpIHtcbiAgIXVzZUluUm91dGVyQ29udGV4dCgpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAvLyBUT0RPOiBUaGlzIGVycm9yIGlzIHByb2JhYmx5IGJlY2F1c2UgdGhleSBzb21laG93IGhhdmUgMiB2ZXJzaW9ucyBvZiB0aGVcbiAgLy8gcm91dGVyIGxvYWRlZC4gV2UgY2FuIGhlbHAgdGhlbSB1bmRlcnN0YW5kIGhvdyB0byBhdm9pZCB0aGF0LlxuICBcInVzZU5hdmlnYXRlKCkgbWF5IGJlIHVzZWQgb25seSBpbiB0aGUgY29udGV4dCBvZiBhIDxSb3V0ZXI+IGNvbXBvbmVudC5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQge1xuICAgIGJhc2VuYW1lLFxuICAgIG5hdmlnYXRvclxuICB9ID0gUmVhY3QudXNlQ29udGV4dChOYXZpZ2F0aW9uQ29udGV4dCk7XG4gIGxldCB7XG4gICAgbWF0Y2hlc1xuICB9ID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUNvbnRleHQpO1xuICBsZXQge1xuICAgIHBhdGhuYW1lOiBsb2NhdGlvblBhdGhuYW1lXG4gIH0gPSB1c2VMb2NhdGlvbigpO1xuICBsZXQgcm91dGVQYXRobmFtZXNKc29uID0gSlNPTi5zdHJpbmdpZnkoZ2V0UGF0aENvbnRyaWJ1dGluZ01hdGNoZXMobWF0Y2hlcykubWFwKG1hdGNoID0+IG1hdGNoLnBhdGhuYW1lQmFzZSkpO1xuICBsZXQgYWN0aXZlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhY3RpdmVSZWYuY3VycmVudCA9IHRydWU7XG4gIH0pO1xuICBsZXQgbmF2aWdhdGUgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAodG8sIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhhY3RpdmVSZWYuY3VycmVudCwgXCJZb3Ugc2hvdWxkIGNhbGwgbmF2aWdhdGUoKSBpbiBhIFJlYWN0LnVzZUVmZmVjdCgpLCBub3Qgd2hlbiBcIiArIFwieW91ciBjb21wb25lbnQgaXMgZmlyc3QgcmVuZGVyZWQuXCIpIDogdm9pZCAwO1xuICAgIGlmICghYWN0aXZlUmVmLmN1cnJlbnQpIHJldHVybjtcblxuICAgIGlmICh0eXBlb2YgdG8gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIG5hdmlnYXRvci5nbyh0byk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBhdGggPSByZXNvbHZlVG8odG8sIEpTT04ucGFyc2Uocm91dGVQYXRobmFtZXNKc29uKSwgbG9jYXRpb25QYXRobmFtZSwgb3B0aW9ucy5yZWxhdGl2ZSA9PT0gXCJwYXRoXCIpOyAvLyBJZiB3ZSdyZSBvcGVyYXRpbmcgd2l0aGluIGEgYmFzZW5hbWUsIHByZXBlbmQgaXQgdG8gdGhlIHBhdGhuYW1lIHByaW9yXG4gICAgLy8gdG8gaGFuZGluZyBvZmYgdG8gaGlzdG9yeS4gIElmIHRoaXMgaXMgYSByb290IG5hdmlnYXRpb24sIHRoZW4gd2VcbiAgICAvLyBuYXZpZ2F0ZSB0byB0aGUgcmF3IGJhc2VuYW1lIHdoaWNoIGFsbG93cyB0aGUgYmFzZW5hbWUgdG8gaGF2ZSBmdWxsXG4gICAgLy8gY29udHJvbCBvdmVyIHRoZSBwcmVzZW5jZSBvZiBhIHRyYWlsaW5nIHNsYXNoIG9uIHJvb3QgbGlua3NcblxuICAgIGlmIChiYXNlbmFtZSAhPT0gXCIvXCIpIHtcbiAgICAgIHBhdGgucGF0aG5hbWUgPSBwYXRoLnBhdGhuYW1lID09PSBcIi9cIiA/IGJhc2VuYW1lIDogam9pblBhdGhzKFtiYXNlbmFtZSwgcGF0aC5wYXRobmFtZV0pO1xuICAgIH1cblxuICAgICghIW9wdGlvbnMucmVwbGFjZSA/IG5hdmlnYXRvci5yZXBsYWNlIDogbmF2aWdhdG9yLnB1c2gpKHBhdGgsIG9wdGlvbnMuc3RhdGUsIG9wdGlvbnMpO1xuICB9LCBbYmFzZW5hbWUsIG5hdmlnYXRvciwgcm91dGVQYXRobmFtZXNKc29uLCBsb2NhdGlvblBhdGhuYW1lXSk7XG4gIHJldHVybiBuYXZpZ2F0ZTtcbn1cbmNvbnN0IE91dGxldENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcbi8qKlxuICogUmV0dXJucyB0aGUgY29udGV4dCAoaWYgcHJvdmlkZWQpIGZvciB0aGUgY2hpbGQgcm91dGUgYXQgdGhpcyBsZXZlbCBvZiB0aGUgcm91dGVcbiAqIGhpZXJhcmNoeS5cbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2Utb3V0bGV0LWNvbnRleHRcbiAqL1xuXG5mdW5jdGlvbiB1c2VPdXRsZXRDb250ZXh0KCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChPdXRsZXRDb250ZXh0KTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgZWxlbWVudCBmb3IgdGhlIGNoaWxkIHJvdXRlIGF0IHRoaXMgbGV2ZWwgb2YgdGhlIHJvdXRlXG4gKiBoaWVyYXJjaHkuIFVzZWQgaW50ZXJuYWxseSBieSA8T3V0bGV0PiB0byByZW5kZXIgY2hpbGQgcm91dGVzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2Utb3V0bGV0XG4gKi9cblxuZnVuY3Rpb24gdXNlT3V0bGV0KGNvbnRleHQpIHtcbiAgbGV0IG91dGxldCA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVDb250ZXh0KS5vdXRsZXQ7XG5cbiAgaWYgKG91dGxldCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPdXRsZXRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY29udGV4dFxuICAgIH0sIG91dGxldCk7XG4gIH1cblxuICByZXR1cm4gb3V0bGV0O1xufVxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnMgb2YgdGhlIGR5bmFtaWMgcGFyYW1zIGZyb20gdGhlIGN1cnJlbnRcbiAqIFVSTCB0aGF0IHdlcmUgbWF0Y2hlZCBieSB0aGUgcm91dGUgcGF0aC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLXBhcmFtc1xuICovXG5cbmZ1bmN0aW9uIHVzZVBhcmFtcygpIHtcbiAgbGV0IHtcbiAgICBtYXRjaGVzXG4gIH0gPSBSZWFjdC51c2VDb250ZXh0KFJvdXRlQ29udGV4dCk7XG4gIGxldCByb3V0ZU1hdGNoID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gcm91dGVNYXRjaCA/IHJvdXRlTWF0Y2gucGFyYW1zIDoge307XG59XG4vKipcbiAqIFJlc29sdmVzIHRoZSBwYXRobmFtZSBvZiB0aGUgZ2l2ZW4gYHRvYCB2YWx1ZSBhZ2FpbnN0IHRoZSBjdXJyZW50IGxvY2F0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2UtcmVzb2x2ZWQtcGF0aFxuICovXG5cbmZ1bmN0aW9uIHVzZVJlc29sdmVkUGF0aCh0bywgX3RlbXAyKSB7XG4gIGxldCB7XG4gICAgcmVsYXRpdmVcbiAgfSA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDI7XG4gIGxldCB7XG4gICAgbWF0Y2hlc1xuICB9ID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUNvbnRleHQpO1xuICBsZXQge1xuICAgIHBhdGhuYW1lOiBsb2NhdGlvblBhdGhuYW1lXG4gIH0gPSB1c2VMb2NhdGlvbigpO1xuICBsZXQgcm91dGVQYXRobmFtZXNKc29uID0gSlNPTi5zdHJpbmdpZnkoZ2V0UGF0aENvbnRyaWJ1dGluZ01hdGNoZXMobWF0Y2hlcykubWFwKG1hdGNoID0+IG1hdGNoLnBhdGhuYW1lQmFzZSkpO1xuICByZXR1cm4gUmVhY3QudXNlTWVtbygoKSA9PiByZXNvbHZlVG8odG8sIEpTT04ucGFyc2Uocm91dGVQYXRobmFtZXNKc29uKSwgbG9jYXRpb25QYXRobmFtZSwgcmVsYXRpdmUgPT09IFwicGF0aFwiKSwgW3RvLCByb3V0ZVBhdGhuYW1lc0pzb24sIGxvY2F0aW9uUGF0aG5hbWUsIHJlbGF0aXZlXSk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGVsZW1lbnQgb2YgdGhlIHJvdXRlIHRoYXQgbWF0Y2hlZCB0aGUgY3VycmVudCBsb2NhdGlvbiwgcHJlcGFyZWRcbiAqIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dCB0byByZW5kZXIgdGhlIHJlbWFpbmRlciBvZiB0aGUgcm91dGUgdHJlZS4gUm91dGVcbiAqIGVsZW1lbnRzIGluIHRoZSB0cmVlIG11c3QgcmVuZGVyIGFuIDxPdXRsZXQ+IHRvIHJlbmRlciB0aGVpciBjaGlsZCByb3V0ZSdzXG4gKiBlbGVtZW50LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2Utcm91dGVzXG4gKi9cblxuZnVuY3Rpb24gdXNlUm91dGVzKHJvdXRlcywgbG9jYXRpb25BcmcpIHtcbiAgIXVzZUluUm91dGVyQ29udGV4dCgpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAvLyBUT0RPOiBUaGlzIGVycm9yIGlzIHByb2JhYmx5IGJlY2F1c2UgdGhleSBzb21laG93IGhhdmUgMiB2ZXJzaW9ucyBvZiB0aGVcbiAgLy8gcm91dGVyIGxvYWRlZC4gV2UgY2FuIGhlbHAgdGhlbSB1bmRlcnN0YW5kIGhvdyB0byBhdm9pZCB0aGF0LlxuICBcInVzZVJvdXRlcygpIG1heSBiZSB1c2VkIG9ubHkgaW4gdGhlIGNvbnRleHQgb2YgYSA8Um91dGVyPiBjb21wb25lbnQuXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IGRhdGFSb3V0ZXJTdGF0ZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KERhdGFSb3V0ZXJTdGF0ZUNvbnRleHQpO1xuICBsZXQge1xuICAgIG1hdGNoZXM6IHBhcmVudE1hdGNoZXNcbiAgfSA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVDb250ZXh0KTtcbiAgbGV0IHJvdXRlTWF0Y2ggPSBwYXJlbnRNYXRjaGVzW3BhcmVudE1hdGNoZXMubGVuZ3RoIC0gMV07XG4gIGxldCBwYXJlbnRQYXJhbXMgPSByb3V0ZU1hdGNoID8gcm91dGVNYXRjaC5wYXJhbXMgOiB7fTtcbiAgbGV0IHBhcmVudFBhdGhuYW1lID0gcm91dGVNYXRjaCA/IHJvdXRlTWF0Y2gucGF0aG5hbWUgOiBcIi9cIjtcbiAgbGV0IHBhcmVudFBhdGhuYW1lQmFzZSA9IHJvdXRlTWF0Y2ggPyByb3V0ZU1hdGNoLnBhdGhuYW1lQmFzZSA6IFwiL1wiO1xuICBsZXQgcGFyZW50Um91dGUgPSByb3V0ZU1hdGNoICYmIHJvdXRlTWF0Y2gucm91dGU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIC8vIFlvdSB3b24ndCBnZXQgYSB3YXJuaW5nIGFib3V0IDIgZGlmZmVyZW50IDxSb3V0ZXM+IHVuZGVyIGEgPFJvdXRlPlxuICAgIC8vIHdpdGhvdXQgYSB0cmFpbGluZyAqLCBidXQgdGhpcyBpcyBhIGJlc3QtZWZmb3J0IHdhcm5pbmcgYW55d2F5IHNpbmNlIHdlXG4gICAgLy8gY2Fubm90IGV2ZW4gZ2l2ZSB0aGUgd2FybmluZyB1bmxlc3MgdGhleSBsYW5kIGF0IHRoZSBwYXJlbnQgcm91dGUuXG4gICAgLy9cbiAgICAvLyBFeGFtcGxlOlxuICAgIC8vXG4gICAgLy8gPFJvdXRlcz5cbiAgICAvLyAgIHsvKiBUaGlzIHJvdXRlIHBhdGggTVVTVCBlbmQgd2l0aCAvKiBiZWNhdXNlIG90aGVyd2lzZVxuICAgIC8vICAgICAgIGl0IHdpbGwgbmV2ZXIgbWF0Y2ggL2Jsb2cvcG9zdC8xMjMgKi99XG4gICAgLy8gICA8Um91dGUgcGF0aD1cImJsb2dcIiBlbGVtZW50PXs8QmxvZyAvPn0gLz5cbiAgICAvLyAgIDxSb3V0ZSBwYXRoPVwiYmxvZy9mZWVkXCIgZWxlbWVudD17PEJsb2dGZWVkIC8+fSAvPlxuICAgIC8vIDwvUm91dGVzPlxuICAgIC8vXG4gICAgLy8gZnVuY3Rpb24gQmxvZygpIHtcbiAgICAvLyAgIHJldHVybiAoXG4gICAgLy8gICAgIDxSb3V0ZXM+XG4gICAgLy8gICAgICAgPFJvdXRlIHBhdGg9XCJwb3N0LzppZFwiIGVsZW1lbnQ9ezxQb3N0IC8+fSAvPlxuICAgIC8vICAgICA8L1JvdXRlcz5cbiAgICAvLyAgICk7XG4gICAgLy8gfVxuICAgIGxldCBwYXJlbnRQYXRoID0gcGFyZW50Um91dGUgJiYgcGFyZW50Um91dGUucGF0aCB8fCBcIlwiO1xuICAgIHdhcm5pbmdPbmNlKHBhcmVudFBhdGhuYW1lLCAhcGFyZW50Um91dGUgfHwgcGFyZW50UGF0aC5lbmRzV2l0aChcIipcIiksIFwiWW91IHJlbmRlcmVkIGRlc2NlbmRhbnQgPFJvdXRlcz4gKG9yIGNhbGxlZCBgdXNlUm91dGVzKClgKSBhdCBcIiArIChcIlxcXCJcIiArIHBhcmVudFBhdGhuYW1lICsgXCJcXFwiICh1bmRlciA8Um91dGUgcGF0aD1cXFwiXCIgKyBwYXJlbnRQYXRoICsgXCJcXFwiPikgYnV0IHRoZSBcIikgKyBcInBhcmVudCByb3V0ZSBwYXRoIGhhcyBubyB0cmFpbGluZyBcXFwiKlxcXCIuIFRoaXMgbWVhbnMgaWYgeW91IG5hdmlnYXRlIFwiICsgXCJkZWVwZXIsIHRoZSBwYXJlbnQgd29uJ3QgbWF0Y2ggYW55bW9yZSBhbmQgdGhlcmVmb3JlIHRoZSBjaGlsZCBcIiArIFwicm91dGVzIHdpbGwgbmV2ZXIgcmVuZGVyLlxcblxcblwiICsgKFwiUGxlYXNlIGNoYW5nZSB0aGUgcGFyZW50IDxSb3V0ZSBwYXRoPVxcXCJcIiArIHBhcmVudFBhdGggKyBcIlxcXCI+IHRvIDxSb3V0ZSBcIikgKyAoXCJwYXRoPVxcXCJcIiArIChwYXJlbnRQYXRoID09PSBcIi9cIiA/IFwiKlwiIDogcGFyZW50UGF0aCArIFwiLypcIikgKyBcIlxcXCI+LlwiKSk7XG4gIH1cblxuICBsZXQgbG9jYXRpb25Gcm9tQ29udGV4dCA9IHVzZUxvY2F0aW9uKCk7XG4gIGxldCBsb2NhdGlvbjtcblxuICBpZiAobG9jYXRpb25BcmcpIHtcbiAgICB2YXIgX3BhcnNlZExvY2F0aW9uQXJnJHBhO1xuXG4gICAgbGV0IHBhcnNlZExvY2F0aW9uQXJnID0gdHlwZW9mIGxvY2F0aW9uQXJnID09PSBcInN0cmluZ1wiID8gcGFyc2VQYXRoKGxvY2F0aW9uQXJnKSA6IGxvY2F0aW9uQXJnO1xuICAgICEocGFyZW50UGF0aG5hbWVCYXNlID09PSBcIi9cIiB8fCAoKF9wYXJzZWRMb2NhdGlvbkFyZyRwYSA9IHBhcnNlZExvY2F0aW9uQXJnLnBhdGhuYW1lKSA9PSBudWxsID8gdm9pZCAwIDogX3BhcnNlZExvY2F0aW9uQXJnJHBhLnN0YXJ0c1dpdGgocGFyZW50UGF0aG5hbWVCYXNlKSkpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIldoZW4gb3ZlcnJpZGluZyB0aGUgbG9jYXRpb24gdXNpbmcgYDxSb3V0ZXMgbG9jYXRpb24+YCBvciBgdXNlUm91dGVzKHJvdXRlcywgbG9jYXRpb24pYCwgXCIgKyBcInRoZSBsb2NhdGlvbiBwYXRobmFtZSBtdXN0IGJlZ2luIHdpdGggdGhlIHBvcnRpb24gb2YgdGhlIFVSTCBwYXRobmFtZSB0aGF0IHdhcyBcIiArIChcIm1hdGNoZWQgYnkgYWxsIHBhcmVudCByb3V0ZXMuIFRoZSBjdXJyZW50IHBhdGhuYW1lIGJhc2UgaXMgXFxcIlwiICsgcGFyZW50UGF0aG5hbWVCYXNlICsgXCJcXFwiIFwiKSArIChcImJ1dCBwYXRobmFtZSBcXFwiXCIgKyBwYXJzZWRMb2NhdGlvbkFyZy5wYXRobmFtZSArIFwiXFxcIiB3YXMgZ2l2ZW4gaW4gdGhlIGBsb2NhdGlvbmAgcHJvcC5cIikpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBsb2NhdGlvbiA9IHBhcnNlZExvY2F0aW9uQXJnO1xuICB9IGVsc2Uge1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb25Gcm9tQ29udGV4dDtcbiAgfVxuXG4gIGxldCBwYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lIHx8IFwiL1wiO1xuICBsZXQgcmVtYWluaW5nUGF0aG5hbWUgPSBwYXJlbnRQYXRobmFtZUJhc2UgPT09IFwiL1wiID8gcGF0aG5hbWUgOiBwYXRobmFtZS5zbGljZShwYXJlbnRQYXRobmFtZUJhc2UubGVuZ3RoKSB8fCBcIi9cIjtcbiAgbGV0IG1hdGNoZXMgPSBtYXRjaFJvdXRlcyhyb3V0ZXMsIHtcbiAgICBwYXRobmFtZTogcmVtYWluaW5nUGF0aG5hbWVcbiAgfSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcocGFyZW50Um91dGUgfHwgbWF0Y2hlcyAhPSBudWxsLCBcIk5vIHJvdXRlcyBtYXRjaGVkIGxvY2F0aW9uIFxcXCJcIiArIGxvY2F0aW9uLnBhdGhuYW1lICsgbG9jYXRpb24uc2VhcmNoICsgbG9jYXRpb24uaGFzaCArIFwiXFxcIiBcIikgOiB2b2lkIDA7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhtYXRjaGVzID09IG51bGwgfHwgbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdLnJvdXRlLmVsZW1lbnQgIT09IHVuZGVmaW5lZCwgXCJNYXRjaGVkIGxlYWYgcm91dGUgYXQgbG9jYXRpb24gXFxcIlwiICsgbG9jYXRpb24ucGF0aG5hbWUgKyBsb2NhdGlvbi5zZWFyY2ggKyBsb2NhdGlvbi5oYXNoICsgXCJcXFwiIGRvZXMgbm90IGhhdmUgYW4gZWxlbWVudC4gXCIgKyBcIlRoaXMgbWVhbnMgaXQgd2lsbCByZW5kZXIgYW4gPE91dGxldCAvPiB3aXRoIGEgbnVsbCB2YWx1ZSBieSBkZWZhdWx0IHJlc3VsdGluZyBpbiBhbiBcXFwiZW1wdHlcXFwiIHBhZ2UuXCIpIDogdm9pZCAwO1xuICB9XG5cbiAgbGV0IHJlbmRlcmVkTWF0Y2hlcyA9IF9yZW5kZXJNYXRjaGVzKG1hdGNoZXMgJiYgbWF0Y2hlcy5tYXAobWF0Y2ggPT4gT2JqZWN0LmFzc2lnbih7fSwgbWF0Y2gsIHtcbiAgICBwYXJhbXM6IE9iamVjdC5hc3NpZ24oe30sIHBhcmVudFBhcmFtcywgbWF0Y2gucGFyYW1zKSxcbiAgICBwYXRobmFtZTogam9pblBhdGhzKFtwYXJlbnRQYXRobmFtZUJhc2UsIG1hdGNoLnBhdGhuYW1lXSksXG4gICAgcGF0aG5hbWVCYXNlOiBtYXRjaC5wYXRobmFtZUJhc2UgPT09IFwiL1wiID8gcGFyZW50UGF0aG5hbWVCYXNlIDogam9pblBhdGhzKFtwYXJlbnRQYXRobmFtZUJhc2UsIG1hdGNoLnBhdGhuYW1lQmFzZV0pXG4gIH0pKSwgcGFyZW50TWF0Y2hlcywgZGF0YVJvdXRlclN0YXRlQ29udGV4dCB8fCB1bmRlZmluZWQpOyAvLyBXaGVuIGEgdXNlciBwYXNzZXMgaW4gYSBgbG9jYXRpb25BcmdgLCB0aGUgYXNzb2NpYXRlZCByb3V0ZXMgbmVlZCB0b1xuICAvLyBiZSB3cmFwcGVkIGluIGEgbmV3IGBMb2NhdGlvbkNvbnRleHQuUHJvdmlkZXJgIGluIG9yZGVyIGZvciBgdXNlTG9jYXRpb25gXG4gIC8vIHRvIHVzZSB0aGUgc2NvcGVkIGxvY2F0aW9uIGluc3RlYWQgb2YgdGhlIGdsb2JhbCBsb2NhdGlvbi5cblxuXG4gIGlmIChsb2NhdGlvbkFyZykge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2NhdGlvbkNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGxvY2F0aW9uOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgcGF0aG5hbWU6IFwiL1wiLFxuICAgICAgICAgIHNlYXJjaDogXCJcIixcbiAgICAgICAgICBoYXNoOiBcIlwiLFxuICAgICAgICAgIHN0YXRlOiBudWxsLFxuICAgICAgICAgIGtleTogXCJkZWZhdWx0XCJcbiAgICAgICAgfSwgbG9jYXRpb24pLFxuICAgICAgICBuYXZpZ2F0aW9uVHlwZTogQWN0aW9uLlBvcFxuICAgICAgfVxuICAgIH0sIHJlbmRlcmVkTWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyZWRNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBEZWZhdWx0RXJyb3JFbGVtZW50KCkge1xuICBsZXQgZXJyb3IgPSB1c2VSb3V0ZUVycm9yKCk7XG4gIGxldCBtZXNzYWdlID0gaXNSb3V0ZUVycm9yUmVzcG9uc2UoZXJyb3IpID8gZXJyb3Iuc3RhdHVzICsgXCIgXCIgKyBlcnJvci5zdGF0dXNUZXh0IDogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBKU09OLnN0cmluZ2lmeShlcnJvcik7XG4gIGxldCBzdGFjayA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IG51bGw7XG4gIGxldCBsaWdodGdyZXkgPSBcInJnYmEoMjAwLDIwMCwyMDAsIDAuNSlcIjtcbiAgbGV0IHByZVN0eWxlcyA9IHtcbiAgICBwYWRkaW5nOiBcIjAuNXJlbVwiLFxuICAgIGJhY2tncm91bmRDb2xvcjogbGlnaHRncmV5XG4gIH07XG4gIGxldCBjb2RlU3R5bGVzID0ge1xuICAgIHBhZGRpbmc6IFwiMnB4IDRweFwiLFxuICAgIGJhY2tncm91bmRDb2xvcjogbGlnaHRncmV5XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCBudWxsLCBcIlVuaGFuZGxlZCBUaHJvd24gRXJyb3IhXCIpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImgzXCIsIHtcbiAgICBzdHlsZToge1xuICAgICAgZm9udFN0eWxlOiBcIml0YWxpY1wiXG4gICAgfVxuICB9LCBtZXNzYWdlKSwgc3RhY2sgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInByZVwiLCB7XG4gICAgc3R5bGU6IHByZVN0eWxlc1xuICB9LCBzdGFjaykgOiBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBcIiwgbnVsbCwgXCJcXHVEODNEXFx1RENCRiBIZXkgZGV2ZWxvcGVyIFxcdUQ4M0RcXHVEQzRCXCIpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBcIiwgbnVsbCwgXCJZb3UgY2FuIHByb3ZpZGUgYSB3YXkgYmV0dGVyIFVYIHRoYW4gdGhpcyB3aGVuIHlvdXIgYXBwIHRocm93cyBlcnJvcnMgYnkgcHJvdmlkaW5nIHlvdXIgb3duXFx4QTBcIiwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjb2RlXCIsIHtcbiAgICBzdHlsZTogY29kZVN0eWxlc1xuICB9LCBcImVycm9yRWxlbWVudFwiKSwgXCIgcHJvcHMgb25cXHhBMFwiLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNvZGVcIiwge1xuICAgIHN0eWxlOiBjb2RlU3R5bGVzXG4gIH0sIFwiPFJvdXRlPlwiKSkpO1xufVxuXG5jbGFzcyBSZW5kZXJFcnJvckJvdW5kYXJ5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxvY2F0aW9uOiBwcm9wcy5sb2NhdGlvbixcbiAgICAgIGVycm9yOiBwcm9wcy5lcnJvclxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiBlcnJvclxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuICAgIC8vIFdoZW4gd2UgZ2V0IGludG8gYW4gZXJyb3Igc3RhdGUsIHRoZSB1c2VyIHdpbGwgbGlrZWx5IGNsaWNrIFwiYmFja1wiIHRvIHRoZVxuICAgIC8vIHByZXZpb3VzIHBhZ2UgdGhhdCBkaWRuJ3QgaGF2ZSBhbiBlcnJvci4gQmVjYXVzZSB0aGlzIHdyYXBzIHRoZSBlbnRpcmVcbiAgICAvLyBhcHBsaWNhdGlvbiwgdGhhdCB3aWxsIGhhdmUgbm8gZWZmZWN0LS10aGUgZXJyb3IgcGFnZSBjb250aW51ZXMgdG8gZGlzcGxheS5cbiAgICAvLyBUaGlzIGdpdmVzIHVzIGEgbWVjaGFuaXNtIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3Igd2hlbiB0aGUgbG9jYXRpb24gY2hhbmdlcy5cbiAgICAvL1xuICAgIC8vIFdoZXRoZXIgd2UncmUgaW4gYW4gZXJyb3Igc3RhdGUgb3Igbm90LCB3ZSB1cGRhdGUgdGhlIGxvY2F0aW9uIGluIHN0YXRlXG4gICAgLy8gc28gdGhhdCB3aGVuIHdlIGFyZSBpbiBhbiBlcnJvciBzdGF0ZSwgaXQgZ2V0cyByZXNldCB3aGVuIGEgbmV3IGxvY2F0aW9uXG4gICAgLy8gY29tZXMgaW4gYW5kIHRoZSB1c2VyIHJlY292ZXJzIGZyb20gdGhlIGVycm9yLlxuICAgIGlmIChzdGF0ZS5sb2NhdGlvbiAhPT0gcHJvcHMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBwcm9wcy5lcnJvcixcbiAgICAgICAgbG9jYXRpb246IHByb3BzLmxvY2F0aW9uXG4gICAgICB9O1xuICAgIH0gLy8gSWYgd2UncmUgbm90IGNoYW5naW5nIGxvY2F0aW9ucywgcHJlc2VydmUgdGhlIGxvY2F0aW9uIGJ1dCBzdGlsbCBzdXJmYWNlXG4gICAgLy8gYW55IG5ldyBlcnJvcnMgdGhhdCBtYXkgY29tZSB0aHJvdWdoLiBXZSByZXRhaW4gdGhlIGV4aXN0aW5nIGVycm9yLCB3ZSBkb1xuICAgIC8vIHRoaXMgYmVjYXVzZSB0aGUgZXJyb3IgcHJvdmlkZWQgZnJvbSB0aGUgYXBwIHN0YXRlIG1heSBiZSBjbGVhcmVkIHdpdGhvdXRcbiAgICAvLyB0aGUgbG9jYXRpb24gY2hhbmdpbmcuXG5cblxuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogcHJvcHMuZXJyb3IgfHwgc3RhdGUuZXJyb3IsXG4gICAgICBsb2NhdGlvbjogc3RhdGUubG9jYXRpb25cbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGVycm9ySW5mbykge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJSZWFjdCBSb3V0ZXIgY2F1Z2h0IHRoZSBmb2xsb3dpbmcgZXJyb3IgZHVyaW5nIHJlbmRlclwiLCBlcnJvciwgZXJyb3JJbmZvKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5lcnJvciA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlRXJyb3JDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogdGhpcy5zdGF0ZS5lcnJvcixcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnByb3BzLmNvbXBvbmVudFxuICAgIH0pIDogdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgfVxuXG59XG5cbmZ1bmN0aW9uIFJlbmRlcmVkUm91dGUoX3JlZikge1xuICBsZXQge1xuICAgIHJvdXRlQ29udGV4dCxcbiAgICBtYXRjaCxcbiAgICBjaGlsZHJlblxuICB9ID0gX3JlZjtcbiAgbGV0IGRhdGFTdGF0aWNSb3V0ZXJDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChEYXRhU3RhdGljUm91dGVyQ29udGV4dCk7IC8vIFRyYWNrIGhvdyBkZWVwIHdlIGdvdCBpbiBvdXIgcmVuZGVyIHBhc3MgdG8gZW11bGF0ZSBTU1IgY29tcG9uZW50RGlkQ2F0Y2hcbiAgLy8gaW4gYSBEYXRhU3RhdGljUm91dGVyXG5cbiAgaWYgKGRhdGFTdGF0aWNSb3V0ZXJDb250ZXh0ICYmIG1hdGNoLnJvdXRlLmVycm9yRWxlbWVudCkge1xuICAgIGRhdGFTdGF0aWNSb3V0ZXJDb250ZXh0Ll9kZWVwZXN0UmVuZGVyZWRCb3VuZGFyeUlkID0gbWF0Y2gucm91dGUuaWQ7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHJvdXRlQ29udGV4dFxuICB9LCBjaGlsZHJlbik7XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJNYXRjaGVzKG1hdGNoZXMsIHBhcmVudE1hdGNoZXMsIGRhdGFSb3V0ZXJTdGF0ZSkge1xuICBpZiAocGFyZW50TWF0Y2hlcyA9PT0gdm9pZCAwKSB7XG4gICAgcGFyZW50TWF0Y2hlcyA9IFtdO1xuICB9XG5cbiAgaWYgKG1hdGNoZXMgPT0gbnVsbCkge1xuICAgIGlmIChkYXRhUm91dGVyU3RhdGUgIT0gbnVsbCAmJiBkYXRhUm91dGVyU3RhdGUuZXJyb3JzKSB7XG4gICAgICAvLyBEb24ndCBiYWlsIGlmIHdlIGhhdmUgZGF0YSByb3V0ZXIgZXJyb3JzIHNvIHdlIGNhbiByZW5kZXIgdGhlbSBpbiB0aGVcbiAgICAgIC8vIGJvdW5kYXJ5LiAgVXNlIHRoZSBwcmUtbWF0Y2hlZCAob3Igc2hpbW1lZCkgbWF0Y2hlc1xuICAgICAgbWF0Y2hlcyA9IGRhdGFSb3V0ZXJTdGF0ZS5tYXRjaGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBsZXQgcmVuZGVyZWRNYXRjaGVzID0gbWF0Y2hlczsgLy8gSWYgd2UgaGF2ZSBkYXRhIGVycm9ycywgdHJpbSBtYXRjaGVzIHRvIHRoZSBoaWdoZXN0IGVycm9yIGJvdW5kYXJ5XG5cbiAgbGV0IGVycm9ycyA9IGRhdGFSb3V0ZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogZGF0YVJvdXRlclN0YXRlLmVycm9ycztcblxuICBpZiAoZXJyb3JzICE9IG51bGwpIHtcbiAgICBsZXQgZXJyb3JJbmRleCA9IHJlbmRlcmVkTWF0Y2hlcy5maW5kSW5kZXgobSA9PiBtLnJvdXRlLmlkICYmIChlcnJvcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yc1ttLnJvdXRlLmlkXSkpO1xuICAgICEoZXJyb3JJbmRleCA+PSAwKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJDb3VsZCBub3QgZmluZCBhIG1hdGNoaW5nIHJvdXRlIGZvciB0aGUgY3VycmVudCBlcnJvcnM6IFwiICsgZXJyb3JzKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgcmVuZGVyZWRNYXRjaGVzID0gcmVuZGVyZWRNYXRjaGVzLnNsaWNlKDAsIE1hdGgubWluKHJlbmRlcmVkTWF0Y2hlcy5sZW5ndGgsIGVycm9ySW5kZXggKyAxKSk7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyZWRNYXRjaGVzLnJlZHVjZVJpZ2h0KChvdXRsZXQsIG1hdGNoLCBpbmRleCkgPT4ge1xuICAgIGxldCBlcnJvciA9IG1hdGNoLnJvdXRlLmlkID8gZXJyb3JzID09IG51bGwgPyB2b2lkIDAgOiBlcnJvcnNbbWF0Y2gucm91dGUuaWRdIDogbnVsbDsgLy8gT25seSBkYXRhIHJvdXRlcnMgaGFuZGxlIGVycm9yc1xuXG4gICAgbGV0IGVycm9yRWxlbWVudCA9IGRhdGFSb3V0ZXJTdGF0ZSA/IG1hdGNoLnJvdXRlLmVycm9yRWxlbWVudCB8fCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEZWZhdWx0RXJyb3JFbGVtZW50LCBudWxsKSA6IG51bGw7XG5cbiAgICBsZXQgZ2V0Q2hpbGRyZW4gPSAoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZW5kZXJlZFJvdXRlLCB7XG4gICAgICBtYXRjaDogbWF0Y2gsXG4gICAgICByb3V0ZUNvbnRleHQ6IHtcbiAgICAgICAgb3V0bGV0LFxuICAgICAgICBtYXRjaGVzOiBwYXJlbnRNYXRjaGVzLmNvbmNhdChyZW5kZXJlZE1hdGNoZXMuc2xpY2UoMCwgaW5kZXggKyAxKSlcbiAgICAgIH1cbiAgICB9LCBlcnJvciA/IGVycm9yRWxlbWVudCA6IG1hdGNoLnJvdXRlLmVsZW1lbnQgIT09IHVuZGVmaW5lZCA/IG1hdGNoLnJvdXRlLmVsZW1lbnQgOiBvdXRsZXQpOyAvLyBPbmx5IHdyYXAgaW4gYW4gZXJyb3IgYm91bmRhcnkgd2l0aGluIGRhdGEgcm91dGVyIHVzYWdlcyB3aGVuIHdlIGhhdmUgYW5cbiAgICAvLyBlcnJvckVsZW1lbnQgb24gdGhpcyByb3V0ZS4gIE90aGVyd2lzZSBsZXQgaXQgYnViYmxlIHVwIHRvIGFuIGFuY2VzdG9yXG4gICAgLy8gZXJyb3JFbGVtZW50XG5cblxuICAgIHJldHVybiBkYXRhUm91dGVyU3RhdGUgJiYgKG1hdGNoLnJvdXRlLmVycm9yRWxlbWVudCB8fCBpbmRleCA9PT0gMCkgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZW5kZXJFcnJvckJvdW5kYXJ5LCB7XG4gICAgICBsb2NhdGlvbjogZGF0YVJvdXRlclN0YXRlLmxvY2F0aW9uLFxuICAgICAgY29tcG9uZW50OiBlcnJvckVsZW1lbnQsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgICBjaGlsZHJlbjogZ2V0Q2hpbGRyZW4oKVxuICAgIH0pIDogZ2V0Q2hpbGRyZW4oKTtcbiAgfSwgbnVsbCk7XG59XG52YXIgRGF0YVJvdXRlckhvb2s7XG5cbihmdW5jdGlvbiAoRGF0YVJvdXRlckhvb2spIHtcbiAgRGF0YVJvdXRlckhvb2tbXCJVc2VMb2FkZXJEYXRhXCJdID0gXCJ1c2VMb2FkZXJEYXRhXCI7XG4gIERhdGFSb3V0ZXJIb29rW1wiVXNlQWN0aW9uRGF0YVwiXSA9IFwidXNlQWN0aW9uRGF0YVwiO1xuICBEYXRhUm91dGVySG9va1tcIlVzZVJvdXRlRXJyb3JcIl0gPSBcInVzZVJvdXRlRXJyb3JcIjtcbiAgRGF0YVJvdXRlckhvb2tbXCJVc2VOYXZpZ2F0aW9uXCJdID0gXCJ1c2VOYXZpZ2F0aW9uXCI7XG4gIERhdGFSb3V0ZXJIb29rW1wiVXNlUm91dGVMb2FkZXJEYXRhXCJdID0gXCJ1c2VSb3V0ZUxvYWRlckRhdGFcIjtcbiAgRGF0YVJvdXRlckhvb2tbXCJVc2VNYXRjaGVzXCJdID0gXCJ1c2VNYXRjaGVzXCI7XG4gIERhdGFSb3V0ZXJIb29rW1wiVXNlUmV2YWxpZGF0b3JcIl0gPSBcInVzZVJldmFsaWRhdG9yXCI7XG59KShEYXRhUm91dGVySG9vayB8fCAoRGF0YVJvdXRlckhvb2sgPSB7fSkpO1xuXG5mdW5jdGlvbiB1c2VEYXRhUm91dGVyU3RhdGUoaG9va05hbWUpIHtcbiAgbGV0IHN0YXRlID0gUmVhY3QudXNlQ29udGV4dChEYXRhUm91dGVyU3RhdGVDb250ZXh0KTtcbiAgIXN0YXRlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBob29rTmFtZSArIFwiIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBEYXRhUm91dGVyU3RhdGVDb250ZXh0XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgcmV0dXJuIHN0YXRlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IG5hdmlnYXRpb24sIGRlZmF1bHRpbmcgdG8gYW4gXCJpZGxlXCIgbmF2aWdhdGlvbiB3aGVuXG4gKiBubyBuYXZpZ2F0aW9uIGlzIGluIHByb2dyZXNzXG4gKi9cblxuXG5mdW5jdGlvbiB1c2VOYXZpZ2F0aW9uKCkge1xuICBsZXQgc3RhdGUgPSB1c2VEYXRhUm91dGVyU3RhdGUoRGF0YVJvdXRlckhvb2suVXNlTmF2aWdhdGlvbik7XG4gIHJldHVybiBzdGF0ZS5uYXZpZ2F0aW9uO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgcmV2YWxpZGF0ZSBmdW5jdGlvbiBmb3IgbWFudWFsbHkgdHJpZ2dlcmluZyByZXZhbGlkYXRpb24sIGFzIHdlbGxcbiAqIGFzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFueSBtYW51YWwgcmV2YWxpZGF0aW9uc1xuICovXG5cbmZ1bmN0aW9uIHVzZVJldmFsaWRhdG9yKCkge1xuICBsZXQgZGF0YVJvdXRlckNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KERhdGFSb3V0ZXJDb250ZXh0KTtcbiAgIWRhdGFSb3V0ZXJDb250ZXh0ID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZVJldmFsaWRhdG9yIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBEYXRhUm91dGVyQ29udGV4dFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCBzdGF0ZSA9IHVzZURhdGFSb3V0ZXJTdGF0ZShEYXRhUm91dGVySG9vay5Vc2VSZXZhbGlkYXRvcik7XG4gIHJldHVybiB7XG4gICAgcmV2YWxpZGF0ZTogZGF0YVJvdXRlckNvbnRleHQucm91dGVyLnJldmFsaWRhdGUsXG4gICAgc3RhdGU6IHN0YXRlLnJldmFsaWRhdGlvblxuICB9O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhY3RpdmUgcm91dGUgbWF0Y2hlcywgdXNlZnVsIGZvciBhY2Nlc3NpbmcgbG9hZGVyRGF0YSBmb3JcbiAqIHBhcmVudC9jaGlsZCByb3V0ZXMgb3IgdGhlIHJvdXRlIFwiaGFuZGxlXCIgcHJvcGVydHlcbiAqL1xuXG5mdW5jdGlvbiB1c2VNYXRjaGVzKCkge1xuICBsZXQge1xuICAgIG1hdGNoZXMsXG4gICAgbG9hZGVyRGF0YVxuICB9ID0gdXNlRGF0YVJvdXRlclN0YXRlKERhdGFSb3V0ZXJIb29rLlVzZU1hdGNoZXMpO1xuICByZXR1cm4gUmVhY3QudXNlTWVtbygoKSA9PiBtYXRjaGVzLm1hcChtYXRjaCA9PiB7XG4gICAgbGV0IHtcbiAgICAgIHBhdGhuYW1lLFxuICAgICAgcGFyYW1zXG4gICAgfSA9IG1hdGNoOyAvLyBOb3RlOiBUaGlzIHN0cnVjdHVyZSBtYXRjaGVzIHRoYXQgY3JlYXRlZCBieSBjcmVhdGVVc2VNYXRjaGVzTWF0Y2hcbiAgICAvLyBpbiB0aGUgQHJlbWl4LXJ1bi9yb3V0ZXIgLCBzbyBpZiB5b3UgY2hhbmdlIHRoaXMgcGxlYXNlIGFsc28gY2hhbmdlXG4gICAgLy8gdGhhdCA6KSAgRXZlbnR1YWxseSB3ZSdsbCBEUlkgdGhpcyB1cFxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBtYXRjaC5yb3V0ZS5pZCxcbiAgICAgIHBhdGhuYW1lLFxuICAgICAgcGFyYW1zLFxuICAgICAgZGF0YTogbG9hZGVyRGF0YVttYXRjaC5yb3V0ZS5pZF0sXG4gICAgICBoYW5kbGU6IG1hdGNoLnJvdXRlLmhhbmRsZVxuICAgIH07XG4gIH0pLCBbbWF0Y2hlcywgbG9hZGVyRGF0YV0pO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsb2FkZXIgZGF0YSBmb3IgdGhlIG5lYXJlc3QgYW5jZXN0b3IgUm91dGUgbG9hZGVyXG4gKi9cblxuZnVuY3Rpb24gdXNlTG9hZGVyRGF0YSgpIHtcbiAgbGV0IHN0YXRlID0gdXNlRGF0YVJvdXRlclN0YXRlKERhdGFSb3V0ZXJIb29rLlVzZUxvYWRlckRhdGEpO1xuICBsZXQgcm91dGUgPSBSZWFjdC51c2VDb250ZXh0KFJvdXRlQ29udGV4dCk7XG4gICFyb3V0ZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VMb2FkZXJEYXRhIG11c3QgYmUgdXNlZCBpbnNpZGUgYSBSb3V0ZUNvbnRleHRcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQgdGhpc1JvdXRlID0gcm91dGUubWF0Y2hlc1tyb3V0ZS5tYXRjaGVzLmxlbmd0aCAtIDFdO1xuICAhdGhpc1JvdXRlLnJvdXRlLmlkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZUxvYWRlckRhdGEgY2FuIG9ubHkgYmUgdXNlZCBvbiByb3V0ZXMgdGhhdCBjb250YWluIGEgdW5pcXVlIFxcXCJpZFxcXCJcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICByZXR1cm4gc3RhdGUubG9hZGVyRGF0YVt0aGlzUm91dGUucm91dGUuaWRdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsb2FkZXJEYXRhIGZvciB0aGUgZ2l2ZW4gcm91dGVJZFxuICovXG5cbmZ1bmN0aW9uIHVzZVJvdXRlTG9hZGVyRGF0YShyb3V0ZUlkKSB7XG4gIGxldCBzdGF0ZSA9IHVzZURhdGFSb3V0ZXJTdGF0ZShEYXRhUm91dGVySG9vay5Vc2VSb3V0ZUxvYWRlckRhdGEpO1xuICByZXR1cm4gc3RhdGUubG9hZGVyRGF0YVtyb3V0ZUlkXTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgYWN0aW9uIGRhdGEgZm9yIHRoZSBuZWFyZXN0IGFuY2VzdG9yIFJvdXRlIGFjdGlvblxuICovXG5cbmZ1bmN0aW9uIHVzZUFjdGlvbkRhdGEoKSB7XG4gIGxldCBzdGF0ZSA9IHVzZURhdGFSb3V0ZXJTdGF0ZShEYXRhUm91dGVySG9vay5Vc2VBY3Rpb25EYXRhKTtcbiAgbGV0IHJvdXRlID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUNvbnRleHQpO1xuICAhcm91dGUgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwidXNlQWN0aW9uRGF0YSBtdXN0IGJlIHVzZWQgaW5zaWRlIGEgUm91dGVDb250ZXh0XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoKHN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBzdGF0ZS5hY3Rpb25EYXRhKSB8fCB7fSlbMF07XG59XG4vKipcbiAqIFJldHVybnMgdGhlIG5lYXJlc3QgYW5jZXN0b3IgUm91dGUgZXJyb3IsIHdoaWNoIGNvdWxkIGJlIGEgbG9hZGVyL2FjdGlvblxuICogZXJyb3Igb3IgYSByZW5kZXIgZXJyb3IuICBUaGlzIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIHlvdXJcbiAqIGVycm9yRWxlbWVudCB0byBkaXNwbGF5IGEgcHJvcGVyIGVycm9yIG1lc3NhZ2UuXG4gKi9cblxuZnVuY3Rpb24gdXNlUm91dGVFcnJvcigpIHtcbiAgdmFyIF9zdGF0ZSRlcnJvcnM7XG5cbiAgbGV0IGVycm9yID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUVycm9yQ29udGV4dCk7XG4gIGxldCBzdGF0ZSA9IHVzZURhdGFSb3V0ZXJTdGF0ZShEYXRhUm91dGVySG9vay5Vc2VSb3V0ZUVycm9yKTtcbiAgbGV0IHJvdXRlID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUNvbnRleHQpO1xuICBsZXQgdGhpc1JvdXRlID0gcm91dGUubWF0Y2hlc1tyb3V0ZS5tYXRjaGVzLmxlbmd0aCAtIDFdOyAvLyBJZiB0aGlzIHdhcyBhIHJlbmRlciBlcnJvciwgd2UgcHV0IGl0IGluIGEgUm91dGVFcnJvciBjb250ZXh0IGluc2lkZVxuICAvLyBvZiBSZW5kZXJFcnJvckJvdW5kYXJ5XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG5cbiAgIXJvdXRlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZVJvdXRlRXJyb3IgbXVzdCBiZSB1c2VkIGluc2lkZSBhIFJvdXRlQ29udGV4dFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICF0aGlzUm91dGUucm91dGUuaWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwidXNlUm91dGVFcnJvciBjYW4gb25seSBiZSB1c2VkIG9uIHJvdXRlcyB0aGF0IGNvbnRhaW4gYSB1bmlxdWUgXFxcImlkXFxcIlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7IC8vIE90aGVyd2lzZSBsb29rIGZvciBlcnJvcnMgZnJvbSBvdXIgZGF0YSByb3V0ZXIgc3RhdGVcblxuICByZXR1cm4gKF9zdGF0ZSRlcnJvcnMgPSBzdGF0ZS5lcnJvcnMpID09IG51bGwgPyB2b2lkIDAgOiBfc3RhdGUkZXJyb3JzW3RoaXNSb3V0ZS5yb3V0ZS5pZF07XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGhhcHB5LXBhdGggZGF0YSBmcm9tIHRoZSBuZWFyZXN0IGFuY2VzdG9yIDxBd2FpdCAvPiB2YWx1ZVxuICovXG5cbmZ1bmN0aW9uIHVzZUFzeW5jVmFsdWUoKSB7XG4gIGxldCB2YWx1ZSA9IFJlYWN0LnVzZUNvbnRleHQoQXdhaXRDb250ZXh0KTtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZS5fZGF0YTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgZXJyb3IgZnJvbSB0aGUgbmVhcmVzdCBhbmNlc3RvciA8QXdhaXQgLz4gdmFsdWVcbiAqL1xuXG5mdW5jdGlvbiB1c2VBc3luY0Vycm9yKCkge1xuICBsZXQgdmFsdWUgPSBSZWFjdC51c2VDb250ZXh0KEF3YWl0Q29udGV4dCk7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuX2Vycm9yO1xufVxuY29uc3QgYWxyZWFkeVdhcm5lZCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuaW5nT25jZShrZXksIGNvbmQsIG1lc3NhZ2UpIHtcbiAgaWYgKCFjb25kICYmICFhbHJlYWR5V2FybmVkW2tleV0pIHtcbiAgICBhbHJlYWR5V2FybmVkW2tleV0gPSB0cnVlO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoZmFsc2UsIG1lc3NhZ2UpIDogdm9pZCAwO1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBSZW1peCBSb3V0ZXIgaW5zdGFuY2UsIHJlbmRlciB0aGUgYXBwcm9wcmlhdGUgVUlcbiAqL1xuZnVuY3Rpb24gUm91dGVyUHJvdmlkZXIoX3JlZikge1xuICBsZXQge1xuICAgIGZhbGxiYWNrRWxlbWVudCxcbiAgICByb3V0ZXJcbiAgfSA9IF9yZWY7XG4gIC8vIFN5bmMgcm91dGVyIHN0YXRlIHRvIG91ciBjb21wb25lbnQgc3RhdGUgdG8gZm9yY2UgcmUtcmVuZGVyc1xuICBsZXQgc3RhdGUgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZShyb3V0ZXIuc3Vic2NyaWJlLCAoKSA9PiByb3V0ZXIuc3RhdGUsIC8vIFdlIGhhdmUgdG8gcHJvdmlkZSB0aGlzIHNvIFJlYWN0QDE4IGRvZXNuJ3QgY29tcGxhaW4gZHVyaW5nIGh5ZHJhdGlvbixcbiAgLy8gYnV0IHdlIHBhc3Mgb3VyIHNlcmlhbGl6ZWQgaHlkcmF0aW9uIGRhdGEgaW50byB0aGUgcm91dGVyIHNvIHN0YXRlIGhlcmVcbiAgLy8gaXMgYWxyZWFkeSBzeW5jZWQgd2l0aCB3aGF0IHRoZSBzZXJ2ZXIgc2F3XG4gICgpID0+IHJvdXRlci5zdGF0ZSk7XG4gIGxldCBuYXZpZ2F0b3IgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlSHJlZjogcm91dGVyLmNyZWF0ZUhyZWYsXG4gICAgICBnbzogbiA9PiByb3V0ZXIubmF2aWdhdGUobiksXG4gICAgICBwdXNoOiAodG8sIHN0YXRlLCBvcHRzKSA9PiByb3V0ZXIubmF2aWdhdGUodG8sIHtcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHByZXZlbnRTY3JvbGxSZXNldDogb3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5wcmV2ZW50U2Nyb2xsUmVzZXRcbiAgICAgIH0pLFxuICAgICAgcmVwbGFjZTogKHRvLCBzdGF0ZSwgb3B0cykgPT4gcm91dGVyLm5hdmlnYXRlKHRvLCB7XG4gICAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBwcmV2ZW50U2Nyb2xsUmVzZXQ6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMucHJldmVudFNjcm9sbFJlc2V0XG4gICAgICB9KVxuICAgIH07XG4gIH0sIFtyb3V0ZXJdKTtcbiAgbGV0IGJhc2VuYW1lID0gcm91dGVyLmJhc2VuYW1lIHx8IFwiL1wiO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0YVJvdXRlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgcm91dGVyLFxuICAgICAgbmF2aWdhdG9yLFxuICAgICAgc3RhdGljOiBmYWxzZSxcbiAgICAgIC8vIERvIHdlIG5lZWQgdGhpcz9cbiAgICAgIGJhc2VuYW1lXG4gICAgfVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEYXRhUm91dGVyU3RhdGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHN0YXRlXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwge1xuICAgIGJhc2VuYW1lOiByb3V0ZXIuYmFzZW5hbWUsXG4gICAgbG9jYXRpb246IHJvdXRlci5zdGF0ZS5sb2NhdGlvbixcbiAgICBuYXZpZ2F0aW9uVHlwZTogcm91dGVyLnN0YXRlLmhpc3RvcnlBY3Rpb24sXG4gICAgbmF2aWdhdG9yOiBuYXZpZ2F0b3JcbiAgfSwgcm91dGVyLnN0YXRlLmluaXRpYWxpemVkID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVzLCBudWxsKSA6IGZhbGxiYWNrRWxlbWVudCkpKTtcbn1cblxuLyoqXG4gKiBBIDxSb3V0ZXI+IHRoYXQgc3RvcmVzIGFsbCBlbnRyaWVzIGluIG1lbW9yeS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvcm91dGVycy9tZW1vcnktcm91dGVyXG4gKi9cbmZ1bmN0aW9uIE1lbW9yeVJvdXRlcihfcmVmMikge1xuICBsZXQge1xuICAgIGJhc2VuYW1lLFxuICAgIGNoaWxkcmVuLFxuICAgIGluaXRpYWxFbnRyaWVzLFxuICAgIGluaXRpYWxJbmRleFxuICB9ID0gX3JlZjI7XG4gIGxldCBoaXN0b3J5UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgaWYgKGhpc3RvcnlSZWYuY3VycmVudCA9PSBudWxsKSB7XG4gICAgaGlzdG9yeVJlZi5jdXJyZW50ID0gY3JlYXRlTWVtb3J5SGlzdG9yeSh7XG4gICAgICBpbml0aWFsRW50cmllcyxcbiAgICAgIGluaXRpYWxJbmRleCxcbiAgICAgIHY1Q29tcGF0OiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBsZXQgaGlzdG9yeSA9IGhpc3RvcnlSZWYuY3VycmVudDtcbiAgbGV0IFtzdGF0ZSwgc2V0U3RhdGVdID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGFjdGlvbjogaGlzdG9yeS5hY3Rpb24sXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb25cbiAgfSk7XG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiBoaXN0b3J5Lmxpc3RlbihzZXRTdGF0ZSksIFtoaXN0b3J5XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXIsIHtcbiAgICBiYXNlbmFtZTogYmFzZW5hbWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGxvY2F0aW9uOiBzdGF0ZS5sb2NhdGlvbixcbiAgICBuYXZpZ2F0aW9uVHlwZTogc3RhdGUuYWN0aW9uLFxuICAgIG5hdmlnYXRvcjogaGlzdG9yeVxuICB9KTtcbn1cblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBjdXJyZW50IGxvY2F0aW9uLlxuICpcbiAqIE5vdGU6IFRoaXMgQVBJIGlzIG1vc3RseSB1c2VmdWwgaW4gUmVhY3QuQ29tcG9uZW50IHN1YmNsYXNzZXMgdGhhdCBhcmUgbm90XG4gKiBhYmxlIHRvIHVzZSBob29rcy4gSW4gZnVuY3Rpb25hbCBjb21wb25lbnRzLCB3ZSByZWNvbW1lbmQgeW91IHVzZSB0aGVcbiAqIGB1c2VOYXZpZ2F0ZWAgaG9vayBpbnN0ZWFkLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9jb21wb25lbnRzL25hdmlnYXRlXG4gKi9cbmZ1bmN0aW9uIE5hdmlnYXRlKF9yZWYzKSB7XG4gIGxldCB7XG4gICAgdG8sXG4gICAgcmVwbGFjZSxcbiAgICBzdGF0ZSxcbiAgICByZWxhdGl2ZVxuICB9ID0gX3JlZjM7XG4gICF1c2VJblJvdXRlckNvbnRleHQoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgLy8gVE9ETzogVGhpcyBlcnJvciBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZXkgc29tZWhvdyBoYXZlIDIgdmVyc2lvbnMgb2ZcbiAgLy8gdGhlIHJvdXRlciBsb2FkZWQuIFdlIGNhbiBoZWxwIHRoZW0gdW5kZXJzdGFuZCBob3cgdG8gYXZvaWQgdGhhdC5cbiAgXCI8TmF2aWdhdGU+IG1heSBiZSB1c2VkIG9ubHkgaW4gdGhlIGNvbnRleHQgb2YgYSA8Um91dGVyPiBjb21wb25lbnQuXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghUmVhY3QudXNlQ29udGV4dChOYXZpZ2F0aW9uQ29udGV4dCkuc3RhdGljLCBcIjxOYXZpZ2F0ZT4gbXVzdCBub3QgYmUgdXNlZCBvbiB0aGUgaW5pdGlhbCByZW5kZXIgaW4gYSA8U3RhdGljUm91dGVyPi4gXCIgKyBcIlRoaXMgaXMgYSBuby1vcCwgYnV0IHlvdSBzaG91bGQgbW9kaWZ5IHlvdXIgY29kZSBzbyB0aGUgPE5hdmlnYXRlPiBpcyBcIiArIFwib25seSBldmVyIHJlbmRlcmVkIGluIHJlc3BvbnNlIHRvIHNvbWUgdXNlciBpbnRlcmFjdGlvbiBvciBzdGF0ZSBjaGFuZ2UuXCIpIDogdm9pZCAwO1xuICBsZXQgZGF0YVJvdXRlclN0YXRlID0gUmVhY3QudXNlQ29udGV4dChEYXRhUm91dGVyU3RhdGVDb250ZXh0KTtcbiAgbGV0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBBdm9pZCBraWNraW5nIG9mZiBtdWx0aXBsZSBuYXZpZ2F0aW9ucyBpZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGFcbiAgICAvLyBkYXRhLXJvdXRlciBuYXZpZ2F0aW9uLCBzaW5jZSBjb21wb25lbnRzIGdldCByZS1yZW5kZXJlZCB3aGVuIHdlIGVudGVyXG4gICAgLy8gYSBzdWJtaXR0aW5nL2xvYWRpbmcgc3RhdGVcbiAgICBpZiAoZGF0YVJvdXRlclN0YXRlICYmIGRhdGFSb3V0ZXJTdGF0ZS5uYXZpZ2F0aW9uLnN0YXRlICE9PSBcImlkbGVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5hdmlnYXRlKHRvLCB7XG4gICAgICByZXBsYWNlLFxuICAgICAgc3RhdGUsXG4gICAgICByZWxhdGl2ZVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY2hpbGQgcm91dGUncyBlbGVtZW50LCBpZiB0aGVyZSBpcyBvbmUuXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L2NvbXBvbmVudHMvb3V0bGV0XG4gKi9cbmZ1bmN0aW9uIE91dGxldChwcm9wcykge1xuICByZXR1cm4gdXNlT3V0bGV0KHByb3BzLmNvbnRleHQpO1xufVxuXG4vKipcbiAqIERlY2xhcmVzIGFuIGVsZW1lbnQgdGhhdCBzaG91bGQgYmUgcmVuZGVyZWQgYXQgYSBjZXJ0YWluIFVSTCBwYXRoLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9jb21wb25lbnRzL3JvdXRlXG4gKi9cbmZ1bmN0aW9uIFJvdXRlKF9wcm9wcykge1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiQSA8Um91dGU+IGlzIG9ubHkgZXZlciB0byBiZSB1c2VkIGFzIHRoZSBjaGlsZCBvZiA8Um91dGVzPiBlbGVtZW50LCBcIiArIFwibmV2ZXIgcmVuZGVyZWQgZGlyZWN0bHkuIFBsZWFzZSB3cmFwIHlvdXIgPFJvdXRlPiBpbiBhIDxSb3V0ZXM+LlwiKSA6IGludmFyaWFudChmYWxzZSkgO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGxvY2F0aW9uIGNvbnRleHQgZm9yIHRoZSByZXN0IG9mIHRoZSBhcHAuXG4gKlxuICogTm90ZTogWW91IHVzdWFsbHkgd29uJ3QgcmVuZGVyIGEgPFJvdXRlcj4gZGlyZWN0bHkuIEluc3RlYWQsIHlvdSdsbCByZW5kZXIgYVxuICogcm91dGVyIHRoYXQgaXMgbW9yZSBzcGVjaWZpYyB0byB5b3VyIGVudmlyb25tZW50IHN1Y2ggYXMgYSA8QnJvd3NlclJvdXRlcj5cbiAqIGluIHdlYiBicm93c2VycyBvciBhIDxTdGF0aWNSb3V0ZXI+IGZvciBzZXJ2ZXIgcmVuZGVyaW5nLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9yb3V0ZXJzL3JvdXRlclxuICovXG5mdW5jdGlvbiBSb3V0ZXIoX3JlZjQpIHtcbiAgbGV0IHtcbiAgICBiYXNlbmFtZTogYmFzZW5hbWVQcm9wID0gXCIvXCIsXG4gICAgY2hpbGRyZW4gPSBudWxsLFxuICAgIGxvY2F0aW9uOiBsb2NhdGlvblByb3AsXG4gICAgbmF2aWdhdGlvblR5cGUgPSBBY3Rpb24uUG9wLFxuICAgIG5hdmlnYXRvcixcbiAgICBzdGF0aWM6IHN0YXRpY1Byb3AgPSBmYWxzZVxuICB9ID0gX3JlZjQ7XG4gICEhdXNlSW5Sb3V0ZXJDb250ZXh0KCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiWW91IGNhbm5vdCByZW5kZXIgYSA8Um91dGVyPiBpbnNpZGUgYW5vdGhlciA8Um91dGVyPi5cIiArIFwiIFlvdSBzaG91bGQgbmV2ZXIgaGF2ZSBtb3JlIHRoYW4gb25lIGluIHlvdXIgYXBwLlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7IC8vIFByZXNlcnZlIHRyYWlsaW5nIHNsYXNoZXMgb24gYmFzZW5hbWUsIHNvIHdlIGNhbiBsZXQgdGhlIHVzZXIgY29udHJvbFxuICAvLyB0aGUgZW5mb3JjZW1lbnQgb2YgdHJhaWxpbmcgc2xhc2hlcyB0aHJvdWdob3V0IHRoZSBhcHBcblxuICBsZXQgYmFzZW5hbWUgPSBiYXNlbmFtZVByb3AucmVwbGFjZSgvXlxcLyovLCBcIi9cIik7XG4gIGxldCBuYXZpZ2F0aW9uQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBiYXNlbmFtZSxcbiAgICBuYXZpZ2F0b3IsXG4gICAgc3RhdGljOiBzdGF0aWNQcm9wXG4gIH0pLCBbYmFzZW5hbWUsIG5hdmlnYXRvciwgc3RhdGljUHJvcF0pO1xuXG4gIGlmICh0eXBlb2YgbG9jYXRpb25Qcm9wID09PSBcInN0cmluZ1wiKSB7XG4gICAgbG9jYXRpb25Qcm9wID0gcGFyc2VQYXRoKGxvY2F0aW9uUHJvcCk7XG4gIH1cblxuICBsZXQge1xuICAgIHBhdGhuYW1lID0gXCIvXCIsXG4gICAgc2VhcmNoID0gXCJcIixcbiAgICBoYXNoID0gXCJcIixcbiAgICBzdGF0ZSA9IG51bGwsXG4gICAga2V5ID0gXCJkZWZhdWx0XCJcbiAgfSA9IGxvY2F0aW9uUHJvcDtcbiAgbGV0IGxvY2F0aW9uID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IHRyYWlsaW5nUGF0aG5hbWUgPSBzdHJpcEJhc2VuYW1lKHBhdGhuYW1lLCBiYXNlbmFtZSk7XG5cbiAgICBpZiAodHJhaWxpbmdQYXRobmFtZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aG5hbWU6IHRyYWlsaW5nUGF0aG5hbWUsXG4gICAgICBzZWFyY2gsXG4gICAgICBoYXNoLFxuICAgICAgc3RhdGUsXG4gICAgICBrZXlcbiAgICB9O1xuICB9LCBbYmFzZW5hbWUsIHBhdGhuYW1lLCBzZWFyY2gsIGhhc2gsIHN0YXRlLCBrZXldKTtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhsb2NhdGlvbiAhPSBudWxsLCBcIjxSb3V0ZXIgYmFzZW5hbWU9XFxcIlwiICsgYmFzZW5hbWUgKyBcIlxcXCI+IGlzIG5vdCBhYmxlIHRvIG1hdGNoIHRoZSBVUkwgXCIgKyAoXCJcXFwiXCIgKyBwYXRobmFtZSArIHNlYXJjaCArIGhhc2ggKyBcIlxcXCIgYmVjYXVzZSBpdCBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBcIikgKyBcImJhc2VuYW1lLCBzbyB0aGUgPFJvdXRlcj4gd29uJ3QgcmVuZGVyIGFueXRoaW5nLlwiKSA6IHZvaWQgMDtcblxuICBpZiAobG9jYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE5hdmlnYXRpb25Db250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IG5hdmlnYXRpb25Db250ZXh0XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExvY2F0aW9uQ29udGV4dC5Qcm92aWRlciwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICB2YWx1ZToge1xuICAgICAgbG9jYXRpb24sXG4gICAgICBuYXZpZ2F0aW9uVHlwZVxuICAgIH1cbiAgfSkpO1xufVxuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBhIG5lc3RlZCB0cmVlIG9mIDxSb3V0ZT4gZWxlbWVudHMgdGhhdCByZW5kZXJzIHRoZSBicmFuY2hcbiAqIHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBjdXJyZW50IGxvY2F0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9jb21wb25lbnRzL3JvdXRlc1xuICovXG5mdW5jdGlvbiBSb3V0ZXMoX3JlZjUpIHtcbiAgbGV0IHtcbiAgICBjaGlsZHJlbixcbiAgICBsb2NhdGlvblxuICB9ID0gX3JlZjU7XG4gIGxldCBkYXRhUm91dGVyQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoRGF0YVJvdXRlckNvbnRleHQpOyAvLyBXaGVuIGluIGEgRGF0YVJvdXRlckNvbnRleHQgX3dpdGhvdXRfIGNoaWxkcmVuLCB3ZSB1c2UgdGhlIHJvdXRlciByb3V0ZXNcbiAgLy8gZGlyZWN0bHkuICBJZiB3ZSBoYXZlIGNoaWxkcmVuLCB0aGVuIHdlJ3JlIGluIGEgZGVzY2VuZGFudCB0cmVlIGFuZCB3ZVxuICAvLyBuZWVkIHRvIHVzZSBjaGlsZCByb3V0ZXMuXG5cbiAgbGV0IHJvdXRlcyA9IGRhdGFSb3V0ZXJDb250ZXh0ICYmICFjaGlsZHJlbiA/IGRhdGFSb3V0ZXJDb250ZXh0LnJvdXRlci5yb3V0ZXMgOiBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICByZXR1cm4gdXNlUm91dGVzKHJvdXRlcywgbG9jYXRpb24pO1xufVxuXG4vKipcbiAqIENvbXBvbmVudCB0byB1c2UgZm9yIHJlbmRlcmluZyBsYXppbHkgbG9hZGVkIGRhdGEgZnJvbSByZXR1cm5pbmcgZGVmZXIoKVxuICogaW4gYSBsb2FkZXIgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gQXdhaXQoX3JlZjYpIHtcbiAgbGV0IHtcbiAgICBjaGlsZHJlbixcbiAgICBlcnJvckVsZW1lbnQsXG4gICAgcmVzb2x2ZVxuICB9ID0gX3JlZjY7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBd2FpdEVycm9yQm91bmRhcnksIHtcbiAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgIGVycm9yRWxlbWVudDogZXJyb3JFbGVtZW50XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlc29sdmVBd2FpdCwgbnVsbCwgY2hpbGRyZW4pKTtcbn1cbnZhciBBd2FpdFJlbmRlclN0YXR1cztcblxuKGZ1bmN0aW9uIChBd2FpdFJlbmRlclN0YXR1cykge1xuICBBd2FpdFJlbmRlclN0YXR1c1tBd2FpdFJlbmRlclN0YXR1c1tcInBlbmRpbmdcIl0gPSAwXSA9IFwicGVuZGluZ1wiO1xuICBBd2FpdFJlbmRlclN0YXR1c1tBd2FpdFJlbmRlclN0YXR1c1tcInN1Y2Nlc3NcIl0gPSAxXSA9IFwic3VjY2Vzc1wiO1xuICBBd2FpdFJlbmRlclN0YXR1c1tBd2FpdFJlbmRlclN0YXR1c1tcImVycm9yXCJdID0gMl0gPSBcImVycm9yXCI7XG59KShBd2FpdFJlbmRlclN0YXR1cyB8fCAoQXdhaXRSZW5kZXJTdGF0dXMgPSB7fSkpO1xuXG5jb25zdCBuZXZlclNldHRsZWRQcm9taXNlID0gbmV3IFByb21pc2UoKCkgPT4ge30pO1xuXG5jbGFzcyBBd2FpdEVycm9yQm91bmRhcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZXJyb3I6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvclxuICAgIH07XG4gIH1cblxuICBjb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvKSB7XG4gICAgY29uc29sZS5lcnJvcihcIjxBd2FpdD4gY2F1Z2h0IHRoZSBmb2xsb3dpbmcgZXJyb3IgZHVyaW5nIHJlbmRlclwiLCBlcnJvciwgZXJyb3JJbmZvKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBsZXQge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBlcnJvckVsZW1lbnQsXG4gICAgICByZXNvbHZlXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IHByb21pc2UgPSBudWxsO1xuICAgIGxldCBzdGF0dXMgPSBBd2FpdFJlbmRlclN0YXR1cy5wZW5kaW5nO1xuXG4gICAgaWYgKCEocmVzb2x2ZSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICAvLyBEaWRuJ3QgZ2V0IGEgcHJvbWlzZSAtIHByb3ZpZGUgYXMgYSByZXNvbHZlZCBwcm9taXNlXG4gICAgICBzdGF0dXMgPSBBd2FpdFJlbmRlclN0YXR1cy5zdWNjZXNzO1xuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsIFwiX3RyYWNrZWRcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IHRydWVcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsIFwiX2RhdGFcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IHJlc29sdmVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgLy8gQ2F1Z2h0IGEgcmVuZGVyIGVycm9yLCBwcm92aWRlIGl0IGFzIGEgcmVqZWN0ZWQgcHJvbWlzZVxuICAgICAgc3RhdHVzID0gQXdhaXRSZW5kZXJTdGF0dXMuZXJyb3I7XG4gICAgICBsZXQgcmVuZGVyRXJyb3IgPSB0aGlzLnN0YXRlLmVycm9yO1xuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVqZWN0KCkuY2F0Y2goKCkgPT4ge30pOyAvLyBBdm9pZCB1bmhhbmRsZWQgcmVqZWN0aW9uIHdhcm5pbmdzXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl90cmFja2VkXCIsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB0cnVlXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl9lcnJvclwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gcmVuZGVyRXJyb3JcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocmVzb2x2ZS5fdHJhY2tlZCkge1xuICAgICAgLy8gQWxyZWFkeSB0cmFja2VkIHByb21pc2UgLSBjaGVjayBjb250ZW50c1xuICAgICAgcHJvbWlzZSA9IHJlc29sdmU7XG4gICAgICBzdGF0dXMgPSBwcm9taXNlLl9lcnJvciAhPT0gdW5kZWZpbmVkID8gQXdhaXRSZW5kZXJTdGF0dXMuZXJyb3IgOiBwcm9taXNlLl9kYXRhICE9PSB1bmRlZmluZWQgPyBBd2FpdFJlbmRlclN0YXR1cy5zdWNjZXNzIDogQXdhaXRSZW5kZXJTdGF0dXMucGVuZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmF3ICh1bnRyYWNrZWQpIHByb21pc2UgLSB0cmFjayBpdFxuICAgICAgc3RhdHVzID0gQXdhaXRSZW5kZXJTdGF0dXMucGVuZGluZztcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXNvbHZlLCBcIl90cmFja2VkXCIsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHByb21pc2UgPSByZXNvbHZlLnRoZW4oZGF0YSA9PiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzb2x2ZSwgXCJfZGF0YVwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gZGF0YVxuICAgICAgfSksIGVycm9yID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXNvbHZlLCBcIl9lcnJvclwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gZXJyb3JcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSBBd2FpdFJlbmRlclN0YXR1cy5lcnJvciAmJiBwcm9taXNlLl9lcnJvciBpbnN0YW5jZW9mIEFib3J0ZWREZWZlcnJlZEVycm9yKSB7XG4gICAgICAvLyBGcmVlemUgdGhlIFVJIGJ5IHRocm93aW5nIGEgbmV2ZXIgcmVzb2x2ZWQgcHJvbWlzZVxuICAgICAgdGhyb3cgbmV2ZXJTZXR0bGVkUHJvbWlzZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSBBd2FpdFJlbmRlclN0YXR1cy5lcnJvciAmJiAhZXJyb3JFbGVtZW50KSB7XG4gICAgICAvLyBObyBlcnJvckVsZW1lbnQsIHRocm93IHRvIHRoZSBuZWFyZXN0IHJvdXRlLWxldmVsIGVycm9yIGJvdW5kYXJ5XG4gICAgICB0aHJvdyBwcm9taXNlLl9lcnJvcjtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSBBd2FpdFJlbmRlclN0YXR1cy5lcnJvcikge1xuICAgICAgLy8gUmVuZGVyIHZpYSBvdXIgZXJyb3JFbGVtZW50XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQXdhaXRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBwcm9taXNlLFxuICAgICAgICBjaGlsZHJlbjogZXJyb3JFbGVtZW50XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSBBd2FpdFJlbmRlclN0YXR1cy5zdWNjZXNzKSB7XG4gICAgICAvLyBSZW5kZXIgY2hpbGRyZW4gd2l0aCByZXNvbHZlZCB2YWx1ZVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEF3YWl0Q29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogcHJvbWlzZSxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICB9KTtcbiAgICB9IC8vIFRocm93IHRvIHRoZSBzdXNwZW5zZSBib3VuZGFyeVxuXG5cbiAgICB0aHJvdyBwcm9taXNlO1xuICB9XG5cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIEluZGlyZWN0aW9uIHRvIGxldmVyYWdlIHVzZUFzeW5jVmFsdWUgZm9yIGEgcmVuZGVyLXByb3AgQVBJIG9uIDxBd2FpdD5cbiAqL1xuXG5cbmZ1bmN0aW9uIFJlc29sdmVBd2FpdChfcmVmNykge1xuICBsZXQge1xuICAgIGNoaWxkcmVuXG4gIH0gPSBfcmVmNztcbiAgbGV0IGRhdGEgPSB1c2VBc3luY1ZhbHVlKCk7XG5cbiAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuKGRhdGEpO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG59IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFVUSUxTXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvdXRlIGNvbmZpZyBmcm9tIGEgUmVhY3QgXCJjaGlsZHJlblwiIG9iamVjdCwgd2hpY2ggaXMgdXN1YWxseVxuICogZWl0aGVyIGEgYDxSb3V0ZT5gIGVsZW1lbnQgb3IgYW4gYXJyYXkgb2YgdGhlbS4gVXNlZCBpbnRlcm5hbGx5IGJ5XG4gKiBgPFJvdXRlcz5gIHRvIGNyZWF0ZSBhIHJvdXRlIGNvbmZpZyBmcm9tIGl0cyBjaGlsZHJlbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvdXRpbHMvY3JlYXRlLXJvdXRlcy1mcm9tLWNoaWxkcmVuXG4gKi9cblxuXG5mdW5jdGlvbiBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW4oY2hpbGRyZW4sIHBhcmVudFBhdGgpIHtcbiAgaWYgKHBhcmVudFBhdGggPT09IHZvaWQgMCkge1xuICAgIHBhcmVudFBhdGggPSBbXTtcbiAgfVxuXG4gIGxldCByb3V0ZXMgPSBbXTtcbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAvLyBJZ25vcmUgbm9uLWVsZW1lbnRzLiBUaGlzIGFsbG93cyBwZW9wbGUgdG8gbW9yZSBlYXNpbHkgaW5saW5lXG4gICAgICAvLyBjb25kaXRpb25hbHMgaW4gdGhlaXIgcm91dGUgY29uZmlnLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJlYWN0LkZyYWdtZW50KSB7XG4gICAgICAvLyBUcmFuc3BhcmVudGx5IHN1cHBvcnQgUmVhY3QuRnJhZ21lbnQgYW5kIGl0cyBjaGlsZHJlbi5cbiAgICAgIHJvdXRlcy5wdXNoLmFwcGx5KHJvdXRlcywgY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuKGVsZW1lbnQucHJvcHMuY2hpbGRyZW4sIHBhcmVudFBhdGgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAhKGVsZW1lbnQudHlwZSA9PT0gUm91dGUpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIltcIiArICh0eXBlb2YgZWxlbWVudC50eXBlID09PSBcInN0cmluZ1wiID8gZWxlbWVudC50eXBlIDogZWxlbWVudC50eXBlLm5hbWUpICsgXCJdIGlzIG5vdCBhIDxSb3V0ZT4gY29tcG9uZW50LiBBbGwgY29tcG9uZW50IGNoaWxkcmVuIG9mIDxSb3V0ZXM+IG11c3QgYmUgYSA8Um91dGU+IG9yIDxSZWFjdC5GcmFnbWVudD5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIGxldCB0cmVlUGF0aCA9IFsuLi5wYXJlbnRQYXRoLCBpbmRleF07XG4gICAgbGV0IHJvdXRlID0ge1xuICAgICAgaWQ6IGVsZW1lbnQucHJvcHMuaWQgfHwgdHJlZVBhdGguam9pbihcIi1cIiksXG4gICAgICBjYXNlU2Vuc2l0aXZlOiBlbGVtZW50LnByb3BzLmNhc2VTZW5zaXRpdmUsXG4gICAgICBlbGVtZW50OiBlbGVtZW50LnByb3BzLmVsZW1lbnQsXG4gICAgICBpbmRleDogZWxlbWVudC5wcm9wcy5pbmRleCxcbiAgICAgIHBhdGg6IGVsZW1lbnQucHJvcHMucGF0aCxcbiAgICAgIGxvYWRlcjogZWxlbWVudC5wcm9wcy5sb2FkZXIsXG4gICAgICBhY3Rpb246IGVsZW1lbnQucHJvcHMuYWN0aW9uLFxuICAgICAgZXJyb3JFbGVtZW50OiBlbGVtZW50LnByb3BzLmVycm9yRWxlbWVudCxcbiAgICAgIGhhc0Vycm9yQm91bmRhcnk6IGVsZW1lbnQucHJvcHMuZXJyb3JFbGVtZW50ICE9IG51bGwsXG4gICAgICBzaG91bGRSZXZhbGlkYXRlOiBlbGVtZW50LnByb3BzLnNob3VsZFJldmFsaWRhdGUsXG4gICAgICBoYW5kbGU6IGVsZW1lbnQucHJvcHMuaGFuZGxlXG4gICAgfTtcblxuICAgIGlmIChlbGVtZW50LnByb3BzLmNoaWxkcmVuKSB7XG4gICAgICByb3V0ZS5jaGlsZHJlbiA9IGNyZWF0ZVJvdXRlc0Zyb21DaGlsZHJlbihlbGVtZW50LnByb3BzLmNoaWxkcmVuLCB0cmVlUGF0aCk7XG4gICAgfVxuXG4gICAgcm91dGVzLnB1c2gocm91dGUpO1xuICB9KTtcbiAgcmV0dXJuIHJvdXRlcztcbn1cbi8qKlxuICogUmVuZGVycyB0aGUgcmVzdWx0IG9mIGBtYXRjaFJvdXRlcygpYCBpbnRvIGEgUmVhY3QgZWxlbWVudC5cbiAqL1xuXG5mdW5jdGlvbiByZW5kZXJNYXRjaGVzKG1hdGNoZXMpIHtcbiAgcmV0dXJuIF9yZW5kZXJNYXRjaGVzKG1hdGNoZXMpO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogV2FsayB0aGUgcm91dGUgdHJlZSBhbmQgYWRkIGhhc0Vycm9yQm91bmRhcnkgaWYgaXQncyBub3QgcHJvdmlkZWQsIHNvIHRoYXRcbiAqIHVzZXJzIHByb3ZpZGluZyBtYW51YWwgcm91dGUgYXJyYXlzIGNhbiBqdXN0IHNwZWNpZnkgZXJyb3JFbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gZW5oYW5jZU1hbnVhbFJvdXRlT2JqZWN0cyhyb3V0ZXMpIHtcbiAgcmV0dXJuIHJvdXRlcy5tYXAocm91dGUgPT4ge1xuICAgIGxldCByb3V0ZUNsb25lID0gX2V4dGVuZHMoe30sIHJvdXRlKTtcblxuICAgIGlmIChyb3V0ZUNsb25lLmhhc0Vycm9yQm91bmRhcnkgPT0gbnVsbCkge1xuICAgICAgcm91dGVDbG9uZS5oYXNFcnJvckJvdW5kYXJ5ID0gcm91dGVDbG9uZS5lcnJvckVsZW1lbnQgIT0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocm91dGVDbG9uZS5jaGlsZHJlbikge1xuICAgICAgcm91dGVDbG9uZS5jaGlsZHJlbiA9IGVuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMocm91dGVDbG9uZS5jaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvdXRlQ2xvbmU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNZW1vcnlSb3V0ZXIocm91dGVzLCBvcHRzKSB7XG4gIHJldHVybiBjcmVhdGVSb3V0ZXIoe1xuICAgIGJhc2VuYW1lOiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLmJhc2VuYW1lLFxuICAgIGhpc3Rvcnk6IGNyZWF0ZU1lbW9yeUhpc3Rvcnkoe1xuICAgICAgaW5pdGlhbEVudHJpZXM6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMuaW5pdGlhbEVudHJpZXMsXG4gICAgICBpbml0aWFsSW5kZXg6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMuaW5pdGlhbEluZGV4XG4gICAgfSksXG4gICAgaHlkcmF0aW9uRGF0YTogb3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5oeWRyYXRpb25EYXRhLFxuICAgIHJvdXRlczogZW5oYW5jZU1hbnVhbFJvdXRlT2JqZWN0cyhyb3V0ZXMpXG4gIH0pLmluaXRpYWxpemUoKTtcbn0gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgeyBBd2FpdCwgTWVtb3J5Um91dGVyLCBOYXZpZ2F0ZSwgT3V0bGV0LCBSb3V0ZSwgUm91dGVyLCBSb3V0ZXJQcm92aWRlciwgUm91dGVzLCBEYXRhUm91dGVyQ29udGV4dCBhcyBVTlNBRkVfRGF0YVJvdXRlckNvbnRleHQsIERhdGFSb3V0ZXJTdGF0ZUNvbnRleHQgYXMgVU5TQUZFX0RhdGFSb3V0ZXJTdGF0ZUNvbnRleHQsIERhdGFTdGF0aWNSb3V0ZXJDb250ZXh0IGFzIFVOU0FGRV9EYXRhU3RhdGljUm91dGVyQ29udGV4dCwgTG9jYXRpb25Db250ZXh0IGFzIFVOU0FGRV9Mb2NhdGlvbkNvbnRleHQsIE5hdmlnYXRpb25Db250ZXh0IGFzIFVOU0FGRV9OYXZpZ2F0aW9uQ29udGV4dCwgUm91dGVDb250ZXh0IGFzIFVOU0FGRV9Sb3V0ZUNvbnRleHQsIGVuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMgYXMgVU5TQUZFX2VuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMsIGNyZWF0ZU1lbW9yeVJvdXRlciwgY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuLCBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW4gYXMgY3JlYXRlUm91dGVzRnJvbUVsZW1lbnRzLCByZW5kZXJNYXRjaGVzLCB1c2VBY3Rpb25EYXRhLCB1c2VBc3luY0Vycm9yLCB1c2VBc3luY1ZhbHVlLCB1c2VIcmVmLCB1c2VJblJvdXRlckNvbnRleHQsIHVzZUxvYWRlckRhdGEsIHVzZUxvY2F0aW9uLCB1c2VNYXRjaCwgdXNlTWF0Y2hlcywgdXNlTmF2aWdhdGUsIHVzZU5hdmlnYXRpb24sIHVzZU5hdmlnYXRpb25UeXBlLCB1c2VPdXRsZXQsIHVzZU91dGxldENvbnRleHQsIHVzZVBhcmFtcywgdXNlUmVzb2x2ZWRQYXRoLCB1c2VSZXZhbGlkYXRvciwgdXNlUm91dGVFcnJvciwgdXNlUm91dGVMb2FkZXJEYXRhLCB1c2VSb3V0ZXMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcGVyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlQYXBlcicsIHNsb3QpO1xufVxuY29uc3QgcGFwZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUGFwZXInLCBbJ3Jvb3QnLCAncm91bmRlZCcsICdvdXRsaW5lZCcsICdlbGV2YXRpb24nLCAnZWxldmF0aW9uMCcsICdlbGV2YXRpb24xJywgJ2VsZXZhdGlvbjInLCAnZWxldmF0aW9uMycsICdlbGV2YXRpb240JywgJ2VsZXZhdGlvbjUnLCAnZWxldmF0aW9uNicsICdlbGV2YXRpb243JywgJ2VsZXZhdGlvbjgnLCAnZWxldmF0aW9uOScsICdlbGV2YXRpb24xMCcsICdlbGV2YXRpb24xMScsICdlbGV2YXRpb24xMicsICdlbGV2YXRpb24xMycsICdlbGV2YXRpb24xNCcsICdlbGV2YXRpb24xNScsICdlbGV2YXRpb24xNicsICdlbGV2YXRpb24xNycsICdlbGV2YXRpb24xOCcsICdlbGV2YXRpb24xOScsICdlbGV2YXRpb24yMCcsICdlbGV2YXRpb24yMScsICdlbGV2YXRpb24yMicsICdlbGV2YXRpb24yMycsICdlbGV2YXRpb24yNCddKTtcbmV4cG9ydCBkZWZhdWx0IHBhcGVyQ2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZWxldmF0aW9uXCIsIFwic3F1YXJlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGNoYWluUHJvcFR5cGVzLCBpbnRlZ2VyUHJvcFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgZ2V0UGFwZXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BhcGVyQ2xhc3Nlcyc7IC8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtaW9zL2Jsb2IvYmNhMzYxMDc0MDU1OTRkNWI3YjE2MjY1YTViMGVkNjk4Zjg1YTVlZS9jb21wb25lbnRzL0VsZXZhdGlvbi9zcmMvVUlDb2xvciUyQk1hdGVyaWFsRWxldmF0aW9uLm0jTDYxXG5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3QgZ2V0T3ZlcmxheUFscGhhID0gZWxldmF0aW9uID0+IHtcbiAgbGV0IGFscGhhVmFsdWU7XG5cbiAgaWYgKGVsZXZhdGlvbiA8IDEpIHtcbiAgICBhbHBoYVZhbHVlID0gNS4xMTkxNiAqIGVsZXZhdGlvbiAqKiAyO1xuICB9IGVsc2Uge1xuICAgIGFscGhhVmFsdWUgPSA0LjUgKiBNYXRoLmxvZyhlbGV2YXRpb24gKyAxKSArIDI7XG4gIH1cblxuICByZXR1cm4gKGFscGhhVmFsdWUgLyAxMDApLnRvRml4ZWQoMik7XG59O1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgc3F1YXJlLFxuICAgIGVsZXZhdGlvbixcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsICFzcXVhcmUgJiYgJ3JvdW5kZWQnLCB2YXJpYW50ID09PSAnZWxldmF0aW9uJyAmJiBgZWxldmF0aW9uJHtlbGV2YXRpb259YF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRQYXBlclV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBQYXBlclJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVBhcGVyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCAhb3duZXJTdGF0ZS5zcXVhcmUgJiYgc3R5bGVzLnJvdW5kZWQsIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgc3R5bGVzW2BlbGV2YXRpb24ke293bmVyU3RhdGUuZWxldmF0aW9ufWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR2YXJzJG92ZXJsYXlzO1xuXG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLnBhcGVyLFxuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnksXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3gtc2hhZG93JylcbiAgfSwgIW93bmVyU3RhdGUuc3F1YXJlICYmIHtcbiAgICBib3JkZXJSYWRpdXM6IHRoZW1lLnNoYXBlLmJvcmRlclJhZGl1c1xuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmRpdmlkZXJ9YFxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdlbGV2YXRpb24nICYmIF9leHRlbmRzKHtcbiAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzW293bmVyU3RhdGUuZWxldmF0aW9uXVxuICB9LCAhdGhlbWUudmFycyAmJiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyAmJiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiBgbGluZWFyLWdyYWRpZW50KCR7YWxwaGEoJyNmZmYnLCBnZXRPdmVybGF5QWxwaGEob3duZXJTdGF0ZS5lbGV2YXRpb24pKX0sICR7YWxwaGEoJyNmZmYnLCBnZXRPdmVybGF5QWxwaGEob3duZXJTdGF0ZS5lbGV2YXRpb24pKX0pYFxuICB9LCB0aGVtZS52YXJzICYmIHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IChfdGhlbWUkdmFycyRvdmVybGF5cyA9IHRoZW1lLnZhcnMub3ZlcmxheXMpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdmFycyRvdmVybGF5c1tvd25lclN0YXRlLmVsZXZhdGlvbl1cbiAgfSkpO1xufSk7XG5jb25zdCBQYXBlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBhcGVyKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlQYXBlcidcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICBlbGV2YXRpb24gPSAxLFxuICAgIHNxdWFyZSA9IGZhbHNlLFxuICAgIHZhcmlhbnQgPSAnZWxldmF0aW9uJ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBlbGV2YXRpb24sXG4gICAgc3F1YXJlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuXG4gICAgaWYgKHRoZW1lLnNoYWRvd3NbZWxldmF0aW9uXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgZWxldmF0aW9uIHByb3ZpZGVkIDxQYXBlciBlbGV2YXRpb249eyR7ZWxldmF0aW9ufX0+IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHRoZW1lLmAsIGBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgXFxgdGhlbWUuc2hhZG93c1ske2VsZXZhdGlvbn1dXFxgIGlzIGRlZmluZWQuYF0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQYXBlclJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQYXBlci5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogU2hhZG93IGRlcHRoLCBjb3JyZXNwb25kcyB0byBgZHBgIGluIHRoZSBzcGVjLlxuICAgKiBJdCBhY2NlcHRzIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI0IGluY2x1c2l2ZS5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgZWxldmF0aW9uOiBjaGFpblByb3BUeXBlcyhpbnRlZ2VyUHJvcFR5cGUsIHByb3BzID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbGV2YXRpb24sXG4gICAgICB2YXJpYW50XG4gICAgfSA9IHByb3BzO1xuXG4gICAgaWYgKGVsZXZhdGlvbiA+IDAgJiYgdmFyaWFudCA9PT0gJ291dGxpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihgTVVJOiBDb21iaW5pbmcgXFxgZWxldmF0aW9uPXske2VsZXZhdGlvbn19XFxgIHdpdGggXFxgdmFyaWFudD1cIiR7dmFyaWFudH1cIlxcYCBoYXMgbm8gZWZmZWN0LiBFaXRoZXIgdXNlIFxcYGVsZXZhdGlvbj17MH1cXGAgb3IgdXNlIGEgZGlmZmVyZW50IFxcYHZhcmlhbnRcXGAuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHJvdW5kZWQgY29ybmVycyBhcmUgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzcXVhcmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ2VsZXZhdGlvbidcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2VsZXZhdGlvbicsICdvdXRsaW5lZCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUGFwZXI7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcEJhclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQXBwQmFyJywgc2xvdCk7XG59XG5jb25zdCBhcHBCYXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQXBwQmFyJywgWydyb290JywgJ3Bvc2l0aW9uRml4ZWQnLCAncG9zaXRpb25BYnNvbHV0ZScsICdwb3NpdGlvblN0aWNreScsICdwb3NpdGlvblN0YXRpYycsICdwb3NpdGlvblJlbGF0aXZlJywgJ2NvbG9yRGVmYXVsdCcsICdjb2xvclByaW1hcnknLCAnY29sb3JTZWNvbmRhcnknLCAnY29sb3JJbmhlcml0JywgJ2NvbG9yVHJhbnNwYXJlbnQnXSk7XG5leHBvcnQgZGVmYXVsdCBhcHBCYXJDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImVuYWJsZUNvbG9yT25EYXJrXCIsIFwicG9zaXRpb25cIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgUGFwZXIgZnJvbSAnLi4vUGFwZXInO1xuaW1wb3J0IHsgZ2V0QXBwQmFyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9hcHBCYXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBwb3NpdGlvbixcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGBwb3NpdGlvbiR7Y2FwaXRhbGl6ZShwb3NpdGlvbil9YF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRBcHBCYXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTsgLy8gdmFyMiBpcyB0aGUgZmFsbGJhY2suXG4vLyBFeC4gdmFyMTogJ3ZhcigtLWEpJywgdmFyMjogJ3ZhcigtLWIpJzsgcmV0dXJuOiAndmFyKC0tYSwgdmFyKC0tYikpJ1xuXG5cbmNvbnN0IGpvaW5WYXJzID0gKHZhcjEsIHZhcjIpID0+IGAke3ZhcjEgPT0gbnVsbCA/IHZvaWQgMCA6IHZhcjEucmVwbGFjZSgnKScsICcnKX0sICR7dmFyMn0pYDtcblxuY29uc3QgQXBwQmFyUm9vdCA9IHN0eWxlZChQYXBlciwge1xuICBuYW1lOiAnTXVpQXBwQmFyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tgcG9zaXRpb24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5wb3NpdGlvbil9YF0sIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3JEZWZhdWx0ID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gdGhlbWUucGFsZXR0ZS5ncmV5WzEwMF0gOiB0aGVtZS5wYWxldHRlLmdyZXlbOTAwXTtcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAvLyBQcmV2ZW50IHBhZGRpbmcgaXNzdWUgd2l0aCB0aGUgTW9kYWwgYW5kIGZpeGVkIHBvc2l0aW9uZWQgQXBwQmFyLlxuICAgIGZsZXhTaHJpbms6IDBcbiAgfSwgb3duZXJTdGF0ZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJyAmJiB7XG4gICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgekluZGV4OiAodGhlbWUudmFycyB8fCB0aGVtZSkuekluZGV4LmFwcEJhcixcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogJ2F1dG8nLFxuICAgIHJpZ2h0OiAwLFxuICAgICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgICAvLyBQcmV2ZW50IHRoZSBhcHAgYmFyIHRvIGJlIHZpc2libGUgb24gZWFjaCBwcmludGVkIHBhZ2UuXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5wb3NpdGlvbiA9PT0gJ2Fic29sdXRlJyAmJiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgekluZGV4OiAodGhlbWUudmFycyB8fCB0aGVtZSkuekluZGV4LmFwcEJhcixcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogJ2F1dG8nLFxuICAgIHJpZ2h0OiAwXG4gIH0sIG93bmVyU3RhdGUucG9zaXRpb24gPT09ICdzdGlja3knICYmIHtcbiAgICAvLyDimqDvuI8gc3RpY2t5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgSUUxMS5cbiAgICBwb3NpdGlvbjogJ3N0aWNreScsXG4gICAgekluZGV4OiAodGhlbWUudmFycyB8fCB0aGVtZSkuekluZGV4LmFwcEJhcixcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogJ2F1dG8nLFxuICAgIHJpZ2h0OiAwXG4gIH0sIG93bmVyU3RhdGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmIHtcbiAgICBwb3NpdGlvbjogJ3N0YXRpYydcbiAgfSwgb3duZXJTdGF0ZS5wb3NpdGlvbiA9PT0gJ3JlbGF0aXZlJyAmJiB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgfSwgIXRoZW1lLnZhcnMgJiYgX2V4dGVuZHMoe30sIG93bmVyU3RhdGUuY29sb3IgPT09ICdkZWZhdWx0JyAmJiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3JEZWZhdWx0LFxuICAgIGNvbG9yOiB0aGVtZS5wYWxldHRlLmdldENvbnRyYXN0VGV4dChiYWNrZ3JvdW5kQ29sb3JEZWZhdWx0KVxuICB9LCBvd25lclN0YXRlLmNvbG9yICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ3RyYW5zcGFyZW50JyAmJiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sXG4gICAgY29sb3I6IHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0uY29udHJhc3RUZXh0XG4gIH0sIG93bmVyU3RhdGUuY29sb3IgPT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICdpbmhlcml0J1xuICB9LCB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyAmJiAhb3duZXJTdGF0ZS5lbmFibGVDb2xvck9uRGFyayAmJiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBudWxsLFxuICAgIGNvbG9yOiBudWxsXG4gIH0sIG93bmVyU3RhdGUuY29sb3IgPT09ICd0cmFuc3BhcmVudCcgJiYgX2V4dGVuZHMoe1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBjb2xvcjogJ2luaGVyaXQnXG4gIH0sIHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2RhcmsnICYmIHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdub25lJ1xuICB9KSksIHRoZW1lLnZhcnMgJiYgX2V4dGVuZHMoe30sIG93bmVyU3RhdGUuY29sb3IgPT09ICdkZWZhdWx0JyAmJiB7XG4gICAgJy0tQXBwQmFyLWJhY2tncm91bmQnOiBvd25lclN0YXRlLmVuYWJsZUNvbG9yT25EYXJrID8gdGhlbWUudmFycy5wYWxldHRlLkFwcEJhci5kZWZhdWx0QmcgOiBqb2luVmFycyh0aGVtZS52YXJzLnBhbGV0dGUuQXBwQmFyLmRhcmtCZywgdGhlbWUudmFycy5wYWxldHRlLkFwcEJhci5kZWZhdWx0QmcpLFxuICAgICctLUFwcEJhci1jb2xvcic6IG93bmVyU3RhdGUuZW5hYmxlQ29sb3JPbkRhcmsgPyB0aGVtZS52YXJzLnBhbGV0dGUudGV4dC5wcmltYXJ5IDogam9pblZhcnModGhlbWUudmFycy5wYWxldHRlLkFwcEJhci5kYXJrQ29sb3IsIHRoZW1lLnZhcnMucGFsZXR0ZS50ZXh0LnByaW1hcnkpXG4gIH0sIG93bmVyU3RhdGUuY29sb3IgJiYgIW93bmVyU3RhdGUuY29sb3IubWF0Y2goL14oZGVmYXVsdHxpbmhlcml0fHRyYW5zcGFyZW50KSQvKSAmJiB7XG4gICAgJy0tQXBwQmFyLWJhY2tncm91bmQnOiBvd25lclN0YXRlLmVuYWJsZUNvbG9yT25EYXJrID8gdGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4gOiBqb2luVmFycyh0aGVtZS52YXJzLnBhbGV0dGUuQXBwQmFyLmRhcmtCZywgdGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4pLFxuICAgICctLUFwcEJhci1jb2xvcic6IG93bmVyU3RhdGUuZW5hYmxlQ29sb3JPbkRhcmsgPyB0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0uY29udHJhc3RUZXh0IDogam9pblZhcnModGhlbWUudmFycy5wYWxldHRlLkFwcEJhci5kYXJrQ29sb3IsIHRoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5jb250cmFzdFRleHQpXG4gIH0sIHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1BcHBCYXItYmFja2dyb3VuZCknLFxuICAgIGNvbG9yOiBvd25lclN0YXRlLmNvbG9yID09PSAnaW5oZXJpdCcgPyAnaW5oZXJpdCcgOiAndmFyKC0tQXBwQmFyLWNvbG9yKSdcbiAgfSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ3RyYW5zcGFyZW50JyAmJiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiAnbm9uZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGNvbG9yOiAnaW5oZXJpdCdcbiAgfSkpO1xufSk7XG5jb25zdCBBcHBCYXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBBcHBCYXIoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUFwcEJhcidcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICBlbmFibGVDb2xvck9uRGFyayA9IGZhbHNlLFxuICAgIHBvc2l0aW9uID0gJ2ZpeGVkJ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIHBvc2l0aW9uLFxuICAgIGVuYWJsZUNvbG9yT25EYXJrXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEFwcEJhclJvb3QsIF9leHRlbmRzKHtcbiAgICBzcXVhcmU6IHRydWUsXG4gICAgY29tcG9uZW50OiBcImhlYWRlclwiLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgZWxldmF0aW9uOiA0LFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSwgcG9zaXRpb24gPT09ICdmaXhlZCcgJiYgJ211aS1maXhlZCcpLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEFwcEJhci5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2FkZGluZy1uZXctY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZGVmYXVsdCcsICdpbmhlcml0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ3RyYW5zcGFyZW50J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSBgY29sb3JgIHByb3AgaXMgYXBwbGllZCBpbiBkYXJrIG1vZGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlbmFibGVDb2xvck9uRGFyazogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbmluZyB0eXBlLiBUaGUgYmVoYXZpb3Igb2YgdGhlIGRpZmZlcmVudCBvcHRpb25zIGlzIGRlc2NyaWJlZFxuICAgKiBbaW4gdGhlIE1ETiB3ZWIgZG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9MZWFybi9DU1MvQ1NTX2xheW91dC9Qb3NpdGlvbmluZykuXG4gICAqIE5vdGU6IGBzdGlja3lgIGlzIG5vdCB1bml2ZXJzYWxseSBzdXBwb3J0ZWQgYW5kIHdpbGwgZmFsbCBiYWNrIHRvIGBzdGF0aWNgIHdoZW4gdW5hdmFpbGFibGUuXG4gICAqIEBkZWZhdWx0ICdmaXhlZCdcbiAgICovXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoWydhYnNvbHV0ZScsICdmaXhlZCcsICdyZWxhdGl2ZScsICdzdGF0aWMnLCAnc3RpY2t5J10pLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBBcHBCYXI7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvb2xiYXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVRvb2xiYXInLCBzbG90KTtcbn1cbmNvbnN0IHRvb2xiYXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVG9vbGJhcicsIFsncm9vdCcsICdndXR0ZXJzJywgJ3JlZ3VsYXInLCAnZGVuc2UnXSk7XG5leHBvcnQgZGVmYXVsdCB0b29sYmFyQ2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZUd1dHRlcnNcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldFRvb2xiYXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3Rvb2xiYXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIHZhcmlhbnRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlR3V0dGVycyAmJiAnZ3V0dGVycycsIHZhcmlhbnRdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VG9vbGJhclV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBUb29sYmFyUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpVG9vbGJhcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZ3V0dGVycywgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYge1xuICBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZygyKSxcbiAgcGFkZGluZ1JpZ2h0OiB0aGVtZS5zcGFjaW5nKDIpLFxuICBbdGhlbWUuYnJlYWtwb2ludHMudXAoJ3NtJyldOiB7XG4gICAgcGFkZGluZ0xlZnQ6IHRoZW1lLnNwYWNpbmcoMyksXG4gICAgcGFkZGluZ1JpZ2h0OiB0aGVtZS5zcGFjaW5nKDMpXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1pbkhlaWdodDogNDhcbn0pLCAoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS52YXJpYW50ID09PSAncmVndWxhcicgJiYgdGhlbWUubWl4aW5zLnRvb2xiYXIpO1xuY29uc3QgVG9vbGJhciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRvb2xiYXIoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVRvb2xiYXInXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgZGlzYWJsZUd1dHRlcnMgPSBmYWxzZSxcbiAgICB2YXJpYW50ID0gJ3JlZ3VsYXInXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVG9vbGJhclJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUb29sYmFyLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgVG9vbGJhciBjaGlsZHJlbiwgdXN1YWxseSBhIG1peHR1cmUgb2YgYEljb25CdXR0b25gLCBgQnV0dG9uYCBhbmQgYFR5cG9ncmFwaHlgLlxuICAgKiBUaGUgVG9vbGJhciBpcyBhIGZsZXggY29udGFpbmVyLCBhbGxvd2luZyBmbGV4IGl0ZW0gcHJvcGVyaXRlcyB0byBiZSB1c2VkIHRvIGxheSBvdXQgdGhlIGNoaWxkcmVuLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGRpc2FibGVzIGd1dHRlciBwYWRkaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUd1dHRlcnM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ3JlZ3VsYXInXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdyZWd1bGFyJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUb29sYmFyOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpOyIsImltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuXG4gKlxuICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkgdG8gY2hpbGRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRNYXBwaW5nKGNoaWxkcmVuLCBtYXBGbikge1xuICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gbWFwcGVyKGNoaWxkKSB7XG4gICAgcmV0dXJuIG1hcEZuICYmIGlzVmFsaWRFbGVtZW50KGNoaWxkKSA/IG1hcEZuKGNoaWxkKSA6IGNoaWxkO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoY2hpbGRyZW4pIENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAvLyBydW4gdGhlIG1hcCBmdW5jdGlvbiBoZXJlIGluc3RlYWQgc28gdGhhdCB0aGUga2V5IGlzIHRoZSBjb21wdXRlZCBvbmVcbiAgICByZXN1bHRbY2hpbGQua2V5XSA9IG1hcHBlcihjaGlsZCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBXaGVuIHlvdSdyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGVcbiAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAqIGFuZCBhIG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0aGUgY29ycmVjdFxuICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gKiBkaXJlY3RseSBoYXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hpbGRyZW5cbiAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoaWxkTWFwcGluZ3MocHJldiwgbmV4dCkge1xuICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBuZXh0ID8gbmV4dFtrZXldIDogcHJldltrZXldO1xuICB9IC8vIEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGF0IGtleSBpblxuICAvLyB0aGUgY29tYmluZWQgbGlzdFxuXG5cbiAgdmFyIG5leHRLZXlzUGVuZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgIGlmIChwcmV2S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dEtleXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7XG4gICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGk7XG4gIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICBpZiAobmV4dEtleXNQZW5kaW5nW25leHRLZXldKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7XG4gIH0gLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRgXG5cblxuICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcChjaGlsZCwgcHJvcCwgcHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGwgPyBwcm9wc1twcm9wXSA6IGNoaWxkLnByb3BzW3Byb3BdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhwcm9wcywgb25FeGl0ZWQpIHtcbiAgcmV0dXJuIGdldENoaWxkTWFwcGluZyhwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgaW46IHRydWUsXG4gICAgICBhcHBlYXI6IGdldFByb3AoY2hpbGQsICdhcHBlYXInLCBwcm9wcyksXG4gICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgcHJvcHMpLFxuICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBwcm9wcylcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIG9uRXhpdGVkKSB7XG4gIHZhciBuZXh0Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIHZhciBjaGlsZHJlbiA9IG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2tleV07XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybjtcbiAgICB2YXIgaGFzUHJldiA9IChrZXkgaW4gcHJldkNoaWxkTWFwcGluZyk7XG4gICAgdmFyIGhhc05leHQgPSAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRDaGlsZE1hcHBpbmcsIGdldEluaXRpYWxDaGlsZE1hcHBpbmcsIGdldE5leHRDaGlsZE1hcHBpbmcgfSBmcm9tICcuL3V0aWxzL0NoaWxkTWFwcGluZyc7XG5cbnZhciB2YWx1ZXMgPSBPYmplY3QudmFsdWVzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0dXJuIG9ialtrXTtcbiAgfSk7XG59O1xuXG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBjb21wb25lbnQ6ICdkaXYnLFxuICBjaGlsZEZhY3Rvcnk6IGZ1bmN0aW9uIGNoaWxkRmFjdG9yeShjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxufTtcbi8qKlxuICogVGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgY29tcG9uZW50IG1hbmFnZXMgYSBzZXQgb2YgdHJhbnNpdGlvbiBjb21wb25lbnRzXG4gKiAoYDxUcmFuc2l0aW9uPmAgYW5kIGA8Q1NTVHJhbnNpdGlvbj5gKSBpbiBhIGxpc3QuIExpa2Ugd2l0aCB0aGUgdHJhbnNpdGlvblxuICogY29tcG9uZW50cywgYDxUcmFuc2l0aW9uR3JvdXA+YCBpcyBhIHN0YXRlIG1hY2hpbmUgZm9yIG1hbmFnaW5nIHRoZSBtb3VudGluZ1xuICogYW5kIHVubW91bnRpbmcgb2YgY29tcG9uZW50cyBvdmVyIHRpbWUuXG4gKlxuICogQ29uc2lkZXIgdGhlIGV4YW1wbGUgYmVsb3cuIEFzIGl0ZW1zIGFyZSByZW1vdmVkIG9yIGFkZGVkIHRvIHRoZSBUb2RvTGlzdCB0aGVcbiAqIGBpbmAgcHJvcCBpcyB0b2dnbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAuXG4gKlxuICogTm90ZSB0aGF0IGA8VHJhbnNpdGlvbkdyb3VwPmAgIGRvZXMgbm90IGRlZmluZSBhbnkgYW5pbWF0aW9uIGJlaGF2aW9yIVxuICogRXhhY3RseSBfaG93XyBhIGxpc3QgaXRlbSBhbmltYXRlcyBpcyB1cCB0byB0aGUgaW5kaXZpZHVhbCB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnQuIFRoaXMgbWVhbnMgeW91IGNhbiBtaXggYW5kIG1hdGNoIGFuaW1hdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBsaXN0XG4gKiBpdGVtcy5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb25Hcm91cCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbkdyb3VwKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG5cbiAgICB2YXIgaGFuZGxlRXhpdGVkID0gX3RoaXMuaGFuZGxlRXhpdGVkLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOyAvLyBJbml0aWFsIGNoaWxkcmVuIHNob3VsZCBhbGwgYmUgZW50ZXJpbmcsIGRlcGVuZGVudCBvbiBhcHBlYXJcblxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGhhbmRsZUV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgZmlyc3RSZW5kZXI6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IHRydWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgfTtcblxuICBUcmFuc2l0aW9uR3JvdXAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgX3JlZikge1xuICAgIHZhciBwcmV2Q2hpbGRNYXBwaW5nID0gX3JlZi5jaGlsZHJlbixcbiAgICAgICAgaGFuZGxlRXhpdGVkID0gX3JlZi5oYW5kbGVFeGl0ZWQsXG4gICAgICAgIGZpcnN0UmVuZGVyID0gX3JlZi5maXJzdFJlbmRlcjtcbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGZpcnN0UmVuZGVyID8gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIGhhbmRsZUV4aXRlZCkgOiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgaGFuZGxlRXhpdGVkKSxcbiAgICAgIGZpcnN0UmVuZGVyOiBmYWxzZVxuICAgIH07XG4gIH0gLy8gbm9kZSBpcyBgdW5kZWZpbmVkYCB3aGVuIHVzZXIgcHJvdmlkZWQgYG5vZGVSZWZgIHByb3BcbiAgO1xuXG4gIF9wcm90by5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiBoYW5kbGVFeGl0ZWQoY2hpbGQsIG5vZGUpIHtcbiAgICB2YXIgY3VycmVudENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoY2hpbGQua2V5IGluIGN1cnJlbnRDaGlsZE1hcHBpbmcpIHJldHVybjtcblxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgY2hpbGQucHJvcHMub25FeGl0ZWQobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW91bnRlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gX2V4dGVuZHMoe30sIHN0YXRlLmNoaWxkcmVuKTtcblxuICAgICAgICBkZWxldGUgY2hpbGRyZW5bY2hpbGQua2V5XTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIENvbXBvbmVudCA9IF90aGlzJHByb3BzLmNvbXBvbmVudCxcbiAgICAgICAgY2hpbGRGYWN0b3J5ID0gX3RoaXMkcHJvcHMuY2hpbGRGYWN0b3J5LFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjb21wb25lbnRcIiwgXCJjaGlsZEZhY3RvcnlcIl0pO1xuXG4gICAgdmFyIGNvbnRleHRWYWx1ZSA9IHRoaXMuc3RhdGUuY29udGV4dFZhbHVlO1xuICAgIHZhciBjaGlsZHJlbiA9IHZhbHVlcyh0aGlzLnN0YXRlLmNoaWxkcmVuKS5tYXAoY2hpbGRGYWN0b3J5KTtcbiAgICBkZWxldGUgcHJvcHMuYXBwZWFyO1xuICAgIGRlbGV0ZSBwcm9wcy5lbnRlcjtcbiAgICBkZWxldGUgcHJvcHMuZXhpdDtcblxuICAgIGlmIChDb21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKSk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25Hcm91cDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbkdyb3VwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIGA8VHJhbnNpdGlvbkdyb3VwPmAgcmVuZGVycyBhIGA8ZGl2PmAgYnkgZGVmYXVsdC4gWW91IGNhbiBjaGFuZ2UgdGhpc1xuICAgKiBiZWhhdmlvciBieSBwcm92aWRpbmcgYSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBJZiB5b3UgdXNlIFJlYWN0IHYxNisgYW5kIHdvdWxkIGxpa2UgdG8gYXZvaWQgYSB3cmFwcGluZyBgPGRpdj5gIGVsZW1lbnRcbiAgICogeW91IGNhbiBwYXNzIGluIGBjb21wb25lbnQ9e251bGx9YC4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHdyYXBwaW5nIGRpdlxuICAgKiBib3JrcyB5b3VyIGNzcyBzdHlsZXMuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGA8VHJhbnNpdGlvbj5gIGNvbXBvbmVudHMsIHRoYXQgYXJlIHRvZ2dsZWQgYGluYCBhbmQgb3V0IGFzIHRoZXlcbiAgICogbGVhdmUuIHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIHdpbGwgaW5qZWN0IHNwZWNpZmljIHRyYW5zaXRpb24gcHJvcHMsIHNvXG4gICAqIHJlbWVtYmVyIHRvIHNwcmVhZCB0aGVtIHRocm91Z2ggaWYgeW91IGFyZSB3cmFwcGluZyB0aGUgYDxUcmFuc2l0aW9uPmAgYXNcbiAgICogd2l0aCBvdXIgYDxGYWRlPmAgZXhhbXBsZS5cbiAgICpcbiAgICogV2hpbGUgdGhpcyBjb21wb25lbnQgaXMgbWVhbnQgZm9yIG11bHRpcGxlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmBcbiAgICogY2hpbGRyZW4sIHNvbWV0aW1lcyB5b3UgbWF5IHdhbnQgdG8gaGF2ZSBhIHNpbmdsZSB0cmFuc2l0aW9uIGNoaWxkIHdpdGhcbiAgICogY29udGVudCB0aGF0IHlvdSB3YW50IHRvIGJlIHRyYW5zaXRpb25lZCBvdXQgYW5kIGluIHdoZW4geW91IGNoYW5nZSBpdFxuICAgKiAoZS5nLiByb3V0ZXMsIGltYWdlcyBldGMuKSBJbiB0aGF0IGNhc2UgeW91IGNhbiBjaGFuZ2UgdGhlIGBrZXlgIHByb3Agb2ZcbiAgICogdGhlIHRyYW5zaXRpb24gY2hpbGQgYXMgeW91IGNoYW5nZSBpdHMgY29udGVudCwgdGhpcyB3aWxsIGNhdXNlXG4gICAqIGBUcmFuc2l0aW9uR3JvdXBgIHRvIHRyYW5zaXRpb24gdGhlIGNoaWxkIG91dCBhbmQgYmFjayBpbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBhcHBlYXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBlbnRlciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZXhpdCBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogWW91IG1heSBuZWVkIHRvIGFwcGx5IHJlYWN0aXZlIHVwZGF0ZXMgdG8gYSBjaGlsZCBhcyBpdCBpcyBleGl0aW5nLlxuICAgKiBUaGlzIGlzIGdlbmVyYWxseSBkb25lIGJ5IHVzaW5nIGBjbG9uZUVsZW1lbnRgIGhvd2V2ZXIgaW4gdGhlIGNhc2Ugb2YgYW4gZXhpdGluZ1xuICAgKiBjaGlsZCB0aGUgZWxlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYW5kIG5vdCBhY2Nlc3NpYmxlIHRvIHRoZSBjb25zdW1lci5cbiAgICpcbiAgICogSWYgeW91IGRvIG5lZWQgdG8gdXBkYXRlIGEgY2hpbGQgYXMgaXQgbGVhdmVzIHlvdSBjYW4gcHJvdmlkZSBhIGBjaGlsZEZhY3RvcnlgXG4gICAqIHRvIHdyYXAgZXZlcnkgY2hpbGQsIGV2ZW4gdGhlIG9uZXMgdGhhdCBhcmUgbGVhdmluZy5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24oY2hpbGQ6IFJlYWN0RWxlbWVudCkgLT4gUmVhY3RFbGVtZW50XG4gICAqL1xuICBjaGlsZEZhY3Rvcnk6IFByb3BUeXBlcy5mdW5jXG59IDoge307XG5UcmFuc2l0aW9uR3JvdXAuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbkdyb3VwOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgdXNlQ29udGV4dCwgdXNlUmVmLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IHsgaCBhcyBoYXNPd25Qcm9wZXJ0eSwgRSBhcyBFbW90aW9uLCBjIGFzIGNyZWF0ZUVtb3Rpb25Qcm9wcywgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBUIGFzIFRoZW1lQ29udGV4dCB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTZhODgzZGE5LmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IEMgYXMgQ2FjaGVQcm92aWRlciwgVCBhcyBUaGVtZUNvbnRleHQsIGEgYXMgVGhlbWVQcm92aWRlciwgXyBhcyBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUsIHUgYXMgdXNlVGhlbWUsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgYiBhcyB3aXRoVGhlbWUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC02YTg4M2RhOS5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcbmltcG9ydCAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGdldFJlZ2lzdGVyZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgcGtnID0ge1xuXHRuYW1lOiBcIkBlbW90aW9uL3JlYWN0XCIsXG5cdHZlcnNpb246IFwiMTEuMTAuNFwiLFxuXHRtYWluOiBcImRpc3QvZW1vdGlvbi1yZWFjdC5janMuanNcIixcblx0bW9kdWxlOiBcImRpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIixcblx0YnJvd3Nlcjoge1xuXHRcdFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanNcIlxuXHR9LFxuXHRleHBvcnRzOiB7XG5cdFx0XCIuXCI6IHtcblx0XHRcdG1vZHVsZToge1xuXHRcdFx0XHR3b3JrZXI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3Qud29ya2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRicm93c2VyOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiXG5cdFx0XHR9LFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtcnVudGltZVwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vX2lzb2xhdGVkLWhucnNcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL2pzeC1kZXYtcnVudGltZVwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUud29ya2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRicm93c2VyOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9wYWNrYWdlLmpzb25cIjogXCIuL3BhY2thZ2UuanNvblwiLFxuXHRcdFwiLi90eXBlcy9jc3MtcHJvcFwiOiBcIi4vdHlwZXMvY3NzLXByb3AuZC50c1wiLFxuXHRcdFwiLi9tYWNyb1wiOiBcIi4vbWFjcm8uanNcIlxuXHR9LFxuXHR0eXBlczogXCJ0eXBlcy9pbmRleC5kLnRzXCIsXG5cdGZpbGVzOiBbXG5cdFx0XCJzcmNcIixcblx0XHRcImRpc3RcIixcblx0XHRcImpzeC1ydW50aW1lXCIsXG5cdFx0XCJqc3gtZGV2LXJ1bnRpbWVcIixcblx0XHRcIl9pc29sYXRlZC1obnJzXCIsXG5cdFx0XCJ0eXBlcy8qLmQudHNcIixcblx0XHRcIm1hY3JvLmpzXCIsXG5cdFx0XCJtYWNyby5kLnRzXCIsXG5cdFx0XCJtYWNyby5qcy5mbG93XCJcblx0XSxcblx0c2lkZUVmZmVjdHM6IGZhbHNlLFxuXHRhdXRob3I6IFwiRW1vdGlvbiBDb250cmlidXRvcnNcIixcblx0bGljZW5zZTogXCJNSVRcIixcblx0c2NyaXB0czoge1xuXHRcdFwidGVzdDp0eXBlc2NyaXB0XCI6IFwiZHRzbGludCB0eXBlc1wiXG5cdH0sXG5cdGRlcGVuZGVuY2llczoge1xuXHRcdFwiQGJhYmVsL3J1bnRpbWVcIjogXCJeNy4xOC4zXCIsXG5cdFx0XCJAZW1vdGlvbi9iYWJlbC1wbHVnaW5cIjogXCJeMTEuMTAuMFwiLFxuXHRcdFwiQGVtb3Rpb24vY2FjaGVcIjogXCJeMTEuMTAuMFwiLFxuXHRcdFwiQGVtb3Rpb24vc2VyaWFsaXplXCI6IFwiXjEuMS4wXCIsXG5cdFx0XCJAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrc1wiOiBcIl4xLjAuMFwiLFxuXHRcdFwiQGVtb3Rpb24vdXRpbHNcIjogXCJeMS4yLjBcIixcblx0XHRcIkBlbW90aW9uL3dlYWstbWVtb2l6ZVwiOiBcIl4wLjMuMFwiLFxuXHRcdFwiaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NcIjogXCJeMy4zLjFcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzOiB7XG5cdFx0XCJAYmFiZWwvY29yZVwiOiBcIl43LjAuMFwiLFxuXHRcdHJlYWN0OiBcIj49MTYuOC4wXCJcblx0fSxcblx0cGVlckRlcGVuZGVuY2llc01ldGE6IHtcblx0XHRcIkBiYWJlbC9jb3JlXCI6IHtcblx0XHRcdG9wdGlvbmFsOiB0cnVlXG5cdFx0fSxcblx0XHRcIkB0eXBlcy9yZWFjdFwiOiB7XG5cdFx0XHRvcHRpb25hbDogdHJ1ZVxuXHRcdH1cblx0fSxcblx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XCJAYmFiZWwvY29yZVwiOiBcIl43LjE4LjVcIixcblx0XHRcIkBkZWZpbml0ZWx5dHlwZWQvZHRzbGludFwiOiBcIjAuMC4xMTJcIixcblx0XHRcIkBlbW90aW9uL2Nzc1wiOiBcIjExLjEwLjBcIixcblx0XHRcIkBlbW90aW9uL2Nzcy1wcmV0dGlmaWVyXCI6IFwiMS4xLjBcIixcblx0XHRcIkBlbW90aW9uL3NlcnZlclwiOiBcIjExLjEwLjBcIixcblx0XHRcIkBlbW90aW9uL3N0eWxlZFwiOiBcIjExLjEwLjRcIixcblx0XHRcImh0bWwtdGFnLW5hbWVzXCI6IFwiXjEuMS4yXCIsXG5cdFx0cmVhY3Q6IFwiMTYuMTQuMFwiLFxuXHRcdFwic3ZnLXRhZy1uYW1lc1wiOiBcIl4xLjEuMVwiLFxuXHRcdHR5cGVzY3JpcHQ6IFwiXjQuNS41XCJcblx0fSxcblx0cmVwb3NpdG9yeTogXCJodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL3RyZWUvbWFpbi9wYWNrYWdlcy9yZWFjdFwiLFxuXHRwdWJsaXNoQ29uZmlnOiB7XG5cdFx0YWNjZXNzOiBcInB1YmxpY1wiXG5cdH0sXG5cdFwidW1kOm1haW5cIjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QudW1kLm1pbi5qc1wiLFxuXHRwcmVjb25zdHJ1Y3Q6IHtcblx0XHRlbnRyeXBvaW50czogW1xuXHRcdFx0XCIuL2luZGV4LmpzXCIsXG5cdFx0XHRcIi4vanN4LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9faXNvbGF0ZWQtaG5ycy5qc1wiXG5cdFx0XSxcblx0XHR1bWROYW1lOiBcImVtb3Rpb25SZWFjdFwiLFxuXHRcdGV4cG9ydHM6IHtcblx0XHRcdGVudkNvbmRpdGlvbnM6IFtcblx0XHRcdFx0XCJicm93c2VyXCIsXG5cdFx0XHRcdFwid29ya2VyXCJcblx0XHRcdF0sXG5cdFx0XHRleHRyYToge1xuXHRcdFx0XHRcIi4vdHlwZXMvY3NzLXByb3BcIjogXCIuL3R5cGVzL2Nzcy1wcm9wLmQudHNcIixcblx0XHRcdFx0XCIuL21hY3JvXCI6IFwiLi9tYWNyby5qc1wiXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG52YXIganN4ID0gZnVuY3Rpb24ganN4KHR5cGUsIHByb3BzKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCAnY3NzJykpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9IC8vICRGbG93Rml4TWVcblxuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50LmFwcGx5KG51bGwsIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSk7XG59O1xuXG52YXIgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gZmFsc2U7IC8vIG1haW50YWluIHBsYWNlIG92ZXIgcmVyZW5kZXJzLlxuLy8gaW5pdGlhbCByZW5kZXIgZnJvbSBicm93c2VyLCBpbnNlcnRCZWZvcmUgY29udGV4dC5zaGVldC50YWdzWzBdIG9yIGlmIGEgc3R5bGUgaGFzbid0IGJlZW4gaW5zZXJ0ZWQgdGhlcmUgeWV0LCBhcHBlbmRDaGlsZFxuLy8gaW5pdGlhbCBjbGllbnQtc2lkZSByZW5kZXIgZnJvbSBTU1IsIHVzZSBwbGFjZSBvZiBoeWRyYXRpbmcgdGFnXG5cbnZhciBHbG9iYWwgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCAmJiAoIC8vIGNoZWNrIGZvciBjbGFzc05hbWUgYXMgd2VsbCBzaW5jZSB0aGUgdXNlciBpc1xuICAvLyBwcm9iYWJseSB1c2luZyB0aGUgY3VzdG9tIGNyZWF0ZUVsZW1lbnQgd2hpY2hcbiAgLy8gbWVhbnMgaXQgd2lsbCBiZSB0dXJuZWQgaW50byBhIGNsYXNzTmFtZSBwcm9wXG4gIC8vICRGbG93Rml4TWUgSSBkb24ndCByZWFsbHkgd2FudCB0byBhZGQgaXQgdG8gdGhlIHR5cGUgc2luY2UgaXQgc2hvdWxkbid0IGJlIHVzZWRcbiAgcHJvcHMuY2xhc3NOYW1lIHx8IHByb3BzLmNzcykpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIGNzcyBwcm9wIG9uIEdsb2JhbCwgZGlkIHlvdSBtZWFuIHRvIHVzZSB0aGUgc3R5bGVzIHByb3AgaW5zdGVhZD9cIik7XG4gICAgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzdHlsZXMgPSBwcm9wcy5zdHlsZXM7XG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzdHlsZXNdLCB1bmRlZmluZWQsIHVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG4gIC8vIGJ1dCBpdCBpcyBiYXNlZCBvbiBhIGNvbnN0YW50IHRoYXQgd2lsbCBuZXZlciBjaGFuZ2UgYXQgcnVudGltZVxuICAvLyBpdCdzIGVmZmVjdGl2ZWx5IGxpa2UgaGF2aW5nIHR3byBpbXBsZW1lbnRhdGlvbnMgYW5kIHN3aXRjaGluZyB0aGVtIG91dFxuICAvLyBzbyBpdCdzIG5vdCBhY3R1YWxseSBicmVha2luZyBhbnl0aGluZ1xuXG5cbiAgdmFyIHNoZWV0UmVmID0gdXNlUmVmKCk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtleSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbFwiOyAvLyB1c2UgY2FzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8yNjc1XG5cbiAgICB2YXIgc2hlZXQgPSBuZXcgY2FjaGUuc2hlZXQuY29uc3RydWN0b3Ioe1xuICAgICAga2V5OiBrZXksXG4gICAgICBub25jZTogY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IGNhY2hlLnNoZWV0LmNvbnRhaW5lcixcbiAgICAgIHNwZWVkeTogY2FjaGUuc2hlZXQuaXNTcGVlZHlcbiAgICB9KTtcbiAgICB2YXIgcmVoeWRyYXRpbmcgPSBmYWxzZTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgR2xvYmFsLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25HbG9iYWwnO1xufVxuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG52YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICB2YXIgaW5zZXJ0YWJsZSA9IGNzcy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIHZhciBuYW1lID0gXCJhbmltYXRpb24tXCIgKyBpbnNlcnRhYmxlLm5hbWU7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhcmcuc3R5bGVzICE9PSB1bmRlZmluZWQgJiYgYXJnLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdZb3UgaGF2ZSBwYXNzZWQgc3R5bGVzIGNyZWF0ZWQgd2l0aCBgY3NzYCBmcm9tIGBAZW1vdGlvbi9yZWFjdGAgcGFja2FnZSB0byB0aGUgYGN4YC5cXG4nICsgJ2BjeGAgaXMgbWVhbnQgdG8gY29tcG9zZSBjbGFzcyBuYW1lcyAoc3RyaW5ncykgc28geW91IHNob3VsZCBjb252ZXJ0IHRob3NlIHN0eWxlcyB0byBhIGNsYXNzIG5hbWUgYnkgcGFzc2luZyB0aGVtIHRvIHRoZSBgY3NzYCByZWNlaXZlZCBmcm9tIDxDbGFzc05hbWVzLz4gY29tcG9uZW50LicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkQXJyID0gX3JlZi5zZXJpYWxpemVkQXJyO1xuICB2YXIgcnVsZXMgPSB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWFsaXplZEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJlcyA9IGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZEFycltpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgQ2xhc3NOYW1lcyA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSkge1xuICB2YXIgaGFzUmVuZGVyZWQgPSBmYWxzZTtcbiAgdmFyIHNlcmlhbGl6ZWRBcnIgPSBbXTtcblxuICB2YXIgY3NzID0gZnVuY3Rpb24gY3NzKCkge1xuICAgIGlmIChoYXNSZW5kZXJlZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NzcyBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgc2VyaWFsaXplZEFyci5wdXNoKHNlcmlhbGl6ZWQpOyAvLyByZWdpc3RyYXRpb24gaGFzIHRvIGhhcHBlbiBoZXJlIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBtaWdodCBnZXQgY29uc3VtZWQgYnkgYGN4YFxuXG4gICAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGZhbHNlKTtcbiAgICByZXR1cm4gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIH07XG5cbiAgdmFyIGN4ID0gZnVuY3Rpb24gY3goKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3ggY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVuZGVyJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKGNhY2hlLnJlZ2lzdGVyZWQsIGNzcywgY2xhc3NuYW1lcyhhcmdzKSk7XG4gIH07XG5cbiAgdmFyIGNvbnRlbnQgPSB7XG4gICAgY3NzOiBjc3MsXG4gICAgY3g6IGN4LFxuICAgIHRoZW1lOiB1c2VDb250ZXh0KFRoZW1lQ29udGV4dClcbiAgfTtcbiAgdmFyIGVsZSA9IHByb3BzLmNoaWxkcmVuKGNvbnRlbnQpO1xuICBoYXNSZW5kZXJlZCA9IHRydWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIHNlcmlhbGl6ZWRBcnI6IHNlcmlhbGl6ZWRBcnJcbiAgfSksIGVsZSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQ2xhc3NOYW1lcy5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2xhc3NOYW1lcyc7XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJzsgLy8gIzE3MjcgZm9yIHNvbWUgcmVhc29uIEplc3QgZXZhbHVhdGVzIG1vZHVsZXMgdHdpY2UgaWYgc29tZSBjb25zdW1pbmcgbW9kdWxlIGdldHMgbW9ja2VkIHdpdGggamVzdC5tb2NrXG5cbiAgdmFyIGlzSmVzdCA9IHR5cGVvZiBqZXN0ICE9PSAndW5kZWZpbmVkJztcblxuICBpZiAoaXNCcm93c2VyICYmICFpc0plc3QpIHtcbiAgICAvLyBnbG9iYWxUaGlzIGhhcyB3aWRlIGJyb3dzZXIgc3VwcG9ydCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1nbG9iYWxUaGlzLCBOb2RlLmpzIDEyIGFuZCBsYXRlclxuICAgIHZhciBnbG9iYWxDb250ZXh0ID0gLy8gJEZsb3dJZ25vcmVcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICA6IGlzQnJvd3NlciA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgICB2YXIgZ2xvYmFsS2V5ID0gXCJfX0VNT1RJT05fUkVBQ1RfXCIgKyBwa2cudmVyc2lvbi5zcGxpdCgnLicpWzBdICsgXCJfX1wiO1xuXG4gICAgaWYgKGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSkge1xuICAgICAgY29uc29sZS53YXJuKCdZb3UgYXJlIGxvYWRpbmcgQGVtb3Rpb24vcmVhY3Qgd2hlbiBpdCBpcyBhbHJlYWR5IGxvYWRlZC4gUnVubmluZyAnICsgJ211bHRpcGxlIGluc3RhbmNlcyBtYXkgY2F1c2UgcHJvYmxlbXMuIFRoaXMgY2FuIGhhcHBlbiBpZiBtdWx0aXBsZSAnICsgJ3ZlcnNpb25zIGFyZSB1c2VkLCBvciBpZiBtdWx0aXBsZSBidWlsZHMgb2YgdGhlIHNhbWUgdmVyc2lvbiBhcmUgJyArICd1c2VkLicpO1xuICAgIH1cblxuICAgIGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSA9IHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ2xhc3NOYW1lcywgR2xvYmFsLCBqc3ggYXMgY3JlYXRlRWxlbWVudCwgY3NzLCBqc3gsIGtleWZyYW1lcyB9O1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmZ1bmN0aW9uIFJpcHBsZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNsYXNzZXMsXG4gICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgIHJpcHBsZVgsXG4gICAgcmlwcGxlWSxcbiAgICByaXBwbGVTaXplLFxuICAgIGluOiBpblByb3AsXG4gICAgb25FeGl0ZWQsXG4gICAgdGltZW91dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtsZWF2aW5nLCBzZXRMZWF2aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmlwcGxlQ2xhc3NOYW1lID0gY2xzeChjbGFzc05hbWUsIGNsYXNzZXMucmlwcGxlLCBjbGFzc2VzLnJpcHBsZVZpc2libGUsIHB1bHNhdGUgJiYgY2xhc3Nlcy5yaXBwbGVQdWxzYXRlKTtcbiAgY29uc3QgcmlwcGxlU3R5bGVzID0ge1xuICAgIHdpZHRoOiByaXBwbGVTaXplLFxuICAgIGhlaWdodDogcmlwcGxlU2l6ZSxcbiAgICB0b3A6IC0ocmlwcGxlU2l6ZSAvIDIpICsgcmlwcGxlWSxcbiAgICBsZWZ0OiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVhcbiAgfTtcbiAgY29uc3QgY2hpbGRDbGFzc05hbWUgPSBjbHN4KGNsYXNzZXMuY2hpbGQsIGxlYXZpbmcgJiYgY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHB1bHNhdGUgJiYgY2xhc3Nlcy5jaGlsZFB1bHNhdGUpO1xuXG4gIGlmICghaW5Qcm9wICYmICFsZWF2aW5nKSB7XG4gICAgc2V0TGVhdmluZyh0cnVlKTtcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpblByb3AgJiYgb25FeGl0ZWQgIT0gbnVsbCkge1xuICAgICAgLy8gcmVhY3QtdHJhbnNpdGlvbi1ncm91cCNvbkV4aXRlZFxuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dChvbkV4aXRlZCwgdGltZW91dCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW29uRXhpdGVkLCBpblByb3AsIHRpbWVvdXRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiByaXBwbGVDbGFzc05hbWUsXG4gICAgc3R5bGU6IHJpcHBsZVN0eWxlcyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2hpbGRDbGFzc05hbWVcbiAgICB9KVxuICB9KTtcbn1cblxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUmlwcGxlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogU2VlIFtDU1MgQVBJXSgjY3NzKSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmUgLSBpbmplY3RlZCBmcm9tIFRyYW5zaXRpb25Hcm91cFxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlIC0gaW5qZWN0ZWQgZnJvbSBUcmFuc2l0aW9uR3JvdXBcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIHB1bHNhdGVzLCB0eXBpY2FsbHkgaW5kaWNhdGluZyB0aGUga2V5Ym9hcmQgZm9jdXMgc3RhdGUgb2YgYW4gZWxlbWVudC5cbiAgICovXG4gIHB1bHNhdGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBEaWFtZXRlciBvZiB0aGUgcmlwcGxlLlxuICAgKi9cbiAgcmlwcGxlU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICogSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcmlwcGxlIGNlbnRlci5cbiAgICovXG4gIHJpcHBsZVg6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIFZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSByaXBwbGUgY2VudGVyLlxuICAgKi9cbiAgcmlwcGxlWTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICogZXhpdCBkZWxheVxuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUmlwcGxlOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb3VjaFJpcHBsZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVG91Y2hSaXBwbGUnLCBzbG90KTtcbn1cbmNvbnN0IHRvdWNoUmlwcGxlQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRvdWNoUmlwcGxlJywgWydyb290JywgJ3JpcHBsZScsICdyaXBwbGVWaXNpYmxlJywgJ3JpcHBsZVB1bHNhdGUnLCAnY2hpbGQnLCAnY2hpbGRMZWF2aW5nJywgJ2NoaWxkUHVsc2F0ZSddKTtcbmV4cG9ydCBkZWZhdWx0IHRvdWNoUmlwcGxlQ2xhc3NlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2VudGVyXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiXTtcblxubGV0IF8gPSB0ID0+IHQsXG4gICAgX3QsXG4gICAgX3QyLFxuICAgIF90MyxcbiAgICBfdDQ7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uR3JvdXAgfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBSaXBwbGUgZnJvbSAnLi9SaXBwbGUnO1xuaW1wb3J0IHRvdWNoUmlwcGxlQ2xhc3NlcyBmcm9tICcuL3RvdWNoUmlwcGxlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgRFVSQVRJT04gPSA1NTA7XG5leHBvcnQgY29uc3QgREVMQVlfUklQUExFID0gODA7XG5jb25zdCBlbnRlcktleWZyYW1lID0ga2V5ZnJhbWVzKF90IHx8IChfdCA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuICAgIG9wYWNpdHk6IDAuMTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMC4zO1xuICB9XG5gKSk7XG5jb25zdCBleGl0S2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QyIHx8IChfdDIgPSBfYFxuICAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbmApKTtcbmNvbnN0IHB1bHNhdGVLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDMgfHwgKF90MyA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTIpO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxuYCkpO1xuZXhwb3J0IGNvbnN0IFRvdWNoUmlwcGxlUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1Jvb3QnXG59KSh7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAwLFxuICB0b3A6IDAsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206IDAsXG4gIGxlZnQ6IDAsXG4gIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG59KTsgLy8gVGhpcyBgc3R5bGVkKClgIGZ1bmN0aW9uIGludm9rZXMga2V5ZnJhbWVzLiBgc3R5bGVkLWNvbXBvbmVudHNgIG9ubHkgc3VwcG9ydHMga2V5ZnJhbWVzXG4vLyBpbiBzdHJpbmcgdGVtcGxhdGVzLiBEbyBub3QgY29udmVydCB0aGVzZSBzdHlsZXMgaW4gSlMgb2JqZWN0IGFzIGl0IHdpbGwgYnJlYWsuXG5cbmV4cG9ydCBjb25zdCBUb3VjaFJpcHBsZVJpcHBsZSA9IHN0eWxlZChSaXBwbGUsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1JpcHBsZSdcbn0pKF90NCB8fCAoX3Q0ID0gX2BcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gICYuJHswfSB7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYuJHswfSB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8qIEBub2ZsaXAgKi9cbiAgICBsZWZ0OiAwcHg7XG4gICAgdG9wOiAwO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMjUwMG1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAyMDBtcztcbiAgfVxuYCksIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBlbnRlcktleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlciwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRMZWF2aW5nLCBleGl0S2V5ZnJhbWUsIERVUkFUSU9OLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSwgcHVsc2F0ZUtleWZyYW1lLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCk7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKlxuICogVE9ETyB2NTogTWFrZSBwcml2YXRlXG4gKi9cblxuY29uc3QgVG91Y2hSaXBwbGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUb3VjaFJpcHBsZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjZW50ZXI6IGNlbnRlclByb3AgPSBmYWxzZSxcbiAgICBjbGFzc2VzID0ge30sXG4gICAgY2xhc3NOYW1lXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBbcmlwcGxlcywgc2V0UmlwcGxlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gIGNvbnN0IG5leHRLZXkgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IHJpcHBsZUNhbGxiYWNrID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyaXBwbGVDYWxsYmFjay5jdXJyZW50KSB7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50KCk7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtyaXBwbGVzXSk7IC8vIFVzZWQgdG8gZmlsdGVyIG91dCBtb3VzZSBlbXVsYXRlZCBldmVudHMgb24gbW9iaWxlLlxuXG4gIGNvbnN0IGlnbm9yaW5nTW91c2VEb3duID0gUmVhY3QudXNlUmVmKGZhbHNlKTsgLy8gV2UgdXNlIGEgdGltZXIgaW4gb3JkZXIgdG8gb25seSBzaG93IHRoZSByaXBwbGVzIGZvciB0b3VjaCBcImNsaWNrXCIgbGlrZSBldmVudHMuXG4gIC8vIFdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB0aGUgcmlwcGxlIGZvciB0b3VjaCBzY3JvbGwgZXZlbnRzLlxuXG4gIGNvbnN0IHN0YXJ0VGltZXIgPSBSZWFjdC51c2VSZWYobnVsbCk7IC8vIFRoaXMgaXMgdGhlIGhvb2sgY2FsbGVkIG9uY2UgdGhlIHByZXZpb3VzIHRpbWVvdXQgaXMgcmVhZHkuXG5cbiAgY29uc3Qgc3RhcnRUaW1lckNvbW1pdCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgY29udGFpbmVyID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoc3RhcnRUaW1lci5jdXJyZW50KTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIGNvbnN0IHN0YXJ0Q29tbWl0ID0gUmVhY3QudXNlQ2FsbGJhY2socGFyYW1zID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwdWxzYXRlLFxuICAgICAgcmlwcGxlWCxcbiAgICAgIHJpcHBsZVksXG4gICAgICByaXBwbGVTaXplLFxuICAgICAgY2JcbiAgICB9ID0gcGFyYW1zO1xuICAgIHNldFJpcHBsZXMob2xkUmlwcGxlcyA9PiBbLi4ub2xkUmlwcGxlcywgLyojX19QVVJFX18qL19qc3goVG91Y2hSaXBwbGVSaXBwbGUsIHtcbiAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgcmlwcGxlOiBjbHN4KGNsYXNzZXMucmlwcGxlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlKSxcbiAgICAgICAgcmlwcGxlVmlzaWJsZTogY2xzeChjbGFzc2VzLnJpcHBsZVZpc2libGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVWaXNpYmxlKSxcbiAgICAgICAgcmlwcGxlUHVsc2F0ZTogY2xzeChjbGFzc2VzLnJpcHBsZVB1bHNhdGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVQdWxzYXRlKSxcbiAgICAgICAgY2hpbGQ6IGNsc3goY2xhc3Nlcy5jaGlsZCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkKSxcbiAgICAgICAgY2hpbGRMZWF2aW5nOiBjbHN4KGNsYXNzZXMuY2hpbGRMZWF2aW5nLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRMZWF2aW5nKSxcbiAgICAgICAgY2hpbGRQdWxzYXRlOiBjbHN4KGNsYXNzZXMuY2hpbGRQdWxzYXRlLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRQdWxzYXRlKVxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IERVUkFUSU9OLFxuICAgICAgcHVsc2F0ZTogcHVsc2F0ZSxcbiAgICAgIHJpcHBsZVg6IHJpcHBsZVgsXG4gICAgICByaXBwbGVZOiByaXBwbGVZLFxuICAgICAgcmlwcGxlU2l6ZTogcmlwcGxlU2l6ZVxuICAgIH0sIG5leHRLZXkuY3VycmVudCldKTtcbiAgICBuZXh0S2V5LmN1cnJlbnQgKz0gMTtcbiAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gY2I7XG4gIH0sIFtjbGFzc2VzXSk7XG4gIGNvbnN0IHN0YXJ0ID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50ID0ge30sIG9wdGlvbnMgPSB7fSwgY2IpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwdWxzYXRlID0gZmFsc2UsXG4gICAgICBjZW50ZXIgPSBjZW50ZXJQcm9wIHx8IG9wdGlvbnMucHVsc2F0ZSxcbiAgICAgIGZha2VFbGVtZW50ID0gZmFsc2UgLy8gRm9yIHRlc3QgcHVycG9zZXNcblxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICdtb3VzZWRvd24nICYmIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQpIHtcbiAgICAgIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZmFrZUVsZW1lbnQgPyBudWxsIDogY29udGFpbmVyLmN1cnJlbnQ7XG4gICAgY29uc3QgcmVjdCA9IGVsZW1lbnQgPyBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwXG4gICAgfTsgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSByaXBwbGVcblxuICAgIGxldCByaXBwbGVYO1xuICAgIGxldCByaXBwbGVZO1xuICAgIGxldCByaXBwbGVTaXplO1xuXG4gICAgaWYgKGNlbnRlciB8fCBldmVudCA9PT0gdW5kZWZpbmVkIHx8IGV2ZW50LmNsaWVudFggPT09IDAgJiYgZXZlbnQuY2xpZW50WSA9PT0gMCB8fCAhZXZlbnQuY2xpZW50WCAmJiAhZXZlbnQudG91Y2hlcykge1xuICAgICAgcmlwcGxlWCA9IE1hdGgucm91bmQocmVjdC53aWR0aCAvIDIpO1xuICAgICAgcmlwcGxlWSA9IE1hdGgucm91bmQocmVjdC5oZWlnaHQgLyAyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjbGllbnRYLFxuICAgICAgICBjbGllbnRZXG4gICAgICB9ID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDAgPyBldmVudC50b3VjaGVzWzBdIDogZXZlbnQ7XG4gICAgICByaXBwbGVYID0gTWF0aC5yb3VuZChjbGllbnRYIC0gcmVjdC5sZWZ0KTtcbiAgICAgIHJpcHBsZVkgPSBNYXRoLnJvdW5kKGNsaWVudFkgLSByZWN0LnRvcCk7XG4gICAgfVxuXG4gICAgaWYgKGNlbnRlcikge1xuICAgICAgcmlwcGxlU2l6ZSA9IE1hdGguc3FydCgoMiAqIHJlY3Qud2lkdGggKiogMiArIHJlY3QuaGVpZ2h0ICoqIDIpIC8gMyk7IC8vIEZvciBzb21lIHJlYXNvbiB0aGUgYW5pbWF0aW9uIGlzIGJyb2tlbiBvbiBNb2JpbGUgQ2hyb21lIGlmIHRoZSBzaXplIGlzIGV2ZW4uXG5cbiAgICAgIGlmIChyaXBwbGVTaXplICUgMiA9PT0gMCkge1xuICAgICAgICByaXBwbGVTaXplICs9IDE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNpemVYID0gTWF0aC5tYXgoTWF0aC5hYnMoKGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudFdpZHRoIDogMCkgLSByaXBwbGVYKSwgcmlwcGxlWCkgKiAyICsgMjtcbiAgICAgIGNvbnN0IHNpemVZID0gTWF0aC5tYXgoTWF0aC5hYnMoKGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudEhlaWdodCA6IDApIC0gcmlwcGxlWSksIHJpcHBsZVkpICogMiArIDI7XG4gICAgICByaXBwbGVTaXplID0gTWF0aC5zcXJ0KHNpemVYICoqIDIgKyBzaXplWSAqKiAyKTtcbiAgICB9IC8vIFRvdWNoZSBkZXZpY2VzXG5cblxuICAgIGlmIChldmVudCAhPSBudWxsICYmIGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIC8vIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBhbm90aGVyIHRvdWNoc3RhcnQgZHVlIHRvIG11bHRpdG91Y2hcbiAgICAgIC8vIG90aGVyd2lzZSB3ZSB3aWxsIG9ubHkgY2xlYXIgYSBzaW5nbGUgdGltZXIgd2hlbiB1bm1vdW50aW5nIHdoaWxlIHR3b1xuICAgICAgLy8gYXJlIHJ1bm5pbmdcbiAgICAgIGlmIChzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gUHJlcGFyZSB0aGUgcmlwcGxlIGVmZmVjdC5cbiAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gKCkgPT4ge1xuICAgICAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgICAgIHB1bHNhdGUsXG4gICAgICAgICAgICByaXBwbGVYLFxuICAgICAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgICAgIHJpcHBsZVNpemUsXG4gICAgICAgICAgICBjYlxuICAgICAgICAgIH0pO1xuICAgICAgICB9OyAvLyBEZWxheSB0aGUgZXhlY3V0aW9uIG9mIHRoZSByaXBwbGUgZWZmZWN0LlxuXG5cbiAgICAgICAgc3RhcnRUaW1lci5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXJ0VGltZXJDb21taXQuY3VycmVudCkge1xuICAgICAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KCk7XG4gICAgICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgREVMQVlfUklQUExFKTsgLy8gV2UgaGF2ZSB0byBtYWtlIGEgdHJhZGVvZmYgd2l0aCB0aGlzIHZhbHVlLlxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydENvbW1pdCh7XG4gICAgICAgIHB1bHNhdGUsXG4gICAgICAgIHJpcHBsZVgsXG4gICAgICAgIHJpcHBsZVksXG4gICAgICAgIHJpcHBsZVNpemUsXG4gICAgICAgIGNiXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtjZW50ZXJQcm9wLCBzdGFydENvbW1pdF0pO1xuICBjb25zdCBwdWxzYXRlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0YXJ0KHt9LCB7XG4gICAgICBwdWxzYXRlOiB0cnVlXG4gICAgfSk7XG4gIH0sIFtzdGFydF0pO1xuICBjb25zdCBzdG9wID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50LCBjYikgPT4ge1xuICAgIGNsZWFyVGltZW91dChzdGFydFRpbWVyLmN1cnJlbnQpOyAvLyBUaGUgdG91Y2ggaW50ZXJhY3Rpb24gb2NjdXJzIHRvbyBxdWlja2x5LlxuICAgIC8vIFdlIHN0aWxsIHdhbnQgdG8gc2hvdyByaXBwbGUgZWZmZWN0LlxuXG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICd0b3VjaGVuZCcgJiYgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICBzdGFydFRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc3RvcChldmVudCwgY2IpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICBzZXRSaXBwbGVzKG9sZFJpcHBsZXMgPT4ge1xuICAgICAgaWYgKG9sZFJpcHBsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gb2xkUmlwcGxlcy5zbGljZSgxKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9sZFJpcHBsZXM7XG4gICAgfSk7XG4gICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IGNiO1xuICB9LCBbXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIHB1bHNhdGUsXG4gICAgc3RhcnQsXG4gICAgc3RvcFxuICB9KSwgW3B1bHNhdGUsIHN0YXJ0LCBzdG9wXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3godG91Y2hSaXBwbGVDbGFzc2VzLnJvb3QsIGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IGNvbnRhaW5lclxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uR3JvdXAsIHtcbiAgICAgIGNvbXBvbmVudDogbnVsbCxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjaGlsZHJlbjogcmlwcGxlc1xuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVG91Y2hSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIHN0YXJ0cyBhdCB0aGUgY2VudGVyIG9mIHRoZSBjb21wb25lbnRcbiAgICogcmF0aGVyIHRoYW4gYXQgdGhlIHBvaW50IG9mIGludGVyYWN0aW9uLlxuICAgKi9cbiAgY2VudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUb3VjaFJpcHBsZTsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQnV0dG9uQmFzZScsIHNsb3QpO1xufVxuY29uc3QgYnV0dG9uQmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCdXR0b25CYXNlJywgWydyb290JywgJ2Rpc2FibGVkJywgJ2ZvY3VzVmlzaWJsZSddKTtcbmV4cG9ydCBkZWZhdWx0IGJ1dHRvbkJhc2VDbGFzc2VzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25cIiwgXCJjZW50ZXJSaXBwbGVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZVJpcHBsZVwiLCBcImRpc2FibGVUb3VjaFJpcHBsZVwiLCBcImZvY3VzUmlwcGxlXCIsIFwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lXCIsIFwiTGlua0NvbXBvbmVudFwiLCBcIm9uQmx1clwiLCBcIm9uQ2xpY2tcIiwgXCJvbkNvbnRleHRNZW51XCIsIFwib25EcmFnTGVhdmVcIiwgXCJvbkZvY3VzXCIsIFwib25Gb2N1c1Zpc2libGVcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwib25Nb3VzZURvd25cIiwgXCJvbk1vdXNlTGVhdmVcIiwgXCJvbk1vdXNlVXBcIiwgXCJvblRvdWNoRW5kXCIsIFwib25Ub3VjaE1vdmVcIiwgXCJvblRvdWNoU3RhcnRcIiwgXCJ0YWJJbmRleFwiLCBcIlRvdWNoUmlwcGxlUHJvcHNcIiwgXCJ0b3VjaFJpcHBsZVJlZlwiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiwgcmVmVHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICcuLi91dGlscy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICcuLi91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgVG91Y2hSaXBwbGUgZnJvbSAnLi9Ub3VjaFJpcHBsZSc7XG5pbXBvcnQgYnV0dG9uQmFzZUNsYXNzZXMsIHsgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYnV0dG9uQmFzZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkLFxuICAgIGZvY3VzVmlzaWJsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZm9jdXNWaXNpYmxlICYmICdmb2N1c1Zpc2libGUnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG5cbiAgaWYgKGZvY3VzVmlzaWJsZSAmJiBmb2N1c1Zpc2libGVDbGFzc05hbWUpIHtcbiAgICBjb21wb3NlZENsYXNzZXMucm9vdCArPSBgICR7Zm9jdXNWaXNpYmxlQ2xhc3NOYW1lfWA7XG4gIH1cblxuICByZXR1cm4gY29tcG9zZWRDbGFzc2VzO1xufTtcblxuZXhwb3J0IGNvbnN0IEJ1dHRvbkJhc2VSb290ID0gc3R5bGVkKCdidXR0b24nLCB7XG4gIG5hbWU6ICdNdWlCdXR0b25CYXNlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgLy8gUmVzZXQgZGVmYXVsdCB2YWx1ZVxuICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICBvdXRsaW5lOiAwLFxuICBib3JkZXI6IDAsXG4gIG1hcmdpbjogMCxcbiAgLy8gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gU2FmYXJpXG4gIGJvcmRlclJhZGl1czogMCxcbiAgcGFkZGluZzogMCxcbiAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIEZpcmVmb3hcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAvLyBTbyB3ZSB0YWtlIHByZWNlZGVudCBvdmVyIHRoZSBzdHlsZSBvZiBhIG5hdGl2ZSA8YSAvPiBlbGVtZW50LlxuICBjb2xvcjogJ2luaGVyaXQnLFxuICAnJjo6LW1vei1mb2N1cy1pbm5lcic6IHtcbiAgICBib3JkZXJTdHlsZTogJ25vbmUnIC8vIFJlbW92ZSBGaXJlZm94IGRvdHRlZCBvdXRsaW5lLlxuXG4gIH0sXG4gIFtgJi4ke2J1dHRvbkJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIC8vIERpc2FibGUgbGluayBpbnRlcmFjdGlvbnNcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9LFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIGNvbG9yQWRqdXN0OiAnZXhhY3QnXG4gIH1cbn0pO1xuLyoqXG4gKiBgQnV0dG9uQmFzZWAgY29udGFpbnMgYXMgZmV3IHN0eWxlcyBhcyBwb3NzaWJsZS5cbiAqIEl0IGFpbXMgdG8gYmUgYSBzaW1wbGUgYnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgYnV0dG9uLlxuICogSXQgY29udGFpbnMgYSBsb2FkIG9mIHN0eWxlIHJlc2V0IGFuZCBzb21lIGZvY3VzL3JpcHBsZSBsb2dpYy5cbiAqL1xuXG5jb25zdCBCdXR0b25CYXNlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQnV0dG9uQmFzZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQnV0dG9uQmFzZSdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGFjdGlvbixcbiAgICBjZW50ZXJSaXBwbGUgPSBmYWxzZSxcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50ID0gJ2J1dHRvbicsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBkaXNhYmxlUmlwcGxlID0gZmFsc2UsXG4gICAgZGlzYWJsZVRvdWNoUmlwcGxlID0gZmFsc2UsXG4gICAgZm9jdXNSaXBwbGUgPSBmYWxzZSxcbiAgICBMaW5rQ29tcG9uZW50ID0gJ2EnLFxuICAgIG9uQmx1cixcbiAgICBvbkNsaWNrLFxuICAgIG9uQ29udGV4dE1lbnUsXG4gICAgb25EcmFnTGVhdmUsXG4gICAgb25Gb2N1cyxcbiAgICBvbkZvY3VzVmlzaWJsZSxcbiAgICBvbktleURvd24sXG4gICAgb25LZXlVcCxcbiAgICBvbk1vdXNlRG93bixcbiAgICBvbk1vdXNlTGVhdmUsXG4gICAgb25Nb3VzZVVwLFxuICAgIG9uVG91Y2hFbmQsXG4gICAgb25Ub3VjaE1vdmUsXG4gICAgb25Ub3VjaFN0YXJ0LFxuICAgIHRhYkluZGV4ID0gMCxcbiAgICBUb3VjaFJpcHBsZVByb3BzLFxuICAgIHRvdWNoUmlwcGxlUmVmLFxuICAgIHR5cGVcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IGJ1dHRvblJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmlwcGxlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSaXBwbGVSZWYgPSB1c2VGb3JrUmVmKHJpcHBsZVJlZiwgdG91Y2hSaXBwbGVSZWYpO1xuICBjb25zdCB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgcmVmOiBmb2N1c1Zpc2libGVSZWZcbiAgfSA9IHVzZUlzRm9jdXNWaXNpYmxlKCk7XG4gIGNvbnN0IFtmb2N1c1Zpc2libGUsIHNldEZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgaWYgKGRpc2FibGVkICYmIGZvY3VzVmlzaWJsZSkge1xuICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gIH1cblxuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbiwgKCkgPT4gKHtcbiAgICBmb2N1c1Zpc2libGU6ICgpID0+IHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGJ1dHRvblJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBbbW91bnRlZFN0YXRlLCBzZXRNb3VudGVkU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldE1vdW50ZWRTdGF0ZSh0cnVlKTtcbiAgfSwgW10pO1xuICBjb25zdCBlbmFibGVUb3VjaFJpcHBsZSA9IG1vdW50ZWRTdGF0ZSAmJiAhZGlzYWJsZVJpcHBsZSAmJiAhZGlzYWJsZWQ7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZvY3VzVmlzaWJsZSAmJiBmb2N1c1JpcHBsZSAmJiAhZGlzYWJsZVJpcHBsZSAmJiBtb3VudGVkU3RhdGUpIHtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnB1bHNhdGUoKTtcbiAgICB9XG4gIH0sIFtkaXNhYmxlUmlwcGxlLCBmb2N1c1JpcHBsZSwgZm9jdXNWaXNpYmxlLCBtb3VudGVkU3RhdGVdKTtcblxuICBmdW5jdGlvbiB1c2VSaXBwbGVIYW5kbGVyKHJpcHBsZUFjdGlvbiwgZXZlbnRDYWxsYmFjaywgc2tpcFJpcHBsZUFjdGlvbiA9IGRpc2FibGVUb3VjaFJpcHBsZSkge1xuICAgIHJldHVybiB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudENhbGxiYWNrKSB7XG4gICAgICAgIGV2ZW50Q2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpZ25vcmUgPSBza2lwUmlwcGxlQWN0aW9uO1xuXG4gICAgICBpZiAoIWlnbm9yZSAmJiByaXBwbGVSZWYuY3VycmVudCkge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudFtyaXBwbGVBY3Rpb25dKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSB1c2VSaXBwbGVIYW5kbGVyKCdzdGFydCcsIG9uTW91c2VEb3duKTtcbiAgY29uc3QgaGFuZGxlQ29udGV4dE1lbnUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Db250ZXh0TWVudSk7XG4gIGNvbnN0IGhhbmRsZURyYWdMZWF2ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbkRyYWdMZWF2ZSk7XG4gIGNvbnN0IGhhbmRsZU1vdXNlVXAgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Nb3VzZVVwKTtcbiAgY29uc3QgaGFuZGxlTW91c2VMZWF2ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBldmVudCA9PiB7XG4gICAgaWYgKGZvY3VzVmlzaWJsZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBpZiAob25Nb3VzZUxlYXZlKSB7XG4gICAgICBvbk1vdXNlTGVhdmUoZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoU3RhcnQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoRW5kID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uVG91Y2hFbmQpO1xuICBjb25zdCBoYW5kbGVUb3VjaE1vdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaE1vdmUpO1xuICBjb25zdCBoYW5kbGVCbHVyID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIGV2ZW50ID0+IHtcbiAgICBoYW5kbGVCbHVyVmlzaWJsZShldmVudCk7XG5cbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKG9uQmx1cikge1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gIH0sIGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlRm9jdXMgPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBGaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzc2OVxuICAgIGlmICghYnV0dG9uUmVmLmN1cnJlbnQpIHtcbiAgICAgIGJ1dHRvblJlZi5jdXJyZW50ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICB9XG5cbiAgICBoYW5kbGVGb2N1c1Zpc2libGUoZXZlbnQpO1xuXG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcblxuICAgICAgaWYgKG9uRm9jdXNWaXNpYmxlKSB7XG4gICAgICAgIG9uRm9jdXNWaXNpYmxlKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBpc05vbk5hdGl2ZUJ1dHRvbiA9ICgpID0+IHtcbiAgICBjb25zdCBidXR0b24gPSBidXR0b25SZWYuY3VycmVudDtcbiAgICByZXR1cm4gY29tcG9uZW50ICYmIGNvbXBvbmVudCAhPT0gJ2J1dHRvbicgJiYgIShidXR0b24udGFnTmFtZSA9PT0gJ0EnICYmIGJ1dHRvbi5ocmVmKTtcbiAgfTtcbiAgLyoqXG4gICAqIElFMTEgc2hpbSBmb3IgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQvcmVwZWF0XG4gICAqL1xuXG5cbiAgY29uc3Qga2V5ZG93blJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBDaGVjayBpZiBrZXkgaXMgYWxyZWFkeSBkb3duIHRvIGF2b2lkIHJlcGVhdHMgYmVpbmcgY291bnRlZCBhcyBtdWx0aXBsZSBhY3RpdmF0aW9uc1xuICAgIGlmIChmb2N1c1JpcHBsZSAmJiAha2V5ZG93blJlZi5jdXJyZW50ICYmIGZvY3VzVmlzaWJsZSAmJiByaXBwbGVSZWYuY3VycmVudCAmJiBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAga2V5ZG93blJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RhcnQoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfSAvLyBLZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGZvciBub24gaW50ZXJhY3RpdmUgZWxlbWVudHNcblxuXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gY2FsbGluZyBwcmV2ZW50RGVmYXVsdCBpbiBrZXlVcCBvbiBhIDxidXR0b24+IHdpbGwgbm90IGRpc3BhdGNoIGEgY2xpY2sgZXZlbnQgaWYgU3BhY2UgaXMgcHJlc3NlZFxuICAgIC8vIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy9idXR0b24ta2V5dXAtcHJldmVudGRlZmF1bHQtZG43ZjBcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZShldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob25LZXlVcCkge1xuICAgICAgb25LZXlVcChldmVudCk7XG4gICAgfSAvLyBLZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGZvciBub24gaW50ZXJhY3RpdmUgZWxlbWVudHNcblxuXG4gICAgaWYgKG9uQ2xpY2sgJiYgZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGxldCBDb21wb25lbnRQcm9wID0gY29tcG9uZW50O1xuXG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJyAmJiAob3RoZXIuaHJlZiB8fCBvdGhlci50bykpIHtcbiAgICBDb21wb25lbnRQcm9wID0gTGlua0NvbXBvbmVudDtcbiAgfVxuXG4gIGNvbnN0IGJ1dHRvblByb3BzID0ge307XG5cbiAgaWYgKENvbXBvbmVudFByb3AgPT09ICdidXR0b24nKSB7XG4gICAgYnV0dG9uUHJvcHMudHlwZSA9IHR5cGUgPT09IHVuZGVmaW5lZCA/ICdidXR0b24nIDogdHlwZTtcbiAgICBidXR0b25Qcm9wcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9IGVsc2Uge1xuICAgIGlmICghb3RoZXIuaHJlZiAmJiAhb3RoZXIudG8pIHtcbiAgICAgIGJ1dHRvblByb3BzLnJvbGUgPSAnYnV0dG9uJztcbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIGJ1dHRvblByb3BzWydhcmlhLWRpc2FibGVkJ10gPSBkaXNhYmxlZDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVPd25SZWYgPSB1c2VGb3JrUmVmKGZvY3VzVmlzaWJsZVJlZiwgYnV0dG9uUmVmKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihyZWYsIGhhbmRsZU93blJlZik7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGVuYWJsZVRvdWNoUmlwcGxlICYmICFyaXBwbGVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgYGNvbXBvbmVudGAgcHJvcCBwcm92aWRlZCB0byBCdXR0b25CYXNlIGlzIGludmFsaWQuJywgJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIGNoaWxkcmVuIHByb3AgaXMgcmVuZGVyZWQgaW4gdGhpcyBjdXN0b20gY29tcG9uZW50LiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbZW5hYmxlVG91Y2hSaXBwbGVdKTtcbiAgfVxuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjZW50ZXJSaXBwbGUsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVSaXBwbGUsXG4gICAgZGlzYWJsZVRvdWNoUmlwcGxlLFxuICAgIGZvY3VzUmlwcGxlLFxuICAgIHRhYkluZGV4LFxuICAgIGZvY3VzVmlzaWJsZVxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoQnV0dG9uQmFzZVJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogQ29tcG9uZW50UHJvcCxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgb25Db250ZXh0TWVudTogaGFuZGxlQ29udGV4dE1lbnUsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxuICAgIG9uS2V5VXA6IGhhbmRsZUtleVVwLFxuICAgIG9uTW91c2VEb3duOiBoYW5kbGVNb3VzZURvd24sXG4gICAgb25Nb3VzZUxlYXZlOiBoYW5kbGVNb3VzZUxlYXZlLFxuICAgIG9uTW91c2VVcDogaGFuZGxlTW91c2VVcCxcbiAgICBvbkRyYWdMZWF2ZTogaGFuZGxlRHJhZ0xlYXZlLFxuICAgIG9uVG91Y2hFbmQ6IGhhbmRsZVRvdWNoRW5kLFxuICAgIG9uVG91Y2hNb3ZlOiBoYW5kbGVUb3VjaE1vdmUsXG4gICAgb25Ub3VjaFN0YXJ0OiBoYW5kbGVUb3VjaFN0YXJ0LFxuICAgIHJlZjogaGFuZGxlUmVmLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IC0xIDogdGFiSW5kZXgsXG4gICAgdHlwZTogdHlwZVxuICB9LCBidXR0b25Qcm9wcywgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogW2NoaWxkcmVuLCBlbmFibGVUb3VjaFJpcHBsZSA/XG4gICAgLyojX19QVVJFX18qL1xuXG4gICAgLyogVG91Y2hSaXBwbGUgaXMgb25seSBuZWVkZWQgY2xpZW50LXNpZGUsIHgyIGJvb3N0IG9uIHRoZSBzZXJ2ZXIuICovXG4gICAgX2pzeChUb3VjaFJpcHBsZSwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVSaXBwbGVSZWYsXG4gICAgICBjZW50ZXI6IGNlbnRlclJpcHBsZVxuICAgIH0sIFRvdWNoUmlwcGxlUHJvcHMpKSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQnV0dG9uQmFzZS5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQSByZWYgZm9yIGltcGVyYXRpdmUgYWN0aW9ucy5cbiAgICogSXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgYGZvY3VzVmlzaWJsZSgpYCBhY3Rpb24uXG4gICAqL1xuICBhY3Rpb246IHJlZlR5cGUsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZXMgYXJlIGNlbnRlcmVkLlxuICAgKiBUaGV5IHdvbid0IHN0YXJ0IGF0IHRoZSBjdXJzb3IgaW50ZXJhY3Rpb24gcG9zaXRpb24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjZW50ZXJSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICpcbiAgICog4pqg77iPIFdpdGhvdXQgYSByaXBwbGUgdGhlcmUgaXMgbm8gc3R5bGluZyBmb3IgOmZvY3VzLXZpc2libGUgYnkgZGVmYXVsdC4gQmUgc3VyZVxuICAgKiB0byBoaWdobGlnaHQgdGhlIGVsZW1lbnQgYnkgYXBwbHlpbmcgc2VwYXJhdGUgc3R5bGVzIHdpdGggdGhlIGAuTXVpLWZvY3VzVmlzaWJsZWAgY2xhc3MuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdG91Y2ggcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUb3VjaFJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJhc2UgYnV0dG9uIHdpbGwgaGF2ZSBhIGtleWJvYXJkIGZvY3VzIHJpcHBsZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZvY3VzUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhpcyBwcm9wIGNhbiBoZWxwIGlkZW50aWZ5IHdoaWNoIGVsZW1lbnQgaGFzIGtleWJvYXJkIGZvY3VzLlxuICAgKiBUaGUgY2xhc3MgbmFtZSB3aWxsIGJlIGFwcGxpZWQgd2hlbiB0aGUgZWxlbWVudCBnYWlucyB0aGUgZm9jdXMgdGhyb3VnaCBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICogSXQncyBhIHBvbHlmaWxsIGZvciB0aGUgW0NTUyA6Zm9jdXMtdmlzaWJsZSBzZWxlY3Rvcl0oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3NlbGVjdG9ycy00LyN0aGUtZm9jdXMtdmlzaWJsZS1wc2V1ZG8pLlxuICAgKiBUaGUgcmF0aW9uYWxlIGZvciB1c2luZyB0aGlzIGZlYXR1cmUgW2lzIGV4cGxhaW5lZCBoZXJlXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvSEVBRC9leHBsYWluZXIubWQpLlxuICAgKiBBIFtwb2x5ZmlsbCBjYW4gYmUgdXNlZF0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZSkgdG8gYXBwbHkgYSBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgdG8gb3RoZXIgY29tcG9uZW50c1xuICAgKiBpZiBuZWVkZWQuXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGhyZWY6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5hbnksXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCB0byByZW5kZXIgYSBsaW5rIHdoZW4gdGhlIGBocmVmYCBwcm9wIGlzIHByb3ZpZGVkLlxuICAgKiBAZGVmYXVsdCAnYSdcbiAgICovXG4gIExpbmtDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ29udGV4dE1lbnU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkRyYWdMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZm9jdXNlZCB3aXRoIGEga2V5Ym9hcmQuXG4gICAqIFdlIHRyaWdnZXIgYSBgb25Gb2N1c2AgY2FsbGJhY2sgdG9vLlxuICAgKi9cbiAgb25Gb2N1c1Zpc2libGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleVVwOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlVXA6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaE1vdmU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBgVG91Y2hSaXBwbGVgIGVsZW1lbnQuXG4gICAqL1xuICBUb3VjaFJpcHBsZVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgYFRvdWNoUmlwcGxlYCBlbGVtZW50LlxuICAgKi9cbiAgdG91Y2hSaXBwbGVSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBwdWxzYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RhcnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzdG9wOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSlcbiAgfSldKSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYnV0dG9uJywgJ3Jlc2V0JywgJ3N1Ym1pdCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFzZTsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCdXR0b24nLCBzbG90KTtcbn1cbmNvbnN0IGJ1dHRvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCdXR0b24nLCBbJ3Jvb3QnLCAndGV4dCcsICd0ZXh0SW5oZXJpdCcsICd0ZXh0UHJpbWFyeScsICd0ZXh0U2Vjb25kYXJ5JywgJ3RleHRTdWNjZXNzJywgJ3RleHRFcnJvcicsICd0ZXh0SW5mbycsICd0ZXh0V2FybmluZycsICdvdXRsaW5lZCcsICdvdXRsaW5lZEluaGVyaXQnLCAnb3V0bGluZWRQcmltYXJ5JywgJ291dGxpbmVkU2Vjb25kYXJ5JywgJ291dGxpbmVkU3VjY2VzcycsICdvdXRsaW5lZEVycm9yJywgJ291dGxpbmVkSW5mbycsICdvdXRsaW5lZFdhcm5pbmcnLCAnY29udGFpbmVkJywgJ2NvbnRhaW5lZEluaGVyaXQnLCAnY29udGFpbmVkUHJpbWFyeScsICdjb250YWluZWRTZWNvbmRhcnknLCAnY29udGFpbmVkU3VjY2VzcycsICdjb250YWluZWRFcnJvcicsICdjb250YWluZWRJbmZvJywgJ2NvbnRhaW5lZFdhcm5pbmcnLCAnZGlzYWJsZUVsZXZhdGlvbicsICdmb2N1c1Zpc2libGUnLCAnZGlzYWJsZWQnLCAnY29sb3JJbmhlcml0JywgJ3RleHRTaXplU21hbGwnLCAndGV4dFNpemVNZWRpdW0nLCAndGV4dFNpemVMYXJnZScsICdvdXRsaW5lZFNpemVTbWFsbCcsICdvdXRsaW5lZFNpemVNZWRpdW0nLCAnb3V0bGluZWRTaXplTGFyZ2UnLCAnY29udGFpbmVkU2l6ZVNtYWxsJywgJ2NvbnRhaW5lZFNpemVNZWRpdW0nLCAnY29udGFpbmVkU2l6ZUxhcmdlJywgJ3NpemVNZWRpdW0nLCAnc2l6ZVNtYWxsJywgJ3NpemVMYXJnZScsICdmdWxsV2lkdGgnLCAnc3RhcnRJY29uJywgJ2VuZEljb24nLCAnaWNvblNpemVTbWFsbCcsICdpY29uU2l6ZU1lZGl1bScsICdpY29uU2l6ZUxhcmdlJ10pO1xuZXhwb3J0IGRlZmF1bHQgYnV0dG9uQ2xhc3NlczsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgQnV0dG9uR3JvdXBDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBCdXR0b25Hcm91cENvbnRleHQuZGlzcGxheU5hbWUgPSAnQnV0dG9uR3JvdXBDb250ZXh0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uR3JvdXBDb250ZXh0OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlRWxldmF0aW9uXCIsIFwiZGlzYWJsZUZvY3VzUmlwcGxlXCIsIFwiZW5kSWNvblwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcImZ1bGxXaWR0aFwiLCBcInNpemVcIiwgXCJzdGFydEljb25cIiwgXCJ0eXBlXCIsIFwidmFyaWFudFwiXSxcbiAgICAgIF9leGNsdWRlZDIgPSBbXCJyb290XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgaW50ZXJuYWxfcmVzb2x2ZVByb3BzIGFzIHJlc29sdmVQcm9wcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IEJ1dHRvbkJhc2UgZnJvbSAnLi4vQnV0dG9uQmFzZSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBidXR0b25DbGFzc2VzLCB7IGdldEJ1dHRvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYnV0dG9uQ2xhc3Nlcyc7XG5pbXBvcnQgQnV0dG9uR3JvdXBDb250ZXh0IGZyb20gJy4uL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY29sb3IsXG4gICAgZGlzYWJsZUVsZXZhdGlvbixcbiAgICBmdWxsV2lkdGgsXG4gICAgc2l6ZSxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIGAke3ZhcmlhbnR9JHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBgJHt2YXJpYW50fVNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgY29sb3IgPT09ICdpbmhlcml0JyAmJiAnY29sb3JJbmhlcml0JywgZGlzYWJsZUVsZXZhdGlvbiAmJiAnZGlzYWJsZUVsZXZhdGlvbicsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJ10sXG4gICAgbGFiZWw6IFsnbGFiZWwnXSxcbiAgICBzdGFydEljb246IFsnc3RhcnRJY29uJywgYGljb25TaXplJHtjYXBpdGFsaXplKHNpemUpfWBdLFxuICAgIGVuZEljb246IFsnZW5kSWNvbicsIGBpY29uU2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnV0dG9uVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcblxuY29uc3QgY29tbW9uSWNvblN0eWxlcyA9IG93bmVyU3RhdGUgPT4gX2V4dGVuZHMoe30sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICcmID4gKjpudGgtb2YtdHlwZSgxKSc6IHtcbiAgICBmb250U2l6ZTogMThcbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnbWVkaXVtJyAmJiB7XG4gICcmID4gKjpudGgtb2YtdHlwZSgxKSc6IHtcbiAgICBmb250U2l6ZTogMjBcbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIHtcbiAgJyYgPiAqOm50aC1vZi10eXBlKDEpJzoge1xuICAgIGZvbnRTaXplOiAyMlxuICB9XG59KTtcblxuY29uc3QgQnV0dG9uUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlCdXR0b24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIHN0eWxlc1tgJHtvd25lclN0YXRlLnZhcmlhbnR9JHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBzdHlsZXNbYHNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgc3R5bGVzW2Ake293bmVyU3RhdGUudmFyaWFudH1TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF0sIG93bmVyU3RhdGUuY29sb3IgPT09ICdpbmhlcml0JyAmJiBzdHlsZXMuY29sb3JJbmhlcml0LCBvd25lclN0YXRlLmRpc2FibGVFbGV2YXRpb24gJiYgc3R5bGVzLmRpc2FibGVFbGV2YXRpb24sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGhdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHBhbGV0dGUkZ2V0Q29uLCBfdGhlbWUkcGFsZXR0ZTtcblxuICByZXR1cm4gX2V4dGVuZHMoe30sIHRoZW1lLnR5cG9ncmFwaHkuYnV0dG9uLCB7XG4gICAgbWluV2lkdGg6IDY0LFxuICAgIHBhZGRpbmc6ICc2cHggMTZweCcsXG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZShbJ2JhY2tncm91bmQtY29sb3InLCAnYm94LXNoYWRvdycsICdib3JkZXItY29sb3InLCAnY29sb3InXSwge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0XG4gICAgfSksXG4gICAgJyY6aG92ZXInOiBfZXh0ZW5kcyh7XG4gICAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUudGV4dC5wcmltYXJ5Q2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS50ZXh0LnByaW1hcnksIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbn1gLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5ncmV5LkExMDAsXG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzRdLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1syXSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5ncmV5WzMwMF1cbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmRhcmssXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgICAgIH1cbiAgICB9KSxcbiAgICAnJjphY3RpdmUnOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzhdXG4gICAgfSksXG4gICAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbNl1cbiAgICB9KSxcbiAgICBbYCYuJHtidXR0b25DbGFzc2VzLmRpc2FibGVkfWBdOiBfZXh0ZW5kcyh7XG4gICAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmR9YFxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yID09PSAnc2Vjb25kYXJ5JyAmJiB7XG4gICAgICBib3JkZXI6IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWR9YFxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZCxcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbMF0sXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmRcbiAgICB9KVxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiB7XG4gICAgcGFkZGluZzogJzZweCA4cHgnXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnNXB4IDE1cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCBjdXJyZW50Q29sb3InXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLFxuICAgIGJvcmRlcjogdGhlbWUudmFycyA/IGAxcHggc29saWQgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAwLjUpYCA6IGAxcHggc29saWQgJHthbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIDAuNSl9YFxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICBjb2xvcjogdGhlbWUudmFycyA/IC8vIHRoaXMgaXMgc2FmZSBiZWNhdXNlIGdyZXkgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gZGVmYXVsdCBsaWdodC9kYXJrIG1vZGVcbiAgICB0aGVtZS52YXJzLnBhbGV0dGUudGV4dC5wcmltYXJ5IDogKF90aGVtZSRwYWxldHRlJGdldENvbiA9IChfdGhlbWUkcGFsZXR0ZSA9IHRoZW1lLnBhbGV0dGUpLmdldENvbnRyYXN0VGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRwYWxldHRlJGdldENvbi5jYWxsKF90aGVtZSRwYWxldHRlLCB0aGVtZS5wYWxldHRlLmdyZXlbMzAwXSksXG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5ncmV5WzMwMF0sXG4gICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1syXVxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmNvbnRyYXN0VGV4dCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnICYmIHtcbiAgICBjb2xvcjogJ2luaGVyaXQnLFxuICAgIGJvcmRlckNvbG9yOiAnY3VycmVudENvbG9yJ1xuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICAgIHBhZGRpbmc6ICc0cHggNXB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDEzKVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICAgIHBhZGRpbmc6ICc4cHggMTFweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzNweCA5cHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTMpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc3cHggMjFweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc0cHggMTBweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMylcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc4cHggMjJweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICAgIHdpZHRoOiAnMTAwJSdcbiAgfSk7XG59LCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLmRpc2FibGVFbGV2YXRpb24gJiYge1xuICBib3hTaGFkb3c6ICdub25lJyxcbiAgJyY6aG92ZXInOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9LFxuICAnJjphY3RpdmUnOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH1cbn0pO1xuY29uc3QgQnV0dG9uU3RhcnRJY29uID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpQnV0dG9uJyxcbiAgc2xvdDogJ1N0YXJ0SWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuc3RhcnRJY29uLCBzdHlsZXNbYGljb25TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmhlcml0JyxcbiAgbWFyZ2luUmlnaHQ6IDgsXG4gIG1hcmdpbkxlZnQ6IC00XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5MZWZ0OiAtMlxufSwgY29tbW9uSWNvblN0eWxlcyhvd25lclN0YXRlKSkpO1xuY29uc3QgQnV0dG9uRW5kSWNvbiA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUJ1dHRvbicsXG4gIHNsb3Q6ICdFbmRJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5lbmRJY29uLCBzdHlsZXNbYGljb25TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmhlcml0JyxcbiAgbWFyZ2luUmlnaHQ6IC00LFxuICBtYXJnaW5MZWZ0OiA4XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5SaWdodDogLTJcbn0sIGNvbW1vbkljb25TdHlsZXMob3duZXJTdGF0ZSkpKTtcbmNvbnN0IEJ1dHRvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJ1dHRvbihpblByb3BzLCByZWYpIHtcbiAgLy8gcHJvcHMgcHJpb3JpdHk6IGBpblByb3BzYCA+IGBjb250ZXh0UHJvcHNgID4gYHRoZW1lRGVmYXVsdFByb3BzYFxuICBjb25zdCBjb250ZXh0UHJvcHMgPSBSZWFjdC51c2VDb250ZXh0KEJ1dHRvbkdyb3VwQ29udGV4dCk7XG4gIGNvbnN0IHJlc29sdmVkUHJvcHMgPSByZXNvbHZlUHJvcHMoY29udGV4dFByb3BzLCBpblByb3BzKTtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogcmVzb2x2ZWRQcm9wcyxcbiAgICBuYW1lOiAnTXVpQnV0dG9uJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgY29tcG9uZW50ID0gJ2J1dHRvbicsXG4gICAgY2xhc3NOYW1lLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgZGlzYWJsZUVsZXZhdGlvbiA9IGZhbHNlLFxuICAgIGRpc2FibGVGb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgIGVuZEljb246IGVuZEljb25Qcm9wLFxuICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBzaXplID0gJ21lZGl1bScsXG4gICAgc3RhcnRJY29uOiBzdGFydEljb25Qcm9wLFxuICAgIHR5cGUsXG4gICAgdmFyaWFudCA9ICd0ZXh0J1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlRWxldmF0aW9uLFxuICAgIGRpc2FibGVGb2N1c1JpcHBsZSxcbiAgICBmdWxsV2lkdGgsXG4gICAgc2l6ZSxcbiAgICB0eXBlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgX3VzZVV0aWxpdHlDbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSksXG4gICAgICAgIHtcbiAgICByb290OiBjbGFzc2VzUm9vdFxuICB9ID0gX3VzZVV0aWxpdHlDbGFzc2VzLFxuICAgICAgICBjbGFzc2VzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3VzZVV0aWxpdHlDbGFzc2VzLCBfZXhjbHVkZWQyKTtcblxuICBjb25zdCBzdGFydEljb24gPSBzdGFydEljb25Qcm9wICYmIC8qI19fUFVSRV9fKi9fanN4KEJ1dHRvblN0YXJ0SWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5zdGFydEljb24sXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogc3RhcnRJY29uUHJvcFxuICB9KTtcblxuICBjb25zdCBlbmRJY29uID0gZW5kSWNvblByb3AgJiYgLyojX19QVVJFX18qL19qc3goQnV0dG9uRW5kSWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5lbmRJY29uLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2hpbGRyZW46IGVuZEljb25Qcm9wXG4gIH0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoQnV0dG9uUm9vdCwgX2V4dGVuZHMoe1xuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNvbnRleHRQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXNSb290LCBjbGFzc05hbWUpLFxuICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBmb2N1c1JpcHBsZTogIWRpc2FibGVGb2N1c1JpcHBsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5mb2N1c1Zpc2libGUsIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSksXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgY2hpbGRyZW46IFtzdGFydEljb24sIGNoaWxkcmVuLCBlbmRJY29uXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJ1dHRvbi5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2FkZGluZy1uZXctY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdzdWNjZXNzJywgJ2Vycm9yJywgJ2luZm8nLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIG5vIGVsZXZhdGlvbiBpcyB1c2VkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVsZXZhdGlvbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlICBrZXlib2FyZCBmb2N1cyByaXBwbGUgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRm9jdXNSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbGVtZW50IHBsYWNlZCBhZnRlciB0aGUgY2hpbGRyZW4uXG4gICAqL1xuICBlbmRJY29uOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBidXR0b24gd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgVVJMIHRvIGxpbmsgdG8gd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqIElmIGRlZmluZWQsIGFuIGBhYCBlbGVtZW50IHdpbGwgYmUgdXNlZCBhcyB0aGUgcm9vdCBub2RlLlxuICAgKi9cbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSBidXR0b24gc3R5bGluZy5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBFbGVtZW50IHBsYWNlZCBiZWZvcmUgdGhlIGNoaWxkcmVuLlxuICAgKi9cbiAgc3RhcnRJY29uOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydidXR0b24nLCAncmVzZXQnLCAnc3VibWl0J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb250YWluZWQnLCAnb3V0bGluZWQnLCAndGV4dCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUeXBvZ3JhcGh5Jywgc2xvdCk7XG59XG5jb25zdCB0eXBvZ3JhcGh5Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVR5cG9ncmFwaHknLCBbJ3Jvb3QnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMicsICdib2R5MScsICdib2R5MicsICdpbmhlcml0JywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ292ZXJsaW5lJywgJ2FsaWduTGVmdCcsICdhbGlnblJpZ2h0JywgJ2FsaWduQ2VudGVyJywgJ2FsaWduSnVzdGlmeScsICdub1dyYXAnLCAnZ3V0dGVyQm90dG9tJywgJ3BhcmFncmFwaCddKTtcbmV4cG9ydCBkZWZhdWx0IHR5cG9ncmFwaHlDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhbGlnblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImd1dHRlckJvdHRvbVwiLCBcIm5vV3JhcFwiLCBcInBhcmFncmFwaFwiLCBcInZhcmlhbnRcIiwgXCJ2YXJpYW50TWFwcGluZ1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2V4dGVuZFN4UHJvcCBhcyBleHRlbmRTeFByb3AgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90eXBvZ3JhcGh5Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgYWxpZ24sXG4gICAgZ3V0dGVyQm90dG9tLFxuICAgIG5vV3JhcCxcbiAgICBwYXJhZ3JhcGgsXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYgYGFsaWduJHtjYXBpdGFsaXplKGFsaWduKX1gLCBndXR0ZXJCb3R0b20gJiYgJ2d1dHRlckJvdHRvbScsIG5vV3JhcCAmJiAnbm9XcmFwJywgcGFyYWdyYXBoICYmICdwYXJhZ3JhcGgnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IFR5cG9ncmFwaHlSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVHlwb2dyYXBoeScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGFsaWduJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuYWxpZ24pfWBdLCBvd25lclN0YXRlLm5vV3JhcCAmJiBzdHlsZXMubm9XcmFwLCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiBzdHlsZXMuZ3V0dGVyQm90dG9tLCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiBzdHlsZXMucGFyYWdyYXBoXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgbWFyZ2luOiAwXG59LCBvd25lclN0YXRlLnZhcmlhbnQgJiYgdGhlbWUudHlwb2dyYXBoeVtvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYge1xuICB0ZXh0QWxpZ246IG93bmVyU3RhdGUuYWxpZ25cbn0sIG93bmVyU3RhdGUubm9XcmFwICYmIHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnXG59LCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiB7XG4gIG1hcmdpbkJvdHRvbTogJzAuMzVlbSdcbn0sIG93bmVyU3RhdGUucGFyYWdyYXBoICYmIHtcbiAgbWFyZ2luQm90dG9tOiAxNlxufSkpO1xuY29uc3QgZGVmYXVsdFZhcmlhbnRNYXBwaW5nID0ge1xuICBoMTogJ2gxJyxcbiAgaDI6ICdoMicsXG4gIGgzOiAnaDMnLFxuICBoNDogJ2g0JyxcbiAgaDU6ICdoNScsXG4gIGg2OiAnaDYnLFxuICBzdWJ0aXRsZTE6ICdoNicsXG4gIHN1YnRpdGxlMjogJ2g2JyxcbiAgYm9keTE6ICdwJyxcbiAgYm9keTI6ICdwJyxcbiAgaW5oZXJpdDogJ3AnXG59OyAvLyBUT0RPIHY2OiBkZXByZWNhdGUgdGhlc2UgY29sb3IgdmFsdWVzIGluIHY1LnggYW5kIHJlbW92ZSB0aGUgdHJhbnNmb3JtYXRpb24gaW4gdjZcblxuY29uc3QgY29sb3JUcmFuc2Zvcm1hdGlvbnMgPSB7XG4gIHByaW1hcnk6ICdwcmltYXJ5Lm1haW4nLFxuICB0ZXh0UHJpbWFyeTogJ3RleHQucHJpbWFyeScsXG4gIHNlY29uZGFyeTogJ3NlY29uZGFyeS5tYWluJyxcbiAgdGV4dFNlY29uZGFyeTogJ3RleHQuc2Vjb25kYXJ5JyxcbiAgZXJyb3I6ICdlcnJvci5tYWluJ1xufTtcblxuY29uc3QgdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyA9IGNvbG9yID0+IHtcbiAgcmV0dXJuIGNvbG9yVHJhbnNmb3JtYXRpb25zW2NvbG9yXSB8fCBjb2xvcjtcbn07XG5cbmNvbnN0IFR5cG9ncmFwaHkgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUeXBvZ3JhcGh5KGluUHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZVByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVR5cG9ncmFwaHknXG4gIH0pO1xuICBjb25zdCBjb2xvciA9IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnModGhlbWVQcm9wcy5jb2xvcik7XG4gIGNvbnN0IHByb3BzID0gZXh0ZW5kU3hQcm9wKF9leHRlbmRzKHt9LCB0aGVtZVByb3BzLCB7XG4gICAgY29sb3JcbiAgfSkpO1xuXG4gIGNvbnN0IHtcbiAgICBhbGlnbiA9ICdpbmhlcml0JyxcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50LFxuICAgIGd1dHRlckJvdHRvbSA9IGZhbHNlLFxuICAgIG5vV3JhcCA9IGZhbHNlLFxuICAgIHBhcmFncmFwaCA9IGZhbHNlLFxuICAgIHZhcmlhbnQgPSAnYm9keTEnLFxuICAgIHZhcmlhbnRNYXBwaW5nID0gZGVmYXVsdFZhcmlhbnRNYXBwaW5nXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYWxpZ24sXG4gICAgY29sb3IsXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCxcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIHZhcmlhbnRNYXBwaW5nXG4gIH0pO1xuXG4gIGNvbnN0IENvbXBvbmVudCA9IGNvbXBvbmVudCB8fCAocGFyYWdyYXBoID8gJ3AnIDogdmFyaWFudE1hcHBpbmdbdmFyaWFudF0gfHwgZGVmYXVsdFZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdKSB8fCAnc3Bhbic7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFR5cG9ncmFwaHlSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudCxcbiAgICByZWY6IHJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVHlwb2dyYXBoeS5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogU2V0IHRoZSB0ZXh0LWFsaWduIG9uIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdpbmhlcml0JywgJ2p1c3RpZnknLCAnbGVmdCcsICdyaWdodCddKSxcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCB3aWxsIGhhdmUgYSBib3R0b20gbWFyZ2luLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZ3V0dGVyQm90dG9tOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCB3aWxsIG5vdCB3cmFwLCBidXQgaW5zdGVhZCB3aWxsIHRydW5jYXRlIHdpdGggYSB0ZXh0IG92ZXJmbG93IGVsbGlwc2lzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGV4dCBvdmVyZmxvdyBjYW4gb25seSBoYXBwZW4gd2l0aCBibG9jayBvciBpbmxpbmUtYmxvY2sgbGV2ZWwgZWxlbWVudHNcbiAgICogKHRoZSBlbGVtZW50IG5lZWRzIHRvIGhhdmUgYSB3aWR0aCBpbiBvcmRlciB0byBvdmVyZmxvdykuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBub1dyYXA6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBlbGVtZW50IHdpbGwgYmUgYSBwYXJhZ3JhcGggZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHBhcmFncmFwaDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgdGhlbWUgdHlwb2dyYXBoeSBzdHlsZXMuXG4gICAqIEBkZWZhdWx0ICdib2R5MSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvZHkxJywgJ2JvZHkyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2luaGVyaXQnLCAnb3ZlcmxpbmUnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMiddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IG1hcHMgdGhlIHZhcmlhbnQgcHJvcCB0byBhIHJhbmdlIG9mIGRpZmZlcmVudCBIVE1MIGVsZW1lbnQgdHlwZXMuXG4gICAqIEZvciBpbnN0YW5jZSwgc3VidGl0bGUxIHRvIGA8aDY+YC5cbiAgICogSWYgeW91IHdpc2ggdG8gY2hhbmdlIHRoYXQgbWFwcGluZywgeW91IGNhbiBwcm92aWRlIHlvdXIgb3duLlxuICAgKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSB0aGUgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIGgxOiAnaDEnLFxuICAgKiAgIGgyOiAnaDInLFxuICAgKiAgIGgzOiAnaDMnLFxuICAgKiAgIGg0OiAnaDQnLFxuICAgKiAgIGg1OiAnaDUnLFxuICAgKiAgIGg2OiAnaDYnLFxuICAgKiAgIHN1YnRpdGxlMTogJ2g2JyxcbiAgICogICBzdWJ0aXRsZTI6ICdoNicsXG4gICAqICAgYm9keTE6ICdwJyxcbiAgICogICBib2R5MjogJ3AnLFxuICAgKiAgIGluaGVyaXQ6ICdwJyxcbiAgICogfVxuICAgKi9cbiAgdmFyaWFudE1hcHBpbmc6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vYmplY3Rcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUeXBvZ3JhcGh5OyIsImZ1bmN0aW9uIG4obil7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShyPjE/ci0xOjApLGU9MTtlPHI7ZSsrKXRbZS0xXT1hcmd1bWVudHNbZV07aWYoXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOVil7dmFyIGk9WVtuXSxvPWk/XCJmdW5jdGlvblwiPT10eXBlb2YgaT9pLmFwcGx5KG51bGwsdCk6aTpcInVua25vd24gZXJyb3IgbnI6IFwiK247dGhyb3cgRXJyb3IoXCJbSW1tZXJdIFwiK28pfXRocm93IEVycm9yKFwiW0ltbWVyXSBtaW5pZmllZCBlcnJvciBucjogXCIrbisodC5sZW5ndGg/XCIgXCIrdC5tYXAoKGZ1bmN0aW9uKG4pe3JldHVyblwiJ1wiK24rXCInXCJ9KSkuam9pbihcIixcIik6XCJcIikrXCIuIEZpbmQgdGhlIGZ1bGwgZXJyb3IgYXQ6IGh0dHBzOi8vYml0Lmx5LzNjWEVLV2ZcIil9ZnVuY3Rpb24gcihuKXtyZXR1cm4hIW4mJiEhbltRXX1mdW5jdGlvbiB0KG4pe3JldHVybiEhbiYmKGZ1bmN0aW9uKG4pe2lmKCFufHxcIm9iamVjdFwiIT10eXBlb2YgbilyZXR1cm4hMTt2YXIgcj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7aWYobnVsbD09PXIpcmV0dXJuITA7dmFyIHQ9T2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwocixcImNvbnN0cnVjdG9yXCIpJiZyLmNvbnN0cnVjdG9yO3JldHVybiB0PT09T2JqZWN0fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZGdW5jdGlvbi50b1N0cmluZy5jYWxsKHQpPT09Wn0obil8fEFycmF5LmlzQXJyYXkobil8fCEhbltMXXx8ISFuLmNvbnN0cnVjdG9yW0xdfHxzKG4pfHx2KG4pKX1mdW5jdGlvbiBlKHQpe3JldHVybiByKHQpfHxuKDIzLHQpLHRbUV0udH1mdW5jdGlvbiBpKG4scix0KXt2b2lkIDA9PT10JiYodD0hMSksMD09PW8obik/KHQ/T2JqZWN0LmtleXM6bm4pKG4pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QmJlwic3ltYm9sXCI9PXR5cGVvZiBlfHxyKGUsbltlXSxuKX0pKTpuLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIoZSx0LG4pfSkpfWZ1bmN0aW9uIG8obil7dmFyIHI9bltRXTtyZXR1cm4gcj9yLmk+Mz9yLmktNDpyLmk6QXJyYXkuaXNBcnJheShuKT8xOnMobik/Mjp2KG4pPzM6MH1mdW5jdGlvbiB1KG4scil7cmV0dXJuIDI9PT1vKG4pP24uaGFzKHIpOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpfWZ1bmN0aW9uIGEobixyKXtyZXR1cm4gMj09PW8obik/bi5nZXQocik6bltyXX1mdW5jdGlvbiBmKG4scix0KXt2YXIgZT1vKG4pOzI9PT1lP24uc2V0KHIsdCk6Mz09PWU/KG4uZGVsZXRlKHIpLG4uYWRkKHQpKTpuW3JdPXR9ZnVuY3Rpb24gYyhuLHIpe3JldHVybiBuPT09cj8wIT09bnx8MS9uPT0xL3I6biE9biYmciE9cn1mdW5jdGlvbiBzKG4pe3JldHVybiBYJiZuIGluc3RhbmNlb2YgTWFwfWZ1bmN0aW9uIHYobil7cmV0dXJuIHEmJm4gaW5zdGFuY2VvZiBTZXR9ZnVuY3Rpb24gcChuKXtyZXR1cm4gbi5vfHxuLnR9ZnVuY3Rpb24gbChuKXtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKTt2YXIgcj1ybihuKTtkZWxldGUgcltRXTtmb3IodmFyIHQ9bm4ociksZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgaT10W2VdLG89cltpXTshMT09PW8ud3JpdGFibGUmJihvLndyaXRhYmxlPSEwLG8uY29uZmlndXJhYmxlPSEwKSwoby5nZXR8fG8uc2V0KSYmKHJbaV09e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8uZW51bWVyYWJsZSx2YWx1ZTpuW2ldfSl9cmV0dXJuIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pLHIpfWZ1bmN0aW9uIGQobixlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLHkobil8fHIobil8fCF0KG4pP246KG8obik+MSYmKG4uc2V0PW4uYWRkPW4uY2xlYXI9bi5kZWxldGU9aCksT2JqZWN0LmZyZWV6ZShuKSxlJiZpKG4sKGZ1bmN0aW9uKG4scil7cmV0dXJuIGQociwhMCl9KSwhMCksbil9ZnVuY3Rpb24gaCgpe24oMil9ZnVuY3Rpb24geShuKXtyZXR1cm4gbnVsbD09bnx8XCJvYmplY3RcIiE9dHlwZW9mIG58fE9iamVjdC5pc0Zyb3plbihuKX1mdW5jdGlvbiBiKHIpe3ZhciB0PXRuW3JdO3JldHVybiB0fHxuKDE4LHIpLHR9ZnVuY3Rpb24gbShuLHIpe3RuW25dfHwodG5bbl09cil9ZnVuY3Rpb24gXygpe3JldHVyblwicHJvZHVjdGlvblwiPT09cHJvY2Vzcy5lbnYuTk9ERV9FTlZ8fFV8fG4oMCksVX1mdW5jdGlvbiBqKG4scil7ciYmKGIoXCJQYXRjaGVzXCIpLG4udT1bXSxuLnM9W10sbi52PXIpfWZ1bmN0aW9uIE8obil7ZyhuKSxuLnAuZm9yRWFjaChTKSxuLnA9bnVsbH1mdW5jdGlvbiBnKG4pe249PT1VJiYoVT1uLmwpfWZ1bmN0aW9uIHcobil7cmV0dXJuIFU9e3A6W10sbDpVLGg6bixtOiEwLF86MH19ZnVuY3Rpb24gUyhuKXt2YXIgcj1uW1FdOzA9PT1yLml8fDE9PT1yLmk/ci5qKCk6ci5PPSEwfWZ1bmN0aW9uIFAocixlKXtlLl89ZS5wLmxlbmd0aDt2YXIgaT1lLnBbMF0sbz12b2lkIDAhPT1yJiZyIT09aTtyZXR1cm4gZS5oLmd8fGIoXCJFUzVcIikuUyhlLHIsbyksbz8oaVtRXS5QJiYoTyhlKSxuKDQpKSx0KHIpJiYocj1NKGUsciksZS5sfHx4KGUscikpLGUudSYmYihcIlBhdGNoZXNcIikuTShpW1FdLnQscixlLnUsZS5zKSk6cj1NKGUsaSxbXSksTyhlKSxlLnUmJmUudihlLnUsZS5zKSxyIT09SD9yOnZvaWQgMH1mdW5jdGlvbiBNKG4scix0KXtpZih5KHIpKXJldHVybiByO3ZhciBlPXJbUV07aWYoIWUpcmV0dXJuIGkociwoZnVuY3Rpb24oaSxvKXtyZXR1cm4gQShuLGUscixpLG8sdCl9KSwhMCkscjtpZihlLkEhPT1uKXJldHVybiByO2lmKCFlLlApcmV0dXJuIHgobixlLnQsITApLGUudDtpZighZS5JKXtlLkk9ITAsZS5BLl8tLTt2YXIgbz00PT09ZS5pfHw1PT09ZS5pP2Uubz1sKGUuayk6ZS5vO2koMz09PWUuaT9uZXcgU2V0KG8pOm8sKGZ1bmN0aW9uKHIsaSl7cmV0dXJuIEEobixlLG8scixpLHQpfSkpLHgobixvLCExKSx0JiZuLnUmJmIoXCJQYXRjaGVzXCIpLlIoZSx0LG4udSxuLnMpfXJldHVybiBlLm99ZnVuY3Rpb24gQShlLGksbyxhLGMscyl7aWYoXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmYz09PW8mJm4oNSkscihjKSl7dmFyIHY9TShlLGMscyYmaSYmMyE9PWkuaSYmIXUoaS5ELGEpP3MuY29uY2F0KGEpOnZvaWQgMCk7aWYoZihvLGEsdiksIXIodikpcmV0dXJuO2UubT0hMX1pZih0KGMpJiYheShjKSl7aWYoIWUuaC5GJiZlLl88MSlyZXR1cm47TShlLGMpLGkmJmkuQS5sfHx4KGUsYyl9fWZ1bmN0aW9uIHgobixyLHQpe3ZvaWQgMD09PXQmJih0PSExKSxuLmguRiYmbi5tJiZkKHIsdCl9ZnVuY3Rpb24geihuLHIpe3ZhciB0PW5bUV07cmV0dXJuKHQ/cCh0KTpuKVtyXX1mdW5jdGlvbiBJKG4scil7aWYociBpbiBuKWZvcih2YXIgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7dDspe3ZhciBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTtpZihlKXJldHVybiBlO3Q9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfX1mdW5jdGlvbiBrKG4pe24uUHx8KG4uUD0hMCxuLmwmJmsobi5sKSl9ZnVuY3Rpb24gRShuKXtuLm98fChuLm89bChuLnQpKX1mdW5jdGlvbiBSKG4scix0KXt2YXIgZT1zKHIpP2IoXCJNYXBTZXRcIikuTihyLHQpOnYocik/YihcIk1hcFNldFwiKS5UKHIsdCk6bi5nP2Z1bmN0aW9uKG4scil7dmFyIHQ9QXJyYXkuaXNBcnJheShuKSxlPXtpOnQ/MTowLEE6cj9yLkE6XygpLFA6ITEsSTohMSxEOnt9LGw6cix0Om4sazpudWxsLG86bnVsbCxqOm51bGwsQzohMX0saT1lLG89ZW47dCYmKGk9W2VdLG89b24pO3ZhciB1PVByb3h5LnJldm9jYWJsZShpLG8pLGE9dS5yZXZva2UsZj11LnByb3h5O3JldHVybiBlLms9ZixlLmo9YSxmfShyLHQpOmIoXCJFUzVcIikuSihyLHQpO3JldHVybih0P3QuQTpfKCkpLnAucHVzaChlKSxlfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIHIoZSl8fG4oMjIsZSksZnVuY3Rpb24gbihyKXtpZighdChyKSlyZXR1cm4gcjt2YXIgZSx1PXJbUV0sYz1vKHIpO2lmKHUpe2lmKCF1LlAmJih1Lmk8NHx8IWIoXCJFUzVcIikuSyh1KSkpcmV0dXJuIHUudDt1Lkk9ITAsZT1GKHIsYyksdS5JPSExfWVsc2UgZT1GKHIsYyk7cmV0dXJuIGkoZSwoZnVuY3Rpb24ocix0KXt1JiZhKHUudCxyKT09PXR8fGYoZSxyLG4odCkpfSkpLDM9PT1jP25ldyBTZXQoZSk6ZX0oZSl9ZnVuY3Rpb24gRihuLHIpe3N3aXRjaChyKXtjYXNlIDI6cmV0dXJuIG5ldyBNYXAobik7Y2FzZSAzOnJldHVybiBBcnJheS5mcm9tKG4pfXJldHVybiBsKG4pfWZ1bmN0aW9uIE4oKXtmdW5jdGlvbiB0KG4scil7dmFyIHQ9c1tuXTtyZXR1cm4gdD90LmVudW1lcmFibGU9cjpzW25dPXQ9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOnIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHI9dGhpc1tRXTtyZXR1cm5cInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZmKHIpLGVuLmdldChyLG4pfSxzZXQ6ZnVuY3Rpb24ocil7dmFyIHQ9dGhpc1tRXTtcInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZmKHQpLGVuLnNldCh0LG4scil9fSx0fWZ1bmN0aW9uIGUobil7Zm9yKHZhciByPW4ubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciB0PW5bcl1bUV07aWYoIXQuUClzd2l0Y2godC5pKXtjYXNlIDU6YSh0KSYmayh0KTticmVhaztjYXNlIDQ6byh0KSYmayh0KX19fWZ1bmN0aW9uIG8obil7Zm9yKHZhciByPW4udCx0PW4uayxlPW5uKHQpLGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIG89ZVtpXTtpZihvIT09USl7dmFyIGE9cltvXTtpZih2b2lkIDA9PT1hJiYhdShyLG8pKXJldHVybiEwO3ZhciBmPXRbb10scz1mJiZmW1FdO2lmKHM/cy50IT09YTohYyhmLGEpKXJldHVybiEwfX12YXIgdj0hIXJbUV07cmV0dXJuIGUubGVuZ3RoIT09bm4ocikubGVuZ3RoKyh2PzA6MSl9ZnVuY3Rpb24gYShuKXt2YXIgcj1uLms7aWYoci5sZW5ndGghPT1uLnQubGVuZ3RoKXJldHVybiEwO3ZhciB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixyLmxlbmd0aC0xKTtpZih0JiYhdC5nZXQpcmV0dXJuITA7Zm9yKHZhciBlPTA7ZTxyLmxlbmd0aDtlKyspaWYoIXIuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZihyKXtyLk8mJm4oMyxKU09OLnN0cmluZ2lmeShwKHIpKSl9dmFyIHM9e307bShcIkVTNVwiLHtKOmZ1bmN0aW9uKG4scil7dmFyIGU9QXJyYXkuaXNBcnJheShuKSxpPWZ1bmN0aW9uKG4scil7aWYobil7Zm9yKHZhciBlPUFycmF5KHIubGVuZ3RoKSxpPTA7aTxyLmxlbmd0aDtpKyspT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJcIitpLHQoaSwhMCkpO3JldHVybiBlfXZhciBvPXJuKHIpO2RlbGV0ZSBvW1FdO2Zvcih2YXIgdT1ubihvKSxhPTA7YTx1Lmxlbmd0aDthKyspe3ZhciBmPXVbYV07b1tmXT10KGYsbnx8ISFvW2ZdLmVudW1lcmFibGUpfXJldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihyKSxvKX0oZSxuKSxvPXtpOmU/NTo0LEE6cj9yLkE6XygpLFA6ITEsSTohMSxEOnt9LGw6cix0Om4sazppLG86bnVsbCxPOiExLEM6ITF9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxRLHt2YWx1ZTpvLHdyaXRhYmxlOiEwfSksaX0sUzpmdW5jdGlvbihuLHQsbyl7bz9yKHQpJiZ0W1FdLkE9PT1uJiZlKG4ucCk6KG4udSYmZnVuY3Rpb24gbihyKXtpZihyJiZcIm9iamVjdFwiPT10eXBlb2Ygcil7dmFyIHQ9cltRXTtpZih0KXt2YXIgZT10LnQsbz10LmssZj10LkQsYz10Lmk7aWYoND09PWMpaShvLChmdW5jdGlvbihyKXtyIT09USYmKHZvaWQgMCE9PWVbcl18fHUoZSxyKT9mW3JdfHxuKG9bcl0pOihmW3JdPSEwLGsodCkpKX0pKSxpKGUsKGZ1bmN0aW9uKG4pe3ZvaWQgMCE9PW9bbl18fHUobyxuKXx8KGZbbl09ITEsayh0KSl9KSk7ZWxzZSBpZig1PT09Yyl7aWYoYSh0KSYmKGsodCksZi5sZW5ndGg9ITApLG8ubGVuZ3RoPGUubGVuZ3RoKWZvcih2YXIgcz1vLmxlbmd0aDtzPGUubGVuZ3RoO3MrKylmW3NdPSExO2Vsc2UgZm9yKHZhciB2PWUubGVuZ3RoO3Y8by5sZW5ndGg7disrKWZbdl09ITA7Zm9yKHZhciBwPU1hdGgubWluKG8ubGVuZ3RoLGUubGVuZ3RoKSxsPTA7bDxwO2wrKylvLmhhc093blByb3BlcnR5KGwpfHwoZltsXT0hMCksdm9pZCAwPT09ZltsXSYmbihvW2xdKX19fX0obi5wWzBdKSxlKG4ucCkpfSxLOmZ1bmN0aW9uKG4pe3JldHVybiA0PT09bi5pP28obik6YShuKX19KX1mdW5jdGlvbiBUKCl7ZnVuY3Rpb24gZShuKXtpZighdChuKSlyZXR1cm4gbjtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiBuLm1hcChlKTtpZihzKG4pKXJldHVybiBuZXcgTWFwKEFycmF5LmZyb20obi5lbnRyaWVzKCkpLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuW25bMF0sZShuWzFdKV19KSkpO2lmKHYobikpcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbShuKS5tYXAoZSkpO3ZhciByPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pKTtmb3IodmFyIGkgaW4gbilyW2ldPWUobltpXSk7cmV0dXJuIHUobixMKSYmKHJbTF09bltMXSkscn1mdW5jdGlvbiBmKG4pe3JldHVybiByKG4pP2Uobik6bn12YXIgYz1cImFkZFwiO20oXCJQYXRjaGVzXCIseyQ6ZnVuY3Rpb24ocix0KXtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGk9dC5wYXRoLHU9dC5vcCxmPXIscz0wO3M8aS5sZW5ndGgtMTtzKyspe3ZhciB2PW8oZikscD1cIlwiK2lbc107MCE9PXYmJjEhPT12fHxcIl9fcHJvdG9fX1wiIT09cCYmXCJjb25zdHJ1Y3RvclwiIT09cHx8bigyNCksXCJmdW5jdGlvblwiPT10eXBlb2YgZiYmXCJwcm90b3R5cGVcIj09PXAmJm4oMjQpLFwib2JqZWN0XCIhPXR5cGVvZihmPWEoZixwKSkmJm4oMTUsaS5qb2luKFwiL1wiKSl9dmFyIGw9byhmKSxkPWUodC52YWx1ZSksaD1pW2kubGVuZ3RoLTFdO3N3aXRjaCh1KXtjYXNlXCJyZXBsYWNlXCI6c3dpdGNoKGwpe2Nhc2UgMjpyZXR1cm4gZi5zZXQoaCxkKTtjYXNlIDM6bigxNik7ZGVmYXVsdDpyZXR1cm4gZltoXT1kfWNhc2UgYzpzd2l0Y2gobCl7Y2FzZSAxOnJldHVyblwiLVwiPT09aD9mLnB1c2goZCk6Zi5zcGxpY2UoaCwwLGQpO2Nhc2UgMjpyZXR1cm4gZi5zZXQoaCxkKTtjYXNlIDM6cmV0dXJuIGYuYWRkKGQpO2RlZmF1bHQ6cmV0dXJuIGZbaF09ZH1jYXNlXCJyZW1vdmVcIjpzd2l0Y2gobCl7Y2FzZSAxOnJldHVybiBmLnNwbGljZShoLDEpO2Nhc2UgMjpyZXR1cm4gZi5kZWxldGUoaCk7Y2FzZSAzOnJldHVybiBmLmRlbGV0ZSh0LnZhbHVlKTtkZWZhdWx0OnJldHVybiBkZWxldGUgZltoXX1kZWZhdWx0Om4oMTcsdSl9fSkpLHJ9LFI6ZnVuY3Rpb24obixyLHQsZSl7c3dpdGNoKG4uaSl7Y2FzZSAwOmNhc2UgNDpjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4scix0LGUpe3ZhciBvPW4udCxzPW4ubztpKG4uRCwoZnVuY3Rpb24obixpKXt2YXIgdj1hKG8sbikscD1hKHMsbiksbD1pP3UobyxuKT9cInJlcGxhY2VcIjpjOlwicmVtb3ZlXCI7aWYodiE9PXB8fFwicmVwbGFjZVwiIT09bCl7dmFyIGQ9ci5jb25jYXQobik7dC5wdXNoKFwicmVtb3ZlXCI9PT1sP3tvcDpsLHBhdGg6ZH06e29wOmwscGF0aDpkLHZhbHVlOnB9KSxlLnB1c2gobD09PWM/e29wOlwicmVtb3ZlXCIscGF0aDpkfTpcInJlbW92ZVwiPT09bD97b3A6YyxwYXRoOmQsdmFsdWU6Zih2KX06e29wOlwicmVwbGFjZVwiLHBhdGg6ZCx2YWx1ZTpmKHYpfSl9fSkpfShuLHIsdCxlKTtjYXNlIDU6Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuLHIsdCxlKXt2YXIgaT1uLnQsbz1uLkQsdT1uLm87aWYodS5sZW5ndGg8aS5sZW5ndGgpe3ZhciBhPVt1LGldO2k9YVswXSx1PWFbMV07dmFyIHM9W2UsdF07dD1zWzBdLGU9c1sxXX1mb3IodmFyIHY9MDt2PGkubGVuZ3RoO3YrKylpZihvW3ZdJiZ1W3ZdIT09aVt2XSl7dmFyIHA9ci5jb25jYXQoW3ZdKTt0LnB1c2goe29wOlwicmVwbGFjZVwiLHBhdGg6cCx2YWx1ZTpmKHVbdl0pfSksZS5wdXNoKHtvcDpcInJlcGxhY2VcIixwYXRoOnAsdmFsdWU6ZihpW3ZdKX0pfWZvcih2YXIgbD1pLmxlbmd0aDtsPHUubGVuZ3RoO2wrKyl7dmFyIGQ9ci5jb25jYXQoW2xdKTt0LnB1c2goe29wOmMscGF0aDpkLHZhbHVlOmYodVtsXSl9KX1pLmxlbmd0aDx1Lmxlbmd0aCYmZS5wdXNoKHtvcDpcInJlcGxhY2VcIixwYXRoOnIuY29uY2F0KFtcImxlbmd0aFwiXSksdmFsdWU6aS5sZW5ndGh9KX0obixyLHQsZSk7Y2FzZSAzOnJldHVybiBmdW5jdGlvbihuLHIsdCxlKXt2YXIgaT1uLnQsbz1uLm8sdT0wO2kuZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoIW8uaGFzKG4pKXt2YXIgaT1yLmNvbmNhdChbdV0pO3QucHVzaCh7b3A6XCJyZW1vdmVcIixwYXRoOmksdmFsdWU6bn0pLGUudW5zaGlmdCh7b3A6YyxwYXRoOmksdmFsdWU6bn0pfXUrK30pKSx1PTAsby5mb3JFYWNoKChmdW5jdGlvbihuKXtpZighaS5oYXMobikpe3ZhciBvPXIuY29uY2F0KFt1XSk7dC5wdXNoKHtvcDpjLHBhdGg6byx2YWx1ZTpufSksZS51bnNoaWZ0KHtvcDpcInJlbW92ZVwiLHBhdGg6byx2YWx1ZTpufSl9dSsrfSkpfShuLHIsdCxlKX19LE06ZnVuY3Rpb24obixyLHQsZSl7dC5wdXNoKHtvcDpcInJlcGxhY2VcIixwYXRoOltdLHZhbHVlOnI9PT1IP3ZvaWQgMDpyfSksZS5wdXNoKHtvcDpcInJlcGxhY2VcIixwYXRoOltdLHZhbHVlOm59KX19KX1mdW5jdGlvbiBDKCl7ZnVuY3Rpb24gcihuLHIpe2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPW59YShuLHIpLG4ucHJvdG90eXBlPSh0LnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgdCl9ZnVuY3Rpb24gZShuKXtuLm98fChuLkQ9bmV3IE1hcCxuLm89bmV3IE1hcChuLnQpKX1mdW5jdGlvbiBvKG4pe24ub3x8KG4ubz1uZXcgU2V0LG4udC5mb3JFYWNoKChmdW5jdGlvbihyKXtpZih0KHIpKXt2YXIgZT1SKG4uQS5oLHIsbik7bi5wLnNldChyLGUpLG4uby5hZGQoZSl9ZWxzZSBuLm8uYWRkKHIpfSkpKX1mdW5jdGlvbiB1KHIpe3IuTyYmbigzLEpTT04uc3RyaW5naWZ5KHAocikpKX12YXIgYT1mdW5jdGlvbihuLHIpe3JldHVybihhPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihuLHIpe24uX19wcm90b19fPXJ9fHxmdW5jdGlvbihuLHIpe2Zvcih2YXIgdCBpbiByKXIuaGFzT3duUHJvcGVydHkodCkmJihuW3RdPXJbdF0pfSkobixyKX0sZj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixyKXtyZXR1cm4gdGhpc1tRXT17aToyLGw6cixBOnI/ci5BOl8oKSxQOiExLEk6ITEsbzp2b2lkIDAsRDp2b2lkIDAsdDpuLGs6dGhpcyxDOiExLE86ITF9LHRoaXN9cihuLE1hcCk7dmFyIG89bi5wcm90b3R5cGU7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLFwic2l6ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzW1FdKS5zaXplfX0pLG8uaGFzPWZ1bmN0aW9uKG4pe3JldHVybiBwKHRoaXNbUV0pLmhhcyhuKX0sby5zZXQ9ZnVuY3Rpb24obixyKXt2YXIgdD10aGlzW1FdO3JldHVybiB1KHQpLHAodCkuaGFzKG4pJiZwKHQpLmdldChuKT09PXJ8fChlKHQpLGsodCksdC5ELnNldChuLCEwKSx0Lm8uc2V0KG4sciksdC5ELnNldChuLCEwKSksdGhpc30sby5kZWxldGU9ZnVuY3Rpb24obil7aWYoIXRoaXMuaGFzKG4pKXJldHVybiExO3ZhciByPXRoaXNbUV07cmV0dXJuIHUociksZShyKSxrKHIpLHIudC5oYXMobik/ci5ELnNldChuLCExKTpyLkQuZGVsZXRlKG4pLHIuby5kZWxldGUobiksITB9LG8uY2xlYXI9ZnVuY3Rpb24oKXt2YXIgbj10aGlzW1FdO3UobikscChuKS5zaXplJiYoZShuKSxrKG4pLG4uRD1uZXcgTWFwLGkobi50LChmdW5jdGlvbihyKXtuLkQuc2V0KHIsITEpfSkpLG4uby5jbGVhcigpKX0sby5mb3JFYWNoPWZ1bmN0aW9uKG4scil7dmFyIHQ9dGhpcztwKHRoaXNbUV0pLmZvckVhY2goKGZ1bmN0aW9uKGUsaSl7bi5jYWxsKHIsdC5nZXQoaSksaSx0KX0pKX0sby5nZXQ9ZnVuY3Rpb24obil7dmFyIHI9dGhpc1tRXTt1KHIpO3ZhciBpPXAocikuZ2V0KG4pO2lmKHIuSXx8IXQoaSkpcmV0dXJuIGk7aWYoaSE9PXIudC5nZXQobikpcmV0dXJuIGk7dmFyIG89UihyLkEuaCxpLHIpO3JldHVybiBlKHIpLHIuby5zZXQobixvKSxvfSxvLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzW1FdKS5rZXlzKCl9LG8udmFsdWVzPWZ1bmN0aW9uKCl7dmFyIG4scj10aGlzLHQ9dGhpcy5rZXlzKCk7cmV0dXJuKG49e30pW1ZdPWZ1bmN0aW9uKCl7cmV0dXJuIHIudmFsdWVzKCl9LG4ubmV4dD1mdW5jdGlvbigpe3ZhciBuPXQubmV4dCgpO3JldHVybiBuLmRvbmU/bjp7ZG9uZTohMSx2YWx1ZTpyLmdldChuLnZhbHVlKX19LG59LG8uZW50cmllcz1mdW5jdGlvbigpe3ZhciBuLHI9dGhpcyx0PXRoaXMua2V5cygpO3JldHVybihuPXt9KVtWXT1mdW5jdGlvbigpe3JldHVybiByLmVudHJpZXMoKX0sbi5uZXh0PWZ1bmN0aW9uKCl7dmFyIG49dC5uZXh0KCk7aWYobi5kb25lKXJldHVybiBuO3ZhciBlPXIuZ2V0KG4udmFsdWUpO3JldHVybntkb25lOiExLHZhbHVlOltuLnZhbHVlLGVdfX0sbn0sb1tWXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVudHJpZXMoKX0sbn0oKSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIpe3JldHVybiB0aGlzW1FdPXtpOjMsbDpyLEE6cj9yLkE6XygpLFA6ITEsSTohMSxvOnZvaWQgMCx0Om4sazp0aGlzLHA6bmV3IE1hcCxPOiExLEM6ITF9LHRoaXN9cihuLFNldCk7dmFyIHQ9bi5wcm90b3R5cGU7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwic2l6ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzW1FdKS5zaXplfX0pLHQuaGFzPWZ1bmN0aW9uKG4pe3ZhciByPXRoaXNbUV07cmV0dXJuIHUociksci5vPyEhci5vLmhhcyhuKXx8ISghci5wLmhhcyhuKXx8IXIuby5oYXMoci5wLmdldChuKSkpOnIudC5oYXMobil9LHQuYWRkPWZ1bmN0aW9uKG4pe3ZhciByPXRoaXNbUV07cmV0dXJuIHUociksdGhpcy5oYXMobil8fChvKHIpLGsociksci5vLmFkZChuKSksdGhpc30sdC5kZWxldGU9ZnVuY3Rpb24obil7aWYoIXRoaXMuaGFzKG4pKXJldHVybiExO3ZhciByPXRoaXNbUV07cmV0dXJuIHUociksbyhyKSxrKHIpLHIuby5kZWxldGUobil8fCEhci5wLmhhcyhuKSYmci5vLmRlbGV0ZShyLnAuZ2V0KG4pKX0sdC5jbGVhcj1mdW5jdGlvbigpe3ZhciBuPXRoaXNbUV07dShuKSxwKG4pLnNpemUmJihvKG4pLGsobiksbi5vLmNsZWFyKCkpfSx0LnZhbHVlcz1mdW5jdGlvbigpe3ZhciBuPXRoaXNbUV07cmV0dXJuIHUobiksbyhuKSxuLm8udmFsdWVzKCl9LHQuZW50cmllcz1mdW5jdGlvbigpe3ZhciBuPXRoaXNbUV07cmV0dXJuIHUobiksbyhuKSxuLm8uZW50cmllcygpfSx0LmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZXMoKX0sdFtWXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlcygpfSx0LmZvckVhY2g9ZnVuY3Rpb24obixyKXtmb3IodmFyIHQ9dGhpcy52YWx1ZXMoKSxlPXQubmV4dCgpOyFlLmRvbmU7KW4uY2FsbChyLGUudmFsdWUsZS52YWx1ZSx0aGlzKSxlPXQubmV4dCgpfSxufSgpO20oXCJNYXBTZXRcIix7TjpmdW5jdGlvbihuLHIpe3JldHVybiBuZXcgZihuLHIpfSxUOmZ1bmN0aW9uKG4scil7cmV0dXJuIG5ldyBjKG4scil9fSl9ZnVuY3Rpb24gSigpe04oKSxDKCksVCgpfWZ1bmN0aW9uIEsobil7cmV0dXJuIG59ZnVuY3Rpb24gJChuKXtyZXR1cm4gbn12YXIgRyxVLFc9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbChcInhcIiksWD1cInVuZGVmaW5lZFwiIT10eXBlb2YgTWFwLHE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFNldCxCPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm94eSYmdm9pZCAwIT09UHJveHkucmV2b2NhYmxlJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgUmVmbGVjdCxIPVc/U3ltYm9sLmZvcihcImltbWVyLW5vdGhpbmdcIik6KChHPXt9KVtcImltbWVyLW5vdGhpbmdcIl09ITAsRyksTD1XP1N5bWJvbC5mb3IoXCJpbW1lci1kcmFmdGFibGVcIik6XCJfXyRpbW1lcl9kcmFmdGFibGVcIixRPVc/U3ltYm9sLmZvcihcImltbWVyLXN0YXRlXCIpOlwiX18kaW1tZXJfc3RhdGVcIixWPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcnx8XCJAQGl0ZXJhdG9yXCIsWT17MDpcIklsbGVnYWwgc3RhdGVcIiwxOlwiSW1tZXIgZHJhZnRzIGNhbm5vdCBoYXZlIGNvbXB1dGVkIHByb3BlcnRpZXNcIiwyOlwiVGhpcyBvYmplY3QgaGFzIGJlZW4gZnJvemVuIGFuZCBzaG91bGQgbm90IGJlIG11dGF0ZWRcIiwzOmZ1bmN0aW9uKG4pe3JldHVyblwiQ2Fubm90IHVzZSBhIHByb3h5IHRoYXQgaGFzIGJlZW4gcmV2b2tlZC4gRGlkIHlvdSBwYXNzIGFuIG9iamVjdCBmcm9tIGluc2lkZSBhbiBpbW1lciBmdW5jdGlvbiB0byBhbiBhc3luYyBwcm9jZXNzPyBcIitufSw0OlwiQW4gaW1tZXIgcHJvZHVjZXIgcmV0dXJuZWQgYSBuZXcgdmFsdWUgKmFuZCogbW9kaWZpZWQgaXRzIGRyYWZ0LiBFaXRoZXIgcmV0dXJuIGEgbmV3IHZhbHVlICpvciogbW9kaWZ5IHRoZSBkcmFmdC5cIiw1OlwiSW1tZXIgZm9yYmlkcyBjaXJjdWxhciByZWZlcmVuY2VzXCIsNjpcIlRoZSBmaXJzdCBvciBzZWNvbmQgYXJndW1lbnQgdG8gYHByb2R1Y2VgIG11c3QgYmUgYSBmdW5jdGlvblwiLDc6XCJUaGUgdGhpcmQgYXJndW1lbnQgdG8gYHByb2R1Y2VgIG11c3QgYmUgYSBmdW5jdGlvbiBvciB1bmRlZmluZWRcIiw4OlwiRmlyc3QgYXJndW1lbnQgdG8gYGNyZWF0ZURyYWZ0YCBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0LCBhbiBhcnJheSwgb3IgYW4gaW1tZXJhYmxlIG9iamVjdFwiLDk6XCJGaXJzdCBhcmd1bWVudCB0byBgZmluaXNoRHJhZnRgIG11c3QgYmUgYSBkcmFmdCByZXR1cm5lZCBieSBgY3JlYXRlRHJhZnRgXCIsMTA6XCJUaGUgZ2l2ZW4gZHJhZnQgaXMgYWxyZWFkeSBmaW5hbGl6ZWRcIiwxMTpcIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpIGNhbm5vdCBiZSB1c2VkIG9uIGFuIEltbWVyIGRyYWZ0XCIsMTI6XCJPYmplY3Quc2V0UHJvdG90eXBlT2YoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLDEzOlwiSW1tZXIgb25seSBzdXBwb3J0cyBkZWxldGluZyBhcnJheSBpbmRpY2VzXCIsMTQ6XCJJbW1lciBvbmx5IHN1cHBvcnRzIHNldHRpbmcgYXJyYXkgaW5kaWNlcyBhbmQgdGhlICdsZW5ndGgnIHByb3BlcnR5XCIsMTU6ZnVuY3Rpb24obil7cmV0dXJuXCJDYW5ub3QgYXBwbHkgcGF0Y2gsIHBhdGggZG9lc24ndCByZXNvbHZlOiBcIitufSwxNjonU2V0cyBjYW5ub3QgaGF2ZSBcInJlcGxhY2VcIiBwYXRjaGVzLicsMTc6ZnVuY3Rpb24obil7cmV0dXJuXCJVbnN1cHBvcnRlZCBwYXRjaCBvcGVyYXRpb246IFwiK259LDE4OmZ1bmN0aW9uKG4pe3JldHVyblwiVGhlIHBsdWdpbiBmb3IgJ1wiK24rXCInIGhhcyBub3QgYmVlbiBsb2FkZWQgaW50byBJbW1lci4gVG8gZW5hYmxlIHRoZSBwbHVnaW4sIGltcG9ydCBhbmQgY2FsbCBgZW5hYmxlXCIrbitcIigpYCB3aGVuIGluaXRpYWxpemluZyB5b3VyIGFwcGxpY2F0aW9uLlwifSwyMDpcIkNhbm5vdCB1c2UgcHJveGllcyBpZiBQcm94eSwgUHJveHkucmV2b2NhYmxlIG9yIFJlZmxlY3QgYXJlIG5vdCBhdmFpbGFibGVcIiwyMTpmdW5jdGlvbihuKXtyZXR1cm5cInByb2R1Y2UgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIHRoaW5ncyB0aGF0IGFyZSBkcmFmdGFibGU6IHBsYWluIG9iamVjdHMsIGFycmF5cywgTWFwLCBTZXQgb3IgY2xhc3NlcyB0aGF0IGFyZSBtYXJrZWQgd2l0aCAnW2ltbWVyYWJsZV06IHRydWUnLiBHb3QgJ1wiK24rXCInXCJ9LDIyOmZ1bmN0aW9uKG4pe3JldHVyblwiJ2N1cnJlbnQnIGV4cGVjdHMgYSBkcmFmdCwgZ290OiBcIitufSwyMzpmdW5jdGlvbihuKXtyZXR1cm5cIidvcmlnaW5hbCcgZXhwZWN0cyBhIGRyYWZ0LCBnb3Q6IFwiK259LDI0OlwiUGF0Y2hpbmcgcmVzZXJ2ZWQgYXR0cmlidXRlcyBsaWtlIF9fcHJvdG9fXywgcHJvdG90eXBlIGFuZCBjb25zdHJ1Y3RvciBpcyBub3QgYWxsb3dlZFwifSxaPVwiXCIrT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcixubj1cInVuZGVmaW5lZFwiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5vd25LZXlzP1JlZmxlY3Qub3duS2V5czp2b2lkIDAhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKSl9Ok9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLHJuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfHxmdW5jdGlvbihuKXt2YXIgcj17fTtyZXR1cm4gbm4obikuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0XT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCl9KSkscn0sdG49e30sZW49e2dldDpmdW5jdGlvbihuLHIpe2lmKHI9PT1RKXJldHVybiBuO3ZhciBlPXAobik7aWYoIXUoZSxyKSlyZXR1cm4gZnVuY3Rpb24obixyLHQpe3ZhciBlLGk9SShyLHQpO3JldHVybiBpP1widmFsdWVcImluIGk/aS52YWx1ZTpudWxsPT09KGU9aS5nZXQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwobi5rKTp2b2lkIDB9KG4sZSxyKTt2YXIgaT1lW3JdO3JldHVybiBuLkl8fCF0KGkpP2k6aT09PXoobi50LHIpPyhFKG4pLG4ub1tyXT1SKG4uQS5oLGksbikpOml9LGhhczpmdW5jdGlvbihuLHIpe3JldHVybiByIGluIHAobil9LG93bktleXM6ZnVuY3Rpb24obil7cmV0dXJuIFJlZmxlY3Qub3duS2V5cyhwKG4pKX0sc2V0OmZ1bmN0aW9uKG4scix0KXt2YXIgZT1JKHAobikscik7aWYobnVsbD09ZT92b2lkIDA6ZS5zZXQpcmV0dXJuIGUuc2V0LmNhbGwobi5rLHQpLCEwO2lmKCFuLlApe3ZhciBpPXoocChuKSxyKSxvPW51bGw9PWk/dm9pZCAwOmlbUV07aWYobyYmby50PT09dClyZXR1cm4gbi5vW3JdPXQsbi5EW3JdPSExLCEwO2lmKGModCxpKSYmKHZvaWQgMCE9PXR8fHUobi50LHIpKSlyZXR1cm4hMDtFKG4pLGsobil9cmV0dXJuIG4ub1tyXT09PXQmJlwibnVtYmVyXCIhPXR5cGVvZiB0JiYodm9pZCAwIT09dHx8ciBpbiBuLm8pfHwobi5vW3JdPXQsbi5EW3JdPSEwLCEwKX0sZGVsZXRlUHJvcGVydHk6ZnVuY3Rpb24obixyKXtyZXR1cm4gdm9pZCAwIT09eihuLnQscil8fHIgaW4gbi50PyhuLkRbcl09ITEsRShuKSxrKG4pKTpkZWxldGUgbi5EW3JdLG4ubyYmZGVsZXRlIG4ub1tyXSwhMH0sZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKG4scil7dmFyIHQ9cChuKSxlPVJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik7cmV0dXJuIGU/e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZToxIT09bi5pfHxcImxlbmd0aFwiIT09cixlbnVtZXJhYmxlOmUuZW51bWVyYWJsZSx2YWx1ZTp0W3JdfTplfSxkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe24oMTEpfSxnZXRQcm90b3R5cGVPZjpmdW5jdGlvbihuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4udCl9LHNldFByb3RvdHlwZU9mOmZ1bmN0aW9uKCl7bigxMil9fSxvbj17fTtpKGVuLChmdW5jdGlvbihuLHIpe29uW25dPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c1swXT1hcmd1bWVudHNbMF1bMF0sci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSkpLG9uLmRlbGV0ZVByb3BlcnR5PWZ1bmN0aW9uKHIsdCl7cmV0dXJuXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmaXNOYU4ocGFyc2VJbnQodCkpJiZuKDEzKSxvbi5zZXQuY2FsbCh0aGlzLHIsdCx2b2lkIDApfSxvbi5zZXQ9ZnVuY3Rpb24ocix0LGUpe3JldHVyblwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJlwibGVuZ3RoXCIhPT10JiZpc05hTihwYXJzZUludCh0KSkmJm4oMTQpLGVuLnNldC5jYWxsKHRoaXMsclswXSx0LGUsclswXSl9O3ZhciB1bj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUocil7dmFyIGU9dGhpczt0aGlzLmc9Qix0aGlzLkY9ITAsdGhpcy5wcm9kdWNlPWZ1bmN0aW9uKHIsaSxvKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBpKXt2YXIgdT1pO2k9cjt2YXIgYT1lO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPXUpO2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9QXJyYXkodD4xP3QtMTowKSxvPTE7bzx0O28rKyllW28tMV09YXJndW1lbnRzW29dO3JldHVybiBhLnByb2R1Y2UobiwoZnVuY3Rpb24obil7dmFyIHQ7cmV0dXJuKHQ9aSkuY2FsbC5hcHBseSh0LFtyLG5dLmNvbmNhdChlKSl9KSl9fXZhciBmO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGkmJm4oNiksdm9pZCAwIT09byYmXCJmdW5jdGlvblwiIT10eXBlb2YgbyYmbig3KSx0KHIpKXt2YXIgYz13KGUpLHM9UihlLHIsdm9pZCAwKSx2PSEwO3RyeXtmPWkocyksdj0hMX1maW5hbGx5e3Y/TyhjKTpnKGMpfXJldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlJiZmIGluc3RhbmNlb2YgUHJvbWlzZT9mLnRoZW4oKGZ1bmN0aW9uKG4pe3JldHVybiBqKGMsbyksUChuLGMpfSksKGZ1bmN0aW9uKG4pe3Rocm93IE8oYyksbn0pKTooaihjLG8pLFAoZixjKSl9aWYoIXJ8fFwib2JqZWN0XCIhPXR5cGVvZiByKXtpZih2b2lkIDA9PT0oZj1pKHIpKSYmKGY9ciksZj09PUgmJihmPXZvaWQgMCksZS5GJiZkKGYsITApLG8pe3ZhciBwPVtdLGw9W107YihcIlBhdGNoZXNcIikuTShyLGYscCxsKSxvKHAsbCl9cmV0dXJuIGZ9bigyMSxyKX0sdGhpcy5wcm9kdWNlV2l0aFBhdGNoZXM9ZnVuY3Rpb24obixyKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXJldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHQ+MT90LTE6MCksbz0xO288dDtvKyspaVtvLTFdPWFyZ3VtZW50c1tvXTtyZXR1cm4gZS5wcm9kdWNlV2l0aFBhdGNoZXMociwoZnVuY3Rpb24ocil7cmV0dXJuIG4uYXBwbHkodm9pZCAwLFtyXS5jb25jYXQoaSkpfSkpfTt2YXIgdCxpLG89ZS5wcm9kdWNlKG4sciwoZnVuY3Rpb24obixyKXt0PW4saT1yfSkpO3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlJiZvIGluc3RhbmNlb2YgUHJvbWlzZT9vLnRoZW4oKGZ1bmN0aW9uKG4pe3JldHVybltuLHQsaV19KSk6W28sdCxpXX0sXCJib29sZWFuXCI9PXR5cGVvZihudWxsPT1yP3ZvaWQgMDpyLnVzZVByb3hpZXMpJiZ0aGlzLnNldFVzZVByb3hpZXMoci51c2VQcm94aWVzKSxcImJvb2xlYW5cIj09dHlwZW9mKG51bGw9PXI/dm9pZCAwOnIuYXV0b0ZyZWV6ZSkmJnRoaXMuc2V0QXV0b0ZyZWV6ZShyLmF1dG9GcmVlemUpfXZhciBpPWUucHJvdG90eXBlO3JldHVybiBpLmNyZWF0ZURyYWZ0PWZ1bmN0aW9uKGUpe3QoZSl8fG4oOCkscihlKSYmKGU9RChlKSk7dmFyIGk9dyh0aGlzKSxvPVIodGhpcyxlLHZvaWQgMCk7cmV0dXJuIG9bUV0uQz0hMCxnKGkpLG99LGkuZmluaXNoRHJhZnQ9ZnVuY3Rpb24ocix0KXt2YXIgZT1yJiZyW1FdO1wicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJihlJiZlLkN8fG4oOSksZS5JJiZuKDEwKSk7dmFyIGk9ZS5BO3JldHVybiBqKGksdCksUCh2b2lkIDAsaSl9LGkuc2V0QXV0b0ZyZWV6ZT1mdW5jdGlvbihuKXt0aGlzLkY9bn0saS5zZXRVc2VQcm94aWVzPWZ1bmN0aW9uKHIpe3ImJiFCJiZuKDIwKSx0aGlzLmc9cn0saS5hcHBseVBhdGNoZXM9ZnVuY3Rpb24obix0KXt2YXIgZTtmb3IoZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXt2YXIgaT10W2VdO2lmKDA9PT1pLnBhdGgubGVuZ3RoJiZcInJlcGxhY2VcIj09PWkub3Ape249aS52YWx1ZTticmVha319ZT4tMSYmKHQ9dC5zbGljZShlKzEpKTt2YXIgbz1iKFwiUGF0Y2hlc1wiKS4kO3JldHVybiByKG4pP28obix0KTp0aGlzLnByb2R1Y2UobiwoZnVuY3Rpb24obil7cmV0dXJuIG8obix0KX0pKX0sZX0oKSxhbj1uZXcgdW4sZm49YW4ucHJvZHVjZSxjbj1hbi5wcm9kdWNlV2l0aFBhdGNoZXMuYmluZChhbiksc249YW4uc2V0QXV0b0ZyZWV6ZS5iaW5kKGFuKSx2bj1hbi5zZXRVc2VQcm94aWVzLmJpbmQoYW4pLHBuPWFuLmFwcGx5UGF0Y2hlcy5iaW5kKGFuKSxsbj1hbi5jcmVhdGVEcmFmdC5iaW5kKGFuKSxkbj1hbi5maW5pc2hEcmFmdC5iaW5kKGFuKTtleHBvcnQgZGVmYXVsdCBmbjtleHBvcnR7dW4gYXMgSW1tZXIscG4gYXMgYXBwbHlQYXRjaGVzLEsgYXMgY2FzdERyYWZ0LCQgYXMgY2FzdEltbXV0YWJsZSxsbiBhcyBjcmVhdGVEcmFmdCxEIGFzIGN1cnJlbnQsSiBhcyBlbmFibGVBbGxQbHVnaW5zLE4gYXMgZW5hYmxlRVM1LEMgYXMgZW5hYmxlTWFwU2V0LFQgYXMgZW5hYmxlUGF0Y2hlcyxkbiBhcyBmaW5pc2hEcmFmdCxkIGFzIGZyZWV6ZSxMIGFzIGltbWVyYWJsZSxyIGFzIGlzRHJhZnQsdCBhcyBpc0RyYWZ0YWJsZSxIIGFzIG5vdGhpbmcsZSBhcyBvcmlnaW5hbCxmbiBhcyBwcm9kdWNlLGNuIGFzIHByb2R1Y2VXaXRoUGF0Y2hlcyxzbiBhcyBzZXRBdXRvRnJlZXplLHZuIGFzIHNldFVzZVByb3hpZXN9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW1tZXIuZXNtLmpzLm1hcFxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gXCIuL2RlZmluZVByb3BlcnR5LmpzXCI7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDInO1xuXG4vKipcbiAqIEFkYXB0ZWQgZnJvbSBSZWFjdDogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvbWFzdGVyL3BhY2thZ2VzL3NoYXJlZC9mb3JtYXRQcm9kRXJyb3JNZXNzYWdlLmpzXG4gKlxuICogRG8gbm90IHJlcXVpcmUgdGhpcyBtb2R1bGUgZGlyZWN0bHkhIFVzZSBub3JtYWwgdGhyb3cgZXJyb3IgY2FsbHMuIFRoZXNlIG1lc3NhZ2VzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBlcnJvciBjb2Rlc1xuICogZHVyaW5nIGJ1aWxkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0UHJvZEVycm9yTWVzc2FnZShjb2RlKSB7XG4gIHJldHVybiBcIk1pbmlmaWVkIFJlZHV4IGVycm9yICNcIiArIGNvZGUgKyBcIjsgdmlzaXQgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvRXJyb3JzP2NvZGU9XCIgKyBjb2RlICsgXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgXCIgKyAndXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycy4gJztcbn1cblxuLy8gSW5saW5lZCB2ZXJzaW9uIG9mIHRoZSBgc3ltYm9sLW9ic2VydmFibGVgIHBvbHlmaWxsXG52YXIgJCRvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgJ0BAb2JzZXJ2YWJsZSc7XG59KSgpO1xuXG4vKipcbiAqIFRoZXNlIGFyZSBwcml2YXRlIGFjdGlvbiB0eXBlcyByZXNlcnZlZCBieSBSZWR1eC5cbiAqIEZvciBhbnkgdW5rbm93biBhY3Rpb25zLCB5b3UgbXVzdCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cbiAqIERvIG5vdCByZWZlcmVuY2UgdGhlc2UgYWN0aW9uIHR5cGVzIGRpcmVjdGx5IGluIHlvdXIgY29kZS5cbiAqL1xudmFyIHJhbmRvbVN0cmluZyA9IGZ1bmN0aW9uIHJhbmRvbVN0cmluZygpIHtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgnJykuam9pbignLicpO1xufTtcblxudmFyIEFjdGlvblR5cGVzID0ge1xuICBJTklUOiBcIkBAcmVkdXgvSU5JVFwiICsgcmFuZG9tU3RyaW5nKCksXG4gIFJFUExBQ0U6IFwiQEByZWR1eC9SRVBMQUNFXCIgKyByYW5kb21TdHJpbmcoKSxcbiAgUFJPQkVfVU5LTk9XTl9BQ1RJT046IGZ1bmN0aW9uIFBST0JFX1VOS05PV05fQUNUSU9OKCkge1xuICAgIHJldHVybiBcIkBAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05cIiArIHJhbmRvbVN0cmluZygpO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBvYmogVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGFyZ3VtZW50IGFwcGVhcnMgdG8gYmUgYSBwbGFpbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgdmFyIHByb3RvID0gb2JqO1xuXG4gIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pICE9PSBudWxsKSB7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopID09PSBwcm90bztcbn1cblxuLy8gSW5saW5lZCAvIHNob3J0ZW5lZCB2ZXJzaW9uIG9mIGBraW5kT2ZgIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQva2luZC1vZlxuZnVuY3Rpb24gbWluaUtpbmRPZih2YWwpIHtcbiAgaWYgKHZhbCA9PT0gdm9pZCAwKSByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIGlmICh2YWwgPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnc3ltYm9sJzpcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuICdhcnJheSc7XG4gIGlmIChpc0RhdGUodmFsKSkgcmV0dXJuICdkYXRlJztcbiAgaWYgKGlzRXJyb3IodmFsKSkgcmV0dXJuICdlcnJvcic7XG4gIHZhciBjb25zdHJ1Y3Rvck5hbWUgPSBjdG9yTmFtZSh2YWwpO1xuXG4gIHN3aXRjaCAoY29uc3RydWN0b3JOYW1lKSB7XG4gICAgY2FzZSAnU3ltYm9sJzpcbiAgICBjYXNlICdQcm9taXNlJzpcbiAgICBjYXNlICdXZWFrTWFwJzpcbiAgICBjYXNlICdXZWFrU2V0JzpcbiAgICBjYXNlICdNYXAnOlxuICAgIGNhc2UgJ1NldCc6XG4gICAgICByZXR1cm4gY29uc3RydWN0b3JOYW1lO1xuICB9IC8vIG90aGVyXG5cblxuICByZXR1cm4gdHlwZS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgJycpO1xufVxuXG5mdW5jdGlvbiBjdG9yTmFtZSh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwuY29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicgPyB2YWwuY29uc3RydWN0b3IubmFtZSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3IodmFsKSB7XG4gIHJldHVybiB2YWwgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgdmFsLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIHZhbC5jb25zdHJ1Y3RvciAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLnN0YWNrVHJhY2VMaW1pdCA9PT0gJ251bWJlcic7XG59XG5cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB0cnVlO1xuICByZXR1cm4gdHlwZW9mIHZhbC50b0RhdGVTdHJpbmcgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbC5nZXREYXRlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWwuc2V0RGF0ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24ga2luZE9mKHZhbCkge1xuICB2YXIgdHlwZU9mVmFsID0gdHlwZW9mIHZhbDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHR5cGVPZlZhbCA9IG1pbmlLaW5kT2YodmFsKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlT2ZWYWw7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqXG4gKiAqKldlIHJlY29tbWVuZCB1c2luZyB0aGUgYGNvbmZpZ3VyZVN0b3JlYCBtZXRob2RcbiAqIG9mIHRoZSBgQHJlZHV4anMvdG9vbGtpdGAgcGFja2FnZSoqLCB3aGljaCByZXBsYWNlcyBgY3JlYXRlU3RvcmVgLlxuICpcbiAqIFJlZHV4IFRvb2xraXQgaXMgb3VyIHJlY29tbWVuZGVkIGFwcHJvYWNoIGZvciB3cml0aW5nIFJlZHV4IGxvZ2ljIHRvZGF5LFxuICogaW5jbHVkaW5nIHN0b3JlIHNldHVwLCByZWR1Y2VycywgZGF0YSBmZXRjaGluZywgYW5kIG1vcmUuXG4gKlxuICogKipGb3IgbW9yZSBkZXRhaWxzLCBwbGVhc2UgcmVhZCB0aGlzIFJlZHV4IGRvY3MgcGFnZToqKlxuICogKipodHRwczovL3JlZHV4LmpzLm9yZy9pbnRyb2R1Y3Rpb24vd2h5LXJ0ay1pcy1yZWR1eC10b2RheSoqXG4gKlxuICogYGNvbmZpZ3VyZVN0b3JlYCBmcm9tIFJlZHV4IFRvb2xraXQgaXMgYW4gaW1wcm92ZWQgdmVyc2lvbiBvZiBgY3JlYXRlU3RvcmVgIHRoYXRcbiAqIHNpbXBsaWZpZXMgc2V0dXAgYW5kIGhlbHBzIGF2b2lkIGNvbW1vbiBidWdzLlxuICpcbiAqIFlvdSBzaG91bGQgbm90IGJlIHVzaW5nIHRoZSBgcmVkdXhgIGNvcmUgcGFja2FnZSBieSBpdHNlbGYgdG9kYXksIGV4Y2VwdCBmb3IgbGVhcm5pbmcgcHVycG9zZXMuXG4gKiBUaGUgYGNyZWF0ZVN0b3JlYCBtZXRob2QgZnJvbSB0aGUgY29yZSBgcmVkdXhgIHBhY2thZ2Ugd2lsbCBub3QgYmUgcmVtb3ZlZCwgYnV0IHdlIGVuY291cmFnZVxuICogYWxsIHVzZXJzIHRvIG1pZ3JhdGUgdG8gdXNpbmcgUmVkdXggVG9vbGtpdCBmb3IgYWxsIFJlZHV4IGNvZGUuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gdXNlIGBjcmVhdGVTdG9yZWAgd2l0aG91dCB0aGlzIHZpc3VhbCBkZXByZWNhdGlvbiB3YXJuaW5nLCB1c2VcbiAqIHRoZSBgbGVnYWN5X2NyZWF0ZVN0b3JlYCBpbXBvcnQgaW5zdGVhZDpcbiAqXG4gKiBgaW1wb3J0IHsgbGVnYWN5X2NyZWF0ZVN0b3JlIGFzIGNyZWF0ZVN0b3JlfSBmcm9tICdyZWR1eCdgXG4gKlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xuICB2YXIgX3JlZjI7XG5cbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVuaGFuY2VyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBhcmd1bWVudHNbM10gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgwKSA6ICdJdCBsb29rcyBsaWtlIHlvdSBhcmUgcGFzc2luZyBzZXZlcmFsIHN0b3JlIGVuaGFuY2VycyB0byAnICsgJ2NyZWF0ZVN0b3JlKCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gSW5zdGVhZCwgY29tcG9zZSB0aGVtICcgKyAndG9nZXRoZXIgdG8gYSBzaW5nbGUgZnVuY3Rpb24uIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNC1zdG9yZSNjcmVhdGluZy1hLXN0b3JlLXdpdGgtZW5oYW5jZXJzIGZvciBhbiBleGFtcGxlLicpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZW5oYW5jZXIgPSBwcmVsb2FkZWRTdGF0ZTtcbiAgICBwcmVsb2FkZWRTdGF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMSkgOiBcIkV4cGVjdGVkIHRoZSBlbmhhbmNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKGVuaGFuY2VyKSArIFwiJ1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW5oYW5jZXIoY3JlYXRlU3RvcmUpKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcmVkdWNlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIpIDogXCJFeHBlY3RlZCB0aGUgcm9vdCByZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBraW5kT2YocmVkdWNlcikgKyBcIidcIik7XG4gIH1cblxuICB2YXIgY3VycmVudFJlZHVjZXIgPSByZWR1Y2VyO1xuICB2YXIgY3VycmVudFN0YXRlID0gcHJlbG9hZGVkU3RhdGU7XG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XG4gIHZhciBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycztcbiAgdmFyIGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoaXMgbWFrZXMgYSBzaGFsbG93IGNvcHkgb2YgY3VycmVudExpc3RlbmVycyBzbyB3ZSBjYW4gdXNlXG4gICAqIG5leHRMaXN0ZW5lcnMgYXMgYSB0ZW1wb3JhcnkgbGlzdCB3aGlsZSBkaXNwYXRjaGluZy5cbiAgICpcbiAgICogVGhpcyBwcmV2ZW50cyBhbnkgYnVncyBhcm91bmQgY29uc3VtZXJzIGNhbGxpbmdcbiAgICogc3Vic2NyaWJlL3Vuc3Vic2NyaWJlIGluIHRoZSBtaWRkbGUgb2YgYSBkaXNwYXRjaC5cbiAgICovXG5cbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcbiAgICBpZiAobmV4dExpc3RlbmVycyA9PT0gY3VycmVudExpc3RlbmVycykge1xuICAgICAgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMuc2xpY2UoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgY3VycmVudCBzdGF0ZSB0cmVlIG9mIHlvdXIgYXBwbGljYXRpb24uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMpIDogJ1lvdSBtYXkgbm90IGNhbGwgc3RvcmUuZ2V0U3RhdGUoKSB3aGlsZSB0aGUgcmVkdWNlciBpcyBleGVjdXRpbmcuICcgKyAnVGhlIHJlZHVjZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgdGhlIHN0YXRlIGFzIGFuIGFyZ3VtZW50LiAnICsgJ1Bhc3MgaXQgZG93biBmcm9tIHRoZSB0b3AgcmVkdWNlciBpbnN0ZWFkIG9mIHJlYWRpbmcgaXQgZnJvbSB0aGUgc3RvcmUuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTtcbiAgfVxuICAvKipcbiAgICogQWRkcyBhIGNoYW5nZSBsaXN0ZW5lci4gSXQgd2lsbCBiZSBjYWxsZWQgYW55IHRpbWUgYW4gYWN0aW9uIGlzIGRpc3BhdGNoZWQsXG4gICAqIGFuZCBzb21lIHBhcnQgb2YgdGhlIHN0YXRlIHRyZWUgbWF5IHBvdGVudGlhbGx5IGhhdmUgY2hhbmdlZC4gWW91IG1heSB0aGVuXG4gICAqIGNhbGwgYGdldFN0YXRlKClgIHRvIHJlYWQgdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBpbnNpZGUgdGhlIGNhbGxiYWNrLlxuICAgKlxuICAgKiBZb3UgbWF5IGNhbGwgYGRpc3BhdGNoKClgIGZyb20gYSBjaGFuZ2UgbGlzdGVuZXIsIHdpdGggdGhlIGZvbGxvd2luZ1xuICAgKiBjYXZlYXRzOlxuICAgKlxuICAgKiAxLiBUaGUgc3Vic2NyaXB0aW9ucyBhcmUgc25hcHNob3R0ZWQganVzdCBiZWZvcmUgZXZlcnkgYGRpc3BhdGNoKClgIGNhbGwuXG4gICAqIElmIHlvdSBzdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgd2hpbGUgdGhlIGxpc3RlbmVycyBhcmUgYmVpbmcgaW52b2tlZCwgdGhpc1xuICAgKiB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3Qgb24gdGhlIGBkaXNwYXRjaCgpYCB0aGF0IGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy5cbiAgICogSG93ZXZlciwgdGhlIG5leHQgYGRpc3BhdGNoKClgIGNhbGwsIHdoZXRoZXIgbmVzdGVkIG9yIG5vdCwgd2lsbCB1c2UgYSBtb3JlXG4gICAqIHJlY2VudCBzbmFwc2hvdCBvZiB0aGUgc3Vic2NyaXB0aW9uIGxpc3QuXG4gICAqXG4gICAqIDIuIFRoZSBsaXN0ZW5lciBzaG91bGQgbm90IGV4cGVjdCB0byBzZWUgYWxsIHN0YXRlIGNoYW5nZXMsIGFzIHRoZSBzdGF0ZVxuICAgKiBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBuZXN0ZWQgYGRpc3BhdGNoKClgIGJlZm9yZVxuICAgKiB0aGUgbGlzdGVuZXIgaXMgY2FsbGVkLiBJdCBpcywgaG93ZXZlciwgZ3VhcmFudGVlZCB0aGF0IGFsbCBzdWJzY3JpYmVyc1xuICAgKiByZWdpc3RlcmVkIGJlZm9yZSB0aGUgYGRpc3BhdGNoKClgIHN0YXJ0ZWQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbGF0ZXN0XG4gICAqIHN0YXRlIGJ5IHRoZSB0aW1lIGl0IGV4aXRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBBIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gZXZlcnkgZGlzcGF0Y2guXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byByZW1vdmUgdGhpcyBjaGFuZ2UgbGlzdGVuZXIuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNCkgOiBcIkV4cGVjdGVkIHRoZSBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKGxpc3RlbmVyKSArIFwiJ1wiKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNSkgOiAnWW91IG1heSBub3QgY2FsbCBzdG9yZS5zdWJzY3JpYmUoKSB3aGlsZSB0aGUgcmVkdWNlciBpcyBleGVjdXRpbmcuICcgKyAnSWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgbm90aWZpZWQgYWZ0ZXIgdGhlIHN0b3JlIGhhcyBiZWVuIHVwZGF0ZWQsIHN1YnNjcmliZSBmcm9tIGEgJyArICdjb21wb25lbnQgYW5kIGludm9rZSBzdG9yZS5nZXRTdGF0ZSgpIGluIHRoZSBjYWxsYmFjayB0byBhY2Nlc3MgdGhlIGxhdGVzdCBzdGF0ZS4gJyArICdTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvYXBpL3N0b3JlI3N1YnNjcmliZWxpc3RlbmVyIGZvciBtb3JlIGRldGFpbHMuJyk7XG4gICAgfVxuXG4gICAgdmFyIGlzU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgICAgaWYgKCFpc1N1YnNjcmliZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg2KSA6ICdZb3UgbWF5IG5vdCB1bnN1YnNjcmliZSBmcm9tIGEgc3RvcmUgbGlzdGVuZXIgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiAnICsgJ1NlZSBodHRwczovL3JlZHV4LmpzLm9yZy9hcGkvc3RvcmUjc3Vic2NyaWJlbGlzdGVuZXIgZm9yIG1vcmUgZGV0YWlscy4nKTtcbiAgICAgIH1cblxuICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XG4gICAgICB2YXIgaW5kZXggPSBuZXh0TGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgbmV4dExpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgY3VycmVudExpc3RlbmVycyA9IG51bGw7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogRGlzcGF0Y2hlcyBhbiBhY3Rpb24uIEl0IGlzIHRoZSBvbmx5IHdheSB0byB0cmlnZ2VyIGEgc3RhdGUgY2hhbmdlLlxuICAgKlxuICAgKiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlXG4gICAqIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGdpdmVuIGBhY3Rpb25gLiBJdHMgcmV0dXJuIHZhbHVlIHdpbGxcbiAgICogYmUgY29uc2lkZXJlZCB0aGUgKipuZXh0Kiogc3RhdGUgb2YgdGhlIHRyZWUsIGFuZCB0aGUgY2hhbmdlIGxpc3RlbmVyc1xuICAgKiB3aWxsIGJlIG5vdGlmaWVkLlxuICAgKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIHBsYWluIG9iamVjdCBhY3Rpb25zLiBJZiB5b3Ugd2FudCB0b1xuICAgKiBkaXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBlbHNlLCB5b3UgbmVlZCB0b1xuICAgKiB3cmFwIHlvdXIgc3RvcmUgY3JlYXRpbmcgZnVuY3Rpb24gaW50byB0aGUgY29ycmVzcG9uZGluZyBtaWRkbGV3YXJlLiBGb3JcbiAgICogZXhhbXBsZSwgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYHJlZHV4LXRodW5rYCBwYWNrYWdlLiBFdmVuIHRoZVxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3QgYWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBBIHBsYWluIG9iamVjdCByZXByZXNlbnRpbmcg4oCcd2hhdCBjaGFuZ2Vk4oCdLiBJdCBpc1xuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBjYW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxuICAgKiBzZXNzaW9ucywgb3IgdXNlIHRoZSB0aW1lIHRyYXZlbGxpbmcgYHJlZHV4LWRldnRvb2xzYC4gQW4gYWN0aW9uIG11c3QgaGF2ZVxuICAgKiBhIGB0eXBlYCBwcm9wZXJ0eSB3aGljaCBtYXkgbm90IGJlIGB1bmRlZmluZWRgLiBJdCBpcyBhIGdvb2QgaWRlYSB0byB1c2VcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBGb3IgY29udmVuaWVuY2UsIHRoZSBzYW1lIGFjdGlvbiBvYmplY3QgeW91IGRpc3BhdGNoZWQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCwgaWYgeW91IHVzZSBhIGN1c3RvbSBtaWRkbGV3YXJlLCBpdCBtYXkgd3JhcCBgZGlzcGF0Y2goKWAgdG9cbiAgICogcmV0dXJuIHNvbWV0aGluZyBlbHNlIChmb3IgZXhhbXBsZSwgYSBQcm9taXNlIHlvdSBjYW4gYXdhaXQpLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg3KSA6IFwiQWN0aW9ucyBtdXN0IGJlIHBsYWluIG9iamVjdHMuIEluc3RlYWQsIHRoZSBhY3R1YWwgdHlwZSB3YXM6ICdcIiArIGtpbmRPZihhY3Rpb24pICsgXCInLiBZb3UgbWF5IG5lZWQgdG8gYWRkIG1pZGRsZXdhcmUgdG8geW91ciBzdG9yZSBzZXR1cCB0byBoYW5kbGUgZGlzcGF0Y2hpbmcgb3RoZXIgdmFsdWVzLCBzdWNoIGFzICdyZWR1eC10aHVuaycgdG8gaGFuZGxlIGRpc3BhdGNoaW5nIGZ1bmN0aW9ucy4gU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL3R1dG9yaWFscy9mdW5kYW1lbnRhbHMvcGFydC00LXN0b3JlI21pZGRsZXdhcmUgYW5kIGh0dHBzOi8vcmVkdXguanMub3JnL3R1dG9yaWFscy9mdW5kYW1lbnRhbHMvcGFydC02LWFzeW5jLWxvZ2ljI3VzaW5nLXRoZS1yZWR1eC10aHVuay1taWRkbGV3YXJlIGZvciBleGFtcGxlcy5cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24udHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDgpIDogJ0FjdGlvbnMgbWF5IG5vdCBoYXZlIGFuIHVuZGVmaW5lZCBcInR5cGVcIiBwcm9wZXJ0eS4gWW91IG1heSBoYXZlIG1pc3NwZWxsZWQgYW4gYWN0aW9uIHR5cGUgc3RyaW5nIGNvbnN0YW50LicpO1xuICAgIH1cblxuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg5KSA6ICdSZWR1Y2VycyBtYXkgbm90IGRpc3BhdGNoIGFjdGlvbnMuJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSB0cnVlO1xuICAgICAgY3VycmVudFN0YXRlID0gY3VycmVudFJlZHVjZXIoY3VycmVudFN0YXRlLCBhY3Rpb24pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMgPSBuZXh0TGlzdGVuZXJzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbjtcbiAgfVxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIHJlZHVjZXIgY3VycmVudGx5IHVzZWQgYnkgdGhlIHN0b3JlIHRvIGNhbGN1bGF0ZSB0aGUgc3RhdGUuXG4gICAqXG4gICAqIFlvdSBtaWdodCBuZWVkIHRoaXMgaWYgeW91ciBhcHAgaW1wbGVtZW50cyBjb2RlIHNwbGl0dGluZyBhbmQgeW91IHdhbnQgdG9cbiAgICogbG9hZCBzb21lIG9mIHRoZSByZWR1Y2VycyBkeW5hbWljYWxseS4gWW91IG1pZ2h0IGFsc28gbmVlZCB0aGlzIGlmIHlvdVxuICAgKiBpbXBsZW1lbnQgYSBob3QgcmVsb2FkaW5nIG1lY2hhbmlzbSBmb3IgUmVkdXguXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5leHRSZWR1Y2VyIFRoZSByZWR1Y2VyIGZvciB0aGUgc3RvcmUgdG8gdXNlIGluc3RlYWQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XG4gICAgaWYgKHR5cGVvZiBuZXh0UmVkdWNlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTApIDogXCJFeHBlY3RlZCB0aGUgbmV4dFJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihuZXh0UmVkdWNlcikpO1xuICAgIH1cblxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7IC8vIFRoaXMgYWN0aW9uIGhhcyBhIHNpbWlsaWFyIGVmZmVjdCB0byBBY3Rpb25UeXBlcy5JTklULlxuICAgIC8vIEFueSByZWR1Y2VycyB0aGF0IGV4aXN0ZWQgaW4gYm90aCB0aGUgbmV3IGFuZCBvbGQgcm9vdFJlZHVjZXJcbiAgICAvLyB3aWxsIHJlY2VpdmUgdGhlIHByZXZpb3VzIHN0YXRlLiBUaGlzIGVmZmVjdGl2ZWx5IHBvcHVsYXRlc1xuICAgIC8vIHRoZSBuZXcgc3RhdGUgdHJlZSB3aXRoIGFueSByZWxldmFudCBkYXRhIGZyb20gdGhlIG9sZCBvbmUuXG5cbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRVBMQUNFXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEludGVyb3BlcmFiaWxpdHkgcG9pbnQgZm9yIG9ic2VydmFibGUvcmVhY3RpdmUgbGlicmFyaWVzLlxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgb2JzZXJ2YWJsZSBwcm9wb3NhbDpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICB2YXIgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgcmV0dXJuIF9yZWYgPSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYnNlcnZlciBBbnkgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gb2JzZXJ2ZXIuXG4gICAgICAgKiBUaGUgb2JzZXJ2ZXIgb2JqZWN0IHNob3VsZCBoYXZlIGEgYG5leHRgIG1ldGhvZC5cbiAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXG4gICAgICAgKiBiZSB1c2VkIHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIGZyb20gdGhlIHN0b3JlLCBhbmQgcHJldmVudCBmdXJ0aGVyXG4gICAgICAgKiBlbWlzc2lvbiBvZiB2YWx1ZXMgZnJvbSB0aGUgb2JzZXJ2YWJsZS5cbiAgICAgICAqL1xuICAgICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gJ29iamVjdCcgfHwgb2JzZXJ2ZXIgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMSkgOiBcIkV4cGVjdGVkIHRoZSBvYnNlcnZlciB0byBiZSBhbiBvYmplY3QuIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBraW5kT2Yob2JzZXJ2ZXIpICsgXCInXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xuICAgICAgICAgIGlmIChvYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGdldFN0YXRlKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xuICAgICAgICB2YXIgdW5zdWJzY3JpYmUgPSBvdXRlclN1YnNjcmliZShvYnNlcnZlU3RhdGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sIF9yZWZbJCRvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIF9yZWY7XG4gIH0gLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFwiSU5JVFwiIGFjdGlvbiBpcyBkaXNwYXRjaGVkIHNvIHRoYXQgZXZlcnlcbiAgLy8gcmVkdWNlciByZXR1cm5zIHRoZWlyIGluaXRpYWwgc3RhdGUuIFRoaXMgZWZmZWN0aXZlbHkgcG9wdWxhdGVzXG4gIC8vIHRoZSBpbml0aWFsIHN0YXRlIHRyZWUuXG5cblxuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuSU5JVFxuICB9KTtcbiAgcmV0dXJuIF9yZWYyID0ge1xuICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcbiAgICBzdWJzY3JpYmU6IHN1YnNjcmliZSxcbiAgICBnZXRTdGF0ZTogZ2V0U3RhdGUsXG4gICAgcmVwbGFjZVJlZHVjZXI6IHJlcGxhY2VSZWR1Y2VyXG4gIH0sIF9yZWYyWyQkb2JzZXJ2YWJsZV0gPSBvYnNlcnZhYmxlLCBfcmVmMjtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXG4gKlxuICogKipXZSByZWNvbW1lbmQgdXNpbmcgYGNvbmZpZ3VyZVN0b3JlYCBmcm9tIHRoZVxuICogYEByZWR1eGpzL3Rvb2xraXRgIHBhY2thZ2UqKiwgd2hpY2ggcmVwbGFjZXMgYGNyZWF0ZVN0b3JlYDpcbiAqICoqaHR0cHM6Ly9yZWR1eC5qcy5vcmcvaW50cm9kdWN0aW9uL3doeS1ydGstaXMtcmVkdXgtdG9kYXkqKlxuICpcbiAqIFRoZSBvbmx5IHdheSB0byBjaGFuZ2UgdGhlIGRhdGEgaW4gdGhlIHN0b3JlIGlzIHRvIGNhbGwgYGRpc3BhdGNoKClgIG9uIGl0LlxuICpcbiAqIFRoZXJlIHNob3VsZCBvbmx5IGJlIGEgc2luZ2xlIHN0b3JlIGluIHlvdXIgYXBwLiBUbyBzcGVjaWZ5IGhvdyBkaWZmZXJlbnRcbiAqIHBhcnRzIG9mIHRoZSBzdGF0ZSB0cmVlIHJlc3BvbmQgdG8gYWN0aW9ucywgeW91IG1heSBjb21iaW5lIHNldmVyYWwgcmVkdWNlcnNcbiAqIGludG8gYSBzaW5nbGUgcmVkdWNlciBmdW5jdGlvbiBieSB1c2luZyBgY29tYmluZVJlZHVjZXJzYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWR1Y2VyIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuZXh0IHN0YXRlIHRyZWUsIGdpdmVuXG4gKiB0aGUgY3VycmVudCBzdGF0ZSB0cmVlIGFuZCB0aGUgYWN0aW9uIHRvIGhhbmRsZS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gW3ByZWxvYWRlZFN0YXRlXSBUaGUgaW5pdGlhbCBzdGF0ZS4gWW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgaXRcbiAqIHRvIGh5ZHJhdGUgdGhlIHN0YXRlIGZyb20gdGhlIHNlcnZlciBpbiB1bml2ZXJzYWwgYXBwcywgb3IgdG8gcmVzdG9yZSBhXG4gKiBwcmV2aW91c2x5IHNlcmlhbGl6ZWQgdXNlciBzZXNzaW9uLlxuICogSWYgeW91IHVzZSBgY29tYmluZVJlZHVjZXJzYCB0byBwcm9kdWNlIHRoZSByb290IHJlZHVjZXIgZnVuY3Rpb24sIHRoaXMgbXVzdCBiZVxuICogYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgc2hhcGUgYXMgYGNvbWJpbmVSZWR1Y2Vyc2Aga2V5cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZW5oYW5jZXJdIFRoZSBzdG9yZSBlbmhhbmNlci4gWW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgaXRcbiAqIHRvIGVuaGFuY2UgdGhlIHN0b3JlIHdpdGggdGhpcmQtcGFydHkgY2FwYWJpbGl0aWVzIHN1Y2ggYXMgbWlkZGxld2FyZSxcbiAqIHRpbWUgdHJhdmVsLCBwZXJzaXN0ZW5jZSwgZXRjLiBUaGUgb25seSBzdG9yZSBlbmhhbmNlciB0aGF0IHNoaXBzIHdpdGggUmVkdXhcbiAqIGlzIGBhcHBseU1pZGRsZXdhcmUoKWAuXG4gKlxuICogQHJldHVybnMge1N0b3JlfSBBIFJlZHV4IHN0b3JlIHRoYXQgbGV0cyB5b3UgcmVhZCB0aGUgc3RhdGUsIGRpc3BhdGNoIGFjdGlvbnNcbiAqIGFuZCBzdWJzY3JpYmUgdG8gY2hhbmdlcy5cbiAqL1xuXG52YXIgbGVnYWN5X2NyZWF0ZVN0b3JlID0gY3JlYXRlU3RvcmU7XG5cbi8qKlxuICogUHJpbnRzIGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cblxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXG4gICAgLy8gXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1wiIGluIHlvdXIgY29uc29sZSxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxufVxuXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xuICB2YXIgcmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XG4gIHZhciBhcmd1bWVudE5hbWUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVzLklOSVQgPyAncHJlbG9hZGVkU3RhdGUgYXJndW1lbnQgcGFzc2VkIHRvIGNyZWF0ZVN0b3JlJyA6ICdwcmV2aW91cyBzdGF0ZSByZWNlaXZlZCBieSB0aGUgcmVkdWNlcic7XG5cbiAgaWYgKHJlZHVjZXJLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnU3RvcmUgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHJlZHVjZXIuIE1ha2Ugc3VyZSB0aGUgYXJndW1lbnQgcGFzc2VkICcgKyAndG8gY29tYmluZVJlZHVjZXJzIGlzIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIHJlZHVjZXJzLic7XG4gIH1cblxuICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXRTdGF0ZSkpIHtcbiAgICByZXR1cm4gXCJUaGUgXCIgKyBhcmd1bWVudE5hbWUgKyBcIiBoYXMgdW5leHBlY3RlZCB0eXBlIG9mIFxcXCJcIiArIGtpbmRPZihpbnB1dFN0YXRlKSArIFwiXFxcIi4gRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBcIiArIChcImtleXM6IFxcXCJcIiArIHJlZHVjZXJLZXlzLmpvaW4oJ1wiLCBcIicpICsgXCJcXFwiXCIpO1xuICB9XG5cbiAgdmFyIHVuZXhwZWN0ZWRLZXlzID0gT2JqZWN0LmtleXMoaW5wdXRTdGF0ZSkuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gIXJlZHVjZXJzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldO1xuICB9KTtcbiAgdW5leHBlY3RlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xuICB9KTtcbiAgaWYgKGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZXMuUkVQTEFDRSkgcmV0dXJuO1xuXG4gIGlmICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIFwiVW5leHBlY3RlZCBcIiArICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gJ2tleXMnIDogJ2tleScpICsgXCIgXCIgKyAoXCJcXFwiXCIgKyB1bmV4cGVjdGVkS2V5cy5qb2luKCdcIiwgXCInKSArIFwiXFxcIiBmb3VuZCBpbiBcIiArIGFyZ3VtZW50TmFtZSArIFwiLiBcIikgKyBcIkV4cGVjdGVkIHRvIGZpbmQgb25lIG9mIHRoZSBrbm93biByZWR1Y2VyIGtleXMgaW5zdGVhZDogXCIgKyAoXCJcXFwiXCIgKyByZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKSArIFwiXFxcIi4gVW5leHBlY3RlZCBrZXlzIHdpbGwgYmUgaWdub3JlZC5cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0UmVkdWNlclNoYXBlKHJlZHVjZXJzKSB7XG4gIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IHJlZHVjZXIodW5kZWZpbmVkLCB7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5JTklUXG4gICAgfSk7XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEyKSA6IFwiVGhlIHNsaWNlIHJlZHVjZXIgZm9yIGtleSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gXCIgKyBcIklmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCBcIiArIFwiZXhwbGljaXRseSByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBcIiArIFwibm90IGJlIHVuZGVmaW5lZC4gSWYgeW91IGRvbid0IHdhbnQgdG8gc2V0IGEgdmFsdWUgZm9yIHRoaXMgcmVkdWNlciwgXCIgKyBcInlvdSBjYW4gdXNlIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVkdWNlcih1bmRlZmluZWQsIHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlBST0JFX1VOS05PV05fQUNUSU9OKClcbiAgICB9KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEzKSA6IFwiVGhlIHNsaWNlIHJlZHVjZXIgZm9yIGtleSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gXCIgKyAoXCJEb24ndCB0cnkgdG8gaGFuZGxlICdcIiArIEFjdGlvblR5cGVzLklOSVQgKyBcIicgb3Igb3RoZXIgYWN0aW9ucyBpbiBcXFwicmVkdXgvKlxcXCIgXCIpICsgXCJuYW1lc3BhY2UuIFRoZXkgYXJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4gSW5zdGVhZCwgeW91IG11c3QgcmV0dXJuIHRoZSBcIiArIFwiY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgXCIgKyBcImluIHdoaWNoIGNhc2UgeW91IG11c3QgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLCByZWdhcmRsZXNzIG9mIHRoZSBcIiArIFwiYWN0aW9uIHR5cGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLCBidXQgY2FuIGJlIG51bGwuXCIpO1xuICAgIH1cbiAgfSk7XG59XG4vKipcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxuICogcmVkdWNlciBmdW5jdGlvbi4gSXQgd2lsbCBjYWxsIGV2ZXJ5IGNoaWxkIHJlZHVjZXIsIGFuZCBnYXRoZXIgdGhlaXIgcmVzdWx0c1xuICogaW50byBhIHNpbmdsZSBzdGF0ZSBvYmplY3QsIHdob3NlIGtleXMgY29ycmVzcG9uZCB0byB0aGUga2V5cyBvZiB0aGUgcGFzc2VkXG4gKiByZWR1Y2VyIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVkdWNlcnMgQW4gb2JqZWN0IHdob3NlIHZhbHVlcyBjb3JyZXNwb25kIHRvIGRpZmZlcmVudFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxuICogaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXMgcmVkdWNlcnNgIHN5bnRheC4gVGhlIHJlZHVjZXJzIG1heSBuZXZlciByZXR1cm5cbiAqIHVuZGVmaW5lZCBmb3IgYW55IGFjdGlvbi4gSW5zdGVhZCwgdGhleSBzaG91bGQgcmV0dXJuIHRoZWlyIGluaXRpYWwgc3RhdGVcbiAqIGlmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueVxuICogdW5yZWNvZ25pemVkIGFjdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhlXG4gKiBwYXNzZWQgb2JqZWN0LCBhbmQgYnVpbGRzIGEgc3RhdGUgb2JqZWN0IHdpdGggdGhlIHNhbWUgc2hhcGUuXG4gKi9cblxuXG5mdW5jdGlvbiBjb21iaW5lUmVkdWNlcnMocmVkdWNlcnMpIHtcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xuICB2YXIgZmluYWxSZWR1Y2VycyA9IHt9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gcmVkdWNlcktleXNbaV07XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3YXJuaW5nKFwiTm8gcmVkdWNlciBwcm92aWRlZCBmb3Iga2V5IFxcXCJcIiArIGtleSArIFwiXFxcIlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGZpbmFsUmVkdWNlcnNba2V5XSA9IHJlZHVjZXJzW2tleV07XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpbmFsUmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhmaW5hbFJlZHVjZXJzKTsgLy8gVGhpcyBpcyB1c2VkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB3YXJuIGFib3V0IHRoZSBzYW1lXG4gIC8vIGtleXMgbXVsdGlwbGUgdGltZXMuXG5cbiAgdmFyIHVuZXhwZWN0ZWRLZXlDYWNoZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHt9O1xuICB9XG5cbiAgdmFyIHNoYXBlQXNzZXJ0aW9uRXJyb3I7XG5cbiAgdHJ5IHtcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaGFwZUFzc2VydGlvbkVycm9yID0gZTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBjb21iaW5hdGlvbihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgaWYgKHN0YXRlID09PSB2b2lkIDApIHtcbiAgICAgIHN0YXRlID0ge307XG4gICAgfVxuXG4gICAgaWYgKHNoYXBlQXNzZXJ0aW9uRXJyb3IpIHtcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciB3YXJuaW5nTWVzc2FnZSA9IGdldFVuZXhwZWN0ZWRTdGF0ZVNoYXBlV2FybmluZ01lc3NhZ2Uoc3RhdGUsIGZpbmFsUmVkdWNlcnMsIGFjdGlvbiwgdW5leHBlY3RlZEtleUNhY2hlKTtcblxuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XG4gICAgICAgIHdhcm5pbmcod2FybmluZ01lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIG5leHRTdGF0ZSA9IHt9O1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2tleSA9IGZpbmFsUmVkdWNlcktleXNbX2ldO1xuICAgICAgdmFyIHJlZHVjZXIgPSBmaW5hbFJlZHVjZXJzW19rZXldO1xuICAgICAgdmFyIHByZXZpb3VzU3RhdGVGb3JLZXkgPSBzdGF0ZVtfa2V5XTtcbiAgICAgIHZhciBuZXh0U3RhdGVGb3JLZXkgPSByZWR1Y2VyKHByZXZpb3VzU3RhdGVGb3JLZXksIGFjdGlvbik7XG5cbiAgICAgIGlmICh0eXBlb2YgbmV4dFN0YXRlRm9yS2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB2YXIgYWN0aW9uVHlwZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTQpIDogXCJXaGVuIGNhbGxlZCB3aXRoIGFuIGFjdGlvbiBvZiB0eXBlIFwiICsgKGFjdGlvblR5cGUgPyBcIlxcXCJcIiArIFN0cmluZyhhY3Rpb25UeXBlKSArIFwiXFxcIlwiIDogJyh1bmtub3duIHR5cGUpJykgKyBcIiwgdGhlIHNsaWNlIHJlZHVjZXIgZm9yIGtleSBcXFwiXCIgKyBfa2V5ICsgXCJcXFwiIHJldHVybmVkIHVuZGVmaW5lZC4gXCIgKyBcIlRvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gXCIgKyBcIklmIHlvdSB3YW50IHRoaXMgcmVkdWNlciB0byBob2xkIG5vIHZhbHVlLCB5b3UgY2FuIHJldHVybiBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLlwiKTtcbiAgICAgIH1cblxuICAgICAgbmV4dFN0YXRlW19rZXldID0gbmV4dFN0YXRlRm9yS2V5O1xuICAgICAgaGFzQ2hhbmdlZCA9IGhhc0NoYW5nZWQgfHwgbmV4dFN0YXRlRm9yS2V5ICE9PSBwcmV2aW91c1N0YXRlRm9yS2V5O1xuICAgIH1cblxuICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhzdGF0ZSkubGVuZ3RoO1xuICAgIHJldHVybiBoYXNDaGFuZ2VkID8gbmV4dFN0YXRlIDogc3RhdGU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoKGFjdGlvbkNyZWF0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH07XG59XG4vKipcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGFjdGlvbiBjcmVhdG9ycywgaW50byBhbiBvYmplY3Qgd2l0aCB0aGVcbiAqIHNhbWUga2V5cywgYnV0IHdpdGggZXZlcnkgZnVuY3Rpb24gd3JhcHBlZCBpbnRvIGEgYGRpc3BhdGNoYCBjYWxsIHNvIHRoZXlcbiAqIG1heSBiZSBpbnZva2VkIGRpcmVjdGx5LiBUaGlzIGlzIGp1c3QgYSBjb252ZW5pZW5jZSBtZXRob2QsIGFzIHlvdSBjYW4gY2FsbFxuICogYHN0b3JlLmRpc3BhdGNoKE15QWN0aW9uQ3JlYXRvcnMuZG9Tb21ldGhpbmcoKSlgIHlvdXJzZWxmIGp1c3QgZmluZS5cbiAqXG4gKiBGb3IgY29udmVuaWVuY2UsIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFjdGlvbiBjcmVhdG9yIGFzIHRoZSBmaXJzdCBhcmd1bWVudCxcbiAqIGFuZCBnZXQgYSBkaXNwYXRjaCB3cmFwcGVkIGZ1bmN0aW9uIGluIHJldHVybi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gYWN0aW9uQ3JlYXRvcnMgQW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdheSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXG4gKiBzeW50YXguIFlvdSBtYXkgYWxzbyBwYXNzIGEgc2luZ2xlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJlZHV4XG4gKiBzdG9yZS5cbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2JqZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxuICogZXZlcnkgYWN0aW9uIGNyZWF0b3Igd3JhcHBlZCBpbnRvIHRoZSBgZGlzcGF0Y2hgIGNhbGwuIElmIHlvdSBwYXNzZWQgYVxuICogZnVuY3Rpb24gYXMgYGFjdGlvbkNyZWF0b3JzYCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsc28gYmUgYSBzaW5nbGVcbiAqIGZ1bmN0aW9uLlxuICovXG5cblxuZnVuY3Rpb24gYmluZEFjdGlvbkNyZWF0b3JzKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCkge1xuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzICE9PSAnb2JqZWN0JyB8fCBhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE2KSA6IFwiYmluZEFjdGlvbkNyZWF0b3JzIGV4cGVjdGVkIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uLCBidXQgaW5zdGVhZCByZWNlaXZlZDogJ1wiICsga2luZE9mKGFjdGlvbkNyZWF0b3JzKSArIFwiJy4gXCIgKyBcIkRpZCB5b3Ugd3JpdGUgXFxcImltcG9ydCBBY3Rpb25DcmVhdG9ycyBmcm9tXFxcIiBpbnN0ZWFkIG9mIFxcXCJpbXBvcnQgKiBhcyBBY3Rpb25DcmVhdG9ycyBmcm9tXFxcIj9cIik7XG4gIH1cblxuICB2YXIgYm91bmRBY3Rpb25DcmVhdG9ycyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBhY3Rpb25DcmVhdG9ycykge1xuICAgIHZhciBhY3Rpb25DcmVhdG9yID0gYWN0aW9uQ3JlYXRvcnNba2V5XTtcblxuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYm91bmRBY3Rpb25DcmVhdG9yc1trZXldID0gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvciwgZGlzcGF0Y2gpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBib3VuZEFjdGlvbkNyZWF0b3JzO1xufVxuXG4vKipcbiAqIENvbXBvc2VzIHNpbmdsZS1hcmd1bWVudCBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LiBUaGUgcmlnaHRtb3N0XG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcbiAqIHRoZSByZXN1bHRpbmcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiBvYnRhaW5lZCBieSBjb21wb3NpbmcgdGhlIGFyZ3VtZW50IGZ1bmN0aW9uc1xuICogZnJvbSByaWdodCB0byBsZWZ0LiBGb3IgZXhhbXBsZSwgY29tcG9zZShmLCBnLCBoKSBpcyBpZGVudGljYWwgdG8gZG9pbmdcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxuICovXG5mdW5jdGlvbiBjb21wb3NlKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIHJldHVybiBhcmc7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZnVuY3NbMF07XG4gIH1cblxuICByZXR1cm4gZnVuY3MucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhKGIuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RvcmUgZW5oYW5jZXIgdGhhdCBhcHBsaWVzIG1pZGRsZXdhcmUgdG8gdGhlIGRpc3BhdGNoIG1ldGhvZFxuICogb2YgdGhlIFJlZHV4IHN0b3JlLiBUaGlzIGlzIGhhbmR5IGZvciBhIHZhcmlldHkgb2YgdGFza3MsIHN1Y2ggYXMgZXhwcmVzc2luZ1xuICogYXN5bmNocm9ub3VzIGFjdGlvbnMgaW4gYSBjb25jaXNlIG1hbm5lciwgb3IgbG9nZ2luZyBldmVyeSBhY3Rpb24gcGF5bG9hZC5cbiAqXG4gKiBTZWUgYHJlZHV4LXRodW5rYCBwYWNrYWdlIGFzIGFuIGV4YW1wbGUgb2YgdGhlIFJlZHV4IG1pZGRsZXdhcmUuXG4gKlxuICogQmVjYXVzZSBtaWRkbGV3YXJlIGlzIHBvdGVudGlhbGx5IGFzeW5jaHJvbm91cywgdGhpcyBzaG91bGQgYmUgdGhlIGZpcnN0XG4gKiBzdG9yZSBlbmhhbmNlciBpbiB0aGUgY29tcG9zaXRpb24gY2hhaW4uXG4gKlxuICogTm90ZSB0aGF0IGVhY2ggbWlkZGxld2FyZSB3aWxsIGJlIGdpdmVuIHRoZSBgZGlzcGF0Y2hgIGFuZCBgZ2V0U3RhdGVgIGZ1bmN0aW9uc1xuICogYXMgbmFtZWQgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IG1pZGRsZXdhcmVzIFRoZSBtaWRkbGV3YXJlIGNoYWluIHRvIGJlIGFwcGxpZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgc3RvcmUgZW5oYW5jZXIgYXBwbHlpbmcgdGhlIG1pZGRsZXdhcmUuXG4gKi9cblxuZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWlkZGxld2FyZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgbWlkZGxld2FyZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGNyZWF0ZVN0b3JlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdG9yZSA9IGNyZWF0ZVN0b3JlLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcblxuICAgICAgdmFyIF9kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNSkgOiAnRGlzcGF0Y2hpbmcgd2hpbGUgY29uc3RydWN0aW5nIHlvdXIgbWlkZGxld2FyZSBpcyBub3QgYWxsb3dlZC4gJyArICdPdGhlciBtaWRkbGV3YXJlIHdvdWxkIG5vdCBiZSBhcHBsaWVkIHRvIHRoaXMgZGlzcGF0Y2guJyk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgbWlkZGxld2FyZUFQSSA9IHtcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxuICAgICAgICBkaXNwYXRjaDogZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gICAgICAgICAgcmV0dXJuIF9kaXNwYXRjaC5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgY2hhaW4gPSBtaWRkbGV3YXJlcy5tYXAoZnVuY3Rpb24gKG1pZGRsZXdhcmUpIHtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XG4gICAgICB9KTtcbiAgICAgIF9kaXNwYXRjaCA9IGNvbXBvc2UuYXBwbHkodm9pZCAwLCBjaGFpbikoc3RvcmUuZGlzcGF0Y2gpO1xuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc3RvcmUpLCB7fSwge1xuICAgICAgICBkaXNwYXRjaDogX2Rpc3BhdGNoXG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG4vKlxuICogVGhpcyBpcyBhIGR1bW15IGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiBuYW1lIGhhcyBiZWVuIGFsdGVyZWQgYnkgbWluaWZpY2F0aW9uLlxuICogSWYgdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIG1pbmlmaWVkIGFuZCBOT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLCB3YXJuIHRoZSB1c2VyLlxuICovXG5cbmZ1bmN0aW9uIGlzQ3J1c2hlZCgpIHt9XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBpc0NydXNoZWQubmFtZSA9PT0gJ3N0cmluZycgJiYgaXNDcnVzaGVkLm5hbWUgIT09ICdpc0NydXNoZWQnKSB7XG4gIHdhcm5pbmcoJ1lvdSBhcmUgY3VycmVudGx5IHVzaW5nIG1pbmlmaWVkIGNvZGUgb3V0c2lkZSBvZiBOT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIuICcgKyAnVGhpcyBtZWFucyB0aGF0IHlvdSBhcmUgcnVubmluZyBhIHNsb3dlciBkZXZlbG9wbWVudCBidWlsZCBvZiBSZWR1eC4gJyArICdZb3UgY2FuIHVzZSBsb29zZS1lbnZpZnkgKGh0dHBzOi8vZ2l0aHViLmNvbS96ZXJ0b3NoL2xvb3NlLWVudmlmeSkgZm9yIGJyb3dzZXJpZnkgJyArICdvciBzZXR0aW5nIG1vZGUgdG8gcHJvZHVjdGlvbiBpbiB3ZWJwYWNrIChodHRwczovL3dlYnBhY2suanMub3JnL2NvbmNlcHRzL21vZGUvKSAnICsgJ3RvIGVuc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBjb2RlIGZvciB5b3VyIHByb2R1Y3Rpb24gYnVpbGQuJyk7XG59XG5cbmV4cG9ydCB7IEFjdGlvblR5cGVzIGFzIF9fRE9fTk9UX1VTRV9fQWN0aW9uVHlwZXMsIGFwcGx5TWlkZGxld2FyZSwgYmluZEFjdGlvbkNyZWF0b3JzLCBjb21iaW5lUmVkdWNlcnMsIGNvbXBvc2UsIGNyZWF0ZVN0b3JlLCBsZWdhY3lfY3JlYXRlU3RvcmUgfTtcbiIsIi8qKiBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIHBvdGVudGlhbCBcImV4dHJhIGFyZ3VtZW50XCIgdmFsdWUgdG8gYmUgaW5qZWN0ZWQgbGF0ZXIsXHJcbiAqIGFuZCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSB0aHVuayBtaWRkbGV3YXJlIHRoYXQgdXNlcyB0aGF0IHZhbHVlXHJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKGV4dHJhQXJndW1lbnQpIHtcbiAgLy8gU3RhbmRhcmQgUmVkdXggbWlkZGxld2FyZSBkZWZpbml0aW9uIHBhdHRlcm46XG4gIC8vIFNlZTogaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjd3JpdGluZy1jdXN0b20tbWlkZGxld2FyZVxuICB2YXIgbWlkZGxld2FyZSA9IGZ1bmN0aW9uIG1pZGRsZXdhcmUoX3JlZikge1xuICAgIHZhciBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXG4gICAgICAgIGdldFN0YXRlID0gX3JlZi5nZXRTdGF0ZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIC8vIFRoZSB0aHVuayBtaWRkbGV3YXJlIGxvb2tzIGZvciBhbnkgZnVuY3Rpb25zIHRoYXQgd2VyZSBwYXNzZWQgdG8gYHN0b3JlLmRpc3BhdGNoYC5cbiAgICAgICAgLy8gSWYgdGhpcyBcImFjdGlvblwiIGlzIHJlYWxseSBhIGZ1bmN0aW9uLCBjYWxsIGl0IGFuZCByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBJbmplY3QgdGhlIHN0b3JlJ3MgYGRpc3BhdGNoYCBhbmQgYGdldFN0YXRlYCBtZXRob2RzLCBhcyB3ZWxsIGFzIGFueSBcImV4dHJhIGFyZ1wiXG4gICAgICAgICAgcmV0dXJuIGFjdGlvbihkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhQXJndW1lbnQpO1xuICAgICAgICB9IC8vIE90aGVyd2lzZSwgcGFzcyB0aGUgYWN0aW9uIGRvd24gdGhlIG1pZGRsZXdhcmUgY2hhaW4gYXMgdXN1YWxcblxuXG4gICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIG1pZGRsZXdhcmU7XG59XG5cbnZhciB0aHVuayA9IGNyZWF0ZVRodW5rTWlkZGxld2FyZSgpOyAvLyBBdHRhY2ggdGhlIGZhY3RvcnkgZnVuY3Rpb24gc28gdXNlcnMgY2FuIGNyZWF0ZSBhIGN1c3RvbWl6ZWQgdmVyc2lvblxuLy8gd2l0aCB3aGF0ZXZlciBcImV4dHJhIGFyZ1wiIHRoZXkgd2FudCB0byBpbmplY3QgaW50byB0aGVpciB0aHVua3NcblxudGh1bmsud2l0aEV4dHJhQXJndW1lbnQgPSBjcmVhdGVUaHVua01pZGRsZXdhcmU7XG5leHBvcnQgZGVmYXVsdCB0aHVuazsiLCJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59O1xyXG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcclxuICAgICAgICB0b1tqXSA9IGZyb21baV07XHJcbiAgICByZXR1cm4gdG87XHJcbn07XHJcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XHJcbnZhciBfX2RlZlByb3BzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XHJcbnZhciBfX2dldE93blByb3BEZXNjcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xyXG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XHJcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcclxudmFyIF9fZGVmTm9ybWFsUHJvcCA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHsgcmV0dXJuIGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTsgfTtcclxudmFyIF9fc3ByZWFkVmFsdWVzID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcclxuICAgICAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXHJcbiAgICAgICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcclxuICAgIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2MgPSBfX2dldE93blByb3BTeW1ib2xzKGIpOyBfaSA8IF9jLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgcHJvcCA9IF9jW19pXTtcclxuICAgICAgICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxyXG4gICAgICAgICAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59O1xyXG52YXIgX19zcHJlYWRQcm9wcyA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBfX2RlZlByb3BzKGEsIF9fZ2V0T3duUHJvcERlc2NzKGIpKTsgfTtcclxudmFyIF9fYXN5bmMgPSBmdW5jdGlvbiAoX190aGlzLCBfX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHZhciBmdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLnRocm93KHZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHN0ZXAgPSBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5kb25lID8gcmVzb2x2ZSh4LnZhbHVlKSA6IFByb21pc2UucmVzb2x2ZSh4LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9O1xyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseShfX3RoaXMsIF9fYXJndW1lbnRzKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG4vLyBzcmMvaW5kZXgudHNcclxuaW1wb3J0IHsgZW5hYmxlRVM1IH0gZnJvbSBcImltbWVyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCJyZWR1eFwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIGRlZmF1bHQyLCBjdXJyZW50IGFzIGN1cnJlbnQyLCBmcmVlemUsIG9yaWdpbmFsLCBpc0RyYWZ0IGFzIGlzRHJhZnQ0IH0gZnJvbSBcImltbWVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yIGFzIGNyZWF0ZVNlbGVjdG9yMiB9IGZyb20gXCJyZXNlbGVjdFwiO1xyXG4vLyBzcmMvY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IudHNcclxuaW1wb3J0IHsgY3VycmVudCwgaXNEcmFmdCB9IGZyb20gXCJpbW1lclwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gXCJyZXNlbGVjdFwiO1xyXG52YXIgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICB2YXIgc2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvci5hcHBseSh2b2lkIDAsIGFyZ3MpO1xyXG4gICAgdmFyIHdyYXBwZWRTZWxlY3RvciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciByZXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgcmVzdFtfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaXNEcmFmdCh2YWx1ZSkgPyBjdXJyZW50KHZhbHVlKSA6IHZhbHVlXSwgcmVzdCkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiB3cmFwcGVkU2VsZWN0b3I7XHJcbn07XHJcbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xyXG5pbXBvcnQgeyBjcmVhdGVTdG9yZSwgY29tcG9zZSBhcyBjb21wb3NlMiwgYXBwbHlNaWRkbGV3YXJlLCBjb21iaW5lUmVkdWNlcnMgfSBmcm9tIFwicmVkdXhcIjtcclxuLy8gc3JjL2RldnRvb2xzRXh0ZW5zaW9uLnRzXHJcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tIFwicmVkdXhcIjtcclxudmFyIGNvbXBvc2VXaXRoRGV2VG9vbHMgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fIDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSBcIm9iamVjdFwiKVxyXG4gICAgICAgIHJldHVybiBjb21wb3NlO1xyXG4gICAgcmV0dXJuIGNvbXBvc2UuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxudmFyIGRldlRvb2xzRW5oYW5jZXIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vb3AyKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vb3AyO1xyXG4gICAgfTtcclxufTtcclxuLy8gc3JjL2lzUGxhaW5PYmplY3QudHNcclxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xyXG4gICAgaWYgKHByb3RvID09PSBudWxsKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgdmFyIGJhc2VQcm90byA9IHByb3RvO1xyXG4gICAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlUHJvdG8pICE9PSBudWxsKSB7XHJcbiAgICAgICAgYmFzZVByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGJhc2VQcm90byk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvdG8gPT09IGJhc2VQcm90bztcclxufVxyXG4vLyBzcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHNcclxuaW1wb3J0IHRodW5rTWlkZGxld2FyZSBmcm9tIFwicmVkdXgtdGh1bmtcIjtcclxuLy8gc3JjL3V0aWxzLnRzXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUsIHsgaXNEcmFmdGFibGUgfSBmcm9tIFwiaW1tZXJcIjtcclxuZnVuY3Rpb24gZ2V0VGltZU1lYXN1cmVVdGlscyhtYXhEZWxheSwgZm5OYW1lKSB7XHJcbiAgICB2YXIgZWxhcHNlZCA9IDA7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1lYXN1cmVUaW1lOiBmdW5jdGlvbiAoZm4pIHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgZWxhcHNlZCArPSBmaW5pc2hlZCAtIHN0YXJ0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdhcm5JZkV4Y2VlZGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGFwc2VkID4gbWF4RGVsYXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybihmbk5hbWUgKyBcIiB0b29rIFwiICsgZWxhcHNlZCArIFwibXMsIHdoaWNoIGlzIG1vcmUgdGhhbiB0aGUgd2FybmluZyB0aHJlc2hvbGQgb2YgXCIgKyBtYXhEZWxheSArIFwibXMuIFxcbklmIHlvdXIgc3RhdGUgb3IgYWN0aW9ucyBhcmUgdmVyeSBsYXJnZSwgeW91IG1heSB3YW50IHRvIGRpc2FibGUgdGhlIG1pZGRsZXdhcmUgYXMgaXQgbWlnaHQgY2F1c2UgdG9vIG11Y2ggb2YgYSBzbG93ZG93biBpbiBkZXZlbG9wbWVudCBtb2RlLiBTZWUgaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvZ2V0RGVmYXVsdE1pZGRsZXdhcmUgZm9yIGluc3RydWN0aW9ucy5cXG5JdCBpcyBkaXNhYmxlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcywgc28geW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdC5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbnZhciBNaWRkbGV3YXJlQXJyYXkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoTWlkZGxld2FyZUFycmF5LCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gTWlkZGxld2FyZUFycmF5KCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuYXBwbHkodGhpcywgYXJncykgfHwgdGhpcztcclxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIE1pZGRsZXdhcmVBcnJheS5wcm90b3R5cGUpO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNaWRkbGV3YXJlQXJyYXksIFN5bWJvbC5zcGVjaWVzLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBNaWRkbGV3YXJlQXJyYXk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgTWlkZGxld2FyZUFycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jb25jYXQuYXBwbHkodGhpcywgYXJyKTtcclxuICAgIH07XHJcbiAgICBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyclswXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyAoTWlkZGxld2FyZUFycmF5LmJpbmQuYXBwbHkoTWlkZGxld2FyZUFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnJbMF0uY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKE1pZGRsZXdhcmVBcnJheS5iaW5kLmFwcGx5KE1pZGRsZXdhcmVBcnJheSwgX19zcHJlYWRBcnJheShbdm9pZCAwXSwgYXJyLmNvbmNhdCh0aGlzKSkpKSgpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBNaWRkbGV3YXJlQXJyYXk7XHJcbn0oQXJyYXkpKTtcclxuZnVuY3Rpb24gZnJlZXplRHJhZnRhYmxlKHZhbCkge1xyXG4gICAgcmV0dXJuIGlzRHJhZnRhYmxlKHZhbCkgPyBjcmVhdGVOZXh0U3RhdGUodmFsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICB9KSA6IHZhbDtcclxufVxyXG4vLyBzcmMvaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzXHJcbnZhciBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XHJcbnZhciBwcmVmaXggPSBcIkludmFyaWFudCBmYWlsZWRcIjtcclxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xyXG4gICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpc1Byb2R1Y3Rpb24pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJlZml4KTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihwcmVmaXggKyBcIjogXCIgKyAobWVzc2FnZSB8fCBcIlwiKSk7XHJcbn1cclxuZnVuY3Rpb24gc3RyaW5naWZ5KG9iaiwgc2VyaWFsaXplciwgaW5kZW50LCBkZWN5Y2xlcikge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgZ2V0U2VyaWFsaXplKHNlcmlhbGl6ZXIsIGRlY3ljbGVyKSwgaW5kZW50KTtcclxufVxyXG5mdW5jdGlvbiBnZXRTZXJpYWxpemUoc2VyaWFsaXplciwgZGVjeWNsZXIpIHtcclxuICAgIHZhciBzdGFjayA9IFtdLCBrZXlzID0gW107XHJcbiAgICBpZiAoIWRlY3ljbGVyKVxyXG4gICAgICAgIGRlY3ljbGVyID0gZnVuY3Rpb24gKF8sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFja1swXSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJbQ2lyY3VsYXIgfl1cIjtcclxuICAgICAgICAgICAgcmV0dXJuIFwiW0NpcmN1bGFyIH4uXCIgKyBrZXlzLnNsaWNlKDAsIHN0YWNrLmluZGV4T2YodmFsdWUpKS5qb2luKFwiLlwiKSArIFwiXVwiO1xyXG4gICAgICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgdGhpc1BvcyA9IHN0YWNrLmluZGV4T2YodGhpcyk7XHJcbiAgICAgICAgICAgIH50aGlzUG9zID8gc3RhY2suc3BsaWNlKHRoaXNQb3MgKyAxKSA6IHN0YWNrLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIH50aGlzUG9zID8ga2V5cy5zcGxpY2UodGhpc1BvcywgSW5maW5pdHksIGtleSkgOiBrZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgaWYgKH5zdGFjay5pbmRleE9mKHZhbHVlKSlcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZGVjeWNsZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzdGFjay5wdXNoKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gc2VyaWFsaXplciA9PSBudWxsID8gdmFsdWUgOiBzZXJpYWxpemVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzSW1tdXRhYmxlRGVmYXVsdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PSBudWxsIHx8IE9iamVjdC5pc0Zyb3plbih2YWx1ZSk7XHJcbn1cclxuZnVuY3Rpb24gdHJhY2tGb3JNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmopIHtcclxuICAgIHZhciB0cmFja2VkUHJvcGVydGllcyA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaik7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRldGVjdE11dGF0aW9uczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgdHJhY2tlZFByb3BlcnRpZXMsIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmosIHBhdGgpIHtcclxuICAgIGlmIChpZ25vcmVQYXRocyA9PT0gdm9pZCAwKSB7IGlnbm9yZVBhdGhzID0gW107IH1cclxuICAgIGlmIChwYXRoID09PSB2b2lkIDApIHsgcGF0aCA9IFwiXCI7IH1cclxuICAgIHZhciB0cmFja2VkID0geyB2YWx1ZTogb2JqIH07XHJcbiAgICBpZiAoIWlzSW1tdXRhYmxlKG9iaikpIHtcclxuICAgICAgICB0cmFja2VkLmNoaWxkcmVuID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICAgICAgaWYgKGlnbm9yZVBhdGhzLmxlbmd0aCAmJiBpZ25vcmVQYXRocy5pbmRleE9mKGNoaWxkUGF0aCkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cmFja2VkLmNoaWxkcmVuW2tleV0gPSB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmpba2V5XSwgY2hpbGRQYXRoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJhY2tlZDtcclxufVxyXG5mdW5jdGlvbiBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCB0cmFja2VkUHJvcGVydHksIG9iaiwgc2FtZVBhcmVudFJlZiwgcGF0aCkge1xyXG4gICAgaWYgKGlnbm9yZVBhdGhzID09PSB2b2lkIDApIHsgaWdub3JlUGF0aHMgPSBbXTsgfVxyXG4gICAgaWYgKHNhbWVQYXJlbnRSZWYgPT09IHZvaWQgMCkgeyBzYW1lUGFyZW50UmVmID0gZmFsc2U7IH1cclxuICAgIGlmIChwYXRoID09PSB2b2lkIDApIHsgcGF0aCA9IFwiXCI7IH1cclxuICAgIHZhciBwcmV2T2JqID0gdHJhY2tlZFByb3BlcnR5ID8gdHJhY2tlZFByb3BlcnR5LnZhbHVlIDogdm9pZCAwO1xyXG4gICAgdmFyIHNhbWVSZWYgPSBwcmV2T2JqID09PSBvYmo7XHJcbiAgICBpZiAoc2FtZVBhcmVudFJlZiAmJiAhc2FtZVJlZiAmJiAhTnVtYmVyLmlzTmFOKG9iaikpIHtcclxuICAgICAgICByZXR1cm4geyB3YXNNdXRhdGVkOiB0cnVlLCBwYXRoOiBwYXRoIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaXNJbW11dGFibGUocHJldk9iaikgfHwgaXNJbW11dGFibGUob2JqKSkge1xyXG4gICAgICAgIHJldHVybiB7IHdhc011dGF0ZWQ6IGZhbHNlIH07XHJcbiAgICB9XHJcbiAgICB2YXIga2V5c1RvRGV0ZWN0ID0ge307XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuKSB7XHJcbiAgICAgICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgIGtleXNUb0RldGVjdFtrZXldID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBrZXlzVG9EZXRlY3QpIHtcclxuICAgICAgICB2YXIgY2hpbGRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICBpZiAoaWdub3JlUGF0aHMubGVuZ3RoICYmIGlnbm9yZVBhdGhzLmluZGV4T2YoY2hpbGRQYXRoKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXN1bHQgPSBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCB0cmFja2VkUHJvcGVydHkuY2hpbGRyZW5ba2V5XSwgb2JqW2tleV0sIHNhbWVSZWYsIGNoaWxkUGF0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdC53YXNNdXRhdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIG5leHQoYWN0aW9uKTsgfTsgfTsgfTtcclxuICAgIH1cclxuICAgIHZhciBfYyA9IG9wdGlvbnMuaXNJbW11dGFibGUsIGlzSW1tdXRhYmxlID0gX2MgPT09IHZvaWQgMCA/IGlzSW1tdXRhYmxlRGVmYXVsdCA6IF9jLCBpZ25vcmVkUGF0aHMgPSBvcHRpb25zLmlnbm9yZWRQYXRocywgX2QgPSBvcHRpb25zLndhcm5BZnRlciwgd2FybkFmdGVyID0gX2QgPT09IHZvaWQgMCA/IDMyIDogX2QsIGlnbm9yZSA9IG9wdGlvbnMuaWdub3JlO1xyXG4gICAgaWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzIHx8IGlnbm9yZTtcclxuICAgIHZhciB0cmFjayA9IHRyYWNrRm9yTXV0YXRpb25zLmJpbmQobnVsbCwgaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocyk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgdmFyIGdldFN0YXRlID0gX2MuZ2V0U3RhdGU7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0U3RhdGUoKTtcclxuICAgICAgICB2YXIgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcclxuICAgICAgICB2YXIgcmVzdWx0O1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyh3YXJuQWZ0ZXIsIFwiSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlXCIpO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdGUgPSBnZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpbnZhcmlhbnQoIXJlc3VsdC53YXNNdXRhdGVkLCBcIkEgc3RhdGUgbXV0YXRpb24gd2FzIGRldGVjdGVkIGJldHdlZW4gZGlzcGF0Y2hlcywgaW4gdGhlIHBhdGggJ1wiICsgKHJlc3VsdC5wYXRoIHx8IFwiXCIpICsgXCInLiAgVGhpcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgZGlzcGF0Y2hlZEFjdGlvbiA9IG5leHQoYWN0aW9uKTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyYWNrZXIuZGV0ZWN0TXV0YXRpb25zKCk7XHJcbiAgICAgICAgICAgICAgICB0cmFja2VyID0gdHJhY2soc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lndhc011dGF0ZWQgJiYgaW52YXJpYW50KCFyZXN1bHQud2FzTXV0YXRlZCwgXCJBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBpbnNpZGUgYSBkaXNwYXRjaCwgaW4gdGhlIHBhdGg6IFwiICsgKHJlc3VsdC5wYXRoIHx8IFwiXCIpICsgXCIuIFRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoZSBhY3Rpb24gXCIgKyBzdHJpbmdpZnkoYWN0aW9uKSArIFwiLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpc3BhdGNoZWRBY3Rpb247XHJcbiAgICAgICAgfTsgfTtcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50c1xyXG5mdW5jdGlvbiBpc1BsYWluKHZhbCkge1xyXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xyXG4gICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgfHwgdHlwZSA9PT0gXCJudW1iZXJcIiB8fCBBcnJheS5pc0FycmF5KHZhbCkgfHwgaXNQbGFpbk9iamVjdCh2YWwpO1xyXG59XHJcbmZ1bmN0aW9uIGZpbmROb25TZXJpYWxpemFibGVWYWx1ZSh2YWx1ZSwgcGF0aCwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocykge1xyXG4gICAgaWYgKHBhdGggPT09IHZvaWQgMCkgeyBwYXRoID0gXCJcIjsgfVxyXG4gICAgaWYgKGlzU2VyaWFsaXphYmxlID09PSB2b2lkIDApIHsgaXNTZXJpYWxpemFibGUgPSBpc1BsYWluOyB9XHJcbiAgICBpZiAoaWdub3JlZFBhdGhzID09PSB2b2lkIDApIHsgaWdub3JlZFBhdGhzID0gW107IH1cclxuICAgIHZhciBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZTtcclxuICAgIGlmICghaXNTZXJpYWxpemFibGUodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAga2V5UGF0aDogcGF0aCB8fCBcIjxyb290PlwiLFxyXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHZhciBlbnRyaWVzID0gZ2V0RW50cmllcyAhPSBudWxsID8gZ2V0RW50cmllcyh2YWx1ZSkgOiBPYmplY3QuZW50cmllcyh2YWx1ZSk7XHJcbiAgICB2YXIgaGFzSWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzLmxlbmd0aCA+IDA7XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIGVudHJpZXNfMSA9IGVudHJpZXM7IF9pIDwgZW50cmllc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHZhciBfYyA9IGVudHJpZXNfMVtfaV0sIGtleSA9IF9jWzBdLCBuZXN0ZWRWYWx1ZSA9IF9jWzFdO1xyXG4gICAgICAgIHZhciBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICBpZiAoaGFzSWdub3JlZFBhdGhzICYmIGlnbm9yZWRQYXRocy5pbmRleE9mKG5lc3RlZFBhdGgpID49IDApIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNTZXJpYWxpemFibGUobmVzdGVkVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBrZXlQYXRoOiBuZXN0ZWRQYXRoLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IG5lc3RlZFZhbHVlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgZm91bmROZXN0ZWRTZXJpYWxpemFibGUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUobmVzdGVkVmFsdWUsIG5lc3RlZFBhdGgsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkUGF0aHMpO1xyXG4gICAgICAgICAgICBpZiAoZm91bmROZXN0ZWRTZXJpYWxpemFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIG5leHQoYWN0aW9uKTsgfTsgfTsgfTtcclxuICAgIH1cclxuICAgIHZhciBfYyA9IG9wdGlvbnMuaXNTZXJpYWxpemFibGUsIGlzU2VyaWFsaXphYmxlID0gX2MgPT09IHZvaWQgMCA/IGlzUGxhaW4gOiBfYywgZ2V0RW50cmllcyA9IG9wdGlvbnMuZ2V0RW50cmllcywgX2QgPSBvcHRpb25zLmlnbm9yZWRBY3Rpb25zLCBpZ25vcmVkQWN0aW9ucyA9IF9kID09PSB2b2lkIDAgPyBbXSA6IF9kLCBfZSA9IG9wdGlvbnMuaWdub3JlZEFjdGlvblBhdGhzLCBpZ25vcmVkQWN0aW9uUGF0aHMgPSBfZSA9PT0gdm9pZCAwID8gW1wibWV0YS5hcmdcIiwgXCJtZXRhLmJhc2VRdWVyeU1ldGFcIl0gOiBfZSwgX2YgPSBvcHRpb25zLmlnbm9yZWRQYXRocywgaWdub3JlZFBhdGhzID0gX2YgPT09IHZvaWQgMCA/IFtdIDogX2YsIF9nID0gb3B0aW9ucy53YXJuQWZ0ZXIsIHdhcm5BZnRlciA9IF9nID09PSB2b2lkIDAgPyAzMiA6IF9nLCBfaCA9IG9wdGlvbnMuaWdub3JlU3RhdGUsIGlnbm9yZVN0YXRlID0gX2ggPT09IHZvaWQgMCA/IGZhbHNlIDogX2gsIF9qID0gb3B0aW9ucy5pZ25vcmVBY3Rpb25zLCBpZ25vcmVBY3Rpb25zID0gX2ogPT09IHZvaWQgMCA/IGZhbHNlIDogX2o7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0b3JlQVBJKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXh0KGFjdGlvbik7XHJcbiAgICAgICAgdmFyIG1lYXN1cmVVdGlscyA9IGdldFRpbWVNZWFzdXJlVXRpbHMod2FybkFmdGVyLCBcIlNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZVwiKTtcclxuICAgICAgICBpZiAoIWlnbm9yZUFjdGlvbnMgJiYgIShpZ25vcmVkQWN0aW9ucy5sZW5ndGggJiYgaWdub3JlZEFjdGlvbnMuaW5kZXhPZihhY3Rpb24udHlwZSkgIT09IC0xKSkge1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoYWN0aW9uLCBcIlwiLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZEFjdGlvblBhdGhzKTtcclxuICAgICAgICAgICAgICAgIGlmIChmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleVBhdGggPSBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlLmtleVBhdGgsIHZhbHVlID0gZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQSBub24tc2VyaWFsaXphYmxlIHZhbHVlIHdhcyBkZXRlY3RlZCBpbiBhbiBhY3Rpb24sIGluIHRoZSBwYXRoOiBgXCIgKyBrZXlQYXRoICsgXCJgLiBWYWx1ZTpcIiwgdmFsdWUsIFwiXFxuVGFrZSBhIGxvb2sgYXQgdGhlIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGFjdGlvbjogXCIsIGFjdGlvbiwgXCJcXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9hY3Rpb25zI3doeS1zaG91bGQtdHlwZS1iZS1hLXN0cmluZy1vci1hdC1sZWFzdC1zZXJpYWxpemFibGUtd2h5LXNob3VsZC1teS1hY3Rpb24tdHlwZXMtYmUtY29uc3RhbnRzKVwiLCBcIlxcbihUbyBhbGxvdyBub24tc2VyaWFsaXphYmxlIHZhbHVlcyBzZWU6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvdXNhZ2UvdXNhZ2UtZ3VpZGUjd29ya2luZy13aXRoLW5vbi1zZXJpYWxpemFibGUtZGF0YSlcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlnbm9yZVN0YXRlKSB7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdG9yZUFQSS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShzdGF0ZSwgXCJcIiwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleVBhdGggPSBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUua2V5UGF0aCwgdmFsdWUgPSBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkEgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZSB3YXMgZGV0ZWN0ZWQgaW4gdGhlIHN0YXRlLCBpbiB0aGUgcGF0aDogYFwiICsga2V5UGF0aCArIFwiYC4gVmFsdWU6XCIsIHZhbHVlLCBcIlxcblRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoaXMgYWN0aW9uIHR5cGU6IFwiICsgYWN0aW9uLnR5cGUgKyBcIi5cXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9vcmdhbml6aW5nLXN0YXRlI2Nhbi1pLXB1dC1mdW5jdGlvbnMtcHJvbWlzZXMtb3Itb3RoZXItbm9uLXNlcmlhbGl6YWJsZS1pdGVtcy1pbi1teS1zdG9yZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07IH07IH07XHJcbn1cclxuLy8gc3JjL2dldERlZmF1bHRNaWRkbGV3YXJlLnRzXHJcbmZ1bmN0aW9uIGlzQm9vbGVhbih4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwiYm9vbGVhblwiO1xyXG59XHJcbmZ1bmN0aW9uIGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmUoKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdE1pZGRsZXdhcmUob3B0aW9ucyk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICB2YXIgX2MgPSBvcHRpb25zLnRodW5rLCB0aHVuayA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIF9kID0gb3B0aW9ucy5pbW11dGFibGVDaGVjaywgaW1tdXRhYmxlQ2hlY2sgPSBfZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9kLCBfZSA9IG9wdGlvbnMuc2VyaWFsaXphYmxlQ2hlY2ssIHNlcmlhbGl6YWJsZUNoZWNrID0gX2UgPT09IHZvaWQgMCA/IHRydWUgOiBfZTtcclxuICAgIHZhciBtaWRkbGV3YXJlQXJyYXkgPSBuZXcgTWlkZGxld2FyZUFycmF5KCk7XHJcbiAgICBpZiAodGh1bmspIHtcclxuICAgICAgICBpZiAoaXNCb29sZWFuKHRodW5rKSkge1xyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaCh0aHVua01pZGRsZXdhcmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2godGh1bmtNaWRkbGV3YXJlLndpdGhFeHRyYUFyZ3VtZW50KHRodW5rLmV4dHJhQXJndW1lbnQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgaWYgKGltbXV0YWJsZUNoZWNrKSB7XHJcbiAgICAgICAgICAgIHZhciBpbW11dGFibGVPcHRpb25zID0ge307XHJcbiAgICAgICAgICAgIGlmICghaXNCb29sZWFuKGltbXV0YWJsZUNoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgaW1tdXRhYmxlT3B0aW9ucyA9IGltbXV0YWJsZUNoZWNrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1pZGRsZXdhcmVBcnJheS51bnNoaWZ0KGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShpbW11dGFibGVPcHRpb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXJpYWxpemFibGVDaGVjaykge1xyXG4gICAgICAgICAgICB2YXIgc2VyaWFsaXphYmxlT3B0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoIWlzQm9vbGVhbihzZXJpYWxpemFibGVDaGVjaykpIHtcclxuICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZU9wdGlvbnMgPSBzZXJpYWxpemFibGVDaGVjaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaChjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoc2VyaWFsaXphYmxlT3B0aW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtaWRkbGV3YXJlQXJyYXk7XHJcbn1cclxuLy8gc3JjL2NvbmZpZ3VyZVN0b3JlLnRzXHJcbnZhciBJU19QUk9EVUNUSU9OID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiO1xyXG5mdW5jdGlvbiBjb25maWd1cmVTdG9yZShvcHRpb25zKSB7XHJcbiAgICB2YXIgY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlID0gY3VycnlHZXREZWZhdWx0TWlkZGxld2FyZSgpO1xyXG4gICAgdmFyIF9jID0gb3B0aW9ucyB8fCB7fSwgX2QgPSBfYy5yZWR1Y2VyLCByZWR1Y2VyID0gX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLCBfZSA9IF9jLm1pZGRsZXdhcmUsIG1pZGRsZXdhcmUgPSBfZSA9PT0gdm9pZCAwID8gY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKCkgOiBfZSwgX2YgPSBfYy5kZXZUb29scywgZGV2VG9vbHMgPSBfZiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9mLCBfZyA9IF9jLnByZWxvYWRlZFN0YXRlLCBwcmVsb2FkZWRTdGF0ZSA9IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZywgX2ggPSBfYy5lbmhhbmNlcnMsIGVuaGFuY2VycyA9IF9oID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaDtcclxuICAgIHZhciByb290UmVkdWNlcjtcclxuICAgIGlmICh0eXBlb2YgcmVkdWNlciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgcm9vdFJlZHVjZXIgPSByZWR1Y2VyO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChyZWR1Y2VyKSkge1xyXG4gICAgICAgIHJvb3RSZWR1Y2VyID0gY29tYmluZVJlZHVjZXJzKHJlZHVjZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJlZHVjZXJcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LCBhbmQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGNvbWJpbmVSZWR1Y2VycycpO1xyXG4gICAgfVxyXG4gICAgdmFyIGZpbmFsTWlkZGxld2FyZSA9IG1pZGRsZXdhcmU7XHJcbiAgICBpZiAodHlwZW9mIGZpbmFsTWlkZGxld2FyZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgZmluYWxNaWRkbGV3YXJlID0gZmluYWxNaWRkbGV3YXJlKGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSk7XHJcbiAgICAgICAgaWYgKCFJU19QUk9EVUNUSU9OICYmICFBcnJheS5pc0FycmF5KGZpbmFsTWlkZGxld2FyZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwid2hlbiB1c2luZyBhIG1pZGRsZXdhcmUgYnVpbGRlciBmdW5jdGlvbiwgYW4gYXJyYXkgb2YgbWlkZGxld2FyZSBtdXN0IGJlIHJldHVybmVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghSVNfUFJPRFVDVElPTiAmJiBmaW5hbE1pZGRsZXdhcmUuc29tZShmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gdHlwZW9mIGl0ZW0gIT09IFwiZnVuY3Rpb25cIjsgfSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlYWNoIG1pZGRsZXdhcmUgcHJvdmlkZWQgdG8gY29uZmlndXJlU3RvcmUgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xyXG4gICAgfVxyXG4gICAgdmFyIG1pZGRsZXdhcmVFbmhhbmNlciA9IGFwcGx5TWlkZGxld2FyZS5hcHBseSh2b2lkIDAsIGZpbmFsTWlkZGxld2FyZSk7XHJcbiAgICB2YXIgZmluYWxDb21wb3NlID0gY29tcG9zZTI7XHJcbiAgICBpZiAoZGV2VG9vbHMpIHtcclxuICAgICAgICBmaW5hbENvbXBvc2UgPSBjb21wb3NlV2l0aERldlRvb2xzKF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICAgICAgdHJhY2U6ICFJU19QUk9EVUNUSU9OXHJcbiAgICAgICAgfSwgdHlwZW9mIGRldlRvb2xzID09PSBcIm9iamVjdFwiICYmIGRldlRvb2xzKSk7XHJcbiAgICB9XHJcbiAgICB2YXIgc3RvcmVFbmhhbmNlcnMgPSBbbWlkZGxld2FyZUVuaGFuY2VyXTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVuaGFuY2VycykpIHtcclxuICAgICAgICBzdG9yZUVuaGFuY2VycyA9IF9fc3ByZWFkQXJyYXkoW21pZGRsZXdhcmVFbmhhbmNlcl0sIGVuaGFuY2Vycyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZW5oYW5jZXJzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBzdG9yZUVuaGFuY2VycyA9IGVuaGFuY2VycyhzdG9yZUVuaGFuY2Vycyk7XHJcbiAgICB9XHJcbiAgICB2YXIgY29tcG9zZWRFbmhhbmNlciA9IGZpbmFsQ29tcG9zZS5hcHBseSh2b2lkIDAsIHN0b3JlRW5oYW5jZXJzKTtcclxuICAgIHJldHVybiBjcmVhdGVTdG9yZShyb290UmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGNvbXBvc2VkRW5oYW5jZXIpO1xyXG59XHJcbi8vIHNyYy9jcmVhdGVBY3Rpb24udHNcclxuZnVuY3Rpb24gY3JlYXRlQWN0aW9uKHR5cGUsIHByZXBhcmVBY3Rpb24pIHtcclxuICAgIGZ1bmN0aW9uIGFjdGlvbkNyZWF0b3IoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcmVwYXJlQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhciBwcmVwYXJlZCA9IHByZXBhcmVBY3Rpb24uYXBwbHkodm9pZCAwLCBhcmdzKTtcclxuICAgICAgICAgICAgaWYgKCFwcmVwYXJlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJlcGFyZUFjdGlvbiBkaWQgbm90IHJldHVybiBhbiBvYmplY3RcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBwcmVwYXJlZC5wYXlsb2FkXHJcbiAgICAgICAgICAgIH0sIFwibWV0YVwiIGluIHByZXBhcmVkICYmIHsgbWV0YTogcHJlcGFyZWQubWV0YSB9KSwgXCJlcnJvclwiIGluIHByZXBhcmVkICYmIHsgZXJyb3I6IHByZXBhcmVkLmVycm9yIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0eXBlOiB0eXBlLCBwYXlsb2FkOiBhcmdzWzBdIH07XHJcbiAgICB9XHJcbiAgICBhY3Rpb25DcmVhdG9yLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJcIiArIHR5cGU7IH07XHJcbiAgICBhY3Rpb25DcmVhdG9yLnR5cGUgPSB0eXBlO1xyXG4gICAgYWN0aW9uQ3JlYXRvci5tYXRjaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGFjdGlvbi50eXBlID09PSB0eXBlOyB9O1xyXG4gICAgcmV0dXJuIGFjdGlvbkNyZWF0b3I7XHJcbn1cclxuZnVuY3Rpb24gaXNGU0EoYWN0aW9uKSB7XHJcbiAgICByZXR1cm4gaXNQbGFpbk9iamVjdChhY3Rpb24pICYmIHR5cGVvZiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBPYmplY3Qua2V5cyhhY3Rpb24pLmV2ZXJ5KGlzVmFsaWRLZXkpO1xyXG59XHJcbmZ1bmN0aW9uIGlzVmFsaWRLZXkoa2V5KSB7XHJcbiAgICByZXR1cm4gW1widHlwZVwiLCBcInBheWxvYWRcIiwgXCJlcnJvclwiLCBcIm1ldGFcIl0uaW5kZXhPZihrZXkpID4gLTE7XHJcbn1cclxuZnVuY3Rpb24gZ2V0VHlwZShhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICByZXR1cm4gXCJcIiArIGFjdGlvbkNyZWF0b3I7XHJcbn1cclxuLy8gc3JjL2NyZWF0ZVJlZHVjZXIudHNcclxuaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZTIsIHsgaXNEcmFmdCBhcyBpc0RyYWZ0MiwgaXNEcmFmdGFibGUgYXMgaXNEcmFmdGFibGUyIH0gZnJvbSBcImltbWVyXCI7XHJcbi8vIHNyYy9tYXBCdWlsZGVycy50c1xyXG5mdW5jdGlvbiBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhidWlsZGVyQ2FsbGJhY2spIHtcclxuICAgIHZhciBhY3Rpb25zTWFwID0ge307XHJcbiAgICB2YXIgYWN0aW9uTWF0Y2hlcnMgPSBbXTtcclxuICAgIHZhciBkZWZhdWx0Q2FzZVJlZHVjZXI7XHJcbiAgICB2YXIgYnVpbGRlciA9IHtcclxuICAgICAgICBhZGRDYXNlOiBmdW5jdGlvbiAodHlwZU9yQWN0aW9uQ3JlYXRvciwgcmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uTWF0Y2hlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGRNYXRjaGVyYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHR5cGVPckFjdGlvbkNyZWF0b3IgPT09IFwic3RyaW5nXCIgPyB0eXBlT3JBY3Rpb25DcmVhdG9yIDogdHlwZU9yQWN0aW9uQ3JlYXRvci50eXBlO1xyXG4gICAgICAgICAgICBpZiAodHlwZSBpbiBhY3Rpb25zTWFwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRDYXNlIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCB0d28gcmVkdWNlcnMgZm9yIHRoZSBzYW1lIGFjdGlvbiB0eXBlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFjdGlvbnNNYXBbdHlwZV0gPSByZWR1Y2VyO1xyXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkZE1hdGNoZXI6IGZ1bmN0aW9uIChtYXRjaGVyLCByZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRNYXRjaGVyYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFjdGlvbk1hdGNoZXJzLnB1c2goeyBtYXRjaGVyOiBtYXRjaGVyLCByZWR1Y2VyOiByZWR1Y2VyIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkZERlZmF1bHRDYXNlOiBmdW5jdGlvbiAocmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHRDYXNlUmVkdWNlciA9IHJlZHVjZXI7XHJcbiAgICAgICAgICAgIHJldHVybiBidWlsZGVyO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBidWlsZGVyQ2FsbGJhY2soYnVpbGRlcik7XHJcbiAgICByZXR1cm4gW2FjdGlvbnNNYXAsIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdO1xyXG59XHJcbi8vIHNyYy9jcmVhdGVSZWR1Y2VyLnRzXHJcbmZ1bmN0aW9uIGlzU3RhdGVGdW5jdGlvbih4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgbWFwT3JCdWlsZGVyQ2FsbGJhY2ssIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgIGlmIChhY3Rpb25NYXRjaGVycyA9PT0gdm9pZCAwKSB7IGFjdGlvbk1hdGNoZXJzID0gW107IH1cclxuICAgIHZhciBfYyA9IHR5cGVvZiBtYXBPckJ1aWxkZXJDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiID8gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sobWFwT3JCdWlsZGVyQ2FsbGJhY2spIDogW21hcE9yQnVpbGRlckNhbGxiYWNrLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyXSwgYWN0aW9uc01hcCA9IF9jWzBdLCBmaW5hbEFjdGlvbk1hdGNoZXJzID0gX2NbMV0sIGZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyID0gX2NbMl07XHJcbiAgICB2YXIgZ2V0SW5pdGlhbFN0YXRlO1xyXG4gICAgaWYgKGlzU3RhdGVGdW5jdGlvbihpbml0aWFsU3RhdGUpKSB7XHJcbiAgICAgICAgZ2V0SW5pdGlhbFN0YXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJlZXplRHJhZnRhYmxlKGluaXRpYWxTdGF0ZSgpKTsgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBmcm96ZW5Jbml0aWFsU3RhdGVfMSA9IGZyZWV6ZURyYWZ0YWJsZShpbml0aWFsU3RhdGUpO1xyXG4gICAgICAgIGdldEluaXRpYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyb3plbkluaXRpYWxTdGF0ZV8xOyB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHN0YXRlID09PSB2b2lkIDApIHsgc3RhdGUgPSBnZXRJbml0aWFsU3RhdGUoKTsgfVxyXG4gICAgICAgIHZhciBjYXNlUmVkdWNlcnMgPSBfX3NwcmVhZEFycmF5KFtcclxuICAgICAgICAgICAgYWN0aW9uc01hcFthY3Rpb24udHlwZV1cclxuICAgICAgICBdLCBmaW5hbEFjdGlvbk1hdGNoZXJzLmZpbHRlcihmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBfYy5tYXRjaGVyO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgICAgIH0pLm1hcChmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgdmFyIHJlZHVjZXIyID0gX2MucmVkdWNlcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZXIyO1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBpZiAoY2FzZVJlZHVjZXJzLmZpbHRlcihmdW5jdGlvbiAoY3IpIHsgcmV0dXJuICEhY3I7IH0pLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBjYXNlUmVkdWNlcnMgPSBbZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXJzLnJlZHVjZShmdW5jdGlvbiAocHJldmlvdXNTdGF0ZSwgY2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgaWYgKGNhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEcmFmdDIocHJldmlvdXNTdGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZHJhZnQgPSBwcmV2aW91c1N0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNEcmFmdGFibGUyKHByZXZpb3VzU3RhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNhc2VSZWR1Y2VyKHByZXZpb3VzU3RhdGUsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0YXRlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkEgY2FzZSByZWR1Y2VyIG9uIGEgbm9uLWRyYWZ0YWJsZSB2YWx1ZSBtdXN0IG5vdCByZXR1cm4gdW5kZWZpbmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZTIocHJldmlvdXNTdGF0ZSwgZnVuY3Rpb24gKGRyYWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcclxuICAgICAgICB9LCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICByZWR1Y2VyLmdldEluaXRpYWxTdGF0ZSA9IGdldEluaXRpYWxTdGF0ZTtcclxuICAgIHJldHVybiByZWR1Y2VyO1xyXG59XHJcbi8vIHNyYy9jcmVhdGVTbGljZS50c1xyXG5mdW5jdGlvbiBnZXRUeXBlMihzbGljZSwgYWN0aW9uS2V5KSB7XHJcbiAgICByZXR1cm4gc2xpY2UgKyBcIi9cIiArIGFjdGlvbktleTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTbGljZShvcHRpb25zKSB7XHJcbiAgICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZTtcclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImBuYW1lYCBpcyBhIHJlcXVpcmVkIG9wdGlvbiBmb3IgY3JlYXRlU2xpY2VcIik7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xyXG4gICAgICAgIGlmIChvcHRpb25zLmluaXRpYWxTdGF0ZSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UgbXVzdCBwcm92aWRlIGFuIGBpbml0aWFsU3RhdGVgIHZhbHVlIHRoYXQgaXMgbm90IGB1bmRlZmluZWRgLiBZb3UgbWF5IGhhdmUgbWlzc3BlbGxlZCBgaW5pdGlhbFN0YXRlYFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgaW5pdGlhbFN0YXRlID0gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbFN0YXRlID09IFwiZnVuY3Rpb25cIiA/IG9wdGlvbnMuaW5pdGlhbFN0YXRlIDogZnJlZXplRHJhZnRhYmxlKG9wdGlvbnMuaW5pdGlhbFN0YXRlKTtcclxuICAgIHZhciByZWR1Y2VycyA9IG9wdGlvbnMucmVkdWNlcnMgfHwge307XHJcbiAgICB2YXIgcmVkdWNlck5hbWVzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xyXG4gICAgdmFyIHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lID0ge307XHJcbiAgICB2YXIgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGUgPSB7fTtcclxuICAgIHZhciBhY3Rpb25DcmVhdG9ycyA9IHt9O1xyXG4gICAgcmVkdWNlck5hbWVzLmZvckVhY2goZnVuY3Rpb24gKHJlZHVjZXJOYW1lKSB7XHJcbiAgICAgICAgdmFyIG1heWJlUmVkdWNlcldpdGhQcmVwYXJlID0gcmVkdWNlcnNbcmVkdWNlck5hbWVdO1xyXG4gICAgICAgIHZhciB0eXBlID0gZ2V0VHlwZTIobmFtZSwgcmVkdWNlck5hbWUpO1xyXG4gICAgICAgIHZhciBjYXNlUmVkdWNlcjtcclxuICAgICAgICB2YXIgcHJlcGFyZUNhbGxiYWNrO1xyXG4gICAgICAgIGlmIChcInJlZHVjZXJcIiBpbiBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSkge1xyXG4gICAgICAgICAgICBjYXNlUmVkdWNlciA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnJlZHVjZXI7XHJcbiAgICAgICAgICAgIHByZXBhcmVDYWxsYmFjayA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnByZXBhcmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjYXNlUmVkdWNlciA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZVtyZWR1Y2VyTmFtZV0gPSBjYXNlUmVkdWNlcjtcclxuICAgICAgICBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZVt0eXBlXSA9IGNhc2VSZWR1Y2VyO1xyXG4gICAgICAgIGFjdGlvbkNyZWF0b3JzW3JlZHVjZXJOYW1lXSA9IHByZXBhcmVDYWxsYmFjayA/IGNyZWF0ZUFjdGlvbih0eXBlLCBwcmVwYXJlQ2FsbGJhY2spIDogY3JlYXRlQWN0aW9uKHR5cGUpO1xyXG4gICAgfSk7XHJcbiAgICBmdW5jdGlvbiBidWlsZFJlZHVjZXIoKSB7XHJcbiAgICAgICAgdmFyIF9jID0gdHlwZW9mIG9wdGlvbnMuZXh0cmFSZWR1Y2VycyA9PT0gXCJmdW5jdGlvblwiID8gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sob3B0aW9ucy5leHRyYVJlZHVjZXJzKSA6IFtvcHRpb25zLmV4dHJhUmVkdWNlcnNdLCBfZCA9IF9jWzBdLCBleHRyYVJlZHVjZXJzID0gX2QgPT09IHZvaWQgMCA/IHt9IDogX2QsIF9lID0gX2NbMV0sIGFjdGlvbk1hdGNoZXJzID0gX2UgPT09IHZvaWQgMCA/IFtdIDogX2UsIF9mID0gX2NbMl0sIGRlZmF1bHRDYXNlUmVkdWNlciA9IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZjtcclxuICAgICAgICB2YXIgZmluYWxDYXNlUmVkdWNlcnMgPSBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7fSwgZXh0cmFSZWR1Y2VycyksIHNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlKTtcclxuICAgICAgICByZXR1cm4gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIGZpbmFsQ2FzZVJlZHVjZXJzLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyKTtcclxuICAgIH1cclxuICAgIHZhciBfcmVkdWNlcjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICByZWR1Y2VyOiBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbikge1xyXG4gICAgICAgICAgICBpZiAoIV9yZWR1Y2VyKVxyXG4gICAgICAgICAgICAgICAgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIF9yZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWN0aW9uczogYWN0aW9uQ3JlYXRvcnMsXHJcbiAgICAgICAgY2FzZVJlZHVjZXJzOiBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZSxcclxuICAgICAgICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFfcmVkdWNlcilcclxuICAgICAgICAgICAgICAgIF9yZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVkdWNlci5nZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy9lbnRpdHlfc3RhdGUudHNcclxuZnVuY3Rpb24gZ2V0SW5pdGlhbEVudGl0eVN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBpZHM6IFtdLFxyXG4gICAgICAgIGVudGl0aWVzOiB7fVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5KCkge1xyXG4gICAgZnVuY3Rpb24gZ2V0SW5pdGlhbFN0YXRlKGFkZGl0aW9uYWxTdGF0ZSkge1xyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsU3RhdGUgPT09IHZvaWQgMCkgeyBhZGRpdGlvbmFsU3RhdGUgPSB7fTsgfVxyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGdldEluaXRpYWxFbnRpdHlTdGF0ZSgpLCBhZGRpdGlvbmFsU3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZ2V0SW5pdGlhbFN0YXRlOiBnZXRJbml0aWFsU3RhdGUgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvc3RhdGVfc2VsZWN0b3JzLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yc0ZhY3RvcnkoKSB7XHJcbiAgICBmdW5jdGlvbiBnZXRTZWxlY3RvcnMoc2VsZWN0U3RhdGUpIHtcclxuICAgICAgICB2YXIgc2VsZWN0SWRzID0gZnVuY3Rpb24gKHN0YXRlKSB7IHJldHVybiBzdGF0ZS5pZHM7IH07XHJcbiAgICAgICAgdmFyIHNlbGVjdEVudGl0aWVzID0gZnVuY3Rpb24gKHN0YXRlKSB7IHJldHVybiBzdGF0ZS5lbnRpdGllczsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0QWxsID0gY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0SWRzLCBzZWxlY3RFbnRpdGllcywgZnVuY3Rpb24gKGlkcywgZW50aXRpZXMpIHsgcmV0dXJuIGlkcy5tYXAoZnVuY3Rpb24gKGlkKSB7IHJldHVybiBlbnRpdGllc1tpZF07IH0pOyB9KTtcclxuICAgICAgICB2YXIgc2VsZWN0SWQgPSBmdW5jdGlvbiAoXywgaWQpIHsgcmV0dXJuIGlkOyB9O1xyXG4gICAgICAgIHZhciBzZWxlY3RCeUlkID0gZnVuY3Rpb24gKGVudGl0aWVzLCBpZCkgeyByZXR1cm4gZW50aXRpZXNbaWRdOyB9O1xyXG4gICAgICAgIHZhciBzZWxlY3RUb3RhbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdElkcywgZnVuY3Rpb24gKGlkcykgeyByZXR1cm4gaWRzLmxlbmd0aDsgfSk7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RTdGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0SWRzOiBzZWxlY3RJZHMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RFbnRpdGllczogc2VsZWN0RW50aXRpZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGw6IHNlbGVjdEFsbCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdFRvdGFsOiBzZWxlY3RUb3RhbCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdEVudGl0aWVzLCBzZWxlY3RJZCwgc2VsZWN0QnlJZClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RFbnRpdGllcyk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2VsZWN0SWRzOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0SWRzKSxcclxuICAgICAgICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyxcclxuICAgICAgICAgICAgc2VsZWN0QWxsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0QWxsKSxcclxuICAgICAgICAgICAgc2VsZWN0VG90YWw6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RUb3RhbCksXHJcbiAgICAgICAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcywgc2VsZWN0SWQsIHNlbGVjdEJ5SWQpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGdldFNlbGVjdG9yczogZ2V0U2VsZWN0b3JzIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3N0YXRlX2FkYXB0ZXIudHNcclxuaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZTMsIHsgaXNEcmFmdCBhcyBpc0RyYWZ0MyB9IGZyb20gXCJpbW1lclwiO1xyXG5mdW5jdGlvbiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3IobXV0YXRvcikge1xyXG4gICAgdmFyIG9wZXJhdG9yID0gY3JlYXRlU3RhdGVPcGVyYXRvcihmdW5jdGlvbiAoXywgc3RhdGUpIHsgcmV0dXJuIG11dGF0b3Ioc3RhdGUpOyB9KTtcclxuICAgIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb24oc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gb3BlcmF0b3Ioc3RhdGUsIHZvaWQgMCk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlT3BlcmF0b3IobXV0YXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9wZXJhdGlvbihzdGF0ZSwgYXJnKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnMikge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNGU0EoYXJnMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBydW5NdXRhdG9yID0gZnVuY3Rpb24gKGRyYWZ0KSB7XHJcbiAgICAgICAgICAgIGlmIChpc1BheWxvYWRBY3Rpb25Bcmd1bWVudChhcmcpKSB7XHJcbiAgICAgICAgICAgICAgICBtdXRhdG9yKGFyZy5wYXlsb2FkLCBkcmFmdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtdXRhdG9yKGFyZywgZHJhZnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoaXNEcmFmdDMoc3RhdGUpKSB7XHJcbiAgICAgICAgICAgIHJ1bk11dGF0b3Ioc3RhdGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTmV4dFN0YXRlMyhzdGF0ZSwgcnVuTXV0YXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvdXRpbHMudHNcclxuZnVuY3Rpb24gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKSB7XHJcbiAgICB2YXIga2V5ID0gc2VsZWN0SWQoZW50aXR5KTtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYga2V5ID09PSB2b2lkIDApIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJUaGUgZW50aXR5IHBhc3NlZCB0byB0aGUgYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCB1bmRlZmluZWQuXCIsIFwiWW91IHNob3VsZCBwcm9iYWJseSBwcm92aWRlIHlvdXIgb3duIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24uXCIsIFwiVGhlIGVudGl0eSB0aGF0IHdhcyBwYXNzZWQ6XCIsIGVudGl0eSwgXCJUaGUgYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbjpcIiwgc2VsZWN0SWQudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5O1xyXG59XHJcbmZ1bmN0aW9uIGVuc3VyZUVudGl0aWVzQXJyYXkoZW50aXRpZXMpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRpdGllcykpIHtcclxuICAgICAgICBlbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoZW50aXRpZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVudGl0aWVzO1xyXG59XHJcbmZ1bmN0aW9uIHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSkge1xyXG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgIHZhciBhZGRlZCA9IFtdO1xyXG4gICAgdmFyIHVwZGF0ZWQgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMCwgbmV3RW50aXRpZXNfMSA9IG5ld0VudGl0aWVzOyBfaSA8IG5ld0VudGl0aWVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzFbX2ldO1xyXG4gICAgICAgIHZhciBpZCA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XHJcbiAgICAgICAgaWYgKGlkIGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWQucHVzaCh7IGlkOiBpZCwgY2hhbmdlczogZW50aXR5IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYWRkZWQucHVzaChlbnRpdHkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbYWRkZWQsIHVwZGF0ZWRdO1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy91bnNvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKSB7XHJcbiAgICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICB2YXIga2V5ID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKTtcclxuICAgICAgICBpZiAoa2V5IGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcclxuICAgICAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIG5ld0VudGl0aWVzXzIgPSBuZXdFbnRpdGllczsgX2kgPCBuZXdFbnRpdGllc18yLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgZW50aXR5ID0gbmV3RW50aXRpZXNfMltfaV07XHJcbiAgICAgICAgICAgIGFkZE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XHJcbiAgICAgICAgaWYgKCEoa2V5IGluIHN0YXRlLmVudGl0aWVzKSkge1xyXG4gICAgICAgICAgICBzdGF0ZS5pZHMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIG5ld0VudGl0aWVzXzMgPSBuZXdFbnRpdGllczsgX2kgPCBuZXdFbnRpdGllc18zLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgZW50aXR5ID0gbmV3RW50aXRpZXNfM1tfaV07XHJcbiAgICAgICAgICAgIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgICAgIHN0YXRlLmlkcyA9IFtdO1xyXG4gICAgICAgIHN0YXRlLmVudGl0aWVzID0ge307XHJcbiAgICAgICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZU9uZU11dGFibHkoa2V5LCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiByZW1vdmVNYW55TXV0YWJseShba2V5XSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcmVtb3ZlTWFueU11dGFibHkoa2V5cywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgZGlkTXV0YXRlID0gZmFsc2U7XHJcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW2tleV07XHJcbiAgICAgICAgICAgICAgICBkaWRNdXRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGRpZE11dGF0ZSkge1xyXG4gICAgICAgICAgICBzdGF0ZS5pZHMgPSBzdGF0ZS5pZHMuZmlsdGVyKGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gaWQgaW4gc3RhdGUuZW50aXRpZXM7IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbE11dGFibHkoc3RhdGUpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlLCB7XHJcbiAgICAgICAgICAgIGlkczogW10sXHJcbiAgICAgICAgICAgIGVudGl0aWVzOiB7fVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdGFrZU5ld0tleShrZXlzLCB1cGRhdGUsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsMiA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XHJcbiAgICAgICAgdmFyIHVwZGF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbDIsIHVwZGF0ZS5jaGFuZ2VzKTtcclxuICAgICAgICB2YXIgbmV3S2V5ID0gc2VsZWN0SWRWYWx1ZSh1cGRhdGVkLCBzZWxlY3RJZCk7XHJcbiAgICAgICAgdmFyIGhhc05ld0tleSA9IG5ld0tleSAhPT0gdXBkYXRlLmlkO1xyXG4gICAgICAgIGlmIChoYXNOZXdLZXkpIHtcclxuICAgICAgICAgICAga2V5c1t1cGRhdGUuaWRdID0gbmV3S2V5O1xyXG4gICAgICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNbbmV3S2V5XSA9IHVwZGF0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIGhhc05ld0tleTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZU9uZU11dGFibHkodXBkYXRlLCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBkYXRlTWFueU11dGFibHkodXBkYXRlcywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgbmV3S2V5cyA9IHt9O1xyXG4gICAgICAgIHZhciB1cGRhdGVzUGVyRW50aXR5ID0ge307XHJcbiAgICAgICAgdXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uICh1cGRhdGUpIHtcclxuICAgICAgICAgICAgaWYgKHVwZGF0ZS5pZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlc1BlckVudGl0eVt1cGRhdGUuaWRdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiB1cGRhdGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlczogX19zcHJlYWRWYWx1ZXMoX19zcHJlYWRWYWx1ZXMoe30sIHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXSA/IHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXS5jaGFuZ2VzIDogbnVsbCksIHVwZGF0ZS5jaGFuZ2VzKVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVwZGF0ZXMgPSBPYmplY3QudmFsdWVzKHVwZGF0ZXNQZXJFbnRpdHkpO1xyXG4gICAgICAgIHZhciBkaWRNdXRhdGVFbnRpdGllcyA9IHVwZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgICAgICBpZiAoZGlkTXV0YXRlRW50aXRpZXMpIHtcclxuICAgICAgICAgICAgdmFyIGRpZE11dGF0ZUlkcyA9IHVwZGF0ZXMuZmlsdGVyKGZ1bmN0aW9uICh1cGRhdGUpIHsgcmV0dXJuIHRha2VOZXdLZXkobmV3S2V5cywgdXBkYXRlLCBzdGF0ZSk7IH0pLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICAgIGlmIChkaWRNdXRhdGVJZHMpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlLmlkcyA9IE9iamVjdC5rZXlzKHN0YXRlLmVudGl0aWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB1cHNlcnRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBzZXJ0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIF9jID0gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyhuZXdFbnRpdGllcywgc2VsZWN0SWQsIHN0YXRlKSwgYWRkZWQgPSBfY1swXSwgdXBkYXRlZCA9IF9jWzFdO1xyXG4gICAgICAgIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZWQsIHN0YXRlKTtcclxuICAgICAgICBhZGRNYW55TXV0YWJseShhZGRlZCwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZW1vdmVBbGw6IGNyZWF0ZVNpbmdsZUFyZ3VtZW50U3RhdGVPcGVyYXRvcihyZW1vdmVBbGxNdXRhYmx5KSxcclxuICAgICAgICBhZGRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkT25lTXV0YWJseSksXHJcbiAgICAgICAgYWRkTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRNYW55TXV0YWJseSksXHJcbiAgICAgICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgICAgIHNldE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0TWFueU11dGFibHkpLFxyXG4gICAgICAgIHNldEFsbDogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRBbGxNdXRhYmx5KSxcclxuICAgICAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpLFxyXG4gICAgICAgIHJlbW92ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVPbmVNdXRhYmx5KSxcclxuICAgICAgICByZW1vdmVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU1hbnlNdXRhYmx5KVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvc29ydGVkX3N0YXRlX2FkYXB0ZXIudHNcclxuZnVuY3Rpb24gY3JlYXRlU29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkLCBzb3J0KSB7XHJcbiAgICB2YXIgX2MgPSBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCksIHJlbW92ZU9uZSA9IF9jLnJlbW92ZU9uZSwgcmVtb3ZlTWFueSA9IF9jLnJlbW92ZU1hbnksIHJlbW92ZUFsbCA9IF9jLnJlbW92ZUFsbDtcclxuICAgIGZ1bmN0aW9uIGFkZE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBhZGRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICB2YXIgbW9kZWxzID0gbmV3RW50aXRpZXMuZmlsdGVyKGZ1bmN0aW9uIChtb2RlbCkgeyByZXR1cm4gIShzZWxlY3RJZFZhbHVlKG1vZGVsLCBzZWxlY3RJZCkgaW4gc3RhdGUuZW50aXRpZXMpOyB9KTtcclxuICAgICAgICBpZiAobW9kZWxzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICBtZXJnZShtb2RlbHMsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gc2V0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgaWYgKG5ld0VudGl0aWVzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICBtZXJnZShuZXdFbnRpdGllcywgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldEFsbE11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBzdGF0ZS5lbnRpdGllcyA9IHt9O1xyXG4gICAgICAgIHN0YXRlLmlkcyA9IFtdO1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGFwcGxpZWRVcGRhdGVzID0gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCB1cGRhdGVzXzEgPSB1cGRhdGVzOyBfaSA8IHVwZGF0ZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IHVwZGF0ZXNfMVtfaV07XHJcbiAgICAgICAgICAgIHZhciBlbnRpdHkgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgICAgICBpZiAoIWVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXBwbGllZFVwZGF0ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGVudGl0eSwgdXBkYXRlLmNoYW5nZXMpO1xyXG4gICAgICAgICAgICB2YXIgbmV3SWQgPSBzZWxlY3RJZChlbnRpdHkpO1xyXG4gICAgICAgICAgICBpZiAodXBkYXRlLmlkICE9PSBuZXdJZCkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5lbnRpdGllc1tuZXdJZF0gPSBlbnRpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFwcGxpZWRVcGRhdGVzKSB7XHJcbiAgICAgICAgICAgIHJlc29ydEVudGl0aWVzKHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBfYyA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSksIGFkZGVkID0gX2NbMF0sIHVwZGF0ZWQgPSBfY1sxXTtcclxuICAgICAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XHJcbiAgICAgICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKGEsIGIpIHtcclxuICAgICAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aCAmJiBpIDwgYi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYVtpXSA9PT0gYltpXSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG1lcmdlKG1vZGVscywgc3RhdGUpIHtcclxuICAgICAgICBtb2RlbHMuZm9yRWFjaChmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICAgICAgc3RhdGUuZW50aXRpZXNbc2VsZWN0SWQobW9kZWwpXSA9IG1vZGVsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlc29ydEVudGl0aWVzKHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlc29ydEVudGl0aWVzKHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGFsbEVudGl0aWVzID0gT2JqZWN0LnZhbHVlcyhzdGF0ZS5lbnRpdGllcyk7XHJcbiAgICAgICAgYWxsRW50aXRpZXMuc29ydChzb3J0KTtcclxuICAgICAgICB2YXIgbmV3U29ydGVkSWRzID0gYWxsRW50aXRpZXMubWFwKHNlbGVjdElkKTtcclxuICAgICAgICB2YXIgaWRzID0gc3RhdGUuaWRzO1xyXG4gICAgICAgIGlmICghYXJlQXJyYXlzRXF1YWwoaWRzLCBuZXdTb3J0ZWRJZHMpKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmlkcyA9IG5ld1NvcnRlZElkcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlbW92ZU9uZTogcmVtb3ZlT25lLFxyXG4gICAgICAgIHJlbW92ZU1hbnk6IHJlbW92ZU1hbnksXHJcbiAgICAgICAgcmVtb3ZlQWxsOiByZW1vdmVBbGwsXHJcbiAgICAgICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgICAgIHVwZGF0ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cHNlcnRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0T25lTXV0YWJseSksXHJcbiAgICAgICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgICAgIHNldE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0TWFueU11dGFibHkpLFxyXG4gICAgICAgIHNldEFsbDogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRBbGxNdXRhYmx5KSxcclxuICAgICAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcclxuICAgICAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcclxuICAgICAgICB1cHNlcnRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE1hbnlNdXRhYmx5KVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvY3JlYXRlX2FkYXB0ZXIudHNcclxuZnVuY3Rpb24gY3JlYXRlRW50aXR5QWRhcHRlcihvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIF9jID0gX19zcHJlYWRWYWx1ZXMoe1xyXG4gICAgICAgIHNvcnRDb21wYXJlcjogZmFsc2UsXHJcbiAgICAgICAgc2VsZWN0SWQ6IGZ1bmN0aW9uIChpbnN0YW5jZSkgeyByZXR1cm4gaW5zdGFuY2UuaWQ7IH1cclxuICAgIH0sIG9wdGlvbnMpLCBzZWxlY3RJZCA9IF9jLnNlbGVjdElkLCBzb3J0Q29tcGFyZXIgPSBfYy5zb3J0Q29tcGFyZXI7XHJcbiAgICB2YXIgc3RhdGVGYWN0b3J5ID0gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeSgpO1xyXG4gICAgdmFyIHNlbGVjdG9yc0ZhY3RvcnkgPSBjcmVhdGVTZWxlY3RvcnNGYWN0b3J5KCk7XHJcbiAgICB2YXIgc3RhdGVBZGFwdGVyID0gc29ydENvbXBhcmVyID8gY3JlYXRlU29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkLCBzb3J0Q29tcGFyZXIpIDogY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpO1xyXG4gICAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICBzZWxlY3RJZDogc2VsZWN0SWQsXHJcbiAgICAgICAgc29ydENvbXBhcmVyOiBzb3J0Q29tcGFyZXJcclxuICAgIH0sIHN0YXRlRmFjdG9yeSksIHNlbGVjdG9yc0ZhY3RvcnkpLCBzdGF0ZUFkYXB0ZXIpO1xyXG59XHJcbi8vIHNyYy9uYW5vaWQudHNcclxudmFyIHVybEFscGhhYmV0ID0gXCJNb2R1bGVTeW1iaGFzT3duUHItMDEyMzQ1Njc4OUFCQ0RFRkdITlJWZmdjdGlVdnpfS3FZVEprTHhwWlhJalFXXCI7XHJcbnZhciBuYW5vaWQgPSBmdW5jdGlvbiAoc2l6ZSkge1xyXG4gICAgaWYgKHNpemUgPT09IHZvaWQgMCkgeyBzaXplID0gMjE7IH1cclxuICAgIHZhciBpZCA9IFwiXCI7XHJcbiAgICB2YXIgaSA9IHNpemU7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgaWQgKz0gdXJsQWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIDY0IHwgMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWQ7XHJcbn07XHJcbi8vIHNyYy9jcmVhdGVBc3luY1RodW5rLnRzXHJcbnZhciBjb21tb25Qcm9wZXJ0aWVzID0gW1xyXG4gICAgXCJuYW1lXCIsXHJcbiAgICBcIm1lc3NhZ2VcIixcclxuICAgIFwic3RhY2tcIixcclxuICAgIFwiY29kZVwiXHJcbl07XHJcbnZhciBSZWplY3RXaXRoVmFsdWUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSZWplY3RXaXRoVmFsdWUocGF5bG9hZCwgbWV0YSkge1xyXG4gICAgICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBSZWplY3RXaXRoVmFsdWU7XHJcbn0oKSk7XHJcbnZhciBGdWxmaWxsV2l0aE1ldGEgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBGdWxmaWxsV2l0aE1ldGEocGF5bG9hZCwgbWV0YSkge1xyXG4gICAgICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBGdWxmaWxsV2l0aE1ldGE7XHJcbn0oKSk7XHJcbnZhciBtaW5pU2VyaWFsaXplRXJyb3IgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICB2YXIgc2ltcGxlRXJyb3IgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGNvbW1vblByb3BlcnRpZXNfMSA9IGNvbW1vblByb3BlcnRpZXM7IF9pIDwgY29tbW9uUHJvcGVydGllc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBjb21tb25Qcm9wZXJ0aWVzXzFbX2ldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlW3Byb3BlcnR5XSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgc2ltcGxlRXJyb3JbcHJvcGVydHldID0gdmFsdWVbcHJvcGVydHldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzaW1wbGVFcnJvcjtcclxuICAgIH1cclxuICAgIHJldHVybiB7IG1lc3NhZ2U6IFN0cmluZyh2YWx1ZSkgfTtcclxufTtcclxuZnVuY3Rpb24gY3JlYXRlQXN5bmNUaHVuayh0eXBlUHJlZml4LCBwYXlsb2FkQ3JlYXRvciwgb3B0aW9ucykge1xyXG4gICAgdmFyIGZ1bGZpbGxlZCA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvZnVsZmlsbGVkXCIsIGZ1bmN0aW9uIChwYXlsb2FkLCByZXF1ZXN0SWQsIGFyZywgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxyXG4gICAgICAgIG1ldGE6IF9fc3ByZWFkUHJvcHMoX19zcHJlYWRWYWx1ZXMoe30sIG1ldGEgfHwge30pLCB7XHJcbiAgICAgICAgICAgIGFyZzogYXJnLFxyXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgcmVxdWVzdFN0YXR1czogXCJmdWxmaWxsZWRcIlxyXG4gICAgICAgIH0pXHJcbiAgICB9KTsgfSk7XHJcbiAgICB2YXIgcGVuZGluZyA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvcGVuZGluZ1wiLCBmdW5jdGlvbiAocmVxdWVzdElkLCBhcmcsIG1ldGEpIHsgcmV0dXJuICh7XHJcbiAgICAgICAgcGF5bG9hZDogdm9pZCAwLFxyXG4gICAgICAgIG1ldGE6IF9fc3ByZWFkUHJvcHMoX19zcHJlYWRWYWx1ZXMoe30sIG1ldGEgfHwge30pLCB7XHJcbiAgICAgICAgICAgIGFyZzogYXJnLFxyXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgcmVxdWVzdFN0YXR1czogXCJwZW5kaW5nXCJcclxuICAgICAgICB9KVxyXG4gICAgfSk7IH0pO1xyXG4gICAgdmFyIHJlamVjdGVkID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9yZWplY3RlZFwiLCBmdW5jdGlvbiAoZXJyb3IsIHJlcXVlc3RJZCwgYXJnLCBwYXlsb2FkLCBtZXRhKSB7IHJldHVybiAoe1xyXG4gICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXHJcbiAgICAgICAgZXJyb3I6IChvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplRXJyb3IgfHwgbWluaVNlcmlhbGl6ZUVycm9yKShlcnJvciB8fCBcIlJlamVjdGVkXCIpLFxyXG4gICAgICAgIG1ldGE6IF9fc3ByZWFkUHJvcHMoX19zcHJlYWRWYWx1ZXMoe30sIG1ldGEgfHwge30pLCB7XHJcbiAgICAgICAgICAgIGFyZzogYXJnLFxyXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgcmVqZWN0ZWRXaXRoVmFsdWU6ICEhcGF5bG9hZCxcclxuICAgICAgICAgICAgcmVxdWVzdFN0YXR1czogXCJyZWplY3RlZFwiLFxyXG4gICAgICAgICAgICBhYm9ydGVkOiAoZXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yLm5hbWUpID09PSBcIkFib3J0RXJyb3JcIixcclxuICAgICAgICAgICAgY29uZGl0aW9uOiAoZXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yLm5hbWUpID09PSBcIkNvbmRpdGlvbkVycm9yXCJcclxuICAgICAgICB9KVxyXG4gICAgfSk7IH0pO1xyXG4gICAgdmFyIGRpc3BsYXllZFdhcm5pbmcgPSBmYWxzZTtcclxuICAgIHZhciBBQyA9IHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09IFwidW5kZWZpbmVkXCIgPyBBYm9ydENvbnRyb2xsZXIgOiAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gY2xhc3NfMSgpIHtcclxuICAgICAgICAgICAgdGhpcy5zaWduYWwgPSB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uYWJvcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcmVhc29uOiB2b2lkIDAsXHJcbiAgICAgICAgICAgICAgICB0aHJvd0lmQWJvcnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkaXNwbGF5ZWRXYXJuaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkV2FybmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiVGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBpbXBsZW1lbnQgQWJvcnRDb250cm9sbGVyLiBcXG5JZiB5b3Ugd2FudCB0byB1c2UgdGhlIEFib3J0Q29udHJvbGxlciB0byByZWFjdCB0byBgYWJvcnRgIGV2ZW50cywgcGxlYXNlIGNvbnNpZGVyIGltcG9ydGluZyBhIHBvbHlmaWxsIGxpa2UgJ2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC9kaXN0L2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC1vbmx5Jy5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjbGFzc18xO1xyXG4gICAgfSgpKTtcclxuICAgIGZ1bmN0aW9uIGFjdGlvbkNyZWF0b3IoYXJnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhKSB7XHJcbiAgICAgICAgICAgIHZhciByZXF1ZXN0SWQgPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5pZEdlbmVyYXRvcikgPyBvcHRpb25zLmlkR2VuZXJhdG9yKGFyZykgOiBuYW5vaWQoKTtcclxuICAgICAgICAgICAgdmFyIGFib3J0Q29udHJvbGxlciA9IG5ldyBBQygpO1xyXG4gICAgICAgICAgICB2YXIgYWJvcnRSZWFzb247XHJcbiAgICAgICAgICAgIHZhciBhYm9ydGVkUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChfLCByZWplY3QpIHsgcmV0dXJuIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlamVjdCh7IG5hbWU6IFwiQWJvcnRFcnJvclwiLCBtZXNzYWdlOiBhYm9ydFJlYXNvbiB8fCBcIkFib3J0ZWRcIiB9KTsgfSk7IH0pO1xyXG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBhYm9ydChyZWFzb24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGFydGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRSZWFzb24gPSByZWFzb247XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHByb21pc2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX19hc3luYyh0aGlzLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgZmluYWxBY3Rpb24sIGNvbmRpdGlvblJlc3VsdCwgZXJyXzEsIHNraXBEaXNwYXRjaDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzAsIDQsICwgNV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IChfYSA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuY29uZGl0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCBhcmcsIHsgZ2V0U3RhdGU6IGdldFN0YXRlLCBleHRyYTogZXh0cmEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RoZW5hYmxlKGNvbmRpdGlvblJlc3VsdCkpIHJldHVybiBbMyAvKmJyZWFrKi8sIDJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGNvbmRpdGlvblJlc3VsdF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uUmVzdWx0ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbmRpdGlvbkVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkFib3J0ZWQgZHVlIHRvIGNvbmRpdGlvbiBjYWxsYmFjayByZXR1cm5pbmcgZmFsc2UuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2gocGVuZGluZyhyZXF1ZXN0SWQsIGFyZywgKF9iID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXRQZW5kaW5nTWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwob3B0aW9ucywgeyByZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgYXJnOiBhcmcgfSwgeyBnZXRTdGF0ZTogZ2V0U3RhdGUsIGV4dHJhOiBleHRyYSB9KSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UucmFjZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydGVkUHJvbWlzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShwYXlsb2FkQ3JlYXRvcihhcmcsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3RhdGU6IGdldFN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiBleHRyYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0V2l0aFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIG1ldGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWplY3RXaXRoVmFsdWUodmFsdWUsIG1ldGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsZmlsbFdpdGhWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBtZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVsZmlsbFdpdGhNZXRhKHZhbHVlLCBtZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBGdWxmaWxsV2l0aE1ldGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZChyZXN1bHQucGF5bG9hZCwgcmVxdWVzdElkLCBhcmcsIHJlc3VsdC5tZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZChyZXN1bHQsIHJlcXVlc3RJZCwgYXJnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEFjdGlvbiA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEFjdGlvbiA9IGVycl8xIGluc3RhbmNlb2YgUmVqZWN0V2l0aFZhbHVlID8gcmVqZWN0ZWQobnVsbCwgcmVxdWVzdElkLCBhcmcsIGVycl8xLnBheWxvYWQsIGVycl8xLm1ldGEpIDogcmVqZWN0ZWQoZXJyXzEsIHJlcXVlc3RJZCwgYXJnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwRGlzcGF0Y2ggPSBvcHRpb25zICYmICFvcHRpb25zLmRpc3BhdGNoQ29uZGl0aW9uUmVqZWN0aW9uICYmIHJlamVjdGVkLm1hdGNoKGZpbmFsQWN0aW9uKSAmJiBmaW5hbEFjdGlvbi5tZXRhLmNvbmRpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNraXBEaXNwYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChmaW5hbEFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBmaW5hbEFjdGlvbl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByb21pc2UsIHtcclxuICAgICAgICAgICAgICAgIGFib3J0OiBhYm9ydCxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgICAgICAgICB1bndyYXA6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKHVud3JhcFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY3Rpb25DcmVhdG9yLCB7XHJcbiAgICAgICAgcGVuZGluZzogcGVuZGluZyxcclxuICAgICAgICByZWplY3RlZDogcmVqZWN0ZWQsXHJcbiAgICAgICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXHJcbiAgICAgICAgdHlwZVByZWZpeDogdHlwZVByZWZpeFxyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gdW53cmFwUmVzdWx0KGFjdGlvbikge1xyXG4gICAgaWYgKGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlKSB7XHJcbiAgICAgICAgdGhyb3cgYWN0aW9uLnBheWxvYWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoYWN0aW9uLmVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgYWN0aW9uLmVycm9yO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjdGlvbi5wYXlsb2FkO1xyXG59XHJcbmZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG4vLyBzcmMvdHNIZWxwZXJzLnRzXHJcbnZhciBoYXNNYXRjaEZ1bmN0aW9uID0gZnVuY3Rpb24gKHYpIHtcclxuICAgIHJldHVybiB2ICYmIHR5cGVvZiB2Lm1hdGNoID09PSBcImZ1bmN0aW9uXCI7XHJcbn07XHJcbi8vIHNyYy9tYXRjaGVycy50c1xyXG52YXIgbWF0Y2hlcyA9IGZ1bmN0aW9uIChtYXRjaGVyLCBhY3Rpb24pIHtcclxuICAgIGlmIChoYXNNYXRjaEZ1bmN0aW9uKG1hdGNoZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXIubWF0Y2goYWN0aW9uKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIGlzQW55T2YoKSB7XHJcbiAgICB2YXIgbWF0Y2hlcnMgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgbWF0Y2hlcnNbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXJzLnNvbWUoZnVuY3Rpb24gKG1hdGNoZXIpIHsgcmV0dXJuIG1hdGNoZXMobWF0Y2hlciwgYWN0aW9uKTsgfSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzQWxsT2YoKSB7XHJcbiAgICB2YXIgbWF0Y2hlcnMgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgbWF0Y2hlcnNbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXJzLmV2ZXJ5KGZ1bmN0aW9uIChtYXRjaGVyKSB7IHJldHVybiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbik7IH0pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIHZhbGlkU3RhdHVzKSB7XHJcbiAgICBpZiAoIWFjdGlvbiB8fCAhYWN0aW9uLm1ldGEpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIGhhc1ZhbGlkUmVxdWVzdElkID0gdHlwZW9mIGFjdGlvbi5tZXRhLnJlcXVlc3RJZCA9PT0gXCJzdHJpbmdcIjtcclxuICAgIHZhciBoYXNWYWxpZFJlcXVlc3RTdGF0dXMgPSB2YWxpZFN0YXR1cy5pbmRleE9mKGFjdGlvbi5tZXRhLnJlcXVlc3RTdGF0dXMpID4gLTE7XHJcbiAgICByZXR1cm4gaGFzVmFsaWRSZXF1ZXN0SWQgJiYgaGFzVmFsaWRSZXF1ZXN0U3RhdHVzO1xyXG59XHJcbmZ1bmN0aW9uIGlzQXN5bmNUaHVua0FycmF5KGEpIHtcclxuICAgIHJldHVybiB0eXBlb2YgYVswXSA9PT0gXCJmdW5jdGlvblwiICYmIFwicGVuZGluZ1wiIGluIGFbMF0gJiYgXCJmdWxmaWxsZWRcIiBpbiBhWzBdICYmIFwicmVqZWN0ZWRcIiBpbiBhWzBdO1xyXG59XHJcbmZ1bmN0aW9uIGlzUGVuZGluZygpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInBlbmRpbmdcIl0pOyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgICAgICByZXR1cm4gaXNQZW5kaW5nKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgbWF0Y2hlcnMgPSBhc3luY1RodW5rcy5tYXAoZnVuY3Rpb24gKGFzeW5jVGh1bmspIHsgcmV0dXJuIGFzeW5jVGh1bmsucGVuZGluZzsgfSk7XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YuYXBwbHkodm9pZCAwLCBtYXRjaGVycyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc1JlamVjdGVkKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wicmVqZWN0ZWRcIl0pOyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgICAgICByZXR1cm4gaXNSZWplY3RlZCgpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXJzID0gYXN5bmNUaHVua3MubWFwKGZ1bmN0aW9uIChhc3luY1RodW5rKSB7IHJldHVybiBhc3luY1RodW5rLnJlamVjdGVkOyB9KTtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZi5hcHBseSh2b2lkIDAsIG1hdGNoZXJzKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHZhciBoYXNGbGFnID0gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhY3Rpb24gJiYgYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEucmVqZWN0ZWRXaXRoVmFsdWU7XHJcbiAgICB9O1xyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FsbE9mKGlzUmVqZWN0ZWQuYXBwbHkodm9pZCAwLCBhc3luY1RodW5rcyksIGhhc0ZsYWcpO1xyXG4gICAgICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FsbE9mKGlzUmVqZWN0ZWQuYXBwbHkodm9pZCAwLCBhc3luY1RodW5rcyksIGhhc0ZsYWcpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNGdWxmaWxsZWQoKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJmdWxmaWxsZWRcIl0pOyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgICAgICByZXR1cm4gaXNGdWxmaWxsZWQoKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IGFzeW5jVGh1bmtzLm1hcChmdW5jdGlvbiAoYXN5bmNUaHVuaykgeyByZXR1cm4gYXN5bmNUaHVuay5mdWxmaWxsZWQ7IH0pO1xyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wicGVuZGluZ1wiLCBcImZ1bGZpbGxlZFwiLCBcInJlamVjdGVkXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzQXN5bmNUaHVua0FjdGlvbigpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXJzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBhc3luY1RodW5rc18xID0gYXN5bmNUaHVua3M7IF9pIDwgYXN5bmNUaHVua3NfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGFzeW5jVGh1bmsgPSBhc3luY1RodW5rc18xW19pXTtcclxuICAgICAgICAgICAgbWF0Y2hlcnMucHVzaChhc3luY1RodW5rLnBlbmRpbmcsIGFzeW5jVGh1bmsucmVqZWN0ZWQsIGFzeW5jVGh1bmsuZnVsZmlsbGVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YuYXBwbHkodm9pZCAwLCBtYXRjaGVycyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL3V0aWxzLnRzXHJcbnZhciBhc3NlcnRGdW5jdGlvbiA9IGZ1bmN0aW9uIChmdW5jLCBleHBlY3RlZCkge1xyXG4gICAgaWYgKHR5cGVvZiBmdW5jICE9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGV4cGVjdGVkICsgXCIgaXMgbm90IGEgZnVuY3Rpb25cIik7XHJcbiAgICB9XHJcbn07XHJcbnZhciBub29wID0gZnVuY3Rpb24gKCkge1xyXG59O1xyXG52YXIgY2F0Y2hSZWplY3Rpb24gPSBmdW5jdGlvbiAocHJvbWlzZSwgb25FcnJvcikge1xyXG4gICAgaWYgKG9uRXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbm9vcDsgfVxyXG4gICAgcHJvbWlzZS5jYXRjaChvbkVycm9yKTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG59O1xyXG52YXIgYWRkQWJvcnRTaWduYWxMaXN0ZW5lciA9IGZ1bmN0aW9uIChhYm9ydFNpZ25hbCwgY2FsbGJhY2spIHtcclxuICAgIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBjYWxsYmFjaywgeyBvbmNlOiB0cnVlIH0pO1xyXG59O1xyXG52YXIgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbiA9IGZ1bmN0aW9uIChhYm9ydENvbnRyb2xsZXIsIHJlYXNvbikge1xyXG4gICAgdmFyIHNpZ25hbCA9IGFib3J0Q29udHJvbGxlci5zaWduYWw7XHJcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIShcInJlYXNvblwiIGluIHNpZ25hbCkpIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2lnbmFsLCBcInJlYXNvblwiLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiByZWFzb24sXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIDtcclxuICAgIGFib3J0Q29udHJvbGxlci5hYm9ydChyZWFzb24pO1xyXG59O1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2V4Y2VwdGlvbnMudHNcclxudmFyIHRhc2sgPSBcInRhc2tcIjtcclxudmFyIGxpc3RlbmVyID0gXCJsaXN0ZW5lclwiO1xyXG52YXIgY29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcclxudmFyIGNhbmNlbGxlZCA9IFwiY2FuY2VsbGVkXCI7XHJcbnZhciB0YXNrQ2FuY2VsbGVkID0gXCJ0YXNrLVwiICsgY2FuY2VsbGVkO1xyXG52YXIgdGFza0NvbXBsZXRlZCA9IFwidGFzay1cIiArIGNvbXBsZXRlZDtcclxudmFyIGxpc3RlbmVyQ2FuY2VsbGVkID0gbGlzdGVuZXIgKyBcIi1cIiArIGNhbmNlbGxlZDtcclxudmFyIGxpc3RlbmVyQ29tcGxldGVkID0gbGlzdGVuZXIgKyBcIi1cIiArIGNvbXBsZXRlZDtcclxudmFyIFRhc2tBYm9ydEVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVGFza0Fib3J0RXJyb3IoY29kZSkge1xyXG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJUYXNrQWJvcnRFcnJvclwiO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IHRhc2sgKyBcIiBcIiArIGNhbmNlbGxlZCArIFwiIChyZWFzb246IFwiICsgY29kZSArIFwiKVwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRhc2tBYm9ydEVycm9yO1xyXG59KCkpO1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL3Rhc2sudHNcclxudmFyIHZhbGlkYXRlQWN0aXZlID0gZnVuY3Rpb24gKHNpZ25hbCkge1xyXG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pO1xyXG4gICAgfVxyXG59O1xyXG52YXIgcHJvbWlzaWZ5QWJvcnRTaWduYWwgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XHJcbiAgICByZXR1cm4gY2F0Y2hSZWplY3Rpb24obmV3IFByb21pc2UoZnVuY3Rpb24gKF8sIHJlamVjdCkge1xyXG4gICAgICAgIHZhciBub3RpZnlSZWplY3Rpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3QobmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pKTsgfTtcclxuICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgbm90aWZ5UmVqZWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHNpZ25hbCwgbm90aWZ5UmVqZWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9KSk7XHJcbn07XHJcbnZhciBydW5UYXNrID0gZnVuY3Rpb24gKHRhc2syLCBjbGVhblVwKSB7IHJldHVybiBfX2FzeW5jKHZvaWQgMCwgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHZhbHVlLCBlcnJvcl8xO1xyXG4gICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFswLCAzLCA0LCA1XSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLnJlc29sdmUoKV07XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRhc2syKCldO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogXCJva1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3JfMSBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yID8gXCJjYW5jZWxsZWRcIiA6IFwicmVqZWN0ZWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzFcclxuICAgICAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgY2xlYW5VcCA9PSBudWxsID8gdm9pZCAwIDogY2xlYW5VcCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pOyB9O1xyXG52YXIgY3JlYXRlUGF1c2UgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHByb21pc2UpIHtcclxuICAgICAgICByZXR1cm4gY2F0Y2hSZWplY3Rpb24oUHJvbWlzZS5yYWNlKFtwcm9taXNpZnlBYm9ydFNpZ25hbChzaWduYWwpLCBwcm9taXNlXSkudGhlbihmdW5jdGlvbiAob3V0cHV0KSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbCk7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfTtcclxufTtcclxudmFyIGNyZWF0ZURlbGF5ID0gZnVuY3Rpb24gKHNpZ25hbCkge1xyXG4gICAgdmFyIHBhdXNlID0gY3JlYXRlUGF1c2Uoc2lnbmFsKTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGltZW91dE1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhdXNlKG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcyk7IH0pKTtcclxuICAgIH07XHJcbn07XHJcbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgudHNcclxudmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XHJcbnZhciBJTlRFUk5BTF9OSUxfVE9LRU4gPSB7fTtcclxudmFyIGFsbSA9IFwibGlzdGVuZXJNaWRkbGV3YXJlXCI7XHJcbnZhciBjcmVhdGVGb3JrID0gZnVuY3Rpb24gKHBhcmVudEFib3J0U2lnbmFsKSB7XHJcbiAgICB2YXIgbGlua0NvbnRyb2xsZXJzID0gZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHsgcmV0dXJuIGFkZEFib3J0U2lnbmFsTGlzdGVuZXIocGFyZW50QWJvcnRTaWduYWwsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgcGFyZW50QWJvcnRTaWduYWwucmVhc29uKTsgfSk7IH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhc2tFeGVjdXRvcikge1xyXG4gICAgICAgIGFzc2VydEZ1bmN0aW9uKHRhc2tFeGVjdXRvciwgXCJ0YXNrRXhlY3V0b3JcIik7XHJcbiAgICAgICAgdmFyIGNoaWxkQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xyXG4gICAgICAgIGxpbmtDb250cm9sbGVycyhjaGlsZEFib3J0Q29udHJvbGxlcik7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJ1blRhc2soZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hc3luYyh2b2lkIDAsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdDI7XHJcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKHBhcmVudEFib3J0U2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVBY3RpdmUoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGFza0V4ZWN1dG9yKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZTogY3JlYXRlUGF1c2UoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheTogY3JlYXRlRGVsYXkoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0MiA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVBY3RpdmUoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc3VsdDJdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjaGlsZEFib3J0Q29udHJvbGxlciwgdGFza0NvbXBsZXRlZCk7IH0pO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHJlc3VsdDogY3JlYXRlUGF1c2UocGFyZW50QWJvcnRTaWduYWwpKHJlc3VsdCksXHJcbiAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjaGlsZEFib3J0Q29udHJvbGxlciwgdGFza0NhbmNlbGxlZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfTtcclxufTtcclxudmFyIGNyZWF0ZVRha2VQYXR0ZXJuID0gZnVuY3Rpb24gKHN0YXJ0TGlzdGVuaW5nLCBzaWduYWwpIHtcclxuICAgIHZhciB0YWtlID0gZnVuY3Rpb24gKHByZWRpY2F0ZSwgdGltZW91dCkgeyByZXR1cm4gX19hc3luYyh2b2lkIDAsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdW5zdWJzY3JpYmUsIHR1cGxlUHJvbWlzZSwgcHJvbWlzZXMsIG91dHB1dDtcclxuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgdHVwbGVQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSBzdGFydExpc3RlbmluZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWNhdGU6IHByZWRpY2F0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdDogZnVuY3Rpb24gKGFjdGlvbiwgbGlzdGVuZXJBcGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyQXBpLmdldFN0YXRlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyQXBpLmdldE9yaWdpbmFsU3RhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzaWZ5QWJvcnRTaWduYWwoc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGVQcm9taXNlXHJcbiAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmV0dXJuIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCwgbnVsbCk7IH0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAxO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMSwgLCAzLCA0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5yYWNlKHByb21pc2VzKV07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIG91dHB1dF07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzcgLyplbmRmaW5hbGx5Ki9dO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pOyB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcmVkaWNhdGUsIHRpbWVvdXQpIHsgcmV0dXJuIGNhdGNoUmVqZWN0aW9uKHRha2UocHJlZGljYXRlLCB0aW1lb3V0KSk7IH07XHJcbn07XHJcbnZhciBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgIHZhciB0eXBlID0gb3B0aW9ucy50eXBlLCBhY3Rpb25DcmVhdG9yID0gb3B0aW9ucy5hY3Rpb25DcmVhdG9yLCBtYXRjaGVyID0gb3B0aW9ucy5tYXRjaGVyLCBwcmVkaWNhdGUgPSBvcHRpb25zLnByZWRpY2F0ZSwgZWZmZWN0ID0gb3B0aW9ucy5lZmZlY3Q7XHJcbiAgICBpZiAodHlwZSkge1xyXG4gICAgICAgIHByZWRpY2F0ZSA9IGNyZWF0ZUFjdGlvbih0eXBlKS5tYXRjaDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGFjdGlvbkNyZWF0b3IpIHtcclxuICAgICAgICB0eXBlID0gYWN0aW9uQ3JlYXRvci50eXBlO1xyXG4gICAgICAgIHByZWRpY2F0ZSA9IGFjdGlvbkNyZWF0b3IubWF0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChtYXRjaGVyKSB7XHJcbiAgICAgICAgcHJlZGljYXRlID0gbWF0Y2hlcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHByZWRpY2F0ZSkge1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ3JlYXRpbmcgb3IgcmVtb3ZpbmcgYSBsaXN0ZW5lciByZXF1aXJlcyBvbmUgb2YgdGhlIGtub3duIGZpZWxkcyBmb3IgbWF0Y2hpbmcgYW4gYWN0aW9uXCIpO1xyXG4gICAgfVxyXG4gICAgYXNzZXJ0RnVuY3Rpb24oZWZmZWN0LCBcIm9wdGlvbnMubGlzdGVuZXJcIik7XHJcbiAgICByZXR1cm4geyBwcmVkaWNhdGU6IHByZWRpY2F0ZSwgdHlwZTogdHlwZSwgZWZmZWN0OiBlZmZlY3QgfTtcclxufTtcclxudmFyIGNyZWF0ZUxpc3RlbmVyRW50cnkgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgdmFyIF9jID0gZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbShvcHRpb25zKSwgdHlwZSA9IF9jLnR5cGUsIHByZWRpY2F0ZSA9IF9jLnByZWRpY2F0ZSwgZWZmZWN0ID0gX2MuZWZmZWN0O1xyXG4gICAgdmFyIGlkID0gbmFub2lkKCk7XHJcbiAgICB2YXIgZW50cnkgPSB7XHJcbiAgICAgICAgaWQ6IGlkLFxyXG4gICAgICAgIGVmZmVjdDogZWZmZWN0LFxyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgcHJlZGljYXRlOiBwcmVkaWNhdGUsXHJcbiAgICAgICAgcGVuZGluZzogbmV3IFNldCgpLFxyXG4gICAgICAgIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3Vic2NyaWJlIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGVudHJ5O1xyXG59O1xyXG52YXIgY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUgPSBmdW5jdGlvbiAobGlzdGVuZXJNYXApIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGlzdGVuZXJNYXAuZm9yRWFjaChjYW5jZWxBY3RpdmVMaXN0ZW5lcnMpO1xyXG4gICAgICAgIGxpc3RlbmVyTWFwLmNsZWFyKCk7XHJcbiAgICB9O1xyXG59O1xyXG52YXIgc2FmZWx5Tm90aWZ5RXJyb3IgPSBmdW5jdGlvbiAoZXJyb3JIYW5kbGVyLCBlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgZXJyb3JIYW5kbGVyKGVycm9yVG9Ob3RpZnksIGVycm9ySW5mbyk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3JIYW5kbGVyRXJyb3IpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3JIYW5kbGVyRXJyb3I7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbn07XHJcbnZhciBhZGRMaXN0ZW5lciA9IGNyZWF0ZUFjdGlvbihhbG0gKyBcIi9hZGRcIik7XHJcbnZhciBjbGVhckFsbExpc3RlbmVycyA9IGNyZWF0ZUFjdGlvbihhbG0gKyBcIi9yZW1vdmVBbGxcIik7XHJcbnZhciByZW1vdmVMaXN0ZW5lciA9IGNyZWF0ZUFjdGlvbihhbG0gKyBcIi9yZW1vdmVcIik7XHJcbnZhciBkZWZhdWx0RXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLCBfX3NwcmVhZEFycmF5KFthbG0gKyBcIi9lcnJvclwiXSwgYXJncykpO1xyXG59O1xyXG52YXIgY2FuY2VsQWN0aXZlTGlzdGVuZXJzID0gZnVuY3Rpb24gKGVudHJ5KSB7XHJcbiAgICBlbnRyeS5wZW5kaW5nLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHtcclxuICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIGxpc3RlbmVyQ2FuY2VsbGVkKTtcclxuICAgIH0pO1xyXG59O1xyXG5mdW5jdGlvbiBjcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmUobWlkZGxld2FyZU9wdGlvbnMpIHtcclxuICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICBpZiAobWlkZGxld2FyZU9wdGlvbnMgPT09IHZvaWQgMCkgeyBtaWRkbGV3YXJlT3B0aW9ucyA9IHt9OyB9XHJcbiAgICB2YXIgbGlzdGVuZXJNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB2YXIgZXh0cmEgPSBtaWRkbGV3YXJlT3B0aW9ucy5leHRyYSwgX2MgPSBtaWRkbGV3YXJlT3B0aW9ucy5vbkVycm9yLCBvbkVycm9yID0gX2MgPT09IHZvaWQgMCA/IGRlZmF1bHRFcnJvckhhbmRsZXIgOiBfYztcclxuICAgIGFzc2VydEZ1bmN0aW9uKG9uRXJyb3IsIFwib25FcnJvclwiKTtcclxuICAgIHZhciBpbnNlcnRFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgICAgIGVudHJ5LnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbGlzdGVuZXJNYXAuZGVsZXRlKGVudHJ5LmlkKTsgfTtcclxuICAgICAgICBsaXN0ZW5lck1hcC5zZXQoZW50cnkuaWQsIGVudHJ5KTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbmNlbE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgZW50cnkudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgaWYgKGNhbmNlbE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGNhbmNlbE9wdGlvbnMuY2FuY2VsQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICB2YXIgZmluZExpc3RlbmVyRW50cnkgPSBmdW5jdGlvbiAoY29tcGFyYXRvcikge1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2MgPSBBcnJheS5mcm9tKGxpc3RlbmVyTWFwLnZhbHVlcygpKTsgX2kgPCBfYy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gX2NbX2ldO1xyXG4gICAgICAgICAgICBpZiAoY29tcGFyYXRvcihlbnRyeSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdm9pZCAwO1xyXG4gICAgfTtcclxuICAgIHZhciBzdGFydExpc3RlbmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkoZnVuY3Rpb24gKGV4aXN0aW5nRW50cnkpIHsgcmV0dXJuIGV4aXN0aW5nRW50cnkuZWZmZWN0ID09PSBvcHRpb25zLmVmZmVjdDsgfSk7XHJcbiAgICAgICAgaWYgKCFlbnRyeSkge1xyXG4gICAgICAgICAgICBlbnRyeSA9IGNyZWF0ZUxpc3RlbmVyRW50cnkob3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnNlcnRFbnRyeShlbnRyeSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIHN0b3BMaXN0ZW5pbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIHZhciBfYyA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucyksIHR5cGUgPSBfYy50eXBlLCBlZmZlY3QgPSBfYy5lZmZlY3QsIHByZWRpY2F0ZSA9IF9jLnByZWRpY2F0ZTtcclxuICAgICAgICB2YXIgZW50cnkgPSBmaW5kTGlzdGVuZXJFbnRyeShmdW5jdGlvbiAoZW50cnkyKSB7XHJcbiAgICAgICAgICAgIHZhciBtYXRjaFByZWRpY2F0ZU9yVHlwZSA9IHR5cGVvZiB0eXBlID09PSBcInN0cmluZ1wiID8gZW50cnkyLnR5cGUgPT09IHR5cGUgOiBlbnRyeTIucHJlZGljYXRlID09PSBwcmVkaWNhdGU7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaFByZWRpY2F0ZU9yVHlwZSAmJiBlbnRyeTIuZWZmZWN0ID09PSBlZmZlY3Q7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGVudHJ5KSB7XHJcbiAgICAgICAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNhbmNlbEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzKGVudHJ5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gISFlbnRyeTtcclxuICAgIH07XHJcbiAgICB2YXIgbm90aWZ5TGlzdGVuZXIgPSBmdW5jdGlvbiAoZW50cnksIGFjdGlvbiwgYXBpLCBnZXRPcmlnaW5hbFN0YXRlKSB7IHJldHVybiBfX2FzeW5jKF90aGlzLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGludGVybmFsVGFza0NvbnRyb2xsZXIsIHRha2UsIGxpc3RlbmVyRXJyb3JfMTtcclxuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFRhc2tDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRha2UgPSBjcmVhdGVUYWtlUGF0dGVybihzdGFydExpc3RlbmluZywgaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzEsIDMsIDQsIDVdKTtcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmFkZChpbnRlcm5hbFRhc2tDb250cm9sbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLnJlc29sdmUoZW50cnkuZWZmZWN0KGFjdGlvbiwgYXNzaWduKHt9LCBhcGksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE9yaWdpbmFsU3RhdGU6IGdldE9yaWdpbmFsU3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IGZ1bmN0aW9uIChwcmVkaWNhdGUsIHRpbWVvdXQpIHsgcmV0dXJuIHRha2UocHJlZGljYXRlLCB0aW1lb3V0KS50aGVuKEJvb2xlYW4pOyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZTogdGFrZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiBjcmVhdGVEZWxheShpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZTogY3JlYXRlUGF1c2UoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGV4dHJhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcms6IGNyZWF0ZUZvcmsoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmU6IGVudHJ5LnVuc3Vic2NyaWJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkucGVuZGluZy5mb3JFYWNoKGZ1bmN0aW9uIChjb250cm9sbGVyLCBfLCBzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIgIT09IGludGVybmFsVGFza0NvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmRlbGV0ZShjb250cm9sbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSkpXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJFcnJvcl8xID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGxpc3RlbmVyRXJyb3JfMSBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlbHlOb3RpZnlFcnJvcihvbkVycm9yLCBsaXN0ZW5lckVycm9yXzEsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZEJ5OiBcImVmZmVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGludGVybmFsVGFza0NvbnRyb2xsZXIsIGxpc3RlbmVyQ29tcGxldGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmRlbGV0ZShpbnRlcm5hbFRhc2tDb250cm9sbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzcgLyplbmRmaW5hbGx5Ki9dO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pOyB9O1xyXG4gICAgdmFyIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUobGlzdGVuZXJNYXApO1xyXG4gICAgdmFyIG1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoYXBpKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIGlmIChhZGRMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdGFydExpc3RlbmluZyhhY3Rpb24ucGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjbGVhckFsbExpc3RlbmVycy5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlbW92ZUxpc3RlbmVyLm1hdGNoKGFjdGlvbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0b3BMaXN0ZW5pbmcoYWN0aW9uLnBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb3JpZ2luYWxTdGF0ZSA9IGFwaS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgIHZhciBnZXRPcmlnaW5hbFN0YXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxTdGF0ZSA9PT0gSU5URVJOQUxfTklMX1RPS0VOKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYWxtICsgXCI6IGdldE9yaWdpbmFsU3RhdGUgY2FuIG9ubHkgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHlcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgcmVzdWx0O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IG5leHQoYWN0aW9uKTtcclxuICAgICAgICAgICAgaWYgKGxpc3RlbmVyTWFwLnNpemUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gYXBpLmdldFN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXJFbnRyaWVzID0gQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGxpc3RlbmVyRW50cmllc18xID0gbGlzdGVuZXJFbnRyaWVzOyBfaSA8IGxpc3RlbmVyRW50cmllc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IGxpc3RlbmVyRW50cmllc18xW19pXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcnVuTGlzdGVuZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBydW5MaXN0ZW5lciA9IGVudHJ5LnByZWRpY2F0ZShhY3Rpb24sIGN1cnJlbnRTdGF0ZSwgb3JpZ2luYWxTdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChwcmVkaWNhdGVFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBydW5MaXN0ZW5lciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlbHlOb3RpZnlFcnJvcihvbkVycm9yLCBwcmVkaWNhdGVFcnJvciwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkQnk6IFwicHJlZGljYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcnVuTGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVyKGVudHJ5LCBhY3Rpb24sIGFwaSwgZ2V0T3JpZ2luYWxTdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhdGUgPSBJTlRFUk5BTF9OSUxfVE9LRU47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9OyB9OyB9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtaWRkbGV3YXJlOiBtaWRkbGV3YXJlLFxyXG4gICAgICAgIHN0YXJ0TGlzdGVuaW5nOiBzdGFydExpc3RlbmluZyxcclxuICAgICAgICBzdG9wTGlzdGVuaW5nOiBzdG9wTGlzdGVuaW5nLFxyXG4gICAgICAgIGNsZWFyTGlzdGVuZXJzOiBjbGVhckxpc3RlbmVyTWlkZGxld2FyZVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvaW5kZXgudHNcclxuZW5hYmxlRVM1KCk7XHJcbmV4cG9ydCB7IE1pZGRsZXdhcmVBcnJheSwgVGFza0Fib3J0RXJyb3IsIGFkZExpc3RlbmVyLCBjbGVhckFsbExpc3RlbmVycywgY29uZmlndXJlU3RvcmUsIGNyZWF0ZUFjdGlvbiwgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IsIGNyZWF0ZUVudGl0eUFkYXB0ZXIsIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSwgY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlLCBkZWZhdWx0MiBhcyBjcmVhdGVOZXh0U3RhdGUsIGNyZWF0ZVJlZHVjZXIsIGNyZWF0ZVNlbGVjdG9yMiBhcyBjcmVhdGVTZWxlY3RvciwgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLCBjcmVhdGVTbGljZSwgY3VycmVudDIgYXMgY3VycmVudCwgZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlLCBmcmVlemUsIGdldERlZmF1bHRNaWRkbGV3YXJlLCBnZXRUeXBlLCBpc0FsbE9mLCBpc0FueU9mLCBpc0FzeW5jVGh1bmtBY3Rpb24sIGlzRHJhZnQ0IGFzIGlzRHJhZnQsIGlzRnVsZmlsbGVkLCBpc0ltbXV0YWJsZURlZmF1bHQsIGlzUGVuZGluZywgaXNQbGFpbiwgaXNQbGFpbk9iamVjdCwgaXNSZWplY3RlZCwgaXNSZWplY3RlZFdpdGhWYWx1ZSwgbWluaVNlcmlhbGl6ZUVycm9yLCBuYW5vaWQsIG9yaWdpbmFsLCByZW1vdmVMaXN0ZW5lciwgdW53cmFwUmVzdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZHV4LXRvb2xraXQuZXNtLmpzLm1hcCIsImV4cG9ydCBjb25zdCBJTkRFTlQgPSAnICAnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9KRUNUID0gJ0d1ZXN0IFByb2plY3QnO1xuXG5leHBvcnQgY29uc3QgYm9pbGVycGxhdGVfc3RhcnQgPSAoc2VydmVyOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIFtcbiAgICAnY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoXFwnc3VwZXJ0ZXN0XFwnKTtcXG4nLFxuICAgIGBjb25zdCBzZXJ2ZXIgPSAnJHtzZXJ2ZXJ9JztcXG5gLFxuICAgIGAke0lOREVOVH1cXG5gLFxuICAgICdkZXNjcmliZShcXCdSb3V0ZSBJbnRlZ3JhdGlvbiBUZXN0aW5nXFwnLCAoICkgPT4ge1xcbicsXG4gIF07XG59O1xuXG5leHBvcnQgY29uc3QgQk9JTEVSUExBVEVfRU5EID0gJ30pOyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NMSVBCT0FSRCA9XG4gICdZb3VyIENsaXBib2FyZCBpcyBjdXJyZW50bHkgZW1wdHkhXFxuUGxlYXNlIGdlbmVyYXRlIGEgdGVzdCBiZWZvcmUgd2UgY2FuIGRpc3BsYXkgeW91ciB0ZXN0aW5nIGNvZGUgaGVyZS4nO1xuIiwiaW1wb3J0IHsgY3JlYXRlU2xpY2UsIFBheWxvYWRBY3Rpb24sIGNyZWF0ZUFzeW5jVGh1bmsgfSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcbmltcG9ydCB7IERFRkFVTFRfUFJPSkVDVCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB1c2VySW5mb1N0YXRlVHlwZSwgcHJvamVjdHNUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuY29uc3Qgc2hvd1NhdmUgPSAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY2xpcGJvYXJkRGF0YScpKSA/IHRydWUgOiBmYWxzZTtcbmNvbnN0IGluaXRpYWxTdGF0ZTogdXNlckluZm9TdGF0ZVR5cGUgPSB7XG4gIHNob3dMb2dpbjogZmFsc2UsXG4gIHNob3dTYXZlOiBzaG93U2F2ZSxcbiAgdXNlcklkOiAwLFxuICBwcm9qZWN0c0luZm86IFtcbiAgICB7XG4gICAgICBwcm9qZWN0X2lkOiAwLFxuICAgICAgcHJvamVjdF9uYW1lOiBERUZBVUxUX1BST0pFQ1QsXG4gICAgICB1c2VyX2lkOiAwLFxuICAgICAgc2hvd0FjY2Vzc0NsaXBib2FyZDogZmFsc2UsXG4gICAgfSxcbiAgXSxcbiAgY3VycmVudFByb2plY3Q6IERFRkFVTFRfUFJPSkVDVCxcbiAgY3VycmVudFByb2plY3RJZDogMCxcbiAgbmV3UHJvamVjdDogJycsXG59O1xuXG5leHBvcnQgY29uc3QgdXNlckluZm9TbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogJ3VzZXJJbmZvJyxcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge1xuICAgIHNldFNob3dMb2dpbjogKHN0YXRlOiB1c2VySW5mb1N0YXRlVHlwZSkgPT4ge1xuICAgICAgc3RhdGUuc2hvd0xvZ2luID0gc3RhdGUuc2hvd0xvZ2luID8gZmFsc2UgOiB0cnVlO1xuICAgIH0sXG4gICAgc2V0U2hvd1NhdmU6IChzdGF0ZTogdXNlckluZm9TdGF0ZVR5cGUpID0+IHtcbiAgICAgIHN0YXRlLnNob3dTYXZlID0gIXN0YXRlLnNob3dTYXZlO1xuICAgIH0sXG4gICAgc2V0UHJvamVjdHNJbmZvOiAoXG4gICAgICBzdGF0ZTogdXNlckluZm9TdGF0ZVR5cGUsXG4gICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248cHJvamVjdHNUeXBlW10+XG4gICAgKSA9PiB7XG4gICAgICBzdGF0ZS5wcm9qZWN0c0luZm8gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICB9LFxuICAgIHNldEN1cnJlbnRQcm9qZWN0OiAoXG4gICAgICBzdGF0ZTogdXNlckluZm9TdGF0ZVR5cGUsXG4gICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248c3RyaW5nPlxuICAgICkgPT4ge1xuICAgICAgc3RhdGUuY3VycmVudFByb2plY3QgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGNvbnN0IHByb2plY3RzID0gc3RhdGUucHJvamVjdHNJbmZvLm1hcCgoZWwpID0+IGVsLnByb2plY3RfbmFtZSk7XG4gICAgICBjb25zdCBwcm9qZWN0SWRzID0gc3RhdGUucHJvamVjdHNJbmZvLm1hcCgoZWwpID0+IGVsLnByb2plY3RfaWQpO1xuICAgICAgc3RhdGUuY3VycmVudFByb2plY3RJZCA9IHByb2plY3RJZHNbcHJvamVjdHMuaW5kZXhPZihhY3Rpb24ucGF5bG9hZCldO1xuICAgIH0sXG4gICAgc2V0TmV3UHJvamVjdDogKFxuICAgICAgc3RhdGU6IHVzZXJJbmZvU3RhdGVUeXBlLFxuICAgICAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPHN0cmluZz5cbiAgICApID0+IHtcbiAgICAgIHN0YXRlLm5ld1Byb2plY3QgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICB9LFxuICAgIHNldFVzZXJJZDogKHN0YXRlOiB1c2VySW5mb1N0YXRlVHlwZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPG51bWJlcj4pID0+IHtcbiAgICAgIHN0YXRlLnVzZXJJZCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgIH0sXG4gICAgbG9nb3V0OiAoc3RhdGU6IHVzZXJJbmZvU3RhdGVUeXBlKSA9PiB7XG4gICAgICBzdGF0ZS5wcm9qZWN0c0luZm8gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm9qZWN0X2lkOiAwLFxuICAgICAgICAgIHByb2plY3RfbmFtZTogREVGQVVMVF9QUk9KRUNULFxuICAgICAgICAgIHVzZXJfaWQ6IDAsXG4gICAgICAgICAgc2hvd0FjY2Vzc0NsaXBib2FyZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgc3RhdGUudXNlcklkID0gMDtcbiAgICAgIHN0YXRlLmN1cnJlbnRQcm9qZWN0ID0gREVGQVVMVF9QUk9KRUNUO1xuICAgICAgc3RhdGUubmV3UHJvamVjdCA9ICcnO1xuXG4gICAgfSxcbiAgICBzZXRDbGlwYm9hcmREYXRhOiAoXG4gICAgICBzdGF0ZTogdXNlckluZm9TdGF0ZVR5cGUsXG4gICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248eyBwcm9qZWN0SWQ6IG51bWJlcjsgY2xpcGJvYXJkRGF0YTogc3RyaW5nW10gfT5cbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHByb2plY3RzID0gc3RhdGUucHJvamVjdHNJbmZvO1xuICAgICAgZm9yIChjb25zdCBwcm9qZWN0IG9mIHByb2plY3RzKSB7XG4gICAgICAgIGlmIChwcm9qZWN0LnByb2plY3RfaWQgPT09IGFjdGlvbi5wYXlsb2FkLnByb2plY3RJZCkge1xuICAgICAgICAgIHByb2plY3QuY2xpcGJvYXJkSW5mbyA9IGFjdGlvbi5wYXlsb2FkLmNsaXBib2FyZERhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFNob3dBY2Nlc3NDbGlwYm9hcmQ6IChcbiAgICAgIHN0YXRlOiB1c2VySW5mb1N0YXRlVHlwZSxcbiAgICAgIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxudW1iZXI+XG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBwcm9qZWN0cyA9IHN0YXRlLnByb2plY3RzSW5mbztcbiAgICAgIGZvciAoY29uc3QgcHJvamVjdCBvZiBwcm9qZWN0cykge1xuICAgICAgICBpZiAocHJvamVjdC5wcm9qZWN0X2lkID09PSBhY3Rpb24ucGF5bG9hZCkge1xuICAgICAgICAgIHByb2plY3Quc2hvd0FjY2Vzc0NsaXBib2FyZCA9IHByb2plY3Quc2hvd0FjY2Vzc0NsaXBib2FyZFxuICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2plY3Quc2hvd0FjY2Vzc0NsaXBib2FyZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgZXh0cmFSZWR1Y2VyczogKGJ1aWxkZXIpID0+IHtcbiAgICBidWlsZGVyLmFkZENhc2UoZGVsZXRlUHJvamVjdC5mdWxmaWxsZWQsIChzdGF0ZTogdXNlckluZm9TdGF0ZVR5cGUsIGFjdGlvbjogYW55KSA9PiB7XG4gICAgICBzdGF0ZS5wcm9qZWN0c0luZm8gPSBhY3Rpb24ucGF5bG9hZC5kYXRhO1xuICAgIH0pO1xuICB9LFxufSk7XG5cbmNvbnN0IHRodW5rcyA9IHtcbiAgZGVsZXRlUHJvamVjdDogY3JlYXRlQXN5bmNUaHVuayhcbiAgICAndXNlckluZm9TbGljZS9kZWxldGVQcm9qZWN0JyxcbiAgICBhc3luYyAocHJvamVjdElkOiBudW1iZXIpID0+IHtcbiAgICAgIGxldCByZXNwb25zZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZGVsZXRlKGAvYXBpL3Byb2plY3QvJHtwcm9qZWN0SWR9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZygndXNlckluZm9TbGljZS9kZWxldGVQcm9qZWN0JywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgKSxcbn07XG5cbmV4cG9ydCBjb25zdCB7XG4gIHNldFNob3dMb2dpbixcbiAgc2V0U2hvd1NhdmUsXG4gIHNldFByb2plY3RzSW5mbyxcbiAgc2V0Q3VycmVudFByb2plY3QsXG4gIGxvZ291dCxcbiAgc2V0Q2xpcGJvYXJkRGF0YSxcbiAgc2V0U2hvd0FjY2Vzc0NsaXBib2FyZCxcbiAgc2V0VXNlcklkLFxuICBzZXROZXdQcm9qZWN0LFxufSA9IHVzZXJJbmZvU2xpY2UuYWN0aW9ucztcblxuZXhwb3J0IGNvbnN0IHsgZGVsZXRlUHJvamVjdCB9ID0gdGh1bmtzO1xuZXhwb3J0IGRlZmF1bHQgdXNlckluZm9TbGljZS5yZWR1Y2VyO1xuIiwiLy8gRGVmYXVsdCB0byBhIGR1bW15IFwiYmF0Y2hcIiBpbXBsZW1lbnRhdGlvbiB0aGF0IGp1c3QgcnVucyB0aGUgY2FsbGJhY2tcbmZ1bmN0aW9uIGRlZmF1bHROb29wQmF0Y2goY2FsbGJhY2spIHtcbiAgY2FsbGJhY2soKTtcbn1cblxubGV0IGJhdGNoID0gZGVmYXVsdE5vb3BCYXRjaDsgLy8gQWxsb3cgaW5qZWN0aW5nIGFub3RoZXIgYmF0Y2hpbmcgZnVuY3Rpb24gbGF0ZXJcblxuZXhwb3J0IGNvbnN0IHNldEJhdGNoID0gbmV3QmF0Y2ggPT4gYmF0Y2ggPSBuZXdCYXRjaDsgLy8gU3VwcGx5IGEgZ2V0dGVyIGp1c3QgdG8gc2tpcCBkZWFsaW5nIHdpdGggRVNNIGJpbmRpbmdzXG5cbmV4cG9ydCBjb25zdCBnZXRCYXRjaCA9ICgpID0+IGJhdGNoOyIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgUmVhY3RSZWR1eENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmVhY3RSZWR1eENvbnRleHQuZGlzcGxheU5hbWUgPSAnUmVhY3RSZWR1eCc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0UmVkdXhDb250ZXh0OyIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4uL2NvbXBvbmVudHMvQ29udGV4dCc7XG5cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSB2YWx1ZSBvZiB0aGUgYFJlYWN0UmVkdXhDb250ZXh0YC4gVGhpcyBpcyBhIGxvdy1sZXZlbFxyXG4gKiBob29rIHRoYXQgeW91IHNob3VsZCB1c3VhbGx5IG5vdCBuZWVkIHRvIGNhbGwgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHthbnl9IHRoZSB2YWx1ZSBvZiB0aGUgYFJlYWN0UmVkdXhDb250ZXh0YFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiBpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXHJcbiAqIGltcG9ydCB7IHVzZVJlZHV4Q29udGV4dCB9IGZyb20gJ3JlYWN0LXJlZHV4J1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgQ291bnRlckNvbXBvbmVudCA9ICgpID0+IHtcclxuICogICBjb25zdCB7IHN0b3JlIH0gPSB1c2VSZWR1eENvbnRleHQoKVxyXG4gKiAgIHJldHVybiA8ZGl2PntzdG9yZS5nZXRTdGF0ZSgpfTwvZGl2PlxyXG4gKiB9XHJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZHV4Q29udGV4dCgpIHtcbiAgY29uc3QgY29udGV4dFZhbHVlID0gdXNlQ29udGV4dChSZWFjdFJlZHV4Q29udGV4dCk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbnRleHRWYWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgcmVhY3QtcmVkdXggY29udGV4dCB2YWx1ZTsgcGxlYXNlIGVuc3VyZSB0aGUgY29tcG9uZW50IGlzIHdyYXBwZWQgaW4gYSA8UHJvdmlkZXI+Jyk7XG4gIH1cblxuICByZXR1cm4gY29udGV4dFZhbHVlO1xufSIsImltcG9ydCB7IHVzZUNvbnRleHQsIHVzZURlYnVnVmFsdWUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZWR1eENvbnRleHQgYXMgdXNlRGVmYXVsdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vdXNlUmVkdXhDb250ZXh0JztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcbmltcG9ydCB7IG5vdEluaXRpYWxpemVkIH0gZnJvbSAnLi4vdXRpbHMvdXNlU3luY0V4dGVybmFsU3RvcmUnO1xubGV0IHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yID0gbm90SW5pdGlhbGl6ZWQ7XG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZVVzZVNlbGVjdG9yID0gZm4gPT4ge1xuICB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciA9IGZuO1xufTtcblxuY29uc3QgcmVmRXF1YWxpdHkgPSAoYSwgYikgPT4gYSA9PT0gYjtcbi8qKlxyXG4gKiBIb29rIGZhY3RvcnksIHdoaWNoIGNyZWF0ZXMgYSBgdXNlU2VsZWN0b3JgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VTZWxlY3RvcmAgaG9vayBib3VuZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAqL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZWxlY3Rvckhvb2soY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0KSB7XG4gIGNvbnN0IHVzZVJlZHV4Q29udGV4dCA9IGNvbnRleHQgPT09IFJlYWN0UmVkdXhDb250ZXh0ID8gdXNlRGVmYXVsdFJlZHV4Q29udGV4dCA6ICgpID0+IHVzZUNvbnRleHQoY29udGV4dCk7XG4gIHJldHVybiBmdW5jdGlvbiB1c2VTZWxlY3RvcihzZWxlY3RvciwgZXF1YWxpdHlGbiA9IHJlZkVxdWFsaXR5KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgc2VsZWN0b3IgdG8gdXNlU2VsZWN0b3JgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBzZWxlY3RvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBtdXN0IHBhc3MgYSBmdW5jdGlvbiBhcyBhIHNlbGVjdG9yIHRvIHVzZVNlbGVjdG9yYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZXF1YWxpdHlGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBtdXN0IHBhc3MgYSBmdW5jdGlvbiBhcyBhbiBlcXVhbGl0eSBmdW5jdGlvbiB0byB1c2VTZWxlY3RvcmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHN0b3JlLFxuICAgICAgc3Vic2NyaXB0aW9uLFxuICAgICAgZ2V0U2VydmVyU3RhdGVcbiAgICB9ID0gdXNlUmVkdXhDb250ZXh0KCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRTdGF0ZSA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yKHN1YnNjcmlwdGlvbi5hZGROZXN0ZWRTdWIsIHN0b3JlLmdldFN0YXRlLCBnZXRTZXJ2ZXJTdGF0ZSB8fCBzdG9yZS5nZXRTdGF0ZSwgc2VsZWN0b3IsIGVxdWFsaXR5Rm4pO1xuICAgIHVzZURlYnVnVmFsdWUoc2VsZWN0ZWRTdGF0ZSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkU3RhdGU7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgcmVkdXggc3RvcmUncyBzdGF0ZS4gVGhpcyBob29rIHRha2VzIGEgc2VsZWN0b3IgZnVuY3Rpb25cclxuICogYXMgYW4gYXJndW1lbnQuIFRoZSBzZWxlY3RvciBpcyBjYWxsZWQgd2l0aCB0aGUgc3RvcmUgc3RhdGUuXHJcbiAqXHJcbiAqIFRoaXMgaG9vayB0YWtlcyBhbiBvcHRpb25hbCBlcXVhbGl0eSBjb21wYXJpc29uIGZ1bmN0aW9uIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyXHJcbiAqIHRoYXQgYWxsb3dzIHlvdSB0byBjdXN0b21pemUgdGhlIHdheSB0aGUgc2VsZWN0ZWQgc3RhdGUgaXMgY29tcGFyZWQgdG8gZGV0ZXJtaW5lXHJcbiAqIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBuZWVkcyB0byBiZSByZS1yZW5kZXJlZC5cclxuICpcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2VsZWN0b3IgdGhlIHNlbGVjdG9yIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBlcXVhbGl0eUZuIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgZXF1YWxpdHlcclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHNlbGVjdGVkIHN0YXRlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IENvdW50ZXJDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3QgY291bnRlciA9IHVzZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLmNvdW50ZXIpXHJcbiAqICAgcmV0dXJuIDxkaXY+e2NvdW50ZXJ9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VTZWxlY3RvciA9IC8qI19fUFVSRV9fKi9jcmVhdGVTZWxlY3Rvckhvb2soKTsiLCJleHBvcnQgY29uc3Qgbm90SW5pdGlhbGl6ZWQgPSAoKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcigndVNFUyBub3QgaW5pdGlhbGl6ZWQhJyk7XG59OyIsImltcG9ydCB7IGdldEJhdGNoIH0gZnJvbSAnLi9iYXRjaCc7IC8vIGVuY2Fwc3VsYXRlcyB0aGUgc3Vic2NyaXB0aW9uIGxvZ2ljIGZvciBjb25uZWN0aW5nIGEgY29tcG9uZW50IHRvIHRoZSByZWR1eCBzdG9yZSwgYXNcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxuLy8gYW5jZXN0b3IgY29tcG9uZW50cyByZS1yZW5kZXIgYmVmb3JlIGRlc2NlbmRhbnRzXG5cbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpIHtcbiAgY29uc3QgYmF0Y2ggPSBnZXRCYXRjaCgpO1xuICBsZXQgZmlyc3QgPSBudWxsO1xuICBsZXQgbGFzdCA9IG51bGw7XG4gIHJldHVybiB7XG4gICAgY2xlYXIoKSB7XG4gICAgICBmaXJzdCA9IG51bGw7XG4gICAgICBsYXN0ID0gbnVsbDtcbiAgICB9LFxuXG4gICAgbm90aWZ5KCkge1xuICAgICAgYmF0Y2goKCkgPT4ge1xuICAgICAgICBsZXQgbGlzdGVuZXIgPSBmaXJzdDtcblxuICAgICAgICB3aGlsZSAobGlzdGVuZXIpIHtcbiAgICAgICAgICBsaXN0ZW5lci5jYWxsYmFjaygpO1xuICAgICAgICAgIGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGdldCgpIHtcbiAgICAgIGxldCBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgIGxldCBsaXN0ZW5lciA9IGZpcnN0O1xuXG4gICAgICB3aGlsZSAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICBsaXN0ZW5lciA9IGxpc3RlbmVyLm5leHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaXN0ZW5lcnM7XG4gICAgfSxcblxuICAgIHN1YnNjcmliZShjYWxsYmFjaykge1xuICAgICAgbGV0IGlzU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgICBsZXQgbGlzdGVuZXIgPSBsYXN0ID0ge1xuICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgcHJldjogbGFzdFxuICAgICAgfTtcblxuICAgICAgaWYgKGxpc3RlbmVyLnByZXYpIHtcbiAgICAgICAgbGlzdGVuZXIucHJldi5uZXh0ID0gbGlzdGVuZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXJzdCA9IGxpc3RlbmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICghaXNTdWJzY3JpYmVkIHx8IGZpcnN0ID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChsaXN0ZW5lci5uZXh0KSB7XG4gICAgICAgICAgbGlzdGVuZXIubmV4dC5wcmV2ID0gbGlzdGVuZXIucHJldjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXN0ID0gbGlzdGVuZXIucHJldjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0ZW5lci5wcmV2KSB7XG4gICAgICAgICAgbGlzdGVuZXIucHJldi5uZXh0ID0gbGlzdGVuZXIubmV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaXJzdCA9IGxpc3RlbmVyLm5leHQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gIH07XG59XG5cbmNvbnN0IG51bGxMaXN0ZW5lcnMgPSB7XG4gIG5vdGlmeSgpIHt9LFxuXG4gIGdldDogKCkgPT4gW11cbn07XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Vic2NyaXB0aW9uKHN0b3JlLCBwYXJlbnRTdWIpIHtcbiAgbGV0IHVuc3Vic2NyaWJlO1xuICBsZXQgbGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcblxuICBmdW5jdGlvbiBhZGROZXN0ZWRTdWIobGlzdGVuZXIpIHtcbiAgICB0cnlTdWJzY3JpYmUoKTtcbiAgICByZXR1cm4gbGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7XG4gIH1cblxuICBmdW5jdGlvbiBub3RpZnlOZXN0ZWRTdWJzKCkge1xuICAgIGxpc3RlbmVycy5ub3RpZnkoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZVdyYXBwZXIoKSB7XG4gICAgaWYgKHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlKSB7XG4gICAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih1bnN1YnNjcmliZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cnlTdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF1bnN1YnNjcmliZSkge1xuICAgICAgdW5zdWJzY3JpYmUgPSBwYXJlbnRTdWIgPyBwYXJlbnRTdWIuYWRkTmVzdGVkU3ViKGhhbmRsZUNoYW5nZVdyYXBwZXIpIDogc3RvcmUuc3Vic2NyaWJlKGhhbmRsZUNoYW5nZVdyYXBwZXIpO1xuICAgICAgbGlzdGVuZXJzID0gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKHVuc3Vic2NyaWJlKSB7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgdW5zdWJzY3JpYmUgPSB1bmRlZmluZWQ7XG4gICAgICBsaXN0ZW5lcnMuY2xlYXIoKTtcbiAgICAgIGxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0ge1xuICAgIGFkZE5lc3RlZFN1YixcbiAgICBub3RpZnlOZXN0ZWRTdWJzLFxuICAgIGhhbmRsZUNoYW5nZVdyYXBwZXIsXG4gICAgaXNTdWJzY3JpYmVkLFxuICAgIHRyeVN1YnNjcmliZSxcbiAgICB0cnlVbnN1YnNjcmliZSxcbiAgICBnZXRMaXN0ZW5lcnM6ICgpID0+IGxpc3RlbmVyc1xuICB9O1xuICByZXR1cm4gc3Vic2NyaXB0aW9uO1xufSIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAncmVhY3QnOyAvLyBSZWFjdCBjdXJyZW50bHkgdGhyb3dzIGEgd2FybmluZyB3aGVuIHVzaW5nIHVzZUxheW91dEVmZmVjdCBvbiB0aGUgc2VydmVyLlxuLy8gVG8gZ2V0IGFyb3VuZCBpdCwgd2UgY2FuIGNvbmRpdGlvbmFsbHkgdXNlRWZmZWN0IG9uIHRoZSBzZXJ2ZXIgKG5vLW9wKSBhbmRcbi8vIHVzZUxheW91dEVmZmVjdCBpbiB0aGUgYnJvd3Nlci4gV2UgbmVlZCB1c2VMYXlvdXRFZmZlY3QgdG8gZW5zdXJlIHRoZSBzdG9yZVxuLy8gc3Vic2NyaXB0aW9uIGNhbGxiYWNrIGFsd2F5cyBoYXMgdGhlIHNlbGVjdG9yIGZyb20gdGhlIGxhdGVzdCByZW5kZXIgY29tbWl0XG4vLyBhdmFpbGFibGUsIG90aGVyd2lzZSBhIHN0b3JlIHVwZGF0ZSBtYXkgaGFwcGVuIGJldHdlZW4gcmVuZGVyIGFuZCB0aGUgZWZmZWN0LFxuLy8gd2hpY2ggbWF5IGNhdXNlIG1pc3NlZCB1cGRhdGVzOyB3ZSBhbHNvIG11c3QgZW5zdXJlIHRoZSBzdG9yZSBzdWJzY3JpcHRpb25cbi8vIGlzIGNyZWF0ZWQgc3luY2hyb25vdXNseSwgb3RoZXJ3aXNlIGEgc3RvcmUgdXBkYXRlIG1heSBvY2N1ciBiZWZvcmUgdGhlXG4vLyBzdWJzY3JpcHRpb24gaXMgY3JlYXRlZCBhbmQgYW4gaW5jb25zaXN0ZW50IHN0YXRlIG1heSBiZSBvYnNlcnZlZFxuLy8gTWF0Y2hlcyBsb2dpYyBpbiBSZWFjdCdzIGBzaGFyZWQvRXhlY3V0aW9uRW52aXJvbm1lbnRgIGZpbGVcblxuZXhwb3J0IGNvbnN0IGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpO1xuZXhwb3J0IGNvbnN0IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSBjYW5Vc2VET00gPyB1c2VMYXlvdXRFZmZlY3QgOiB1c2VFZmZlY3Q7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInJlYWN0UmVkdXhGb3J3YXJkZWRSZWZcIl07XG5cbi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbmltcG9ydCBob2lzdFN0YXRpY3MgZnJvbSAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzVmFsaWRFbGVtZW50VHlwZSwgaXNDb250ZXh0Q29uc3VtZXIgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgZGVmYXVsdFNlbGVjdG9yRmFjdG9yeSBmcm9tICcuLi9jb25uZWN0L3NlbGVjdG9yRmFjdG9yeSc7XG5pbXBvcnQgeyBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3J5IH0gZnJvbSAnLi4vY29ubmVjdC9tYXBEaXNwYXRjaFRvUHJvcHMnO1xuaW1wb3J0IHsgbWFwU3RhdGVUb1Byb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWFwU3RhdGVUb1Byb3BzJztcbmltcG9ydCB7IG1lcmdlUHJvcHNGYWN0b3J5IH0gZnJvbSAnLi4vY29ubmVjdC9tZXJnZVByb3BzJztcbmltcG9ydCB7IGNyZWF0ZVN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL3V0aWxzL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IH0gZnJvbSAnLi4vdXRpbHMvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCc7XG5pbXBvcnQgc2hhbGxvd0VxdWFsIGZyb20gJy4uL3V0aWxzL3NoYWxsb3dFcXVhbCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICcuLi91dGlscy93YXJuaW5nJztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi9Db250ZXh0JztcbmltcG9ydCB7IG5vdEluaXRpYWxpemVkIH0gZnJvbSAnLi4vdXRpbHMvdXNlU3luY0V4dGVybmFsU3RvcmUnO1xubGV0IHVzZVN5bmNFeHRlcm5hbFN0b3JlID0gbm90SW5pdGlhbGl6ZWQ7XG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZUNvbm5lY3QgPSBmbiA9PiB7XG4gIHVzZVN5bmNFeHRlcm5hbFN0b3JlID0gZm47XG59OyAvLyBEZWZpbmUgc29tZSBjb25zdGFudCBhcnJheXMganVzdCB0byBhdm9pZCByZS1jcmVhdGluZyB0aGVzZVxuXG5jb25zdCBFTVBUWV9BUlJBWSA9IFtudWxsLCAwXTtcbmNvbnN0IE5PX1NVQlNDUklQVElPTl9BUlJBWSA9IFtudWxsLCBudWxsXTsgLy8gQXR0ZW1wdHMgdG8gc3RyaW5naWZ5IHdoYXRldmVyIG5vdC1yZWFsbHktYS1jb21wb25lbnQgdmFsdWUgd2Ugd2VyZSBnaXZlblxuLy8gZm9yIGxvZ2dpbmcgaW4gYW4gZXJyb3IgbWVzc2FnZVxuXG5jb25zdCBzdHJpbmdpZnlDb21wb25lbnQgPSBDb21wID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoQ29tcCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBTdHJpbmcoQ29tcCk7XG4gIH1cbn07XG5cbi8vIFRoaXMgaXMgXCJqdXN0XCIgYSBgdXNlTGF5b3V0RWZmZWN0YCwgYnV0IHdpdGggdHdvIG1vZGlmaWNhdGlvbnM6XG4vLyAtIHdlIG5lZWQgdG8gZmFsbCBiYWNrIHRvIGB1c2VFZmZlY3RgIGluIFNTUiB0byBhdm9pZCBhbm5veWluZyB3YXJuaW5nc1xuLy8gLSB3ZSBleHRyYWN0IHRoaXMgdG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhdm9pZCBjbG9zaW5nIG92ZXIgdmFsdWVzXG4vLyAgIGFuZCBjYXVzaW5nIG1lbW9yeSBsZWFrc1xuZnVuY3Rpb24gdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdFdpdGhBcmdzKGVmZmVjdEZ1bmMsIGVmZmVjdEFyZ3MsIGRlcGVuZGVuY2llcykge1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IGVmZmVjdEZ1bmMoLi4uZWZmZWN0QXJncyksIGRlcGVuZGVuY2llcyk7XG59IC8vIEVmZmVjdCBjYWxsYmFjaywgZXh0cmFjdGVkOiBhc3NpZ24gdGhlIGxhdGVzdCBwcm9wcyB2YWx1ZXMgdG8gcmVmcyBmb3IgbGF0ZXIgdXNhZ2VcblxuXG5mdW5jdGlvbiBjYXB0dXJlV3JhcHBlclByb3BzKGxhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgd3JhcHBlclByb3BzLCAvLyBhY3R1YWxDaGlsZFByb3BzOiB1bmtub3duLFxuY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3Vicykge1xuICAvLyBXZSB3YW50IHRvIGNhcHR1cmUgdGhlIHdyYXBwZXIgcHJvcHMgYW5kIGNoaWxkIHByb3BzIHdlIHVzZWQgZm9yIGxhdGVyIGNvbXBhcmlzb25zXG4gIGxhc3RXcmFwcGVyUHJvcHMuY3VycmVudCA9IHdyYXBwZXJQcm9wcztcbiAgcmVuZGVySXNTY2hlZHVsZWQuY3VycmVudCA9IGZhbHNlOyAvLyBJZiB0aGUgcmVuZGVyIHdhcyBmcm9tIGEgc3RvcmUgdXBkYXRlLCBjbGVhciBvdXQgdGhhdCByZWZlcmVuY2UgYW5kIGNhc2NhZGUgdGhlIHN1YnNjcmliZXIgdXBkYXRlXG5cbiAgaWYgKGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCkge1xuICAgIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCA9IG51bGw7XG4gICAgbm90aWZ5TmVzdGVkU3VicygpO1xuICB9XG59IC8vIEVmZmVjdCBjYWxsYmFjaywgZXh0cmFjdGVkOiBzdWJzY3JpYmUgdG8gdGhlIFJlZHV4IHN0b3JlIG9yIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yLFxuLy8gY2hlY2sgZm9yIHVwZGF0ZXMgYWZ0ZXIgZGlzcGF0Y2hlZCBhY3Rpb25zLCBhbmQgdHJpZ2dlciByZS1yZW5kZXJzLlxuXG5cbmZ1bmN0aW9uIHN1YnNjcmliZVVwZGF0ZXMoc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLCBzdG9yZSwgc3Vic2NyaXB0aW9uLCBjaGlsZFByb3BzU2VsZWN0b3IsIGxhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgaXNNb3VudGVkLCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLCBub3RpZnlOZXN0ZWRTdWJzLCAvLyBmb3JjZUNvbXBvbmVudFVwZGF0ZURpc3BhdGNoOiBSZWFjdC5EaXNwYXRjaDxhbnk+LFxuYWRkaXRpb25hbFN1YnNjcmliZUxpc3RlbmVyKSB7XG4gIC8vIElmIHdlJ3JlIG5vdCBzdWJzY3JpYmVkIHRvIHRoZSBzdG9yZSwgbm90aGluZyB0byBkbyBoZXJlXG4gIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm4gKCkgPT4ge307IC8vIENhcHR1cmUgdmFsdWVzIGZvciBjaGVja2luZyBpZiBhbmQgd2hlbiB0aGlzIGNvbXBvbmVudCB1bm1vdW50c1xuXG4gIGxldCBkaWRVbnN1YnNjcmliZSA9IGZhbHNlO1xuICBsZXQgbGFzdFRocm93bkVycm9yID0gbnVsbDsgLy8gV2UnbGwgcnVuIHRoaXMgY2FsbGJhY2sgZXZlcnkgdGltZSBhIHN0b3JlIHN1YnNjcmlwdGlvbiB1cGRhdGUgcHJvcGFnYXRlcyB0byB0aGlzIGNvbXBvbmVudFxuXG4gIGNvbnN0IGNoZWNrRm9yVXBkYXRlcyA9ICgpID0+IHtcbiAgICBpZiAoZGlkVW5zdWJzY3JpYmUgfHwgIWlzTW91bnRlZC5jdXJyZW50KSB7XG4gICAgICAvLyBEb24ndCBydW4gc3RhbGUgbGlzdGVuZXJzLlxuICAgICAgLy8gUmVkdXggZG9lc24ndCBndWFyYW50ZWUgdW5zdWJzY3JpcHRpb25zIGhhcHBlbiB1bnRpbCBuZXh0IGRpc3BhdGNoLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVE9ETyBXZSdyZSBjdXJyZW50bHkgY2FsbGluZyBnZXRTdGF0ZSBvdXJzZWx2ZXMgaGVyZSwgcmF0aGVyIHRoYW4gbGV0dGluZyBgdVNFU2AgZG8gaXRcblxuXG4gICAgY29uc3QgbGF0ZXN0U3RvcmVTdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgbGV0IG5ld0NoaWxkUHJvcHMsIGVycm9yO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEFjdHVhbGx5IHJ1biB0aGUgc2VsZWN0b3Igd2l0aCB0aGUgbW9zdCByZWNlbnQgc3RvcmUgc3RhdGUgYW5kIHdyYXBwZXIgcHJvcHNcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGF0IHRoZSBjaGlsZCBwcm9wcyBzaG91bGQgYmVcbiAgICAgIG5ld0NoaWxkUHJvcHMgPSBjaGlsZFByb3BzU2VsZWN0b3IobGF0ZXN0U3RvcmVTdGF0ZSwgbGFzdFdyYXBwZXJQcm9wcy5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvciA9IGU7XG4gICAgICBsYXN0VGhyb3duRXJyb3IgPSBlO1xuICAgIH1cblxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGxhc3RUaHJvd25FcnJvciA9IG51bGw7XG4gICAgfSAvLyBJZiB0aGUgY2hpbGQgcHJvcHMgaGF2ZW4ndCBjaGFuZ2VkLCBub3RoaW5nIHRvIGRvIGhlcmUgLSBjYXNjYWRlIHRoZSBzdWJzY3JpcHRpb24gdXBkYXRlXG5cblxuICAgIGlmIChuZXdDaGlsZFByb3BzID09PSBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50KSB7XG4gICAgICBpZiAoIXJlbmRlcklzU2NoZWR1bGVkLmN1cnJlbnQpIHtcbiAgICAgICAgbm90aWZ5TmVzdGVkU3VicygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTYXZlIHJlZmVyZW5jZXMgdG8gdGhlIG5ldyBjaGlsZCBwcm9wcy4gIE5vdGUgdGhhdCB3ZSB0cmFjayB0aGUgXCJjaGlsZCBwcm9wcyBmcm9tIHN0b3JlIHVwZGF0ZVwiXG4gICAgICAvLyBhcyBhIHJlZiBpbnN0ZWFkIG9mIGEgdXNlU3RhdGUvdXNlUmVkdWNlciBiZWNhdXNlIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgdmFsdWUgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZC4gIElmIHRoaXMgd2VudCBpbnRvIHVzZVN0YXRlL3VzZVJlZHVjZXIsIHdlIGNvdWxkbid0IGNsZWFyIG91dCB0aGUgdmFsdWUgd2l0aG91dFxuICAgICAgLy8gZm9yY2luZyBhbm90aGVyIHJlLXJlbmRlciwgd2hpY2ggd2UgZG9uJ3Qgd2FudC5cbiAgICAgIGxhc3RDaGlsZFByb3BzLmN1cnJlbnQgPSBuZXdDaGlsZFByb3BzO1xuICAgICAgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ID0gbmV3Q2hpbGRQcm9wcztcbiAgICAgIHJlbmRlcklzU2NoZWR1bGVkLmN1cnJlbnQgPSB0cnVlOyAvLyBUT0RPIFRoaXMgaXMgaGFja3kgYW5kIG5vdCBob3cgYHVTRVNgIGlzIG1lYW50IHRvIGJlIHVzZWRcbiAgICAgIC8vIFRyaWdnZXIgdGhlIFJlYWN0IGB1c2VTeW5jRXh0ZXJuYWxTdG9yZWAgc3Vic2NyaWJlclxuXG4gICAgICBhZGRpdGlvbmFsU3Vic2NyaWJlTGlzdGVuZXIoKTtcbiAgICB9XG4gIH07IC8vIEFjdHVhbGx5IHN1YnNjcmliZSB0byB0aGUgbmVhcmVzdCBjb25uZWN0ZWQgYW5jZXN0b3IgKG9yIHN0b3JlKVxuXG5cbiAgc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UgPSBjaGVja0ZvclVwZGF0ZXM7XG4gIHN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKTsgLy8gUHVsbCBkYXRhIGZyb20gdGhlIHN0b3JlIGFmdGVyIGZpcnN0IHJlbmRlciBpbiBjYXNlIHRoZSBzdG9yZSBoYXNcbiAgLy8gY2hhbmdlZCBzaW5jZSB3ZSBiZWdhbi5cblxuICBjaGVja0ZvclVwZGF0ZXMoKTtcblxuICBjb25zdCB1bnN1YnNjcmliZVdyYXBwZXIgPSAoKSA9PiB7XG4gICAgZGlkVW5zdWJzY3JpYmUgPSB0cnVlO1xuICAgIHN1YnNjcmlwdGlvbi50cnlVbnN1YnNjcmliZSgpO1xuICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gbnVsbDtcblxuICAgIGlmIChsYXN0VGhyb3duRXJyb3IpIHtcbiAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBjYXVnaHQgYW4gZXJyb3IgZHVlIHRvIGEgYmFkIG1hcFN0YXRlIGZ1bmN0aW9uLCBidXQgdGhlXG4gICAgICAvLyBwYXJlbnQgcmUtcmVuZGVyZWQgd2l0aG91dCB0aGlzIGNvbXBvbmVudCBhbmQgd2UncmUgYWJvdXQgdG8gdW5tb3VudC5cbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBhcyBsb25nIGFzIHdlIGRvIHRvcC1kb3duIHN1YnNjcmlwdGlvbnMgY29ycmVjdGx5LCBidXRcbiAgICAgIC8vIGlmIHdlIGV2ZXIgZG8gdGhvc2Ugd3JvbmcsIHRoaXMgdGhyb3cgd2lsbCBzdXJmYWNlIHRoZSBlcnJvciBpbiBvdXIgdGVzdHMuXG4gICAgICAvLyBJbiB0aGF0IGNhc2UsIHRocm93IHRoZSBlcnJvciBmcm9tIGhlcmUgc28gaXQgZG9lc24ndCBnZXQgbG9zdC5cbiAgICAgIHRocm93IGxhc3RUaHJvd25FcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHVuc3Vic2NyaWJlV3JhcHBlcjtcbn0gLy8gUmVkdWNlciBpbml0aWFsIHN0YXRlIGNyZWF0aW9uIGZvciBvdXIgdXBkYXRlIHJlZHVjZXJcblxuXG5jb25zdCBpbml0U3RhdGVVcGRhdGVzID0gKCkgPT4gRU1QVFlfQVJSQVk7XG5cbmZ1bmN0aW9uIHN0cmljdEVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGI7XG59XG4vKipcclxuICogSW5mZXJzIHRoZSB0eXBlIG9mIHByb3BzIHRoYXQgYSBjb25uZWN0b3Igd2lsbCBpbmplY3QgaW50byBhIGNvbXBvbmVudC5cclxuICovXG5cblxubGV0IGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24gPSBmYWxzZTtcbi8qKlxyXG4gKiBDb25uZWN0cyBhIFJlYWN0IGNvbXBvbmVudCB0byBhIFJlZHV4IHN0b3JlLlxyXG4gKlxyXG4gKiAtIFdpdGhvdXQgYXJndW1lbnRzLCBqdXN0IHdyYXBzIHRoZSBjb21wb25lbnQsIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIC8gcHJvcHNcclxuICpcclxuICogLSBJZiAyIHBhcmFtcyBhcmUgcGFzc2VkICgzcmQgcGFyYW0sIG1lcmdlUHJvcHMsIGlzIHNraXBwZWQpLCBkZWZhdWx0IGJlaGF2aW9yXHJcbiAqIGlzIHRvIG92ZXJyaWRlIG93blByb3BzIChhcyBzdGF0ZWQgaW4gdGhlIGRvY3MpLCBzbyB3aGF0IHJlbWFpbnMgaXMgZXZlcnl0aGluZyB0aGF0J3NcclxuICogbm90IGEgc3RhdGUgb3IgZGlzcGF0Y2ggcHJvcFxyXG4gKlxyXG4gKiAtIFdoZW4gM3JkIHBhcmFtIGlzIHBhc3NlZCwgd2UgZG9uJ3Qga25vdyBpZiBvd25Qcm9wcyBwcm9wYWdhdGUgYW5kIHdoZXRoZXIgdGhleVxyXG4gKiBzaG91bGQgYmUgdmFsaWQgY29tcG9uZW50IHByb3BzLCBiZWNhdXNlIGl0IGRlcGVuZHMgb24gbWVyZ2VQcm9wcyBpbXBsZW1lbnRhdGlvbi5cclxuICogQXMgc3VjaCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBleHRlbmQgb3duUHJvcHMgaW50ZXJmYWNlIGZyb20gc3RhdGUgb3JcclxuICogZGlzcGF0Y2ggcHJvcHMgb3IgYm90aCB3aGVuIGFwcGxpY2FibGVcclxuICpcclxuICogQHBhcmFtIG1hcFN0YXRlVG9Qcm9wcyBBIGZ1bmN0aW9uIHRoYXQgZXh0cmFjdHMgdmFsdWVzIGZyb20gc3RhdGVcclxuICogQHBhcmFtIG1hcERpc3BhdGNoVG9Qcm9wcyBTZXR1cCBmb3IgZGlzcGF0Y2hpbmcgYWN0aW9uc1xyXG4gKiBAcGFyYW0gbWVyZ2VQcm9wcyBPcHRpb25hbCBjYWxsYmFjayB0byBtZXJnZSBzdGF0ZSBhbmQgZGlzcGF0Y2ggcHJvcHMgdG9nZXRoZXJcclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGNvbm5lY3Rpb25cclxuICpcclxuICovXG5cbmZ1bmN0aW9uIGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIHtcbiAgLy8gVGhlIGBwdXJlYCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZCwgc28gVFMgZG9lc24ndCBsaWtlIHVzIGRlc3RydWN0dXJpbmcgdGhpcyB0byBjaGVjayBpdHMgZXhpc3RlbmNlLlxuICAvLyBAdHMtaWdub3JlXG4gIHB1cmUsXG4gIGFyZVN0YXRlc0VxdWFsID0gc3RyaWN0RXF1YWwsXG4gIGFyZU93blByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIGFyZVN0YXRlUHJvcHNFcXVhbCA9IHNoYWxsb3dFcXVhbCxcbiAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IHNoYWxsb3dFcXVhbCxcbiAgLy8gdXNlIFJlYWN0J3MgZm9yd2FyZFJlZiB0byBleHBvc2UgYSByZWYgb2YgdGhlIHdyYXBwZWQgY29tcG9uZW50XG4gIGZvcndhcmRSZWYgPSBmYWxzZSxcbiAgLy8gdGhlIGNvbnRleHQgY29uc3VtZXIgdG8gdXNlXG4gIGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dFxufSA9IHt9KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHB1cmUgIT09IHVuZGVmaW5lZCAmJiAhaGFzV2FybmVkQWJvdXREZXByZWNhdGVkUHVyZU9wdGlvbikge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkUHVyZU9wdGlvbiA9IHRydWU7XG4gICAgICB3YXJuaW5nKCdUaGUgYHB1cmVgIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLiBgY29ubmVjdGAgaXMgbm93IGFsd2F5cyBhIFwicHVyZS9tZW1vaXplZFwiIGNvbXBvbmVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IENvbnRleHQgPSBjb250ZXh0O1xuICBjb25zdCBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWFwU3RhdGVUb1Byb3BzRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMpO1xuICBjb25zdCBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yeShtYXBEaXNwYXRjaFRvUHJvcHMpO1xuICBjb25zdCBpbml0TWVyZ2VQcm9wcyA9IG1lcmdlUHJvcHNGYWN0b3J5KG1lcmdlUHJvcHMpO1xuICBjb25zdCBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMgPSBCb29sZWFuKG1hcFN0YXRlVG9Qcm9wcyk7XG5cbiAgY29uc3Qgd3JhcFdpdGhDb25uZWN0ID0gV3JhcHBlZENvbXBvbmVudCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWlzVmFsaWRFbGVtZW50VHlwZShXcmFwcGVkQ29tcG9uZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBjb25uZWN0LiBJbnN0ZWFkIHJlY2VpdmVkICR7c3RyaW5naWZ5Q29tcG9uZW50KFdyYXBwZWRDb21wb25lbnQpfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHdyYXBwZWRDb21wb25lbnROYW1lID0gV3JhcHBlZENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBXcmFwcGVkQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBgQ29ubmVjdCgke3dyYXBwZWRDb21wb25lbnROYW1lfSlgO1xuICAgIGNvbnN0IHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMgPSB7XG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIHdyYXBwZWRDb21wb25lbnROYW1lLFxuICAgICAgV3JhcHBlZENvbXBvbmVudCxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGluaXRNYXBTdGF0ZVRvUHJvcHMsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzLFxuICAgICAgaW5pdE1lcmdlUHJvcHMsXG4gICAgICBhcmVTdGF0ZXNFcXVhbCxcbiAgICAgIGFyZVN0YXRlUHJvcHNFcXVhbCxcbiAgICAgIGFyZU93blByb3BzRXF1YWwsXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIENvbm5lY3RGdW5jdGlvbihwcm9wcykge1xuICAgICAgY29uc3QgW3Byb3BzQ29udGV4dCwgcmVhY3RSZWR1eEZvcndhcmRlZFJlZiwgd3JhcHBlclByb3BzXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICAvLyBEaXN0aW5ndWlzaCBiZXR3ZWVuIGFjdHVhbCBcImRhdGFcIiBwcm9wcyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoZSB3cmFwcGVyIGNvbXBvbmVudCxcbiAgICAgICAgLy8gYW5kIHZhbHVlcyBuZWVkZWQgdG8gY29udHJvbCBiZWhhdmlvciAoZm9yd2FyZGVkIHJlZnMsIGFsdGVybmF0ZSBjb250ZXh0IGluc3RhbmNlcykuXG4gICAgICAgIC8vIFRvIG1haW50YWluIHRoZSB3cmFwcGVyUHJvcHMgb2JqZWN0IHJlZmVyZW5jZSwgbWVtb2l6ZSB0aGlzIGRlc3RydWN0dXJpbmcuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmXG4gICAgICAgIH0gPSBwcm9wcyxcbiAgICAgICAgICAgICAgd3JhcHBlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgICAgcmV0dXJuIFtwcm9wcy5jb250ZXh0LCByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmLCB3cmFwcGVyUHJvcHNdO1xuICAgICAgfSwgW3Byb3BzXSk7XG4gICAgICBjb25zdCBDb250ZXh0VG9Vc2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gVXNlcnMgbWF5IG9wdGlvbmFsbHkgcGFzcyBpbiBhIGN1c3RvbSBjb250ZXh0IGluc3RhbmNlIHRvIHVzZSBpbnN0ZWFkIG9mIG91ciBSZWFjdFJlZHV4Q29udGV4dC5cbiAgICAgICAgLy8gTWVtb2l6ZSB0aGUgY2hlY2sgdGhhdCBkZXRlcm1pbmVzIHdoaWNoIGNvbnRleHQgaW5zdGFuY2Ugd2Ugc2hvdWxkIHVzZS5cbiAgICAgICAgcmV0dXJuIHByb3BzQ29udGV4dCAmJiBwcm9wc0NvbnRleHQuQ29uc3VtZXIgJiYgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpc0NvbnRleHRDb25zdW1lciggLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQocHJvcHNDb250ZXh0LkNvbnN1bWVyLCBudWxsKSkgPyBwcm9wc0NvbnRleHQgOiBDb250ZXh0O1xuICAgICAgfSwgW3Byb3BzQ29udGV4dCwgQ29udGV4dF0pOyAvLyBSZXRyaWV2ZSB0aGUgc3RvcmUgYW5kIGFuY2VzdG9yIHN1YnNjcmlwdGlvbiB2aWEgY29udGV4dCwgaWYgYXZhaWxhYmxlXG5cbiAgICAgIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZUNvbnRleHQoQ29udGV4dFRvVXNlKTsgLy8gVGhlIHN0b3JlIF9tdXN0XyBleGlzdCBhcyBlaXRoZXIgYSBwcm9wIG9yIGluIGNvbnRleHQuXG4gICAgICAvLyBXZSdsbCBjaGVjayB0byBzZWUgaWYgaXQgX2xvb2tzXyBsaWtlIGEgUmVkdXggc3RvcmUgZmlyc3QuXG4gICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBwYXNzIHRocm91Z2ggYSBgc3RvcmVgIHByb3AgdGhhdCBpcyBqdXN0IGEgcGxhaW4gdmFsdWUuXG5cbiAgICAgIGNvbnN0IGRpZFN0b3JlQ29tZUZyb21Qcm9wcyA9IEJvb2xlYW4ocHJvcHMuc3RvcmUpICYmIEJvb2xlYW4ocHJvcHMuc3RvcmUuZ2V0U3RhdGUpICYmIEJvb2xlYW4ocHJvcHMuc3RvcmUuZGlzcGF0Y2gpO1xuICAgICAgY29uc3QgZGlkU3RvcmVDb21lRnJvbUNvbnRleHQgPSBCb29sZWFuKGNvbnRleHRWYWx1ZSkgJiYgQm9vbGVhbihjb250ZXh0VmFsdWUuc3RvcmUpO1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhZGlkU3RvcmVDb21lRnJvbVByb3BzICYmICFkaWRTdG9yZUNvbWVGcm9tQ29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIFwic3RvcmVcIiBpbiB0aGUgY29udGV4dCBvZiBgICsgYFwiJHtkaXNwbGF5TmFtZX1cIi4gRWl0aGVyIHdyYXAgdGhlIHJvb3QgY29tcG9uZW50IGluIGEgPFByb3ZpZGVyPiwgYCArIGBvciBwYXNzIGEgY3VzdG9tIFJlYWN0IGNvbnRleHQgcHJvdmlkZXIgdG8gPFByb3ZpZGVyPiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYCArIGBSZWFjdCBjb250ZXh0IGNvbnN1bWVyIHRvICR7ZGlzcGxheU5hbWV9IGluIGNvbm5lY3Qgb3B0aW9ucy5gKTtcbiAgICAgIH0gLy8gQmFzZWQgb24gdGhlIHByZXZpb3VzIGNoZWNrLCBvbmUgb2YgdGhlc2UgbXVzdCBiZSB0cnVlXG5cblxuICAgICAgY29uc3Qgc3RvcmUgPSBkaWRTdG9yZUNvbWVGcm9tUHJvcHMgPyBwcm9wcy5zdG9yZSA6IGNvbnRleHRWYWx1ZS5zdG9yZTtcbiAgICAgIGNvbnN0IGdldFNlcnZlclN0YXRlID0gZGlkU3RvcmVDb21lRnJvbUNvbnRleHQgPyBjb250ZXh0VmFsdWUuZ2V0U2VydmVyU3RhdGUgOiBzdG9yZS5nZXRTdGF0ZTtcbiAgICAgIGNvbnN0IGNoaWxkUHJvcHNTZWxlY3RvciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICAvLyBUaGUgY2hpbGQgcHJvcHMgc2VsZWN0b3IgbmVlZHMgdGhlIHN0b3JlIHJlZmVyZW5jZSBhcyBhbiBpbnB1dC5cbiAgICAgICAgLy8gUmUtY3JlYXRlIHRoaXMgc2VsZWN0b3Igd2hlbmV2ZXIgdGhlIHN0b3JlIGNoYW5nZXMuXG4gICAgICAgIHJldHVybiBkZWZhdWx0U2VsZWN0b3JGYWN0b3J5KHN0b3JlLmRpc3BhdGNoLCBzZWxlY3RvckZhY3RvcnlPcHRpb25zKTtcbiAgICAgIH0sIFtzdG9yZV0pO1xuICAgICAgY29uc3QgW3N1YnNjcmlwdGlvbiwgbm90aWZ5TmVzdGVkU3Vic10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKCFzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHJldHVybiBOT19TVUJTQ1JJUFRJT05fQVJSQVk7IC8vIFRoaXMgU3Vic2NyaXB0aW9uJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxuICAgICAgICAvLyBjb25uZWN0ZWQgdG8gdGhlIHN0b3JlIHZpYSBwcm9wcyBzaG91bGRuJ3QgdXNlIHN1YnNjcmlwdGlvbiBmcm9tIGNvbnRleHQsIG9yIHZpY2UgdmVyc2EuXG5cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY3JlYXRlU3Vic2NyaXB0aW9uKHN0b3JlLCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMgPyB1bmRlZmluZWQgOiBjb250ZXh0VmFsdWUuc3Vic2NyaXB0aW9uKTsgLy8gYG5vdGlmeU5lc3RlZFN1YnNgIGlzIGR1cGxpY2F0ZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBjb21wb25lbnQgaXMgdW5tb3VudGVkIGluXG4gICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLCB3aGVyZSBgc3Vic2NyaXB0aW9uYCB3aWxsIHRoZW4gYmUgbnVsbC4gVGhpcyBjYW5cbiAgICAgICAgLy8gcHJvYmFibHkgYmUgYXZvaWRlZCBpZiBTdWJzY3JpcHRpb24ncyBsaXN0ZW5lcnMgbG9naWMgaXMgY2hhbmdlZCB0byBub3QgY2FsbCBsaXN0ZW5lcnNcbiAgICAgICAgLy8gdGhhdCBoYXZlIGJlZW4gdW5zdWJzY3JpYmVkIGluIHRoZSAgbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcC5cblxuICAgICAgICBjb25zdCBub3RpZnlOZXN0ZWRTdWJzID0gc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnMuYmluZChzdWJzY3JpcHRpb24pO1xuICAgICAgICByZXR1cm4gW3N1YnNjcmlwdGlvbiwgbm90aWZ5TmVzdGVkU3Vic107XG4gICAgICB9LCBbc3RvcmUsIGRpZFN0b3JlQ29tZUZyb21Qcm9wcywgY29udGV4dFZhbHVlXSk7IC8vIERldGVybWluZSB3aGF0IHtzdG9yZSwgc3Vic2NyaXB0aW9ufSB2YWx1ZSBzaG91bGQgYmUgcHV0IGludG8gbmVzdGVkIGNvbnRleHQsIGlmIG5lY2Vzc2FyeSxcbiAgICAgIC8vIGFuZCBtZW1vaXplIHRoYXQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY29udGV4dCB1cGRhdGVzLlxuXG4gICAgICBjb25zdCBvdmVycmlkZGVuQ29udGV4dFZhbHVlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChkaWRTdG9yZUNvbWVGcm9tUHJvcHMpIHtcbiAgICAgICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBkaXJlY3RseSBzdWJzY3JpYmVkIHRvIGEgc3RvcmUgZnJvbSBwcm9wcy5cbiAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IGRlc2NlbmRhbnRzIHJlYWRpbmcgZnJvbSB0aGlzIHN0b3JlIC0gcGFzcyBkb3duIHdoYXRldmVyXG4gICAgICAgICAgLy8gdGhlIGV4aXN0aW5nIGNvbnRleHQgdmFsdWUgaXMgZnJvbSB0aGUgbmVhcmVzdCBjb25uZWN0ZWQgYW5jZXN0b3IuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHRWYWx1ZTtcbiAgICAgICAgfSAvLyBPdGhlcndpc2UsIHB1dCB0aGlzIGNvbXBvbmVudCdzIHN1YnNjcmlwdGlvbiBpbnN0YW5jZSBpbnRvIGNvbnRleHQsIHNvIHRoYXRcbiAgICAgICAgLy8gY29ubmVjdGVkIGRlc2NlbmRhbnRzIHdvbid0IHVwZGF0ZSB1bnRpbCBhZnRlciB0aGlzIGNvbXBvbmVudCBpcyBkb25lXG5cblxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIGNvbnRleHRWYWx1ZSwge1xuICAgICAgICAgIHN1YnNjcmlwdGlvblxuICAgICAgICB9KTtcbiAgICAgIH0sIFtkaWRTdG9yZUNvbWVGcm9tUHJvcHMsIGNvbnRleHRWYWx1ZSwgc3Vic2NyaXB0aW9uXSk7IC8vIFNldCB1cCByZWZzIHRvIGNvb3JkaW5hdGUgdmFsdWVzIGJldHdlZW4gdGhlIHN1YnNjcmlwdGlvbiBlZmZlY3QgYW5kIHRoZSByZW5kZXIgbG9naWNcblxuICAgICAgY29uc3QgbGFzdENoaWxkUHJvcHMgPSB1c2VSZWYoKTtcbiAgICAgIGNvbnN0IGxhc3RXcmFwcGVyUHJvcHMgPSB1c2VSZWYod3JhcHBlclByb3BzKTtcbiAgICAgIGNvbnN0IGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUgPSB1c2VSZWYoKTtcbiAgICAgIGNvbnN0IHJlbmRlcklzU2NoZWR1bGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICAgIGNvbnN0IGlzUHJvY2Vzc2luZ0Rpc3BhdGNoID0gdXNlUmVmKGZhbHNlKTtcbiAgICAgIGNvbnN0IGlzTW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yID0gdXNlUmVmKCk7XG4gICAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgaXNNb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIGlzTW91bnRlZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICB9LCBbXSk7XG4gICAgICBjb25zdCBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gVHJpY2t5IGxvZ2ljIGhlcmU6XG4gICAgICAgICAgLy8gLSBUaGlzIHJlbmRlciBtYXkgaGF2ZSBiZWVuIHRyaWdnZXJlZCBieSBhIFJlZHV4IHN0b3JlIHVwZGF0ZSB0aGF0IHByb2R1Y2VkIG5ldyBjaGlsZCBwcm9wc1xuICAgICAgICAgIC8vIC0gSG93ZXZlciwgd2UgbWF5IGhhdmUgZ290dGVuIG5ldyB3cmFwcGVyIHByb3BzIGFmdGVyIHRoYXRcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG5ldyBjaGlsZCBwcm9wcywgYW5kIHRoZSBzYW1lIHdyYXBwZXIgcHJvcHMsIHdlIGtub3cgd2Ugc2hvdWxkIHVzZSB0aGUgbmV3IGNoaWxkIHByb3BzIGFzLWlzLlxuICAgICAgICAgIC8vIEJ1dCwgaWYgd2UgaGF2ZSBuZXcgd3JhcHBlciBwcm9wcywgdGhvc2UgbWlnaHQgY2hhbmdlIHRoZSBjaGlsZCBwcm9wcywgc28gd2UgaGF2ZSB0byByZWNhbGN1bGF0ZSB0aGluZ3MuXG4gICAgICAgICAgLy8gU28sIHdlJ2xsIHVzZSB0aGUgY2hpbGQgcHJvcHMgZnJvbSBzdG9yZSB1cGRhdGUgb25seSBpZiB0aGUgd3JhcHBlciBwcm9wcyBhcmUgdGhlIHNhbWUgYXMgbGFzdCB0aW1lLlxuICAgICAgICAgIGlmIChjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgJiYgd3JhcHBlclByb3BzID09PSBsYXN0V3JhcHBlclByb3BzLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQ7XG4gICAgICAgICAgfSAvLyBUT0RPIFdlJ3JlIHJlYWRpbmcgdGhlIHN0b3JlIGRpcmVjdGx5IGluIHJlbmRlcigpIGhlcmUuIEJhZCBpZGVhP1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCBsaWtlbHkgY2F1c2UgQmFkIFRoaW5ncyAoVE0pIHRvIGhhcHBlbiBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvIHRoaXMgYmVjYXVzZSBvbiByZW5kZXJzIF9ub3RfIGNhdXNlZCBieSBzdG9yZSB1cGRhdGVzLCB3ZSBuZWVkIHRoZSBsYXRlc3Qgc3RvcmUgc3RhdGVcbiAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY2hpbGQgcHJvcHMgc2hvdWxkIGJlLlxuXG5cbiAgICAgICAgICByZXR1cm4gY2hpbGRQcm9wc1NlbGVjdG9yKHN0b3JlLmdldFN0YXRlKCksIHdyYXBwZXJQcm9wcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgICAgfSwgW3N0b3JlLCB3cmFwcGVyUHJvcHNdKTsgLy8gV2UgbmVlZCB0aGlzIHRvIGV4ZWN1dGUgc3luY2hyb25vdXNseSBldmVyeSB0aW1lIHdlIHJlLXJlbmRlci4gSG93ZXZlciwgUmVhY3Qgd2FybnNcbiAgICAgIC8vIGFib3V0IHVzZUxheW91dEVmZmVjdCBpbiBTU1IsIHNvIHdlIHRyeSB0byBkZXRlY3QgZW52aXJvbm1lbnQgYW5kIGZhbGwgYmFjayB0b1xuICAgICAgLy8ganVzdCB1c2VFZmZlY3QgaW5zdGVhZCB0byBhdm9pZCB0aGUgd2FybmluZywgc2luY2UgbmVpdGhlciB3aWxsIHJ1biBhbnl3YXkuXG5cbiAgICAgIGNvbnN0IHN1YnNjcmliZUZvclJlYWN0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZSA9IHJlYWN0TGlzdGVuZXIgPT4ge1xuICAgICAgICAgIGlmICghc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1YnNjcmliZVVwZGF0ZXMoc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLCBzdG9yZSwgc3Vic2NyaXB0aW9uLCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgY2hpbGRQcm9wc1NlbGVjdG9yLCBsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIGlzTW91bnRlZCwgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3VicywgcmVhY3RMaXN0ZW5lcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZTtcbiAgICAgIH0sIFtzdWJzY3JpcHRpb25dKTtcbiAgICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3RXaXRoQXJncyhjYXB0dXJlV3JhcHBlclByb3BzLCBbbGFzdFdyYXBwZXJQcm9wcywgbGFzdENoaWxkUHJvcHMsIHJlbmRlcklzU2NoZWR1bGVkLCB3cmFwcGVyUHJvcHMsIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnNdKTtcbiAgICAgIGxldCBhY3R1YWxDaGlsZFByb3BzO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhY3R1YWxDaGlsZFByb3BzID0gdXNlU3luY0V4dGVybmFsU3RvcmUoIC8vIFRPRE8gV2UncmUgcGFzc2luZyB0aHJvdWdoIGEgYmlnIHdyYXBwZXIgdGhhdCBkb2VzIGEgYnVuY2ggb2YgZXh0cmEgc2lkZSBlZmZlY3RzIGJlc2lkZXMgc3Vic2NyaWJpbmdcbiAgICAgICAgc3Vic2NyaWJlRm9yUmVhY3QsIC8vIFRPRE8gVGhpcyBpcyBpbmNyZWRpYmx5IGhhY2t5LiBXZSd2ZSBhbHJlYWR5IHByb2Nlc3NlZCB0aGUgc3RvcmUgdXBkYXRlIGFuZCBjYWxjdWxhdGVkIG5ldyBjaGlsZCBwcm9wcyxcbiAgICAgICAgLy8gVE9ETyBhbmQgd2UncmUganVzdCBwYXNzaW5nIHRoYXQgdGhyb3VnaCBzbyBpdCB0cmlnZ2VycyBhIHJlLXJlbmRlciBmb3IgdXMgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBgdVNFU2AuXG4gICAgICAgIGFjdHVhbENoaWxkUHJvcHNTZWxlY3RvciwgZ2V0U2VydmVyU3RhdGUgPyAoKSA9PiBjaGlsZFByb3BzU2VsZWN0b3IoZ2V0U2VydmVyU3RhdGUoKSwgd3JhcHBlclByb3BzKSA6IGFjdHVhbENoaWxkUHJvcHNTZWxlY3Rvcik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGxhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IuY3VycmVudCkge1xuICAgICAgICAgIDtcbiAgICAgICAgICBlcnIubWVzc2FnZSArPSBgXFxuVGhlIGVycm9yIG1heSBiZSBjb3JyZWxhdGVkIHdpdGggdGhpcyBwcmV2aW91cyBlcnJvcjpcXG4ke2xhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IuY3VycmVudC5zdGFja31cXG5cXG5gO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuXG4gICAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgbGF0ZXN0U3Vic2NyaXB0aW9uQ2FsbGJhY2tFcnJvci5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxhc3RDaGlsZFByb3BzLmN1cnJlbnQgPSBhY3R1YWxDaGlsZFByb3BzO1xuICAgICAgfSk7IC8vIE5vdyB0aGF0IGFsbCB0aGF0J3MgZG9uZSwgd2UgY2FuIGZpbmFsbHkgdHJ5IHRvIGFjdHVhbGx5IHJlbmRlciB0aGUgY2hpbGQgY29tcG9uZW50LlxuICAgICAgLy8gV2UgbWVtb2l6ZSB0aGUgZWxlbWVudHMgZm9yIHRoZSByZW5kZXJlZCBjaGlsZCBjb21wb25lbnQgYXMgYW4gb3B0aW1pemF0aW9uLlxuXG4gICAgICBjb25zdCByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgX2V4dGVuZHMoe30sIGFjdHVhbENoaWxkUHJvcHMsIHtcbiAgICAgICAgICAgIHJlZjogcmVhY3RSZWR1eEZvcndhcmRlZFJlZlxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgfSwgW3JlYWN0UmVkdXhGb3J3YXJkZWRSZWYsIFdyYXBwZWRDb21wb25lbnQsIGFjdHVhbENoaWxkUHJvcHNdKTsgLy8gSWYgUmVhY3Qgc2VlcyB0aGUgZXhhY3Qgc2FtZSBlbGVtZW50IHJlZmVyZW5jZSBhcyBsYXN0IHRpbWUsIGl0IGJhaWxzIG91dCBvZiByZS1yZW5kZXJpbmdcbiAgICAgIC8vIHRoYXQgY2hpbGQsIHNhbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gUmVhY3QubWVtbygpIG9yIHJldHVybmVkIGZhbHNlIGZyb20gc2hvdWxkQ29tcG9uZW50VXBkYXRlLlxuXG4gICAgICBjb25zdCByZW5kZXJlZENoaWxkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGNvbXBvbmVudCBpcyBzdWJzY3JpYmVkIHRvIHN0b3JlIHVwZGF0ZXMsIHdlIG5lZWQgdG8gcGFzcyBpdHMgb3duXG4gICAgICAgICAgLy8gc3Vic2NyaXB0aW9uIGluc3RhbmNlIGRvd24gdG8gb3VyIGRlc2NlbmRhbnRzLiBUaGF0IG1lYW5zIHJlbmRlcmluZyB0aGUgc2FtZVxuICAgICAgICAgIC8vIENvbnRleHQgaW5zdGFuY2UsIGFuZCBwdXR0aW5nIGEgZGlmZmVyZW50IHZhbHVlIGludG8gdGhlIGNvbnRleHQuXG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHRUb1VzZS5Qcm92aWRlciwge1xuICAgICAgICAgICAgdmFsdWU6IG92ZXJyaWRkZW5Db250ZXh0VmFsdWVcbiAgICAgICAgICB9LCByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkV3JhcHBlZENvbXBvbmVudDtcbiAgICAgIH0sIFtDb250ZXh0VG9Vc2UsIHJlbmRlcmVkV3JhcHBlZENvbXBvbmVudCwgb3ZlcnJpZGRlbkNvbnRleHRWYWx1ZV0pO1xuICAgICAgcmV0dXJuIHJlbmRlcmVkQ2hpbGQ7XG4gICAgfVxuXG4gICAgY29uc3QgX0Nvbm5lY3QgPSBSZWFjdC5tZW1vKENvbm5lY3RGdW5jdGlvbik7XG5cbiAgICAvLyBBZGQgYSBoYWNreSBjYXN0IHRvIGdldCB0aGUgcmlnaHQgb3V0cHV0IHR5cGVcbiAgICBjb25zdCBDb25uZWN0ID0gX0Nvbm5lY3Q7XG4gICAgQ29ubmVjdC5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcbiAgICBDb25uZWN0LmRpc3BsYXlOYW1lID0gQ29ubmVjdEZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG5cbiAgICBpZiAoZm9yd2FyZFJlZikge1xuICAgICAgY29uc3QgX2ZvcndhcmRlZCA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gZm9yd2FyZENvbm5lY3RSZWYocHJvcHMsIHJlZikge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb25uZWN0LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmOiByZWZcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZvcndhcmRlZCA9IF9mb3J3YXJkZWQ7XG4gICAgICBmb3J3YXJkZWQuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgIGZvcndhcmRlZC5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcbiAgICAgIHJldHVybiBob2lzdFN0YXRpY3MoZm9yd2FyZGVkLCBXcmFwcGVkQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaG9pc3RTdGF0aWNzKENvbm5lY3QsIFdyYXBwZWRDb21wb25lbnQpO1xuICB9O1xuXG4gIHJldHVybiB3cmFwV2l0aENvbm5lY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Q7IiwiaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vQ29udGV4dCc7XG5pbXBvcnQgeyBjcmVhdGVTdWJzY3JpcHRpb24gfSBmcm9tICcuLi91dGlscy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QnO1xuXG5mdW5jdGlvbiBQcm92aWRlcih7XG4gIHN0b3JlLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgc2VydmVyU3RhdGVcbn0pIHtcbiAgY29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY3JlYXRlU3Vic2NyaXB0aW9uKHN0b3JlKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmUsXG4gICAgICBzdWJzY3JpcHRpb24sXG4gICAgICBnZXRTZXJ2ZXJTdGF0ZTogc2VydmVyU3RhdGUgPyAoKSA9PiBzZXJ2ZXJTdGF0ZSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH0sIFtzdG9yZSwgc2VydmVyU3RhdGVdKTtcbiAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IHVzZU1lbW8oKCkgPT4gc3RvcmUuZ2V0U3RhdGUoKSwgW3N0b3JlXSk7XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHN1YnNjcmlwdGlvblxuICAgIH0gPSBjb250ZXh0VmFsdWU7XG4gICAgc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UgPSBzdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3VicztcbiAgICBzdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCk7XG5cbiAgICBpZiAocHJldmlvdXNTdGF0ZSAhPT0gc3RvcmUuZ2V0U3RhdGUoKSkge1xuICAgICAgc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XG4gICAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9LCBbY29udGV4dFZhbHVlLCBwcmV2aW91c1N0YXRlXSk7XG4gIGNvbnN0IENvbnRleHQgPSBjb250ZXh0IHx8IFJlYWN0UmVkdXhDb250ZXh0OyAvLyBAdHMtaWdub3JlICdBbnlBY3Rpb24nIGlzIGFzc2lnbmFibGUgdG8gdGhlIGNvbnN0cmFpbnQgb2YgdHlwZSAnQScsIGJ1dCAnQScgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICB9LCBjaGlsZHJlbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFByb3ZpZGVyOyIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4uL2NvbXBvbmVudHMvQ29udGV4dCc7XG5pbXBvcnQgeyB1c2VSZWR1eENvbnRleHQgYXMgdXNlRGVmYXVsdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vdXNlUmVkdXhDb250ZXh0Jztcbi8qKlxyXG4gKiBIb29rIGZhY3RvcnksIHdoaWNoIGNyZWF0ZXMgYSBgdXNlU3RvcmVgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VTdG9yZWAgaG9vayBib3VuZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RvcmVIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICBjb25zdCB1c2VSZWR1eENvbnRleHQgPSAvLyBAdHMtaWdub3JlXG4gIGNvbnRleHQgPT09IFJlYWN0UmVkdXhDb250ZXh0ID8gdXNlRGVmYXVsdFJlZHV4Q29udGV4dCA6ICgpID0+IHVzZUNvbnRleHQoY29udGV4dCk7XG4gIHJldHVybiBmdW5jdGlvbiB1c2VTdG9yZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzdG9yZVxuICAgIH0gPSB1c2VSZWR1eENvbnRleHQoKTsgLy8gQHRzLWlnbm9yZVxuXG4gICAgcmV0dXJuIHN0b3JlO1xuICB9O1xufVxuLyoqXHJcbiAqIEEgaG9vayB0byBhY2Nlc3MgdGhlIHJlZHV4IHN0b3JlLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fSB0aGUgcmVkdXggc3RvcmVcclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xyXG4gKiBpbXBvcnQgeyB1c2VTdG9yZSB9IGZyb20gJ3JlYWN0LXJlZHV4J1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgRXhhbXBsZUNvbXBvbmVudCA9ICgpID0+IHtcclxuICogICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKClcclxuICogICByZXR1cm4gPGRpdj57c3RvcmUuZ2V0U3RhdGUoKX08L2Rpdj5cclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZVN0b3JlID0gLyojX19QVVJFX18qL2NyZWF0ZVN0b3JlSG9vaygpOyIsImltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcbmltcG9ydCB7IHVzZVN0b3JlIGFzIHVzZURlZmF1bHRTdG9yZSwgY3JlYXRlU3RvcmVIb29rIH0gZnJvbSAnLi91c2VTdG9yZSc7XG4vKipcclxuICogSG9vayBmYWN0b3J5LCB3aGljaCBjcmVhdGVzIGEgYHVzZURpc3BhdGNoYCBob29rIGJvdW5kIHRvIGEgZ2l2ZW4gY29udGV4dC5cclxuICpcclxuICogQHBhcmFtIHtSZWFjdC5Db250ZXh0fSBbY29udGV4dD1SZWFjdFJlZHV4Q29udGV4dF0gQ29udGV4dCBwYXNzZWQgdG8geW91ciBgPFByb3ZpZGVyPmAuXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBgdXNlRGlzcGF0Y2hgIGhvb2sgYm91bmQgdG8gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpc3BhdGNoSG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgY29uc3QgdXNlU3RvcmUgPSAvLyBAdHMtaWdub3JlXG4gIGNvbnRleHQgPT09IFJlYWN0UmVkdXhDb250ZXh0ID8gdXNlRGVmYXVsdFN0b3JlIDogY3JlYXRlU3RvcmVIb29rKGNvbnRleHQpO1xuICByZXR1cm4gZnVuY3Rpb24gdXNlRGlzcGF0Y2goKSB7XG4gICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZSgpOyAvLyBAdHMtaWdub3JlXG5cbiAgICByZXR1cm4gc3RvcmUuZGlzcGF0Y2g7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgcmVkdXggYGRpc3BhdGNoYCBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMge2FueXxmdW5jdGlvbn0gcmVkdXggc3RvcmUncyBgZGlzcGF0Y2hgIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xyXG4gKiBpbXBvcnQgeyB1c2VEaXNwYXRjaCB9IGZyb20gJ3JlYWN0LXJlZHV4J1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgQ291bnRlckNvbXBvbmVudCA9ICh7IHZhbHVlIH0pID0+IHtcclxuICogICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKClcclxuICogICBjb25zdCBpbmNyZWFzZUNvdW50ZXIgPSB1c2VDYWxsYmFjaygoKSA9PiBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZWFzZS1jb3VudGVyJyB9KSwgW10pXHJcbiAqICAgcmV0dXJuIChcclxuICogICAgIDxkaXY+XHJcbiAqICAgICAgIDxzcGFuPnt2YWx1ZX08L3NwYW4+XHJcbiAqICAgICAgIDxidXR0b24gb25DbGljaz17aW5jcmVhc2VDb3VudGVyfT5JbmNyZWFzZSBjb3VudGVyPC9idXR0b24+XHJcbiAqICAgICA8L2Rpdj5cclxuICogICApXHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VEaXNwYXRjaCA9IC8qI19fUFVSRV9fKi9jcmVhdGVEaXNwYXRjaEhvb2soKTsiLCIvLyBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludCBhc3N1bWVzIHdlJ3JlIHdvcmtpbmcgd2l0aCBzdGFuZGFyZCBSZWFjdERPTS9STiwgYnV0XG4vLyBvbGRlciB2ZXJzaW9ucyB0aGF0IGRvIG5vdCBpbmNsdWRlIGB1c2VTeW5jRXh0ZXJuYWxTdG9yZWAgKFJlYWN0IDE2LjkgLSAxNy54KS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhlIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGNvbXBhdCBzaGltIGlzIG5lZWRlZC5cbmltcG9ydCB7IHVzZVN5bmNFeHRlcm5hbFN0b3JlIH0gZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbSc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vd2l0aC1zZWxlY3Rvcic7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyBhcyBiYXRjaCB9IGZyb20gJy4vdXRpbHMvcmVhY3RCYXRjaGVkVXBkYXRlcyc7XG5pbXBvcnQgeyBzZXRCYXRjaCB9IGZyb20gJy4vdXRpbHMvYmF0Y2gnO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZVVzZVNlbGVjdG9yIH0gZnJvbSAnLi9ob29rcy91c2VTZWxlY3Rvcic7XG5pbXBvcnQgeyBpbml0aWFsaXplQ29ubmVjdCB9IGZyb20gJy4vY29tcG9uZW50cy9jb25uZWN0JztcbmluaXRpYWxpemVVc2VTZWxlY3Rvcih1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3Rvcik7XG5pbml0aWFsaXplQ29ubmVjdCh1c2VTeW5jRXh0ZXJuYWxTdG9yZSk7IC8vIEVuYWJsZSBiYXRjaGVkIHVwZGF0ZXMgaW4gb3VyIHN1YnNjcmlwdGlvbnMgZm9yIHVzZVxuLy8gd2l0aCBzdGFuZGFyZCBSZWFjdCByZW5kZXJlcnMgKFJlYWN0RE9NLCBSZWFjdCBOYXRpdmUpXG5cbnNldEJhdGNoKGJhdGNoKTtcbmV4cG9ydCB7IGJhdGNoIH07XG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydHMnOyIsImltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB0eXBlIHsgVHlwZWRVc2VTZWxlY3Rvckhvb2sgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFJvb3RTdGF0ZSwgQXBwRGlzcGF0Y2ggfSBmcm9tICcuL3N0b3JlJztcblxuZXhwb3J0IGNvbnN0IHVzZUFwcERpc3BhdGNoOiAoKSA9PiBBcHBEaXNwYXRjaCA9IHVzZURpc3BhdGNoO1xuZXhwb3J0IGNvbnN0IHVzZUFwcFNlbGVjdG9yOiBUeXBlZFVzZVNlbGVjdG9ySG9vazxSb290U3RhdGU+ID0gdXNlU2VsZWN0b3I7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGV4YWN0UHJvcCwgSFRNTEVsZW1lbnRUeXBlLCB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCBhcyB1c2VFbmhhbmNlZEVmZmVjdCwgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmLCB1bnN0YWJsZV9zZXRSZWYgYXMgc2V0UmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBnZXRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIHJldHVybiB0eXBlb2YgY29udGFpbmVyID09PSAnZnVuY3Rpb24nID8gY29udGFpbmVyKCkgOiBjb250YWluZXI7XG59XG4vKipcbiAqIFBvcnRhbHMgcHJvdmlkZSBhIGZpcnN0LWNsYXNzIHdheSB0byByZW5kZXIgY2hpbGRyZW4gaW50byBhIERPTSBub2RlXG4gKiB0aGF0IGV4aXN0cyBvdXRzaWRlIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICovXG5cblxuY29uc3QgUG9ydGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9ydGFsKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lcixcbiAgICBkaXNhYmxlUG9ydGFsID0gZmFsc2VcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbW91bnROb2RlLCBzZXRNb3VudE5vZGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgPyBjaGlsZHJlbi5yZWYgOiBudWxsLCByZWYpO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkaXNhYmxlUG9ydGFsKSB7XG4gICAgICBzZXRNb3VudE5vZGUoZ2V0Q29udGFpbmVyKGNvbnRhaW5lcikgfHwgZG9jdW1lbnQuYm9keSk7XG4gICAgfVxuICB9LCBbY29udGFpbmVyLCBkaXNhYmxlUG9ydGFsXSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW91bnROb2RlICYmICFkaXNhYmxlUG9ydGFsKSB7XG4gICAgICBzZXRSZWYocmVmLCBtb3VudE5vZGUpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgc2V0UmVmKHJlZiwgbnVsbCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtyZWYsIG1vdW50Tm9kZSwgZGlzYWJsZVBvcnRhbF0pO1xuXG4gIGlmIChkaXNhYmxlUG9ydGFsKSB7XG4gICAgaWYgKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICByZWY6IGhhbmRsZVJlZlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IG1vdW50Tm9kZSA/IC8qI19fUFVSRV9fKi9SZWFjdERPTS5jcmVhdGVQb3J0YWwoY2hpbGRyZW4sIG1vdW50Tm9kZSkgOiBtb3VudE5vZGVcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBvcnRhbC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNoaWxkcmVuIHRvIHJlbmRlciBpbnRvIHRoZSBgY29udGFpbmVyYC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgUG9ydGFsWydwcm9wVHlwZXMnICsgJyddID0gZXhhY3RQcm9wKFBvcnRhbC5wcm9wVHlwZXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQb3J0YWw7IiwiLy8gQSBjaGFuZ2Ugb2YgdGhlIGJyb3dzZXIgem9vbSBjaGFuZ2UgdGhlIHNjcm9sbGJhciBzaXplLlxuLy8gQ3JlZGl0IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iLzQ4OGZkOGFmYzUzNWNhM2E2YWQ0ZGM1ODFmNWU4OTIxN2I2YTM2YWMvanMvc3JjL3V0aWwvc2Nyb2xsYmFyLmpzI0wxNC1MMThcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbGJhclNpemUoZG9jKSB7XG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvaW5uZXJXaWR0aCN1c2FnZV9ub3Rlc1xuICBjb25zdCBkb2N1bWVudFdpZHRoID0gZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmV0dXJuIE1hdGguYWJzKHdpbmRvdy5pbm5lcldpZHRoIC0gZG9jdW1lbnRXaWR0aCk7XG59IiwiaW1wb3J0IHsgdW5zdGFibGVfb3duZXJXaW5kb3cgYXMgb3duZXJXaW5kb3csIHVuc3RhYmxlX293bmVyRG9jdW1lbnQgYXMgb3duZXJEb2N1bWVudCwgdW5zdGFibGVfZ2V0U2Nyb2xsYmFyU2l6ZSBhcyBnZXRTY3JvbGxiYXJTaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG5cbi8vIElzIGEgdmVydGljYWwgc2Nyb2xsYmFyIGRpc3BsYXllZD9cbmZ1bmN0aW9uIGlzT3ZlcmZsb3dpbmcoY29udGFpbmVyKSB7XG4gIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQoY29udGFpbmVyKTtcblxuICBpZiAoZG9jLmJvZHkgPT09IGNvbnRhaW5lcikge1xuICAgIHJldHVybiBvd25lcldpbmRvdyhjb250YWluZXIpLmlubmVyV2lkdGggPiBkb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgPiBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJpYUhpZGRlbihlbGVtZW50LCBzaG93KSB7XG4gIGlmIChzaG93KSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQYWRkaW5nUmlnaHQoZWxlbWVudCkge1xuICByZXR1cm4gcGFyc2VJbnQob3duZXJXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wYWRkaW5nUmlnaHQsIDEwKSB8fCAwO1xufVxuXG5mdW5jdGlvbiBpc0FyaWFIaWRkZW5Gb3JiaWRkZW5PbkVsZW1lbnQoZWxlbWVudCkge1xuICAvLyBUaGUgZm9yYmlkZGVuIEhUTUwgdGFncyBhcmUgdGhlIG9uZXMgZnJvbSBBUklBIHNwZWNpZmljYXRpb24gdGhhdFxuICAvLyBjYW4gYmUgY2hpbGRyZW4gb2YgYm9keSBhbmQgY2FuJ3QgaGF2ZSBhcmlhLWhpZGRlbiBhdHRyaWJ1dGUuXG4gIC8vIGNmLiBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbC1hcmlhLyNkb2Njb25mb3JtYW5jZVxuICBjb25zdCBmb3JiaWRkZW5UYWdOYW1lcyA9IFsnVEVNUExBVEUnLCAnU0NSSVBUJywgJ1NUWUxFJywgJ0xJTksnLCAnTUFQJywgJ01FVEEnLCAnTk9TQ1JJUFQnLCAnUElDVFVSRScsICdDT0wnLCAnQ09MR1JPVVAnLCAnUEFSQU0nLCAnU0xPVCcsICdTT1VSQ0UnLCAnVFJBQ0snXTtcbiAgY29uc3QgaXNGb3JiaWRkZW5UYWdOYW1lID0gZm9yYmlkZGVuVGFnTmFtZXMuaW5kZXhPZihlbGVtZW50LnRhZ05hbWUpICE9PSAtMTtcbiAgY29uc3QgaXNJbnB1dEhpZGRlbiA9IGVsZW1lbnQudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAnaGlkZGVuJztcbiAgcmV0dXJuIGlzRm9yYmlkZGVuVGFnTmFtZSB8fCBpc0lucHV0SGlkZGVuO1xufVxuXG5mdW5jdGlvbiBhcmlhSGlkZGVuU2libGluZ3MoY29udGFpbmVyLCBtb3VudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50LCBlbGVtZW50c1RvRXhjbHVkZSA9IFtdLCBzaG93KSB7XG4gIGNvbnN0IGJsYWNrbGlzdCA9IFttb3VudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50LCAuLi5lbGVtZW50c1RvRXhjbHVkZV07XG4gIFtdLmZvckVhY2guY2FsbChjb250YWluZXIuY2hpbGRyZW4sIGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IGlzTm90RXhjbHVkZWRFbGVtZW50ID0gYmxhY2tsaXN0LmluZGV4T2YoZWxlbWVudCkgPT09IC0xO1xuICAgIGNvbnN0IGlzTm90Rm9yYmlkZGVuRWxlbWVudCA9ICFpc0FyaWFIaWRkZW5Gb3JiaWRkZW5PbkVsZW1lbnQoZWxlbWVudCk7XG5cbiAgICBpZiAoaXNOb3RFeGNsdWRlZEVsZW1lbnQgJiYgaXNOb3RGb3JiaWRkZW5FbGVtZW50KSB7XG4gICAgICBhcmlhSGlkZGVuKGVsZW1lbnQsIHNob3cpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbmRleE9mKGl0ZW1zLCBjYWxsYmFjaykge1xuICBsZXQgaWR4ID0gLTE7XG4gIGl0ZW1zLnNvbWUoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKGl0ZW0pKSB7XG4gICAgICBpZHggPSBpbmRleDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiBpZHg7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCBwcm9wcykge1xuICBjb25zdCByZXN0b3JlU3R5bGUgPSBbXTtcbiAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVySW5mby5jb250YWluZXI7XG5cbiAgaWYgKCFwcm9wcy5kaXNhYmxlU2Nyb2xsTG9jaykge1xuICAgIGlmIChpc092ZXJmbG93aW5nKGNvbnRhaW5lcikpIHtcbiAgICAgIC8vIENvbXB1dGUgdGhlIHNpemUgYmVmb3JlIGFwcGx5aW5nIG92ZXJmbG93IGhpZGRlbiB0byBhdm9pZCBhbnkgc2Nyb2xsIGp1bXBzLlxuICAgICAgY29uc3Qgc2Nyb2xsYmFyU2l6ZSA9IGdldFNjcm9sbGJhclNpemUob3duZXJEb2N1bWVudChjb250YWluZXIpKTtcbiAgICAgIHJlc3RvcmVTdHlsZS5wdXNoKHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lci5zdHlsZS5wYWRkaW5nUmlnaHQsXG4gICAgICAgIHByb3BlcnR5OiAncGFkZGluZy1yaWdodCcsXG4gICAgICAgIGVsOiBjb250YWluZXJcbiAgICAgIH0pOyAvLyBVc2UgY29tcHV0ZWQgc3R5bGUsIGhlcmUgdG8gZ2V0IHRoZSByZWFsIHBhZGRpbmcgdG8gYWRkIG91ciBzY3JvbGxiYXIgd2lkdGguXG5cbiAgICAgIGNvbnRhaW5lci5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtnZXRQYWRkaW5nUmlnaHQoY29udGFpbmVyKSArIHNjcm9sbGJhclNpemV9cHhgOyAvLyAubXVpLWZpeGVkIGlzIGEgZ2xvYmFsIGhlbHBlci5cblxuICAgICAgY29uc3QgZml4ZWRFbGVtZW50cyA9IG93bmVyRG9jdW1lbnQoY29udGFpbmVyKS5xdWVyeVNlbGVjdG9yQWxsKCcubXVpLWZpeGVkJyk7XG4gICAgICBbXS5mb3JFYWNoLmNhbGwoZml4ZWRFbGVtZW50cywgZWxlbWVudCA9PiB7XG4gICAgICAgIHJlc3RvcmVTdHlsZS5wdXNoKHtcbiAgICAgICAgICB2YWx1ZTogZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQsXG4gICAgICAgICAgcHJvcGVydHk6ICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgICBlbDogZWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtnZXRQYWRkaW5nUmlnaHQoZWxlbWVudCkgKyBzY3JvbGxiYXJTaXplfXB4YDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBzY3JvbGxDb250YWluZXI7XG5cbiAgICBpZiAoY29udGFpbmVyLnBhcmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICBzY3JvbGxDb250YWluZXIgPSBvd25lckRvY3VtZW50KGNvbnRhaW5lcikuYm9keTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW1wcm92ZSBHYXRzYnkgc3VwcG9ydFxuICAgICAgLy8gaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvZm9yY2UtdmVydGljYWwtc2Nyb2xsYmFyL1xuICAgICAgY29uc3QgcGFyZW50ID0gY29udGFpbmVyLnBhcmVudEVsZW1lbnQ7XG4gICAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhjb250YWluZXIpO1xuICAgICAgc2Nyb2xsQ29udGFpbmVyID0gKHBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGFyZW50Lm5vZGVOYW1lKSA9PT0gJ0hUTUwnICYmIGNvbnRhaW5lcldpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCkub3ZlcmZsb3dZID09PSAnc2Nyb2xsJyA/IHBhcmVudCA6IGNvbnRhaW5lcjtcbiAgICB9IC8vIEJsb2NrIHRoZSBzY3JvbGwgZXZlbiBpZiBubyBzY3JvbGxiYXIgaXMgdmlzaWJsZSB0byBhY2NvdW50IGZvciBtb2JpbGUga2V5Ym9hcmRcbiAgICAvLyBzY3JlZW5zaXplIHNocmluay5cblxuXG4gICAgcmVzdG9yZVN0eWxlLnB1c2goe1xuICAgICAgdmFsdWU6IHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvdyxcbiAgICAgIHByb3BlcnR5OiAnb3ZlcmZsb3cnLFxuICAgICAgZWw6IHNjcm9sbENvbnRhaW5lclxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiBzY3JvbGxDb250YWluZXIuc3R5bGUub3ZlcmZsb3dYLFxuICAgICAgcHJvcGVydHk6ICdvdmVyZmxvdy14JyxcbiAgICAgIGVsOiBzY3JvbGxDb250YWluZXJcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93WSxcbiAgICAgIHByb3BlcnR5OiAnb3ZlcmZsb3cteScsXG4gICAgICBlbDogc2Nyb2xsQ29udGFpbmVyXG4gICAgfSk7XG4gICAgc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIH1cblxuICBjb25zdCByZXN0b3JlID0gKCkgPT4ge1xuICAgIHJlc3RvcmVTdHlsZS5mb3JFYWNoKCh7XG4gICAgICB2YWx1ZSxcbiAgICAgIGVsLFxuICAgICAgcHJvcGVydHlcbiAgICB9KSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWwuc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gcmVzdG9yZTtcbn1cblxuZnVuY3Rpb24gZ2V0SGlkZGVuU2libGluZ3MoY29udGFpbmVyKSB7XG4gIGNvbnN0IGhpZGRlblNpYmxpbmdzID0gW107XG4gIFtdLmZvckVhY2guY2FsbChjb250YWluZXIuY2hpbGRyZW4sIGVsZW1lbnQgPT4ge1xuICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSA9PT0gJ3RydWUnKSB7XG4gICAgICBoaWRkZW5TaWJsaW5ncy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBoaWRkZW5TaWJsaW5ncztcbn1cblxuLyoqXG4gKiBAaWdub3JlIC0gZG8gbm90IGRvY3VtZW50LlxuICpcbiAqIFByb3BlciBzdGF0ZSBtYW5hZ2VtZW50IGZvciBjb250YWluZXJzIGFuZCB0aGUgbW9kYWxzIGluIHRob3NlIGNvbnRhaW5lcnMuXG4gKiBTaW1wbGlmaWVkLCBidXQgaW5zcGlyZWQgYnkgcmVhY3Qtb3ZlcmxheSdzIE1vZGFsTWFuYWdlciBjbGFzcy5cbiAqIFVzZWQgYnkgdGhlIE1vZGFsIHRvIGVuc3VyZSBwcm9wZXIgc3R5bGluZyBvZiBjb250YWluZXJzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2RhbE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lcnMgPSB2b2lkIDA7XG4gICAgdGhpcy5tb2RhbHMgPSB2b2lkIDA7XG4gICAgdGhpcy5tb2RhbHMgPSBbXTtcbiAgICB0aGlzLmNvbnRhaW5lcnMgPSBbXTtcbiAgfVxuXG4gIGFkZChtb2RhbCwgY29udGFpbmVyKSB7XG4gICAgbGV0IG1vZGFsSW5kZXggPSB0aGlzLm1vZGFscy5pbmRleE9mKG1vZGFsKTtcblxuICAgIGlmIChtb2RhbEluZGV4ICE9PSAtMSkge1xuICAgICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gICAgfVxuXG4gICAgbW9kYWxJbmRleCA9IHRoaXMubW9kYWxzLmxlbmd0aDtcbiAgICB0aGlzLm1vZGFscy5wdXNoKG1vZGFsKTsgLy8gSWYgdGhlIG1vZGFsIHdlIGFyZSBhZGRpbmcgaXMgYWxyZWFkeSBpbiB0aGUgRE9NLlxuXG4gICAgaWYgKG1vZGFsLm1vZGFsUmVmKSB7XG4gICAgICBhcmlhSGlkZGVuKG1vZGFsLm1vZGFsUmVmLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgaGlkZGVuU2libGluZ3MgPSBnZXRIaWRkZW5TaWJsaW5ncyhjb250YWluZXIpO1xuICAgIGFyaWFIaWRkZW5TaWJsaW5ncyhjb250YWluZXIsIG1vZGFsLm1vdW50LCBtb2RhbC5tb2RhbFJlZiwgaGlkZGVuU2libGluZ3MsIHRydWUpO1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0uY29udGFpbmVyID09PSBjb250YWluZXIpO1xuXG4gICAgaWYgKGNvbnRhaW5lckluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5jb250YWluZXJzW2NvbnRhaW5lckluZGV4XS5tb2RhbHMucHVzaChtb2RhbCk7XG4gICAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lcnMucHVzaCh7XG4gICAgICBtb2RhbHM6IFttb2RhbF0sXG4gICAgICBjb250YWluZXIsXG4gICAgICByZXN0b3JlOiBudWxsLFxuICAgICAgaGlkZGVuU2libGluZ3NcbiAgICB9KTtcbiAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgfVxuXG4gIG1vdW50KG1vZGFsLCBwcm9wcykge1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0ubW9kYWxzLmluZGV4T2YobW9kYWwpICE9PSAtMSk7XG4gICAgY29uc3QgY29udGFpbmVySW5mbyA9IHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF07XG5cbiAgICBpZiAoIWNvbnRhaW5lckluZm8ucmVzdG9yZSkge1xuICAgICAgY29udGFpbmVySW5mby5yZXN0b3JlID0gaGFuZGxlQ29udGFpbmVyKGNvbnRhaW5lckluZm8sIHByb3BzKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmUobW9kYWwsIGFyaWFIaWRkZW5TdGF0ZSA9IHRydWUpIHtcbiAgICBjb25zdCBtb2RhbEluZGV4ID0gdGhpcy5tb2RhbHMuaW5kZXhPZihtb2RhbCk7XG5cbiAgICBpZiAobW9kYWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBtb2RhbEluZGV4O1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0ubW9kYWxzLmluZGV4T2YobW9kYWwpICE9PSAtMSk7XG4gICAgY29uc3QgY29udGFpbmVySW5mbyA9IHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF07XG4gICAgY29udGFpbmVySW5mby5tb2RhbHMuc3BsaWNlKGNvbnRhaW5lckluZm8ubW9kYWxzLmluZGV4T2YobW9kYWwpLCAxKTtcbiAgICB0aGlzLm1vZGFscy5zcGxpY2UobW9kYWxJbmRleCwgMSk7IC8vIElmIHRoYXQgd2FzIHRoZSBsYXN0IG1vZGFsIGluIGEgY29udGFpbmVyLCBjbGVhbiB1cCB0aGUgY29udGFpbmVyLlxuXG4gICAgaWYgKGNvbnRhaW5lckluZm8ubW9kYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gVGhlIG1vZGFsIG1pZ2h0IGJlIGNsb3NlZCBiZWZvcmUgaXQgaGFkIHRoZSBjaGFuY2UgdG8gYmUgbW91bnRlZCBpbiB0aGUgRE9NLlxuICAgICAgaWYgKGNvbnRhaW5lckluZm8ucmVzdG9yZSkge1xuICAgICAgICBjb250YWluZXJJbmZvLnJlc3RvcmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGFsLm1vZGFsUmVmKSB7XG4gICAgICAgIC8vIEluIGNhc2UgdGhlIG1vZGFsIHdhc24ndCBpbiB0aGUgRE9NIHlldC5cbiAgICAgICAgYXJpYUhpZGRlbihtb2RhbC5tb2RhbFJlZiwgYXJpYUhpZGRlblN0YXRlKTtcbiAgICAgIH1cblxuICAgICAgYXJpYUhpZGRlblNpYmxpbmdzKGNvbnRhaW5lckluZm8uY29udGFpbmVyLCBtb2RhbC5tb3VudCwgbW9kYWwubW9kYWxSZWYsIGNvbnRhaW5lckluZm8uaGlkZGVuU2libGluZ3MsIGZhbHNlKTtcbiAgICAgIHRoaXMuY29udGFpbmVycy5zcGxpY2UoY29udGFpbmVySW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgbWFrZSBzdXJlIHRoZSBuZXh0IHRvcCBtb2RhbCBpcyB2aXNpYmxlIHRvIGEgc2NyZWVuIHJlYWRlci5cbiAgICAgIGNvbnN0IG5leHRUb3AgPSBjb250YWluZXJJbmZvLm1vZGFsc1tjb250YWluZXJJbmZvLm1vZGFscy5sZW5ndGggLSAxXTsgLy8gYXMgc29vbiBhcyBhIG1vZGFsIGlzIGFkZGluZyBpdHMgbW9kYWxSZWYgaXMgdW5kZWZpbmVkLiBpdCBjYW4ndCBzZXRcbiAgICAgIC8vIGFyaWEtaGlkZGVuIGJlY2F1c2UgdGhlIGRvbSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QgZWl0aGVyXG4gICAgICAvLyB3aGVuIG1vZGFsIHdhcyB1bm1vdW50ZWQgYmVmb3JlIG1vZGFsUmVmIGdldHMgbnVsbFxuXG4gICAgICBpZiAobmV4dFRvcC5tb2RhbFJlZikge1xuICAgICAgICBhcmlhSGlkZGVuKG5leHRUb3AubW9kYWxSZWYsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgfVxuXG4gIGlzVG9wTW9kYWwobW9kYWwpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbHMubGVuZ3RoID4gMCAmJiB0aGlzLm1vZGFsc1t0aGlzLm1vZGFscy5sZW5ndGggLSAxXSA9PT0gbW9kYWw7XG4gIH1cblxufSIsIi8qIGVzbGludC1kaXNhYmxlIGNvbnNpc3RlbnQtcmV0dXJuLCBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS10YWJpbmRleCAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGV4YWN0UHJvcCwgZWxlbWVudEFjY2VwdGluZ1JlZiwgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmLCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQgfSBmcm9tICdAbXVpL3V0aWxzJzsgLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2ZvY3VzLXRyYXAvdGFiYmFibGVcblxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IGNhbmRpZGF0ZXNTZWxlY3RvciA9IFsnaW5wdXQnLCAnc2VsZWN0JywgJ3RleHRhcmVhJywgJ2FbaHJlZl0nLCAnYnV0dG9uJywgJ1t0YWJpbmRleF0nLCAnYXVkaW9bY29udHJvbHNdJywgJ3ZpZGVvW2NvbnRyb2xzXScsICdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKSddLmpvaW4oJywnKTtcblxuZnVuY3Rpb24gZ2V0VGFiSW5kZXgobm9kZSkge1xuICBjb25zdCB0YWJpbmRleEF0dHIgPSBwYXJzZUludChub2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSwgMTApO1xuXG4gIGlmICghTnVtYmVyLmlzTmFOKHRhYmluZGV4QXR0cikpIHtcbiAgICByZXR1cm4gdGFiaW5kZXhBdHRyO1xuICB9IC8vIEJyb3dzZXJzIGRvIG5vdCByZXR1cm4gYHRhYkluZGV4YCBjb3JyZWN0bHkgZm9yIGNvbnRlbnRFZGl0YWJsZSBub2RlcztcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjYxMTA4JnE9Y29udGVudGVkaXRhYmxlJTIwdGFiaW5kZXgmY2FuPTJcbiAgLy8gc28gaWYgdGhleSBkb24ndCBoYXZlIGEgdGFiaW5kZXggYXR0cmlidXRlIHNwZWNpZmljYWxseSBzZXQsIGFzc3VtZSBpdCdzIDAuXG4gIC8vIGluIENocm9tZSwgPGRldGFpbHMvPiwgPGF1ZGlvIGNvbnRyb2xzLz4gYW5kIDx2aWRlbyBjb250cm9scy8+IGVsZW1lbnRzIGdldCBhIGRlZmF1bHRcbiAgLy8gIGB0YWJJbmRleGAgb2YgLTEgd2hlbiB0aGUgJ3RhYmluZGV4JyBhdHRyaWJ1dGUgaXNuJ3Qgc3BlY2lmaWVkIGluIHRoZSBET00sXG4gIC8vICB5ZXQgdGhleSBhcmUgc3RpbGwgcGFydCBvZiB0aGUgcmVndWxhciB0YWIgb3JkZXI7IGluIEZGLCB0aGV5IGdldCBhIGRlZmF1bHRcbiAgLy8gIGB0YWJJbmRleGAgb2YgMDsgc2luY2UgQ2hyb21lIHN0aWxsIHB1dHMgdGhvc2UgZWxlbWVudHMgaW4gdGhlIHJlZ3VsYXIgdGFiXG4gIC8vICBvcmRlciwgY29uc2lkZXIgdGhlaXIgdGFiIGluZGV4IHRvIGJlIDAuXG5cblxuICBpZiAobm9kZS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJyB8fCAobm9kZS5ub2RlTmFtZSA9PT0gJ0FVRElPJyB8fCBub2RlLm5vZGVOYW1lID09PSAnVklERU8nIHx8IG5vZGUubm9kZU5hbWUgPT09ICdERVRBSUxTJykgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykgPT09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiBub2RlLnRhYkluZGV4O1xufVxuXG5mdW5jdGlvbiBpc05vblRhYmJhYmxlUmFkaW8obm9kZSkge1xuICBpZiAobm9kZS50YWdOYW1lICE9PSAnSU5QVVQnIHx8IG5vZGUudHlwZSAhPT0gJ3JhZGlvJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghbm9kZS5uYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZ2V0UmFkaW8gPSBzZWxlY3RvciA9PiBub2RlLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihgaW5wdXRbdHlwZT1cInJhZGlvXCJdJHtzZWxlY3Rvcn1gKTtcblxuICBsZXQgcm92aW5nID0gZ2V0UmFkaW8oYFtuYW1lPVwiJHtub2RlLm5hbWV9XCJdOmNoZWNrZWRgKTtcblxuICBpZiAoIXJvdmluZykge1xuICAgIHJvdmluZyA9IGdldFJhZGlvKGBbbmFtZT1cIiR7bm9kZS5uYW1lfVwiXWApO1xuICB9XG5cbiAgcmV0dXJuIHJvdmluZyAhPT0gbm9kZTtcbn1cblxuZnVuY3Rpb24gaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZShub2RlKSB7XG4gIGlmIChub2RlLmRpc2FibGVkIHx8IG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBub2RlLnR5cGUgPT09ICdoaWRkZW4nIHx8IGlzTm9uVGFiYmFibGVSYWRpbyhub2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0R2V0VGFiYmFibGUocm9vdCkge1xuICBjb25zdCByZWd1bGFyVGFiTm9kZXMgPSBbXTtcbiAgY29uc3Qgb3JkZXJlZFRhYk5vZGVzID0gW107XG4gIEFycmF5LmZyb20ocm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNhbmRpZGF0ZXNTZWxlY3RvcikpLmZvckVhY2goKG5vZGUsIGkpID0+IHtcbiAgICBjb25zdCBub2RlVGFiSW5kZXggPSBnZXRUYWJJbmRleChub2RlKTtcblxuICAgIGlmIChub2RlVGFiSW5kZXggPT09IC0xIHx8ICFpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG5vZGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGVUYWJJbmRleCA9PT0gMCkge1xuICAgICAgcmVndWxhclRhYk5vZGVzLnB1c2gobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yZGVyZWRUYWJOb2Rlcy5wdXNoKHtcbiAgICAgICAgZG9jdW1lbnRPcmRlcjogaSxcbiAgICAgICAgdGFiSW5kZXg6IG5vZGVUYWJJbmRleCxcbiAgICAgICAgbm9kZVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9yZGVyZWRUYWJOb2Rlcy5zb3J0KChhLCBiKSA9PiBhLnRhYkluZGV4ID09PSBiLnRhYkluZGV4ID8gYS5kb2N1bWVudE9yZGVyIC0gYi5kb2N1bWVudE9yZGVyIDogYS50YWJJbmRleCAtIGIudGFiSW5kZXgpLm1hcChhID0+IGEubm9kZSkuY29uY2F0KHJlZ3VsYXJUYWJOb2Rlcyk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRJc0VuYWJsZWQoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBVdGlsaXR5IGNvbXBvbmVudCB0aGF0IGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gVHJhcEZvY3VzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBkaXNhYmxlQXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgZGlzYWJsZUVuZm9yY2VGb2N1cyA9IGZhbHNlLFxuICAgIGRpc2FibGVSZXN0b3JlRm9jdXMgPSBmYWxzZSxcbiAgICBnZXRUYWJiYWJsZSA9IGRlZmF1bHRHZXRUYWJiYWJsZSxcbiAgICBpc0VuYWJsZWQgPSBkZWZhdWx0SXNFbmFibGVkLFxuICAgIG9wZW5cbiAgfSA9IHByb3BzO1xuICBjb25zdCBpZ25vcmVOZXh0RW5mb3JjZUZvY3VzID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IHNlbnRpbmVsU3RhcnQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHNlbnRpbmVsRW5kID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBub2RlVG9SZXN0b3JlID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCByZWFjdEZvY3VzRXZlbnRUYXJnZXQgPSBSZWFjdC51c2VSZWYobnVsbCk7IC8vIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIHdoZW4gZGlzYWJsZUF1dG9Gb2N1cyBpcyB0cnVlLlxuICAvLyBJdCB3YWl0cyBmb3IgdGhlIGFjdGl2ZSBlbGVtZW50IHRvIG1vdmUgaW50byB0aGUgY29tcG9uZW50IHRvIGFjdGl2YXRlLlxuXG4gIGNvbnN0IGFjdGl2YXRlZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHJvb3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYoY2hpbGRyZW4ucmVmLCByb290UmVmKTtcbiAgY29uc3QgbGFzdEtleWRvd24gPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gV2UgbWlnaHQgcmVuZGVyIGFuIGVtcHR5IGNoaWxkLlxuICAgIGlmICghb3BlbiB8fCAhcm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYWN0aXZhdGVkLmN1cnJlbnQgPSAhZGlzYWJsZUF1dG9Gb2N1cztcbiAgfSwgW2Rpc2FibGVBdXRvRm9jdXMsIG9wZW5dKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBXZSBtaWdodCByZW5kZXIgYW4gZW1wdHkgY2hpbGQuXG4gICAgaWYgKCFvcGVuIHx8ICFyb290UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkb2MgPSBvd25lckRvY3VtZW50KHJvb3RSZWYuY3VycmVudCk7XG5cbiAgICBpZiAoIXJvb3RSZWYuY3VycmVudC5jb250YWlucyhkb2MuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgIGlmICghcm9vdFJlZi5jdXJyZW50Lmhhc0F0dHJpYnV0ZSgndGFiSW5kZXgnKSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBtb2RhbCBjb250ZW50IG5vZGUgZG9lcyBub3QgYWNjZXB0IGZvY3VzLicsICdGb3IgdGhlIGJlbmVmaXQgb2YgYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgJyArICd0aGUgdGFiSW5kZXggb2YgdGhlIG5vZGUgaXMgYmVpbmcgc2V0IHRvIFwiLTFcIi4nXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cblxuICAgICAgICByb290UmVmLmN1cnJlbnQuc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsIC0xKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2YXRlZC5jdXJyZW50KSB7XG4gICAgICAgIHJvb3RSZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvLyByZXN0b3JlTGFzdEZvY3VzKClcbiAgICAgIGlmICghZGlzYWJsZVJlc3RvcmVGb2N1cykge1xuICAgICAgICAvLyBJbiBJRTExIGl0IGlzIHBvc3NpYmxlIGZvciBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHRvIGJlIG51bGwgcmVzdWx0aW5nXG4gICAgICAgIC8vIGluIG5vZGVUb1Jlc3RvcmUuY3VycmVudCBiZWluZyBudWxsLlxuICAgICAgICAvLyBOb3QgYWxsIGVsZW1lbnRzIGluIElFMTEgaGF2ZSBhIGZvY3VzIG1ldGhvZC5cbiAgICAgICAgLy8gT25jZSBJRTExIHN1cHBvcnQgaXMgZHJvcHBlZCB0aGUgZm9jdXMoKSBjYWxsIGNhbiBiZSB1bmNvbmRpdGlvbmFsLlxuICAgICAgICBpZiAobm9kZVRvUmVzdG9yZS5jdXJyZW50ICYmIG5vZGVUb1Jlc3RvcmUuY3VycmVudC5mb2N1cykge1xuICAgICAgICAgIGlnbm9yZU5leHRFbmZvcmNlRm9jdXMuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlVG9SZXN0b3JlLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfVxuICAgIH07IC8vIE1pc3NpbmcgYGRpc2FibGVSZXN0b3JlRm9jdXNgIHdoaWNoIGlzIGZpbmUuXG4gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBjaGFuZ2luZyB0aGF0IHByb3Agb24gYW4gb3BlbiBUcmFwRm9jdXNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtvcGVuXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gV2UgbWlnaHQgcmVuZGVyIGFuIGVtcHR5IGNoaWxkLlxuICAgIGlmICghb3BlbiB8fCAhcm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChyb290UmVmLmN1cnJlbnQpO1xuXG4gICAgY29uc3QgY29udGFpbiA9IG5hdGl2ZUV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VycmVudDogcm9vdEVsZW1lbnRcbiAgICAgIH0gPSByb290UmVmOyAvLyBDbGVhbnVwIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgbGF6aWx5IGluIFJlYWN0IDE3LlxuICAgICAgLy8gQ29udGFpbiBjYW4gYmUgY2FsbGVkIGJldHdlZW4gdGhlIGNvbXBvbmVudCBiZWluZyB1bm1vdW50ZWQgYW5kIGl0cyBjbGVhbnVwIGZ1bmN0aW9uIGJlaW5nIHJ1bi5cblxuICAgICAgaWYgKHJvb3RFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkb2MuaGFzRm9jdXMoKSB8fCBkaXNhYmxlRW5mb3JjZUZvY3VzIHx8ICFpc0VuYWJsZWQoKSB8fCBpZ25vcmVOZXh0RW5mb3JjZUZvY3VzLmN1cnJlbnQpIHtcbiAgICAgICAgaWdub3JlTmV4dEVuZm9yY2VGb2N1cy5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyb290RWxlbWVudC5jb250YWlucyhkb2MuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgLy8gaWYgdGhlIGZvY3VzIGV2ZW50IGlzIG5vdCBjb21pbmcgZnJvbSBpbnNpZGUgdGhlIGNoaWxkcmVuJ3MgcmVhY3QgdHJlZSwgcmVzZXQgdGhlIHJlZnNcbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50ICYmIHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50ICE9PSBuYXRpdmVFdmVudC50YXJnZXQgfHwgZG9jLmFjdGl2ZUVsZW1lbnQgIT09IHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50KSB7XG4gICAgICAgICAgcmVhY3RGb2N1c0V2ZW50VGFyZ2V0LmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhY3RpdmF0ZWQuY3VycmVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0YWJiYWJsZSA9IFtdO1xuXG4gICAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCA9PT0gc2VudGluZWxTdGFydC5jdXJyZW50IHx8IGRvYy5hY3RpdmVFbGVtZW50ID09PSBzZW50aW5lbEVuZC5jdXJyZW50KSB7XG4gICAgICAgICAgdGFiYmFibGUgPSBnZXRUYWJiYWJsZShyb290UmVmLmN1cnJlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhYmJhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgX2xhc3RLZXlkb3duJGN1cnJlbnQsIF9sYXN0S2V5ZG93biRjdXJyZW50MjtcblxuICAgICAgICAgIGNvbnN0IGlzU2hpZnRUYWIgPSBCb29sZWFuKCgoX2xhc3RLZXlkb3duJGN1cnJlbnQgPSBsYXN0S2V5ZG93bi5jdXJyZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2xhc3RLZXlkb3duJGN1cnJlbnQuc2hpZnRLZXkpICYmICgoX2xhc3RLZXlkb3duJGN1cnJlbnQyID0gbGFzdEtleWRvd24uY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9sYXN0S2V5ZG93biRjdXJyZW50Mi5rZXkpID09PSAnVGFiJyk7XG4gICAgICAgICAgY29uc3QgZm9jdXNOZXh0ID0gdGFiYmFibGVbMF07XG4gICAgICAgICAgY29uc3QgZm9jdXNQcmV2aW91cyA9IHRhYmJhYmxlW3RhYmJhYmxlLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgaWYgKGlzU2hpZnRUYWIpIHtcbiAgICAgICAgICAgIGZvY3VzUHJldmlvdXMuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9jdXNOZXh0LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvb3RFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcEZvY3VzID0gbmF0aXZlRXZlbnQgPT4ge1xuICAgICAgbGFzdEtleWRvd24uY3VycmVudCA9IG5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoZGlzYWJsZUVuZm9yY2VGb2N1cyB8fCAhaXNFbmFibGVkKCkgfHwgbmF0aXZlRXZlbnQua2V5ICE9PSAnVGFiJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIE1ha2Ugc3VyZSB0aGUgbmV4dCB0YWIgc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgLy8gZG9jLmFjdGl2ZUVsZW1lbnQgcmVmZXJlcyB0byB0aGUgb3JpZ2luLlxuXG5cbiAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCA9PT0gcm9vdFJlZi5jdXJyZW50ICYmIG5hdGl2ZUV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gaWdub3JlIHRoZSBuZXh0IGNvbnRhaW4gYXNcbiAgICAgICAgLy8gaXQgd2lsbCB0cnkgdG8gbW92ZSB0aGUgZm9jdXMgYmFjayB0byB0aGUgcm9vdFJlZiBlbGVtZW50LlxuICAgICAgICBpZ25vcmVOZXh0RW5mb3JjZUZvY3VzLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBzZW50aW5lbEVuZC5jdXJyZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgY29udGFpbik7XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBsb29wRm9jdXMsIHRydWUpOyAvLyBXaXRoIEVkZ2UsIFNhZmFyaSBhbmQgRmlyZWZveCwgbm8gZm9jdXMgcmVsYXRlZCBldmVudHMgYXJlIGZpcmVkIHdoZW4gdGhlIGZvY3VzZWQgYXJlYSBzdG9wcyBiZWluZyBhIGZvY3VzZWQgYXJlYS5cbiAgICAvLyBlLmcuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTU1OTU2MS5cbiAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4gbG9vayBpZiB0aGUgYWN0aXZlIGVsZW1lbnQgd2FzIHJlc3RvcmVkIG9uIHRoZSBCT0RZIGVsZW1lbnQuXG4gICAgLy9cbiAgICAvLyBUaGUgd2hhdHdnIHNwZWMgZGVmaW5lcyBob3cgdGhlIGJyb3dzZXIgc2hvdWxkIGJlaGF2ZSBidXQgZG9lcyBub3QgZXhwbGljaXRseSBtZW50aW9uIGFueSBldmVudHM6XG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW50ZXJhY3Rpb24uaHRtbCNmb2N1cy1maXh1cC1ydWxlLlxuXG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoZG9jLmFjdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgIGNvbnRhaW4oKTtcbiAgICAgIH1cbiAgICB9LCA1MCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBjb250YWluKTtcbiAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgbG9vcEZvY3VzLCB0cnVlKTtcbiAgICB9O1xuICB9LCBbZGlzYWJsZUF1dG9Gb2N1cywgZGlzYWJsZUVuZm9yY2VGb2N1cywgZGlzYWJsZVJlc3RvcmVGb2N1cywgaXNFbmFibGVkLCBvcGVuLCBnZXRUYWJiYWJsZV0pO1xuXG4gIGNvbnN0IG9uRm9jdXMgPSBldmVudCA9PiB7XG4gICAgaWYgKG5vZGVUb1Jlc3RvcmUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICB9XG5cbiAgICBhY3RpdmF0ZWQuY3VycmVudCA9IHRydWU7XG4gICAgcmVhY3RGb2N1c0V2ZW50VGFyZ2V0LmN1cnJlbnQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3QgY2hpbGRyZW5Qcm9wc0hhbmRsZXIgPSBjaGlsZHJlbi5wcm9wcy5vbkZvY3VzO1xuXG4gICAgaWYgKGNoaWxkcmVuUHJvcHNIYW5kbGVyKSB7XG4gICAgICBjaGlsZHJlblByb3BzSGFuZGxlcihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzU2VudGluZWwgPSBldmVudCA9PiB7XG4gICAgaWYgKG5vZGVUb1Jlc3RvcmUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICB9XG5cbiAgICBhY3RpdmF0ZWQuY3VycmVudCA9IHRydWU7XG4gIH07XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goXCJkaXZcIiwge1xuICAgICAgdGFiSW5kZXg6IG9wZW4gPyAwIDogLTEsXG4gICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1NlbnRpbmVsLFxuICAgICAgcmVmOiBzZW50aW5lbFN0YXJ0LFxuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcInNlbnRpbmVsU3RhcnRcIlxuICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICByZWY6IGhhbmRsZVJlZixcbiAgICAgIG9uRm9jdXNcbiAgICB9KSwgLyojX19QVVJFX18qL19qc3goXCJkaXZcIiwge1xuICAgICAgdGFiSW5kZXg6IG9wZW4gPyAwIDogLTEsXG4gICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1NlbnRpbmVsLFxuICAgICAgcmVmOiBzZW50aW5lbEVuZCxcbiAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJzZW50aW5lbEVuZFwiXG4gICAgfSldXG4gIH0pO1xufVxuXG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUcmFwRm9jdXMucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0cmFwIGZvY3VzIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgc2hpZnQgZm9jdXMgdG8gaXRzZWxmIHdoZW4gaXQgb3BlbnMsIGFuZFxuICAgKiByZXBsYWNlIGl0IHRvIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aGVuIGl0IGNsb3Nlcy5cbiAgICogVGhpcyBhbHNvIHdvcmtzIGNvcnJlY3RseSB3aXRoIGFueSB0cmFwIGZvY3VzIGNoaWxkcmVuIHRoYXQgaGF2ZSB0aGUgYGRpc2FibGVBdXRvRm9jdXNgIHByb3AuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSB0cmFwIGZvY3VzIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRyYXAgZm9jdXMgd2lsbCBub3QgcHJldmVudCBmb2N1cyBmcm9tIGxlYXZpbmcgdGhlIHRyYXAgZm9jdXMgd2hpbGUgb3Blbi5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIHRyYXAgZm9jdXMgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdHJhcCBmb2N1cyB3aWxsIG5vdCByZXN0b3JlIGZvY3VzIHRvIHByZXZpb3VzbHkgZm9jdXNlZCBlbGVtZW50IG9uY2VcbiAgICogdHJhcCBmb2N1cyBpcyBoaWRkZW4gb3IgdW5tb3VudGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJlc3RvcmVGb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygb3JkZXJlZCB0YWJiYWJsZSBub2RlcyAoaS5lLiBpbiB0YWIgb3JkZXIpIHdpdGhpbiB0aGUgcm9vdC5cbiAgICogRm9yIGluc3RhbmNlLCB5b3UgY2FuIHByb3ZpZGUgdGhlIFwidGFiYmFibGVcIiBucG0gZGVwZW5kZW5jeS5cbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdFxuICAgKi9cbiAgZ2V0VGFiYmFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgZXh0ZW5kcyB0aGUgYG9wZW5gIHByb3AuXG4gICAqIEl0IGFsbG93cyB0byB0b2dnbGUgdGhlIG9wZW4gc3RhdGUgd2l0aG91dCBoYXZpbmcgdG8gd2FpdCBmb3IgYSByZXJlbmRlciB3aGVuIGNoYW5naW5nIHRoZSBgb3BlbmAgcHJvcC5cbiAgICogVGhpcyBwcm9wIHNob3VsZCBiZSBtZW1vaXplZC5cbiAgICogSXQgY2FuIGJlIHVzZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSB0cmFwIGZvY3VzIG1vdW50ZWQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogQGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdElzRW5hYmxlZCgpIHtcbiAgICogICByZXR1cm4gdHJ1ZTtcbiAgICogfVxuICAgKi9cbiAgaXNFbmFibGVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBmb2N1cyBpcyBsb2NrZWQuXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgVHJhcEZvY3VzWydwcm9wVHlwZXMnICsgJyddID0gZXhhY3RQcm9wKFRyYXBGb2N1cy5wcm9wVHlwZXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFwRm9jdXM7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGFsVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNb2RhbCcsIHNsb3QpO1xufVxuY29uc3QgbW9kYWxVbnN0eWxlZENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNb2RhbCcsIFsncm9vdCcsICdoaWRkZW4nXSk7XG5leHBvcnQgZGVmYXVsdCBtb2RhbFVuc3R5bGVkQ2xhc3NlczsiLCIvKipcbiAqIERldGVybWluZXMgaWYgYSBnaXZlbiBlbGVtZW50IGlzIGEgRE9NIGVsZW1lbnQgbmFtZSAoaS5lLiBub3QgYSBSZWFjdCBjb21wb25lbnQpLlxuICovXG5mdW5jdGlvbiBpc0hvc3RDb21wb25lbnQoZWxlbWVudCkge1xuICByZXR1cm4gdHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0hvc3RDb21wb25lbnQ7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgaXNIb3N0Q29tcG9uZW50IGZyb20gJy4vaXNIb3N0Q29tcG9uZW50Jztcbi8qKlxuICogVHlwZSBvZiB0aGUgb3duZXJTdGF0ZSBiYXNlZCBvbiB0aGUgdHlwZSBvZiBhbiBlbGVtZW50IGl0IGFwcGxpZXMgdG8uXG4gKiBUaGlzIHJlc29sdmVzIHRvIHRoZSBwcm92aWRlZCBPd25lclN0YXRlIGZvciBSZWFjdCBjb21wb25lbnRzIGFuZCBgdW5kZWZpbmVkYCBmb3IgaG9zdCBjb21wb25lbnRzLlxuICogRmFsbHMgYmFjayB0byBgT3duZXJTdGF0ZSB8IHVuZGVmaW5lZGAgd2hlbiB0aGUgZXhhY3QgdHlwZSBjYW4ndCBiZSBkZXRlcm1pbmVkIGluIGRldmVsb3BtZW50IHRpbWUuXG4gKi9cblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBvd25lclN0YXRlIG9iamVjdCB0byB0aGUgcHJvcHMsIG1lcmdpbmcgd2l0aCB0aGUgZXhpc3Rpbmcgb25lIGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudFR5cGUgVHlwZSBvZiB0aGUgZWxlbWVudCB0aGF0IG93bnMgdGhlIGBleGlzdGluZ1Byb3BzYC4gSWYgdGhlIGVsZW1lbnQgaXMgYSBET00gbm9kZSwgYG93bmVyU3RhdGVgIGlzIG5vdCBhcHBsaWVkLlxuICogQHBhcmFtIG90aGVyUHJvcHMgUHJvcHMgb2YgdGhlIGVsZW1lbnQuXG4gKiBAcGFyYW0gb3duZXJTdGF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcHBlbmRPd25lclN0YXRlKGVsZW1lbnRUeXBlLCBvdGhlclByb3BzID0ge30sIG93bmVyU3RhdGUpIHtcbiAgaWYgKGlzSG9zdENvbXBvbmVudChlbGVtZW50VHlwZSkpIHtcbiAgICByZXR1cm4gb3RoZXJQcm9wcztcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3RoZXJQcm9wcywge1xuICAgIG93bmVyU3RhdGU6IF9leHRlbmRzKHt9LCBvdGhlclByb3BzLm93bmVyU3RhdGUsIG93bmVyU3RhdGUpXG4gIH0pO1xufSIsIi8qKlxuICogUmVtb3ZlcyBldmVudCBoYW5kbGVycyBmcm9tIHRoZSBnaXZlbiBvYmplY3QuXG4gKiBBIGZpZWxkIGlzIGNvbnNpZGVyZWQgYW4gZXZlbnQgaGFuZGxlciBpZiBpdCBpcyBhIGZ1bmN0aW9uIHdpdGggYSBuYW1lIGJlZ2lubmluZyB3aXRoIGBvbmAuXG4gKlxuICogQHBhcmFtIG9iamVjdCBPYmplY3QgdG8gcmVtb3ZlIGV2ZW50IGhhbmRsZXJzIGZyb20uXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBldmVudCBoYW5kbGVycyByZW1vdmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvbWl0RXZlbnRIYW5kbGVycyhvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIE9iamVjdC5rZXlzKG9iamVjdCkuZmlsdGVyKHByb3AgPT4gIShwcm9wLm1hdGNoKC9eb25bQS1aXS8pICYmIHR5cGVvZiBvYmplY3RbcHJvcF0gPT09ICdmdW5jdGlvbicpKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9iamVjdFtwcm9wXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59IiwiLyoqXG4gKiBJZiBgY29tcG9uZW50UHJvcHNgIGlzIGEgZnVuY3Rpb24sIGNhbGxzIGl0IHdpdGggdGhlIHByb3ZpZGVkIGBvd25lclN0YXRlYC5cbiAqIE90aGVyd2lzZSwganVzdCByZXR1cm5zIGBjb21wb25lbnRQcm9wc2AuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc29sdmVDb21wb25lbnRQcm9wcyhjb21wb25lbnRQcm9wcywgb3duZXJTdGF0ZSkge1xuICBpZiAodHlwZW9mIGNvbXBvbmVudFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudFByb3BzKG93bmVyU3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudFByb3BzO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJlbGVtZW50VHlwZVwiLCBcImV4dGVybmFsU2xvdFByb3BzXCIsIFwib3duZXJTdGF0ZVwiXTtcbmltcG9ydCB7IHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGFwcGVuZE93bmVyU3RhdGUgZnJvbSAnLi9hcHBlbmRPd25lclN0YXRlJztcbmltcG9ydCBtZXJnZVNsb3RQcm9wcyBmcm9tICcuL21lcmdlU2xvdFByb3BzJztcbmltcG9ydCByZXNvbHZlQ29tcG9uZW50UHJvcHMgZnJvbSAnLi9yZXNvbHZlQ29tcG9uZW50UHJvcHMnO1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcHJvcHMgdG8gYmUgcGFzc2VkIGludG8gdGhlIHNsb3Qgb2YgYW4gdW5zdHlsZWQgY29tcG9uZW50LlxuICogSXQgbWVyZ2VzIHRoZSBpbnRlcm5hbCBwcm9wcyBvZiB0aGUgY29tcG9uZW50IHdpdGggdGhlIG9uZXMgc3VwcGxpZWQgYnkgdGhlIHVzZXIsIGFsbG93aW5nIHRvIGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3IuXG4gKiBJZiB0aGUgc2xvdCBjb21wb25lbnQgaXMgbm90IGEgaG9zdCBjb21wb25lbnQsIGl0IGFsc28gbWVyZ2VzIGluIHRoZSBgb3duZXJTdGF0ZWAuXG4gKlxuICogQHBhcmFtIHBhcmFtZXRlcnMuZ2V0U2xvdFByb3BzIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHByb3BzIHRvIGJlIHBhc3NlZCB0byB0aGUgc2xvdCBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVNsb3RQcm9wcyhwYXJhbWV0ZXJzKSB7XG4gIHZhciBfcGFyYW1ldGVycyRhZGRpdGlvbmE7XG5cbiAgY29uc3Qge1xuICAgIGVsZW1lbnRUeXBlLFxuICAgIGV4dGVybmFsU2xvdFByb3BzLFxuICAgIG93bmVyU3RhdGVcbiAgfSA9IHBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwYXJhbWV0ZXJzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IHJlc29sdmVkQ29tcG9uZW50c1Byb3BzID0gcmVzb2x2ZUNvbXBvbmVudFByb3BzKGV4dGVybmFsU2xvdFByb3BzLCBvd25lclN0YXRlKTtcbiAgY29uc3Qge1xuICAgIHByb3BzOiBtZXJnZWRQcm9wcyxcbiAgICBpbnRlcm5hbFJlZlxuICB9ID0gbWVyZ2VTbG90UHJvcHMoX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICBleHRlcm5hbFNsb3RQcm9wczogcmVzb2x2ZWRDb21wb25lbnRzUHJvcHNcbiAgfSkpO1xuICBjb25zdCByZWYgPSB1c2VGb3JrUmVmKGludGVybmFsUmVmLCB1c2VGb3JrUmVmKHJlc29sdmVkQ29tcG9uZW50c1Byb3BzID09IG51bGwgPyB2b2lkIDAgOiByZXNvbHZlZENvbXBvbmVudHNQcm9wcy5yZWYsIChfcGFyYW1ldGVycyRhZGRpdGlvbmEgPSBwYXJhbWV0ZXJzLmFkZGl0aW9uYWxQcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYXJhbWV0ZXJzJGFkZGl0aW9uYS5yZWYpKTtcbiAgY29uc3QgcHJvcHMgPSBhcHBlbmRPd25lclN0YXRlKGVsZW1lbnRUeXBlLCBfZXh0ZW5kcyh7fSwgbWVyZ2VkUHJvcHMsIHtcbiAgICByZWZcbiAgfSksIG93bmVyU3RhdGUpO1xuICByZXR1cm4gcHJvcHM7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBleHRyYWN0RXZlbnRIYW5kbGVycyBmcm9tICcuL2V4dHJhY3RFdmVudEhhbmRsZXJzJztcbmltcG9ydCBvbWl0RXZlbnRIYW5kbGVycyBmcm9tICcuL29taXRFdmVudEhhbmRsZXJzJztcblxuLyoqXG4gKiBNZXJnZXMgdGhlIHNsb3QgY29tcG9uZW50IGludGVybmFsIHByb3BzICh1c3VhbGx5IGNvbWluZyBmcm9tIGEgaG9vaylcbiAqIHdpdGggdGhlIGV4dGVybmFsbHkgcHJvdmlkZWQgb25lcy5cbiAqXG4gKiBUaGUgbWVyZ2Ugb3JkZXIgaXMgKHRoZSBsYXR0ZXIgb3ZlcnJpZGVzIHRoZSBmb3JtZXIpOlxuICogMS4gVGhlIGludGVybmFsIHByb3BzIChzcGVjaWZpZWQgYXMgYSBnZXR0ZXIgZnVuY3Rpb24gdG8gd29yayB3aXRoIGdldCpQcm9wcyBob29rIHJlc3VsdClcbiAqIDIuIEFkZGl0aW9uYWwgcHJvcHMgKHNwZWNpZmllZCBpbnRlcm5hbGx5IG9uIGFuIHVuc3R5bGVkIGNvbXBvbmVudClcbiAqIDMuIEV4dGVybmFsIHByb3BzIHNwZWNpZmllZCBvbiB0aGUgb3duZXIgY29tcG9uZW50LiBUaGVzZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGEgcm9vdCBzbG90LlxuICogNC4gRXh0ZXJuYWwgcHJvcHMgc3BlY2lmaWVkIGluIHRoZSBgY29tcG9uZW50c1Byb3BzLipgIHByb3AuXG4gKiA1LiBUaGUgYGNsYXNzTmFtZWAgcHJvcCAtIGNvbWJpbmVkIGZyb20gYWxsIHRoZSBhYm92ZS5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVNsb3RQcm9wcyhwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHtcbiAgICBnZXRTbG90UHJvcHMsXG4gICAgYWRkaXRpb25hbFByb3BzLFxuICAgIGV4dGVybmFsU2xvdFByb3BzLFxuICAgIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMsXG4gICAgY2xhc3NOYW1lXG4gIH0gPSBwYXJhbWV0ZXJzO1xuXG4gIGlmICghZ2V0U2xvdFByb3BzKSB7XG4gICAgLy8gVGhlIHNpbXBsZXIgY2FzZSAtIGdldFNsb3RQcm9wcyBpcyBub3QgZGVmaW5lZCwgc28gbm8gaW50ZXJuYWwgZXZlbnQgaGFuZGxlcnMgYXJlIGRlZmluZWQsXG4gICAgLy8gc28gd2UgY2FuIHNpbXBseSBtZXJnZSBhbGwgdGhlIHByb3BzIHdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGV4dHJhY3RpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgY29uc3Qgam9pbmVkQ2xhc3NlcyA9IGNsc3goZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcy5jbGFzc05hbWUsIGV4dGVybmFsU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbFNsb3RQcm9wcy5jbGFzc05hbWUsIGNsYXNzTmFtZSwgYWRkaXRpb25hbFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBhZGRpdGlvbmFsUHJvcHMuY2xhc3NOYW1lKTtcblxuICAgIGNvbnN0IG1lcmdlZFN0eWxlID0gX2V4dGVuZHMoe30sIGFkZGl0aW9uYWxQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogYWRkaXRpb25hbFByb3BzLnN0eWxlLCBleHRlcm5hbEZvcndhcmRlZFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbEZvcndhcmRlZFByb3BzLnN0eWxlLCBleHRlcm5hbFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxTbG90UHJvcHMuc3R5bGUpO1xuXG4gICAgY29uc3QgcHJvcHMgPSBfZXh0ZW5kcyh7fSwgYWRkaXRpb25hbFByb3BzLCBleHRlcm5hbEZvcndhcmRlZFByb3BzLCBleHRlcm5hbFNsb3RQcm9wcyk7XG5cbiAgICBpZiAoam9pbmVkQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9wcy5jbGFzc05hbWUgPSBqb2luZWRDbGFzc2VzO1xuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyhtZXJnZWRTdHlsZSkubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcHMuc3R5bGUgPSBtZXJnZWRTdHlsZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJvcHMsXG4gICAgICBpbnRlcm5hbFJlZjogdW5kZWZpbmVkXG4gICAgfTtcbiAgfSAvLyBJbiB0aGlzIGNhc2UsIGdldFNsb3RQcm9wcyBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyB0aGUgZXh0ZXJuYWwgZXZlbnQgaGFuZGxlcnMuXG4gIC8vIFdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSB0aGVtIGluIHRoZSBtZXJnZWQgcHJvcHMgYmVjYXVzZSBvZiB0aGlzLlxuXG5cbiAgY29uc3QgZXZlbnRIYW5kbGVycyA9IGV4dHJhY3RFdmVudEhhbmRsZXJzKF9leHRlbmRzKHt9LCBleHRlcm5hbEZvcndhcmRlZFByb3BzLCBleHRlcm5hbFNsb3RQcm9wcykpO1xuICBjb25zdCBjb21wb25lbnRzUHJvcHNXaXRob3V0RXZlbnRIYW5kbGVycyA9IG9taXRFdmVudEhhbmRsZXJzKGV4dGVybmFsU2xvdFByb3BzKTtcbiAgY29uc3Qgb3RoZXJQcm9wc1dpdGhvdXRFdmVudEhhbmRsZXJzID0gb21pdEV2ZW50SGFuZGxlcnMoZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyk7XG4gIGNvbnN0IGludGVybmFsU2xvdFByb3BzID0gZ2V0U2xvdFByb3BzKGV2ZW50SGFuZGxlcnMpOyAvLyBUaGUgb3JkZXIgb2YgY2xhc3NlcyBpcyBpbXBvcnRhbnQgaGVyZS5cbiAgLy8gRW1vdGlvbiAodGhhdCB3ZSB1c2UgaW4gbGlicmFyaWVzIGNvbnN1bWluZyBNVUkgQmFzZSkgZGVwZW5kcyBvbiB0aGlzIG9yZGVyXG4gIC8vIHRvIHByb3Blcmx5IG92ZXJyaWRlIHN0eWxlLiBJdCByZXF1aXJlcyB0aGUgbW9zdCBpbXBvcnRhbnQgY2xhc3NlcyB0byBiZSBsYXN0XG4gIC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzMzMjA1KSBmb3IgdGhlIHJlbGF0ZWQgZGlzY3Vzc2lvbi5cblxuICBjb25zdCBqb2luZWRDbGFzc2VzID0gY2xzeChpbnRlcm5hbFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogaW50ZXJuYWxTbG90UHJvcHMuY2xhc3NOYW1lLCBhZGRpdGlvbmFsUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxQcm9wcy5jbGFzc05hbWUsIGNsYXNzTmFtZSwgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcy5jbGFzc05hbWUsIGV4dGVybmFsU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbFNsb3RQcm9wcy5jbGFzc05hbWUpO1xuXG4gIGNvbnN0IG1lcmdlZFN0eWxlID0gX2V4dGVuZHMoe30sIGludGVybmFsU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBpbnRlcm5hbFNsb3RQcm9wcy5zdHlsZSwgYWRkaXRpb25hbFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBhZGRpdGlvbmFsUHJvcHMuc3R5bGUsIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsRm9yd2FyZGVkUHJvcHMuc3R5bGUsIGV4dGVybmFsU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbFNsb3RQcm9wcy5zdHlsZSk7XG5cbiAgY29uc3QgcHJvcHMgPSBfZXh0ZW5kcyh7fSwgaW50ZXJuYWxTbG90UHJvcHMsIGFkZGl0aW9uYWxQcm9wcywgb3RoZXJQcm9wc1dpdGhvdXRFdmVudEhhbmRsZXJzLCBjb21wb25lbnRzUHJvcHNXaXRob3V0RXZlbnRIYW5kbGVycyk7XG5cbiAgaWYgKGpvaW5lZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgIHByb3BzLmNsYXNzTmFtZSA9IGpvaW5lZENsYXNzZXM7XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMobWVyZ2VkU3R5bGUpLmxlbmd0aCA+IDApIHtcbiAgICBwcm9wcy5zdHlsZSA9IG1lcmdlZFN0eWxlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wcyxcbiAgICBpbnRlcm5hbFJlZjogaW50ZXJuYWxTbG90UHJvcHMucmVmXG4gIH07XG59IiwiLyoqXG4gKiBFeHRyYWN0cyBldmVudCBoYW5kbGVycyBmcm9tIGEgZ2l2ZW4gb2JqZWN0LlxuICogQSBwcm9wIGlzIGNvbnNpZGVyZWQgYW4gZXZlbnQgaGFuZGxlciBpZiBpdCBpcyBhIGZ1bmN0aW9uIGFuZCBpdHMgbmFtZSBzdGFydHMgd2l0aCBgb25gLlxuICpcbiAqIEBwYXJhbSBvYmplY3QgQW4gb2JqZWN0IHRvIGV4dHJhY3QgZXZlbnQgaGFuZGxlcnMgZnJvbS5cbiAqIEBwYXJhbSBleGNsdWRlS2V5cyBBbiBhcnJheSBvZiBrZXlzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgcmV0dXJuZWQgb2JqZWN0LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRyYWN0RXZlbnRIYW5kbGVycyhvYmplY3QsIGV4Y2x1ZGVLZXlzID0gW10pIHtcbiAgaWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIE9iamVjdC5rZXlzKG9iamVjdCkuZmlsdGVyKHByb3AgPT4gcHJvcC5tYXRjaCgvXm9uW0EtWl0vKSAmJiB0eXBlb2Ygb2JqZWN0W3Byb3BdID09PSAnZnVuY3Rpb24nICYmICFleGNsdWRlS2V5cy5pbmNsdWRlcyhwcm9wKSkuZm9yRWFjaChwcm9wID0+IHtcbiAgICByZXN1bHRbcHJvcF0gPSBvYmplY3RbcHJvcF07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzZXNcIiwgXCJjbG9zZUFmdGVyVHJhbnNpdGlvblwiLCBcImNvbXBvbmVudFwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJjb250YWluZXJcIiwgXCJkaXNhYmxlQXV0b0ZvY3VzXCIsIFwiZGlzYWJsZUVuZm9yY2VGb2N1c1wiLCBcImRpc2FibGVFc2NhcGVLZXlEb3duXCIsIFwiZGlzYWJsZVBvcnRhbFwiLCBcImRpc2FibGVSZXN0b3JlRm9jdXNcIiwgXCJkaXNhYmxlU2Nyb2xsTG9ja1wiLCBcImhpZGVCYWNrZHJvcFwiLCBcImtlZXBNb3VudGVkXCIsIFwibWFuYWdlclwiLCBcIm9uQmFja2Ryb3BDbGlja1wiLCBcIm9uQ2xvc2VcIiwgXCJvbktleURvd25cIiwgXCJvcGVuXCIsIFwib25UcmFuc2l0aW9uRW50ZXJcIiwgXCJvblRyYW5zaXRpb25FeGl0ZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiwgSFRNTEVsZW1lbnRUeXBlLCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQsIHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiwgdW5zdGFibGVfY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGFzIGNyZWF0ZUNoYWluZWRGdW5jdGlvbiwgdW5zdGFibGVfdXNlRXZlbnRDYWxsYmFjayBhcyB1c2VFdmVudENhbGxiYWNrIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnLi4vY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IFBvcnRhbCBmcm9tICcuLi9Qb3J0YWwnO1xuaW1wb3J0IE1vZGFsTWFuYWdlciwgeyBhcmlhSGlkZGVuIH0gZnJvbSAnLi9Nb2RhbE1hbmFnZXInO1xuaW1wb3J0IFRyYXBGb2N1cyBmcm9tICcuLi9UcmFwRm9jdXMnO1xuaW1wb3J0IHsgZ2V0TW9kYWxVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL21vZGFsVW5zdHlsZWRDbGFzc2VzJztcbmltcG9ydCB7IHVzZVNsb3RQcm9wcyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvcGVuLFxuICAgIGV4aXRlZCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhb3BlbiAmJiBleGl0ZWQgJiYgJ2hpZGRlbiddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TW9kYWxVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuZnVuY3Rpb24gZ2V0Q29udGFpbmVyKGNvbnRhaW5lcikge1xuICByZXR1cm4gdHlwZW9mIGNvbnRhaW5lciA9PT0gJ2Z1bmN0aW9uJyA/IGNvbnRhaW5lcigpIDogY29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBnZXRIYXNUcmFuc2l0aW9uKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcy5jaGlsZHJlbiA/IHByb3BzLmNoaWxkcmVuLnByb3BzLmhhc093blByb3BlcnR5KCdpbicpIDogZmFsc2U7XG59IC8vIEEgbW9kYWwgbWFuYWdlciB1c2VkIHRvIHRyYWNrIGFuZCBtYW5hZ2UgdGhlIHN0YXRlIG9mIG9wZW4gTW9kYWxzLlxuLy8gTW9kYWxzIGRvbid0IG9wZW4gb24gdGhlIHNlcnZlciBzbyB0aGlzIHdvbid0IGNvbmZsaWN0IHdpdGggY29uY3VycmVudCByZXF1ZXN0cy5cblxuXG5jb25zdCBkZWZhdWx0TWFuYWdlciA9IG5ldyBNb2RhbE1hbmFnZXIoKTtcbi8qKlxuICogTW9kYWwgaXMgYSBsb3dlci1sZXZlbCBjb25zdHJ1Y3QgdGhhdCBpcyBsZXZlcmFnZWQgYnkgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqIC0gW0RpYWxvZ10oL21hdGVyaWFsLXVpL2FwaS9kaWFsb2cvKVxuICogLSBbRHJhd2VyXSgvbWF0ZXJpYWwtdWkvYXBpL2RyYXdlci8pXG4gKiAtIFtNZW51XSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUvKVxuICogLSBbUG9wb3Zlcl0oL21hdGVyaWFsLXVpL2FwaS9wb3BvdmVyLylcbiAqXG4gKiBJZiB5b3UgYXJlIGNyZWF0aW5nIGEgbW9kYWwgZGlhbG9nLCB5b3UgcHJvYmFibHkgd2FudCB0byB1c2UgdGhlIFtEaWFsb2ddKC9tYXRlcmlhbC11aS9hcGkvZGlhbG9nLykgY29tcG9uZW50XG4gKiByYXRoZXIgdGhhbiBkaXJlY3RseSB1c2luZyBNb2RhbC5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBzaGFyZXMgbWFueSBjb25jZXB0cyB3aXRoIFtyZWFjdC1vdmVybGF5c10oaHR0cHM6Ly9yZWFjdC1ib290c3RyYXAuZ2l0aHViLmlvL3JlYWN0LW92ZXJsYXlzLyNtb2RhbHMpLlxuICovXG5cbmNvbnN0IE1vZGFsVW5zdHlsZWQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNb2RhbFVuc3R5bGVkKHByb3BzLCByZWYpIHtcbiAgdmFyIF9wcm9wcyRhcmlhSGlkZGVuO1xuXG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc2VzOiBjbGFzc2VzUHJvcCxcbiAgICBjbG9zZUFmdGVyVHJhbnNpdGlvbiA9IGZhbHNlLFxuICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICBjb21wb25lbnRzUHJvcHMgPSB7fSxcbiAgICBjb250YWluZXIsXG4gICAgZGlzYWJsZUF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgIGRpc2FibGVFbmZvcmNlRm9jdXMgPSBmYWxzZSxcbiAgICBkaXNhYmxlRXNjYXBlS2V5RG93biA9IGZhbHNlLFxuICAgIGRpc2FibGVQb3J0YWwgPSBmYWxzZSxcbiAgICBkaXNhYmxlUmVzdG9yZUZvY3VzID0gZmFsc2UsXG4gICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZSxcbiAgICBoaWRlQmFja2Ryb3AgPSBmYWxzZSxcbiAgICBrZWVwTW91bnRlZCA9IGZhbHNlLFxuICAgIC8vIHByaXZhdGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgIG1hbmFnZXIgPSBkZWZhdWx0TWFuYWdlcixcbiAgICBvbkJhY2tkcm9wQ2xpY2ssXG4gICAgb25DbG9zZSxcbiAgICBvbktleURvd24sXG4gICAgb3BlbixcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3Byb3AtdHlwZXMgKi9cbiAgICBvblRyYW5zaXRpb25FbnRlcixcbiAgICBvblRyYW5zaXRpb25FeGl0ZWRcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IFtleGl0ZWQsIHNldEV4aXRlZF0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgbW9kYWwgPSBSZWFjdC51c2VSZWYoe30pO1xuICBjb25zdCBtb3VudE5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IG1vZGFsUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKG1vZGFsUmVmLCByZWYpO1xuICBjb25zdCBoYXNUcmFuc2l0aW9uID0gZ2V0SGFzVHJhbnNpdGlvbihwcm9wcyk7XG4gIGNvbnN0IGFyaWFIaWRkZW5Qcm9wID0gKF9wcm9wcyRhcmlhSGlkZGVuID0gcHJvcHNbJ2FyaWEtaGlkZGVuJ10pICE9IG51bGwgPyBfcHJvcHMkYXJpYUhpZGRlbiA6IHRydWU7XG5cbiAgY29uc3QgZ2V0RG9jID0gKCkgPT4gb3duZXJEb2N1bWVudChtb3VudE5vZGVSZWYuY3VycmVudCk7XG5cbiAgY29uc3QgZ2V0TW9kYWwgPSAoKSA9PiB7XG4gICAgbW9kYWwuY3VycmVudC5tb2RhbFJlZiA9IG1vZGFsUmVmLmN1cnJlbnQ7XG4gICAgbW9kYWwuY3VycmVudC5tb3VudE5vZGUgPSBtb3VudE5vZGVSZWYuY3VycmVudDtcbiAgICByZXR1cm4gbW9kYWwuY3VycmVudDtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVNb3VudGVkID0gKCkgPT4ge1xuICAgIG1hbmFnZXIubW91bnQoZ2V0TW9kYWwoKSwge1xuICAgICAgZGlzYWJsZVNjcm9sbExvY2tcbiAgICB9KTsgLy8gRml4IGEgYnVnIG9uIENocm9tZSB3aGVyZSB0aGUgc2Nyb2xsIGlzbid0IGluaXRpYWxseSAwLlxuXG4gICAgbW9kYWxSZWYuY3VycmVudC5zY3JvbGxUb3AgPSAwO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU9wZW4gPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCByZXNvbHZlZENvbnRhaW5lciA9IGdldENvbnRhaW5lcihjb250YWluZXIpIHx8IGdldERvYygpLmJvZHk7XG4gICAgbWFuYWdlci5hZGQoZ2V0TW9kYWwoKSwgcmVzb2x2ZWRDb250YWluZXIpOyAvLyBUaGUgZWxlbWVudCB3YXMgYWxyZWFkeSBtb3VudGVkLlxuXG4gICAgaWYgKG1vZGFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIGhhbmRsZU1vdW50ZWQoKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBpc1RvcE1vZGFsID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gbWFuYWdlci5pc1RvcE1vZGFsKGdldE1vZGFsKCkpLCBbbWFuYWdlcl0pO1xuICBjb25zdCBoYW5kbGVQb3J0YWxSZWYgPSB1c2VFdmVudENhbGxiYWNrKG5vZGUgPT4ge1xuICAgIG1vdW50Tm9kZVJlZi5jdXJyZW50ID0gbm9kZTtcblxuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcGVuICYmIGlzVG9wTW9kYWwoKSkge1xuICAgICAgaGFuZGxlTW91bnRlZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmlhSGlkZGVuKG1vZGFsUmVmLmN1cnJlbnQsIGFyaWFIaWRkZW5Qcm9wKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBtYW5hZ2VyLnJlbW92ZShnZXRNb2RhbCgpLCBhcmlhSGlkZGVuUHJvcCk7XG4gIH0sIFttYW5hZ2VyLCBhcmlhSGlkZGVuUHJvcF0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBoYW5kbGVDbG9zZSgpO1xuICAgIH07XG4gIH0sIFtoYW5kbGVDbG9zZV0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICBoYW5kbGVPcGVuKCk7XG4gICAgfSBlbHNlIGlmICghaGFzVHJhbnNpdGlvbiB8fCAhY2xvc2VBZnRlclRyYW5zaXRpb24pIHtcbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfVxuICB9LCBbb3BlbiwgaGFuZGxlQ2xvc2UsIGhhc1RyYW5zaXRpb24sIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uLCBoYW5kbGVPcGVuXSk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNQcm9wLFxuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uLFxuICAgIGRpc2FibGVBdXRvRm9jdXMsXG4gICAgZGlzYWJsZUVuZm9yY2VGb2N1cyxcbiAgICBkaXNhYmxlRXNjYXBlS2V5RG93bixcbiAgICBkaXNhYmxlUG9ydGFsLFxuICAgIGRpc2FibGVSZXN0b3JlRm9jdXMsXG4gICAgZGlzYWJsZVNjcm9sbExvY2ssXG4gICAgZXhpdGVkLFxuICAgIGhpZGVCYWNrZHJvcCxcbiAgICBrZWVwTW91bnRlZFxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG5cbiAgY29uc3QgaGFuZGxlRW50ZXIgPSAoKSA9PiB7XG4gICAgc2V0RXhpdGVkKGZhbHNlKTtcblxuICAgIGlmIChvblRyYW5zaXRpb25FbnRlcikge1xuICAgICAgb25UcmFuc2l0aW9uRW50ZXIoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gKCkgPT4ge1xuICAgIHNldEV4aXRlZCh0cnVlKTtcblxuICAgIGlmIChvblRyYW5zaXRpb25FeGl0ZWQpIHtcbiAgICAgIG9uVHJhbnNpdGlvbkV4aXRlZCgpO1xuICAgIH1cblxuICAgIGlmIChjbG9zZUFmdGVyVHJhbnNpdGlvbikge1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQmFja2Ryb3BDbGljayA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9uQmFja2Ryb3BDbGljaykge1xuICAgICAgb25CYWNrZHJvcENsaWNrKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZShldmVudCwgJ2JhY2tkcm9wQ2xpY2snKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAob25LZXlEb3duKSB7XG4gICAgICBvbktleURvd24oZXZlbnQpO1xuICAgIH0gLy8gVGhlIGhhbmRsZXIgZG9lc24ndCB0YWtlIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgaW50byBhY2NvdW50OlxuICAgIC8vXG4gICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKSBpcyBtZWFudCB0byBzdG9wIGRlZmF1bHQgYmVoYXZpb3JzIGxpa2VcbiAgICAvLyBjbGlja2luZyBhIGNoZWNrYm94IHRvIGNoZWNrIGl0LCBoaXR0aW5nIGEgYnV0dG9uIHRvIHN1Ym1pdCBhIGZvcm0sXG4gICAgLy8gYW5kIGhpdHRpbmcgbGVmdCBhcnJvdyB0byBtb3ZlIHRoZSBjdXJzb3IgaW4gYSB0ZXh0IGlucHV0IGV0Yy5cbiAgICAvLyBPbmx5IHNwZWNpYWwgSFRNTCBlbGVtZW50cyBoYXZlIHRoZXNlIGRlZmF1bHQgYmVoYXZpb3JzLlxuXG5cbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnRXNjYXBlJyB8fCAhaXNUb3BNb2RhbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkaXNhYmxlRXNjYXBlS2V5RG93bikge1xuICAgICAgLy8gU3dhbGxvdyB0aGUgZXZlbnQsIGluIGNhc2Ugc29tZW9uZSBpcyBsaXN0ZW5pbmcgZm9yIHRoZSBlc2NhcGUga2V5IG9uIHRoZSBib2R5LlxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIG9uQ2xvc2UoZXZlbnQsICdlc2NhcGVLZXlEb3duJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNoaWxkUHJvcHMgPSB7fTtcblxuICBpZiAoY2hpbGRyZW4ucHJvcHMudGFiSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgIGNoaWxkUHJvcHMudGFiSW5kZXggPSAnLTEnO1xuICB9IC8vIEl0J3MgYSBUcmFuc2l0aW9uIGxpa2UgY29tcG9uZW50XG5cblxuICBpZiAoaGFzVHJhbnNpdGlvbikge1xuICAgIGNoaWxkUHJvcHMub25FbnRlciA9IGNyZWF0ZUNoYWluZWRGdW5jdGlvbihoYW5kbGVFbnRlciwgY2hpbGRyZW4ucHJvcHMub25FbnRlcik7XG4gICAgY2hpbGRQcm9wcy5vbkV4aXRlZCA9IGNyZWF0ZUNoYWluZWRGdW5jdGlvbihoYW5kbGVFeGl0ZWQsIGNoaWxkcmVuLnByb3BzLm9uRXhpdGVkKTtcbiAgfVxuXG4gIGNvbnN0IFJvb3QgPSBjb21wb25lbnRzLlJvb3QgfHwgY29tcG9uZW50O1xuICBjb25zdCByb290UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBSb290LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBjb21wb25lbnRzUHJvcHMucm9vdCxcbiAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIHJlZjogaGFuZGxlUmVmLFxuICAgICAgcm9sZTogJ3ByZXNlbnRhdGlvbicsXG4gICAgICBvbktleURvd246IGhhbmRsZUtleURvd25cbiAgICB9LFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5yb290LFxuICAgIG93bmVyU3RhdGVcbiAgfSk7XG4gIGNvbnN0IEJhY2tkcm9wQ29tcG9uZW50ID0gY29tcG9uZW50cy5CYWNrZHJvcDtcbiAgY29uc3QgYmFja2Ryb3BQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IEJhY2tkcm9wQ29tcG9uZW50LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBjb21wb25lbnRzUHJvcHMuYmFja2Ryb3AsXG4gICAgYWRkaXRpb25hbFByb3BzOiB7XG4gICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlLFxuICAgICAgb25DbGljazogaGFuZGxlQmFja2Ryb3BDbGljayxcbiAgICAgIG9wZW5cbiAgICB9LFxuICAgIG93bmVyU3RhdGVcbiAgfSk7XG5cbiAgaWYgKCFrZWVwTW91bnRlZCAmJiAhb3BlbiAmJiAoIWhhc1RyYW5zaXRpb24gfHwgZXhpdGVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFBvcnRhbCwge1xuICAgIHJlZjogaGFuZGxlUG9ydGFsUmVmLFxuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgIGRpc2FibGVQb3J0YWw6IGRpc2FibGVQb3J0YWwsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4cyhSb290LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogWyFoaWRlQmFja2Ryb3AgJiYgQmFja2Ryb3BDb21wb25lbnQgPyAvKiNfX1BVUkVfXyovX2pzeChCYWNrZHJvcENvbXBvbmVudCwgX2V4dGVuZHMoe30sIGJhY2tkcm9wUHJvcHMpKSA6IG51bGwsIC8qI19fUFVSRV9fKi9fanN4KFRyYXBGb2N1cywge1xuICAgICAgICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBkaXNhYmxlRW5mb3JjZUZvY3VzLFxuICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzOiBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgICAgICBkaXNhYmxlUmVzdG9yZUZvY3VzOiBkaXNhYmxlUmVzdG9yZUZvY3VzLFxuICAgICAgICBpc0VuYWJsZWQ6IGlzVG9wTW9kYWwsXG4gICAgICAgIG9wZW46IG9wZW4sXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBjaGlsZFByb3BzKVxuICAgICAgfSldXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNb2RhbFVuc3R5bGVkLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byB0cnVlIHRoZSBNb2RhbCB3YWl0cyB1bnRpbCBhIG5lc3RlZCBUcmFuc2l0aW9uIGlzIGNvbXBsZXRlZCBiZWZvcmUgY2xvc2luZy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIE1vZGFsLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBCYWNrZHJvcDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcblxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIE1vZGFsLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhY2tkcm9wOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG5cbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBUaGUgYGNvbnRhaW5lcmAgd2lsbCBoYXZlIHRoZSBwb3J0YWwgY2hpbGRyZW4gYXBwZW5kZWQgdG8gaXQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGl0IHVzZXMgdGhlIGJvZHkgb2YgdGhlIHRvcC1sZXZlbCBkb2N1bWVudCBvYmplY3QsXG4gICAqIHNvIGl0J3Mgc2ltcGx5IGBkb2N1bWVudC5ib2R5YCBtb3N0IG9mIHRoZSB0aW1lLlxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgc2hpZnQgZm9jdXMgdG8gaXRzZWxmIHdoZW4gaXQgb3BlbnMsIGFuZFxuICAgKiByZXBsYWNlIGl0IHRvIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aGVuIGl0IGNsb3Nlcy5cbiAgICogVGhpcyBhbHNvIHdvcmtzIGNvcnJlY3RseSB3aXRoIGFueSBtb2RhbCBjaGlsZHJlbiB0aGF0IGhhdmUgdGhlIGBkaXNhYmxlQXV0b0ZvY3VzYCBwcm9wLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIGB0cnVlYCBhcyBpdCBtYWtlcyB0aGUgbW9kYWwgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgcHJldmVudCBmb2N1cyBmcm9tIGxlYXZpbmcgdGhlIG1vZGFsIHdoaWxlIG9wZW4uXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBtb2RhbCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFbmZvcmNlRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGhpdHRpbmcgZXNjYXBlIHdpbGwgbm90IGZpcmUgdGhlIGBvbkNsb3NlYCBjYWxsYmFjay5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFc2NhcGVLZXlEb3duOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCByZXN0b3JlIGZvY3VzIHRvIHByZXZpb3VzbHkgZm9jdXNlZCBlbGVtZW50IG9uY2VcbiAgICogbW9kYWwgaXMgaGlkZGVuIG9yIHVubW91bnRlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSZXN0b3JlRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBzY3JvbGwgbG9jayBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVTY3JvbGxMb2NrOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFja2Ryb3AgaXMgbm90IHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZUJhY2tkcm9wOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQWx3YXlzIGtlZXAgdGhlIGNoaWxkcmVuIGluIHRoZSBET00uXG4gICAqIFRoaXMgcHJvcCBjYW4gYmUgdXNlZnVsIGluIFNFTyBzaXR1YXRpb24gb3JcbiAgICogd2hlbiB5b3Ugd2FudCB0byBtYXhpbWl6ZSB0aGUgcmVzcG9uc2l2ZW5lc3Mgb2YgdGhlIE1vZGFsLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAga2VlcE1vdW50ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBiYWNrZHJvcCBpcyBjbGlja2VkLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBvbkNsb3NlYCBwcm9wIHdpdGggdGhlIGByZWFzb25gIGFyZ3VtZW50IHRvIGhhbmRsZSB0aGUgYGJhY2tkcm9wQ2xpY2tgIGV2ZW50cy5cbiAgICovXG4gIG9uQmFja2Ryb3BDbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFRoZSBgcmVhc29uYCBwYXJhbWV0ZXIgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBjb250cm9sIHRoZSByZXNwb25zZSB0byBgb25DbG9zZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiBDYW4gYmU6IGBcImVzY2FwZUtleURvd25cImAsIGBcImJhY2tkcm9wQ2xpY2tcImAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1vZGFsVW5zdHlsZWQ7IiwiZXhwb3J0IHZhciBmb3JjZVJlZmxvdyA9IGZ1bmN0aW9uIGZvcmNlUmVmbG93KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsVG9wO1xufTsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgdGltZW91dHNTaGFwZSB9IGZyb20gJy4vdXRpbHMvUHJvcFR5cGVzJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcbmV4cG9ydCB2YXIgVU5NT1VOVEVEID0gJ3VubW91bnRlZCc7XG5leHBvcnQgdmFyIEVYSVRFRCA9ICdleGl0ZWQnO1xuZXhwb3J0IHZhciBFTlRFUklORyA9ICdlbnRlcmluZyc7XG5leHBvcnQgdmFyIEVOVEVSRUQgPSAnZW50ZXJlZCc7XG5leHBvcnQgdmFyIEVYSVRJTkcgPSAnZXhpdGluZyc7XG4vKipcbiAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudCBsZXRzIHlvdSBkZXNjcmliZSBhIHRyYW5zaXRpb24gZnJvbSBvbmUgY29tcG9uZW50XG4gKiBzdGF0ZSB0byBhbm90aGVyIF9vdmVyIHRpbWVfIHdpdGggYSBzaW1wbGUgZGVjbGFyYXRpdmUgQVBJLiBNb3N0IGNvbW1vbmx5XG4gKiBpdCdzIHVzZWQgdG8gYW5pbWF0ZSB0aGUgbW91bnRpbmcgYW5kIHVubW91bnRpbmcgb2YgYSBjb21wb25lbnQsIGJ1dCBjYW4gYWxzb1xuICogYmUgdXNlZCB0byBkZXNjcmliZSBpbi1wbGFjZSB0cmFuc2l0aW9uIHN0YXRlcyBhcyB3ZWxsLlxuICpcbiAqIC0tLVxuICpcbiAqICoqTm90ZSoqOiBgVHJhbnNpdGlvbmAgaXMgYSBwbGF0Zm9ybS1hZ25vc3RpYyBiYXNlIGNvbXBvbmVudC4gSWYgeW91J3JlIHVzaW5nXG4gKiB0cmFuc2l0aW9ucyBpbiBDU1MsIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZVxuICogW2BDU1NUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9jc3MtdHJhbnNpdGlvbilcbiAqIGluc3RlYWQuIEl0IGluaGVyaXRzIGFsbCB0aGUgZmVhdHVyZXMgb2YgYFRyYW5zaXRpb25gLCBidXQgY29udGFpbnNcbiAqIGFkZGl0aW9uYWwgZmVhdHVyZXMgbmVjZXNzYXJ5IHRvIHBsYXkgbmljZSB3aXRoIENTUyB0cmFuc2l0aW9ucyAoaGVuY2UgdGhlXG4gKiBuYW1lIG9mIHRoZSBjb21wb25lbnQpLlxuICpcbiAqIC0tLVxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGBUcmFuc2l0aW9uYCBjb21wb25lbnQgZG9lcyBub3QgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHRoZVxuICogY29tcG9uZW50IGl0IHJlbmRlcnMsIGl0IG9ubHkgdHJhY2tzIFwiZW50ZXJcIiBhbmQgXCJleGl0XCIgc3RhdGVzIGZvciB0aGVcbiAqIGNvbXBvbmVudHMuIEl0J3MgdXAgdG8geW91IHRvIGdpdmUgbWVhbmluZyBhbmQgZWZmZWN0IHRvIHRob3NlIHN0YXRlcy4gRm9yXG4gKiBleGFtcGxlIHdlIGNhbiBhZGQgc3R5bGVzIHRvIGEgY29tcG9uZW50IHdoZW4gaXQgZW50ZXJzIG9yIGV4aXRzOlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuICpcbiAqIGNvbnN0IGR1cmF0aW9uID0gMzAwO1xuICpcbiAqIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAqICAgdHJhbnNpdGlvbjogYG9wYWNpdHkgJHtkdXJhdGlvbn1tcyBlYXNlLWluLW91dGAsXG4gKiAgIG9wYWNpdHk6IDAsXG4gKiB9XG4gKlxuICogY29uc3QgdHJhbnNpdGlvblN0eWxlcyA9IHtcbiAqICAgZW50ZXJpbmc6IHsgb3BhY2l0eTogMSB9LFxuICogICBlbnRlcmVkOiAgeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGV4aXRpbmc6ICB7IG9wYWNpdHk6IDAgfSxcbiAqICAgZXhpdGVkOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiB9O1xuICpcbiAqIGNvbnN0IEZhZGUgPSAoeyBpbjogaW5Qcm9wIH0pID0+IChcbiAqICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17ZHVyYXRpb259PlxuICogICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICA8ZGl2IHN0eWxlPXt7XG4gKiAgICAgICAgIC4uLmRlZmF1bHRTdHlsZSxcbiAqICAgICAgICAgLi4udHJhbnNpdGlvblN0eWxlc1tzdGF0ZV1cbiAqICAgICAgIH19PlxuICogICAgICAgICBJJ20gYSBmYWRlIFRyYW5zaXRpb24hXG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICApfVxuICogICA8L1RyYW5zaXRpb24+XG4gKiApO1xuICogYGBgXG4gKlxuICogVGhlcmUgYXJlIDQgbWFpbiBzdGF0ZXMgYSBUcmFuc2l0aW9uIGNhbiBiZSBpbjpcbiAqICAtIGAnZW50ZXJpbmcnYFxuICogIC0gYCdlbnRlcmVkJ2BcbiAqICAtIGAnZXhpdGluZydgXG4gKiAgLSBgJ2V4aXRlZCdgXG4gKlxuICogVHJhbnNpdGlvbiBzdGF0ZSBpcyB0b2dnbGVkIHZpYSB0aGUgYGluYCBwcm9wLiBXaGVuIGB0cnVlYCB0aGUgY29tcG9uZW50XG4gKiBiZWdpbnMgdGhlIFwiRW50ZXJcIiBzdGFnZS4gRHVyaW5nIHRoaXMgc3RhZ2UsIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCBmcm9tXG4gKiBpdHMgY3VycmVudCB0cmFuc2l0aW9uIHN0YXRlLCB0byBgJ2VudGVyaW5nJ2AgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGVcbiAqIHRyYW5zaXRpb24gYW5kIHRoZW4gdG8gdGhlIGAnZW50ZXJlZCdgIHN0YWdlIG9uY2UgaXQncyBjb21wbGV0ZS4gTGV0J3MgdGFrZVxuICogdGhlIGZvbGxvd2luZyBleGFtcGxlICh3ZSdsbCB1c2UgdGhlXG4gKiBbdXNlU3RhdGVdKGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VzdGF0ZSkgaG9vayk6XG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezUwMH0+XG4gKiAgICAgICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICAgICAgLy8gLi4uXG4gKiAgICAgICAgICl9XG4gKiAgICAgICA8L1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCB0byB0aGUgYCdlbnRlcmluZydgIHN0YXRlXG4gKiBhbmQgc3RheSB0aGVyZSBmb3IgNTAwbXMgKHRoZSB2YWx1ZSBvZiBgdGltZW91dGApIGJlZm9yZSBpdCBmaW5hbGx5IHN3aXRjaGVzXG4gKiB0byBgJ2VudGVyZWQnYC5cbiAqXG4gKiBXaGVuIGBpbmAgaXMgYGZhbHNlYCB0aGUgc2FtZSB0aGluZyBoYXBwZW5zIGV4Y2VwdCB0aGUgc3RhdGUgbW92ZXMgZnJvbVxuICogYCdleGl0aW5nJ2AgdG8gYCdleGl0ZWQnYC5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG4gICAgdmFyIHBhcmVudEdyb3VwID0gY29udGV4dDsgLy8gSW4gdGhlIGNvbnRleHQgb2YgYSBUcmFuc2l0aW9uR3JvdXAgYWxsIGVudGVycyBhcmUgcmVhbGx5IGFwcGVhcnNcblxuICAgIHZhciBhcHBlYXIgPSBwYXJlbnRHcm91cCAmJiAhcGFyZW50R3JvdXAuaXNNb3VudGluZyA/IHByb3BzLmVudGVyIDogcHJvcHMuYXBwZWFyO1xuICAgIHZhciBpbml0aWFsU3RhdHVzO1xuICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJvcHMuaW4pIHtcbiAgICAgIGlmIChhcHBlYXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gRU5URVJJTkc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRU5URVJFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3BzLnVubW91bnRPbkV4aXQgfHwgcHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBVTk1PVU5URUQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBpbml0aWFsU3RhdHVzXG4gICAgfTtcbiAgICBfdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKF9yZWYsIHByZXZTdGF0ZSkge1xuICAgIHZhciBuZXh0SW4gPSBfcmVmLmluO1xuXG4gICAgaWYgKG5leHRJbiAmJiBwcmV2U3RhdGUuc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAvLyAgIGxldCBuZXh0U3RhdHVzID0gbnVsbFxuICAvLyAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgLy8gICAgIGNvbnN0IHsgc3RhdHVzIH0gPSB0aGlzLnN0YXRlXG4gIC8vICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAvLyAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4geyBuZXh0U3RhdHVzIH1cbiAgLy8gfVxuICA7XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3RhdHVzKHRydWUsIHRoaXMuYXBwZWFyU3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBuZXh0U3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElORztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKGZhbHNlLCBuZXh0U3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuICB9O1xuXG4gIF9wcm90by5nZXRUaW1lb3V0cyA9IGZ1bmN0aW9uIGdldFRpbWVvdXRzKCkge1xuICAgIHZhciB0aW1lb3V0ID0gdGhpcy5wcm9wcy50aW1lb3V0O1xuICAgIHZhciBleGl0LCBlbnRlciwgYXBwZWFyO1xuICAgIGV4aXQgPSBlbnRlciA9IGFwcGVhciA9IHRpbWVvdXQ7XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsICYmIHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgZXhpdCA9IHRpbWVvdXQuZXhpdDtcbiAgICAgIGVudGVyID0gdGltZW91dC5lbnRlcjsgLy8gVE9ETzogcmVtb3ZlIGZhbGxiYWNrIGZvciBuZXh0IG1ham9yXG5cbiAgICAgIGFwcGVhciA9IHRpbWVvdXQuYXBwZWFyICE9PSB1bmRlZmluZWQgPyB0aW1lb3V0LmFwcGVhciA6IGVudGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleGl0OiBleGl0LFxuICAgICAgZW50ZXI6IGVudGVyLFxuICAgICAgYXBwZWFyOiBhcHBlYXJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGF0dXMgPSBmdW5jdGlvbiB1cGRhdGVTdGF0dXMobW91bnRpbmcsIG5leHRTdGF0dXMpIHtcbiAgICBpZiAobW91bnRpbmcgPT09IHZvaWQgMCkge1xuICAgICAgbW91bnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgLy8gbmV4dFN0YXR1cyB3aWxsIGFsd2F5cyBiZSBFTlRFUklORyBvciBFWElUSU5HLlxuICAgICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcblxuICAgICAgaWYgKG5leHRTdGF0dXMgPT09IEVOVEVSSU5HKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgfHwgdGhpcy5wcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvcHVsbC83NDlcbiAgICAgICAgICAvLyBXaXRoIHVubW91bnRPbkV4aXQgb3IgbW91bnRPbkVudGVyLCB0aGUgZW50ZXIgYW5pbWF0aW9uIHNob3VsZCBoYXBwZW4gYXQgdGhlIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhpdGVkYCBhbmQgYGVudGVyaW5nYC5cbiAgICAgICAgICAvLyBUbyBtYWtlIHRoZSBhbmltYXRpb24gaGFwcGVuLCAgd2UgaGF2ZSB0byBzZXBhcmF0ZSBlYWNoIHJlbmRlcmluZyBhbmQgYXZvaWQgYmVpbmcgcHJvY2Vzc2VkIGFzIGJhdGNoZWQuXG5cbiAgICAgICAgICBpZiAobm9kZSkgZm9yY2VSZWZsb3cobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBlcmZvcm1FbnRlcihtb3VudGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcmZvcm1FeGl0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgJiYgdGhpcy5zdGF0ZS5zdGF0dXMgPT09IEVYSVRFRCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogVU5NT1VOVEVEXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FbnRlciA9IGZ1bmN0aW9uIHBlcmZvcm1FbnRlcihtb3VudGluZykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGVudGVyID0gdGhpcy5wcm9wcy5lbnRlcjtcbiAgICB2YXIgYXBwZWFyaW5nID0gdGhpcy5jb250ZXh0ID8gdGhpcy5jb250ZXh0LmlzTW91bnRpbmcgOiBtb3VudGluZztcblxuICAgIHZhciBfcmVmMiA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFthcHBlYXJpbmddIDogW1JlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpLCBhcHBlYXJpbmddLFxuICAgICAgICBtYXliZU5vZGUgPSBfcmVmMlswXSxcbiAgICAgICAgbWF5YmVBcHBlYXJpbmcgPSBfcmVmMlsxXTtcblxuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgZW50ZXJUaW1lb3V0ID0gYXBwZWFyaW5nID8gdGltZW91dHMuYXBwZWFyIDogdGltZW91dHMuZW50ZXI7IC8vIG5vIGVudGVyIGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVOVEVSRURcbiAgICAvLyBpZiB3ZSBhcmUgbW91bnRpbmcgYW5kIHJ1bm5pbmcgdGhpcyBpdCBtZWFucyBhcHBlYXIgX211c3RfIGJlIHNldFxuXG4gICAgaWYgKCFtb3VudGluZyAmJiAhZW50ZXIgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyaW5nKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuXG4gICAgICBfdGhpczIub25UcmFuc2l0aW9uRW5kKGVudGVyVGltZW91dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FeGl0ID0gZnVuY3Rpb24gcGVyZm9ybUV4aXQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgZXhpdCA9IHRoaXMucHJvcHMuZXhpdDtcbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIG1heWJlTm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBubyBleGl0IGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVYSVRFRFxuXG4gICAgaWYgKCFleGl0IHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FeGl0KG1heWJlTm9kZSk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuXG4gICAgICBfdGhpczMub25UcmFuc2l0aW9uRW5kKHRpbWVvdXRzLmV4aXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxOZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBjYW5jZWxOZXh0Q2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMubmV4dENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwoKTtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNhZmVTZXRTdGF0ZSA9IGZ1bmN0aW9uIHNhZmVTZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBidXQgdGhlcmUgYXJlIHdlaXJkIHJhY2UgY29uZGl0aW9ucyB3aXRoXG4gICAgLy8gc2V0U3RhdGUgY2FsbGJhY2tzIGFuZCB1bm1vdW50aW5nIGluIHRlc3RpbmcsIHNvIGFsd2F5cyBtYWtlIHN1cmUgdGhhdFxuICAgIC8vIHdlIGNhbiBjYW5jZWwgYW55IHBlbmRpbmcgc2V0U3RhdGUgY2FsbGJhY2tzIGFmdGVyIHdlIHVubW91bnQuXG4gICAgY2FsbGJhY2sgPSB0aGlzLnNldE5leHRDYWxsYmFjayhjYWxsYmFjayk7XG4gICAgdGhpcy5zZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0TmV4dENhbGxiYWNrID0gZnVuY3Rpb24gc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgYWN0aXZlID0gdHJ1ZTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpczQubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMubmV4dENhbGxiYWNrO1xuICB9O1xuXG4gIF9wcm90by5vblRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQodGltZW91dCwgaGFuZGxlcikge1xuICAgIHRoaXMuc2V0TmV4dENhbGxiYWNrKGhhbmRsZXIpO1xuICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICB2YXIgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciA9IHRpbWVvdXQgPT0gbnVsbCAmJiAhdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcjtcblxuICAgIGlmICghbm9kZSB8fCBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcikge1xuICAgICAgdmFyIF9yZWYzID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW3RoaXMubmV4dENhbGxiYWNrXSA6IFtub2RlLCB0aGlzLm5leHRDYWxsYmFja10sXG4gICAgICAgICAgbWF5YmVOb2RlID0gX3JlZjNbMF0sXG4gICAgICAgICAgbWF5YmVOZXh0Q2FsbGJhY2sgPSBfcmVmM1sxXTtcblxuICAgICAgdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcihtYXliZU5vZGUsIG1heWJlTmV4dENhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCB0aW1lb3V0KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICBpZiAoc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIF9pbiA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBfbW91bnRPbkVudGVyID0gX3RoaXMkcHJvcHMubW91bnRPbkVudGVyLFxuICAgICAgICBfdW5tb3VudE9uRXhpdCA9IF90aGlzJHByb3BzLnVubW91bnRPbkV4aXQsXG4gICAgICAgIF9hcHBlYXIgPSBfdGhpcyRwcm9wcy5hcHBlYXIsXG4gICAgICAgIF9lbnRlciA9IF90aGlzJHByb3BzLmVudGVyLFxuICAgICAgICBfZXhpdCA9IF90aGlzJHByb3BzLmV4aXQsXG4gICAgICAgIF90aW1lb3V0ID0gX3RoaXMkcHJvcHMudGltZW91dCxcbiAgICAgICAgX2FkZEVuZExpc3RlbmVyID0gX3RoaXMkcHJvcHMuYWRkRW5kTGlzdGVuZXIsXG4gICAgICAgIF9vbkVudGVyID0gX3RoaXMkcHJvcHMub25FbnRlcixcbiAgICAgICAgX29uRW50ZXJpbmcgPSBfdGhpcyRwcm9wcy5vbkVudGVyaW5nLFxuICAgICAgICBfb25FbnRlcmVkID0gX3RoaXMkcHJvcHMub25FbnRlcmVkLFxuICAgICAgICBfb25FeGl0ID0gX3RoaXMkcHJvcHMub25FeGl0LFxuICAgICAgICBfb25FeGl0aW5nID0gX3RoaXMkcHJvcHMub25FeGl0aW5nLFxuICAgICAgICBfb25FeGl0ZWQgPSBfdGhpcyRwcm9wcy5vbkV4aXRlZCxcbiAgICAgICAgX25vZGVSZWYgPSBfdGhpcyRwcm9wcy5ub2RlUmVmLFxuICAgICAgICBjaGlsZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIiwgXCJtb3VudE9uRW50ZXJcIiwgXCJ1bm1vdW50T25FeGl0XCIsIFwiYXBwZWFyXCIsIFwiZW50ZXJcIiwgXCJleGl0XCIsIFwidGltZW91dFwiLCBcImFkZEVuZExpc3RlbmVyXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRpbmdcIiwgXCJvbkV4aXRlZFwiLCBcIm5vZGVSZWZcIl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgIC8vIGFsbG93cyBmb3IgbmVzdGVkIFRyYW5zaXRpb25zXG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHN0YXR1cywgY2hpbGRQcm9wcykgOiBSZWFjdC5jbG9uZUVsZW1lbnQoUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbiksIGNoaWxkUHJvcHMpKVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb24uY29udGV4dFR5cGUgPSBUcmFuc2l0aW9uR3JvdXBDb250ZXh0O1xuVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBBIFJlYWN0IHJlZmVyZW5jZSB0byBET00gZWxlbWVudCB0aGF0IG5lZWQgdG8gdHJhbnNpdGlvbjpcbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxMTI3MTMwLzQ2NzE5MzJcbiAgICpcbiAgICogICAtIFdoZW4gYG5vZGVSZWZgIHByb3AgaXMgdXNlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQgdG8gY2FsbGJhY2sgZnVuY3Rpb25zXG4gICAqICAgICAgKGUuZy4gYG9uRW50ZXJgKSBiZWNhdXNlIHVzZXIgYWxyZWFkeSBoYXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgbm9kZS5cbiAgICogICAtIFdoZW4gY2hhbmdpbmcgYGtleWAgcHJvcCBvZiBgVHJhbnNpdGlvbmAgaW4gYSBgVHJhbnNpdGlvbkdyb3VwYCBhIG5ld1xuICAgKiAgICAgYG5vZGVSZWZgIG5lZWQgdG8gYmUgcHJvdmlkZWQgdG8gYFRyYW5zaXRpb25gIHdpdGggY2hhbmdlZCBga2V5YCBwcm9wXG4gICAqICAgICAoc2VlXG4gICAqICAgICBbdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi8xMzQzNWY4OTdiM2FiNzFmNmUxOWQ3MjRmMTQ1NTk2ZjU5MTA1ODFjL3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzI0wzNjItTDQzNykpLlxuICAgKi9cbiAgbm9kZVJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgPyBQcm9wVHlwZXMuYW55IDogZnVuY3Rpb24gKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHByb3BWYWx1ZVtrZXldO1xuICAgICAgcmV0dXJuIFByb3BUeXBlcy5pbnN0YW5jZU9mKHZhbHVlICYmICdvd25lckRvY3VtZW50JyBpbiB2YWx1ZSA/IHZhbHVlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuRWxlbWVudCA6IEVsZW1lbnQpKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpO1xuICAgIH1cbiAgfSksXG5cbiAgLyoqXG4gICAqIEEgYGZ1bmN0aW9uYCBjaGlsZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgUmVhY3QgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpc1xuICAgKiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCB0cmFuc2l0aW9uIHN0YXR1cyAoYCdlbnRlcmluZydgLCBgJ2VudGVyZWQnYCxcbiAgICogYCdleGl0aW5nJ2AsIGAnZXhpdGVkJ2ApLCB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHBseSBjb250ZXh0XG4gICAqIHNwZWNpZmljIHByb3BzIHRvIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogPFRyYW5zaXRpb24gaW49e3RoaXMuc3RhdGUuaW59IHRpbWVvdXQ9ezE1MH0+XG4gICAqICAge3N0YXRlID0+IChcbiAgICogICAgIDxNeUNvbXBvbmVudCBjbGFzc05hbWU9e2BmYWRlIGZhZGUtJHtzdGF0ZX1gfSAvPlxuICAgKiAgICl9XG4gICAqIDwvVHJhbnNpdGlvbj5cbiAgICogYGBgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIGNvbXBvbmVudDsgdHJpZ2dlcnMgdGhlIGVudGVyIG9yIGV4aXQgc3RhdGVzXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBtb3VudGVkIGltbWVkaWF0ZWx5IGFsb25nIHdpdGhcbiAgICogdGhlIHBhcmVudCBgVHJhbnNpdGlvbmAgY29tcG9uZW50LiBJZiB5b3Ugd2FudCB0byBcImxhenkgbW91bnRcIiB0aGUgY29tcG9uZW50IG9uIHRoZVxuICAgKiBmaXJzdCBgaW49e3RydWV9YCB5b3UgY2FuIHNldCBgbW91bnRPbkVudGVyYC4gQWZ0ZXIgdGhlIGZpcnN0IGVudGVyIHRyYW5zaXRpb24gdGhlIGNvbXBvbmVudCB3aWxsIHN0YXlcbiAgICogbW91bnRlZCwgZXZlbiBvbiBcImV4aXRlZFwiLCB1bmxlc3MgeW91IGFsc28gc3BlY2lmeSBgdW5tb3VudE9uRXhpdGAuXG4gICAqL1xuICBtb3VudE9uRW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgc3RheXMgbW91bnRlZCBhZnRlciBpdCByZWFjaGVzIHRoZSBgJ2V4aXRlZCdgIHN0YXRlLlxuICAgKiBTZXQgYHVubW91bnRPbkV4aXRgIGlmIHlvdSdkIHByZWZlciB0byB1bm1vdW50IHRoZSBjb21wb25lbnQgYWZ0ZXIgaXQgZmluaXNoZXMgZXhpdGluZy5cbiAgICovXG4gIHVubW91bnRPbkV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgZG9lcyBub3QgcGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuXG4gICAqIGl0IGZpcnN0IG1vdW50cywgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgYGluYC4gSWYgeW91IHdhbnQgdGhpc1xuICAgKiBiZWhhdmlvciwgc2V0IGJvdGggYGFwcGVhcmAgYW5kIGBpbmAgdG8gYHRydWVgLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiB0aGVyZSBhcmUgbm8gc3BlY2lhbCBhcHBlYXIgc3RhdGVzIGxpa2UgYGFwcGVhcmluZ2AvYGFwcGVhcmVkYCwgdGhpcyBwcm9wXG4gICAqID4gb25seSBhZGRzIGFuIGFkZGl0aW9uYWwgZW50ZXIgdHJhbnNpdGlvbi4gSG93ZXZlciwgaW4gdGhlXG4gICAqID4gYDxDU1NUcmFuc2l0aW9uPmAgY29tcG9uZW50IHRoYXQgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiBkb2VzIHJlc3VsdCBpblxuICAgKiA+IGFkZGl0aW9uYWwgYC5hcHBlYXItKmAgY2xhc3NlcywgdGhhdCB3YXkgeW91IGNhbiBjaG9vc2UgdG8gc3R5bGUgaXRcbiAgICogPiBkaWZmZXJlbnRseS5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGVudGVyIHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBleGl0IHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBSZXF1aXJlZCB1bmxlc3MgYGFkZEVuZExpc3RlbmVyYCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9uczpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9ezUwMH1cbiAgICogYGBgXG4gICAqXG4gICAqIG9yIGluZGl2aWR1YWxseTpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9e3tcbiAgICogIGFwcGVhcjogNTAwLFxuICAgKiAgZW50ZXI6IDMwMCxcbiAgICogIGV4aXQ6IDUwMCxcbiAgICogfX1cbiAgICogYGBgXG4gICAqXG4gICAqIC0gYGFwcGVhcmAgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGBlbnRlcmBcbiAgICogLSBgZW50ZXJgIGRlZmF1bHRzIHRvIGAwYFxuICAgKiAtIGBleGl0YCBkZWZhdWx0cyB0byBgMGBcbiAgICpcbiAgICogQHR5cGUge251bWJlciB8IHsgZW50ZXI/OiBudW1iZXIsIGV4aXQ/OiBudW1iZXIsIGFwcGVhcj86IG51bWJlciB9fVxuICAgKi9cbiAgdGltZW91dDogZnVuY3Rpb24gdGltZW91dChwcm9wcykge1xuICAgIHZhciBwdCA9IHRpbWVvdXRzU2hhcGU7XG4gICAgaWYgKCFwcm9wcy5hZGRFbmRMaXN0ZW5lcikgcHQgPSBwdC5pc1JlcXVpcmVkO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHB0LmFwcGx5KHZvaWQgMCwgW3Byb3BzXS5jb25jYXQoYXJncykpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmdcbiAgICogRE9NIG5vZGUgYW5kIGEgYGRvbmVgIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiB7XG4gICAqICAgLy8gdXNlIHRoZSBjc3MgdHJhbnNpdGlvbmVuZCBldmVudCB0byBtYXJrIHRoZSBmaW5pc2ggb2YgYSB0cmFuc2l0aW9uXG4gICAqICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZG9uZSwgZmFsc2UpO1xuICAgKiB9fVxuICAgKiBgYGBcbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTsgLy8gTmFtZSB0aGUgZnVuY3Rpb24gc28gaXQgaXMgY2xlYXJlciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuXG5mdW5jdGlvbiBub29wKCkge31cblxuVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGluOiBmYWxzZSxcbiAgbW91bnRPbkVudGVyOiBmYWxzZSxcbiAgdW5tb3VudE9uRXhpdDogZmFsc2UsXG4gIGFwcGVhcjogZmFsc2UsXG4gIGVudGVyOiB0cnVlLFxuICBleGl0OiB0cnVlLFxuICBvbkVudGVyOiBub29wLFxuICBvbkVudGVyaW5nOiBub29wLFxuICBvbkVudGVyZWQ6IG5vb3AsXG4gIG9uRXhpdDogbm9vcCxcbiAgb25FeGl0aW5nOiBub29wLFxuICBvbkV4aXRlZDogbm9vcFxufTtcblRyYW5zaXRpb24uVU5NT1VOVEVEID0gVU5NT1VOVEVEO1xuVHJhbnNpdGlvbi5FWElURUQgPSBFWElURUQ7XG5UcmFuc2l0aW9uLkVOVEVSSU5HID0gRU5URVJJTkc7XG5UcmFuc2l0aW9uLkVOVEVSRUQgPSBFTlRFUkVEO1xuVHJhbnNpdGlvbi5FWElUSU5HID0gRVhJVElORztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb247IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVGhlbWUgYXMgdXNlVGhlbWVTeXN0ZW0gfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lU3lzdGVtKGRlZmF1bHRUaGVtZSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VEZWJ1Z1ZhbHVlKHRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiB0aGVtZTtcbn0iLCJleHBvcnQgY29uc3QgcmVmbG93ID0gbm9kZSA9PiBub2RlLnNjcm9sbFRvcDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uUHJvcHMocHJvcHMsIG9wdGlvbnMpIHtcbiAgdmFyIF9zdHlsZSR0cmFuc2l0aW9uRHVyYSwgX3N0eWxlJHRyYW5zaXRpb25UaW1pO1xuXG4gIGNvbnN0IHtcbiAgICB0aW1lb3V0LFxuICAgIGVhc2luZyxcbiAgICBzdHlsZSA9IHt9XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIHtcbiAgICBkdXJhdGlvbjogKF9zdHlsZSR0cmFuc2l0aW9uRHVyYSA9IHN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbikgIT0gbnVsbCA/IF9zdHlsZSR0cmFuc2l0aW9uRHVyYSA6IHR5cGVvZiB0aW1lb3V0ID09PSAnbnVtYmVyJyA/IHRpbWVvdXQgOiB0aW1lb3V0W29wdGlvbnMubW9kZV0gfHwgMCxcbiAgICBlYXNpbmc6IChfc3R5bGUkdHJhbnNpdGlvblRpbWkgPSBzdHlsZS50cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24pICE9IG51bGwgPyBfc3R5bGUkdHJhbnNpdGlvblRpbWkgOiB0eXBlb2YgZWFzaW5nID09PSAnb2JqZWN0JyA/IGVhc2luZ1tvcHRpb25zLm1vZGVdIDogZWFzaW5nLFxuICAgIGRlbGF5OiBzdHlsZS50cmFuc2l0aW9uRGVsYXlcbiAgfTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWRkRW5kTGlzdGVuZXJcIiwgXCJhcHBlYXJcIiwgXCJjaGlsZHJlblwiLCBcImVhc2luZ1wiLCBcImluXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRlZFwiLCBcIm9uRXhpdGluZ1wiLCBcInN0eWxlXCIsIFwidGltZW91dFwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgeyByZWZsb3csIGdldFRyYW5zaXRpb25Qcm9wcyB9IGZyb20gJy4uL3RyYW5zaXRpb25zL3V0aWxzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHN0eWxlcyA9IHtcbiAgZW50ZXJpbmc6IHtcbiAgICBvcGFjaXR5OiAxXG4gIH0sXG4gIGVudGVyZWQ6IHtcbiAgICBvcGFjaXR5OiAxXG4gIH1cbn07XG4vKipcbiAqIFRoZSBGYWRlIHRyYW5zaXRpb24gaXMgdXNlZCBieSB0aGUgW01vZGFsXSgvbWF0ZXJpYWwtdWkvcmVhY3QtbW9kYWwvKSBjb21wb25lbnQuXG4gKiBJdCB1c2VzIFtyZWFjdC10cmFuc2l0aW9uLWdyb3VwXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwKSBpbnRlcm5hbGx5LlxuICovXG5cbmNvbnN0IEZhZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGYWRlKHByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBkZWZhdWx0VGltZW91dCA9IHtcbiAgICBlbnRlcjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uZW50ZXJpbmdTY3JlZW4sXG4gICAgZXhpdDogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24ubGVhdmluZ1NjcmVlblxuICB9O1xuXG4gIGNvbnN0IHtcbiAgICBhZGRFbmRMaXN0ZW5lcixcbiAgICBhcHBlYXIgPSB0cnVlLFxuICAgIGNoaWxkcmVuLFxuICAgIGVhc2luZyxcbiAgICBpbjogaW5Qcm9wLFxuICAgIG9uRW50ZXIsXG4gICAgb25FbnRlcmVkLFxuICAgIG9uRW50ZXJpbmcsXG4gICAgb25FeGl0LFxuICAgIG9uRXhpdGVkLFxuICAgIG9uRXhpdGluZyxcbiAgICBzdHlsZSxcbiAgICB0aW1lb3V0ID0gZGVmYXVsdFRpbWVvdXQsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gVHJhbnNpdGlvblxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgZW5hYmxlU3RyaWN0TW9kZUNvbXBhdCA9IHRydWU7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGZvcmVpZ25SZWYgPSB1c2VGb3JrUmVmKGNoaWxkcmVuLnJlZiwgcmVmKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihub2RlUmVmLCBmb3JlaWduUmVmKTtcblxuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50OyAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cblxuICAgICAgaWYgKG1heWJlSXNBcHBlYXJpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUsIG1heWJlSXNBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmluZyk7XG4gIGNvbnN0IGhhbmRsZUVudGVyID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjaygobm9kZSwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICByZWZsb3cobm9kZSk7IC8vIFNvIHRoZSBhbmltYXRpb24gYWx3YXlzIHN0YXJ0IGZyb20gdGhlIHN0YXJ0LlxuXG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdlbnRlcidcbiAgICB9KTtcbiAgICBub2RlLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB0cmFuc2l0aW9uUHJvcHMpO1xuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG5cbiAgICBpZiAob25FbnRlcikge1xuICAgICAgb25FbnRlcihub2RlLCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRW50ZXJlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmVkKTtcbiAgY29uc3QgaGFuZGxlRXhpdGluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0aW5nKTtcbiAgY29uc3QgaGFuZGxlRXhpdCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdleGl0J1xuICAgIH0pO1xuICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5JywgdHJhbnNpdGlvblByb3BzKTtcblxuICAgIGlmIChvbkV4aXQpIHtcbiAgICAgIG9uRXhpdChub2RlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFeGl0ZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGVkKTtcblxuICBjb25zdCBoYW5kbGVBZGRFbmRMaXN0ZW5lciA9IG5leHQgPT4ge1xuICAgIGlmIChhZGRFbmRMaXN0ZW5lcikge1xuICAgICAgLy8gT2xkIGNhbGwgc2lnbmF0dXJlIGJlZm9yZSBgcmVhY3QtdHJhbnNpdGlvbi1ncm91cGAgaW1wbGVtZW50ZWQgYG5vZGVSZWZgXG4gICAgICBhZGRFbmRMaXN0ZW5lcihub2RlUmVmLmN1cnJlbnQsIG5leHQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGFwcGVhcjogYXBwZWFyLFxuICAgIGluOiBpblByb3AsXG4gICAgbm9kZVJlZjogZW5hYmxlU3RyaWN0TW9kZUNvbXBhdCA/IG5vZGVSZWYgOiB1bmRlZmluZWQsXG4gICAgb25FbnRlcjogaGFuZGxlRW50ZXIsXG4gICAgb25FbnRlcmVkOiBoYW5kbGVFbnRlcmVkLFxuICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nLFxuICAgIG9uRXhpdDogaGFuZGxlRXhpdCxcbiAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgIG9uRXhpdGluZzogaGFuZGxlRXhpdGluZyxcbiAgICBhZGRFbmRMaXN0ZW5lcjogaGFuZGxlQWRkRW5kTGlzdGVuZXIsXG4gICAgdGltZW91dDogdGltZW91dFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAoc3RhdGUsIGNoaWxkUHJvcHMpID0+IHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB2aXNpYmlsaXR5OiBzdGF0ZSA9PT0gJ2V4aXRlZCcgJiYgIWluUHJvcCA/ICdoaWRkZW4nIDogdW5kZWZpbmVkXG4gICAgICAgIH0sIHN0eWxlc1tzdGF0ZV0sIHN0eWxlLCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksXG4gICAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICB9LCBjaGlsZFByb3BzKSk7XG4gICAgfVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZhZGUucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZyBET01cbiAgICogbm9kZSBhbmQgYSBkb25lIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBOb3RlOiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW4gaXQgZmlyc3QgbW91bnRzIGlmIGBpbmAgaXMgYWxzbyBgdHJ1ZWAuXG4gICAqIFNldCB0aGlzIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdGlvbiB0aW1pbmcgZnVuY3Rpb24uXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSBlYXNpbmcgb3IgYSBvYmplY3QgY29udGFpbmluZyBlbnRlciBhbmQgZXhpdCB2YWx1ZXMuXG4gICAqL1xuICBlYXNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXhpdDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0cmFuc2l0aW9uIGluLlxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgZW50ZXI6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgKiAgIGV4aXQ6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmxlYXZpbmdTY3JlZW4sXG4gICAqIH1cbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZhZGU7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhY2tkcm9wVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCYWNrZHJvcCcsIHNsb3QpO1xufVxuY29uc3QgYmFja2Ryb3BDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQmFja2Ryb3AnLCBbJ3Jvb3QnLCAnaW52aXNpYmxlJ10pO1xuZXhwb3J0IGRlZmF1bHQgYmFja2Ryb3BDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbXBvbmVudFwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJjbGFzc05hbWVcIiwgXCJpbnZpc2libGVcIiwgXCJvcGVuXCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgRmFkZSBmcm9tICcuLi9GYWRlJztcbmltcG9ydCB7IGdldEJhY2tkcm9wVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9iYWNrZHJvcENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgaW52aXNpYmxlXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBpbnZpc2libGUgJiYgJ2ludmlzaWJsZSddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QmFja2Ryb3BVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgQmFja2Ryb3BSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlCYWNrZHJvcCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmludmlzaWJsZSAmJiBzdHlsZXMuaW52aXNpYmxlXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICByaWdodDogMCxcbiAgYm90dG9tOiAwLFxuICB0b3A6IDAsXG4gIGxlZnQ6IDAsXG4gIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC41KScsXG4gIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnXG59LCBvd25lclN0YXRlLmludmlzaWJsZSAmJiB7XG4gIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xufSkpO1xuY29uc3QgQmFja2Ryb3AgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCYWNrZHJvcChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9jb21wb25lbnRzJFJvb3QsIF9jb21wb25lbnRzUHJvcHMkcm9vdDtcblxuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlCYWNrZHJvcCdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICBjb21wb25lbnRzUHJvcHMgPSB7fSxcbiAgICBjbGFzc05hbWUsXG4gICAgaW52aXNpYmxlID0gZmFsc2UsXG4gICAgb3BlbixcbiAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gRmFkZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBpbnZpc2libGVcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGluOiBvcGVuLFxuICAgIHRpbWVvdXQ6IHRyYW5zaXRpb25EdXJhdGlvblxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChCYWNrZHJvcFJvb3QsIHtcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgIGFzOiAoX2NvbXBvbmVudHMkUm9vdCA9IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9jb21wb25lbnRzJFJvb3QgOiBjb21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIChfY29tcG9uZW50c1Byb3BzJHJvb3QgPSBjb21wb25lbnRzUHJvcHMucm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb21wb25lbnRzUHJvcHMkcm9vdC5vd25lclN0YXRlKSxcbiAgICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgICByZWY6IHJlZixcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQmFja2Ryb3AucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIEJhY2tkcm9wLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBCYWNrZHJvcC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYWNrZHJvcCBpcyBpbnZpc2libGUuXG4gICAqIEl0IGNhbiBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIGEgcG9wb3ZlciBvciBhIGN1c3RvbSBzZWxlY3QgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW52aXNpYmxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQmFja2Ryb3A7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIkJhY2tkcm9wQ29tcG9uZW50XCIsIFwiQmFja2Ryb3BQcm9wc1wiLCBcImNsb3NlQWZ0ZXJUcmFuc2l0aW9uXCIsIFwiY2hpbGRyZW5cIiwgXCJjb21wb25lbnRcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGlzYWJsZUF1dG9Gb2N1c1wiLCBcImRpc2FibGVFbmZvcmNlRm9jdXNcIiwgXCJkaXNhYmxlRXNjYXBlS2V5RG93blwiLCBcImRpc2FibGVQb3J0YWxcIiwgXCJkaXNhYmxlUmVzdG9yZUZvY3VzXCIsIFwiZGlzYWJsZVNjcm9sbExvY2tcIiwgXCJoaWRlQmFja2Ryb3BcIiwgXCJrZWVwTW91bnRlZFwiLCBcInRoZW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBNb2RhbFVuc3R5bGVkLCB7IG1vZGFsVW5zdHlsZWRDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL01vZGFsVW5zdHlsZWQnO1xuaW1wb3J0IHsgaXNIb3N0Q29tcG9uZW50LCByZXNvbHZlQ29tcG9uZW50UHJvcHMgfSBmcm9tICdAbXVpL2Jhc2UvdXRpbHMnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiwgSFRNTEVsZW1lbnRUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4uL0JhY2tkcm9wJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3QgbW9kYWxDbGFzc2VzID0gbW9kYWxVbnN0eWxlZENsYXNzZXM7XG5cbmNvbnN0IGV4dGVuZFV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIHJldHVybiBvd25lclN0YXRlLmNsYXNzZXM7XG59O1xuXG5jb25zdCBNb2RhbFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aU1vZGFsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLm9wZW4gJiYgb3duZXJTdGF0ZS5leGl0ZWQgJiYgc3R5bGVzLmhpZGRlbl07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxuICB6SW5kZXg6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS56SW5kZXgubW9kYWwsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206IDAsXG4gIHRvcDogMCxcbiAgbGVmdDogMFxufSwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiB7XG4gIHZpc2liaWxpdHk6ICdoaWRkZW4nXG59KSk7XG5jb25zdCBNb2RhbEJhY2tkcm9wID0gc3R5bGVkKEJhY2tkcm9wLCB7XG4gIG5hbWU6ICdNdWlNb2RhbCcsXG4gIHNsb3Q6ICdCYWNrZHJvcCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBzdHlsZXMuYmFja2Ryb3A7XG4gIH1cbn0pKHtcbiAgekluZGV4OiAtMVxufSk7XG4vKipcbiAqIE1vZGFsIGlzIGEgbG93ZXItbGV2ZWwgY29uc3RydWN0IHRoYXQgaXMgbGV2ZXJhZ2VkIGJ5IHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAtIFtEaWFsb2ddKC9tYXRlcmlhbC11aS9hcGkvZGlhbG9nLylcbiAqIC0gW0RyYXdlcl0oL21hdGVyaWFsLXVpL2FwaS9kcmF3ZXIvKVxuICogLSBbTWVudV0oL21hdGVyaWFsLXVpL2FwaS9tZW51LylcbiAqIC0gW1BvcG92ZXJdKC9tYXRlcmlhbC11aS9hcGkvcG9wb3Zlci8pXG4gKlxuICogSWYgeW91IGFyZSBjcmVhdGluZyBhIG1vZGFsIGRpYWxvZywgeW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZSBbRGlhbG9nXSgvbWF0ZXJpYWwtdWkvYXBpL2RpYWxvZy8pIGNvbXBvbmVudFxuICogcmF0aGVyIHRoYW4gZGlyZWN0bHkgdXNpbmcgTW9kYWwuXG4gKlxuICogVGhpcyBjb21wb25lbnQgc2hhcmVzIG1hbnkgY29uY2VwdHMgd2l0aCBbcmVhY3Qtb3ZlcmxheXNdKGh0dHBzOi8vcmVhY3QtYm9vdHN0cmFwLmdpdGh1Yi5pby9yZWFjdC1vdmVybGF5cy8jbW9kYWxzKS5cbiAqL1xuXG5jb25zdCBNb2RhbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1vZGFsKGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX2NvbXBvbmVudHMkUm9vdDtcblxuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIG5hbWU6ICdNdWlNb2RhbCcsXG4gICAgcHJvcHM6IGluUHJvcHNcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIEJhY2tkcm9wQ29tcG9uZW50ID0gTW9kYWxCYWNrZHJvcCxcbiAgICBCYWNrZHJvcFByb3BzLFxuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uID0gZmFsc2UsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICBjb21wb25lbnRzUHJvcHMgPSB7fSxcbiAgICBkaXNhYmxlQXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgZGlzYWJsZUVuZm9yY2VGb2N1cyA9IGZhbHNlLFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duID0gZmFsc2UsXG4gICAgZGlzYWJsZVBvcnRhbCA9IGZhbHNlLFxuICAgIGRpc2FibGVSZXN0b3JlRm9jdXMgPSBmYWxzZSxcbiAgICBkaXNhYmxlU2Nyb2xsTG9jayA9IGZhbHNlLFxuICAgIGhpZGVCYWNrZHJvcCA9IGZhbHNlLFxuICAgIGtlZXBNb3VudGVkID0gZmFsc2UsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICB0aGVtZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgW2V4aXRlZCwgc2V0RXhpdGVkXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBjb21tb25Qcm9wcyA9IHtcbiAgICBjbG9zZUFmdGVyVHJhbnNpdGlvbixcbiAgICBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgIGRpc2FibGVFbmZvcmNlRm9jdXMsXG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24sXG4gICAgZGlzYWJsZVBvcnRhbCxcbiAgICBkaXNhYmxlUmVzdG9yZUZvY3VzLFxuICAgIGRpc2FibGVTY3JvbGxMb2NrLFxuICAgIGhpZGVCYWNrZHJvcCxcbiAgICBrZWVwTW91bnRlZFxuICB9O1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIGNvbW1vblByb3BzLCB7XG4gICAgZXhpdGVkXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSBleHRlbmRVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgUm9vdCA9IChfcmVmID0gKF9jb21wb25lbnRzJFJvb3QgPSBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfY29tcG9uZW50cyRSb290IDogY29tcG9uZW50KSAhPSBudWxsID8gX3JlZiA6IE1vZGFsUm9vdDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE1vZGFsVW5zdHlsZWQsIF9leHRlbmRzKHtcbiAgICBjb21wb25lbnRzOiBfZXh0ZW5kcyh7XG4gICAgICBSb290LFxuICAgICAgQmFja2Ryb3A6IEJhY2tkcm9wQ29tcG9uZW50XG4gICAgfSwgY29tcG9uZW50cyksXG4gICAgY29tcG9uZW50c1Byb3BzOiB7XG4gICAgICByb290OiAoKSA9PiBfZXh0ZW5kcyh7fSwgcmVzb2x2ZUNvbXBvbmVudFByb3BzKGNvbXBvbmVudHNQcm9wcy5yb290LCBvd25lclN0YXRlKSwgIWlzSG9zdENvbXBvbmVudChSb290KSAmJiB7XG4gICAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICAgIHRoZW1lXG4gICAgICB9KSxcbiAgICAgIGJhY2tkcm9wOiAoKSA9PiBfZXh0ZW5kcyh7fSwgQmFja2Ryb3BQcm9wcywgcmVzb2x2ZUNvbXBvbmVudFByb3BzKGNvbXBvbmVudHNQcm9wcy5iYWNrZHJvcCwgb3duZXJTdGF0ZSkpXG4gICAgfSxcbiAgICBvblRyYW5zaXRpb25FbnRlcjogKCkgPT4gc2V0RXhpdGVkKGZhbHNlKSxcbiAgICBvblRyYW5zaXRpb25FeGl0ZWQ6ICgpID0+IHNldEV4aXRlZCh0cnVlKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSwgY29tbW9uUHJvcHMsIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNb2RhbC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQSBiYWNrZHJvcCBjb21wb25lbnQuIFRoaXMgcHJvcCBlbmFibGVzIGN1c3RvbSBiYWNrZHJvcCByZW5kZXJpbmcuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgY29tcG9uZW50cy5CYWNrZHJvcGAgaW5zdGVhZC4gV2hpbGUgdGhpcyBwcm9wIGN1cnJlbnRseSB3b3JrcywgaXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAqIFVzZSB0aGUgYGNvbXBvbmVudHMuQmFja2Ryb3BgIHByb3AgdG8gbWFrZSB5b3VyIGFwcGxpY2F0aW9uIHJlYWR5IGZvciB0aGUgbmV4dCB2ZXJzaW9uIG9mIE1hdGVyaWFsIFVJLlxuICAgKiBAZGVmYXVsdCBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgICogICBuYW1lOiAnTXVpTW9kYWwnLFxuICAgKiAgIHNsb3Q6ICdCYWNrZHJvcCcsXG4gICAqICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAqICAgICByZXR1cm4gc3R5bGVzLmJhY2tkcm9wO1xuICAgKiAgIH0sXG4gICAqIH0pKHtcbiAgICogICB6SW5kZXg6IC0xLFxuICAgKiB9KVxuICAgKi9cbiAgQmFja2Ryb3BDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BCYWNrZHJvcGBdKC9tYXRlcmlhbC11aS9hcGkvYmFja2Ryb3AvKSBlbGVtZW50LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGNvbXBvbmVudHNQcm9wcy5iYWNrZHJvcGAgaW5zdGVhZC5cbiAgICovXG4gIEJhY2tkcm9wUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUgdGhlIE1vZGFsIHdhaXRzIHVudGlsIGEgbmVzdGVkIFRyYW5zaXRpb24gaXMgY29tcGxldGVkIGJlZm9yZSBjbG9zaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xvc2VBZnRlclRyYW5zaXRpb246IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIEJhY2tkcm9wOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgYXV0b21hdGljYWxseSBzaGlmdCBmb2N1cyB0byBpdHNlbGYgd2hlbiBpdCBvcGVucywgYW5kXG4gICAqIHJlcGxhY2UgaXQgdG8gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50IHdoZW4gaXQgY2xvc2VzLlxuICAgKiBUaGlzIGFsc28gd29ya3MgY29ycmVjdGx5IHdpdGggYW55IG1vZGFsIGNoaWxkcmVuIHRoYXQgaGF2ZSB0aGUgYGRpc2FibGVBdXRvRm9jdXNgIHByb3AuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBtb2RhbCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBwcmV2ZW50IGZvY3VzIGZyb20gbGVhdmluZyB0aGUgbW9kYWwgd2hpbGUgb3Blbi5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVuZm9yY2VGb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaGl0dGluZyBlc2NhcGUgd2lsbCBub3QgZmlyZSB0aGUgYG9uQ2xvc2VgIGNhbGxiYWNrLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVzY2FwZUtleURvd246IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgYGNoaWxkcmVuYCB3aWxsIGJlIHVuZGVyIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvcnRhbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IHJlc3RvcmUgZm9jdXMgdG8gcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgb25jZVxuICAgKiBtb2RhbCBpcyBoaWRkZW4gb3IgdW5tb3VudGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJlc3RvcmVGb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHNjcm9sbCBsb2NrIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNjcm9sbExvY2s6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYWNrZHJvcCBpcyBub3QgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRlQmFja2Ryb3A6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBbHdheXMga2VlcCB0aGUgY2hpbGRyZW4gaW4gdGhlIERPTS5cbiAgICogVGhpcyBwcm9wIGNhbiBiZSB1c2VmdWwgaW4gU0VPIHNpdHVhdGlvbiBvclxuICAgKiB3aGVuIHlvdSB3YW50IHRvIG1heGltaXplIHRoZSByZXNwb25zaXZlbmVzcyBvZiB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBrZWVwTW91bnRlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGJhY2tkcm9wIGlzIGNsaWNrZWQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgYG9uQ2xvc2VgIHByb3Agd2l0aCB0aGUgYHJlYXNvbmAgYXJndW1lbnQgdG8gaGFuZGxlIHRoZSBgYmFja2Ryb3BDbGlja2AgZXZlbnRzLlxuICAgKi9cbiAgb25CYWNrZHJvcENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVGhlIGByZWFzb25gIHBhcmFtZXRlciBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlc3BvbnNlIHRvIGBvbkNsb3NlYC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIENhbiBiZTogYFwiZXNjYXBlS2V5RG93blwiYCwgYFwiYmFja2Ryb3BDbGlja1wiYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNb2RhbDsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlhbG9nVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlEaWFsb2cnLCBzbG90KTtcbn1cbmNvbnN0IGRpYWxvZ0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlEaWFsb2cnLCBbJ3Jvb3QnLCAnc2Nyb2xsUGFwZXInLCAnc2Nyb2xsQm9keScsICdjb250YWluZXInLCAncGFwZXInLCAncGFwZXJTY3JvbGxQYXBlcicsICdwYXBlclNjcm9sbEJvZHknLCAncGFwZXJXaWR0aEZhbHNlJywgJ3BhcGVyV2lkdGhYcycsICdwYXBlcldpZHRoU20nLCAncGFwZXJXaWR0aE1kJywgJ3BhcGVyV2lkdGhMZycsICdwYXBlcldpZHRoWGwnLCAncGFwZXJGdWxsV2lkdGgnLCAncGFwZXJGdWxsU2NyZWVuJ10pO1xuZXhwb3J0IGRlZmF1bHQgZGlhbG9nQ2xhc3NlczsiLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuY29uc3QgRGlhbG9nQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHt9KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRGlhbG9nQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdEaWFsb2dDb250ZXh0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlhbG9nQ29udGV4dDsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJpYS1kZXNjcmliZWRieVwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcIkJhY2tkcm9wQ29tcG9uZW50XCIsIFwiQmFja2Ryb3BQcm9wc1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZUVzY2FwZUtleURvd25cIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFdpZHRoXCIsIFwibWF4V2lkdGhcIiwgXCJvbkJhY2tkcm9wQ2xpY2tcIiwgXCJvbkNsb3NlXCIsIFwib3BlblwiLCBcIlBhcGVyQ29tcG9uZW50XCIsIFwiUGFwZXJQcm9wc1wiLCBcInNjcm9sbFwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIiwgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIiwgXCJUcmFuc2l0aW9uUHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyB1bnN0YWJsZV91c2VJZCBhcyB1c2VJZCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vTW9kYWwnO1xuaW1wb3J0IEZhZGUgZnJvbSAnLi4vRmFkZSc7XG5pbXBvcnQgUGFwZXIgZnJvbSAnLi4vUGFwZXInO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBkaWFsb2dDbGFzc2VzLCB7IGdldERpYWxvZ1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vZGlhbG9nQ2xhc3Nlcyc7XG5pbXBvcnQgRGlhbG9nQ29udGV4dCBmcm9tICcuL0RpYWxvZ0NvbnRleHQnO1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4uL0JhY2tkcm9wJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IERpYWxvZ0JhY2tkcm9wID0gc3R5bGVkKEJhY2tkcm9wLCB7XG4gIG5hbWU6ICdNdWlEaWFsb2cnLFxuICBzbG90OiAnQmFja2Ryb3AnLFxuICBvdmVycmlkZXM6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuYmFja2Ryb3Bcbn0pKHtcbiAgLy8gSW1wcm92ZSBzY3JvbGxhYmxlIGRpYWxvZyBzdXBwb3J0LlxuICB6SW5kZXg6IC0xXG59KTtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgc2Nyb2xsLFxuICAgIG1heFdpZHRoLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBmdWxsU2NyZWVuXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBjb250YWluZXI6IFsnY29udGFpbmVyJywgYHNjcm9sbCR7Y2FwaXRhbGl6ZShzY3JvbGwpfWBdLFxuICAgIHBhcGVyOiBbJ3BhcGVyJywgYHBhcGVyU2Nyb2xsJHtjYXBpdGFsaXplKHNjcm9sbCl9YCwgYHBhcGVyV2lkdGgke2NhcGl0YWxpemUoU3RyaW5nKG1heFdpZHRoKSl9YCwgZnVsbFdpZHRoICYmICdwYXBlckZ1bGxXaWR0aCcsIGZ1bGxTY3JlZW4gJiYgJ3BhcGVyRnVsbFNjcmVlbiddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RGlhbG9nVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IERpYWxvZ1Jvb3QgPSBzdHlsZWQoTW9kYWwsIHtcbiAgbmFtZTogJ011aURpYWxvZycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe1xuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIC8vIFVzZSAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIHRoZSBNb2RhbCBpbmxpbmUtc3R5bGUuXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZSAhaW1wb3J0YW50J1xuICB9XG59KTtcbmNvbnN0IERpYWxvZ0NvbnRhaW5lciA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpRGlhbG9nJyxcbiAgc2xvdDogJ0NvbnRhaW5lcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXNbYHNjcm9sbCR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNjcm9sbCl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGhlaWdodDogJzEwMCUnLFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIGhlaWdodDogJ2F1dG8nXG4gIH0sXG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDBcbn0sIG93bmVyU3RhdGUuc2Nyb2xsID09PSAncGFwZXInICYmIHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInXG59LCBvd25lclN0YXRlLnNjcm9sbCA9PT0gJ2JvZHknICYmIHtcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICcmOmFmdGVyJzoge1xuICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB3aWR0aDogJzAnXG4gIH1cbn0pKTtcbmNvbnN0IERpYWxvZ1BhcGVyID0gc3R5bGVkKFBhcGVyLCB7XG4gIG5hbWU6ICdNdWlEaWFsb2cnLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnBhcGVyLCBzdHlsZXNbYHNjcm9sbFBhcGVyJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2Nyb2xsKX1gXSwgc3R5bGVzW2BwYXBlcldpZHRoJHtjYXBpdGFsaXplKFN0cmluZyhvd25lclN0YXRlLm1heFdpZHRoKSl9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5wYXBlckZ1bGxXaWR0aCwgb3duZXJTdGF0ZS5mdWxsU2NyZWVuICYmIHN0eWxlcy5wYXBlckZ1bGxTY3JlZW5dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBtYXJnaW46IDMyLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIC8vIEZpeCBJRTExIGlzc3VlLCB0byByZW1vdmUgYXQgc29tZSBwb2ludC5cbiAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICBvdmVyZmxvd1k6ICd2aXNpYmxlJyxcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9XG59LCBvd25lclN0YXRlLnNjcm9sbCA9PT0gJ3BhcGVyJyAmJiB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDY0cHgpJ1xufSwgb3duZXJTdGF0ZS5zY3JvbGwgPT09ICdib2R5JyAmJiB7XG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgdGV4dEFsaWduOiAnbGVmdCcgLy8gJ2luaXRpYWwnIGRvZXNuJ3Qgd29yayBvbiBJRTExXG5cbn0sICFvd25lclN0YXRlLm1heFdpZHRoICYmIHtcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSA2NHB4KSdcbn0sIG93bmVyU3RhdGUubWF4V2lkdGggPT09ICd4cycgJiYge1xuICBtYXhXaWR0aDogdGhlbWUuYnJlYWtwb2ludHMudW5pdCA9PT0gJ3B4JyA/IE1hdGgubWF4KHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlcy54cywgNDQ0KSA6IGAke3RoZW1lLmJyZWFrcG9pbnRzLnZhbHVlcy54c30ke3RoZW1lLmJyZWFrcG9pbnRzLnVuaXR9YCxcbiAgW2AmLiR7ZGlhbG9nQ2xhc3Nlcy5wYXBlclNjcm9sbEJvZHl9YF06IHtcbiAgICBbdGhlbWUuYnJlYWtwb2ludHMuZG93bihNYXRoLm1heCh0aGVtZS5icmVha3BvaW50cy52YWx1ZXMueHMsIDQ0NCkgKyAzMiAqIDIpXToge1xuICAgICAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSA2NHB4KSdcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUubWF4V2lkdGggJiYgb3duZXJTdGF0ZS5tYXhXaWR0aCAhPT0gJ3hzJyAmJiB7XG4gIG1heFdpZHRoOiBgJHt0aGVtZS5icmVha3BvaW50cy52YWx1ZXNbb3duZXJTdGF0ZS5tYXhXaWR0aF19JHt0aGVtZS5icmVha3BvaW50cy51bml0fWAsXG4gIFtgJi4ke2RpYWxvZ0NsYXNzZXMucGFwZXJTY3JvbGxCb2R5fWBdOiB7XG4gICAgW3RoZW1lLmJyZWFrcG9pbnRzLmRvd24odGhlbWUuYnJlYWtwb2ludHMudmFsdWVzW293bmVyU3RhdGUubWF4V2lkdGhdICsgMzIgKiAyKV06IHtcbiAgICAgIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gNjRweCknXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnY2FsYygxMDAlIC0gNjRweCknXG59LCBvd25lclN0YXRlLmZ1bGxTY3JlZW4gJiYge1xuICBtYXJnaW46IDAsXG4gIHdpZHRoOiAnMTAwJScsXG4gIG1heFdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxuICBtYXhIZWlnaHQ6ICdub25lJyxcbiAgYm9yZGVyUmFkaXVzOiAwLFxuICBbYCYuJHtkaWFsb2dDbGFzc2VzLnBhcGVyU2Nyb2xsQm9keX1gXToge1xuICAgIG1hcmdpbjogMCxcbiAgICBtYXhXaWR0aDogJzEwMCUnXG4gIH1cbn0pKTtcbi8qKlxuICogRGlhbG9ncyBhcmUgb3ZlcmxhaWQgbW9kYWwgcGFwZXIgYmFzZWQgY29tcG9uZW50cyB3aXRoIGEgYmFja2Ryb3AuXG4gKi9cblxuY29uc3QgRGlhbG9nID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRGlhbG9nKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlEaWFsb2cnXG4gIH0pO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IGRlZmF1bHRUcmFuc2l0aW9uRHVyYXRpb24gPSB7XG4gICAgZW50ZXI6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgIGV4aXQ6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmxlYXZpbmdTY3JlZW5cbiAgfTtcblxuICBjb25zdCB7XG4gICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgJ2FyaWEtbGFiZWxsZWRieSc6IGFyaWFMYWJlbGxlZGJ5UHJvcCxcbiAgICBCYWNrZHJvcENvbXBvbmVudCxcbiAgICBCYWNrZHJvcFByb3BzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSxcbiAgICBkaXNhYmxlRXNjYXBlS2V5RG93biA9IGZhbHNlLFxuICAgIGZ1bGxTY3JlZW4gPSBmYWxzZSxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBtYXhXaWR0aCA9ICdzbScsXG4gICAgb25CYWNrZHJvcENsaWNrLFxuICAgIG9uQ2xvc2UsXG4gICAgb3BlbixcbiAgICBQYXBlckNvbXBvbmVudCA9IFBhcGVyLFxuICAgIFBhcGVyUHJvcHMgPSB7fSxcbiAgICBzY3JvbGwgPSAncGFwZXInLFxuICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBGYWRlLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IGRlZmF1bHRUcmFuc2l0aW9uRHVyYXRpb24sXG4gICAgVHJhbnNpdGlvblByb3BzXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24sXG4gICAgZnVsbFNjcmVlbixcbiAgICBmdWxsV2lkdGgsXG4gICAgbWF4V2lkdGgsXG4gICAgc2Nyb2xsXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgYmFja2Ryb3BDbGljayA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IGV2ZW50ID0+IHtcbiAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNsb3NlIHRoZSBkaWFsb2cgd2hlbiBjbGlja2luZyB0aGUgZGlhbG9nIGNvbnRlbnQuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBldmVudCBzdGFydHMgYW5kIGVuZHMgb24gdGhlIHNhbWUgRE9NIGVsZW1lbnQuXG4gICAgYmFja2Ryb3BDbGljay5jdXJyZW50ID0gZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSBldmVudCA9PiB7XG4gICAgLy8gSWdub3JlIHRoZSBldmVudHMgbm90IGNvbWluZyBmcm9tIHRoZSBcImJhY2tkcm9wXCIuXG4gICAgaWYgKCFiYWNrZHJvcENsaWNrLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBiYWNrZHJvcENsaWNrLmN1cnJlbnQgPSBudWxsO1xuXG4gICAgaWYgKG9uQmFja2Ryb3BDbGljaykge1xuICAgICAgb25CYWNrZHJvcENsaWNrKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZShldmVudCwgJ2JhY2tkcm9wQ2xpY2snKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYXJpYUxhYmVsbGVkYnkgPSB1c2VJZChhcmlhTGFiZWxsZWRieVByb3ApO1xuICBjb25zdCBkaWFsb2dDb250ZXh0VmFsdWUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGVJZDogYXJpYUxhYmVsbGVkYnlcbiAgICB9O1xuICB9LCBbYXJpYUxhYmVsbGVkYnldKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KERpYWxvZ1Jvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uOiB0cnVlLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIEJhY2tkcm9wOiBEaWFsb2dCYWNrZHJvcFxuICAgIH0sXG4gICAgY29tcG9uZW50c1Byb3BzOiB7XG4gICAgICBiYWNrZHJvcDogX2V4dGVuZHMoe1xuICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICAgIGFzOiBCYWNrZHJvcENvbXBvbmVudFxuICAgICAgfSwgQmFja2Ryb3BQcm9wcylcbiAgICB9LFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duOiBkaXNhYmxlRXNjYXBlS2V5RG93bixcbiAgICBvbkNsb3NlOiBvbkNsb3NlLFxuICAgIG9wZW46IG9wZW4sXG4gICAgcmVmOiByZWYsXG4gICAgb25DbGljazogaGFuZGxlQmFja2Ryb3BDbGljayxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGFwcGVhcjogdHJ1ZSxcbiAgICAgIGluOiBvcGVuLFxuICAgICAgdGltZW91dDogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgcm9sZTogXCJwcmVzZW50YXRpb25cIlxuICAgIH0sIFRyYW5zaXRpb25Qcm9wcywge1xuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KERpYWxvZ0NvbnRhaW5lciwge1xuICAgICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5jb250YWluZXIpLFxuICAgICAgICBvbk1vdXNlRG93bjogaGFuZGxlTW91c2VEb3duLFxuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goRGlhbG9nUGFwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBhczogUGFwZXJDb21wb25lbnQsXG4gICAgICAgICAgZWxldmF0aW9uOiAyNCxcbiAgICAgICAgICByb2xlOiBcImRpYWxvZ1wiLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkYnlcbiAgICAgICAgfSwgUGFwZXJQcm9wcywge1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnBhcGVyLCBQYXBlclByb3BzLmNsYXNzTmFtZSksXG4gICAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goRGlhbG9nQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgICAgdmFsdWU6IGRpYWxvZ0NvbnRleHRWYWx1ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICAgIH0pXG4gICAgICAgIH0pKVxuICAgICAgfSlcbiAgICB9KSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBEaWFsb2cucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBpZChzKSBvZiB0aGUgZWxlbWVudChzKSB0aGF0IGRlc2NyaWJlIHRoZSBkaWFsb2cuXG4gICAqL1xuICAnYXJpYS1kZXNjcmliZWRieSc6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBpZChzKSBvZiB0aGUgZWxlbWVudChzKSB0aGF0IGxhYmVsIHRoZSBkaWFsb2cuXG4gICAqL1xuICAnYXJpYS1sYWJlbGxlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQSBiYWNrZHJvcCBjb21wb25lbnQuIFRoaXMgcHJvcCBlbmFibGVzIGN1c3RvbSBiYWNrZHJvcCByZW5kZXJpbmcuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgY29tcG9uZW50cy5CYWNrZHJvcGAgaW5zdGVhZC4gV2hpbGUgdGhpcyBwcm9wIGN1cnJlbnRseSB3b3JrcywgaXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAqIFVzZSB0aGUgYGNvbXBvbmVudHMuQmFja2Ryb3BgIHByb3AgdG8gbWFrZSB5b3VyIGFwcGxpY2F0aW9uIHJlYWR5IGZvciB0aGUgbmV4dCB2ZXJzaW9uIG9mIE1hdGVyaWFsIFVJLlxuICAgKiBAZGVmYXVsdCBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgICogICBuYW1lOiAnTXVpTW9kYWwnLFxuICAgKiAgIHNsb3Q6ICdCYWNrZHJvcCcsXG4gICAqICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAqICAgICByZXR1cm4gc3R5bGVzLmJhY2tkcm9wO1xuICAgKiAgIH0sXG4gICAqIH0pKHtcbiAgICogICB6SW5kZXg6IC0xLFxuICAgKiB9KVxuICAgKi9cbiAgQmFja2Ryb3BDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQmFja2Ryb3BQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogRGlhbG9nIGNoaWxkcmVuLCB1c3VhbGx5IHRoZSBpbmNsdWRlZCBzdWItY29tcG9uZW50cy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGhpdHRpbmcgZXNjYXBlIHdpbGwgbm90IGZpcmUgdGhlIGBvbkNsb3NlYCBjYWxsYmFjay5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFc2NhcGVLZXlEb3duOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZGlhbG9nIGlzIGZ1bGwtc2NyZWVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFNjcmVlbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGRpYWxvZyBzdHJldGNoZXMgdG8gYG1heFdpZHRoYC5cbiAgICpcbiAgICogTm90aWNlIHRoYXQgdGhlIGRpYWxvZyB3aWR0aCBncm93IGlzIGxpbWl0ZWQgYnkgdGhlIGRlZmF1bHQgbWFyZ2luLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBtYXgtd2lkdGggb2YgdGhlIGRpYWxvZy5cbiAgICogVGhlIGRpYWxvZyB3aWR0aCBncm93cyB3aXRoIHRoZSBzaXplIG9mIHRoZSBzY3JlZW4uXG4gICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgYG1heFdpZHRoYC5cbiAgICogQGRlZmF1bHQgJ3NtJ1xuICAgKi9cbiAgbWF4V2lkdGg6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgZmFsc2VdKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBiYWNrZHJvcCBpcyBjbGlja2VkLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBvbkNsb3NlYCBwcm9wIHdpdGggdGhlIGByZWFzb25gIGFyZ3VtZW50IHRvIGhhbmRsZSB0aGUgYGJhY2tkcm9wQ2xpY2tgIGV2ZW50cy5cbiAgICovXG4gIG9uQmFja2Ryb3BDbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiBDYW4gYmU6IGBcImVzY2FwZUtleURvd25cImAsIGBcImJhY2tkcm9wQ2xpY2tcImAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIHRvIHJlbmRlciB0aGUgYm9keSBvZiB0aGUgZGlhbG9nLlxuICAgKiBAZGVmYXVsdCBQYXBlclxuICAgKi9cbiAgUGFwZXJDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BQYXBlcmBdKC9tYXRlcmlhbC11aS9hcGkvcGFwZXIvKSBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgUGFwZXJQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBjb250YWluZXIgZm9yIHNjcm9sbGluZyB0aGUgZGlhbG9nLlxuICAgKiBAZGVmYXVsdCAncGFwZXInXG4gICAqL1xuICBzY3JvbGw6IFByb3BUeXBlcy5vbmVPZihbJ2JvZHknLCAncGFwZXInXSksXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgdHJhbnNpdGlvbi5cbiAgICogW0ZvbGxvdyB0aGlzIGd1aWRlXSgvbWF0ZXJpYWwtdWkvdHJhbnNpdGlvbnMvI3RyYW5zaXRpb25jb21wb25lbnQtcHJvcCkgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgRmFkZVxuICAgKi9cbiAgVHJhbnNpdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIGVudGVyOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5lbnRlcmluZ1NjcmVlbixcbiAgICogICBleGl0OiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5sZWF2aW5nU2NyZWVuLFxuICAgKiB9XG4gICAqL1xuICB0cmFuc2l0aW9uRHVyYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKSxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRGlhbG9nOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXREaWFsb2dUaXRsZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRGlhbG9nVGl0bGUnLCBzbG90KTtcbn1cbmNvbnN0IGRpYWxvZ1RpdGxlQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aURpYWxvZ1RpdGxlJywgWydyb290J10pO1xuZXhwb3J0IGRlZmF1bHQgZGlhbG9nVGl0bGVDbGFzc2VzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpZFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldERpYWxvZ1RpdGxlVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9kaWFsb2dUaXRsZUNsYXNzZXMnO1xuaW1wb3J0IERpYWxvZ0NvbnRleHQgZnJvbSAnLi4vRGlhbG9nL0RpYWxvZ0NvbnRleHQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RGlhbG9nVGl0bGVVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgRGlhbG9nVGl0bGVSb290ID0gc3R5bGVkKFR5cG9ncmFwaHksIHtcbiAgbmFtZTogJ011aURpYWxvZ1RpdGxlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7XG4gIHBhZGRpbmc6ICcxNnB4IDI0cHgnLFxuICBmbGV4OiAnMCAwIGF1dG8nXG59KTtcbmNvbnN0IERpYWxvZ1RpdGxlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRGlhbG9nVGl0bGUoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aURpYWxvZ1RpdGxlJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGlkOiBpZFByb3BcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBwcm9wcztcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCB7XG4gICAgdGl0bGVJZDogaWQgPSBpZFByb3BcbiAgfSA9IFJlYWN0LnVzZUNvbnRleHQoRGlhbG9nQ29udGV4dCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChEaWFsb2dUaXRsZVJvb3QsIF9leHRlbmRzKHtcbiAgICBjb21wb25lbnQ6IFwiaDJcIixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgdmFyaWFudDogXCJoNlwiLFxuICAgIGlkOiBpZFxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBEaWFsb2dUaXRsZS5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRGlhbG9nVGl0bGU7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJ1dHRvbiwgQm94LCBEaWFsb2csIERpYWxvZ1RpdGxlLCBUeXBvZ3JhcGh5IH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgR2l0SHViSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0dpdEh1Yic7XG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7IHNldFNob3dMb2dpbiB9IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL3VzZXJJbmZvU2xpY2UnO1xuXG50eXBlIGxvZ2luUHJvcHMgPSB7XG4gIG9wZW46IGJvb2xlYW47XG59O1xuXG4vLyBUaGlzIGNvbXBvbmVudCB3aWxsIGFsbG93IHVzZXIgdG8gbG9naW4gd2l0aCBnaXRodWJcblxuZXhwb3J0IGNvbnN0IExvZ2luID0gKHByb3BzOiBsb2dpblByb3BzKSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKTogdm9pZCA9PiB7XG4gICAgZGlzcGF0Y2goc2V0U2hvd0xvZ2luKCkpO1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBib2FyZERhdGEnKTtcbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfSBvcGVuPXtwcm9wcy5vcGVufT5cbiAgICAgIDxCb3hcbiAgICAgICAgc3g9e3tcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgaGVpZ2h0OiAyMzAsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxCb3hcbiAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgd2lkdGg6IDQwMCxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzZlMDBiYicsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxpbWcgYWx0PVwibG9nb1wiIHNyYz1cIi4uL2Fzc2V0cy9sb2dvLWplc3Rlci5wbmdcIiAvPlxuICAgICAgICA8L0JveD5cbiAgICAgICAgPERpYWxvZ1RpdGxlPkxvZyBpbiB0byB5b3VyIGFjY291bnQ8L0RpYWxvZ1RpdGxlPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICBocmVmPVwiL2F1dGgvZ2l0aHViXCJcbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgIHN4PXt7XG4gICAgICAgICAgICBtYXJnaW46IDIsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxHaXRIdWJJY29uIC8+XG4gICAgICAgICAgR2l0SHViXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8VHlwb2dyYXBoeSBpZD1cImVycm9yLW1lc3NhZ2VcIiBzeD17eyBkaXNwbGF5OiAnbm9uZScsIGNvbG9yOiAncmVkJyB9fT5cbiAgICAgICAgICBFcnJvclxuICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICA8L0JveD5cbiAgICA8L0RpYWxvZz5cbiAgKTtcbn07XG4iLCIvKipcbiAqIFJlYWN0IFJvdXRlciBET00gdjYuNC4xXG4gKlxuICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFVOU0FGRV9lbmhhbmNlTWFudWFsUm91dGVPYmplY3RzLCBSb3V0ZXIsIHVzZUhyZWYsIGNyZWF0ZVBhdGgsIHVzZVJlc29sdmVkUGF0aCwgdXNlTWF0Y2gsIFVOU0FGRV9EYXRhUm91dGVyU3RhdGVDb250ZXh0LCB1c2VOYXZpZ2F0ZSwgdXNlTG9jYXRpb24sIFVOU0FGRV9EYXRhUm91dGVyQ29udGV4dCwgVU5TQUZFX1JvdXRlQ29udGV4dCwgdXNlTWF0Y2hlcywgdXNlTmF2aWdhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5leHBvcnQgeyBBYm9ydGVkRGVmZXJyZWRFcnJvciwgQXdhaXQsIE1lbW9yeVJvdXRlciwgTmF2aWdhdGUsIE5hdmlnYXRpb25UeXBlLCBPdXRsZXQsIFJvdXRlLCBSb3V0ZXIsIFJvdXRlclByb3ZpZGVyLCBSb3V0ZXMsIFVOU0FGRV9EYXRhUm91dGVyQ29udGV4dCwgVU5TQUZFX0RhdGFSb3V0ZXJTdGF0ZUNvbnRleHQsIFVOU0FGRV9EYXRhU3RhdGljUm91dGVyQ29udGV4dCwgVU5TQUZFX0xvY2F0aW9uQ29udGV4dCwgVU5TQUZFX05hdmlnYXRpb25Db250ZXh0LCBVTlNBRkVfUm91dGVDb250ZXh0LCBVTlNBRkVfZW5oYW5jZU1hbnVhbFJvdXRlT2JqZWN0cywgY3JlYXRlTWVtb3J5Um91dGVyLCBjcmVhdGVQYXRoLCBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW4sIGNyZWF0ZVJvdXRlc0Zyb21FbGVtZW50cywgZGVmZXIsIGdlbmVyYXRlUGF0aCwgaXNSb3V0ZUVycm9yUmVzcG9uc2UsIGpzb24sIG1hdGNoUGF0aCwgbWF0Y2hSb3V0ZXMsIHBhcnNlUGF0aCwgcmVkaXJlY3QsIHJlbmRlck1hdGNoZXMsIHJlc29sdmVQYXRoLCB1c2VBY3Rpb25EYXRhLCB1c2VBc3luY0Vycm9yLCB1c2VBc3luY1ZhbHVlLCB1c2VIcmVmLCB1c2VJblJvdXRlckNvbnRleHQsIHVzZUxvYWRlckRhdGEsIHVzZUxvY2F0aW9uLCB1c2VNYXRjaCwgdXNlTWF0Y2hlcywgdXNlTmF2aWdhdGUsIHVzZU5hdmlnYXRpb24sIHVzZU5hdmlnYXRpb25UeXBlLCB1c2VPdXRsZXQsIHVzZU91dGxldENvbnRleHQsIHVzZVBhcmFtcywgdXNlUmVzb2x2ZWRQYXRoLCB1c2VSZXZhbGlkYXRvciwgdXNlUm91dGVFcnJvciwgdXNlUm91dGVMb2FkZXJEYXRhLCB1c2VSb3V0ZXMgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBjcmVhdGVCcm93c2VySGlzdG9yeSwgY3JlYXRlSGFzaEhpc3RvcnksIG1hdGNoUGF0aCwgaW52YXJpYW50IH0gZnJvbSAnQHJlbWl4LXJ1bi9yb3V0ZXInO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5jb25zdCBkZWZhdWx0TWV0aG9kID0gXCJnZXRcIjtcbmNvbnN0IGRlZmF1bHRFbmNUeXBlID0gXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIjtcbmZ1bmN0aW9uIGlzSHRtbEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0LnRhZ05hbWUgPT09IFwic3RyaW5nXCI7XG59XG5mdW5jdGlvbiBpc0J1dHRvbkVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiBpc0h0bWxFbGVtZW50KG9iamVjdCkgJiYgb2JqZWN0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJidXR0b25cIjtcbn1cbmZ1bmN0aW9uIGlzRm9ybUVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiBpc0h0bWxFbGVtZW50KG9iamVjdCkgJiYgb2JqZWN0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmb3JtXCI7XG59XG5mdW5jdGlvbiBpc0lucHV0RWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIGlzSHRtbEVsZW1lbnQob2JqZWN0KSAmJiBvYmplY3QudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCI7XG59XG5cbmZ1bmN0aW9uIGlzTW9kaWZpZWRFdmVudChldmVudCkge1xuICByZXR1cm4gISEoZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFByb2Nlc3NMaW5rQ2xpY2soZXZlbnQsIHRhcmdldCkge1xuICByZXR1cm4gZXZlbnQuYnV0dG9uID09PSAwICYmICggLy8gSWdub3JlIGV2ZXJ5dGhpbmcgYnV0IGxlZnQgY2xpY2tzXG4gICF0YXJnZXQgfHwgdGFyZ2V0ID09PSBcIl9zZWxmXCIpICYmIC8vIExldCBicm93c2VyIGhhbmRsZSBcInRhcmdldD1fYmxhbmtcIiBldGMuXG4gICFpc01vZGlmaWVkRXZlbnQoZXZlbnQpIC8vIElnbm9yZSBjbGlja3Mgd2l0aCBtb2RpZmllciBrZXlzXG4gIDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIGluaXRpYWxpemVyLlxuICpcbiAqIFRoaXMgaXMgaWRlbnRpY2FsIHRvIGBuZXcgVVJMU2VhcmNoUGFyYW1zKGluaXQpYCBleGNlcHQgaXQgYWxzb1xuICogc3VwcG9ydHMgYXJyYXlzIGFzIHZhbHVlcyBpbiB0aGUgb2JqZWN0IGZvcm0gb2YgdGhlIGluaXRpYWxpemVyXG4gKiBpbnN0ZWFkIG9mIGp1c3Qgc3RyaW5ncy4gVGhpcyBpcyBjb252ZW5pZW50IHdoZW4geW91IG5lZWQgbXVsdGlwbGVcbiAqIHZhbHVlcyBmb3IgYSBnaXZlbiBrZXksIGJ1dCBkb24ndCB3YW50IHRvIHVzZSBhbiBhcnJheSBpbml0aWFsaXplci5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaW5zdGVhZCBvZjpcbiAqXG4gKiAgIGxldCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKFtcbiAqICAgICBbJ3NvcnQnLCAnbmFtZSddLFxuICogICAgIFsnc29ydCcsICdwcmljZSddXG4gKiAgIF0pO1xuICpcbiAqIHlvdSBjYW4gZG86XG4gKlxuICogICBsZXQgc2VhcmNoUGFyYW1zID0gY3JlYXRlU2VhcmNoUGFyYW1zKHtcbiAqICAgICBzb3J0OiBbJ25hbWUnLCAncHJpY2UnXVxuICogICB9KTtcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVTZWFyY2hQYXJhbXMoaW5pdCkge1xuICBpZiAoaW5pdCA9PT0gdm9pZCAwKSB7XG4gICAgaW5pdCA9IFwiXCI7XG4gIH1cblxuICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh0eXBlb2YgaW5pdCA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KGluaXQpIHx8IGluaXQgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMgPyBpbml0IDogT2JqZWN0LmtleXMoaW5pdCkucmVkdWNlKChtZW1vLCBrZXkpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBpbml0W2tleV07XG4gICAgcmV0dXJuIG1lbW8uY29uY2F0KEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKHYgPT4gW2tleSwgdl0pIDogW1trZXksIHZhbHVlXV0pO1xuICB9LCBbXSkpO1xufVxuZnVuY3Rpb24gZ2V0U2VhcmNoUGFyYW1zRm9yTG9jYXRpb24obG9jYXRpb25TZWFyY2gsIGRlZmF1bHRTZWFyY2hQYXJhbXMpIHtcbiAgbGV0IHNlYXJjaFBhcmFtcyA9IGNyZWF0ZVNlYXJjaFBhcmFtcyhsb2NhdGlvblNlYXJjaCk7XG5cbiAgZm9yIChsZXQga2V5IG9mIGRlZmF1bHRTZWFyY2hQYXJhbXMua2V5cygpKSB7XG4gICAgaWYgKCFzZWFyY2hQYXJhbXMuaGFzKGtleSkpIHtcbiAgICAgIGRlZmF1bHRTZWFyY2hQYXJhbXMuZ2V0QWxsKGtleSkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2VhcmNoUGFyYW1zO1xufVxuZnVuY3Rpb24gZ2V0Rm9ybVN1Ym1pc3Npb25JbmZvKHRhcmdldCwgZGVmYXVsdEFjdGlvbiwgb3B0aW9ucykge1xuICBsZXQgbWV0aG9kO1xuICBsZXQgYWN0aW9uO1xuICBsZXQgZW5jVHlwZTtcbiAgbGV0IGZvcm1EYXRhO1xuXG4gIGlmIChpc0Zvcm1FbGVtZW50KHRhcmdldCkpIHtcbiAgICBsZXQgc3VibWlzc2lvblRyaWdnZXIgPSBvcHRpb25zLnN1Ym1pc3Npb25UcmlnZ2VyO1xuICAgIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJtZXRob2RcIikgfHwgZGVmYXVsdE1ldGhvZDtcbiAgICBhY3Rpb24gPSBvcHRpb25zLmFjdGlvbiB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiYWN0aW9uXCIpIHx8IGRlZmF1bHRBY3Rpb247XG4gICAgZW5jVHlwZSA9IG9wdGlvbnMuZW5jVHlwZSB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZW5jdHlwZVwiKSB8fCBkZWZhdWx0RW5jVHlwZTtcbiAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSh0YXJnZXQpO1xuXG4gICAgaWYgKHN1Ym1pc3Npb25UcmlnZ2VyICYmIHN1Ym1pc3Npb25UcmlnZ2VyLm5hbWUpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChzdWJtaXNzaW9uVHJpZ2dlci5uYW1lLCBzdWJtaXNzaW9uVHJpZ2dlci52YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzQnV0dG9uRWxlbWVudCh0YXJnZXQpIHx8IGlzSW5wdXRFbGVtZW50KHRhcmdldCkgJiYgKHRhcmdldC50eXBlID09PSBcInN1Ym1pdFwiIHx8IHRhcmdldC50eXBlID09PSBcImltYWdlXCIpKSB7XG4gICAgbGV0IGZvcm0gPSB0YXJnZXQuZm9ybTtcblxuICAgIGlmIChmb3JtID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzdWJtaXQgYSA8YnV0dG9uPiBvciA8aW5wdXQgdHlwZT1cXFwic3VibWl0XFxcIj4gd2l0aG91dCBhIDxmb3JtPlwiKTtcbiAgICB9IC8vIDxidXR0b24+LzxpbnB1dCB0eXBlPVwic3VibWl0XCI+IG1heSBvdmVycmlkZSBhdHRyaWJ1dGVzIG9mIDxmb3JtPlxuXG5cbiAgICBtZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZm9ybW1ldGhvZFwiKSB8fCBmb3JtLmdldEF0dHJpYnV0ZShcIm1ldGhvZFwiKSB8fCBkZWZhdWx0TWV0aG9kO1xuICAgIGFjdGlvbiA9IG9wdGlvbnMuYWN0aW9uIHx8IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJmb3JtYWN0aW9uXCIpIHx8IGZvcm0uZ2V0QXR0cmlidXRlKFwiYWN0aW9uXCIpIHx8IGRlZmF1bHRBY3Rpb247XG4gICAgZW5jVHlwZSA9IG9wdGlvbnMuZW5jVHlwZSB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZm9ybWVuY3R5cGVcIikgfHwgZm9ybS5nZXRBdHRyaWJ1dGUoXCJlbmN0eXBlXCIpIHx8IGRlZmF1bHRFbmNUeXBlO1xuICAgIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pOyAvLyBJbmNsdWRlIG5hbWUgKyB2YWx1ZSBmcm9tIGEgPGJ1dHRvbj4sIGFwcGVuZGluZyBpbiBjYXNlIHRoZSBidXR0b24gbmFtZVxuICAgIC8vIG1hdGNoZXMgYW4gZXhpc3RpbmcgaW5wdXQgbmFtZVxuXG4gICAgaWYgKHRhcmdldC5uYW1lKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQodGFyZ2V0Lm5hbWUsIHRhcmdldC52YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzSHRtbEVsZW1lbnQodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzdWJtaXQgZWxlbWVudCB0aGF0IGlzIG5vdCA8Zm9ybT4sIDxidXR0b24+LCBvciBcIiArIFwiPGlucHV0IHR5cGU9XFxcInN1Ym1pdHxpbWFnZVxcXCI+XCIpO1xuICB9IGVsc2Uge1xuICAgIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8IGRlZmF1bHRNZXRob2Q7XG4gICAgYWN0aW9uID0gb3B0aW9ucy5hY3Rpb24gfHwgZGVmYXVsdEFjdGlvbjtcbiAgICBlbmNUeXBlID0gb3B0aW9ucy5lbmNUeXBlIHx8IGRlZmF1bHRFbmNUeXBlO1xuXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICBmb3JtRGF0YSA9IHRhcmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgICAgICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIHRhcmdldCkge1xuICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgICAgZm9yIChsZXQgbmFtZSBvZiBPYmplY3Qua2V5cyh0YXJnZXQpKSB7XG4gICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHRhcmdldFtuYW1lXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQge1xuICAgIHByb3RvY29sLFxuICAgIGhvc3RcbiAgfSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgbGV0IHVybCA9IG5ldyBVUkwoYWN0aW9uLCBwcm90b2NvbCArIFwiLy9cIiArIGhvc3QpO1xuICByZXR1cm4ge1xuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgZW5jVHlwZSxcbiAgICBmb3JtRGF0YVxuICB9O1xufVxuXG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvbkNsaWNrXCIsIFwicmVsYXRpdmVcIiwgXCJyZWxvYWREb2N1bWVudFwiLCBcInJlcGxhY2VcIiwgXCJzdGF0ZVwiLCBcInRhcmdldFwiLCBcInRvXCIsIFwicHJldmVudFNjcm9sbFJlc2V0XCJdLFxuICAgICAgX2V4Y2x1ZGVkMiA9IFtcImFyaWEtY3VycmVudFwiLCBcImNhc2VTZW5zaXRpdmVcIiwgXCJjbGFzc05hbWVcIiwgXCJlbmRcIiwgXCJzdHlsZVwiLCBcInRvXCIsIFwiY2hpbGRyZW5cIl0sXG4gICAgICBfZXhjbHVkZWQzID0gW1wicmVsb2FkRG9jdW1lbnRcIiwgXCJyZXBsYWNlXCIsIFwibWV0aG9kXCIsIFwiYWN0aW9uXCIsIFwib25TdWJtaXRcIiwgXCJmZXRjaGVyS2V5XCIsIFwicm91dGVJZFwiLCBcInJlbGF0aXZlXCJdO1xuLy8jcmVnaW9uIFJvdXRlcnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJSb3V0ZXIocm91dGVzLCBvcHRzKSB7XG4gIHZhciBfd2luZG93O1xuXG4gIHJldHVybiBjcmVhdGVSb3V0ZXIoe1xuICAgIGJhc2VuYW1lOiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLmJhc2VuYW1lLFxuICAgIGhpc3Rvcnk6IGNyZWF0ZUJyb3dzZXJIaXN0b3J5KHtcbiAgICAgIHdpbmRvdzogb3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy53aW5kb3dcbiAgICB9KSxcbiAgICBoeWRyYXRpb25EYXRhOiAob3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5oeWRyYXRpb25EYXRhKSB8fCAoKF93aW5kb3cgPSB3aW5kb3cpID09IG51bGwgPyB2b2lkIDAgOiBfd2luZG93Ll9fc3RhdGljUm91dGVySHlkcmF0aW9uRGF0YSksXG4gICAgcm91dGVzOiBVTlNBRkVfZW5oYW5jZU1hbnVhbFJvdXRlT2JqZWN0cyhyb3V0ZXMpXG4gIH0pLmluaXRpYWxpemUoKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUhhc2hSb3V0ZXIocm91dGVzLCBvcHRzKSB7XG4gIHZhciBfd2luZG93MjtcblxuICByZXR1cm4gY3JlYXRlUm91dGVyKHtcbiAgICBiYXNlbmFtZTogb3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5iYXNlbmFtZSxcbiAgICBoaXN0b3J5OiBjcmVhdGVIYXNoSGlzdG9yeSh7XG4gICAgICB3aW5kb3c6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMud2luZG93XG4gICAgfSksXG4gICAgaHlkcmF0aW9uRGF0YTogKG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMuaHlkcmF0aW9uRGF0YSkgfHwgKChfd2luZG93MiA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cyLl9fc3RhdGljUm91dGVySHlkcmF0aW9uRGF0YSksXG4gICAgcm91dGVzOiBVTlNBRkVfZW5oYW5jZU1hbnVhbFJvdXRlT2JqZWN0cyhyb3V0ZXMpXG4gIH0pLmluaXRpYWxpemUoKTtcbn1cbi8qKlxuICogQSBgPFJvdXRlcj5gIGZvciB1c2UgaW4gd2ViIGJyb3dzZXJzLiBQcm92aWRlcyB0aGUgY2xlYW5lc3QgVVJMcy5cbiAqL1xuXG5mdW5jdGlvbiBCcm93c2VyUm91dGVyKF9yZWYpIHtcbiAgbGV0IHtcbiAgICBiYXNlbmFtZSxcbiAgICBjaGlsZHJlbixcbiAgICB3aW5kb3dcbiAgfSA9IF9yZWY7XG4gIGxldCBoaXN0b3J5UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgaWYgKGhpc3RvcnlSZWYuY3VycmVudCA9PSBudWxsKSB7XG4gICAgaGlzdG9yeVJlZi5jdXJyZW50ID0gY3JlYXRlQnJvd3Nlckhpc3Rvcnkoe1xuICAgICAgd2luZG93LFxuICAgICAgdjVDb21wYXQ6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBoaXN0b3J5ID0gaGlzdG9yeVJlZi5jdXJyZW50O1xuICBsZXQgW3N0YXRlLCBzZXRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgYWN0aW9uOiBoaXN0b3J5LmFjdGlvbixcbiAgICBsb2NhdGlvbjogaGlzdG9yeS5sb2NhdGlvblxuICB9KTtcbiAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IGhpc3RvcnkubGlzdGVuKHNldFN0YXRlKSwgW2hpc3RvcnldKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwge1xuICAgIGJhc2VuYW1lOiBiYXNlbmFtZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgbG9jYXRpb246IHN0YXRlLmxvY2F0aW9uLFxuICAgIG5hdmlnYXRpb25UeXBlOiBzdGF0ZS5hY3Rpb24sXG4gICAgbmF2aWdhdG9yOiBoaXN0b3J5XG4gIH0pO1xufVxuLyoqXG4gKiBBIGA8Um91dGVyPmAgZm9yIHVzZSBpbiB3ZWIgYnJvd3NlcnMuIFN0b3JlcyB0aGUgbG9jYXRpb24gaW4gdGhlIGhhc2hcbiAqIHBvcnRpb24gb2YgdGhlIFVSTCBzbyBpdCBpcyBub3Qgc2VudCB0byB0aGUgc2VydmVyLlxuICovXG5cbmZ1bmN0aW9uIEhhc2hSb3V0ZXIoX3JlZjIpIHtcbiAgbGV0IHtcbiAgICBiYXNlbmFtZSxcbiAgICBjaGlsZHJlbixcbiAgICB3aW5kb3dcbiAgfSA9IF9yZWYyO1xuICBsZXQgaGlzdG9yeVJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIGlmIChoaXN0b3J5UmVmLmN1cnJlbnQgPT0gbnVsbCkge1xuICAgIGhpc3RvcnlSZWYuY3VycmVudCA9IGNyZWF0ZUhhc2hIaXN0b3J5KHtcbiAgICAgIHdpbmRvdyxcbiAgICAgIHY1Q29tcGF0OiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBsZXQgaGlzdG9yeSA9IGhpc3RvcnlSZWYuY3VycmVudDtcbiAgbGV0IFtzdGF0ZSwgc2V0U3RhdGVdID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGFjdGlvbjogaGlzdG9yeS5hY3Rpb24sXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb25cbiAgfSk7XG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiBoaXN0b3J5Lmxpc3RlbihzZXRTdGF0ZSksIFtoaXN0b3J5XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXIsIHtcbiAgICBiYXNlbmFtZTogYmFzZW5hbWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGxvY2F0aW9uOiBzdGF0ZS5sb2NhdGlvbixcbiAgICBuYXZpZ2F0aW9uVHlwZTogc3RhdGUuYWN0aW9uLFxuICAgIG5hdmlnYXRvcjogaGlzdG9yeVxuICB9KTtcbn1cbi8qKlxuICogQSBgPFJvdXRlcj5gIHRoYXQgYWNjZXB0cyBhIHByZS1pbnN0YW50aWF0ZWQgaGlzdG9yeSBvYmplY3QuIEl0J3MgaW1wb3J0YW50XG4gKiB0byBub3RlIHRoYXQgdXNpbmcgeW91ciBvd24gaGlzdG9yeSBvYmplY3QgaXMgaGlnaGx5IGRpc2NvdXJhZ2VkIGFuZCBtYXkgYWRkXG4gKiB0d28gdmVyc2lvbnMgb2YgdGhlIGhpc3RvcnkgbGlicmFyeSB0byB5b3VyIGJ1bmRsZXMgdW5sZXNzIHlvdSB1c2UgdGhlIHNhbWVcbiAqIHZlcnNpb24gb2YgdGhlIGhpc3RvcnkgbGlicmFyeSB0aGF0IFJlYWN0IFJvdXRlciB1c2VzIGludGVybmFsbHkuXG4gKi9cblxuZnVuY3Rpb24gSGlzdG9yeVJvdXRlcihfcmVmMykge1xuICBsZXQge1xuICAgIGJhc2VuYW1lLFxuICAgIGNoaWxkcmVuLFxuICAgIGhpc3RvcnlcbiAgfSA9IF9yZWYzO1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBhY3Rpb246IGhpc3RvcnkuYWN0aW9uLFxuICAgIGxvY2F0aW9uOiBoaXN0b3J5LmxvY2F0aW9uXG4gIH0pO1xuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4gaGlzdG9yeS5saXN0ZW4oc2V0U3RhdGUpLCBbaGlzdG9yeV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyLCB7XG4gICAgYmFzZW5hbWU6IGJhc2VuYW1lLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBsb2NhdGlvbjogc3RhdGUubG9jYXRpb24sXG4gICAgbmF2aWdhdGlvblR5cGU6IHN0YXRlLmFjdGlvbixcbiAgICBuYXZpZ2F0b3I6IGhpc3RvcnlcbiAgfSk7XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgSGlzdG9yeVJvdXRlci5kaXNwbGF5TmFtZSA9IFwidW5zdGFibGVfSGlzdG9yeVJvdXRlclwiO1xufVxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgcmVuZGVyaW5nIGEgaGlzdG9yeS1hd2FyZSA8YT4uXG4gKi9cblxuY29uc3QgTGluayA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpbmtXaXRoUmVmKF9yZWY0LCByZWYpIHtcbiAgbGV0IHtcbiAgICBvbkNsaWNrLFxuICAgIHJlbGF0aXZlLFxuICAgIHJlbG9hZERvY3VtZW50LFxuICAgIHJlcGxhY2UsXG4gICAgc3RhdGUsXG4gICAgdGFyZ2V0LFxuICAgIHRvLFxuICAgIHByZXZlbnRTY3JvbGxSZXNldFxuICB9ID0gX3JlZjQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjQsIF9leGNsdWRlZCk7XG5cbiAgbGV0IGhyZWYgPSB1c2VIcmVmKHRvLCB7XG4gICAgcmVsYXRpdmVcbiAgfSk7XG4gIGxldCBpbnRlcm5hbE9uQ2xpY2sgPSB1c2VMaW5rQ2xpY2tIYW5kbGVyKHRvLCB7XG4gICAgcmVwbGFjZSxcbiAgICBzdGF0ZSxcbiAgICB0YXJnZXQsXG4gICAgcHJldmVudFNjcm9sbFJlc2V0LFxuICAgIHJlbGF0aXZlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgaWYgKG9uQ2xpY2spIG9uQ2xpY2soZXZlbnQpO1xuXG4gICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBpbnRlcm5hbE9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgLyojX19QVVJFX18qL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9hbmNob3ItaGFzLWNvbnRlbnRcbiAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIG9uQ2xpY2s6IHJlbG9hZERvY3VtZW50ID8gb25DbGljayA6IGhhbmRsZUNsaWNrLFxuICAgICAgcmVmOiByZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldFxuICAgIH0pKVxuICApO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgTGluay5kaXNwbGF5TmFtZSA9IFwiTGlua1wiO1xufVxuLyoqXG4gKiBBIDxMaW5rPiB3cmFwcGVyIHRoYXQga25vd3MgaWYgaXQncyBcImFjdGl2ZVwiIG9yIG5vdC5cbiAqL1xuXG5cbmNvbnN0IE5hdkxpbmsgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBOYXZMaW5rV2l0aFJlZihfcmVmNSwgcmVmKSB7XG4gIGxldCB7XG4gICAgXCJhcmlhLWN1cnJlbnRcIjogYXJpYUN1cnJlbnRQcm9wID0gXCJwYWdlXCIsXG4gICAgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lUHJvcCA9IFwiXCIsXG4gICAgZW5kID0gZmFsc2UsXG4gICAgc3R5bGU6IHN0eWxlUHJvcCxcbiAgICB0byxcbiAgICBjaGlsZHJlblxuICB9ID0gX3JlZjUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjUsIF9leGNsdWRlZDIpO1xuXG4gIGxldCBwYXRoID0gdXNlUmVzb2x2ZWRQYXRoKHRvKTtcbiAgbGV0IG1hdGNoID0gdXNlTWF0Y2goe1xuICAgIHBhdGg6IHBhdGgucGF0aG5hbWUsXG4gICAgZW5kLFxuICAgIGNhc2VTZW5zaXRpdmVcbiAgfSk7XG4gIGxldCByb3V0ZXJTdGF0ZSA9IFJlYWN0LnVzZUNvbnRleHQoVU5TQUZFX0RhdGFSb3V0ZXJTdGF0ZUNvbnRleHQpO1xuICBsZXQgbmV4dExvY2F0aW9uID0gcm91dGVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IHJvdXRlclN0YXRlLm5hdmlnYXRpb24ubG9jYXRpb247XG4gIGxldCBuZXh0UGF0aCA9IHVzZVJlc29sdmVkUGF0aChuZXh0TG9jYXRpb24gfHwgXCJcIik7XG4gIGxldCBuZXh0TWF0Y2ggPSBSZWFjdC51c2VNZW1vKCgpID0+IG5leHRMb2NhdGlvbiA/IG1hdGNoUGF0aCh7XG4gICAgcGF0aDogcGF0aC5wYXRobmFtZSxcbiAgICBlbmQsXG4gICAgY2FzZVNlbnNpdGl2ZVxuICB9LCBuZXh0UGF0aC5wYXRobmFtZSkgOiBudWxsLCBbbmV4dExvY2F0aW9uLCBwYXRoLnBhdGhuYW1lLCBjYXNlU2Vuc2l0aXZlLCBlbmQsIG5leHRQYXRoLnBhdGhuYW1lXSk7XG4gIGxldCBpc1BlbmRpbmcgPSBuZXh0TWF0Y2ggIT0gbnVsbDtcbiAgbGV0IGlzQWN0aXZlID0gbWF0Y2ggIT0gbnVsbDtcbiAgbGV0IGFyaWFDdXJyZW50ID0gaXNBY3RpdmUgPyBhcmlhQ3VycmVudFByb3AgOiB1bmRlZmluZWQ7XG4gIGxldCBjbGFzc05hbWU7XG5cbiAgaWYgKHR5cGVvZiBjbGFzc05hbWVQcm9wID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWVQcm9wKHtcbiAgICAgIGlzQWN0aXZlLFxuICAgICAgaXNQZW5kaW5nXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlIGNsYXNzTmFtZSBwcm9wIGlzIG5vdCBhIGZ1bmN0aW9uLCB3ZSB1c2UgYSBkZWZhdWx0IGBhY3RpdmVgXG4gICAgLy8gY2xhc3MgZm9yIDxOYXZMaW5rIC8+cyB0aGF0IGFyZSBhY3RpdmUuIEluIHY1IGBhY3RpdmVgIHdhcyB0aGUgZGVmYXVsdFxuICAgIC8vIHZhbHVlIGZvciBgYWN0aXZlQ2xhc3NOYW1lYCwgYnV0IHdlIGFyZSByZW1vdmluZyB0aGF0IEFQSSBhbmQgY2FuIHN0aWxsXG4gICAgLy8gdXNlIHRoZSBvbGQgZGVmYXVsdCBiZWhhdmlvciBmb3IgYSBjbGVhbmVyIHVwZ3JhZGUgcGF0aCBhbmQga2VlcCB0aGVcbiAgICAvLyBzaW1wbGUgc3R5bGluZyBydWxlcyB3b3JraW5nIGFzIHRoZXkgY3VycmVudGx5IGRvLlxuICAgIGNsYXNzTmFtZSA9IFtjbGFzc05hbWVQcm9wLCBpc0FjdGl2ZSA/IFwiYWN0aXZlXCIgOiBudWxsLCBpc1BlbmRpbmcgPyBcInBlbmRpbmdcIiA6IG51bGxdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbiAgfVxuXG4gIGxldCBzdHlsZSA9IHR5cGVvZiBzdHlsZVByb3AgPT09IFwiZnVuY3Rpb25cIiA/IHN0eWxlUHJvcCh7XG4gICAgaXNBY3RpdmUsXG4gICAgaXNQZW5kaW5nXG4gIH0pIDogc3R5bGVQcm9wO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGluaywgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICBcImFyaWEtY3VycmVudFwiOiBhcmlhQ3VycmVudCxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICByZWY6IHJlZixcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgdG86IHRvXG4gIH0pLCB0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIiA/IGNoaWxkcmVuKHtcbiAgICBpc0FjdGl2ZSxcbiAgICBpc1BlbmRpbmdcbiAgfSkgOiBjaGlsZHJlbik7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBOYXZMaW5rLmRpc3BsYXlOYW1lID0gXCJOYXZMaW5rXCI7XG59XG4vKipcbiAqIEEgYEByZW1peC1ydW4vcm91dGVyYC1hd2FyZSBgPGZvcm0+YC4gSXQgYmVoYXZlcyBsaWtlIGEgbm9ybWFsIGZvcm0gZXhjZXB0XG4gKiB0aGF0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaXMgd2l0aCBgZmV0Y2hgIGluc3RlYWQgb2YgbmV3IGRvY3VtZW50XG4gKiByZXF1ZXN0cywgYWxsb3dpbmcgY29tcG9uZW50cyB0byBhZGQgbmljZXIgVVggdG8gdGhlIHBhZ2UgYXMgdGhlIGZvcm0gaXNcbiAqIHN1Ym1pdHRlZCBhbmQgcmV0dXJucyB3aXRoIGRhdGEuXG4gKi9cblxuXG5jb25zdCBGb3JtID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1JbXBsLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICByZWY6IHJlZlxuICB9KSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBGb3JtLmRpc3BsYXlOYW1lID0gXCJGb3JtXCI7XG59XG5cbmNvbnN0IEZvcm1JbXBsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoKF9yZWY2LCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgbGV0IHtcbiAgICByZWxvYWREb2N1bWVudCxcbiAgICByZXBsYWNlLFxuICAgIG1ldGhvZCA9IGRlZmF1bHRNZXRob2QsXG4gICAgYWN0aW9uLFxuICAgIG9uU3VibWl0LFxuICAgIGZldGNoZXJLZXksXG4gICAgcm91dGVJZCxcbiAgICByZWxhdGl2ZVxuICB9ID0gX3JlZjYsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWY2LCBfZXhjbHVkZWQzKTtcblxuICBsZXQgc3VibWl0ID0gdXNlU3VibWl0SW1wbChmZXRjaGVyS2V5LCByb3V0ZUlkKTtcbiAgbGV0IGZvcm1NZXRob2QgPSBtZXRob2QudG9Mb3dlckNhc2UoKSA9PT0gXCJnZXRcIiA/IFwiZ2V0XCIgOiBcInBvc3RcIjtcbiAgbGV0IGZvcm1BY3Rpb24gPSB1c2VGb3JtQWN0aW9uKGFjdGlvbiwge1xuICAgIHJlbGF0aXZlXG4gIH0pO1xuXG4gIGxldCBzdWJtaXRIYW5kbGVyID0gZXZlbnQgPT4ge1xuICAgIG9uU3VibWl0ICYmIG9uU3VibWl0KGV2ZW50KTtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IHN1Ym1pdHRlciA9IGV2ZW50Lm5hdGl2ZUV2ZW50LnN1Ym1pdHRlcjtcbiAgICBzdWJtaXQoc3VibWl0dGVyIHx8IGV2ZW50LmN1cnJlbnRUYXJnZXQsIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJlcGxhY2UsXG4gICAgICByZWxhdGl2ZVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImZvcm1cIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgIG1ldGhvZDogZm9ybU1ldGhvZCxcbiAgICBhY3Rpb246IGZvcm1BY3Rpb24sXG4gICAgb25TdWJtaXQ6IHJlbG9hZERvY3VtZW50ID8gb25TdWJtaXQgOiBzdWJtaXRIYW5kbGVyXG4gIH0sIHByb3BzKSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBGb3JtLmRpc3BsYXlOYW1lID0gXCJGb3JtXCI7XG59XG4vKipcbiAqIFRoaXMgY29tcG9uZW50IHdpbGwgZW11bGF0ZSB0aGUgYnJvd3NlcidzIHNjcm9sbCByZXN0b3JhdGlvbiBvbiBsb2NhdGlvblxuICogY2hhbmdlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIFNjcm9sbFJlc3RvcmF0aW9uKF9yZWY3KSB7XG4gIGxldCB7XG4gICAgZ2V0S2V5LFxuICAgIHN0b3JhZ2VLZXlcbiAgfSA9IF9yZWY3O1xuICB1c2VTY3JvbGxSZXN0b3JhdGlvbih7XG4gICAgZ2V0S2V5LFxuICAgIHN0b3JhZ2VLZXlcbiAgfSk7XG4gIHJldHVybiBudWxsO1xufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIFNjcm9sbFJlc3RvcmF0aW9uLmRpc3BsYXlOYW1lID0gXCJTY3JvbGxSZXN0b3JhdGlvblwiO1xufSAvLyNlbmRyZWdpb25cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyNyZWdpb24gSG9va3Ncbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogSGFuZGxlcyB0aGUgY2xpY2sgYmVoYXZpb3IgZm9yIHJvdXRlciBgPExpbms+YCBjb21wb25lbnRzLiBUaGlzIGlzIHVzZWZ1bCBpZlxuICogeW91IG5lZWQgdG8gY3JlYXRlIGN1c3RvbSBgPExpbms+YCBjb21wb25lbnRzIHdpdGggdGhlIHNhbWUgY2xpY2sgYmVoYXZpb3Igd2VcbiAqIHVzZSBpbiBvdXIgZXhwb3J0ZWQgYDxMaW5rPmAuXG4gKi9cblxuXG5mdW5jdGlvbiB1c2VMaW5rQ2xpY2tIYW5kbGVyKHRvLCBfdGVtcCkge1xuICBsZXQge1xuICAgIHRhcmdldCxcbiAgICByZXBsYWNlOiByZXBsYWNlUHJvcCxcbiAgICBzdGF0ZSxcbiAgICBwcmV2ZW50U2Nyb2xsUmVzZXQsXG4gICAgcmVsYXRpdmVcbiAgfSA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wO1xuICBsZXQgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuICBsZXQgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBsZXQgcGF0aCA9IHVzZVJlc29sdmVkUGF0aCh0bywge1xuICAgIHJlbGF0aXZlXG4gIH0pO1xuICByZXR1cm4gUmVhY3QudXNlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGlmIChzaG91bGRQcm9jZXNzTGlua0NsaWNrKGV2ZW50LCB0YXJnZXQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBJZiB0aGUgVVJMIGhhc24ndCBjaGFuZ2VkLCBhIHJlZ3VsYXIgPGE+IHdpbGwgZG8gYSByZXBsYWNlIGluc3RlYWQgb2ZcbiAgICAgIC8vIGEgcHVzaCwgc28gZG8gdGhlIHNhbWUgaGVyZSB1bmxlc3MgdGhlIHJlcGxhY2UgcHJvcCBpcyBleHBsaWNpdGx5IHNldFxuXG4gICAgICBsZXQgcmVwbGFjZSA9IHJlcGxhY2VQcm9wICE9PSB1bmRlZmluZWQgPyByZXBsYWNlUHJvcCA6IGNyZWF0ZVBhdGgobG9jYXRpb24pID09PSBjcmVhdGVQYXRoKHBhdGgpO1xuICAgICAgbmF2aWdhdGUodG8sIHtcbiAgICAgICAgcmVwbGFjZSxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHByZXZlbnRTY3JvbGxSZXNldCxcbiAgICAgICAgcmVsYXRpdmVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2xvY2F0aW9uLCBuYXZpZ2F0ZSwgcGF0aCwgcmVwbGFjZVByb3AsIHN0YXRlLCB0YXJnZXQsIHRvLCBwcmV2ZW50U2Nyb2xsUmVzZXQsIHJlbGF0aXZlXSk7XG59XG4vKipcbiAqIEEgY29udmVuaWVudCB3cmFwcGVyIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHNlYXJjaCBwYXJhbWV0ZXJzIHZpYSB0aGVcbiAqIFVSTFNlYXJjaFBhcmFtcyBpbnRlcmZhY2UuXG4gKi9cblxuZnVuY3Rpb24gdXNlU2VhcmNoUGFyYW1zKGRlZmF1bHRJbml0KSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcodHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gXCJ1bmRlZmluZWRcIiwgXCJZb3UgY2Fubm90IHVzZSB0aGUgYHVzZVNlYXJjaFBhcmFtc2AgaG9vayBpbiBhIGJyb3dzZXIgdGhhdCBkb2VzIG5vdCBcIiArIFwic3VwcG9ydCB0aGUgVVJMU2VhcmNoUGFyYW1zIEFQSS4gSWYgeW91IG5lZWQgdG8gc3VwcG9ydCBJbnRlcm5ldCBcIiArIFwiRXhwbG9yZXIgMTEsIHdlIHJlY29tbWVuZCB5b3UgbG9hZCBhIHBvbHlmaWxsIHN1Y2ggYXMgXCIgKyBcImh0dHBzOi8vZ2l0aHViLmNvbS91bmdhcC91cmwtc2VhcmNoLXBhcmFtc1xcblxcblwiICsgXCJJZiB5b3UncmUgdW5zdXJlIGhvdyB0byBsb2FkIHBvbHlmaWxscywgd2UgcmVjb21tZW5kIHlvdSBjaGVjayBvdXQgXCIgKyBcImh0dHBzOi8vcG9seWZpbGwuaW8vdjMvIHdoaWNoIHByb3ZpZGVzIHNvbWUgcmVjb21tZW5kYXRpb25zIGFib3V0IGhvdyBcIiArIFwidG8gbG9hZCBwb2x5ZmlsbHMgb25seSBmb3IgdXNlcnMgdGhhdCBuZWVkIHRoZW0sIGluc3RlYWQgb2YgZm9yIGV2ZXJ5IFwiICsgXCJ1c2VyLlwiKSA6IHZvaWQgMDtcbiAgbGV0IGRlZmF1bHRTZWFyY2hQYXJhbXNSZWYgPSBSZWFjdC51c2VSZWYoY3JlYXRlU2VhcmNoUGFyYW1zKGRlZmF1bHRJbml0KSk7XG4gIGxldCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGxldCBzZWFyY2hQYXJhbXMgPSBSZWFjdC51c2VNZW1vKCgpID0+IGdldFNlYXJjaFBhcmFtc0ZvckxvY2F0aW9uKGxvY2F0aW9uLnNlYXJjaCwgZGVmYXVsdFNlYXJjaFBhcmFtc1JlZi5jdXJyZW50KSwgW2xvY2F0aW9uLnNlYXJjaF0pO1xuICBsZXQgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuICBsZXQgc2V0U2VhcmNoUGFyYW1zID0gUmVhY3QudXNlQ2FsbGJhY2soKG5leHRJbml0LCBuYXZpZ2F0ZU9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBuZXdTZWFyY2hQYXJhbXMgPSBjcmVhdGVTZWFyY2hQYXJhbXModHlwZW9mIG5leHRJbml0ID09PSBcImZ1bmN0aW9uXCIgPyBuZXh0SW5pdChzZWFyY2hQYXJhbXMpIDogbmV4dEluaXQpO1xuICAgIG5hdmlnYXRlKFwiP1wiICsgbmV3U2VhcmNoUGFyYW1zLCBuYXZpZ2F0ZU9wdGlvbnMpO1xuICB9LCBbbmF2aWdhdGUsIHNlYXJjaFBhcmFtc10pO1xuICByZXR1cm4gW3NlYXJjaFBhcmFtcywgc2V0U2VhcmNoUGFyYW1zXTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gcHJvZ3JhbW1hdGljYWxseSBzdWJtaXQgYSBmb3JtIChvclxuICogc29tZSBhcmJpdHJhcnkgZGF0YSkgdG8gdGhlIHNlcnZlci5cbiAqL1xuXG5mdW5jdGlvbiB1c2VTdWJtaXQoKSB7XG4gIHJldHVybiB1c2VTdWJtaXRJbXBsKCk7XG59XG5cbmZ1bmN0aW9uIHVzZVN1Ym1pdEltcGwoZmV0Y2hlcktleSwgcm91dGVJZCkge1xuICBsZXQgZGF0YVJvdXRlckNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFVOU0FGRV9EYXRhUm91dGVyQ29udGV4dCk7XG4gICFkYXRhUm91dGVyQ29udGV4dCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VTdWJtaXRJbXBsIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBEYXRhIFJvdXRlclwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCB7XG4gICAgcm91dGVyXG4gIH0gPSBkYXRhUm91dGVyQ29udGV4dDtcbiAgbGV0IGRlZmF1bHRBY3Rpb24gPSB1c2VGb3JtQWN0aW9uKCk7XG4gIHJldHVybiBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBhcmUgY2FsbGluZyBzdWJtaXQgZHVyaW5nIHRoZSBzZXJ2ZXIgcmVuZGVyLiBcIiArIFwiVHJ5IGNhbGxpbmcgc3VibWl0IHdpdGhpbiBhIGB1c2VFZmZlY3RgIG9yIGNhbGxiYWNrIGluc3RlYWQuXCIpO1xuICAgIH1cblxuICAgIGxldCB7XG4gICAgICBtZXRob2QsXG4gICAgICBlbmNUeXBlLFxuICAgICAgZm9ybURhdGEsXG4gICAgICB1cmxcbiAgICB9ID0gZ2V0Rm9ybVN1Ym1pc3Npb25JbmZvKHRhcmdldCwgZGVmYXVsdEFjdGlvbiwgb3B0aW9ucyk7XG4gICAgbGV0IGhyZWYgPSB1cmwucGF0aG5hbWUgKyB1cmwuc2VhcmNoO1xuICAgIGxldCBvcHRzID0ge1xuICAgICAgcmVwbGFjZTogb3B0aW9ucy5yZXBsYWNlLFxuICAgICAgZm9ybURhdGEsXG4gICAgICBmb3JtTWV0aG9kOiBtZXRob2QsXG4gICAgICBmb3JtRW5jVHlwZTogZW5jVHlwZVxuICAgIH07XG5cbiAgICBpZiAoZmV0Y2hlcktleSkge1xuICAgICAgIShyb3V0ZUlkICE9IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIk5vIHJvdXRlSWQgYXZhaWxhYmxlIGZvciB1c2VGZXRjaGVyKClcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICAgcm91dGVyLmZldGNoKGZldGNoZXJLZXksIHJvdXRlSWQsIGhyZWYsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByb3V0ZXIubmF2aWdhdGUoaHJlZiwgb3B0cyk7XG4gICAgfVxuICB9LCBbZGVmYXVsdEFjdGlvbiwgcm91dGVyLCBmZXRjaGVyS2V5LCByb3V0ZUlkXSk7XG59XG5cbmZ1bmN0aW9uIHVzZUZvcm1BY3Rpb24oYWN0aW9uLCBfdGVtcDIpIHtcbiAgbGV0IHtcbiAgICByZWxhdGl2ZVxuICB9ID0gX3RlbXAyID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wMjtcbiAgbGV0IHJvdXRlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVU5TQUZFX1JvdXRlQ29udGV4dCk7XG4gICFyb3V0ZUNvbnRleHQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwidXNlRm9ybUFjdGlvbiBtdXN0IGJlIHVzZWQgaW5zaWRlIGEgUm91dGVDb250ZXh0XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IFttYXRjaF0gPSByb3V0ZUNvbnRleHQubWF0Y2hlcy5zbGljZSgtMSk7XG4gIGxldCByZXNvbHZlZEFjdGlvbiA9IGFjdGlvbiAhPSBudWxsID8gYWN0aW9uIDogXCIuXCI7XG4gIGxldCBwYXRoID0gdXNlUmVzb2x2ZWRQYXRoKHJlc29sdmVkQWN0aW9uLCB7XG4gICAgcmVsYXRpdmVcbiAgfSk7IC8vIFByZXZpb3VzbHkgd2Ugc2V0IHRoZSBkZWZhdWx0IGFjdGlvbiB0byBcIi5cIi4gVGhlIHByb2JsZW0gd2l0aCB0aGlzIGlzIHRoYXRcbiAgLy8gYHVzZVJlc29sdmVkUGF0aChcIi5cIilgIGV4Y2x1ZGVzIHNlYXJjaCBwYXJhbXMgYW5kIHRoZSBoYXNoIG9mIHRoZSByZXNvbHZlZFxuICAvLyBVUkwuIFRoaXMgaXMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHdoZW4gXCIuXCIgaXMgc3BlY2lmaWNhbGx5IHByb3ZpZGVkIGFzXG4gIC8vIHRoZSBmb3JtIGFjdGlvbiwgYnV0IGluY29uc2lzdGVudCB3LyBicm93c2VycyB3aGVuIHRoZSBhY3Rpb24gaXMgb21pdHRlZC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlbWl4LXJ1bi9yZW1peC9pc3N1ZXMvOTI3XG5cbiAgbGV0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcblxuICBpZiAoYWN0aW9uID09IG51bGwpIHtcbiAgICAvLyBTYWZlIHRvIHdyaXRlIHRvIHRoZXNlIGRpcmVjdGx5IGhlcmUgc2luY2UgaWYgYWN0aW9uIHdhcyB1bmRlZmluZWQsIHdlXG4gICAgLy8gd291bGQgaGF2ZSBjYWxsZWQgdXNlUmVzb2x2ZWRQYXRoKFwiLlwiKSB3aGljaCB3aWxsIG5ldmVyIGluY2x1ZGUgYSBzZWFyY2hcbiAgICAvLyBvciBoYXNoXG4gICAgcGF0aC5zZWFyY2ggPSBsb2NhdGlvbi5zZWFyY2g7XG4gICAgcGF0aC5oYXNoID0gbG9jYXRpb24uaGFzaDsgLy8gV2hlbiBncmFiYmluZyBzZWFyY2ggcGFyYW1zIGZyb20gdGhlIFVSTCwgcmVtb3ZlIHRoZSBhdXRvbWF0aWNhbGx5XG4gICAgLy8gaW5zZXJ0ZWQgP2luZGV4IHBhcmFtIHNvIHdlIG1hdGNoIHRoZSB1c2VSZXNvbHZlZFBhdGggc2VhcmNoIGJlaGF2aW9yXG4gICAgLy8gd2hpY2ggd291bGQgbm90IGluY2x1ZGUgP2luZGV4XG5cbiAgICBpZiAobWF0Y2gucm91dGUuaW5kZXgpIHtcbiAgICAgIGxldCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhdGguc2VhcmNoKTtcbiAgICAgIHBhcmFtcy5kZWxldGUoXCJpbmRleFwiKTtcbiAgICAgIHBhdGguc2VhcmNoID0gcGFyYW1zLnRvU3RyaW5nKCkgPyBcIj9cIiArIHBhcmFtcy50b1N0cmluZygpIDogXCJcIjtcbiAgICB9XG4gIH1cblxuICBpZiAoKCFhY3Rpb24gfHwgYWN0aW9uID09PSBcIi5cIikgJiYgbWF0Y2gucm91dGUuaW5kZXgpIHtcbiAgICBwYXRoLnNlYXJjaCA9IHBhdGguc2VhcmNoID8gcGF0aC5zZWFyY2gucmVwbGFjZSgvXlxcPy8sIFwiP2luZGV4JlwiKSA6IFwiP2luZGV4XCI7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUGF0aChwYXRoKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmV0Y2hlckZvcm0oZmV0Y2hlcktleSwgcm91dGVJZCkge1xuICBsZXQgRmV0Y2hlckZvcm0gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtSW1wbCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICByZWY6IHJlZixcbiAgICAgIGZldGNoZXJLZXk6IGZldGNoZXJLZXksXG4gICAgICByb3V0ZUlkOiByb3V0ZUlkXG4gICAgfSkpO1xuICB9KTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgRmV0Y2hlckZvcm0uZGlzcGxheU5hbWUgPSBcImZldGNoZXIuRm9ybVwiO1xuICB9XG5cbiAgcmV0dXJuIEZldGNoZXJGb3JtO1xufVxuXG5sZXQgZmV0Y2hlcklkID0gMDtcbi8qKlxuICogSW50ZXJhY3RzIHdpdGggcm91dGUgbG9hZGVycyBhbmQgYWN0aW9ucyB3aXRob3V0IGNhdXNpbmcgYSBuYXZpZ2F0aW9uLiBHcmVhdFxuICogZm9yIGFueSBpbnRlcmFjdGlvbiB0aGF0IHN0YXlzIG9uIHRoZSBzYW1lIHBhZ2UuXG4gKi9cblxuZnVuY3Rpb24gdXNlRmV0Y2hlcigpIHtcbiAgdmFyIF9yb3V0ZSRtYXRjaGVzO1xuXG4gIGxldCBkYXRhUm91dGVyQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVU5TQUZFX0RhdGFSb3V0ZXJDb250ZXh0KTtcbiAgIWRhdGFSb3V0ZXJDb250ZXh0ID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZUZldGNoZXIgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIERhdGEgUm91dGVyXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IHtcbiAgICByb3V0ZXJcbiAgfSA9IGRhdGFSb3V0ZXJDb250ZXh0O1xuICBsZXQgcm91dGUgPSBSZWFjdC51c2VDb250ZXh0KFVOU0FGRV9Sb3V0ZUNvbnRleHQpO1xuICAhcm91dGUgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwidXNlRmV0Y2hlciBtdXN0IGJlIHVzZWQgaW5zaWRlIGEgUm91dGVDb250ZXh0XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IHJvdXRlSWQgPSAoX3JvdXRlJG1hdGNoZXMgPSByb3V0ZS5tYXRjaGVzW3JvdXRlLm1hdGNoZXMubGVuZ3RoIC0gMV0pID09IG51bGwgPyB2b2lkIDAgOiBfcm91dGUkbWF0Y2hlcy5yb3V0ZS5pZDtcbiAgIShyb3V0ZUlkICE9IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZUZldGNoZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiByb3V0ZXMgdGhhdCBjb250YWluIGEgdW5pcXVlIFxcXCJpZFxcXCJcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQgW2ZldGNoZXJLZXldID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gU3RyaW5nKCsrZmV0Y2hlcklkKSk7XG4gIGxldCBbRm9ybV0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgIXJvdXRlSWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiTm8gcm91dGVJZCBhdmFpbGFibGUgZm9yIGZldGNoZXIuRm9ybSgpXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICByZXR1cm4gY3JlYXRlRmV0Y2hlckZvcm0oZmV0Y2hlcktleSwgcm91dGVJZCk7XG4gIH0pO1xuICBsZXQgW2xvYWRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gaHJlZiA9PiB7XG4gICAgIXJvdXRlciA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJObyByb3V0ZXIgYXZhaWxhYmxlIGZvciBmZXRjaGVyLmxvYWQoKVwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgIXJvdXRlSWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiTm8gcm91dGVJZCBhdmFpbGFibGUgZm9yIGZldGNoZXIubG9hZCgpXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICByb3V0ZXIuZmV0Y2goZmV0Y2hlcktleSwgcm91dGVJZCwgaHJlZik7XG4gIH0pO1xuICBsZXQgc3VibWl0ID0gdXNlU3VibWl0SW1wbChmZXRjaGVyS2V5LCByb3V0ZUlkKTtcbiAgbGV0IGZldGNoZXIgPSByb3V0ZXIuZ2V0RmV0Y2hlcihmZXRjaGVyS2V5KTtcbiAgbGV0IGZldGNoZXJXaXRoQ29tcG9uZW50cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gX2V4dGVuZHMoe1xuICAgIEZvcm0sXG4gICAgc3VibWl0LFxuICAgIGxvYWRcbiAgfSwgZmV0Y2hlciksIFtmZXRjaGVyLCBGb3JtLCBzdWJtaXQsIGxvYWRdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBJcyB0aGlzIGJ1c3RlZCB3aGVuIHRoZSBSZWFjdCB0ZWFtIGdldHMgcmVhbCB3ZWlyZCBhbmQgY2FsbHMgZWZmZWN0c1xuICAgIC8vIHR3aWNlIG9uIG1vdW50PyAgV2UgcmVhbGx5IGp1c3QgbmVlZCB0byBnYXJiYWdlIGNvbGxlY3QgaGVyZSB3aGVuIHRoaXNcbiAgICAvLyBmZXRjaGVyIGlzIG5vIGxvbmdlciBhcm91bmQuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICghcm91dGVyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIk5vIGZldGNoZXIgYXZhaWxhYmxlIHRvIGNsZWFuIHVwIGZyb20gdXNlRmV0Y2hlcigpXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJvdXRlci5kZWxldGVGZXRjaGVyKGZldGNoZXJLZXkpO1xuICAgIH07XG4gIH0sIFtyb3V0ZXIsIGZldGNoZXJLZXldKTtcbiAgcmV0dXJuIGZldGNoZXJXaXRoQ29tcG9uZW50cztcbn1cbi8qKlxuICogUHJvdmlkZXMgYWxsIGZldGNoZXJzIGN1cnJlbnRseSBvbiB0aGUgcGFnZS4gVXNlZnVsIGZvciBsYXlvdXRzIGFuZCBwYXJlbnRcbiAqIHJvdXRlcyB0aGF0IG5lZWQgdG8gcHJvdmlkZSBwZW5kaW5nL29wdGltaXN0aWMgVUkgcmVnYXJkaW5nIHRoZSBmZXRjaC5cbiAqL1xuXG5mdW5jdGlvbiB1c2VGZXRjaGVycygpIHtcbiAgbGV0IHN0YXRlID0gUmVhY3QudXNlQ29udGV4dChVTlNBRkVfRGF0YVJvdXRlclN0YXRlQ29udGV4dCk7XG4gICFzdGF0ZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VGZXRjaGVycyBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRGF0YVJvdXRlclN0YXRlQ29udGV4dFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiBbLi4uc3RhdGUuZmV0Y2hlcnMudmFsdWVzKCldO1xufVxuY29uc3QgU0NST0xMX1JFU1RPUkFUSU9OX1NUT1JBR0VfS0VZID0gXCJyZWFjdC1yb3V0ZXItc2Nyb2xsLXBvc2l0aW9uc1wiO1xubGV0IHNhdmVkU2Nyb2xsUG9zaXRpb25zID0ge307XG4vKipcbiAqIFdoZW4gcmVuZGVyZWQgaW5zaWRlIGEgUm91dGVyUHJvdmlkZXIsIHdpbGwgcmVzdG9yZSBzY3JvbGwgcG9zaXRpb25zIG9uIG5hdmlnYXRpb25zXG4gKi9cblxuZnVuY3Rpb24gdXNlU2Nyb2xsUmVzdG9yYXRpb24oX3RlbXAzKSB7XG4gIGxldCB7XG4gICAgZ2V0S2V5LFxuICAgIHN0b3JhZ2VLZXlcbiAgfSA9IF90ZW1wMyA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDM7XG4gIGxldCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGxldCBtYXRjaGVzID0gdXNlTWF0Y2hlcygpO1xuICBsZXQgbmF2aWdhdGlvbiA9IHVzZU5hdmlnYXRpb24oKTtcbiAgbGV0IGRhdGFSb3V0ZXJDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChVTlNBRkVfRGF0YVJvdXRlckNvbnRleHQpO1xuICAhZGF0YVJvdXRlckNvbnRleHQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwidXNlU2Nyb2xsUmVzdG9yYXRpb24gbXVzdCBiZSB1c2VkIHdpdGhpbiBhIERhdGFSb3V0ZXJDb250ZXh0XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IHtcbiAgICByb3V0ZXJcbiAgfSA9IGRhdGFSb3V0ZXJDb250ZXh0O1xuICBsZXQgc3RhdGUgPSBSZWFjdC51c2VDb250ZXh0KFVOU0FGRV9EYXRhUm91dGVyU3RhdGVDb250ZXh0KTtcbiAgIShyb3V0ZXIgIT0gbnVsbCAmJiBzdGF0ZSAhPSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VTY3JvbGxSZXN0b3JhdGlvbiBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRGF0YVJvdXRlclN0YXRlQ29udGV4dFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCB7XG4gICAgcmVzdG9yZVNjcm9sbFBvc2l0aW9uLFxuICAgIHByZXZlbnRTY3JvbGxSZXNldFxuICB9ID0gc3RhdGU7IC8vIFRyaWdnZXIgbWFudWFsIHNjcm9sbCByZXN0b3JhdGlvbiB3aGlsZSB3ZSdyZSBhY3RpdmVcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdpbmRvdy5oaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uID0gXCJtYW51YWxcIjtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSBcImF1dG9cIjtcbiAgICB9O1xuICB9LCBbXSk7IC8vIFNhdmUgcG9zaXRpb25zIG9uIHVubG9hZFxuXG4gIHVzZUJlZm9yZVVubG9hZChSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG5hdmlnYXRpb24uc3RhdGUgPT09IFwiaWRsZVwiKSB7XG4gICAgICBsZXQga2V5ID0gKGdldEtleSA/IGdldEtleShsb2NhdGlvbiwgbWF0Y2hlcykgOiBudWxsKSB8fCBsb2NhdGlvbi5rZXk7XG4gICAgICBzYXZlZFNjcm9sbFBvc2l0aW9uc1trZXldID0gd2luZG93LnNjcm9sbFk7XG4gICAgfVxuXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShzdG9yYWdlS2V5IHx8IFNDUk9MTF9SRVNUT1JBVElPTl9TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoc2F2ZWRTY3JvbGxQb3NpdGlvbnMpKTtcbiAgICB3aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IFwiYXV0b1wiO1xuICB9LCBbc3RvcmFnZUtleSwgZ2V0S2V5LCBuYXZpZ2F0aW9uLnN0YXRlLCBsb2NhdGlvbiwgbWF0Y2hlc10pKTsgLy8gUmVhZCBpbiBhbnkgc2F2ZWQgc2Nyb2xsIGxvY2F0aW9uc1xuXG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzZXNzaW9uUG9zaXRpb25zID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzdG9yYWdlS2V5IHx8IFNDUk9MTF9SRVNUT1JBVElPTl9TVE9SQUdFX0tFWSk7XG5cbiAgICAgIGlmIChzZXNzaW9uUG9zaXRpb25zKSB7XG4gICAgICAgIHNhdmVkU2Nyb2xsUG9zaXRpb25zID0gSlNPTi5wYXJzZShzZXNzaW9uUG9zaXRpb25zKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7Ly8gbm8tb3AsIHVzZSBkZWZhdWx0IGVtcHR5IG9iamVjdFxuICAgIH1cbiAgfSwgW3N0b3JhZ2VLZXldKTsgLy8gRW5hYmxlIHNjcm9sbCByZXN0b3JhdGlvbiBpbiB0aGUgcm91dGVyXG5cbiAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBsZXQgZGlzYWJsZVNjcm9sbFJlc3RvcmF0aW9uID0gcm91dGVyID09IG51bGwgPyB2b2lkIDAgOiByb3V0ZXIuZW5hYmxlU2Nyb2xsUmVzdG9yYXRpb24oc2F2ZWRTY3JvbGxQb3NpdGlvbnMsICgpID0+IHdpbmRvdy5zY3JvbGxZLCBnZXRLZXkpO1xuICAgIHJldHVybiAoKSA9PiBkaXNhYmxlU2Nyb2xsUmVzdG9yYXRpb24gJiYgZGlzYWJsZVNjcm9sbFJlc3RvcmF0aW9uKCk7XG4gIH0sIFtyb3V0ZXIsIGdldEtleV0pOyAvLyBSZXN0b3JlIHNjcm9sbGluZyB3aGVuIHN0YXRlLnJlc3RvcmVTY3JvbGxQb3NpdGlvbiBjaGFuZ2VzXG5cbiAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAvLyBFeHBsaWNpdCBmYWxzZSBtZWFucyBkb24ndCBkbyBhbnl0aGluZyAodXNlZCBmb3Igc3VibWlzc2lvbnMpXG4gICAgaWYgKHJlc3RvcmVTY3JvbGxQb3NpdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGJlZW4gaGVyZSBiZWZvcmUsIHNjcm9sbCB0byBpdFxuXG5cbiAgICBpZiAodHlwZW9mIHJlc3RvcmVTY3JvbGxQb3NpdGlvbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHJlc3RvcmVTY3JvbGxQb3NpdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB0cnkgdG8gc2Nyb2xsIHRvIHRoZSBoYXNoXG5cblxuICAgIGlmIChsb2NhdGlvbi5oYXNoKSB7XG4gICAgICBsZXQgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChsb2NhdGlvbi5oYXNoLnNsaWNlKDEpKTtcblxuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIGVsLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IC8vIE9wdCBvdXQgb2Ygc2Nyb2xsIHJlc2V0IGlmIHRoaXMgbGluayByZXF1ZXN0ZWQgaXRcblxuXG4gICAgaWYgKHByZXZlbnRTY3JvbGxSZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gb3RoZXJ3aXNlIGdvIHRvIHRoZSB0b3Agb24gbmV3IGxvY2F0aW9uc1xuXG5cbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH0sIFtsb2NhdGlvbiwgcmVzdG9yZVNjcm9sbFBvc2l0aW9uLCBwcmV2ZW50U2Nyb2xsUmVzZXRdKTtcbn1cblxuZnVuY3Rpb24gdXNlQmVmb3JlVW5sb2FkKGNhbGxiYWNrKSB7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgY2FsbGJhY2spO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW2NhbGxiYWNrXSk7XG59IC8vI2VuZHJlZ2lvblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vI3JlZ2lvbiBVdGlsc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG5mdW5jdGlvbiB3YXJuaW5nKGNvbmQsIG1lc3NhZ2UpIHtcbiAgaWYgKCFjb25kKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIpIGNvbnNvbGUud2FybihtZXNzYWdlKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCBSb3V0ZXIhXG4gICAgICAvL1xuICAgICAgLy8gVGhpcyBlcnJvciBpcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB5b3UgY2FuIG1vcmUgZWFzaWx5XG4gICAgICAvLyBmaW5kIHRoZSBzb3VyY2UgZm9yIGEgd2FybmluZyB0aGF0IGFwcGVhcnMgaW4gdGhlIGNvbnNvbGUgYnlcbiAgICAgIC8vIGVuYWJsaW5nIFwicGF1c2Ugb24gZXhjZXB0aW9uc1wiIGluIHlvdXIgSmF2YVNjcmlwdCBkZWJ1Z2dlci5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxufSAvLyNlbmRyZWdpb25cblxuZXhwb3J0IHsgQnJvd3NlclJvdXRlciwgRm9ybSwgSGFzaFJvdXRlciwgTGluaywgTmF2TGluaywgU2Nyb2xsUmVzdG9yYXRpb24sIGNyZWF0ZUJyb3dzZXJSb3V0ZXIsIGNyZWF0ZUhhc2hSb3V0ZXIsIGNyZWF0ZVNlYXJjaFBhcmFtcywgSGlzdG9yeVJvdXRlciBhcyB1bnN0YWJsZV9IaXN0b3J5Um91dGVyLCB1c2VGZXRjaGVyLCB1c2VGZXRjaGVycywgdXNlRm9ybUFjdGlvbiwgdXNlTGlua0NsaWNrSGFuZGxlciwgdXNlU2VhcmNoUGFyYW1zLCB1c2VTdWJtaXQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiLyohIGpzLWNvb2tpZSB2My4wLjEgfCBNSVQgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuZnVuY3Rpb24gYXNzaWduICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXRcbn1cbi8qIGVzbGludC1lbmFibGUgbm8tdmFyICovXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xudmFyIGRlZmF1bHRDb252ZXJ0ZXIgPSB7XG4gIHJlYWQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZVswXSA9PT0gJ1wiJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxLCAtMSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oJVtcXGRBLUZdezJ9KSsvZ2ksIGRlY29kZVVSSUNvbXBvbmVudClcbiAgfSxcbiAgd3JpdGU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpLnJlcGxhY2UoXG4gICAgICAvJSgyWzM0NkJGXXwzW0FDLUZdfDQwfDVbQkRFXXw2MHw3W0JDRF0pL2csXG4gICAgICBkZWNvZGVVUklDb21wb25lbnRcbiAgICApXG4gIH1cbn07XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXZhciAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cblxuZnVuY3Rpb24gaW5pdCAoY29udmVydGVyLCBkZWZhdWx0QXR0cmlidXRlcykge1xuICBmdW5jdGlvbiBzZXQgKGtleSwgdmFsdWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXR0cmlidXRlcyA9IGFzc2lnbih7fSwgZGVmYXVsdEF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMpO1xuXG4gICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmV4cGlyZXMgPT09ICdudW1iZXInKSB7XG4gICAgICBhdHRyaWJ1dGVzLmV4cGlyZXMgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgYXR0cmlidXRlcy5leHBpcmVzICogODY0ZTUpO1xuICAgIH1cbiAgICBpZiAoYXR0cmlidXRlcy5leHBpcmVzKSB7XG4gICAgICBhdHRyaWJ1dGVzLmV4cGlyZXMgPSBhdHRyaWJ1dGVzLmV4cGlyZXMudG9VVENTdHJpbmcoKTtcbiAgICB9XG5cbiAgICBrZXkgPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KVxuICAgICAgLnJlcGxhY2UoLyUoMlszNDZCXXw1RXw2MHw3QykvZywgZGVjb2RlVVJJQ29tcG9uZW50KVxuICAgICAgLnJlcGxhY2UoL1soKV0vZywgZXNjYXBlKTtcblxuICAgIHZhciBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgPSAnJztcbiAgICBmb3IgKHZhciBhdHRyaWJ1dGVOYW1lIGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmICghYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgKz0gJzsgJyArIGF0dHJpYnV0ZU5hbWU7XG5cbiAgICAgIGlmIChhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIENvbnNpZGVycyBSRkMgNjI2NSBzZWN0aW9uIDUuMjpcbiAgICAgIC8vIC4uLlxuICAgICAgLy8gMy4gIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuICAgICAgLy8gICAgIGNoYXJhY3RlcjpcbiAgICAgIC8vIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sXG4gICAgICAvLyBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzQiAoXCI7XCIpIGNoYXJhY3Rlci5cbiAgICAgIC8vIC4uLlxuICAgICAgc3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc9JyArIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0uc3BsaXQoJzsnKVswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGRvY3VtZW50LmNvb2tpZSA9XG4gICAgICBrZXkgKyAnPScgKyBjb252ZXJ0ZXIud3JpdGUodmFsdWUsIGtleSkgKyBzdHJpbmdpZmllZEF0dHJpYnV0ZXMpXG4gIH1cblxuICBmdW5jdGlvbiBnZXQgKGtleSkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnIHx8IChhcmd1bWVudHMubGVuZ3RoICYmICFrZXkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBUbyBwcmV2ZW50IHRoZSBmb3IgbG9vcCBpbiB0aGUgZmlyc3QgcGxhY2UgYXNzaWduIGFuIGVtcHR5IGFycmF5XG4gICAgLy8gaW4gY2FzZSB0aGVyZSBhcmUgbm8gY29va2llcyBhdCBhbGwuXG4gICAgdmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUgPyBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsgJykgOiBbXTtcbiAgICB2YXIgamFyID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFydHMgPSBjb29raWVzW2ldLnNwbGl0KCc9Jyk7XG4gICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCc9Jyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBmb3VuZEtleSA9IGRlY29kZVVSSUNvbXBvbmVudChwYXJ0c1swXSk7XG4gICAgICAgIGphcltmb3VuZEtleV0gPSBjb252ZXJ0ZXIucmVhZCh2YWx1ZSwgZm91bmRLZXkpO1xuXG4gICAgICAgIGlmIChrZXkgPT09IGZvdW5kS2V5KSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICByZXR1cm4ga2V5ID8gamFyW2tleV0gOiBqYXJcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuY3JlYXRlKFxuICAgIHtcbiAgICAgIHNldDogc2V0LFxuICAgICAgZ2V0OiBnZXQsXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIChrZXksIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgc2V0KFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBhc3NpZ24oe30sIGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgIGV4cGlyZXM6IC0xXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB3aXRoQXR0cmlidXRlczogZnVuY3Rpb24gKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgcmV0dXJuIGluaXQodGhpcy5jb252ZXJ0ZXIsIGFzc2lnbih7fSwgdGhpcy5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzKSlcbiAgICAgIH0sXG4gICAgICB3aXRoQ29udmVydGVyOiBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gICAgICAgIHJldHVybiBpbml0KGFzc2lnbih7fSwgdGhpcy5jb252ZXJ0ZXIsIGNvbnZlcnRlciksIHRoaXMuYXR0cmlidXRlcylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUoZGVmYXVsdEF0dHJpYnV0ZXMpIH0sXG4gICAgICBjb252ZXJ0ZXI6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUoY29udmVydGVyKSB9XG4gICAgfVxuICApXG59XG5cbnZhciBhcGkgPSBpbml0KGRlZmF1bHRDb252ZXJ0ZXIsIHsgcGF0aDogJy8nIH0pO1xuLyogZXNsaW50LWVuYWJsZSBuby12YXIgKi9cblxuZXhwb3J0IGRlZmF1bHQgYXBpO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQXBwQmFyLCBCb3gsIFRvb2xiYXIsIFR5cG9ncmFwaHksIEJ1dHRvbiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IExvZ2luSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0xvZ2luJztcbmltcG9ydCBMb2dvdXRJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvTG9nb3V0JztcbmltcG9ydCB7XG4gIHNldFNob3dMb2dpbixcbiAgbG9nb3V0XG59IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL3VzZXJJbmZvU2xpY2UnO1xuaW1wb3J0IHsgdXNlQXBwRGlzcGF0Y2gsIHVzZUFwcFNlbGVjdG9yIH0gZnJvbSAnLi4vcmVkdXgvaG9va3MnO1xuaW1wb3J0IHsgTG9naW4gfSBmcm9tICcuL0xvZ2luJztcbmltcG9ydCB7IExpbmssIHVzZU5hdmlnYXRlIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IENvb2tpZXMgZnJvbSAnanMtY29va2llJztcblxuY29uc3QgTmF2QmFyID0gKCkgPT4ge1xuICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG4gIGNvbnN0IG9wZW46IGJvb2xlYW4gPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLnVzZXJJbmZvLnNob3dMb2dpbik7XG4gIGNvbnN0IGNsaXBib2FyZERhdGE6IHN0cmluZ1tdID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5jbGlwYm9hcmQuY29kZVNuaXBwZXRzKTtcbiAgY29uc3QgZGlzcGxheUxvZ2luQnV0dG9uID0gJ2F1dG8nO1xuICBjb25zdCBkaXNwbGF5TG9nb3V0QnV0dG9uID0gJ2F1dG8nO1xuXG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcbiAgY29uc3QgaGFuZGxlTG9naW5PcGVuID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNob3dMb2dpbigpKTtcbiAgICBpZiAoY2xpcGJvYXJkRGF0YS5sZW5ndGgpIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2NsaXBib2FyZERhdGEnLCBKU09OLnN0cmluZ2lmeShjbGlwYm9hcmREYXRhKSk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUxvZ291dCA9IGFzeW5jICgpID0+IHtcbiAgICBDb29raWVzLnJlbW92ZSgndXNlcm5hbWUnKTtcbiAgICBDb29raWVzLnJlbW92ZSgnY29kZScpO1xuICAgIENvb2tpZXMucmVtb3ZlKCdlbWFpbCcpO1xuICAgIENvb2tpZXMucmVtb3ZlKCdnaXRodWItYXV0aC1zZXNzaW9uJyk7XG4gICAgQ29va2llcy5yZW1vdmUoJ2dpdGh1Yi1hdXRoLXNlc3Npb24uc2lnJyk7XG4gICAgQ29va2llcy5yZW1vdmUoJ2lzTG9nZ2VkSW4nKTtcbiAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xuICAgIGF3YWl0IGF4aW9zLnBvc3QoJy9hdXRoL2xvZ291dCcpO1xuICAgIC8vIGNsZWFyIHByb2plY3RzIGFuZCB1c2VyIGluZm9ybWF0aW9uIGluIHN0YXRlXG4gICAgZGlzcGF0Y2gobG9nb3V0KCkpOyBcbiAgICBuYXZpZ2F0ZSgnLycpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPEJveCBpZD1cIm5hdmJhclwiIHN4PXt7IGZsZXhHcm93OiAxIH19PlxuICAgICAgPEFwcEJhciBwb3NpdGlvbj1cInN0YXRpY1wiPlxuICAgICAgICA8VG9vbGJhcj5cbiAgICAgICAgICA8TGluayB0bz1cIi9cIj5cbiAgICAgICAgICAgIDxpbWcgYWx0PVwibG9nb1wiIHNyYz1cIi4uL2Fzc2V0cy9sb2dvLWplc3Rlci5wbmdcIiAvPlxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgdmFyaWFudD1cImg2XCJcbiAgICAgICAgICAgIGNvbXBvbmVudD1cImRpdlwiXG4gICAgICAgICAgICBzeD17eyBmbGV4R3JvdzogMSwgbWFyZ2luTGVmdDogJzE1cHgnIH19XG4gICAgICAgICAgPjwvVHlwb2dyYXBoeT5cbiAgICAgICAgICB7c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNMb2dnZWRJbicpID8gKFxuICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJ3ZWxjb21lLXRleHRcIiBjb2xvcj1cImluaGVyaXRcIj5cbiAgICAgICAgICAgICAgV2VsY29tZSwge3Nlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXJuYW1lJyl9IVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwid2VsY29tZS10ZXh0XCIgY29sb3I9XCJpbmhlcml0XCI+XG4gICAgICAgICAgICAgIFdlbGNvbWUsIEd1ZXN0IVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPSdpbmhlcml0Jz5cbiAgICAgICAgICAgIDxMaW5rIGNsYXNzTmFtZT0nbmF2LWxpbmsnIHRvPScvY29udHJpYnV0b3JzJz5cbiAgICAgICAgICAgICAgQ29udHJpYnV0b3JzXG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAge3Nlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzTG9nZ2VkSW4nKSA/IChcbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTG9nb3V0fVxuICAgICAgICAgICAgICBzeD17eyBkaXNwbGF5OiBkaXNwbGF5TG9nb3V0QnV0dG9uIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMb2dvdXRJY29uIHN4PXt7IG1hcmdpblJpZ2h0OiAnNXB4JywgbWFyZ2luTGVmdDogJzVweCcgfX0gLz4gTG9nb3V0XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVMb2dpbk9wZW59XG4gICAgICAgICAgICAgIHN4PXt7IGRpc3BsYXk6IGRpc3BsYXlMb2dpbkJ1dHRvbiB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TG9naW5JY29uIHN4PXt7IG1hcmdpblJpZ2h0OiAnNXB4JywgbWFyZ2luTGVmdDogJzVweCcgfX0gLz5Mb2dpblxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxMb2dpbiBvcGVuPXtvcGVufSAvPlxuICAgICAgICA8L1Rvb2xiYXI+XG4gICAgICA8L0FwcEJhcj5cbiAgICA8L0JveD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5hdkJhcjtcbiIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5rVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaW5rJywgc2xvdCk7XG59XG5jb25zdCBsaW5rQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpbmsnLCBbJ3Jvb3QnLCAndW5kZXJsaW5lTm9uZScsICd1bmRlcmxpbmVIb3ZlcicsICd1bmRlcmxpbmVBbHdheXMnLCAnYnV0dG9uJywgJ2ZvY3VzVmlzaWJsZSddKTtcbmV4cG9ydCBkZWZhdWx0IGxpbmtDbGFzc2VzOyIsImltcG9ydCB7IGFscGhhLCBnZXRQYXRoIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuZXhwb3J0IGNvbnN0IGNvbG9yVHJhbnNmb3JtYXRpb25zID0ge1xuICBwcmltYXJ5OiAncHJpbWFyeS5tYWluJyxcbiAgdGV4dFByaW1hcnk6ICd0ZXh0LnByaW1hcnknLFxuICBzZWNvbmRhcnk6ICdzZWNvbmRhcnkubWFpbicsXG4gIHRleHRTZWNvbmRhcnk6ICd0ZXh0LnNlY29uZGFyeScsXG4gIGVycm9yOiAnZXJyb3IubWFpbidcbn07XG5cbmNvbnN0IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMgPSBjb2xvciA9PiB7XG4gIHJldHVybiBjb2xvclRyYW5zZm9ybWF0aW9uc1tjb2xvcl0gfHwgY29sb3I7XG59O1xuXG5jb25zdCBnZXRUZXh0RGVjb3JhdGlvbiA9ICh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IHRyYW5zZm9ybWVkQ29sb3IgPSB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzKG93bmVyU3RhdGUuY29sb3IpO1xuICBjb25zdCBjb2xvciA9IGdldFBhdGgodGhlbWUsIGBwYWxldHRlLiR7dHJhbnNmb3JtZWRDb2xvcn1gLCBmYWxzZSkgfHwgb3duZXJTdGF0ZS5jb2xvcjtcbiAgY29uc3QgY2hhbm5lbENvbG9yID0gZ2V0UGF0aCh0aGVtZSwgYHBhbGV0dGUuJHt0cmFuc2Zvcm1lZENvbG9yfUNoYW5uZWxgKTtcblxuICBpZiAoJ3ZhcnMnIGluIHRoZW1lICYmIGNoYW5uZWxDb2xvcikge1xuICAgIHJldHVybiBgcmdiYSgke2NoYW5uZWxDb2xvcn0gLyAwLjQpYDtcbiAgfVxuXG4gIHJldHVybiBhbHBoYShjb2xvciwgMC40KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldFRleHREZWNvcmF0aW9uOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcIm9uQmx1clwiLCBcIm9uRm9jdXNcIiwgXCJUeXBvZ3JhcGh5Q2xhc3Nlc1wiLCBcInVuZGVybGluZVwiLCBcInZhcmlhbnRcIiwgXCJzeFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnLi4vdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICcuLi9UeXBvZ3JhcGh5JztcbmltcG9ydCBsaW5rQ2xhc3NlcywgeyBnZXRMaW5rVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9saW5rQ2xhc3Nlcyc7XG5pbXBvcnQgZ2V0VGV4dERlY29yYXRpb24sIHsgY29sb3JUcmFuc2Zvcm1hdGlvbnMgfSBmcm9tICcuL2dldFRleHREZWNvcmF0aW9uJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb2N1c1Zpc2libGUsXG4gICAgdW5kZXJsaW5lXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgdW5kZXJsaW5lJHtjYXBpdGFsaXplKHVuZGVybGluZSl9YCwgY29tcG9uZW50ID09PSAnYnV0dG9uJyAmJiAnYnV0dG9uJywgZm9jdXNWaXNpYmxlICYmICdmb2N1c1Zpc2libGUnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldExpbmtVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgTGlua1Jvb3QgPSBzdHlsZWQoVHlwb2dyYXBoeSwge1xuICBuYW1lOiAnTXVpTGluaycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbYHVuZGVybGluZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnVuZGVybGluZSl9YF0sIG93bmVyU3RhdGUuY29tcG9uZW50ID09PSAnYnV0dG9uJyAmJiBzdHlsZXMuYnV0dG9uXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnVuZGVybGluZSA9PT0gJ25vbmUnICYmIHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnXG4gIH0sIG93bmVyU3RhdGUudW5kZXJsaW5lID09PSAnaG92ZXInICYmIHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgdGV4dERlY29yYXRpb246ICd1bmRlcmxpbmUnXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnVuZGVybGluZSA9PT0gJ2Fsd2F5cycgJiYgX2V4dGVuZHMoe1xuICAgIHRleHREZWNvcmF0aW9uOiAndW5kZXJsaW5lJ1xuICB9LCBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgIHRleHREZWNvcmF0aW9uQ29sb3I6IGdldFRleHREZWNvcmF0aW9uKHtcbiAgICAgIHRoZW1lLFxuICAgICAgb3duZXJTdGF0ZVxuICAgIH0pXG4gIH0sIHtcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIHRleHREZWNvcmF0aW9uQ29sb3I6ICdpbmhlcml0J1xuICAgIH1cbiAgfSksIG93bmVyU3RhdGUuY29tcG9uZW50ID09PSAnYnV0dG9uJyAmJiB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIC8vIFJlc2V0IGRlZmF1bHQgdmFsdWVcbiAgICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICAgIG91dGxpbmU6IDAsXG4gICAgYm9yZGVyOiAwLFxuICAgIG1hcmdpbjogMCxcbiAgICAvLyBSZW1vdmUgdGhlIG1hcmdpbiBpbiBTYWZhcmlcbiAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgcGFkZGluZzogMCxcbiAgICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gRmlyZWZveFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICBNb3pBcHBlYXJhbmNlOiAnbm9uZScsXG4gICAgLy8gUmVzZXRcbiAgICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZScsXG4gICAgLy8gUmVzZXRcbiAgICAnJjo6LW1vei1mb2N1cy1pbm5lcic6IHtcbiAgICAgIGJvcmRlclN0eWxlOiAnbm9uZScgLy8gUmVtb3ZlIEZpcmVmb3ggZG90dGVkIG91dGxpbmUuXG5cbiAgICB9LFxuICAgIFtgJi4ke2xpbmtDbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgICAgb3V0bGluZTogJ2F1dG8nXG4gICAgfVxuICB9KTtcbn0pO1xuY29uc3QgTGluayA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpbmsoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUxpbmsnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgY29tcG9uZW50ID0gJ2EnLFxuICAgIG9uQmx1cixcbiAgICBvbkZvY3VzLFxuICAgIFR5cG9ncmFwaHlDbGFzc2VzLFxuICAgIHVuZGVybGluZSA9ICdhbHdheXMnLFxuICAgIHZhcmlhbnQgPSAnaW5oZXJpdCcsXG4gICAgc3hcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IHtcbiAgICBpc0ZvY3VzVmlzaWJsZVJlZixcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICByZWY6IGZvY3VzVmlzaWJsZVJlZlxuICB9ID0gdXNlSXNGb2N1c1Zpc2libGUoKTtcbiAgY29uc3QgW2ZvY3VzVmlzaWJsZSwgc2V0Rm9jdXNWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlclJlZiA9IHVzZUZvcmtSZWYocmVmLCBmb2N1c1Zpc2libGVSZWYpO1xuXG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgaGFuZGxlQmx1clZpc2libGUoZXZlbnQpO1xuXG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZXZlbnQgPT4ge1xuICAgIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCk7XG5cbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKHRydWUpO1xuICAgIH1cblxuICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb2N1c1Zpc2libGUsXG4gICAgdW5kZXJsaW5lLFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlua1Jvb3QsIF9leHRlbmRzKHtcbiAgICBjb2xvcjogY29sb3IsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBjbGFzc2VzOiBUeXBvZ3JhcGh5Q2xhc3NlcyxcbiAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgcmVmOiBoYW5kbGVyUmVmLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgdmFyaWFudDogdmFyaWFudCxcbiAgICBzeDogWy4uLighT2JqZWN0LmtleXMoY29sb3JUcmFuc2Zvcm1hdGlvbnMpLmluY2x1ZGVzKGNvbG9yKSA/IFt7XG4gICAgICBjb2xvclxuICAgIH1dIDogW10pLCAuLi4oQXJyYXkuaXNBcnJheShzeCkgPyBzeCA6IFtzeF0pXVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBMaW5rLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgbGluay5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLmFueSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZixcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogYGNsYXNzZXNgIHByb3AgYXBwbGllZCB0byB0aGUgW2BUeXBvZ3JhcGh5YF0oL21hdGVyaWFsLXVpL2FwaS90eXBvZ3JhcGh5LykgZWxlbWVudC5cbiAgICovXG4gIFR5cG9ncmFwaHlDbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGVuIHRoZSBsaW5rIHNob3VsZCBoYXZlIGFuIHVuZGVybGluZS5cbiAgICogQGRlZmF1bHQgJ2Fsd2F5cydcbiAgICovXG4gIHVuZGVybGluZTogUHJvcFR5cGVzLm9uZU9mKFsnYWx3YXlzJywgJ2hvdmVyJywgJ25vbmUnXSksXG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIHRoZW1lIHR5cG9ncmFwaHkgc3R5bGVzLlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvZHkxJywgJ2JvZHkyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2luaGVyaXQnLCAnb3ZlcmxpbmUnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMiddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTGluazsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIExpbmssIFR5cG9ncmFwaHkgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcblxuZnVuY3Rpb24gRm9vdGVyKCkge1xuICByZXR1cm4gKFxuICAgIDxCb3hcbiAgICAgIGlkPVwiZm9vdGVyXCJcbiAgICAgIHN4PXt7XG4gICAgICAgIHB5OiAzLFxuICAgICAgICBweDogMixcbiAgICAgICAgbXQ6ICdhdXRvJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImJvZHkyXCIgY29sb3I9XCJ0ZXh0LnNlY29uZGFyeVwiIGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgIHsnQ29weXJpZ2h0IMKpICd9XG4gICAgICAgIDxMaW5rIGNvbG9yPVwiaW5oZXJpdFwiIGhyZWY9XCJodHRwczovL2plc3Rlci5zb2Z0d2FyZVwiPlxuICAgICAgICAgIGplc3Rlci5zb2Z0d2FyZVxuICAgICAgICA8L0xpbms+eycgJ31cbiAgICAgICAge25ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKX1cbiAgICAgICAgeycuJ31cbiAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICA8L0JveD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9vdGVyO1xuIiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uQ2hhbmdlXCIsIFwibWF4Um93c1wiLCBcIm1pblJvd3NcIiwgXCJzdHlsZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGZsdXNoU3luYyB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyB1bnN0YWJsZV9kZWJvdW5jZSBhcyBkZWJvdW5jZSwgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmLCB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCBhcyB1c2VFbmhhbmNlZEVmZmVjdCwgdW5zdGFibGVfb3duZXJXaW5kb3cgYXMgb3duZXJXaW5kb3cgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmZ1bmN0aW9uIGdldFN0eWxlVmFsdWUoY29tcHV0ZWRTdHlsZSwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIHBhcnNlSW50KGNvbXB1dGVkU3R5bGVbcHJvcGVydHldLCAxMCkgfHwgMDtcbn1cblxuY29uc3Qgc3R5bGVzID0ge1xuICBzaGFkb3c6IHtcbiAgICAvLyBWaXNpYmlsaXR5IG5lZWRlZCB0byBoaWRlIHRoZSBleHRyYSB0ZXh0IGFyZWEgb24gaVBhZHNcbiAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAvLyBSZW1vdmUgZnJvbSB0aGUgY29udGVudCBmbG93XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgLy8gSWdub3JlIHRoZSBzY3JvbGxiYXIgd2lkdGhcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgaGVpZ2h0OiAwLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC8vIENyZWF0ZSBhIG5ldyBsYXllciwgaW5jcmVhc2UgdGhlIGlzb2xhdGlvbiBvZiB0aGUgY29tcHV0ZWQgdmFsdWVzXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWigwKSdcbiAgfVxufTtcblxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuY29uc3QgVGV4dGFyZWFBdXRvc2l6ZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRleHRhcmVhQXV0b3NpemUocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgb25DaGFuZ2UsXG4gICAgbWF4Um93cyxcbiAgICBtaW5Sb3dzID0gMSxcbiAgICBzdHlsZSxcbiAgICB2YWx1ZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKHZhbHVlICE9IG51bGwpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihyZWYsIGlucHV0UmVmKTtcbiAgY29uc3Qgc2hhZG93UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCByZW5kZXJzID0gUmVhY3QudXNlUmVmKDApO1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKHt9KTtcbiAgY29uc3QgZ2V0VXBkYXRlZFN0YXRlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gaW5wdXRSZWYuY3VycmVudDtcbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhpbnB1dCk7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGNvbnRhaW5lcldpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGlucHV0KTsgLy8gSWYgaW5wdXQncyB3aWR0aCBpcyBzaHJ1bmsgYW5kIGl0J3Mgbm90IHZpc2libGUsIGRvbid0IHN5bmMgaGVpZ2h0LlxuXG4gICAgaWYgKGNvbXB1dGVkU3R5bGUud2lkdGggPT09ICcwcHgnKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRTaGFsbG93ID0gc2hhZG93UmVmLmN1cnJlbnQ7XG4gICAgaW5wdXRTaGFsbG93LnN0eWxlLndpZHRoID0gY29tcHV0ZWRTdHlsZS53aWR0aDtcbiAgICBpbnB1dFNoYWxsb3cudmFsdWUgPSBpbnB1dC52YWx1ZSB8fCBwcm9wcy5wbGFjZWhvbGRlciB8fCAneCc7XG5cbiAgICBpZiAoaW5wdXRTaGFsbG93LnZhbHVlLnNsaWNlKC0xKSA9PT0gJ1xcbicpIHtcbiAgICAgIC8vIENlcnRhaW4gZm9udHMgd2hpY2ggb3ZlcmZsb3cgdGhlIGxpbmUgaGVpZ2h0IHdpbGwgY2F1c2UgdGhlIHRleHRhcmVhXG4gICAgICAvLyB0byByZXBvcnQgYSBkaWZmZXJlbnQgc2Nyb2xsSGVpZ2h0IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBsYXN0IGxpbmVcbiAgICAgIC8vIGlzIGVtcHR5LiBNYWtlIGl0IG5vbi1lbXB0eSB0byBhdm9pZCB0aGlzIGlzc3VlLlxuICAgICAgaW5wdXRTaGFsbG93LnZhbHVlICs9ICcgJztcbiAgICB9XG5cbiAgICBjb25zdCBib3hTaXppbmcgPSBjb21wdXRlZFN0eWxlWydib3gtc2l6aW5nJ107XG4gICAgY29uc3QgcGFkZGluZyA9IGdldFN0eWxlVmFsdWUoY29tcHV0ZWRTdHlsZSwgJ3BhZGRpbmctYm90dG9tJykgKyBnZXRTdHlsZVZhbHVlKGNvbXB1dGVkU3R5bGUsICdwYWRkaW5nLXRvcCcpO1xuICAgIGNvbnN0IGJvcmRlciA9IGdldFN0eWxlVmFsdWUoY29tcHV0ZWRTdHlsZSwgJ2JvcmRlci1ib3R0b20td2lkdGgnKSArIGdldFN0eWxlVmFsdWUoY29tcHV0ZWRTdHlsZSwgJ2JvcmRlci10b3Atd2lkdGgnKTsgLy8gVGhlIGhlaWdodCBvZiB0aGUgaW5uZXIgY29udGVudFxuXG4gICAgY29uc3QgaW5uZXJIZWlnaHQgPSBpbnB1dFNoYWxsb3cuc2Nyb2xsSGVpZ2h0OyAvLyBNZWFzdXJlIGhlaWdodCBvZiBhIHRleHRhcmVhIHdpdGggYSBzaW5nbGUgcm93XG5cbiAgICBpbnB1dFNoYWxsb3cudmFsdWUgPSAneCc7XG4gICAgY29uc3Qgc2luZ2xlUm93SGVpZ2h0ID0gaW5wdXRTaGFsbG93LnNjcm9sbEhlaWdodDsgLy8gVGhlIGhlaWdodCBvZiB0aGUgb3V0ZXIgY29udGVudFxuXG4gICAgbGV0IG91dGVySGVpZ2h0ID0gaW5uZXJIZWlnaHQ7XG5cbiAgICBpZiAobWluUm93cykge1xuICAgICAgb3V0ZXJIZWlnaHQgPSBNYXRoLm1heChOdW1iZXIobWluUm93cykgKiBzaW5nbGVSb3dIZWlnaHQsIG91dGVySGVpZ2h0KTtcbiAgICB9XG5cbiAgICBpZiAobWF4Um93cykge1xuICAgICAgb3V0ZXJIZWlnaHQgPSBNYXRoLm1pbihOdW1iZXIobWF4Um93cykgKiBzaW5nbGVSb3dIZWlnaHQsIG91dGVySGVpZ2h0KTtcbiAgICB9XG5cbiAgICBvdXRlckhlaWdodCA9IE1hdGgubWF4KG91dGVySGVpZ2h0LCBzaW5nbGVSb3dIZWlnaHQpOyAvLyBUYWtlIHRoZSBib3ggc2l6aW5nIGludG8gYWNjb3VudCBmb3IgYXBwbHlpbmcgdGhpcyB2YWx1ZSBhcyBhIHN0eWxlLlxuXG4gICAgY29uc3Qgb3V0ZXJIZWlnaHRTdHlsZSA9IG91dGVySGVpZ2h0ICsgKGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnID8gcGFkZGluZyArIGJvcmRlciA6IDApO1xuICAgIGNvbnN0IG92ZXJmbG93ID0gTWF0aC5hYnMob3V0ZXJIZWlnaHQgLSBpbm5lckhlaWdodCkgPD0gMTtcbiAgICByZXR1cm4ge1xuICAgICAgb3V0ZXJIZWlnaHRTdHlsZSxcbiAgICAgIG92ZXJmbG93XG4gICAgfTtcbiAgfSwgW21heFJvd3MsIG1pblJvd3MsIHByb3BzLnBsYWNlaG9sZGVyXSk7XG5cbiAgY29uc3QgdXBkYXRlU3RhdGUgPSAocHJldlN0YXRlLCBuZXdTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG91dGVySGVpZ2h0U3R5bGUsXG4gICAgICBvdmVyZmxvd1xuICAgIH0gPSBuZXdTdGF0ZTsgLy8gTmVlZCBhIGxhcmdlIGVub3VnaCBkaWZmZXJlbmNlIHRvIHVwZGF0ZSB0aGUgaGVpZ2h0LlxuICAgIC8vIFRoaXMgcHJldmVudHMgaW5maW5pdGUgcmVuZGVyaW5nIGxvb3AuXG5cbiAgICBpZiAocmVuZGVycy5jdXJyZW50IDwgMjAgJiYgKG91dGVySGVpZ2h0U3R5bGUgPiAwICYmIE1hdGguYWJzKChwcmV2U3RhdGUub3V0ZXJIZWlnaHRTdHlsZSB8fCAwKSAtIG91dGVySGVpZ2h0U3R5bGUpID4gMSB8fCBwcmV2U3RhdGUub3ZlcmZsb3cgIT09IG92ZXJmbG93KSkge1xuICAgICAgcmVuZGVycy5jdXJyZW50ICs9IDE7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdmVyZmxvdyxcbiAgICAgICAgb3V0ZXJIZWlnaHRTdHlsZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHJlbmRlcnMuY3VycmVudCA9PT0gMjApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVG9vIG1hbnkgcmUtcmVuZGVycy4gVGhlIGxheW91dCBpcyB1bnN0YWJsZS4nLCAnVGV4dGFyZWFBdXRvc2l6ZSBsaW1pdHMgdGhlIG51bWJlciBvZiByZW5kZXJzIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgfTtcblxuICBjb25zdCBzeW5jSGVpZ2h0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0gZ2V0VXBkYXRlZFN0YXRlKCk7XG5cbiAgICBpZiAoaXNFbXB0eShuZXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKHByZXZTdGF0ZSwgbmV3U3RhdGUpO1xuICAgIH0pO1xuICB9LCBbZ2V0VXBkYXRlZFN0YXRlXSk7XG5cbiAgY29uc3Qgc3luY0hlaWdodFdpdGhGbHVzaFN5Y24gPSAoKSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSBnZXRVcGRhdGVkU3RhdGUoKTtcblxuICAgIGlmIChpc0VtcHR5KG5ld1N0YXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSW4gUmVhY3QgMTgsIHN0YXRlIHVwZGF0ZXMgaW4gYSBSZXNpemVPYnNlcnZlcidzIGNhbGxiYWNrIGFyZSBoYXBwZW5pbmcgYWZ0ZXIgdGhlIHBhaW50IHdoaWNoIGNhdXNlcyBmbGlja2VyaW5nXG4gICAgLy8gd2hlbiBkb2luZyBzb21lIHZpc3VhbCB1cGRhdGVzIGluIGl0LiBVc2luZyBmbHVzaFN5bmMgZW5zdXJlcyB0aGF0IHRoZSBkb20gd2lsbCBiZSBwYWludGVkIGFmdGVyIHRoZSBzdGF0ZXMgdXBkYXRlcyBoYXBwZW5cbiAgICAvLyBSZWxhdGVkIGlzc3VlIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yNDMzMVxuXG5cbiAgICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgICAgc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKHByZXZTdGF0ZSwgbmV3U3RhdGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVSZXNpemUgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICByZW5kZXJzLmN1cnJlbnQgPSAwOyAvLyBJZiB0aGUgVGV4dGFyZWFBdXRvc2l6ZSBjb21wb25lbnQgaXMgcmVwbGFjZWQgYnkgU3VzcGVuc2Ugd2l0aCBhIGZhbGxiYWNrLCB0aGUgbGFzdFxuICAgICAgLy8gUmVzaXplT2JzZXJ2ZXIncyBoYW5kbGVyIHRoYXQgcnVucyBiZWNhdXNlIG9mIHRoZSBjaGFuZ2UgaW4gdGhlIGxheW91dCBpcyB0cnlpbmcgdG9cbiAgICAgIC8vIGFjY2VzcyBhIGRvbSBub2RlIHRoYXQgaXMgbm8gbG9uZ2VyIHRoZXJlIChhcyB0aGUgZmFsbGJhY2sgY29tcG9uZW50IGlzIGJlaW5nIHNob3duIGluc3RlYWQpLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMyNjQwXG4gICAgICAvLyBUT0RPOiBBZGQgdGVzdHMgdGhhdCB3aWxsIGVuc3VyZSB0aGUgY29tcG9uZW50IGlzIG5vdCBmYWlsaW5nIHdoZW5cbiAgICAgIC8vIHJlcGxhY2VkIGJ5IFN1c3BlbnNlIHdpdGggYSBmYWxsYmFjaywgb25jZSBSZWFjdCBpcyB1cGRhdGVkIHRvIHZlcnNpb24gMThcblxuICAgICAgaWYgKGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgc3luY0hlaWdodFdpdGhGbHVzaFN5Y24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhpbnB1dFJlZi5jdXJyZW50KTtcbiAgICBjb250YWluZXJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICBsZXQgcmVzaXplT2JzZXJ2ZXI7XG5cbiAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoaGFuZGxlUmVzaXplKTtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoaW5wdXRSZWYuY3VycmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZS5jbGVhcigpO1xuICAgICAgY29udGFpbmVyV2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG5cbiAgICAgIGlmIChyZXNpemVPYnNlcnZlcikge1xuICAgICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBzeW5jSGVpZ2h0KCk7XG4gIH0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlbmRlcnMuY3VycmVudCA9IDA7XG4gIH0sIFt2YWx1ZV0pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICByZW5kZXJzLmN1cnJlbnQgPSAwO1xuXG4gICAgaWYgKCFpc0NvbnRyb2xsZWQpIHtcbiAgICAgIHN5bmNIZWlnaHQoKTtcbiAgICB9XG5cbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goXCJ0ZXh0YXJlYVwiLCBfZXh0ZW5kcyh7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgcmVmOiBoYW5kbGVSZWYgLy8gQXBwbHkgdGhlIHJvd3MgcHJvcCB0byBnZXQgYSBcImNvcnJlY3RcIiBmaXJzdCBTU1IgcGFpbnRcbiAgICAgICxcbiAgICAgIHJvd3M6IG1pblJvd3MsXG4gICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICBoZWlnaHQ6IHN0YXRlLm91dGVySGVpZ2h0U3R5bGUsXG4gICAgICAgIC8vIE5lZWQgYSBsYXJnZSBlbm91Z2ggZGlmZmVyZW5jZSB0byBhbGxvdyBzY3JvbGxpbmcuXG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgaW5maW5pdGUgcmVuZGVyaW5nIGxvb3AuXG4gICAgICAgIG92ZXJmbG93OiBzdGF0ZS5vdmVyZmxvdyA/ICdoaWRkZW4nIDogbnVsbFxuICAgICAgfSwgc3R5bGUpXG4gICAgfSwgb3RoZXIpKSwgLyojX19QVVJFX18qL19qc3goXCJ0ZXh0YXJlYVwiLCB7XG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgcmVmOiBzaGFkb3dSZWYsXG4gICAgICB0YWJJbmRleDogLTEsXG4gICAgICBzdHlsZTogX2V4dGVuZHMoe30sIHN0eWxlcy5zaGFkb3csIHN0eWxlLCB7XG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgIH0pXG4gICAgfSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUZXh0YXJlYUF1dG9zaXplLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5LlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRleHRhcmVhQXV0b3NpemU7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gIHByb3BzLFxuICBzdGF0ZXMsXG4gIG11aUZvcm1Db250cm9sXG59KSB7XG4gIHJldHVybiBzdGF0ZXMucmVkdWNlKChhY2MsIHN0YXRlKSA9PiB7XG4gICAgYWNjW3N0YXRlXSA9IHByb3BzW3N0YXRlXTtcblxuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc1tzdGF0ZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFjY1tzdGF0ZV0gPSBtdWlGb3JtQ29udHJvbFtzdGF0ZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuXG5jb25zdCBGb3JtQ29udHJvbENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCgpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBGb3JtQ29udHJvbENvbnRleHQuZGlzcGxheU5hbWUgPSAnRm9ybUNvbnRyb2xDb250ZXh0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2xDb250ZXh0OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi9Gb3JtQ29udHJvbENvbnRleHQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRm9ybUNvbnRyb2woKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KEZvcm1Db250cm9sQ29udGV4dCk7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEdsb2JhbFN0eWxlcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgc3R5bGVzLFxuICAgIGRlZmF1bHRUaGVtZSA9IHt9XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZ2xvYmFsU3R5bGVzID0gdHlwZW9mIHN0eWxlcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoZW1lSW5wdXQgPT4gc3R5bGVzKGlzRW1wdHkodGhlbWVJbnB1dCkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZUlucHV0KSA6IHN0eWxlcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEdsb2JhbCwge1xuICAgIHN0eWxlczogZ2xvYmFsU3R5bGVzXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR2xvYmFsU3R5bGVzLnByb3BUeXBlcyA9IHtcbiAgZGVmYXVsdFRoZW1lOiBQcm9wVHlwZXMub2JqZWN0LFxuICBzdHlsZXM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSlcbn0gOiB2b2lkIDA7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgR2xvYmFsU3R5bGVzIGFzIFN5c3RlbUdsb2JhbFN0eWxlcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi4vc3R5bGVzL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBHbG9iYWxTdHlsZXMocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN5c3RlbUdsb2JhbFN0eWxlcywgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGVmYXVsdFRoZW1lOiBkZWZhdWx0VGhlbWVcbiAgfSkpO1xufVxuXG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBzdHlsZXMgeW91IHdhbnQgdG8gYXBwbHkgZ2xvYmFsbHkuXG4gICAqL1xuICBzdHlsZXM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIF9fZW1vdGlvbl9zdHlsZXM6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZFxuICB9KSwgUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmJvb2xdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEdsb2JhbFN0eWxlczsiLCIvLyBTdXBwb3J0cyBkZXRlcm1pbmF0aW9uIG9mIGlzQ29udHJvbGxlZCgpLlxuLy8gQ29udHJvbGxlZCBpbnB1dCBhY2NlcHRzIGl0cyBjdXJyZW50IHZhbHVlIGFzIGEgcHJvcC5cbi8vXG4vLyBAc2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvZm9ybXMuaHRtbCNjb250cm9sbGVkLWNvbXBvbmVudHNcbi8vIEBwYXJhbSB2YWx1ZVxuLy8gQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgc3RyaW5nIChpbmNsdWRpbmcgJycpIG9yIG51bWJlciAoaW5jbHVkaW5nIHplcm8pXG5leHBvcnQgZnVuY3Rpb24gaGFzVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgIShBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApO1xufSAvLyBEZXRlcm1pbmUgaWYgZmllbGQgaXMgZW1wdHkgb3IgZmlsbGVkLlxuLy8gUmVzcG9uc2UgZGV0ZXJtaW5lcyBpZiBsYWJlbCBpcyBwcmVzZW50ZWQgYWJvdmUgZmllbGQgb3IgYXMgcGxhY2Vob2xkZXIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHBhcmFtIFNTUlxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm90IHByZXNlbnQgb3IgZW1wdHkgc3RyaW5nLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhbnkgbnVtYmVyIG9yIHN0cmluZyB3aXRoIGxlbmd0aC5cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsbGVkKG9iaiwgU1NSID0gZmFsc2UpIHtcbiAgcmV0dXJuIG9iaiAmJiAoaGFzVmFsdWUob2JqLnZhbHVlKSAmJiBvYmoudmFsdWUgIT09ICcnIHx8IFNTUiAmJiBoYXNWYWx1ZShvYmouZGVmYXVsdFZhbHVlKSAmJiBvYmouZGVmYXVsdFZhbHVlICE9PSAnJyk7XG59IC8vIERldGVybWluZSBpZiBhbiBJbnB1dCBpcyBhZG9ybmVkIG9uIHN0YXJ0LlxuLy8gSXQncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBsZWZ0IHdpdGggTFRSLlxuLy9cbi8vIEBwYXJhbSBvYmpcbi8vIEByZXR1cm5zIHtib29sZWFufSBGYWxzZSB3aGVuIG5vIGFkb3JubWVudHMuXG4vLyAgICAgICAgICAgICAgICAgICAgVHJ1ZSB3aGVuIGFkb3JuZWQgYXQgdGhlIHN0YXJ0LlxuXG5leHBvcnQgZnVuY3Rpb24gaXNBZG9ybmVkU3RhcnQob2JqKSB7XG4gIHJldHVybiBvYmouc3RhcnRBZG9ybm1lbnQ7XG59IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0QmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXRCYXNlJywgc2xvdCk7XG59XG5jb25zdCBpbnB1dEJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRCYXNlJywgWydyb290JywgJ2Zvcm1Db250cm9sJywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnYWRvcm5lZFN0YXJ0JywgJ2Fkb3JuZWRFbmQnLCAnZXJyb3InLCAnc2l6ZVNtYWxsJywgJ211bHRpbGluZScsICdjb2xvclNlY29uZGFyeScsICdmdWxsV2lkdGgnLCAnaGlkZGVuTGFiZWwnLCAncmVhZE9ubHknLCAnaW5wdXQnLCAnaW5wdXRTaXplU21hbGwnLCAnaW5wdXRNdWx0aWxpbmUnLCAnaW5wdXRUeXBlU2VhcmNoJywgJ2lucHV0QWRvcm5lZFN0YXJ0JywgJ2lucHV0QWRvcm5lZEVuZCcsICdpbnB1dEhpZGRlbkxhYmVsJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRCYXNlQ2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGFzIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgfSBmcm9tIFwiQG11aS91dGlsc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJpYS1kZXNjcmliZWRieVwiLCBcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlc1wiLCBcImVuZEFkb3JubWVudFwiLCBcImVycm9yXCIsIFwiZnVsbFdpZHRoXCIsIFwiaWRcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcImlucHV0UHJvcHNcIiwgXCJpbnB1dFJlZlwiLCBcIm1hcmdpblwiLCBcIm1heFJvd3NcIiwgXCJtaW5Sb3dzXCIsIFwibXVsdGlsaW5lXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DbGlja1wiLCBcIm9uRm9jdXNcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJyZWFkT25seVwiLCBcInJlbmRlclN1ZmZpeFwiLCBcInJvd3NcIiwgXCJzaXplXCIsIFwic3RhcnRBZG9ybm1lbnRcIiwgXCJ0eXBlXCIsIFwidmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyByZWZUeXBlLCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMsIGlzSG9zdENvbXBvbmVudCwgVGV4dGFyZWFBdXRvc2l6ZSB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi4vRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2xDb250ZXh0JztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgR2xvYmFsU3R5bGVzIGZyb20gJy4uL0dsb2JhbFN0eWxlcyc7XG5pbXBvcnQgeyBpc0ZpbGxlZCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGlucHV0QmFzZUNsYXNzZXMsIHsgZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9pbnB1dEJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3Qgcm9vdE92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHN0eWxlcy5mb3JtQ29udHJvbCwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiBzdHlsZXMuYWRvcm5lZFN0YXJ0LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiBzdHlsZXMuYWRvcm5lZEVuZCwgb3duZXJTdGF0ZS5lcnJvciAmJiBzdHlsZXMuZXJyb3IsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuc2l6ZVNtYWxsLCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBzdHlsZXMubXVsdGlsaW5lLCBvd25lclN0YXRlLmNvbG9yICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgsIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgc3R5bGVzLmhpZGRlbkxhYmVsXTtcbn07XG5leHBvcnQgY29uc3QgaW5wdXRPdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMuaW5wdXQsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuaW5wdXRTaXplU21hbGwsIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHN0eWxlcy5pbnB1dE11bHRpbGluZSwgb3duZXJTdGF0ZS50eXBlID09PSAnc2VhcmNoJyAmJiBzdHlsZXMuaW5wdXRUeXBlU2VhcmNoLCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHN0eWxlcy5pbnB1dEFkb3JuZWRTdGFydCwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYgc3R5bGVzLmlucHV0QWRvcm5lZEVuZCwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBzdHlsZXMuaW5wdXRIaWRkZW5MYWJlbF07XG59O1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBlbmRBZG9ybm1lbnQsXG4gICAgZm9jdXNlZCxcbiAgICBmb3JtQ29udHJvbCxcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWwsXG4gICAgbXVsdGlsaW5lLFxuICAgIHJlYWRPbmx5LFxuICAgIHNpemUsXG4gICAgc3RhcnRBZG9ybm1lbnQsXG4gICAgdHlwZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCBmb3JtQ29udHJvbCAmJiAnZm9ybUNvbnRyb2wnLCBzaXplID09PSAnc21hbGwnICYmICdzaXplU21hbGwnLCBtdWx0aWxpbmUgJiYgJ211bHRpbGluZScsIHN0YXJ0QWRvcm5tZW50ICYmICdhZG9ybmVkU3RhcnQnLCBlbmRBZG9ybm1lbnQgJiYgJ2Fkb3JuZWRFbmQnLCBoaWRkZW5MYWJlbCAmJiAnaGlkZGVuTGFiZWwnLCByZWFkT25seSAmJiAncmVhZE9ubHknXSxcbiAgICBpbnB1dDogWydpbnB1dCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIHR5cGUgPT09ICdzZWFyY2gnICYmICdpbnB1dFR5cGVTZWFyY2gnLCBtdWx0aWxpbmUgJiYgJ2lucHV0TXVsdGlsaW5lJywgc2l6ZSA9PT0gJ3NtYWxsJyAmJiAnaW5wdXRTaXplU21hbGwnLCBoaWRkZW5MYWJlbCAmJiAnaW5wdXRIaWRkZW5MYWJlbCcsIHN0YXJ0QWRvcm5tZW50ICYmICdpbnB1dEFkb3JuZWRTdGFydCcsIGVuZEFkb3JubWVudCAmJiAnaW5wdXRBZG9ybmVkRW5kJywgcmVhZE9ubHkgJiYgJ3JlYWRPbmx5J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRJbnB1dEJhc2VVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IElucHV0QmFzZVJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUlucHV0QmFzZScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IHJvb3RPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHt9LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxLCB7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnksXG4gIGxpbmVIZWlnaHQ6ICcxLjQzNzVlbScsXG4gIC8vIDIzcHhcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIC8vIFByZXZlbnQgcGFkZGluZyBpc3N1ZSB3aXRoIGZ1bGxXaWR0aC5cbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGN1cnNvcjogJ3RleHQnLFxuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgW2AmLiR7aW5wdXRCYXNlQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH1cbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIF9leHRlbmRzKHtcbiAgcGFkZGluZzogJzRweCAwIDVweCdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDFcbn0pLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcbmV4cG9ydCBjb25zdCBJbnB1dEJhc2VDb21wb25lbnQgPSBzdHlsZWQoJ2lucHV0Jywge1xuICBuYW1lOiAnTXVpSW5wdXRCYXNlJyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IGxpZ2h0ID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnO1xuXG4gIGNvbnN0IHBsYWNlaG9sZGVyID0gX2V4dGVuZHMoe1xuICAgIGNvbG9yOiAnY3VycmVudENvbG9yJ1xuICB9LCB0aGVtZS52YXJzID8ge1xuICAgIG9wYWNpdHk6IHRoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFBsYWNlaG9sZGVyXG4gIH0gOiB7XG4gICAgb3BhY2l0eTogbGlnaHQgPyAwLjQyIDogMC41XG4gIH0sIHtcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgIH0pXG4gIH0pO1xuXG4gIGNvbnN0IHBsYWNlaG9sZGVySGlkZGVuID0ge1xuICAgIG9wYWNpdHk6ICcwICFpbXBvcnRhbnQnXG4gIH07XG4gIGNvbnN0IHBsYWNlaG9sZGVyVmlzaWJsZSA9IHRoZW1lLnZhcnMgPyB7XG4gICAgb3BhY2l0eTogdGhlbWUudmFycy5vcGFjaXR5LmlucHV0UGxhY2Vob2xkZXJcbiAgfSA6IHtcbiAgICBvcGFjaXR5OiBsaWdodCA/IDAuNDIgOiAwLjVcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBmb250OiAnaW5oZXJpdCcsXG4gICAgbGV0dGVyU3BhY2luZzogJ2luaGVyaXQnLFxuICAgIGNvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICBwYWRkaW5nOiAnNHB4IDAgNXB4JyxcbiAgICBib3JkZXI6IDAsXG4gICAgYm94U2l6aW5nOiAnY29udGVudC1ib3gnLFxuICAgIGJhY2tncm91bmQ6ICdub25lJyxcbiAgICBoZWlnaHQ6ICcxLjQzNzVlbScsXG4gICAgLy8gUmVzZXQgMjNweHRoZSBuYXRpdmUgaW5wdXQgbGluZS1oZWlnaHRcbiAgICBtYXJnaW46IDAsXG4gICAgLy8gUmVzZXQgZm9yIFNhZmFyaVxuICAgIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgLy8gTWFrZSB0aGUgZmxleCBpdGVtIHNocmluayB3aXRoIEZpcmVmb3hcbiAgICBtaW5XaWR0aDogMCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIC8vIEZpeCBJRTExIHdpZHRoIGlzc3VlXG4gICAgYW5pbWF0aW9uTmFtZTogJ211aS1hdXRvLWZpbGwtY2FuY2VsJyxcbiAgICBhbmltYXRpb25EdXJhdGlvbjogJzEwbXMnLFxuICAgICcmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgJyY6Oi1tb3otcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAvLyBGaXJlZm94IDE5K1xuICAgICcmOi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgIC8vIElFMTFcbiAgICAnJjo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgLy8gRWRnZVxuICAgICcmOmZvY3VzJzoge1xuICAgICAgb3V0bGluZTogMFxuICAgIH0sXG4gICAgLy8gUmVzZXQgRmlyZWZveCBpbnZhbGlkIHJlcXVpcmVkIGlucHV0IHN0eWxlXG4gICAgJyY6aW52YWxpZCc6IHtcbiAgICAgIGJveFNoYWRvdzogJ25vbmUnXG4gICAgfSxcbiAgICAnJjo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbic6IHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgcGFkZGluZyB3aGVuIHR5cGU9c2VhcmNoLlxuICAgICAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnXG4gICAgfSxcbiAgICAvLyBTaG93IGFuZCBoaWRlIHRoZSBwbGFjZWhvbGRlciBsb2dpY1xuICAgIFtgbGFiZWxbZGF0YS1zaHJpbms9ZmFsc2VdICsgLiR7aW5wdXRCYXNlQ2xhc3Nlcy5mb3JtQ29udHJvbH0gJmBdOiB7XG4gICAgICAnJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgJyY6Oi1tb3otcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgIC8vIEZpcmVmb3ggMTkrXG4gICAgICAnJjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgIC8vIElFMTFcbiAgICAgICcmOjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgIC8vIEVkZ2VcbiAgICAgICcmOmZvY3VzOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlLFxuICAgICAgJyY6Zm9jdXM6Oi1tb3otcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUsXG4gICAgICAvLyBGaXJlZm94IDE5K1xuICAgICAgJyY6Zm9jdXM6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlLFxuICAgICAgLy8gSUUxMVxuICAgICAgJyY6Zm9jdXM6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSAvLyBFZGdlXG5cbiAgICB9LFxuICAgIFtgJi4ke2lucHV0QmFzZUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAvLyBSZXNldCBpT1Mgb3BhY2l0eVxuICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZCAvLyBGaXggb3BhY2l0eSBTYWZhcmkgYnVnXG5cbiAgICB9LFxuICAgICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgICBhbmltYXRpb25EdXJhdGlvbjogJzUwMDBzJyxcbiAgICAgIGFuaW1hdGlvbk5hbWU6ICdtdWktYXV0by1maWxsJ1xuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgICBwYWRkaW5nVG9wOiAxXG4gIH0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICByZXNpemU6ICdub25lJyxcbiAgICBwYWRkaW5nOiAwLFxuICAgIHBhZGRpbmdUb3A6IDBcbiAgfSwgb3duZXJTdGF0ZS50eXBlID09PSAnc2VhcmNoJyAmJiB7XG4gICAgLy8gSW1wcm92ZSB0eXBlIHNlYXJjaCBzdHlsZS5cbiAgICBNb3pBcHBlYXJhbmNlOiAndGV4dGZpZWxkJ1xuICB9KTtcbn0pO1xuXG5jb25zdCBpbnB1dEdsb2JhbFN0eWxlcyA9IC8qI19fUFVSRV9fKi9fanN4KEdsb2JhbFN0eWxlcywge1xuICBzdHlsZXM6IHtcbiAgICAnQGtleWZyYW1lcyBtdWktYXV0by1maWxsJzoge1xuICAgICAgZnJvbToge1xuICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICB9XG4gICAgfSxcbiAgICAnQGtleWZyYW1lcyBtdWktYXV0by1maWxsLWNhbmNlbCc6IHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vKipcbiAqIGBJbnB1dEJhc2VgIGNvbnRhaW5zIGFzIGZldyBzdHlsZXMgYXMgcG9zc2libGUuXG4gKiBJdCBhaW1zIHRvIGJlIGEgc2ltcGxlIGJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhbiBpbnB1dC5cbiAqIEl0IGNvbnRhaW5zIGEgbG9hZCBvZiBzdHlsZSByZXNldCBhbmQgc29tZSBzdGF0ZSBsb2dpYy5cbiAqL1xuXG5cbmNvbnN0IElucHV0QmFzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0QmFzZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpSW5wdXRCYXNlJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgYXV0b0NvbXBsZXRlLFxuICAgIGF1dG9Gb2N1cyxcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50cyA9IHt9LFxuICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzLFxuICAgIGVuZEFkb3JubWVudCxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBpZCxcbiAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgaW5wdXRQcm9wczogaW5wdXRQcm9wc1Byb3AgPSB7fSxcbiAgICBpbnB1dFJlZjogaW5wdXRSZWZQcm9wLFxuICAgIG1heFJvd3MsXG4gICAgbWluUm93cyxcbiAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICBuYW1lLFxuICAgIG9uQmx1cixcbiAgICBvbkNoYW5nZSxcbiAgICBvbkNsaWNrLFxuICAgIG9uRm9jdXMsXG4gICAgb25LZXlEb3duLFxuICAgIG9uS2V5VXAsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgcmVhZE9ubHksXG4gICAgcmVuZGVyU3VmZml4LFxuICAgIHJvd3MsXG4gICAgc3RhcnRBZG9ybm1lbnQsXG4gICAgdHlwZSA9ICd0ZXh0JyxcbiAgICB2YWx1ZTogdmFsdWVQcm9wXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCB2YWx1ZSA9IGlucHV0UHJvcHNQcm9wLnZhbHVlICE9IG51bGwgPyBpbnB1dFByb3BzUHJvcC52YWx1ZSA6IHZhbHVlUHJvcDtcbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKHZhbHVlICE9IG51bGwpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBoYW5kbGVJbnB1dFJlZldhcm5pbmcgPSBSZWFjdC51c2VDYWxsYmFjayhpbnN0YW5jZSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5ub2RlTmFtZSAhPT0gJ0lOUFVUJyAmJiAhaW5zdGFuY2UuZm9jdXMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IGhhdmUgcHJvdmlkZWQgYSBgaW5wdXRDb21wb25lbnRgIHRvIHRoZSBpbnB1dCBjb21wb25lbnQnLCAndGhhdCBkb2VzIG5vdCBjb3JyZWN0bHkgaGFuZGxlIHRoZSBgcmVmYCBwcm9wLicsICdNYWtlIHN1cmUgdGhlIGByZWZgIHByb3AgaXMgY2FsbGVkIHdpdGggYSBIVE1MSW5wdXRFbGVtZW50LiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKTtcbiAgY29uc3QgaGFuZGxlSW5wdXRQcm9wc1JlZlByb3AgPSB1c2VGb3JrUmVmKGlucHV0UHJvcHNQcm9wLnJlZiwgaGFuZGxlSW5wdXRSZWZXYXJuaW5nKTtcbiAgY29uc3QgaGFuZGxlSW5wdXRSZWZQcm9wID0gdXNlRm9ya1JlZihpbnB1dFJlZlByb3AsIGhhbmRsZUlucHV0UHJvcHNSZWZQcm9wKTtcbiAgY29uc3QgaGFuZGxlSW5wdXRSZWYgPSB1c2VGb3JrUmVmKGlucHV0UmVmLCBoYW5kbGVJbnB1dFJlZlByb3ApO1xuICBjb25zdCBbZm9jdXNlZCwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAobXVpRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgcmV0dXJuIG11aUZvcm1Db250cm9sLnJlZ2lzdGVyRWZmZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSwgW211aUZvcm1Db250cm9sXSk7XG4gIH1cblxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnaGlkZGVuTGFiZWwnLCAnc2l6ZScsICdyZXF1aXJlZCcsICdmaWxsZWQnXVxuICB9KTtcbiAgZmNzLmZvY3VzZWQgPSBtdWlGb3JtQ29udHJvbCA/IG11aUZvcm1Db250cm9sLmZvY3VzZWQgOiBmb2N1c2VkOyAvLyBUaGUgYmx1ciB3b24ndCBmaXJlIHdoZW4gdGhlIGRpc2FibGVkIHN0YXRlIGlzIHNldCBvbiBhIGZvY3VzZWQgaW5wdXQuXG4gIC8vIFdlIG5lZWQgdG8gYm9vayBrZWVwIHRoZSBmb2N1c2VkIHN0YXRlIG1hbnVhbGx5LlxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtdWlGb3JtQ29udHJvbCAmJiBkaXNhYmxlZCAmJiBmb2N1c2VkKSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcblxuICAgICAgaWYgKG9uQmx1cikge1xuICAgICAgICBvbkJsdXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFttdWlGb3JtQ29udHJvbCwgZGlzYWJsZWQsIGZvY3VzZWQsIG9uQmx1cl0pO1xuICBjb25zdCBvbkZpbGxlZCA9IG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRmlsbGVkO1xuICBjb25zdCBvbkVtcHR5ID0gbXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25FbXB0eTtcbiAgY29uc3QgY2hlY2tEaXJ0eSA9IFJlYWN0LnVzZUNhbGxiYWNrKG9iaiA9PiB7XG4gICAgaWYgKGlzRmlsbGVkKG9iaikpIHtcbiAgICAgIGlmIChvbkZpbGxlZCkge1xuICAgICAgICBvbkZpbGxlZCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob25FbXB0eSkge1xuICAgICAgb25FbXB0eSgpO1xuICAgIH1cbiAgfSwgW29uRmlsbGVkLCBvbkVtcHR5XSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNDb250cm9sbGVkKSB7XG4gICAgICBjaGVja0RpcnR5KHtcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW3ZhbHVlLCBjaGVja0RpcnR5LCBpc0NvbnRyb2xsZWRdKTtcblxuICBjb25zdCBoYW5kbGVGb2N1cyA9IGV2ZW50ID0+IHtcbiAgICAvLyBGaXggYSBidWcgd2l0aCBJRTExIHdoZXJlIHRoZSBmb2N1cy9ibHVyIGV2ZW50cyBhcmUgdHJpZ2dlcmVkXG4gICAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICBpZiAoZmNzLmRpc2FibGVkKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlucHV0UHJvcHNQcm9wLm9uRm9jdXMpIHtcbiAgICAgIGlucHV0UHJvcHNQcm9wLm9uRm9jdXMoZXZlbnQpO1xuICAgIH1cblxuICAgIGlmIChtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkZvY3VzKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkZvY3VzKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0Rm9jdXNlZCh0cnVlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cblxuICAgIGlmIChpbnB1dFByb3BzUHJvcC5vbkJsdXIpIHtcbiAgICAgIGlucHV0UHJvcHNQcm9wLm9uQmx1cihldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uQmx1cikge1xuICAgICAgbXVpRm9ybUNvbnRyb2wub25CbHVyKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChldmVudCwgLi4uYXJncykgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0IHx8IGlucHV0UmVmLmN1cnJlbnQ7XG5cbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IEV4cGVjdGVkIHZhbGlkIGlucHV0IHRhcmdldC4gRGlkIHlvdSB1c2UgYSBjdXN0b20gXFxgaW5wdXRDb21wb25lbnRcXGAgYW5kIGZvcmdldCB0byBmb3J3YXJkIHJlZnM/IFNlZSBodHRwczovL211aS5jb20vci9pbnB1dC1jb21wb25lbnQtcmVmLWludGVyZmFjZSBmb3IgbW9yZSBpbmZvLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDEpKTtcbiAgICAgIH1cblxuICAgICAgY2hlY2tEaXJ0eSh7XG4gICAgICAgIHZhbHVlOiBlbGVtZW50LnZhbHVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25DaGFuZ2UpIHtcbiAgICAgIGlucHV0UHJvcHNQcm9wLm9uQ2hhbmdlKGV2ZW50LCAuLi5hcmdzKTtcbiAgICB9IC8vIFBlcmZvcm0gaW4gdGhlIHdpbGxVcGRhdGVcblxuXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCwgLi4uYXJncyk7XG4gICAgfVxuICB9OyAvLyBDaGVjayB0aGUgaW5wdXQgc3RhdGUgb24gbW91bnQsIGluIGNhc2UgaXQgd2FzIGZpbGxlZCBieSB0aGUgdXNlclxuICAvLyBvciBhdXRvIGZpbGxlZCBieSB0aGUgYnJvd3NlciBiZWZvcmUgdGhlIGh5ZHJhdGlvbiAoZm9yIFNTUikuXG5cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNoZWNrRGlydHkoaW5wdXRSZWYuY3VycmVudCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gZXZlbnQgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ICYmIGV2ZW50LmN1cnJlbnRUYXJnZXQgPT09IGV2ZW50LnRhcmdldCkge1xuICAgICAgaW5wdXRSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IElucHV0Q29tcG9uZW50ID0gaW5wdXRDb21wb25lbnQ7XG4gIGxldCBpbnB1dFByb3BzID0gaW5wdXRQcm9wc1Byb3A7XG5cbiAgaWYgKG11bHRpbGluZSAmJiBJbnB1dENvbXBvbmVudCA9PT0gJ2lucHV0Jykge1xuICAgIGlmIChyb3dzKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAobWluUm93cyB8fCBtYXhSb3dzKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdNVUk6IFlvdSBjYW4gbm90IHVzZSB0aGUgYG1pblJvd3NgIG9yIGBtYXhSb3dzYCBwcm9wcyB3aGVuIHRoZSBpbnB1dCBgcm93c2AgcHJvcCBpcyBzZXQuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICBtaW5Sb3dzOiByb3dzLFxuICAgICAgICBtYXhSb3dzOiByb3dzXG4gICAgICB9LCBpbnB1dFByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICBtYXhSb3dzLFxuICAgICAgICBtaW5Sb3dzXG4gICAgICB9LCBpbnB1dFByb3BzKTtcbiAgICB9XG5cbiAgICBJbnB1dENvbXBvbmVudCA9IFRleHRhcmVhQXV0b3NpemU7XG4gIH1cblxuICBjb25zdCBoYW5kbGVBdXRvRmlsbCA9IGV2ZW50ID0+IHtcbiAgICAvLyBQcm92aWRlIGEgZmFrZSB2YWx1ZSBhcyBDaHJvbWUgbWlnaHQgbm90IGxldCB5b3UgYWNjZXNzIGl0IGZvciBzZWN1cml0eSByZWFzb25zLlxuICAgIGNoZWNrRGlydHkoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ211aS1hdXRvLWZpbGwtY2FuY2VsJyA/IGlucHV0UmVmLmN1cnJlbnQgOiB7XG4gICAgICB2YWx1ZTogJ3gnXG4gICAgfSk7XG4gIH07XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobXVpRm9ybUNvbnRyb2wpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLnNldEFkb3JuZWRTdGFydChCb29sZWFuKHN0YXJ0QWRvcm5tZW50KSk7XG4gICAgfVxuICB9LCBbbXVpRm9ybUNvbnRyb2wsIHN0YXJ0QWRvcm5tZW50XSk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZW5kQWRvcm5tZW50LFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbDogZmNzLmhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgUm9vdCA9IGNvbXBvbmVudHMuUm9vdCB8fCBJbnB1dEJhc2VSb290O1xuICBjb25zdCByb290UHJvcHMgPSBjb21wb25lbnRzUHJvcHMucm9vdCB8fCB7fTtcbiAgY29uc3QgSW5wdXQgPSBjb21wb25lbnRzLklucHV0IHx8IElucHV0QmFzZUNvbXBvbmVudDtcbiAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHt9LCBpbnB1dFByb3BzLCBjb21wb25lbnRzUHJvcHMuaW5wdXQpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFshZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlcyAmJiBpbnB1dEdsb2JhbFN0eWxlcywgLyojX19QVVJFX18qL19qc3hzKFJvb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdCkgJiYge1xuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RQcm9wcy5vd25lclN0YXRlKVxuICAgIH0sIHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgcm9vdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lKSxcbiAgICAgIGNoaWxkcmVuOiBbc3RhcnRBZG9ybm1lbnQsIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KElucHV0LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBmY3MuZXJyb3IsXG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgICAgICBhdXRvQ29tcGxldGU6IGF1dG9Db21wbGV0ZSxcbiAgICAgICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBvbkFuaW1hdGlvblN0YXJ0OiBoYW5kbGVBdXRvRmlsbCxcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgICAgICByZWFkT25seTogcmVhZE9ubHksXG4gICAgICAgICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZCxcbiAgICAgICAgICByb3dzOiByb3dzLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBvbktleURvd246IG9uS2V5RG93bixcbiAgICAgICAgICBvbktleVVwOiBvbktleVVwLFxuICAgICAgICAgIHR5cGU6IHR5cGVcbiAgICAgICAgfSwgaW5wdXRQcm9wcywgIWlzSG9zdENvbXBvbmVudChJbnB1dCkgJiYge1xuICAgICAgICAgIGFzOiBJbnB1dENvbXBvbmVudCxcbiAgICAgICAgICBvd25lclN0YXRlOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZSwgaW5wdXRQcm9wcy5vd25lclN0YXRlKVxuICAgICAgICB9LCB7XG4gICAgICAgICAgcmVmOiBoYW5kbGVJbnB1dFJlZixcbiAgICAgICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5pbnB1dCwgaW5wdXRQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICAgICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzXG4gICAgICAgIH0pKVxuICAgICAgfSksIGVuZEFkb3JubWVudCwgcmVuZGVyU3VmZml4ID8gcmVuZGVyU3VmZml4KF9leHRlbmRzKHt9LCBmY3MsIHtcbiAgICAgICAgc3RhcnRBZG9ybm1lbnRcbiAgICAgIH0pKSA6IG51bGxdXG4gICAgfSkpXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXRCYXNlLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICAnYXJpYS1kZXNjcmliZWRieSc6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jYWRkaW5nLW5ldy1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBJbnB1dEJhc2UuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgSW5wdXQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBHbG9iYWxTdHlsZXMgZm9yIHRoZSBhdXRvLWZpbGwga2V5ZnJhbWVzIHdpbGwgbm90IGJlIGluamVjdGVkL3JlbW92ZWQgb24gbW91bnQvdW5tb3VudC4gTWFrZSBzdXJlIHRvIGluamVjdCB0aGVtIGF0IHRoZSB0b3Agb2YgeW91ciBhcHBsaWNhdGlvbi5cbiAgICogVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgdG8gaGVscCB3aXRoIGJvb3N0aW5nIHRoZSBpbml0aWFsIHJlbmRlcmluZyBwZXJmb3JtYW5jZSBpZiB5b3UgYXJlIGxvYWRpbmcgYSBiaWcgYW1vdW50IG9mIElucHV0IGNvbXBvbmVudHMgYXQgb25jZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbnB1dCdcbiAgICovXG4gIGlucHV0Q29tcG9uZW50OiBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZixcblxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcblxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGBpbnB1dGAgaXMgYmx1cnJlZC5cbiAgICpcbiAgICogTm90aWNlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IChldmVudCkgbWlnaHQgYmUgdW5kZWZpbmVkLlxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZW5kZXJTdWZmaXg6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IElucHV0QmFzZTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dCcsIHNsb3QpO1xufVxuXG5jb25zdCBpbnB1dENsYXNzZXMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRCYXNlQ2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXQnLCBbJ3Jvb3QnLCAndW5kZXJsaW5lJywgJ2lucHV0J10pKTtcblxuZXhwb3J0IGRlZmF1bHQgaW5wdXRDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkaXNhYmxlVW5kZXJsaW5lXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImZ1bGxXaWR0aFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwibXVsdGlsaW5lXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyByZWZUeXBlLCBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBJbnB1dEJhc2UgZnJvbSAnLi4vSW5wdXRCYXNlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgaW5wdXRDbGFzc2VzLCB7IGdldElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9pbnB1dENsYXNzZXMnO1xuaW1wb3J0IHsgcm9vdE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlciwgaW5wdXRPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyLCBJbnB1dEJhc2VSb290LCBJbnB1dEJhc2VDb21wb25lbnQgYXMgSW5wdXRCYXNlSW5wdXQgfSBmcm9tICcuLi9JbnB1dEJhc2UvSW5wdXRCYXNlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlVW5kZXJsaW5lICYmICd1bmRlcmxpbmUnXSxcbiAgICBpbnB1dDogWydpbnB1dCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRJbnB1dFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5cbmNvbnN0IElucHV0Um9vdCA9IHN0eWxlZChJbnB1dEJhc2VSb290LCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlJbnB1dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gWy4uLmlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlcihwcm9wcywgc3R5bGVzKSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiBzdHlsZXMudW5kZXJsaW5lXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGxldCBib3R0b21MaW5lQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuNDIpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknO1xuXG4gIGlmICh0aGVtZS52YXJzKSB7XG4gICAgYm90dG9tTGluZUNvbG9yID0gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gJHt0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRVbmRlcmxpbmV9KWA7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gIH0sIG93bmVyU3RhdGUuZm9ybUNvbnRyb2wgJiYge1xuICAgICdsYWJlbCArICYnOiB7XG4gICAgICBtYXJnaW5Ub3A6IDE2XG4gICAgfVxuICB9LCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHtcbiAgICAnJjphZnRlcic6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW59YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgwKScsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cblxuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRDbGFzc2VzLmZvY3VzZWR9OmFmdGVyYF06IHtcbiAgICAgIC8vIHRyYW5zbGF0ZVgoMCkgaXMgYSB3b3JrYXJvdW5kIGZvciBTYWZhcmkgdHJhbnNmb3JtIHNjYWxlIGJ1Z1xuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMxNzY2XG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMSkgdHJhbnNsYXRlWCgwKSdcbiAgICB9LFxuICAgIFtgJi4ke2lucHV0Q2xhc3Nlcy5lcnJvcn06YWZ0ZXJgXToge1xuICAgICAgYm9yZGVyQm90dG9tQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW4sXG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMSknIC8vIGVycm9yIGlzIGFsd2F5cyB1bmRlcmxpbmVkIGluIHJlZFxuXG4gICAgfSxcbiAgICAnJjpiZWZvcmUnOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHtib3R0b21MaW5lQ29sb3J9YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXFxcXDAwYTBcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3JkZXItYm90dG9tLWNvbG9yJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuXG4gICAgfSxcbiAgICBbYCY6aG92ZXI6bm90KC4ke2lucHV0Q2xhc3Nlcy5kaXNhYmxlZH0pOmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnl9YCxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke2JvdHRvbUxpbmVDb2xvcn1gXG4gICAgICB9XG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZGlzYWJsZWR9OmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b21TdHlsZTogJ2RvdHRlZCdcbiAgICB9XG4gIH0pO1xufSk7XG5jb25zdCBJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlJbnB1dCcsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSh7fSk7XG5jb25zdCBJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlJbnB1dCdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGRpc2FibGVVbmRlcmxpbmUsXG4gICAgY29tcG9uZW50cyA9IHt9LFxuICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzUHJvcCxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgdHlwZSA9ICd0ZXh0J1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IHtcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH07XG4gIGNvbnN0IGlucHV0Q29tcG9uZW50c1Byb3BzID0ge1xuICAgIHJvb3Q6IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNvbXBvbmVudHNQcm9wcyA9IGNvbXBvbmVudHNQcm9wc1Byb3AgPyBkZWVwbWVyZ2UoY29tcG9uZW50c1Byb3BzUHJvcCwgaW5wdXRDb21wb25lbnRzUHJvcHMpIDogaW5wdXRDb21wb25lbnRzUHJvcHM7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBjb21wb25lbnRzOiBfZXh0ZW5kcyh7XG4gICAgICBSb290OiBJbnB1dFJvb3QsXG4gICAgICBJbnB1dDogSW5wdXRJbnB1dFxuICAgIH0sIGNvbXBvbmVudHMpLFxuICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50OiBpbnB1dENvbXBvbmVudCxcbiAgICBtdWx0aWxpbmU6IG11bHRpbGluZSxcbiAgICByZWY6IHJlZixcbiAgICB0eXBlOiB0eXBlXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IElucHV0LnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNhZGRpbmctbmV3LWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIElucHV0QmFzZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgSW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBJbnB1dC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgbm90IGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKi9cbiAgZGlzYWJsZVVuZGVybGluZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcblxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBJbnB1dDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGaWxsZWRJbnB1dCcsIHNsb3QpO1xufVxuXG5jb25zdCBmaWxsZWRJbnB1dENsYXNzZXMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRCYXNlQ2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRmlsbGVkSW5wdXQnLCBbJ3Jvb3QnLCAndW5kZXJsaW5lJywgJ2lucHV0J10pKTtcblxuZXhwb3J0IGRlZmF1bHQgZmlsbGVkSW5wdXRDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkaXNhYmxlVW5kZXJsaW5lXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImZ1bGxXaWR0aFwiLCBcImhpZGRlbkxhYmVsXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJtdWx0aWxpbmVcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVmVHlwZSwgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IElucHV0QmFzZSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBmaWxsZWRJbnB1dENsYXNzZXMsIHsgZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2ZpbGxlZElucHV0Q2xhc3Nlcyc7XG5pbXBvcnQgeyByb290T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyLCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIsIElucHV0QmFzZVJvb3QsIElucHV0QmFzZUNvbXBvbmVudCBhcyBJbnB1dEJhc2VJbnB1dCB9IGZyb20gJy4uL0lucHV0QmFzZS9JbnB1dEJhc2UnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVVuZGVybGluZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVVbmRlcmxpbmUgJiYgJ3VuZGVybGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcblxuY29uc3QgRmlsbGVkSW5wdXRSb290ID0gc3R5bGVkKElucHV0QmFzZVJvb3QsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUZpbGxlZElucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbLi4uaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCBzdHlsZXMpLCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHN0eWxlcy51bmRlcmxpbmVdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3BhbGV0dGU7XG5cbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGNvbnN0IGJvdHRvbUxpbmVDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC40MiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSc7XG4gIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC4wNiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOSknO1xuICBjb25zdCBob3ZlckJhY2tncm91bmQgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuMDkpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTMpJztcbiAgY29uc3QgZGlzYWJsZWRCYWNrZ3JvdW5kID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjEyKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSc7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmJnIDogYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdiYWNrZ3JvdW5kLWNvbG9yJywge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgfSksXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuaG92ZXJCZyA6IGhvdmVyQmFja2dyb3VuZCxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvclxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvclxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuZGlzYWJsZWRCZyA6IGRpc2FibGVkQmFja2dyb3VuZFxuICAgIH1cbiAgfSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiB7XG4gICAgJyY6YWZ0ZXInOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsoX3BhbGV0dGUgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yIHx8ICdwcmltYXJ5J10pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZS5tYWlufWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMCknLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG5cbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5mb2N1c2VkfTphZnRlcmBdOiB7XG4gICAgICAvLyB0cmFuc2xhdGVYKDApIGlzIGEgd29ya2Fyb3VuZCBmb3IgU2FmYXJpIHRyYW5zZm9ybSBzY2FsZSBidWdcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8zMTc2NlxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCknXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZXJyb3J9OmFmdGVyYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDEpJyAvLyBlcnJvciBpcyBhbHdheXMgdW5kZXJsaW5lZCBpbiByZWRcblxuICAgIH0sXG4gICAgJyY6YmVmb3JlJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7dGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvICR7dGhlbWUudmFycy5vcGFjaXR5LmlucHV0VW5kZXJsaW5lfSlgIDogYm90dG9tTGluZUNvbG9yfWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlxcXFwwMGEwXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYm9yZGVyLWJvdHRvbS1jb2xvcicsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXJcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cblxuICAgIH0sXG4gICAgW2AmOmhvdmVyOm5vdCguJHtmaWxsZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9KTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5fWBcbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH06YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbVN0eWxlOiAnZG90dGVkJ1xuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ0xlZnQ6IDEyXG4gIH0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nUmlnaHQ6IDEyXG4gIH0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIF9leHRlbmRzKHtcbiAgICBwYWRkaW5nOiAnMjVweCAxMnB4IDhweCdcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgICBwYWRkaW5nVG9wOiAyMSxcbiAgICBwYWRkaW5nQm90dG9tOiA0XG4gIH0sIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYge1xuICAgIHBhZGRpbmdUb3A6IDE2LFxuICAgIHBhZGRpbmdCb3R0b206IDE3XG4gIH0pKTtcbn0pO1xuY29uc3QgRmlsbGVkSW5wdXRJbnB1dCA9IHN0eWxlZChJbnB1dEJhc2VJbnB1dCwge1xuICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcGFkZGluZ1RvcDogMjUsXG4gIHBhZGRpbmdSaWdodDogMTIsXG4gIHBhZGRpbmdCb3R0b206IDgsXG4gIHBhZGRpbmdMZWZ0OiAxMlxufSwgIXRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIFdlYmtpdEJveFNoYWRvdzogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICBXZWJraXRUZXh0RmlsbENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGNhcmV0Q29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ2luaGVyaXQnLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAnaW5oZXJpdCdcbiAgfVxufSwgdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ2luaGVyaXQnLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAnaW5oZXJpdCdcbiAgfSxcbiAgW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IoJ2RhcmsnKV06IHtcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgV2Via2l0Qm94U2hhZG93OiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAnI2ZmZicsXG4gICAgICBjYXJldENvbG9yOiAnI2ZmZidcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDIxLFxuICBwYWRkaW5nQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHtcbiAgcGFkZGluZ1RvcDogMTYsXG4gIHBhZGRpbmdCb3R0b206IDE3XG59LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiB7XG4gIHBhZGRpbmdUb3A6IDAsXG4gIHBhZGRpbmdCb3R0b206IDAsXG4gIHBhZGRpbmdMZWZ0OiAwLFxuICBwYWRkaW5nUmlnaHQ6IDBcbn0sIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYge1xuICBwYWRkaW5nTGVmdDogMFxufSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICBwYWRkaW5nUmlnaHQ6IDBcbn0sIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZ1RvcDogOCxcbiAgcGFkZGluZ0JvdHRvbTogOVxufSkpO1xuY29uc3QgRmlsbGVkSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGaWxsZWRJbnB1dChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjb21wb25lbnRzID0ge30sXG4gICAgY29tcG9uZW50c1Byb3BzOiBjb21wb25lbnRzUHJvcHNQcm9wLFxuICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgIC8vIGRlY2xhcmUgaGVyZSB0byBwcmV2ZW50IHNwcmVhZGluZyB0byBET01cbiAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgdHlwZSA9ICd0ZXh0J1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudCxcbiAgICBtdWx0aWxpbmUsXG4gICAgdHlwZVxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcyA9IHtcbiAgICByb290OiB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY29tcG9uZW50c1Byb3BzID0gY29tcG9uZW50c1Byb3BzUHJvcCA/IGRlZXBtZXJnZShjb21wb25lbnRzUHJvcHNQcm9wLCBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcykgOiBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0QmFzZSwgX2V4dGVuZHMoe1xuICAgIGNvbXBvbmVudHM6IF9leHRlbmRzKHtcbiAgICAgIFJvb3Q6IEZpbGxlZElucHV0Um9vdCxcbiAgICAgIElucHV0OiBGaWxsZWRJbnB1dElucHV0XG4gICAgfSwgY29tcG9uZW50cyksXG4gICAgY29tcG9uZW50c1Byb3BzOiBjb21wb25lbnRzUHJvcHMsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQ6IGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRmlsbGVkSW5wdXQucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2FkZGluZy1uZXctY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgSW5wdXRCYXNlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcblxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIElucHV0LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IHdpbGwgbm90IGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKi9cbiAgZGlzYWJsZVVuZGVybGluZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGhpZGRlbi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGluY3JlYXNlIGRlbnNpdHkgZm9yIGEgYEZpbGxlZElucHV0YC5cbiAgICogQmUgc3VyZSB0byBhZGQgYGFyaWEtbGFiZWxgIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRkZW5MYWJlbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcblxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuRmlsbGVkSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBGaWxsZWRJbnB1dDsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuXG52YXIgX3NwYW47XG5cbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImxhYmVsXCIsIFwibm90Y2hlZFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IE5vdGNoZWRPdXRsaW5lUm9vdCA9IHN0eWxlZCgnZmllbGRzZXQnKSh7XG4gIHRleHRBbGlnbjogJ2xlZnQnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgYm90dG9tOiAwLFxuICByaWdodDogMCxcbiAgdG9wOiAtNSxcbiAgbGVmdDogMCxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAnMCA4cHgnLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIGJvcmRlclJhZGl1czogJ2luaGVyaXQnLFxuICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgYm9yZGVyV2lkdGg6IDEsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgbWluV2lkdGg6ICcwJSdcbn0pO1xuY29uc3QgTm90Y2hlZE91dGxpbmVMZWdlbmQgPSBzdHlsZWQoJ2xlZ2VuZCcpKCh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGZsb2F0OiAndW5zZXQnLFxuICAvLyBGaXggY29uZmxpY3Qgd2l0aCBib290c3RyYXBcbiAgd2lkdGg6ICdhdXRvJyxcbiAgLy8gRml4IGNvbmZsaWN0IHdpdGggYm9vdHN0cmFwXG4gIG92ZXJmbG93OiAnaGlkZGVuJ1xufSwgIW93bmVyU3RhdGUud2l0aExhYmVsICYmIHtcbiAgcGFkZGluZzogMCxcbiAgbGluZUhlaWdodDogJzExcHgnLFxuICAvLyBzeW5jIHdpdGggYGhlaWdodGAgaW4gYGxlZ2VuZGAgc3R5bGVzXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDE1MCxcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gIH0pXG59LCBvd25lclN0YXRlLndpdGhMYWJlbCAmJiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIC8vIEZpeCBjb25mbGljdCB3aXRoIG5vcm1hbGl6ZS5jc3MgYW5kIHNhbml0aXplLmNzc1xuICBwYWRkaW5nOiAwLFxuICBoZWlnaHQ6IDExLFxuICAvLyBzeW5jIHdpdGggYGxpbmVIZWlnaHRgIGluIGBsZWdlbmRgIHN0eWxlc1xuICBmb250U2l6ZTogJzAuNzVlbScsXG4gIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICBtYXhXaWR0aDogMC4wMSxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdtYXgtd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDUwLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgfSksXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAnJiA+IHNwYW4nOiB7XG4gICAgcGFkZGluZ0xlZnQ6IDUsXG4gICAgcGFkZGluZ1JpZ2h0OiA1LFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIG9wYWNpdHk6IDAsXG4gICAgdmlzaWJpbGl0eTogJ3Zpc2libGUnXG4gIH1cbn0sIG93bmVyU3RhdGUubm90Y2hlZCAmJiB7XG4gIG1heFdpZHRoOiAnMTAwJScsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnbWF4LXdpZHRoJywge1xuICAgIGR1cmF0aW9uOiAxMDAsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dCxcbiAgICBkZWxheTogNTBcbiAgfSlcbn0pKSk7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTm90Y2hlZE91dGxpbmUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBsYWJlbCxcbiAgICBub3RjaGVkXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCB3aXRoTGFiZWwgPSBsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9PSAnJztcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgbm90Y2hlZCxcbiAgICB3aXRoTGFiZWxcbiAgfSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE5vdGNoZWRPdXRsaW5lUm9vdCwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KE5vdGNoZWRPdXRsaW5lTGVnZW5kLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2hpbGRyZW46IHdpdGhMYWJlbCA/IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBsYWJlbFxuICAgICAgfSkgOiAvLyBub3RyYW5zbGF0ZSBuZWVkZWQgd2hpbGUgR29vZ2xlIFRyYW5zbGF0ZSB3aWxsIG5vdCBmaXggemVyby13aWR0aCBzcGFjZSBpc3N1ZVxuICAgICAgX3NwYW4gfHwgKF9zcGFuID0gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcIm5vdHJhbnNsYXRlXCIsXG4gICAgICAgIGNoaWxkcmVuOiBcIlxcdTIwMEJcIlxuICAgICAgfSkpXG4gICAgfSlcbiAgfSkpO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTm90Y2hlZE91dGxpbmUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBsYWJlbC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgb3V0bGluZSBpcyBub3RjaGVkIHRvIGFjY29tbW9kYXRlIHRoZSBsYWJlbC5cbiAgICovXG4gIG5vdGNoZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgaW5wdXRCYXNlQ2xhc3NlcyB9IGZyb20gJy4uL0lucHV0QmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpT3V0bGluZWRJbnB1dCcsIHNsb3QpO1xufVxuXG5jb25zdCBvdXRsaW5lZElucHV0Q2xhc3NlcyA9IF9leHRlbmRzKHt9LCBpbnB1dEJhc2VDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlPdXRsaW5lZElucHV0JywgWydyb290JywgJ25vdGNoZWRPdXRsaW5lJywgJ2lucHV0J10pKTtcblxuZXhwb3J0IGRlZmF1bHQgb3V0bGluZWRJbnB1dENsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNvbXBvbmVudHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcImxhYmVsXCIsIFwibXVsdGlsaW5lXCIsIFwibm90Y2hlZFwiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgcmVmVHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IE5vdGNoZWRPdXRsaW5lIGZyb20gJy4vTm90Y2hlZE91dGxpbmUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBvdXRsaW5lZElucHV0Q2xhc3NlcywgeyBnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9vdXRsaW5lZElucHV0Q2xhc3Nlcyc7XG5pbXBvcnQgSW5wdXRCYXNlLCB7IHJvb3RPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIsIGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlciwgSW5wdXRCYXNlUm9vdCwgSW5wdXRCYXNlQ29tcG9uZW50IGFzIElucHV0QmFzZUlucHV0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL0lucHV0QmFzZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgbm90Y2hlZE91dGxpbmU6IFsnbm90Y2hlZE91dGxpbmUnXSxcbiAgICBpbnB1dDogWydpbnB1dCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcblxuY29uc3QgT3V0bGluZWRJbnB1dFJvb3QgPSBzdHlsZWQoSW5wdXRCYXNlUm9vdCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpT3V0bGluZWRJbnB1dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgYm9yZGVyQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAncmdiYSgwLCAwLCAwLCAwLjIzKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzKSc7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIFtgJjpob3ZlciAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeVxuICAgIH0sXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBbYCY6aG92ZXIgLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjIzKWAgOiBib3JkZXJDb2xvclxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZm9jdXNlZH0gLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgIGJvcmRlckNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLFxuICAgICAgYm9yZGVyV2lkdGg6IDJcbiAgICB9LFxuICAgIFtgJi4ke291dGxpbmVkSW5wdXRDbGFzc2VzLmVycm9yfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgICB9LFxuICAgIFtgJi4ke291dGxpbmVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ0xlZnQ6IDE0XG4gIH0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nUmlnaHQ6IDE0XG4gIH0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIF9leHRlbmRzKHtcbiAgICBwYWRkaW5nOiAnMTYuNXB4IDE0cHgnXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZzogJzguNXB4IDE0cHgnXG4gIH0pKTtcbn0pO1xuY29uc3QgTm90Y2hlZE91dGxpbmVSb290ID0gc3R5bGVkKE5vdGNoZWRPdXRsaW5lLCB7XG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ05vdGNoZWRPdXRsaW5lJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubm90Y2hlZE91dGxpbmVcbn0pKCh7XG4gIHRoZW1lXG59KSA9PiB7XG4gIGNvbnN0IGJvcmRlckNvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gJ3JnYmEoMCwgMCwgMCwgMC4yMyknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMyknO1xuICByZXR1cm4ge1xuICAgIGJvcmRlckNvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gMC4yMylgIDogYm9yZGVyQ29sb3JcbiAgfTtcbn0pO1xuY29uc3QgT3V0bGluZWRJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmc6ICcxNi41cHggMTRweCdcbn0sICF0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBXZWJraXRCb3hTaGFkb3c6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgV2Via2l0VGV4dEZpbGxDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBjYXJldENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG4gIH1cbn0sIHRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG4gIH0sXG4gIFt0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKCdkYXJrJyldOiB7XG4gICAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICAgIFdlYmtpdEJveFNoYWRvdzogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjogJyNmZmYnLFxuICAgICAgY2FyZXRDb2xvcjogJyNmZmYnXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nOiAnOC41cHggMTRweCdcbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgcGFkZGluZzogMFxufSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAwXG59LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdSaWdodDogMFxufSkpO1xuY29uc3QgT3V0bGluZWRJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE91dGxpbmVkSW5wdXQoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfUmVhY3QkRnJhZ21lbnQ7XG5cbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpT3V0bGluZWRJbnB1dCdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgbGFiZWwsXG4gICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgbm90Y2hlZCxcbiAgICB0eXBlID0gJ3RleHQnXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydyZXF1aXJlZCddXG4gIH0pO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcjogZmNzLmNvbG9yIHx8ICdwcmltYXJ5JyxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbDogZmNzLmhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICB0eXBlXG4gIH0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBjb21wb25lbnRzOiBfZXh0ZW5kcyh7XG4gICAgICBSb290OiBPdXRsaW5lZElucHV0Um9vdCxcbiAgICAgIElucHV0OiBPdXRsaW5lZElucHV0SW5wdXRcbiAgICB9LCBjb21wb25lbnRzKSxcbiAgICByZW5kZXJTdWZmaXg6IHN0YXRlID0+IC8qI19fUFVSRV9fKi9fanN4KE5vdGNoZWRPdXRsaW5lUm9vdCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5ub3RjaGVkT3V0bGluZSxcbiAgICAgIGxhYmVsOiBsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9PSAnJyAmJiBmY3MucmVxdWlyZWQgPyBfUmVhY3QkRnJhZ21lbnQgfHwgKF9SZWFjdCRGcmFnbWVudCA9IC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogW2xhYmVsLCBcIlxceEEwXCIsICcqJ11cbiAgICAgIH0pKSA6IGxhYmVsLFxuICAgICAgbm90Y2hlZDogdHlwZW9mIG5vdGNoZWQgIT09ICd1bmRlZmluZWQnID8gbm90Y2hlZCA6IEJvb2xlYW4oc3RhdGUuc3RhcnRBZG9ybm1lbnQgfHwgc3RhdGUuZmlsbGVkIHx8IHN0YXRlLmZvY3VzZWQpXG4gICAgfSksXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQ6IGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBfZXh0ZW5kcyh7fSwgY2xhc3Nlcywge1xuICAgICAgbm90Y2hlZE91dGxpbmU6IG51bGxcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE91dGxpbmVkSW5wdXQucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2FkZGluZy1uZXctY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgSW5wdXRCYXNlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgb2YgdGhlIGBpbnB1dGAuIEl0IGlzIG9ubHkgdXNlZCBmb3IgbGF5b3V0LiBUaGUgYWN0dWFsIGxhYmVsbGluZ1xuICAgKiBpcyBoYW5kbGVkIGJ5IGBJbnB1dExhYmVsYC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG91dGxpbmUgaXMgbm90Y2hlZCB0byBhY2NvbW1vZGF0ZSB0aGUgbGFiZWwuXG4gICAqL1xuICBub3RjaGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5PdXRsaW5lZElucHV0Lm11aU5hbWUgPSAnSW5wdXQnO1xuZXhwb3J0IGRlZmF1bHQgT3V0bGluZWRJbnB1dDsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1MYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUxhYmVsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1MYWJlbCcsIFsncm9vdCcsICdjb2xvclNlY29uZGFyeScsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdyZXF1aXJlZCcsICdhc3RlcmlzayddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1MYWJlbENsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiZmlsbGVkXCIsIFwiZm9jdXNlZFwiLCBcInJlcXVpcmVkXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IGZvcm1MYWJlbENsYXNzZXMsIHsgZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2Zvcm1MYWJlbENsYXNzZXMnO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBmb2N1c2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBmaWxsZWQgJiYgJ2ZpbGxlZCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXSxcbiAgICBhc3RlcmlzazogWydhc3RlcmlzaycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IEZvcm1MYWJlbFJvb3QgPSBzdHlsZWQoJ2xhYmVsJywge1xuICBuYW1lOiAnTXVpRm9ybUxhYmVsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuY29sb3IgPT09ICdzZWNvbmRhcnknICYmIHN0eWxlcy5jb2xvclNlY29uZGFyeSwgb3duZXJTdGF0ZS5maWxsZWQgJiYgc3R5bGVzLmZpbGxlZCk7XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5MSwge1xuICBsaW5lSGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICBwYWRkaW5nOiAwLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgW2AmLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5mb2N1c2VkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSxcbiAgW2AmLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkXG4gIH0sXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59KSk7XG5jb25zdCBBc3Rlcmlza0NvbXBvbmVudCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUZvcm1MYWJlbCcsXG4gIHNsb3Q6ICdBc3RlcmlzaycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmFzdGVyaXNrXG59KSgoe1xuICB0aGVtZVxufSkgPT4gKHtcbiAgW2AmLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5lcnJvcn1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gIH1cbn0pKTtcbmNvbnN0IEZvcm1MYWJlbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1MYWJlbChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUxhYmVsJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCA9ICdsYWJlbCdcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ2NvbG9yJywgJ3JlcXVpcmVkJywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZmlsbGVkJ11cbiAgfSk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZmlsbGVkOiBmY3MuZmlsbGVkLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkLFxuICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEZvcm1MYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIGZjcy5yZXF1aXJlZCAmJiAvKiNfX1BVUkVfXyovX2pzeHMoQXN0ZXJpc2tDb21wb25lbnQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuYXN0ZXJpc2ssXG4gICAgICBjaGlsZHJlbjogW1wiXFx1MjAwOVwiLCAnKiddXG4gICAgfSldXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUxhYmVsLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jYWRkaW5nLW5ldy1jb2xvcnMpLlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgc2hvdWxkIHVzZSBmaWxsZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICBmaWxsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBpbnB1dCBvZiB0aGlzIGxhYmVsIGlzIGZvY3VzZWQgKHVzZWQgYnkgYEZvcm1Hcm91cGAgY29tcG9uZW50cykuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtTGFiZWw7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXRMYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgaW5wdXRMYWJlbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJbnB1dExhYmVsJywgWydyb290JywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAncmVxdWlyZWQnLCAnYXN0ZXJpc2snLCAnZm9ybUNvbnRyb2wnLCAnc2l6ZVNtYWxsJywgJ3NocmluaycsICdhbmltYXRlZCcsICdzdGFuZGFyZCcsICdmaWxsZWQnLCAnb3V0bGluZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBpbnB1dExhYmVsQ2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZUFuaW1hdGlvblwiLCBcIm1hcmdpblwiLCBcInNocmlua1wiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IEZvcm1MYWJlbCwgeyBmb3JtTGFiZWxDbGFzc2VzIH0gZnJvbSAnLi4vRm9ybUxhYmVsJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2lucHV0TGFiZWxDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGZvcm1Db250cm9sLFxuICAgIHNpemUsXG4gICAgc2hyaW5rLFxuICAgIGRpc2FibGVBbmltYXRpb24sXG4gICAgdmFyaWFudCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZm9ybUNvbnRyb2wgJiYgJ2Zvcm1Db250cm9sJywgIWRpc2FibGVBbmltYXRpb24gJiYgJ2FuaW1hdGVkJywgc2hyaW5rICYmICdzaHJpbmsnLCBzaXplID09PSAnc21hbGwnICYmICdzaXplU21hbGwnLCB2YXJpYW50XSxcbiAgICBhc3RlcmlzazogW3JlcXVpcmVkICYmICdhc3RlcmlzayddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuXG5jb25zdCBJbnB1dExhYmVsUm9vdCA9IHN0eWxlZChGb3JtTGFiZWwsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUlucHV0TGFiZWwnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFt7XG4gICAgICBbYCYgLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5hc3Rlcmlza31gXTogc3R5bGVzLmFzdGVyaXNrXG4gICAgfSwgc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZm9ybUNvbnRyb2wgJiYgc3R5bGVzLmZvcm1Db250cm9sLCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgc3R5bGVzLnNpemVTbWFsbCwgb3duZXJTdGF0ZS5zaHJpbmsgJiYgc3R5bGVzLnNocmluaywgIW93bmVyU3RhdGUuZGlzYWJsZUFuaW1hdGlvbiAmJiBzdHlsZXMuYW5pbWF0ZWQsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIG1heFdpZHRoOiAnMTAwJSdcbn0sIG93bmVyU3RhdGUuZm9ybUNvbnRyb2wgJiYge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgbGVmdDogMCxcbiAgdG9wOiAwLFxuICAvLyBzbGlnaHQgYWx0ZXJhdGlvbiB0byBzcGVjIHNwYWNpbmcgdG8gbWF0Y2ggdmlzdWFsIHNwZWMgcmVzdWx0XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAyMHB4KSBzY2FsZSgxKSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIC8vIENvbXBlbnNhdGlvbiBmb3IgdGhlIGBJbnB1dC5pbnB1dFNpemVTbWFsbGAgc3R5bGUuXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAxN3B4KSBzY2FsZSgxKSdcbn0sIG93bmVyU3RhdGUuc2hyaW5rICYmIHtcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIC0xLjVweCkgc2NhbGUoMC43NSknLFxuICB0cmFuc2Zvcm1PcmlnaW46ICd0b3AgbGVmdCcsXG4gIG1heFdpZHRoOiAnMTMzJSdcbn0sICFvd25lclN0YXRlLmRpc2FibGVBbmltYXRpb24gJiYge1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoWydjb2xvcicsICd0cmFuc2Zvcm0nLCAnbWF4LXdpZHRoJ10sIHtcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gIH0pXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIF9leHRlbmRzKHtcbiAgLy8gQ2hyb21lJ3MgYXV0b2ZpbGwgZmVhdHVyZSBnaXZlcyB0aGUgaW5wdXQgZmllbGQgYSB5ZWxsb3cgYmFja2dyb3VuZC5cbiAgLy8gU2luY2UgdGhlIGlucHV0IGZpZWxkIGlzIGJlaGluZCB0aGUgbGFiZWwgaW4gdGhlIEhUTUwgdHJlZSxcbiAgLy8gdGhlIGlucHV0IGZpZWxkIGlzIGRyYXduIGxhc3QgYW5kIGhpZGVzIHRoZSBsYWJlbCB3aXRoIGFuIG9wYXF1ZSBiYWNrZ3JvdW5kIGNvbG9yLlxuICAvLyB6SW5kZXg6IDEgd2lsbCByYWlzZSB0aGUgbGFiZWwgYWJvdmUgb3BhcXVlIGJhY2tncm91bmQtY29sb3JzIG9mIGlucHV0LlxuICB6SW5kZXg6IDEsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDEycHgsIDE2cHgpIHNjYWxlKDEpJyxcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAyNHB4KSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCAxM3B4KSBzY2FsZSgxKSdcbn0sIG93bmVyU3RhdGUuc2hyaW5rICYmIF9leHRlbmRzKHtcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCA3cHgpIHNjYWxlKDAuNzUpJyxcbiAgbWF4V2lkdGg6ICdjYWxjKDEzMyUgLSAyNHB4KSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCA0cHgpIHNjYWxlKDAuNzUpJ1xufSkpLCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYgX2V4dGVuZHMoe1xuICAvLyBzZWUgY29tbWVudCBhYm92ZSBvbiBmaWxsZWQuekluZGV4XG4gIHpJbmRleDogMSxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgMTZweCkgc2NhbGUoMSknLFxuICBtYXhXaWR0aDogJ2NhbGMoMTAwJSAtIDI0cHgpJ1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDE0cHgsIDlweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiB7XG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgcG9pbnRlckV2ZW50czogJ2F1dG8nLFxuICBtYXhXaWR0aDogJ2NhbGMoMTMzJSAtIDI0cHgpJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDE0cHgsIC05cHgpIHNjYWxlKDAuNzUpJ1xufSkpKTtcbmNvbnN0IElucHV0TGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJbnB1dExhYmVsKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIG5hbWU6ICdNdWlJbnB1dExhYmVsJyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgZGlzYWJsZUFuaW1hdGlvbiA9IGZhbHNlLFxuICAgIHNocmluazogc2hyaW5rUHJvcFxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBsZXQgc2hyaW5rID0gc2hyaW5rUHJvcDtcblxuICBpZiAodHlwZW9mIHNocmluayA9PT0gJ3VuZGVmaW5lZCcgJiYgbXVpRm9ybUNvbnRyb2wpIHtcbiAgICBzaHJpbmsgPSBtdWlGb3JtQ29udHJvbC5maWxsZWQgfHwgbXVpRm9ybUNvbnRyb2wuZm9jdXNlZCB8fCBtdWlGb3JtQ29udHJvbC5hZG9ybmVkU3RhcnQ7XG4gIH1cblxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnc2l6ZScsICd2YXJpYW50JywgJ3JlcXVpcmVkJ11cbiAgfSk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVBbmltYXRpb24sXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIHNocmluayxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICB2YXJpYW50OiBmY3MudmFyaWFudCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0TGFiZWxSb290LCBfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXNocmlua1wiOiBzaHJpbmssXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dExhYmVsLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2FkZGluZy1uZXctY29sb3JzKS5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydlcnJvcicsICdpbmZvJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0cmFuc2l0aW9uIGFuaW1hdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBbmltYXRpb246IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBvZiB0aGlzIGxhYmVsIGlzIGZvY3VzZWQuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZSddKSxcblxuICAvKipcbiAgICogaWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBzaHJ1bmsuXG4gICAqL1xuICBzaHJpbms6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnbm9ybWFsJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFsnbm9ybWFsJywgJ3NtYWxsJ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IElucHV0TGFiZWw7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Db250cm9sJywgc2xvdCk7XG59XG5jb25zdCBmb3JtQ29udHJvbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtQ29udHJvbCcsIFsncm9vdCcsICdtYXJnaW5Ob25lJywgJ21hcmdpbk5vcm1hbCcsICdtYXJnaW5EZW5zZScsICdmdWxsV2lkdGgnLCAnZGlzYWJsZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtQ29udHJvbENsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiZm9jdXNlZFwiLCBcImZ1bGxXaWR0aFwiLCBcImhpZGRlbkxhYmVsXCIsIFwibWFyZ2luXCIsIFwicmVxdWlyZWRcIiwgXCJzaXplXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBpc0ZpbGxlZCwgaXNBZG9ybmVkU3RhcnQgfSBmcm9tICcuLi9JbnB1dEJhc2UvdXRpbHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgaXNNdWlFbGVtZW50IGZyb20gJy4uL3V0aWxzL2lzTXVpRWxlbWVudCc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4vRm9ybUNvbnRyb2xDb250ZXh0JztcbmltcG9ydCB7IGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2Zvcm1Db250cm9sQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBtYXJnaW4sXG4gICAgZnVsbFdpZHRoXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBtYXJnaW4gIT09ICdub25lJyAmJiBgbWFyZ2luJHtjYXBpdGFsaXplKG1hcmdpbil9YCwgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgRm9ybUNvbnRyb2xSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBzdHlsZXNbYG1hcmdpbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLm1hcmdpbil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgpO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgLy8gUmVzZXQgZmllbGRzZXQgZGVmYXVsdCBzdHlsZS5cbiAgbWluV2lkdGg6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIG1hcmdpbjogMCxcbiAgYm9yZGVyOiAwLFxuICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdub3JtYWwnICYmIHtcbiAgbWFyZ2luVG9wOiAxNixcbiAgbWFyZ2luQm90dG9tOiA4XG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1hcmdpblRvcDogOCxcbiAgbWFyZ2luQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcbi8qKlxuICogUHJvdmlkZXMgY29udGV4dCBzdWNoIGFzIGZpbGxlZC9mb2N1c2VkL2Vycm9yL3JlcXVpcmVkIGZvciBmb3JtIGlucHV0cy5cbiAqIFJlbHlpbmcgb24gdGhlIGNvbnRleHQgcHJvdmlkZXMgaGlnaCBmbGV4aWJpbGl0eSBhbmQgZW5zdXJlcyB0aGF0IHRoZSBzdGF0ZSBhbHdheXMgc3RheXNcbiAqIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBjaGlsZHJlbiBvZiB0aGUgYEZvcm1Db250cm9sYC5cbiAqIFRoaXMgY29udGV4dCBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAgLSBGb3JtTGFiZWxcbiAqICAtIEZvcm1IZWxwZXJUZXh0XG4gKiAgLSBJbnB1dFxuICogIC0gSW5wdXRMYWJlbFxuICpcbiAqIFlvdSBjYW4gZmluZCBvbmUgY29tcG9zaXRpb24gZXhhbXBsZSBiZWxvdyBhbmQgbW9yZSBnb2luZyB0byBbdGhlIGRlbW9zXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dC1maWVsZC8jY29tcG9uZW50cykuXG4gKlxuICogYGBganN4XG4gKiA8Rm9ybUNvbnRyb2w+XG4gKiAgIDxJbnB1dExhYmVsIGh0bWxGb3I9XCJteS1pbnB1dFwiPkVtYWlsIGFkZHJlc3M8L0lucHV0TGFiZWw+XG4gKiAgIDxJbnB1dCBpZD1cIm15LWlucHV0XCIgYXJpYS1kZXNjcmliZWRieT1cIm15LWhlbHBlci10ZXh0XCIgLz5cbiAqICAgPEZvcm1IZWxwZXJUZXh0IGlkPVwibXktaGVscGVyLXRleHRcIj5XZSdsbCBuZXZlciBzaGFyZSB5b3VyIGVtYWlsLjwvRm9ybUhlbHBlclRleHQ+XG4gKiA8L0Zvcm1Db250cm9sPlxuICogYGBgXG4gKlxuICog4pqg77iPIE9ubHkgb25lIGBJbnB1dEJhc2VgIGNhbiBiZSB1c2VkIHdpdGhpbiBhIEZvcm1Db250cm9sIGJlY2F1c2UgaXQgY3JlYXRlIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMuXG4gKiBGb3IgaW5zdGFuY2UsIG9ubHkgb25lIGlucHV0IGNhbiBiZSBmb2N1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBzdGF0ZSBzaG91bGRuJ3QgYmUgc2hhcmVkLlxuICovXG5cbmNvbnN0IEZvcm1Db250cm9sID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUNvbnRyb2woaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1Db250cm9sJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgZXJyb3IgPSBmYWxzZSxcbiAgICBmb2N1c2VkOiB2aXN1YWxseUZvY3VzZWQsXG4gICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgaGlkZGVuTGFiZWwgPSBmYWxzZSxcbiAgICBtYXJnaW4gPSAnbm9uZScsXG4gICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICBzaXplID0gJ21lZGl1bScsXG4gICAgdmFyaWFudCA9ICdvdXRsaW5lZCdcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIG1hcmdpbixcbiAgICByZXF1aXJlZCxcbiAgICBzaXplLFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBbYWRvcm5lZFN0YXJ0LCBzZXRBZG9ybmVkU3RhcnRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgZmluZCB0aGUgSW5wdXQgaW4gb3JkZXJcbiAgICAvLyB0byBmdWxseSBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBsZXQgaW5pdGlhbEFkb3JuZWRTdGFydCA9IGZhbHNlO1xuXG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICAgIGlmICghaXNNdWlFbGVtZW50KGNoaWxkLCBbJ0lucHV0JywgJ1NlbGVjdCddKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0ID0gaXNNdWlFbGVtZW50KGNoaWxkLCBbJ1NlbGVjdCddKSA/IGNoaWxkLnByb3BzLmlucHV0IDogY2hpbGQ7XG5cbiAgICAgICAgaWYgKGlucHV0ICYmIGlzQWRvcm5lZFN0YXJ0KGlucHV0LnByb3BzKSkge1xuICAgICAgICAgIGluaXRpYWxBZG9ybmVkU3RhcnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5pdGlhbEFkb3JuZWRTdGFydDtcbiAgfSk7XG4gIGNvbnN0IFtmaWxsZWQsIHNldEZpbGxlZF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gV2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGNoaWxkcmVuIGFuZCBmaW5kIHRoZSBJbnB1dCBpbiBvcmRlclxuICAgIC8vIHRvIGZ1bGx5IHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGxldCBpbml0aWFsRmlsbGVkID0gZmFsc2U7XG5cbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRmlsbGVkKGNoaWxkLnByb3BzLCB0cnVlKSkge1xuICAgICAgICAgIGluaXRpYWxGaWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5pdGlhbEZpbGxlZDtcbiAgfSk7XG4gIGNvbnN0IFtmb2N1c2VkU3RhdGUsIHNldEZvY3VzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c2VkU3RhdGUpIHtcbiAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGZvY3VzZWQgPSB2aXN1YWxseUZvY3VzZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlzYWJsZWQgPyB2aXN1YWxseUZvY3VzZWQgOiBmb2N1c2VkU3RhdGU7XG4gIGxldCByZWdpc3RlckVmZmVjdDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIGNvbnN0IHJlZ2lzdGVyZWRJbnB1dCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG5cbiAgICByZWdpc3RlckVmZmVjdCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWdpc3RlcmVkSW5wdXQuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGVyZSBhcmUgbXVsdGlwbGUgYElucHV0QmFzZWAgY29tcG9uZW50cyBpbnNpZGUgYSBGb3JtQ29udHJvbC4nLCAnVGhpcyBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMsIG9ubHkgdXNlIG9uZSBgSW5wdXRCYXNlYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG5cbiAgICAgIHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9O1xuICAgIH07XG4gIH1cblxuICBjb25zdCBvbkZpbGxlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRGaWxsZWQodHJ1ZSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgb25FbXB0eSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRGaWxsZWQoZmFsc2UpO1xuICB9LCBbXSk7XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IHtcbiAgICBhZG9ybmVkU3RhcnQsXG4gICAgc2V0QWRvcm5lZFN0YXJ0LFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICBmb2N1c2VkLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbCxcbiAgICBzaXplLFxuICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgfSxcbiAgICBvbkVtcHR5LFxuICAgIG9uRmlsbGVkLFxuICAgIG9uRm9jdXM6ICgpID0+IHtcbiAgICAgIHNldEZvY3VzZWQodHJ1ZSk7XG4gICAgfSxcbiAgICByZWdpc3RlckVmZmVjdCxcbiAgICByZXF1aXJlZCxcbiAgICB2YXJpYW50XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2hpbGRDb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUNvbnRyb2wucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNhZGRpbmctbmV3LWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCwgaW5wdXQgYW5kIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzcGxheWVkIGluIGZvY3VzZWQgc3RhdGUuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgaGlkZGVuLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gaW5jcmVhc2UgZGVuc2l0eSBmb3IgYSBgRmlsbGVkSW5wdXRgLlxuICAgKiBCZSBzdXJlIHRvIGFkZCBgYXJpYS1sYWJlbGAgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhpZGRlbkxhYmVsOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYGRlbnNlYCBvciBgbm9ybWFsYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZyBvZiB0aGlzIGFuZCBjb250YWluZWQgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnLCAnbm9ybWFsJ10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGb3JtSGVscGVyVGV4dCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUhlbHBlclRleHRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUhlbHBlclRleHQnLCBbJ3Jvb3QnLCAnZXJyb3InLCAnZGlzYWJsZWQnLCAnc2l6ZVNtYWxsJywgJ3NpemVNZWRpdW0nLCAnY29udGFpbmVkJywgJ2ZvY3VzZWQnLCAnZmlsbGVkJywgJ3JlcXVpcmVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUhlbHBlclRleHRDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5cbnZhciBfc3BhbjtcblxuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiZmlsbGVkXCIsIFwiZm9jdXNlZFwiLCBcIm1hcmdpblwiLCBcInJlcXVpcmVkXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBmb3JtSGVscGVyVGV4dENsYXNzZXMsIHsgZ2V0Rm9ybUhlbHBlclRleHRVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUhlbHBlclRleHRDbGFzc2VzJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbnRhaW5lZCxcbiAgICBzaXplLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICBmb2N1c2VkLFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBzaXplICYmIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIGNvbnRhaW5lZCAmJiAnY29udGFpbmVkJywgZm9jdXNlZCAmJiAnZm9jdXNlZCcsIGZpbGxlZCAmJiAnZmlsbGVkJywgcmVxdWlyZWQgJiYgJ3JlcXVpcmVkJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IEZvcm1IZWxwZXJUZXh0Um9vdCA9IHN0eWxlZCgncCcsIHtcbiAgbmFtZTogJ011aUZvcm1IZWxwZXJUZXh0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuc2l6ZSAmJiBzdHlsZXNbYHNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgb3duZXJTdGF0ZS5jb250YWluZWQgJiYgc3R5bGVzLmNvbnRhaW5lZCwgb3duZXJTdGF0ZS5maWxsZWQgJiYgc3R5bGVzLmZpbGxlZF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgdGhlbWUudHlwb2dyYXBoeS5jYXB0aW9uLCB7XG4gIHRleHRBbGlnbjogJ2xlZnQnLFxuICBtYXJnaW5Ub3A6IDMsXG4gIG1hcmdpblJpZ2h0OiAwLFxuICBtYXJnaW5Cb3R0b206IDAsXG4gIG1hcmdpbkxlZnQ6IDAsXG4gIFtgJi4ke2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkXG4gIH0sXG4gIFtgJi4ke2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5lcnJvcn1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIG1hcmdpblRvcDogNFxufSwgb3duZXJTdGF0ZS5jb250YWluZWQgJiYge1xuICBtYXJnaW5MZWZ0OiAxNCxcbiAgbWFyZ2luUmlnaHQ6IDE0XG59KSk7XG5jb25zdCBGb3JtSGVscGVyVGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1IZWxwZXJUZXh0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtSGVscGVyVGV4dCdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQgPSAncCdcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3ZhcmlhbnQnLCAnc2l6ZScsICdkaXNhYmxlZCcsICdlcnJvcicsICdmaWxsZWQnLCAnZm9jdXNlZCcsICdyZXF1aXJlZCddXG4gIH0pO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgY29udGFpbmVkOiBmY3MudmFyaWFudCA9PT0gJ2ZpbGxlZCcgfHwgZmNzLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcsXG4gICAgdmFyaWFudDogZmNzLnZhcmlhbnQsXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZpbGxlZDogZmNzLmZpbGxlZCxcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1IZWxwZXJUZXh0Um9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IGNoaWxkcmVuID09PSAnICcgPyAvLyBub3RyYW5zbGF0ZSBuZWVkZWQgd2hpbGUgR29vZ2xlIFRyYW5zbGF0ZSB3aWxsIG5vdCBmaXggemVyby13aWR0aCBzcGFjZSBpc3N1ZVxuICAgIF9zcGFuIHx8IChfc3BhbiA9IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgIGNoaWxkcmVuOiBcIlxcdTIwMEJcIlxuICAgIH0pKSA6IGNoaWxkcmVuXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUhlbHBlclRleHQucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIElmIGAnICdgIGlzIHByb3ZpZGVkLCB0aGUgY29tcG9uZW50IHJlc2VydmVzIG9uZSBsaW5lIGhlaWdodCBmb3IgZGlzcGxheWluZyBhIGZ1dHVyZSBtZXNzYWdlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSBmaWxsZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICBmaWxsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBoZWxwZXIgdGV4dCBzaG91bGQgdXNlIGZvY3VzZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZSddKSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSByZXF1aXJlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1IZWxwZXJUZXh0OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuXG5jb25zdCBMaXN0Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgTGlzdENvbnRleHQuZGlzcGxheU5hbWUgPSAnTGlzdENvbnRleHQnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Q29udGV4dDsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdCcsIHNsb3QpO1xufVxuY29uc3QgbGlzdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0JywgWydyb290JywgJ3BhZGRpbmcnLCAnZGVuc2UnLCAnc3ViaGVhZGVyJ10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdENsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGVuc2VcIiwgXCJkaXNhYmxlUGFkZGluZ1wiLCBcInN1YmhlYWRlclwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSAnLi9MaXN0Q29udGV4dCc7XG5pbXBvcnQgeyBnZXRMaXN0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9saXN0Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlUGFkZGluZyxcbiAgICBkZW5zZSxcbiAgICBzdWJoZWFkZXJcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlUGFkZGluZyAmJiAncGFkZGluZycsIGRlbnNlICYmICdkZW5zZScsIHN1YmhlYWRlciAmJiAnc3ViaGVhZGVyJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRMaXN0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IExpc3RSb290ID0gc3R5bGVkKCd1bCcsIHtcbiAgbmFtZTogJ011aUxpc3QnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYgc3R5bGVzLnBhZGRpbmcsIG93bmVyU3RhdGUuZGVuc2UgJiYgc3R5bGVzLmRlbnNlLCBvd25lclN0YXRlLnN1YmhlYWRlciAmJiBzdHlsZXMuc3ViaGVhZGVyXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBsaXN0U3R5bGU6ICdub25lJyxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAwLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYge1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA4XG59LCBvd25lclN0YXRlLnN1YmhlYWRlciAmJiB7XG4gIHBhZGRpbmdUb3A6IDBcbn0pKTtcbmNvbnN0IExpc3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaXN0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaXN0J1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCA9ICd1bCcsXG4gICAgZGVuc2UgPSBmYWxzZSxcbiAgICBkaXNhYmxlUGFkZGluZyA9IGZhbHNlLFxuICAgIHN1YmhlYWRlclxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBkZW5zZVxuICB9KSwgW2RlbnNlXSk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBkZW5zZSxcbiAgICBkaXNhYmxlUGFkZGluZ1xuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoTGlzdFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWYsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBbc3ViaGVhZGVyLCBjaGlsZHJlbl1cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IExpc3QucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgY29tcGFjdCB2ZXJ0aWNhbCBwYWRkaW5nIGRlc2lnbmVkIGZvciBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgaXMgdXNlZCBmb3JcbiAgICogdGhlIGxpc3QgYW5kIGxpc3QgaXRlbXMuXG4gICAqIFRoZSBwcm9wIGlzIGF2YWlsYWJsZSB0byBkZXNjZW5kYW50IGNvbXBvbmVudHMgYXMgdGhlIGBkZW5zZWAgY29udGV4dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlbnNlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB2ZXJ0aWNhbCBwYWRkaW5nIGlzIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQYWRkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIHN1YmhlYWRlciwgbm9ybWFsbHkgYExpc3RTdWJoZWFkZXJgLlxuICAgKi9cbiAgc3ViaGVhZGVyOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTGlzdDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZXRTY3JvbGxiYXJTaXplIGFzIGdldFNjcm9sbGJhclNpemUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGdldFNjcm9sbGJhclNpemU7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFjdGlvbnNcIiwgXCJhdXRvRm9jdXNcIiwgXCJhdXRvRm9jdXNJdGVtXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlXCIsIFwiZGlzYWJsZUxpc3RXcmFwXCIsIFwib25LZXlEb3duXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRnJhZ21lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnLi4vdXRpbHMvb3duZXJEb2N1bWVudCc7XG5pbXBvcnQgTGlzdCBmcm9tICcuLi9MaXN0JztcbmltcG9ydCBnZXRTY3JvbGxiYXJTaXplIGZyb20gJy4uL3V0aWxzL2dldFNjcm9sbGJhclNpemUnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuZnVuY3Rpb24gbmV4dEl0ZW0obGlzdCwgaXRlbSwgZGlzYWJsZUxpc3RXcmFwKSB7XG4gIGlmIChsaXN0ID09PSBpdGVtKSB7XG4gICAgcmV0dXJuIGxpc3QuZmlyc3RDaGlsZDtcbiAgfVxuXG4gIGlmIChpdGVtICYmIGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgcmV0dXJuIGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIGRpc2FibGVMaXN0V3JhcCA/IG51bGwgOiBsaXN0LmZpcnN0Q2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHByZXZpb3VzSXRlbShsaXN0LCBpdGVtLCBkaXNhYmxlTGlzdFdyYXApIHtcbiAgaWYgKGxpc3QgPT09IGl0ZW0pIHtcbiAgICByZXR1cm4gZGlzYWJsZUxpc3RXcmFwID8gbGlzdC5maXJzdENoaWxkIDogbGlzdC5sYXN0Q2hpbGQ7XG4gIH1cblxuICBpZiAoaXRlbSAmJiBpdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcbiAgICByZXR1cm4gaXRlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIGRpc2FibGVMaXN0V3JhcCA/IG51bGwgOiBsaXN0Lmxhc3RDaGlsZDtcbn1cblxuZnVuY3Rpb24gdGV4dENyaXRlcmlhTWF0Y2hlcyhuZXh0Rm9jdXMsIHRleHRDcml0ZXJpYSkge1xuICBpZiAodGV4dENyaXRlcmlhID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGxldCB0ZXh0ID0gbmV4dEZvY3VzLmlubmVyVGV4dDtcblxuICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8ganNkb20gZG9lc24ndCBzdXBwb3J0IGlubmVyVGV4dFxuICAgIHRleHQgPSBuZXh0Rm9jdXMudGV4dENvbnRlbnQ7XG4gIH1cblxuICB0ZXh0ID0gdGV4dC50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICBpZiAodGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGV4dENyaXRlcmlhLnJlcGVhdGluZykge1xuICAgIHJldHVybiB0ZXh0WzBdID09PSB0ZXh0Q3JpdGVyaWEua2V5c1swXTtcbiAgfVxuXG4gIHJldHVybiB0ZXh0LmluZGV4T2YodGV4dENyaXRlcmlhLmtleXMuam9pbignJykpID09PSAwO1xufVxuXG5mdW5jdGlvbiBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHRyYXZlcnNhbEZ1bmN0aW9uLCB0ZXh0Q3JpdGVyaWEpIHtcbiAgbGV0IHdyYXBwZWRPbmNlID0gZmFsc2U7XG4gIGxldCBuZXh0Rm9jdXMgPSB0cmF2ZXJzYWxGdW5jdGlvbihsaXN0LCBjdXJyZW50Rm9jdXMsIGN1cnJlbnRGb2N1cyA/IGRpc2FibGVMaXN0V3JhcCA6IGZhbHNlKTtcblxuICB3aGlsZSAobmV4dEZvY3VzKSB7XG4gICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wLlxuICAgIGlmIChuZXh0Rm9jdXMgPT09IGxpc3QuZmlyc3RDaGlsZCkge1xuICAgICAgaWYgKHdyYXBwZWRPbmNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgd3JhcHBlZE9uY2UgPSB0cnVlO1xuICAgIH0gLy8gU2FtZSBsb2dpYyBhcyB1c2VBdXRvY29tcGxldGUuanNcblxuXG4gICAgY29uc3QgbmV4dEZvY3VzRGlzYWJsZWQgPSBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlID8gZmFsc2UgOiBuZXh0Rm9jdXMuZGlzYWJsZWQgfHwgbmV4dEZvY3VzLmdldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpID09PSAndHJ1ZSc7XG5cbiAgICBpZiAoIW5leHRGb2N1cy5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHwgIXRleHRDcml0ZXJpYU1hdGNoZXMobmV4dEZvY3VzLCB0ZXh0Q3JpdGVyaWEpIHx8IG5leHRGb2N1c0Rpc2FibGVkKSB7XG4gICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IGVsZW1lbnQuXG4gICAgICBuZXh0Rm9jdXMgPSB0cmF2ZXJzYWxGdW5jdGlvbihsaXN0LCBuZXh0Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRGb2N1cy5mb2N1cygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBBIHBlcm1hbmVudGx5IGRpc3BsYXllZCBtZW51IGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL21lbnVidXR0b24vLlxuICogSXQncyBleHBvc2VkIHRvIGhlbHAgY3VzdG9taXphdGlvbiBvZiB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgY29tcG9uZW50IGlmIHlvdVxuICogdXNlIGl0IHNlcGFyYXRlbHkgeW91IG5lZWQgdG8gbW92ZSBmb2N1cyBpbnRvIHRoZSBjb21wb25lbnQgbWFudWFsbHkuIE9uY2VcbiAqIHRoZSBmb2N1cyBpcyBwbGFjZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgaXQgaXMgZnVsbHkga2V5Ym9hcmQgYWNjZXNzaWJsZS5cbiAqL1xuXG5cbmNvbnN0IE1lbnVMaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudUxpc3QocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgLy8gcHJpdmF0ZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgYWN0aW9ucyxcbiAgICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgICBhdXRvRm9jdXNJdGVtID0gZmFsc2UsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGRpc2FibGVkSXRlbXNGb2N1c2FibGUgPSBmYWxzZSxcbiAgICBkaXNhYmxlTGlzdFdyYXAgPSBmYWxzZSxcbiAgICBvbktleURvd24sXG4gICAgdmFyaWFudCA9ICdzZWxlY3RlZE1lbnUnXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBsaXN0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCB0ZXh0Q3JpdGVyaWFSZWYgPSBSZWFjdC51c2VSZWYoe1xuICAgIGtleXM6IFtdLFxuICAgIHJlcGVhdGluZzogdHJ1ZSxcbiAgICBwcmV2aW91c0tleU1hdGNoZWQ6IHRydWUsXG4gICAgbGFzdFRpbWU6IG51bGxcbiAgfSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBsaXN0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb25zLCAoKSA9PiAoe1xuICAgIGFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyOiAoY29udGFpbmVyRWxlbWVudCwgdGhlbWUpID0+IHtcbiAgICAgIC8vIExldCdzIGlnbm9yZSB0aGF0IHBpZWNlIG9mIGxvZ2ljIGlmIHVzZXJzIGFyZSBhbHJlYWR5IG92ZXJyaWRpbmcgdGhlIHdpZHRoXG4gICAgICAvLyBvZiB0aGUgbWVudS5cbiAgICAgIGNvbnN0IG5vRXhwbGljaXRXaWR0aCA9ICFsaXN0UmVmLmN1cnJlbnQuc3R5bGUud2lkdGg7XG5cbiAgICAgIGlmIChjb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodCA8IGxpc3RSZWYuY3VycmVudC5jbGllbnRIZWlnaHQgJiYgbm9FeHBsaWNpdFdpZHRoKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGJhclNpemUgPSBgJHtnZXRTY3JvbGxiYXJTaXplKG93bmVyRG9jdW1lbnQoY29udGFpbmVyRWxlbWVudCkpfXB4YDtcbiAgICAgICAgbGlzdFJlZi5jdXJyZW50LnN0eWxlW3RoZW1lLmRpcmVjdGlvbiA9PT0gJ3J0bCcgPyAncGFkZGluZ0xlZnQnIDogJ3BhZGRpbmdSaWdodCddID0gc2Nyb2xsYmFyU2l6ZTtcbiAgICAgICAgbGlzdFJlZi5jdXJyZW50LnN0eWxlLndpZHRoID0gYGNhbGMoMTAwJSArICR7c2Nyb2xsYmFyU2l6ZX0pYDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3RSZWYuY3VycmVudDtcbiAgICB9XG4gIH0pLCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBsaXN0ID0gbGlzdFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RWxlbWVudH0gLSB3aWxsIGFsd2F5cyBiZSBkZWZpbmVkIHNpbmNlIHdlIGFyZSBpbiBhIGtleWRvd24gaGFuZGxlclxuICAgICAqIGF0dGFjaGVkIHRvIGFuIGVsZW1lbnQuIEEga2V5ZG93biBldmVudCBpcyBlaXRoZXIgZGlzcGF0Y2hlZCB0byB0aGUgYWN0aXZlRWxlbWVudFxuICAgICAqIG9yIGRvY3VtZW50LmJvZHkgb3IgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LiBPbmx5IHRoZSBmaXJzdCBjYXNlIHdpbGxcbiAgICAgKiB0cmlnZ2VyIHRoaXMgc3BlY2lmaWMgaGFuZGxlci5cbiAgICAgKi9cblxuICAgIGNvbnN0IGN1cnJlbnRGb2N1cyA9IG93bmVyRG9jdW1lbnQobGlzdCkuYWN0aXZlRWxlbWVudDtcblxuICAgIGlmIChrZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAvLyBQcmV2ZW50IHNjcm9sbCBvZiB0aGUgcGFnZVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgbmV4dEl0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHByZXZpb3VzSXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdIb21lJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBudWxsLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIG5leHRJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0VuZCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRm9jdXMobGlzdCwgbnVsbCwgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBwcmV2aW91c0l0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgY3JpdGVyaWEgPSB0ZXh0Q3JpdGVyaWFSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IGxvd2VyS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBjdXJyVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gICAgICBpZiAoY3JpdGVyaWEua2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIFJlc2V0XG4gICAgICAgIGlmIChjdXJyVGltZSAtIGNyaXRlcmlhLmxhc3RUaW1lID4gNTAwKSB7XG4gICAgICAgICAgY3JpdGVyaWEua2V5cyA9IFtdO1xuICAgICAgICAgIGNyaXRlcmlhLnJlcGVhdGluZyA9IHRydWU7XG4gICAgICAgICAgY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjcml0ZXJpYS5yZXBlYXRpbmcgJiYgbG93ZXJLZXkgIT09IGNyaXRlcmlhLmtleXNbMF0pIHtcbiAgICAgICAgICBjcml0ZXJpYS5yZXBlYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjcml0ZXJpYS5sYXN0VGltZSA9IGN1cnJUaW1lO1xuICAgICAgY3JpdGVyaWEua2V5cy5wdXNoKGxvd2VyS2V5KTtcbiAgICAgIGNvbnN0IGtlZXBGb2N1c09uQ3VycmVudCA9IGN1cnJlbnRGb2N1cyAmJiAhY3JpdGVyaWEucmVwZWF0aW5nICYmIHRleHRDcml0ZXJpYU1hdGNoZXMoY3VycmVudEZvY3VzLCBjcml0ZXJpYSk7XG5cbiAgICAgIGlmIChjcml0ZXJpYS5wcmV2aW91c0tleU1hdGNoZWQgJiYgKGtlZXBGb2N1c09uQ3VycmVudCB8fCBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBmYWxzZSwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgbmV4dEl0ZW0sIGNyaXRlcmlhKSkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNyaXRlcmlhLnByZXZpb3VzS2V5TWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobGlzdFJlZiwgcmVmKTtcbiAgLyoqXG4gICAqIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBzaG91bGQgcmVjZWl2ZSBmb2N1c1xuICAgKiBpbiBhIGB2YXJpYW50PVwic2VsZWN0ZWRNZW51XCJgIGl0J3MgdGhlIGZpcnN0IGBzZWxlY3RlZGAgaXRlbVxuICAgKiBvdGhlcndpc2UgaXQncyB0aGUgdmVyeSBmaXJzdCBpdGVtLlxuICAgKi9cblxuICBsZXQgYWN0aXZlSXRlbUluZGV4ID0gLTE7IC8vIHNpbmNlIHdlIGluamVjdCBmb2N1cyByZWxhdGVkIHByb3BzIGludG8gY2hpbGRyZW4gd2UgaGF2ZSB0byBkbyBhIGxvb2thaGVhZFxuICAvLyB0byBjaGVjayBpZiB0aGVyZSBpcyBhIGBzZWxlY3RlZGAgaXRlbS4gV2UncmUgbG9va2luZyBmb3IgdGhlIGxhc3QgYHNlbGVjdGVkYFxuICAvLyBpdGVtIGFuZCB1c2UgdGhlIGZpcnN0IHZhbGlkIGl0ZW0gYXMgYSBmYWxsYmFja1xuXG4gIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICBpZiAoISAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIE1lbnUgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoaWxkLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBpZiAodmFyaWFudCA9PT0gJ3NlbGVjdGVkTWVudScgJiYgY2hpbGQucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaXRlbXMgPSBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPT09IGFjdGl2ZUl0ZW1JbmRleCkge1xuICAgICAgY29uc3QgbmV3Q2hpbGRQcm9wcyA9IHt9O1xuXG4gICAgICBpZiAoYXV0b0ZvY3VzSXRlbSkge1xuICAgICAgICBuZXdDaGlsZFByb3BzLmF1dG9Gb2N1cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZC5wcm9wcy50YWJJbmRleCA9PT0gdW5kZWZpbmVkICYmIHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnKSB7XG4gICAgICAgIG5ld0NoaWxkUHJvcHMudGFiSW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbmV3Q2hpbGRQcm9wcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3QsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcIm1lbnVcIixcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgdGFiSW5kZXg6IGF1dG9Gb2N1cyA/IDAgOiAtMVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBpdGVtc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1lbnVMaXN0LnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHdpbGwgZm9jdXMgdGhlIGBbcm9sZT1cIm1lbnVcIl1gIGNvbnRhaW5lciBhbmQgbW92ZSBpbnRvIHRhYiBvcmRlci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBmb2N1cyB0aGUgZmlyc3QgbWVudWl0ZW0gaWYgYHZhcmlhbnQ9XCJtZW51XCJgIG9yIHNlbGVjdGVkIGl0ZW1cbiAgICogaWYgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXNJdGVtOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogTWVudUxpc3QgY29udGVudHMsIG5vcm1hbGx5IGBNZW51SXRlbWBzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBhbGxvdyBmb2N1cyBvbiBkaXNhYmxlZCBpdGVtcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkSXRlbXNGb2N1c2FibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtZW51IGl0ZW1zIHdpbGwgbm90IHdyYXAgZm9jdXMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlTGlzdFdyYXA6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuIFVzZSBgbWVudWAgdG8gcHJldmVudCBzZWxlY3RlZCBpdGVtcyBmcm9tIGltcGFjdGluZyB0aGUgaW5pdGlhbCBmb2N1c1xuICAgKiBhbmQgdGhlIHZlcnRpY2FsIGFsaWdubWVudCByZWxhdGl2ZSB0byB0aGUgYW5jaG9yIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdzZWxlY3RlZE1lbnUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydtZW51JywgJ3NlbGVjdGVkTWVudSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1lbnVMaXN0OyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhZGRFbmRMaXN0ZW5lclwiLCBcImFwcGVhclwiLCBcImNoaWxkcmVuXCIsIFwiZWFzaW5nXCIsIFwiaW5cIiwgXCJvbkVudGVyXCIsIFwib25FbnRlcmVkXCIsIFwib25FbnRlcmluZ1wiLCBcIm9uRXhpdFwiLCBcIm9uRXhpdGVkXCIsIFwib25FeGl0aW5nXCIsIFwic3R5bGVcIiwgXCJ0aW1lb3V0XCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBlbGVtZW50QWNjZXB0aW5nUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB7IGdldFRyYW5zaXRpb25Qcm9wcywgcmVmbG93IH0gZnJvbSAnLi4vdHJhbnNpdGlvbnMvdXRpbHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBnZXRTY2FsZSh2YWx1ZSkge1xuICByZXR1cm4gYHNjYWxlKCR7dmFsdWV9LCAke3ZhbHVlICoqIDJ9KWA7XG59XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgZW50ZXJpbmc6IHtcbiAgICBvcGFjaXR5OiAxLFxuICAgIHRyYW5zZm9ybTogZ2V0U2NhbGUoMSlcbiAgfSxcbiAgZW50ZXJlZDoge1xuICAgIG9wYWNpdHk6IDEsXG4gICAgdHJhbnNmb3JtOiAnbm9uZSdcbiAgfVxufTtcbi8qXG4gVE9ETyB2NjogcmVtb3ZlXG4gQ29uZGl0aW9uYWxseSBhcHBseSBhIHdvcmthcm91bmQgZm9yIHRoZSBDU1MgdHJhbnNpdGlvbiBidWcgaW4gU2FmYXJpIDE1LjQgLyBXZWJLaXQgYnJvd3NlcnMuXG4gKi9cblxuY29uc3QgaXNXZWJLaXQxNTQgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSooc2FmYXJpfG1vYmlsZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmIC8ob3MgfHZlcnNpb25cXC8pMTUoLnxfKTQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuLyoqXG4gKiBUaGUgR3JvdyB0cmFuc2l0aW9uIGlzIHVzZWQgYnkgdGhlIFtUb29sdGlwXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdG9vbHRpcC8pIGFuZFxuICogW1BvcG92ZXJdKC9tYXRlcmlhbC11aS9yZWFjdC1wb3BvdmVyLykgY29tcG9uZW50cy5cbiAqIEl0IHVzZXMgW3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXApIGludGVybmFsbHkuXG4gKi9cblxuY29uc3QgR3JvdyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEdyb3cocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgYWRkRW5kTGlzdGVuZXIsXG4gICAgYXBwZWFyID0gdHJ1ZSxcbiAgICBjaGlsZHJlbixcbiAgICBlYXNpbmcsXG4gICAgaW46IGluUHJvcCxcbiAgICBvbkVudGVyLFxuICAgIG9uRW50ZXJlZCxcbiAgICBvbkVudGVyaW5nLFxuICAgIG9uRXhpdCxcbiAgICBvbkV4aXRlZCxcbiAgICBvbkV4aXRpbmcsXG4gICAgc3R5bGUsXG4gICAgdGltZW91dCA9ICdhdXRvJyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBUcmFuc2l0aW9uXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCB0aW1lciA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBhdXRvVGltZW91dCA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGZvcmVpZ25SZWYgPSB1c2VGb3JrUmVmKGNoaWxkcmVuLnJlZiwgcmVmKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihub2RlUmVmLCBmb3JlaWduUmVmKTtcblxuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50OyAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cblxuICAgICAgaWYgKG1heWJlSXNBcHBlYXJpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUsIG1heWJlSXNBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmluZyk7XG4gIGNvbnN0IGhhbmRsZUVudGVyID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjaygobm9kZSwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICByZWZsb3cobm9kZSk7IC8vIFNvIHRoZSBhbmltYXRpb24gYWx3YXlzIHN0YXJ0IGZyb20gdGhlIHN0YXJ0LlxuXG4gICAgY29uc3Qge1xuICAgICAgZHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9ID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdlbnRlcidcbiAgICB9KTtcbiAgICBsZXQgZHVyYXRpb247XG5cbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICBkdXJhdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmdldEF1dG9IZWlnaHREdXJhdGlvbihub2RlLmNsaWVudEhlaWdodCk7XG4gICAgICBhdXRvVGltZW91dC5jdXJyZW50ID0gZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgIH1cblxuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IFt0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRlbGF5XG4gICAgfSksIHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgZHVyYXRpb246IGlzV2ViS2l0MTU0ID8gZHVyYXRpb24gOiBkdXJhdGlvbiAqIDAuNjY2LFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0pXS5qb2luKCcsJyk7XG5cbiAgICBpZiAob25FbnRlcikge1xuICAgICAgb25FbnRlcihub2RlLCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRW50ZXJlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmVkKTtcbiAgY29uc3QgaGFuZGxlRXhpdGluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0aW5nKTtcbiAgY29uc3QgaGFuZGxlRXhpdCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9ID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdleGl0J1xuICAgIH0pO1xuICAgIGxldCBkdXJhdGlvbjtcblxuICAgIGlmICh0aW1lb3V0ID09PSAnYXV0bycpIHtcbiAgICAgIGR1cmF0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuZ2V0QXV0b0hlaWdodER1cmF0aW9uKG5vZGUuY2xpZW50SGVpZ2h0KTtcbiAgICAgIGF1dG9UaW1lb3V0LmN1cnJlbnQgPSBkdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb247XG4gICAgfVxuXG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gW3RoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHtcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgZGVsYXlcbiAgICB9KSwgdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICBkdXJhdGlvbjogaXNXZWJLaXQxNTQgPyBkdXJhdGlvbiA6IGR1cmF0aW9uICogMC42NjYsXG4gICAgICBkZWxheTogaXNXZWJLaXQxNTQgPyBkZWxheSA6IGRlbGF5IHx8IGR1cmF0aW9uICogMC4zMzMsXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0pXS5qb2luKCcsJyk7XG4gICAgbm9kZS5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICBub2RlLnN0eWxlLnRyYW5zZm9ybSA9IGdldFNjYWxlKDAuNzUpO1xuXG4gICAgaWYgKG9uRXhpdCkge1xuICAgICAgb25FeGl0KG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0ZWQpO1xuXG4gIGNvbnN0IGhhbmRsZUFkZEVuZExpc3RlbmVyID0gbmV4dCA9PiB7XG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgdGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQobmV4dCwgYXV0b1RpbWVvdXQuY3VycmVudCB8fCAwKTtcbiAgICB9XG5cbiAgICBpZiAoYWRkRW5kTGlzdGVuZXIpIHtcbiAgICAgIC8vIE9sZCBjYWxsIHNpZ25hdHVyZSBiZWZvcmUgYHJlYWN0LXRyYW5zaXRpb24tZ3JvdXBgIGltcGxlbWVudGVkIGBub2RlUmVmYFxuICAgICAgYWRkRW5kTGlzdGVuZXIobm9kZVJlZi5jdXJyZW50LCBuZXh0KTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBhcHBlYXI6IGFwcGVhcixcbiAgICBpbjogaW5Qcm9wLFxuICAgIG5vZGVSZWY6IG5vZGVSZWYsXG4gICAgb25FbnRlcjogaGFuZGxlRW50ZXIsXG4gICAgb25FbnRlcmVkOiBoYW5kbGVFbnRlcmVkLFxuICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nLFxuICAgIG9uRXhpdDogaGFuZGxlRXhpdCxcbiAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgIG9uRXhpdGluZzogaGFuZGxlRXhpdGluZyxcbiAgICBhZGRFbmRMaXN0ZW5lcjogaGFuZGxlQWRkRW5kTGlzdGVuZXIsXG4gICAgdGltZW91dDogdGltZW91dCA9PT0gJ2F1dG8nID8gbnVsbCA6IHRpbWVvdXRcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogKHN0YXRlLCBjaGlsZFByb3BzKSA9PiB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgX2V4dGVuZHMoe1xuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgdHJhbnNmb3JtOiBnZXRTY2FsZSgwLjc1KSxcbiAgICAgICAgICB2aXNpYmlsaXR5OiBzdGF0ZSA9PT0gJ2V4aXRlZCcgJiYgIWluUHJvcCA/ICdoaWRkZW4nIDogdW5kZWZpbmVkXG4gICAgICAgIH0sIHN0eWxlc1tzdGF0ZV0sIHN0eWxlLCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksXG4gICAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICB9LCBjaGlsZFByb3BzKSk7XG4gICAgfVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdyb3cucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZyBET01cbiAgICogbm9kZSBhbmQgYSBkb25lIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBOb3RlOiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW4gaXQgZmlyc3QgbW91bnRzIGlmIGBpbmAgaXMgYWxzbyBgdHJ1ZWAuXG4gICAqIFNldCB0aGlzIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdGlvbiB0aW1pbmcgZnVuY3Rpb24uXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSBlYXNpbmcgb3IgYSBvYmplY3QgY29udGFpbmluZyBlbnRlciBhbmQgZXhpdCB2YWx1ZXMuXG4gICAqL1xuICBlYXNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXhpdDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0cmFuc2l0aW9uIGluLlxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKlxuICAgKiBTZXQgdG8gJ2F1dG8nIHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRyYW5zaXRpb24gdGltZSBiYXNlZCBvbiBoZWlnaHQuXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pXG59IDogdm9pZCAwO1xuR3Jvdy5tdWlTdXBwb3J0QXV0byA9IHRydWU7XG5leHBvcnQgZGVmYXVsdCBHcm93OyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlQb3BvdmVyJywgc2xvdCk7XG59XG5jb25zdCBwb3BvdmVyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVBvcG92ZXInLCBbJ3Jvb3QnLCAncGFwZXInXSk7XG5leHBvcnQgZGVmYXVsdCBwb3BvdmVyQ2xhc3NlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib25FbnRlcmluZ1wiXSxcbiAgICAgIF9leGNsdWRlZDIgPSBbXCJhY3Rpb25cIiwgXCJhbmNob3JFbFwiLCBcImFuY2hvck9yaWdpblwiLCBcImFuY2hvclBvc2l0aW9uXCIsIFwiYW5jaG9yUmVmZXJlbmNlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb250YWluZXJcIiwgXCJlbGV2YXRpb25cIiwgXCJtYXJnaW5UaHJlc2hvbGRcIiwgXCJvcGVuXCIsIFwiUGFwZXJQcm9wc1wiLCBcInRyYW5zZm9ybU9yaWdpblwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIiwgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIiwgXCJUcmFuc2l0aW9uUHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyBjaGFpblByb3BUeXBlcywgaW50ZWdlclByb3BUeXBlLCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiwgcmVmVHlwZSwgSFRNTEVsZW1lbnRUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJy4uL3V0aWxzL2RlYm91bmNlJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IG93bmVyV2luZG93IGZyb20gJy4uL3V0aWxzL293bmVyV2luZG93JztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IEdyb3cgZnJvbSAnLi4vR3Jvdyc7XG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vTW9kYWwnO1xuaW1wb3J0IFBhcGVyIGZyb20gJy4uL1BhcGVyJztcbmltcG9ydCB7IGdldFBvcG92ZXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BvcG92ZXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZnVuY3Rpb24gZ2V0T2Zmc2V0VG9wKHJlY3QsIHZlcnRpY2FsKSB7XG4gIGxldCBvZmZzZXQgPSAwO1xuXG4gIGlmICh0eXBlb2YgdmVydGljYWwgPT09ICdudW1iZXInKSB7XG4gICAgb2Zmc2V0ID0gdmVydGljYWw7XG4gIH0gZWxzZSBpZiAodmVydGljYWwgPT09ICdjZW50ZXInKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC5oZWlnaHQgLyAyO1xuICB9IGVsc2UgaWYgKHZlcnRpY2FsID09PSAnYm90dG9tJykge1xuICAgIG9mZnNldCA9IHJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXRMZWZ0KHJlY3QsIGhvcml6b250YWwpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgaWYgKHR5cGVvZiBob3Jpem9udGFsID09PSAnbnVtYmVyJykge1xuICAgIG9mZnNldCA9IGhvcml6b250YWw7XG4gIH0gZWxzZSBpZiAoaG9yaXpvbnRhbCA9PT0gJ2NlbnRlcicpIHtcbiAgICBvZmZzZXQgPSByZWN0LndpZHRoIC8gMjtcbiAgfSBlbHNlIGlmIChob3Jpem9udGFsID09PSAncmlnaHQnKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC53aWR0aDtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zZm9ybU9yaWdpblZhbHVlKHRyYW5zZm9ybU9yaWdpbikge1xuICByZXR1cm4gW3RyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsLCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWxdLm1hcChuID0+IHR5cGVvZiBuID09PSAnbnVtYmVyJyA/IGAke259cHhgIDogbikuam9pbignICcpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBhbmNob3JFbCA9PT0gJ2Z1bmN0aW9uJyA/IGFuY2hvckVsKCkgOiBhbmNob3JFbDtcbn1cblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIHBhcGVyOiBbJ3BhcGVyJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRQb3BvdmVyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IFBvcG92ZXJSb290ID0gc3R5bGVkKE1vZGFsLCB7XG4gIG5hbWU6ICdNdWlQb3BvdmVyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7fSk7XG5jb25zdCBQb3BvdmVyUGFwZXIgPSBzdHlsZWQoUGFwZXIsIHtcbiAgbmFtZTogJ011aVBvcG92ZXInLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5wYXBlclxufSkoe1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gIC8vIFNvIHdlIHNlZSB0aGUgcG9wb3ZlciB3aGVuIGl0J3MgZW1wdHkuXG4gIC8vIEl0J3MgbW9zdCBsaWtlbHkgb24gaXNzdWUgb24gdXNlcmxhbmQuXG4gIG1pbldpZHRoOiAxNixcbiAgbWluSGVpZ2h0OiAxNixcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAzMnB4KScsXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDMycHgpJyxcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMFxufSk7XG5jb25zdCBQb3BvdmVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9wb3ZlcihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpUG9wb3ZlcidcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGFjdGlvbixcbiAgICBhbmNob3JFbCxcbiAgICBhbmNob3JPcmlnaW4gPSB7XG4gICAgICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAgICBob3Jpem9udGFsOiAnbGVmdCdcbiAgICB9LFxuICAgIGFuY2hvclBvc2l0aW9uLFxuICAgIGFuY2hvclJlZmVyZW5jZSA9ICdhbmNob3JFbCcsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbnRhaW5lcjogY29udGFpbmVyUHJvcCxcbiAgICBlbGV2YXRpb24gPSA4LFxuICAgIG1hcmdpblRocmVzaG9sZCA9IDE2LFxuICAgIG9wZW4sXG4gICAgUGFwZXJQcm9wcyA9IHt9LFxuICAgIHRyYW5zZm9ybU9yaWdpbiA9IHtcbiAgICAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICAgIGhvcml6b250YWw6ICdsZWZ0J1xuICAgIH0sXG4gICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IEdyb3csXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb25Qcm9wID0gJ2F1dG8nLFxuICAgIFRyYW5zaXRpb25Qcm9wczoge1xuICAgICAgb25FbnRlcmluZ1xuICAgIH0gPSB7fVxuICB9ID0gcHJvcHMsXG4gICAgICAgIFRyYW5zaXRpb25Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLlRyYW5zaXRpb25Qcm9wcywgX2V4Y2x1ZGVkKSxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG5cbiAgY29uc3QgcGFwZXJSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgaGFuZGxlUGFwZXJSZWYgPSB1c2VGb3JrUmVmKHBhcGVyUmVmLCBQYXBlclByb3BzLnJlZik7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFuY2hvck9yaWdpbixcbiAgICBhbmNob3JSZWZlcmVuY2UsXG4gICAgZWxldmF0aW9uLFxuICAgIG1hcmdpblRocmVzaG9sZCxcbiAgICBQYXBlclByb3BzLFxuICAgIHRyYW5zZm9ybU9yaWdpbixcbiAgICBUcmFuc2l0aW9uQ29tcG9uZW50LFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uUHJvcCxcbiAgICBUcmFuc2l0aW9uUHJvcHNcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpOyAvLyBSZXR1cm5zIHRoZSB0b3AvbGVmdCBvZmZzZXQgb2YgdGhlIHBvc2l0aW9uXG4gIC8vIHRvIGF0dGFjaCB0byBvbiB0aGUgYW5jaG9yIGVsZW1lbnQgKG9yIGJvZHkgaWYgbm9uZSBpcyBwcm92aWRlZClcblxuICBjb25zdCBnZXRBbmNob3JPZmZzZXQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFuY2hvclJlZmVyZW5jZSA9PT0gJ2FuY2hvclBvc2l0aW9uJykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFhbmNob3JQb3NpdGlvbikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogWW91IG5lZWQgdG8gcHJvdmlkZSBhIGBhbmNob3JQb3NpdGlvbmAgcHJvcCB3aGVuIHVzaW5nICcgKyAnPFBvcG92ZXIgYW5jaG9yUmVmZXJlbmNlPVwiYW5jaG9yUG9zaXRpb25cIiAvPi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYW5jaG9yUG9zaXRpb247XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChhbmNob3JFbCk7IC8vIElmIGFuIGFuY2hvciBlbGVtZW50IHdhc24ndCBwcm92aWRlZCwganVzdCB1c2UgdGhlIHBhcmVudCBib2R5IGVsZW1lbnQgb2YgdGhpcyBQb3BvdmVyXG5cbiAgICBjb25zdCBhbmNob3JFbGVtZW50ID0gcmVzb2x2ZWRBbmNob3JFbCAmJiByZXNvbHZlZEFuY2hvckVsLm5vZGVUeXBlID09PSAxID8gcmVzb2x2ZWRBbmNob3JFbCA6IG93bmVyRG9jdW1lbnQocGFwZXJSZWYuY3VycmVudCkuYm9keTtcbiAgICBjb25zdCBhbmNob3JSZWN0ID0gYW5jaG9yRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBib3ggPSBhbmNob3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJiBib3gudG9wID09PSAwICYmIGJveC5sZWZ0ID09PSAwICYmIGJveC5yaWdodCA9PT0gMCAmJiBib3guYm90dG9tID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgJ1RoZSBhbmNob3IgZWxlbWVudCBzaG91bGQgYmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgbGF5b3V0LicsIFwiTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIGRvY3VtZW50IG9yIHRoYXQgaXQncyBub3QgZGlzcGxheSBub25lLlwiXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogYW5jaG9yUmVjdC50b3AgKyBnZXRPZmZzZXRUb3AoYW5jaG9yUmVjdCwgYW5jaG9yT3JpZ2luLnZlcnRpY2FsKSxcbiAgICAgIGxlZnQ6IGFuY2hvclJlY3QubGVmdCArIGdldE9mZnNldExlZnQoYW5jaG9yUmVjdCwgYW5jaG9yT3JpZ2luLmhvcml6b250YWwpXG4gICAgfTtcbiAgfSwgW2FuY2hvckVsLCBhbmNob3JPcmlnaW4uaG9yaXpvbnRhbCwgYW5jaG9yT3JpZ2luLnZlcnRpY2FsLCBhbmNob3JQb3NpdGlvbiwgYW5jaG9yUmVmZXJlbmNlXSk7IC8vIFJldHVybnMgdGhlIGJhc2UgdHJhbnNmb3JtIG9yaWdpbiB1c2luZyB0aGUgZWxlbWVudFxuXG4gIGNvbnN0IGdldFRyYW5zZm9ybU9yaWdpbiA9IFJlYWN0LnVzZUNhbGxiYWNrKGVsZW1SZWN0ID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmVydGljYWw6IGdldE9mZnNldFRvcChlbGVtUmVjdCwgdHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsKSxcbiAgICAgIGhvcml6b250YWw6IGdldE9mZnNldExlZnQoZWxlbVJlY3QsIHRyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsKVxuICAgIH07XG4gIH0sIFt0cmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCwgdHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsXSk7XG4gIGNvbnN0IGdldFBvc2l0aW9uaW5nU3R5bGUgPSBSZWFjdC51c2VDYWxsYmFjayhlbGVtZW50ID0+IHtcbiAgICBjb25zdCBlbGVtUmVjdCA9IHtcbiAgICAgIHdpZHRoOiBlbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodFxuICAgIH07IC8vIEdldCB0aGUgdHJhbnNmb3JtIG9yaWdpbiBwb2ludCBvbiB0aGUgZWxlbWVudCBpdHNlbGZcblxuICAgIGNvbnN0IGVsZW1UcmFuc2Zvcm1PcmlnaW4gPSBnZXRUcmFuc2Zvcm1PcmlnaW4oZWxlbVJlY3QpO1xuXG4gICAgaWYgKGFuY2hvclJlZmVyZW5jZSA9PT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3A6IG51bGwsXG4gICAgICAgIGxlZnQ6IG51bGwsXG4gICAgICAgIHRyYW5zZm9ybU9yaWdpbjogZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUoZWxlbVRyYW5zZm9ybU9yaWdpbilcbiAgICAgIH07XG4gICAgfSAvLyBHZXQgdGhlIG9mZnNldCBvZiB0aGUgYW5jaG9yaW5nIGVsZW1lbnRcblxuXG4gICAgY29uc3QgYW5jaG9yT2Zmc2V0ID0gZ2V0QW5jaG9yT2Zmc2V0KCk7IC8vIENhbGN1bGF0ZSBlbGVtZW50IHBvc2l0aW9uaW5nXG5cbiAgICBsZXQgdG9wID0gYW5jaG9yT2Zmc2V0LnRvcCAtIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWw7XG4gICAgbGV0IGxlZnQgPSBhbmNob3JPZmZzZXQubGVmdCAtIGVsZW1UcmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbDtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBlbGVtUmVjdC5oZWlnaHQ7XG4gICAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgZWxlbVJlY3Qud2lkdGg7IC8vIFVzZSB0aGUgcGFyZW50IHdpbmRvdyBvZiB0aGUgYW5jaG9yRWwgaWYgcHJvdmlkZWRcblxuICAgIGNvbnN0IGNvbnRhaW5lcldpbmRvdyA9IG93bmVyV2luZG93KHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkpOyAvLyBXaW5kb3cgdGhyZXNob2xkcyB0YWtpbmcgcmVxdWlyZWQgbWFyZ2luIGludG8gYWNjb3VudFxuXG4gICAgY29uc3QgaGVpZ2h0VGhyZXNob2xkID0gY29udGFpbmVyV2luZG93LmlubmVySGVpZ2h0IC0gbWFyZ2luVGhyZXNob2xkO1xuICAgIGNvbnN0IHdpZHRoVGhyZXNob2xkID0gY29udGFpbmVyV2luZG93LmlubmVyV2lkdGggLSBtYXJnaW5UaHJlc2hvbGQ7IC8vIENoZWNrIGlmIHRoZSB2ZXJ0aWNhbCBheGlzIG5lZWRzIHNoaWZ0aW5nXG5cbiAgICBpZiAodG9wIDwgbWFyZ2luVGhyZXNob2xkKSB7XG4gICAgICBjb25zdCBkaWZmID0gdG9wIC0gbWFyZ2luVGhyZXNob2xkO1xuICAgICAgdG9wIC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsICs9IGRpZmY7XG4gICAgfSBlbHNlIGlmIChib3R0b20gPiBoZWlnaHRUaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSBib3R0b20gLSBoZWlnaHRUaHJlc2hvbGQ7XG4gICAgICB0b3AgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWwgKz0gZGlmZjtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGVsZW1SZWN0LmhlaWdodCA+IGhlaWdodFRocmVzaG9sZCAmJiBlbGVtUmVjdC5oZWlnaHQgJiYgaGVpZ2h0VGhyZXNob2xkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBwb3BvdmVyIGNvbXBvbmVudCBpcyB0b28gdGFsbC4nLCBgU29tZSBwYXJ0IG9mIGl0IGNhbiBub3QgYmUgc2VlbiBvbiB0aGUgc2NyZWVuICgke2VsZW1SZWN0LmhlaWdodCAtIGhlaWdodFRocmVzaG9sZH1weCkuYCwgJ1BsZWFzZSBjb25zaWRlciBhZGRpbmcgYSBgbWF4LWhlaWdodGAgdG8gaW1wcm92ZSB0aGUgdXNlci1leHBlcmllbmNlLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9IC8vIENoZWNrIGlmIHRoZSBob3Jpem9udGFsIGF4aXMgbmVlZHMgc2hpZnRpbmdcblxuXG4gICAgaWYgKGxlZnQgPCBtYXJnaW5UaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSBsZWZ0IC0gbWFyZ2luVGhyZXNob2xkO1xuICAgICAgbGVmdCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsICs9IGRpZmY7XG4gICAgfSBlbHNlIGlmIChyaWdodCA+IHdpZHRoVGhyZXNob2xkKSB7XG4gICAgICBjb25zdCBkaWZmID0gcmlnaHQgLSB3aWR0aFRocmVzaG9sZDtcbiAgICAgIGxlZnQgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCArPSBkaWZmO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGAke01hdGgucm91bmQodG9wKX1weGAsXG4gICAgICBsZWZ0OiBgJHtNYXRoLnJvdW5kKGxlZnQpfXB4YCxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUoZWxlbVRyYW5zZm9ybU9yaWdpbilcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIGFuY2hvclJlZmVyZW5jZSwgZ2V0QW5jaG9yT2Zmc2V0LCBnZXRUcmFuc2Zvcm1PcmlnaW4sIG1hcmdpblRocmVzaG9sZF0pO1xuICBjb25zdCBzZXRQb3NpdGlvbmluZ1N0eWxlcyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gcGFwZXJSZWYuY3VycmVudDtcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9uaW5nID0gZ2V0UG9zaXRpb25pbmdTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChwb3NpdGlvbmluZy50b3AgIT09IG51bGwpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gcG9zaXRpb25pbmcudG9wO1xuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbmluZy5sZWZ0ICE9PSBudWxsKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBwb3NpdGlvbmluZy5sZWZ0O1xuICAgIH1cblxuICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gcG9zaXRpb25pbmcudHJhbnNmb3JtT3JpZ2luO1xuICB9LCBbZ2V0UG9zaXRpb25pbmdTdHlsZV0pO1xuXG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gKGVsZW1lbnQsIGlzQXBwZWFyaW5nKSA9PiB7XG4gICAgaWYgKG9uRW50ZXJpbmcpIHtcbiAgICAgIG9uRW50ZXJpbmcoZWxlbWVudCwgaXNBcHBlYXJpbmcpO1xuICAgIH1cblxuICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gIH07XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3Blbikge1xuICAgICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgICB9XG4gIH0pO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbiwgKCkgPT4gb3BlbiA/IHtcbiAgICB1cGRhdGVQb3NpdGlvbjogKCkgPT4ge1xuICAgICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgICB9XG4gIH0gOiBudWxsLCBbb3Blbiwgc2V0UG9zaXRpb25pbmdTdHlsZXNdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlUmVzaXplID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgICB9KTtcbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhhbmNob3JFbCk7XG4gICAgY29udGFpbmVyV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZS5jbGVhcigpO1xuICAgICAgY29udGFpbmVyV2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgfTtcbiAgfSwgW2FuY2hvckVsLCBvcGVuLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBsZXQgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uUHJvcDtcblxuICBpZiAodHJhbnNpdGlvbkR1cmF0aW9uUHJvcCA9PT0gJ2F1dG8nICYmICFUcmFuc2l0aW9uQ29tcG9uZW50Lm11aVN1cHBvcnRBdXRvKSB7XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdW5kZWZpbmVkO1xuICB9IC8vIElmIHRoZSBjb250YWluZXIgcHJvcCBpcyBwcm92aWRlZCwgdXNlIHRoYXRcbiAgLy8gSWYgdGhlIGFuY2hvckVsIHByb3AgaXMgcHJvdmlkZWQsIHVzZSBpdHMgcGFyZW50IGJvZHkgZWxlbWVudCBhcyB0aGUgY29udGFpbmVyXG4gIC8vIElmIG5laXRoZXIgYXJlIHByb3ZpZGVkIGxldCB0aGUgTW9kYWwgdGFrZSBjYXJlIG9mIGNob29zaW5nIHRoZSBjb250YWluZXJcblxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRhaW5lclByb3AgfHwgKGFuY2hvckVsID8gb3duZXJEb2N1bWVudChyZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpKS5ib2R5IDogdW5kZWZpbmVkKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFBvcG92ZXJSb290LCBfZXh0ZW5kcyh7XG4gICAgQmFja2Ryb3BQcm9wczoge1xuICAgICAgaW52aXNpYmxlOiB0cnVlXG4gICAgfSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgIG9wZW46IG9wZW4sXG4gICAgcmVmOiByZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICBhcHBlYXI6IHRydWUsXG4gICAgICBpbjogb3BlbixcbiAgICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nLFxuICAgICAgdGltZW91dDogdHJhbnNpdGlvbkR1cmF0aW9uXG4gICAgfSwgVHJhbnNpdGlvblByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goUG9wb3ZlclBhcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgIGVsZXZhdGlvbjogZWxldmF0aW9uXG4gICAgICB9LCBQYXBlclByb3BzLCB7XG4gICAgICAgIHJlZjogaGFuZGxlUGFwZXJSZWYsXG4gICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnBhcGVyLCBQYXBlclByb3BzLmNsYXNzTmFtZSksXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgfSkpXG4gICAgfSkpXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUG9wb3Zlci5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQSByZWYgZm9yIGltcGVyYXRpdmUgYWN0aW9ucy5cbiAgICogSXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgdXBkYXRlUG9zaXRpb24oKSBhY3Rpb24uXG4gICAqL1xuICBhY3Rpb246IHJlZlR5cGUsXG5cbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBJdCdzIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wb3Zlci5cbiAgICovXG4gIGFuY2hvckVsOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksIHByb3BzID0+IHtcbiAgICBpZiAocHJvcHMub3BlbiAmJiAoIXByb3BzLmFuY2hvclJlZmVyZW5jZSB8fCBwcm9wcy5hbmNob3JSZWZlcmVuY2UgPT09ICdhbmNob3JFbCcpKSB7XG4gICAgICBjb25zdCByZXNvbHZlZEFuY2hvckVsID0gcmVzb2x2ZUFuY2hvckVsKHByb3BzLmFuY2hvckVsKTtcblxuICAgICAgaWYgKHJlc29sdmVkQW5jaG9yRWwgJiYgcmVzb2x2ZWRBbmNob3JFbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICBjb25zdCBib3ggPSByZXNvbHZlZEFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmIGJveC50b3AgPT09IDAgJiYgYm94LmxlZnQgPT09IDAgJiYgYm94LnJpZ2h0ID09PSAwICYmIGJveC5ib3R0b20gPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFsnTVVJOiBUaGUgYGFuY2hvckVsYCBwcm9wIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgaXMgaW52YWxpZC4nLCAnVGhlIGFuY2hvciBlbGVtZW50IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBsYXlvdXQuJywgXCJNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgcHJlc2VudCBpbiB0aGUgZG9jdW1lbnQgb3IgdGhhdCBpdCdzIG5vdCBkaXNwbGF5IG5vbmUuXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgYEl0IHNob3VsZCBiZSBhbiBFbGVtZW50IGluc3RhbmNlIGJ1dCBpdCdzIFxcYCR7cmVzb2x2ZWRBbmNob3JFbH1cXGAgaW5zdGVhZC5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBwb2ludCBvbiB0aGUgYW5jaG9yIHdoZXJlIHRoZSBwb3BvdmVyJ3NcbiAgICogYGFuY2hvckVsYCB3aWxsIGF0dGFjaCB0by4gVGhpcyBpcyBub3QgdXNlZCB3aGVuIHRoZVxuICAgKiBhbmNob3JSZWZlcmVuY2UgaXMgJ2FuY2hvclBvc2l0aW9uJy5cbiAgICpcbiAgICogT3B0aW9uczpcbiAgICogdmVydGljYWw6IFt0b3AsIGNlbnRlciwgYm90dG9tXTtcbiAgICogaG9yaXpvbnRhbDogW2xlZnQsIGNlbnRlciwgcmlnaHRdLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgdmVydGljYWw6ICd0b3AnLFxuICAgKiAgIGhvcml6b250YWw6ICdsZWZ0JyxcbiAgICogfVxuICAgKi9cbiAgYW5jaG9yT3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhvcml6b250YWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdsZWZ0JywgJ3JpZ2h0J10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcbiAgICB2ZXJ0aWNhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2NlbnRlcicsICd0b3AnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBwb3NpdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqIFRoZSBjb29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGFwcGxpY2F0aW9uJ3MgY2xpZW50IGFyZWEuXG4gICAqL1xuICBhbmNob3JQb3NpdGlvbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBsZWZ0OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgdG9wOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoaXMgZGV0ZXJtaW5lcyB3aGljaCBhbmNob3IgcHJvcCB0byByZWZlciB0byB3aGVuIHNldHRpbmdcbiAgICogdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKiBAZGVmYXVsdCAnYW5jaG9yRWwnXG4gICAqL1xuICBhbmNob3JSZWZlcmVuY2U6IFByb3BUeXBlcy5vbmVPZihbJ2FuY2hvckVsJywgJ2FuY2hvclBvc2l0aW9uJywgJ25vbmUnXSksXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50LCBjb21wb25lbnQgaW5zdGFuY2UsIG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlaXRoZXIuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIHBhc3NlZCB0byB0aGUgTW9kYWwgY29tcG9uZW50LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSBib2R5IG9mIHRoZSBhbmNob3JFbCdzIHRvcC1sZXZlbCBkb2N1bWVudCBvYmplY3QsXG4gICAqIHNvIGl0J3Mgc2ltcGx5IGBkb2N1bWVudC5ib2R5YCBtb3N0IG9mIHRoZSB0aW1lLlxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG5cbiAgLyoqXG4gICAqIFRoZSBlbGV2YXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqIEBkZWZhdWx0IDhcbiAgICovXG4gIGVsZXZhdGlvbjogaW50ZWdlclByb3BUeXBlLFxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IGNsb3NlIHRvIHRoZSBlZGdlIG9mIHRoZSB3aW5kb3cgdGhlIHBvcG92ZXIgY2FuIGFwcGVhci5cbiAgICogQGRlZmF1bHQgMTZcbiAgICovXG4gIG1hcmdpblRocmVzaG9sZDogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVGhlIGByZWFzb25gIHBhcmFtZXRlciBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlc3BvbnNlIHRvIGBvbkNsb3NlYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFBhcGVyYF0oL21hdGVyaWFsLXVpL2FwaS9wYXBlci8pIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBQYXBlclByb3BzOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAuc2hhcGUoe1xuICAgIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWZcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9pbnQgb24gdGhlIHBvcG92ZXIgd2hpY2hcbiAgICogd2lsbCBhdHRhY2ggdG8gdGhlIGFuY2hvcidzIG9yaWdpbi5cbiAgICpcbiAgICogT3B0aW9uczpcbiAgICogdmVydGljYWw6IFt0b3AsIGNlbnRlciwgYm90dG9tLCB4KHB4KV07XG4gICAqIGhvcml6b250YWw6IFtsZWZ0LCBjZW50ZXIsIHJpZ2h0LCB4KHB4KV0uXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAqICAgaG9yaXpvbnRhbDogJ2xlZnQnLFxuICAgKiB9XG4gICAqL1xuICB0cmFuc2Zvcm1PcmlnaW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaG9yaXpvbnRhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2xlZnQnLCAncmlnaHQnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkLFxuICAgIHZlcnRpY2FsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib3R0b20nLCAnY2VudGVyJywgJ3RvcCddKSwgUHJvcFR5cGVzLm51bWJlcl0pLmlzUmVxdWlyZWRcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHRyYW5zaXRpb24uXG4gICAqIFtGb2xsb3cgdGhpcyBndWlkZV0oL21hdGVyaWFsLXVpL3RyYW5zaXRpb25zLyN0cmFuc2l0aW9uY29tcG9uZW50LXByb3ApIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IEdyb3dcbiAgICovXG4gIFRyYW5zaXRpb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogU2V0IHRvICdhdXRvJyB0byBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHRpbWUgYmFzZWQgb24gaGVpZ2h0LlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSB0cmFuc2l0aW9uIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBlbGVtZW50IGlzIGJhc2VkIG9uIHRoaXMgW2BUcmFuc2l0aW9uYF0oaHR0cDovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24vKSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBUcmFuc2l0aW9uUHJvcHM6IFByb3BUeXBlcy5vYmplY3Rcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBQb3BvdmVyOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNZW51Jywgc2xvdCk7XG59XG5jb25zdCBtZW51Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU1lbnUnLCBbJ3Jvb3QnLCAncGFwZXInLCAnbGlzdCddKTtcbmV4cG9ydCBkZWZhdWx0IG1lbnVDbGFzc2VzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvbkVudGVyaW5nXCJdLFxuICAgICAgX2V4Y2x1ZGVkMiA9IFtcImF1dG9Gb2N1c1wiLCBcImNoaWxkcmVuXCIsIFwiZGlzYWJsZUF1dG9Gb2N1c0l0ZW1cIiwgXCJNZW51TGlzdFByb3BzXCIsIFwib25DbG9zZVwiLCBcIm9wZW5cIiwgXCJQYXBlclByb3BzXCIsIFwiUG9wb3ZlckNsYXNzZXNcIiwgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIiwgXCJUcmFuc2l0aW9uUHJvcHNcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IEhUTUxFbGVtZW50VHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IE1lbnVMaXN0IGZyb20gJy4uL01lbnVMaXN0JztcbmltcG9ydCBQYXBlciBmcm9tICcuLi9QYXBlcic7XG5pbXBvcnQgUG9wb3ZlciBmcm9tICcuLi9Qb3BvdmVyJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldE1lbnVVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL21lbnVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBSVExfT1JJR0lOID0ge1xuICB2ZXJ0aWNhbDogJ3RvcCcsXG4gIGhvcml6b250YWw6ICdyaWdodCdcbn07XG5jb25zdCBMVFJfT1JJR0lOID0ge1xuICB2ZXJ0aWNhbDogJ3RvcCcsXG4gIGhvcml6b250YWw6ICdsZWZ0J1xufTtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIHBhcGVyOiBbJ3BhcGVyJ10sXG4gICAgbGlzdDogWydsaXN0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRNZW51VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IE1lbnVSb290ID0gc3R5bGVkKFBvcG92ZXIsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHt9KTtcbmNvbnN0IE1lbnVQYXBlciA9IHN0eWxlZChQYXBlciwge1xuICBuYW1lOiAnTXVpTWVudScsXG4gIHNsb3Q6ICdQYXBlcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnBhcGVyXG59KSh7XG4gIC8vIHNwZWNaOiBUaGUgbWF4aW11bSBoZWlnaHQgb2YgYSBzaW1wbGUgbWVudSBzaG91bGQgYmUgb25lIG9yIG1vcmUgcm93cyBsZXNzIHRoYW4gdGhlIHZpZXdcbiAgLy8gaGVpZ2h0LiBUaGlzIGVuc3VyZXMgYSB0YXBhYmxlIGFyZWEgb3V0c2lkZSBvZiB0aGUgc2ltcGxlIG1lbnUgd2l0aCB3aGljaCB0byBkaXNtaXNzXG4gIC8vIHRoZSBtZW51LlxuICBtYXhIZWlnaHQ6ICdjYWxjKDEwMCUgLSA5NnB4KScsXG4gIC8vIEFkZCBpT1MgbW9tZW50dW0gc2Nyb2xsaW5nIGZvciBpT1MgPCAxMy4wXG4gIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnXG59KTtcbmNvbnN0IE1lbnVNZW51TGlzdCA9IHN0eWxlZChNZW51TGlzdCwge1xuICBuYW1lOiAnTXVpTWVudScsXG4gIHNsb3Q6ICdMaXN0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubGlzdFxufSkoe1xuICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICBvdXRsaW5lOiAwXG59KTtcbmNvbnN0IE1lbnUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNZW51KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlNZW51J1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgYXV0b0ZvY3VzID0gdHJ1ZSxcbiAgICBjaGlsZHJlbixcbiAgICBkaXNhYmxlQXV0b0ZvY3VzSXRlbSA9IGZhbHNlLFxuICAgIE1lbnVMaXN0UHJvcHMgPSB7fSxcbiAgICBvbkNsb3NlLFxuICAgIG9wZW4sXG4gICAgUGFwZXJQcm9wcyA9IHt9LFxuICAgIFBvcG92ZXJDbGFzc2VzLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9ICdhdXRvJyxcbiAgICBUcmFuc2l0aW9uUHJvcHM6IHtcbiAgICAgIG9uRW50ZXJpbmdcbiAgICB9ID0ge30sXG4gICAgdmFyaWFudCA9ICdzZWxlY3RlZE1lbnUnXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgVHJhbnNpdGlvblByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMuVHJhbnNpdGlvblByb3BzLCBfZXhjbHVkZWQpLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQyKTtcblxuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IGlzUnRsID0gdGhlbWUuZGlyZWN0aW9uID09PSAncnRsJztcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYXV0b0ZvY3VzLFxuICAgIGRpc2FibGVBdXRvRm9jdXNJdGVtLFxuICAgIE1lbnVMaXN0UHJvcHMsXG4gICAgb25FbnRlcmluZyxcbiAgICBQYXBlclByb3BzLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICBUcmFuc2l0aW9uUHJvcHMsXG4gICAgdmFyaWFudFxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IGF1dG9Gb2N1c0l0ZW0gPSBhdXRvRm9jdXMgJiYgIWRpc2FibGVBdXRvRm9jdXNJdGVtICYmIG9wZW47XG4gIGNvbnN0IG1lbnVMaXN0QWN0aW9uc1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcblxuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IChlbGVtZW50LCBpc0FwcGVhcmluZykgPT4ge1xuICAgIGlmIChtZW51TGlzdEFjdGlvbnNSZWYuY3VycmVudCkge1xuICAgICAgbWVudUxpc3RBY3Rpb25zUmVmLmN1cnJlbnQuYWRqdXN0U3R5bGVGb3JTY3JvbGxiYXIoZWxlbWVudCwgdGhlbWUpO1xuICAgIH1cblxuICAgIGlmIChvbkVudGVyaW5nKSB7XG4gICAgICBvbkVudGVyaW5nKGVsZW1lbnQsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTGlzdEtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIG9uQ2xvc2UoZXZlbnQsICd0YWJLZXlEb3duJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogdGhlIGluZGV4IG9mIHRoZSBpdGVtIHNob3VsZCByZWNlaXZlIGZvY3VzXG4gICAqIGluIGEgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAgaXQncyB0aGUgZmlyc3QgYHNlbGVjdGVkYCBpdGVtXG4gICAqIG90aGVyd2lzZSBpdCdzIHRoZSB2ZXJ5IGZpcnN0IGl0ZW0uXG4gICAqL1xuXG5cbiAgbGV0IGFjdGl2ZUl0ZW1JbmRleCA9IC0xOyAvLyBzaW5jZSB3ZSBpbmplY3QgZm9jdXMgcmVsYXRlZCBwcm9wcyBpbnRvIGNoaWxkcmVuIHdlIGhhdmUgdG8gZG8gYSBsb29rYWhlYWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBgc2VsZWN0ZWRgIGl0ZW0uIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYXN0IGBzZWxlY3RlZGBcbiAgLy8gaXRlbSBhbmQgdXNlIHRoZSBmaXJzdCB2YWxpZCBpdGVtIGFzIGEgZmFsbGJhY2tcblxuICBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICBpZiAoISAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIE1lbnUgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoaWxkLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBpZiAodmFyaWFudCA9PT0gJ3NlbGVjdGVkTWVudScgJiYgY2hpbGQucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE1lbnVSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NlczogUG9wb3ZlckNsYXNzZXMsXG4gICAgb25DbG9zZTogb25DbG9zZSxcbiAgICBhbmNob3JPcmlnaW46IHtcbiAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgIGhvcml6b250YWw6IGlzUnRsID8gJ3JpZ2h0JyA6ICdsZWZ0J1xuICAgIH0sXG4gICAgdHJhbnNmb3JtT3JpZ2luOiBpc1J0bCA/IFJUTF9PUklHSU4gOiBMVFJfT1JJR0lOLFxuICAgIFBhcGVyUHJvcHM6IF9leHRlbmRzKHtcbiAgICAgIGNvbXBvbmVudDogTWVudVBhcGVyXG4gICAgfSwgUGFwZXJQcm9wcywge1xuICAgICAgY2xhc3NlczogX2V4dGVuZHMoe30sIFBhcGVyUHJvcHMuY2xhc3Nlcywge1xuICAgICAgICByb290OiBjbGFzc2VzLnBhcGVyXG4gICAgICB9KVxuICAgIH0pLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5yb290LFxuICAgIG9wZW46IG9wZW4sXG4gICAgcmVmOiByZWYsXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgVHJhbnNpdGlvblByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZ1xuICAgIH0sIFRyYW5zaXRpb25Qcm9wcyksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChNZW51TWVudUxpc3QsIF9leHRlbmRzKHtcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlTGlzdEtleURvd24sXG4gICAgICBhY3Rpb25zOiBtZW51TGlzdEFjdGlvbnNSZWYsXG4gICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyAmJiAoYWN0aXZlSXRlbUluZGV4ID09PSAtMSB8fCBkaXNhYmxlQXV0b0ZvY3VzSXRlbSksXG4gICAgICBhdXRvRm9jdXNJdGVtOiBhdXRvRm9jdXNJdGVtLFxuICAgICAgdmFyaWFudDogdmFyaWFudFxuICAgIH0sIE1lbnVMaXN0UHJvcHMsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmxpc3QsIE1lbnVMaXN0UHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1lbnUucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBJdCdzIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbWVudS5cbiAgICovXG4gIGFuY2hvckVsOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCAoRGVmYXVsdCkgd2lsbCBmb2N1cyB0aGUgYFtyb2xlPVwibWVudVwiXWAgaWYgbm8gZm9jdXNhYmxlIGNoaWxkIGlzIGZvdW5kLiBEaXNhYmxlZFxuICAgKiBjaGlsZHJlbiBhcmUgbm90IGZvY3VzYWJsZS4gSWYgeW91IHNldCB0aGlzIHByb3AgdG8gYGZhbHNlYCBmb2N1cyB3aWxsIGJlIHBsYWNlZFxuICAgKiBvbiB0aGUgcGFyZW50IG1vZGFsIGNvbnRhaW5lci4gVGhpcyBoYXMgc2V2ZXJlIGFjY2Vzc2liaWxpdHkgaW1wbGljYXRpb25zXG4gICAqIGFuZCBzaG91bGQgb25seSBiZSBjb25zaWRlcmVkIGlmIHlvdSBtYW5hZ2UgZm9jdXMgb3RoZXJ3aXNlLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBNZW51IGNvbnRlbnRzLCBub3JtYWxseSBgTWVudUl0ZW1gcy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogV2hlbiBvcGVuaW5nIHRoZSBtZW51IHdpbGwgbm90IGZvY3VzIHRoZSBhY3RpdmUgaXRlbSBidXQgdGhlIGBbcm9sZT1cIm1lbnVcIl1gXG4gICAqIHVubGVzcyBgYXV0b0ZvY3VzYCBpcyBhbHNvIHNldCB0byBgZmFsc2VgLiBOb3QgdXNpbmcgdGhlIGRlZmF1bHQgbWVhbnMgbm90XG4gICAqIGZvbGxvd2luZyBXQUktQVJJQSBhdXRob3JpbmcgcHJhY3RpY2VzLiBQbGVhc2UgYmUgY29uc2lkZXJhdGUgYWJvdXQgcG9zc2libGVcbiAgICogYWNjZXNzaWJpbGl0eSBpbXBsaWNhdGlvbnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQXV0b0ZvY3VzSXRlbTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgTWVudUxpc3RgXSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUtbGlzdC8pIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBNZW51TGlzdFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gQ2FuIGJlOiBgXCJlc2NhcGVLZXlEb3duXCJgLCBgXCJiYWNrZHJvcENsaWNrXCJgLCBgXCJ0YWJLZXlEb3duXCJgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIFBhcGVyUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIGBjbGFzc2VzYCBwcm9wIGFwcGxpZWQgdG8gdGhlIFtgUG9wb3ZlcmBdKC9tYXRlcmlhbC11aS9hcGkvcG9wb3Zlci8pIGVsZW1lbnQuXG4gICAqL1xuICBQb3BvdmVyQ2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSB0cmFuc2l0aW9uIGluIGBtc2AsIG9yICdhdXRvJ1xuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSB0cmFuc2l0aW9uIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBlbGVtZW50IGlzIGJhc2VkIG9uIHRoaXMgW2BUcmFuc2l0aW9uYF0oaHR0cDovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24vKSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBUcmFuc2l0aW9uUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS4gVXNlIGBtZW51YCB0byBwcmV2ZW50IHNlbGVjdGVkIGl0ZW1zIGZyb20gaW1wYWN0aW5nIHRoZSBpbml0aWFsIGZvY3VzLlxuICAgKiBAZGVmYXVsdCAnc2VsZWN0ZWRNZW51J1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnbWVudScsICdzZWxlY3RlZE1lbnUnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNZW51OyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTmF0aXZlU2VsZWN0Jywgc2xvdCk7XG59XG5jb25zdCBuYXRpdmVTZWxlY3RDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTmF0aXZlU2VsZWN0JywgWydyb290JywgJ3NlbGVjdCcsICdtdWx0aXBsZScsICdmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnLCAnZGlzYWJsZWQnLCAnaWNvbicsICdpY29uT3BlbicsICdpY29uRmlsbGVkJywgJ2ljb25PdXRsaW5lZCcsICdpY29uU3RhbmRhcmQnLCAnbmF0aXZlSW5wdXQnXSk7XG5leHBvcnQgZGVmYXVsdCBuYXRpdmVTZWxlY3RDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcIkljb25Db21wb25lbnRcIiwgXCJpbnB1dFJlZlwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyByZWZUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBuYXRpdmVTZWxlY3RDbGFzc2VzLCB7IGdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9uYXRpdmVTZWxlY3RDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICB2YXJpYW50LFxuICAgIGRpc2FibGVkLFxuICAgIG11bHRpcGxlLFxuICAgIG9wZW5cbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHNlbGVjdDogWydzZWxlY3QnLCB2YXJpYW50LCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBtdWx0aXBsZSAmJiAnbXVsdGlwbGUnXSxcbiAgICBpY29uOiBbJ2ljb24nLCBgaWNvbiR7Y2FwaXRhbGl6ZSh2YXJpYW50KX1gLCBvcGVuICYmICdpY29uT3BlbicsIGRpc2FibGVkICYmICdkaXNhYmxlZCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TmF0aXZlU2VsZWN0VXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcyA9ICh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICAvLyBXaGVuIGludGVyYWN0aW5nIHF1aWNrbHksIHRoZSB0ZXh0IGNhbiBlbmQgdXAgc2VsZWN0ZWQuXG4gIC8vIE5hdGl2ZSBzZWxlY3QgY2FuJ3QgYmUgc2VsZWN0ZWQgZWl0aGVyLlxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIGJvcmRlclJhZGl1czogMCxcbiAgLy8gUmVzZXRcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gICcmOmZvY3VzJzoge1xuICAgIC8vIFNob3cgdGhhdCBpdCdzIG5vdCBhbiB0ZXh0IGlucHV0XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAncmdiYSgwLCAwLCAwLCAwLjA1KScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KScsXG4gICAgYm9yZGVyUmFkaXVzOiAwIC8vIFJlc2V0IENocm9tZSBzdHlsZVxuXG4gIH0sXG4gIC8vIFJlbW92ZSBJRTExIGFycm93XG4gICcmOjotbXMtZXhwYW5kJzoge1xuICAgIGRpc3BsYXk6ICdub25lJ1xuICB9LFxuICBbYCYuJHtuYXRpdmVTZWxlY3RDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfSxcbiAgJyZbbXVsdGlwbGVdJzoge1xuICAgIGhlaWdodDogJ2F1dG8nXG4gIH0sXG4gICcmOm5vdChbbXVsdGlwbGVdKSBvcHRpb24sICY6bm90KFttdWx0aXBsZV0pIG9wdGdyb3VwJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kLnBhcGVyXG4gIH0sXG4gIC8vIEJ1bXAgc3BlY2lmaWNpdHkgdG8gYWxsb3cgZXh0ZW5kaW5nIGN1c3RvbSBpbnB1dHNcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDI0LFxuICAgIG1pbldpZHRoOiAxNiAvLyBTbyBpdCBkb2Vzbid0IGNvbGxhcHNlLlxuXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2ZpbGxlZCcgJiYge1xuICAnJiYmJzoge1xuICAgIHBhZGRpbmdSaWdodDogMzJcbiAgfVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgYm9yZGVyUmFkaXVzOiB0aGVtZS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICcmOmZvY3VzJzoge1xuICAgIGJvcmRlclJhZGl1czogdGhlbWUuc2hhcGUuYm9yZGVyUmFkaXVzIC8vIFJlc2V0IHRoZSByZXNldCBmb3IgQ2hyb21lIHN0eWxlXG5cbiAgfSxcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDMyXG4gIH1cbn0pO1xuY29uc3QgTmF0aXZlU2VsZWN0U2VsZWN0ID0gc3R5bGVkKCdzZWxlY3QnLCB7XG4gIG5hbWU6ICdNdWlOYXRpdmVTZWxlY3QnLFxuICBzbG90OiAnU2VsZWN0JyxcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcCxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5zZWxlY3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCB7XG4gICAgICBbYCYuJHtuYXRpdmVTZWxlY3RDbGFzc2VzLm11bHRpcGxlfWBdOiBzdHlsZXMubXVsdGlwbGVcbiAgICB9XTtcbiAgfVxufSkobmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzKTtcbmV4cG9ydCBjb25zdCBuYXRpdmVTZWxlY3RJY29uU3R5bGVzID0gKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgLy8gV2UgdXNlIGEgcG9zaXRpb24gYWJzb2x1dGUgb3ZlciBhIGZsZXhib3ggaW4gb3JkZXIgdG8gZm9yd2FyZCB0aGUgcG9pbnRlciBldmVudHNcbiAgLy8gdG8gdGhlIGlucHV0IGFuZCB0byBzdXBwb3J0IHdyYXBwaW5nIHRhZ3MuLlxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgcmlnaHQ6IDAsXG4gIHRvcDogJ2NhbGMoNTAlIC0gLjVlbSknLFxuICAvLyBDZW50ZXIgdmVydGljYWxseSwgaGVpZ2h0IGlzIDFlbVxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIC8vIERvbid0IGJsb2NrIHBvaW50ZXIgZXZlbnRzIG9uIHRoZSBzZWxlY3QgdW5kZXIgdGhlIGljb24uXG4gIGNvbG9yOiB0aGVtZS5wYWxldHRlLmFjdGlvbi5hY3RpdmUsXG4gIFtgJi4ke25hdGl2ZVNlbGVjdENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgfVxufSwgb3duZXJTdGF0ZS5vcGVuICYmIHtcbiAgdHJhbnNmb3JtOiAncm90YXRlKDE4MGRlZyknXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgcmlnaHQ6IDdcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gIHJpZ2h0OiA3XG59KTtcbmNvbnN0IE5hdGl2ZVNlbGVjdEljb24gPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aU5hdGl2ZVNlbGVjdCcsXG4gIHNsb3Q6ICdJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5pY29uLCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW2BpY29uJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMuaWNvbk9wZW5dO1xuICB9XG59KShuYXRpdmVTZWxlY3RJY29uU3R5bGVzKTtcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuXG5jb25zdCBOYXRpdmVTZWxlY3RJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE5hdGl2ZVNlbGVjdElucHV0KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBkaXNhYmxlZCxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIGlucHV0UmVmLFxuICAgIHZhcmlhbnQgPSAnc3RhbmRhcmQnXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZWQsXG4gICAgdmFyaWFudFxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KE5hdGl2ZVNlbGVjdFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnNlbGVjdCwgY2xhc3NOYW1lKSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIHJlZjogaW5wdXRSZWYgfHwgcmVmXG4gICAgfSwgb3RoZXIpKSwgcHJvcHMubXVsdGlwbGUgPyBudWxsIDogLyojX19QVVJFX18qL19qc3goTmF0aXZlU2VsZWN0SWNvbiwge1xuICAgICAgYXM6IEljb25Db21wb25lbnQsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmljb25cbiAgICB9KV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE5hdGl2ZVNlbGVjdElucHV0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgPG9wdGlvbj5gIGVsZW1lbnRzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3MgbmFtZSBvZiB0aGUgc2VsZWN0IGVsZW1lbnQuXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHNlbGVjdCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGljb24gdGhhdCBkaXNwbGF5cyB0aGUgYXJyb3cuXG4gICAqL1xuICBJY29uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogVXNlIHRoYXQgcHJvcCB0byBwYXNzIGEgcmVmIHRvIHRoZSBuYXRpdmUgc2VsZWN0IGVsZW1lbnQuXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYHNlbGVjdGAgb3IgaGlkZGVuIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogVGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ3N0YW5kYXJkJywgJ291dGxpbmVkJywgJ2ZpbGxlZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZVNlbGVjdElucHV0OyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU2VsZWN0Jywgc2xvdCk7XG59XG5jb25zdCBzZWxlY3RDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpU2VsZWN0JywgWydzZWxlY3QnLCAnbXVsdGlwbGUnLCAnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJywgJ2Rpc2FibGVkJywgJ2ZvY3VzZWQnLCAnaWNvbicsICdpY29uT3BlbicsICdpY29uRmlsbGVkJywgJ2ljb25PdXRsaW5lZCcsICdpY29uU3RhbmRhcmQnLCAnbmF0aXZlSW5wdXQnXSk7XG5leHBvcnQgZGVmYXVsdCBzZWxlY3RDbGFzc2VzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgeyBmb3JtYXRNdWlFcnJvck1lc3NhZ2UgYXMgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSB9IGZyb20gXCJAbXVpL3V0aWxzXCI7XG5cbnZhciBfc3BhbjtcblxuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJpYS1kZXNjcmliZWRieVwiLCBcImFyaWEtbGFiZWxcIiwgXCJhdXRvRm9jdXNcIiwgXCJhdXRvV2lkdGhcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRPcGVuXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNwbGF5RW1wdHlcIiwgXCJJY29uQ29tcG9uZW50XCIsIFwiaW5wdXRSZWZcIiwgXCJsYWJlbElkXCIsIFwiTWVudVByb3BzXCIsIFwibXVsdGlwbGVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNsb3NlXCIsIFwib25Gb2N1c1wiLCBcIm9uT3BlblwiLCBcIm9wZW5cIiwgXCJyZWFkT25seVwiLCBcInJlbmRlclZhbHVlXCIsIFwiU2VsZWN0RGlzcGxheVByb3BzXCIsIFwidGFiSW5kZXhcIiwgXCJ0eXBlXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IHJlZlR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgTWVudSBmcm9tICcuLi9NZW51L01lbnUnO1xuaW1wb3J0IHsgbmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzLCBuYXRpdmVTZWxlY3RJY29uU3R5bGVzIH0gZnJvbSAnLi4vTmF0aXZlU2VsZWN0L05hdGl2ZVNlbGVjdElucHV0JztcbmltcG9ydCB7IGlzRmlsbGVkIH0gZnJvbSAnLi4vSW5wdXRCYXNlL3V0aWxzJztcbmltcG9ydCBzdHlsZWQsIHsgc2xvdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VDb250cm9sbGVkIGZyb20gJy4uL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuaW1wb3J0IHNlbGVjdENsYXNzZXMsIHsgZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL3NlbGVjdENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFNlbGVjdFNlbGVjdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgc2xvdDogJ1NlbGVjdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFsvLyBXaW4gc3BlY2lmaWNpdHkgb3ZlciB0aGUgaW5wdXQgYmFzZVxuICAgIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuc2VsZWN0fWBdOiBzdHlsZXMuc2VsZWN0XG4gICAgfSwge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5zZWxlY3R9YF06IHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdXG4gICAgfSwge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5tdWx0aXBsZX1gXTogc3R5bGVzLm11bHRpcGxlXG4gICAgfV07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcywge1xuICAvLyBXaW4gc3BlY2lmaWNpdHkgb3ZlciB0aGUgaW5wdXQgYmFzZVxuICBbYCYuJHtzZWxlY3RDbGFzc2VzLnNlbGVjdH1gXToge1xuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIC8vIFJlc2V0cyBmb3IgbXVsdGlwbGUgc2VsZWN0IHdpdGggY2hpcHNcbiAgICBtaW5IZWlnaHQ6ICcxLjQzNzVlbScsXG4gICAgLy8gUmVxdWlyZWQgZm9yIHNlbGVjdFxcdGV4dC1maWVsZCBoZWlnaHQgY29uc2lzdGVuY3lcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gIH1cbn0pO1xuY29uc3QgU2VsZWN0SWNvbiA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgc2xvdDogJ0ljb24nLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLmljb24sIG93bmVyU3RhdGUudmFyaWFudCAmJiBzdHlsZXNbYGljb24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS52YXJpYW50KX1gXSwgb3duZXJTdGF0ZS5vcGVuICYmIHN0eWxlcy5pY29uT3Blbl07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdEljb25TdHlsZXMpO1xuY29uc3QgU2VsZWN0TmF0aXZlSW5wdXQgPSBzdHlsZWQoJ2lucHV0Jywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiBzbG90U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgJiYgcHJvcCAhPT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgc2xvdDogJ05hdGl2ZUlucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubmF0aXZlSW5wdXRcbn0pKHtcbiAgYm90dG9tOiAwLFxuICBsZWZ0OiAwLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3BhY2l0eTogMCxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICB3aWR0aDogJzEwMCUnLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94J1xufSk7XG5cbmZ1bmN0aW9uIGFyZUVxdWFsVmFsdWVzKGEsIGIpIHtcbiAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0JyAmJiBiICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH0gLy8gVGhlIHZhbHVlIGNvdWxkIGJlIGEgbnVtYmVyLCB0aGUgRE9NIHdpbGwgc3RyaW5naWZ5IGl0IGFueXdheS5cblxuXG4gIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eShkaXNwbGF5KSB7XG4gIHJldHVybiBkaXNwbGF5ID09IG51bGwgfHwgdHlwZW9mIGRpc3BsYXkgPT09ICdzdHJpbmcnICYmICFkaXNwbGF5LnRyaW0oKTtcbn1cblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBkaXNhYmxlZCxcbiAgICBtdWx0aXBsZSxcbiAgICBvcGVuXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICBzZWxlY3Q6IFsnc2VsZWN0JywgdmFyaWFudCwgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgbXVsdGlwbGUgJiYgJ211bHRpcGxlJ10sXG4gICAgaWNvbjogWydpY29uJywgYGljb24ke2NhcGl0YWxpemUodmFyaWFudCl9YCwgb3BlbiAmJiAnaWNvbk9wZW4nLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnXSxcbiAgICBuYXRpdmVJbnB1dDogWyduYXRpdmVJbnB1dCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuXG5cbmNvbnN0IFNlbGVjdElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU2VsZWN0SW5wdXQocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWwsXG4gICAgYXV0b0ZvY3VzLFxuICAgIGF1dG9XaWR0aCxcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgZGVmYXVsdE9wZW4sXG4gICAgZGVmYXVsdFZhbHVlLFxuICAgIGRpc2FibGVkLFxuICAgIGRpc3BsYXlFbXB0eSxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIGlucHV0UmVmOiBpbnB1dFJlZlByb3AsXG4gICAgbGFiZWxJZCxcbiAgICBNZW51UHJvcHMgPSB7fSxcbiAgICBtdWx0aXBsZSxcbiAgICBuYW1lLFxuICAgIG9uQmx1cixcbiAgICBvbkNoYW5nZSxcbiAgICBvbkNsb3NlLFxuICAgIG9uRm9jdXMsXG4gICAgb25PcGVuLFxuICAgIG9wZW46IG9wZW5Qcm9wLFxuICAgIHJlYWRPbmx5LFxuICAgIHJlbmRlclZhbHVlLFxuICAgIFNlbGVjdERpc3BsYXlQcm9wcyA9IHt9LFxuICAgIHRhYkluZGV4OiB0YWJJbmRleFByb3AsXG4gICAgdmFsdWU6IHZhbHVlUHJvcCxcbiAgICB2YXJpYW50ID0gJ3N0YW5kYXJkJ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZVN0YXRlXSA9IHVzZUNvbnRyb2xsZWQoe1xuICAgIGNvbnRyb2xsZWQ6IHZhbHVlUHJvcCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsXG4gICAgbmFtZTogJ1NlbGVjdCdcbiAgfSk7XG4gIGNvbnN0IFtvcGVuU3RhdGUsIHNldE9wZW5TdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiBvcGVuUHJvcCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0T3BlbixcbiAgICBuYW1lOiAnU2VsZWN0J1xuICB9KTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGRpc3BsYXlSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IFtkaXNwbGF5Tm9kZSwgc2V0RGlzcGxheU5vZGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50OiBpc09wZW5Db250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYob3BlblByb3AgIT0gbnVsbCk7XG4gIGNvbnN0IFttZW51TWluV2lkdGhTdGF0ZSwgc2V0TWVudU1pbldpZHRoU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihyZWYsIGlucHV0UmVmUHJvcCk7XG4gIGNvbnN0IGhhbmRsZURpc3BsYXlSZWYgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBkaXNwbGF5UmVmLmN1cnJlbnQgPSBub2RlO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHNldERpc3BsYXlOb2RlKG5vZGUpO1xuICAgIH1cbiAgfSwgW10pO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGhhbmRsZVJlZiwgKCkgPT4gKHtcbiAgICBmb2N1czogKCkgPT4ge1xuICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfSxcbiAgICBub2RlOiBpbnB1dFJlZi5jdXJyZW50LFxuICAgIHZhbHVlXG4gIH0pLCBbdmFsdWVdKTsgLy8gUmVzaXplIG1lbnUgb24gYGRlZmF1bHRPcGVuYCBhdXRvbWF0aWMgdG9nZ2xlLlxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlZmF1bHRPcGVuICYmIG9wZW5TdGF0ZSAmJiBkaXNwbGF5Tm9kZSAmJiAhaXNPcGVuQ29udHJvbGxlZCkge1xuICAgICAgc2V0TWVudU1pbldpZHRoU3RhdGUoYXV0b1dpZHRoID8gbnVsbCA6IGRpc3BsYXlOb2RlLmNsaWVudFdpZHRoKTtcbiAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuXG4gIH0sIFtkaXNwbGF5Tm9kZSwgYXV0b1dpZHRoXSk7IC8vIGBpc09wZW5Db250cm9sbGVkYCBpcyBpZ25vcmVkIGJlY2F1c2UgdGhlIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgc3dpdGNoIGJldHdlZW4gY29udHJvbGxlZCBhbmQgdW5jb250cm9sbGVkIG1vZGVzLlxuICAvLyBgZGVmYXVsdE9wZW5gIGFuZCBgb3BlblN0YXRlYCBhcmUgaWdub3JlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjYWxsYmFja3MuXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxhYmVsSWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgbGFiZWwgPSBvd25lckRvY3VtZW50KGRpc3BsYXlSZWYuY3VycmVudCkuZ2V0RWxlbWVudEJ5SWQobGFiZWxJZCk7XG5cbiAgICBpZiAobGFiZWwpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIGlmIChnZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBsYWJlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZXIpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgbGFiZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2xhYmVsSWRdKTtcblxuICBjb25zdCB1cGRhdGUgPSAob3BlbiwgZXZlbnQpID0+IHtcbiAgICBpZiAob3Blbikge1xuICAgICAgaWYgKG9uT3Blbikge1xuICAgICAgICBvbk9wZW4oZXZlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZShldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc09wZW5Db250cm9sbGVkKSB7XG4gICAgICBzZXRNZW51TWluV2lkdGhTdGF0ZShhdXRvV2lkdGggPyBudWxsIDogZGlzcGxheU5vZGUuY2xpZW50V2lkdGgpO1xuICAgICAgc2V0T3BlblN0YXRlKG9wZW4pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSBldmVudCA9PiB7XG4gICAgLy8gSWdub3JlIGV2ZXJ5dGhpbmcgYnV0IGxlZnQtY2xpY2tcbiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBIaWphY2sgdGhlIGRlZmF1bHQgZm9jdXMgYmVoYXZpb3IuXG5cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgdXBkYXRlKHRydWUsIGV2ZW50KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9IGV2ZW50ID0+IHtcbiAgICB1cGRhdGUoZmFsc2UsIGV2ZW50KTtcbiAgfTtcblxuICBjb25zdCBjaGlsZHJlbkFycmF5ID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbik7IC8vIFN1cHBvcnQgYXV0b2ZpbGwuXG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gY2hpbGRyZW5BcnJheS5tYXAoY2hpbGQgPT4gY2hpbGQucHJvcHMudmFsdWUpLmluZGV4T2YoZXZlbnQudGFyZ2V0LnZhbHVlKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuQXJyYXlbaW5kZXhdO1xuICAgIHNldFZhbHVlU3RhdGUoY2hpbGQucHJvcHMudmFsdWUpO1xuXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCwgY2hpbGQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVJdGVtQ2xpY2sgPSBjaGlsZCA9PiBldmVudCA9PiB7XG4gICAgbGV0IG5ld1ZhbHVlOyAvLyBXZSB1c2UgdGhlIHRhYmluZGV4IGF0dHJpYnV0ZSB0byBzaWduYWwgdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuXG4gICAgaWYgKCFldmVudC5jdXJyZW50VGFyZ2V0Lmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgbmV3VmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLnNsaWNlKCkgOiBbXTtcbiAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHZhbHVlLmluZGV4T2YoY2hpbGQucHJvcHMudmFsdWUpO1xuXG4gICAgICBpZiAoaXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBuZXdWYWx1ZS5wdXNoKGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1ZhbHVlLnNwbGljZShpdGVtSW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWYWx1ZSA9IGNoaWxkLnByb3BzLnZhbHVlO1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICBjaGlsZC5wcm9wcy5vbkNsaWNrKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICBzZXRWYWx1ZVN0YXRlKG5ld1ZhbHVlKTtcblxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIC8vIFJlZGVmaW5lIHRhcmdldCB0byBhbGxvdyBuYW1lIGFuZCB2YWx1ZSB0byBiZSByZWFkLlxuICAgICAgICAvLyBUaGlzIGFsbG93cyBzZWFtbGVzcyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBtb3N0IHBvcHVsYXIgZm9ybSBsaWJyYXJpZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzEzNDg1I2lzc3VlY29tbWVudC02NzYwNDg0OTJcbiAgICAgICAgLy8gQ2xvbmUgdGhlIGV2ZW50IHRvIG5vdCBvdmVycmlkZSBgdGFyZ2V0YCBvZiB0aGUgb3JpZ2luYWwgZXZlbnQuXG4gICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQgfHwgZXZlbnQ7XG4gICAgICAgIGNvbnN0IGNsb25lZEV2ZW50ID0gbmV3IG5hdGl2ZUV2ZW50LmNvbnN0cnVjdG9yKG5hdGl2ZUV2ZW50LnR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb25lZEV2ZW50LCAndGFyZ2V0Jywge1xuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgb25DaGFuZ2UoY2xvbmVkRXZlbnQsIGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW11bHRpcGxlKSB7XG4gICAgICB1cGRhdGUoZmFsc2UsIGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoIXJlYWRPbmx5KSB7XG4gICAgICBjb25zdCB2YWxpZEtleXMgPSBbJyAnLCAnQXJyb3dVcCcsICdBcnJvd0Rvd24nLCAvLyBUaGUgbmF0aXZlIHNlbGVjdCBkb2Vzbid0IHJlc3BvbmQgdG8gZW50ZXIgb24gbWFjT1MsIGJ1dCBpdCdzIHJlY29tbWVuZGVkIGJ5XG4gICAgICAvLyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL2V4YW1wbGUtaW5kZXgvY29tYm9ib3gvY29tYm9ib3gtc2VsZWN0LW9ubHkuaHRtbFxuICAgICAgJ0VudGVyJ107XG5cbiAgICAgIGlmICh2YWxpZEtleXMuaW5kZXhPZihldmVudC5rZXkpICE9PSAtMSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB1cGRhdGUodHJ1ZSwgZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBvcGVuID0gZGlzcGxheU5vZGUgIT09IG51bGwgJiYgb3BlblN0YXRlO1xuXG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgLy8gaWYgb3BlbiBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25cbiAgICBpZiAoIW9wZW4gJiYgb25CbHVyKSB7XG4gICAgICAvLyBQcmVhY3Qgc3VwcG9ydCwgdGFyZ2V0IGlzIHJlYWQgb25seSBwcm9wZXJ0eSBvbiBhIG5hdGl2ZSBldmVudC5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ3RhcmdldCcsIHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbmFtZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGRlbGV0ZSBvdGhlclsnYXJpYS1pbnZhbGlkJ107XG4gIGxldCBkaXNwbGF5O1xuICBsZXQgZGlzcGxheVNpbmdsZTtcbiAgY29uc3QgZGlzcGxheU11bHRpcGxlID0gW107XG4gIGxldCBjb21wdXRlRGlzcGxheSA9IGZhbHNlO1xuICBsZXQgZm91bmRNYXRjaCA9IGZhbHNlOyAvLyBObyBuZWVkIHRvIGRpc3BsYXkgYW55IHZhbHVlIGlmIHRoZSBmaWVsZCBpcyBlbXB0eS5cblxuICBpZiAoaXNGaWxsZWQoe1xuICAgIHZhbHVlXG4gIH0pIHx8IGRpc3BsYXlFbXB0eSkge1xuICAgIGlmIChyZW5kZXJWYWx1ZSkge1xuICAgICAgZGlzcGxheSA9IHJlbmRlclZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcHV0ZURpc3BsYXkgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGl0ZW1zID0gY2hpbGRyZW5BcnJheS5tYXAoKGNoaWxkLCBpbmRleCwgYXJyKSA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIFNlbGVjdCBjb21wb25lbnQgZG9lc24ndCBhY2NlcHQgYSBGcmFnbWVudCBhcyBhIGNoaWxkLlwiLCAnQ29uc2lkZXIgcHJvdmlkaW5nIGFuIGFycmF5IGluc3RlYWQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzZWxlY3RlZDtcblxuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIFxcYHZhbHVlXFxgIHByb3AgbXVzdCBiZSBhbiBhcnJheSB3aGVuIHVzaW5nIHRoZSBcXGBTZWxlY3RcXGAgY29tcG9uZW50IHdpdGggXFxgbXVsdGlwbGVcXGAuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMikpO1xuICAgICAgfVxuXG4gICAgICBzZWxlY3RlZCA9IHZhbHVlLnNvbWUodiA9PiBhcmVFcXVhbFZhbHVlcyh2LCBjaGlsZC5wcm9wcy52YWx1ZSkpO1xuXG4gICAgICBpZiAoc2VsZWN0ZWQgJiYgY29tcHV0ZURpc3BsYXkpIHtcbiAgICAgICAgZGlzcGxheU11bHRpcGxlLnB1c2goY2hpbGQucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZCA9IGFyZUVxdWFsVmFsdWVzKHZhbHVlLCBjaGlsZC5wcm9wcy52YWx1ZSk7XG5cbiAgICAgIGlmIChzZWxlY3RlZCAmJiBjb21wdXRlRGlzcGxheSkge1xuICAgICAgICBkaXNwbGF5U2luZ2xlID0gY2hpbGQucHJvcHMuY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICBmb3VuZE1hdGNoID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGQucHJvcHMudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgJ2FyaWEtcmVhZG9ubHknOiB0cnVlLFxuICAgICAgICByb2xlOiAnb3B0aW9uJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGaXJzdFNlbGVjdGFibGVFbGVtZW50ID0gKCkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlyc3RTZWxlY3RhYmxlRWxlbWVudCA9IGFyci5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0ucHJvcHMuZGlzYWJsZWQgIT09IHRydWUpO1xuXG4gICAgICBpZiAoY2hpbGQgPT09IGZpcnN0U2VsZWN0YWJsZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICdhcmlhLXNlbGVjdGVkJzogc2VsZWN0ZWQgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgb25DbGljazogaGFuZGxlSXRlbUNsaWNrKGNoaWxkKSxcbiAgICAgIG9uS2V5VXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIG91ciBNZW51SXRlbXMgZGlzcGF0Y2hlcyBhIGNsaWNrIGV2ZW50XG4gICAgICAgICAgLy8gaXQncyBub3QgYmVoYXZpb3Igb2YgdGhlIG5hdGl2ZSA8b3B0aW9uPiBhbmQgY2F1c2VzXG4gICAgICAgICAgLy8gdGhlIHNlbGVjdCB0byBjbG9zZSBpbW1lZGlhdGVseSBzaW5jZSB3ZSBvcGVuIG9uIHNwYWNlIGtleWRvd25cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkLnByb3BzLm9uS2V5VXApIHtcbiAgICAgICAgICBjaGlsZC5wcm9wcy5vbktleVVwKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJvbGU6ICdvcHRpb24nLFxuICAgICAgc2VsZWN0ZWQ6IGFyclswXS5wcm9wcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGFyclswXS5wcm9wcy5kaXNhYmxlZCA9PT0gdHJ1ZSA/IGlzRmlyc3RTZWxlY3RhYmxlRWxlbWVudCgpIDogc2VsZWN0ZWQsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIHZhbHVlIGlzIG1vc3QgbGlrZWx5IG5vdCBhIHZhbGlkIEhUTUwgYXR0cmlidXRlLlxuICAgICAgJ2RhdGEtdmFsdWUnOiBjaGlsZC5wcm9wcy52YWx1ZSAvLyBJbnN0ZWFkLCB3ZSBwcm92aWRlIGl0IGFzIGEgZGF0YSBhdHRyaWJ1dGUuXG5cbiAgICB9KTtcbiAgfSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFmb3VuZE1hdGNoICYmICFtdWx0aXBsZSAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gY2hpbGRyZW5BcnJheS5tYXAoY2hpbGQgPT4gY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgICBjb25zb2xlLndhcm4oW2BNVUk6IFlvdSBoYXZlIHByb3ZpZGVkIGFuIG91dC1vZi1yYW5nZSB2YWx1ZSBcXGAke3ZhbHVlfVxcYCBmb3IgdGhlIHNlbGVjdCAke25hbWUgPyBgKG5hbWU9XCIke25hbWV9XCIpIGAgOiAnJ31jb21wb25lbnQuYCwgXCJDb25zaWRlciBwcm92aWRpbmcgYSB2YWx1ZSB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBvciAnJy5cIiwgYFRoZSBhdmFpbGFibGUgdmFsdWVzIGFyZSAke3ZhbHVlcy5maWx0ZXIoeCA9PiB4ICE9IG51bGwpLm1hcCh4ID0+IGBcXGAke3h9XFxgYCkuam9pbignLCAnKSB8fCAnXCJcIid9LmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbZm91bmRNYXRjaCwgY2hpbGRyZW5BcnJheSwgbXVsdGlwbGUsIG5hbWUsIHZhbHVlXSk7XG4gIH1cblxuICBpZiAoY29tcHV0ZURpc3BsYXkpIHtcbiAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgIGlmIChkaXNwbGF5TXVsdGlwbGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BsYXkgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGxheSA9IGRpc3BsYXlNdWx0aXBsZS5yZWR1Y2UoKG91dHB1dCwgY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goY2hpbGQpO1xuXG4gICAgICAgICAgaWYgKGluZGV4IDwgZGlzcGxheU11bHRpcGxlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKCcsICcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGxheSA9IGRpc3BsYXlTaW5nbGU7XG4gICAgfVxuICB9IC8vIEF2b2lkIHBlcmZvcm1pbmcgYSBsYXlvdXQgY29tcHV0YXRpb24gaW4gdGhlIHJlbmRlciBtZXRob2QuXG5cblxuICBsZXQgbWVudU1pbldpZHRoID0gbWVudU1pbldpZHRoU3RhdGU7XG5cbiAgaWYgKCFhdXRvV2lkdGggJiYgaXNPcGVuQ29udHJvbGxlZCAmJiBkaXNwbGF5Tm9kZSkge1xuICAgIG1lbnVNaW5XaWR0aCA9IGRpc3BsYXlOb2RlLmNsaWVudFdpZHRoO1xuICB9XG5cbiAgbGV0IHRhYkluZGV4O1xuXG4gIGlmICh0eXBlb2YgdGFiSW5kZXhQcm9wICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wO1xuICB9IGVsc2Uge1xuICAgIHRhYkluZGV4ID0gZGlzYWJsZWQgPyBudWxsIDogMDtcbiAgfVxuXG4gIGNvbnN0IGJ1dHRvbklkID0gU2VsZWN0RGlzcGxheVByb3BzLmlkIHx8IChuYW1lID8gYG11aS1jb21wb25lbnQtc2VsZWN0LSR7bmFtZX1gIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdmFyaWFudCxcbiAgICB2YWx1ZSxcbiAgICBvcGVuXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goU2VsZWN0U2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZURpc3BsYXlSZWYsXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICByb2xlOiBcImJ1dHRvblwiLFxuICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkID8gJ3RydWUnIDogdW5kZWZpbmVkLFxuICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IG9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgXCJhcmlhLWhhc3BvcHVwXCI6IFwibGlzdGJveFwiLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFtsYWJlbElkLCBidXR0b25JZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgb25Nb3VzZURvd246IGRpc2FibGVkIHx8IHJlYWRPbmx5ID8gbnVsbCA6IGhhbmRsZU1vdXNlRG93bixcbiAgICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICAgIG9uRm9jdXM6IG9uRm9jdXNcbiAgICB9LCBTZWxlY3REaXNwbGF5UHJvcHMsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goU2VsZWN0RGlzcGxheVByb3BzLmNsYXNzTmFtZSwgY2xhc3Nlcy5zZWxlY3QsIGNsYXNzTmFtZSkgLy8gVGhlIGlkIGlzIHJlcXVpcmVkIGZvciBwcm9wZXIgYTExeVxuICAgICAgLFxuICAgICAgaWQ6IGJ1dHRvbklkLFxuICAgICAgY2hpbGRyZW46IGlzRW1wdHkoZGlzcGxheSkgPyAvLyBub3RyYW5zbGF0ZSBuZWVkZWQgd2hpbGUgR29vZ2xlIFRyYW5zbGF0ZSB3aWxsIG5vdCBmaXggemVyby13aWR0aCBzcGFjZSBpc3N1ZVxuICAgICAgX3NwYW4gfHwgKF9zcGFuID0gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcIm5vdHJhbnNsYXRlXCIsXG4gICAgICAgIGNoaWxkcmVuOiBcIlxcdTIwMEJcIlxuICAgICAgfSkpIDogZGlzcGxheVxuICAgIH0pKSwgLyojX19QVVJFX18qL19qc3goU2VsZWN0TmF0aXZlSW5wdXQsIF9leHRlbmRzKHtcbiAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywnKSA6IHZhbHVlLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLm5hdGl2ZUlucHV0LFxuICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSwgb3RoZXIpKSwgLyojX19QVVJFX18qL19qc3goU2VsZWN0SWNvbiwge1xuICAgICAgYXM6IEljb25Db21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuaWNvbixcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KSwgLyojX19QVVJFX18qL19qc3goTWVudSwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IGBtZW51LSR7bmFtZSB8fCAnJ31gLFxuICAgICAgYW5jaG9yRWw6IGRpc3BsYXlOb2RlLFxuICAgICAgb3Blbjogb3BlbixcbiAgICAgIG9uQ2xvc2U6IGhhbmRsZUNsb3NlLFxuICAgICAgYW5jaG9yT3JpZ2luOiB7XG4gICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcidcbiAgICAgIH0sXG4gICAgICB0cmFuc2Zvcm1PcmlnaW46IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJ1xuICAgICAgfVxuICAgIH0sIE1lbnVQcm9wcywge1xuICAgICAgTWVudUxpc3RQcm9wczogX2V4dGVuZHMoe1xuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbGFiZWxJZCxcbiAgICAgICAgcm9sZTogJ2xpc3Rib3gnLFxuICAgICAgICBkaXNhYmxlTGlzdFdyYXA6IHRydWVcbiAgICAgIH0sIE1lbnVQcm9wcy5NZW51TGlzdFByb3BzKSxcbiAgICAgIFBhcGVyUHJvcHM6IF9leHRlbmRzKHt9LCBNZW51UHJvcHMuUGFwZXJQcm9wcywge1xuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIG1pbldpZHRoOiBtZW51TWluV2lkdGhcbiAgICAgICAgfSwgTWVudVByb3BzLlBhcGVyUHJvcHMgIT0gbnVsbCA/IE1lbnVQcm9wcy5QYXBlclByb3BzLnN0eWxlIDogbnVsbClcbiAgICAgIH0pLFxuICAgICAgY2hpbGRyZW46IGl0ZW1zXG4gICAgfSkpXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU2VsZWN0SW5wdXQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICAnYXJpYS1sYWJlbCc6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHdpZHRoIG9mIHRoZSBwb3BvdmVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBpdGVtcyBpbnNpZGUgdGhlXG4gICAqIG1lbnUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgc2VsZWN0IGlucHV0LlxuICAgKi9cbiAgYXV0b1dpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIG9wdGlvbiBlbGVtZW50cyB0byBwb3B1bGF0ZSB0aGUgc2VsZWN0IHdpdGguXG4gICAqIENhbiBiZSBzb21lIGA8TWVudUl0ZW0+YCBlbGVtZW50cy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUaGUgQ1NTIGNsYXNzIG5hbWUgb2YgdGhlIHNlbGVjdCBlbGVtZW50LlxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgdG9nZ2xlZCBvbiBtb3VudC4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBvcGVuIHN0YXRlIGlzIG5vdCBjb250cm9sbGVkLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqL1xuICBkZWZhdWx0T3BlbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3QgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHNlbGVjdGVkIGl0ZW0gaXMgZGlzcGxheWVkIGV2ZW4gaWYgaXRzIHZhbHVlIGlzIGVtcHR5LlxuICAgKi9cbiAgZGlzcGxheUVtcHR5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGljb24gdGhhdCBkaXNwbGF5cyB0aGUgYXJyb3cuXG4gICAqL1xuICBJY29uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogSW1wZXJhdGl2ZSBoYW5kbGUgaW1wbGVtZW50aW5nIGB7IHZhbHVlOiBULCBub2RlOiBIVE1MRWxlbWVudCwgZm9jdXMoKTogdm9pZCB9YFxuICAgKiBFcXVpdmFsZW50IHRvIGByZWZgXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcblxuICAvKipcbiAgICogVGhlIElEIG9mIGFuIGVsZW1lbnQgdGhhdCBhY3RzIGFzIGFuIGFkZGl0aW9uYWwgbGFiZWwuIFRoZSBTZWxlY3Qgd2lsbFxuICAgKiBiZSBsYWJlbGxlZCBieSB0aGUgYWRkaXRpb25hbCBsYWJlbCBhbmQgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKi9cbiAgbGFiZWxJZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgZWxlbWVudC5cbiAgICovXG4gIE1lbnVQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBgdmFsdWVgIG11c3QgYmUgYW4gYXJyYXkgYW5kIHRoZSBtZW51IHdpbGwgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb25zLlxuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYHNlbGVjdGAgb3IgaGlkZGVuIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoYW55KS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtjaGlsZF0gVGhlIHJlYWN0IGVsZW1lbnQgdGhhdCB3YXMgc2VsZWN0ZWQuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFVzZSBpbiBjb250cm9sbGVkIG1vZGUgKHNlZSBvcGVuKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgb3BlbmVkLlxuICAgKiBVc2UgaW4gY29udHJvbGxlZCBtb2RlIChzZWUgb3BlbikuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uT3BlbjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSBUaGUgYHZhbHVlYCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyB7UmVhY3ROb2RlfVxuICAgKi9cbiAgcmVuZGVyVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBjbGlja2FibGUgZGl2IGVsZW1lbnQuXG4gICAqL1xuICBTZWxlY3REaXNwbGF5UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydzdGFuZGFyZCcsICdvdXRsaW5lZCcsICdmaWxsZWQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBTZWxlY3RJbnB1dDsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNNyAxMGw1IDUgNS01elwiXG59KSwgJ0Fycm93RHJvcERvd24nKTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuXG52YXIgX1N0eWxlZElucHV0LCBfU3R5bGVkRmlsbGVkSW5wdXQ7XG5cbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9XaWR0aFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRPcGVuXCIsIFwiZGlzcGxheUVtcHR5XCIsIFwiSWNvbkNvbXBvbmVudFwiLCBcImlkXCIsIFwiaW5wdXRcIiwgXCJpbnB1dFByb3BzXCIsIFwibGFiZWxcIiwgXCJsYWJlbElkXCIsIFwiTWVudVByb3BzXCIsIFwibXVsdGlwbGVcIiwgXCJuYXRpdmVcIiwgXCJvbkNsb3NlXCIsIFwib25PcGVuXCIsIFwib3BlblwiLCBcInJlbmRlclZhbHVlXCIsIFwiU2VsZWN0RGlzcGxheVByb3BzXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IFNlbGVjdElucHV0IGZyb20gJy4vU2VsZWN0SW5wdXQnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IEFycm93RHJvcERvd25JY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9BcnJvd0Ryb3BEb3duJztcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9JbnB1dCc7XG5pbXBvcnQgTmF0aXZlU2VsZWN0SW5wdXQgZnJvbSAnLi4vTmF0aXZlU2VsZWN0L05hdGl2ZVNlbGVjdElucHV0JztcbmltcG9ydCBGaWxsZWRJbnB1dCBmcm9tICcuLi9GaWxsZWRJbnB1dCc7XG5pbXBvcnQgT3V0bGluZWRJbnB1dCBmcm9tICcuLi9PdXRsaW5lZElucHV0JztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICByZXR1cm4gY2xhc3Nlcztcbn07XG5cbmNvbnN0IHN0eWxlZFJvb3RDb25maWcgPSB7XG4gIG5hbWU6ICdNdWlTZWxlY3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290LFxuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgJiYgcHJvcCAhPT0gJ3ZhcmlhbnQnLFxuICBzbG90OiAnUm9vdCdcbn07XG5jb25zdCBTdHlsZWRJbnB1dCA9IHN0eWxlZChJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU3R5bGVkT3V0bGluZWRJbnB1dCA9IHN0eWxlZChPdXRsaW5lZElucHV0LCBzdHlsZWRSb290Q29uZmlnKSgnJyk7XG5jb25zdCBTdHlsZWRGaWxsZWRJbnB1dCA9IHN0eWxlZChGaWxsZWRJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU2VsZWN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU2VsZWN0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIG5hbWU6ICdNdWlTZWxlY3QnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBhdXRvV2lkdGggPSBmYWxzZSxcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc2VzOiBjbGFzc2VzUHJvcCA9IHt9LFxuICAgIGNsYXNzTmFtZSxcbiAgICBkZWZhdWx0T3BlbiA9IGZhbHNlLFxuICAgIGRpc3BsYXlFbXB0eSA9IGZhbHNlLFxuICAgIEljb25Db21wb25lbnQgPSBBcnJvd0Ryb3BEb3duSWNvbixcbiAgICBpZCxcbiAgICBpbnB1dCxcbiAgICBpbnB1dFByb3BzLFxuICAgIGxhYmVsLFxuICAgIGxhYmVsSWQsXG4gICAgTWVudVByb3BzLFxuICAgIG11bHRpcGxlID0gZmFsc2UsXG4gICAgbmF0aXZlID0gZmFsc2UsXG4gICAgb25DbG9zZSxcbiAgICBvbk9wZW4sXG4gICAgb3BlbixcbiAgICByZW5kZXJWYWx1ZSxcbiAgICBTZWxlY3REaXNwbGF5UHJvcHMsXG4gICAgdmFyaWFudDogdmFyaWFudFByb3AgPSAnb3V0bGluZWQnXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBpbnB1dENvbXBvbmVudCA9IG5hdGl2ZSA/IE5hdGl2ZVNlbGVjdElucHV0IDogU2VsZWN0SW5wdXQ7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3ZhcmlhbnQnXVxuICB9KTtcbiAgY29uc3QgdmFyaWFudCA9IGZjcy52YXJpYW50IHx8IHZhcmlhbnRQcm9wO1xuICBjb25zdCBJbnB1dENvbXBvbmVudCA9IGlucHV0IHx8IHtcbiAgICBzdGFuZGFyZDogX1N0eWxlZElucHV0IHx8IChfU3R5bGVkSW5wdXQgPSAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRJbnB1dCwge30pKSxcbiAgICBvdXRsaW5lZDogLyojX19QVVJFX18qL19qc3goU3R5bGVkT3V0bGluZWRJbnB1dCwge1xuICAgICAgbGFiZWw6IGxhYmVsXG4gICAgfSksXG4gICAgZmlsbGVkOiBfU3R5bGVkRmlsbGVkSW5wdXQgfHwgKF9TdHlsZWRGaWxsZWRJbnB1dCA9IC8qI19fUFVSRV9fKi9fanN4KFN0eWxlZEZpbGxlZElucHV0LCB7fSkpXG4gIH1bdmFyaWFudF07XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHZhcmlhbnQsXG4gICAgY2xhc3NlczogY2xhc3Nlc1Byb3BcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBpbnB1dENvbXBvbmVudFJlZiA9IHVzZUZvcmtSZWYocmVmLCBJbnB1dENvbXBvbmVudC5yZWYpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChJbnB1dENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgLy8gTW9zdCBvZiB0aGUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYFNlbGVjdElucHV0YC5cbiAgICAgIC8vIFRoZSBgU2VsZWN0YCBjb21wb25lbnQgaXMgYSBzaW1wbGUgQVBJIHdyYXBwZXIgdG8gZXhwb3NlIHNvbWV0aGluZyBiZXR0ZXIgdG8gcGxheSB3aXRoLlxuICAgICAgaW5wdXRDb21wb25lbnQsXG4gICAgICBpbnB1dFByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICB2YXJpYW50LFxuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIC8vIFdlIHJlbmRlciBhIHNlbGVjdC4gV2UgY2FuIGlnbm9yZSB0aGUgdHlwZSBwcm92aWRlZCBieSB0aGUgYElucHV0YC5cbiAgICAgICAgbXVsdGlwbGVcbiAgICAgIH0sIG5hdGl2ZSA/IHtcbiAgICAgICAgaWRcbiAgICAgIH0gOiB7XG4gICAgICAgIGF1dG9XaWR0aCxcbiAgICAgICAgZGVmYXVsdE9wZW4sXG4gICAgICAgIGRpc3BsYXlFbXB0eSxcbiAgICAgICAgbGFiZWxJZCxcbiAgICAgICAgTWVudVByb3BzLFxuICAgICAgICBvbkNsb3NlLFxuICAgICAgICBvbk9wZW4sXG4gICAgICAgIG9wZW4sXG4gICAgICAgIHJlbmRlclZhbHVlLFxuICAgICAgICBTZWxlY3REaXNwbGF5UHJvcHM6IF9leHRlbmRzKHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LCBTZWxlY3REaXNwbGF5UHJvcHMpXG4gICAgICB9LCBpbnB1dFByb3BzLCB7XG4gICAgICAgIGNsYXNzZXM6IGlucHV0UHJvcHMgPyBkZWVwbWVyZ2UoY2xhc3NlcywgaW5wdXRQcm9wcy5jbGFzc2VzKSA6IGNsYXNzZXNcbiAgICAgIH0sIGlucHV0ID8gaW5wdXQucHJvcHMuaW5wdXRQcm9wcyA6IHt9KVxuICAgIH0sIG11bHRpcGxlICYmIG5hdGl2ZSAmJiB2YXJpYW50ID09PSAnb3V0bGluZWQnID8ge1xuICAgICAgbm90Y2hlZDogdHJ1ZVxuICAgIH0gOiB7fSwge1xuICAgICAgcmVmOiBpbnB1dENvbXBvbmVudFJlZixcbiAgICAgIGNsYXNzTmFtZTogY2xzeChJbnB1dENvbXBvbmVudC5wcm9wcy5jbGFzc05hbWUsIGNsYXNzTmFtZSlcbiAgICB9LCAhaW5wdXQgJiYge1xuICAgICAgdmFyaWFudFxuICAgIH0sIG90aGVyKSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFNlbGVjdC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgd2lkdGggb2YgdGhlIHBvcG92ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIGl0ZW1zIGluc2lkZSB0aGVcbiAgICogbWVudSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgYXQgbGVhc3QgdGhlIHdpZHRoIG9mIHRoZSBzZWxlY3QgaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGVsZW1lbnRzIHRvIHBvcHVsYXRlIHRoZSBzZWxlY3Qgd2l0aC5cbiAgICogQ2FuIGJlIHNvbWUgYE1lbnVJdGVtYCB3aGVuIGBuYXRpdmVgIGlzIGZhbHNlIGFuZCBgb3B0aW9uYCB3aGVuIGBuYXRpdmVgIGlzIHRydWUuXG4gICAqXG4gICAqIOKaoO+4j1RoZSBgTWVudUl0ZW1gIGVsZW1lbnRzICoqbXVzdCoqIGJlIGRpcmVjdCBkZXNjZW5kYW50cyB3aGVuIGBuYXRpdmVgIGlzIGZhbHNlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsbHkgb3Blbi4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBvcGVuIHN0YXRlIGlzIG5vdCBjb250cm9sbGVkIChpLmUuIHRoZSBgb3BlbmAgcHJvcCBpcyBub3QgZGVmaW5lZCkuXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlZmF1bHRPcGVuOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSB2YWx1ZSBpcyBkaXNwbGF5ZWQgZXZlbiBpZiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEluIG9yZGVyIHRvIGRpc3BsYXkgYSBtZWFuaW5nZnVsIHZhbHVlLCBhIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGByZW5kZXJWYWx1ZWAgcHJvcCB3aGljaFxuICAgKiByZXR1cm5zIHRoZSB2YWx1ZSB0byBiZSBkaXNwbGF5ZWQgd2hlbiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQuXG4gICAqXG4gICAqIOKaoO+4jyBXaGVuIHVzaW5nIHRoaXMgcHJvcCwgbWFrZSBzdXJlIHRoZSBsYWJlbCBkb2Vzbid0IG92ZXJsYXAgd2l0aCB0aGUgZW1wdHkgZGlzcGxheWVkIHZhbHVlLlxuICAgKiBUaGUgbGFiZWwgc2hvdWxkIGVpdGhlciBiZSBoaWRkZW4gb3IgZm9yY2VkIHRvIGEgc2hydW5rIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzcGxheUVtcHR5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGljb24gdGhhdCBkaXNwbGF5cyB0aGUgYXJyb3cuXG4gICAqIEBkZWZhdWx0IEFycm93RHJvcERvd25JY29uXG4gICAqL1xuICBJY29uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBgaWRgIG9mIHRoZSB3cmFwcGVyIGVsZW1lbnQgb3IgdGhlIGBzZWxlY3RgIGVsZW1lbnQgd2hlbiBgbmF0aXZlYC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBBbiBgSW5wdXRgIGVsZW1lbnQ7IGRvZXMgbm90IGhhdmUgdG8gYmUgYSBtYXRlcmlhbC11aSBzcGVjaWZpYyBgSW5wdXRgLlxuICAgKi9cbiAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50LFxuXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogV2hlbiBgbmF0aXZlYCBpcyBgdHJ1ZWAsIHRoZSBhdHRyaWJ1dGVzIGFyZSBhcHBsaWVkIG9uIHRoZSBgc2VsZWN0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogU2VlIFtPdXRsaW5lZElucHV0I2xhYmVsXSgvbWF0ZXJpYWwtdWkvYXBpL291dGxpbmVkLWlucHV0LyNwcm9wcylcbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIElEIG9mIGFuIGVsZW1lbnQgdGhhdCBhY3RzIGFzIGFuIGFkZGl0aW9uYWwgbGFiZWwuIFRoZSBTZWxlY3Qgd2lsbFxuICAgKiBiZSBsYWJlbGxlZCBieSB0aGUgYWRkaXRpb25hbCBsYWJlbCBhbmQgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKi9cbiAgbGFiZWxJZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgZWxlbWVudC5cbiAgICovXG4gIE1lbnVQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBgdmFsdWVgIG11c3QgYmUgYW4gYXJyYXkgYW5kIHRoZSBtZW51IHdpbGwgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb25zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgdXNlcyBhIG5hdGl2ZSBgc2VsZWN0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbmF0aXZlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtTZWxlY3RDaGFuZ2VFdmVudDxUPn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKGFueSkuXG4gICAqICoqV2FybmluZyoqOiBUaGlzIGlzIGEgZ2VuZXJpYyBldmVudCBub3QgYSBjaGFuZ2UgZXZlbnQgdW5sZXNzIHRoZSBjaGFuZ2UgZXZlbnQgaXMgY2F1c2VkIGJ5IGJyb3dzZXIgYXV0b2ZpbGwuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY2hpbGRdIFRoZSByZWFjdCBlbGVtZW50IHRoYXQgd2FzIHNlbGVjdGVkIHdoZW4gYG5hdGl2ZWAgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFVzZSBpbiBjb250cm9sbGVkIG1vZGUgKHNlZSBvcGVuKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBvcGVuZWQuXG4gICAqIFVzZSBpbiBjb250cm9sbGVkIG1vZGUgKHNlZSBvcGVuKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25PcGVuOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIGB2YWx1ZWAgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0Tm9kZX1cbiAgICovXG4gIHJlbmRlclZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgY2xpY2thYmxlIGRpdiBlbGVtZW50LlxuICAgKi9cbiAgU2VsZWN0RGlzcGxheVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFRoZSBgaW5wdXRgIHZhbHVlLiBQcm92aWRpbmcgYW4gZW1wdHkgc3RyaW5nIHdpbGwgc2VsZWN0IG5vIG9wdGlvbnMuXG4gICAqIFNldCB0byBhbiBlbXB0eSBzdHJpbmcgYCcnYCBpZiB5b3UgZG9uJ3Qgd2FudCBhbnkgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIHRvIGJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IGl0IG11c3QgaGF2ZSByZWZlcmVuY2UgZXF1YWxpdHkgd2l0aCB0aGUgb3B0aW9uIGluIG9yZGVyIHRvIGJlIHNlbGVjdGVkLlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgbm90IGFuIG9iamVjdCwgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBtdXN0IG1hdGNoIHdpdGggdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3B0aW9uIGluIG9yZGVyIHRvIGJlIHNlbGVjdGVkLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJyddKSwgUHJvcFR5cGVzLmFueV0pLFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcblNlbGVjdC5tdWlOYW1lID0gJ1NlbGVjdCc7XG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRGaWVsZFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVGV4dEZpZWxkJywgc2xvdCk7XG59XG5jb25zdCB0ZXh0RmllbGRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVGV4dEZpZWxkJywgWydyb290J10pO1xuZXhwb3J0IGRlZmF1bHQgdGV4dEZpZWxkQ2xhc3NlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJGb3JtSGVscGVyVGV4dFByb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaGVscGVyVGV4dFwiLCBcImlkXCIsIFwiSW5wdXRMYWJlbFByb3BzXCIsIFwiaW5wdXRQcm9wc1wiLCBcIklucHV0UHJvcHNcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsXCIsIFwibWF4Um93c1wiLCBcIm1pblJvd3NcIiwgXCJtdWx0aWxpbmVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkZvY3VzXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJyZXF1aXJlZFwiLCBcInJvd3NcIiwgXCJzZWxlY3RcIiwgXCJTZWxlY3RQcm9wc1wiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyByZWZUeXBlLCB1bnN0YWJsZV91c2VJZCBhcyB1c2VJZCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9JbnB1dCc7XG5pbXBvcnQgRmlsbGVkSW5wdXQgZnJvbSAnLi4vRmlsbGVkSW5wdXQnO1xuaW1wb3J0IE91dGxpbmVkSW5wdXQgZnJvbSAnLi4vT3V0bGluZWRJbnB1dCc7XG5pbXBvcnQgSW5wdXRMYWJlbCBmcm9tICcuLi9JbnB1dExhYmVsJztcbmltcG9ydCBGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbCc7XG5pbXBvcnQgRm9ybUhlbHBlclRleHQgZnJvbSAnLi4vRm9ybUhlbHBlclRleHQnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICcuLi9TZWxlY3QnO1xuaW1wb3J0IHsgZ2V0VGV4dEZpZWxkVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90ZXh0RmllbGRDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB2YXJpYW50Q29tcG9uZW50ID0ge1xuICBzdGFuZGFyZDogSW5wdXQsXG4gIGZpbGxlZDogRmlsbGVkSW5wdXQsXG4gIG91dGxpbmVkOiBPdXRsaW5lZElucHV0XG59O1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgVGV4dEZpZWxkUm9vdCA9IHN0eWxlZChGb3JtQ29udHJvbCwge1xuICBuYW1lOiAnTXVpVGV4dEZpZWxkJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7fSk7XG4vKipcbiAqIFRoZSBgVGV4dEZpZWxkYCBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHRoZSBtb3N0IGNvbW1vbiBjYXNlcyAoODAlKS5cbiAqIEl0IGNhbm5vdCBiZSBhbGwgdGhpbmdzIHRvIGFsbCBwZW9wbGUsIG90aGVyd2lzZSB0aGUgQVBJIHdvdWxkIGdyb3cgb3V0IG9mIGNvbnRyb2wuXG4gKlxuICogIyMgQWR2YW5jZWQgQ29uZmlndXJhdGlvblxuICpcbiAqIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCB0aGUgdGV4dCBmaWVsZCBpcyBhIHNpbXBsZSBhYnN0cmFjdGlvblxuICogb24gdG9wIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAtIFtGb3JtQ29udHJvbF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWNvbnRyb2wvKVxuICogLSBbSW5wdXRMYWJlbF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC1sYWJlbC8pXG4gKiAtIFtGaWxsZWRJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9maWxsZWQtaW5wdXQvKVxuICogLSBbT3V0bGluZWRJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8pXG4gKiAtIFtJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC8pXG4gKiAtIFtGb3JtSGVscGVyVGV4dF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWhlbHBlci10ZXh0LylcbiAqXG4gKiBJZiB5b3Ugd2lzaCB0byBhbHRlciB0aGUgcHJvcHMgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LCB5b3UgY2FuIGRvIHNvIGFzIGZvbGxvd3M6XG4gKlxuICogYGBganN4XG4gKiBjb25zdCBpbnB1dFByb3BzID0ge1xuICogICBzdGVwOiAzMDAsXG4gKiB9O1xuICpcbiAqIHJldHVybiA8VGV4dEZpZWxkIGlkPVwidGltZVwiIHR5cGU9XCJ0aW1lXCIgaW5wdXRQcm9wcz17aW5wdXRQcm9wc30gLz47XG4gKiBgYGBcbiAqXG4gKiBGb3IgYWR2YW5jZWQgY2FzZXMsIHBsZWFzZSBsb29rIGF0IHRoZSBzb3VyY2Ugb2YgVGV4dEZpZWxkIGJ5IGNsaWNraW5nIG9uIHRoZVxuICogXCJFZGl0IHRoaXMgcGFnZVwiIGJ1dHRvbiBhYm92ZS4gQ29uc2lkZXIgZWl0aGVyOlxuICpcbiAqIC0gdXNpbmcgdGhlIHVwcGVyIGNhc2UgcHJvcHMgZm9yIHBhc3NpbmcgdmFsdWVzIGRpcmVjdGx5IHRvIHRoZSBjb21wb25lbnRzXG4gKiAtIHVzaW5nIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgYXMgc2hvd24gaW4gdGhlIGRlbW9zXG4gKi9cblxuY29uc3QgVGV4dEZpZWxkID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVGV4dEZpZWxkKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUZXh0RmllbGQnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBhdXRvQ29tcGxldGUsXG4gICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIGVycm9yID0gZmFsc2UsXG4gICAgRm9ybUhlbHBlclRleHRQcm9wcyxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBoZWxwZXJUZXh0LFxuICAgIGlkOiBpZE92ZXJyaWRlLFxuICAgIElucHV0TGFiZWxQcm9wcyxcbiAgICBpbnB1dFByb3BzLFxuICAgIElucHV0UHJvcHMsXG4gICAgaW5wdXRSZWYsXG4gICAgbGFiZWwsXG4gICAgbWF4Um93cyxcbiAgICBtaW5Sb3dzLFxuICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgIG5hbWUsXG4gICAgb25CbHVyLFxuICAgIG9uQ2hhbmdlLFxuICAgIG9uRm9jdXMsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICByb3dzLFxuICAgIHNlbGVjdCA9IGZhbHNlLFxuICAgIFNlbGVjdFByb3BzLFxuICAgIHR5cGUsXG4gICAgdmFsdWUsXG4gICAgdmFyaWFudCA9ICdvdXRsaW5lZCdcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhdXRvRm9jdXMsXG4gICAgY29sb3IsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZnVsbFdpZHRoLFxuICAgIG11bHRpbGluZSxcbiAgICByZXF1aXJlZCxcbiAgICBzZWxlY3QsXG4gICAgdmFyaWFudFxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoc2VsZWN0ICYmICFjaGlsZHJlbikge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgY2hpbGRyZW5gIG11c3QgYmUgcGFzc2VkIHdoZW4gdXNpbmcgdGhlIGBUZXh0RmllbGRgIGNvbXBvbmVudCB3aXRoIGBzZWxlY3RgLicpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IElucHV0TW9yZSA9IHt9O1xuXG4gIGlmICh2YXJpYW50ID09PSAnb3V0bGluZWQnKSB7XG4gICAgaWYgKElucHV0TGFiZWxQcm9wcyAmJiB0eXBlb2YgSW5wdXRMYWJlbFByb3BzLnNocmluayAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIElucHV0TW9yZS5ub3RjaGVkID0gSW5wdXRMYWJlbFByb3BzLnNocmluaztcbiAgICB9XG5cbiAgICBJbnB1dE1vcmUubGFiZWwgPSBsYWJlbDtcbiAgfVxuXG4gIGlmIChzZWxlY3QpIHtcbiAgICAvLyB1bnNldCBkZWZhdWx0cyBmcm9tIHRleHRib3ggaW5wdXRzXG4gICAgaWYgKCFTZWxlY3RQcm9wcyB8fCAhU2VsZWN0UHJvcHMubmF0aXZlKSB7XG4gICAgICBJbnB1dE1vcmUuaWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgSW5wdXRNb3JlWydhcmlhLWRlc2NyaWJlZGJ5J10gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBpZCA9IHVzZUlkKGlkT3ZlcnJpZGUpO1xuICBjb25zdCBoZWxwZXJUZXh0SWQgPSBoZWxwZXJUZXh0ICYmIGlkID8gYCR7aWR9LWhlbHBlci10ZXh0YCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaW5wdXRMYWJlbElkID0gbGFiZWwgJiYgaWQgPyBgJHtpZH0tbGFiZWxgIDogdW5kZWZpbmVkO1xuICBjb25zdCBJbnB1dENvbXBvbmVudCA9IHZhcmlhbnRDb21wb25lbnRbdmFyaWFudF07XG5cbiAgY29uc3QgSW5wdXRFbGVtZW50ID0gLyojX19QVVJFX18qL19qc3goSW5wdXRDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogaGVscGVyVGV4dElkLFxuICAgIGF1dG9Db21wbGV0ZTogYXV0b0NvbXBsZXRlLFxuICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcm93czogcm93cyxcbiAgICBtYXhSb3dzOiBtYXhSb3dzLFxuICAgIG1pblJvd3M6IG1pblJvd3MsXG4gICAgdHlwZTogdHlwZSxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgaWQ6IGlkLFxuICAgIGlucHV0UmVmOiBpbnB1dFJlZixcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgaW5wdXRQcm9wczogaW5wdXRQcm9wc1xuICB9LCBJbnB1dE1vcmUsIElucHV0UHJvcHMpKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFRleHRGaWVsZFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgcmVmOiByZWYsXG4gICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgIGNvbG9yOiBjb2xvcixcbiAgICB2YXJpYW50OiB2YXJpYW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogW2xhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnICYmIC8qI19fUFVSRV9fKi9fanN4KElucHV0TGFiZWwsIF9leHRlbmRzKHtcbiAgICAgIGh0bWxGb3I6IGlkLFxuICAgICAgaWQ6IGlucHV0TGFiZWxJZFxuICAgIH0sIElucHV0TGFiZWxQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSkpLCBzZWxlY3QgPyAvKiNfX1BVUkVfXyovX2pzeChTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBoZWxwZXJUZXh0SWQsXG4gICAgICBpZDogaWQsXG4gICAgICBsYWJlbElkOiBpbnB1dExhYmVsSWQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBpbnB1dDogSW5wdXRFbGVtZW50XG4gICAgfSwgU2VsZWN0UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKSA6IElucHV0RWxlbWVudCwgaGVscGVyVGV4dCAmJiAvKiNfX1BVUkVfXyovX2pzeChGb3JtSGVscGVyVGV4dCwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IGhlbHBlclRleHRJZFxuICAgIH0sIEZvcm1IZWxwZXJUZXh0UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBoZWxwZXJUZXh0XG4gICAgfSkpXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRleHRGaWVsZC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2FkZGluZy1uZXctY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYEZvcm1IZWxwZXJUZXh0YF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWhlbHBlci10ZXh0LykgZWxlbWVudC5cbiAgICovXG4gIEZvcm1IZWxwZXJUZXh0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGhlbHBlciB0ZXh0IGNvbnRlbnQuXG4gICAqL1xuICBoZWxwZXJUZXh0OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIFVzZSB0aGlzIHByb3AgdG8gbWFrZSBgbGFiZWxgIGFuZCBgaGVscGVyVGV4dGAgYWNjZXNzaWJsZSBmb3Igc2NyZWVuIHJlYWRlcnMuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BJbnB1dExhYmVsYF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC1sYWJlbC8pIGVsZW1lbnQuXG4gICAqIFBvaW50ZXIgZXZlbnRzIGxpa2UgYG9uQ2xpY2tgIGFyZSBlbmFibGVkIGlmIGFuZCBvbmx5IGlmIGBzaHJpbmtgIGlzIGB0cnVlYC5cbiAgICovXG4gIElucHV0TGFiZWxQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBJbnB1dCBlbGVtZW50LlxuICAgKiBJdCB3aWxsIGJlIGEgW2BGaWxsZWRJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvZmlsbGVkLWlucHV0LyksXG4gICAqIFtgT3V0bGluZWRJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvb3V0bGluZWQtaW5wdXQvKSBvciBbYElucHV0YF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC8pXG4gICAqIGNvbXBvbmVudCBkZXBlbmRpbmcgb24gdGhlIGB2YXJpYW50YCBwcm9wIHZhbHVlLlxuICAgKi9cbiAgSW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBsYWJlbCBjb250ZW50LlxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgIG9yIGBub3JtYWxgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nIG9mIHRoaXMgYW5kIGNvbnRhaW5lZCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZScsICdub3JtYWwnXSksXG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBgdGV4dGFyZWFgIGVsZW1lbnQgaXMgcmVuZGVyZWQgaW5zdGVhZCBvZiBhbiBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBhcyByZXF1aXJlZCBhbmQgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFJlbmRlciBhIFtgU2VsZWN0YF0oL21hdGVyaWFsLXVpL2FwaS9zZWxlY3QvKSBlbGVtZW50IHdoaWxlIHBhc3NpbmcgdGhlIElucHV0IGVsZW1lbnQgdG8gYFNlbGVjdGAgYXMgYGlucHV0YCBwYXJhbWV0ZXIuXG4gICAqIElmIHRoaXMgb3B0aW9uIGlzIHNldCB5b3UgbXVzdCBwYXNzIHRoZSBvcHRpb25zIG9mIHRoZSBzZWxlY3QgYXMgY2hpbGRyZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzZWxlY3Q6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFNlbGVjdGBdKC9tYXRlcmlhbC11aS9hcGkvc2VsZWN0LykgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVGV4dEZpZWxkOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXZpZGVyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlEaXZpZGVyJywgc2xvdCk7XG59XG5jb25zdCBkaXZpZGVyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aURpdmlkZXInLCBbJ3Jvb3QnLCAnYWJzb2x1dGUnLCAnZnVsbFdpZHRoJywgJ2luc2V0JywgJ21pZGRsZScsICdmbGV4SXRlbScsICdsaWdodCcsICd2ZXJ0aWNhbCcsICd3aXRoQ2hpbGRyZW4nLCAnd2l0aENoaWxkcmVuVmVydGljYWwnLCAndGV4dEFsaWduUmlnaHQnLCAndGV4dEFsaWduTGVmdCcsICd3cmFwcGVyJywgJ3dyYXBwZXJWZXJ0aWNhbCddKTtcbmV4cG9ydCBkZWZhdWx0IGRpdmlkZXJDbGFzc2VzOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0SXRlbUljb25VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUxpc3RJdGVtSWNvbicsIHNsb3QpO1xufVxuY29uc3QgbGlzdEl0ZW1JY29uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3RJdGVtSWNvbicsIFsncm9vdCcsICdhbGlnbkl0ZW1zRmxleFN0YXJ0J10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdEl0ZW1JY29uQ2xhc3NlczsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdEl0ZW1UZXh0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaXN0SXRlbVRleHQnLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RJdGVtVGV4dENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0SXRlbVRleHQnLCBbJ3Jvb3QnLCAnbXVsdGlsaW5lJywgJ2RlbnNlJywgJ2luc2V0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5J10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdEl0ZW1UZXh0Q2xhc3NlczsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudUl0ZW1VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU1lbnVJdGVtJywgc2xvdCk7XG59XG5jb25zdCBtZW51SXRlbUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNZW51SXRlbScsIFsncm9vdCcsICdmb2N1c1Zpc2libGUnLCAnZGVuc2UnLCAnZGlzYWJsZWQnLCAnZGl2aWRlcicsICdndXR0ZXJzJywgJ3NlbGVjdGVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgbWVudUl0ZW1DbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRvRm9jdXNcIiwgXCJjb21wb25lbnRcIiwgXCJkZW5zZVwiLCBcImRpdmlkZXJcIiwgXCJkaXNhYmxlR3V0dGVyc1wiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcInJvbGVcIiwgXCJ0YWJJbmRleFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuLi9MaXN0L0xpc3RDb250ZXh0JztcbmltcG9ydCBCdXR0b25CYXNlIGZyb20gJy4uL0J1dHRvbkJhc2UnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHsgZGl2aWRlckNsYXNzZXMgfSBmcm9tICcuLi9EaXZpZGVyJztcbmltcG9ydCB7IGxpc3RJdGVtSWNvbkNsYXNzZXMgfSBmcm9tICcuLi9MaXN0SXRlbUljb24nO1xuaW1wb3J0IHsgbGlzdEl0ZW1UZXh0Q2xhc3NlcyB9IGZyb20gJy4uL0xpc3RJdGVtVGV4dCc7XG5pbXBvcnQgbWVudUl0ZW1DbGFzc2VzLCB7IGdldE1lbnVJdGVtVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9tZW51SXRlbUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCBvdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5kZW5zZSAmJiBzdHlsZXMuZGVuc2UsIG93bmVyU3RhdGUuZGl2aWRlciAmJiBzdHlsZXMuZGl2aWRlciwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYgc3R5bGVzLmd1dHRlcnNdO1xufTtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkLFxuICAgIGRlbnNlLFxuICAgIGRpdmlkZXIsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgc2VsZWN0ZWQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGVuc2UgJiYgJ2RlbnNlJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgIWRpc2FibGVHdXR0ZXJzICYmICdndXR0ZXJzJywgZGl2aWRlciAmJiAnZGl2aWRlcicsIHNlbGVjdGVkICYmICdzZWxlY3RlZCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRNZW51SXRlbVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5cbmNvbnN0IE1lbnVJdGVtUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlNZW51SXRlbScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7fSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5MSwge1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGp1c3RpZnlDb250ZW50OiAnZmxleC1zdGFydCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgbWluSGVpZ2h0OiA0OCxcbiAgcGFkZGluZ1RvcDogNixcbiAgcGFkZGluZ0JvdHRvbTogNixcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAxNixcbiAgcGFkZGluZ1JpZ2h0OiAxNlxufSwgb3duZXJTdGF0ZS5kaXZpZGVyICYmIHtcbiAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZGl2aWRlcn1gLFxuICBiYWNrZ3JvdW5kQ2xpcDogJ3BhZGRpbmctYm94J1xufSwge1xuICAnJjpob3Zlcic6IHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmhvdmVyLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgfVxuICB9LFxuICBbYCYuJHttZW51SXRlbUNsYXNzZXMuc2VsZWN0ZWR9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5KSxcbiAgICBbYCYuJHttZW51SXRlbUNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvIGNhbGMoJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0gKyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uZm9jdXNPcGFjaXR5fSkpYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkgKyB0aGVtZS5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHkpXG4gICAgfVxuICB9LFxuICBbYCYuJHttZW51SXRlbUNsYXNzZXMuc2VsZWN0ZWR9OmhvdmVyYF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvIGNhbGMoJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0gKyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSkpYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkgKyB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUucHJpbWFyeS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSlcbiAgICB9XG4gIH0sXG4gIFtgJi4ke21lbnVJdGVtQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5mb2N1c1xuICB9LFxuICBbYCYuJHttZW51SXRlbUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBvcGFjaXR5OiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRPcGFjaXR5XG4gIH0sXG4gIFtgJiArIC4ke2RpdmlkZXJDbGFzc2VzLnJvb3R9YF06IHtcbiAgICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMSksXG4gICAgbWFyZ2luQm90dG9tOiB0aGVtZS5zcGFjaW5nKDEpXG4gIH0sXG4gIFtgJiArIC4ke2RpdmlkZXJDbGFzc2VzLmluc2V0fWBdOiB7XG4gICAgbWFyZ2luTGVmdDogNTJcbiAgfSxcbiAgW2AmIC4ke2xpc3RJdGVtVGV4dENsYXNzZXMucm9vdH1gXToge1xuICAgIG1hcmdpblRvcDogMCxcbiAgICBtYXJnaW5Cb3R0b206IDBcbiAgfSxcbiAgW2AmIC4ke2xpc3RJdGVtVGV4dENsYXNzZXMuaW5zZXR9YF06IHtcbiAgICBwYWRkaW5nTGVmdDogMzZcbiAgfSxcbiAgW2AmIC4ke2xpc3RJdGVtSWNvbkNsYXNzZXMucm9vdH1gXToge1xuICAgIG1pbldpZHRoOiAzNlxuICB9XG59LCAhb3duZXJTdGF0ZS5kZW5zZSAmJiB7XG4gIFt0aGVtZS5icmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICBtaW5IZWlnaHQ6ICdhdXRvJ1xuICB9XG59LCBvd25lclN0YXRlLmRlbnNlICYmIF9leHRlbmRzKHtcbiAgbWluSGVpZ2h0OiAzMixcbiAgLy8gaHR0cHM6Ly9tYXRlcmlhbC5pby9jb21wb25lbnRzL21lbnVzI3NwZWNzID4gRGVuc2VcbiAgcGFkZGluZ1RvcDogNCxcbiAgcGFkZGluZ0JvdHRvbTogNFxufSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5Miwge1xuICBbYCYgLiR7bGlzdEl0ZW1JY29uQ2xhc3Nlcy5yb290fSBzdmdgXToge1xuICAgIGZvbnRTaXplOiAnMS4yNXJlbSdcbiAgfVxufSkpKTtcbmNvbnN0IE1lbnVJdGVtID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudUl0ZW0oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aU1lbnVJdGVtJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgY29tcG9uZW50ID0gJ2xpJyxcbiAgICBkZW5zZSA9IGZhbHNlLFxuICAgIGRpdmlkZXIgPSBmYWxzZSxcbiAgICBkaXNhYmxlR3V0dGVycyA9IGZhbHNlLFxuICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSxcbiAgICByb2xlID0gJ21lbnVpdGVtJyxcbiAgICB0YWJJbmRleDogdGFiSW5kZXhQcm9wXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChMaXN0Q29udGV4dCk7XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IHtcbiAgICBkZW5zZTogZGVuc2UgfHwgY29udGV4dC5kZW5zZSB8fCBmYWxzZSxcbiAgICBkaXNhYmxlR3V0dGVyc1xuICB9O1xuICBjb25zdCBtZW51SXRlbVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgIGlmIChtZW51SXRlbVJlZi5jdXJyZW50KSB7XG4gICAgICAgIG1lbnVJdGVtUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IFVuYWJsZSB0byBzZXQgZm9jdXMgdG8gYSBNZW51SXRlbSB3aG9zZSBjb21wb25lbnQgaGFzIG5vdCBiZWVuIHJlbmRlcmVkLicpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2F1dG9Gb2N1c10pO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkZW5zZTogY2hpbGRDb250ZXh0LmRlbnNlLFxuICAgIGRpdmlkZXIsXG4gICAgZGlzYWJsZUd1dHRlcnNcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihtZW51SXRlbVJlZiwgcmVmKTtcbiAgbGV0IHRhYkluZGV4O1xuXG4gIGlmICghcHJvcHMuZGlzYWJsZWQpIHtcbiAgICB0YWJJbmRleCA9IHRhYkluZGV4UHJvcCAhPT0gdW5kZWZpbmVkID8gdGFiSW5kZXhQcm9wIDogLTE7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2hpbGRDb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChNZW51SXRlbVJvb3QsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogaGFuZGxlUmVmLFxuICAgICAgcm9sZTogcm9sZSxcbiAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuZm9jdXNWaXNpYmxlLCBmb2N1c1Zpc2libGVDbGFzc05hbWUpXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc2VzOiBjbGFzc2VzXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNZW51SXRlbS5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGlzdCBpdGVtIGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICogRm9jdXMgd2lsbCBhbHNvIGJlIHRyaWdnZXJlZCBpZiB0aGUgdmFsdWUgY2hhbmdlcyBmcm9tIGZhbHNlIHRvIHRydWUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBjb21wYWN0IHZlcnRpY2FsIHBhZGRpbmcgZGVzaWduZWQgZm9yIGtleWJvYXJkIGFuZCBtb3VzZSBpbnB1dCBpcyB1c2VkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBNZW51IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlbnNlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsZWZ0IGFuZCByaWdodCBwYWRkaW5nIGlzIHJlbW92ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSAxcHggbGlnaHQgYm9yZGVyIGlzIGFkZGVkIHRvIHRoZSBib3R0b20gb2YgdGhlIG1lbnUgaXRlbS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpdmlkZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgY2FuIGhlbHAgaWRlbnRpZnkgd2hpY2ggZWxlbWVudCBoYXMga2V5Ym9hcmQgZm9jdXMuXG4gICAqIFRoZSBjbGFzcyBuYW1lIHdpbGwgYmUgYXBwbGllZCB3aGVuIHRoZSBlbGVtZW50IGdhaW5zIHRoZSBmb2N1cyB0aHJvdWdoIGtleWJvYXJkIGludGVyYWN0aW9uLlxuICAgKiBJdCdzIGEgcG9seWZpbGwgZm9yIHRoZSBbQ1NTIDpmb2N1cy12aXNpYmxlIHNlbGVjdG9yXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLTQvI3RoZS1mb2N1cy12aXNpYmxlLXBzZXVkbykuXG4gICAqIFRoZSByYXRpb25hbGUgZm9yIHVzaW5nIHRoaXMgZmVhdHVyZSBbaXMgZXhwbGFpbmVkIGhlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi9IRUFEL2V4cGxhaW5lci5tZCkuXG4gICAqIEEgW3BvbHlmaWxsIGNhbiBiZSB1c2VkXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlKSB0byBhcHBseSBhIGBmb2N1cy12aXNpYmxlYCBjbGFzcyB0byBvdGhlciBjb21wb25lbnRzXG4gICAqIGlmIG5lZWRlZC5cbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcm9sZTogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLnN0cmluZyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMubnVtYmVyXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTWVudUl0ZW07IiwiaW1wb3J0IHsgY3JlYXRlU2xpY2UsIFBheWxvYWRBY3Rpb24gfSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxudHlwZSBhc3NlcnRpb25MaXN0VHlwZSA9IHtcbiAgW2luZGV4OiBzdHJpbmddOiBzdHJpbmc7XG59O1xuXG50eXBlIGFzc2VydGlvblR5cGVzVHlwZSA9IHN0cmluZ1tdO1xuXG50eXBlIHRlc3RGb3JtU3RhdGVUeXBlID0ge1xuICByZXF1ZXN0VHlwZTogc3RyaW5nO1xuICBhc3NlcnRpb25MaXN0OiBhc3NlcnRpb25MaXN0VHlwZTtcbiAgaTogbnVtYmVyO1xuICB1c2VySW5wdXQ6IHN0cmluZztcbiAgYXNzZXJ0aW9uVHlwZXM6IGFzc2VydGlvblR5cGVzVHlwZTtcbn07XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogdGVzdEZvcm1TdGF0ZVR5cGUgPSB7XG4gIHJlcXVlc3RUeXBlOiAnR2V0JyxcbiAgYXNzZXJ0aW9uTGlzdDoge30sXG4gIGk6IDAsXG4gIHVzZXJJbnB1dDogJycsXG4gIGFzc2VydGlvblR5cGVzOiBbJ1N0YXR1cyBDb2RlJywgJ0NvbnRlbnQgVHlwZScsICdSZXNwb25zZSBCb2R5J10sXG59O1xuXG5leHBvcnQgY29uc3QgdGVzdEZvcm1TbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogJ3Rlc3RGb3JtJyxcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge1xuICAgIHNldFJlcXVlc3RUeXBlOiAoXG4gICAgICBzdGF0ZTogdGVzdEZvcm1TdGF0ZVR5cGUsXG4gICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248c3RyaW5nPlxuICAgICkgPT4ge1xuICAgICAgc3RhdGUucmVxdWVzdFR5cGUgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICB9LFxuICAgIGFkZEFzc2VydGlvbjogKHN0YXRlOiB0ZXN0Rm9ybVN0YXRlVHlwZSkgPT4ge1xuICAgICAgaWYgKHN0YXRlLmkgPT09IDMpIHN0YXRlLmkgPSAwO1xuICAgICAgc3RhdGUuYXNzZXJ0aW9uTGlzdFtzdGF0ZS5pXSA9IHN0YXRlLmFzc2VydGlvblR5cGVzW3N0YXRlLmldO1xuICAgICAgc3RhdGUuaSArPSAxO1xuICAgIH0sXG4gICAgc2V0SW5wdXRUeXBlOiAoXG4gICAgICBzdGF0ZTogdGVzdEZvcm1TdGF0ZVR5cGUsXG4gICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248eyBpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmcgfT5cbiAgICApID0+IHtcbiAgICAgIHN0YXRlLmFzc2VydGlvbkxpc3RbYWN0aW9uLnBheWxvYWQuaWRdID0gYWN0aW9uLnBheWxvYWQudHlwZTtcbiAgICB9LFxuICAgIGRlbGV0ZUFzc2VydGlvbjogKFxuICAgICAgc3RhdGU6IHRlc3RGb3JtU3RhdGVUeXBlLFxuICAgICAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPHN0cmluZz5cbiAgICApID0+IHtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5hc3NlcnRpb25MaXN0W2FjdGlvbi5wYXlsb2FkXTtcbiAgICB9LFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCB7IHNldFJlcXVlc3RUeXBlLCBhZGRBc3NlcnRpb24sIHNldElucHV0VHlwZSwgZGVsZXRlQXNzZXJ0aW9uIH0gPVxuICB0ZXN0Rm9ybVNsaWNlLmFjdGlvbnM7XG5cbmV4cG9ydCBkZWZhdWx0IHRlc3RGb3JtU2xpY2UucmVkdWNlcjtcbiIsImltcG9ydCB7IGNyZWF0ZVNsaWNlLCBQYXlsb2FkQWN0aW9uIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbnR5cGUgY29kZVN0YXRlVHlwZSA9IHtcbiAgY29kZU91dHB1dDogc3RyaW5nO1xufTtcblxuY29uc3QgaW5pdGlhbFN0YXRlOiBjb2RlU3RhdGVUeXBlID0ge1xuICAvLyB0aGlzIHByb3BlcnR5IG9mIHN0YXRlIHdpbGwgZ2V0IHVwZGF0ZWQgYnkgdGhlIFBPU1QgcmVxdWVzdFxuICBjb2RlT3V0cHV0OiAnZGVzY3JpYmUoXFwnU2FtcGxlIGRlc2NyaXB0aW9uXFwnLCAoYXJnMSkgPT4geyBjb2RlLi4gfScsXG59O1xuXG5leHBvcnQgY29uc3QgY29kZVNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICBuYW1lOiAnY29kZScsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHtcbiAgICBjb3B5VGV4dDogKHN0YXRlOiBjb2RlU3RhdGVUeXBlKSA9PiB7XG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChzdGF0ZS5jb2RlT3V0cHV0KTtcbiAgICB9LFxuICAgIHNldENvZGVPdXRwdXQ6IChzdGF0ZTogY29kZVN0YXRlVHlwZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPHN0cmluZz4pID0+IHtcbiAgICAgIHN0YXRlLmNvZGVPdXRwdXQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICB9LFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCB7IGNvcHlUZXh0LCBzZXRDb2RlT3V0cHV0IH0gPSBjb2RlU2xpY2UuYWN0aW9ucztcblxuZXhwb3J0IGRlZmF1bHQgY29kZVNsaWNlLnJlZHVjZXI7XG4iLCJpbXBvcnQgeyBjcmVhdGVTbGljZSB9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG50eXBlIGVycm9yTXNnc1R5cGUgPSB7XG4gIFtlcnJvcktleTogc3RyaW5nXTogc3RyaW5nO1xufTtcblxudHlwZSBpbml0aWFsU3RhdGVUeXBlID0ge1xuICBlcnJvck1zZ3M6IGVycm9yTXNnc1R5cGU7XG4gIHVzZXJJbnB1dFR5cGU6IHN0cmluZztcbiAgdXNlcklucHV0VGV4dDogdW5kZWZpbmVkIHwgbnVtYmVyIHwgc3RyaW5nO1xuICBpOiBudW1iZXI7XG59O1xuXG5jb25zdCBpbml0aWFsU3RhdGU6IGluaXRpYWxTdGF0ZVR5cGUgPSB7XG4gIGVycm9yTXNnczoge30sXG4gIHVzZXJJbnB1dFR5cGU6ICcnLFxuICB1c2VySW5wdXRUZXh0OiB1bmRlZmluZWQsXG4gIGk6IDAsXG59O1xuXG5leHBvcnQgY29uc3QgdXNlcklucHV0U2xpY2UgPSBjcmVhdGVTbGljZSh7XG4gIG5hbWU6ICd1c2VySW5wdXQnLFxuICBpbml0aWFsU3RhdGUsXG4gIHJlZHVjZXJzOiB7XG4gICAgc2V0RXJyb3JNc2c6IChzdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuZXJyb3JNc2dzW3N0YXRlLmldID0gJyc7XG4gICAgICBzdGF0ZS5pID0gc3RhdGUuaSArIDE7XG4gICAgfSxcbiAgICBjaGFuZ2VFcnJvck1zZzogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICAgIHN0YXRlLmVycm9yTXNnc1thY3Rpb24ucGF5bG9hZC5wcm9wc0lkXSA9IGFjdGlvbi5wYXlsb2FkLm5ld01zZztcbiAgICB9LFxuICAgIHNldFVzZXJJbnB1dFR5cGU6IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgICBzdGF0ZS51c2VySW5wdXRUeXBlID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgfSxcbiAgICBzZXRVc2VySW5wdXRUZXh0OiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgICAgc3RhdGUudXNlcklucHV0VGV4dCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgIH0sXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IHtcbiAgc2V0RXJyb3JNc2csXG4gIGNoYW5nZUVycm9yTXNnLFxuICBzZXRVc2VySW5wdXRUeXBlLFxuICBzZXRVc2VySW5wdXRUZXh0LFxufSA9IHVzZXJJbnB1dFNsaWNlLmFjdGlvbnM7XG5cbmV4cG9ydCBkZWZhdWx0IHVzZXJJbnB1dFNsaWNlLnJlZHVjZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgRm9ybUNvbnRyb2wsXG4gIE1lbnVJdGVtLFxuICBTZWxlY3QsXG4gIFRleHRGaWVsZCxcbiAgQnV0dG9uLFxuICBJbnB1dExhYmVsLFxuICBTZWxlY3RDaGFuZ2VFdmVudCxcbiAgQm94LFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7IHNldElucHV0VHlwZSwgZGVsZXRlQXNzZXJ0aW9uIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdGVzdEZvcm1TbGljZSc7XG5pbXBvcnQge1xuICBzZXRVc2VySW5wdXRUeXBlLFxuICBjaGFuZ2VFcnJvck1zZyxcbiAgc2V0VXNlcklucHV0VGV4dCxcbn0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdXNlcklucHV0U2xpY2UnO1xuXG50eXBlIGFzc2VydGlvbnNQcm9wc1R5cGUgPSB7XG4gIGlkOiBzdHJpbmc7XG59O1xuXG4vKiBcblRoaXMgY29tcG9uZW50IGFsbG93cyBhIHVzZXIgdG8gaW5kaWNhdGUgd2hhdCByZXNwb25zZSB0aGV5IGV4cGVjdCBmcm9tIHRoZSBzZXJ2ZXJcbnRvIGdlbmVyYXRlIHRoZSBwcm9wZXIgdGVzdCBjb2RlXG4qL1xuXG5leHBvcnQgY29uc3QgQXNzZXJ0aW9ucyA9IChwcm9wczogYXNzZXJ0aW9uc1Byb3BzVHlwZSkgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IGN1cnJWYWx1ZSA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUudGVzdEZvcm0uYXNzZXJ0aW9uTGlzdFtwcm9wcy5pZF1cbiAgKTtcbiAgY29uc3QgYXNzZXJ0aW9ucyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudGVzdEZvcm0uYXNzZXJ0aW9uTGlzdCk7XG4gIGNvbnN0IGVycm9yTXNncyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudXNlcklucHV0LmVycm9yTXNncyk7XG4gIGNvbnN0IGkgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLnVzZXJJbnB1dC5pKTtcblxuICBjb25zdCB2ZXJpZnlOdW1JbnB1dHMgPSAoZTogYW55KSA9PiB7IFxuICAgIC8vIHRocm93cyBlcnJvciBpZiB1c2VyIGlzIHRyeWluZyB0byBpbnB1dCBtb3JlIHRoYW4gMSBvZiB0aGUgc2FtZSBhc3NlcnRpb24gdHlwZVxuICAgIGxldCBzdGF0dXNDb3VudCA9IDA7XG4gICAgbGV0IGNvbnRlbnRDb3VudCA9IDA7XG4gICAgY29uc3QgYXNzZXJ0aW9uVmFscyA9IE9iamVjdC52YWx1ZXMoYXNzZXJ0aW9ucyk7XG4gICAgYXNzZXJ0aW9uVmFscy5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgIGlmICh2YWwgPT09ICdTdGF0dXMgQ29kZScpIHN0YXR1c0NvdW50Kys7XG4gICAgICBpZiAodmFsID09PSAnQ29udGVudCBUeXBlJykgY29udGVudENvdW50Kys7XG4gICAgfSk7XG4gICAgaWYgKHN0YXR1c0NvdW50ID49IDIgJiYgZS50YXJnZXQuaWQgPT09ICdTdGF0dXMgQ29kZScpXG4gICAgICBkaXNwYXRjaChcbiAgICAgICAgY2hhbmdlRXJyb3JNc2coe1xuICAgICAgICAgIHByb3BzSWQ6IHByb3BzLmlkLFxuICAgICAgICAgIG5ld01zZzogJzEgc3RhdHVzIGNvZGUgcGVybWl0dGVkJyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgaWYgKGNvbnRlbnRDb3VudCA+PSAyICYmIGUudGFyZ2V0LmlkID09PSAnQ29udGVudCBUeXBlJylcbiAgICAgIGRpc3BhdGNoKFxuICAgICAgICBjaGFuZ2VFcnJvck1zZyh7XG4gICAgICAgICAgcHJvcHNJZDogcHJvcHMuaWQsXG4gICAgICAgICAgbmV3TXNnOiAnMSBjb250ZW50IHR5cGUgcGVybWl0dGVkJyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH07XG5cbiAgY29uc3QgdmVyaWZ5SW5wdXRUeXBlID0gKGU6IGFueSkgPT4geyBcbiAgICBjb25zdCB1c2VySW5wdXQgPSBlLnRhcmdldC52YWx1ZTtcbiAgICBpZiAoZS50YXJnZXQuaWQgPT09ICdTdGF0dXMgQ29kZScpIHsgXG4gICAgICAvLyBhZGRzIHZlcmlmaWNhdGlvbiBmb3Igc3RhdHVzIGNvZGVcbiAgICAgIGlmICghTnVtYmVyKHVzZXJJbnB1dCkpIHtcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgY2hhbmdlRXJyb3JNc2coe1xuICAgICAgICAgICAgcHJvcHNJZDogcHJvcHMuaWQsXG4gICAgICAgICAgICBuZXdNc2c6ICdwbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHVzZXJJbnB1dCA8IDEwMCB8fCB1c2VySW5wdXQgPiA1MTEpIHtcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgY2hhbmdlRXJyb3JNc2coe1xuICAgICAgICAgICAgcHJvcHNJZDogcHJvcHMuaWQsXG4gICAgICAgICAgICBuZXdNc2c6ICdlbnRlciBhIG51bWJlciBiZXR3ZWVuIDEwMCBhbmQgNTExJyxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgY2hhbmdlRXJyb3JNc2coe1xuICAgICAgICAgICAgcHJvcHNJZDogcHJvcHMuaWQsXG4gICAgICAgICAgICBuZXdNc2c6ICcnLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlLnRhcmdldC5pZCA9PT0gJ0NvbnRlbnQgVHlwZScpIHsgXG4gICAgICAgIC8vIGFkZHMgdmVyaWZpY2F0aW9uIGZvciBjb250ZW50IHR5cGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE51bWJlcih1c2VySW5wdXQpIHx8XG4gICAgICAgICAgIXVzZXJJbnB1dC5pbmNsdWRlcygnLycpIHx8IFxuICAgICAgICAgIHVzZXJJbnB1dFswXSA9PT0gJy8nIHx8IFxuICAgICAgICAgIHVzZXJJbnB1dFt1c2VySW5wdXQubGVuZ3RoIC0gMV0gPT09ICcvJ1xuICAgICAgICApIHtcbiAgICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICAgIGNoYW5nZUVycm9yTXNnKHtcbiAgICAgICAgICAgICAgcHJvcHNJZDogcHJvcHMuaWQsXG4gICAgICAgICAgICAgIG5ld01zZzogJ2ludmFsaWQgY29udGVudCB0eXBlJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICAgIGNoYW5nZUVycm9yTXNnKHtcbiAgICAgICAgICAgICAgcHJvcHNJZDogcHJvcHMuaWQsXG4gICAgICAgICAgICAgIG5ld01zZzogJycsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGV2ZW50OiBTZWxlY3RDaGFuZ2VFdmVudDxzdHJpbmc+KSA9PiB7XG4gICAgZGlzcGF0Y2goc2V0SW5wdXRUeXBlKHsgaWQ6IHByb3BzLmlkLCB0eXBlOiBldmVudC50YXJnZXQudmFsdWUgfSkpO1xuICAgIGRpc3BhdGNoKHNldFVzZXJJbnB1dFR5cGUoZXZlbnQudGFyZ2V0LnZhbHVlKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBkaXNwYXRjaChkZWxldGVBc3NlcnRpb24oZXZlbnQudGFyZ2V0LmlkKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVHlwZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdmVyaWZ5SW5wdXRUeXBlKGV2ZW50KTtcbiAgICB2ZXJpZnlOdW1JbnB1dHMoZXZlbnQpO1xuICAgIGRpc3BhdGNoKHNldFVzZXJJbnB1dFRleHQoZXZlbnQudGFyZ2V0LnZhbHVlKSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPEJveFxuICAgICAgICBzeD17e1xuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgZ2FwOiAnMTBweCcsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxGb3JtQ29udHJvbD5cbiAgICAgICAgICA8SW5wdXRMYWJlbD48L0lucHV0TGFiZWw+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1kaXNwbGF5XCJcbiAgICAgICAgICAgIG5hbWU9XCJtb3JlLXRlc3Qtb3B0aW9uc1wiXG4gICAgICAgICAgICBpZD17cHJvcHMuaWR9XG4gICAgICAgICAgICB2YWx1ZT17Y3VyclZhbHVlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIGRpc3BsYXlFbXB0eVxuICAgICAgICAgICAgaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdXaXRob3V0IGxhYmVsJyB9fVxuICAgICAgICAgICAgc3g9e3sgaGVpZ2h0OiA0MCB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxNZW51SXRlbSBrZXk9XCJTdGF0dXMgQ29kZVwiIHZhbHVlPVwiU3RhdHVzIENvZGVcIiBpZD17cHJvcHMuaWR9PlxuICAgICAgICAgICAgICBTdGF0dXMgQ29kZVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICAgIDxNZW51SXRlbSBrZXk9XCJDb250ZW50IFR5cGVcIiB2YWx1ZT1cIkNvbnRlbnQgVHlwZVwiIGlkPXtwcm9wcy5pZH0+XG4gICAgICAgICAgICAgIENvbnRlbnQgVHlwZVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICAgIDxNZW51SXRlbSBrZXk9XCJSZXNwb25zZSBCb2R5XCIgdmFsdWU9XCJSZXNwb25zZSBCb2R5XCIgaWQ9e3Byb3BzLmlkfT5cbiAgICAgICAgICAgICAgUmVzcG9uc2UgQm9keVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgPC9Gb3JtQ29udHJvbD5cbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZGlzcGxheVwiXG4gICAgICAgICAgbGFiZWw9e2N1cnJWYWx1ZX1cbiAgICAgICAgICBpZD17Y3VyclZhbHVlfVxuICAgICAgICAgIG5hbWU9e2N1cnJWYWx1ZX1cbiAgICAgICAgICBlcnJvcj17IWVycm9yTXNnc1twcm9wcy5pZF0gPyBmYWxzZSA6IHRydWV9XG4gICAgICAgICAgaGVscGVyVGV4dD17ZXJyb3JNc2dzW3Byb3BzLmlkXX1cbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlVHlwZX1cbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBpZD17cHJvcHMuaWR9XG4gICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlfVxuICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgc3g9e3sgaGVpZ2h0OiAyNSwgbWluV2lkdGg6IDIzLCB3aWR0aDogMjMgfX1cbiAgICAgICAgICBkaXNhYmxlRWxldmF0aW9uXG4gICAgICAgID5cbiAgICAgICAgICAtXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9Cb3g+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRleHRGaWVsZCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuXG50eXBlIHJlcXVlc3RCb2R5UHJvcHNUeXBlID0ge1xuICBzaG93RmllbGQ6IGJvb2xlYW47XG59O1xuXG4vKlxuVGhpcyBjb21wb25lbnQgd2lsbCBhbGxvdyBhIHVzZXIgdG8gaW5wdXQgYSByZXF1ZXN0IGJvZHkgaWYgdGhlIHNlbGVjdGVkIHJlcXVlc3QgdHlwZSBpcyBcbidQb3N0LCcgJ1BhdGNoLCcgb3IgJ0RlbGV0ZSdcbiovXG5cbmV4cG9ydCBjb25zdCBSZXF1ZXN0Qm9keSA9IChwcm9wczogcmVxdWVzdEJvZHlQcm9wc1R5cGUpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8VGV4dEZpZWxkXG4gICAgICBjbGFzc05hbWU9XCJ0ZXh0LWRpc3BsYXlcIlxuICAgICAgbGFiZWw9XCJSZXF1ZXN0IEJvZHlcIlxuICAgICAgaWQ9XCJyZXFfYm9keVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIlJlcXVlc3QtQm9keVwiXG4gICAgICBuYW1lPVwiUmVxdWVzdC1Cb2R5XCJcbiAgICAgIGRpc2FibGVkPXtwcm9wcy5zaG93RmllbGQgPyBmYWxzZSA6IHRydWV9XG4gICAgICBzeD17eyBiYWNrZ3JvdW5kQ29sb3I6IHByb3BzLnNob3dGaWVsZCA/ICdub25lJyA6ICcjRThFOEU4JyB9fVxuICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAvPlxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0JveCwgSW5wdXRMYWJlbCwgTWVudUl0ZW0sIEZvcm1Db250cm9sLCBTZWxlY3R9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgU2VsZWN0Q2hhbmdlRXZlbnQgfSBmcm9tICdAbXVpL21hdGVyaWFsL1NlbGVjdCc7XG5cbmltcG9ydCB7IHNldEN1cnJlbnRQcm9qZWN0IH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdXNlckluZm9TbGljZSc7XG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCwgdXNlQXBwU2VsZWN0b3IgfSBmcm9tICcuLi9yZWR1eC9ob29rcyc7XG5cbnR5cGUgcHJvamVjdERyb3Bkb3duUHJvcHNUeXBlID0ge1xuICBhbGxvd05ldz86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn07XG5cbi8qXG5UaGlzIGNvbXBvbmVudCBjcmVhdGVzIGEgZHJvcGRvd24gbWVudSB3aXRoIGFsbCBvZiB0aGUgcHJvamVjdCBuYW1lcyB0aGF0IGFyZSB0aWVkIHRvIGEgdXNlciBzbyB0aGF0XG4gIDEpIGEgdXNlciBjYW4gaW5kaWNhdGUgd2hpY2ggcHJvamVjdCB0aGV5IHdhbnQgdGhlIGdlbmVyYXRlZCB0ZXN0IGNvZGUgc25pcHBldCB0byBiZSBhZGRlZCB0b1xuICAyKSBhIHVzZXIgY2FuIHNlbGVjdCB3aGljaCBwcm9qZWN0IHRoZXkgd2FudCB0aGVpciBjbGlwYm9hcmQgZGF0YSByZWNvbmNpbGVkIHRvXG4qL1xuXG5jb25zdCBQcm9qZWN0RHJvcGRvd24gPSAocHJvcHM6IHByb2plY3REcm9wZG93blByb3BzVHlwZSkgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IHByb2plY3ROYW1lID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS51c2VySW5mby5jdXJyZW50UHJvamVjdCk7XG4gIGNvbnN0IHByb2plY3RzSW5mbyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudXNlckluZm8ucHJvamVjdHNJbmZvKTtcbiAgY29uc3QgcHJvamVjdHMgPSBwcm9qZWN0c0luZm8ubWFwKChlbCkgPT4gZWwucHJvamVjdF9uYW1lKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogU2VsZWN0Q2hhbmdlRXZlbnQ8c3RyaW5nPikgPT4ge1xuICAgIGRpc3BhdGNoKHNldEN1cnJlbnRQcm9qZWN0KGUudGFyZ2V0LnZhbHVlKSk7XG4gIH07XG5cbiAgY29uc3QgbWVudUl0ZW1zOiBKU1guRWxlbWVudFtdID0gW107XG4gIGZvciAoY29uc3QgcHJvamVjdCBvZiBwcm9qZWN0cykge1xuICAgIG1lbnVJdGVtcy5wdXNoKFxuICAgICAgPE1lbnVJdGVtIGtleT17cHJvamVjdH0gdmFsdWU9e3Byb2plY3R9PlxuICAgICAgICB7cHJvamVjdH1cbiAgICAgIDwvTWVudUl0ZW0+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEJveFxuICAgICAgc3g9e3tcbiAgICAgICAgbWluSGVpZ2h0OiAyNSxcbiAgICAgICAgaGVpZ2h0OiAyNSxcbiAgICAgICAgd2lkdGg6IDIzLFxuICAgICAgICBtaW5XaWR0aDogMjAwLFxuICAgICAgICBtOiAzLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8Rm9ybUNvbnRyb2wgZnVsbFdpZHRoPlxuICAgICAgICA8SW5wdXRMYWJlbCBpZD1cInByb2plY3QtZHJvcGRvd24tbGFiZWxcIj5Qcm9qZWN0PC9JbnB1dExhYmVsPlxuICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgbmFtZT1cInByb2plY3Qtc2VsZWN0b3JcIlxuICAgICAgICAgIGlkPVwicHJvamVjdC1zZWxlY3RvclwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJwcm9qZWN0LXNlbGVjdG9yXCJcbiAgICAgICAgICBsYWJlbD1cIlByb2plY3RcIlxuICAgICAgICAgIHZhbHVlPXtwcm9qZWN0TmFtZX1cbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgIHN4PXt7IGhlaWdodDogNDAgfX1cbiAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9XG4gICAgICAgID5cbiAgICAgICAgICB7bWVudUl0ZW1zfVxuICAgICAgICA8L1NlbGVjdD5cbiAgICAgIDwvRm9ybUNvbnRyb2w+XG4gICAgPC9Cb3g+XG4gICk7XG59O1xuXG5leHBvcnQgeyBQcm9qZWN0RHJvcGRvd24gfTtcbiIsImltcG9ydCB7XG4gIEZvcm1Db250cm9sLFxuICBNZW51SXRlbSxcbiAgU2VsZWN0LFxuICBUZXh0RmllbGQsXG4gIEJ1dHRvbixcbiAgQm94LFxuICBJbnB1dExhYmVsLFxuICBTZWxlY3RDaGFuZ2VFdmVudCxcbiAgVHlwb2dyYXBoeVxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCwgdXNlQXBwU2VsZWN0b3IgfSBmcm9tICcuLi9yZWR1eC9ob29rcyc7XG5pbXBvcnQgeyBzZXRSZXF1ZXN0VHlwZSwgYWRkQXNzZXJ0aW9uIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdGVzdEZvcm1TbGljZSc7XG5pbXBvcnQgeyBzZXRDb2RlT3V0cHV0IH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvY29kZVNsaWNlJztcbmltcG9ydCB7IHNldEVycm9yTXNnIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdXNlcklucHV0U2xpY2UnO1xuaW1wb3J0IHsgQXNzZXJ0aW9ucyB9IGZyb20gJy4vQXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBSZXF1ZXN0Qm9keSB9IGZyb20gJy4vUmVxdWVzdEJvZHknO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFByb2plY3REcm9wZG93biB9IGZyb20gJy4vUHJvamVjdERyb3Bkb3duJztcbmltcG9ydCB7IHNldEN1cnJlbnRQcm9qZWN0IH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdXNlckluZm9TbGljZSc7XG4vKlxuVGhpcyBjb21wb25lbnQgd2lsbCBhbGxvdyBhIHVzZXIgdG8gZ2VuZXJhdGUgdGVzdCBjb2RlIGFjY29yZGluZyB0byB0aGVpciBpbnB1dHMuIFRoaXMgY29tcG9uZW50IGlzXG53aGVyZSB1c2VycyB3aWxsIGluZGljYXRlIHRoZSByZXF1ZXN0IHR5cGUsIGVuZHBvaW50LCBhbmQgcmVzcG9uc2UgYm9keSwgYXMgd2VsbCBhcyBhZGQgdGhlaXIgYXNzZXJ0aW9ucy5cbiovXG5cbmV4cG9ydCBjb25zdCBUZXN0SW5wdXRGb3JtID0gKCkgPT4ge1xuICBjb25zdCBpc0xvZ2dlZEluID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNMb2dnZWRJbicpO1xuICBjb25zdCByZXF1ZXN0VHlwZSA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudGVzdEZvcm0ucmVxdWVzdFR5cGUpO1xuICBjb25zdCBhc3NlcnRpb25PYmplY3QgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLnRlc3RGb3JtLmFzc2VydGlvbkxpc3QpO1xuICBjb25zdCBhc3NlcnRpb25MaXN0OiBKU1guRWxlbWVudFtdID0gW107XG4gIGNvbnN0IGFzc2VydGlvbklkcyA9IE9iamVjdC5rZXlzKGFzc2VydGlvbk9iamVjdCk7XG4gIGZvciAoY29uc3QgaWQgb2YgYXNzZXJ0aW9uSWRzKSB7XG4gICAgYXNzZXJ0aW9uTGlzdC5wdXNoKDxBc3NlcnRpb25zIGlkPXtpZH0ga2V5PXtpZH0gLz4pO1xuICB9XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcbiAgXG4gIGNvbnN0IHByb2plY3RzSW5mbyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudXNlckluZm8ucHJvamVjdHNJbmZvKTtcbiAgY29uc3QgcHJvamVjdHMgPSBwcm9qZWN0c0luZm8ubWFwKChlbCkgPT4gZWwucHJvamVjdF9uYW1lKTtcbiAgZGlzcGF0Y2goc2V0Q3VycmVudFByb2plY3QocHJvamVjdHNbcHJvamVjdHMubGVuZ3RoIC0gMV0pKTtcblxuICBjb25zdCBnZXREYXRhID0gKGZvcm06IGFueSkgPT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pO1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZm9ybURhdGEpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IGFzeW5jIChcbiAgICBlOiBSZWFjdC5Gb3JtRXZlbnQ8RXZlbnRUYXJnZXQ+XG4gICk6IFByb21pc2U8dW5rbm93bj4gPT4ge1xuICAgIC8vIGNoZWNrcyB0byBlbnN1cmUgcHJvcGVyIHVzZXIgaW5wdXRcbiAgICBcbiAgICAvLyBnYXRoZXJzIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMgbmVlZGVkIHRvIGdlbmVyYXRlIHRlc3QgY29kZVxuICAgIC8vIGluIHRoZSBmb3JtYXQgZXhwZWN0ZWQgb24gdGhlIGJhY2tlbmRcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IHN0YXR1c0NvdW50ID0gMDtcbiAgICBsZXQgY29udGVudENvdW50ID0gMDtcbiAgICBjb25zdCBhc3NlcnRpb25WYWxzID0gT2JqZWN0LnZhbHVlcyhhc3NlcnRpb25PYmplY3QpO1xuICAgIGFzc2VydGlvblZhbHMuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBpZiAodmFsID09PSAnU3RhdHVzIENvZGUnKSBzdGF0dXNDb3VudCsrO1xuICAgICAgaWYgKHZhbCA9PT0gJ0NvbnRlbnQgVHlwZScpIGNvbnRlbnRDb3VudCsrO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0YXR1c0NvdW50ID4gMSlcbiAgICAgIHJldHVybiBhbGVydCgnTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgb25seSBvbmUgU3RhdHVzIENvZGUhJyk7XG4gICAgaWYgKGNvbnRlbnRDb3VudCA+IDEpXG4gICAgICByZXR1cm4gYWxlcnQoJ01ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIG9ubHkgb25lIENvbnRlbnQgVHlwZSEnKTtcblxuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSBnZXREYXRhKGUudGFyZ2V0KTtcblxuICAgIGNvbnN0IG1ldGhvZCA9IGZvcm1WYWx1ZXNbJ3JlcXVlc3Qtc2VsZWN0b3InXS50b1N0cmluZygpO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gZm9ybVZhbHVlc1ttZXRob2RdLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVxX2JvZHkgPSBmb3JtVmFsdWVzWydSZXF1ZXN0LUJvZHknXTtcbiAgICBjb25zdCBjb250ZW50QXNzZXJ0aW9uID0gZm9ybVZhbHVlc1snQ29udGVudCBUeXBlJ107XG4gICAgY29uc3Qgc3RhdHVzQXNzZXJ0aW9uID0gZm9ybVZhbHVlc1snU3RhdHVzIENvZGUnXTtcbiAgICBjb25zdCByZXNfYm9keSA9IGZvcm1WYWx1ZXNbJ1Jlc3BvbnNlIEJvZHknXTtcblxuICAgIGlmICghY29udGVudEFzc2VydGlvbiAmJiAhc3RhdHVzQXNzZXJ0aW9uICYmICFyZXNfYm9keSlcbiAgICAgIHJldHVybiBhbGVydCgnUGxlYXNlIGFkZCBleHBlY3RlZCByZXNwb25zZSEnKTtcblxuICAgIHR5cGUgcmVxdWVzdEJvZHlUeXBlID0ge1xuICAgICAgaGVhZGVyOiB7XG4gICAgICAgIG1ldGhvZD86IHN0cmluZztcbiAgICAgICAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gICAgICAgIHJlcV9ib2R5Pzogc3RyaW5nO1xuICAgICAgfTtcbiAgICAgIGFzc2VydGlvbnM6IHt9W107XG4gICAgfTtcblxuICAgIGNvbnN0IHJlcXVlc3RCb2R5OiByZXF1ZXN0Qm9keVR5cGUgPSB7IGhlYWRlcjoge30sIGFzc2VydGlvbnM6IFtdIH07XG4gICAgaWYgKG1ldGhvZCkgcmVxdWVzdEJvZHkuaGVhZGVyWydtZXRob2QnXSA9IG1ldGhvZDtcbiAgICBpZiAoZW5kcG9pbnQpIHJlcXVlc3RCb2R5LmhlYWRlclsnZW5kcG9pbnQnXSA9IGVuZHBvaW50O1xuICAgIGlmIChyZXFfYm9keSkgcmVxdWVzdEJvZHkuaGVhZGVyWydyZXFfYm9keSddID0gcmVxX2JvZHkudG9TdHJpbmcoKTtcbiAgICBpZiAoY29udGVudEFzc2VydGlvbilcbiAgICAgIHJlcXVlc3RCb2R5LmFzc2VydGlvbnMucHVzaCh7IGNvbnRlbnQ6IGNvbnRlbnRBc3NlcnRpb24udG9TdHJpbmcoKSB9KTtcbiAgICBpZiAoc3RhdHVzQXNzZXJ0aW9uKVxuICAgICAgcmVxdWVzdEJvZHkuYXNzZXJ0aW9ucy5wdXNoKHsgc3RhdHVzOiBzdGF0dXNBc3NlcnRpb24udG9TdHJpbmcoKSB9KTtcbiAgICBpZiAocmVzX2JvZHkpXG4gICAgICByZXF1ZXN0Qm9keS5hc3NlcnRpb25zLnB1c2goeyByZXNfYm9keTogcmVzX2JvZHkudG9TdHJpbmcoKSB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdCgnL2FwaS90ZXN0cycsIHJlcXVlc3RCb2R5KTtcbiAgICBkaXNwYXRjaChzZXRDb2RlT3V0cHV0KHJlc3BvbnNlLmRhdGEpKTtcblxuICAgIHJldHVybjtcbiAgfTtcbiAgY29uc3QgaGFuZGxlUmVxdWVzdENoYW5nZSA9IChlOiBTZWxlY3RDaGFuZ2VFdmVudDxzdHJpbmc+KSA9PiB7XG4gICAgZGlzcGF0Y2goc2V0UmVxdWVzdFR5cGUoZS50YXJnZXQudmFsdWUpKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVBZGQgPSAoKSA9PiB7XG4gICAgZGlzcGF0Y2goYWRkQXNzZXJ0aW9uKCkpO1xuICAgIGRpc3BhdGNoKHNldEVycm9yTXNnKCkpO1xuICB9O1xuXG4gIGNvbnN0IG1lbnVJdGVtczogSlNYLkVsZW1lbnRbXSA9IFtdO1xuICBjb25zdCBtZW51T3B0aW9ucyA9IFsnR2V0JywgJ1Bvc3QnLCAnUGF0Y2gnLCAnRGVsZXRlJ107XG4gIGZvciAoY29uc3Qgb3B0aW9uIG9mIG1lbnVPcHRpb25zKSB7XG4gICAgbWVudUl0ZW1zLnB1c2goXG4gICAgICA8TWVudUl0ZW0ga2V5PXtvcHRpb259IHZhbHVlPXtvcHRpb259PlxuICAgICAgICB7b3B0aW9ufVxuICAgICAgPC9NZW51SXRlbT5cbiAgICApO1xuICB9XG5cblxuICByZXR1cm4gKFxuICAgIDxmb3JtIGlkPSd0ZXN0LWdlbmVyYXRvci1mb3JtJyBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cbiAgICAgIDxCb3hcbiAgICAgICAgY2xhc3NOYW1lPSd0ZXN0LWdlbi1oZWFkZXInXG4gICAgICA+XG4gICAgICAgIDxGb3JtQ29udHJvbD5cbiAgICAgICAgICA8SW5wdXRMYWJlbCBpZD0ncmVxdWVzdFNlbGVjdG9yJz5SZXF1ZXN0IFR5cGU8L0lucHV0TGFiZWw+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1kaXNwbGF5XCJcbiAgICAgICAgICAgIG5hbWU9J3JlcXVlc3Qtc2VsZWN0b3InXG4gICAgICAgICAgICBpZD0ncmVxdWVzdC1zZWxlY3RvcidcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPSdyZXF1ZXN0LXNlbGVjdG9yJ1xuICAgICAgICAgICAgbGFiZWw9J1JlcXVlc3QgVHlwZSdcbiAgICAgICAgICAgIHZhbHVlPXtyZXF1ZXN0VHlwZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVSZXF1ZXN0Q2hhbmdlfVxuICAgICAgICAgICAgc3g9e3sgaGVpZ2h0OiA0MCAsIHdpZHRoOiAnMTAwcHgnIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge21lbnVJdGVtc31cbiAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgPC9Gb3JtQ29udHJvbD5cbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZGlzcGxheVwiXG4gICAgICAgICAgbGFiZWw9J0VuZHBvaW50J1xuICAgICAgICAgIGRhdGEtdGVzdGlkPXtyZXF1ZXN0VHlwZX1cbiAgICAgICAgICBpZD0nZW5kcG9pbnQnXG4gICAgICAgICAgbmFtZT17cmVxdWVzdFR5cGV9XG4gICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAvPlxuICAgICAgICA8UmVxdWVzdEJvZHkgc2hvd0ZpZWxkPXtyZXF1ZXN0VHlwZSA9PT0gJ0dldCcgPyBmYWxzZSA6IHRydWV9IC8+XG4gICAgICA8L0JveD5cbiAgICAgIDxCb3hcbiAgICAgICAgaWQ9J2Fzc2VydGlvbi1saXN0J1xuICAgICAgICBzeD17e1xuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgZ2FwOiAnMTBweCcsXG4gICAgICAgICAgbWFyZ2luQm90dG9tOiAnMTBweCcsXG4gICAgICAgICAgbWFyZ2luVG9wOiAnMTBweCdcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2Fzc2VydGlvbkxpc3R9XG4gICAgICAgIDxCb3ggc3g9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcxMHB4JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgPFR5cG9ncmFwaHk+QWRkIEV4cGVjdGVkIFJlc3BvbnNlOjwvVHlwb2dyYXBoeT5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBpZD0nYWRkLWFzc2VydGlvbidcbiAgICAgICAgICAgIG5hbWU9J2FkZC1hc3NlcnRpb24nXG4gICAgICAgICAgICB2YXJpYW50PSdjb250YWluZWQnXG4gICAgICAgICAgICBjb2xvcj0ncHJpbWFyeSdcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUFkZH1cbiAgICAgICAgICAgIHN4PXt7IGp1c3RpZnlTZWxmOiAnY2VudGVyJywgYWxpZ25TZWxmOiAnY2VudGVyJywgaGVpZ2h0OiAyNSwgd2lkdGg6IDIzLCBtaW5XaWR0aDogMjMgfX1cbiAgICAgICAgICAgIGRpc2FibGVFbGV2YXRpb25cbiAgICAgICAgICA+XG4gICAgICAgICAgICArXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvQm94PlxuICAgICAgPC9Cb3g+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIHR5cGU9J3N1Ym1pdCdcbiAgICAgICAgdmFyaWFudD0nY29udGFpbmVkJ1xuICAgICAgICBzeD17eyBtYXJnaW5Ub3A6ICczMHB4JywgaGVpZ2h0OiA0MCB9fVxuICAgICAgICBkaXNhYmxlRWxldmF0aW9uXG4gICAgICA+XG4gICAgICAgIEdlbmVyYXRlIFRlc3QgQ29kZVxuICAgICAgPC9CdXR0b24+XG4gICAgICB7IChpc0xvZ2dlZEluKSAmJiA8UHJvamVjdERyb3Bkb3duIC8+IH1cbiAgICA8L2Zvcm0+XG4gICk7XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGNyZWF0ZVNsaWNlLCBjcmVhdGVBc3luY1RodW5rLCBQYXlsb2FkQWN0aW9uIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5pbXBvcnQge1xuICBib2lsZXJwbGF0ZV9zdGFydCxcbiAgQk9JTEVSUExBVEVfRU5ELFxuICBERUZBVUxUX0NMSVBCT0FSRCxcbiAgSU5ERU5ULFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgY2xpcGJvYXJkU3RhdGVUeXBlLCBwb3N0U25pcHBldFBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogY2xpcGJvYXJkU3RhdGVUeXBlID0ge1xuICBzZXJ2ZXI6ICcnLFxuICBjb2RlU25pcHBldHM6IFtdLFxuICBjb2RlRGlzcGxheTogREVGQVVMVF9DTElQQk9BUkQsXG59O1xuXG5jb25zdCB1cGRhdGVDb2RlRGlzcGxheSA9IChzdGF0ZTogY2xpcGJvYXJkU3RhdGVUeXBlKSA9PiB7XG4gIGlmIChzdGF0ZS5jb2RlU25pcHBldHMubGVuZ3RoKSB7XG4gICAgbGV0IGNvZGVTbmlwcyA9IHN0YXRlLmNvZGVTbmlwcGV0cztcbiAgICBjb2RlU25pcHMgPSBjb2RlU25pcHMubWFwKChzbmlwcGV0KSA9PlxuICAgICAgc25pcHBldFxuICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgIC5tYXAoKGxpbmUpID0+IElOREVOVCArIGxpbmUpXG4gICAgICAgIC5qb2luKCdcXG4nKVxuICAgICk7XG5cbiAgICBjb25zdCBjb2RlQXJyID0gW1xuICAgICAgLi4uYm9pbGVycGxhdGVfc3RhcnQoc3RhdGUuc2VydmVyKSxcbiAgICAgIC4uLmNvZGVTbmlwcy5tYXAoKHNuaXBwZXQpID0+IHNuaXBwZXQgKyAnXFxuJyksXG4gICAgICBCT0lMRVJQTEFURV9FTkQsXG4gICAgXTtcbiAgICBzdGF0ZS5jb2RlRGlzcGxheSA9IGNvZGVBcnIuam9pbignJyk7XG4gIH0gZWxzZSBpZiAoc3RhdGUuY29kZVNuaXBwZXRzLmxlbmd0aCA9PT0gMClcbiAgICBzdGF0ZS5jb2RlRGlzcGxheSA9IERFRkFVTFRfQ0xJUEJPQVJEO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsaXBib2FyZFNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICBuYW1lOiAnY2xpcGJvYXJkJyxcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge1xuICAgIGFwcGVuZFRvQ2xpcGJvYXJkOiAoXG4gICAgICBzdGF0ZTogY2xpcGJvYXJkU3RhdGVUeXBlLFxuICAgICAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPHN0cmluZz5cbiAgICApID0+IHtcbiAgICAgIHN0YXRlLmNvZGVTbmlwcGV0cy5wdXNoKGFjdGlvbi5wYXlsb2FkKTtcbiAgICAgIHVwZGF0ZUNvZGVEaXNwbGF5KHN0YXRlKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2NvZGVTbmlwcGV0cycsIEpTT04uc3RyaW5naWZ5KHN0YXRlLmNvZGVTbmlwcGV0cykpO1xuICAgIH0sXG4gICAgY29weUNsaXBib2FyZDogKHN0YXRlOiBjbGlwYm9hcmRTdGF0ZVR5cGUpID0+IHtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHN0YXRlLmNvZGVEaXNwbGF5KTtcbiAgICB9LFxuICAgIHNldFNlcnZlcjogKHN0YXRlOiBjbGlwYm9hcmRTdGF0ZVR5cGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxzdHJpbmc+KSA9PiB7XG4gICAgICBzdGF0ZS5zZXJ2ZXIgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHVwZGF0ZUNvZGVEaXNwbGF5KHN0YXRlKTtcbiAgICB9LFxuICAgIGNsZWFyQ2xpcGJvYXJkU3RhdGU6IChzdGF0ZTogY2xpcGJvYXJkU3RhdGVUeXBlKSA9PiB7XG4gICAgICBzdGF0ZS5zZXJ2ZXIgPSAnJztcbiAgICAgIHN0YXRlLmNvZGVTbmlwcGV0cyA9IFtdO1xuICAgICAgc3RhdGUuY29kZURpc3BsYXkgPSBERUZBVUxUX0NMSVBCT0FSRDtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NvZGVTbmlwcGV0cycpO1xuICAgIH0sXG4gICAgc2V0U25pcHBldHM6IChzdGF0ZTogY2xpcGJvYXJkU3RhdGVUeXBlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248c3RyaW5nW10+KSA9PiB7XG4gICAgICBzdGF0ZS5jb2RlU25pcHBldHMgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHVwZGF0ZUNvZGVEaXNwbGF5KHN0YXRlKTtcbiAgICB9XG4gIH0sXG4gIGV4dHJhUmVkdWNlcnM6IChidWlsZGVyKSA9PiB7XG4gICAgYnVpbGRlclxuICAgICAgLmFkZENhc2UoXG4gICAgICAgIGdldFNuaXBwZXRzLmZ1bGZpbGxlZCxcbiAgICAgICAgKHN0YXRlOiBjbGlwYm9hcmRTdGF0ZVR5cGUsIGFjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgc3RhdGUuY29kZVNuaXBwZXRzID0gYWN0aW9uLnBheWxvYWQuZGF0YTtcblxuICAgICAgICAgIHVwZGF0ZUNvZGVEaXNwbGF5KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfSxcbn0pO1xuXG5jb25zdCB0aHVua3MgPSB7XG4gIHBvc3RTbmlwcGV0OiBjcmVhdGVBc3luY1RodW5rKFxuICAgICdjbGlwYm9hcmRTbGljZS9wb3N0U25pcHBldCcsXG4gICAgYXN5bmMgKHBheWxvYWQ6IHBvc3RTbmlwcGV0UGF5bG9hZCkgPT4ge1xuICAgICAgY29uc3QgeyBwcm9qZWN0SWQsIGNvZGVPdXRwdXQgfSA9IHBheWxvYWQ7XG4gICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoYC9hcGkvY2xpcGJvYXJkLyR7cHJvamVjdElkfWAsIHtcbiAgICAgICAgICBjb2RlX3NuaXBwZXRzOiBjb2RlT3V0cHV0LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjbGlwYm9hcmRTbGljZS9wb3N0U25pcHBldCcsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICksXG4gIGdldFNuaXBwZXRzOiBjcmVhdGVBc3luY1RodW5rKFxuICAgICdjbGlwYm9hcmRTbGljZS9nZXRTbmlwcGV0cycsXG4gICAgYXN5bmMgKHByb2plY3RJZDogbnVtYmVyKSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChgL2FwaS9jbGlwYm9hcmQvJHtwcm9qZWN0SWR9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZygnY2xpcGJvYXJkU2xpY2UvZ2V0U25pcHBldHMnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICApLFxufTtcblxuZXhwb3J0IGNvbnN0IHtcbiAgYXBwZW5kVG9DbGlwYm9hcmQsXG4gIGNvcHlDbGlwYm9hcmQsXG4gIHNldFNlcnZlcixcbiAgY2xlYXJDbGlwYm9hcmRTdGF0ZSxcbiAgc2V0U25pcHBldHMsXG59ID0gY2xpcGJvYXJkU2xpY2UuYWN0aW9ucztcblxuZXhwb3J0IGNvbnN0IHsgcG9zdFNuaXBwZXQsIGdldFNuaXBwZXRzIH0gPSB0aHVua3M7XG5cbmV4cG9ydCBkZWZhdWx0IGNsaXBib2FyZFNsaWNlLnJlZHVjZXI7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyIsImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcykge1xuICAgIHJldHVybiB1YURhdGEuYnJhbmRzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uYnJhbmQgKyBcIi9cIiArIGl0ZW0udmVyc2lvbjtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH1cblxuICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbn0iLCJpbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNMYXlvdXRWaWV3cG9ydCgpIHtcbiAgcmV0dXJuICEvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xufSIsImltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3kpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpbmNsdWRlU2NhbGUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHNjYWxlWCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwID8gcm91bmQoY2xpZW50UmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDEgOiAxO1xuICAgIHNjYWxlWSA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCA/IHJvdW5kKGNsaWVudFJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEgOiAxO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRXaW5kb3coZWxlbWVudCkgOiB3aW5kb3csXG4gICAgICB2aXN1YWxWaWV3cG9ydCA9IF9yZWYudmlzdWFsVmlld3BvcnQ7XG5cbiAgdmFyIGFkZFZpc3VhbE9mZnNldHMgPSAhaXNMYXlvdXRWaWV3cG9ydCgpICYmIGlzRml4ZWRTdHJhdGVneTtcbiAgdmFyIHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0IDogMCkpIC8gc2NhbGVYO1xuICB2YXIgeSA9IChjbGllbnRSZWN0LnRvcCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wIDogMCkpIC8gc2NhbGVZO1xuICB2YXIgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGVYO1xuICB2YXIgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZVk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICBsZWZ0OiB4LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsImltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tIFwiLi9nZXRIVE1MRWxlbWVudFNjcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlKSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7IC8vIFJldHVybnMgdGhlIGxheW91dCByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC4gTGF5b3V0XG4vLyBtZWFucyBpdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRyYW5zZm9ybXMuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExheW91dFJlY3QoZWxlbWVudCkge1xuICB2YXIgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTsgLy8gVXNlIHRoZSBjbGllbnRSZWN0IHNpemVzIGlmIGl0J3Mgbm90IGJlZW4gdHJhbnNmb3JtZWQuXG4gIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTIyM1xuXG4gIHZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC53aWR0aCAtIHdpZHRoKSA8PSAxKSB7XG4gICAgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3QuaGVpZ2h0IC0gaGVpZ2h0KSA8PSAxKSB7XG4gICAgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB5OiBlbGVtZW50Lm9mZnNldFRvcCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsImltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSBcIi4vZ2V0U2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFNjcm9sbFBhcmVudHMoZWxlbWVudCwgbGlzdCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSAoKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5KTtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gW3dpbl0uY29uY2F0KHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNTY3JvbGxQYXJlbnQoc2Nyb2xsUGFyZW50KSA/IHNjcm9sbFBhcmVudCA6IFtdKSA6IHNjcm9sbFBhcmVudDtcbiAgdmFyIHVwZGF0ZWRMaXN0ID0gbGlzdC5jb25jYXQodGFyZ2V0KTtcbiAgcmV0dXJuIGlzQm9keSA/IHVwZGF0ZWRMaXN0IDogLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IGlzQm9keSB0ZWxscyB1cyB0YXJnZXQgd2lsbCBiZSBhbiBIVE1MRWxlbWVudCBoZXJlXG4gIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvb3JkZXJNb2RpZmllcnMuanNcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi91dGlscy9kZWJvdW5jZS5qc1wiO1xuaW1wb3J0IHZhbGlkYXRlTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL3ZhbGlkYXRlTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgdW5pcXVlQnkgZnJvbSBcIi4vdXRpbHMvdW5pcXVlQnkuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBtZXJnZUJ5TmFtZSBmcm9tIFwiLi91dGlscy9tZXJnZUJ5TmFtZS5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuL2VudW1zLmpzXCI7XG52YXIgSU5WQUxJRF9FTEVNRU5UX0VSUk9SID0gJ1BvcHBlcjogSW52YWxpZCByZWZlcmVuY2Ugb3IgcG9wcGVyIGFyZ3VtZW50IHByb3ZpZGVkLiBUaGV5IG11c3QgYmUgZWl0aGVyIGEgRE9NIGVsZW1lbnQgb3IgdmlydHVhbCBlbGVtZW50Lic7XG52YXIgSU5GSU5JVEVfTE9PUF9FUlJPUiA9ICdQb3BwZXI6IEFuIGluZmluaXRlIGxvb3AgaW4gdGhlIG1vZGlmaWVycyBjeWNsZSBoYXMgYmVlbiBkZXRlY3RlZCEgVGhlIGN5Y2xlIGhhcyBiZWVuIGludGVycnVwdGVkIHRvIHByZXZlbnQgYSBicm93c2VyIGNyYXNoLic7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJ1xufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAhYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zKSB7XG4gIGlmIChnZW5lcmF0b3JPcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBnZW5lcmF0b3JPcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX2dlbmVyYXRvck9wdGlvbnMgPSBnZW5lcmF0b3JPcHRpb25zLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE1vZGlmaWVycyxcbiAgICAgIGRlZmF1bHRNb2RpZmllcnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPT09IHZvaWQgMCA/IFtdIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuICAgICAgZGVmYXVsdE9wdGlvbnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID09PSB2b2lkIDAgPyBERUZBVUxUX09QVElPTlMgOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICBvcmRlcmVkTW9kaWZpZXJzOiBbXSxcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgZGVmYXVsdE9wdGlvbnMpLFxuICAgICAgbW9kaWZpZXJzRGF0YToge30sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyOiBwb3BwZXJcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIHN0eWxlczoge31cbiAgICB9O1xuICAgIHZhciBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgdmFyIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdmFyIGluc3RhbmNlID0ge1xuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gc2V0T3B0aW9ucyhzZXRPcHRpb25zQWN0aW9uKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHNldE9wdGlvbnNBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBzZXRPcHRpb25zQWN0aW9uKHN0YXRlLm9wdGlvbnMpIDogc2V0T3B0aW9uc0FjdGlvbjtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBzdGF0ZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIHN0YXRlLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogaXNFbGVtZW50KHJlZmVyZW5jZSkgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UpIDogcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50ID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlLmNvbnRleHRFbGVtZW50KSA6IFtdLFxuICAgICAgICAgIHBvcHBlcjogbGlzdFNjcm9sbFBhcmVudHMocG9wcGVyKVxuICAgICAgICB9OyAvLyBPcmRlcnMgdGhlIG1vZGlmaWVycyBiYXNlZCBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGBwaGFzZWBcbiAgICAgICAgLy8gcHJvcGVydGllc1xuXG4gICAgICAgIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJNb2RpZmllcnMobWVyZ2VCeU5hbWUoW10uY29uY2F0KGRlZmF1bHRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSkpOyAvLyBTdHJpcCBvdXQgZGlzYWJsZWQgbW9kaWZpZXJzXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uZW5hYmxlZDtcbiAgICAgICAgfSk7IC8vIFZhbGlkYXRlIHRoZSBwcm92aWRlZCBtb2RpZmllcnMgc28gdGhhdCB0aGUgY29uc3VtZXIgd2lsbCBnZXQgd2FybmVkXG4gICAgICAgIC8vIGlmIG9uZSBvZiB0aGUgbW9kaWZpZXJzIGlzIGludmFsaWQgZm9yIGFueSByZWFzb25cblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgdmFyIG1vZGlmaWVycyA9IHVuaXF1ZUJ5KFtdLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycyksIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IF9yZWYubmFtZTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhbGlkYXRlTW9kaWZpZXJzKG1vZGlmaWVycyk7XG5cbiAgICAgICAgICBpZiAoZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5vcHRpb25zLnBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICAgICAgICAgIHZhciBmbGlwTW9kaWZpZXIgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZpbmQoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgICAgIHZhciBuYW1lID0gX3JlZjIubmFtZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5hbWUgPT09ICdmbGlwJztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIWZsaXBNb2RpZmllcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFsnUG9wcGVyOiBcImF1dG9cIiBwbGFjZW1lbnRzIHJlcXVpcmUgdGhlIFwiZmxpcFwiIG1vZGlmaWVyIGJlJywgJ3ByZXNlbnQgYW5kIGVuYWJsZWQgdG8gd29yay4nXS5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocG9wcGVyKSxcbiAgICAgICAgICAgICAgbWFyZ2luVG9wID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luVG9wLFxuICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IF9nZXRDb21wdXRlZFN0eWxlLm1hcmdpblJpZ2h0LFxuICAgICAgICAgICAgICBtYXJnaW5Cb3R0b20gPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5Cb3R0b20sXG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5MZWZ0OyAvLyBXZSBubyBsb25nZXIgdGFrZSBpbnRvIGFjY291bnQgYG1hcmdpbnNgIG9uIHRoZSBwb3BwZXIsIGFuZCBpdCBjYW5cbiAgICAgICAgICAvLyBjYXVzZSBidWdzIHdpdGggcG9zaXRpb25pbmcsIHNvIHdlJ2xsIHdhcm4gdGhlIGNvbnN1bWVyXG5cblxuICAgICAgICAgIGlmIChbbWFyZ2luVG9wLCBtYXJnaW5SaWdodCwgbWFyZ2luQm90dG9tLCBtYXJnaW5MZWZ0XS5zb21lKGZ1bmN0aW9uIChtYXJnaW4pIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG1hcmdpbik7XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihbJ1BvcHBlcjogQ1NTIFwibWFyZ2luXCIgc3R5bGVzIGNhbm5vdCBiZSB1c2VkIHRvIGFwcGx5IHBhZGRpbmcnLCAnYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQgb3IgYm91bmRhcnkuJywgJ1RvIHJlcGxpY2F0ZSBtYXJnaW4sIHVzZSB0aGUgYG9mZnNldGAgbW9kaWZpZXIsIGFzIHdlbGwgYXMnLCAndGhlIGBwYWRkaW5nYCBvcHRpb24gaW4gdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIGFuZCBgZmxpcGAnLCAnbW9kaWZpZXJzLiddLmpvaW4oJyAnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKElOVkFMSURfRUxFTUVOVF9FUlJPUik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlciByZWN0cyB0byBiZSByZWFkIGJ5IG1vZGlmaWVyc1xuXG5cbiAgICAgICAgc3RhdGUucmVjdHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBnZXRDb21wb3NpdGVSZWN0KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCcpLFxuICAgICAgICAgIHBvcHBlcjogZ2V0TGF5b3V0UmVjdChwb3BwZXIpXG4gICAgICAgIH07IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZS4gVGhlXG4gICAgICAgIC8vIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRoZSBgZmxpcGAgbW9kaWZpZXIgY2hhbmdpbmcgdGhlXG4gICAgICAgIC8vIHBsYWNlbWVudCwgd2hpY2ggdGhlbiBuZWVkcyB0byByZS1ydW4gYWxsIHRoZSBtb2RpZmllcnMsIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGxvZ2ljIHdhcyBwcmV2aW91c2x5IHJhbiBmb3IgdGhlIHByZXZpb3VzIHBsYWNlbWVudCBhbmQgaXMgdGhlcmVmb3JlXG4gICAgICAgIC8vIHN0YWxlL2luY29ycmVjdFxuXG4gICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50OyAvLyBPbiBlYWNoIHVwZGF0ZSBjeWNsZSwgdGhlIGBtb2RpZmllcnNEYXRhYCBwcm9wZXJ0eSBmb3IgZWFjaCBtb2RpZmllclxuICAgICAgICAvLyBpcyBmaWxsZWQgd2l0aCB0aGUgaW5pdGlhbCBkYXRhIHNwZWNpZmllZCBieSB0aGUgbW9kaWZpZXIuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gaXQgZG9lc24ndCBwZXJzaXN0IGFuZCBpcyBmcmVzaCBvbiBlYWNoIHVwZGF0ZS5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHBlcnNpc3RlbnQgZGF0YSwgdXNlIGAke25hbWV9I3BlcnNpc3RlbnRgXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5tb2RpZmllcnNEYXRhW21vZGlmaWVyLm5hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kaWZpZXIuZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX19kZWJ1Z19sb29wc19fID0gMDtcblxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBfX2RlYnVnX2xvb3BzX18gKz0gMTtcblxuICAgICAgICAgICAgaWYgKF9fZGVidWdfbG9vcHNfXyA+IDEwMCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKElORklOSVRFX0xPT1BfRVJST1IpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZSA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnNbaW5kZXhdLFxuICAgICAgICAgICAgICBmbiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5mbixcbiAgICAgICAgICAgICAgX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5vcHRpb25zLFxuICAgICAgICAgICAgICBfb3B0aW9ucyA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPT09IHZvaWQgMCA/IHt9IDogX3N0YXRlJG9yZGVyZWRNb2RpZmllMixcbiAgICAgICAgICAgICAgbmFtZSA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5uYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RhdGUgPSBmbih7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgb3B0aW9uczogX29wdGlvbnMsXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZVxuICAgICAgICAgICAgfSkgfHwgc3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gQXN5bmMgYW5kIG9wdGltaXN0aWNhbGx5IG9wdGltaXplZCB1cGRhdGUg4oCTIGl0IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmXG4gICAgICAvLyBub3QgbmVjZXNzYXJ5IChkZWJvdW5jZWQgdG8gcnVuIGF0IG1vc3Qgb25jZS1wZXItdGljaylcbiAgICAgIHVwZGF0ZTogZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIHJlc29sdmUoc3RhdGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihJTlZBTElEX0VMRU1FTlRfRVJST1IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciBuYW1lID0gX3JlZjMubmFtZSxcbiAgICAgICAgICAgIF9yZWYzJG9wdGlvbnMgPSBfcmVmMy5vcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucyA9IF9yZWYzJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZjMkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYzLmVmZmVjdDtcblxuICAgICAgICBpZiAodHlwZW9mIGVmZmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjbGVhbnVwRm4gPSBlZmZlY3Qoe1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhciBub29wRm4gPSBmdW5jdGlvbiBub29wRm4oKSB7fTtcblxuICAgICAgICAgIGVmZmVjdENsZWFudXBGbnMucHVzaChjbGVhbnVwRm4gfHwgbm9vcEZuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9KTtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59XG5leHBvcnQgdmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdyB9OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgc3RhcnQsIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZU9mZnNldHMoX3JlZikge1xuICB2YXIgcmVmZXJlbmNlID0gX3JlZi5yZWZlcmVuY2UsXG4gICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50ID8gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudCA/IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBlbGVtZW50LndpZHRoIC8gMjtcbiAgdmFyIGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZWxlbWVudC5oZWlnaHQgLyAyO1xuICB2YXIgb2Zmc2V0cztcblxuICBzd2l0Y2ggKGJhc2VQbGFjZW1lbnQpIHtcbiAgICBjYXNlIHRvcDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZWxlbWVudC5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgYm90dG9tOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHJpZ2h0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgbGVmdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZWxlbWVudC53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuXG4gIHZhciBtYWluQXhpcyA9IGJhc2VQbGFjZW1lbnQgPyBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCkgOiBudWxsO1xuXG4gIGlmIChtYWluQXhpcyAhPSBudWxsKSB7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhdGlvbikge1xuICAgICAgY2FzZSBzdGFydDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSAtIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgZW5kOlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdICsgKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn0iLCJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIHdpbiA9IHdpbmRvdztcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdmFyIHRyYW5zaXRpb25Qcm9wZXJ0eSA9IGdldENvbXB1dGVkU3R5bGUoc3RhdGUuZWxlbWVudHMucG9wcGVyKS50cmFuc2l0aW9uUHJvcGVydHkgfHwgJyc7XG5cbiAgICBpZiAoYWRhcHRpdmUgJiYgWyd0cmFuc2Zvcm0nLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10uc29tZShmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiB0cmFuc2l0aW9uUHJvcGVydHkuaW5kZXhPZihwcm9wZXJ0eSkgPj0gMDtcbiAgICB9KSkge1xuICAgICAgY29uc29sZS53YXJuKFsnUG9wcGVyOiBEZXRlY3RlZCBDU1MgdHJhbnNpdGlvbnMgb24gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcnLCAnQ1NTIHByb3BlcnRpZXM6IFwidHJhbnNmb3JtXCIsIFwidG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIuJywgJ1xcblxcbicsICdEaXNhYmxlIHRoZSBcImNvbXB1dGVTdHlsZXNcIiBtb2RpZmllclxcJ3MgYGFkYXB0aXZlYCBvcHRpb24gdG8gYWxsb3cnLCAnZm9yIHNtb290aCB0cmFuc2l0aW9ucywgb3IgcmVtb3ZlIHRoZXNlIHByb3BlcnRpZXMgZnJvbSB0aGUgQ1NTJywgJ3RyYW5zaXRpb24gZGVjbGFyYXRpb24gb24gdGhlIHBvcHBlciBlbGVtZW50IGlmIG9ubHkgdHJhbnNpdGlvbmluZycsICdvcGFjaXR5IG9yIGJhY2tncm91bmQtY29sb3IgZm9yIGV4YW1wbGUuJywgJ1xcblxcbicsICdXZSByZWNvbW1lbmQgdXNpbmcgdGhlIHBvcHBlciBlbGVtZW50IGFzIGEgd3JhcHBlciBhcm91bmQgYW4gaW5uZXInLCAnZWxlbWVudCB0aGF0IGNhbiBoYXZlIGFueSBDU1MgcHJvcGVydHkgdHJhbnNpdGlvbmVkIGZvciBhbmltYXRpb25zLiddLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuXG5cbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZTtcbiAgdmFyIGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9LFxuICAgIGFycm93OiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fVxuICB9O1xuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICAgIHZhciBzdHlsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBzdGF0ZS5zdHlsZXNbbmFtZV0gOiBpbml0aWFsU3R5bGVzW25hbWVdKTsgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cblxuICAgICAgdmFyIHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAoc3R5bGUsIHByb3BlcnR5KSB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59OyIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydQb3BwZXI6IFRoZSBgYWxsb3dlZEF1dG9QbGFjZW1lbnRzYCBvcHRpb24gZGlkIG5vdCBhbGxvdyBhbnknLCAncGxhY2VtZW50cy4gRW5zdXJlIHRoZSBgcGxhY2VtZW50YCBvcHRpb24gbWF0Y2hlcyB0aGUgdmFyaWF0aW9uJywgJ29mIHRoZSBhbGxvd2VkIHBsYWNlbWVudHMuJywgJ0ZvciBleGFtcGxlLCBcImF1dG9cIiBjYW5ub3QgYmUgdXNlZCB0byBhbGxvdyBcImJvdHRvbS1zdGFydFwiLicsICdVc2UgXCJhdXRvLXN0YXJ0XCIgaW5zdGVhZC4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSIsImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBbHRBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn0iLCJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyIsImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoYXJyb3dFbGVtZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIGVsZW1lbnQgbXVzdCBiZSBhbiBIVE1MRWxlbWVudCAobm90IGFuIFNWR0VsZW1lbnQpLicsICdUbyB1c2UgYW4gU1ZHIGFycm93LCB3cmFwIGl0IGluIGFuIEhUTUxFbGVtZW50IHRoYXQgd2lsbCBiZSB1c2VkIGFzJywgJ3RoZSBhcnJvdy4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIG1vZGlmaWVyXFwncyBgZWxlbWVudGAgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBwb3BwZXInLCAnZWxlbWVudC4nXS5qb2luKCcgJykpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcHBlclVuc3R5bGVkVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlQb3BwZXJVbnN0eWxlZCcsIHNsb3QpO1xufVxuY29uc3QgcG9wcGVyVW5zdHlsZWRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUG9wcGVyVW5zdHlsZWQnLCBbJ3Jvb3QnXSk7XG5leHBvcnQgZGVmYXVsdCBwb3BwZXJVbnN0eWxlZENsYXNzZXM7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFuY2hvckVsXCIsIFwiY2hpbGRyZW5cIiwgXCJjb21wb25lbnRcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGlyZWN0aW9uXCIsIFwiZGlzYWJsZVBvcnRhbFwiLCBcIm1vZGlmaWVyc1wiLCBcIm9wZW5cIiwgXCJvd25lclN0YXRlXCIsIFwicGxhY2VtZW50XCIsIFwicG9wcGVyT3B0aW9uc1wiLCBcInBvcHBlclJlZlwiLCBcIlRyYW5zaXRpb25Qcm9wc1wiXSxcbiAgICAgIF9leGNsdWRlZDIgPSBbXCJhbmNob3JFbFwiLCBcImNoaWxkcmVuXCIsIFwiY29udGFpbmVyXCIsIFwiZGlyZWN0aW9uXCIsIFwiZGlzYWJsZVBvcnRhbFwiLCBcImtlZXBNb3VudGVkXCIsIFwibW9kaWZpZXJzXCIsIFwib3BlblwiLCBcInBsYWNlbWVudFwiLCBcInBvcHBlck9wdGlvbnNcIiwgXCJwb3BwZXJSZWZcIiwgXCJzdHlsZVwiLCBcInRyYW5zaXRpb25cIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjaGFpblByb3BUeXBlcywgSFRNTEVsZW1lbnRUeXBlLCByZWZUeXBlLCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQsIHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IGFzIHVzZUVuaGFuY2VkRWZmZWN0LCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnLi4vY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IFBvcnRhbCBmcm9tICcuLi9Qb3J0YWwnO1xuaW1wb3J0IHsgZ2V0UG9wcGVyVW5zdHlsZWRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BvcHBlclVuc3R5bGVkQ2xhc3Nlcyc7XG5pbXBvcnQgeyB1c2VTbG90UHJvcHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBmbGlwUGxhY2VtZW50KHBsYWNlbWVudCwgZGlyZWN0aW9uKSB7XG4gIGlmIChkaXJlY3Rpb24gPT09ICdsdHInKSB7XG4gICAgcmV0dXJuIHBsYWNlbWVudDtcbiAgfVxuXG4gIHN3aXRjaCAocGxhY2VtZW50KSB7XG4gICAgY2FzZSAnYm90dG9tLWVuZCc6XG4gICAgICByZXR1cm4gJ2JvdHRvbS1zdGFydCc7XG5cbiAgICBjYXNlICdib3R0b20tc3RhcnQnOlxuICAgICAgcmV0dXJuICdib3R0b20tZW5kJztcblxuICAgIGNhc2UgJ3RvcC1lbmQnOlxuICAgICAgcmV0dXJuICd0b3Atc3RhcnQnO1xuXG4gICAgY2FzZSAndG9wLXN0YXJ0JzpcbiAgICAgIHJldHVybiAndG9wLWVuZCc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBsYWNlbWVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBhbmNob3JFbCA9PT0gJ2Z1bmN0aW9uJyA/IGFuY2hvckVsKCkgOiBhbmNob3JFbDtcbn1cblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSAoKSA9PiB7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0UG9wcGVyVW5zdHlsZWRVdGlsaXR5Q2xhc3MsIHt9KTtcbn07XG5cbmNvbnN0IGRlZmF1bHRQb3BwZXJPcHRpb25zID0ge307XG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG5cbmNvbnN0IFBvcHBlclRvb2x0aXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQb3BwZXJUb29sdGlwKHByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWY7XG5cbiAgY29uc3Qge1xuICAgIGFuY2hvckVsLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudCxcbiAgICBjb21wb25lbnRzID0ge30sXG4gICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgZGlyZWN0aW9uLFxuICAgIGRpc2FibGVQb3J0YWwsXG4gICAgbW9kaWZpZXJzLFxuICAgIG9wZW4sXG4gICAgb3duZXJTdGF0ZSxcbiAgICBwbGFjZW1lbnQ6IGluaXRpYWxQbGFjZW1lbnQsXG4gICAgcG9wcGVyT3B0aW9ucyxcbiAgICBwb3BwZXJSZWY6IHBvcHBlclJlZlByb3AsXG4gICAgVHJhbnNpdGlvblByb3BzXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCB0b29sdGlwUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBvd25SZWYgPSB1c2VGb3JrUmVmKHRvb2x0aXBSZWYsIHJlZik7XG4gIGNvbnN0IHBvcHBlclJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUG9wcGVyUmVmID0gdXNlRm9ya1JlZihwb3BwZXJSZWYsIHBvcHBlclJlZlByb3ApO1xuICBjb25zdCBoYW5kbGVQb3BwZXJSZWZSZWYgPSBSZWFjdC51c2VSZWYoaGFuZGxlUG9wcGVyUmVmKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGhhbmRsZVBvcHBlclJlZlJlZi5jdXJyZW50ID0gaGFuZGxlUG9wcGVyUmVmO1xuICB9LCBbaGFuZGxlUG9wcGVyUmVmXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocG9wcGVyUmVmUHJvcCwgKCkgPT4gcG9wcGVyUmVmLmN1cnJlbnQsIFtdKTtcbiAgY29uc3QgcnRsUGxhY2VtZW50ID0gZmxpcFBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50LCBkaXJlY3Rpb24pO1xuICAvKipcbiAgICogcGxhY2VtZW50IGluaXRpYWxpemVkIGZyb20gcHJvcCBidXQgY2FuIGNoYW5nZSBkdXJpbmcgbGlmZXRpbWUgaWYgbW9kaWZpZXJzLmZsaXAuXG4gICAqIG1vZGlmaWVycy5mbGlwIGlzIGVzc2VudGlhbGx5IGEgZmxpcCBmb3IgY29udHJvbGxlZC91bmNvbnRyb2xsZWQgYmVoYXZpb3JcbiAgICovXG5cbiAgY29uc3QgW3BsYWNlbWVudCwgc2V0UGxhY2VtZW50XSA9IFJlYWN0LnVzZVN0YXRlKHJ0bFBsYWNlbWVudCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBvcHBlclJlZi5jdXJyZW50KSB7XG4gICAgICBwb3BwZXJSZWYuY3VycmVudC5mb3JjZVVwZGF0ZSgpO1xuICAgIH1cbiAgfSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWFuY2hvckVsIHx8ICFvcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVBvcHBlclVwZGF0ZSA9IGRhdGEgPT4ge1xuICAgICAgc2V0UGxhY2VtZW50KGRhdGEucGxhY2VtZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChhbmNob3JFbCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHJlc29sdmVkQW5jaG9yRWwgJiYgcmVzb2x2ZWRBbmNob3JFbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICBjb25zdCBib3ggPSByZXNvbHZlZEFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmIGJveC50b3AgPT09IDAgJiYgYm94LmxlZnQgPT09IDAgJiYgYm94LnJpZ2h0ID09PSAwICYmIGJveC5ib3R0b20gPT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsICdUaGUgYW5jaG9yIGVsZW1lbnQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGxheW91dC4nLCBcIk1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBkb2N1bWVudCBvciB0aGF0IGl0J3Mgbm90IGRpc3BsYXkgbm9uZS5cIl0uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHBvcHBlck1vZGlmaWVycyA9IFt7XG4gICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgYWx0Qm91bmRhcnk6IGRpc2FibGVQb3J0YWxcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGFsdEJvdW5kYXJ5OiBkaXNhYmxlUG9ydGFsXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgbmFtZTogJ29uVXBkYXRlJyxcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBwaGFzZTogJ2FmdGVyV3JpdGUnLFxuICAgICAgZm46ICh7XG4gICAgICAgIHN0YXRlXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGhhbmRsZVBvcHBlclVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfV07XG5cbiAgICBpZiAobW9kaWZpZXJzICE9IG51bGwpIHtcbiAgICAgIHBvcHBlck1vZGlmaWVycyA9IHBvcHBlck1vZGlmaWVycy5jb25jYXQobW9kaWZpZXJzKTtcbiAgICB9XG5cbiAgICBpZiAocG9wcGVyT3B0aW9ucyAmJiBwb3BwZXJPcHRpb25zLm1vZGlmaWVycyAhPSBudWxsKSB7XG4gICAgICBwb3BwZXJNb2RpZmllcnMgPSBwb3BwZXJNb2RpZmllcnMuY29uY2F0KHBvcHBlck9wdGlvbnMubW9kaWZpZXJzKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3BwZXIgPSBjcmVhdGVQb3BwZXIocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSwgdG9vbHRpcFJlZi5jdXJyZW50LCBfZXh0ZW5kcyh7XG4gICAgICBwbGFjZW1lbnQ6IHJ0bFBsYWNlbWVudFxuICAgIH0sIHBvcHBlck9wdGlvbnMsIHtcbiAgICAgIG1vZGlmaWVyczogcG9wcGVyTW9kaWZpZXJzXG4gICAgfSkpO1xuICAgIGhhbmRsZVBvcHBlclJlZlJlZi5jdXJyZW50KHBvcHBlcik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHBvcHBlci5kZXN0cm95KCk7XG4gICAgICBoYW5kbGVQb3BwZXJSZWZSZWYuY3VycmVudChudWxsKTtcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIGRpc2FibGVQb3J0YWwsIG1vZGlmaWVycywgb3BlbiwgcG9wcGVyT3B0aW9ucywgcnRsUGxhY2VtZW50XSk7XG4gIGNvbnN0IGNoaWxkUHJvcHMgPSB7XG4gICAgcGxhY2VtZW50XG4gIH07XG5cbiAgaWYgKFRyYW5zaXRpb25Qcm9wcyAhPT0gbnVsbCkge1xuICAgIGNoaWxkUHJvcHMuVHJhbnNpdGlvblByb3BzID0gVHJhbnNpdGlvblByb3BzO1xuICB9XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKCk7XG4gIGNvbnN0IFJvb3QgPSAoX3JlZiA9IGNvbXBvbmVudCAhPSBudWxsID8gY29tcG9uZW50IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6ICdkaXYnO1xuICBjb25zdCByb290UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBSb290LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBjb21wb25lbnRzUHJvcHMucm9vdCxcbiAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIHJvbGU6ICd0b29sdGlwJyxcbiAgICAgIHJlZjogb3duUmVmXG4gICAgfSxcbiAgICBvd25lclN0YXRlOiBfZXh0ZW5kcyh7fSwgcHJvcHMsIG93bmVyU3RhdGUpLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5yb290XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUm9vdCwgX2V4dGVuZHMoe30sIHJvb3RQcm9wcywge1xuICAgIGNoaWxkcmVuOiB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbihjaGlsZFByb3BzKSA6IGNoaWxkcmVuXG4gIH0pKTtcbn0pO1xuLyogZXNsaW50LWVuYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG5cbi8qKlxuICogUG9wcGVycyByZWx5IG9uIHRoZSAzcmQgcGFydHkgbGlicmFyeSBbUG9wcGVyLmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pIGZvciBwb3NpdGlvbmluZy5cbiAqL1xuXG5jb25zdCBQb3BwZXJVbnN0eWxlZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBvcHBlclVuc3R5bGVkKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgIGFuY2hvckVsLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lcjogY29udGFpbmVyUHJvcCxcbiAgICBkaXJlY3Rpb24gPSAnbHRyJyxcbiAgICBkaXNhYmxlUG9ydGFsID0gZmFsc2UsXG4gICAga2VlcE1vdW50ZWQgPSBmYWxzZSxcbiAgICBtb2RpZmllcnMsXG4gICAgb3BlbixcbiAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcbiAgICBwb3BwZXJPcHRpb25zID0gZGVmYXVsdFBvcHBlck9wdGlvbnMsXG4gICAgcG9wcGVyUmVmLFxuICAgIHN0eWxlLFxuICAgIHRyYW5zaXRpb24gPSBmYWxzZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZDIpO1xuXG4gIGNvbnN0IFtleGl0ZWQsIHNldEV4aXRlZF0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcblxuICBjb25zdCBoYW5kbGVFbnRlciA9ICgpID0+IHtcbiAgICBzZXRFeGl0ZWQoZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9ICgpID0+IHtcbiAgICBzZXRFeGl0ZWQodHJ1ZSk7XG4gIH07XG5cbiAgaWYgKCFrZWVwTW91bnRlZCAmJiAhb3BlbiAmJiAoIXRyYW5zaXRpb24gfHwgZXhpdGVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIElmIHRoZSBjb250YWluZXIgcHJvcCBpcyBwcm92aWRlZCwgdXNlIHRoYXRcbiAgLy8gSWYgdGhlIGFuY2hvckVsIHByb3AgaXMgcHJvdmlkZWQsIHVzZSBpdHMgcGFyZW50IGJvZHkgZWxlbWVudCBhcyB0aGUgY29udGFpbmVyXG4gIC8vIElmIG5laXRoZXIgYXJlIHByb3ZpZGVkIGxldCB0aGUgTW9kYWwgdGFrZSBjYXJlIG9mIGNob29zaW5nIHRoZSBjb250YWluZXJcblxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRhaW5lclByb3AgfHwgKGFuY2hvckVsID8gb3duZXJEb2N1bWVudChyZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpKS5ib2R5IDogdW5kZWZpbmVkKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFBvcnRhbCwge1xuICAgIGRpc2FibGVQb3J0YWw6IGRpc2FibGVQb3J0YWwsXG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFBvcHBlclRvb2x0aXAsIF9leHRlbmRzKHtcbiAgICAgIGFuY2hvckVsOiBhbmNob3JFbCxcbiAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgICAgZGlzYWJsZVBvcnRhbDogZGlzYWJsZVBvcnRhbCxcbiAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLFxuICAgICAgcmVmOiByZWYsXG4gICAgICBvcGVuOiB0cmFuc2l0aW9uID8gIWV4aXRlZCA6IG9wZW4sXG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIHBvcHBlck9wdGlvbnM6IHBvcHBlck9wdGlvbnMsXG4gICAgICBwb3BwZXJSZWY6IHBvcHBlclJlZlxuICAgIH0sIG90aGVyLCB7XG4gICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAvLyBQcmV2ZW50cyBzY3JvbGwgaXNzdWUsIHdhaXRpbmcgZm9yIFBvcHBlci5qcyB0byBhZGQgdGhpcyBzdHlsZSBvbmNlIGluaXRpYXRlZC5cbiAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgIC8vIEZpeCBQb3BwZXIuanMgZGlzcGxheSBpc3N1ZVxuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIGRpc3BsYXk6ICFvcGVuICYmIGtlZXBNb3VudGVkICYmICghdHJhbnNpdGlvbiB8fCBleGl0ZWQpID8gJ25vbmUnIDogbnVsbFxuICAgICAgfSwgc3R5bGUpLFxuICAgICAgVHJhbnNpdGlvblByb3BzOiB0cmFuc2l0aW9uID8ge1xuICAgICAgICBpbjogb3BlbixcbiAgICAgICAgb25FbnRlcjogaGFuZGxlRW50ZXIsXG4gICAgICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWRcbiAgICAgIH0gOiBudWxsLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQb3BwZXJVbnN0eWxlZC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50LCBbdmlydHVhbEVsZW1lbnRdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3ZpcnR1YWwtZWxlbWVudHMvKSxcbiAgICogb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0aGVyLlxuICAgKiBJdCdzIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyLlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgcGFzc2VkIGFzIHRoZSByZWZlcmVuY2Ugb2JqZWN0IG9mIHRoZSBQb3BwZXIgaW5zdGFuY2UuXG4gICAqL1xuICBhbmNob3JFbDogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLCBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzLm9wZW4pIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkQW5jaG9yRWwgPSByZXNvbHZlQW5jaG9yRWwocHJvcHMuYW5jaG9yRWwpO1xuXG4gICAgICBpZiAocmVzb2x2ZWRBbmNob3JFbCAmJiByZXNvbHZlZEFuY2hvckVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgIGNvbnN0IGJveCA9IHJlc29sdmVkQW5jaG9yRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiYgYm94LnRvcCA9PT0gMCAmJiBib3gubGVmdCA9PT0gMCAmJiBib3gucmlnaHQgPT09IDAgJiYgYm94LmJvdHRvbSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsICdUaGUgYW5jaG9yIGVsZW1lbnQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGxheW91dC4nLCBcIk1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBkb2N1bWVudCBvciB0aGF0IGl0J3Mgbm90IGRpc3BsYXkgbm9uZS5cIl0uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFyZXNvbHZlZEFuY2hvckVsIHx8IHR5cGVvZiByZXNvbHZlZEFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gJ2Z1bmN0aW9uJyB8fCByZXNvbHZlZEFuY2hvckVsLmNvbnRleHRFbGVtZW50ICE9IG51bGwgJiYgcmVzb2x2ZWRBbmNob3JFbC5jb250ZXh0RWxlbWVudC5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKFsnTVVJOiBUaGUgYGFuY2hvckVsYCBwcm9wIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgaXMgaW52YWxpZC4nLCAnSXQgc2hvdWxkIGJlIGFuIEhUTUwgZWxlbWVudCBpbnN0YW5jZSBvciBhIHZpcnR1YWxFbGVtZW50ICcsICcoaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvdmlydHVhbC1lbGVtZW50cy8pLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG5cbiAgLyoqXG4gICAqIFBvcHBlciByZW5kZXIgZnVuY3Rpb24gb3Igbm9kZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgUG9wcGVyLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBQb3BwZXIuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogRGlyZWN0aW9uIG9mIHRoZSB0ZXh0LlxuICAgKiBAZGVmYXVsdCAnbHRyJ1xuICAgKi9cbiAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoWydsdHInLCAncnRsJ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgYGNoaWxkcmVuYCB3aWxsIGJlIHVuZGVyIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvcnRhbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEFsd2F5cyBrZWVwIHRoZSBjaGlsZHJlbiBpbiB0aGUgRE9NLlxuICAgKiBUaGlzIHByb3AgY2FuIGJlIHVzZWZ1bCBpbiBTRU8gc2l0dWF0aW9uIG9yXG4gICAqIHdoZW4geW91IHdhbnQgdG8gbWF4aW1pemUgdGhlIHJlc3BvbnNpdmVuZXNzIG9mIHRoZSBQb3BwZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBrZWVwTW91bnRlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFBvcHBlci5qcyBpcyBiYXNlZCBvbiBhIFwicGx1Z2luLWxpa2VcIiBhcmNoaXRlY3R1cmUsXG4gICAqIG1vc3Qgb2YgaXRzIGZlYXR1cmVzIGFyZSBmdWxseSBlbmNhcHN1bGF0ZWQgXCJtb2RpZmllcnNcIi5cbiAgICpcbiAgICogQSBtb2RpZmllciBpcyBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGVhY2ggdGltZSBQb3BwZXIuanMgbmVlZHMgdG9cbiAgICogY29tcHV0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlci5cbiAgICogRm9yIHRoaXMgcmVhc29uLCBtb2RpZmllcnMgc2hvdWxkIGJlIHZlcnkgcGVyZm9ybWFudCB0byBhdm9pZCBib3R0bGVuZWNrcy5cbiAgICogVG8gbGVhcm4gaG93IHRvIGNyZWF0ZSBhIG1vZGlmaWVyLCBbcmVhZCB0aGUgbW9kaWZpZXJzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL21vZGlmaWVycy8pLlxuICAgKi9cbiAgbW9kaWZpZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGRhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZWZmZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBlbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBmbjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbmFtZTogUHJvcFR5cGVzLmFueSxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHBoYXNlOiBQcm9wVHlwZXMub25lT2YoWydhZnRlck1haW4nLCAnYWZ0ZXJSZWFkJywgJ2FmdGVyV3JpdGUnLCAnYmVmb3JlTWFpbicsICdiZWZvcmVSZWFkJywgJ2JlZm9yZVdyaXRlJywgJ21haW4nLCAncmVhZCcsICd3cml0ZSddKSxcbiAgICByZXF1aXJlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgcmVxdWlyZXNJZkV4aXN0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZylcbiAgfSkpLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBQb3BwZXIgcGxhY2VtZW50LlxuICAgKiBAZGVmYXVsdCAnYm90dG9tJ1xuICAgKi9cbiAgcGxhY2VtZW50OiBQcm9wVHlwZXMub25lT2YoWydhdXRvLWVuZCcsICdhdXRvLXN0YXJ0JywgJ2F1dG8nLCAnYm90dG9tLWVuZCcsICdib3R0b20tc3RhcnQnLCAnYm90dG9tJywgJ2xlZnQtZW5kJywgJ2xlZnQtc3RhcnQnLCAnbGVmdCcsICdyaWdodC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAndG9wLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJ10pLFxuXG4gIC8qKlxuICAgKiBPcHRpb25zIHByb3ZpZGVkIHRvIHRoZSBbYFBvcHBlci5qc2BdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL2NvbnN0cnVjdG9ycy8jb3B0aW9ucykgaW5zdGFuY2UuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBwb3BwZXJPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1vZGlmaWVyczogUHJvcFR5cGVzLmFycmF5LFxuICAgIG9uRmlyc3RVcGRhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYXV0by1lbmQnLCAnYXV0by1zdGFydCcsICdhdXRvJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tLXN0YXJ0JywgJ2JvdHRvbScsICdsZWZ0LWVuZCcsICdsZWZ0LXN0YXJ0JywgJ2xlZnQnLCAncmlnaHQtZW5kJywgJ3JpZ2h0LXN0YXJ0JywgJ3JpZ2h0JywgJ3RvcC1lbmQnLCAndG9wLXN0YXJ0JywgJ3RvcCddKSxcbiAgICBzdHJhdGVneTogUHJvcFR5cGVzLm9uZU9mKFsnYWJzb2x1dGUnLCAnZml4ZWQnXSlcbiAgfSksXG5cbiAgLyoqXG4gICAqIEEgcmVmIHRoYXQgcG9pbnRzIHRvIHRoZSB1c2VkIHBvcHBlciBpbnN0YW5jZS5cbiAgICovXG4gIHBvcHBlclJlZjogcmVmVHlwZSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEhlbHAgc3VwcG9ydGluZyBhIHJlYWN0LXRyYW5zaXRpb24tZ3JvdXAvVHJhbnNpdGlvbiBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB0cmFuc2l0aW9uOiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFBvcHBlclVuc3R5bGVkOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IFBvcHBlclVuc3R5bGVkIGZyb20gJ0BtdWkvYmFzZS9Qb3BwZXJVbnN0eWxlZCc7XG5pbXBvcnQgeyB1c2VUaGVtZVdpdGhvdXREZWZhdWx0IGFzIHVzZVRoZW1lIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHsgSFRNTEVsZW1lbnRUeXBlLCByZWZUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVkLCB1c2VUaGVtZVByb3BzIH0gZnJvbSAnLi4vc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBQb3BwZXJSb290ID0gc3R5bGVkKFBvcHBlclVuc3R5bGVkLCB7XG4gIG5hbWU6ICdNdWlQb3BwZXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHt9KTtcbi8qKlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW0F1dG9jb21wbGV0ZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL3JlYWN0LWF1dG9jb21wbGV0ZS8pXG4gKiAtIFtNZW51XShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvcmVhY3QtbWVudS8pXG4gKiAtIFtQb3BwZXJdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9yZWFjdC1wb3BwZXIvKVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFtQb3BwZXIgQVBJXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvYXBpL3BvcHBlci8pXG4gKi9cblxuY29uc3QgUG9wcGVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9wcGVyKGluUHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVBvcHBlcidcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQb3BwZXJSb290LCBfZXh0ZW5kcyh7XG4gICAgZGlyZWN0aW9uOiB0aGVtZSA9PSBudWxsID8gdm9pZCAwIDogdGhlbWUuZGlyZWN0aW9uXG4gIH0sIHByb3BzLCB7XG4gICAgcmVmOiByZWZcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQb3BwZXIucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgVHlwZVNjcmlwdCB0eXBlcyBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgW3ZpcnR1YWxFbGVtZW50XShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi92aXJ0dWFsLWVsZW1lbnRzLyksXG4gICAqIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGVpdGhlci5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlci5cbiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIHBhc3NlZCBhcyB0aGUgcmVmZXJlbmNlIG9iamVjdCBvZiB0aGUgUG9wcGVyIGluc3RhbmNlLlxuICAgKi9cbiAgYW5jaG9yRWw6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogUG9wcGVyIHJlbmRlciBmdW5jdGlvbiBvciBub2RlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMuZnVuY10pLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgUG9wcGVyLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBQb3BwZXIuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBbHdheXMga2VlcCB0aGUgY2hpbGRyZW4gaW4gdGhlIERPTS5cbiAgICogVGhpcyBwcm9wIGNhbiBiZSB1c2VmdWwgaW4gU0VPIHNpdHVhdGlvbiBvclxuICAgKiB3aGVuIHlvdSB3YW50IHRvIG1heGltaXplIHRoZSByZXNwb25zaXZlbmVzcyBvZiB0aGUgUG9wcGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAga2VlcE1vdW50ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBQb3BwZXIuanMgaXMgYmFzZWQgb24gYSBcInBsdWdpbi1saWtlXCIgYXJjaGl0ZWN0dXJlLFxuICAgKiBtb3N0IG9mIGl0cyBmZWF0dXJlcyBhcmUgZnVsbHkgZW5jYXBzdWxhdGVkIFwibW9kaWZpZXJzXCIuXG4gICAqXG4gICAqIEEgbW9kaWZpZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBlYWNoIHRpbWUgUG9wcGVyLmpzIG5lZWRzIHRvXG4gICAqIGNvbXB1dGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BwZXIuXG4gICAqIEZvciB0aGlzIHJlYXNvbiwgbW9kaWZpZXJzIHNob3VsZCBiZSB2ZXJ5IHBlcmZvcm1hbnQgdG8gYXZvaWQgYm90dGxlbmVja3MuXG4gICAqIFRvIGxlYXJuIGhvdyB0byBjcmVhdGUgYSBtb2RpZmllciwgW3JlYWQgdGhlIG1vZGlmaWVycyBkb2N1bWVudGF0aW9uXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi9tb2RpZmllcnMvKS5cbiAgICovXG4gIG1vZGlmaWVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGVmZmVjdDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZm46IFByb3BUeXBlcy5mdW5jLFxuICAgIG5hbWU6IFByb3BUeXBlcy5hbnksXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBwaGFzZTogUHJvcFR5cGVzLm9uZU9mKFsnYWZ0ZXJNYWluJywgJ2FmdGVyUmVhZCcsICdhZnRlcldyaXRlJywgJ2JlZm9yZU1haW4nLCAnYmVmb3JlUmVhZCcsICdiZWZvcmVXcml0ZScsICdtYWluJywgJ3JlYWQnLCAnd3JpdGUnXSksXG4gICAgcmVxdWlyZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIHJlcXVpcmVzSWZFeGlzdHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpXG4gIH0pKSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogUG9wcGVyIHBsYWNlbWVudC5cbiAgICogQGRlZmF1bHQgJ2JvdHRvbSdcbiAgICovXG4gIHBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYXV0by1lbmQnLCAnYXV0by1zdGFydCcsICdhdXRvJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tLXN0YXJ0JywgJ2JvdHRvbScsICdsZWZ0LWVuZCcsICdsZWZ0LXN0YXJ0JywgJ2xlZnQnLCAncmlnaHQtZW5kJywgJ3JpZ2h0LXN0YXJ0JywgJ3JpZ2h0JywgJ3RvcC1lbmQnLCAndG9wLXN0YXJ0JywgJ3RvcCddKSxcblxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB0aGUgW2BQb3BwZXIuanNgXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi9jb25zdHJ1Y3RvcnMvI29wdGlvbnMpIGluc3RhbmNlLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcG9wcGVyT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtb2RpZmllcnM6IFByb3BUeXBlcy5hcnJheSxcbiAgICBvbkZpcnN0VXBkYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwbGFjZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2F1dG8tZW5kJywgJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdib3R0b20tZW5kJywgJ2JvdHRvbS1zdGFydCcsICdib3R0b20nLCAnbGVmdC1lbmQnLCAnbGVmdC1zdGFydCcsICdsZWZ0JywgJ3JpZ2h0LWVuZCcsICdyaWdodC1zdGFydCcsICdyaWdodCcsICd0b3AtZW5kJywgJ3RvcC1zdGFydCcsICd0b3AnXSksXG4gICAgc3RyYXRlZ3k6IFByb3BUeXBlcy5vbmVPZihbJ2Fic29sdXRlJywgJ2ZpeGVkJ10pXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgdXNlZCBwb3BwZXIgaW5zdGFuY2UuXG4gICAqL1xuICBwb3BwZXJSZWY6IHJlZlR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogSGVscCBzdXBwb3J0aW5nIGEgcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9UcmFuc2l0aW9uIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHRyYW5zaXRpb246IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUG9wcGVyOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sdGlwVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb29sdGlwJywgc2xvdCk7XG59XG5jb25zdCB0b29sdGlwQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRvb2x0aXAnLCBbJ3BvcHBlcicsICdwb3BwZXJJbnRlcmFjdGl2ZScsICdwb3BwZXJBcnJvdycsICdwb3BwZXJDbG9zZScsICd0b29sdGlwJywgJ3Rvb2x0aXBBcnJvdycsICd0b3VjaCcsICd0b29sdGlwUGxhY2VtZW50TGVmdCcsICd0b29sdGlwUGxhY2VtZW50UmlnaHQnLCAndG9vbHRpcFBsYWNlbWVudFRvcCcsICd0b29sdGlwUGxhY2VtZW50Qm90dG9tJywgJ2Fycm93J10pO1xuZXhwb3J0IGRlZmF1bHQgdG9vbHRpcENsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFycm93XCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc2VzXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRlc2NyaWJlQ2hpbGRcIiwgXCJkaXNhYmxlRm9jdXNMaXN0ZW5lclwiLCBcImRpc2FibGVIb3Zlckxpc3RlbmVyXCIsIFwiZGlzYWJsZUludGVyYWN0aXZlXCIsIFwiZGlzYWJsZVRvdWNoTGlzdGVuZXJcIiwgXCJlbnRlckRlbGF5XCIsIFwiZW50ZXJOZXh0RGVsYXlcIiwgXCJlbnRlclRvdWNoRGVsYXlcIiwgXCJmb2xsb3dDdXJzb3JcIiwgXCJpZFwiLCBcImxlYXZlRGVsYXlcIiwgXCJsZWF2ZVRvdWNoRGVsYXlcIiwgXCJvbkNsb3NlXCIsIFwib25PcGVuXCIsIFwib3BlblwiLCBcInBsYWNlbWVudFwiLCBcIlBvcHBlckNvbXBvbmVudFwiLCBcIlBvcHBlclByb3BzXCIsIFwidGl0bGVcIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCIsIFwiVHJhbnNpdGlvblByb3BzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMsIGFwcGVuZE93bmVyU3RhdGUgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBHcm93IGZyb20gJy4uL0dyb3cnO1xuaW1wb3J0IFBvcHBlciBmcm9tICcuLi9Qb3BwZXInO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnLi4vdXRpbHMvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VJZCBmcm9tICcuLi91dGlscy91c2VJZCc7XG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnLi4vdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUnO1xuaW1wb3J0IHVzZUNvbnRyb2xsZWQgZnJvbSAnLi4vdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5pbXBvcnQgdG9vbHRpcENsYXNzZXMsIHsgZ2V0VG9vbHRpcFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdG9vbHRpcENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuZnVuY3Rpb24gcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxZTUpIC8gMWU1O1xufVxuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlSW50ZXJhY3RpdmUsXG4gICAgYXJyb3csXG4gICAgdG91Y2gsXG4gICAgcGxhY2VtZW50XG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICBwb3BwZXI6IFsncG9wcGVyJywgIWRpc2FibGVJbnRlcmFjdGl2ZSAmJiAncG9wcGVySW50ZXJhY3RpdmUnLCBhcnJvdyAmJiAncG9wcGVyQXJyb3cnXSxcbiAgICB0b29sdGlwOiBbJ3Rvb2x0aXAnLCBhcnJvdyAmJiAndG9vbHRpcEFycm93JywgdG91Y2ggJiYgJ3RvdWNoJywgYHRvb2x0aXBQbGFjZW1lbnQke2NhcGl0YWxpemUocGxhY2VtZW50LnNwbGl0KCctJylbMF0pfWBdLFxuICAgIGFycm93OiBbJ2Fycm93J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUb29sdGlwVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IFRvb2x0aXBQb3BwZXIgPSBzdHlsZWQoUG9wcGVyLCB7XG4gIG5hbWU6ICdNdWlUb29sdGlwJyxcbiAgc2xvdDogJ1BvcHBlcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucG9wcGVyLCAhb3duZXJTdGF0ZS5kaXNhYmxlSW50ZXJhY3RpdmUgJiYgc3R5bGVzLnBvcHBlckludGVyYWN0aXZlLCBvd25lclN0YXRlLmFycm93ICYmIHN0eWxlcy5wb3BwZXJBcnJvdywgIW93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMucG9wcGVyQ2xvc2VdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZSxcbiAgb3BlblxufSkgPT4gX2V4dGVuZHMoe1xuICB6SW5kZXg6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS56SW5kZXgudG9vbHRpcCxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlSW50ZXJhY3RpdmUgJiYge1xuICBwb2ludGVyRXZlbnRzOiAnYXV0bydcbn0sICFvcGVuICYmIHtcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnXG59LCBvd25lclN0YXRlLmFycm93ICYmIHtcbiAgW2AmW2RhdGEtcG9wcGVyLXBsYWNlbWVudCo9XCJib3R0b21cIl0gLiR7dG9vbHRpcENsYXNzZXMuYXJyb3d9YF06IHtcbiAgICB0b3A6IDAsXG4gICAgbWFyZ2luVG9wOiAnLTAuNzFlbScsXG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAgMTAwJSdcbiAgICB9XG4gIH0sXG4gIFtgJltkYXRhLXBvcHBlci1wbGFjZW1lbnQqPVwidG9wXCJdIC4ke3Rvb2x0aXBDbGFzc2VzLmFycm93fWBdOiB7XG4gICAgYm90dG9tOiAwLFxuICAgIG1hcmdpbkJvdHRvbTogJy0wLjcxZW0nLFxuICAgICcmOjpiZWZvcmUnOiB7XG4gICAgICB0cmFuc2Zvcm1PcmlnaW46ICcxMDAlIDAnXG4gICAgfVxuICB9LFxuICBbYCZbZGF0YS1wb3BwZXItcGxhY2VtZW50Kj1cInJpZ2h0XCJdIC4ke3Rvb2x0aXBDbGFzc2VzLmFycm93fWBdOiBfZXh0ZW5kcyh7fSwgIW93bmVyU3RhdGUuaXNSdGwgPyB7XG4gICAgbGVmdDogMCxcbiAgICBtYXJnaW5MZWZ0OiAnLTAuNzFlbSdcbiAgfSA6IHtcbiAgICByaWdodDogMCxcbiAgICBtYXJnaW5SaWdodDogJy0wLjcxZW0nXG4gIH0sIHtcbiAgICBoZWlnaHQ6ICcxZW0nLFxuICAgIHdpZHRoOiAnMC43MWVtJyxcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMTAwJSAxMDAlJ1xuICAgIH1cbiAgfSksXG4gIFtgJltkYXRhLXBvcHBlci1wbGFjZW1lbnQqPVwibGVmdFwiXSAuJHt0b29sdGlwQ2xhc3Nlcy5hcnJvd31gXTogX2V4dGVuZHMoe30sICFvd25lclN0YXRlLmlzUnRsID8ge1xuICAgIHJpZ2h0OiAwLFxuICAgIG1hcmdpblJpZ2h0OiAnLTAuNzFlbSdcbiAgfSA6IHtcbiAgICBsZWZ0OiAwLFxuICAgIG1hcmdpbkxlZnQ6ICctMC43MWVtJ1xuICB9LCB7XG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICB3aWR0aDogJzAuNzFlbScsXG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAgMCdcbiAgICB9XG4gIH0pXG59KSk7XG5jb25zdCBUb29sdGlwVG9vbHRpcCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpVG9vbHRpcCcsXG4gIHNsb3Q6ICdUb29sdGlwJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy50b29sdGlwLCBvd25lclN0YXRlLnRvdWNoICYmIHN0eWxlcy50b3VjaCwgb3duZXJTdGF0ZS5hcnJvdyAmJiBzdHlsZXMudG9vbHRpcEFycm93LCBzdHlsZXNbYHRvb2x0aXBQbGFjZW1lbnQke2NhcGl0YWxpemUob3duZXJTdGF0ZS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXSl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuVG9vbHRpcC5iZyA6IGFscGhhKHRoZW1lLnBhbGV0dGUuZ3JleVs3MDBdLCAwLjkyKSxcbiAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuY29tbW9uLndoaXRlLFxuICBmb250RmFtaWx5OiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRGYW1pbHksXG4gIHBhZGRpbmc6ICc0cHggOHB4JyxcbiAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMSksXG4gIG1heFdpZHRoOiAzMDAsXG4gIG1hcmdpbjogMixcbiAgd29yZFdyYXA6ICdicmVhay13b3JkJyxcbiAgZm9udFdlaWdodDogdGhlbWUudHlwb2dyYXBoeS5mb250V2VpZ2h0TWVkaXVtXG59LCBvd25lclN0YXRlLmFycm93ICYmIHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIG1hcmdpbjogMFxufSwgb3duZXJTdGF0ZS50b3VjaCAmJiB7XG4gIHBhZGRpbmc6ICc4cHggMTZweCcsXG4gIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTQpLFxuICBsaW5lSGVpZ2h0OiBgJHtyb3VuZCgxNiAvIDE0KX1lbWAsXG4gIGZvbnRXZWlnaHQ6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodFJlZ3VsYXJcbn0sIHtcbiAgW2AuJHt0b29sdGlwQ2xhc3Nlcy5wb3BwZXJ9W2RhdGEtcG9wcGVyLXBsYWNlbWVudCo9XCJsZWZ0XCJdICZgXTogX2V4dGVuZHMoe1xuICAgIHRyYW5zZm9ybU9yaWdpbjogJ3JpZ2h0IGNlbnRlcidcbiAgfSwgIW93bmVyU3RhdGUuaXNSdGwgPyBfZXh0ZW5kcyh7XG4gICAgbWFyZ2luUmlnaHQ6ICcxNHB4J1xuICB9LCBvd25lclN0YXRlLnRvdWNoICYmIHtcbiAgICBtYXJnaW5SaWdodDogJzI0cHgnXG4gIH0pIDogX2V4dGVuZHMoe1xuICAgIG1hcmdpbkxlZnQ6ICcxNHB4J1xuICB9LCBvd25lclN0YXRlLnRvdWNoICYmIHtcbiAgICBtYXJnaW5MZWZ0OiAnMjRweCdcbiAgfSkpLFxuICBbYC4ke3Rvb2x0aXBDbGFzc2VzLnBvcHBlcn1bZGF0YS1wb3BwZXItcGxhY2VtZW50Kj1cInJpZ2h0XCJdICZgXTogX2V4dGVuZHMoe1xuICAgIHRyYW5zZm9ybU9yaWdpbjogJ2xlZnQgY2VudGVyJ1xuICB9LCAhb3duZXJTdGF0ZS5pc1J0bCA/IF9leHRlbmRzKHtcbiAgICBtYXJnaW5MZWZ0OiAnMTRweCdcbiAgfSwgb3duZXJTdGF0ZS50b3VjaCAmJiB7XG4gICAgbWFyZ2luTGVmdDogJzI0cHgnXG4gIH0pIDogX2V4dGVuZHMoe1xuICAgIG1hcmdpblJpZ2h0OiAnMTRweCdcbiAgfSwgb3duZXJTdGF0ZS50b3VjaCAmJiB7XG4gICAgbWFyZ2luUmlnaHQ6ICcyNHB4J1xuICB9KSksXG4gIFtgLiR7dG9vbHRpcENsYXNzZXMucG9wcGVyfVtkYXRhLXBvcHBlci1wbGFjZW1lbnQqPVwidG9wXCJdICZgXTogX2V4dGVuZHMoe1xuICAgIHRyYW5zZm9ybU9yaWdpbjogJ2NlbnRlciBib3R0b20nLFxuICAgIG1hcmdpbkJvdHRvbTogJzE0cHgnXG4gIH0sIG93bmVyU3RhdGUudG91Y2ggJiYge1xuICAgIG1hcmdpbkJvdHRvbTogJzI0cHgnXG4gIH0pLFxuICBbYC4ke3Rvb2x0aXBDbGFzc2VzLnBvcHBlcn1bZGF0YS1wb3BwZXItcGxhY2VtZW50Kj1cImJvdHRvbVwiXSAmYF06IF9leHRlbmRzKHtcbiAgICB0cmFuc2Zvcm1PcmlnaW46ICdjZW50ZXIgdG9wJyxcbiAgICBtYXJnaW5Ub3A6ICcxNHB4J1xuICB9LCBvd25lclN0YXRlLnRvdWNoICYmIHtcbiAgICBtYXJnaW5Ub3A6ICcyNHB4J1xuICB9KVxufSkpO1xuY29uc3QgVG9vbHRpcEFycm93ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVG9vbHRpcCcsXG4gIHNsb3Q6ICdBcnJvdycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmFycm93XG59KSgoe1xuICB0aGVtZVxufSkgPT4gKHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgd2lkdGg6ICcxZW0nLFxuICBoZWlnaHQ6ICcwLjcxZW0nXG4gIC8qID0gd2lkdGggLyBzcXJ0KDIpID0gKGxlbmd0aCBvZiB0aGUgaHlwb3RlbnVzZSkgKi9cbiAgLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgY29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuVG9vbHRpcC5iZyA6IGFscGhhKHRoZW1lLnBhbGV0dGUuZ3JleVs3MDBdLCAwLjkpLFxuICAnJjo6YmVmb3JlJzoge1xuICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICBtYXJnaW46ICdhdXRvJyxcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICB0cmFuc2Zvcm06ICdyb3RhdGUoNDVkZWcpJ1xuICB9XG59KSk7XG5sZXQgaHlzdGVyc2lzT3BlbiA9IGZhbHNlO1xubGV0IGh5c3RlcnNpc1RpbWVyID0gbnVsbDtcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0UmVzZXQoKSB7XG4gIGh5c3RlcnNpc09wZW4gPSBmYWxzZTtcbiAgY2xlYXJUaW1lb3V0KGh5c3RlcnNpc1RpbWVyKTtcbn1cblxuZnVuY3Rpb24gY29tcG9zZUV2ZW50SGFuZGxlcihoYW5kbGVyLCBldmVudEhhbmRsZXIpIHtcbiAgcmV0dXJuIGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnRIYW5kbGVyKSB7XG4gICAgICBldmVudEhhbmRsZXIoZXZlbnQpO1xuICAgIH1cblxuICAgIGhhbmRsZXIoZXZlbnQpO1xuICB9O1xufSAvLyBUT0RPIHY2OiBSZW1vdmUgUG9wcGVyQ29tcG9uZW50LCBQb3BwZXJQcm9wcywgVHJhbnNpdGlvbkNvbXBvbmVudCBhbmQgVHJhbnNpdGlvblByb3BzLlxuXG5cbmNvbnN0IFRvb2x0aXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUb29sdGlwKGluUHJvcHMsIHJlZikge1xuICB2YXIgX2NvbXBvbmVudHMkUG9wcGVyLCBfcmVmLCBfY29tcG9uZW50cyRUcmFuc2l0aW8sIF9jb21wb25lbnRzJFRvb2x0aXAsIF9jb21wb25lbnRzJEFycm93LCBfY29tcG9uZW50c1Byb3BzJHBvcHA7XG5cbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG9vbHRpcCdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGFycm93ID0gZmFsc2UsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50cyA9IHt9LFxuICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgIGRlc2NyaWJlQ2hpbGQgPSBmYWxzZSxcbiAgICBkaXNhYmxlRm9jdXNMaXN0ZW5lciA9IGZhbHNlLFxuICAgIGRpc2FibGVIb3Zlckxpc3RlbmVyID0gZmFsc2UsXG4gICAgZGlzYWJsZUludGVyYWN0aXZlOiBkaXNhYmxlSW50ZXJhY3RpdmVQcm9wID0gZmFsc2UsXG4gICAgZGlzYWJsZVRvdWNoTGlzdGVuZXIgPSBmYWxzZSxcbiAgICBlbnRlckRlbGF5ID0gMTAwLFxuICAgIGVudGVyTmV4dERlbGF5ID0gMCxcbiAgICBlbnRlclRvdWNoRGVsYXkgPSA3MDAsXG4gICAgZm9sbG93Q3Vyc29yID0gZmFsc2UsXG4gICAgaWQ6IGlkUHJvcCxcbiAgICBsZWF2ZURlbGF5ID0gMCxcbiAgICBsZWF2ZVRvdWNoRGVsYXkgPSAxNTAwLFxuICAgIG9uQ2xvc2UsXG4gICAgb25PcGVuLFxuICAgIG9wZW46IG9wZW5Qcm9wLFxuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIFBvcHBlckNvbXBvbmVudDogUG9wcGVyQ29tcG9uZW50UHJvcCxcbiAgICBQb3BwZXJQcm9wcyA9IHt9LFxuICAgIHRpdGxlLFxuICAgIFRyYW5zaXRpb25Db21wb25lbnQ6IFRyYW5zaXRpb25Db21wb25lbnRQcm9wID0gR3JvdyxcbiAgICBUcmFuc2l0aW9uUHJvcHNcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3QgaXNSdGwgPSB0aGVtZS5kaXJlY3Rpb24gPT09ICdydGwnO1xuICBjb25zdCBbY2hpbGROb2RlLCBzZXRDaGlsZE5vZGVdID0gUmVhY3QudXNlU3RhdGUoKTtcbiAgY29uc3QgW2Fycm93UmVmLCBzZXRBcnJvd1JlZl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgaWdub3JlTm9uVG91Y2hFdmVudHMgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBkaXNhYmxlSW50ZXJhY3RpdmUgPSBkaXNhYmxlSW50ZXJhY3RpdmVQcm9wIHx8IGZvbGxvd0N1cnNvcjtcbiAgY29uc3QgY2xvc2VUaW1lciA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBlbnRlclRpbWVyID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGxlYXZlVGltZXIgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgdG91Y2hUaW1lciA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBbb3BlblN0YXRlLCBzZXRPcGVuU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogb3BlblByb3AsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgbmFtZTogJ1Rvb2x0aXAnLFxuICAgIHN0YXRlOiAnb3BlbidcbiAgfSk7XG4gIGxldCBvcGVuID0gb3BlblN0YXRlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3Qge1xuICAgICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gICAgfSA9IFJlYWN0LnVzZVJlZihvcGVuUHJvcCAhPT0gdW5kZWZpbmVkKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGNoaWxkTm9kZSAmJiBjaGlsZE5vZGUuZGlzYWJsZWQgJiYgIWlzQ29udHJvbGxlZCAmJiB0aXRsZSAhPT0gJycgJiYgY2hpbGROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IGFyZSBwcm92aWRpbmcgYSBkaXNhYmxlZCBgYnV0dG9uYCBjaGlsZCB0byB0aGUgVG9vbHRpcCBjb21wb25lbnQuJywgJ0EgZGlzYWJsZWQgZWxlbWVudCBkb2VzIG5vdCBmaXJlIGV2ZW50cy4nLCBcIlRvb2x0aXAgbmVlZHMgdG8gbGlzdGVuIHRvIHRoZSBjaGlsZCBlbGVtZW50J3MgZXZlbnRzIHRvIGRpc3BsYXkgdGhlIHRpdGxlLlwiLCAnJywgJ0FkZCBhIHNpbXBsZSB3cmFwcGVyIGVsZW1lbnQsIHN1Y2ggYXMgYSBgc3BhbmAuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFt0aXRsZSwgY2hpbGROb2RlLCBpc0NvbnRyb2xsZWRdKTtcbiAgfVxuXG4gIGNvbnN0IGlkID0gdXNlSWQoaWRQcm9wKTtcbiAgY29uc3QgcHJldlVzZXJTZWxlY3QgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3Qgc3RvcFRvdWNoSW50ZXJhY3Rpb24gPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHByZXZVc2VyU2VsZWN0LmN1cnJlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5XZWJraXRVc2VyU2VsZWN0ID0gcHJldlVzZXJTZWxlY3QuY3VycmVudDtcbiAgICAgIHByZXZVc2VyU2VsZWN0LmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHRvdWNoVGltZXIuY3VycmVudCk7XG4gIH0sIFtdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGNsb3NlVGltZXIuY3VycmVudCk7XG4gICAgICBjbGVhclRpbWVvdXQoZW50ZXJUaW1lci5jdXJyZW50KTtcbiAgICAgIGNsZWFyVGltZW91dChsZWF2ZVRpbWVyLmN1cnJlbnQpO1xuICAgICAgc3RvcFRvdWNoSW50ZXJhY3Rpb24oKTtcbiAgICB9O1xuICB9LCBbc3RvcFRvdWNoSW50ZXJhY3Rpb25dKTtcblxuICBjb25zdCBoYW5kbGVPcGVuID0gZXZlbnQgPT4ge1xuICAgIGNsZWFyVGltZW91dChoeXN0ZXJzaXNUaW1lcik7XG4gICAgaHlzdGVyc2lzT3BlbiA9IHRydWU7IC8vIFRoZSBtb3VzZW92ZXIgZXZlbnQgd2lsbCB0cmlnZ2VyIGZvciBldmVyeSBuZXN0ZWQgZWxlbWVudCBpbiB0aGUgdG9vbHRpcC5cbiAgICAvLyBXZSBjYW4gc2tpcCByZXJlbmRlcmluZyB3aGVuIHRoZSB0b29sdGlwIGlzIGFscmVhZHkgb3Blbi5cbiAgICAvLyBXZSBhcmUgdXNpbmcgdGhlIG1vdXNlb3ZlciBldmVudCBpbnN0ZWFkIG9mIHRoZSBtb3VzZWVudGVyIGV2ZW50IHRvIGZpeCBhIGhpZGUvc2hvdyBpc3N1ZS5cblxuICAgIHNldE9wZW5TdGF0ZSh0cnVlKTtcblxuICAgIGlmIChvbk9wZW4gJiYgIW9wZW4pIHtcbiAgICAgIG9uT3BlbihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gdXNlRXZlbnRDYWxsYmFjayhcbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVhY3QuU3ludGhldGljRXZlbnQgfCBFdmVudH0gZXZlbnRcbiAgICovXG4gIGV2ZW50ID0+IHtcbiAgICBjbGVhclRpbWVvdXQoaHlzdGVyc2lzVGltZXIpO1xuICAgIGh5c3RlcnNpc1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBoeXN0ZXJzaXNPcGVuID0gZmFsc2U7XG4gICAgfSwgODAwICsgbGVhdmVEZWxheSk7XG4gICAgc2V0T3BlblN0YXRlKGZhbHNlKTtcblxuICAgIGlmIChvbkNsb3NlICYmIG9wZW4pIHtcbiAgICAgIG9uQ2xvc2UoZXZlbnQpO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dChjbG9zZVRpbWVyLmN1cnJlbnQpO1xuICAgIGNsb3NlVGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWdub3JlTm9uVG91Y2hFdmVudHMuY3VycmVudCA9IGZhbHNlO1xuICAgIH0sIHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXN0KTtcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlRW50ZXIgPSBldmVudCA9PiB7XG4gICAgaWYgKGlnbm9yZU5vblRvdWNoRXZlbnRzLmN1cnJlbnQgJiYgZXZlbnQudHlwZSAhPT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBSZW1vdmUgdGhlIHRpdGxlIGFoZWFkIG9mIHRpbWUuXG4gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciB0aGUgbmV4dCByZW5kZXIgY29tbWl0LlxuICAgIC8vIFdlIHdvdWxkIHJpc2sgZGlzcGxheWluZyB0d28gdG9vbHRpcHMgYXQgdGhlIHNhbWUgdGltZSAobmF0aXZlICsgdGhpcyBvbmUpLlxuXG5cbiAgICBpZiAoY2hpbGROb2RlKSB7XG4gICAgICBjaGlsZE5vZGUucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dChlbnRlclRpbWVyLmN1cnJlbnQpO1xuICAgIGNsZWFyVGltZW91dChsZWF2ZVRpbWVyLmN1cnJlbnQpO1xuXG4gICAgaWYgKGVudGVyRGVsYXkgfHwgaHlzdGVyc2lzT3BlbiAmJiBlbnRlck5leHREZWxheSkge1xuICAgICAgZW50ZXJUaW1lci5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhbmRsZU9wZW4oZXZlbnQpO1xuICAgICAgfSwgaHlzdGVyc2lzT3BlbiA/IGVudGVyTmV4dERlbGF5IDogZW50ZXJEZWxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZU9wZW4oZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVMZWF2ZSA9IGV2ZW50ID0+IHtcbiAgICBjbGVhclRpbWVvdXQoZW50ZXJUaW1lci5jdXJyZW50KTtcbiAgICBjbGVhclRpbWVvdXQobGVhdmVUaW1lci5jdXJyZW50KTtcbiAgICBsZWF2ZVRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGhhbmRsZUNsb3NlKGV2ZW50KTtcbiAgICB9LCBsZWF2ZURlbGF5KTtcbiAgfTtcblxuICBjb25zdCB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyVmlzaWJsZSxcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1Zpc2libGUsXG4gICAgcmVmOiBmb2N1c1Zpc2libGVSZWZcbiAgfSA9IHVzZUlzRm9jdXNWaXNpYmxlKCk7IC8vIFdlIGRvbid0IG5lY2Vzc2FyaWx5IGNhcmUgYWJvdXQgdGhlIGZvY3VzVmlzaWJsZSBzdGF0ZSAod2hpY2ggaXMgc2FmZSB0byBhY2Nlc3MgdmlhIHJlZiBhbnl3YXkpLlxuICAvLyBXZSBqdXN0IG5lZWQgdG8gcmUtcmVuZGVyIHRoZSBUb29sdGlwIGlmIHRoZSBmb2N1cy12aXNpYmxlIHN0YXRlIGNoYW5nZXMuXG5cbiAgY29uc3QgWywgc2V0Q2hpbGRJc0ZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBoYW5kbGVCbHVyVmlzaWJsZShldmVudCk7XG5cbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldENoaWxkSXNGb2N1c1Zpc2libGUoZmFsc2UpO1xuICAgICAgaGFuZGxlTGVhdmUoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1cyA9IGV2ZW50ID0+IHtcbiAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzc3NjlcbiAgICAvLyBUaGUgYXV0b0ZvY3VzIG9mIFJlYWN0IG1pZ2h0IHRyaWdnZXIgdGhlIGV2ZW50IGJlZm9yZSB0aGUgY29tcG9uZW50RGlkTW91bnQuXG4gICAgLy8gV2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGlzIGV2ZW50dWFsaXR5LlxuICAgIGlmICghY2hpbGROb2RlKSB7XG4gICAgICBzZXRDaGlsZE5vZGUoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgfVxuXG4gICAgaGFuZGxlRm9jdXNWaXNpYmxlKGV2ZW50KTtcblxuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICBzZXRDaGlsZElzRm9jdXNWaXNpYmxlKHRydWUpO1xuICAgICAgaGFuZGxlRW50ZXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZXRlY3RUb3VjaFN0YXJ0ID0gZXZlbnQgPT4ge1xuICAgIGlnbm9yZU5vblRvdWNoRXZlbnRzLmN1cnJlbnQgPSB0cnVlO1xuICAgIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSBjaGlsZHJlbi5wcm9wcztcblxuICAgIGlmIChjaGlsZHJlblByb3BzLm9uVG91Y2hTdGFydCkge1xuICAgICAgY2hpbGRyZW5Qcm9wcy5vblRvdWNoU3RhcnQoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNb3VzZU92ZXIgPSBoYW5kbGVFbnRlcjtcbiAgY29uc3QgaGFuZGxlTW91c2VMZWF2ZSA9IGhhbmRsZUxlYXZlO1xuXG4gIGNvbnN0IGhhbmRsZVRvdWNoU3RhcnQgPSBldmVudCA9PiB7XG4gICAgZGV0ZWN0VG91Y2hTdGFydChldmVudCk7XG4gICAgY2xlYXJUaW1lb3V0KGxlYXZlVGltZXIuY3VycmVudCk7XG4gICAgY2xlYXJUaW1lb3V0KGNsb3NlVGltZXIuY3VycmVudCk7XG4gICAgc3RvcFRvdWNoSW50ZXJhY3Rpb24oKTtcbiAgICBwcmV2VXNlclNlbGVjdC5jdXJyZW50ID0gZG9jdW1lbnQuYm9keS5zdHlsZS5XZWJraXRVc2VyU2VsZWN0OyAvLyBQcmV2ZW50IGlPUyB0ZXh0IHNlbGVjdGlvbiBvbiBsb25nLXRhcC5cblxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuV2Via2l0VXNlclNlbGVjdCA9ICdub25lJztcbiAgICB0b3VjaFRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuV2Via2l0VXNlclNlbGVjdCA9IHByZXZVc2VyU2VsZWN0LmN1cnJlbnQ7XG4gICAgICBoYW5kbGVFbnRlcihldmVudCk7XG4gICAgfSwgZW50ZXJUb3VjaERlbGF5KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVUb3VjaEVuZCA9IGV2ZW50ID0+IHtcbiAgICBpZiAoY2hpbGRyZW4ucHJvcHMub25Ub3VjaEVuZCkge1xuICAgICAgY2hpbGRyZW4ucHJvcHMub25Ub3VjaEVuZChldmVudCk7XG4gICAgfVxuXG4gICAgc3RvcFRvdWNoSW50ZXJhY3Rpb24oKTtcbiAgICBjbGVhclRpbWVvdXQobGVhdmVUaW1lci5jdXJyZW50KTtcbiAgICBsZWF2ZVRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGhhbmRsZUNsb3NlKGV2ZW50KTtcbiAgICB9LCBsZWF2ZVRvdWNoRGVsYXkpO1xuICB9O1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IG5hdGl2ZUV2ZW50XG4gICAgICovXG5cblxuICAgIGZ1bmN0aW9uIGhhbmRsZUtleURvd24obmF0aXZlRXZlbnQpIHtcbiAgICAgIC8vIElFMTEsIEVkZ2UgKHByaW9yIHRvIHVzaW5nIEJpbms/KSB1c2UgJ0VzYydcbiAgICAgIGlmIChuYXRpdmVFdmVudC5rZXkgPT09ICdFc2NhcGUnIHx8IG5hdGl2ZUV2ZW50LmtleSA9PT0gJ0VzYycpIHtcbiAgICAgICAgaGFuZGxlQ2xvc2UobmF0aXZlRXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuICAgIH07XG4gIH0sIFtoYW5kbGVDbG9zZSwgb3Blbl0pO1xuICBjb25zdCBoYW5kbGVVc2VSZWYgPSB1c2VGb3JrUmVmKHNldENoaWxkTm9kZSwgcmVmKTtcbiAgY29uc3QgaGFuZGxlRm9jdXNSZWYgPSB1c2VGb3JrUmVmKGZvY3VzVmlzaWJsZVJlZiwgaGFuZGxlVXNlUmVmKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihjaGlsZHJlbi5yZWYsIGhhbmRsZUZvY3VzUmVmKTsgLy8gVGhlcmUgaXMgbm8gcG9pbnQgaW4gZGlzcGxheWluZyBhbiBlbXB0eSB0b29sdGlwLlxuXG4gIGlmICh0aXRsZSA9PT0gJycpIHtcbiAgICBvcGVuID0gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwb3NpdGlvblJlZiA9IFJlYWN0LnVzZVJlZih7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH0pO1xuICBjb25zdCBwb3BwZXJSZWYgPSBSZWFjdC51c2VSZWYoKTtcblxuICBjb25zdCBoYW5kbGVNb3VzZU1vdmUgPSBldmVudCA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IGNoaWxkcmVuLnByb3BzO1xuXG4gICAgaWYgKGNoaWxkcmVuUHJvcHMub25Nb3VzZU1vdmUpIHtcbiAgICAgIGNoaWxkcmVuUHJvcHMub25Nb3VzZU1vdmUoZXZlbnQpO1xuICAgIH1cblxuICAgIHBvc2l0aW9uUmVmLmN1cnJlbnQgPSB7XG4gICAgICB4OiBldmVudC5jbGllbnRYLFxuICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgIH07XG5cbiAgICBpZiAocG9wcGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHBvcHBlclJlZi5jdXJyZW50LnVwZGF0ZSgpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBuYW1lT3JEZXNjUHJvcHMgPSB7fTtcbiAgY29uc3QgdGl0bGVJc1N0cmluZyA9IHR5cGVvZiB0aXRsZSA9PT0gJ3N0cmluZyc7XG5cbiAgaWYgKGRlc2NyaWJlQ2hpbGQpIHtcbiAgICBuYW1lT3JEZXNjUHJvcHMudGl0bGUgPSAhb3BlbiAmJiB0aXRsZUlzU3RyaW5nICYmICFkaXNhYmxlSG92ZXJMaXN0ZW5lciA/IHRpdGxlIDogbnVsbDtcbiAgICBuYW1lT3JEZXNjUHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXSA9IG9wZW4gPyBpZCA6IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgbmFtZU9yRGVzY1Byb3BzWydhcmlhLWxhYmVsJ10gPSB0aXRsZUlzU3RyaW5nID8gdGl0bGUgOiBudWxsO1xuICAgIG5hbWVPckRlc2NQcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10gPSBvcGVuICYmICF0aXRsZUlzU3RyaW5nID8gaWQgOiBudWxsO1xuICB9XG5cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IF9leHRlbmRzKHt9LCBuYW1lT3JEZXNjUHJvcHMsIG90aGVyLCBjaGlsZHJlbi5wcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xzeChvdGhlci5jbGFzc05hbWUsIGNoaWxkcmVuLnByb3BzLmNsYXNzTmFtZSksXG4gICAgb25Ub3VjaFN0YXJ0OiBkZXRlY3RUb3VjaFN0YXJ0LFxuICAgIHJlZjogaGFuZGxlUmVmXG4gIH0sIGZvbGxvd0N1cnNvciA/IHtcbiAgICBvbk1vdXNlTW92ZTogaGFuZGxlTW91c2VNb3ZlXG4gIH0gOiB7fSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjaGlsZHJlblByb3BzWydkYXRhLW11aS1pbnRlcm5hbC1jbG9uZS1lbGVtZW50J10gPSB0cnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoY2hpbGROb2RlICYmICFjaGlsZE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW11aS1pbnRlcm5hbC1jbG9uZS1lbGVtZW50JykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVGhlIGBjaGlsZHJlbmAgY29tcG9uZW50IG9mIHRoZSBUb29sdGlwIGlzIG5vdCBmb3J3YXJkaW5nIGl0cyBwcm9wcyBjb3JyZWN0bHkuJywgJ1BsZWFzZSBtYWtlIHN1cmUgdGhhdCBwcm9wcyBhcmUgc3ByZWFkIG9uIHRoZSBzYW1lIGVsZW1lbnQgdGhhdCB0aGUgcmVmIGlzIGFwcGxpZWQgdG8uJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtjaGlsZE5vZGVdKTtcbiAgfVxuXG4gIGNvbnN0IGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycyA9IHt9O1xuXG4gIGlmICghZGlzYWJsZVRvdWNoTGlzdGVuZXIpIHtcbiAgICBjaGlsZHJlblByb3BzLm9uVG91Y2hTdGFydCA9IGhhbmRsZVRvdWNoU3RhcnQ7XG4gICAgY2hpbGRyZW5Qcm9wcy5vblRvdWNoRW5kID0gaGFuZGxlVG91Y2hFbmQ7XG4gIH1cblxuICBpZiAoIWRpc2FibGVIb3Zlckxpc3RlbmVyKSB7XG4gICAgY2hpbGRyZW5Qcm9wcy5vbk1vdXNlT3ZlciA9IGNvbXBvc2VFdmVudEhhbmRsZXIoaGFuZGxlTW91c2VPdmVyLCBjaGlsZHJlblByb3BzLm9uTW91c2VPdmVyKTtcbiAgICBjaGlsZHJlblByb3BzLm9uTW91c2VMZWF2ZSA9IGNvbXBvc2VFdmVudEhhbmRsZXIoaGFuZGxlTW91c2VMZWF2ZSwgY2hpbGRyZW5Qcm9wcy5vbk1vdXNlTGVhdmUpO1xuXG4gICAgaWYgKCFkaXNhYmxlSW50ZXJhY3RpdmUpIHtcbiAgICAgIGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycy5vbk1vdXNlT3ZlciA9IGhhbmRsZU1vdXNlT3ZlcjtcbiAgICAgIGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycy5vbk1vdXNlTGVhdmUgPSBoYW5kbGVNb3VzZUxlYXZlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlzYWJsZUZvY3VzTGlzdGVuZXIpIHtcbiAgICBjaGlsZHJlblByb3BzLm9uRm9jdXMgPSBjb21wb3NlRXZlbnRIYW5kbGVyKGhhbmRsZUZvY3VzLCBjaGlsZHJlblByb3BzLm9uRm9jdXMpO1xuICAgIGNoaWxkcmVuUHJvcHMub25CbHVyID0gY29tcG9zZUV2ZW50SGFuZGxlcihoYW5kbGVCbHVyLCBjaGlsZHJlblByb3BzLm9uQmx1cik7XG5cbiAgICBpZiAoIWRpc2FibGVJbnRlcmFjdGl2ZSkge1xuICAgICAgaW50ZXJhY3RpdmVXcmFwcGVyTGlzdGVuZXJzLm9uRm9jdXMgPSBoYW5kbGVGb2N1cztcbiAgICAgIGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycy5vbkJsdXIgPSBoYW5kbGVCbHVyO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGNoaWxkcmVuLnByb3BzLnRpdGxlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhIGB0aXRsZWAgcHJvcCB0byB0aGUgY2hpbGQgb2YgPFRvb2x0aXAgLz4uJywgYFJlbW92ZSB0aGlzIHRpdGxlIHByb3AgXFxgJHtjaGlsZHJlbi5wcm9wcy50aXRsZX1cXGAgb3IgdGhlIFRvb2x0aXAgY29tcG9uZW50LmBdLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwb3BwZXJPcHRpb25zID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgdmFyIF9Qb3BwZXJQcm9wcyRwb3BwZXJPcDtcblxuICAgIGxldCB0b29sdGlwTW9kaWZpZXJzID0gW3tcbiAgICAgIG5hbWU6ICdhcnJvdycsXG4gICAgICBlbmFibGVkOiBCb29sZWFuKGFycm93UmVmKSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgZWxlbWVudDogYXJyb3dSZWYsXG4gICAgICAgIHBhZGRpbmc6IDRcbiAgICAgIH1cbiAgICB9XTtcblxuICAgIGlmICgoX1BvcHBlclByb3BzJHBvcHBlck9wID0gUG9wcGVyUHJvcHMucG9wcGVyT3B0aW9ucykgIT0gbnVsbCAmJiBfUG9wcGVyUHJvcHMkcG9wcGVyT3AubW9kaWZpZXJzKSB7XG4gICAgICB0b29sdGlwTW9kaWZpZXJzID0gdG9vbHRpcE1vZGlmaWVycy5jb25jYXQoUG9wcGVyUHJvcHMucG9wcGVyT3B0aW9ucy5tb2RpZmllcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgUG9wcGVyUHJvcHMucG9wcGVyT3B0aW9ucywge1xuICAgICAgbW9kaWZpZXJzOiB0b29sdGlwTW9kaWZpZXJzXG4gICAgfSk7XG4gIH0sIFthcnJvd1JlZiwgUG9wcGVyUHJvcHNdKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgaXNSdGwsXG4gICAgYXJyb3csXG4gICAgZGlzYWJsZUludGVyYWN0aXZlLFxuICAgIHBsYWNlbWVudCxcbiAgICBQb3BwZXJDb21wb25lbnRQcm9wLFxuICAgIHRvdWNoOiBpZ25vcmVOb25Ub3VjaEV2ZW50cy5jdXJyZW50XG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgUG9wcGVyQ29tcG9uZW50ID0gKF9jb21wb25lbnRzJFBvcHBlciA9IGNvbXBvbmVudHMuUG9wcGVyKSAhPSBudWxsID8gX2NvbXBvbmVudHMkUG9wcGVyIDogVG9vbHRpcFBvcHBlcjtcbiAgY29uc3QgVHJhbnNpdGlvbkNvbXBvbmVudCA9IChfcmVmID0gKF9jb21wb25lbnRzJFRyYW5zaXRpbyA9IGNvbXBvbmVudHMuVHJhbnNpdGlvbikgIT0gbnVsbCA/IF9jb21wb25lbnRzJFRyYW5zaXRpbyA6IFRyYW5zaXRpb25Db21wb25lbnRQcm9wKSAhPSBudWxsID8gX3JlZiA6IEdyb3c7XG4gIGNvbnN0IFRvb2x0aXBDb21wb25lbnQgPSAoX2NvbXBvbmVudHMkVG9vbHRpcCA9IGNvbXBvbmVudHMuVG9vbHRpcCkgIT0gbnVsbCA/IF9jb21wb25lbnRzJFRvb2x0aXAgOiBUb29sdGlwVG9vbHRpcDtcbiAgY29uc3QgQXJyb3dDb21wb25lbnQgPSAoX2NvbXBvbmVudHMkQXJyb3cgPSBjb21wb25lbnRzLkFycm93KSAhPSBudWxsID8gX2NvbXBvbmVudHMkQXJyb3cgOiBUb29sdGlwQXJyb3c7XG4gIGNvbnN0IHBvcHBlclByb3BzID0gYXBwZW5kT3duZXJTdGF0ZShQb3BwZXJDb21wb25lbnQsIF9leHRlbmRzKHt9LCBQb3BwZXJQcm9wcywgY29tcG9uZW50c1Byb3BzLnBvcHBlciksIG93bmVyU3RhdGUpO1xuICBjb25zdCB0cmFuc2l0aW9uUHJvcHMgPSBhcHBlbmRPd25lclN0YXRlKFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHt9LCBUcmFuc2l0aW9uUHJvcHMsIGNvbXBvbmVudHNQcm9wcy50cmFuc2l0aW9uKSwgb3duZXJTdGF0ZSk7XG4gIGNvbnN0IHRvb2x0aXBQcm9wcyA9IGFwcGVuZE93bmVyU3RhdGUoVG9vbHRpcENvbXBvbmVudCwgX2V4dGVuZHMoe30sIGNvbXBvbmVudHNQcm9wcy50b29sdGlwKSwgb3duZXJTdGF0ZSk7XG4gIGNvbnN0IHRvb2x0aXBBcnJvd1Byb3BzID0gYXBwZW5kT3duZXJTdGF0ZShBcnJvd0NvbXBvbmVudCwgX2V4dGVuZHMoe30sIGNvbXBvbmVudHNQcm9wcy5hcnJvdyksIG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBjaGlsZHJlblByb3BzKSwgLyojX19QVVJFX18qL19qc3goUG9wcGVyQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICBhczogUG9wcGVyQ29tcG9uZW50UHJvcCAhPSBudWxsID8gUG9wcGVyQ29tcG9uZW50UHJvcCA6IFBvcHBlcixcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYW5jaG9yRWw6IGZvbGxvd0N1cnNvciA/IHtcbiAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0OiAoKSA9PiAoe1xuICAgICAgICAgIHRvcDogcG9zaXRpb25SZWYuY3VycmVudC55LFxuICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uUmVmLmN1cnJlbnQueCxcbiAgICAgICAgICByaWdodDogcG9zaXRpb25SZWYuY3VycmVudC54LFxuICAgICAgICAgIGJvdHRvbTogcG9zaXRpb25SZWYuY3VycmVudC55LFxuICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgIGhlaWdodDogMFxuICAgICAgICB9KVxuICAgICAgfSA6IGNoaWxkTm9kZSxcbiAgICAgIHBvcHBlclJlZjogcG9wcGVyUmVmLFxuICAgICAgb3BlbjogY2hpbGROb2RlID8gb3BlbiA6IGZhbHNlLFxuICAgICAgaWQ6IGlkLFxuICAgICAgdHJhbnNpdGlvbjogdHJ1ZVxuICAgIH0sIGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycywgcG9wcGVyUHJvcHMsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnBvcHBlciwgUG9wcGVyUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IFBvcHBlclByb3BzLmNsYXNzTmFtZSwgKF9jb21wb25lbnRzUHJvcHMkcG9wcCA9IGNvbXBvbmVudHNQcm9wcy5wb3BwZXIpID09IG51bGwgPyB2b2lkIDAgOiBfY29tcG9uZW50c1Byb3BzJHBvcHAuY2xhc3NOYW1lKSxcbiAgICAgIHBvcHBlck9wdGlvbnM6IHBvcHBlck9wdGlvbnMsXG4gICAgICBjaGlsZHJlbjogKHtcbiAgICAgICAgVHJhbnNpdGlvblByb3BzOiBUcmFuc2l0aW9uUHJvcHNJbm5lclxuICAgICAgfSkgPT4ge1xuICAgICAgICB2YXIgX2NvbXBvbmVudHNQcm9wcyR0b29sLCBfY29tcG9uZW50c1Byb3BzJGFycm87XG5cbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgICAgICB0aW1lb3V0OiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgICAgIH0sIFRyYW5zaXRpb25Qcm9wc0lubmVyLCB0cmFuc2l0aW9uUHJvcHMsIHtcbiAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKFRvb2x0aXBDb21wb25lbnQsIF9leHRlbmRzKHt9LCB0b29sdGlwUHJvcHMsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnRvb2x0aXAsIChfY29tcG9uZW50c1Byb3BzJHRvb2wgPSBjb21wb25lbnRzUHJvcHMudG9vbHRpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb21wb25lbnRzUHJvcHMkdG9vbC5jbGFzc05hbWUpLFxuICAgICAgICAgICAgY2hpbGRyZW46IFt0aXRsZSwgYXJyb3cgPyAvKiNfX1BVUkVfXyovX2pzeChBcnJvd0NvbXBvbmVudCwgX2V4dGVuZHMoe30sIHRvb2x0aXBBcnJvd1Byb3BzLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmFycm93LCAoX2NvbXBvbmVudHNQcm9wcyRhcnJvID0gY29tcG9uZW50c1Byb3BzLmFycm93KSA9PSBudWxsID8gdm9pZCAwIDogX2NvbXBvbmVudHNQcm9wcyRhcnJvLmNsYXNzTmFtZSksXG4gICAgICAgICAgICAgIHJlZjogc2V0QXJyb3dSZWZcbiAgICAgICAgICAgIH0pKSA6IG51bGxdXG4gICAgICAgICAgfSkpXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUb29sdGlwLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGFkZHMgYW4gYXJyb3cgdG8gdGhlIHRvb2x0aXAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhcnJvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRvb2x0aXAgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIFRvb2x0aXAuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIEFycm93OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUG9wcGVyOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgVG9vbHRpcDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFRyYW5zaXRpb246IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcblxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIFRvb2x0aXAuXG4gICAqIE5vdGUgdGhhdCBgY29tcG9uZW50c1Byb3BzLnBvcHBlcmAgcHJvcCB2YWx1ZXMgd2luIG92ZXIgYFBvcHBlclByb3BzYFxuICAgKiBhbmQgYGNvbXBvbmVudHNQcm9wcy50cmFuc2l0aW9uYCBwcm9wIHZhbHVlcyB3aW4gb3ZlciBgVHJhbnNpdGlvblByb3BzYCBpZiBib3RoIGFyZSBhcHBsaWVkLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFycm93OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHBvcHBlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB0b29sdGlwOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHRyYW5zaXRpb246IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG5cbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgaWYgdGhlIGB0aXRsZWAgYWN0cyBhcyBhbiBhY2Nlc3NpYmxlIGRlc2NyaXB0aW9uLlxuICAgKiBCeSBkZWZhdWx0IHRoZSBgdGl0bGVgIGFjdHMgYXMgYW4gYWNjZXNzaWJsZSBsYWJlbCBmb3IgdGhlIGNoaWxkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVzY3JpYmVDaGlsZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIERvIG5vdCByZXNwb25kIHRvIGZvY3VzLXZpc2libGUgZXZlbnRzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUZvY3VzTGlzdGVuZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBEbyBub3QgcmVzcG9uZCB0byBob3ZlciBldmVudHMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlSG92ZXJMaXN0ZW5lcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE1ha2VzIGEgdG9vbHRpcCBub3QgaW50ZXJhY3RpdmUsIGkuZS4gaXQgd2lsbCBjbG9zZSB3aGVuIHRoZSB1c2VyXG4gICAqIGhvdmVycyBvdmVyIHRoZSB0b29sdGlwIGJlZm9yZSB0aGUgYGxlYXZlRGVsYXlgIGlzIGV4cGlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlSW50ZXJhY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBEbyBub3QgcmVzcG9uZCB0byBsb25nIHByZXNzIHRvdWNoIGV2ZW50cy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUb3VjaExpc3RlbmVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgc2hvd2luZyB0aGUgdG9vbHRpcC5cbiAgICogVGhpcyBwcm9wIHdvbid0IGltcGFjdCB0aGUgZW50ZXIgdG91Y2ggZGVsYXkgKGBlbnRlclRvdWNoRGVsYXlgKS5cbiAgICogQGRlZmF1bHQgMTAwXG4gICAqL1xuICBlbnRlckRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBzaG93aW5nIHRoZSB0b29sdGlwIHdoZW4gb25lIHdhcyBhbHJlYWR5IHJlY2VudGx5IG9wZW5lZC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgZW50ZXJOZXh0RGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGEgdXNlciBtdXN0IHRvdWNoIHRoZSBlbGVtZW50IGJlZm9yZSBzaG93aW5nIHRoZSB0b29sdGlwLlxuICAgKiBAZGVmYXVsdCA3MDBcbiAgICovXG4gIGVudGVyVG91Y2hEZWxheTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdG9vbHRpcCBmb2xsb3cgdGhlIGN1cnNvciBvdmVyIHRoZSB3cmFwcGVkIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb2xsb3dDdXJzb3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaXMgdXNlZCB0byBoZWxwIGltcGxlbWVudCB0aGUgYWNjZXNzaWJpbGl0eSBsb2dpYy5cbiAgICogSWYgeW91IGRvbid0IHByb3ZpZGUgdGhpcyBwcm9wLiBJdCBmYWxscyBiYWNrIHRvIGEgcmFuZG9tbHkgZ2VuZXJhdGVkIGlkLlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGhpZGluZyB0aGUgdG9vbHRpcC5cbiAgICogVGhpcyBwcm9wIHdvbid0IGltcGFjdCB0aGUgbGVhdmUgdG91Y2ggZGVsYXkgKGBsZWF2ZVRvdWNoRGVsYXlgKS5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgbGVhdmVEZWxheTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYWZ0ZXIgdGhlIHVzZXIgc3RvcHMgdG91Y2hpbmcgYW4gZWxlbWVudCBiZWZvcmUgaGlkaW5nIHRoZSB0b29sdGlwLlxuICAgKiBAZGVmYXVsdCAxNTAwXG4gICAqL1xuICBsZWF2ZVRvdWNoRGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuU3ludGhldGljRXZlbnR9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBvcGVuLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LlN5bnRoZXRpY0V2ZW50fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uT3BlbjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUb29sdGlwIHBsYWNlbWVudC5cbiAgICogQGRlZmF1bHQgJ2JvdHRvbSdcbiAgICovXG4gIHBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tLWVuZCcsICdib3R0b20tc3RhcnQnLCAnYm90dG9tJywgJ2xlZnQtZW5kJywgJ2xlZnQtc3RhcnQnLCAnbGVmdCcsICdyaWdodC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAndG9wLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBwb3BwZXIuXG4gICAqIEBkZWZhdWx0IFBvcHBlclxuICAgKi9cbiAgUG9wcGVyQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgUG9wcGVyYF0oL21hdGVyaWFsLXVpL2FwaS9wb3BwZXIvKSBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgUG9wcGVyUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVG9vbHRpcCB0aXRsZS4gWmVyby1sZW5ndGggdGl0bGVzIHN0cmluZyBhcmUgbmV2ZXIgZGlzcGxheWVkLlxuICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5ub2RlLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHRyYW5zaXRpb24uXG4gICAqIFtGb2xsb3cgdGhpcyBndWlkZV0oL21hdGVyaWFsLXVpL3RyYW5zaXRpb25zLyN0cmFuc2l0aW9uY29tcG9uZW50LXByb3ApIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IEdyb3dcbiAgICovXG4gIFRyYW5zaXRpb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcDsiLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcblxudHlwZSBwcm9wc1R5cGUgPSB7XG4gIHN0YXJ0OiBzdHJpbmcgfCBKU1guRWxlbWVudDtcbiAgZW5kOiBzdHJpbmcgfCBKU1guRWxlbWVudDtcbiAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgdGVzdElkOiBzdHJpbmc7XG59O1xuXG4vKlxuVGhpcyBjb21wb25lbnQgaG9sZHMgZnVuY3Rpb25hbGl0eSBmb3IgYSBidXR0b24gdG8gY2hhbmdlIGljb25zIG9uIHVzZXIgc2VsZWN0aW9uXG5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZCBmb3IgYm90aCB0aGUgY29weSB0byBjbGlwYm9hcmQgYnV0dG9uLCBhbmQgdGhlIGFkZCB0byBwcm9qZWN0IGJ1dHRvblxuKi9cblxuY29uc3QgQXBwQnV0dG9uID0gKHByb3BzOiBwcm9wc1R5cGUpID0+IHtcbiAgY29uc3QgeyBzdGFydCwgZW5kLCBvbkNsaWNrLCB0ZXN0SWQgfSA9IHByb3BzO1xuICBjb25zdCBbaWNvbiwgc2V0SWNvbl0gPSB1c2VTdGF0ZShzdGFydCk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgc2V0SWNvbihlbmQpO1xuICAgIG9uQ2xpY2soKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldEljb24oc3RhcnQpLCAxMDAwKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxUb29sdGlwIHRpdGxlPXt0ZXN0SWQgPT09ICdidHRuLWNvcHknID8gJ0NvcHknIDogJ0FkZCB0byBQcm9qZWN0J30gcGxhY2VtZW50PSdsZWZ0JyBhcnJvdz5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgZGF0YS10ZXN0aWQ9eyB0ZXN0SWQgfVxuICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICBjb2xvcj1cImluZm9cIlxuICAgICAgICBvbkNsaWNrPXsgaGFuZGxlQ2xpY2sgfVxuICAgICAgICBzeD17eyBtYXJnaW5Cb3R0b206IDEgfX1cbiAgICAgID5cbiAgICAgICAge2ljb259XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L1Rvb2x0aXA+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBcHBCdXR0b247XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94IH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgQWRkQm94SWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0FkZEJveCc7XG5pbXBvcnQgQ29udGVudENvcHlJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ29udGVudENvcHknO1xuaW1wb3J0IERvbmVBbGxJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvRG9uZUFsbCc7XG5cbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7XG4gIGFwcGVuZFRvQ2xpcGJvYXJkLFxuICBwb3N0U25pcHBldCxcbiAgZ2V0U25pcHBldHMsXG59IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL2NsaXBib2FyZFNsaWNlJztcbmltcG9ydCBBcHBCdXR0b24gZnJvbSAnLi4vY29tcG9uZW50cy9BcHBCdXR0b24nO1xuXG5pbXBvcnQgeyBjb3B5VGV4dCB9IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL2NvZGVTbGljZSc7XG5cbi8vIFRoaXMgY29udGFpbmVyIHdyYXBzOlxuLy8gMSkgdGhlIGJ1dHRvbiB0aGF0IGNvcGllcyB0aGUgY29kZSB0byB0aGUgbmF2aWdhdG9yIGNsaXBib2FyZFxuLy8gMikgdGhlIGJ1dHRvbiB0aGF0IHBlcmZvcm0gYSBwb3N0IHJlcXVlc3QgdG8gdGhlIGNvbnNvbGlkYXRlZCBhcHAgY2xpcGJvYXJkIFNRTCBEQiB3aXRoIHRoZSBjb2RlXG5cbmNvbnN0IEJ1dHRvbkNvbnRhaW5lciA9ICgpID0+IHtcbiAgY29uc3QgY29kZU91dHB1dCA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUuY29kZS5jb2RlT3V0cHV0KTtcbiAgY29uc3QgaXNMb2dnZWRJbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzTG9nZ2VkSW4nKTtcbiAgY29uc3QgcHJvamVjdElkID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS51c2VySW5mby5jdXJyZW50UHJvamVjdElkKTtcblxuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IGNvcHlDbGlwYm9hcmQgPSAoKSA9PiBkaXNwYXRjaChjb3B5VGV4dCgpKTtcblxuICBjb25zdCBhcHBlbmRDbGlwYm9hcmQgPSAoKSA9PiB7XG4gICAgaWYgKGlzTG9nZ2VkSW4pIHtcbiAgICAgIGRpc3BhdGNoKHBvc3RTbmlwcGV0KHsgcHJvamVjdElkLCBjb2RlT3V0cHV0OiBbY29kZU91dHB1dF0gfSkpO1xuICAgICAgZGlzcGF0Y2goZ2V0U25pcHBldHMocHJvamVjdElkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BhdGNoKGFwcGVuZFRvQ2xpcGJvYXJkKGNvZGVPdXRwdXQpKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8Qm94XG4gICAgICBjbGFzc05hbWU9XCJidXR0b24tY29udGFpbmVyXCJcbiAgICAgIHN4PXt7XG4gICAgICAgIG1hcmdpbkxlZnQ6IDUsXG4gICAgICAgIG1hcmdpblRvcDogMixcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPEFwcEJ1dHRvblxuICAgICAgICBzdGFydD17PENvbnRlbnRDb3B5SWNvbiAvPn1cbiAgICAgICAgZW5kPXs8RG9uZUFsbEljb24gLz59XG4gICAgICAgIG9uQ2xpY2s9IHsgY29weUNsaXBib2FyZCB9XG4gICAgICAgIHRlc3RJZD1cImJ0dG4tY29weVwiXG4gICAgICAvPlxuICAgICAgPEFwcEJ1dHRvblxuICAgICAgICBzdGFydD17PEFkZEJveEljb24gLz59XG4gICAgICAgIGVuZD17PERvbmVBbGxJY29uIC8+fVxuICAgICAgICBvbkNsaWNrPXsgYXBwZW5kQ2xpcGJvYXJkIH1cbiAgICAgICAgdGVzdElkPVwiYnR0bi1hcHBlbmRcIlxuICAgICAgLz5cbiAgICA8L0JveD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkNvbnRhaW5lcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUZXh0RmllbGQgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7IENoYW5nZUV2ZW50IH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBzZXRDb2RlT3V0cHV0IH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvY29kZVNsaWNlJztcblxuLy8gVGhpcyBjb21wb25lbnQgd2lsbCByZW5kZXIgdGhlIGdlbmVyYXRlZCB0ZXN0IGNvZGUgcmVjZWl2ZWQgZnJvbSB0aGUgZmV0Y2ggcmVxdWVzdCB0byB0aGUgc2VydmVyXG5jb25zdCBDb2RlVGV4dCA9ICgpID0+IHtcbiAgY29uc3QgY29kZU91dHB1dCA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUuY29kZS5jb2RlT3V0cHV0KTtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VBcHBEaXNwYXRjaCgpO1xuICBjb25zdCBlZGl0Q29kZSA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD4pID0+XG4gICAgZGlzcGF0Y2goc2V0Q29kZU91dHB1dChlLnRhcmdldC52YWx1ZSkpO1xuXG4gIHJldHVybiAoXG4gICAgPFRleHRGaWVsZFxuICAgICAgaWQ9XCJjb2RlLW91dHB1dFwiXG4gICAgICBjbGFzc05hbWU9XCJ0ZXh0LWRpc3BsYXlcIlxuICAgICAgbGFiZWw9XCJUZXN0aW5nIENvZGVcIlxuICAgICAgdmFyaWFudD1cImZpbGxlZFwiXG4gICAgICBtdWx0aWxpbmVcbiAgICAgIG1pblJvd3M9eyAxMCB9XG4gICAgICB2YWx1ZT17IGNvZGVPdXRwdXQgfVxuICAgICAgc3g9e3tcbiAgICAgICAgd2lkdGg6IDAuOTUsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyMyODJDMzQnLFxuICAgICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgICAgcGw6IDIsXG4gICAgICAgIGJvcmRlclJhZGl1czogMixcbiAgICAgIH19XG4gICAgICBvbkNoYW5nZT17IGVkaXRDb2RlIH1cbiAgICAvPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29kZVRleHQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94IH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgQnV0dG9uQ29udGFpbmVyIGZyb20gJy4vQnV0dG9uQ29udGFpbmVyJztcblxuaW1wb3J0IENvZGVUZXh0IGZyb20gJy4uL2NvbXBvbmVudHMvQ29kZVRleHQnO1xuXG4vLyBUaGlzIGNvbnRhaW5lciB3cmFwcyB0aGUgdGV4dCBib3ggY29udGFpbmluZyB0aGUgY29kZSBmcm9tIHNlcnZlclxuXG5jb25zdCBDb2RlQ29udGFpbmVyID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiY29kZS1jb250YWluZXJcIj5cbiAgICAgIDxCb3ggY2xhc3NOYW1lPSd0ZXN0LWNvZGUtYm94Jz5cbiAgICAgICAgPENvZGVUZXh0IC8+XG4gICAgICA8L0JveD5cbiAgICAgIDxCdXR0b25Db250YWluZXIgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvZGVDb250YWluZXI7XG4iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY29tcG9uZW50XCIsIFwiZGlyZWN0aW9uXCIsIFwic3BhY2luZ1wiLCBcImRpdmlkZXJcIiwgXCJjaGlsZHJlblwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcsIGdldFZhbHVlLCBoYW5kbGVCcmVha3BvaW50cywgbWVyZ2VCcmVha3BvaW50c0luT3JkZXIsIHVuc3RhYmxlX2V4dGVuZFN4UHJvcCBhcyBleHRlbmRTeFByb3AsIHVuc3RhYmxlX3Jlc29sdmVCcmVha3BvaW50VmFsdWVzIGFzIHJlc29sdmVCcmVha3BvaW50VmFsdWVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgc2VwYXJhdG9yIFJlYWN0IGVsZW1lbnQgaW50ZXJzcGVyc2VkIGJldHdlZW5cbiAqIGVhY2ggUmVhY3Qgbm9kZSBvZiB0aGUgaW5wdXQgY2hpbGRyZW4uXG4gKlxuICogPiBqb2luQ2hpbGRyZW4oWzEsMiwzXSwgMClcbiAqIFsxLDAsMiwwLDNdXG4gKi9cblxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuZnVuY3Rpb24gam9pbkNoaWxkcmVuKGNoaWxkcmVuLCBzZXBhcmF0b3IpIHtcbiAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIGNoaWxkcmVuQXJyYXkucmVkdWNlKChvdXRwdXQsIGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIG91dHB1dC5wdXNoKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA8IGNoaWxkcmVuQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgb3V0cHV0LnB1c2goIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoc2VwYXJhdG9yLCB7XG4gICAgICAgIGtleTogYHNlcGFyYXRvci0ke2luZGV4fWBcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9LCBbXSk7XG59XG5cbmNvbnN0IGdldFNpZGVGcm9tRGlyZWN0aW9uID0gZGlyZWN0aW9uID0+IHtcbiAgcmV0dXJuIHtcbiAgICByb3c6ICdMZWZ0JyxcbiAgICAncm93LXJldmVyc2UnOiAnUmlnaHQnLFxuICAgIGNvbHVtbjogJ1RvcCcsXG4gICAgJ2NvbHVtbi1yZXZlcnNlJzogJ0JvdHRvbSdcbiAgfVtkaXJlY3Rpb25dO1xufTtcblxuZXhwb3J0IGNvbnN0IHN0eWxlID0gKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IHtcbiAgbGV0IHN0eWxlcyA9IF9leHRlbmRzKHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbidcbiAgfSwgaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgIHRoZW1lXG4gIH0sIHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgfSksIHByb3BWYWx1ZSA9PiAoe1xuICAgIGZsZXhEaXJlY3Rpb246IHByb3BWYWx1ZVxuICB9KSkpO1xuXG4gIGlmIChvd25lclN0YXRlLnNwYWNpbmcpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5U3BhY2luZyh0aGVtZSk7XG4gICAgY29uc3QgYmFzZSA9IE9iamVjdC5rZXlzKHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlcykucmVkdWNlKChhY2MsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3duZXJTdGF0ZS5zcGFjaW5nID09PSAnb2JqZWN0JyAmJiBvd25lclN0YXRlLnNwYWNpbmdbYnJlYWtwb2ludF0gIT0gbnVsbCB8fCB0eXBlb2Ygb3duZXJTdGF0ZS5kaXJlY3Rpb24gPT09ICdvYmplY3QnICYmIG93bmVyU3RhdGUuZGlyZWN0aW9uW2JyZWFrcG9pbnRdICE9IG51bGwpIHtcbiAgICAgICAgYWNjW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gICAgY29uc3QgZGlyZWN0aW9uVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgdmFsdWVzOiBvd25lclN0YXRlLmRpcmVjdGlvbixcbiAgICAgIGJhc2VcbiAgICB9KTtcbiAgICBjb25zdCBzcGFjaW5nVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgdmFsdWVzOiBvd25lclN0YXRlLnNwYWNpbmcsXG4gICAgICBiYXNlXG4gICAgfSk7XG5cbiAgICBpZiAodHlwZW9mIGRpcmVjdGlvblZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKGRpcmVjdGlvblZhbHVlcykuZm9yRWFjaCgoYnJlYWtwb2ludCwgaW5kZXgsIGJyZWFrcG9pbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvblZhbHVlID0gZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRdO1xuXG4gICAgICAgIGlmICghZGlyZWN0aW9uVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c0RpcmVjdGlvblZhbHVlID0gaW5kZXggPiAwID8gZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRzW2luZGV4IC0gMV1dIDogJ2NvbHVtbic7XG4gICAgICAgICAgZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRdID0gcHJldmlvdXNEaXJlY3Rpb25WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gKHByb3BWYWx1ZSwgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJyYgPiA6bm90KHN0eWxlKSArIDpub3Qoc3R5bGUpJzoge1xuICAgICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgICBbYG1hcmdpbiR7Z2V0U2lkZUZyb21EaXJlY3Rpb24oYnJlYWtwb2ludCA/IGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50XSA6IG93bmVyU3RhdGUuZGlyZWN0aW9uKX1gXTogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgc3R5bGVzID0gZGVlcG1lcmdlKHN0eWxlcywgaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgICAgdGhlbWVcbiAgICB9LCBzcGFjaW5nVmFsdWVzLCBzdHlsZUZyb21Qcm9wVmFsdWUpKTtcbiAgfVxuXG4gIHN0eWxlcyA9IG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyKHRoZW1lLmJyZWFrcG9pbnRzLCBzdHlsZXMpO1xuICByZXR1cm4gc3R5bGVzO1xufTtcbmNvbnN0IFN0YWNrUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpU3RhY2snLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3RdO1xuICB9XG59KShzdHlsZSk7XG5jb25zdCBTdGFjayA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFN0YWNrKGluUHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZVByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVN0YWNrJ1xuICB9KTtcbiAgY29uc3QgcHJvcHMgPSBleHRlbmRTeFByb3AodGhlbWVQcm9wcyk7XG5cbiAgY29uc3Qge1xuICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgIGRpcmVjdGlvbiA9ICdjb2x1bW4nLFxuICAgIHNwYWNpbmcgPSAwLFxuICAgIGRpdmlkZXIsXG4gICAgY2hpbGRyZW5cbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSB7XG4gICAgZGlyZWN0aW9uLFxuICAgIHNwYWNpbmdcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN0YWNrUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBkaXZpZGVyID8gam9pbkNoaWxkcmVuKGNoaWxkcmVuLCBkaXZpZGVyKSA6IGNoaWxkcmVuXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3RhY2sucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBgZmxleC1kaXJlY3Rpb25gIHN0eWxlIHByb3BlcnR5LlxuICAgKiBJdCBpcyBhcHBsaWVkIGZvciBhbGwgc2NyZWVuIHNpemVzLlxuICAgKiBAZGVmYXVsdCAnY29sdW1uJ1xuICAgKi9cbiAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pKSwgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZWxlbWVudCBiZXR3ZWVuIGVhY2ggY2hpbGQuXG4gICAqL1xuICBkaXZpZGVyOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgc3BhY2UgYmV0d2VlbiBpbW1lZGlhdGUgY2hpbGRyZW4uXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHNwYWNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wLCB3aGljaCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBTdGFjazsiLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBCdXR0b24sXG4gIEJveCxcbiAgRGlhbG9nLFxuICBEaWFsb2dUaXRsZSxcbiAgU3RhY2ssXG4gIFRleHRGaWVsZCxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgRGVsZXRlSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0RlbGV0ZSc7XG5pbXBvcnQgU2F2ZUljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9TYXZlJztcblxuaW1wb3J0IHsgdXNlQXBwRGlzcGF0Y2gsIHVzZUFwcFNlbGVjdG9yIH0gZnJvbSAnLi4vcmVkdXgvaG9va3MnO1xuaW1wb3J0IHsgUHJvamVjdERyb3Bkb3duIH0gZnJvbSAnLi4vY29tcG9uZW50cy9Qcm9qZWN0RHJvcGRvd24nO1xuaW1wb3J0IHtcbiAgc2V0U2hvd1NhdmUsXG4gIHNldEN1cnJlbnRQcm9qZWN0LFxuICBzZXROZXdQcm9qZWN0LFxuICBzZXRQcm9qZWN0c0luZm8sXG59IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL3VzZXJJbmZvU2xpY2UnO1xuaW1wb3J0IHsgcG9zdFNuaXBwZXQgfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy9jbGlwYm9hcmRTbGljZSc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG50eXBlIHNhdmVEYXRhUHJvcHNUeXBlID0ge1xuICBvcGVuOiBib29sZWFuO1xufTtcblxuLypcblRoaXMgY29tcG9uZW50IGFsbG93cyBhIHVzZXIgdG8gcmVjb25jaWxlIHRoZSBjbGlwYm9hcmQgdGVzdCBkYXRhIHRoYXQgdGhleSBtYWRlIFxud2hpbGUgbm90IGxvZ2dlZCBpbiB3aXRoIGEgcHJvamVjdCBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlIG9uY2UgdGhleSBkbyBsb2dpbi5cbiovXG5cbmNvbnN0IFNhdmVEYXRhQ29udGFpbmVyID0gKHByb3BzOiBzYXZlRGF0YVByb3BzVHlwZSkgPT4ge1xuICBjb25zdCBuZXdQcm9qZWN0ID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS51c2VySW5mby5uZXdQcm9qZWN0KTtcbiAgY29uc3Qgc2VsZWN0ZWRQcm9qZWN0ID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS51c2VySW5mby5jdXJyZW50UHJvamVjdFxuICApO1xuICBjb25zdCBwcm9qZWN0cyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudXNlckluZm8ucHJvamVjdHNJbmZvKTtcbiAgY29uc3QgZGlzYWJsZURyb3Bkb3duID0gQm9vbGVhbihuZXdQcm9qZWN0Lmxlbmd0aCk7XG5cbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VBcHBEaXNwYXRjaCgpO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoXG4gICAgZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG4gICkgPT4ge1xuICAgIGRpc3BhdGNoKHNldE5ld1Byb2plY3QoZS50YXJnZXQudmFsdWUpKTtcbiAgICBkaXNwYXRjaChzZXRDdXJyZW50UHJvamVjdChlLnRhcmdldC52YWx1ZSkpO1xuICB9O1xuICBjb25zdCBoYW5kbGVEaXNjYXJkID0gKCkgPT4ge1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBib2FyZERhdGEnKTtcbiAgICBkaXNwYXRjaChzZXRTaG93U2F2ZSgpKTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlU2F2ZSA9IGFzeW5jICgpID0+IHtcbiAgICBsZXQgc25pcHBldHM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2NsaXBib2FyZERhdGEnKSkge1xuICAgICAgY29uc3Qgc3RvcmVkU25pcHBldHMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjbGlwYm9hcmREYXRhJyk7XG4gICAgICBpZiAoc3RvcmVkU25pcHBldHMpIHNuaXBwZXRzID0gSlNPTi5wYXJzZShzdG9yZWRTbmlwcGV0cyk7XG4gICAgfVxuICAgIGlmIChuZXdQcm9qZWN0ICE9PSAnJykgeyBcbiAgICAgIC8vIGFkZCBzYXZlZCBjb2RlIHNuaXBwZXRzIHRvIGEgbmV3IHByb2plY3RcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdCgnYXBpL3Byb2plY3QvJywge1xuICAgICAgICBwcm9qZWN0X25hbWU6IG5ld1Byb2plY3QsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb2plY3RzID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIGRpc3BhdGNoKHNldFByb2plY3RzSW5mbyhyZXNwb25zZS5kYXRhKSk7XG4gICAgICBkaXNwYXRjaChcbiAgICAgICAgcG9zdFNuaXBwZXQoe1xuICAgICAgICAgIHByb2plY3RJZDogcHJvamVjdHNbcHJvamVjdHMubGVuZ3RoIC0gMV1bJ3Byb2plY3RfaWQnXSxcbiAgICAgICAgICBjb2RlT3V0cHV0OiBzbmlwcGV0cyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHsgXG4gICAgICAvLyBhZGQgc2F2ZWQgY29kZSBzbmlwcGV0cyB0byBhIHByZS1leGlzdGluZyBwcm9qZWN0XG4gICAgICBmb3IgKGNvbnN0IHByb2plY3Qgb2YgcHJvamVjdHMpIHtcbiAgICAgICAgaWYgKHByb2plY3QucHJvamVjdF9uYW1lID09PSBzZWxlY3RlZFByb2plY3QpIHtcbiAgICAgICAgICBkaXNwYXRjaChwb3N0U25pcHBldCh7IHByb2plY3RJZDogcHJvamVjdC5wcm9qZWN0X2lkLCBjb2RlT3V0cHV0OiBzbmlwcGV0cyB9KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcGJvYXJkRGF0YScpO1xuXG4gICAgZGlzcGF0Y2goc2V0U2hvd1NhdmUoKSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nXG4gICAgICBvcGVuPXtwcm9wcy5vcGVufVxuICAgID5cbiAgICAgIDxCb3hcbiAgICAgICAgc3g9e3tcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgaGVpZ2h0OiAzMjUsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxCb3hcbiAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgd2lkdGg6IDUwMCxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzZlMDBiYicsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxpbWcgYWx0PVwibG9nb1wiIHNyYz1cIi4uL2Fzc2V0cy9sb2dvLWplc3Rlci5wbmdcIiAvPlxuICAgICAgICA8L0JveD5cbiAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgIFdvdWxkIHlvdSBsaWtlIHRvIHNhdmUgeW91ciBjdXJyZW50IGNsaXBib2FyZD9cbiAgICAgICAgPC9EaWFsb2dUaXRsZT5cbiAgICAgICAgPFByb2plY3REcm9wZG93biBkaXNhYmxlZD17ZGlzYWJsZURyb3Bkb3dufSAvPlxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgbGFiZWw9XCJOZXcgUHJvamVjdCBOYW1lXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm5ldy1wcm9qZWN0XCJcbiAgICAgICAgICBpZD1cIm5ldy1wcm9qZWN0XCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIHN4PXt7IHdpZHRoOiAyMDAsIG1pbldpZHRoOiAyMDAsIG1hcmdpbkJvdHRvbTogMiB9fVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgICAgIDxTdGFjayBkaXJlY3Rpb249XCJyb3dcIiBzcGFjaW5nPXsyfT5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgc3RhcnRJY29uPXs8RGVsZXRlSWNvbiAvPn1cbiAgICAgICAgICAgIHN4PXt7IHdpZHRoOiAxMjAgfX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURpc2NhcmR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgICBEaXNjYXJkXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgIHN0YXJ0SWNvbj17PFNhdmVJY29uIC8+fVxuICAgICAgICAgICAgc3g9e3sgd2lkdGg6IDEyMCB9fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2F2ZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9TdGFjaz5cbiAgICAgIDwvQm94PlxuICAgIDwvRGlhbG9nPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2F2ZURhdGFDb250YWluZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGVzdElucHV0Rm9ybSB9IGZyb20gJy4uL2NvbXBvbmVudHMvVGVzdElucHV0Rm9ybSc7XG5pbXBvcnQgQ29kZUNvbnRhaW5lciBmcm9tICcuLi9jb250YWluZXJzL0NvZGVDb250YWluZXInO1xuaW1wb3J0IFNhdmVEYXRhQ29udGFpbmVyIGZyb20gJy4uL2NvbnRhaW5lcnMvU2F2ZURhdGFDb250YWluZXInO1xuaW1wb3J0IHsgdXNlQXBwU2VsZWN0b3IgfSBmcm9tICcuLi9yZWR1eC9ob29rcyc7XG5cbmV4cG9ydCBjb25zdCBDb2RlR2VuZXJhdG9yID0gKCkgPT4ge1xuICBjb25zdCBzaG93U2F2ZSA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudXNlckluZm8uc2hvd1NhdmUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J3BhZ2UtYm9keSc+XG4gICAgICA8VGVzdElucHV0Rm9ybSAvPlxuICAgICAgPENvZGVDb250YWluZXIgLz5cbiAgICAgIDxTYXZlRGF0YUNvbnRhaW5lciBvcGVuPXtzaG93U2F2ZX0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ29kZUdlbmVyYXRvciB9IGZyb20gJy4vQ29kZUdlbmVyYXRvcic7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgdXNlQXBwRGlzcGF0Y2ggfSBmcm9tICcuLi9yZWR1eC9ob29rcyc7XG5pbXBvcnQgeyBzZXRQcm9qZWN0c0luZm8gfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy91c2VySW5mb1NsaWNlJztcblxuY29uc3QgSG9tZSA9ICgpID0+IHtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VBcHBEaXNwYXRjaCgpO1xuXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNMb2dnZWRJbicpKSB7XG4gICAgICBheGlvcy5nZXQoJy9hcGkvcHJvamVjdCcpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBkaXNwYXRjaChzZXRQcm9qZWN0c0luZm8ocmVzLmRhdGEpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiA8Q29kZUdlbmVyYXRvciAvPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEhvbWU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcGhvdG9zT2JqIH0gZnJvbSAnLi4vYXNzZXRzL3Bob3Rvc09iaic7XG5cbmNvbnN0IERvY3VtZW50YXRpb24gPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J3BhZ2UtYm9keSc+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nZG9jdW1lbnRhdGlvbi1jb250YWluZXInPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJkb2N1bWVudGF0aW9uLWhlYWRlcnNcIj5HZXR0aW5nIHN0YXJ0ZWQ8L3A+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImRvY3VtZW50YXRpb24tcFwiPlRvIHN0YXJ0IGdlbmVyYXRpbmcgYSB0ZXN0LCBzaW1wbHkgbmF2aWdhdGUgdG8gb3VyIGhvbWUgcGFnZSwgd2hlcmUgeW91IHdpbGwgZmlyc3QgYmUgcHJvbXB0ZWQgdG8gc3BlY2lmeSB0aGUgZW5kcG9pbnQgZm9yIHlvdXIgcmVxdWVzdC4gPC9wPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJkb2N1bWVudGF0aW9uLXBcIj5UaGlzIGNhbiBiZSBhIHVybCBvciBhIGxvY2FsIGVuZHBvaW50IGxpa2Ug4oCYL+KAmCwg4oCYL3VzZXJz4oCZLCBldGMuIDwvcD5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwiZG9jdW1lbnRhdGlvbi1wXCI+QXQgdGhpcyBzdGFnZSB5b3Ugd2lsbCBhbHNvIGhhdmUgdGhlIG9wdGlvbiB0byBpbnB1dCBhIHJlcXVlc3QgYm9keSB0byBzcGVjaWZ5IHRoZSBuYXR1cmUgb2YgeW91ciByZXF1ZXN0IChhdmFpbGFibGUgdG8gYWxsIHJlcXVlc3RzIHR5cGVzIGV4Y2VwdCBHRVQuPC9wPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJkb2N1bWVudGF0aW9uLXBcIj5PbmNlIHRoZXNlIGluaXRpYWwgcGFyYW1ldGVycyBoYXZlIGJlZW4gc2F0aXNmaWVkIHRvIHRoZSBuZWNlc3NhcnkgZXh0ZW50IGZvciB5b3VyIHByb2plY3QsIHlvdSBjYW4gYWRkIGFzc2VydGlvbnMgdG8geW91ciB0ZXN0IGJ5IGNsaWNraW5nIHRoZSDigJgr4oCZIGJ1dHRvbiBuZXh0IHRvIOKAmEFkZCBFeHBlY3RlZCBSZXNwb25zZeKAmS4gQnkgZGVmYXVsdCwgSmVzdGVyIHdpbGwgcG9wdWxhdGUgYXNzZXJ0aW9uIHR5cGVzIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6IDwvcD5cbiAgICAgICAgPG9sIGNsYXNzTmFtZT1cImRvY3VtZW50YXRpb24tcFwiPlxuICAgICAgICAgIDxsaT5leHBlY3RlZCBzdGF0dXMgY29kZSAoMTAwLTUxMSkgICAgICAgICBcbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICBleHBlY3RlZCBjb250ZW50IHR5cGUgKHRleHQvaHRtbCwgYXBwbGljYXRpb24vanNvbiwgZXRjLikgICBcbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgZXhwZWN0ZWQgcmVzcG9uc2UgYm9keSAob3B0aW9uYWwpPC9saT5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L29sPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJkb2N1bWVudGF0aW9uLXBcIj4gWW91IGFyZSBhbGxvd2VkIGEgbWF4aW11bSBvZiBvbmUgb2YgZWFjaCBhc3NlcnRpb24gdHlwZS4gT25jZSBhbGwgb2YgeW91ciBzcGVjaWZpY2F0aW9ucyBhcmUgaW4gcGxhY2UsIGNsaWNrIOKAmEdlbmVyYXRlIFRlc3QgQ29kZeKAmSBhbmQgeW91ciBuZXcgdGVzdCB3aWxsIGFwcGVhciBpbiB0aGUgY29kZSBibG9jayBiZWxvdyE8L3A+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImRvY3VtZW50YXRpb24taGVhZGVyc1wiPlNhdmluZyB5b3VyIHdvcms8L3A+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImRvY3VtZW50YXRpb24tcFwiPlRoZSBjb2RlIGJsb2NrIHdoZXJlIHlvdXIgdGVzdHMgYXJlIGRpc3BsYXllZCBhbHNvIGhhcyAyIGJ1dHRvbnMgaW4gdGhlIHRvcCByaWdodCBjb3JuZXIuPC9wPlxuICAgICAgICA8aW1nIGNsYXNzTmFtZT1cImRvY3MtZGlzcGxheVwiIHNyYz17cGhvdG9zT2JqLmJ1dHRvbnN9PjwvaW1nPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJkb2N1bWVudGF0aW9uLXBcIj5UaGUgZmlyc3QgaXMgYSBjb3B5LXRvLWNsaXBib2FyZCBidXR0b24gd2hpY2ggd2lsbCBlbmFibGUgeW91IHRvIGNvcHkgdGhlIGVudGlyZSBibG9jayBvZiBjb2RlIHRvIHBhc3RlIHdoZXJldmVyIHlvdSB3aXNoLiBUaGUgc2Vjb25kIGlzIHRoZSDigJhhZGQgdG8gcHJvamVjdOKAmSBidXR0b24uPC9wPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJkb2N1bWVudGF0aW9uLXBcIj5cbiAgICAgICAgICBUaGVyZSBpcyBhbiBvcHRpb24gdG8gbG9naW4gd2l0aCBHaXRodWIuIElmIHlvdSBhcmUgbG9nZ2VkIGluLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNyZWF0ZSBtdWx0aXBsZSBzYXZlZCBwcm9qZWN0cyBcbiAgICAgICAgICB1bmRlciDigJhQcm9qZWN0c+KAmSBhbmQgYWRkIHlvdXIgZ2VuZXJhdGVkIHRlc3QgY29kZSBzbmlwcGV0cyB0byB3aGF0ZXZlciBwcm9qZWN0IHlvdSBzcGVjaWZ5LiBBbiDigJhBZGQgdG8gUHJvamVjdOKAmSBcbiAgICAgICAgICBkcm9wZG93biB3aWxsIGFwcGVhciB1bmRlcm5lYXRoIHRoZSDigJhHZW5lcmF0ZSBUZXN0IENvZGXigJkgYnV0dG9uIGZvciBsb2dnZWQgaW4gdXNlcnMuIFRvIGFkZCBhIHRlc3QgY29kZSBzbmlwcGV0IHRvIFxuICAgICAgICAgIGEgcHJvamVjdCwgc2VsZWN0IHlvdXIgZGVzaXJlZCBwcm9qZWN0IGZyb20gdGhpcyBkcm9wLWRvd24gbWVudSBhbmQgdGhlbiBjbGljayB0aGUgc2Vjb25kIGJ1dHRvbiBpbiB0aGUgdXBwZXIgcmlnaHQgXG4gICAgICAgICAgY29ybmVyIG9mIHRoZSBjb2RlIGJsb2NrLiBZb3UgY2FuIHZpZXcgeW91ciBzYXZlZCBwcm9qZWN0cyBpbiB0aGUgJ1Byb2plY3RzJyB0YWIuPC9wPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJkb2N1bWVudGF0aW9uLWhlYWRlcnNcIj5JbnRlZ3JhdGluZyB0ZXN0cyBpbnRvIHlvdXIgY29kZWJhc2U8L3A+XG4gICAgICAgIDxvbCBjbGFzc05hbWU9XCJkb2N1bWVudGF0aW9uLXBcIj5cbiAgICAgICAgICA8bGk+XG4gICAgICAgICAgICBDcmVhdGUgYSBfX3Rlc3RzX18gZm9sZGVyIGluIHlvdXIgcHJvamVjdCB3aXRoIGEgZmlsZSBjYWxsZWRcbiAgICAgICAgICAgIHN1cGVydGVzdC5qc1xuICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPGxpPlxuICAgICAgICAgICAgQWRkIGplc3QgYW5kIHN1cGVydGVzdCBhcyBkZXBlbmRlbmNpZXMgaW4geW91ciBwYWNrYWdlLmpzb24gZmlsZVxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPGxpPlxuICAgICAgICAgICAgUGFzdGUgZ2VuZXJhdGVkIGNvZGUgaW50byB0aGUgZmlsZSBzdXBlcnRlc3QuanNcbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L29sPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERvY3VtZW50YXRpb247XG4iLCIvLyBpbXBvcnQgc2VyZW5hIGZyb20gJy4vcGhvdG9zL3NlcmVuYS5qcGcnO1xuLy8gaW1wb3J0IGFuc2h1IGZyb20gJy4vcGhvdG9zL2JyaWFuLWhlYWRzaG90LmpwZyc7XG4vLyBpbXBvcnQgYnJpYW4gZnJvbSAnLi9waG90b3MvYnJpYW4taGVhZHNob3QuanBnJztcbi8vIGltcG9ydCBsaWxhaCBmcm9tICcuL3Bob3Rvcy9saWxhaC5KUEcnO1xuXG5leHBvcnQgY29uc3QgcGhvdG9zT2JqID0ge1xuICBzZXJlbmE6ICcuL2Fzc2V0cy9waG90b3Mvc2VyZW5hLnBuZycsXG4gIGJyaWFuOiAnLi9hc3NldHMvcGhvdG9zL2JyaWFuLWhlYWRzaG90LmpwZycsXG4gIGFuc2h1OiAnLi9hc3NldHMvcGhvdG9zL2Fuc2h1LnBuZycsXG4gIGxpbGFoOiAnLi9hc3NldHMvcGhvdG9zL2xpbGFoLnBuZycsXG4gIG1pY2hhZWw6ICcuL2Fzc2V0cy9waG90b3MvbWljaGFlbC5qcGcnLFxuICBidXR0b25zOiAnLi9hc3NldHMvcGhvdG9zL2J1dHRvbnMucG5nJ1xufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgVHlwb2dyYXBoeSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuXG5jb25zdCBOb3RGb3VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT0ncGFnZS1ib2R5Jz5cbiAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9J2g0JyBjb21wb25lbnQ9J2gyJz5cbiAgICAgICAgNDA0OiBQYWdlIE5vdCBGb3VuZC4gQ2xpY2sgPExpbmsgdG89Jy8nPmhlcmU8L0xpbms+IHRvIGdvIEhvbWUuXG4gICAgICA8L1R5cG9ncmFwaHk+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBOb3RGb3VuZDtcbiIsImltcG9ydCB7IGNyZWF0ZVNsaWNlIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbnR5cGUgbmF2UGFuZWxTdGF0ZVR5cGUgPSB7XG4gIHNob3dQcm9qZWN0UGFuZWw6IGJvb2xlYW47XG4gIHNob3dBZGRQcm9qZWN0OiBib29sZWFuO1xufTtcblxuY29uc3QgaW5pdGlhbFN0YXRlOiBuYXZQYW5lbFN0YXRlVHlwZSA9IHtcbiAgc2hvd1Byb2plY3RQYW5lbDogZmFsc2UsXG4gIHNob3dBZGRQcm9qZWN0OiBmYWxzZSxcbn07XG5cbmV4cG9ydCBjb25zdCBuYXZQYW5lbFNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICBuYW1lOiAnbmF2UGFuZWwnLFxuICBpbml0aWFsU3RhdGUsXG4gIHJlZHVjZXJzOiB7XG4gICAgc2V0U2hvd1Byb2plY3RQYW5lbDogKHN0YXRlOiBuYXZQYW5lbFN0YXRlVHlwZSkgPT4ge1xuICAgICAgc3RhdGUuc2hvd1Byb2plY3RQYW5lbCA9IHN0YXRlLnNob3dQcm9qZWN0UGFuZWwgPyBmYWxzZSA6IHRydWU7XG4gICAgfSxcbiAgICBzZXRTaG93QWRkUHJvamVjdDogKHN0YXRlOiBuYXZQYW5lbFN0YXRlVHlwZSkgPT4ge1xuICAgICAgc3RhdGUuc2hvd0FkZFByb2plY3QgPSBzdGF0ZS5zaG93QWRkUHJvamVjdCA/IGZhbHNlIDogdHJ1ZTtcbiAgICB9LFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCB7IHNldFNob3dQcm9qZWN0UGFuZWwsIHNldFNob3dBZGRQcm9qZWN0IH0gPSBuYXZQYW5lbFNsaWNlLmFjdGlvbnM7XG5leHBvcnQgZGVmYXVsdCBuYXZQYW5lbFNsaWNlLnJlZHVjZXI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIENoYW5nZUV2ZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRGlhbG9nLCBUZXh0RmllbGQsIEJ1dHRvbiwgQm94LCBEaWFsb2dUaXRsZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgc2V0U2hvd0FkZFByb2plY3QgfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy9uYXZQYW5lbFNsaWNlJztcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7IHNldFByb2plY3RzSW5mbywgc2V0U2hvd0xvZ2luIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdXNlckluZm9TbGljZSc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IExvZ2luSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0xvZ2luJztcbmltcG9ydCB7IExvZ2luIH0gZnJvbSAnLi9Mb2dpbic7XG5cbi8qIFxuVGhpcyBjb21wb25lbnQgd2lsbCBhbGxvdyBhIHVzZXIgdG8gY3JlYXRlIGEgbmV3IHByb2plY3QgaW4gdGhlIGRhdGFiYXNlXG53aGVyZSBnZW5lcmF0ZWQgdGVzdCBjb2RlIHNuaXBwZXRzIHdpbGwgYmUgc3RvcmVkLlxuSWYgYSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4sIHRoZXkgd2lsbCBiZSBwcm9tcHRlZCB0byBsb2dpbiBiZWZvcmUgdGhleSBjYW4gY3JlYXRlIGEgcHJvamVjdC5cbiovXG5cbmV4cG9ydCBjb25zdCBBZGRQcm9qZWN0RGlhbG9nID0gKCkgPT4ge1xuICBjb25zdCBbcHJvamVjdE5hbWUsIHNldFByb2plY3ROYW1lXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3Qgc2hvd0FkZFByb2plY3QgPSB1c2VBcHBTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLm5hdlBhbmVsLnNob3dBZGRQcm9qZWN0XG4gICk7XG4gIGNvbnN0IG9wZW46IGJvb2xlYW4gPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLnVzZXJJbmZvLnNob3dMb2dpbik7XG4gIGNvbnN0IGNsaXBib2FyZERhdGEgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLmNsaXBib2FyZC5jb2RlU25pcHBldHMpO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNob3dBZGRQcm9qZWN0KCkpO1xuICB9O1xuICBjb25zdCBoYW5kbGVBZGRQcm9qZWN0ID0gYXN5bmMgKCkgPT4geyBcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoJ2FwaS9wcm9qZWN0LycsIHtcbiAgICAgIHByb2plY3RfbmFtZTogcHJvamVjdE5hbWUsXG4gICAgfSk7XG4gICAgZGlzcGF0Y2goc2V0UHJvamVjdHNJbmZvKHJlc3BvbnNlLmRhdGEpKTtcbiAgICBoYW5kbGVDbG9zZSgpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVByb2plY3ROYW1lID0gKFxuICAgIGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuICApID0+IHtcbiAgICBzZXRQcm9qZWN0TmFtZShlLnRhcmdldC52YWx1ZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTG9naW5PcGVuID0gYXN5bmMgKCkgPT4ge1xuICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgZGlzcGF0Y2goc2V0U2hvd0xvZ2luKCkpO1xuICAgIGlmIChjbGlwYm9hcmREYXRhLmxlbmd0aCkgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY2xpcGJvYXJkRGF0YScsIEpTT04uc3RyaW5naWZ5KGNsaXBib2FyZERhdGEpKTtcbiAgfTtcblxuICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNMb2dnZWRJbicpKVxuICAgIHJldHVybiAoXG4gICAgICA8RGlhbG9nIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfSBvcGVuPXtzaG93QWRkUHJvamVjdH0gc3g9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgdGV4dEFsaWduOiAnY2VudGVyJyB9fT5cbiAgICAgICAgPEJveFxuICAgICAgICAgIHN4PXt7XG4gICAgICAgICAgICB3aWR0aDogNDAwLFxuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjNmUwMGJiJyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGltZyBhbHQ9XCJsb2dvXCIgc3JjPVwiLi4vYXNzZXRzL2xvZ28tamVzdGVyLnBuZ1wiIC8+XG4gICAgICAgIDwvQm94PlxuICAgICAgICA8RGlhbG9nVGl0bGU+QWRkIGEgUHJvamVjdDwvRGlhbG9nVGl0bGU+XG4gICAgICAgIDxUZXh0RmllbGRcbiAgICAgICAgICBsYWJlbD1cIlByb2plY3QgTmFtZTpcIlxuICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVQcm9qZWN0TmFtZX1cbiAgICAgICAgICBzeD17eyB3aWR0aDogJzI1MHB4JywgYWxpZ25TZWxmOiAnY2VudGVyJywgbWFyZ2luQm90dG9tOiAnMTBweCcgfX1cbiAgICAgICAgPjwvVGV4dEZpZWxkPlxuICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUFkZFByb2plY3R9PkNyZWF0ZSBQcm9qZWN0PC9CdXR0b24+XG4gICAgICA8L0RpYWxvZz5cbiAgICApO1xuICBlbHNlXG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2cgb25DbG9zZT17aGFuZGxlQ2xvc2V9IG9wZW49e3Nob3dBZGRQcm9qZWN0fSBzeD17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB0ZXh0QWxpZ246ICdjZW50ZXInIH19PlxuICAgICAgICA8Qm94XG4gICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgIHdpZHRoOiA0MTAsXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyM2ZTAwYmInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8aW1nIGFsdD1cImxvZ29cIiBzcmM9XCIuLi9hc3NldHMvbG9nby1qZXN0ZXIucG5nXCIgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICAgIDxEaWFsb2dUaXRsZT5UbyBhZGQgYSBwcm9qZWN0LCB5b3UgbXVzdCBiZSBsb2dnZWQgaW4hPC9EaWFsb2dUaXRsZT5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUxvZ2luT3Blbn1cbiAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgIG1hcmdpbjogMixcbiAgICAgICAgICAgIHdpZHRoOiAnMjUwcHgnLFxuICAgICAgICAgICAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPExvZ2luSWNvbiBzeD17eyBtYXJnaW5SaWdodDogJzVweCcsIG1hcmdpbkxlZnQ6ICc1cHgnIH19IC8+TG9naW5cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxMb2dpbiBvcGVuPXtvcGVufSAvPlxuICAgICAgPC9EaWFsb2c+XG4gICAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBCdXR0b24gfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IHVzZUFwcFNlbGVjdG9yLCB1c2VBcHBEaXNwYXRjaCB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7IHVzZU5hdmlnYXRlIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBzZXRQcm9qZWN0c0luZm8gfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy91c2VySW5mb1NsaWNlJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgSW50ZWdyYXRpb25JbnN0cnVjdGlvbnNJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvSW50ZWdyYXRpb25JbnN0cnVjdGlvbnMnO1xuaW1wb3J0IERlbGV0ZUZvcmV2ZXJJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvRGVsZXRlRm9yZXZlcic7XG5pbXBvcnQgeyBjbGVhckNsaXBib2FyZFN0YXRlIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvY2xpcGJvYXJkU2xpY2UnO1xuXG50eXBlIG5hdlByb2plY3RNZW51UHJvcHMgPSB7XG4gIHByb2plY3RJZDogbnVtYmVyO1xufTtcblxuLyogXG5UaGlzIGNvbXBvbmVudCBlbmFibGVzIG5hdmlnYXRpb24gdG8gZWFjaCBwcm9qZWN0J3MgdW5pcXVlIGNsaXBib2FyZCBcbmFuZCBnaXZlcyBhIHVzZXIgdGhlIGFiaWxpdHkgdG8gZGVsZXRlIGFueSBvZiB0aGVpciBwcm9qZWN0cyBmcm9tIHRoZSBkYXRhYmFzZS5cbiovXG5cbmV4cG9ydCBjb25zdCBOYXZQcm9qZWN0TWVudSA9IChwcm9wczogbmF2UHJvamVjdE1lbnVQcm9wcykgPT4ge1xuICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcbiAgY29uc3QgaXNMb2dnZWRJbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzTG9nZ2VkSW4nKTtcbiAgY29uc3QgcHJvamVjdHMgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLnVzZXJJbmZvLnByb2plY3RzSW5mbyk7XG4gIGxldCBzaG93O1xuICBmb3IgKGNvbnN0IHByb2plY3Qgb2YgcHJvamVjdHMpIHtcbiAgICBpZiAocHJvamVjdC5wcm9qZWN0X2lkID09PSBwcm9wcy5wcm9qZWN0SWQpIHtcbiAgICAgIHNob3cgPSBwcm9qZWN0LnNob3dBY2Nlc3NDbGlwYm9hcmQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xpcGJvYXJkQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKGlzTG9nZ2VkSW4pIG5hdmlnYXRlKGAvY2xpcGJvYXJkLyR7cHJvcHMucHJvamVjdElkfWApO1xuICAgIC8vIGlmIG5vdCBsb2dnZWQgaW4sIG5hdmlnYXRlcyB0byBkZWZhdWx0IGNsaXBib2FyZCBpbiBzdGF0ZVxuICAgIGVsc2UgbmF2aWdhdGUoJy9jbGlwYm9hcmQvMCcpOyBcbiAgfTtcblxuICBjb25zdCBoYW5kbGVEZWxldGVDbGljayA9IGFzeW5jICgpID0+IHsgXG4gICAgaWYgKGlzTG9nZ2VkSW4pIHtcbiAgICAgIGNvbnN0IHByb2plY3RzID0gYXdhaXQgYXhpb3MuZGVsZXRlKGAvYXBpL3Byb2plY3QvJHtwcm9wcy5wcm9qZWN0SWR9YCk7IFxuICAgICAgZGlzcGF0Y2goc2V0UHJvamVjdHNJbmZvKHByb2plY3RzLmRhdGEpKTtcbiAgICB9IGVsc2UgeyBcbiAgICAgIGRpc3BhdGNoKGNsZWFyQ2xpcGJvYXJkU3RhdGUoKSk7XG4gICAgfVxuICB9O1xuICBpZiAoc2hvdylcbiAgICByZXR1cm4gKFxuICAgICAgPEJveD5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaXBib2FyZENsaWNrfVxuICAgICAgICAgIHN4PXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxJbnRlZ3JhdGlvbkluc3RydWN0aW9uc0ljb24gLz5cbiAgICAgICAgICBDbGlwYm9hcmRcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVEZWxldGVDbGlja31cbiAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgZGlzcGxheTogaXNMb2dnZWRJbiA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8RGVsZXRlRm9yZXZlckljb24gLz5cbiAgICAgICAgICBEZWxldGUgUHJvamVjdFxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZUNsaWNrfVxuICAgICAgICAgIHN4PXt7XG4gICAgICAgICAgICBkaXNwbGF5OiBpc0xvZ2dlZEluID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxEZWxldGVGb3JldmVySWNvbiAvPlxuICAgICAgICAgIENsZWFyIENsaXBib2FyZFxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvQm94PlxuICAgICk7XG4gIGVsc2UgcmV0dXJuIG51bGw7XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJ1dHRvbiwgQm94IH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgQ3JlZGl0Q2FyZEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9DcmVkaXRDYXJkJztcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoIH0gZnJvbSAnLi4vcmVkdXgvaG9va3MnO1xuaW1wb3J0IHsgc2V0U2hvd0FjY2Vzc0NsaXBib2FyZCB9IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL3VzZXJJbmZvU2xpY2UnO1xuaW1wb3J0IHsgTmF2UHJvamVjdE1lbnUgfSBmcm9tICcuL05hdlByb2plY3RNZW51JztcblxudHlwZSBwcm9qZWN0UHJvcHMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgcHJvamVjdElkOiBudW1iZXI7XG59O1xuXG4vKlxuVGhpcyBjb21wb25lbnQgd3JhcHMgZWFjaCBwcm9qZWN0IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcHJvamVjdCBuYXZpZ2F0aW9uXG5tZW51IHRvIGVuYWJsZSB0aGUgcHJvamVjdCBtZW51IGRyb3Bkb3duIGZvciBlYWNoIGluZGl2aWR1YWwgcHJvamVjdFxuKi9cblxuZXhwb3J0IGNvbnN0IFByb2plY3QgPSAocHJvcHM6IHByb2plY3RQcm9wcykgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gYXN5bmMgKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNob3dBY2Nlc3NDbGlwYm9hcmQocHJvcHMucHJvamVjdElkKSk7XG4gIH07XG4gIHJldHVybiAoXG4gICAgPEJveCBzeD17eyBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInIH19PlxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbGlja30gc3g9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd29yZFdyYXA6ICdhbnl3aGVyZScsIHdpZHRoOiAnMTAwJScgfX0+PENyZWRpdENhcmRJY29uIC8+XG4gICAgICAgIHtwcm9wcy5uYW1lfVxuICAgICAgPC9CdXR0b24+XG4gICAgICA8TmF2UHJvamVjdE1lbnUgcHJvamVjdElkPXtwcm9wcy5wcm9qZWN0SWR9IC8+XG4gICAgPC9Cb3g+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgQm94LCBCdXR0b24gfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQWRkQ2FyZEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9BZGRDYXJkJztcbmltcG9ydCB7IHVzZUFwcFNlbGVjdG9yLCB1c2VBcHBEaXNwYXRjaCB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7IHNldFNob3dBZGRQcm9qZWN0IH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvbmF2UGFuZWxTbGljZSc7XG5pbXBvcnQgeyBBZGRQcm9qZWN0RGlhbG9nIH0gZnJvbSAnLi4vY29tcG9uZW50cy9BZGRQcm9qZWN0RGlhbG9nJztcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi9jb21wb25lbnRzL1Byb2plY3QnO1xuXG4vKlxuVGhpcyBjb21wb25lbnQgZGlzcGxheXMgdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhlIG5hdiBwYW5lbCB0aGF0IHByb3ZpZGVzIGEgdXNlciB3aXRoIG5hdmlnYXRpb25cbnRvIGVhY2ggb2YgdGhlaXIgcHJvamVjdCdzIGNsaXBib2FyZHMsIGFzIHdlbGwgYXMgd2l0aCB0aGUgYWJpbGl0eSB0byBkZWxldGUgYW55IHByb2plY3QsXG5hbmQgdGhlIGFiaWxpdHkgdG8gYWRkIGEgcHJvamVjdC5cbiovXG5cbmV4cG9ydCBjb25zdCBQcm9qZWN0UGFuZWxDb250YWluZXIgPSAoKSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcbiAgY29uc3Qgc2hvd1Byb2plY3RQYW5lbCA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUubmF2UGFuZWwuc2hvd1Byb2plY3RQYW5lbFxuICApO1xuICB0eXBlIHByb2plY3RzVHlwZSA9IHtcbiAgICBwcm9qZWN0X2lkOiBudW1iZXI7XG4gICAgcHJvamVjdF9uYW1lOiBzdHJpbmc7XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIGNsaXBib2FyZEluZm8/OiBzdHJpbmdbXTtcbiAgfTtcbiAgY29uc3QgcHJvamVjdE5hbWU6IHByb2plY3RzVHlwZVtdID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS51c2VySW5mby5wcm9qZWN0c0luZm9cbiAgKTtcbiAgY29uc3QgcHJvamVjdHM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgcHJvamVjdE5hbWUuZm9yRWFjaCgocHJvamVjdCkgPT4ge1xuICAgIHByb2plY3RzLnB1c2goXG4gICAgICA8UHJvamVjdFxuICAgICAgICBrZXk9e3Byb2plY3RbJ3Byb2plY3RfaWQnXX1cbiAgICAgICAgbmFtZT17cHJvamVjdFsncHJvamVjdF9uYW1lJ119XG4gICAgICAgIHByb2plY3RJZD17cHJvamVjdFsncHJvamVjdF9pZCddfVxuICAgICAgLz5cbiAgICApO1xuICAgIHByb2plY3RzLnB1c2goPGhyIGNsYXNzTmFtZT1cImRpdmlkZXJcIi8+KTtcbiAgfSk7XG4gIHByb2plY3RzLnBvcCgpO1xuICBjb25zdCBoYW5kbGVBZGRQcm9qZWN0ID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNob3dBZGRQcm9qZWN0KCkpO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDxCb3hcbiAgICAgIGNsYXNzTmFtZT1cInBhbmVsIHByb2plY3QtcGFuZWwtY29udGFpbmVyXCJcbiAgICAgIHN4PXt7XG4gICAgICAgIHdpZHRoOiAnMTAwcHgnLFxuICAgICAgICBkaXNwbGF5OiBzaG93UHJvamVjdFBhbmVsID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVBZGRQcm9qZWN0fSBzeD17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PjxBZGRDYXJkSWNvbiAvPkFkZCBOZXcgUHJvamVjdDwvQnV0dG9uPlxuICAgICAgPGhyIGNsYXNzTmFtZT1cImRpdmlkZXJcIi8+XG4gICAgICB7cHJvamVjdHN9XG4gICAgICAgIFxuICAgICAgPEFkZFByb2plY3REaWFsb2cgLz5cbiAgICA8L0JveD5cbiAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbGxlY3Rpb25zQm9va21hcmtJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ29sbGVjdGlvbnNCb29rbWFyayc7XG5pbXBvcnQgQXJ0aWNsZUljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9BcnRpY2xlJztcbmltcG9ydCB7IEJ1dHRvbiwgVHlwb2dyYXBoeSwgQm94IH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7IHNldFNob3dQcm9qZWN0UGFuZWwgfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy9uYXZQYW5lbFNsaWNlJztcbmltcG9ydCBIb21lSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0hvbWUnO1xuaW1wb3J0IHsgdXNlTmF2aWdhdGUgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcblxuLypcblRoaXMgY29tcG9uZW50IHdyYXBzIGJ1dHRvbnMgZm9yIHVzZXIgdG8gbmF2aWdhdGUgdG8gaG9tZSBwYWdlLCB0byBkb2N1bWVudGF0aW9uIHBhZ2UsXG5hbmQgdG8gdmlldyB0aGVpciBwcm9qZWN0cyBpbiB0aGUgbmF2IHBhbmVsXG4qL1xuXG5leHBvcnQgY29uc3QgTmF2UGFuZWxEaXNwbGF5ID0gKCkgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgaGFuZGxlUHJvamVjdHNDbGljayA9ICgpID0+IHtcbiAgICBkaXNwYXRjaChzZXRTaG93UHJvamVjdFBhbmVsKCkpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUhvbWVDbGljayA9ICgpID0+IHtcbiAgICBuYXZpZ2F0ZSgnLycpO1xuICB9O1xuICBjb25zdCBoYW5kbGVEb2N1bWVudGF0aW9uQ2xpY2sgPSAoKSA9PiB7XG4gICAgbmF2aWdhdGUoJy9kb2N1bWVudGF0aW9uJyk7XG4gIH07XG4gIHJldHVybiAoXG4gICAgPEJveFxuICAgICAgY2xhc3NOYW1lPVwicGFuZWwgbmF2LXBhbmVsLWNvbnRhaW5lclwiXG4gICAgICBzeD17e1xuICAgICAgICB3aWR0aDogJzEwMHB4JyxcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPEJ1dHRvbiBcbiAgICAgICAgb25DbGljaz17aGFuZGxlSG9tZUNsaWNrfSBcbiAgICAgICAgc3g9e3sgXG4gICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLCBcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOidjb2x1bW4nLCBcbiAgICAgICAgICBtYXJnaW5Cb3R0b206MiBcbiAgICAgICAgfX0+XG4gICAgICAgIDxIb21lSWNvbiBzeD17eyBzY2FsZTogJzExNyUnIH19IC8+XG4gICAgICAgIDxUeXBvZ3JhcGh5IHN4PXt7IGZvbnRTaXplOiAnMTJweCcgfX0+SG9tZTwvVHlwb2dyYXBoeT5cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBzeD17eyBcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsIFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBcbiAgICAgICAgICBtYXJnaW5Cb3R0b206MiBcbiAgICAgICAgfX1cbiAgICAgICAgb25DbGljaz17aGFuZGxlUHJvamVjdHNDbGlja31cbiAgICAgID5cbiAgICAgICAgPENvbGxlY3Rpb25zQm9va21hcmtJY29uIC8+XG4gICAgICAgIDxUeXBvZ3JhcGh5IHN4PXt7IGZvbnRTaXplOiAnMTJweCcgfX0+UHJvamVjdHM8L1R5cG9ncmFwaHk+XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b24gXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZURvY3VtZW50YXRpb25DbGlja30gXG4gICAgICAgIHN4PXt7IFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JywgXG4gICAgICAgICAgZmxleERpcmVjdGlvbjonY29sdW1uJywgXG4gICAgICAgICAgbWFyZ2luQm90dG9tOjIgXG4gICAgICAgIH19PlxuICAgICAgICA8QXJ0aWNsZUljb24gLz5cbiAgICAgICAgPFR5cG9ncmFwaHkgc3g9e3sgZm9udFNpemU6ICcxMnB4JyB9fT5Eb2NzPC9UeXBvZ3JhcGh5PlxuICAgICAgPC9CdXR0b24+XG4gICAgPC9Cb3g+XG4gICk7XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgUHJvamVjdFBhbmVsQ29udGFpbmVyIH0gZnJvbSAnLi9Qcm9qZWN0UGFuZWxDb250YWluZXInO1xuaW1wb3J0IHsgTmF2UGFuZWxEaXNwbGF5IH0gZnJvbSAnLi4vY29tcG9uZW50cy9OYXZQYW5lbERpc3BsYXknO1xuXG5leHBvcnQgY29uc3QgTmF2UGFuZWxDb250YWluZXI6IGFueSA9ICgpID0+IHtcblxuICByZXR1cm4gKFxuICAgIDxCb3ggc3g9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAncm93JyB9fSA+XG4gICAgICA8TmF2UGFuZWxEaXNwbGF5IC8+XG4gICAgICA8UHJvamVjdFBhbmVsQ29udGFpbmVyIC8+XG4gICAgPC9Cb3g+XG4gICk7XG59O1xuIiwiLy8gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wYWNrYWdlcy5odG1sI3BhY2thZ2VzX3dyaXRpbmdfZHVhbF9wYWNrYWdlc193aGlsZV9hdm9pZGluZ19vcl9taW5pbWl6aW5nX2hhemFyZHNcbmltcG9ydCBIaWdobGlnaHRKUyBmcm9tICcuLi9saWIvY29tbW9uLmpzJztcbmV4cG9ydCB7IEhpZ2hsaWdodEpTIH07XG5leHBvcnQgZGVmYXVsdCBIaWdobGlnaHRKUztcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3ggfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCBDb250ZW50Q29weUljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9Db250ZW50Q29weSc7XG5pbXBvcnQgRG9uZUFsbEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9Eb25lQWxsJztcbmltcG9ydCB7IHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG5pbXBvcnQgeyBjb3B5Q2xpcGJvYXJkIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvY2xpcGJvYXJkU2xpY2UnO1xuaW1wb3J0IEFwcEJ1dHRvbiBmcm9tICcuL0FwcEJ1dHRvbic7XG5cbi8vIFRoaXMgY29udGFpbmVyIHdyYXBzIHRoZSBidXR0b24gdGhhdCBjb3BpZXMgdGhlIGFwcCBjbGlwYm9hcmQgdG8gdGhlIG5hdmlnYXRvciBjbGlwYm9hcmRcblxuY29uc3QgQ2xpcGJvYXJkQnV0dG9uID0gKCkgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKCk6IHZvaWQgPT4ge1xuICAgIGRpc3BhdGNoKGNvcHlDbGlwYm9hcmQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8Qm94XG4gICAgICBjbGFzc05hbWU9XCJjbGlwYm9hcmQtYnV0dG9uLWNvbnRhaW5lclwiXG4gICAgICBzeD17e1xuICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgICAgICAgYWxpZ25JdGVtczogJ2ZsZXgtZW5kJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPEFwcEJ1dHRvblxuICAgICAgICBzdGFydD17IDxDb250ZW50Q29weUljb24gLz4gfVxuICAgICAgICBlbmQ9eyA8RG9uZUFsbEljb24gLz4gfVxuICAgICAgICBvbkNsaWNrPXsgaGFuZGxlQ2xpY2sgfVxuICAgICAgICB0ZXN0SWQ9XCJidHRuLWNvcHlcIlxuICAgICAgLz5cbiAgICA8L0JveD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENsaXBib2FyZEJ1dHRvbjtcbiIsImltcG9ydCBSZWFjdCwgeyBDaGFuZ2VFdmVudCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUGFyYW1zLCB1c2VOYXZpZ2F0ZSB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgVGV4dEZpZWxkLCBCb3gsIEJ1dHRvbiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IERlbGV0ZUZvcmV2ZXJJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvRGVsZXRlRm9yZXZlcic7XG5pbXBvcnQgIGhsanMgIGZyb20gJ2hpZ2hsaWdodC5qcy9saWIvY29tbW9uJztcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7XG4gIHNldFNlcnZlcixcbiAgZ2V0U25pcHBldHMsXG4gIHNldFNuaXBwZXRzLFxuICBjbGVhckNsaXBib2FyZFN0YXRlLFxufSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy9jbGlwYm9hcmRTbGljZSc7XG5pbXBvcnQgQ2xpcGJvYXJkQnV0dG9uIGZyb20gJy4vQ2xpcGJvYXJkQnV0dG9uJztcbmltcG9ydCB7IGRlbGV0ZVByb2plY3QgfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy91c2VySW5mb1NsaWNlJztcblxuLypcblRoaXMgY29tcG9uZW50IHdpbGwgZGlzcGxheSBjb2RlIHNuaXBwZXRzIGZyb20gYSBnaXZlbiBwcm9qZWN0IGluIHRoZSBkYXRhYmFzZSBpZiBhIFxudXNlciBpcyBsb2dnZWQgaW4sIG9yIGZyb20gc3RhdGUgaWYgYSB1c2VyIGlzIG5vdCBsb2dnZWQgaW5cbiovXG5cbmNvbnN0IENsaXBib2FyZCA9ICgpID0+IHtcbiAgaGxqcy5jb25maWd1cmUoe1xuICAgIGlnbm9yZVVuZXNjYXBlZEhUTUw6IHRydWVcbiAgfSk7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VBcHBEaXNwYXRjaCgpO1xuICBjb25zdCBwcm9qZWN0SWQgPSBOdW1iZXIodXNlUGFyYW1zKCkucHJvamVjdElkKTtcbiAgY29uc3QgaXNMb2dnZWRJbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzTG9nZ2VkSW4nKTtcbiAgY29uc3QgYnV0dG9uVGV4dCA9IGlzTG9nZ2VkSW4gPyAnRGVsZXRlIFByb2plY3QnIDogJ0NsZWFyIENsaXBib2FyZCc7XG5cbiAgY29uc3Qgc2VydmVyOiBzdHJpbmcgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLmNsaXBib2FyZC5zZXJ2ZXIpO1xuICBjb25zdCBjb2RlRGlzcGxheTogc3RyaW5nID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5jbGlwYm9hcmQuY29kZURpc3BsYXlcbiAgKTtcblxuICBjb25zdCB1cGRhdGVTZXJ2ZXIgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBkaXNwYXRjaChzZXRTZXJ2ZXIoZS50YXJnZXQudmFsdWUpKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDbGVhciA9ICgpID0+IHsgXG4gICAgaWYgKGlzTG9nZ2VkSW4pIHtcbiAgICAgIGRpc3BhdGNoKGRlbGV0ZVByb2plY3QocHJvamVjdElkKSk7XG4gICAgICBuYXZpZ2F0ZSgnLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXNwYXRjaChjbGVhckNsaXBib2FyZFN0YXRlKCkpO1xuICAgIH1cbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0xvZ2dlZEluKSB7IFxuICAgICAgLy8gZmV0Y2ggY29kZSBzbmlwcGV0cyBmcm9tIGRiIGlmIHVzZXIgbG9nZ2VkIGluXG4gICAgICBkaXNwYXRjaChnZXRTbmlwcGV0cyhwcm9qZWN0SWQpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY29kZVNuaXBwZXRzJyk7XG4gICAgICBpZiAoY2xpcGJvYXJkRGF0YSkgZGlzcGF0Y2goc2V0U25pcHBldHMoSlNPTi5wYXJzZShjbGlwYm9hcmREYXRhKSkpO1xuICAgIH1cbiAgICBobGpzLmhpZ2hsaWdodEFsbCgpO1xuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicGFnZS1ib2R5XCI+XG4gICAgICA8Qm94XG4gICAgICAgIHN4PXt7XG4gICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgIGdhcDogJzEwcHgnLFxuICAgICAgICAgIHdpZHRoOiAuOCxcbiAgICAgICAgfX1cbiAgICAgICAgY2xhc3NOYW1lPVwiY29kZS1jb250YWluZXJcIlxuICAgICAgPlxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1kaXNwbGF5XCJcbiAgICAgICAgICBsYWJlbD1cIlNlcnZlciBVUkxcIlxuICAgICAgICAgIHN4PXt7IG1pbldpZHRoOiAyMDAgfX1cbiAgICAgICAgICB2YWx1ZT17c2VydmVyfVxuICAgICAgICAgIGVycm9yPXtzZXJ2ZXIgPT09ICcnfVxuICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVTZXJ2ZXJ9XG4gICAgICAgIC8+XG4gICAgICAgIDxCb3ggXG4gICAgICAgICAgc3g9e3sgXG4gICAgICAgICAgICB3aWR0aDogMSxcbiAgICAgICAgICAgIGhlaWdodDogNTAwLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyMyODJDMzQnLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGlkPVwibWFpbi1jbGlwYm9hcmRcIj5cbiAgICAgICAgICAgIDxwcmU+XG4gICAgICAgICAgICAgIDxjb2RlIGNsYXNzTmFtZT0namF2YXNjcmlwdCc+XG4gICAgICAgICAgICAgICAge2NvZGVEaXNwbGF5fVxuICAgICAgICAgICAgICA8L2NvZGU+IFxuICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvQm94PiBcbiAgICAgICAgPENsaXBib2FyZEJ1dHRvbiAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJ9XG4gICAgICAgICAgc3g9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxEZWxldGVGb3JldmVySWNvbiAvPiBcbiAgICAgICAgICB7YnV0dG9uVGV4dH1cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L0JveD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENsaXBib2FyZDtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTmF2aWdhdGUgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IFR5cG9ncmFwaHkgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5cbi8qXG5UaGlzIGNvbXBvbmVudCB3aWxsIHByb3ZpZGUgYSBsb2FkaW5nIHBhZ2UgZm9yIHRoZSB1c2VyIHVwb24gZ2l0aHViIHZlcmlmaWNhdGlvbiBpbiBvcmRlciB0byBcbmdhdGhlciB1c2VyIGluZm9ybWF0aW9uIGZyb20gY29va2llcyBhbmQgc2V0IHZhbHVlcyBpbiBzZXNzaW9uU3RvcmFnZS5cbiovXG5cbmNvbnN0IEF1dGggPSAoKSA9PiB7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgW3VzZXJuYW1lLCBzZXRVc2VybmFtZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFt0aW1lciwgdXBkYXRlVGltZXJdID0gdXNlU3RhdGUoMyk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNMb2dnZWRJbicpKSB7XG4gICAgICBuYXZpZ2F0ZSgnLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb29raWVfY29kZSA9IENvb2tpZXMuZ2V0KCdjb2RlJykgfHwgJyc7XG4gICAgICBjb25zdCBjb29raWVfdXNlcm5hbWUgPSBDb29raWVzLmdldCgndXNlcm5hbWUnKSB8fCAnJztcbiAgICAgIGNvbnN0IGNvb2tpZV9lbWFpbCA9IENvb2tpZXMuZ2V0KCdlbWFpbCcpIHx8ICcnO1xuICAgICAgc2V0VXNlcm5hbWUoY29va2llX3VzZXJuYW1lKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NvZGVTbmlwcGV0cycpO1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndXNlcm5hbWUnLCBjb29raWVfdXNlcm5hbWUpO1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZW1haWwnLCBjb29raWVfZW1haWwpO1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY29kZScsIGNvb2tpZV9jb2RlKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lzTG9nZ2VkSW4nLCAndHJ1ZScpO1xuICAgICAgc3RhcnRDb3VudGRvd24oMik7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgZnVuY3Rpb24gc3RhcnRDb3VudGRvd24oc2Vjb25kczogbnVtYmVyKSB7XG4gICAgbGV0IGNvdW50ZXIgPSBzZWNvbmRzO1xuXG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB1cGRhdGVUaW1lcihjb3VudGVyKTtcbiAgICAgIGNvdW50ZXItLTtcblxuICAgICAgaWYgKGNvdW50ZXIgPCAwKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICBuYXZpZ2F0ZSgnLycpO1xuICAgICAgfVxuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcmV0dXJuIChcblxuICAgIDxkaXYgY2xhc3NOYW1lPSdwYWdlLWJvZHknPlxuICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD0naDQnIGNvbXBvbmVudD0naDQnPlxuICAgICAgICBIZWxsbywge3VzZXJuYW1lfSFcbiAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9J2g2JyBjb21wb25lbnQ9J2g2Jz5cbiAgICAgICAgU3VjY2Vzc2Z1bGx5IGxvZ2dlZCBpbiB3aXRoIEdpdGh1Yi4gUmVkaXJlY3RpbmcgeW91IGluIHt0aW1lcn0gc2Vjb25kcy4uLlxuICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXV0aDtcbiIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXJkVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlDYXJkJywgc2xvdCk7XG59XG5jb25zdCBjYXJkQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUNhcmQnLCBbJ3Jvb3QnXSk7XG5leHBvcnQgZGVmYXVsdCBjYXJkQ2xhc3NlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwicmFpc2VkXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgY2hhaW5Qcm9wVHlwZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgUGFwZXIgZnJvbSAnLi4vUGFwZXInO1xuaW1wb3J0IHsgZ2V0Q2FyZFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vY2FyZENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Q2FyZFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBDYXJkUm9vdCA9IHN0eWxlZChQYXBlciwge1xuICBuYW1lOiAnTXVpQ2FyZCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICB9O1xufSk7XG5jb25zdCBDYXJkID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ2FyZChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2FyZCdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICByYWlzZWQgPSBmYWxzZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHJhaXNlZFxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChDYXJkUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgZWxldmF0aW9uOiByYWlzZWQgPyA4IDogdW5kZWZpbmVkLFxuICAgIHJlZjogcmVmLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ2FyZC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjYXJkIHdpbGwgdXNlIHJhaXNlZCBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmFpc2VkOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMuYm9vbCwgcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wcy5yYWlzZWQgJiYgcHJvcHMudmFyaWFudCA9PT0gJ291dGxpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTVVJOiBDb21iaW5pbmcgYHJhaXNlZD17dHJ1ZX1gIHdpdGggYHZhcmlhbnQ9XCJvdXRsaW5lZFwiYCBoYXMgbm8gZWZmZWN0LicpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ2FyZDsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FyZEFjdGlvbnNVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNhcmRBY3Rpb25zJywgc2xvdCk7XG59XG5jb25zdCBjYXJkQWN0aW9uc0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlDYXJkQWN0aW9ucycsIFsncm9vdCcsICdzcGFjaW5nJ10pO1xuZXhwb3J0IGRlZmF1bHQgY2FyZEFjdGlvbnNDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkaXNhYmxlU3BhY2luZ1wiLCBcImNsYXNzTmFtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBnZXRDYXJkQWN0aW9uc1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vY2FyZEFjdGlvbnNDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVTcGFjaW5nXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVNwYWNpbmcgJiYgJ3NwYWNpbmcnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldENhcmRBY3Rpb25zVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IENhcmRBY3Rpb25zUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpQ2FyZEFjdGlvbnMnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUuZGlzYWJsZVNwYWNpbmcgJiYgc3R5bGVzLnNwYWNpbmddO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIHBhZGRpbmc6IDhcbn0sICFvd25lclN0YXRlLmRpc2FibGVTcGFjaW5nICYmIHtcbiAgJyYgPiA6bm90KDpmaXJzdC1vZi10eXBlKSc6IHtcbiAgICBtYXJnaW5MZWZ0OiA4XG4gIH1cbn0pKTtcbmNvbnN0IENhcmRBY3Rpb25zID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ2FyZEFjdGlvbnMoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUNhcmRBY3Rpb25zJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgZGlzYWJsZVNwYWNpbmcgPSBmYWxzZSxcbiAgICBjbGFzc05hbWVcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkaXNhYmxlU3BhY2luZ1xuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChDYXJkQWN0aW9uc1Jvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ2FyZEFjdGlvbnMucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYWN0aW9ucyBkbyBub3QgaGF2ZSBhZGRpdGlvbmFsIG1hcmdpbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVTcGFjaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ2FyZEFjdGlvbnM7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcmRDb250ZW50VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlDYXJkQ29udGVudCcsIHNsb3QpO1xufVxuY29uc3QgY2FyZENvbnRlbnRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQ2FyZENvbnRlbnQnLCBbJ3Jvb3QnXSk7XG5leHBvcnQgZGVmYXVsdCBjYXJkQ29udGVudENsYXNzZXM7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBnZXRDYXJkQ29udGVudFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vY2FyZENvbnRlbnRDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldENhcmRDb250ZW50VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IENhcmRDb250ZW50Um9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpQ2FyZENvbnRlbnQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKCgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBwYWRkaW5nOiAxNixcbiAgICAnJjpsYXN0LWNoaWxkJzoge1xuICAgICAgcGFkZGluZ0JvdHRvbTogMjRcbiAgICB9XG4gIH07XG59KTtcbmNvbnN0IENhcmRDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ2FyZENvbnRlbnQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUNhcmRDb250ZW50J1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCA9ICdkaXYnXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50XG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KENhcmRDb250ZW50Um9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENhcmRDb250ZW50LnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBDYXJkQ29udGVudDsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FyZE1lZGlhVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlDYXJkTWVkaWEnLCBzbG90KTtcbn1cbmNvbnN0IGNhcmRNZWRpYUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlDYXJkTWVkaWEnLCBbJ3Jvb3QnLCAnbWVkaWEnLCAnaW1nJ10pO1xuZXhwb3J0IGRlZmF1bHQgY2FyZE1lZGlhQ2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJpbWFnZVwiLCBcInNyY1wiLCBcInN0eWxlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgY2hhaW5Qcm9wVHlwZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRDYXJkTWVkaWFVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2NhcmRNZWRpYUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgaXNNZWRpYUNvbXBvbmVudCxcbiAgICBpc0ltYWdlQ29tcG9uZW50XG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBpc01lZGlhQ29tcG9uZW50ICYmICdtZWRpYScsIGlzSW1hZ2VDb21wb25lbnQgJiYgJ2ltZyddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Q2FyZE1lZGlhVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IENhcmRNZWRpYVJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUNhcmRNZWRpYScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCB7XG4gICAgICBpc01lZGlhQ29tcG9uZW50LFxuICAgICAgaXNJbWFnZUNvbXBvbmVudFxuICAgIH0gPSBvd25lclN0YXRlO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIGlzTWVkaWFDb21wb25lbnQgJiYgc3R5bGVzLm1lZGlhLCBpc0ltYWdlQ29tcG9uZW50ICYmIHN0eWxlcy5pbWddO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIGJhY2tncm91bmRTaXplOiAnY292ZXInLFxuICBiYWNrZ3JvdW5kUmVwZWF0OiAnbm8tcmVwZWF0JyxcbiAgYmFja2dyb3VuZFBvc2l0aW9uOiAnY2VudGVyJ1xufSwgb3duZXJTdGF0ZS5pc01lZGlhQ29tcG9uZW50ICYmIHtcbiAgd2lkdGg6ICcxMDAlJ1xufSwgb3duZXJTdGF0ZS5pc0ltYWdlQ29tcG9uZW50ICYmIHtcbiAgLy8g4pqg77iPIG9iamVjdC1maXQgaXMgbm90IHN1cHBvcnRlZCBieSBJRTExLlxuICBvYmplY3RGaXQ6ICdjb3Zlcidcbn0pKTtcbmNvbnN0IE1FRElBX0NPTVBPTkVOVFMgPSBbJ3ZpZGVvJywgJ2F1ZGlvJywgJ3BpY3R1cmUnLCAnaWZyYW1lJywgJ2ltZyddO1xuY29uc3QgSU1BR0VfQ09NUE9ORU5UUyA9IFsncGljdHVyZScsICdpbWcnXTtcbmNvbnN0IENhcmRNZWRpYSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIENhcmRNZWRpYShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2FyZE1lZGlhJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgIGltYWdlLFxuICAgIHNyYyxcbiAgICBzdHlsZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgaXNNZWRpYUNvbXBvbmVudCA9IE1FRElBX0NPTVBPTkVOVFMuaW5kZXhPZihjb21wb25lbnQpICE9PSAtMTtcbiAgY29uc3QgY29tcG9zZWRTdHlsZSA9ICFpc01lZGlhQ29tcG9uZW50ICYmIGltYWdlID8gX2V4dGVuZHMoe1xuICAgIGJhY2tncm91bmRJbWFnZTogYHVybChcIiR7aW1hZ2V9XCIpYFxuICB9LCBzdHlsZSkgOiBzdHlsZTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGlzTWVkaWFDb21wb25lbnQsXG4gICAgaXNJbWFnZUNvbXBvbmVudDogSU1BR0VfQ09NUE9ORU5UUy5pbmRleE9mKGNvbXBvbmVudCkgIT09IC0xXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KENhcmRNZWRpYVJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGFzOiBjb21wb25lbnQsXG4gICAgcm9sZTogIWlzTWVkaWFDb21wb25lbnQgJiYgaW1hZ2UgPyAnaW1nJyA6IHVuZGVmaW5lZCxcbiAgICByZWY6IHJlZixcbiAgICBzdHlsZTogY29tcG9zZWRTdHlsZSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHNyYzogaXNNZWRpYUNvbXBvbmVudCA/IGltYWdlIHx8IHNyYyA6IHVuZGVmaW5lZFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENhcmRNZWRpYS5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMubm9kZSwgcHJvcHMgPT4ge1xuICAgIGlmICghcHJvcHMuY2hpbGRyZW4gJiYgIXByb3BzLmltYWdlICYmICFwcm9wcy5zcmMgJiYgIXByb3BzLmNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTVVJOiBFaXRoZXIgYGNoaWxkcmVuYCwgYGltYWdlYCwgYHNyY2Agb3IgYGNvbXBvbmVudGAgcHJvcCBtdXN0IGJlIHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIEltYWdlIHRvIGJlIGRpc3BsYXllZCBhcyBhIGJhY2tncm91bmQgaW1hZ2UuXG4gICAqIEVpdGhlciBgaW1hZ2VgIG9yIGBzcmNgIHByb3AgbXVzdCBiZSBzcGVjaWZpZWQuXG4gICAqIE5vdGUgdGhhdCBjYWxsZXIgbXVzdCBzcGVjaWZ5IGhlaWdodCBvdGhlcndpc2UgdGhlIGltYWdlIHdpbGwgbm90IGJlIHZpc2libGUuXG4gICAqL1xuICBpbWFnZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQW4gYWxpYXMgZm9yIGBpbWFnZWAgcHJvcGVydHkuXG4gICAqIEF2YWlsYWJsZSBvbmx5IHdpdGggbWVkaWEgY29tcG9uZW50cy5cbiAgICogTWVkaWEgY29tcG9uZW50czogYHZpZGVvYCwgYGF1ZGlvYCwgYHBpY3R1cmVgLCBgaWZyYW1lYCwgYGltZ2AuXG4gICAqL1xuICBzcmM6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBDYXJkTWVkaWE7IiwiXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvQnV0dG9uJztcbmltcG9ydCBDYXJkIGZyb20gJ0BtdWkvbWF0ZXJpYWwvQ2FyZCc7XG5pbXBvcnQgQ2FyZEFjdGlvbnMgZnJvbSAnQG11aS9tYXRlcmlhbC9DYXJkQWN0aW9ucyc7XG5pbXBvcnQgQ2FyZENvbnRlbnQgZnJvbSAnQG11aS9tYXRlcmlhbC9DYXJkQ29udGVudCc7XG5pbXBvcnQgQ2FyZE1lZGlhIGZyb20gJ0BtdWkvbWF0ZXJpYWwvQ2FyZE1lZGlhJztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJ0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeSc7XG5cbnR5cGUgQ29udHJpYnV0b3JDYXJkUHJvcHMgPSB7XG4gIGltYWdlVXJsOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgZ2l0aHViTGluazogc3RyaW5nLFxuICBsaW5rZWRJbkxpbms6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgQ29udHJpYnV0b3JDYXJkID0gKHByb3BzOiBDb250cmlidXRvckNhcmRQcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxDYXJkIHN4PXt7IG1heFdpZHRoOiAzNDUgfX0+XG4gICAgICA8Q2FyZE1lZGlhXG4gICAgICAgIGNvbXBvbmVudD1cImltZ1wiXG4gICAgICAgIGhlaWdodD1cIjI1MFwiXG4gICAgICAgIHdpZHRoPVwiMjUwXCJcbiAgICAgICAgaW1hZ2U9e3Byb3BzLmltYWdlVXJsfVxuICAgICAgICBhbHQ9XCJncmVlbiBpZ3VhbmFcIlxuICAgICAgLz5cbiAgICAgIDxDYXJkQ29udGVudD5cbiAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPVwiY29udHJpYnV0b3JOYW1lXCIgZ3V0dGVyQm90dG9tIHZhcmlhbnQ9XCJoNVwiIGNvbXBvbmVudD1cImRpdlwiPlxuICAgICAgICAgIHtwcm9wcy5uYW1lfVxuICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICA8L0NhcmRDb250ZW50PlxuICAgICAgPENhcmRBY3Rpb25zPlxuICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwicHJpbWFyeVwiIGhyZWY9e3Byb3BzLmxpbmtlZEluTGlua30gdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgTGlua2VkSW5cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJwcmltYXJ5XCIgaHJlZj17cHJvcHMuZ2l0aHViTGlua30gdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgR2l0SHViXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9DYXJkQWN0aW9ucz5cbiAgICA8L0NhcmQ+XG4gICk7XG59OyIsImltcG9ydCB7IENvbnRyaWJ1dG9yQ2FyZCB9IGZyb20gJy4uL2NvbXBvbmVudHMvQ29udHJpYnV0b3JDYXJkJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBwaG90b3NPYmogfSBmcm9tICcuLi9hc3NldHMvcGhvdG9zT2JqJztcbmltcG9ydCB7IFR5cG9ncmFwaHkgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcblxuXG5leHBvcnQgY29uc3QgQ29udHJpYnV0b3JzID0gKCkgPT4ge1xuXG4gICAgdHlwZSB1c2VyT2JqVHlwZSA9IHtcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIGdpdGh1Ykxpbms6IHN0cmluZyxcbiAgICAgIGxpbmtlZEluTGluazogc3RyaW5nLFxuICAgICAgaW1hZ2VVcmw6IHN0cmluZ1xuICB9XG4gIFxuXG4gICAgY29uc3QgdXNlcnM6IHVzZXJPYmpUeXBlW10gPSBbe1xuICAgICAgbmFtZTogJ01pY2hhZWwgTGFtJyxcbiAgICAgIGdpdGh1Ykxpbms6ICdodHRwczovL2dpdGh1Yi5jb20vbWxhbWNoYW1rZWUnLFxuICAgICAgbGlua2VkSW5MaW5rOiAnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL21sYW1jaGFta2VlJyxcbiAgICAgIGltYWdlVXJsOiBwaG90b3NPYmoubWljaGFlbFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0xpbGFoIEF1Z3VzdCcsXG4gICAgICBnaXRodWJMaW5rOiAnaHR0cHM6Ly9naXRodWIuY29tL2xpbGFoYXVndXN0JyxcbiAgICAgIGxpbmtlZEluTGluazogJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9pbi9saWxhaGF1Z3VzdC8nLFxuICAgICAgaW1hZ2VVcmw6IHBob3Rvc09iai5saWxhaFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0JyaWFuIEhhbycsXG4gICAgICBnaXRodWJMaW5rOiAnaHR0cHM6Ly93d3cuZ2l0aHViLmNvbS9CcmlhbkhhbycsXG4gICAgICBsaW5rZWRJbkxpbms6ICdodHRwczovL3d3dy5saW5rZWRpbi5jb20vaW4vYnJpYW5oYW8vJyxcbiAgICAgIGltYWdlVXJsOiBwaG90b3NPYmouYnJpYW5cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdTZXJlbmEgQW1vcycsXG4gICAgICBnaXRodWJMaW5rOiAnaHR0cHM6Ly9naXRodWIuY29tL3NhbW9zMTcnLFxuICAgICAgbGlua2VkSW5MaW5rOiAnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL3NlcmVuYS1hbW9zLycsXG4gICAgICBpbWFnZVVybDogcGhvdG9zT2JqLnNlcmVuYVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0Fuc2h1bWFuIFNpbmhhJyxcbiAgICAgIGdpdGh1Ykxpbms6ICdodHRwczovL2dpdGh1Yi5jb20vQW5zaHVtYW5TaW5oYTgnLFxuICAgICAgbGlua2VkSW5MaW5rOiAnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL2Fuc2h1bWFuLXNpbmhhMTk5OC8nLFxuICAgICAgaW1hZ2VVcmw6IHBob3Rvc09iai5hbnNodVxuICAgIH0sXG4gICAgXTtcblxuXG5cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ncGFnZS1ib2R5Jz5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDNcIiBhbGlnbj1cImNlbnRlclwiIGd1dHRlckJvdHRvbSAgc3g9e3sgbWI6IDcsIG10OiA1LCBjb2xvcjoncHJpbWFyeS5tYWluJyB9fSBjbGFzc05hbWU9XCJjb250cmlidXRvcnMtaGVhZGVyXCI+Q29udHJpYnV0b3JzPC9UeXBvZ3JhcGh5PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250cmlidXRvcnMtcGFnZVwiPlxuICAgICAgICAgIHt1c2Vycy5tYXAoKGRldk9iajp1c2VyT2JqVHlwZSwgaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxDb250cmlidXRvckNhcmQgXG4gICAgICAgICAgICAgIG5hbWU9e2Rldk9iai5uYW1lfSBcbiAgICAgICAgICAgICAgZ2l0aHViTGluaz17ZGV2T2JqLmdpdGh1Ykxpbmt9IFxuICAgICAgICAgICAgICBsaW5rZWRJbkxpbms9e2Rldk9iai5saW5rZWRJbkxpbmt9IFxuICAgICAgICAgICAgICBpbWFnZVVybD17ZGV2T2JqLmltYWdlVXJsfSBcbiAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgLz47XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTsgICAgIFxufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciwgY3JlYXRlVGhlbWUgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5pbXBvcnQgeyBSb3V0ZSwgUm91dGVzIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgTmF2QmFyIGZyb20gJy4vY29tcG9uZW50cy9OYXZCYXInO1xuaW1wb3J0IEZvb3RlciBmcm9tICcuL2NvbXBvbmVudHMvRm9vdGVyJztcbmltcG9ydCBIb21lIGZyb20gJy4vcGFnZXMvSG9tZSc7XG5pbXBvcnQgRG9jdW1lbnRhdGlvbiBmcm9tICcuL3BhZ2VzL0RvY3VtZW50YXRpb24nO1xuaW1wb3J0IE5vdEZvdW5kIGZyb20gJy4vcGFnZXMvTm90Rm91bmQnO1xuaW1wb3J0IHsgTmF2UGFuZWxDb250YWluZXIgfSBmcm9tICcuL2NvbnRhaW5lcnMvTmF2UGFuZWxDb250YWluZXInO1xuaW1wb3J0IHsgQm94IH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBDb2RlR2VuZXJhdG9yIH0gZnJvbSAnLi9wYWdlcy9Db2RlR2VuZXJhdG9yJztcbmltcG9ydCBDbGlwYm9hcmQgZnJvbSAnLi9jb21wb25lbnRzL0NsaXBib2FyZCc7XG5pbXBvcnQgQXV0aCBmcm9tICcuL3BhZ2VzL0F1dGgnO1xuaW1wb3J0IHsgQ29udHJpYnV0b3JzIH0gZnJvbSAnLi9wYWdlcy9Db250cmlidXRvcnMnO1xuaW1wb3J0IHsgdXNlQXBwU2VsZWN0b3IgfSBmcm9tICcuL3JlZHV4L2hvb2tzJztcblxuY29uc3QgdGhlbWUgPSBjcmVhdGVUaGVtZSh7XG4gIHBhbGV0dGU6IHtcbiAgICBwcmltYXJ5OiB7XG4gICAgICBtYWluOiAnIzZFMDBCQicsXG4gICAgICBjb250cmFzdFRleHQ6ICcjZmZmJ1xuICAgIH0sXG4gICAgc2Vjb25kYXJ5OiB7XG4gICAgICBtYWluOiAnIzYwNkY3QicsXG4gICAgICBjb250cmFzdFRleHQ6ICcjZmZmJ1xuICAgIH0sXG4gICAgaW5mbzoge1xuICAgICAgbWFpbjogJyM4Nzk1QTEnLFxuICAgICAgY29udHJhc3RUZXh0OiAnI2ZmZidcbiAgICB9XG4gIH0sXG4gIHR5cG9ncmFwaHk6IHtcbiAgICAvLyBmb250RmFtaWx5OiBbXG4gICAgLy8gICAnU291cmNlIENvZGUgUHJvJyxcbiAgICAvLyAgICdtb25vc3BhY2UnLFxuICAgIC8vIF0uam9pbignLCcpLFxuICB9LFxufSk7XG5cbmNvbnN0IEFwcCA9ICgpID0+IHtcbiAgY29uc3Qgc2hvd1Byb2plY3RQYW5lbCA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUubmF2UGFuZWwuc2hvd1Byb2plY3RQYW5lbCk7XG4gIHJldHVybiAoXG4gICAgPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3RoZW1lfT5cbiAgICAgIDxOYXZCYXIgLz5cbiAgICAgIDxCb3hcbiAgICAgICAgY2xhc3NOYW1lPVwiY29udGVudHNcIlxuICAgICAgICBzeD17e1xuICAgICAgICAgIGRpc3BsYXk6ICdncmlkJyxcbiAgICAgICAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiBzaG93UHJvamVjdFBhbmVsID8gJzFmciA1ZnInIDogJzFmciAxMWZyJyxcbiAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPE5hdlBhbmVsQ29udGFpbmVyIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFnZS1jb250YWluZXJcIj5cbiAgICAgICAgICA8Um91dGVzPlxuICAgICAgICAgICAgPFJvdXRlIHBhdGg9XCIvXCIgZWxlbWVudD17PEhvbWUgLz59IC8+XG4gICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9jbGlwYm9hcmQvOnByb2plY3RJZFwiIGVsZW1lbnQ9ezxDbGlwYm9hcmQgLz59IC8+XG4gICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9kb2N1bWVudGF0aW9uXCIgZWxlbWVudD17PERvY3VtZW50YXRpb24gLz59IC8+XG4gICAgICAgICAgICA8Um91dGUgcGF0aD0nL2NvbnRyaWJ1dG9ycycgZWxlbWVudD17PENvbnRyaWJ1dG9ycyAvPn0gLz5cbiAgICAgICAgICAgIDxSb3V0ZSBwYXRoPScvYXV0aGVudGljYXRlJyBlbGVtZW50PXs8QXV0aCAvPn0gLz5cbiAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICBwYXRoPVwiL0NvZGVHZW5lcmF0b3IvOnByb2plY3RJZFwiXG4gICAgICAgICAgICAgIGVsZW1lbnQ9ezxDb2RlR2VuZXJhdG9yIC8+fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiKlwiIGVsZW1lbnQ9ezxOb3RGb3VuZCAvPn0gLz5cbiAgICAgICAgICA8L1JvdXRlcz5cbiAgICAgICAgICA8Rm9vdGVyIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Cb3g+XG4gICAgPC9UaGVtZVByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXBwO1xuIiwiaW1wb3J0IHsgY29uZmlndXJlU3RvcmUgfSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcbmltcG9ydCB0ZXN0Rm9ybVJlZHVjZXIgZnJvbSAnLi9yZWR1Y2Vycy90ZXN0Rm9ybVNsaWNlJztcbmltcG9ydCB1c2VySW5wdXRSZWR1Y2VyIGZyb20gJy4vcmVkdWNlcnMvdXNlcklucHV0U2xpY2UnO1xuaW1wb3J0IG5hdlBhbmVsUmVkdWNlciBmcm9tICcuL3JlZHVjZXJzL25hdlBhbmVsU2xpY2UnO1xuaW1wb3J0IGNvZGVTbGljZVJlZHVjZXIgZnJvbSAnLi9yZWR1Y2Vycy9jb2RlU2xpY2UnO1xuaW1wb3J0IHVzZXJJbmZvUmVkdWNlciBmcm9tICcuL3JlZHVjZXJzL3VzZXJJbmZvU2xpY2UnO1xuaW1wb3J0IGNsaXBib2FyZFJlZHVjZXIgZnJvbSAnLi9yZWR1Y2Vycy9jbGlwYm9hcmRTbGljZSc7XG5cbmV4cG9ydCBjb25zdCBzdG9yZSA9IGNvbmZpZ3VyZVN0b3JlKHtcbiAgcmVkdWNlcjoge1xuICAgIHRlc3RGb3JtOiB0ZXN0Rm9ybVJlZHVjZXIsXG4gICAgdXNlcklucHV0OiB1c2VySW5wdXRSZWR1Y2VyLFxuICAgIGNvZGU6IGNvZGVTbGljZVJlZHVjZXIsXG4gICAgY2xpcGJvYXJkOiBjbGlwYm9hcmRSZWR1Y2VyLFxuICAgIHVzZXJJbmZvOiB1c2VySW5mb1JlZHVjZXIsXG4gICAgbmF2UGFuZWw6IG5hdlBhbmVsUmVkdWNlcixcbiAgfSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSb290U3RhdGUgPSBSZXR1cm5UeXBlPHR5cGVvZiBzdG9yZS5nZXRTdGF0ZT47XG5leHBvcnQgdHlwZSBBcHBEaXNwYXRjaCA9IHR5cGVvZiBzdG9yZS5kaXNwYXRjaDtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tL2NsaWVudCc7XG5pbXBvcnQgQXBwIGZyb20gJy4vQXBwJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc3RvcmUgfSBmcm9tICcuL3JlZHV4L3N0b3JlJztcbmltcG9ydCB7IEJyb3dzZXJSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcblxuY29uc3Qgcm9vdCA9IFJlYWN0RE9NLmNyZWF0ZVJvb3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKSEpO1xucm9vdC5yZW5kZXIoXG4gIDxQcm92aWRlciBzdG9yZT17c3RvcmV9PlxuICAgIDxCcm93c2VyUm91dGVyPlxuICAgICAgPEFwcCAvPlxuICAgIDwvQnJvd3NlclJvdXRlcj5cbiAgPC9Qcm92aWRlcj5cbik7XG4iXSwibmFtZXMiOlsibGVhZlByb3RvdHlwZXMiLCJnZXRQcm90byIsIlN0eWxlU2hlZXQiLCJvcHRpb25zIiwiX3RoaXMiLCJ0aGlzIiwiX2luc2VydFRhZyIsInRhZyIsImJlZm9yZSIsInRhZ3MiLCJsZW5ndGgiLCJpbnNlcnRpb25Qb2ludCIsIm5leHRTaWJsaW5nIiwicHJlcGVuZCIsImNvbnRhaW5lciIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJwdXNoIiwiaXNTcGVlZHkiLCJ1bmRlZmluZWQiLCJzcGVlZHkiLCJjdHIiLCJub25jZSIsImtleSIsIl9wcm90byIsInByb3RvdHlwZSIsImh5ZHJhdGUiLCJub2RlcyIsImZvckVhY2giLCJpbnNlcnQiLCJydWxlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsImNyZWF0ZVN0eWxlRWxlbWVudCIsInNoZWV0IiwiaSIsInN0eWxlU2hlZXRzIiwib3duZXJOb2RlIiwic2hlZXRGb3JUYWciLCJpbnNlcnRSdWxlIiwiY3NzUnVsZXMiLCJlIiwiZmx1c2giLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJhYnMiLCJNYXRoIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiT2JqZWN0IiwiYXNzaWduIiwidHJpbSIsInZhbHVlIiwicmVwbGFjZSIsInBhdHRlcm4iLCJyZXBsYWNlbWVudCIsImluZGV4b2YiLCJzZWFyY2giLCJpbmRleE9mIiwiaW5kZXgiLCJjaGFyQ29kZUF0IiwiYmVnaW4iLCJlbmQiLCJzbGljZSIsImFycmF5IiwibGluZSIsImNvbHVtbiIsInBvc2l0aW9uIiwiY2hhcmFjdGVyIiwiY2hhcmFjdGVycyIsIm5vZGUiLCJyb290IiwicGFyZW50IiwidHlwZSIsInByb3BzIiwiY2hpbGRyZW4iLCJyZXR1cm4iLCJjb3B5IiwicHJldiIsIm5leHQiLCJwZWVrIiwiY2FyZXQiLCJ0b2tlbiIsImFsbG9jIiwiZGVhbGxvYyIsImRlbGltaXQiLCJkZWxpbWl0ZXIiLCJ3aGl0ZXNwYWNlIiwiZXNjYXBpbmciLCJjb3VudCIsImNvbW1lbnRlciIsImlkZW50aWZpZXIiLCJNUyIsIk1PWiIsIldFQktJVCIsIkNPTU1FTlQiLCJERUNMQVJBVElPTiIsIktFWUZSQU1FUyIsInNlcmlhbGl6ZSIsImNhbGxiYWNrIiwib3V0cHV0Iiwic3RyaW5naWZ5IiwiZWxlbWVudCIsImpvaW4iLCJwcmVmaXgiLCJoYXNoIiwiY29tcGlsZSIsInBhcnNlIiwicnVsZXMiLCJydWxlc2V0cyIsInBzZXVkbyIsInBvaW50cyIsImRlY2xhcmF0aW9ucyIsIm9mZnNldCIsImF0cnVsZSIsInByb3BlcnR5IiwicHJldmlvdXMiLCJ2YXJpYWJsZSIsInNjYW5uaW5nIiwiYW1wZXJzYW5kIiwicmVmZXJlbmNlIiwiY29tbWVudCIsImRlY2xhcmF0aW9uIiwicnVsZXNldCIsInBvc3QiLCJzaXplIiwiaiIsImsiLCJ4IiwieSIsInoiLCJpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmciLCJmaXhlZEVsZW1lbnRzIiwiV2Vha01hcCIsImNvbXBhdCIsImlzSW1wbGljaXRSdWxlIiwiZ2V0Iiwic2V0IiwicGFyc2VkIiwidG9SdWxlcyIsImdldFJ1bGVzIiwicGFyZW50UnVsZXMiLCJyZW1vdmVMYWJlbCIsImRlZmF1bHRTdHlsaXNQbHVnaW5zIiwibWFwIiwiZXhlYyIsIm1hdGNoIiwic3NyU3R5bGVzIiwicXVlcnlTZWxlY3RvckFsbCIsIkFycmF5IiwiY2FsbCIsImdldEF0dHJpYnV0ZSIsImhlYWQiLCJfaW5zZXJ0Iiwic3R5bGlzUGx1Z2lucyIsImluc2VydGVkIiwibm9kZXNUb0h5ZHJhdGUiLCJhdHRyaWIiLCJzcGxpdCIsImN1cnJlbnRTaGVldCIsImNvbGxlY3Rpb24iLCJmaW5hbGl6aW5nUGx1Z2lucyIsInNlcmlhbGl6ZXIiLCJjb25jYXQiLCJzZWxlY3RvciIsInNlcmlhbGl6ZWQiLCJzaG91bGRDYWNoZSIsInN0eWxlcyIsImNhY2hlIiwibmFtZSIsInJlZ2lzdGVyZWQiLCJmbiIsImNyZWF0ZSIsImFyZyIsIkVtb3Rpb25DYWNoZUNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiSFRNTEVsZW1lbnQiLCJQcm92aWRlciIsIndpdGhFbW90aW9uQ2FjaGUiLCJmdW5jIiwiZm9yd2FyZFJlZiIsInJlZiIsInVzZUNvbnRleHQiLCJUaGVtZUNvbnRleHQiLCJzdHIiLCJoIiwibGVuIiwidG9TdHJpbmciLCJhbmltYXRpb25JdGVyYXRpb25Db3VudCIsImJvcmRlckltYWdlT3V0c2V0IiwiYm9yZGVySW1hZ2VTbGljZSIsImJvcmRlckltYWdlV2lkdGgiLCJib3hGbGV4IiwiYm94RmxleEdyb3VwIiwiYm94T3JkaW5hbEdyb3VwIiwiY29sdW1uQ291bnQiLCJjb2x1bW5zIiwiZmxleCIsImZsZXhHcm93IiwiZmxleFBvc2l0aXZlIiwiZmxleFNocmluayIsImZsZXhOZWdhdGl2ZSIsImZsZXhPcmRlciIsImdyaWRSb3ciLCJncmlkUm93RW5kIiwiZ3JpZFJvd1NwYW4iLCJncmlkUm93U3RhcnQiLCJncmlkQ29sdW1uIiwiZ3JpZENvbHVtbkVuZCIsImdyaWRDb2x1bW5TcGFuIiwiZ3JpZENvbHVtblN0YXJ0IiwibXNHcmlkUm93IiwibXNHcmlkUm93U3BhbiIsIm1zR3JpZENvbHVtbiIsIm1zR3JpZENvbHVtblNwYW4iLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCIsIm9wYWNpdHkiLCJvcmRlciIsIm9ycGhhbnMiLCJ0YWJTaXplIiwid2lkb3dzIiwiekluZGV4Iiwiem9vbSIsIldlYmtpdExpbmVDbGFtcCIsImZpbGxPcGFjaXR5IiwiZmxvb2RPcGFjaXR5Iiwic3RvcE9wYWNpdHkiLCJzdHJva2VEYXNoYXJyYXkiLCJzdHJva2VEYXNob2Zmc2V0Iiwic3Ryb2tlTWl0ZXJsaW1pdCIsInN0cm9rZU9wYWNpdHkiLCJzdHJva2VXaWR0aCIsImh5cGhlbmF0ZVJlZ2V4IiwiYW5pbWF0aW9uUmVnZXgiLCJpc0N1c3RvbVByb3BlcnR5IiwiaXNQcm9jZXNzYWJsZVZhbHVlIiwicHJvY2Vzc1N0eWxlTmFtZSIsInN0eWxlTmFtZSIsInRvTG93ZXJDYXNlIiwicHJvY2Vzc1N0eWxlVmFsdWUiLCJwMSIsInAyIiwiY3Vyc29yIiwiaGFuZGxlSW50ZXJwb2xhdGlvbiIsIm1lcmdlZFByb3BzIiwiaW50ZXJwb2xhdGlvbiIsIl9fZW1vdGlvbl9zdHlsZXMiLCJhbmltIiwib2JqIiwic3RyaW5nIiwiaXNBcnJheSIsIl9rZXkiLCJpbnRlcnBvbGF0ZWQiLCJfaSIsImNyZWF0ZVN0cmluZ0Zyb21PYmplY3QiLCJwcmV2aW91c0N1cnNvciIsInJlc3VsdCIsImNhY2hlZCIsImxhYmVsUGF0dGVybiIsInNlcmlhbGl6ZVN0eWxlcyIsImFyZ3MiLCJzdHJpbmdNb2RlIiwic3RyaW5ncyIsInJhdyIsImxhc3RJbmRleCIsImlkZW50aWZpZXJOYW1lIiwidXNlSW5zZXJ0aW9uRWZmZWN0IiwidXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayIsInVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsImdldFJlZ2lzdGVyZWRTdHlsZXMiLCJyZWdpc3RlcmVkU3R5bGVzIiwiY2xhc3NOYW1lcyIsInJhd0NsYXNzTmFtZSIsImNsYXNzTmFtZSIsInJlZ2lzdGVyU3R5bGVzIiwiaXNTdHJpbmdUYWciLCJpbnNlcnRTdHlsZXMiLCJjdXJyZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImV4cG9ydHMiLCJfY3JlYXRlU3ZnSWNvbiIsIl9qc3hSdW50aW1lIiwiX2RlZmF1bHQiLCJkZWZhdWx0IiwianN4IiwiZCIsIm5vZGVJbnRlcm9wIiwiX19lc01vZHVsZSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImhhcyIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaGFzT3duUHJvcGVydHkiLCJkZXNjIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJlbnVtZXJhYmxlIiwiX3V0aWxzIiwiY3JlYXRlU3ZnSWNvbiIsImJsYWNrIiwid2hpdGUiLCJBMTAwIiwiQTIwMCIsIkE0MDAiLCJBNzAwIiwiX2V4Y2x1ZGVkIiwibGlnaHQiLCJ0ZXh0IiwicHJpbWFyeSIsInNlY29uZGFyeSIsImRpc2FibGVkIiwiZGl2aWRlciIsImJhY2tncm91bmQiLCJwYXBlciIsImFjdGlvbiIsImFjdGl2ZSIsImhvdmVyIiwiaG92ZXJPcGFjaXR5Iiwic2VsZWN0ZWQiLCJzZWxlY3RlZE9wYWNpdHkiLCJkaXNhYmxlZEJhY2tncm91bmQiLCJkaXNhYmxlZE9wYWNpdHkiLCJmb2N1cyIsImZvY3VzT3BhY2l0eSIsImFjdGl2YXRlZE9wYWNpdHkiLCJkYXJrIiwiaWNvbiIsImFkZExpZ2h0T3JEYXJrIiwiaW50ZW50IiwiZGlyZWN0aW9uIiwic2hhZGUiLCJ0b25hbE9mZnNldCIsInRvbmFsT2Zmc2V0TGlnaHQiLCJ0b25hbE9mZnNldERhcmsiLCJtYWluIiwiY2FzZUFsbENhcHMiLCJ0ZXh0VHJhbnNmb3JtIiwiZGVmYXVsdEZvbnRGYW1pbHkiLCJjcmVhdGVUeXBvZ3JhcGh5IiwicGFsZXR0ZSIsInR5cG9ncmFwaHkiLCJfcmVmIiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwiZm9udFdlaWdodExpZ2h0IiwiZm9udFdlaWdodFJlZ3VsYXIiLCJmb250V2VpZ2h0TWVkaXVtIiwiZm9udFdlaWdodEJvbGQiLCJodG1sRm9udFNpemUiLCJhbGxWYXJpYW50cyIsInB4VG9SZW0iLCJweFRvUmVtMiIsIm90aGVyIiwiY29lZiIsImJ1aWxkVmFyaWFudCIsImxldHRlclNwYWNpbmciLCJjYXNpbmciLCJyb3VuZCIsInZhcmlhbnRzIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2Iiwic3VidGl0bGUxIiwic3VidGl0bGUyIiwiYm9keTEiLCJib2R5MiIsImJ1dHRvbiIsImNhcHRpb24iLCJvdmVybGluZSIsImRlZXBtZXJnZSIsImNsb25lIiwiY3JlYXRlU2hhZG93IiwicHgiLCJlYXNpbmciLCJlYXNlSW5PdXQiLCJlYXNlT3V0IiwiZWFzZUluIiwic2hhcnAiLCJkdXJhdGlvbiIsInNob3J0ZXN0Iiwic2hvcnRlciIsInNob3J0Iiwic3RhbmRhcmQiLCJjb21wbGV4IiwiZW50ZXJpbmdTY3JlZW4iLCJsZWF2aW5nU2NyZWVuIiwiZm9ybWF0TXMiLCJtaWxsaXNlY29uZHMiLCJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCJoZWlnaHQiLCJjb25zdGFudCIsImNyZWF0ZVRyYW5zaXRpb25zIiwiaW5wdXRUcmFuc2l0aW9ucyIsIm1lcmdlZEVhc2luZyIsIm1lcmdlZER1cmF0aW9uIiwiZHVyYXRpb25PcHRpb24iLCJlYXNpbmdPcHRpb24iLCJkZWxheSIsImFuaW1hdGVkUHJvcCIsIm1vYmlsZVN0ZXBwZXIiLCJmYWIiLCJzcGVlZERpYWwiLCJhcHBCYXIiLCJkcmF3ZXIiLCJtb2RhbCIsInNuYWNrYmFyIiwidG9vbHRpcCIsIm1peGlucyIsIm1peGluc0lucHV0IiwicGFsZXR0ZUlucHV0IiwidHJhbnNpdGlvbnMiLCJ0cmFuc2l0aW9uc0lucHV0IiwidHlwb2dyYXBoeUlucHV0IiwidmFycyIsIkVycm9yIiwibW9kZSIsImNvbnRyYXN0VGhyZXNob2xkIiwiZ2V0RGVmYXVsdFByaW1hcnkiLCJnZXREZWZhdWx0U2Vjb25kYXJ5IiwiZXJyb3IiLCJnZXREZWZhdWx0RXJyb3IiLCJpbmZvIiwiZ2V0RGVmYXVsdEluZm8iLCJzdWNjZXNzIiwiZ2V0RGVmYXVsdFN1Y2Nlc3MiLCJ3YXJuaW5nIiwiZ2V0RGVmYXVsdFdhcm5pbmciLCJnZXRDb250cmFzdFRleHQiLCJhdWdtZW50Q29sb3IiLCJjb2xvciIsIm1haW5TaGFkZSIsImxpZ2h0U2hhZGUiLCJkYXJrU2hhZGUiLCJKU09OIiwiY29udHJhc3RUZXh0IiwibW9kZXMiLCJjb21tb24iLCJncmV5IiwiY3JlYXRlUGFsZXR0ZSIsInN5c3RlbVRoZW1lIiwibXVpVGhlbWUiLCJicmVha3BvaW50cyIsInRvb2xiYXIiLCJtaW5IZWlnaHQiLCJ1cCIsInNoYWRvd3MiLCJyZWR1Y2UiLCJhY2MiLCJhcmd1bWVudCIsImlzRW1wdHkiLCJwcm9wc1RvQ2xhc3NLZXkiLCJ2YXJpYW50IiwiY2xhc3NLZXkiLCJrZXlzIiwic29ydCIsImNhcGl0YWxpemUiLCJfZXhjbHVkZWQyIiwiX2V4Y2x1ZGVkMyIsInNob3VsZEZvcndhcmRQcm9wIiwicHJvcCIsInN5c3RlbURlZmF1bHRUaGVtZSIsImNyZWF0ZVRoZW1lIiwicm9vdFNob3VsZEZvcndhcmRQcm9wIiwic2xvdFNob3VsZEZvcndhcmRQcm9wIiwic3R5bGVkIiwiaW5wdXQiLCJkZWZhdWx0VGhlbWUiLCJzdHlsZUZ1bmN0aW9uU3giLCJzeXN0ZW1TeCIsInRoZW1lIiwiX19tdWlfc3lzdGVtU3giLCJpbnB1dE9wdGlvbnMiLCJmaWx0ZXIiLCJzdHlsZSIsImNvbXBvbmVudE5hbWUiLCJzbG90IiwiY29tcG9uZW50U2xvdCIsInNraXBWYXJpYW50c1Jlc29sdmVyIiwiaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciIsInNraXBTeCIsImlucHV0U2tpcFN4Iiwib3ZlcnJpZGVzUmVzb2x2ZXIiLCJzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiIsImRlZmF1bHRTdHlsZWRSZXNvbHZlciIsImxhYmVsIiwibXVpU3R5bGVkUmVzb2x2ZXIiLCJzdHlsZUFyZyIsImV4cHJlc3Npb25zIiwiZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lIiwic3R5bGVzQXJnIiwiX19lbW90aW9uX3JlYWwiLCJ0aGVtZUlucHV0IiwidHJhbnNmb3JtZWRTdHlsZUFyZyIsInN0eWxlT3ZlcnJpZGVzIiwiY29tcG9uZW50cyIsImdldFN0eWxlT3ZlcnJpZGVzIiwicmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyIsImVudHJpZXMiLCJzbG90S2V5Iiwic2xvdFN0eWxlIiwiX3RoZW1lJGNvbXBvbmVudHMiLCJfdGhlbWUkY29tcG9uZW50cyRuYW0iLCJvd25lclN0YXRlIiwidmFyaWFudHNTdHlsZXMiLCJ0aGVtZVZhcmlhbnRzIiwidGhlbWVWYXJpYW50IiwiaXNNYXRjaCIsInZhcmlhbnRzUmVzb2x2ZXIiLCJkZWZpbml0aW9uIiwiZ2V0VmFyaWFudFN0eWxlcyIsIm51bU9mQ3VzdG9tRm5zQXBwbGllZCIsInBsYWNlaG9sZGVycyIsImZpbGwiLCJfcmVmMiIsIndpdGhDb25maWciLCJjcmVhdGVTdHlsZWQiLCJwYXJhbXMiLCJkZWZhdWx0UHJvcHMiLCJyZXNvbHZlUHJvcHMiLCJnZXRUaGVtZVByb3BzIiwidXNlVGhlbWUiLCJnZXRTdmdJY29uVXRpbGl0eUNsYXNzIiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3MiLCJTdmdJY29uUm9vdCIsIl90aGVtZSR0cmFuc2l0aW9ucyIsIl90aGVtZSR0cmFuc2l0aW9ucyRjciIsIl90aGVtZSR0cmFuc2l0aW9uczIiLCJfdGhlbWUkdHJhbnNpdGlvbnMyJGQiLCJfdGhlbWUkdHlwb2dyYXBoeSIsIl90aGVtZSR0eXBvZ3JhcGh5JHB4VCIsIl90aGVtZSR0eXBvZ3JhcGh5MiIsIl90aGVtZSR0eXBvZ3JhcGh5MiRweCIsIl90aGVtZSR0eXBvZ3JhcGh5MyIsIl90aGVtZSR0eXBvZ3JhcGh5MyRweCIsIl9wYWxldHRlJG93bmVyU3RhdGUkYyIsIl9wYWxldHRlIiwiX3BhbGV0dGUkb3duZXJTdGF0ZSRjMiIsIl9wYWxldHRlMiIsIl9wYWxldHRlMiRhY3Rpb24iLCJfcGFsZXR0ZTMiLCJfcGFsZXR0ZTMkYWN0aW9uIiwidXNlclNlbGVjdCIsIndpZHRoIiwiZGlzcGxheSIsInRyYW5zaXRpb24iLCJpbmhlcml0Iiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsIlN2Z0ljb24iLCJpblByb3BzIiwidXNlVGhlbWVQcm9wcyIsImNvbXBvbmVudCIsImh0bWxDb2xvciIsImluaGVyaXRWaWV3Qm94IiwidGl0bGVBY2Nlc3MiLCJ2aWV3Qm94IiwiaW5zdGFuY2VGb250U2l6ZSIsIm1vcmUiLCJjbGFzc2VzIiwic2xvdHMiLCJjb21wb3NlQ2xhc3NlcyIsInVzZVV0aWxpdHlDbGFzc2VzIiwiYXMiLCJmb2N1c2FibGUiLCJyb2xlIiwibXVpTmFtZSIsInBhdGgiLCJkaXNwbGF5TmFtZSIsIkNvbXBvbmVudCIsInZhbGlkYXRvciIsInJlYXNvbiIsImNvbXBvbmVudE5hbWVJbkVycm9yIiwicHJvcE5hbWUiLCJsb2NhdGlvbiIsInByb3BGdWxsTmFtZSIsInVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciIsImNvbmZpZ3VyZSIsImdlbmVyYXRvciIsImNvbnNvbGUiLCJ3YXJuIiwiQ2xhc3NOYW1lR2VuZXJhdG9yIiwibXVpTmFtZXMiLCJjb250cm9sbGVkIiwiZGVmYXVsdFByb3AiLCJzdGF0ZSIsImlzQ29udHJvbGxlZCIsInZhbHVlU3RhdGUiLCJzZXRWYWx1ZSIsIm5ld1ZhbHVlIiwiaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0IiwiaGFkS2V5Ym9hcmRFdmVudCIsImhhZEZvY3VzVmlzaWJsZVJlY2VudGx5IiwiaW5wdXRUeXBlc1doaXRlbGlzdCIsInVybCIsInRlbCIsImVtYWlsIiwicGFzc3dvcmQiLCJudW1iZXIiLCJkYXRlIiwibW9udGgiLCJ3ZWVrIiwidGltZSIsImRhdGV0aW1lIiwiaGFuZGxlS2V5RG93biIsImV2ZW50IiwibWV0YUtleSIsImFsdEtleSIsImN0cmxLZXkiLCJoYW5kbGVQb2ludGVyRG93biIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJ2aXNpYmlsaXR5U3RhdGUiLCJkb2MiLCJvd25lckRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImlzRm9jdXNWaXNpYmxlUmVmIiwib25Gb2N1cyIsInRhcmdldCIsIm1hdGNoZXMiLCJ0YWdOYW1lIiwicmVhZE9ubHkiLCJpc0NvbnRlbnRFZGl0YWJsZSIsImZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5IiwiaXNGb2N1c1Zpc2libGUiLCJvbkJsdXIiLCJ3aW5kb3ciLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwicmVhY3RQcm9wc1JlZ2V4IiwidGVzdCIsInRlc3RPbWl0UHJvcHNPblN0cmluZ1RhZyIsInRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudCIsImdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCIsImNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHMiLCJpc1JlYWwiLCJvcHRpb25zU2hvdWxkRm9yd2FyZFByb3AiLCJfX2Vtb3Rpb25fZm9yd2FyZFByb3AiLCJJbnNlcnRpb24iLCJuZXdTdHlsZWQiLCJ0YXJnZXRDbGFzc05hbWUiLCJiYXNlVGFnIiwiX19lbW90aW9uX2Jhc2UiLCJkZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AiLCJzaG91bGRVc2VBcyIsImFyZ3VtZW50cyIsImFwcGx5IiwiU3R5bGVkIiwidyIsIkZpbmFsVGFnIiwiY2xhc3NJbnRlcnBvbGF0aW9ucyIsIlQiLCJmaW5hbFNob3VsZEZvcndhcmRQcm9wIiwibmV3UHJvcHMiLCJGcmFnbWVudCIsIndpdGhDb21wb25lbnQiLCJuZXh0VGFnIiwibmV4dE9wdGlvbnMiLCJpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIiwicHJvY2Vzc29yIiwidmFsdWVzIiwieHMiLCJzbSIsIm1kIiwibGciLCJ4bCIsImRlZmF1bHRCcmVha3BvaW50cyIsImhhbmRsZUJyZWFrcG9pbnRzIiwicHJvcFZhbHVlIiwic3R5bGVGcm9tUHJvcFZhbHVlIiwidGhlbWVCcmVha3BvaW50cyIsIml0ZW0iLCJicmVha3BvaW50IiwiY3NzS2V5IiwiY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0IiwiYnJlYWtwb2ludHNJbnB1dCIsIl9icmVha3BvaW50c0lucHV0JGtleSIsInJlbW92ZVVudXNlZEJyZWFrcG9pbnRzIiwiYnJlYWtwb2ludEtleXMiLCJicmVha3BvaW50T3V0cHV0IiwibWVyZ2VCcmVha3BvaW50c0luT3JkZXIiLCJlbXB0eUJyZWFrcG9pbnRzIiwibWVyZ2VkT3V0cHV0IiwicmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMiLCJicmVha3BvaW50VmFsdWVzIiwiYmFzZSIsImN1c3RvbUJhc2UiLCJicmVha3BvaW50c0tleXMiLCJjb21wdXRlQnJlYWtwb2ludHNCYXNlIiwiY2xhbXAiLCJtaW4iLCJtYXgiLCJkZWNvbXBvc2VDb2xvciIsImNoYXJBdCIsInJlIiwiUmVnRXhwIiwiY29sb3JzIiwibiIsInBhcnNlSW50IiwiaGV4VG9SZ2IiLCJtYXJrZXIiLCJzdWJzdHJpbmciLCJjb2xvclNwYWNlIiwic2hpZnQiLCJwYXJzZUZsb2F0IiwicmVjb21wb3NlQ29sb3IiLCJnZXRMdW1pbmFuY2UiLCJyZ2IiLCJzIiwibCIsImEiLCJmIiwiaHNsVG9SZ2IiLCJ2YWwiLCJOdW1iZXIiLCJ0b0ZpeGVkIiwiZ2V0Q29udHJhc3RSYXRpbyIsImZvcmVncm91bmQiLCJsdW1BIiwibHVtQiIsImFscGhhIiwiZGFya2VuIiwiY29lZmZpY2llbnQiLCJsaWdodGVuIiwiYm9yZGVyUmFkaXVzIiwic3BhY2luZyIsInNwYWNpbmdJbnB1dCIsInNoYXBlIiwic2hhcGVJbnB1dCIsInVuaXQiLCJzdGVwIiwic29ydGVkVmFsdWVzIiwiYnJlYWtwb2ludHNBc0FycmF5IiwiYnJlYWtwb2ludDEiLCJicmVha3BvaW50MiIsInNvcnRCcmVha3BvaW50c1ZhbHVlcyIsImRvd24iLCJiZXR3ZWVuIiwic3RhcnQiLCJlbmRJbmRleCIsIm9ubHkiLCJub3QiLCJrZXlJbmRleCIsImNyZWF0ZUJyZWFrcG9pbnRzIiwibXVpIiwidHJhbnNmb3JtIiwiYXJnc0lucHV0IiwiY3JlYXRlU3BhY2luZyIsImhhbmRsZXJzIiwiZmlsdGVyUHJvcHMiLCJtZXJnZSIsInByb3BUeXBlcyIsImdldEJvcmRlciIsImJvcmRlciIsInRoZW1lS2V5IiwiYm9yZGVyVG9wIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJCb3R0b20iLCJib3JkZXJMZWZ0IiwiYm9yZGVyQ29sb3IiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJCb3R0b21Db2xvciIsImJvcmRlckxlZnRDb2xvciIsInRyYW5zZm9ybWVyIiwiY3NzUHJvcGVydHkiLCJnYXAiLCJjb2x1bW5HYXAiLCJyb3dHYXAiLCJtYXhXaWR0aCIsIl9wcm9wcyR0aGVtZSIsIl9wcm9wcyR0aGVtZSRicmVha3BvaSIsIl9wcm9wcyR0aGVtZSRicmVha3BvaTIiLCJtaW5XaWR0aCIsIm1heEhlaWdodCIsImZvbnRTdHlsZSIsInRleHRBbGlnbiIsImZpbHRlclByb3BzTWFwcGluZyIsImJvcmRlcnMiLCJmbGV4Ym94IiwiZ3JpZCIsInBvc2l0aW9ucyIsInNpemluZyIsInN0eWxlRnVuY3Rpb25NYXBwaW5nIiwicHJvcFRvU3R5bGVGdW5jdGlvbiIsInN0eWxlRm5OYW1lIiwicHJvcGVydGllcyIsIm0iLCJwIiwiZGlyZWN0aW9ucyIsInQiLCJyIiwiYiIsImFsaWFzZXMiLCJtYXJnaW5YIiwibWFyZ2luWSIsInBhZGRpbmdYIiwicGFkZGluZ1kiLCJnZXRDc3NQcm9wZXJ0aWVzIiwiZGlyIiwibWVtb2l6ZSIsIm1hcmdpbktleXMiLCJwYWRkaW5nS2V5cyIsInNwYWNpbmdLZXlzIiwiY3JlYXRlVW5hcnlVbml0IiwiZGVmYXVsdFZhbHVlIiwiX2dldFBhdGgiLCJ0aGVtZVNwYWNpbmciLCJjcmVhdGVVbmFyeVNwYWNpbmciLCJnZXRWYWx1ZSIsInRyYW5zZm9ybWVkIiwiY3NzUHJvcGVydGllcyIsImdldFN0eWxlRnJvbVByb3BWYWx1ZSIsInJlc29sdmVDc3NQcm9wZXJ0eSIsIm1hcmdpbiIsInBhZGRpbmciLCJnZXRQYXRoIiwiY2hlY2tWYXJzIiwidGhlbWVNYXBwaW5nIiwicHJvcFZhbHVlRmluYWwiLCJ1c2VyVmFsdWUiLCJnZXRUaGVtZVZhbHVlIiwiaW5wdXRQcm9wcyIsInN0eWxlRnVuY3Rpb24iLCJzeCIsInRyYXZlcnNlIiwic3hJbnB1dCIsInN4T2JqZWN0IiwiY3NzIiwic3R5bGVLZXkiLCJtYXliZUZuIiwiYnJlYWtwb2ludHNWYWx1ZXMiLCJvYmplY3RzIiwiYWxsS2V5cyIsIm9iamVjdCIsInVuaW9uIiwiU2V0IiwiZXZlcnkiLCJvYmplY3RzSGF2ZVNhbWVLZXlzIiwidW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4IiwiY29udGV4dFRoZW1lIiwiZGVmYXVsdEdlbmVyYXRvciIsImdlbmVyYXRlIiwicmVzZXQiLCJjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IiLCJ0b1VwcGVyQ2FzZSIsImdldFV0aWxpdHlDbGFzcyIsImNyZWF0ZUNoYWluZWRGdW5jdGlvbiIsImZ1bmNzIiwiZGVib3VuY2UiLCJ3YWl0IiwidGltZW91dCIsImRlYm91bmNlZCIsImNsZWFyIiwiaXNQbGFpbk9iamVjdCIsImNvbnN0cnVjdG9yIiwic291cmNlIiwiZm9ybWF0TXVpRXJyb3JNZXNzYWdlIiwiY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImdsb2JhbFN0YXRlQ2xhc3Nlc01hcHBpbmciLCJjaGVja2VkIiwiY29tcGxldGVkIiwiZXhwYW5kZWQiLCJmb2N1c2VkIiwiZm9jdXNWaXNpYmxlIiwicmVxdWlyZWQiLCJnbG9iYWxTdGF0ZVByZWZpeCIsImdsb2JhbFN0YXRlQ2xhc3MiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIiwib3duZXJXaW5kb3ciLCJkZWZhdWx0VmlldyIsInNldFJlZiIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VGb3JrUmVmIiwicmVmQSIsInJlZkIiLCJyZWZWYWx1ZSIsImdsb2JhbElkIiwibWF5YmVSZWFjdFVzZUlkIiwidXNlSWQiLCJpZE92ZXJyaWRlIiwicmVhY3RJZCIsImRlZmF1bHRJZCIsInNldERlZmF1bHRJZCIsImlkIiwidXNlR2xvYmFsSWQiLCJtb2R1bGUiLCJ1dGlscyIsInNldHRsZSIsImNvb2tpZXMiLCJidWlsZFVSTCIsImJ1aWxkRnVsbFBhdGgiLCJwYXJzZUhlYWRlcnMiLCJpc1VSTFNhbWVPcmlnaW4iLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsIkF4aW9zRXJyb3IiLCJDYW5jZWxlZEVycm9yIiwicGFyc2VQcm90b2NvbCIsImNvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25DYW5jZWxlZCIsInJlcXVlc3REYXRhIiwiZGF0YSIsInJlcXVlc3RIZWFkZXJzIiwiaGVhZGVycyIsInJlc3BvbnNlVHlwZSIsImRvbmUiLCJjYW5jZWxUb2tlbiIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImlzRm9ybURhdGEiLCJpc1N0YW5kYXJkQnJvd3NlckVudiIsInJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdCIsImF1dGgiLCJ1c2VybmFtZSIsInVuZXNjYXBlIiwiQXV0aG9yaXphdGlvbiIsImJ0b2EiLCJmdWxsUGF0aCIsImJhc2VVUkwiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJlcnIiLCJvcGVuIiwibWV0aG9kIiwicGFyYW1zU2VyaWFsaXplciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwidHJhbnNpdGlvbmFsIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsIkVUSU1FRE9VVCIsInhzcmZWYWx1ZSIsIndpdGhDcmVkZW50aWFscyIsInhzcmZDb29raWVOYW1lIiwicmVhZCIsInhzcmZIZWFkZXJOYW1lIiwic2V0UmVxdWVzdEhlYWRlciIsImlzVW5kZWZpbmVkIiwib25Eb3dubG9hZFByb2dyZXNzIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbCIsImFib3J0Iiwic3Vic2NyaWJlIiwiYWJvcnRlZCIsInByb3RvY29sIiwiRVJSX0JBRF9SRVFVRVNUIiwic2VuZCIsImJpbmQiLCJBeGlvcyIsIm1lcmdlQ29uZmlnIiwiYXhpb3MiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJjb250ZXh0IiwiaW5zdGFuY2UiLCJleHRlbmQiLCJpbnN0YW5jZUNvbmZpZyIsIkNhbmNlbFRva2VuIiwiaXNDYW5jZWwiLCJWRVJTSU9OIiwidG9Gb3JtRGF0YSIsIkNhbmNlbCIsImFsbCIsInByb21pc2VzIiwic3ByZWFkIiwiaXNBeGlvc0Vycm9yIiwiZXhlY3V0b3IiLCJUeXBlRXJyb3IiLCJyZXNvbHZlUHJvbWlzZSIsInByb21pc2UiLCJ0aGVuIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJtZXNzYWdlIiwidGhyb3dJZlJlcXVlc3RlZCIsImxpc3RlbmVyIiwic3BsaWNlIiwiYyIsIkVSUl9DQU5DRUxFRCIsImluaGVyaXRzIiwiX19DQU5DRUxfXyIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsInZhbGlkYXRvcnMiLCJkZWZhdWx0cyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiYXNzZXJ0T3B0aW9ucyIsInNpbGVudEpTT05QYXJzaW5nIiwiYm9vbGVhbiIsImZvcmNlZEpTT05QYXJzaW5nIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInJ1bldoZW4iLCJzeW5jaHJvbm91cyIsInVuc2hpZnQiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsImNoYWluIiwibmV3Q29uZmlnIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiZ2V0VXJpIiwiZ2VuZXJhdGVIVFRQTWV0aG9kIiwiaXNGb3JtIiwidG9KU09OIiwiZGVzY3JpcHRpb24iLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGFjayIsImRlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImZyb20iLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJ0b0ZsYXRPYmplY3QiLCJ1c2UiLCJlamVjdCIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsInJlcXVlc3RlZFVSTCIsInRyYW5zZm9ybURhdGEiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidHJhbnNmb3JtUmVxdWVzdCIsImFkYXB0ZXIiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsImNvbmZpZ1ZhbHVlIiwidmFsaWRhdGVTdGF0dXMiLCJFUlJfQkFEX1JFU1BPTlNFIiwiZmxvb3IiLCJmbnMiLCJub3JtYWxpemVIZWFkZXJOYW1lIiwiREVGQVVMVF9DT05URU5UX1RZUEUiLCJzZXRDb250ZW50VHlwZUlmVW5zZXQiLCJwcm9jZXNzIiwiaXNBcnJheUJ1ZmZlciIsImlzQnVmZmVyIiwiaXNTdHJlYW0iLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0FycmF5QnVmZmVyVmlldyIsImJ1ZmZlciIsImlzVVJMU2VhcmNoUGFyYW1zIiwiaXNGaWxlTGlzdCIsImlzT2JqZWN0UGF5bG9hZCIsImlzT2JqZWN0IiwiY29udGVudFR5cGUiLCJfRm9ybURhdGEiLCJlbnYiLCJGb3JtRGF0YSIsInJhd1ZhbHVlIiwicGFyc2VyIiwiZW5jb2RlciIsImlzU3RyaW5nIiwic3RyaW5naWZ5U2FmZWx5Iiwic3RyaWN0SlNPTlBhcnNpbmciLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsInRoaXNBcmciLCJlbmNvZGUiLCJzZXJpYWxpemVkUGFyYW1zIiwicGFydHMiLCJ2IiwiaXNEYXRlIiwidG9JU09TdHJpbmciLCJoYXNobWFya0luZGV4IiwicmVsYXRpdmVVUkwiLCJ3cml0ZSIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJpc051bWJlciIsIkRhdGUiLCJ0b0dNVFN0cmluZyIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsIm5vdyIsInBheWxvYWQiLCJvcmlnaW5VUkwiLCJtc2llIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJyZXNvbHZlVVJMIiwiaHJlZiIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsInJlcXVlc3RVUkwiLCJub3JtYWxpemVkTmFtZSIsImlnbm9yZUR1cGxpY2F0ZU9mIiwic3Vic3RyIiwiYXJyIiwiZm9ybURhdGEiLCJjb252ZXJ0VmFsdWUiLCJpc1R5cGVkQXJyYXkiLCJCbG9iIiwiQnVmZmVyIiwiYnVpbGQiLCJwYXJlbnRLZXkiLCJmdWxsS2V5IiwiZW5kc1dpdGgiLCJ0b0FycmF5IiwiZWwiLCJhcHBlbmQiLCJwb3AiLCJ0aGluZyIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZlcnNpb24iLCJmb3JtYXRNZXNzYWdlIiwib3B0Iiwib3B0cyIsIkVSUl9ERVBSRUNBVEVEIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsImtpbmRPZiIsImtpbmRPZlRlc3QiLCJnZXRQcm90b3R5cGVPZiIsImlzRnVuY3Rpb24iLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwicGlwZSIsInByb2R1Y3QiLCJhc3NpZ25WYWx1ZSIsInN0cmlwQk9NIiwiY29udGVudCIsInN1cGVyQ29uc3RydWN0b3IiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwibWVyZ2VkIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInNlYXJjaFN0cmluZyIsInJlYWN0SXMiLCJSRUFDVF9TVEFUSUNTIiwiY2hpbGRDb250ZXh0VHlwZXMiLCJjb250ZXh0VHlwZSIsImNvbnRleHRUeXBlcyIsImdldERlZmF1bHRQcm9wcyIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsIktOT1dOX1NUQVRJQ1MiLCJjYWxsZXIiLCJjYWxsZWUiLCJhcml0eSIsIk1FTU9fU1RBVElDUyIsImNvbXBhcmUiLCJUWVBFX1NUQVRJQ1MiLCJnZXRTdGF0aWNzIiwiaXNNZW1vIiwiRm9yd2FyZFJlZiIsInJlbmRlciIsIk1lbW8iLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvYmplY3RQcm90b3R5cGUiLCJob2lzdE5vblJlYWN0U3RhdGljcyIsInRhcmdldENvbXBvbmVudCIsInNvdXJjZUNvbXBvbmVudCIsImJsYWNrbGlzdCIsImluaGVyaXRlZENvbXBvbmVudCIsInRhcmdldFN0YXRpY3MiLCJzb3VyY2VTdGF0aWNzIiwiZGVzY3JpcHRvciIsIlN5bWJvbCIsImZvciIsImciLCJxIiwidSIsIiQkdHlwZW9mIiwiQSIsIkFzeW5jTW9kZSIsIkNvbmN1cnJlbnRNb2RlIiwiQ29udGV4dENvbnN1bWVyIiwiQ29udGV4dFByb3ZpZGVyIiwiRWxlbWVudCIsIkxhenkiLCJQb3J0YWwiLCJQcm9maWxlciIsIlN0cmljdE1vZGUiLCJTdXNwZW5zZSIsImlzQXN5bmNNb2RlIiwiaXNDb25jdXJyZW50TW9kZSIsImlzQ29udGV4dENvbnN1bWVyIiwiaXNDb250ZXh0UHJvdmlkZXIiLCJpc0VsZW1lbnQiLCJpc0ZvcndhcmRSZWYiLCJpc0ZyYWdtZW50IiwiaXNMYXp5IiwiaXNQb3J0YWwiLCJpc1Byb2ZpbGVyIiwiaXNTdHJpY3RNb2RlIiwiaXNTdXNwZW5zZSIsImlzVmFsaWRFbGVtZW50VHlwZSIsInR5cGVPZiIsImFhIiwiY2EiLCJkYSIsImVhIiwiZmEiLCJoYSIsImFkZCIsImlhIiwiamEiLCJrYSIsImxhIiwibWEiLCJhY2NlcHRzQm9vbGVhbnMiLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlTmFtZXNwYWNlIiwibXVzdFVzZVByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwic2FuaXRpemVVUkwiLCJyZW1vdmVFbXB0eVN0cmluZyIsInJhIiwic2EiLCJ0YSIsInBhIiwiaXNOYU4iLCJxYSIsIm9hIiwicmVtb3ZlQXR0cmlidXRlIiwic2V0QXR0cmlidXRlTlMiLCJ4bGlua0hyZWYiLCJ1YSIsIl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEIiwidmEiLCJ3YSIsInlhIiwiemEiLCJBYSIsIkJhIiwiQ2EiLCJEYSIsIkVhIiwiRmEiLCJHYSIsIkhhIiwiSWEiLCJKYSIsIml0ZXJhdG9yIiwiS2EiLCJMYSIsIk1hIiwiTmEiLCJPYSIsInByZXBhcmVTdGFja1RyYWNlIiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImluY2x1ZGVzIiwiUGEiLCJRYSIsIl9jb250ZXh0IiwiX3BheWxvYWQiLCJfaW5pdCIsIlJhIiwiU2EiLCJUYSIsIm5vZGVOYW1lIiwiVmEiLCJfdmFsdWVUcmFja2VyIiwiY29uZmlndXJhYmxlIiwic3RvcFRyYWNraW5nIiwiVWEiLCJXYSIsIlhhIiwiYWN0aXZlRWxlbWVudCIsImJvZHkiLCJZYSIsImRlZmF1bHRDaGVja2VkIiwiX3dyYXBwZXJTdGF0ZSIsImluaXRpYWxDaGVja2VkIiwiWmEiLCJpbml0aWFsVmFsdWUiLCJhYiIsImJiIiwiY2IiLCJkYiIsImViIiwiZmIiLCJkZWZhdWx0U2VsZWN0ZWQiLCJnYiIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiaGIiLCJpYiIsImpiIiwidGV4dENvbnRlbnQiLCJrYiIsImxiIiwibWIiLCJuYiIsIm5hbWVzcGFjZVVSSSIsImlubmVySFRNTCIsInZhbHVlT2YiLCJNU0FwcCIsImV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uIiwib2IiLCJsYXN0Q2hpbGQiLCJub2RlVHlwZSIsIm5vZGVWYWx1ZSIsInBiIiwiYXNwZWN0UmF0aW8iLCJncmlkQXJlYSIsImxpbmVDbGFtcCIsInFiIiwicmIiLCJzYiIsInNldFByb3BlcnR5IiwidGIiLCJtZW51aXRlbSIsImFyZWEiLCJiciIsImNvbCIsImVtYmVkIiwiaHIiLCJpbWciLCJrZXlnZW4iLCJsaW5rIiwibWV0YSIsInBhcmFtIiwidHJhY2siLCJ3YnIiLCJ1YiIsInZiIiwiaXMiLCJ3YiIsInhiIiwic3JjRWxlbWVudCIsImNvcnJlc3BvbmRpbmdVc2VFbGVtZW50IiwieWIiLCJ6YiIsIkFiIiwiQmIiLCJDYiIsInN0YXRlTm9kZSIsIkRiIiwiRWIiLCJGYiIsIkdiIiwiSGIiLCJJYiIsIkpiIiwiS2IiLCJMYiIsIk1iIiwiTmIiLCJvbkVycm9yIiwiT2IiLCJQYiIsIlFiIiwiUmIiLCJTYiIsIlRiIiwiVmIiLCJhbHRlcm5hdGUiLCJmbGFncyIsIldiIiwibWVtb2l6ZWRTdGF0ZSIsImRlaHlkcmF0ZWQiLCJYYiIsIlpiIiwiY2hpbGQiLCJzaWJsaW5nIiwiWWIiLCIkYiIsImFjIiwidW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayIsImJjIiwidW5zdGFibGVfY2FuY2VsQ2FsbGJhY2siLCJjYyIsInVuc3RhYmxlX3Nob3VsZFlpZWxkIiwiZGMiLCJ1bnN0YWJsZV9yZXF1ZXN0UGFpbnQiLCJCIiwidW5zdGFibGVfbm93IiwiZWMiLCJ1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCIsImZjIiwidW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHkiLCJnYyIsInVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5IiwiaGMiLCJ1bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSIsImljIiwidW5zdGFibGVfTG93UHJpb3JpdHkiLCJqYyIsInVuc3RhYmxlX0lkbGVQcmlvcml0eSIsImtjIiwibGMiLCJvYyIsImNsejMyIiwicGMiLCJxYyIsImxvZyIsIkxOMiIsInJjIiwic2MiLCJ0YyIsInVjIiwicGVuZGluZ0xhbmVzIiwic3VzcGVuZGVkTGFuZXMiLCJwaW5nZWRMYW5lcyIsImVudGFuZ2xlZExhbmVzIiwiZW50YW5nbGVtZW50cyIsInZjIiwieGMiLCJ5YyIsInpjIiwiQWMiLCJldmVudFRpbWVzIiwiQ2MiLCJDIiwiRGMiLCJFYyIsIkZjIiwiR2MiLCJIYyIsIkljIiwiSmMiLCJLYyIsIkxjIiwiTWMiLCJOYyIsIk9jIiwiTWFwIiwiUGMiLCJRYyIsIlJjIiwiU2MiLCJkZWxldGUiLCJwb2ludGVySWQiLCJUYyIsIm5hdGl2ZUV2ZW50IiwiYmxvY2tlZE9uIiwiZG9tRXZlbnROYW1lIiwiZXZlbnRTeXN0ZW1GbGFncyIsInRhcmdldENvbnRhaW5lcnMiLCJWYyIsIldjIiwicHJpb3JpdHkiLCJpc0RlaHlkcmF0ZWQiLCJjb250YWluZXJJbmZvIiwiWGMiLCJZYyIsImRpc3BhdGNoRXZlbnQiLCJaYyIsIiRjIiwiYWQiLCJiZCIsImNkIiwiUmVhY3RDdXJyZW50QmF0Y2hDb25maWciLCJkZCIsImVkIiwiZmQiLCJnZCIsImhkIiwiVWMiLCJzdG9wUHJvcGFnYXRpb24iLCJqZCIsImtkIiwibGQiLCJuZCIsIm9kIiwia2V5Q29kZSIsImNoYXJDb2RlIiwicGQiLCJxZCIsInJkIiwiX3JlYWN0TmFtZSIsIl90YXJnZXRJbnN0IiwiY3VycmVudFRhcmdldCIsImlzRGVmYXVsdFByZXZlbnRlZCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJyZXR1cm5WYWx1ZSIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwicHJldmVudERlZmF1bHQiLCJjYW5jZWxCdWJibGUiLCJwZXJzaXN0IiwiaXNQZXJzaXN0ZW50Iiwid2QiLCJ4ZCIsInlkIiwic2QiLCJldmVudFBoYXNlIiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJ0aW1lU3RhbXAiLCJpc1RydXN0ZWQiLCJ0ZCIsInVkIiwidmlldyIsImRldGFpbCIsInZkIiwiQWQiLCJzY3JlZW5YIiwic2NyZWVuWSIsImNsaWVudFgiLCJjbGllbnRZIiwicGFnZVgiLCJwYWdlWSIsInNoaWZ0S2V5IiwiZ2V0TW9kaWZpZXJTdGF0ZSIsInpkIiwiYnV0dG9ucyIsInJlbGF0ZWRUYXJnZXQiLCJmcm9tRWxlbWVudCIsInRvRWxlbWVudCIsIm1vdmVtZW50WCIsIm1vdmVtZW50WSIsIkJkIiwiRGQiLCJkYXRhVHJhbnNmZXIiLCJGZCIsIkhkIiwiYW5pbWF0aW9uTmFtZSIsImVsYXBzZWRUaW1lIiwicHNldWRvRWxlbWVudCIsIklkIiwiY2xpcGJvYXJkRGF0YSIsIkpkIiwiTGQiLCJNZCIsIkVzYyIsIlNwYWNlYmFyIiwiTGVmdCIsIlVwIiwiUmlnaHQiLCJEb3duIiwiRGVsIiwiV2luIiwiTWVudSIsIkFwcHMiLCJTY3JvbGwiLCJNb3pQcmludGFibGVLZXkiLCJOZCIsIk9kIiwiQWx0IiwiQ29udHJvbCIsIk1ldGEiLCJTaGlmdCIsIlBkIiwiUWQiLCJyZXBlYXQiLCJsb2NhbGUiLCJ3aGljaCIsIlJkIiwiVGQiLCJwcmVzc3VyZSIsInRhbmdlbnRpYWxQcmVzc3VyZSIsInRpbHRYIiwidGlsdFkiLCJ0d2lzdCIsInBvaW50ZXJUeXBlIiwiaXNQcmltYXJ5IiwiVmQiLCJ0b3VjaGVzIiwidGFyZ2V0VG91Y2hlcyIsImNoYW5nZWRUb3VjaGVzIiwiWGQiLCJZZCIsImRlbHRhWCIsIndoZWVsRGVsdGFYIiwiZGVsdGFZIiwid2hlZWxEZWx0YVkiLCJ3aGVlbERlbHRhIiwiZGVsdGFaIiwiZGVsdGFNb2RlIiwiWmQiLCIkZCIsImFlIiwiYmUiLCJkb2N1bWVudE1vZGUiLCJjZSIsImRlIiwiZWUiLCJmZSIsImdlIiwiaGUiLCJpZSIsImxlIiwicmFuZ2UiLCJtZSIsIm5lIiwib2UiLCJsaXN0ZW5lcnMiLCJwZSIsInFlIiwic2UiLCJ0ZSIsInVlIiwidmUiLCJ3ZSIsInhlIiwieWUiLCJ6ZSIsIm9uaW5wdXQiLCJBZSIsImRldGFjaEV2ZW50IiwiQmUiLCJDZSIsImF0dGFjaEV2ZW50IiwiRGUiLCJFZSIsIkZlIiwiSGUiLCJJZSIsIkplIiwiS2UiLCJMZSIsImNvbnRhaW5zIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJNZSIsIkhUTUxJRnJhbWVFbGVtZW50IiwiY29udGVudFdpbmRvdyIsIk5lIiwiY29udGVudEVkaXRhYmxlIiwiT2UiLCJmb2N1c2VkRWxlbSIsInNlbGVjdGlvblJhbmdlIiwiZG9jdW1lbnRFbGVtZW50Iiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJnZXRTZWxlY3Rpb24iLCJyYW5nZUNvdW50IiwiYW5jaG9yTm9kZSIsImFuY2hvck9mZnNldCIsImZvY3VzTm9kZSIsImZvY3VzT2Zmc2V0IiwiY3JlYXRlUmFuZ2UiLCJzZXRTdGFydCIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwic2V0RW5kIiwibGVmdCIsInNjcm9sbExlZnQiLCJ0b3AiLCJzY3JvbGxUb3AiLCJQZSIsIlFlIiwiUmUiLCJTZSIsIlRlIiwiVWUiLCJWZSIsIldlIiwiYW5pbWF0aW9uZW5kIiwiYW5pbWF0aW9uaXRlcmF0aW9uIiwiYW5pbWF0aW9uc3RhcnQiLCJ0cmFuc2l0aW9uZW5kIiwiWGUiLCJZZSIsIlplIiwiYW5pbWF0aW9uIiwiJGUiLCJhZiIsImJmIiwiY2YiLCJkZiIsImVmIiwiZmYiLCJnZiIsImhmIiwibGYiLCJtZiIsIm5mIiwiVWIiLCJEIiwib2YiLCJwZiIsInFmIiwicmYiLCJyYW5kb20iLCJzZiIsImNhcHR1cmUiLCJwYXNzaXZlIiwiSiIsIkYiLCJ0ZiIsInVmIiwicGFyZW50V2luZG93IiwidmYiLCJ3ZiIsIm5hIiwieGEiLCIkYSIsImJhIiwiamUiLCJjaGFyIiwia2UiLCJ4ZiIsInlmIiwiemYiLCJBZiIsIkJmIiwiQ2YiLCJEZiIsIkVmIiwiX19odG1sIiwiRmYiLCJHZiIsIkhmIiwiSmYiLCJxdWV1ZU1pY3JvdGFzayIsImNhdGNoIiwiSWYiLCJLZiIsIkxmIiwiTWYiLCJwcmV2aW91c1NpYmxpbmciLCJOZiIsIk9mIiwiUGYiLCJRZiIsIlJmIiwiU2YiLCJUZiIsIlVmIiwiRSIsIkciLCJWZiIsIkgiLCJXZiIsIlhmIiwiWWYiLCJfX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0IiwiX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQiLCJaZiIsIiRmIiwiYWciLCJiZyIsImdldENoaWxkQ29udGV4dCIsImNnIiwiX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQiLCJkZyIsImVnIiwiZmciLCJnZyIsImhnIiwiamciLCJrZyIsIm1nIiwibmciLCJvZyIsInBnIiwicWciLCJyZyIsInNnIiwidGciLCJ1ZyIsInZnIiwid2ciLCJ4ZyIsInlnIiwiSSIsInpnIiwiQWciLCJCZyIsImVsZW1lbnRUeXBlIiwiZGVsZXRpb25zIiwiQ2ciLCJwZW5kaW5nUHJvcHMiLCJvdmVyZmxvdyIsInRyZWVDb250ZXh0IiwicmV0cnlMYW5lIiwiRGciLCJFZyIsIkZnIiwiR2ciLCJtZW1vaXplZFByb3BzIiwiSGciLCJJZyIsIkpnIiwiS2ciLCJMZyIsIk1nIiwiTmciLCJPZyIsIlBnIiwiUWciLCJSZyIsIl9jdXJyZW50VmFsdWUiLCJTZyIsImNoaWxkTGFuZXMiLCJUZyIsImRlcGVuZGVuY2llcyIsImZpcnN0Q29udGV4dCIsImxhbmVzIiwiVWciLCJWZyIsIm1lbW9pemVkVmFsdWUiLCJXZyIsIlhnIiwiWWciLCJpbnRlcmxlYXZlZCIsIlpnIiwiJGciLCJhaCIsInVwZGF0ZVF1ZXVlIiwiYmFzZVN0YXRlIiwiZmlyc3RCYXNlVXBkYXRlIiwibGFzdEJhc2VVcGRhdGUiLCJzaGFyZWQiLCJwZW5kaW5nIiwiZWZmZWN0cyIsImJoIiwiY2giLCJldmVudFRpbWUiLCJsYW5lIiwiZGgiLCJLIiwiZWgiLCJmaCIsImdoIiwiaGgiLCJpaCIsImpoIiwicmVmcyIsImtoIiwibmgiLCJpc01vdW50ZWQiLCJfcmVhY3RJbnRlcm5hbHMiLCJlbnF1ZXVlU2V0U3RhdGUiLCJMIiwibGgiLCJtaCIsImVucXVldWVSZXBsYWNlU3RhdGUiLCJlbnF1ZXVlRm9yY2VVcGRhdGUiLCJvaCIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsImlzUHVyZVJlYWN0Q29tcG9uZW50IiwicGgiLCJ1cGRhdGVyIiwicWgiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJyaCIsImdldFNuYXBzaG90QmVmb3JlVXBkYXRlIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudERpZE1vdW50Iiwic2giLCJfb3duZXIiLCJfc3RyaW5nUmVmIiwidGgiLCJ1aCIsInZoIiwid2giLCJ4aCIsInloIiwiaW1wbGVtZW50YXRpb24iLCJ6aCIsIkFoIiwiQmgiLCJDaCIsIkRoIiwiRWgiLCJGaCIsIkdoIiwiSGgiLCJJaCIsIkpoIiwiS2giLCJMaCIsIk0iLCJNaCIsInJldmVhbE9yZGVyIiwiTmgiLCJPaCIsIl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5IiwiUGgiLCJSZWFjdEN1cnJlbnREaXNwYXRjaGVyIiwiUWgiLCJSaCIsIk4iLCJPIiwiUCIsIlNoIiwiVGgiLCJVaCIsIlZoIiwiUSIsIldoIiwiWGgiLCJZaCIsIlpoIiwiJGgiLCJhaSIsImJpIiwiY2kiLCJiYXNlUXVldWUiLCJxdWV1ZSIsImRpIiwiZWkiLCJmaSIsImxhc3RSZW5kZXJlZFJlZHVjZXIiLCJoYXNFYWdlclN0YXRlIiwiZWFnZXJTdGF0ZSIsImxhc3RSZW5kZXJlZFN0YXRlIiwiZGlzcGF0Y2giLCJnaSIsImhpIiwiaWkiLCJqaSIsImtpIiwiZ2V0U25hcHNob3QiLCJsaSIsIm1pIiwiUiIsIm5pIiwibGFzdEVmZmVjdCIsInN0b3JlcyIsIm9pIiwicGkiLCJxaSIsInJpIiwiZGVzdHJveSIsImRlcHMiLCJzaSIsInRpIiwidWkiLCJ2aSIsIndpIiwieGkiLCJ5aSIsInppIiwiQWkiLCJCaSIsIkNpIiwiRGkiLCJFaSIsIkZpIiwiR2kiLCJIaSIsIklpIiwiSmkiLCJyZWFkQ29udGV4dCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZU1lbW8iLCJ1c2VSZWR1Y2VyIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VEZWJ1Z1ZhbHVlIiwidXNlRGVmZXJyZWRWYWx1ZSIsInVzZVRyYW5zaXRpb24iLCJ1c2VNdXRhYmxlU291cmNlIiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJ1bnN0YWJsZV9pc05ld1JlY29uY2lsZXIiLCJpZGVudGlmaWVyUHJlZml4IiwiS2kiLCJkaWdlc3QiLCJMaSIsIk1pIiwiTmkiLCJPaSIsIlBpIiwiUWkiLCJSaSIsImNvbXBvbmVudERpZENhdGNoIiwiU2kiLCJjb21wb25lbnRTdGFjayIsIlRpIiwicGluZ0NhY2hlIiwiVWkiLCJWaSIsIldpIiwiWGkiLCJSZWFjdEN1cnJlbnRPd25lciIsIllpIiwiWmkiLCIkaSIsImFqIiwiYmoiLCJjaiIsImRqIiwiZWoiLCJiYXNlTGFuZXMiLCJjYWNoZVBvb2wiLCJmaiIsImdqIiwiaGoiLCJpaiIsImpqIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUiLCJjb21wb25lbnRXaWxsVXBkYXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwia2oiLCJsaiIsInBlbmRpbmdDb250ZXh0IiwibWoiLCJBaiIsIkNqIiwiRGoiLCJuaiIsIm9qIiwicGoiLCJmYWxsYmFjayIsInFqIiwicmoiLCJ0aiIsImRhdGFzZXQiLCJkZ3N0IiwidWoiLCJ2aiIsIl9yZWFjdFJldHJ5Iiwic2oiLCJzdWJ0cmVlRmxhZ3MiLCJ3aiIsInhqIiwiaXNCYWNrd2FyZHMiLCJyZW5kZXJpbmciLCJyZW5kZXJpbmdTdGFydFRpbWUiLCJsYXN0IiwidGFpbCIsInRhaWxNb2RlIiwieWoiLCJFaiIsIlMiLCJGaiIsIkdqIiwid2FzTXVsdGlwbGUiLCJtdWx0aXBsZSIsInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIsIm9uQ2xpY2siLCJvbmNsaWNrIiwiY3JlYXRlRWxlbWVudE5TIiwiYXV0b0ZvY3VzIiwiSGoiLCJJaiIsIkpqIiwiS2oiLCJVIiwiTGoiLCJXZWFrU2V0IiwiViIsIk1qIiwiVyIsIk5qIiwiT2oiLCJRaiIsIlJqIiwiU2oiLCJUaiIsIlVqIiwiVmoiLCJXaiIsIl9yZWFjdFJvb3RDb250YWluZXIiLCJYaiIsIlgiLCJZaiIsIlpqIiwiYWsiLCJvbkNvbW1pdEZpYmVyVW5tb3VudCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiYmsiLCJjayIsImRrIiwiZWsiLCJmayIsImlzSGlkZGVuIiwiZ2siLCJoayIsImlrIiwiamsiLCJrayIsImxrIiwiX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUiLCJzcmMiLCJXayIsIm1rIiwiY2VpbCIsIm5rIiwib2siLCJwayIsIlkiLCJaIiwicWsiLCJyayIsInNrIiwidGsiLCJ1ayIsIkluZmluaXR5IiwidmsiLCJ3ayIsInhrIiwieWsiLCJ6ayIsIkFrIiwiQmsiLCJDayIsIkRrIiwiRWsiLCJjYWxsYmFja05vZGUiLCJleHBpcmF0aW9uVGltZXMiLCJleHBpcmVkTGFuZXMiLCJ3YyIsImNhbGxiYWNrUHJpb3JpdHkiLCJpZyIsIkZrIiwiR2siLCJIayIsIklrIiwiSmsiLCJLayIsIkxrIiwiTWsiLCJOayIsIk9rIiwiUGsiLCJmaW5pc2hlZFdvcmsiLCJmaW5pc2hlZExhbmVzIiwiUWsiLCJ0aW1lb3V0SGFuZGxlIiwiUmsiLCJTayIsIlRrIiwiVWsiLCJWayIsIm11dGFibGVSZWFkTGFuZXMiLCJCYyIsIlBqIiwib25Db21taXRGaWJlclJvb3QiLCJtYyIsIm9uUmVjb3ZlcmFibGVFcnJvciIsIlhrIiwib25Qb3N0Q29tbWl0RmliZXJSb290IiwiWWsiLCJaayIsImFsIiwiaXNSZWFjdENvbXBvbmVudCIsInBlbmRpbmdDaGlsZHJlbiIsImJsIiwibXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSIsImNsIiwicGVuZGluZ1N1c3BlbnNlQm91bmRhcmllcyIsImRsIiwiZmwiLCJnbCIsImhsIiwiaWwiLCJqbCIsInpqIiwiJGsiLCJsbCIsInJlcG9ydEVycm9yIiwibWwiLCJfaW50ZXJuYWxSb290IiwibmwiLCJvbCIsInBsIiwicWwiLCJzbCIsInJsIiwidW5tb3VudCIsInVuc3RhYmxlX3NjaGVkdWxlSHlkcmF0aW9uIiwiZm9ybSIsInRsIiwidXNpbmdDbGllbnRFbnRyeVBvaW50IiwiRXZlbnRzIiwidWwiLCJmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSIsImJ1bmRsZVR5cGUiLCJyZW5kZXJlclBhY2thZ2VOYW1lIiwidmwiLCJyZW5kZXJlckNvbmZpZyIsIm92ZXJyaWRlSG9va1N0YXRlIiwib3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoIiwib3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoIiwib3ZlcnJpZGVQcm9wcyIsIm92ZXJyaWRlUHJvcHNEZWxldGVQYXRoIiwib3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGgiLCJzZXRFcnJvckhhbmRsZXIiLCJzZXRTdXNwZW5zZUhhbmRsZXIiLCJzY2hlZHVsZVVwZGF0ZSIsImN1cnJlbnREaXNwYXRjaGVyUmVmIiwiZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIiLCJmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2giLCJzY2hlZHVsZVJlZnJlc2giLCJzY2hlZHVsZVJvb3QiLCJzZXRSZWZyZXNoSGFuZGxlciIsImdldEN1cnJlbnRGaWJlciIsInJlY29uY2lsZXJWZXJzaW9uIiwiX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwid2wiLCJpc0Rpc2FibGVkIiwic3VwcG9ydHNGaWJlciIsImluamVjdCIsImNyZWF0ZVBvcnRhbCIsImNyZWF0ZVJvb3QiLCJ1bnN0YWJsZV9zdHJpY3RNb2RlIiwiZmluZERPTU5vZGUiLCJmbHVzaFN5bmMiLCJoeWRyYXRlUm9vdCIsImh5ZHJhdGVkU291cmNlcyIsIl9nZXRWZXJzaW9uIiwiX3NvdXJjZSIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsInVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIiwiY2hlY2tEQ0UiLCJfX3NlbGYiLCJfX3NvdXJjZSIsImpzeHMiLCJzZXRTdGF0ZSIsImZvcmNlVXBkYXRlIiwiZXNjYXBlIiwiX3N0YXR1cyIsIl9yZXN1bHQiLCJDaGlsZHJlbiIsIlB1cmVDb21wb25lbnQiLCJjbG9uZUVsZW1lbnQiLCJfY3VycmVudFZhbHVlMiIsIl90aHJlYWRDb3VudCIsIkNvbnN1bWVyIiwiX2RlZmF1bHRWYWx1ZSIsIl9nbG9iYWxOYW1lIiwiY3JlYXRlRmFjdG9yeSIsImNyZWF0ZVJlZiIsImlzVmFsaWRFbGVtZW50IiwibGF6eSIsIm1lbW8iLCJzdGFydFRyYW5zaXRpb24iLCJ1bnN0YWJsZV9hY3QiLCJzb3J0SW5kZXgiLCJwZXJmb3JtYW5jZSIsInNldEltbWVkaWF0ZSIsInN0YXJ0VGltZSIsImV4cGlyYXRpb25UaW1lIiwicHJpb3JpdHlMZXZlbCIsInNjaGVkdWxpbmciLCJpc0lucHV0UGVuZGluZyIsIk1lc3NhZ2VDaGFubmVsIiwicG9ydDIiLCJwb3J0MSIsIm9ubWVzc2FnZSIsInBvc3RNZXNzYWdlIiwidW5zdGFibGVfUHJvZmlsaW5nIiwidW5zdGFibGVfY29udGludWVFeGVjdXRpb24iLCJ1bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSIsInVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlIiwidW5zdGFibGVfbmV4dCIsInVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uIiwidW5zdGFibGVfcnVuV2l0aFByaW9yaXR5IiwidW5zdGFibGVfd3JhcENhbGxiYWNrIiwiaW5zdCIsInVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yIiwiaGFzVmFsdWUiLCJobGpzIiwicmVnaXN0ZXJMYW5ndWFnZSIsIkhpZ2hsaWdodEpTIiwiZGVlcEZyZWV6ZUVzNiIsImRlZXBGcmVlemUiLCJmcmVlemUiLCJpc0Zyb3plbiIsIlJlc3BvbnNlIiwiaXNNYXRjaElnbm9yZWQiLCJpZ25vcmVNYXRjaCIsImVzY2FwZUhUTUwiLCJpbmhlcml0JDEiLCJvcmlnaW5hbCIsImVtaXRzV3JhcHBpbmdUYWdzIiwic2NvcGUiLCJzdWJsYW5ndWFnZSIsImxhbmd1YWdlIiwiSFRNTFJlbmRlcmVyIiwicGFyc2VUcmVlIiwiY2xhc3NQcmVmaXgiLCJ3YWxrIiwiYWRkVGV4dCIsIm9wZW5Ob2RlIiwicGllY2VzIiwic2NvcGVUb0NTU0NsYXNzIiwic3BhbiIsImNsb3NlTm9kZSIsIm5ld05vZGUiLCJUb2tlblRyZWUiLCJyb290Tm9kZSIsImNsb3NlQWxsTm9kZXMiLCJidWlsZGVyIiwiX3dhbGsiLCJzdGF0aWMiLCJfY29sbGFwc2UiLCJUb2tlblRyZWVFbWl0dGVyIiwic3VwZXIiLCJhZGRLZXl3b3JkIiwiYWRkU3VibGFuZ3VhZ2UiLCJlbWl0dGVyIiwidG9IVE1MIiwiZmluYWxpemUiLCJsb29rYWhlYWQiLCJhbnlOdW1iZXJPZlRpbWVzIiwib3B0aW9uYWwiLCJlaXRoZXIiLCJzdHJpcE9wdGlvbnNGcm9tQXJncyIsImNvdW50TWF0Y2hHcm91cHMiLCJCQUNLUkVGX1JFIiwiX3Jld3JpdGVCYWNrcmVmZXJlbmNlcyIsInJlZ2V4cHMiLCJqb2luV2l0aCIsIm51bUNhcHR1cmVzIiwicmVnZXgiLCJvdXQiLCJJREVOVF9SRSIsIlVOREVSU0NPUkVfSURFTlRfUkUiLCJOVU1CRVJfUkUiLCJDX05VTUJFUl9SRSIsIkJJTkFSWV9OVU1CRVJfUkUiLCJCQUNLU0xBU0hfRVNDQVBFIiwicmVsZXZhbmNlIiwiQVBPU19TVFJJTkdfTU9ERSIsImlsbGVnYWwiLCJRVU9URV9TVFJJTkdfTU9ERSIsIm1vZGVPcHRpb25zIiwiZXhjbHVkZUJlZ2luIiwiRU5HTElTSF9XT1JEIiwiQ19MSU5FX0NPTU1FTlRfTU9ERSIsIkNfQkxPQ0tfQ09NTUVOVF9NT0RFIiwiSEFTSF9DT01NRU5UX01PREUiLCJOVU1CRVJfTU9ERSIsIkNfTlVNQkVSX01PREUiLCJCSU5BUllfTlVNQkVSX01PREUiLCJSRUdFWFBfTU9ERSIsIlRJVExFX01PREUiLCJVTkRFUlNDT1JFX1RJVExFX01PREUiLCJNT0RFUyIsIl9fcHJvdG9fXyIsIk1BVENIX05PVEhJTkdfUkUiLCJSRV9TVEFSVEVSU19SRSIsIlNIRUJBTkciLCJiZWdpblNoZWJhbmciLCJiaW5hcnkiLCJyZXNwIiwiUEhSQVNBTF9XT1JEU19NT0RFIiwiTUVUSE9EX0dVQVJEIiwiRU5EX1NBTUVfQVNfQkVHSU4iLCJfYmVnaW5NYXRjaCIsInNraXBJZkhhc1ByZWNlZGluZ0RvdCIsInNjb3BlQ2xhc3NOYW1lIiwiX3BhcmVudCIsImJlZ2luS2V5d29yZHMiLCJfX2JlZm9yZUJlZ2luIiwia2V5d29yZHMiLCJjb21waWxlSWxsZWdhbCIsImNvbXBpbGVNYXRjaCIsImNvbXBpbGVSZWxldmFuY2UiLCJiZWZvcmVNYXRjaEV4dCIsImJlZm9yZU1hdGNoIiwic3RhcnRzIiwib3JpZ2luYWxNb2RlIiwiZW5kc1BhcmVudCIsIkNPTU1PTl9LRVlXT1JEUyIsImNvbXBpbGVLZXl3b3JkcyIsInJhd0tleXdvcmRzIiwiY2FzZUluc2Vuc2l0aXZlIiwic2NvcGVOYW1lIiwiY29tcGlsZWRLZXl3b3JkcyIsImNvbXBpbGVMaXN0Iiwia2V5d29yZExpc3QiLCJrZXl3b3JkIiwicGFpciIsInNjb3JlRm9yS2V5d29yZCIsInByb3ZpZGVkU2NvcmUiLCJjb21tb25LZXl3b3JkIiwic2VlbkRlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZWQiLCJNdWx0aUNsYXNzRXJyb3IiLCJyZW1hcFNjb3BlTmFtZXMiLCJyZWdleGVzIiwic2NvcGVOYW1lcyIsImVtaXQiLCJfZW1pdCIsIl9tdWx0aSIsIk11bHRpQ2xhc3MiLCJiZWdpblNjb3BlIiwic2NvcGVTdWdhciIsIl93cmFwIiwiZW5kU2NvcGUiLCJza2lwIiwicmV0dXJuQmVnaW4iLCJiZWdpbk11bHRpQ2xhc3MiLCJleGNsdWRlRW5kIiwicmV0dXJuRW5kIiwiZW5kTXVsdGlDbGFzcyIsImNvbXBpbGVMYW5ndWFnZSIsImxhbmdSZSIsImdsb2JhbCIsImNhc2VfaW5zZW5zaXRpdmUiLCJ1bmljb2RlUmVnZXgiLCJNdWx0aVJlZ2V4IiwibWF0Y2hJbmRleGVzIiwibWF0Y2hBdCIsImFkZFJ1bGUiLCJ0ZXJtaW5hdG9ycyIsIm1hdGNoZXJSZSIsImZpbmRJbmRleCIsIm1hdGNoRGF0YSIsIlJlc3VtYWJsZU11bHRpUmVnZXgiLCJtdWx0aVJlZ2V4ZXMiLCJyZWdleEluZGV4IiwiZ2V0TWF0Y2hlciIsIm1hdGNoZXIiLCJyZXN1bWluZ1NjYW5BdFNhbWVQb3NpdGlvbiIsImNvbnNpZGVyQWxsIiwibTIiLCJjb21waWxlckV4dGVuc2lvbnMiLCJjbGFzc05hbWVBbGlhc2VzIiwiY29tcGlsZU1vZGUiLCJjbW9kZSIsImlzQ29tcGlsZWQiLCJleHQiLCJrZXl3b3JkUGF0dGVybiIsIiRwYXR0ZXJuIiwia2V5d29yZFBhdHRlcm5SZSIsImJlZ2luUmUiLCJlbmRzV2l0aFBhcmVudCIsImVuZFJlIiwidGVybWluYXRvckVuZCIsImlsbGVnYWxSZSIsImNhY2hlZFZhcmlhbnRzIiwiZGVwZW5kZW5jeU9uUGFyZW50IiwiZXhwYW5kT3JDbG9uZU1vZGUiLCJtbSIsInRlcm0iLCJidWlsZE1vZGVSZWdleCIsIkhUTUxJbmplY3Rpb25FcnJvciIsImh0bWwiLCJOT19NQVRDSCIsImhpZ2hsaWdodCIsImxhbmd1YWdlcyIsInBsdWdpbnMiLCJTQUZFX01PREUiLCJMQU5HVUFHRV9OT1RfRk9VTkQiLCJQTEFJTlRFWFRfTEFOR1VBR0UiLCJkaXNhYmxlQXV0b2RldGVjdCIsImlnbm9yZVVuZXNjYXBlZEhUTUwiLCJ0aHJvd1VuZXNjYXBlZEhUTUwiLCJub0hpZ2hsaWdodFJlIiwibGFuZ3VhZ2VEZXRlY3RSZSIsImNzc1NlbGVjdG9yIiwiX19lbWl0dGVyIiwic2hvdWxkTm90SGlnaGxpZ2h0IiwibGFuZ3VhZ2VOYW1lIiwiY29kZU9yTGFuZ3VhZ2VOYW1lIiwib3B0aW9uc09yQ29kZSIsImlnbm9yZUlsbGVnYWxzIiwiZmlyZSIsIl9oaWdobGlnaHQiLCJjb2RlVG9IaWdobGlnaHQiLCJjb250aW51YXRpb24iLCJrZXl3b3JkSGl0cyIsInByb2Nlc3NLZXl3b3JkcyIsIm1vZGVCdWZmZXIiLCJidWYiLCJ3b3JkIiwibWF0Y2hUZXh0Iiwia2luZCIsImtleXdvcmRSZWxldmFuY2UiLCJzdGFydHNXaXRoIiwiY3NzQ2xhc3MiLCJwcm9jZXNzQnVmZmVyIiwic3ViTGFuZ3VhZ2UiLCJjb250aW51YXRpb25zIiwiaGlnaGxpZ2h0QXV0byIsIl9lbWl0dGVyIiwicHJvY2Vzc1N1Ykxhbmd1YWdlIiwiZW1pdE11bHRpQ2xhc3MiLCJrbGFzcyIsInN0YXJ0TmV3TW9kZSIsImVuZE9mTW9kZSIsIm1hdGNoUGx1c1JlbWFpbmRlciIsIm1hdGNoZWQiLCJsZXhlbWUiLCJkb0lnbm9yZSIsInJlc3VtZVNjYW5BdFNhbWVQb3NpdGlvbiIsImRvRW5kTWF0Y2giLCJlbmRNb2RlIiwib3JpZ2luIiwibGFzdE1hdGNoIiwicHJvY2Vzc0xleGVtZSIsInRleHRCZWZvcmVNYXRjaCIsImJhZFJ1bGUiLCJuZXdNb2RlIiwiYmVmb3JlQ2FsbGJhY2tzIiwiZG9CZWdpbk1hdGNoIiwicHJvY2Vzc2VkIiwiaXRlcmF0aW9ucyIsImdldExhbmd1YWdlIiwibGlzdCIsInByb2Nlc3NDb250aW51YXRpb25zIiwicHJvY2Vzc2VkQ291bnQiLCJfdG9wIiwiX2lsbGVnYWxCeSIsInJlc3VsdFNvRmFyIiwiZXJyb3JSYWlzZWQiLCJsYW5ndWFnZVN1YnNldCIsInBsYWludGV4dCIsImp1c3RUZXh0SGlnaGxpZ2h0UmVzdWx0IiwicmVzdWx0cyIsImF1dG9EZXRlY3Rpb24iLCJzb3J0ZWQiLCJzdXBlcnNldE9mIiwiYmVzdCIsInNlY29uZEJlc3QiLCJoaWdobGlnaHRFbGVtZW50IiwiYmxvY2siLCJmaW5kIiwiX2NsYXNzIiwiYmxvY2tMYW5ndWFnZSIsImN1cnJlbnRMYW5nIiwicmVzdWx0TGFuZyIsImNsYXNzTGlzdCIsInVwZGF0ZUNsYXNzTmFtZSIsIndhbnRzSGlnaGxpZ2h0IiwiaGlnaGxpZ2h0QWxsIiwicmVnaXN0ZXJBbGlhc2VzIiwiYWxpYXNMaXN0IiwiYWxpYXMiLCJsYW5nIiwicGx1Z2luIiwiaGlnaGxpZ2h0QmxvY2siLCJ1c2VyT3B0aW9ucyIsImluaXRIaWdobGlnaHRpbmciLCJpbml0SGlnaGxpZ2h0aW5nT25Mb2FkIiwibGFuZ3VhZ2VEZWZpbml0aW9uIiwiZXJyb3IkMSIsInJhd0RlZmluaXRpb24iLCJ1bnJlZ2lzdGVyTGFuZ3VhZ2UiLCJsaXN0TGFuZ3VhZ2VzIiwiYWRkUGx1Z2luIiwidXBncmFkZVBsdWdpbkFQSSIsImRlYnVnTW9kZSIsInNhZmVNb2RlIiwidmVyc2lvblN0cmluZyIsIkhMSlMiLCJWQVIiLCJCUkFDRURfVkFSIiwiU1VCU1QiLCJIRVJFX0RPQyIsIlFVT1RFX1NUUklORyIsIkFSSVRITUVUSUMiLCJLTk9XTl9TSEVCQU5HIiwiRlVOQ1RJT04iLCJsaXRlcmFsIiwiYnVpbHRfaW4iLCJOQU1FU1BBQ0VfUkUiLCJGVU5DVElPTl9UWVBFX1JFIiwiVFlQRVMiLCJTVFJJTkdTIiwiTlVNQkVSUyIsIlBSRVBST0NFU1NPUiIsIkZVTkNUSU9OX1RJVExFIiwiS0VZV09SRFMiLCJFWFBSRVNTSU9OX0NPTlRBSU5TIiwiRVhQUkVTU0lPTl9DT05URVhUIiwiRlVOQ1RJT05fREVDTEFSQVRJT04iLCJwcmVwcm9jZXNzb3IiLCJDUFBfUFJJTUlUSVZFX1RZUEVTIiwiQ1BQX0tFWVdPUkRTIiwiX3R5cGVfaGludHMiLCJGVU5DVElPTl9ESVNQQVRDSCIsIl9oaW50IiwiVkVSQkFUSU1fU1RSSU5HIiwiVkVSQkFUSU1fU1RSSU5HX05PX0xGIiwiU1VCU1RfTk9fTEYiLCJJTlRFUlBPTEFURURfU1RSSU5HIiwiSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklORyIsIklOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkdfTk9fTEYiLCJTVFJJTkciLCJHRU5FUklDX01PRElGSUVSIiwiVFlQRV9JREVOVF9SRSIsIkFUX0lERU5USUZJRVIiLCJUQUdTIiwiTUVESUFfRkVBVFVSRVMiLCJQU0VVRE9fQ0xBU1NFUyIsIlBTRVVET19FTEVNRU5UUyIsIkFUVFJJQlVURVMiLCJyZXZlcnNlIiwiSU1QT1JUQU5UIiwiQkxPQ0tfQ09NTUVOVCIsIkhFWENPTE9SIiwiQVRUUklCVVRFX1NFTEVDVE9SX01PREUiLCJDU1NfTlVNQkVSX01PREUiLCJDU1NfVkFSSUFCTEUiLCJrZXlmcmFtZVBvc2l0aW9uIiwiYXR0cmlidXRlIiwiQ09NTUVOVFMiLCJWQVJJQUJMRVMiLCJMSVRFUkFMUyIsIkFSUkFZIiwiQU5ZX0tFWSIsImZyYWMiLCJoZXhEaWdpdHMiLCJOVU1FUklDIiwicmVjdXJSZWdleCIsInN1YnN0aXR1dGlvbiIsImRlcHRoIiwiXyIsIkpBVkFfSURFTlRfUkUiLCJHRU5FUklDX0lERU5UX1JFIiwiQU5OT1RBVElPTiIsIlBBUkFNUyIsIkVSUk9SX1RZUEVTIiwiQlVJTFRfSU5fR0xPQkFMUyIsIkJVSUxUX0lOX1ZBUklBQkxFUyIsIkJVSUxUX0lOUyIsIklERU5UX1JFJDEiLCJYTUxfVEFHIiwiaXNUcnVseU9wZW5pbmdUYWciLCJhZnRlck1hdGNoSW5kZXgiLCJuZXh0Q2hhciIsImFmdGVyIiwiaGFzQ2xvc2luZ1RhZyIsIktFWVdPUkRTJDEiLCJkZWNpbWFsSW50ZWdlciIsIk5VTUJFUiIsIkhUTUxfVEVNUExBVEUiLCJDU1NfVEVNUExBVEUiLCJURU1QTEFURV9TVFJJTkciLCJTVUJTVF9JTlRFUk5BTFMiLCJTVUJTVF9BTkRfQ09NTUVOVFMiLCJQQVJBTVNfQ09OVEFJTlMiLCJDTEFTU19PUl9FWFRFTkRTIiwiQ0xBU1NfUkVGRVJFTkNFIiwiRlVOQ1RJT05fREVGSU5JVElPTiIsIkZVTkNUSU9OX0NBTEwiLCJQUk9QRVJUWV9BQ0NFU1MiLCJHRVRURVJfT1JfU0VUVEVSIiwiRlVOQ19MRUFEX0lOX1JFIiwiRlVOQ1RJT05fVkFSSUFCTEUiLCJMSVRFUkFMU19NT0RFIiwiTEFCRUwiLCJWQVJJQUJMRSIsIkFOTk9UQVRJT05fVVNFX1NJVEUiLCJLT1RMSU5fTlVNQkVSX01PREUiLCJLT1RMSU5fTkVTVEVEX0NPTU1FTlQiLCJLT1RMSU5fUEFSRU5fVFlQRSIsIktPVExJTl9QQVJFTl9UWVBFMiIsIlBTRVVET19TRUxFQ1RPUlMiLCJQU0VVRE9fU0VMRUNUT1JTJDEiLCJJTlRFUlBfSURFTlRfUkUiLCJSVUxFUyIsIlZBTFVFX01PREVTIiwiU1RSSU5HX01PREUiLCJJREVOVF9NT0RFIiwiQVRfS0VZV09SRFMiLCJQQVJFTlNfTU9ERSIsIlZBTFVFX1dJVEhfUlVMRVNFVFMiLCJNSVhJTl9HVUFSRF9NT0RFIiwiUlVMRV9NT0RFIiwiQVRfUlVMRV9NT0RFIiwiVkFSX1JVTEVfTU9ERSIsIlNFTEVDVE9SX01PREUiLCJQU0VVRE9fU0VMRUNUT1JfTU9ERSIsIk9QRU5JTkdfTE9OR19CUkFDS0VUIiwiQ0xPU0lOR19MT05HX0JSQUNLRVQiLCJMT05HX0JSQUNLRVRTIiwiRlVOQyIsIkFTU0lHTk1FTlQiLCJUQVJHRVQiLCJJTkxJTkVfSFRNTCIsIkxJTksiLCJCT0xEIiwiSVRBTElDIiwiQk9MRF9XSVRIT1VUX0lUQUxJQyIsIklUQUxJQ19XSVRIT1VUX0JPTEQiLCJDT05UQUlOQUJMRSIsIklERU5USUZJRVJfUkUiLCJDTEFTU19LRVlXT1JEUyIsIlJFR0VYX01PRElGSUVSUyIsIlBFUkxfS0VZV09SRFMiLCJNRVRIT0QiLCJTVFJJTkdfQ09OVEFJTlMiLCJSRUdFWF9ERUxJTVMiLCJQQUlSRURfRE9VQkxFX1JFIiwiY2xvc2UiLCJtaWRkbGUiLCJQQUlSRURfUkUiLCJQRVJMX0RFRkFVTFRfQ09OVEFJTlMiLCJOT1RfUEVSTF9FVEMiLCJQQVNDQUxfQ0FTRV9DTEFTU19OQU1FX1JFIiwiU0lOR0xFX1FVT1RFRCIsIldISVRFU1BBQ0UiLCJLV1MiLCJpdGVtcyIsImR1YWxDYXNlIiwibm9ybWFsaXplS2V5d29yZHMiLCJDT05TVFJVQ1RPUl9DQUxMIiwiQ09OU1RBTlRfUkVGRVJFTkNFIiwiTEVGVF9BTkRfUklHSFRfU0lERV9PRl9ET1VCTEVfQ09MT04iLCJOQU1FRF9BUkdVTUVOVCIsIlBBUkFNU19NT0RFIiwiRlVOQ1RJT05fSU5WT0tFIiwiQVRUUklCVVRFX0NPTlRBSU5TIiwiUkVTRVJWRURfV09SRFMiLCJQUk9NUFQiLCJMSVRFUkFMX0JSQUNLRVQiLCJkaWdpdHBhcnQiLCJwb2ludGZsb2F0IiwiQ09NTUVOVF9UWVBFIiwiTlVNQkVSX1RZUEVTX1JFIiwiT1BFUkFUT1JTX1JFIiwiUFVOQ1RVQVRJT05fUkUiLCJSVUJZX01FVEhPRF9SRSIsIkNMQVNTX05BTUVfUkUiLCJDTEFTU19OQU1FX1dJVEhfTkFNRVNQQUNFX1JFIiwiUlVCWV9LRVlXT1JEUyIsIllBUkRPQ1RBRyIsIklSQl9PQkpFQ1QiLCJDT01NRU5UX01PREVTIiwiZGlnaXRzIiwiUlVCWV9ERUZBVUxUX0NPTlRBSU5TIiwiSVJCX0RFRkFVTFQiLCJOVU1CRVJfU1VGRklYIiwiQlVJTFRJTlMiLCJQU0VVRE9fRUxFTUVOVFMkMSIsIlBTRVVET19DTEFTU0VTJDEiLCJDT01NRU5UX01PREUiLCJSRVNFUlZFRF9GVU5DVElPTlMiLCJDT01CT1MiLCJGVU5DVElPTlMiLCJleGNlcHRpb25zIiwid2hlbiIsInF1YWxpZnlGbiIsInJlZHVjZVJlbGV2YW5jeSIsImtleXdvcmRXcmFwcGVyIiwiZG90S2V5d29yZHMiLCJvcHRpb25hbERvdEtleXdvcmRzIiwia2V5d29yZFR5cGVzIiwibGl0ZXJhbHMiLCJwcmVjZWRlbmNlZ3JvdXBLZXl3b3JkcyIsIm51bWJlclNpZ25LZXl3b3JkcyIsImJ1aWx0SW5zIiwib3BlcmF0b3JIZWFkIiwib3BlcmF0b3JDaGFyYWN0ZXIiLCJvcGVyYXRvciIsImlkZW50aWZpZXJIZWFkIiwiaWRlbnRpZmllckNoYXJhY3RlciIsInR5cGVJZGVudGlmaWVyIiwia2V5d29yZEF0dHJpYnV0ZXMiLCJhdmFpbGFiaWxpdHlLZXl3b3JkcyIsIkRPVF9LRVlXT1JEIiwiS0VZV09SRF9HVUFSRCIsIlBMQUlOX0tFWVdPUkRTIiwia3ciLCJLRVlXT1JEIiwiS0VZV09SRF9NT0RFUyIsIk9QRVJBVE9SX0dVQVJEIiwiT1BFUkFUT1JTIiwiRVNDQVBFRF9DSEFSQUNURVIiLCJyYXdEZWxpbWl0ZXIiLCJFU0NBUEVEX05FV0xJTkUiLCJJTlRFUlBPTEFUSU9OIiwiTVVMVElMSU5FX1NUUklORyIsIlNJTkdMRV9MSU5FX1NUUklORyIsIlFVT1RFRF9JREVOVElGSUVSIiwiSURFTlRJRklFUlMiLCJUWVBFIiwiR0VORVJJQ19BUkdVTUVOVFMiLCJUVVBMRSIsIkdFTkVSSUNfUEFSQU1FVEVSUyIsIkZVTkNUSU9OX1BBUkFNRVRFUlMiLCJJTklUX1NVQlNDUklQVCIsIk9QRVJBVE9SX0RFQ0xBUkFUSU9OIiwiUFJFQ0VERU5DRUdST1VQIiwic3VibW9kZXMiLCJqYXZhc2NyaXB0IiwidHNMYW5ndWFnZSIsIk5BTUVTUEFDRSIsIklOVEVSRkFDRSIsIkRFQ09SQVRPUiIsInN3YXBNb2RlIiwiaW5keCIsIk1NX0REX1lZWVkiLCJZWVlZX01NX0REIiwiVElNRV8xMkgiLCJUSU1FXzI0SCIsIkRBVEUiLCJET0NfQ09NTUVOVCIsIlRBR19OQU1FX1JFIiwiWE1MX0VOVElUSUVTIiwiWE1MX01FVEFfS0VZV09SRFMiLCJYTUxfTUVUQV9QQVJfS0VZV09SRFMiLCJBUE9TX01FVEFfU1RSSU5HX01PREUiLCJRVU9URV9NRVRBX1NUUklOR19NT0RFIiwiVEFHX0lOVEVSTkFMUyIsIlVSSV9DSEFSQUNURVJTIiwiQ09OVEFJTkVSX1NUUklORyIsIlZBTFVFX0NPTlRBSU5FUiIsIk9CSkVDVCIsIl9leHRlbmRzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwibnMiLCJkZWYiLCJvIiwidG9TdHJpbmdUYWciLCJleHRlbmRTeFByb3AiLCJpblN4Iiwic3lzdGVtUHJvcHMiLCJvdGhlclByb3BzIiwic3BsaXRQcm9wcyIsImZpbmFsU3giLCJCb3giLCJkZWZhdWx0Q2xhc3NOYW1lIiwiZ2VuZXJhdGVDbGFzc05hbWUiLCJCb3hSb290IiwiX2V4dGVuZFN4UHJvcCIsImNyZWF0ZUJveCIsImxvY2FsVGhlbWUiLCJvdXRlclRoZW1lIiwibWVyZ2VPdXRlckxvY2FsVGhlbWUiLCJuZXN0ZWQiLCJJbm5lclRoZW1lUHJvdmlkZXIiLCJBY3Rpb24iLCJQb3BTdGF0ZUV2ZW50VHlwZSIsImdldEhpc3RvcnlTdGF0ZSIsInVzciIsImNyZWF0ZUxvY2F0aW9uIiwidG8iLCJwYXJzZVBhdGgiLCJwYXJzZWRQYXRoIiwiaGFzaEluZGV4Iiwic2VhcmNoSW5kZXgiLCJSZXN1bHRUeXBlIiwibWF0Y2hSb3V0ZXMiLCJyb3V0ZXMiLCJsb2NhdGlvbkFyZyIsImJhc2VuYW1lIiwic3RyaXBCYXNlbmFtZSIsImJyYW5jaGVzIiwiZmxhdHRlblJvdXRlcyIsInNjb3JlIiwic2libGluZ3MiLCJjb21wYXJlSW5kZXhlcyIsInJvdXRlc01ldGEiLCJjaGlsZHJlbkluZGV4IiwicmFua1JvdXRlQnJhbmNoZXMiLCJtYXRjaFJvdXRlQnJhbmNoIiwicGFyZW50c01ldGEiLCJwYXJlbnRQYXRoIiwicm91dGUiLCJyZWxhdGl2ZVBhdGgiLCJjYXNlU2Vuc2l0aXZlIiwiam9pblBhdGhzIiwiY29tcHV0ZVNjb3JlIiwicGFyYW1SZSIsImlzU3BsYXQiLCJzZWdtZW50cyIsImluaXRpYWxTY29yZSIsInNvbWUiLCJzZWdtZW50IiwiYnJhbmNoIiwibWF0Y2hlZFBhcmFtcyIsIm1hdGNoZWRQYXRobmFtZSIsInJlbWFpbmluZ1BhdGhuYW1lIiwicGF0aG5hbWVCYXNlIiwibm9ybWFsaXplUGF0aG5hbWUiLCJwYXJhbU5hbWVzIiwicmVnZXhwU291cmNlIiwicGFyYW1OYW1lIiwiY29tcGlsZVBhdGgiLCJjYXB0dXJlR3JvdXBzIiwic3BsYXRWYWx1ZSIsInNhZmVseURlY29kZVVSSUNvbXBvbmVudCIsInN0YXJ0SW5kZXgiLCJjb25kIiwicmVzb2x2ZVRvIiwidG9BcmciLCJyb3V0ZVBhdGhuYW1lcyIsImxvY2F0aW9uUGF0aG5hbWUiLCJpc1BhdGhSZWxhdGl2ZSIsImlzRW1wdHlQYXRoIiwidG9QYXRobmFtZSIsInJvdXRlUGF0aG5hbWVJbmRleCIsInRvU2VnbWVudHMiLCJmcm9tUGF0aG5hbWUiLCJyZXNvbHZlUGF0aG5hbWUiLCJub3JtYWxpemVTZWFyY2giLCJub3JtYWxpemVIYXNoIiwicmVzb2x2ZVBhdGgiLCJoYXNFeHBsaWNpdFRyYWlsaW5nU2xhc2giLCJoYXNDdXJyZW50VHJhaWxpbmdTbGFzaCIsInBhdGhzIiwiRGF0YVN0YXRpY1JvdXRlckNvbnRleHQiLCJEYXRhUm91dGVyQ29udGV4dCIsIkRhdGFSb3V0ZXJTdGF0ZUNvbnRleHQiLCJOYXZpZ2F0aW9uQ29udGV4dCIsIkxvY2F0aW9uQ29udGV4dCIsIlJvdXRlQ29udGV4dCIsIm91dGxldCIsIlJvdXRlRXJyb3JDb250ZXh0IiwidXNlSW5Sb3V0ZXJDb250ZXh0IiwiZ2V0UGF0aENvbnRyaWJ1dGluZ01hdGNoZXMiLCJyb3V0ZVBhdGhuYW1lc0pzb24iLCJhY3RpdmVSZWYiLCJnbyIsInJlbGF0aXZlIiwiX3RlbXAyIiwiRGVmYXVsdEVycm9yRWxlbWVudCIsIl9zdGF0ZSRlcnJvcnMiLCJob29rTmFtZSIsInVzZURhdGFSb3V0ZXJTdGF0ZSIsIkRhdGFSb3V0ZXJIb29rIiwiVXNlUm91dGVFcnJvciIsInRoaXNSb3V0ZSIsImVycm9ycyIsInVzZVJvdXRlRXJyb3IiLCJsaWdodGdyZXkiLCJwcmVTdHlsZXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJjb2RlU3R5bGVzIiwiUmVuZGVyRXJyb3JCb3VuZGFyeSIsImVycm9ySW5mbyIsIlJlbmRlcmVkUm91dGUiLCJyb3V0ZUNvbnRleHQiLCJkYXRhU3RhdGljUm91dGVyQ29udGV4dCIsImVycm9yRWxlbWVudCIsIl9kZWVwZXN0UmVuZGVyZWRCb3VuZGFyeUlkIiwiQXdhaXRSZW5kZXJTdGF0dXMiLCJSb3V0ZSIsIl9wcm9wcyIsIl9yZWY0IiwiYmFzZW5hbWVQcm9wIiwibG9jYXRpb25Qcm9wIiwibmF2aWdhdGlvblR5cGUiLCJQb3AiLCJzdGF0aWNQcm9wIiwibmF2aWdhdGlvbkNvbnRleHQiLCJ0cmFpbGluZ1BhdGhuYW1lIiwiUm91dGVzIiwiX3JlZjUiLCJkYXRhUm91dGVyQ29udGV4dCIsImRhdGFSb3V0ZXJTdGF0ZUNvbnRleHQiLCJwYXJlbnRNYXRjaGVzIiwicm91dGVNYXRjaCIsInBhcmVudFBhcmFtcyIsInBhcmVudFBhdGhuYW1lQmFzZSIsImxvY2F0aW9uRnJvbUNvbnRleHQiLCJfcGFyc2VkTG9jYXRpb25BcmckcGEiLCJwYXJzZWRMb2NhdGlvbkFyZyIsInJlbmRlcmVkTWF0Y2hlcyIsImRhdGFSb3V0ZXJTdGF0ZSIsImVycm9ySW5kZXgiLCJyZWR1Y2VSaWdodCIsImdldENoaWxkcmVuIiwiX3JlbmRlck1hdGNoZXMiLCJ1c2VSb3V0ZXMiLCJyb3V0ZXIiLCJjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW4iLCJBd2FpdEVycm9yQm91bmRhcnkiLCJyZW5kZXJFcnJvciIsIl90cmFja2VkIiwiX2Vycm9yIiwiX2RhdGEiLCJBYm9ydGVkRGVmZXJyZWRFcnJvciIsIm5ldmVyU2V0dGxlZFByb21pc2UiLCJSZWFjdCIsIkF3YWl0Q29udGV4dCIsInRyZWVQYXRoIiwibG9hZGVyIiwiaGFzRXJyb3JCb3VuZGFyeSIsInNob3VsZFJldmFsaWRhdGUiLCJoYW5kbGUiLCJnZXRQYXBlclV0aWxpdHlDbGFzcyIsImdldE92ZXJsYXlBbHBoYSIsImVsZXZhdGlvbiIsImFscGhhVmFsdWUiLCJQYXBlclJvb3QiLCJzcXVhcmUiLCJyb3VuZGVkIiwiX3RoZW1lJHZhcnMkb3ZlcmxheXMiLCJib3hTaGFkb3ciLCJiYWNrZ3JvdW5kSW1hZ2UiLCJvdmVybGF5cyIsImdldEFwcEJhclV0aWxpdHlDbGFzcyIsImpvaW5WYXJzIiwidmFyMSIsInZhcjIiLCJBcHBCYXJSb290IiwiYmFja2dyb3VuZENvbG9yRGVmYXVsdCIsImZsZXhEaXJlY3Rpb24iLCJib3hTaXppbmciLCJyaWdodCIsImVuYWJsZUNvbG9yT25EYXJrIiwiQXBwQmFyIiwiZGVmYXVsdEJnIiwiZGFya0JnIiwiZGFya0NvbG9yIiwiZ2V0VG9vbGJhclV0aWxpdHlDbGFzcyIsIlRvb2xiYXJSb290IiwiZGlzYWJsZUd1dHRlcnMiLCJndXR0ZXJzIiwiYWxpZ25JdGVtcyIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwiX3NldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfaW5oZXJpdHNMb29zZSIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImdldENoaWxkTWFwcGluZyIsIm1hcEZuIiwibWFwcGVyIiwiZ2V0UHJvcCIsImdldE5leHRDaGlsZE1hcHBpbmciLCJuZXh0UHJvcHMiLCJwcmV2Q2hpbGRNYXBwaW5nIiwib25FeGl0ZWQiLCJuZXh0Q2hpbGRNYXBwaW5nIiwiZ2V0VmFsdWVGb3JLZXkiLCJuZXh0S2V5c1BlbmRpbmciLCJwZW5kaW5nS2V5cyIsInByZXZLZXkiLCJjaGlsZE1hcHBpbmciLCJuZXh0S2V5IiwicGVuZGluZ05leHRLZXkiLCJtZXJnZUNoaWxkTWFwcGluZ3MiLCJoYXNQcmV2IiwiaGFzTmV4dCIsInByZXZDaGlsZCIsImlzTGVhdmluZyIsImluIiwiZXhpdCIsImVudGVyIiwiVHJhbnNpdGlvbkdyb3VwIiwiX1JlYWN0JENvbXBvbmVudCIsImhhbmRsZUV4aXRlZCIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJjb250ZXh0VmFsdWUiLCJpc01vdW50aW5nIiwiZmlyc3RSZW5kZXIiLCJtb3VudGVkIiwiYXBwZWFyIiwiY3VycmVudENoaWxkTWFwcGluZyIsIl90aGlzJHByb3BzIiwiY2hpbGRGYWN0b3J5IiwiVHJhbnNpdGlvbkdyb3VwQ29udGV4dCIsIkdsb2JhbCIsInNoZWV0UmVmIiwicmVoeWRyYXRpbmciLCJxdWVyeVNlbGVjdG9yIiwic2hlZXRSZWZDdXJyZW50IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiX2xlbiIsImtleWZyYW1lcyIsImluc2VydGFibGUiLCJfdCIsIl90MiIsIl90MyIsIl90NCIsImVudGVyS2V5ZnJhbWUiLCJleGl0S2V5ZnJhbWUiLCJwdWxzYXRlS2V5ZnJhbWUiLCJUb3VjaFJpcHBsZVJvb3QiLCJwb2ludGVyRXZlbnRzIiwiYm90dG9tIiwiVG91Y2hSaXBwbGVSaXBwbGUiLCJwdWxzYXRlIiwicmlwcGxlWCIsInJpcHBsZVkiLCJyaXBwbGVTaXplIiwiaW5Qcm9wIiwibGVhdmluZyIsInNldExlYXZpbmciLCJyaXBwbGVDbGFzc05hbWUiLCJyaXBwbGUiLCJyaXBwbGVWaXNpYmxlIiwicmlwcGxlUHVsc2F0ZSIsInJpcHBsZVN0eWxlcyIsImNoaWxkQ2xhc3NOYW1lIiwiY2hpbGRMZWF2aW5nIiwiY2hpbGRQdWxzYXRlIiwidGltZW91dElkIiwiVG91Y2hSaXBwbGUiLCJjZW50ZXIiLCJjZW50ZXJQcm9wIiwicmlwcGxlcyIsInNldFJpcHBsZXMiLCJyaXBwbGVDYWxsYmFjayIsImlnbm9yaW5nTW91c2VEb3duIiwic3RhcnRUaW1lciIsInN0YXJ0VGltZXJDb21taXQiLCJzdGFydENvbW1pdCIsIm9sZFJpcHBsZXMiLCJmYWtlRWxlbWVudCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzcXJ0Iiwic2l6ZVgiLCJjbGllbnRXaWR0aCIsInNpemVZIiwiY2xpZW50SGVpZ2h0Iiwic3RvcCIsImdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MiLCJCdXR0b25CYXNlUm9vdCIsImp1c3RpZnlDb250ZW50IiwiV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3IiLCJvdXRsaW5lIiwidmVydGljYWxBbGlnbiIsIk1vekFwcGVhcmFuY2UiLCJXZWJraXRBcHBlYXJhbmNlIiwidGV4dERlY29yYXRpb24iLCJib3JkZXJTdHlsZSIsImNvbG9yQWRqdXN0IiwiY2VudGVyUmlwcGxlIiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVUb3VjaFJpcHBsZSIsImZvY3VzUmlwcGxlIiwiTGlua0NvbXBvbmVudCIsIm9uQ29udGV4dE1lbnUiLCJvbkRyYWdMZWF2ZSIsIm9uRm9jdXNWaXNpYmxlIiwib25LZXlEb3duIiwib25LZXlVcCIsIm9uTW91c2VEb3duIiwib25Nb3VzZUxlYXZlIiwib25Nb3VzZVVwIiwib25Ub3VjaEVuZCIsIm9uVG91Y2hNb3ZlIiwib25Ub3VjaFN0YXJ0IiwidGFiSW5kZXgiLCJUb3VjaFJpcHBsZVByb3BzIiwidG91Y2hSaXBwbGVSZWYiLCJidXR0b25SZWYiLCJyaXBwbGVSZWYiLCJoYW5kbGVSaXBwbGVSZWYiLCJoYW5kbGVGb2N1c1Zpc2libGUiLCJoYW5kbGVCbHVyVmlzaWJsZSIsImZvY3VzVmlzaWJsZVJlZiIsInVzZUlzRm9jdXNWaXNpYmxlIiwic2V0Rm9jdXNWaXNpYmxlIiwibW91bnRlZFN0YXRlIiwic2V0TW91bnRlZFN0YXRlIiwiZW5hYmxlVG91Y2hSaXBwbGUiLCJ1c2VSaXBwbGVIYW5kbGVyIiwicmlwcGxlQWN0aW9uIiwiZXZlbnRDYWxsYmFjayIsInNraXBSaXBwbGVBY3Rpb24iLCJoYW5kbGVNb3VzZURvd24iLCJoYW5kbGVDb250ZXh0TWVudSIsImhhbmRsZURyYWdMZWF2ZSIsImhhbmRsZU1vdXNlVXAiLCJoYW5kbGVNb3VzZUxlYXZlIiwiaGFuZGxlVG91Y2hTdGFydCIsImhhbmRsZVRvdWNoRW5kIiwiaGFuZGxlVG91Y2hNb3ZlIiwiaGFuZGxlQmx1ciIsImhhbmRsZUZvY3VzIiwiaXNOb25OYXRpdmVCdXR0b24iLCJrZXlkb3duUmVmIiwiaGFuZGxlS2V5VXAiLCJDb21wb25lbnRQcm9wIiwiYnV0dG9uUHJvcHMiLCJoYW5kbGVPd25SZWYiLCJoYW5kbGVSZWYiLCJmb2N1c1Zpc2libGVDbGFzc05hbWUiLCJjb21wb3NlZENsYXNzZXMiLCJnZXRCdXR0b25VdGlsaXR5Q2xhc3MiLCJjb21tb25JY29uU3R5bGVzIiwiQnV0dG9uUm9vdCIsImNvbG9ySW5oZXJpdCIsImRpc2FibGVFbGV2YXRpb24iLCJmdWxsV2lkdGgiLCJfdGhlbWUkcGFsZXR0ZSRnZXRDb24iLCJfdGhlbWUkcGFsZXR0ZSIsInByaW1hcnlDaGFubmVsIiwibWFpbkNoYW5uZWwiLCJCdXR0b25TdGFydEljb24iLCJzdGFydEljb24iLCJtYXJnaW5SaWdodCIsIm1hcmdpbkxlZnQiLCJCdXR0b25FbmRJY29uIiwiZW5kSWNvbiIsImNvbnRleHRQcm9wcyIsInJlc29sdmVkUHJvcHMiLCJkaXNhYmxlRm9jdXNSaXBwbGUiLCJlbmRJY29uUHJvcCIsInN0YXJ0SWNvblByb3AiLCJfdXNlVXRpbGl0eUNsYXNzZXMiLCJjbGFzc2VzUm9vdCIsImdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MiLCJUeXBvZ3JhcGh5Um9vdCIsImFsaWduIiwibm9XcmFwIiwiZ3V0dGVyQm90dG9tIiwicGFyYWdyYXBoIiwidGV4dE92ZXJmbG93Iiwid2hpdGVTcGFjZSIsIm1hcmdpbkJvdHRvbSIsImRlZmF1bHRWYXJpYW50TWFwcGluZyIsImNvbG9yVHJhbnNmb3JtYXRpb25zIiwidGV4dFByaW1hcnkiLCJ0ZXh0U2Vjb25kYXJ5IiwidGhlbWVQcm9wcyIsInRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMiLCJ2YXJpYW50TWFwcGluZyIsIkZ1bmN0aW9uIiwibm4iLCJybiIsIndyaXRhYmxlIiwidG4iLCJlbiIsIm9uIiwiUHJveHkiLCJyZXZvY2FibGUiLCJyZXZva2UiLCJwcm94eSIsIm93bktleXMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVsZXRlUHJvcGVydHkiLCJ1biIsInByb2R1Y2UiLCJwcm9kdWNlV2l0aFBhdGNoZXMiLCJ1c2VQcm94aWVzIiwic2V0VXNlUHJveGllcyIsImF1dG9GcmVlemUiLCJzZXRBdXRvRnJlZXplIiwiY3JlYXRlRHJhZnQiLCJmaW5pc2hEcmFmdCIsImFwcGx5UGF0Y2hlcyIsIm9wIiwiJCIsImFuIiwiX2RlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZU9ubHkiLCJzeW1ib2xzIiwic3ltIiwiX29iamVjdFNwcmVhZDIiLCJmb3JtYXRQcm9kRXJyb3JNZXNzYWdlIiwiJCRvYnNlcnZhYmxlIiwib2JzZXJ2YWJsZSIsInJhbmRvbVN0cmluZyIsIkFjdGlvblR5cGVzIiwiSU5JVCIsIlJFUExBQ0UiLCJQUk9CRV9VTktOT1dOX0FDVElPTiIsInByb3RvIiwiY3JlYXRlU3RvcmUiLCJyZWR1Y2VyIiwicHJlbG9hZGVkU3RhdGUiLCJlbmhhbmNlciIsImN1cnJlbnRSZWR1Y2VyIiwiY3VycmVudFN0YXRlIiwiY3VycmVudExpc3RlbmVycyIsIm5leHRMaXN0ZW5lcnMiLCJpc0Rpc3BhdGNoaW5nIiwiZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycyIsImdldFN0YXRlIiwiaXNTdWJzY3JpYmVkIiwicmVwbGFjZVJlZHVjZXIiLCJuZXh0UmVkdWNlciIsIm91dGVyU3Vic2NyaWJlIiwib2JzZXJ2ZXIiLCJvYnNlcnZlU3RhdGUiLCJjb21wb3NlIiwiYXBwbHlNaWRkbGV3YXJlIiwibWlkZGxld2FyZXMiLCJzdG9yZSIsIl9kaXNwYXRjaCIsIm1pZGRsZXdhcmVBUEkiLCJtaWRkbGV3YXJlIiwiY3JlYXRlVGh1bmtNaWRkbGV3YXJlIiwiZXh0cmFBcmd1bWVudCIsInRodW5rIiwid2l0aEV4dHJhQXJndW1lbnQiLCJleHRlbmRTdGF0aWNzIiwiX19leHRlbmRzIiwiX18iLCJfX3NwcmVhZEFycmF5IiwiX19kZWZQcm9wIiwiX19kZWZQcm9wcyIsIl9fZ2V0T3duUHJvcERlc2NzIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiX19kZWZOb3JtYWxQcm9wIiwiX19zcHJlYWRWYWx1ZXMiLCJfYyIsIl9fc3ByZWFkUHJvcHMiLCJjb21wb3NlV2l0aERldlRvb2xzIiwiX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fIiwiX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyIsIk1pZGRsZXdhcmVBcnJheSIsIl9zdXBlciIsInNwZWNpZXMiLCJmcmVlemVEcmFmdGFibGUiLCJjcmVhdGVBY3Rpb24iLCJwcmVwYXJlQWN0aW9uIiwiYWN0aW9uQ3JlYXRvciIsInByZXBhcmVkIiwiZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2siLCJidWlsZGVyQ2FsbGJhY2siLCJkZWZhdWx0Q2FzZVJlZHVjZXIiLCJhY3Rpb25zTWFwIiwiYWN0aW9uTWF0Y2hlcnMiLCJhZGRDYXNlIiwidHlwZU9yQWN0aW9uQ3JlYXRvciIsImFkZE1hdGNoZXIiLCJhZGREZWZhdWx0Q2FzZSIsImNyZWF0ZVNsaWNlIiwiX3JlZHVjZXIiLCJpbml0aWFsU3RhdGUiLCJyZWR1Y2VycyIsInJlZHVjZXJOYW1lcyIsInNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lIiwic2xpY2VDYXNlUmVkdWNlcnNCeVR5cGUiLCJhY3Rpb25DcmVhdG9ycyIsImJ1aWxkUmVkdWNlciIsImV4dHJhUmVkdWNlcnMiLCJfZCIsIl9lIiwiX2YiLCJmaW5hbENhc2VSZWR1Y2VycyIsIm1hcE9yQnVpbGRlckNhbGxiYWNrIiwiZ2V0SW5pdGlhbFN0YXRlIiwiZmluYWxBY3Rpb25NYXRjaGVycyIsImZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyIiwiaXNTdGF0ZUZ1bmN0aW9uIiwiZnJvemVuSW5pdGlhbFN0YXRlXzEiLCJjYXNlUmVkdWNlcnMiLCJjciIsInByZXZpb3VzU3RhdGUiLCJjYXNlUmVkdWNlciIsImRyYWZ0IiwiY3JlYXRlUmVkdWNlciIsInJlZHVjZXJOYW1lIiwicHJlcGFyZUNhbGxiYWNrIiwibWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUiLCJwcmVwYXJlIiwiYWN0aW9ucyIsImNvbW1vblByb3BlcnRpZXMiLCJSZWplY3RXaXRoVmFsdWUiLCJGdWxmaWxsV2l0aE1ldGEiLCJtaW5pU2VyaWFsaXplRXJyb3IiLCJzaW1wbGVFcnJvciIsImNvbW1vblByb3BlcnRpZXNfMSIsImNyZWF0ZUFzeW5jVGh1bmsiLCJ0eXBlUHJlZml4IiwicGF5bG9hZENyZWF0b3IiLCJyZXF1ZXN0SWQiLCJyZXF1ZXN0U3RhdHVzIiwic2VyaWFsaXplRXJyb3IiLCJyZWplY3RlZFdpdGhWYWx1ZSIsImNvbmRpdGlvbiIsIkFDIiwiQWJvcnRDb250cm9sbGVyIiwiY2xhc3NfMSIsInRocm93SWZBYm9ydGVkIiwiZXh0cmEiLCJhYm9ydFJlYXNvbiIsImlkR2VuZXJhdG9yIiwibmFub2lkIiwiYWJvcnRDb250cm9sbGVyIiwiYWJvcnRlZFByb21pc2UiLCJzdGFydGVkIiwiX190aGlzIiwiX19hcmd1bWVudHMiLCJfYSIsIl9iIiwiZmluYWxBY3Rpb24iLCJjb25kaXRpb25SZXN1bHQiLCJlcnJfMSIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsIl9fZ2VuZXJhdG9yIiwiZ2V0UGVuZGluZ01ldGEiLCJyYWNlIiwicmVqZWN0V2l0aFZhbHVlIiwiZnVsZmlsbFdpdGhWYWx1ZSIsImRpc3BhdGNoQ29uZGl0aW9uUmVqZWN0aW9uIiwidGhyb3ciLCJ1bndyYXAiLCJ1bndyYXBSZXN1bHQiLCJhbG0iLCJERUZBVUxUX1BST0pFQ1QiLCJERUZBVUxUX0NMSVBCT0FSRCIsInVzZXJJbmZvU2xpY2UiLCJzaG93TG9naW4iLCJzaG93U2F2ZSIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsInVzZXJJZCIsInByb2plY3RzSW5mbyIsInByb2plY3RfaWQiLCJwcm9qZWN0X25hbWUiLCJ1c2VyX2lkIiwic2hvd0FjY2Vzc0NsaXBib2FyZCIsImN1cnJlbnRQcm9qZWN0IiwiY3VycmVudFByb2plY3RJZCIsIm5ld1Byb2plY3QiLCJzZXRTaG93TG9naW4iLCJzZXRTaG93U2F2ZSIsInNldFByb2plY3RzSW5mbyIsInNldEN1cnJlbnRQcm9qZWN0IiwicHJvamVjdHMiLCJwcm9qZWN0SWRzIiwic2V0TmV3UHJvamVjdCIsInNldFVzZXJJZCIsImxvZ291dCIsInNldENsaXBib2FyZERhdGEiLCJwcm9qZWN0IiwicHJvamVjdElkIiwiY2xpcGJvYXJkSW5mbyIsInNldFNob3dBY2Nlc3NDbGlwYm9hcmQiLCJkZWxldGVQcm9qZWN0IiwidGh1bmtzIiwiYXN5bmMiLCJiYXRjaCIsImdldEJhdGNoIiwicmVmRXF1YWxpdHkiLCJjcmVhdGVTZWxlY3Rvckhvb2siLCJ1c2VSZWR1eENvbnRleHQiLCJlcXVhbGl0eUZuIiwic3Vic2NyaXB0aW9uIiwiZ2V0U2VydmVyU3RhdGUiLCJzZWxlY3RlZFN0YXRlIiwiYWRkTmVzdGVkU3ViIiwidXNlU2VsZWN0b3IiLCJudWxsTGlzdGVuZXJzIiwibm90aWZ5Iiwic2VydmVyU3RhdGUiLCJwYXJlbnRTdWIiLCJoYW5kbGVDaGFuZ2VXcmFwcGVyIiwib25TdGF0ZUNoYW5nZSIsInRyeVN1YnNjcmliZSIsImZpcnN0IiwiY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uIiwibm90aWZ5TmVzdGVkU3VicyIsIkJvb2xlYW4iLCJ0cnlVbnN1YnNjcmliZSIsImdldExpc3RlbmVycyIsIkNvbnRleHQiLCJjcmVhdGVTdG9yZUhvb2siLCJjcmVhdGVEaXNwYXRjaEhvb2siLCJ1c2VTdG9yZSIsInVzZURpc3BhdGNoIiwibmV3QmF0Y2giLCJpbml0aWFsaXplVXNlU2VsZWN0b3IiLCJpbml0aWFsaXplQ29ubmVjdCIsInVzZUFwcERpc3BhdGNoIiwidXNlQXBwU2VsZWN0b3IiLCJkaXNhYmxlUG9ydGFsIiwibW91bnROb2RlIiwic2V0TW91bnROb2RlIiwidXNlRW5oYW5jZWRFZmZlY3QiLCJnZXRDb250YWluZXIiLCJnZXRTY3JvbGxiYXJTaXplIiwiZG9jdW1lbnRXaWR0aCIsImlubmVyV2lkdGgiLCJhcmlhSGlkZGVuIiwic2hvdyIsImdldFBhZGRpbmdSaWdodCIsImdldENvbXB1dGVkU3R5bGUiLCJhcmlhSGlkZGVuU2libGluZ3MiLCJtb3VudEVsZW1lbnQiLCJjdXJyZW50RWxlbWVudCIsImVsZW1lbnRzVG9FeGNsdWRlIiwiaXNOb3RFeGNsdWRlZEVsZW1lbnQiLCJpc05vdEZvcmJpZGRlbkVsZW1lbnQiLCJpc0ZvcmJpZGRlblRhZ05hbWUiLCJpc0lucHV0SGlkZGVuIiwiaXNBcmlhSGlkZGVuRm9yYmlkZGVuT25FbGVtZW50IiwiZmluZEluZGV4T2YiLCJpZHgiLCJjYW5kaWRhdGVzU2VsZWN0b3IiLCJkZWZhdWx0R2V0VGFiYmFibGUiLCJyZWd1bGFyVGFiTm9kZXMiLCJvcmRlcmVkVGFiTm9kZXMiLCJub2RlVGFiSW5kZXgiLCJ0YWJpbmRleEF0dHIiLCJnZXRUYWJJbmRleCIsImdldFJhZGlvIiwicm92aW5nIiwiaXNOb25UYWJiYWJsZVJhZGlvIiwiaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZSIsImRvY3VtZW50T3JkZXIiLCJkZWZhdWx0SXNFbmFibGVkIiwiZGlzYWJsZUF1dG9Gb2N1cyIsImRpc2FibGVFbmZvcmNlRm9jdXMiLCJkaXNhYmxlUmVzdG9yZUZvY3VzIiwiZ2V0VGFiYmFibGUiLCJpc0VuYWJsZWQiLCJpZ25vcmVOZXh0RW5mb3JjZUZvY3VzIiwic2VudGluZWxTdGFydCIsInNlbnRpbmVsRW5kIiwibm9kZVRvUmVzdG9yZSIsInJlYWN0Rm9jdXNFdmVudFRhcmdldCIsImFjdGl2YXRlZCIsInJvb3RSZWYiLCJsYXN0S2V5ZG93biIsImhhc0F0dHJpYnV0ZSIsImNvbnRhaW4iLCJyb290RWxlbWVudCIsImhhc0ZvY3VzIiwidGFiYmFibGUiLCJfbGFzdEtleWRvd24kY3VycmVudCIsIl9sYXN0S2V5ZG93biRjdXJyZW50MiIsImlzU2hpZnRUYWIiLCJmb2N1c05leHQiLCJmb2N1c1ByZXZpb3VzIiwibG9vcEZvY3VzIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJoYW5kbGVGb2N1c1NlbnRpbmVsIiwiY2hpbGRyZW5Qcm9wc0hhbmRsZXIiLCJnZXRNb2RhbFV0aWxpdHlDbGFzcyIsImFwcGVuZE93bmVyU3RhdGUiLCJvbWl0RXZlbnRIYW5kbGVycyIsInJlc29sdmVDb21wb25lbnRQcm9wcyIsImNvbXBvbmVudFByb3BzIiwidXNlU2xvdFByb3BzIiwicGFyYW1ldGVycyIsIl9wYXJhbWV0ZXJzJGFkZGl0aW9uYSIsImV4dGVybmFsU2xvdFByb3BzIiwicmVzdCIsInJlc29sdmVkQ29tcG9uZW50c1Byb3BzIiwiaW50ZXJuYWxSZWYiLCJnZXRTbG90UHJvcHMiLCJhZGRpdGlvbmFsUHJvcHMiLCJleHRlcm5hbEZvcndhcmRlZFByb3BzIiwiam9pbmVkQ2xhc3NlcyIsIm1lcmdlZFN0eWxlIiwiZXZlbnRIYW5kbGVycyIsImV4Y2x1ZGVLZXlzIiwiZXh0cmFjdEV2ZW50SGFuZGxlcnMiLCJjb21wb25lbnRzUHJvcHNXaXRob3V0RXZlbnRIYW5kbGVycyIsIm90aGVyUHJvcHNXaXRob3V0RXZlbnRIYW5kbGVycyIsImludGVybmFsU2xvdFByb3BzIiwibWVyZ2VTbG90UHJvcHMiLCJkZWZhdWx0TWFuYWdlciIsImNvbnRhaW5lcnMiLCJtb2RhbHMiLCJtb2RhbEluZGV4IiwibW9kYWxSZWYiLCJoaWRkZW5TaWJsaW5ncyIsImdldEhpZGRlblNpYmxpbmdzIiwibW91bnQiLCJjb250YWluZXJJbmRleCIsInJlc3RvcmUiLCJyZXN0b3JlU3R5bGUiLCJkaXNhYmxlU2Nyb2xsTG9jayIsInNjcm9sbEhlaWdodCIsImlzT3ZlcmZsb3dpbmciLCJzY3JvbGxiYXJTaXplIiwic2Nyb2xsQ29udGFpbmVyIiwiRG9jdW1lbnRGcmFnbWVudCIsInBhcmVudEVsZW1lbnQiLCJjb250YWluZXJXaW5kb3ciLCJvdmVyZmxvd1kiLCJvdmVyZmxvd1giLCJyZW1vdmVQcm9wZXJ0eSIsImhhbmRsZUNvbnRhaW5lciIsImFyaWFIaWRkZW5TdGF0ZSIsIm5leHRUb3AiLCJpc1RvcE1vZGFsIiwiX3Byb3BzJGFyaWFIaWRkZW4iLCJjbGFzc2VzUHJvcCIsImNsb3NlQWZ0ZXJUcmFuc2l0aW9uIiwiY29tcG9uZW50c1Byb3BzIiwiZGlzYWJsZUVzY2FwZUtleURvd24iLCJoaWRlQmFja2Ryb3AiLCJrZWVwTW91bnRlZCIsIm1hbmFnZXIiLCJvbkJhY2tkcm9wQ2xpY2siLCJvbkNsb3NlIiwib25UcmFuc2l0aW9uRW50ZXIiLCJvblRyYW5zaXRpb25FeGl0ZWQiLCJleGl0ZWQiLCJzZXRFeGl0ZWQiLCJtb3VudE5vZGVSZWYiLCJoYXNUcmFuc2l0aW9uIiwiZ2V0SGFzVHJhbnNpdGlvbiIsImFyaWFIaWRkZW5Qcm9wIiwiZ2V0TW9kYWwiLCJoYW5kbGVNb3VudGVkIiwiaGFuZGxlT3BlbiIsInJlc29sdmVkQ29udGFpbmVyIiwiaGFuZGxlUG9ydGFsUmVmIiwiaGFuZGxlQ2xvc2UiLCJjaGlsZFByb3BzIiwib25FbnRlciIsIlJvb3QiLCJyb290UHJvcHMiLCJCYWNrZHJvcENvbXBvbmVudCIsIkJhY2tkcm9wIiwiYmFja2Ryb3BQcm9wcyIsImJhY2tkcm9wIiwiVU5NT1VOVEVEIiwiRVhJVEVEIiwiRU5URVJJTkciLCJFTlRFUkVEIiwiRVhJVElORyIsIlRyYW5zaXRpb24iLCJpbml0aWFsU3RhdHVzIiwiYXBwZWFyU3RhdHVzIiwidW5tb3VudE9uRXhpdCIsIm1vdW50T25FbnRlciIsIm5leHRDYWxsYmFjayIsInByZXZTdGF0ZSIsInVwZGF0ZVN0YXR1cyIsInByZXZQcm9wcyIsIm5leHRTdGF0dXMiLCJjYW5jZWxOZXh0Q2FsbGJhY2siLCJnZXRUaW1lb3V0cyIsIm1vdW50aW5nIiwibm9kZVJlZiIsImZvcmNlUmVmbG93IiwicGVyZm9ybUVudGVyIiwicGVyZm9ybUV4aXQiLCJfdGhpczIiLCJhcHBlYXJpbmciLCJtYXliZU5vZGUiLCJtYXliZUFwcGVhcmluZyIsInRpbWVvdXRzIiwiZW50ZXJUaW1lb3V0Iiwic2FmZVNldFN0YXRlIiwib25FbnRlcmluZyIsIm9uVHJhbnNpdGlvbkVuZCIsIm9uRW50ZXJlZCIsIl90aGlzMyIsIm9uRXhpdCIsIm9uRXhpdGluZyIsIm5leHRTdGF0ZSIsInNldE5leHRDYWxsYmFjayIsIl90aGlzNCIsImhhbmRsZXIiLCJkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyIiwiYWRkRW5kTGlzdGVuZXIiLCJfcmVmMyIsIm1heWJlTmV4dENhbGxiYWNrIiwicmVmbG93IiwiZ2V0VHJhbnNpdGlvblByb3BzIiwiX3N0eWxlJHRyYW5zaXRpb25EdXJhIiwiX3N0eWxlJHRyYW5zaXRpb25UaW1pIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwidHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIiwidHJhbnNpdGlvbkRlbGF5IiwiZW50ZXJpbmciLCJlbnRlcmVkIiwiRmFkZSIsImRlZmF1bHRUaW1lb3V0IiwiVHJhbnNpdGlvbkNvbXBvbmVudCIsImZvcmVpZ25SZWYiLCJub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrIiwibWF5YmVJc0FwcGVhcmluZyIsImhhbmRsZUVudGVyaW5nIiwiaGFuZGxlRW50ZXIiLCJpc0FwcGVhcmluZyIsInRyYW5zaXRpb25Qcm9wcyIsIndlYmtpdFRyYW5zaXRpb24iLCJoYW5kbGVFbnRlcmVkIiwiaGFuZGxlRXhpdGluZyIsImhhbmRsZUV4aXQiLCJ2aXNpYmlsaXR5IiwiZ2V0QmFja2Ryb3BVdGlsaXR5Q2xhc3MiLCJCYWNrZHJvcFJvb3QiLCJpbnZpc2libGUiLCJfY29tcG9uZW50cyRSb290IiwiX2NvbXBvbmVudHNQcm9wcyRyb290IiwiTW9kYWxSb290IiwiaGlkZGVuIiwiTW9kYWxCYWNrZHJvcCIsIk1vZGFsIiwiQmFja2Ryb3BQcm9wcyIsImNvbW1vblByb3BzIiwiZXh0ZW5kVXRpbGl0eUNsYXNzZXMiLCJnZXREaWFsb2dVdGlsaXR5Q2xhc3MiLCJEaWFsb2dCYWNrZHJvcCIsIm92ZXJyaWRlcyIsIkRpYWxvZ1Jvb3QiLCJEaWFsb2dDb250YWluZXIiLCJzY3JvbGwiLCJEaWFsb2dQYXBlciIsInBhcGVyRnVsbFdpZHRoIiwiZnVsbFNjcmVlbiIsInBhcGVyRnVsbFNjcmVlbiIsIkRpYWxvZyIsImRlZmF1bHRUcmFuc2l0aW9uRHVyYXRpb24iLCJhcmlhRGVzY3JpYmVkYnkiLCJhcmlhTGFiZWxsZWRieVByb3AiLCJQYXBlckNvbXBvbmVudCIsIlBhcGVyUHJvcHMiLCJUcmFuc2l0aW9uUHJvcHMiLCJiYWNrZHJvcENsaWNrIiwiYXJpYUxhYmVsbGVkYnkiLCJkaWFsb2dDb250ZXh0VmFsdWUiLCJ0aXRsZUlkIiwiZ2V0RGlhbG9nVGl0bGVVdGlsaXR5Q2xhc3MiLCJEaWFsb2dUaXRsZVJvb3QiLCJpZFByb3AiLCJMb2dpbiIsInJlbW92ZUl0ZW0iLCJhbHQiLCJHaXRIdWIiLCJCcm93c2VyUm91dGVyIiwiaGlzdG9yeVJlZiIsInY1Q29tcGF0IiwiZ2V0TG9jYXRpb24iLCJjcmVhdGVIcmVmIiwidmFsaWRhdGVMb2NhdGlvbiIsImdsb2JhbEhpc3RvcnkiLCJoaXN0b3J5IiwiaGFuZGxlUG9wIiwibGlzdGVuIiwiUHVzaCIsImhpc3RvcnlTdGF0ZSIsInB1c2hTdGF0ZSIsIlJlcGxhY2UiLCJyZXBsYWNlU3RhdGUiLCJnZXRVcmxCYXNlZEhpc3RvcnkiLCJMaW5rIiwicmVsb2FkRG9jdW1lbnQiLCJwcmV2ZW50U2Nyb2xsUmVzZXQiLCJfdGVtcCIsImpvaW5lZFBhdGhuYW1lIiwidXNlSHJlZiIsImludGVybmFsT25DbGljayIsInJlcGxhY2VQcm9wIiwibmF2aWdhdGUiLCJpc01vZGlmaWVkRXZlbnQiLCJzaG91bGRQcm9jZXNzTGlua0NsaWNrIiwidXNlTGlua0NsaWNrSGFuZGxlciIsImFwaSIsImluaXQiLCJjb252ZXJ0ZXIiLCJkZWZhdWx0QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJ0b1VUQ1N0cmluZyIsInN0cmluZ2lmaWVkQXR0cmlidXRlcyIsImphciIsImZvdW5kS2V5Iiwid2l0aEF0dHJpYnV0ZXMiLCJ3aXRoQ29udmVydGVyIiwidXNlTmF2aWdhdGUiLCJ1c2VySW5mbyIsImNsaXBib2FyZCIsImNvZGVTbmlwcGV0cyIsIkNvb2tpZXMiLCJMb2dvdXQiLCJzZXRJdGVtIiwiZ2V0TGlua1V0aWxpdHlDbGFzcyIsInRyYW5zZm9ybWVkQ29sb3IiLCJjaGFubmVsQ29sb3IiLCJMaW5rUm9vdCIsInVuZGVybGluZSIsInRleHREZWNvcmF0aW9uQ29sb3IiLCJUeXBvZ3JhcGh5Q2xhc3NlcyIsImhhbmRsZXJSZWYiLCJweSIsIm10IiwiZ2V0RnVsbFllYXIiLCJnZXRTdHlsZVZhbHVlIiwiY29tcHV0ZWRTdHlsZSIsIlRleHRhcmVhQXV0b3NpemUiLCJvbkNoYW5nZSIsIm1heFJvd3MiLCJtaW5Sb3dzIiwiaW5wdXRSZWYiLCJzaGFkb3dSZWYiLCJyZW5kZXJzIiwiZ2V0VXBkYXRlZFN0YXRlIiwiaW5wdXRTaGFsbG93IiwicGxhY2Vob2xkZXIiLCJpbm5lckhlaWdodCIsInNpbmdsZVJvd0hlaWdodCIsIm91dGVySGVpZ2h0Iiwib3V0ZXJIZWlnaHRTdHlsZSIsInVwZGF0ZVN0YXRlIiwibmV3U3RhdGUiLCJzeW5jSGVpZ2h0IiwiaGFuZGxlUmVzaXplIiwic3luY0hlaWdodFdpdGhGbHVzaFN5Y24iLCJyZXNpemVPYnNlcnZlciIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJyb3dzIiwiZm9ybUNvbnRyb2xTdGF0ZSIsInN0YXRlcyIsIm11aUZvcm1Db250cm9sIiwidXNlRm9ybUNvbnRyb2wiLCJHbG9iYWxTdHlsZXMiLCJnbG9iYWxTdHlsZXMiLCJpc0ZpbGxlZCIsIlNTUiIsImdldElucHV0QmFzZVV0aWxpdHlDbGFzcyIsInJvb3RPdmVycmlkZXNSZXNvbHZlciIsImZvcm1Db250cm9sIiwic3RhcnRBZG9ybm1lbnQiLCJhZG9ybmVkU3RhcnQiLCJlbmRBZG9ybm1lbnQiLCJhZG9ybmVkRW5kIiwic2l6ZVNtYWxsIiwibXVsdGlsaW5lIiwiaGlkZGVuTGFiZWwiLCJpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIiwiaW5wdXRTaXplU21hbGwiLCJpbnB1dE11bHRpbGluZSIsImlucHV0VHlwZVNlYXJjaCIsImlucHV0QWRvcm5lZFN0YXJ0IiwiaW5wdXRBZG9ybmVkRW5kIiwiaW5wdXRIaWRkZW5MYWJlbCIsIklucHV0QmFzZVJvb3QiLCJwYWRkaW5nVG9wIiwiSW5wdXRCYXNlQ29tcG9uZW50IiwiaW5wdXRQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVySGlkZGVuIiwicGxhY2Vob2xkZXJWaXNpYmxlIiwiZm9udCIsImFuaW1hdGlvbkR1cmF0aW9uIiwiV2Via2l0VGV4dEZpbGxDb2xvciIsInJlc2l6ZSIsImlucHV0R2xvYmFsU3R5bGVzIiwiSW5wdXRCYXNlIiwiYXV0b0NvbXBsZXRlIiwiZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlcyIsImlucHV0Q29tcG9uZW50IiwiaW5wdXRQcm9wc1Byb3AiLCJpbnB1dFJlZlByb3AiLCJyZW5kZXJTdWZmaXgiLCJ2YWx1ZVByb3AiLCJoYW5kbGVJbnB1dFJlZldhcm5pbmciLCJoYW5kbGVJbnB1dFByb3BzUmVmUHJvcCIsImhhbmRsZUlucHV0UmVmUHJvcCIsImhhbmRsZUlucHV0UmVmIiwic2V0Rm9jdXNlZCIsImZjcyIsIm9uRmlsbGVkIiwib25FbXB0eSIsImNoZWNrRGlydHkiLCJJbnB1dENvbXBvbmVudCIsInNldEFkb3JuZWRTdGFydCIsIklucHV0Iiwib25BbmltYXRpb25TdGFydCIsImdldElucHV0VXRpbGl0eUNsYXNzIiwiSW5wdXRSb290IiwiZGlzYWJsZVVuZGVybGluZSIsImJvdHRvbUxpbmVDb2xvciIsIm9uQmFja2dyb3VuZENoYW5uZWwiLCJpbnB1dFVuZGVybGluZSIsIm1hcmdpblRvcCIsImJvcmRlckJvdHRvbVN0eWxlIiwiSW5wdXRJbnB1dCIsImNvbXBvbmVudHNQcm9wc1Byb3AiLCJpbnB1dENvbXBvbmVudHNQcm9wcyIsImdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzIiwiRmlsbGVkSW5wdXRSb290IiwiaG92ZXJCYWNrZ3JvdW5kIiwiRmlsbGVkSW5wdXQiLCJib3JkZXJUb3BMZWZ0UmFkaXVzIiwiYm9yZGVyVG9wUmlnaHRSYWRpdXMiLCJob3ZlckJnIiwiZGlzYWJsZWRCZyIsInBhZGRpbmdCb3R0b20iLCJGaWxsZWRJbnB1dElucHV0IiwiV2Via2l0Qm94U2hhZG93IiwiY2FyZXRDb2xvciIsImdldENvbG9yU2NoZW1lU2VsZWN0b3IiLCJmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcyIsIl9zcGFuIiwiTm90Y2hlZE91dGxpbmVSb290IiwiYm9yZGVyV2lkdGgiLCJOb3RjaGVkT3V0bGluZUxlZ2VuZCIsImZsb2F0Iiwid2l0aExhYmVsIiwibm90Y2hlZCIsImdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3MiLCJPdXRsaW5lZElucHV0Um9vdCIsIm5vdGNoZWRPdXRsaW5lIiwiT3V0bGluZWRJbnB1dElucHV0IiwiT3V0bGluZWRJbnB1dCIsIl9SZWFjdCRGcmFnbWVudCIsImZpbGxlZCIsImdldEZvcm1MYWJlbFV0aWxpdHlDbGFzc2VzIiwiRm9ybUxhYmVsUm9vdCIsImNvbG9yU2Vjb25kYXJ5IiwiQXN0ZXJpc2tDb21wb25lbnQiLCJhc3RlcmlzayIsImdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcyIsIklucHV0TGFiZWxSb290Iiwic2hyaW5rIiwiZGlzYWJsZUFuaW1hdGlvbiIsImFuaW1hdGVkIiwidHJhbnNmb3JtT3JpZ2luIiwic2hyaW5rUHJvcCIsImdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMiLCJGb3JtQ29udHJvbFJvb3QiLCJ2aXN1YWxseUZvY3VzZWQiLCJpbml0aWFsQWRvcm5lZFN0YXJ0IiwiaXNNdWlFbGVtZW50Iiwic2V0RmlsbGVkIiwiaW5pdGlhbEZpbGxlZCIsImZvY3VzZWRTdGF0ZSIsImNoaWxkQ29udGV4dCIsInJlZ2lzdGVyRWZmZWN0IiwiZ2V0Rm9ybUhlbHBlclRleHRVdGlsaXR5Q2xhc3NlcyIsIkZvcm1IZWxwZXJUZXh0Um9vdCIsImNvbnRhaW5lZCIsImdldExpc3RVdGlsaXR5Q2xhc3MiLCJMaXN0Um9vdCIsImRpc2FibGVQYWRkaW5nIiwiZGVuc2UiLCJzdWJoZWFkZXIiLCJsaXN0U3R5bGUiLCJuZXh0SXRlbSIsImRpc2FibGVMaXN0V3JhcCIsInByZXZpb3VzSXRlbSIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJ0ZXh0Q3JpdGVyaWFNYXRjaGVzIiwibmV4dEZvY3VzIiwidGV4dENyaXRlcmlhIiwiaW5uZXJUZXh0IiwicmVwZWF0aW5nIiwibW92ZUZvY3VzIiwiY3VycmVudEZvY3VzIiwiZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSIsInRyYXZlcnNhbEZ1bmN0aW9uIiwid3JhcHBlZE9uY2UiLCJuZXh0Rm9jdXNEaXNhYmxlZCIsIk1lbnVMaXN0IiwiYXV0b0ZvY3VzSXRlbSIsImxpc3RSZWYiLCJ0ZXh0Q3JpdGVyaWFSZWYiLCJwcmV2aW91c0tleU1hdGNoZWQiLCJsYXN0VGltZSIsImFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyIiwiY29udGFpbmVyRWxlbWVudCIsIm5vRXhwbGljaXRXaWR0aCIsImFjdGl2ZUl0ZW1JbmRleCIsIm5ld0NoaWxkUHJvcHMiLCJjcml0ZXJpYSIsImxvd2VyS2V5IiwiY3VyclRpbWUiLCJrZWVwRm9jdXNPbkN1cnJlbnQiLCJnZXRTY2FsZSIsImlzV2ViS2l0MTU0IiwiR3JvdyIsInRpbWVyIiwiYXV0b1RpbWVvdXQiLCJtdWlTdXBwb3J0QXV0byIsImdldFBvcG92ZXJVdGlsaXR5Q2xhc3MiLCJnZXRPZmZzZXRUb3AiLCJ2ZXJ0aWNhbCIsImdldE9mZnNldExlZnQiLCJob3Jpem9udGFsIiwiZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUiLCJyZXNvbHZlQW5jaG9yRWwiLCJhbmNob3JFbCIsIlBvcG92ZXJSb290IiwiUG9wb3ZlclBhcGVyIiwiUG9wb3ZlciIsImFuY2hvck9yaWdpbiIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yUmVmZXJlbmNlIiwiY29udGFpbmVyUHJvcCIsIm1hcmdpblRocmVzaG9sZCIsInRyYW5zaXRpb25EdXJhdGlvblByb3AiLCJwYXBlclJlZiIsImhhbmRsZVBhcGVyUmVmIiwiZ2V0QW5jaG9yT2Zmc2V0IiwicmVzb2x2ZWRBbmNob3JFbCIsImFuY2hvclJlY3QiLCJnZXRUcmFuc2Zvcm1PcmlnaW4iLCJlbGVtUmVjdCIsImdldFBvc2l0aW9uaW5nU3R5bGUiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImVsZW1UcmFuc2Zvcm1PcmlnaW4iLCJoZWlnaHRUaHJlc2hvbGQiLCJ3aWR0aFRocmVzaG9sZCIsImRpZmYiLCJzZXRQb3NpdGlvbmluZ1N0eWxlcyIsInBvc2l0aW9uaW5nIiwidXBkYXRlUG9zaXRpb24iLCJnZXRNZW51VXRpbGl0eUNsYXNzIiwiUlRMX09SSUdJTiIsIkxUUl9PUklHSU4iLCJNZW51Um9vdCIsIk1lbnVQYXBlciIsIldlYmtpdE92ZXJmbG93U2Nyb2xsaW5nIiwiTWVudU1lbnVMaXN0IiwiZGlzYWJsZUF1dG9Gb2N1c0l0ZW0iLCJNZW51TGlzdFByb3BzIiwiUG9wb3ZlckNsYXNzZXMiLCJpc1J0bCIsIm1lbnVMaXN0QWN0aW9uc1JlZiIsImdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzIiwibmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzIiwiTmF0aXZlU2VsZWN0U2VsZWN0Iiwic2VsZWN0IiwibmF0aXZlU2VsZWN0SWNvblN0eWxlcyIsIk5hdGl2ZVNlbGVjdEljb24iLCJpY29uT3BlbiIsIkljb25Db21wb25lbnQiLCJnZXRTZWxlY3RVdGlsaXR5Q2xhc3NlcyIsIlNlbGVjdFNlbGVjdCIsIlNlbGVjdEljb24iLCJTZWxlY3ROYXRpdmVJbnB1dCIsIm5hdGl2ZUlucHV0IiwiYXJlRXF1YWxWYWx1ZXMiLCJTZWxlY3RJbnB1dCIsImFyaWFMYWJlbCIsImF1dG9XaWR0aCIsImRlZmF1bHRPcGVuIiwiZGlzcGxheUVtcHR5IiwibGFiZWxJZCIsIk1lbnVQcm9wcyIsIm9uT3BlbiIsIm9wZW5Qcm9wIiwicmVuZGVyVmFsdWUiLCJTZWxlY3REaXNwbGF5UHJvcHMiLCJ0YWJJbmRleFByb3AiLCJzZXRWYWx1ZVN0YXRlIiwidXNlQ29udHJvbGxlZCIsIm9wZW5TdGF0ZSIsInNldE9wZW5TdGF0ZSIsImRpc3BsYXlSZWYiLCJkaXNwbGF5Tm9kZSIsInNldERpc3BsYXlOb2RlIiwiaXNPcGVuQ29udHJvbGxlZCIsIm1lbnVNaW5XaWR0aFN0YXRlIiwic2V0TWVudU1pbldpZHRoU3RhdGUiLCJoYW5kbGVEaXNwbGF5UmVmIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc0NvbGxhcHNlZCIsInVwZGF0ZSIsImNoaWxkcmVuQXJyYXkiLCJoYW5kbGVJdGVtQ2xpY2siLCJpdGVtSW5kZXgiLCJjbG9uZWRFdmVudCIsImRpc3BsYXlTaW5nbGUiLCJkaXNwbGF5TXVsdGlwbGUiLCJjb21wdXRlRGlzcGxheSIsImZvdW5kTWF0Y2giLCJmaXJzdFNlbGVjdGFibGVFbGVtZW50IiwiaXNGaXJzdFNlbGVjdGFibGVFbGVtZW50IiwibWVudU1pbldpZHRoIiwiYnV0dG9uSWQiLCJfU3R5bGVkSW5wdXQiLCJfU3R5bGVkRmlsbGVkSW5wdXQiLCJzdHlsZWRSb290Q29uZmlnIiwiU3R5bGVkSW5wdXQiLCJTdHlsZWRPdXRsaW5lZElucHV0IiwiU3R5bGVkRmlsbGVkSW5wdXQiLCJTZWxlY3QiLCJBcnJvd0Ryb3BEb3duIiwibmF0aXZlIiwidmFyaWFudFByb3AiLCJvdXRsaW5lZCIsImlucHV0Q29tcG9uZW50UmVmIiwiZ2V0VGV4dEZpZWxkVXRpbGl0eUNsYXNzIiwidmFyaWFudENvbXBvbmVudCIsIlRleHRGaWVsZFJvb3QiLCJGb3JtSGVscGVyVGV4dFByb3BzIiwiaGVscGVyVGV4dCIsIklucHV0TGFiZWxQcm9wcyIsIklucHV0UHJvcHMiLCJTZWxlY3RQcm9wcyIsIklucHV0TW9yZSIsImhlbHBlclRleHRJZCIsImlucHV0TGFiZWxJZCIsIklucHV0RWxlbWVudCIsImh0bWxGb3IiLCJnZXRNZW51SXRlbVV0aWxpdHlDbGFzcyIsIk1lbnVJdGVtUm9vdCIsImJhY2tncm91bmRDbGlwIiwibWVudUl0ZW1SZWYiLCJ0ZXN0Rm9ybVNsaWNlIiwicmVxdWVzdFR5cGUiLCJhc3NlcnRpb25MaXN0IiwidXNlcklucHV0IiwiYXNzZXJ0aW9uVHlwZXMiLCJzZXRSZXF1ZXN0VHlwZSIsImFkZEFzc2VydGlvbiIsInNldElucHV0VHlwZSIsImRlbGV0ZUFzc2VydGlvbiIsImNvZGVTbGljZSIsImNvZGVPdXRwdXQiLCJjb3B5VGV4dCIsIndyaXRlVGV4dCIsInNldENvZGVPdXRwdXQiLCJ1c2VySW5wdXRTbGljZSIsImVycm9yTXNncyIsInVzZXJJbnB1dFR5cGUiLCJ1c2VySW5wdXRUZXh0Iiwic2V0RXJyb3JNc2ciLCJjaGFuZ2VFcnJvck1zZyIsInByb3BzSWQiLCJuZXdNc2ciLCJzZXRVc2VySW5wdXRUeXBlIiwic2V0VXNlcklucHV0VGV4dCIsIkFzc2VydGlvbnMiLCJjdXJyVmFsdWUiLCJ0ZXN0Rm9ybSIsImFzc2VydGlvbnMiLCJ2ZXJpZnlJbnB1dFR5cGUiLCJzdGF0dXNDb3VudCIsImNvbnRlbnRDb3VudCIsInZlcmlmeU51bUlucHV0cyIsIlJlcXVlc3RCb2R5Iiwic2hvd0ZpZWxkIiwiUHJvamVjdERyb3Bkb3duIiwicHJvamVjdE5hbWUiLCJtZW51SXRlbXMiLCJUZXN0SW5wdXRGb3JtIiwiaXNMb2dnZWRJbiIsImFzc2VydGlvbk9iamVjdCIsImFzc2VydGlvbklkcyIsIm1lbnVPcHRpb25zIiwib3B0aW9uIiwib25TdWJtaXQiLCJhbGVydCIsImZvcm1WYWx1ZXMiLCJmcm9tRW50cmllcyIsImdldERhdGEiLCJlbmRwb2ludCIsInJlcV9ib2R5IiwiY29udGVudEFzc2VydGlvbiIsInN0YXR1c0Fzc2VydGlvbiIsInJlc19ib2R5IiwicmVxdWVzdEJvZHkiLCJoZWFkZXIiLCJqdXN0aWZ5U2VsZiIsImFsaWduU2VsZiIsInVwZGF0ZUNvZGVEaXNwbGF5IiwiY29kZVNuaXBzIiwic25pcHBldCIsImNvZGVBcnIiLCJzZXJ2ZXIiLCJjb2RlRGlzcGxheSIsImNsaXBib2FyZFNsaWNlIiwiYXBwZW5kVG9DbGlwYm9hcmQiLCJjb3B5Q2xpcGJvYXJkIiwic2V0U2VydmVyIiwiY2xlYXJDbGlwYm9hcmRTdGF0ZSIsInNldFNuaXBwZXRzIiwiZ2V0U25pcHBldHMiLCJwb3N0U25pcHBldCIsImNvZGVfc25pcHBldHMiLCJnZXRXaW5kb3ciLCJpc0hUTUxFbGVtZW50IiwiaXNTaGFkb3dSb290IiwiU2hhZG93Um9vdCIsImdldFVBU3RyaW5nIiwidWFEYXRhIiwidXNlckFnZW50RGF0YSIsImJyYW5kcyIsImJyYW5kIiwiaXNMYXlvdXRWaWV3cG9ydCIsImluY2x1ZGVTY2FsZSIsImlzRml4ZWRTdHJhdGVneSIsImNsaWVudFJlY3QiLCJzY2FsZVgiLCJzY2FsZVkiLCJ2aXN1YWxWaWV3cG9ydCIsImFkZFZpc3VhbE9mZnNldHMiLCJvZmZzZXRMZWZ0Iiwib2Zmc2V0VG9wIiwiZ2V0V2luZG93U2Nyb2xsIiwid2luIiwicGFnZVhPZmZzZXQiLCJwYWdlWU9mZnNldCIsImdldE5vZGVOYW1lIiwiZ2V0RG9jdW1lbnRFbGVtZW50IiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImlzU2Nyb2xsUGFyZW50IiwiX2dldENvbXB1dGVkU3R5bGUiLCJnZXRDb21wb3NpdGVSZWN0IiwiZWxlbWVudE9yVmlydHVhbEVsZW1lbnQiLCJvZmZzZXRQYXJlbnQiLCJpc0ZpeGVkIiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJvZmZzZXRQYXJlbnRJc1NjYWxlZCIsImlzRWxlbWVudFNjYWxlZCIsIm9mZnNldHMiLCJjbGllbnRMZWZ0IiwiY2xpZW50VG9wIiwiZ2V0TGF5b3V0UmVjdCIsImdldFBhcmVudE5vZGUiLCJhc3NpZ25lZFNsb3QiLCJnZXRTY3JvbGxQYXJlbnQiLCJsaXN0U2Nyb2xsUGFyZW50cyIsIl9lbGVtZW50JG93bmVyRG9jdW1lbiIsInNjcm9sbFBhcmVudCIsImlzQm9keSIsInVwZGF0ZWRMaXN0IiwiaXNUYWJsZUVsZW1lbnQiLCJnZXRUcnVlT2Zmc2V0UGFyZW50IiwiZ2V0T2Zmc2V0UGFyZW50IiwiaXNGaXJlZm94IiwiY3VycmVudE5vZGUiLCJwZXJzcGVjdGl2ZSIsIndpbGxDaGFuZ2UiLCJnZXRDb250YWluaW5nQmxvY2siLCJhdXRvIiwiYmFzZVBsYWNlbWVudHMiLCJ2aWV3cG9ydCIsInBvcHBlciIsInZhcmlhdGlvblBsYWNlbWVudHMiLCJwbGFjZW1lbnQiLCJtb2RpZmllclBoYXNlcyIsIm1vZGlmaWVycyIsInZpc2l0ZWQiLCJtb2RpZmllciIsInJlcXVpcmVzIiwicmVxdWlyZXNJZkV4aXN0cyIsImRlcCIsImRlcE1vZGlmaWVyIiwiREVGQVVMVF9PUFRJT05TIiwic3RyYXRlZ3kiLCJhcmVWYWxpZEVsZW1lbnRzIiwicG9wcGVyR2VuZXJhdG9yIiwiZ2VuZXJhdG9yT3B0aW9ucyIsIl9nZW5lcmF0b3JPcHRpb25zIiwiX2dlbmVyYXRvck9wdGlvbnMkZGVmIiwiZGVmYXVsdE1vZGlmaWVycyIsIl9nZW5lcmF0b3JPcHRpb25zJGRlZjIiLCJkZWZhdWx0T3B0aW9ucyIsIm9yZGVyZWRNb2RpZmllcnMiLCJtb2RpZmllcnNEYXRhIiwiZWxlbWVudHMiLCJlZmZlY3RDbGVhbnVwRm5zIiwiaXNEZXN0cm95ZWQiLCJzZXRPcHRpb25zIiwic2V0T3B0aW9uc0FjdGlvbiIsImNsZWFudXBNb2RpZmllckVmZmVjdHMiLCJzY3JvbGxQYXJlbnRzIiwiY29udGV4dEVsZW1lbnQiLCJwaGFzZSIsIm9yZGVyTW9kaWZpZXJzIiwiZXhpc3RpbmciLCJlbmFibGVkIiwiX3JlZjMkb3B0aW9ucyIsImVmZmVjdCIsImNsZWFudXBGbiIsIl9zdGF0ZSRlbGVtZW50cyIsInJlY3RzIiwiX3N0YXRlJG9yZGVyZWRNb2RpZmllIiwiX3N0YXRlJG9yZGVyZWRNb2RpZmllMiIsIl9vcHRpb25zIiwib25GaXJzdFVwZGF0ZSIsImdldEJhc2VQbGFjZW1lbnQiLCJnZXRWYXJpYXRpb24iLCJnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQiLCJjb21wdXRlT2Zmc2V0cyIsImJhc2VQbGFjZW1lbnQiLCJ2YXJpYXRpb24iLCJjb21tb25YIiwiY29tbW9uWSIsIm1haW5BeGlzIiwidW5zZXRTaWRlcyIsIm1hcFRvU3R5bGVzIiwiX09iamVjdCRhc3NpZ24yIiwicG9wcGVyUmVjdCIsImdwdUFjY2VsZXJhdGlvbiIsImFkYXB0aXZlIiwicm91bmRPZmZzZXRzIiwiX29mZnNldHMkeCIsIl9vZmZzZXRzJHkiLCJoYXNYIiwiaGFzWSIsInNpZGVYIiwic2lkZVkiLCJoZWlnaHRQcm9wIiwid2lkdGhQcm9wIiwiX09iamVjdCRhc3NpZ24iLCJjb21tb25TdHlsZXMiLCJkcHIiLCJkZXZpY2VQaXhlbFJhdGlvIiwicm91bmRPZmZzZXRzQnlEUFIiLCJpbml0aWFsU3R5bGVzIiwiYXJyb3ciLCJfb3B0aW9ucyRvZmZzZXQiLCJpbnZlcnREaXN0YW5jZSIsInNraWRkaW5nIiwiZGlzdGFuY2UiLCJkaXN0YW5jZUFuZFNraWRkaW5nVG9YWSIsIl9kYXRhJHN0YXRlJHBsYWNlbWVudCIsInBvcHBlck9mZnNldHMiLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsImdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IiwiZ2V0Um9vdE5vZGUiLCJpc1NhbWVOb2RlIiwicmVjdFRvQ2xpZW50UmVjdCIsImdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlIiwiY2xpcHBpbmdQYXJlbnQiLCJsYXlvdXRWaWV3cG9ydCIsImdldFZpZXdwb3J0UmVjdCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0Iiwid2luU2Nyb2xsIiwic2Nyb2xsV2lkdGgiLCJnZXREb2N1bWVudFJlY3QiLCJtZXJnZVBhZGRpbmdPYmplY3QiLCJwYWRkaW5nT2JqZWN0IiwiZXhwYW5kVG9IYXNoTWFwIiwiaGFzaE1hcCIsImRldGVjdE92ZXJmbG93IiwiX29wdGlvbnMkcGxhY2VtZW50IiwiX29wdGlvbnMkc3RyYXRlZ3kiLCJfb3B0aW9ucyRib3VuZGFyeSIsImJvdW5kYXJ5IiwiX29wdGlvbnMkcm9vdEJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwiX29wdGlvbnMkZWxlbWVudENvbnRlIiwiZWxlbWVudENvbnRleHQiLCJfb3B0aW9ucyRhbHRCb3VuZGFyeSIsImFsdEJvdW5kYXJ5IiwiX29wdGlvbnMkcGFkZGluZyIsImFsdENvbnRleHQiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJtYWluQ2xpcHBpbmdQYXJlbnRzIiwiY2xpcHBpbmdQYXJlbnRzIiwiY2xpcHBlckVsZW1lbnQiLCJnZXRDbGlwcGluZ1BhcmVudHMiLCJmaXJzdENsaXBwaW5nUGFyZW50IiwiY2xpcHBpbmdSZWN0IiwiYWNjUmVjdCIsImdldENsaXBwaW5nUmVjdCIsInJlZmVyZW5jZUNsaWVudFJlY3QiLCJwb3BwZXJDbGllbnRSZWN0IiwiZWxlbWVudENsaWVudFJlY3QiLCJvdmVyZmxvd09mZnNldHMiLCJvZmZzZXREYXRhIiwibXVsdGlwbHkiLCJheGlzIiwiX3NraXAiLCJfb3B0aW9ucyRtYWluQXhpcyIsImNoZWNrTWFpbkF4aXMiLCJfb3B0aW9ucyRhbHRBeGlzIiwiYWx0QXhpcyIsImNoZWNrQWx0QXhpcyIsInNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyIsImZhbGxiYWNrUGxhY2VtZW50cyIsIl9vcHRpb25zJGZsaXBWYXJpYXRpbyIsImZsaXBWYXJpYXRpb25zIiwiYWxsb3dlZEF1dG9QbGFjZW1lbnRzIiwicHJlZmVycmVkUGxhY2VtZW50Iiwib3Bwb3NpdGVQbGFjZW1lbnQiLCJnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyIsInBsYWNlbWVudHMiLCJfb3B0aW9ucyRhbGxvd2VkQXV0b1AiLCJhbGxvd2VkUGxhY2VtZW50cyIsIm92ZXJmbG93cyIsImNvbXB1dGVBdXRvUGxhY2VtZW50IiwicmVmZXJlbmNlUmVjdCIsImNoZWNrc01hcCIsIm1ha2VGYWxsYmFja0NoZWNrcyIsImZpcnN0Rml0dGluZ1BsYWNlbWVudCIsIl9iYXNlUGxhY2VtZW50IiwiaXNTdGFydFZhcmlhdGlvbiIsImlzVmVydGljYWwiLCJtYWluVmFyaWF0aW9uU2lkZSIsImFsdFZhcmlhdGlvblNpZGUiLCJjaGVja3MiLCJjaGVjayIsIl9sb29wIiwiZml0dGluZ1BsYWNlbWVudCIsIndpdGhpbiIsIl9vcHRpb25zJHRldGhlciIsInRldGhlciIsIl9vcHRpb25zJHRldGhlck9mZnNldCIsInRldGhlck9mZnNldCIsImlzQmFzZVBsYWNlbWVudCIsInRldGhlck9mZnNldFZhbHVlIiwibm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlIiwib2Zmc2V0TW9kaWZpZXJTdGF0ZSIsIl9vZmZzZXRNb2RpZmllclN0YXRlJCIsIm1haW5TaWRlIiwiYWx0U2lkZSIsImFkZGl0aXZlIiwibWluTGVuIiwibWF4TGVuIiwiYXJyb3dFbGVtZW50IiwiYXJyb3dSZWN0IiwiYXJyb3dQYWRkaW5nT2JqZWN0IiwiYXJyb3dQYWRkaW5nTWluIiwiYXJyb3dQYWRkaW5nTWF4IiwiYXJyb3dMZW4iLCJtaW5PZmZzZXQiLCJtYXhPZmZzZXQiLCJhcnJvd09mZnNldFBhcmVudCIsImNsaWVudE9mZnNldCIsIm9mZnNldE1vZGlmaWVyVmFsdWUiLCJ0ZXRoZXJNYXgiLCJwcmV2ZW50ZWRPZmZzZXQiLCJfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIiwiX21haW5TaWRlIiwiX2FsdFNpZGUiLCJfb2Zmc2V0IiwiX21pbiIsIl9tYXgiLCJpc09yaWdpblNpZGUiLCJfb2Zmc2V0TW9kaWZpZXJWYWx1ZSIsIl90ZXRoZXJNaW4iLCJfdGV0aGVyTWF4IiwiX3ByZXZlbnRlZE9mZnNldCIsIndpdGhpbk1heENsYW1wIiwiZ2V0U2lkZU9mZnNldHMiLCJwcmV2ZW50ZWRPZmZzZXRzIiwiaXNBbnlTaWRlRnVsbHlDbGlwcGVkIiwic2lkZSIsIl9vcHRpb25zJHNjcm9sbCIsIl9vcHRpb25zJHJlc2l6ZSIsIl9vcHRpb25zJGdwdUFjY2VsZXJhdCIsIl9vcHRpb25zJGFkYXB0aXZlIiwiX29wdGlvbnMkcm91bmRPZmZzZXRzIiwiX3N0YXRlJG1vZGlmaWVyc0RhdGEkIiwidG9QYWRkaW5nT2JqZWN0IiwibWluUHJvcCIsIm1heFByb3AiLCJlbmREaWZmIiwic3RhcnREaWZmIiwiY2xpZW50U2l6ZSIsImNlbnRlclRvUmVmZXJlbmNlIiwiYXhpc1Byb3AiLCJjZW50ZXJPZmZzZXQiLCJfb3B0aW9ucyRlbGVtZW50IiwicHJldmVudE92ZXJmbG93IiwicmVmZXJlbmNlT3ZlcmZsb3ciLCJwb3BwZXJBbHRPdmVyZmxvdyIsInJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyIsInBvcHBlckVzY2FwZU9mZnNldHMiLCJpc1JlZmVyZW5jZUhpZGRlbiIsImhhc1BvcHBlckVzY2FwZWQiLCJnZXRQb3BwZXJVbnN0eWxlZFV0aWxpdHlDbGFzcyIsImRlZmF1bHRQb3BwZXJPcHRpb25zIiwiUG9wcGVyVG9vbHRpcCIsImluaXRpYWxQbGFjZW1lbnQiLCJwb3BwZXJPcHRpb25zIiwicG9wcGVyUmVmIiwicG9wcGVyUmVmUHJvcCIsInRvb2x0aXBSZWYiLCJvd25SZWYiLCJoYW5kbGVQb3BwZXJSZWYiLCJoYW5kbGVQb3BwZXJSZWZSZWYiLCJydGxQbGFjZW1lbnQiLCJmbGlwUGxhY2VtZW50Iiwic2V0UGxhY2VtZW50IiwicG9wcGVyTW9kaWZpZXJzIiwiUG9wcGVyVW5zdHlsZWQiLCJQb3BwZXJSb290IiwiUG9wcGVyIiwiZ2V0VG9vbHRpcFV0aWxpdHlDbGFzcyIsIlRvb2x0aXBQb3BwZXIiLCJkaXNhYmxlSW50ZXJhY3RpdmUiLCJwb3BwZXJJbnRlcmFjdGl2ZSIsInBvcHBlckFycm93IiwicG9wcGVyQ2xvc2UiLCJUb29sdGlwVG9vbHRpcCIsInRvdWNoIiwidG9vbHRpcEFycm93IiwiVG9vbHRpcCIsIndvcmRXcmFwIiwiVG9vbHRpcEFycm93IiwiaHlzdGVyc2lzT3BlbiIsImh5c3RlcnNpc1RpbWVyIiwiY29tcG9zZUV2ZW50SGFuZGxlciIsImV2ZW50SGFuZGxlciIsIl9jb21wb25lbnRzJFBvcHBlciIsIl9jb21wb25lbnRzJFRyYW5zaXRpbyIsIl9jb21wb25lbnRzJFRvb2x0aXAiLCJfY29tcG9uZW50cyRBcnJvdyIsIl9jb21wb25lbnRzUHJvcHMkcG9wcCIsImRlc2NyaWJlQ2hpbGQiLCJkaXNhYmxlRm9jdXNMaXN0ZW5lciIsImRpc2FibGVIb3Zlckxpc3RlbmVyIiwiZGlzYWJsZUludGVyYWN0aXZlUHJvcCIsImRpc2FibGVUb3VjaExpc3RlbmVyIiwiZW50ZXJEZWxheSIsImVudGVyTmV4dERlbGF5IiwiZW50ZXJUb3VjaERlbGF5IiwiZm9sbG93Q3Vyc29yIiwibGVhdmVEZWxheSIsImxlYXZlVG91Y2hEZWxheSIsIlBvcHBlckNvbXBvbmVudCIsIlBvcHBlckNvbXBvbmVudFByb3AiLCJQb3BwZXJQcm9wcyIsInRpdGxlIiwiVHJhbnNpdGlvbkNvbXBvbmVudFByb3AiLCJjaGlsZE5vZGUiLCJzZXRDaGlsZE5vZGUiLCJhcnJvd1JlZiIsInNldEFycm93UmVmIiwiaWdub3JlTm9uVG91Y2hFdmVudHMiLCJjbG9zZVRpbWVyIiwiZW50ZXJUaW1lciIsImxlYXZlVGltZXIiLCJ0b3VjaFRpbWVyIiwicHJldlVzZXJTZWxlY3QiLCJzdG9wVG91Y2hJbnRlcmFjdGlvbiIsIldlYmtpdFVzZXJTZWxlY3QiLCJoYW5kbGVMZWF2ZSIsInNldENoaWxkSXNGb2N1c1Zpc2libGUiLCJkZXRlY3RUb3VjaFN0YXJ0IiwiY2hpbGRyZW5Qcm9wcyIsImhhbmRsZU1vdXNlT3ZlciIsImhhbmRsZVVzZVJlZiIsImhhbmRsZUZvY3VzUmVmIiwicG9zaXRpb25SZWYiLCJuYW1lT3JEZXNjUHJvcHMiLCJ0aXRsZUlzU3RyaW5nIiwib25Nb3VzZU1vdmUiLCJpbnRlcmFjdGl2ZVdyYXBwZXJMaXN0ZW5lcnMiLCJvbk1vdXNlT3ZlciIsIl9Qb3BwZXJQcm9wcyRwb3BwZXJPcCIsInRvb2x0aXBNb2RpZmllcnMiLCJUb29sdGlwQ29tcG9uZW50IiwiQXJyb3dDb21wb25lbnQiLCJBcnJvdyIsInBvcHBlclByb3BzIiwidG9vbHRpcFByb3BzIiwidG9vbHRpcEFycm93UHJvcHMiLCJUcmFuc2l0aW9uUHJvcHNJbm5lciIsIl9jb21wb25lbnRzUHJvcHMkdG9vbCIsIl9jb21wb25lbnRzUHJvcHMkYXJybyIsInRlc3RJZCIsInNldEljb24iLCJDb250ZW50Q29weSIsIkRvbmVBbGwiLCJBZGRCb3giLCJqb2luQ2hpbGRyZW4iLCJzZXBhcmF0b3IiLCJTdGFja1Jvb3QiLCJkaXJlY3Rpb25WYWx1ZXMiLCJzcGFjaW5nVmFsdWVzIiwicHJldmlvdXNEaXJlY3Rpb25WYWx1ZSIsInJvdyIsIlN0YWNrIiwic2VsZWN0ZWRQcm9qZWN0IiwiZGlzYWJsZURyb3Bkb3duIiwiRGVsZXRlIiwiU2F2ZSIsInNuaXBwZXRzIiwic3RvcmVkU25pcHBldHMiLCJDb2RlR2VuZXJhdG9yIiwicmVzIiwibmF2UGFuZWxTbGljZSIsInNob3dQcm9qZWN0UGFuZWwiLCJzaG93QWRkUHJvamVjdCIsInNldFNob3dQcm9qZWN0UGFuZWwiLCJzZXRTaG93QWRkUHJvamVjdCIsIkFkZFByb2plY3REaWFsb2ciLCJzZXRQcm9qZWN0TmFtZSIsIm5hdlBhbmVsIiwiTmF2UHJvamVjdE1lbnUiLCJoYW5kbGVEZWxldGVDbGljayIsIkludGVncmF0aW9uSW5zdHJ1Y3Rpb25zIiwiRGVsZXRlRm9yZXZlciIsIlByb2plY3QiLCJDcmVkaXRDYXJkIiwiUHJvamVjdFBhbmVsQ29udGFpbmVyIiwiQWRkQ2FyZCIsIk5hdlBhbmVsRGlzcGxheSIsInNjYWxlIiwiQ29sbGVjdGlvbnNCb29rbWFyayIsIkFydGljbGUiLCJOYXZQYW5lbENvbnRhaW5lciIsInVzZVBhcmFtcyIsImJ1dHRvblRleHQiLCJzZXRVc2VybmFtZSIsInVwZGF0ZVRpbWVyIiwiY29va2llX2NvZGUiLCJjb29raWVfdXNlcm5hbWUiLCJjb29raWVfZW1haWwiLCJzZWNvbmRzIiwiY291bnRlciIsInN0YXJ0Q291bnRkb3duIiwiZ2V0Q2FyZFV0aWxpdHlDbGFzcyIsIkNhcmRSb290IiwicmFpc2VkIiwiZ2V0Q2FyZEFjdGlvbnNVdGlsaXR5Q2xhc3MiLCJDYXJkQWN0aW9uc1Jvb3QiLCJkaXNhYmxlU3BhY2luZyIsImdldENhcmRDb250ZW50VXRpbGl0eUNsYXNzIiwiQ2FyZENvbnRlbnRSb290IiwiZ2V0Q2FyZE1lZGlhVXRpbGl0eUNsYXNzIiwiQ2FyZE1lZGlhUm9vdCIsImlzTWVkaWFDb21wb25lbnQiLCJpc0ltYWdlQ29tcG9uZW50IiwibWVkaWEiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJvYmplY3RGaXQiLCJNRURJQV9DT01QT05FTlRTIiwiSU1BR0VfQ09NUE9ORU5UUyIsIkNhcmRNZWRpYSIsImltYWdlIiwiY29tcG9zZWRTdHlsZSIsIkNvbnRyaWJ1dG9yQ2FyZCIsImltYWdlVXJsIiwibGlua2VkSW5MaW5rIiwiZ2l0aHViTGluayIsIkNvbnRyaWJ1dG9ycyIsInVzZXJzIiwiZGV2T2JqIiwiZ3JpZFRlbXBsYXRlQ29sdW1ucyIsInJvb3RSZWR1Y2VyIiwiY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlIiwibWlkZGxld2FyZUFycmF5IiwiaW1tdXRhYmxlQ2hlY2siLCJzZXJpYWxpemFibGVDaGVjayIsImlzQm9vbGVhbiIsImdldERlZmF1bHRNaWRkbGV3YXJlIiwiZGV2VG9vbHMiLCJfZyIsIl9oIiwiZW5oYW5jZXJzIiwiYmFzZVByb3RvIiwicmVkdWNlcktleXMiLCJmaW5hbFJlZHVjZXJzIiwic2hhcGVBc3NlcnRpb25FcnJvciIsImZpbmFsUmVkdWNlcktleXMiLCJhc3NlcnRSZWR1Y2VyU2hhcGUiLCJoYXNDaGFuZ2VkIiwicHJldmlvdXNTdGF0ZUZvcktleSIsIm5leHRTdGF0ZUZvcktleSIsImNvbWJpbmVSZWR1Y2VycyIsImZpbmFsTWlkZGxld2FyZSIsIm1pZGRsZXdhcmVFbmhhbmNlciIsImZpbmFsQ29tcG9zZSIsInRyYWNlIiwic3RvcmVFbmhhbmNlcnMiLCJjb25maWd1cmVTdG9yZSIsInRlc3RGb3JtUmVkdWNlciIsInVzZXJJbnB1dFJlZHVjZXIiLCJjb2RlU2xpY2VSZWR1Y2VyIiwiY2xpcGJvYXJkUmVkdWNlciIsInVzZXJJbmZvUmVkdWNlciIsIm5hdlBhbmVsUmVkdWNlciIsIlJlYWN0RE9NIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +`),wt.rippleVisible,Nt,550,(({theme:e})=>e.transitions.easing.easeInOut),wt.ripplePulsate,(({theme:e})=>e.transitions.duration.shorter),wt.child,wt.childLeaving,Ct,550,(({theme:e})=>e.transitions.easing.easeInOut),wt.childPulsate,Rt,(({theme:e})=>e.transitions.easing.easeInOut)),Pt=e.forwardRef((function(t,n){const r=(0,et.Z)({props:t,name:"MuiTouchRipple"}),{center:o=!1,classes:a={},className:i}=r,l=(0,Oe.Z)(r,xt),[s,c]=e.useState([]),u=e.useRef(0),d=e.useRef(null);e.useEffect((()=>{d.current&&(d.current(),d.current=null)}),[s]);const p=e.useRef(!1),f=e.useRef(null),m=e.useRef(null),h=e.useRef(null);e.useEffect((()=>()=>{clearTimeout(f.current)}),[]);const g=e.useCallback((e=>{const{pulsate:t,rippleX:n,rippleY:r,rippleSize:o,cb:i}=e;c((e=>[...e,(0,Ze.jsx)(Mt,{classes:{ripple:(0,Ne.Z)(a.ripple,wt.ripple),rippleVisible:(0,Ne.Z)(a.rippleVisible,wt.rippleVisible),ripplePulsate:(0,Ne.Z)(a.ripplePulsate,wt.ripplePulsate),child:(0,Ne.Z)(a.child,wt.child),childLeaving:(0,Ne.Z)(a.childLeaving,wt.childLeaving),childPulsate:(0,Ne.Z)(a.childPulsate,wt.childPulsate)},timeout:550,pulsate:t,rippleX:n,rippleY:r,rippleSize:o},u.current)])),u.current+=1,d.current=i}),[a]),b=e.useCallback(((e={},t={},n)=>{const{pulsate:r=!1,center:a=o||t.pulsate,fakeElement:i=!1}=t;if("mousedown"===(null==e?void 0:e.type)&&p.current)return void(p.current=!1);"touchstart"===(null==e?void 0:e.type)&&(p.current=!0);const l=i?null:h.current,s=l?l.getBoundingClientRect():{width:0,height:0,left:0,top:0};let c,u,d;if(a||void 0===e||0===e.clientX&&0===e.clientY||!e.clientX&&!e.touches)c=Math.round(s.width/2),u=Math.round(s.height/2);else{const{clientX:t,clientY:n}=e.touches&&e.touches.length>0?e.touches[0]:e;c=Math.round(t-s.left),u=Math.round(n-s.top)}if(a)d=Math.sqrt((2*s.width**2+s.height**2)/3),d%2==0&&(d+=1);else{const e=2*Math.max(Math.abs((l?l.clientWidth:0)-c),c)+2,t=2*Math.max(Math.abs((l?l.clientHeight:0)-u),u)+2;d=Math.sqrt(e**2+t**2)}null!=e&&e.touches?null===m.current&&(m.current=()=>{g({pulsate:r,rippleX:c,rippleY:u,rippleSize:d,cb:n})},f.current=setTimeout((()=>{m.current&&(m.current(),m.current=null)}),80)):g({pulsate:r,rippleX:c,rippleY:u,rippleSize:d,cb:n})}),[o,g]),v=e.useCallback((()=>{b({},{pulsate:!0})}),[b]),y=e.useCallback(((e,t)=>{if(clearTimeout(f.current),"touchend"===(null==e?void 0:e.type)&&m.current)return m.current(),m.current=null,void(f.current=setTimeout((()=>{y(e,t)})));m.current=null,c((e=>e.length>0?e.slice(1):e)),d.current=t}),[]);return e.useImperativeHandle(n,(()=>({pulsate:v,start:b,stop:y})),[v,b,y]),(0,Ze.jsx)(Tt,(0,Se.Z)({className:(0,Ne.Z)(wt.root,a.root,i),ref:h},l,{children:(0,Ze.jsx)(pt,{component:null,exit:!0,children:s})}))})),At=Pt;var Lt=o(5677);function Zt(e){return(0,Lt.Z)("MuiButtonBase",e)}const It=(0,yt.Z)("MuiButtonBase",["root","disabled","focusVisible"]),jt=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],Dt=(0,Je.ZP)("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${It.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),zt=e.forwardRef((function(t,n){const r=(0,et.Z)({props:t,name:"MuiButtonBase"}),{action:o,centerRipple:a=!1,children:i,className:l,component:s="button",disabled:c=!1,disableRipple:u=!1,disableTouchRipple:d=!1,focusRipple:p=!1,LinkComponent:f="a",onBlur:m,onClick:h,onContextMenu:g,onDragLeave:b,onFocus:v,onFocusVisible:y,onKeyDown:w,onKeyUp:x,onMouseDown:E,onMouseLeave:k,onMouseUp:_,onTouchEnd:S,onTouchMove:O,onTouchStart:N,tabIndex:C=0,TouchRippleProps:R,touchRippleRef:T,type:M}=r,P=(0,Oe.Z)(r,jt),A=e.useRef(null),L=e.useRef(null),Z=(0,tt.Z)(L,T),{isFocusVisibleRef:I,onFocus:j,onBlur:D,ref:z}=(0,rt.Z)(),[F,B]=e.useState(!1);c&&F&&B(!1),e.useImperativeHandle(o,(()=>({focusVisible:()=>{B(!0),A.current.focus()}})),[]);const[$,U]=e.useState(!1);e.useEffect((()=>{U(!0)}),[]);const W=$&&!u&&!c;function H(e,t,n=d){return(0,nt.Z)((r=>(t&&t(r),!n&&L.current&&L.current[e](r),!0)))}e.useEffect((()=>{F&&p&&!u&&$&&L.current.pulsate()}),[u,p,F,$]);const q=H("start",E),V=H("stop",g),K=H("stop",b),G=H("stop",_),Q=H("stop",(e=>{F&&e.preventDefault(),k&&k(e)})),X=H("start",N),Y=H("stop",S),J=H("stop",O),ee=H("stop",(e=>{D(e),!1===I.current&&B(!1),m&&m(e)}),!1),te=(0,nt.Z)((e=>{A.current||(A.current=e.currentTarget),j(e),!0===I.current&&(B(!0),y&&y(e)),v&&v(e)})),ne=()=>{const e=A.current;return s&&"button"!==s&&!("A"===e.tagName&&e.href)},re=e.useRef(!1),oe=(0,nt.Z)((e=>{p&&!re.current&&F&&L.current&&" "===e.key&&(re.current=!0,L.current.stop(e,(()=>{L.current.start(e)}))),e.target===e.currentTarget&&ne()&&" "===e.key&&e.preventDefault(),w&&w(e),e.target===e.currentTarget&&ne()&&"Enter"===e.key&&!c&&(e.preventDefault(),h&&h(e))})),ae=(0,nt.Z)((e=>{p&&" "===e.key&&L.current&&F&&!e.defaultPrevented&&(re.current=!1,L.current.stop(e,(()=>{L.current.pulsate(e)}))),x&&x(e),h&&e.target===e.currentTarget&&ne()&&" "===e.key&&!e.defaultPrevented&&h(e)}));let ie=s;"button"===ie&&(P.href||P.to)&&(ie=f);const le={};"button"===ie?(le.type=void 0===M?"button":M,le.disabled=c):(P.href||P.to||(le.role="button"),c&&(le["aria-disabled"]=c));const se=(0,tt.Z)(z,A),ce=(0,tt.Z)(n,se),ue=(0,Se.Z)({},r,{centerRipple:a,component:s,disabled:c,disableRipple:u,disableTouchRipple:d,focusRipple:p,tabIndex:C,focusVisible:F}),de=(e=>{const{disabled:t,focusVisible:n,focusVisibleClassName:r,classes:o}=e,a={root:["root",t&&"disabled",n&&"focusVisible"]},i=(0,Xe.Z)(a,Zt,o);return n&&r&&(i.root+=` ${r}`),i})(ue);return(0,Ze.jsxs)(Dt,(0,Se.Z)({as:ie,className:(0,Ne.Z)(de.root,l),ownerState:ue,onBlur:ee,onClick:h,onContextMenu:V,onFocus:te,onKeyDown:oe,onKeyUp:ae,onMouseDown:q,onMouseLeave:Q,onMouseUp:G,onDragLeave:K,onTouchEnd:Y,onTouchMove:J,onTouchStart:X,ref:ce,tabIndex:c?-1:C,type:M},le,P,{children:[i,W?(0,Ze.jsx)(At,(0,Se.Z)({ref:Z,center:a},R)):null]}))}));var Ft=o(6622);function Bt(e){return(0,Lt.Z)("MuiButton",e)}const $t=(0,yt.Z)("MuiButton",["root","text","textInherit","textPrimary","textSecondary","textSuccess","textError","textInfo","textWarning","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","outlinedSuccess","outlinedError","outlinedInfo","outlinedWarning","contained","containedInherit","containedPrimary","containedSecondary","containedSuccess","containedError","containedInfo","containedWarning","disableElevation","focusVisible","disabled","colorInherit","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]),Ut=e.createContext({}),Wt=["children","color","component","className","disabled","disableElevation","disableFocusRipple","endIcon","focusVisibleClassName","fullWidth","size","startIcon","type","variant"],Ht=["root"],qt=e=>(0,Se.Z)({},"small"===e.size&&{"& > *:nth-of-type(1)":{fontSize:18}},"medium"===e.size&&{"& > *:nth-of-type(1)":{fontSize:20}},"large"===e.size&&{"& > *:nth-of-type(1)":{fontSize:22}}),Vt=(0,Je.ZP)(zt,{shouldForwardProp:e=>(0,Je.FO)(e)||"classes"===e,name:"MuiButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],t[`${n.variant}${(0,Ft.Z)(n.color)}`],t[`size${(0,Ft.Z)(n.size)}`],t[`${n.variant}Size${(0,Ft.Z)(n.size)}`],"inherit"===n.color&&t.colorInherit,n.disableElevation&&t.disableElevation,n.fullWidth&&t.fullWidth]}})((({theme:e,ownerState:t})=>{var n,r;return(0,Se.Z)({},e.typography.button,{minWidth:64,padding:"6px 16px",borderRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create(["background-color","box-shadow","border-color","color"],{duration:e.transitions.duration.short}),"&:hover":(0,Se.Z)({textDecoration:"none",backgroundColor:e.vars?`rgba(${e.vars.palette.text.primaryChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,Ye.Fq)(e.palette.text.primary,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"text"===t.variant&&"inherit"!==t.color&&{backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,Ye.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"outlined"===t.variant&&"inherit"!==t.color&&{border:`1px solid ${(e.vars||e).palette[t.color].main}`,backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,Ye.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"contained"===t.variant&&{backgroundColor:(e.vars||e).palette.grey.A100,boxShadow:(e.vars||e).shadows[4],"@media (hover: none)":{boxShadow:(e.vars||e).shadows[2],backgroundColor:(e.vars||e).palette.grey[300]}},"contained"===t.variant&&"inherit"!==t.color&&{backgroundColor:(e.vars||e).palette[t.color].dark,"@media (hover: none)":{backgroundColor:(e.vars||e).palette[t.color].main}}),"&:active":(0,Se.Z)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[8]}),[`&.${$t.focusVisible}`]:(0,Se.Z)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[6]}),[`&.${$t.disabled}`]:(0,Se.Z)({color:(e.vars||e).palette.action.disabled},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.action.disabledBackground}`},"outlined"===t.variant&&"secondary"===t.color&&{border:`1px solid ${(e.vars||e).palette.action.disabled}`},"contained"===t.variant&&{color:(e.vars||e).palette.action.disabled,boxShadow:(e.vars||e).shadows[0],backgroundColor:(e.vars||e).palette.action.disabledBackground})},"text"===t.variant&&{padding:"6px 8px"},"text"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main},"outlined"===t.variant&&{padding:"5px 15px",border:"1px solid currentColor"},"outlined"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main,border:e.vars?`1px solid rgba(${e.vars.palette[t.color].mainChannel} / 0.5)`:`1px solid ${(0,Ye.Fq)(e.palette[t.color].main,.5)}`},"contained"===t.variant&&{color:e.vars?e.vars.palette.text.primary:null==(n=(r=e.palette).getContrastText)?void 0:n.call(r,e.palette.grey[300]),backgroundColor:(e.vars||e).palette.grey[300],boxShadow:(e.vars||e).shadows[2]},"contained"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].contrastText,backgroundColor:(e.vars||e).palette[t.color].main},"inherit"===t.color&&{color:"inherit",borderColor:"currentColor"},"small"===t.size&&"text"===t.variant&&{padding:"4px 5px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"text"===t.variant&&{padding:"8px 11px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"outlined"===t.variant&&{padding:"3px 9px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"outlined"===t.variant&&{padding:"7px 21px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"contained"===t.variant&&{padding:"4px 10px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"contained"===t.variant&&{padding:"8px 22px",fontSize:e.typography.pxToRem(15)},t.fullWidth&&{width:"100%"})}),(({ownerState:e})=>e.disableElevation&&{boxShadow:"none","&:hover":{boxShadow:"none"},[`&.${$t.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${$t.disabled}`]:{boxShadow:"none"}})),Kt=(0,Je.ZP)("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.startIcon,t[`iconSize${(0,Ft.Z)(n.size)}`]]}})((({ownerState:e})=>(0,Se.Z)({display:"inherit",marginRight:8,marginLeft:-4},"small"===e.size&&{marginLeft:-2},qt(e)))),Gt=(0,Je.ZP)("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.endIcon,t[`iconSize${(0,Ft.Z)(n.size)}`]]}})((({ownerState:e})=>(0,Se.Z)({display:"inherit",marginRight:-4,marginLeft:8},"small"===e.size&&{marginRight:-2},qt(e)))),Qt=e.forwardRef((function(t,n){const r=e.useContext(Ut),o=(0,Qe.Z)(r,t),a=(0,et.Z)({props:o,name:"MuiButton"}),{children:i,color:l="primary",component:s="button",className:c,disabled:u=!1,disableElevation:d=!1,disableFocusRipple:p=!1,endIcon:f,focusVisibleClassName:m,fullWidth:h=!1,size:g="medium",startIcon:b,type:v,variant:y="text"}=a,w=(0,Oe.Z)(a,Wt),x=(0,Se.Z)({},a,{color:l,component:s,disabled:u,disableElevation:d,disableFocusRipple:p,fullWidth:h,size:g,type:v,variant:y}),E=(e=>{const{color:t,disableElevation:n,fullWidth:r,size:o,variant:a,classes:i}=e,l={root:["root",a,`${a}${(0,Ft.Z)(t)}`,`size${(0,Ft.Z)(o)}`,`${a}Size${(0,Ft.Z)(o)}`,"inherit"===t&&"colorInherit",n&&"disableElevation",r&&"fullWidth"],label:["label"],startIcon:["startIcon",`iconSize${(0,Ft.Z)(o)}`],endIcon:["endIcon",`iconSize${(0,Ft.Z)(o)}`]},s=(0,Xe.Z)(l,Bt,i);return(0,Se.Z)({},i,s)})(x),{root:k}=E,_=(0,Oe.Z)(E,Ht),S=b&&(0,Ze.jsx)(Kt,{className:_.startIcon,ownerState:x,children:b}),O=f&&(0,Ze.jsx)(Gt,{className:_.endIcon,ownerState:x,children:f});return(0,Ze.jsxs)(Vt,(0,Se.Z)({ownerState:x,className:(0,Ne.Z)(r.className,k,c),component:s,disabled:u,focusRipple:!p,focusVisibleClassName:(0,Ne.Z)(_.focusVisible,m),ref:n,type:v},w,{classes:_,children:[S,i,O]}))}));var Xt=o(7579),Yt=o(1387),Jt=o(67),en=o(8290),tn=o(7596),nn=o(6600);const rn=["onChange","maxRows","minRows","style","value"];function on(e,t){return parseInt(e[t],10)||0}const an={visibility:"hidden",position:"absolute",overflow:"hidden",height:0,top:0,left:0,transform:"translateZ(0)"};function ln(e){return null==e||0===Object.keys(e).length}const sn=e.forwardRef((function(t,n){const{onChange:r,maxRows:o,minRows:a=1,style:l,value:s}=t,c=(0,Oe.Z)(t,rn),{current:u}=e.useRef(null!=s),d=e.useRef(null),p=(0,Jt.Z)(n,d),f=e.useRef(null),m=e.useRef(0),[h,g]=e.useState({}),b=e.useCallback((()=>{const e=d.current,n=(0,en.Z)(e).getComputedStyle(e);if("0px"===n.width)return{};const r=f.current;r.style.width=n.width,r.value=e.value||t.placeholder||"x","\n"===r.value.slice(-1)&&(r.value+=" ");const i=n["box-sizing"],l=on(n,"padding-bottom")+on(n,"padding-top"),s=on(n,"border-bottom-width")+on(n,"border-top-width"),c=r.scrollHeight;r.value="x";const u=r.scrollHeight;let p=c;return a&&(p=Math.max(Number(a)*u,p)),o&&(p=Math.min(Number(o)*u,p)),p=Math.max(p,u),{outerHeightStyle:p+("border-box"===i?l+s:0),overflow:Math.abs(p-c)<=1}}),[o,a,t.placeholder]),v=(e,t)=>{const{outerHeightStyle:n,overflow:r}=t;return m.current<20&&(n>0&&Math.abs((e.outerHeightStyle||0)-n)>1||e.overflow!==r)?(m.current+=1,{overflow:r,outerHeightStyle:n}):e},y=e.useCallback((()=>{const e=b();ln(e)||g((t=>v(t,e)))}),[b]);return e.useEffect((()=>{const e=(0,tn.Z)((()=>{m.current=0,d.current&&(()=>{const e=b();ln(e)||(0,i.flushSync)((()=>{g((t=>v(t,e)))}))})()})),t=(0,en.Z)(d.current);let n;return t.addEventListener("resize",e),"undefined"!=typeof ResizeObserver&&(n=new ResizeObserver(e),n.observe(d.current)),()=>{e.clear(),t.removeEventListener("resize",e),n&&n.disconnect()}})),(0,nn.Z)((()=>{y()})),e.useEffect((()=>{m.current=0}),[s]),(0,Ze.jsxs)(e.Fragment,{children:[(0,Ze.jsx)("textarea",(0,Se.Z)({value:s,onChange:e=>{m.current=0,u||y(),r&&r(e)},ref:p,rows:a,style:(0,Se.Z)({height:h.outerHeightStyle,overflow:h.overflow?"hidden":null},l)},c)),(0,Ze.jsx)("textarea",{"aria-hidden":!0,className:t.className,readOnly:!0,ref:f,tabIndex:-1,style:(0,Se.Z)({},an,l,{padding:0})})]})})),cn=sn,un=function(e){return"string"==typeof e};function dn({props:e,states:t,muiFormControl:n}){return t.reduce(((t,r)=>(t[r]=e[r],n&&void 0===e[r]&&(t[r]=n[r]),t)),{})}const pn=e.createContext();function fn(){return e.useContext(pn)}var mn=o(3289);function hn(e){const{styles:t,defaultTheme:n={}}=e,r="function"==typeof t?e=>{return t(null==(r=e)||0===Object.keys(r).length?n:e);var r}:t;return(0,Ze.jsx)(gt,{styles:r})}var gn=o(5165);const bn=function(e){return(0,Ze.jsx)(hn,(0,Se.Z)({},e,{defaultTheme:gn.Z}))};function vn(e){return null!=e&&!(Array.isArray(e)&&0===e.length)}function yn(e,t=!1){return e&&(vn(e.value)&&""!==e.value||t&&vn(e.defaultValue)&&""!==e.defaultValue)}function wn(e){return(0,Lt.Z)("MuiInputBase",e)}const xn=(0,yt.Z)("MuiInputBase",["root","formControl","focused","disabled","adornedStart","adornedEnd","error","sizeSmall","multiline","colorSecondary","fullWidth","hiddenLabel","readOnly","input","inputSizeSmall","inputMultiline","inputTypeSearch","inputAdornedStart","inputAdornedEnd","inputHiddenLabel"]),En=["aria-describedby","autoComplete","autoFocus","className","color","components","componentsProps","defaultValue","disabled","disableInjectingGlobalStyles","endAdornment","error","fullWidth","id","inputComponent","inputProps","inputRef","margin","maxRows","minRows","multiline","name","onBlur","onChange","onClick","onFocus","onKeyDown","onKeyUp","placeholder","readOnly","renderSuffix","rows","size","startAdornment","type","value"],kn=(e,t)=>{const{ownerState:n}=e;return[t.root,n.formControl&&t.formControl,n.startAdornment&&t.adornedStart,n.endAdornment&&t.adornedEnd,n.error&&t.error,"small"===n.size&&t.sizeSmall,n.multiline&&t.multiline,n.color&&t[`color${(0,Ft.Z)(n.color)}`],n.fullWidth&&t.fullWidth,n.hiddenLabel&&t.hiddenLabel]},_n=(e,t)=>{const{ownerState:n}=e;return[t.input,"small"===n.size&&t.inputSizeSmall,n.multiline&&t.inputMultiline,"search"===n.type&&t.inputTypeSearch,n.startAdornment&&t.inputAdornedStart,n.endAdornment&&t.inputAdornedEnd,n.hiddenLabel&&t.inputHiddenLabel]},Sn=(0,Je.ZP)("div",{name:"MuiInputBase",slot:"Root",overridesResolver:kn})((({theme:e,ownerState:t})=>(0,Se.Z)({},e.typography.body1,{color:(e.vars||e).palette.text.primary,lineHeight:"1.4375em",boxSizing:"border-box",position:"relative",cursor:"text",display:"inline-flex",alignItems:"center",[`&.${xn.disabled}`]:{color:(e.vars||e).palette.text.disabled,cursor:"default"}},t.multiline&&(0,Se.Z)({padding:"4px 0 5px"},"small"===t.size&&{paddingTop:1}),t.fullWidth&&{width:"100%"}))),On=(0,Je.ZP)("input",{name:"MuiInputBase",slot:"Input",overridesResolver:_n})((({theme:e,ownerState:t})=>{const n="light"===e.palette.mode,r=(0,Se.Z)({color:"currentColor"},e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:n?.42:.5},{transition:e.transitions.create("opacity",{duration:e.transitions.duration.shorter})}),o={opacity:"0 !important"},a=e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:n?.42:.5};return(0,Se.Z)({font:"inherit",letterSpacing:"inherit",color:"currentColor",padding:"4px 0 5px",border:0,boxSizing:"content-box",background:"none",height:"1.4375em",margin:0,WebkitTapHighlightColor:"transparent",display:"block",minWidth:0,width:"100%",animationName:"mui-auto-fill-cancel",animationDuration:"10ms","&::-webkit-input-placeholder":r,"&::-moz-placeholder":r,"&:-ms-input-placeholder":r,"&::-ms-input-placeholder":r,"&:focus":{outline:0},"&:invalid":{boxShadow:"none"},"&::-webkit-search-decoration":{WebkitAppearance:"none"},[`label[data-shrink=false] + .${xn.formControl} &`]:{"&::-webkit-input-placeholder":o,"&::-moz-placeholder":o,"&:-ms-input-placeholder":o,"&::-ms-input-placeholder":o,"&:focus::-webkit-input-placeholder":a,"&:focus::-moz-placeholder":a,"&:focus:-ms-input-placeholder":a,"&:focus::-ms-input-placeholder":a},[`&.${xn.disabled}`]:{opacity:1,WebkitTextFillColor:(e.vars||e).palette.text.disabled},"&:-webkit-autofill":{animationDuration:"5000s",animationName:"mui-auto-fill"}},"small"===t.size&&{paddingTop:1},t.multiline&&{height:"auto",resize:"none",padding:0,paddingTop:0},"search"===t.type&&{MozAppearance:"textfield"})})),Nn=(0,Ze.jsx)(bn,{styles:{"@keyframes mui-auto-fill":{from:{display:"block"}},"@keyframes mui-auto-fill-cancel":{from:{display:"block"}}}}),Cn=e.forwardRef((function(t,n){const r=(0,et.Z)({props:t,name:"MuiInputBase"}),{"aria-describedby":o,autoComplete:a,autoFocus:i,className:l,components:s={},componentsProps:c={},defaultValue:u,disabled:d,disableInjectingGlobalStyles:p,endAdornment:f,fullWidth:m=!1,id:h,inputComponent:g="input",inputProps:b={},inputRef:v,maxRows:y,minRows:w,multiline:x=!1,name:E,onBlur:k,onChange:_,onClick:S,onFocus:O,onKeyDown:N,onKeyUp:C,placeholder:R,readOnly:T,renderSuffix:M,rows:P,startAdornment:A,type:L="text",value:Z}=r,I=(0,Oe.Z)(r,En),j=null!=b.value?b.value:Z,{current:D}=e.useRef(null!=j),z=e.useRef(),F=e.useCallback((e=>{}),[]),B=(0,tt.Z)(b.ref,F),$=(0,tt.Z)(v,B),U=(0,tt.Z)(z,$),[W,H]=e.useState(!1),q=fn(),V=dn({props:r,muiFormControl:q,states:["color","disabled","error","hiddenLabel","size","required","filled"]});V.focused=q?q.focused:W,e.useEffect((()=>{!q&&d&&W&&(H(!1),k&&k())}),[q,d,W,k]);const K=q&&q.onFilled,G=q&&q.onEmpty,Q=e.useCallback((e=>{yn(e)?K&&K():G&&G()}),[K,G]);(0,mn.Z)((()=>{D&&Q({value:j})}),[j,Q,D]),e.useEffect((()=>{Q(z.current)}),[]);let X=g,Y=b;x&&"input"===X&&(Y=P?(0,Se.Z)({type:void 0,minRows:P,maxRows:P},Y):(0,Se.Z)({type:void 0,maxRows:y,minRows:w},Y),X=cn),e.useEffect((()=>{q&&q.setAdornedStart(Boolean(A))}),[q,A]);const J=(0,Se.Z)({},r,{color:V.color||"primary",disabled:V.disabled,endAdornment:f,error:V.error,focused:V.focused,formControl:q,fullWidth:m,hiddenLabel:V.hiddenLabel,multiline:x,size:V.size,startAdornment:A,type:L}),ee=(e=>{const{classes:t,color:n,disabled:r,error:o,endAdornment:a,focused:i,formControl:l,fullWidth:s,hiddenLabel:c,multiline:u,readOnly:d,size:p,startAdornment:f,type:m}=e,h={root:["root",`color${(0,Ft.Z)(n)}`,r&&"disabled",o&&"error",s&&"fullWidth",i&&"focused",l&&"formControl","small"===p&&"sizeSmall",u&&"multiline",f&&"adornedStart",a&&"adornedEnd",c&&"hiddenLabel",d&&"readOnly"],input:["input",r&&"disabled","search"===m&&"inputTypeSearch",u&&"inputMultiline","small"===p&&"inputSizeSmall",c&&"inputHiddenLabel",f&&"inputAdornedStart",a&&"inputAdornedEnd",d&&"readOnly"]};return(0,Xe.Z)(h,wn,t)})(J),te=s.Root||Sn,ne=c.root||{},re=s.Input||On;return Y=(0,Se.Z)({},Y,c.input),(0,Ze.jsxs)(e.Fragment,{children:[!p&&Nn,(0,Ze.jsxs)(te,(0,Se.Z)({},ne,!un(te)&&{ownerState:(0,Se.Z)({},J,ne.ownerState)},{ref:n,onClick:e=>{z.current&&e.currentTarget===e.target&&z.current.focus(),S&&S(e)}},I,{className:(0,Ne.Z)(ee.root,ne.className,l),children:[A,(0,Ze.jsx)(pn.Provider,{value:null,children:(0,Ze.jsx)(re,(0,Se.Z)({ownerState:J,"aria-invalid":V.error,"aria-describedby":o,autoComplete:a,autoFocus:i,defaultValue:u,disabled:V.disabled,id:h,onAnimationStart:e=>{Q("mui-auto-fill-cancel"===e.animationName?z.current:{value:"x"})},name:E,placeholder:R,readOnly:T,required:V.required,rows:P,value:j,onKeyDown:N,onKeyUp:C,type:L},Y,!un(re)&&{as:X,ownerState:(0,Se.Z)({},J,Y.ownerState)},{ref:U,className:(0,Ne.Z)(ee.input,Y.className),onBlur:e=>{k&&k(e),b.onBlur&&b.onBlur(e),q&&q.onBlur?q.onBlur(e):H(!1)},onChange:(e,...t)=>{if(!D){const t=e.target||z.current;if(null==t)throw new Error((0,Yt.Z)(1));Q({value:t.value})}b.onChange&&b.onChange(e,...t),_&&_(e,...t)},onFocus:e=>{V.disabled?e.stopPropagation():(O&&O(e),b.onFocus&&b.onFocus(e),q&&q.onFocus?q.onFocus(e):H(!0))}}))}),f,M?M((0,Se.Z)({},V,{startAdornment:A})):null]}))]})})),Rn=Cn;function Tn(e){return(0,Lt.Z)("MuiInput",e)}const Mn=(0,Se.Z)({},xn,(0,yt.Z)("MuiInput",["root","underline","input"])),Pn=["disableUnderline","components","componentsProps","fullWidth","inputComponent","multiline","type"],An=(0,Je.ZP)(Sn,{shouldForwardProp:e=>(0,Je.FO)(e)||"classes"===e,name:"MuiInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[...kn(e,t),!n.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{let n="light"===e.palette.mode?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)";return e.vars&&(n=`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`),(0,Se.Z)({position:"relative"},t.formControl&&{"label + &":{marginTop:16}},!t.disableUnderline&&{"&:after":{borderBottom:`2px solid ${(e.vars||e).palette[t.color].main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${Mn.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${Mn.error}:after`]:{borderBottomColor:(e.vars||e).palette.error.main,transform:"scaleX(1)"},"&:before":{borderBottom:`1px solid ${n}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${Mn.disabled}):before`]:{borderBottom:`2px solid ${(e.vars||e).palette.text.primary}`,"@media (hover: none)":{borderBottom:`1px solid ${n}`}},[`&.${Mn.disabled}:before`]:{borderBottomStyle:"dotted"}})})),Ln=(0,Je.ZP)(On,{name:"MuiInput",slot:"Input",overridesResolver:_n})({}),Zn=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiInput"}),{disableUnderline:r,components:o={},componentsProps:a,fullWidth:i=!1,inputComponent:l="input",multiline:s=!1,type:c="text"}=n,u=(0,Oe.Z)(n,Pn),d=(e=>{const{classes:t,disableUnderline:n}=e,r={root:["root",!n&&"underline"],input:["input"]},o=(0,Xe.Z)(r,Tn,t);return(0,Se.Z)({},t,o)})(n),p={root:{ownerState:{disableUnderline:r}}},f=a?(0,Te.Z)(a,p):p;return(0,Ze.jsx)(Rn,(0,Se.Z)({components:(0,Se.Z)({Root:An,Input:Ln},o),componentsProps:f,fullWidth:i,inputComponent:l,multiline:s,ref:t,type:c},u,{classes:d}))}));Zn.muiName="Input";const In=Zn;function jn(e){return(0,Lt.Z)("MuiFilledInput",e)}const Dn=(0,Se.Z)({},xn,(0,yt.Z)("MuiFilledInput",["root","underline","input"])),zn=["disableUnderline","components","componentsProps","fullWidth","hiddenLabel","inputComponent","multiline","type"],Fn=(0,Je.ZP)(Sn,{shouldForwardProp:e=>(0,Je.FO)(e)||"classes"===e,name:"MuiFilledInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[...kn(e,t),!n.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{var n;const r="light"===e.palette.mode,o=r?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)",a=r?"rgba(0, 0, 0, 0.06)":"rgba(255, 255, 255, 0.09)",i=r?"rgba(0, 0, 0, 0.09)":"rgba(255, 255, 255, 0.13)",l=r?"rgba(0, 0, 0, 0.12)":"rgba(255, 255, 255, 0.12)";return(0,Se.Z)({position:"relative",backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a,borderTopLeftRadius:(e.vars||e).shape.borderRadius,borderTopRightRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create("background-color",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),"&:hover":{backgroundColor:e.vars?e.vars.palette.FilledInput.hoverBg:i,"@media (hover: none)":{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a}},[`&.${Dn.focused}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a},[`&.${Dn.disabled}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.disabledBg:l}},!t.disableUnderline&&{"&:after":{borderBottom:`2px solid ${null==(n=(e.vars||e).palette[t.color||"primary"])?void 0:n.main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${Dn.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${Dn.error}:after`]:{borderBottomColor:(e.vars||e).palette.error.main,transform:"scaleX(1)"},"&:before":{borderBottom:`1px solid ${e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`:o}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${Dn.disabled}):before`]:{borderBottom:`1px solid ${(e.vars||e).palette.text.primary}`},[`&.${Dn.disabled}:before`]:{borderBottomStyle:"dotted"}},t.startAdornment&&{paddingLeft:12},t.endAdornment&&{paddingRight:12},t.multiline&&(0,Se.Z)({padding:"25px 12px 8px"},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17}))})),Bn=(0,Je.ZP)(On,{name:"MuiFilledInput",slot:"Input",overridesResolver:_n})((({theme:e,ownerState:t})=>(0,Se.Z)({paddingTop:25,paddingRight:12,paddingBottom:8,paddingLeft:12},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.multiline&&{paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0},t.hiddenLabel&&"small"===t.size&&{paddingTop:8,paddingBottom:9}))),$n=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiFilledInput"}),{components:r={},componentsProps:o,fullWidth:a=!1,inputComponent:i="input",multiline:l=!1,type:s="text"}=n,c=(0,Oe.Z)(n,zn),u=(0,Se.Z)({},n,{fullWidth:a,inputComponent:i,multiline:l,type:s}),d=(e=>{const{classes:t,disableUnderline:n}=e,r={root:["root",!n&&"underline"],input:["input"]},o=(0,Xe.Z)(r,jn,t);return(0,Se.Z)({},t,o)})(n),p={root:{ownerState:u},input:{ownerState:u}},f=o?(0,Te.Z)(o,p):p;return(0,Ze.jsx)(Rn,(0,Se.Z)({components:(0,Se.Z)({Root:Fn,Input:Bn},r),componentsProps:f,fullWidth:a,inputComponent:i,multiline:l,ref:t,type:s},c,{classes:d}))}));$n.muiName="Input";const Un=$n;var Wn;const Hn=["children","classes","className","label","notched"],qn=(0,Je.ZP)("fieldset")({textAlign:"left",position:"absolute",bottom:0,right:0,top:-5,left:0,margin:0,padding:"0 8px",pointerEvents:"none",borderRadius:"inherit",borderStyle:"solid",borderWidth:1,overflow:"hidden",minWidth:"0%"}),Vn=(0,Je.ZP)("legend")((({ownerState:e,theme:t})=>(0,Se.Z)({float:"unset",width:"auto",overflow:"hidden"},!e.withLabel&&{padding:0,lineHeight:"11px",transition:t.transitions.create("width",{duration:150,easing:t.transitions.easing.easeOut})},e.withLabel&&(0,Se.Z)({display:"block",padding:0,height:11,fontSize:"0.75em",visibility:"hidden",maxWidth:.01,transition:t.transitions.create("max-width",{duration:50,easing:t.transitions.easing.easeOut}),whiteSpace:"nowrap","& > span":{paddingLeft:5,paddingRight:5,display:"inline-block",opacity:0,visibility:"visible"}},e.notched&&{maxWidth:"100%",transition:t.transitions.create("max-width",{duration:100,easing:t.transitions.easing.easeOut,delay:50})}))));function Kn(e){return(0,Lt.Z)("MuiOutlinedInput",e)}const Gn=(0,Se.Z)({},xn,(0,yt.Z)("MuiOutlinedInput",["root","notchedOutline","input"])),Qn=["components","fullWidth","inputComponent","label","multiline","notched","type"],Xn=(0,Je.ZP)(Sn,{shouldForwardProp:e=>(0,Je.FO)(e)||"classes"===e,name:"MuiOutlinedInput",slot:"Root",overridesResolver:kn})((({theme:e,ownerState:t})=>{const n="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return(0,Se.Z)({position:"relative",borderRadius:(e.vars||e).shape.borderRadius,[`&:hover .${Gn.notchedOutline}`]:{borderColor:(e.vars||e).palette.text.primary},"@media (hover: none)":{[`&:hover .${Gn.notchedOutline}`]:{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:n}},[`&.${Gn.focused} .${Gn.notchedOutline}`]:{borderColor:(e.vars||e).palette[t.color].main,borderWidth:2},[`&.${Gn.error} .${Gn.notchedOutline}`]:{borderColor:(e.vars||e).palette.error.main},[`&.${Gn.disabled} .${Gn.notchedOutline}`]:{borderColor:(e.vars||e).palette.action.disabled}},t.startAdornment&&{paddingLeft:14},t.endAdornment&&{paddingRight:14},t.multiline&&(0,Se.Z)({padding:"16.5px 14px"},"small"===t.size&&{padding:"8.5px 14px"}))})),Yn=(0,Je.ZP)((function(e){const{className:t,label:n,notched:r}=e,o=(0,Oe.Z)(e,Hn),a=null!=n&&""!==n,i=(0,Se.Z)({},e,{notched:r,withLabel:a});return(0,Ze.jsx)(qn,(0,Se.Z)({"aria-hidden":!0,className:t,ownerState:i},o,{children:(0,Ze.jsx)(Vn,{ownerState:i,children:a?(0,Ze.jsx)("span",{children:n}):Wn||(Wn=(0,Ze.jsx)("span",{className:"notranslate",children:"​"}))})}))}),{name:"MuiOutlinedInput",slot:"NotchedOutline",overridesResolver:(e,t)=>t.notchedOutline})((({theme:e})=>{const t="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:t}})),Jn=(0,Je.ZP)(On,{name:"MuiOutlinedInput",slot:"Input",overridesResolver:_n})((({theme:e,ownerState:t})=>(0,Se.Z)({padding:"16.5px 14px"},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{padding:"8.5px 14px"},t.multiline&&{padding:0},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0}))),er=e.forwardRef((function(t,n){var r;const o=(0,et.Z)({props:t,name:"MuiOutlinedInput"}),{components:a={},fullWidth:i=!1,inputComponent:l="input",label:s,multiline:c=!1,notched:u,type:d="text"}=o,p=(0,Oe.Z)(o,Qn),f=(e=>{const{classes:t}=e,n=(0,Xe.Z)({root:["root"],notchedOutline:["notchedOutline"],input:["input"]},Kn,t);return(0,Se.Z)({},t,n)})(o),m=fn(),h=dn({props:o,muiFormControl:m,states:["required"]}),g=(0,Se.Z)({},o,{color:h.color||"primary",disabled:h.disabled,error:h.error,focused:h.focused,formControl:m,fullWidth:i,hiddenLabel:h.hiddenLabel,multiline:c,size:h.size,type:d});return(0,Ze.jsx)(Rn,(0,Se.Z)({components:(0,Se.Z)({Root:Xn,Input:Jn},a),renderSuffix:t=>(0,Ze.jsx)(Yn,{ownerState:g,className:f.notchedOutline,label:null!=s&&""!==s&&h.required?r||(r=(0,Ze.jsxs)(e.Fragment,{children:[s," ","*"]})):s,notched:void 0!==u?u:Boolean(t.startAdornment||t.filled||t.focused)}),fullWidth:i,inputComponent:l,multiline:c,ref:n,type:d},p,{classes:(0,Se.Z)({},f,{notchedOutline:null})}))}));er.muiName="Input";const tr=er;function nr(e){return(0,Lt.Z)("MuiFormLabel",e)}const rr=(0,yt.Z)("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]),or=["children","className","color","component","disabled","error","filled","focused","required"],ar=(0,Je.ZP)("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,Se.Z)({},t.root,"secondary"===e.color&&t.colorSecondary,e.filled&&t.filled)})((({theme:e,ownerState:t})=>(0,Se.Z)({color:(e.vars||e).palette.text.secondary},e.typography.body1,{lineHeight:"1.4375em",padding:0,position:"relative",[`&.${rr.focused}`]:{color:(e.vars||e).palette[t.color].main},[`&.${rr.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${rr.error}`]:{color:(e.vars||e).palette.error.main}}))),ir=(0,Je.ZP)("span",{name:"MuiFormLabel",slot:"Asterisk",overridesResolver:(e,t)=>t.asterisk})((({theme:e})=>({[`&.${rr.error}`]:{color:(e.vars||e).palette.error.main}}))),lr=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiFormLabel"}),{children:r,className:o,component:a="label"}=n,i=(0,Oe.Z)(n,or),l=dn({props:n,muiFormControl:fn(),states:["color","required","focused","disabled","error","filled"]}),s=(0,Se.Z)({},n,{color:l.color||"primary",component:a,disabled:l.disabled,error:l.error,filled:l.filled,focused:l.focused,required:l.required}),c=(e=>{const{classes:t,color:n,focused:r,disabled:o,error:a,filled:i,required:l}=e,s={root:["root",`color${(0,Ft.Z)(n)}`,o&&"disabled",a&&"error",i&&"filled",r&&"focused",l&&"required"],asterisk:["asterisk",a&&"error"]};return(0,Xe.Z)(s,nr,t)})(s);return(0,Ze.jsxs)(ar,(0,Se.Z)({as:a,ownerState:s,className:(0,Ne.Z)(c.root,o),ref:t},i,{children:[r,l.required&&(0,Ze.jsxs)(ir,{ownerState:s,"aria-hidden":!0,className:c.asterisk,children:[" ","*"]})]}))}));function sr(e){return(0,Lt.Z)("MuiInputLabel",e)}(0,yt.Z)("MuiInputLabel",["root","focused","disabled","error","required","asterisk","formControl","sizeSmall","shrink","animated","standard","filled","outlined"]);const cr=["disableAnimation","margin","shrink","variant"],ur=(0,Je.ZP)(lr,{shouldForwardProp:e=>(0,Je.FO)(e)||"classes"===e,name:"MuiInputLabel",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[{[`& .${rr.asterisk}`]:t.asterisk},t.root,n.formControl&&t.formControl,"small"===n.size&&t.sizeSmall,n.shrink&&t.shrink,!n.disableAnimation&&t.animated,t[n.variant]]}})((({theme:e,ownerState:t})=>(0,Se.Z)({display:"block",transformOrigin:"top left",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},t.formControl&&{position:"absolute",left:0,top:0,transform:"translate(0, 20px) scale(1)"},"small"===t.size&&{transform:"translate(0, 17px) scale(1)"},t.shrink&&{transform:"translate(0, -1.5px) scale(0.75)",transformOrigin:"top left",maxWidth:"133%"},!t.disableAnimation&&{transition:e.transitions.create(["color","transform","max-width"],{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut})},"filled"===t.variant&&(0,Se.Z)({zIndex:1,pointerEvents:"none",transform:"translate(12px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(12px, 13px) scale(1)"},t.shrink&&(0,Se.Z)({userSelect:"none",pointerEvents:"auto",transform:"translate(12px, 7px) scale(0.75)",maxWidth:"calc(133% - 24px)"},"small"===t.size&&{transform:"translate(12px, 4px) scale(0.75)"})),"outlined"===t.variant&&(0,Se.Z)({zIndex:1,pointerEvents:"none",transform:"translate(14px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(14px, 9px) scale(1)"},t.shrink&&{userSelect:"none",pointerEvents:"auto",maxWidth:"calc(133% - 24px)",transform:"translate(14px, -9px) scale(0.75)"})))),dr=e.forwardRef((function(e,t){const n=(0,et.Z)({name:"MuiInputLabel",props:e}),{disableAnimation:r=!1,shrink:o}=n,a=(0,Oe.Z)(n,cr),i=fn();let l=o;void 0===l&&i&&(l=i.filled||i.focused||i.adornedStart);const s=dn({props:n,muiFormControl:i,states:["size","variant","required"]}),c=(0,Se.Z)({},n,{disableAnimation:r,formControl:i,shrink:l,size:s.size,variant:s.variant,required:s.required}),u=(e=>{const{classes:t,formControl:n,size:r,shrink:o,disableAnimation:a,variant:i,required:l}=e,s={root:["root",n&&"formControl",!a&&"animated",o&&"shrink","small"===r&&"sizeSmall",i],asterisk:[l&&"asterisk"]},c=(0,Xe.Z)(s,sr,t);return(0,Se.Z)({},t,c)})(c);return(0,Ze.jsx)(ur,(0,Se.Z)({"data-shrink":l,ownerState:c,ref:t},a,{classes:u}))}));var pr=o(3693);function fr(e){return(0,Lt.Z)("MuiFormControl",e)}(0,yt.Z)("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]);const mr=["children","className","color","component","disabled","error","focused","fullWidth","hiddenLabel","margin","required","size","variant"],hr=(0,Je.ZP)("div",{name:"MuiFormControl",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,Se.Z)({},t.root,t[`margin${(0,Ft.Z)(e.margin)}`],e.fullWidth&&t.fullWidth)})((({ownerState:e})=>(0,Se.Z)({display:"inline-flex",flexDirection:"column",position:"relative",minWidth:0,padding:0,margin:0,border:0,verticalAlign:"top"},"normal"===e.margin&&{marginTop:16,marginBottom:8},"dense"===e.margin&&{marginTop:8,marginBottom:4},e.fullWidth&&{width:"100%"}))),gr=e.forwardRef((function(t,n){const r=(0,et.Z)({props:t,name:"MuiFormControl"}),{children:o,className:a,color:i="primary",component:l="div",disabled:s=!1,error:c=!1,focused:u,fullWidth:d=!1,hiddenLabel:p=!1,margin:f="none",required:m=!1,size:h="medium",variant:g="outlined"}=r,b=(0,Oe.Z)(r,mr),v=(0,Se.Z)({},r,{color:i,component:l,disabled:s,error:c,fullWidth:d,hiddenLabel:p,margin:f,required:m,size:h,variant:g}),y=(e=>{const{classes:t,margin:n,fullWidth:r}=e,o={root:["root","none"!==n&&`margin${(0,Ft.Z)(n)}`,r&&"fullWidth"]};return(0,Xe.Z)(o,fr,t)})(v),[w,x]=e.useState((()=>{let t=!1;return o&&e.Children.forEach(o,(e=>{if(!(0,pr.Z)(e,["Input","Select"]))return;const n=(0,pr.Z)(e,["Select"])?e.props.input:e;n&&n.props.startAdornment&&(t=!0)})),t})),[E,k]=e.useState((()=>{let t=!1;return o&&e.Children.forEach(o,(e=>{(0,pr.Z)(e,["Input","Select"])&&yn(e.props,!0)&&(t=!0)})),t})),[_,S]=e.useState(!1);s&&_&&S(!1);const O=void 0===u||s?_:u,N=e.useCallback((()=>{k(!0)}),[]),C={adornedStart:w,setAdornedStart:x,color:i,disabled:s,error:c,filled:E,focused:O,fullWidth:d,hiddenLabel:p,size:h,onBlur:()=>{S(!1)},onEmpty:e.useCallback((()=>{k(!1)}),[]),onFilled:N,onFocus:()=>{S(!0)},registerEffect:void 0,required:m,variant:g};return(0,Ze.jsx)(pn.Provider,{value:C,children:(0,Ze.jsx)(hr,(0,Se.Z)({as:l,ownerState:v,className:(0,Ne.Z)(y.root,a),ref:n},b,{children:o}))})}));function br(e){return(0,Lt.Z)("MuiFormHelperText",e)}const vr=(0,yt.Z)("MuiFormHelperText",["root","error","disabled","sizeSmall","sizeMedium","contained","focused","filled","required"]);var yr;const wr=["children","className","component","disabled","error","filled","focused","margin","required","variant"],xr=(0,Je.ZP)("p",{name:"MuiFormHelperText",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.size&&t[`size${(0,Ft.Z)(n.size)}`],n.contained&&t.contained,n.filled&&t.filled]}})((({theme:e,ownerState:t})=>(0,Se.Z)({color:(e.vars||e).palette.text.secondary},e.typography.caption,{textAlign:"left",marginTop:3,marginRight:0,marginBottom:0,marginLeft:0,[`&.${vr.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${vr.error}`]:{color:(e.vars||e).palette.error.main}},"small"===t.size&&{marginTop:4},t.contained&&{marginLeft:14,marginRight:14}))),Er=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiFormHelperText"}),{children:r,className:o,component:a="p"}=n,i=(0,Oe.Z)(n,wr),l=dn({props:n,muiFormControl:fn(),states:["variant","size","disabled","error","filled","focused","required"]}),s=(0,Se.Z)({},n,{component:a,contained:"filled"===l.variant||"outlined"===l.variant,variant:l.variant,size:l.size,disabled:l.disabled,error:l.error,filled:l.filled,focused:l.focused,required:l.required}),c=(e=>{const{classes:t,contained:n,size:r,disabled:o,error:a,filled:i,focused:l,required:s}=e,c={root:["root",o&&"disabled",a&&"error",r&&`size${(0,Ft.Z)(r)}`,n&&"contained",l&&"focused",i&&"filled",s&&"required"]};return(0,Xe.Z)(c,br,t)})(s);return(0,Ze.jsx)(xr,(0,Se.Z)({as:a,ownerState:s,className:(0,Ne.Z)(c.root,o),ref:t},i,{children:" "===r?yr||(yr=(0,Ze.jsx)("span",{className:"notranslate",children:"​"})):r}))}));var kr=o(7505);const _r=e.createContext({});function Sr(e){return(0,Lt.Z)("MuiList",e)}(0,yt.Z)("MuiList",["root","padding","dense","subheader"]);const Or=["children","className","component","dense","disablePadding","subheader"],Nr=(0,Je.ZP)("ul",{name:"MuiList",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disablePadding&&t.padding,n.dense&&t.dense,n.subheader&&t.subheader]}})((({ownerState:e})=>(0,Se.Z)({listStyle:"none",margin:0,padding:0,position:"relative"},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0}))),Cr=e.forwardRef((function(t,n){const r=(0,et.Z)({props:t,name:"MuiList"}),{children:o,className:a,component:i="ul",dense:l=!1,disablePadding:s=!1,subheader:c}=r,u=(0,Oe.Z)(r,Or),d=e.useMemo((()=>({dense:l})),[l]),p=(0,Se.Z)({},r,{component:i,dense:l,disablePadding:s}),f=(e=>{const{classes:t,disablePadding:n,dense:r,subheader:o}=e,a={root:["root",!n&&"padding",r&&"dense",o&&"subheader"]};return(0,Xe.Z)(a,Sr,t)})(p);return(0,Ze.jsx)(_r.Provider,{value:d,children:(0,Ze.jsxs)(Nr,(0,Se.Z)({as:i,className:(0,Ne.Z)(f.root,a),ref:n,ownerState:p},u,{children:[c,o]}))})}));function Rr(e){const t=e.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}const Tr=Rr,Mr=["actions","autoFocus","autoFocusItem","children","className","disabledItemsFocusable","disableListWrap","onKeyDown","variant"];function Pr(e,t,n){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:n?null:e.firstChild}function Ar(e,t,n){return e===t?n?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:n?null:e.lastChild}function Lr(e,t){if(void 0===t)return!0;let n=e.innerText;return void 0===n&&(n=e.textContent),n=n.trim().toLowerCase(),0!==n.length&&(t.repeating?n[0]===t.keys[0]:0===n.indexOf(t.keys.join("")))}function Zr(e,t,n,r,o,a){let i=!1,l=o(e,t,!!t&&n);for(;l;){if(l===e.firstChild){if(i)return!1;i=!0}const t=!r&&(l.disabled||"true"===l.getAttribute("aria-disabled"));if(l.hasAttribute("tabindex")&&Lr(l,a)&&!t)return l.focus(),!0;l=o(e,l,n)}return!1}const Ir=e.forwardRef((function(t,n){const{actions:r,autoFocus:o=!1,autoFocusItem:a=!1,children:i,className:l,disabledItemsFocusable:s=!1,disableListWrap:c=!1,onKeyDown:u,variant:d="selectedMenu"}=t,p=(0,Oe.Z)(t,Mr),f=e.useRef(null),m=e.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});(0,mn.Z)((()=>{o&&f.current.focus()}),[o]),e.useImperativeHandle(r,(()=>({adjustStyleForScrollbar:(e,t)=>{const n=!f.current.style.width;if(e.clientHeight<f.current.clientHeight&&n){const n=`${Tr((0,kr.Z)(e))}px`;f.current.style["rtl"===t.direction?"paddingLeft":"paddingRight"]=n,f.current.style.width=`calc(100% + ${n})`}return f.current}})),[]);const h=(0,tt.Z)(f,n);let g=-1;e.Children.forEach(i,((t,n)=>{e.isValidElement(t)&&(t.props.disabled||("selectedMenu"===d&&t.props.selected||-1===g)&&(g=n))}));const b=e.Children.map(i,((t,n)=>{if(n===g){const n={};return a&&(n.autoFocus=!0),void 0===t.props.tabIndex&&"selectedMenu"===d&&(n.tabIndex=0),e.cloneElement(t,n)}return t}));return(0,Ze.jsx)(Cr,(0,Se.Z)({role:"menu",ref:h,className:l,onKeyDown:e=>{const t=f.current,n=e.key,r=(0,kr.Z)(t).activeElement;if("ArrowDown"===n)e.preventDefault(),Zr(t,r,c,s,Pr);else if("ArrowUp"===n)e.preventDefault(),Zr(t,r,c,s,Ar);else if("Home"===n)e.preventDefault(),Zr(t,null,c,s,Pr);else if("End"===n)e.preventDefault(),Zr(t,null,c,s,Ar);else if(1===n.length){const o=m.current,a=n.toLowerCase(),i=performance.now();o.keys.length>0&&(i-o.lastTime>500?(o.keys=[],o.repeating=!0,o.previousKeyMatched=!0):o.repeating&&a!==o.keys[0]&&(o.repeating=!1)),o.lastTime=i,o.keys.push(a);const l=r&&!o.repeating&&Lr(r,o);o.previousKeyMatched&&(l||Zr(t,r,!1,s,Pr,o))?e.preventDefault():o.previousKeyMatched=!1}u&&u(e)},tabIndex:o?0:-1},p,{children:b}))})),jr=Ir;function Dr(e){return(0,Lt.Z)("MuiPaper",e)}(0,yt.Z)("MuiPaper",["root","rounded","outlined","elevation","elevation0","elevation1","elevation2","elevation3","elevation4","elevation5","elevation6","elevation7","elevation8","elevation9","elevation10","elevation11","elevation12","elevation13","elevation14","elevation15","elevation16","elevation17","elevation18","elevation19","elevation20","elevation21","elevation22","elevation23","elevation24"]);const zr=["className","component","elevation","square","variant"],Fr=e=>{let t;return t=e<1?5.11916*e**2:4.5*Math.log(e+1)+2,(t/100).toFixed(2)},Br=(0,Je.ZP)("div",{name:"MuiPaper",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],!n.square&&t.rounded,"elevation"===n.variant&&t[`elevation${n.elevation}`]]}})((({theme:e,ownerState:t})=>{var n;return(0,Se.Z)({backgroundColor:(e.vars||e).palette.background.paper,color:(e.vars||e).palette.text.primary,transition:e.transitions.create("box-shadow")},!t.square&&{borderRadius:e.shape.borderRadius},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.divider}`},"elevation"===t.variant&&(0,Se.Z)({boxShadow:(e.vars||e).shadows[t.elevation]},!e.vars&&"dark"===e.palette.mode&&{backgroundImage:`linear-gradient(${(0,Ye.Fq)("#fff",Fr(t.elevation))}, ${(0,Ye.Fq)("#fff",Fr(t.elevation))})`},e.vars&&{backgroundImage:null==(n=e.vars.overlays)?void 0:n[t.elevation]}))})),$r=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiPaper"}),{className:r,component:o="div",elevation:a=1,square:i=!1,variant:l="elevation"}=n,s=(0,Oe.Z)(n,zr),c=(0,Se.Z)({},n,{component:o,elevation:a,square:i,variant:l}),u=(e=>{const{square:t,elevation:n,variant:r,classes:o}=e,a={root:["root",r,!t&&"rounded","elevation"===r&&`elevation${n}`]};return(0,Xe.Z)(a,Dr,o)})(c);return(0,Ze.jsx)(Br,(0,Se.Z)({as:o,ownerState:c,className:(0,Ne.Z)(u.root,r),ref:t},s))}));var Ur=o(5400),Wr=o(7577);var Hr="unmounted",qr="exited",Vr="entering",Kr="entered",Gr="exiting",Qr=function(t){function n(e,n){var r;r=t.call(this,e,n)||this;var o,a=n&&!n.isMounting?e.enter:e.appear;return r.appearStatus=null,e.in?a?(o=qr,r.appearStatus=Vr):o=Kr:o=e.unmountOnExit||e.mountOnEnter?Hr:qr,r.state={status:o},r.nextCallback=null,r}at(n,t),n.getDerivedStateFromProps=function(e,t){return e.in&&t.status===Hr?{status:qr}:null};var r=n.prototype;return r.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},r.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==Vr&&n!==Kr&&(t=Vr):n!==Vr&&n!==Kr||(t=Gr)}this.updateStatus(!1,t)},r.componentWillUnmount=function(){this.cancelNextCallback()},r.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},r.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===Vr){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:i.findDOMNode(this);n&&function(e){e.scrollTop}(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===qr&&this.setState({status:Hr})},r.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[i.findDOMNode(this),r],a=o[0],l=o[1],s=this.getTimeouts(),c=r?s.appear:s.enter;e||n?(this.props.onEnter(a,l),this.safeSetState({status:Vr},(function(){t.props.onEntering(a,l),t.onTransitionEnd(c,(function(){t.safeSetState({status:Kr},(function(){t.props.onEntered(a,l)}))}))}))):this.safeSetState({status:Kr},(function(){t.props.onEntered(a)}))},r.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:i.findDOMNode(this);t?(this.props.onExit(r),this.safeSetState({status:Gr},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:qr},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:qr},(function(){e.props.onExited(r)}))},r.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},r.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},r.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},r.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:i.findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=o[0],l=o[1];this.props.addEndListener(a,l)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},r.render=function(){var t=this.state.status;if(t===Hr)return null;var n=this.props,r=n.children,o=(n.in,n.mountOnEnter,n.unmountOnExit,n.appear,n.enter,n.exit,n.timeout,n.addEndListener,n.onEnter,n.onEntering,n.onEntered,n.onExit,n.onExiting,n.onExited,n.nodeRef,(0,Oe.Z)(n,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return e.createElement(it.Provider,{value:null},"function"==typeof r?r(t,o):e.cloneElement(e.Children.only(r),o))},n}(e.Component);function Xr(){}Qr.contextType=it,Qr.propTypes={},Qr.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:Xr,onEntering:Xr,onEntered:Xr,onExit:Xr,onExiting:Xr,onExited:Xr},Qr.UNMOUNTED=Hr,Qr.EXITED=qr,Qr.ENTERING=Vr,Qr.ENTERED=Kr,Qr.EXITING=Gr;const Yr=Qr;function Jr(){return(0,Le.Z)(gn.Z)}const eo=e=>e.scrollTop;function to(e,t){var n,r;const{timeout:o,easing:a,style:i={}}=e;return{duration:null!=(n=i.transitionDuration)?n:"number"==typeof o?o:o[t.mode]||0,easing:null!=(r=i.transitionTimingFunction)?r:"object"==typeof a?a[t.mode]:a,delay:i.transitionDelay}}const no=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function ro(e){return`scale(${e}, ${e**2})`}const oo={entering:{opacity:1,transform:ro(1)},entered:{opacity:1,transform:"none"}},ao="undefined"!=typeof navigator&&/^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent)&&/(os |version\/)15(.|_)4/i.test(navigator.userAgent),io=e.forwardRef((function(t,n){const{addEndListener:r,appear:o=!0,children:a,easing:i,in:l,onEnter:s,onEntered:c,onEntering:u,onExit:d,onExited:p,onExiting:f,style:m,timeout:h="auto",TransitionComponent:g=Yr}=t,b=(0,Oe.Z)(t,no),v=e.useRef(),y=e.useRef(),w=Jr(),x=e.useRef(null),E=(0,tt.Z)(a.ref,n),k=(0,tt.Z)(x,E),_=e=>t=>{if(e){const n=x.current;void 0===t?e(n):e(n,t)}},S=_(u),O=_(((e,t)=>{eo(e);const{duration:n,delay:r,easing:o}=to({style:m,timeout:h,easing:i},{mode:"enter"});let a;"auto"===h?(a=w.transitions.getAutoHeightDuration(e.clientHeight),y.current=a):a=n,e.style.transition=[w.transitions.create("opacity",{duration:a,delay:r}),w.transitions.create("transform",{duration:ao?a:.666*a,delay:r,easing:o})].join(","),s&&s(e,t)})),N=_(c),C=_(f),R=_((e=>{const{duration:t,delay:n,easing:r}=to({style:m,timeout:h,easing:i},{mode:"exit"});let o;"auto"===h?(o=w.transitions.getAutoHeightDuration(e.clientHeight),y.current=o):o=t,e.style.transition=[w.transitions.create("opacity",{duration:o,delay:n}),w.transitions.create("transform",{duration:ao?o:.666*o,delay:ao?n:n||.333*o,easing:r})].join(","),e.style.opacity=0,e.style.transform=ro(.75),d&&d(e)})),T=_(p);return e.useEffect((()=>()=>{clearTimeout(v.current)}),[]),(0,Ze.jsx)(g,(0,Se.Z)({appear:o,in:l,nodeRef:x,onEnter:O,onEntered:N,onEntering:S,onExit:R,onExited:T,onExiting:C,addEndListener:e=>{"auto"===h&&(v.current=setTimeout(e,y.current||0)),r&&r(x.current,e)},timeout:"auto"===h?null:h},b,{children:(t,n)=>e.cloneElement(a,(0,Se.Z)({style:(0,Se.Z)({opacity:0,transform:ro(.75),visibility:"exited"!==t||l?void 0:"hidden"},oo[t],m,a.props.style),ref:k},n))}))}));io.muiSupportAuto=!0;const lo=io;var so=o(7094),co=o(3633),uo=o(9064),po=o(7960);const fo=e.forwardRef((function(t,n){const{children:r,container:o,disablePortal:a=!1}=t,[l,s]=e.useState(null),c=(0,Jt.Z)(e.isValidElement(r)?r.ref:null,n);return(0,nn.Z)((()=>{a||s(function(e){return"function"==typeof e?e():e}(o)||document.body)}),[o,a]),(0,nn.Z)((()=>{if(l&&!a)return(0,po.Z)(n,l),()=>{(0,po.Z)(n,null)}}),[n,l,a]),a?e.isValidElement(r)?e.cloneElement(r,{ref:c}):r:(0,Ze.jsx)(e.Fragment,{children:l?i.createPortal(r,l):l})}));function mo(e,t){t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden")}function ho(e){return parseInt((0,en.Z)(e).getComputedStyle(e).paddingRight,10)||0}function go(e,t,n,r=[],o){const a=[t,n,...r];[].forEach.call(e.children,(e=>{const t=-1===a.indexOf(e),n=!function(e){const t=-1!==["TEMPLATE","SCRIPT","STYLE","LINK","MAP","META","NOSCRIPT","PICTURE","COL","COLGROUP","PARAM","SLOT","SOURCE","TRACK"].indexOf(e.tagName),n="INPUT"===e.tagName&&"hidden"===e.getAttribute("type");return t||n}(e);t&&n&&mo(e,o)}))}function bo(e,t){let n=-1;return e.some(((e,r)=>!!t(e)&&(n=r,!0))),n}const vo=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])'].join(",");function yo(e){const t=[],n=[];return Array.from(e.querySelectorAll(vo)).forEach(((e,r)=>{const o=function(e){const t=parseInt(e.getAttribute("tabindex"),10);return Number.isNaN(t)?"true"===e.contentEditable||("AUDIO"===e.nodeName||"VIDEO"===e.nodeName||"DETAILS"===e.nodeName)&&null===e.getAttribute("tabindex")?0:e.tabIndex:t}(e);-1!==o&&function(e){return!(e.disabled||"INPUT"===e.tagName&&"hidden"===e.type||function(e){if("INPUT"!==e.tagName||"radio"!==e.type)return!1;if(!e.name)return!1;const t=t=>e.ownerDocument.querySelector(`input[type="radio"]${t}`);let n=t(`[name="${e.name}"]:checked`);return n||(n=t(`[name="${e.name}"]`)),n!==e}(e))}(e)&&(0===o?t.push(e):n.push({documentOrder:r,tabIndex:o,node:e}))})),n.sort(((e,t)=>e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex)).map((e=>e.node)).concat(t)}function wo(){return!0}const xo=function(t){const{children:n,disableAutoFocus:r=!1,disableEnforceFocus:o=!1,disableRestoreFocus:a=!1,getTabbable:i=yo,isEnabled:l=wo,open:s}=t,c=e.useRef(),u=e.useRef(null),d=e.useRef(null),p=e.useRef(null),f=e.useRef(null),m=e.useRef(!1),h=e.useRef(null),g=(0,Jt.Z)(n.ref,h),b=e.useRef(null);e.useEffect((()=>{s&&h.current&&(m.current=!r)}),[r,s]),e.useEffect((()=>{if(!s||!h.current)return;const e=(0,so.Z)(h.current);return h.current.contains(e.activeElement)||(h.current.hasAttribute("tabIndex")||h.current.setAttribute("tabIndex",-1),m.current&&h.current.focus()),()=>{a||(p.current&&p.current.focus&&(c.current=!0,p.current.focus()),p.current=null)}}),[s]),e.useEffect((()=>{if(!s||!h.current)return;const e=(0,so.Z)(h.current),t=t=>{const{current:n}=h;if(null!==n)if(e.hasFocus()&&!o&&l()&&!c.current){if(!n.contains(e.activeElement)){if(t&&f.current!==t.target||e.activeElement!==f.current)f.current=null;else if(null!==f.current)return;if(!m.current)return;let o=[];if(e.activeElement!==u.current&&e.activeElement!==d.current||(o=i(h.current)),o.length>0){var r,a;const e=Boolean((null==(r=b.current)?void 0:r.shiftKey)&&"Tab"===(null==(a=b.current)?void 0:a.key)),t=o[0],n=o[o.length-1];e?n.focus():t.focus()}else n.focus()}}else c.current=!1},n=t=>{b.current=t,!o&&l()&&"Tab"===t.key&&e.activeElement===h.current&&t.shiftKey&&(c.current=!0,d.current.focus())};e.addEventListener("focusin",t),e.addEventListener("keydown",n,!0);const r=setInterval((()=>{"BODY"===e.activeElement.tagName&&t()}),50);return()=>{clearInterval(r),e.removeEventListener("focusin",t),e.removeEventListener("keydown",n,!0)}}),[r,o,a,l,s,i]);const v=e=>{null===p.current&&(p.current=e.relatedTarget),m.current=!0};return(0,Ze.jsxs)(e.Fragment,{children:[(0,Ze.jsx)("div",{tabIndex:s?0:-1,onFocus:v,ref:u,"data-testid":"sentinelStart"}),e.cloneElement(n,{ref:g,onFocus:e=>{null===p.current&&(p.current=e.relatedTarget),m.current=!0,f.current=e.target;const t=n.props.onFocus;t&&t(e)}}),(0,Ze.jsx)("div",{tabIndex:s?0:-1,onFocus:v,ref:d,"data-testid":"sentinelEnd"})]})};function Eo(e){return(0,Lt.Z)("MuiModal",e)}function ko(e,t={},n){return un(e)?t:(0,Se.Z)({},t,{ownerState:(0,Se.Z)({},t.ownerState,n)})}function _o(e){if(void 0===e)return{};const t={};return Object.keys(e).filter((t=>!(t.match(/^on[A-Z]/)&&"function"==typeof e[t]))).forEach((n=>{t[n]=e[n]})),t}function So(e,t){return"function"==typeof e?e(t):e}(0,yt.Z)("MuiModal",["root","hidden"]);const Oo=["elementType","externalSlotProps","ownerState"];function No(e){var t;const{elementType:n,externalSlotProps:r,ownerState:o}=e,a=(0,Oe.Z)(e,Oo),i=So(r,o),{props:l,internalRef:s}=function(e){const{getSlotProps:t,additionalProps:n,externalSlotProps:r,externalForwardedProps:o,className:a}=e;if(!t){const e=(0,Ne.Z)(null==o?void 0:o.className,null==r?void 0:r.className,a,null==n?void 0:n.className),t=(0,Se.Z)({},null==n?void 0:n.style,null==o?void 0:o.style,null==r?void 0:r.style),i=(0,Se.Z)({},n,o,r);return e.length>0&&(i.className=e),Object.keys(t).length>0&&(i.style=t),{props:i,internalRef:void 0}}const i=function(e,t=[]){if(void 0===e)return{};const n={};return Object.keys(e).filter((n=>n.match(/^on[A-Z]/)&&"function"==typeof e[n]&&!t.includes(n))).forEach((t=>{n[t]=e[t]})),n}((0,Se.Z)({},o,r)),l=_o(r),s=_o(o),c=t(i),u=(0,Ne.Z)(null==c?void 0:c.className,null==n?void 0:n.className,a,null==o?void 0:o.className,null==r?void 0:r.className),d=(0,Se.Z)({},null==c?void 0:c.style,null==n?void 0:n.style,null==o?void 0:o.style,null==r?void 0:r.style),p=(0,Se.Z)({},c,n,s,l);return u.length>0&&(p.className=u),Object.keys(d).length>0&&(p.style=d),{props:p,internalRef:c.ref}}((0,Se.Z)({},a,{externalSlotProps:i})),c=(0,Jt.Z)(s,(0,Jt.Z)(null==i?void 0:i.ref,null==(t=e.additionalProps)?void 0:t.ref));return ko(n,(0,Se.Z)({},l,{ref:c}),o)}const Co=["children","classes","closeAfterTransition","component","components","componentsProps","container","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted","manager","onBackdropClick","onClose","onKeyDown","open","onTransitionEnter","onTransitionExited"],Ro=new class{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(e,t){let n=this.modals.indexOf(e);if(-1!==n)return n;n=this.modals.length,this.modals.push(e),e.modalRef&&mo(e.modalRef,!1);const r=function(e){const t=[];return[].forEach.call(e.children,(e=>{"true"===e.getAttribute("aria-hidden")&&t.push(e)})),t}(t);go(t,e.mount,e.modalRef,r,!0);const o=bo(this.containers,(e=>e.container===t));return-1!==o?(this.containers[o].modals.push(e),n):(this.containers.push({modals:[e],container:t,restore:null,hiddenSiblings:r}),n)}mount(e,t){const n=bo(this.containers,(t=>-1!==t.modals.indexOf(e))),r=this.containers[n];r.restore||(r.restore=function(e,t){const n=[],r=e.container;if(!t.disableScrollLock){if(function(e){const t=(0,so.Z)(e);return t.body===e?(0,en.Z)(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}(r)){const e=Rr((0,so.Z)(r));n.push({value:r.style.paddingRight,property:"padding-right",el:r}),r.style.paddingRight=`${ho(r)+e}px`;const t=(0,so.Z)(r).querySelectorAll(".mui-fixed");[].forEach.call(t,(t=>{n.push({value:t.style.paddingRight,property:"padding-right",el:t}),t.style.paddingRight=`${ho(t)+e}px`}))}let e;if(r.parentNode instanceof DocumentFragment)e=(0,so.Z)(r).body;else{const t=r.parentElement,n=(0,en.Z)(r);e="HTML"===(null==t?void 0:t.nodeName)&&"scroll"===n.getComputedStyle(t).overflowY?t:r}n.push({value:e.style.overflow,property:"overflow",el:e},{value:e.style.overflowX,property:"overflow-x",el:e},{value:e.style.overflowY,property:"overflow-y",el:e}),e.style.overflow="hidden"}return()=>{n.forEach((({value:e,el:t,property:n})=>{e?t.style.setProperty(n,e):t.style.removeProperty(n)}))}}(r,t))}remove(e,t=!0){const n=this.modals.indexOf(e);if(-1===n)return n;const r=bo(this.containers,(t=>-1!==t.modals.indexOf(e))),o=this.containers[r];if(o.modals.splice(o.modals.indexOf(e),1),this.modals.splice(n,1),0===o.modals.length)o.restore&&o.restore(),e.modalRef&&mo(e.modalRef,t),go(o.container,e.mount,e.modalRef,o.hiddenSiblings,!1),this.containers.splice(r,1);else{const e=o.modals[o.modals.length-1];e.modalRef&&mo(e.modalRef,!1)}return n}isTopModal(e){return this.modals.length>0&&this.modals[this.modals.length-1]===e}},To=e.forwardRef((function(t,n){var r;const{children:o,classes:a,closeAfterTransition:i=!1,component:l="div",components:s={},componentsProps:c={},container:u,disableAutoFocus:d=!1,disableEnforceFocus:p=!1,disableEscapeKeyDown:f=!1,disablePortal:m=!1,disableRestoreFocus:h=!1,disableScrollLock:g=!1,hideBackdrop:b=!1,keepMounted:v=!1,manager:y=Ro,onBackdropClick:w,onClose:x,onKeyDown:E,open:k,onTransitionEnter:_,onTransitionExited:S}=t,O=(0,Oe.Z)(t,Co),[N,C]=e.useState(!0),R=e.useRef({}),T=e.useRef(null),M=e.useRef(null),P=(0,Jt.Z)(M,n),A=function(e){return!!e.children&&e.children.props.hasOwnProperty("in")}(t),L=null==(r=t["aria-hidden"])||r,Z=()=>(R.current.modalRef=M.current,R.current.mountNode=T.current,R.current),I=()=>{y.mount(Z(),{disableScrollLock:g}),M.current.scrollTop=0},j=(0,co.Z)((()=>{const e=function(e){return"function"==typeof e?e():e}(u)||(0,so.Z)(T.current).body;y.add(Z(),e),M.current&&I()})),D=e.useCallback((()=>y.isTopModal(Z())),[y]),z=(0,co.Z)((e=>{T.current=e,e&&(k&&D()?I():mo(M.current,L))})),F=e.useCallback((()=>{y.remove(Z(),L)}),[y,L]);e.useEffect((()=>()=>{F()}),[F]),e.useEffect((()=>{k?j():A&&i||F()}),[k,F,A,i,j]);const B=(0,Se.Z)({},t,{classes:a,closeAfterTransition:i,disableAutoFocus:d,disableEnforceFocus:p,disableEscapeKeyDown:f,disablePortal:m,disableRestoreFocus:h,disableScrollLock:g,exited:N,hideBackdrop:b,keepMounted:v}),$=(e=>{const{open:t,exited:n,classes:r}=e,o={root:["root",!t&&n&&"hidden"]};return(0,Xe.Z)(o,Eo,r)})(B),U={};void 0===o.props.tabIndex&&(U.tabIndex="-1"),A&&(U.onEnter=(0,uo.Z)((()=>{C(!1),_&&_()}),o.props.onEnter),U.onExited=(0,uo.Z)((()=>{C(!0),S&&S(),i&&F()}),o.props.onExited));const W=s.Root||l,H=No({elementType:W,externalSlotProps:c.root,externalForwardedProps:O,additionalProps:{ref:P,role:"presentation",onKeyDown:e=>{E&&E(e),"Escape"===e.key&&D()&&(f||(e.stopPropagation(),x&&x(e,"escapeKeyDown")))}},className:$.root,ownerState:B}),q=s.Backdrop,V=No({elementType:q,externalSlotProps:c.backdrop,additionalProps:{"aria-hidden":!0,onClick:e=>{e.target===e.currentTarget&&(w&&w(e),x&&x(e,"backdropClick"))},open:k},ownerState:B});return v||k||A&&!N?(0,Ze.jsx)(fo,{ref:z,container:u,disablePortal:m,children:(0,Ze.jsxs)(W,(0,Se.Z)({},H,{children:[!b&&q?(0,Ze.jsx)(q,(0,Se.Z)({},V)):null,(0,Ze.jsx)(xo,{disableEnforceFocus:p,disableAutoFocus:d,disableRestoreFocus:h,isEnabled:D,open:k,children:e.cloneElement(o,U)})]}))}):null})),Mo=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"],Po={entering:{opacity:1},entered:{opacity:1}},Ao=e.forwardRef((function(t,n){const r=Jr(),o={enter:r.transitions.duration.enteringScreen,exit:r.transitions.duration.leavingScreen},{addEndListener:a,appear:i=!0,children:l,easing:s,in:c,onEnter:u,onEntered:d,onEntering:p,onExit:f,onExited:m,onExiting:h,style:g,timeout:b=o,TransitionComponent:v=Yr}=t,y=(0,Oe.Z)(t,Mo),w=e.useRef(null),x=(0,tt.Z)(l.ref,n),E=(0,tt.Z)(w,x),k=e=>t=>{if(e){const n=w.current;void 0===t?e(n):e(n,t)}},_=k(p),S=k(((e,t)=>{eo(e);const n=to({style:g,timeout:b,easing:s},{mode:"enter"});e.style.webkitTransition=r.transitions.create("opacity",n),e.style.transition=r.transitions.create("opacity",n),u&&u(e,t)})),O=k(d),N=k(h),C=k((e=>{const t=to({style:g,timeout:b,easing:s},{mode:"exit"});e.style.webkitTransition=r.transitions.create("opacity",t),e.style.transition=r.transitions.create("opacity",t),f&&f(e)})),R=k(m);return(0,Ze.jsx)(v,(0,Se.Z)({appear:i,in:c,nodeRef:w,onEnter:S,onEntered:O,onEntering:_,onExit:C,onExited:R,onExiting:N,addEndListener:e=>{a&&a(w.current,e)},timeout:b},y,{children:(t,n)=>e.cloneElement(l,(0,Se.Z)({style:(0,Se.Z)({opacity:0,visibility:"exited"!==t||c?void 0:"hidden"},Po[t],g,l.props.style),ref:E},n))}))})),Lo=Ao;function Zo(e){return(0,Lt.Z)("MuiBackdrop",e)}(0,yt.Z)("MuiBackdrop",["root","invisible"]);const Io=["children","component","components","componentsProps","className","invisible","open","transitionDuration","TransitionComponent"],jo=(0,Je.ZP)("div",{name:"MuiBackdrop",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.invisible&&t.invisible]}})((({ownerState:e})=>(0,Se.Z)({position:"fixed",display:"flex",alignItems:"center",justifyContent:"center",right:0,bottom:0,top:0,left:0,backgroundColor:"rgba(0, 0, 0, 0.5)",WebkitTapHighlightColor:"transparent"},e.invisible&&{backgroundColor:"transparent"}))),Do=e.forwardRef((function(e,t){var n,r;const o=(0,et.Z)({props:e,name:"MuiBackdrop"}),{children:a,component:i="div",components:l={},componentsProps:s={},className:c,invisible:u=!1,open:d,transitionDuration:p,TransitionComponent:f=Lo}=o,m=(0,Oe.Z)(o,Io),h=(0,Se.Z)({},o,{component:i,invisible:u}),g=(e=>{const{classes:t,invisible:n}=e,r={root:["root",n&&"invisible"]};return(0,Xe.Z)(r,Zo,t)})(h);return(0,Ze.jsx)(f,(0,Se.Z)({in:d,timeout:p},m,{children:(0,Ze.jsx)(jo,{"aria-hidden":!0,as:null!=(n=l.Root)?n:i,className:(0,Ne.Z)(g.root,c),ownerState:(0,Se.Z)({},h,null==(r=s.root)?void 0:r.ownerState),classes:g,ref:t,children:a})}))})),zo=["BackdropComponent","BackdropProps","closeAfterTransition","children","component","components","componentsProps","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted","theme"],Fo=(0,Je.ZP)("div",{name:"MuiModal",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.open&&n.exited&&t.hidden]}})((({theme:e,ownerState:t})=>(0,Se.Z)({position:"fixed",zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:"hidden"}))),Bo=(0,Je.ZP)(Do,{name:"MuiModal",slot:"Backdrop",overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),$o=e.forwardRef((function(t,n){var r,o;const a=(0,et.Z)({name:"MuiModal",props:t}),{BackdropComponent:i=Bo,BackdropProps:l,closeAfterTransition:s=!1,children:c,component:u,components:d={},componentsProps:p={},disableAutoFocus:f=!1,disableEnforceFocus:m=!1,disableEscapeKeyDown:h=!1,disablePortal:g=!1,disableRestoreFocus:b=!1,disableScrollLock:v=!1,hideBackdrop:y=!1,keepMounted:w=!1,theme:x}=a,E=(0,Oe.Z)(a,zo),[k,_]=e.useState(!0),S={closeAfterTransition:s,disableAutoFocus:f,disableEnforceFocus:m,disableEscapeKeyDown:h,disablePortal:g,disableRestoreFocus:b,disableScrollLock:v,hideBackdrop:y,keepMounted:w},O=(0,Se.Z)({},a,S,{exited:k}),N=(e=>e.classes)(O),C=null!=(r=null!=(o=d.Root)?o:u)?r:Fo;return(0,Ze.jsx)(To,(0,Se.Z)({components:(0,Se.Z)({Root:C,Backdrop:i},d),componentsProps:{root:()=>(0,Se.Z)({},So(p.root,O),!un(C)&&{as:u,theme:x}),backdrop:()=>(0,Se.Z)({},l,So(p.backdrop,O))},onTransitionEnter:()=>_(!1),onTransitionExited:()=>_(!0),ref:n},E,{classes:N},S,{children:c}))})),Uo=$o;function Wo(e){return(0,Lt.Z)("MuiPopover",e)}(0,yt.Z)("MuiPopover",["root","paper"]);const Ho=["onEntering"],qo=["action","anchorEl","anchorOrigin","anchorPosition","anchorReference","children","className","container","elevation","marginThreshold","open","PaperProps","transformOrigin","TransitionComponent","transitionDuration","TransitionProps"];function Vo(e,t){let n=0;return"number"==typeof t?n=t:"center"===t?n=e.height/2:"bottom"===t&&(n=e.height),n}function Ko(e,t){let n=0;return"number"==typeof t?n=t:"center"===t?n=e.width/2:"right"===t&&(n=e.width),n}function Go(e){return[e.horizontal,e.vertical].map((e=>"number"==typeof e?`${e}px`:e)).join(" ")}function Qo(e){return"function"==typeof e?e():e}const Xo=(0,Je.ZP)(Uo,{name:"MuiPopover",slot:"Root",overridesResolver:(e,t)=>t.root})({}),Yo=(0,Je.ZP)($r,{name:"MuiPopover",slot:"Paper",overridesResolver:(e,t)=>t.paper})({position:"absolute",overflowY:"auto",overflowX:"hidden",minWidth:16,minHeight:16,maxWidth:"calc(100% - 32px)",maxHeight:"calc(100% - 32px)",outline:0}),Jo=e.forwardRef((function(t,n){const r=(0,et.Z)({props:t,name:"MuiPopover"}),{action:o,anchorEl:a,anchorOrigin:i={vertical:"top",horizontal:"left"},anchorPosition:l,anchorReference:s="anchorEl",children:c,className:u,container:d,elevation:p=8,marginThreshold:f=16,open:m,PaperProps:h={},transformOrigin:g={vertical:"top",horizontal:"left"},TransitionComponent:b=lo,transitionDuration:v="auto",TransitionProps:{onEntering:y}={}}=r,w=(0,Oe.Z)(r.TransitionProps,Ho),x=(0,Oe.Z)(r,qo),E=e.useRef(),k=(0,tt.Z)(E,h.ref),_=(0,Se.Z)({},r,{anchorOrigin:i,anchorReference:s,elevation:p,marginThreshold:f,PaperProps:h,transformOrigin:g,TransitionComponent:b,transitionDuration:v,TransitionProps:w}),S=(e=>{const{classes:t}=e;return(0,Xe.Z)({root:["root"],paper:["paper"]},Wo,t)})(_),O=e.useCallback((()=>{if("anchorPosition"===s)return l;const e=Qo(a),t=(e&&1===e.nodeType?e:(0,kr.Z)(E.current).body).getBoundingClientRect();return{top:t.top+Vo(t,i.vertical),left:t.left+Ko(t,i.horizontal)}}),[a,i.horizontal,i.vertical,l,s]),N=e.useCallback((e=>({vertical:Vo(e,g.vertical),horizontal:Ko(e,g.horizontal)})),[g.horizontal,g.vertical]),C=e.useCallback((e=>{const t={width:e.offsetWidth,height:e.offsetHeight},n=N(t);if("none"===s)return{top:null,left:null,transformOrigin:Go(n)};const r=O();let o=r.top-n.vertical,i=r.left-n.horizontal;const l=o+t.height,c=i+t.width,u=(0,Wr.Z)(Qo(a)),d=u.innerHeight-f,p=u.innerWidth-f;if(o<f){const e=o-f;o-=e,n.vertical+=e}else if(l>d){const e=l-d;o-=e,n.vertical+=e}if(i<f){const e=i-f;i-=e,n.horizontal+=e}else if(c>p){const e=c-p;i-=e,n.horizontal+=e}return{top:`${Math.round(o)}px`,left:`${Math.round(i)}px`,transformOrigin:Go(n)}}),[a,s,O,N,f]),R=e.useCallback((()=>{const e=E.current;if(!e)return;const t=C(e);null!==t.top&&(e.style.top=t.top),null!==t.left&&(e.style.left=t.left),e.style.transformOrigin=t.transformOrigin}),[C]);e.useEffect((()=>{m&&R()})),e.useImperativeHandle(o,(()=>m?{updatePosition:()=>{R()}}:null),[m,R]),e.useEffect((()=>{if(!m)return;const e=(0,Ur.Z)((()=>{R()})),t=(0,Wr.Z)(a);return t.addEventListener("resize",e),()=>{e.clear(),t.removeEventListener("resize",e)}}),[a,m,R]);let T=v;"auto"!==v||b.muiSupportAuto||(T=void 0);const M=d||(a?(0,kr.Z)(Qo(a)).body:void 0);return(0,Ze.jsx)(Xo,(0,Se.Z)({BackdropProps:{invisible:!0},className:(0,Ne.Z)(S.root,u),container:M,open:m,ref:n,ownerState:_},x,{children:(0,Ze.jsx)(b,(0,Se.Z)({appear:!0,in:m,onEntering:(e,t)=>{y&&y(e,t),R()},timeout:T},w,{children:(0,Ze.jsx)(Yo,(0,Se.Z)({elevation:p},h,{ref:k,className:(0,Ne.Z)(S.paper,h.className),children:c}))}))}))})),ea=Jo;function ta(e){return(0,Lt.Z)("MuiMenu",e)}(0,yt.Z)("MuiMenu",["root","paper","list"]);const na=["onEntering"],ra=["autoFocus","children","disableAutoFocusItem","MenuListProps","onClose","open","PaperProps","PopoverClasses","transitionDuration","TransitionProps","variant"],oa={vertical:"top",horizontal:"right"},aa={vertical:"top",horizontal:"left"},ia=(0,Je.ZP)(ea,{shouldForwardProp:e=>(0,Je.FO)(e)||"classes"===e,name:"MuiMenu",slot:"Root",overridesResolver:(e,t)=>t.root})({}),la=(0,Je.ZP)($r,{name:"MuiMenu",slot:"Paper",overridesResolver:(e,t)=>t.paper})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),sa=(0,Je.ZP)(jr,{name:"MuiMenu",slot:"List",overridesResolver:(e,t)=>t.list})({outline:0}),ca=e.forwardRef((function(t,n){const r=(0,et.Z)({props:t,name:"MuiMenu"}),{autoFocus:o=!0,children:a,disableAutoFocusItem:i=!1,MenuListProps:l={},onClose:s,open:c,PaperProps:u={},PopoverClasses:d,transitionDuration:p="auto",TransitionProps:{onEntering:f}={},variant:m="selectedMenu"}=r,h=(0,Oe.Z)(r.TransitionProps,na),g=(0,Oe.Z)(r,ra),b=Jr(),v="rtl"===b.direction,y=(0,Se.Z)({},r,{autoFocus:o,disableAutoFocusItem:i,MenuListProps:l,onEntering:f,PaperProps:u,transitionDuration:p,TransitionProps:h,variant:m}),w=(e=>{const{classes:t}=e;return(0,Xe.Z)({root:["root"],paper:["paper"],list:["list"]},ta,t)})(y),x=o&&!i&&c,E=e.useRef(null);let k=-1;return e.Children.map(a,((t,n)=>{e.isValidElement(t)&&(t.props.disabled||("selectedMenu"===m&&t.props.selected||-1===k)&&(k=n))})),(0,Ze.jsx)(ia,(0,Se.Z)({classes:d,onClose:s,anchorOrigin:{vertical:"bottom",horizontal:v?"right":"left"},transformOrigin:v?oa:aa,PaperProps:(0,Se.Z)({component:la},u,{classes:(0,Se.Z)({},u.classes,{root:w.paper})}),className:w.root,open:c,ref:n,transitionDuration:p,TransitionProps:(0,Se.Z)({onEntering:(e,t)=>{E.current&&E.current.adjustStyleForScrollbar(e,b),f&&f(e,t)}},h),ownerState:y},g,{children:(0,Ze.jsx)(sa,(0,Se.Z)({onKeyDown:e=>{"Tab"===e.key&&(e.preventDefault(),s&&s(e,"tabKeyDown"))},actions:E,autoFocus:o&&(-1===k||i),autoFocusItem:x,variant:m},l,{className:(0,Ne.Z)(w.list,l.className),children:a}))}))})),ua=ca;function da(e){return(0,Lt.Z)("MuiNativeSelect",e)}const pa=(0,yt.Z)("MuiNativeSelect",["root","select","multiple","filled","outlined","standard","disabled","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput"]),fa=["className","disabled","IconComponent","inputRef","variant"],ma=({ownerState:e,theme:t})=>(0,Se.Z)({MozAppearance:"none",WebkitAppearance:"none",userSelect:"none",borderRadius:0,cursor:"pointer","&:focus":{backgroundColor:"light"===t.palette.mode?"rgba(0, 0, 0, 0.05)":"rgba(255, 255, 255, 0.05)",borderRadius:0},"&::-ms-expand":{display:"none"},[`&.${pa.disabled}`]:{cursor:"default"},"&[multiple]":{height:"auto"},"&:not([multiple]) option, &:not([multiple]) optgroup":{backgroundColor:t.palette.background.paper},"&&&":{paddingRight:24,minWidth:16}},"filled"===e.variant&&{"&&&":{paddingRight:32}},"outlined"===e.variant&&{borderRadius:t.shape.borderRadius,"&:focus":{borderRadius:t.shape.borderRadius},"&&&":{paddingRight:32}}),ha=(0,Je.ZP)("select",{name:"MuiNativeSelect",slot:"Select",shouldForwardProp:Je.FO,overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.select,t[n.variant],{[`&.${pa.multiple}`]:t.multiple}]}})(ma),ga=({ownerState:e,theme:t})=>(0,Se.Z)({position:"absolute",right:0,top:"calc(50% - .5em)",pointerEvents:"none",color:t.palette.action.active,[`&.${pa.disabled}`]:{color:t.palette.action.disabled}},e.open&&{transform:"rotate(180deg)"},"filled"===e.variant&&{right:7},"outlined"===e.variant&&{right:7}),ba=(0,Je.ZP)("svg",{name:"MuiNativeSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.icon,n.variant&&t[`icon${(0,Ft.Z)(n.variant)}`],n.open&&t.iconOpen]}})(ga),va=e.forwardRef((function(t,n){const{className:r,disabled:o,IconComponent:a,inputRef:i,variant:l="standard"}=t,s=(0,Oe.Z)(t,fa),c=(0,Se.Z)({},t,{disabled:o,variant:l}),u=(e=>{const{classes:t,variant:n,disabled:r,multiple:o,open:a}=e,i={select:["select",n,r&&"disabled",o&&"multiple"],icon:["icon",`icon${(0,Ft.Z)(n)}`,a&&"iconOpen",r&&"disabled"]};return(0,Xe.Z)(i,da,t)})(c);return(0,Ze.jsxs)(e.Fragment,{children:[(0,Ze.jsx)(ha,(0,Se.Z)({ownerState:c,className:(0,Ne.Z)(u.select,r),disabled:o,ref:i||n},s)),t.multiple?null:(0,Ze.jsx)(ba,{as:a,ownerState:c,className:u.icon})]})}));var ya=o(1133);function wa(e){return(0,Lt.Z)("MuiSelect",e)}const xa=(0,yt.Z)("MuiSelect",["select","multiple","filled","outlined","standard","disabled","focused","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput"]);var Ea;const ka=["aria-describedby","aria-label","autoFocus","autoWidth","children","className","defaultOpen","defaultValue","disabled","displayEmpty","IconComponent","inputRef","labelId","MenuProps","multiple","name","onBlur","onChange","onClose","onFocus","onOpen","open","readOnly","renderValue","SelectDisplayProps","tabIndex","type","value","variant"],_a=(0,Je.ZP)("div",{name:"MuiSelect",slot:"Select",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[{[`&.${xa.select}`]:t.select},{[`&.${xa.select}`]:t[n.variant]},{[`&.${xa.multiple}`]:t.multiple}]}})(ma,{[`&.${xa.select}`]:{height:"auto",minHeight:"1.4375em",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"}}),Sa=(0,Je.ZP)("svg",{name:"MuiSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.icon,n.variant&&t[`icon${(0,Ft.Z)(n.variant)}`],n.open&&t.iconOpen]}})(ga),Oa=(0,Je.ZP)("input",{shouldForwardProp:e=>(0,Je.Dz)(e)&&"classes"!==e,name:"MuiSelect",slot:"NativeInput",overridesResolver:(e,t)=>t.nativeInput})({bottom:0,left:0,position:"absolute",opacity:0,pointerEvents:"none",width:"100%",boxSizing:"border-box"});function Na(e,t){return"object"==typeof t&&null!==t?e===t:String(e)===String(t)}function Ca(e){return null==e||"string"==typeof e&&!e.trim()}const Ra=e.forwardRef((function(t,n){const{"aria-describedby":r,"aria-label":o,autoFocus:a,autoWidth:i,children:l,className:s,defaultOpen:c,defaultValue:u,disabled:d,displayEmpty:p,IconComponent:f,inputRef:m,labelId:h,MenuProps:g={},multiple:b,name:v,onBlur:y,onChange:w,onClose:x,onFocus:E,onOpen:k,open:_,readOnly:S,renderValue:O,SelectDisplayProps:N={},tabIndex:C,value:R,variant:T="standard"}=t,M=(0,Oe.Z)(t,ka),[P,A]=(0,ya.Z)({controlled:R,default:u,name:"Select"}),[L,Z]=(0,ya.Z)({controlled:_,default:c,name:"Select"}),I=e.useRef(null),j=e.useRef(null),[D,z]=e.useState(null),{current:F}=e.useRef(null!=_),[B,$]=e.useState(),U=(0,tt.Z)(n,m),W=e.useCallback((e=>{j.current=e,e&&z(e)}),[]);e.useImperativeHandle(U,(()=>({focus:()=>{j.current.focus()},node:I.current,value:P})),[P]),e.useEffect((()=>{c&&L&&D&&!F&&($(i?null:D.clientWidth),j.current.focus())}),[D,i]),e.useEffect((()=>{a&&j.current.focus()}),[a]),e.useEffect((()=>{if(!h)return;const e=(0,kr.Z)(j.current).getElementById(h);if(e){const t=()=>{getSelection().isCollapsed&&j.current.focus()};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}}),[h]);const H=(e,t)=>{e?k&&k(t):x&&x(t),F||($(i?null:D.clientWidth),Z(e))},q=e.Children.toArray(l),V=e=>t=>{let n;if(t.currentTarget.hasAttribute("tabindex")){if(b){n=Array.isArray(P)?P.slice():[];const t=P.indexOf(e.props.value);-1===t?n.push(e.props.value):n.splice(t,1)}else n=e.props.value;if(e.props.onClick&&e.props.onClick(t),P!==n&&(A(n),w)){const r=t.nativeEvent||t,o=new r.constructor(r.type,r);Object.defineProperty(o,"target",{writable:!0,value:{value:n,name:v}}),w(o,e)}b||H(!1,t)}},K=null!==D&&L;let G,Q;delete M["aria-invalid"];const X=[];let Y=!1,J=!1;(yn({value:P})||p)&&(O?G=O(P):Y=!0);const ee=q.map(((t,n,r)=>{if(!e.isValidElement(t))return null;let o;if(b){if(!Array.isArray(P))throw new Error((0,Yt.Z)(2));o=P.some((e=>Na(e,t.props.value))),o&&Y&&X.push(t.props.children)}else o=Na(P,t.props.value),o&&Y&&(Q=t.props.children);return o&&(J=!0),void 0===t.props.value?e.cloneElement(t,{"aria-readonly":!0,role:"option"}):e.cloneElement(t,{"aria-selected":o?"true":"false",onClick:V(t),onKeyUp:e=>{" "===e.key&&e.preventDefault(),t.props.onKeyUp&&t.props.onKeyUp(e)},role:"option",selected:void 0===r[0].props.value||!0===r[0].props.disabled?(()=>{if(P)return o;const e=r.find((e=>void 0!==e.props.value&&!0!==e.props.disabled));return t===e||o})():o,value:void 0,"data-value":t.props.value})}));Y&&(G=b?0===X.length?null:X.reduce(((e,t,n)=>(e.push(t),n<X.length-1&&e.push(", "),e)),[]):Q);let te,ne=B;!i&&F&&D&&(ne=D.clientWidth),te=void 0!==C?C:d?null:0;const re=N.id||(v?`mui-component-select-${v}`:void 0),oe=(0,Se.Z)({},t,{variant:T,value:P,open:K}),ae=(e=>{const{classes:t,variant:n,disabled:r,multiple:o,open:a}=e,i={select:["select",n,r&&"disabled",o&&"multiple"],icon:["icon",`icon${(0,Ft.Z)(n)}`,a&&"iconOpen",r&&"disabled"],nativeInput:["nativeInput"]};return(0,Xe.Z)(i,wa,t)})(oe);return(0,Ze.jsxs)(e.Fragment,{children:[(0,Ze.jsx)(_a,(0,Se.Z)({ref:W,tabIndex:te,role:"button","aria-disabled":d?"true":void 0,"aria-expanded":K?"true":"false","aria-haspopup":"listbox","aria-label":o,"aria-labelledby":[h,re].filter(Boolean).join(" ")||void 0,"aria-describedby":r,onKeyDown:e=>{S||-1!==[" ","ArrowUp","ArrowDown","Enter"].indexOf(e.key)&&(e.preventDefault(),H(!0,e))},onMouseDown:d||S?null:e=>{0===e.button&&(e.preventDefault(),j.current.focus(),H(!0,e))},onBlur:e=>{!K&&y&&(Object.defineProperty(e,"target",{writable:!0,value:{value:P,name:v}}),y(e))},onFocus:E},N,{ownerState:oe,className:(0,Ne.Z)(N.className,ae.select,s),id:re,children:Ca(G)?Ea||(Ea=(0,Ze.jsx)("span",{className:"notranslate",children:"​"})):G})),(0,Ze.jsx)(Oa,(0,Se.Z)({value:Array.isArray(P)?P.join(","):P,name:v,ref:I,"aria-hidden":!0,onChange:e=>{const t=q.map((e=>e.props.value)).indexOf(e.target.value);if(-1===t)return;const n=q[t];A(n.props.value),w&&w(e,n)},tabIndex:-1,disabled:d,className:ae.nativeInput,autoFocus:a,ownerState:oe},M)),(0,Ze.jsx)(Sa,{as:f,className:ae.icon,ownerState:oe}),(0,Ze.jsx)(ua,(0,Se.Z)({id:`menu-${v||""}`,anchorEl:D,open:K,onClose:e=>{H(!1,e)},anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"}},g,{MenuListProps:(0,Se.Z)({"aria-labelledby":h,role:"listbox",disableListWrap:!0},g.MenuListProps),PaperProps:(0,Se.Z)({},g.PaperProps,{style:(0,Se.Z)({minWidth:ne},null!=g.PaperProps?g.PaperProps.style:null)}),children:ee}))]})})),Ta=Ra,Ma=(0,o(41).Z)((0,Ze.jsx)("path",{d:"M7 10l5 5 5-5z"}),"ArrowDropDown");var Pa,Aa;const La=["autoWidth","children","classes","className","defaultOpen","displayEmpty","IconComponent","id","input","inputProps","label","labelId","MenuProps","multiple","native","onClose","onOpen","open","renderValue","SelectDisplayProps","variant"],Za={name:"MuiSelect",overridesResolver:(e,t)=>t.root,shouldForwardProp:e=>(0,Je.FO)(e)&&"variant"!==e,slot:"Root"},Ia=(0,Je.ZP)(In,Za)(""),ja=(0,Je.ZP)(tr,Za)(""),Da=(0,Je.ZP)(Un,Za)(""),za=e.forwardRef((function(t,n){const r=(0,et.Z)({name:"MuiSelect",props:t}),{autoWidth:o=!1,children:a,classes:i={},className:l,defaultOpen:s=!1,displayEmpty:c=!1,IconComponent:u=Ma,id:d,input:p,inputProps:f,label:m,labelId:h,MenuProps:g,multiple:b=!1,native:v=!1,onClose:y,onOpen:w,open:x,renderValue:E,SelectDisplayProps:k,variant:_="outlined"}=r,S=(0,Oe.Z)(r,La),O=v?va:Ta,N=dn({props:r,muiFormControl:fn(),states:["variant"]}).variant||_,C=p||{standard:Pa||(Pa=(0,Ze.jsx)(Ia,{})),outlined:(0,Ze.jsx)(ja,{label:m}),filled:Aa||(Aa=(0,Ze.jsx)(Da,{}))}[N],R=(e=>{const{classes:t}=e;return t})((0,Se.Z)({},r,{variant:N,classes:i})),T=(0,tt.Z)(n,C.ref);return(0,Ze.jsx)(e.Fragment,{children:e.cloneElement(C,(0,Se.Z)({inputComponent:O,inputProps:(0,Se.Z)({children:a,IconComponent:u,variant:N,type:void 0,multiple:b},v?{id:d}:{autoWidth:o,defaultOpen:s,displayEmpty:c,labelId:h,MenuProps:g,onClose:y,onOpen:w,open:x,renderValue:E,SelectDisplayProps:(0,Se.Z)({id:d},k)},f,{classes:f?(0,Te.Z)(R,f.classes):R},p?p.props.inputProps:{})},b&&v&&"outlined"===N?{notched:!0}:{},{ref:T,className:(0,Ne.Z)(C.props.className,l)},!p&&{variant:N},S))})}));za.muiName="Select";const Fa=za;function Ba(e){return(0,Lt.Z)("MuiTextField",e)}(0,yt.Z)("MuiTextField",["root"]);const $a=["autoComplete","autoFocus","children","className","color","defaultValue","disabled","error","FormHelperTextProps","fullWidth","helperText","id","InputLabelProps","inputProps","InputProps","inputRef","label","maxRows","minRows","multiline","name","onBlur","onChange","onFocus","placeholder","required","rows","select","SelectProps","type","value","variant"],Ua={standard:In,filled:Un,outlined:tr},Wa=(0,Je.ZP)(gr,{name:"MuiTextField",slot:"Root",overridesResolver:(e,t)=>t.root})({}),Ha=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiTextField"}),{autoComplete:r,autoFocus:o=!1,children:a,className:i,color:l="primary",defaultValue:s,disabled:c=!1,error:u=!1,FormHelperTextProps:d,fullWidth:p=!1,helperText:f,id:m,InputLabelProps:h,inputProps:g,InputProps:b,inputRef:v,label:y,maxRows:w,minRows:x,multiline:E=!1,name:k,onBlur:_,onChange:S,onFocus:O,placeholder:N,required:C=!1,rows:R,select:T=!1,SelectProps:M,type:P,value:A,variant:L="outlined"}=n,Z=(0,Oe.Z)(n,$a),I=(0,Se.Z)({},n,{autoFocus:o,color:l,disabled:c,error:u,fullWidth:p,multiline:E,required:C,select:T,variant:L}),j=(e=>{const{classes:t}=e;return(0,Xe.Z)({root:["root"]},Ba,t)})(I),D={};"outlined"===L&&(h&&void 0!==h.shrink&&(D.notched=h.shrink),D.label=y),T&&(M&&M.native||(D.id=void 0),D["aria-describedby"]=void 0);const z=(0,Xt.Z)(m),F=f&&z?`${z}-helper-text`:void 0,B=y&&z?`${z}-label`:void 0,$=Ua[L],U=(0,Ze.jsx)($,(0,Se.Z)({"aria-describedby":F,autoComplete:r,autoFocus:o,defaultValue:s,fullWidth:p,multiline:E,name:k,rows:R,maxRows:w,minRows:x,type:P,value:A,id:z,inputRef:v,onBlur:_,onChange:S,onFocus:O,placeholder:N,inputProps:g},D,b));return(0,Ze.jsxs)(Wa,(0,Se.Z)({className:(0,Ne.Z)(j.root,i),disabled:c,error:u,fullWidth:p,ref:t,required:C,color:l,variant:L,ownerState:I},Z,{children:[null!=y&&""!==y&&(0,Ze.jsx)(dr,(0,Se.Z)({htmlFor:z,id:B},h,{children:y})),T?(0,Ze.jsx)(Fa,(0,Se.Z)({"aria-describedby":F,id:z,labelId:B,value:A,input:U},M,{children:a})):U,f&&(0,Ze.jsx)(Er,(0,Se.Z)({id:F},d,{children:f}))]}))}));function qa(e){return(0,Lt.Z)("MuiTypography",e)}(0,yt.Z)("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]);const Va=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],Ka=(0,Je.ZP)("span",{name:"MuiTypography",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.variant&&t[n.variant],"inherit"!==n.align&&t[`align${(0,Ft.Z)(n.align)}`],n.noWrap&&t.noWrap,n.gutterBottom&&t.gutterBottom,n.paragraph&&t.paragraph]}})((({theme:e,ownerState:t})=>(0,Se.Z)({margin:0},t.variant&&e.typography[t.variant],"inherit"!==t.align&&{textAlign:t.align},t.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},t.gutterBottom&&{marginBottom:"0.35em"},t.paragraph&&{marginBottom:16}))),Ga={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},Qa={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},Xa=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiTypography"}),r=(e=>Qa[e]||e)(n.color),o=Ae((0,Se.Z)({},n,{color:r})),{align:a="inherit",className:i,component:l,gutterBottom:s=!1,noWrap:c=!1,paragraph:u=!1,variant:d="body1",variantMapping:p=Ga}=o,f=(0,Oe.Z)(o,Va),m=(0,Se.Z)({},o,{align:a,color:r,className:i,component:l,gutterBottom:s,noWrap:c,paragraph:u,variant:d,variantMapping:p}),h=l||(u?"p":p[d]||Ga[d])||"span",g=(e=>{const{align:t,gutterBottom:n,noWrap:r,paragraph:o,variant:a,classes:i}=e,l={root:["root",a,"inherit"!==e.align&&`align${(0,Ft.Z)(t)}`,n&&"gutterBottom",r&&"noWrap",o&&"paragraph"]};return(0,Xe.Z)(l,qa,i)})(m);return(0,Ze.jsx)(Ka,(0,Se.Z)({as:h,ref:t,ownerState:m,className:(0,Ne.Z)(g.root,i)},f))}));var Ya=E,Ja=m,ei=o(9669),ti=o.n(ei);function ni(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];throw Error("[Immer] minified error nr: "+e+(n.length?" "+n.map((function(e){return"'"+e+"'"})).join(","):"")+". Find the full error at: https://bit.ly/3cXEKWf")}function ri(e){return!!e&&!!e[Ui]}function oi(e){return!!e&&(function(e){if(!e||"object"!=typeof e)return!1;var t=Object.getPrototypeOf(e);if(null===t)return!0;var n=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return n===Object||"function"==typeof n&&Function.toString.call(n)===Wi}(e)||Array.isArray(e)||!!e[$i]||!!e.constructor[$i]||ui(e)||di(e))}function ai(e,t,n){void 0===n&&(n=!1),0===ii(e)?(n?Object.keys:Hi)(e).forEach((function(r){n&&"symbol"==typeof r||t(r,e[r],e)})):e.forEach((function(n,r){return t(r,n,e)}))}function ii(e){var t=e[Ui];return t?t.i>3?t.i-4:t.i:Array.isArray(e)?1:ui(e)?2:di(e)?3:0}function li(e,t){return 2===ii(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function si(e,t,n){var r=ii(e);2===r?e.set(t,n):3===r?(e.delete(t),e.add(n)):e[t]=n}function ci(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}function ui(e){return Di&&e instanceof Map}function di(e){return zi&&e instanceof Set}function pi(e){return e.o||e.t}function fi(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=qi(e);delete t[Ui];for(var n=Hi(t),r=0;r<n.length;r++){var o=n[r],a=t[o];!1===a.writable&&(a.writable=!0,a.configurable=!0),(a.get||a.set)&&(t[o]={configurable:!0,writable:!0,enumerable:a.enumerable,value:e[o]})}return Object.create(Object.getPrototypeOf(e),t)}function mi(e,t){return void 0===t&&(t=!1),gi(e)||ri(e)||!oi(e)||(ii(e)>1&&(e.set=e.add=e.clear=e.delete=hi),Object.freeze(e),t&&ai(e,(function(e,t){return mi(t,!0)}),!0)),e}function hi(){ni(2)}function gi(e){return null==e||"object"!=typeof e||Object.isFrozen(e)}function bi(e){var t=Vi[e];return t||ni(18,e),t}function vi(){return Ii}function yi(e,t){t&&(bi("Patches"),e.u=[],e.s=[],e.v=t)}function wi(e){xi(e),e.p.forEach(ki),e.p=null}function xi(e){e===Ii&&(Ii=e.l)}function Ei(e){return Ii={p:[],l:Ii,h:e,m:!0,_:0}}function ki(e){var t=e[Ui];0===t.i||1===t.i?t.j():t.O=!0}function _i(e,t){t._=t.p.length;var n=t.p[0],r=void 0!==e&&e!==n;return t.h.g||bi("ES5").S(t,e,r),r?(n[Ui].P&&(wi(t),ni(4)),oi(e)&&(e=Si(t,e),t.l||Ni(t,e)),t.u&&bi("Patches").M(n[Ui].t,e,t.u,t.s)):e=Si(t,n,[]),wi(t),t.u&&t.v(t.u,t.s),e!==Bi?e:void 0}function Si(e,t,n){if(gi(t))return t;var r=t[Ui];if(!r)return ai(t,(function(o,a){return Oi(e,r,t,o,a,n)}),!0),t;if(r.A!==e)return t;if(!r.P)return Ni(e,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var o=4===r.i||5===r.i?r.o=fi(r.k):r.o;ai(3===r.i?new Set(o):o,(function(t,a){return Oi(e,r,o,t,a,n)})),Ni(e,o,!1),n&&e.u&&bi("Patches").R(r,n,e.u,e.s)}return r.o}function Oi(e,t,n,r,o,a){if(ri(o)){var i=Si(e,o,a&&t&&3!==t.i&&!li(t.D,r)?a.concat(r):void 0);if(si(n,r,i),!ri(i))return;e.m=!1}if(oi(o)&&!gi(o)){if(!e.h.F&&e._<1)return;Si(e,o),t&&t.A.l||Ni(e,o)}}function Ni(e,t,n){void 0===n&&(n=!1),e.h.F&&e.m&&mi(t,n)}function Ci(e,t){var n=e[Ui];return(n?pi(n):e)[t]}function Ri(e,t){if(t in e)for(var n=Object.getPrototypeOf(e);n;){var r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=Object.getPrototypeOf(n)}}function Ti(e){e.P||(e.P=!0,e.l&&Ti(e.l))}function Mi(e){e.o||(e.o=fi(e.t))}function Pi(e,t,n){var r=ui(t)?bi("MapSet").N(t,n):di(t)?bi("MapSet").T(t,n):e.g?function(e,t){var n=Array.isArray(e),r={i:n?1:0,A:t?t.A:vi(),P:!1,I:!1,D:{},l:t,t:e,k:null,o:null,j:null,C:!1},o=r,a=Ki;n&&(o=[r],a=Gi);var i=Proxy.revocable(o,a),l=i.revoke,s=i.proxy;return r.k=s,r.j=l,s}(t,n):bi("ES5").J(t,n);return(n?n.A:vi()).p.push(r),r}function Ai(e){return ri(e)||ni(22,e),function e(t){if(!oi(t))return t;var n,r=t[Ui],o=ii(t);if(r){if(!r.P&&(r.i<4||!bi("ES5").K(r)))return r.t;r.I=!0,n=Li(t,o),r.I=!1}else n=Li(t,o);return ai(n,(function(t,o){r&&function(e,t){return 2===ii(e)?e.get(t):e[t]}(r.t,t)===o||si(n,t,e(o))})),3===o?new Set(n):n}(e)}function Li(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return fi(e)}var Zi,Ii,ji="undefined"!=typeof Symbol&&"symbol"==typeof Symbol("x"),Di="undefined"!=typeof Map,zi="undefined"!=typeof Set,Fi="undefined"!=typeof Proxy&&void 0!==Proxy.revocable&&"undefined"!=typeof Reflect,Bi=ji?Symbol.for("immer-nothing"):((Zi={})["immer-nothing"]=!0,Zi),$i=ji?Symbol.for("immer-draftable"):"__$immer_draftable",Ui=ji?Symbol.for("immer-state"):"__$immer_state",Wi=("undefined"!=typeof Symbol&&Symbol.iterator,""+Object.prototype.constructor),Hi="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,qi=Object.getOwnPropertyDescriptors||function(e){var t={};return Hi(e).forEach((function(n){t[n]=Object.getOwnPropertyDescriptor(e,n)})),t},Vi={},Ki={get:function(e,t){if(t===Ui)return e;var n=pi(e);if(!li(n,t))return function(e,t,n){var r,o=Ri(t,n);return o?"value"in o?o.value:null===(r=o.get)||void 0===r?void 0:r.call(e.k):void 0}(e,n,t);var r=n[t];return e.I||!oi(r)?r:r===Ci(e.t,t)?(Mi(e),e.o[t]=Pi(e.A.h,r,e)):r},has:function(e,t){return t in pi(e)},ownKeys:function(e){return Reflect.ownKeys(pi(e))},set:function(e,t,n){var r=Ri(pi(e),t);if(null==r?void 0:r.set)return r.set.call(e.k,n),!0;if(!e.P){var o=Ci(pi(e),t),a=null==o?void 0:o[Ui];if(a&&a.t===n)return e.o[t]=n,e.D[t]=!1,!0;if(ci(n,o)&&(void 0!==n||li(e.t,t)))return!0;Mi(e),Ti(e)}return e.o[t]===n&&"number"!=typeof n&&(void 0!==n||t in e.o)||(e.o[t]=n,e.D[t]=!0,!0)},deleteProperty:function(e,t){return void 0!==Ci(e.t,t)||t in e.t?(e.D[t]=!1,Mi(e),Ti(e)):delete e.D[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var n=pi(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r?{writable:!0,configurable:1!==e.i||"length"!==t,enumerable:r.enumerable,value:n[t]}:r},defineProperty:function(){ni(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){ni(12)}},Gi={};ai(Ki,(function(e,t){Gi[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}})),Gi.deleteProperty=function(e,t){return Gi.set.call(this,e,t,void 0)},Gi.set=function(e,t,n){return Ki.set.call(this,e[0],t,n,e[0])};var Qi=function(){function e(e){var t=this;this.g=Fi,this.F=!0,this.produce=function(e,n,r){if("function"==typeof e&&"function"!=typeof n){var o=n;n=e;var a=t;return function(e){var t=this;void 0===e&&(e=o);for(var r=arguments.length,i=Array(r>1?r-1:0),l=1;l<r;l++)i[l-1]=arguments[l];return a.produce(e,(function(e){var r;return(r=n).call.apply(r,[t,e].concat(i))}))}}var i;if("function"!=typeof n&&ni(6),void 0!==r&&"function"!=typeof r&&ni(7),oi(e)){var l=Ei(t),s=Pi(t,e,void 0),c=!0;try{i=n(s),c=!1}finally{c?wi(l):xi(l)}return"undefined"!=typeof Promise&&i instanceof Promise?i.then((function(e){return yi(l,r),_i(e,l)}),(function(e){throw wi(l),e})):(yi(l,r),_i(i,l))}if(!e||"object"!=typeof e){if(void 0===(i=n(e))&&(i=e),i===Bi&&(i=void 0),t.F&&mi(i,!0),r){var u=[],d=[];bi("Patches").M(e,i,u,d),r(u,d)}return i}ni(21,e)},this.produceWithPatches=function(e,n){if("function"==typeof e)return function(n){for(var r=arguments.length,o=Array(r>1?r-1:0),a=1;a<r;a++)o[a-1]=arguments[a];return t.produceWithPatches(n,(function(t){return e.apply(void 0,[t].concat(o))}))};var r,o,a=t.produce(e,n,(function(e,t){r=e,o=t}));return"undefined"!=typeof Promise&&a instanceof Promise?a.then((function(e){return[e,r,o]})):[a,r,o]},"boolean"==typeof(null==e?void 0:e.useProxies)&&this.setUseProxies(e.useProxies),"boolean"==typeof(null==e?void 0:e.autoFreeze)&&this.setAutoFreeze(e.autoFreeze)}var t=e.prototype;return t.createDraft=function(e){oi(e)||ni(8),ri(e)&&(e=Ai(e));var t=Ei(this),n=Pi(this,e,void 0);return n[Ui].C=!0,xi(t),n},t.finishDraft=function(e,t){var n=(e&&e[Ui]).A;return yi(n,t),_i(void 0,n)},t.setAutoFreeze=function(e){this.F=e},t.setUseProxies=function(e){e&&!Fi&&ni(20),this.g=e},t.applyPatches=function(e,t){var n;for(n=t.length-1;n>=0;n--){var r=t[n];if(0===r.path.length&&"replace"===r.op){e=r.value;break}}n>-1&&(t=t.slice(n+1));var o=bi("Patches").$;return ri(e)?o(e,t):this.produce(e,(function(e){return o(e,t)}))},e}(),Xi=new Qi,Yi=Xi.produce;Xi.produceWithPatches.bind(Xi),Xi.setAutoFreeze.bind(Xi),Xi.setUseProxies.bind(Xi),Xi.applyPatches.bind(Xi),Xi.createDraft.bind(Xi),Xi.finishDraft.bind(Xi);const Ji=Yi;function el(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function tl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function nl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tl(Object(n),!0).forEach((function(t){el(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tl(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function rl(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}var ol="function"==typeof Symbol&&Symbol.observable||"@@observable",al=function(){return Math.random().toString(36).substring(7).split("").join(".")},il={INIT:"@@redux/INIT"+al(),REPLACE:"@@redux/REPLACE"+al(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+al()}};function ll(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function sl(e,t,n){var r;if("function"==typeof t&&"function"==typeof n||"function"==typeof n&&"function"==typeof arguments[3])throw new Error(rl(0));if("function"==typeof t&&void 0===n&&(n=t,t=void 0),void 0!==n){if("function"!=typeof n)throw new Error(rl(1));return n(sl)(e,t)}if("function"!=typeof e)throw new Error(rl(2));var o=e,a=t,i=[],l=i,s=!1;function c(){l===i&&(l=i.slice())}function u(){if(s)throw new Error(rl(3));return a}function d(e){if("function"!=typeof e)throw new Error(rl(4));if(s)throw new Error(rl(5));var t=!0;return c(),l.push(e),function(){if(t){if(s)throw new Error(rl(6));t=!1,c();var n=l.indexOf(e);l.splice(n,1),i=null}}}function p(e){if(!ll(e))throw new Error(rl(7));if(void 0===e.type)throw new Error(rl(8));if(s)throw new Error(rl(9));try{s=!0,a=o(a,e)}finally{s=!1}for(var t=i=l,n=0;n<t.length;n++)(0,t[n])();return e}function f(e){if("function"!=typeof e)throw new Error(rl(10));o=e,p({type:il.REPLACE})}function m(){var e,t=d;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(rl(11));function n(){e.next&&e.next(u())}return n(),{unsubscribe:t(n)}}})[ol]=function(){return this},e}return p({type:il.INIT}),(r={dispatch:p,subscribe:d,getState:u,replaceReducer:f})[ol]=m,r}function cl(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function ul(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(){var n=e.apply(void 0,arguments),r=function(){throw new Error(rl(15))},o={getState:n.getState,dispatch:function(){return r.apply(void 0,arguments)}},a=t.map((function(e){return e(o)}));return r=cl.apply(void 0,a)(n.dispatch),nl(nl({},n),{},{dispatch:r})}}}function dl(e){return function(t){var n=t.dispatch,r=t.getState;return function(t){return function(o){return"function"==typeof o?o(n,r,e):t(o)}}}}var pl=dl();pl.withExtraArgument=dl;const fl=pl;var ml,hl=(ml=function(e,t){return ml=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},ml(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}ml(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),gl=function(e,t){for(var n=0,r=t.length,o=e.length;n<r;n++,o++)e[o]=t[n];return e},bl=Object.defineProperty,vl=Object.defineProperties,yl=Object.getOwnPropertyDescriptors,wl=Object.getOwnPropertySymbols,xl=Object.prototype.hasOwnProperty,El=Object.prototype.propertyIsEnumerable,kl=function(e,t,n){return t in e?bl(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n},_l=function(e,t){for(var n in t||(t={}))xl.call(t,n)&&kl(e,n,t[n]);if(wl)for(var r=0,o=wl(t);r<o.length;r++)n=o[r],El.call(t,n)&&kl(e,n,t[n]);return e},Sl=function(e,t){return vl(e,yl(t))},Ol="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?cl:cl.apply(null,arguments)};"undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__;var Nl=function(e){function t(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var o=e.apply(this,n)||this;return Object.setPrototypeOf(o,t.prototype),o}return hl(t,e),Object.defineProperty(t,Symbol.species,{get:function(){return t},enumerable:!1,configurable:!0}),t.prototype.concat=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return e.prototype.concat.apply(this,t)},t.prototype.prepend=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return 1===e.length&&Array.isArray(e[0])?new(t.bind.apply(t,gl([void 0],e[0].concat(this)))):new(t.bind.apply(t,gl([void 0],e.concat(this))))},t}(Array);function Cl(e){return oi(e)?Ji(e,(function(){})):e}function Rl(e,t){function n(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];if(t){var o=t.apply(void 0,n);if(!o)throw new Error("prepareAction did not return an object");return _l(_l({type:e,payload:o.payload},"meta"in o&&{meta:o.meta}),"error"in o&&{error:o.error})}return{type:e,payload:n[0]}}return n.toString=function(){return""+e},n.type=e,n.match=function(t){return t.type===e},n}function Tl(e){var t,n={},r=[],o={addCase:function(e,t){var r="string"==typeof e?e:e.type;if(r in n)throw new Error("addCase cannot be called with two reducers for the same action type");return n[r]=t,o},addMatcher:function(e,t){return r.push({matcher:e,reducer:t}),o},addDefaultCase:function(e){return t=e,o}};return e(o),[n,r,t]}function Ml(e){var t=e.name;if(!t)throw new Error("`name` is a required option for createSlice");var n,r="function"==typeof e.initialState?e.initialState:Cl(e.initialState),o=e.reducers||{},a=Object.keys(o),i={},l={},s={};function c(){var t="function"==typeof e.extraReducers?Tl(e.extraReducers):[e.extraReducers],n=t[0],o=void 0===n?{}:n,a=t[1],i=void 0===a?[]:a,s=t[2],c=void 0===s?void 0:s,u=_l(_l({},o),l);return function(e,t,n,r){void 0===n&&(n=[]);var o,a="function"==typeof t?Tl(t):[t,n,r],i=a[0],l=a[1],s=a[2];if(function(e){return"function"==typeof e}(e))o=function(){return Cl(e())};else{var c=Cl(e);o=function(){return c}}function u(e,t){void 0===e&&(e=o());var n=gl([i[t.type]],l.filter((function(e){return(0,e.matcher)(t)})).map((function(e){return e.reducer})));return 0===n.filter((function(e){return!!e})).length&&(n=[s]),n.reduce((function(e,n){if(n){var r;if(ri(e))return void 0===(r=n(e,t))?e:r;if(oi(e))return Ji(e,(function(e){return n(e,t)}));if(void 0===(r=n(e,t))){if(null===e)return e;throw Error("A case reducer on a non-draftable value must not return undefined")}return r}return e}),e)}return u.getInitialState=o,u}(r,u,i,c)}return a.forEach((function(e){var n,r,a=o[e],c=t+"/"+e;"reducer"in a?(n=a.reducer,r=a.prepare):n=a,i[e]=n,l[c]=n,s[e]=r?Rl(c,r):Rl(c)})),{name:t,reducer:function(e,t){return n||(n=c()),n(e,t)},actions:s,caseReducers:i,getInitialState:function(){return n||(n=c()),n.getInitialState()}}}var Pl=["name","message","stack","code"],Al=function(e,t){this.payload=e,this.meta=t},Ll=function(e,t){this.payload=e,this.meta=t},Zl=function(e){if("object"==typeof e&&null!==e){for(var t={},n=0,r=Pl;n<r.length;n++){var o=r[n];"string"==typeof e[o]&&(t[o]=e[o])}return t}return{message:String(e)}};function Il(e,t,n){var r=Rl(e+"/fulfilled",(function(e,t,n,r){return{payload:e,meta:Sl(_l({},r||{}),{arg:n,requestId:t,requestStatus:"fulfilled"})}})),o=Rl(e+"/pending",(function(e,t,n){return{payload:void 0,meta:Sl(_l({},n||{}),{arg:t,requestId:e,requestStatus:"pending"})}})),a=Rl(e+"/rejected",(function(e,t,r,o,a){return{payload:o,error:(n&&n.serializeError||Zl)(e||"Rejected"),meta:Sl(_l({},a||{}),{arg:r,requestId:t,rejectedWithValue:!!o,requestStatus:"rejected",aborted:"AbortError"===(null==e?void 0:e.name),condition:"ConditionError"===(null==e?void 0:e.name)})}})),i="undefined"!=typeof AbortController?AbortController:function(){function e(){this.signal={aborted:!1,addEventListener:function(){},dispatchEvent:function(){return!1},onabort:function(){},removeEventListener:function(){},reason:void 0,throwIfAborted:function(){}}}return e.prototype.abort=function(){},e}();return Object.assign((function(e){return function(l,s,c){var u,d=(null==n?void 0:n.idGenerator)?n.idGenerator(e):function(e){void 0===e&&(e=21);for(var t="",n=e;n--;)t+="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW"[64*Math.random()|0];return t}(),p=new i,f=new Promise((function(e,t){return p.signal.addEventListener("abort",(function(){return t({name:"AbortError",message:u||"Aborted"})}))})),m=!1,h=function(){return i=this,u=null,h=function(){var i,u,h,g,b;return function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(a){return function(l){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){i.label=a[1];break}if(6===a[0]&&i.label<o[1]){i.label=o[1],o=a;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(a);break}o[2]&&i.ops.pop(),i.trys.pop();continue}a=t.call(e,i)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,l])}}}(this,(function(v){switch(v.label){case 0:return v.trys.push([0,4,,5]),null===(y=g=null==(i=null==n?void 0:n.condition)?void 0:i.call(n,e,{getState:s,extra:c}))||"object"!=typeof y||"function"!=typeof y.then?[3,2]:[4,g];case 1:g=v.sent(),v.label=2;case 2:if(!1===g)throw{name:"ConditionError",message:"Aborted due to condition callback returning false."};return m=!0,l(o(d,e,null==(u=null==n?void 0:n.getPendingMeta)?void 0:u.call(n,{requestId:d,arg:e},{getState:s,extra:c}))),[4,Promise.race([f,Promise.resolve(t(e,{dispatch:l,getState:s,extra:c,requestId:d,signal:p.signal,rejectWithValue:function(e,t){return new Al(e,t)},fulfillWithValue:function(e,t){return new Ll(e,t)}})).then((function(t){if(t instanceof Al)throw t;return t instanceof Ll?r(t.payload,d,e,t.meta):r(t,d,e)}))])];case 3:return h=v.sent(),[3,5];case 4:return b=v.sent(),h=b instanceof Al?a(null,d,e,b.payload,b.meta):a(b,d,e),[3,5];case 5:return n&&!n.dispatchConditionRejection&&a.match(h)&&h.meta.condition||l(h),[2,h]}var y}))},new Promise((function(e,t){var n=function(e){try{o(h.next(e))}catch(e){t(e)}},r=function(e){try{o(h.throw(e))}catch(e){t(e)}},o=function(t){return t.done?e(t.value):Promise.resolve(t.value).then(n,r)};o((h=h.apply(i,u)).next())}));var i,u,h}();return Object.assign(h,{abort:function(e){m&&(u=e,p.abort())},requestId:d,arg:e,unwrap:function(){return h.then(jl)}})}}),{pending:o,rejected:a,fulfilled:r,typePrefix:e})}function jl(e){if(e.meta&&e.meta.rejectedWithValue)throw e.payload;if(e.error)throw e.error;return e.payload}Object.assign;var Dl="listenerMiddleware";Rl(Dl+"/add"),Rl(Dl+"/removeAll"),Rl(Dl+"/remove"),function(){function e(e,t){var n=o[e];return n?n.enumerable=t:o[e]=n={configurable:!0,enumerable:t,get:function(){var t=this[Ui];return Ki.get(t,e)},set:function(t){var n=this[Ui];Ki.set(n,e,t)}},n}function t(e){for(var t=e.length-1;t>=0;t--){var o=e[t][Ui];if(!o.P)switch(o.i){case 5:r(o)&&Ti(o);break;case 4:n(o)&&Ti(o)}}}function n(e){for(var t=e.t,n=e.k,r=Hi(n),o=r.length-1;o>=0;o--){var a=r[o];if(a!==Ui){var i=t[a];if(void 0===i&&!li(t,a))return!0;var l=n[a],s=l&&l[Ui];if(s?s.t!==i:!ci(l,i))return!0}}var c=!!t[Ui];return r.length!==Hi(t).length+(c?0:1)}function r(e){var t=e.k;if(t.length!==e.t.length)return!0;var n=Object.getOwnPropertyDescriptor(t,t.length-1);if(n&&!n.get)return!0;for(var r=0;r<t.length;r++)if(!t.hasOwnProperty(r))return!0;return!1}var o={};!function(e,t){Vi[e]||(Vi[e]=t)}("ES5",{J:function(t,n){var r=Array.isArray(t),o=function(t,n){if(t){for(var r=Array(n.length),o=0;o<n.length;o++)Object.defineProperty(r,""+o,e(o,!0));return r}var a=qi(n);delete a[Ui];for(var i=Hi(a),l=0;l<i.length;l++){var s=i[l];a[s]=e(s,t||!!a[s].enumerable)}return Object.create(Object.getPrototypeOf(n),a)}(r,t),a={i:r?5:4,A:n?n.A:vi(),P:!1,I:!1,D:{},l:n,t,k:o,o:null,O:!1,C:!1};return Object.defineProperty(o,Ui,{value:a,writable:!0}),o},S:function(e,n,o){o?ri(n)&&n[Ui].A===e&&t(e.p):(e.u&&function e(t){if(t&&"object"==typeof t){var n=t[Ui];if(n){var o=n.t,a=n.k,i=n.D,l=n.i;if(4===l)ai(a,(function(t){t!==Ui&&(void 0!==o[t]||li(o,t)?i[t]||e(a[t]):(i[t]=!0,Ti(n)))})),ai(o,(function(e){void 0!==a[e]||li(a,e)||(i[e]=!1,Ti(n))}));else if(5===l){if(r(n)&&(Ti(n),i.length=!0),a.length<o.length)for(var s=a.length;s<o.length;s++)i[s]=!1;else for(var c=o.length;c<a.length;c++)i[c]=!0;for(var u=Math.min(a.length,o.length),d=0;d<u;d++)a.hasOwnProperty(d)||(i[d]=!0),void 0===i[d]&&e(a[d])}}}}(e.p[0]),t(e.p))},K:function(e){return 4===e.i?n(e):r(e)}})}();var zl="Guest Project",Fl="Your Clipboard is currently empty!\nPlease generate a test before we can display your testing code here.";function Bl(e){return Bl="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bl(e)}function $l(){$l=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",a=r.asyncIterator||"@@asyncIterator",i=r.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var o=t&&t.prototype instanceof d?t:d,a=Object.create(o.prototype),i=new k(r||[]);return a._invoke=function(e,t,n){var r="suspendedStart";return function(o,a){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw a;return{value:void 0,done:!0}}for(n.method=o,n.arg=a;;){var i=n.delegate;if(i){var l=w(i,n);if(l){if(l===u)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=c(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===u)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}(e,n,i),a}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var u={};function d(){}function p(){}function f(){}var m={};l(m,o,(function(){return this}));var h=Object.getPrototypeOf,g=h&&h(h(_([])));g&&g!==t&&n.call(g,o)&&(m=g);var b=f.prototype=d.prototype=Object.create(m);function v(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(o,a,i,l){var s=c(e[o],e,a);if("throw"!==s.type){var u=s.arg,d=u.value;return d&&"object"==Bl(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,i,l)}),(function(e){r("throw",e,i,l)})):t.resolve(d).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,l)}))}l(s.arg)}var o;this._invoke=function(e,n){function a(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(a,a):a()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var r=c(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,u;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function _(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,a=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return a.next=a}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=f,l(b,"constructor",f),l(f,"constructor",p),p.displayName=l(f,i,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,l(e,i,"GeneratorFunction")),e.prototype=Object.create(b),e},e.awrap=function(e){return{__await:e}},v(y.prototype),l(y.prototype,a,(function(){return this})),e.AsyncIterator=y,e.async=function(t,n,r,o,a){void 0===a&&(a=Promise);var i=new y(s(t,n,r,o),a);return e.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},v(b),l(b,i,"Generator"),l(b,o,(function(){return this})),l(b,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=_,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return i.type="throw",i.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),s=n.call(a,"finallyLoc");if(l&&s){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,u):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:_(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},e}function Ul(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}function Wl(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function i(e){Ul(a,r,o,i,l,"next",e)}function l(e){Ul(a,r,o,i,l,"throw",e)}i(void 0)}))}}function Hl(e){return function(e){if(Array.isArray(e))return ql(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return ql(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ql(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ql(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Vl=function(e){if(e.codeSnippets.length){var t=e.codeSnippets;t=t.map((function(e){return e.split("\n").map((function(e){return" "+e})).join("\n")}));var n=[].concat(Hl((r=e.server,["const request = require('supertest');\n","const server = '".concat(r,"';\n"),"".concat(" ","\n"),"describe('Route Integration Testing', ( ) => {\n"])),Hl(t.map((function(e){return e+"\n"}))),["});"]);e.codeDisplay=n.join("")}else 0===e.codeSnippets.length&&(e.codeDisplay=Fl);var r},Kl=Ml({name:"clipboard",initialState:{server:"",codeSnippets:[],codeDisplay:Fl},reducers:{appendToClipboard:function(e,t){e.codeSnippets.push(t.payload),Vl(e),sessionStorage.setItem("codeSnippets",JSON.stringify(e.codeSnippets))},copyClipboard:function(e){navigator.clipboard.writeText(e.codeDisplay)},setServer:function(e,t){e.server=t.payload,Vl(e)},clearClipboardState:function(e){e.server="",e.codeSnippets=[],e.codeDisplay=Fl,sessionStorage.removeItem("codeSnippets")},setSnippets:function(e,t){e.codeSnippets=t.payload,Vl(e)}},extraReducers:function(e){e.addCase(rs.fulfilled,(function(e,t){e.codeSnippets=t.payload.data,Vl(e)}))}}),Gl={postSnippet:Il("clipboardSlice/postSnippet",function(){var e=Wl($l().mark((function e(t){var n,r;return $l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.projectId,r=t.codeOutput,e.prev=1,e.next=4,ti().post("/api/clipboard/".concat(n),{code_snippets:r});case 4:e.sent,e.next=10;break;case 7:e.prev=7,e.t0=e.catch(1),console.log("clipboardSlice/postSnippet",e.t0);case 10:case"end":return e.stop()}}),e,null,[[1,7]])})));return function(t){return e.apply(this,arguments)}}()),getSnippets:Il("clipboardSlice/getSnippets",function(){var e=Wl($l().mark((function e(t){var n;return $l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,ti().get("/api/clipboard/".concat(t));case 3:n=e.sent,e.next=9;break;case 6:e.prev=6,e.t0=e.catch(0),console.log("clipboardSlice/getSnippets",e.t0);case 9:return e.abrupt("return",n);case 10:case"end":return e.stop()}}),e,null,[[0,6]])})));return function(t){return e.apply(this,arguments)}}())},Ql=Kl.actions,Xl=Ql.appendToClipboard,Yl=Ql.copyClipboard,Jl=Ql.setServer,es=Ql.clearClipboardState,ts=Ql.setSnippets,ns=Gl.postSnippet,rs=Gl.getSnippets;const os=Kl.reducer;function as(e){return as="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},as(e)}function is(){is=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",a=r.asyncIterator||"@@asyncIterator",i=r.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var o=t&&t.prototype instanceof d?t:d,a=Object.create(o.prototype),i=new k(r||[]);return a._invoke=function(e,t,n){var r="suspendedStart";return function(o,a){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw a;return{value:void 0,done:!0}}for(n.method=o,n.arg=a;;){var i=n.delegate;if(i){var l=w(i,n);if(l){if(l===u)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=c(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===u)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}(e,n,i),a}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var u={};function d(){}function p(){}function f(){}var m={};l(m,o,(function(){return this}));var h=Object.getPrototypeOf,g=h&&h(h(_([])));g&&g!==t&&n.call(g,o)&&(m=g);var b=f.prototype=d.prototype=Object.create(m);function v(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(o,a,i,l){var s=c(e[o],e,a);if("throw"!==s.type){var u=s.arg,d=u.value;return d&&"object"==as(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,i,l)}),(function(e){r("throw",e,i,l)})):t.resolve(d).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,l)}))}l(s.arg)}var o;this._invoke=function(e,n){function a(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(a,a):a()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var r=c(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,u;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function _(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,a=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return a.next=a}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=f,l(b,"constructor",f),l(f,"constructor",p),p.displayName=l(f,i,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,l(e,i,"GeneratorFunction")),e.prototype=Object.create(b),e},e.awrap=function(e){return{__await:e}},v(y.prototype),l(y.prototype,a,(function(){return this})),e.AsyncIterator=y,e.async=function(t,n,r,o,a){void 0===a&&(a=Promise);var i=new y(s(t,n,r,o),a);return e.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},v(b),l(b,i,"Generator"),l(b,o,(function(){return this})),l(b,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=_,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return i.type="throw",i.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),s=n.call(a,"finallyLoc");if(l&&s){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,u):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:_(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},e}function ls(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}function ss(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return cs(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?cs(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){l=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(l)throw a}}}}function cs(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var us=Ml({name:"userInfo",initialState:{showLogin:!1,showSave:!!sessionStorage.getItem("clipboardData"),userId:0,projectsInfo:[{project_id:0,project_name:zl,user_id:0,showAccessClipboard:!1}],currentProject:zl,currentProjectId:0,newProject:""},reducers:{setShowLogin:function(e){e.showLogin=!e.showLogin},setShowSave:function(e){e.showSave=!e.showSave},setProjectsInfo:function(e,t){e.projectsInfo=t.payload},setCurrentProject:function(e,t){e.currentProject=t.payload;var n=e.projectsInfo.map((function(e){return e.project_name})),r=e.projectsInfo.map((function(e){return e.project_id}));e.currentProjectId=r[n.indexOf(t.payload)]},setNewProject:function(e,t){e.newProject=t.payload},setUserId:function(e,t){e.userId=t.payload},logout:function(e){e.projectsInfo=[{project_id:0,project_name:zl,user_id:0,showAccessClipboard:!1}],e.userId=0,e.currentProject=zl,e.newProject=""},setClipboardData:function(e,t){var n,r=ss(e.projectsInfo);try{for(r.s();!(n=r.n()).done;){var o=n.value;o.project_id===t.payload.projectId&&(o.clipboardInfo=t.payload.clipboardData)}}catch(e){r.e(e)}finally{r.f()}},setShowAccessClipboard:function(e,t){var n,r=ss(e.projectsInfo);try{for(r.s();!(n=r.n()).done;){var o=n.value;o.project_id===t.payload?o.showAccessClipboard=!o.showAccessClipboard:o.showAccessClipboard=!1}}catch(e){r.e(e)}finally{r.f()}}},extraReducers:function(e){e.addCase(ws.fulfilled,(function(e,t){e.projectsInfo=t.payload.data}))}}),ds={deleteProject:Il("userInfoSlice/deleteProject",function(){var e=function(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function i(e){ls(a,r,o,i,l,"next",e)}function l(e){ls(a,r,o,i,l,"throw",e)}i(void 0)}))}}(is().mark((function e(t){var n;return is().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,ti().delete("/api/project/".concat(t));case 3:n=e.sent,e.next=9;break;case 6:e.prev=6,e.t0=e.catch(0),console.log("userInfoSlice/deleteProject",e.t0);case 9:return e.abrupt("return",n);case 10:case"end":return e.stop()}}),e,null,[[0,6]])})));return function(t){return e.apply(this,arguments)}}())},ps=us.actions,fs=ps.setShowLogin,ms=ps.setShowSave,hs=ps.setProjectsInfo,gs=ps.setCurrentProject,bs=ps.logout,vs=(ps.setClipboardData,ps.setShowAccessClipboard),ys=(ps.setUserId,ps.setNewProject),ws=ds.deleteProject;const xs=us.reducer;var Es=o(1899),ks=o(422);function _s(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Ss(e){return e instanceof _s(e).Element||e instanceof Element}function Os(e){return e instanceof _s(e).HTMLElement||e instanceof HTMLElement}function Ns(e){return"undefined"!=typeof ShadowRoot&&(e instanceof _s(e).ShadowRoot||e instanceof ShadowRoot)}var Cs=Math.max,Rs=Math.min,Ts=Math.round;function Ms(){var e=navigator.userAgentData;return null!=e&&e.brands?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function Ps(){return!/^((?!chrome|android).)*safari/i.test(Ms())}function As(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var r=e.getBoundingClientRect(),o=1,a=1;t&&Os(e)&&(o=e.offsetWidth>0&&Ts(r.width)/e.offsetWidth||1,a=e.offsetHeight>0&&Ts(r.height)/e.offsetHeight||1);var i=(Ss(e)?_s(e):window).visualViewport,l=!Ps()&&n,s=(r.left+(l&&i?i.offsetLeft:0))/o,c=(r.top+(l&&i?i.offsetTop:0))/a,u=r.width/o,d=r.height/a;return{width:u,height:d,top:c,right:s+u,bottom:c+d,left:s,x:s,y:c}}function Ls(e){var t=_s(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function Zs(e){return e?(e.nodeName||"").toLowerCase():null}function Is(e){return((Ss(e)?e.ownerDocument:e.document)||window.document).documentElement}function js(e){return As(Is(e)).left+Ls(e).scrollLeft}function Ds(e){return _s(e).getComputedStyle(e)}function zs(e){var t=Ds(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function Fs(e,t,n){void 0===n&&(n=!1);var r,o,a=Os(t),i=Os(t)&&function(e){var t=e.getBoundingClientRect(),n=Ts(t.width)/e.offsetWidth||1,r=Ts(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(t),l=Is(t),s=As(e,i,n),c={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(a||!a&&!n)&&(("body"!==Zs(t)||zs(l))&&(c=(r=t)!==_s(r)&&Os(r)?{scrollLeft:(o=r).scrollLeft,scrollTop:o.scrollTop}:Ls(r)),Os(t)?((u=As(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):l&&(u.x=js(l))),{x:s.left+c.scrollLeft-u.x,y:s.top+c.scrollTop-u.y,width:s.width,height:s.height}}function Bs(e){var t=As(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function $s(e){return"html"===Zs(e)?e:e.assignedSlot||e.parentNode||(Ns(e)?e.host:null)||Is(e)}function Us(e){return["html","body","#document"].indexOf(Zs(e))>=0?e.ownerDocument.body:Os(e)&&zs(e)?e:Us($s(e))}function Ws(e,t){var n;void 0===t&&(t=[]);var r=Us(e),o=r===(null==(n=e.ownerDocument)?void 0:n.body),a=_s(r),i=o?[a].concat(a.visualViewport||[],zs(r)?r:[]):r,l=t.concat(i);return o?l:l.concat(Ws($s(i)))}function Hs(e){return["table","td","th"].indexOf(Zs(e))>=0}function qs(e){return Os(e)&&"fixed"!==Ds(e).position?e.offsetParent:null}function Vs(e){for(var t=_s(e),n=qs(e);n&&Hs(n)&&"static"===Ds(n).position;)n=qs(n);return n&&("html"===Zs(n)||"body"===Zs(n)&&"static"===Ds(n).position)?t:n||function(e){var t=/firefox/i.test(Ms());if(/Trident/i.test(Ms())&&Os(e)&&"fixed"===Ds(e).position)return null;var n=$s(e);for(Ns(n)&&(n=n.host);Os(n)&&["html","body"].indexOf(Zs(n))<0;){var r=Ds(n);if("none"!==r.transform||"none"!==r.perspective||"paint"===r.contain||-1!==["transform","perspective"].indexOf(r.willChange)||t&&"filter"===r.willChange||t&&r.filter&&"none"!==r.filter)return n;n=n.parentNode}return null}(e)||t}var Ks="top",Gs="bottom",Qs="right",Xs="left",Ys="auto",Js=[Ks,Gs,Qs,Xs],ec="start",tc="end",nc="viewport",rc="popper",oc=Js.reduce((function(e,t){return e.concat([t+"-"+ec,t+"-"+tc])}),[]),ac=[].concat(Js,[Ys]).reduce((function(e,t){return e.concat([t,t+"-"+ec,t+"-"+tc])}),[]),ic=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function lc(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function sc(e){var t;return function(){return t||(t=new Promise((function(n){Promise.resolve().then((function(){t=void 0,n(e())}))}))),t}}var cc={placement:"bottom",modifiers:[],strategy:"absolute"};function uc(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function dc(e){void 0===e&&(e={});var t=e,n=t.defaultModifiers,r=void 0===n?[]:n,o=t.defaultOptions,a=void 0===o?cc:o;return function(e,t,n){void 0===n&&(n=a);var o={placement:"bottom",orderedModifiers:[],options:Object.assign({},cc,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},i=[],l=!1,s={state:o,setOptions:function(n){var l="function"==typeof n?n(o.options):n;c(),o.options=Object.assign({},a,o.options,l),o.scrollParents={reference:Ss(e)?Ws(e):e.contextElement?Ws(e.contextElement):[],popper:Ws(t)};var u,d,p=function(e){var t=lc(e);return ic.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])}((u=[].concat(r,o.options.modifiers),d=u.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{}),Object.keys(d).map((function(e){return d[e]}))));return o.orderedModifiers=p.filter((function(e){return e.enabled})),o.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,r=void 0===n?{}:n,a=e.effect;if("function"==typeof a){var l=a({state:o,name:t,instance:s,options:r});i.push(l||function(){})}})),s.update()},forceUpdate:function(){if(!l){var e=o.elements,t=e.reference,n=e.popper;if(uc(t,n)){o.rects={reference:Fs(t,Vs(n),"fixed"===o.options.strategy),popper:Bs(n)},o.reset=!1,o.placement=o.options.placement,o.orderedModifiers.forEach((function(e){return o.modifiersData[e.name]=Object.assign({},e.data)}));for(var r=0;r<o.orderedModifiers.length;r++)if(!0!==o.reset){var a=o.orderedModifiers[r],i=a.fn,c=a.options,u=void 0===c?{}:c,d=a.name;"function"==typeof i&&(o=i({state:o,options:u,name:d,instance:s})||o)}else o.reset=!1,r=-1}}},update:sc((function(){return new Promise((function(e){s.forceUpdate(),e(o)}))})),destroy:function(){c(),l=!0}};if(!uc(e,t))return s;function c(){i.forEach((function(e){return e()})),i=[]}return s.setOptions(n).then((function(e){!l&&n.onFirstUpdate&&n.onFirstUpdate(e)})),s}}var pc={passive:!0};function fc(e){return e.split("-")[0]}function mc(e){return e.split("-")[1]}function hc(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function gc(e){var t,n=e.reference,r=e.element,o=e.placement,a=o?fc(o):null,i=o?mc(o):null,l=n.x+n.width/2-r.width/2,s=n.y+n.height/2-r.height/2;switch(a){case Ks:t={x:l,y:n.y-r.height};break;case Gs:t={x:l,y:n.y+n.height};break;case Qs:t={x:n.x+n.width,y:s};break;case Xs:t={x:n.x-r.width,y:s};break;default:t={x:n.x,y:n.y}}var c=a?hc(a):null;if(null!=c){var u="y"===c?"height":"width";switch(i){case ec:t[c]=t[c]-(n[u]/2-r[u]/2);break;case tc:t[c]=t[c]+(n[u]/2-r[u]/2)}}return t}var bc={top:"auto",right:"auto",bottom:"auto",left:"auto"};function vc(e){var t,n=e.popper,r=e.popperRect,o=e.placement,a=e.variation,i=e.offsets,l=e.position,s=e.gpuAcceleration,c=e.adaptive,u=e.roundOffsets,d=e.isFixed,p=i.x,f=void 0===p?0:p,m=i.y,h=void 0===m?0:m,g="function"==typeof u?u({x:f,y:h}):{x:f,y:h};f=g.x,h=g.y;var b=i.hasOwnProperty("x"),v=i.hasOwnProperty("y"),y=Xs,w=Ks,x=window;if(c){var E=Vs(n),k="clientHeight",_="clientWidth";E===_s(n)&&"static"!==Ds(E=Is(n)).position&&"absolute"===l&&(k="scrollHeight",_="scrollWidth"),(o===Ks||(o===Xs||o===Qs)&&a===tc)&&(w=Gs,h-=(d&&E===x&&x.visualViewport?x.visualViewport.height:E[k])-r.height,h*=s?1:-1),o!==Xs&&(o!==Ks&&o!==Gs||a!==tc)||(y=Qs,f-=(d&&E===x&&x.visualViewport?x.visualViewport.width:E[_])-r.width,f*=s?1:-1)}var S,O=Object.assign({position:l},c&&bc),N=!0===u?function(e){var t=e.x,n=e.y,r=window.devicePixelRatio||1;return{x:Ts(t*r)/r||0,y:Ts(n*r)/r||0}}({x:f,y:h}):{x:f,y:h};return f=N.x,h=N.y,s?Object.assign({},O,((S={})[w]=v?"0":"",S[y]=b?"0":"",S.transform=(x.devicePixelRatio||1)<=1?"translate("+f+"px, "+h+"px)":"translate3d("+f+"px, "+h+"px, 0)",S)):Object.assign({},O,((t={})[w]=v?h+"px":"",t[y]=b?f+"px":"",t.transform="",t))}const yc={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},r=t.attributes[e]||{},o=t.elements[e];Os(o)&&Zs(o)&&(Object.assign(o.style,n),Object.keys(r).forEach((function(e){var t=r[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var r=t.elements[e],o=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});Os(r)&&Zs(r)&&(Object.assign(r.style,a),Object.keys(o).forEach((function(e){r.removeAttribute(e)})))}))}},requires:["computeStyles"]},wc={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,a=void 0===o?[0,0]:o,i=ac.reduce((function(e,n){return e[n]=function(e,t,n){var r=fc(e),o=[Xs,Ks].indexOf(r)>=0?-1:1,a="function"==typeof n?n(Object.assign({},t,{placement:e})):n,i=a[0],l=a[1];return i=i||0,l=(l||0)*o,[Xs,Qs].indexOf(r)>=0?{x:l,y:i}:{x:i,y:l}}(n,t.rects,a),e}),{}),l=i[t.placement],s=l.x,c=l.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=s,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=i}};var xc={left:"right",right:"left",bottom:"top",top:"bottom"};function Ec(e){return e.replace(/left|right|bottom|top/g,(function(e){return xc[e]}))}var kc={start:"end",end:"start"};function _c(e){return e.replace(/start|end/g,(function(e){return kc[e]}))}function Sc(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Ns(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function Oc(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function Nc(e,t,n){return t===nc?Oc(function(e,t){var n=_s(e),r=Is(e),o=n.visualViewport,a=r.clientWidth,i=r.clientHeight,l=0,s=0;if(o){a=o.width,i=o.height;var c=Ps();(c||!c&&"fixed"===t)&&(l=o.offsetLeft,s=o.offsetTop)}return{width:a,height:i,x:l+js(e),y:s}}(e,n)):Ss(t)?function(e,t){var n=As(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):Oc(function(e){var t,n=Is(e),r=Ls(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=Cs(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),i=Cs(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),l=-r.scrollLeft+js(e),s=-r.scrollTop;return"rtl"===Ds(o||n).direction&&(l+=Cs(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:i,x:l,y:s}}(Is(e)))}function Cc(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function Rc(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function Tc(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=void 0===r?e.placement:r,a=n.strategy,i=void 0===a?e.strategy:a,l=n.boundary,s=void 0===l?"clippingParents":l,c=n.rootBoundary,u=void 0===c?nc:c,d=n.elementContext,p=void 0===d?rc:d,f=n.altBoundary,m=void 0!==f&&f,h=n.padding,g=void 0===h?0:h,b=Cc("number"!=typeof g?g:Rc(g,Js)),v=p===rc?"reference":rc,y=e.rects.popper,w=e.elements[m?v:p],x=function(e,t,n,r){var o="clippingParents"===t?function(e){var t=Ws($s(e)),n=["absolute","fixed"].indexOf(Ds(e).position)>=0&&Os(e)?Vs(e):e;return Ss(n)?t.filter((function(e){return Ss(e)&&Sc(e,n)&&"body"!==Zs(e)})):[]}(e):[].concat(t),a=[].concat(o,[n]),i=a[0],l=a.reduce((function(t,n){var o=Nc(e,n,r);return t.top=Cs(o.top,t.top),t.right=Rs(o.right,t.right),t.bottom=Rs(o.bottom,t.bottom),t.left=Cs(o.left,t.left),t}),Nc(e,i,r));return l.width=l.right-l.left,l.height=l.bottom-l.top,l.x=l.left,l.y=l.top,l}(Ss(w)?w:w.contextElement||Is(e.elements.popper),s,u,i),E=As(e.elements.reference),k=gc({reference:E,element:y,strategy:"absolute",placement:o}),_=Oc(Object.assign({},y,k)),S=p===rc?_:E,O={top:x.top-S.top+b.top,bottom:S.bottom-x.bottom+b.bottom,left:x.left-S.left+b.left,right:S.right-x.right+b.right},N=e.modifiersData.offset;if(p===rc&&N){var C=N[o];Object.keys(O).forEach((function(e){var t=[Qs,Gs].indexOf(e)>=0?1:-1,n=[Ks,Gs].indexOf(e)>=0?"y":"x";O[e]+=C[n]*t}))}return O}const Mc={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,a=void 0===o||o,i=n.altAxis,l=void 0===i||i,s=n.fallbackPlacements,c=n.padding,u=n.boundary,d=n.rootBoundary,p=n.altBoundary,f=n.flipVariations,m=void 0===f||f,h=n.allowedAutoPlacements,g=t.options.placement,b=fc(g),v=s||(b!==g&&m?function(e){if(fc(e)===Ys)return[];var t=Ec(e);return[_c(e),t,_c(t)]}(g):[Ec(g)]),y=[g].concat(v).reduce((function(e,n){return e.concat(fc(n)===Ys?function(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,a=n.rootBoundary,i=n.padding,l=n.flipVariations,s=n.allowedAutoPlacements,c=void 0===s?ac:s,u=mc(r),d=u?l?oc:oc.filter((function(e){return mc(e)===u})):Js,p=d.filter((function(e){return c.indexOf(e)>=0}));0===p.length&&(p=d);var f=p.reduce((function(t,n){return t[n]=Tc(e,{placement:n,boundary:o,rootBoundary:a,padding:i})[fc(n)],t}),{});return Object.keys(f).sort((function(e,t){return f[e]-f[t]}))}(t,{placement:n,boundary:u,rootBoundary:d,padding:c,flipVariations:m,allowedAutoPlacements:h}):n)}),[]),w=t.rects.reference,x=t.rects.popper,E=new Map,k=!0,_=y[0],S=0;S<y.length;S++){var O=y[S],N=fc(O),C=mc(O)===ec,R=[Ks,Gs].indexOf(N)>=0,T=R?"width":"height",M=Tc(t,{placement:O,boundary:u,rootBoundary:d,altBoundary:p,padding:c}),P=R?C?Qs:Xs:C?Gs:Ks;w[T]>x[T]&&(P=Ec(P));var A=Ec(P),L=[];if(a&&L.push(M[N]<=0),l&&L.push(M[P]<=0,M[A]<=0),L.every((function(e){return e}))){_=O,k=!1;break}E.set(O,L)}if(k)for(var Z=function(e){var t=y.find((function(t){var n=E.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return _=t,"break"},I=m?3:1;I>0&&"break"!==Z(I);I--);t.placement!==_&&(t.modifiersData[r]._skip=!0,t.placement=_,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function Pc(e,t,n){return Cs(e,Rs(t,n))}const Ac={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,a=void 0===o||o,i=n.altAxis,l=void 0!==i&&i,s=n.boundary,c=n.rootBoundary,u=n.altBoundary,d=n.padding,p=n.tether,f=void 0===p||p,m=n.tetherOffset,h=void 0===m?0:m,g=Tc(t,{boundary:s,rootBoundary:c,padding:d,altBoundary:u}),b=fc(t.placement),v=mc(t.placement),y=!v,w=hc(b),x="x"===w?"y":"x",E=t.modifiersData.popperOffsets,k=t.rects.reference,_=t.rects.popper,S="function"==typeof h?h(Object.assign({},t.rects,{placement:t.placement})):h,O="number"==typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),N=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,C={x:0,y:0};if(E){if(a){var R,T="y"===w?Ks:Xs,M="y"===w?Gs:Qs,P="y"===w?"height":"width",A=E[w],L=A+g[T],Z=A-g[M],I=f?-_[P]/2:0,j=v===ec?k[P]:_[P],D=v===ec?-_[P]:-k[P],z=t.elements.arrow,F=f&&z?Bs(z):{width:0,height:0},B=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},$=B[T],U=B[M],W=Pc(0,k[P],F[P]),H=y?k[P]/2-I-W-$-O.mainAxis:j-W-$-O.mainAxis,q=y?-k[P]/2+I+W+U+O.mainAxis:D+W+U+O.mainAxis,V=t.elements.arrow&&Vs(t.elements.arrow),K=V?"y"===w?V.clientTop||0:V.clientLeft||0:0,G=null!=(R=null==N?void 0:N[w])?R:0,Q=A+q-G,X=Pc(f?Rs(L,A+H-G-K):L,A,f?Cs(Z,Q):Z);E[w]=X,C[w]=X-A}if(l){var Y,J="x"===w?Ks:Xs,ee="x"===w?Gs:Qs,te=E[x],ne="y"===x?"height":"width",re=te+g[J],oe=te-g[ee],ae=-1!==[Ks,Xs].indexOf(b),ie=null!=(Y=null==N?void 0:N[x])?Y:0,le=ae?re:te-k[ne]-_[ne]-ie+O.altAxis,se=ae?te+k[ne]+_[ne]-ie-O.altAxis:oe,ce=f&&ae?function(e,t,n){var r=Pc(e,t,n);return r>n?n:r}(le,te,se):Pc(f?le:re,te,f?se:oe);E[x]=ce,C[x]=ce-te}t.modifiersData[r]=C}},requiresIfExists:["offset"]};function Lc(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Zc(e){return[Ks,Qs,Gs,Xs].some((function(t){return e[t]>=0}))}var Ic=dc({defaultModifiers:[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,r=e.options,o=r.scroll,a=void 0===o||o,i=r.resize,l=void 0===i||i,s=_s(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return a&&c.forEach((function(e){e.addEventListener("scroll",n.update,pc)})),l&&s.addEventListener("resize",n.update,pc),function(){a&&c.forEach((function(e){e.removeEventListener("scroll",n.update,pc)})),l&&s.removeEventListener("resize",n.update,pc)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=gc({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=void 0===r||r,a=n.adaptive,i=void 0===a||a,l=n.roundOffsets,s=void 0===l||l,c={placement:fc(t.placement),variation:mc(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,vc(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:i,roundOffsets:s})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,vc(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:s})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},yc,wc,Mc,Ac,{name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,a=n.elements.arrow,i=n.modifiersData.popperOffsets,l=fc(n.placement),s=hc(l),c=[Xs,Qs].indexOf(l)>=0?"height":"width";if(a&&i){var u=function(e,t){return Cc("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:Rc(e,Js))}(o.padding,n),d=Bs(a),p="y"===s?Ks:Xs,f="y"===s?Gs:Qs,m=n.rects.reference[c]+n.rects.reference[s]-i[s]-n.rects.popper[c],h=i[s]-n.rects.reference[s],g=Vs(a),b=g?"y"===s?g.clientHeight||0:g.clientWidth||0:0,v=m/2-h/2,y=u[p],w=b-d[c]-u[f],x=b/2-d[c]/2+v,E=Pc(y,x,w),k=s;n.modifiersData[r]=((t={})[k]=E,t.centerOffset=E-x,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&Sc(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,a=t.modifiersData.preventOverflow,i=Tc(t,{elementContext:"reference"}),l=Tc(t,{altBoundary:!0}),s=Lc(i,r),c=Lc(l,o,a),u=Zc(s),d=Zc(c);t.modifiersData[n]={referenceClippingOffsets:s,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}}]});function jc(e){return(0,Lt.Z)("MuiPopperUnstyled",e)}(0,yt.Z)("MuiPopperUnstyled",["root"]);const Dc=["anchorEl","children","component","components","componentsProps","direction","disablePortal","modifiers","open","ownerState","placement","popperOptions","popperRef","TransitionProps"],zc=["anchorEl","children","container","direction","disablePortal","keepMounted","modifiers","open","placement","popperOptions","popperRef","style","transition"];function Fc(e){return"function"==typeof e?e():e}const Bc={},$c=e.forwardRef((function(t,n){var r;const{anchorEl:o,children:a,component:i,components:l={},componentsProps:s={},direction:c,disablePortal:u,modifiers:d,open:p,ownerState:f,placement:m,popperOptions:h,popperRef:g,TransitionProps:b}=t,v=(0,Oe.Z)(t,Dc),y=e.useRef(null),w=(0,Jt.Z)(y,n),x=e.useRef(null),E=(0,Jt.Z)(x,g),k=e.useRef(E);(0,nn.Z)((()=>{k.current=E}),[E]),e.useImperativeHandle(g,(()=>x.current),[]);const _=function(e,t){if("ltr"===t)return e;switch(e){case"bottom-end":return"bottom-start";case"bottom-start":return"bottom-end";case"top-end":return"top-start";case"top-start":return"top-end";default:return e}}(m,c),[S,O]=e.useState(_);e.useEffect((()=>{x.current&&x.current.forceUpdate()})),(0,nn.Z)((()=>{if(!o||!p)return;Fc(o);let e=[{name:"preventOverflow",options:{altBoundary:u}},{name:"flip",options:{altBoundary:u}},{name:"onUpdate",enabled:!0,phase:"afterWrite",fn:({state:e})=>{O(e.placement)}}];null!=d&&(e=e.concat(d)),h&&null!=h.modifiers&&(e=e.concat(h.modifiers));const t=Ic(Fc(o),y.current,(0,Se.Z)({placement:_},h,{modifiers:e}));return k.current(t),()=>{t.destroy(),k.current(null)}}),[o,u,d,p,h,_]);const N={placement:S};null!==b&&(N.TransitionProps=b);const C=(0,Xe.Z)({root:["root"]},jc,{}),R=null!=(r=null!=i?i:l.Root)?r:"div",T=No({elementType:R,externalSlotProps:s.root,externalForwardedProps:v,additionalProps:{role:"tooltip",ref:w},ownerState:(0,Se.Z)({},t,f),className:C.root});return(0,Ze.jsx)(R,(0,Se.Z)({},T,{children:"function"==typeof a?a(N):a}))})),Uc=e.forwardRef((function(t,n){const{anchorEl:r,children:o,container:a,direction:i="ltr",disablePortal:l=!1,keepMounted:s=!1,modifiers:c,open:u,placement:d="bottom",popperOptions:p=Bc,popperRef:f,style:m,transition:h=!1}=t,g=(0,Oe.Z)(t,zc),[b,v]=e.useState(!0);if(!s&&!u&&(!h||b))return null;const y=a||(r?(0,so.Z)(Fc(r)).body:void 0);return(0,Ze.jsx)(fo,{disablePortal:l,container:y,children:(0,Ze.jsx)($c,(0,Se.Z)({anchorEl:r,direction:i,disablePortal:l,modifiers:c,ref:n,open:h?!b:u,placement:d,popperOptions:p,popperRef:f},g,{style:(0,Se.Z)({position:"fixed",top:0,left:0,display:u||!s||h&&!b?null:"none"},m),TransitionProps:h?{in:u,onEnter:()=>{v(!1)},onExited:()=>{v(!0)}}:null,children:o}))})})),Wc=Uc;var Hc=o(4168);const qc=(0,Je.ZP)(Wc,{name:"MuiPopper",slot:"Root",overridesResolver:(e,t)=>t.root})({}),Vc=e.forwardRef((function(e,t){const n=(0,Hc.Z)(),r=(0,et.Z)({props:e,name:"MuiPopper"});return(0,Ze.jsx)(qc,(0,Se.Z)({direction:null==n?void 0:n.direction},r,{ref:t}))})),Kc=Vc;var Gc=o(3192);function Qc(e){return(0,Lt.Z)("MuiTooltip",e)}const Xc=(0,yt.Z)("MuiTooltip",["popper","popperInteractive","popperArrow","popperClose","tooltip","tooltipArrow","touch","tooltipPlacementLeft","tooltipPlacementRight","tooltipPlacementTop","tooltipPlacementBottom","arrow"]),Yc=["arrow","children","classes","components","componentsProps","describeChild","disableFocusListener","disableHoverListener","disableInteractive","disableTouchListener","enterDelay","enterNextDelay","enterTouchDelay","followCursor","id","leaveDelay","leaveTouchDelay","onClose","onOpen","open","placement","PopperComponent","PopperProps","title","TransitionComponent","TransitionProps"],Jc=(0,Je.ZP)(Kc,{name:"MuiTooltip",slot:"Popper",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.popper,!n.disableInteractive&&t.popperInteractive,n.arrow&&t.popperArrow,!n.open&&t.popperClose]}})((({theme:e,ownerState:t,open:n})=>(0,Se.Z)({zIndex:(e.vars||e).zIndex.tooltip,pointerEvents:"none"},!t.disableInteractive&&{pointerEvents:"auto"},!n&&{pointerEvents:"none"},t.arrow&&{[`&[data-popper-placement*="bottom"] .${Xc.arrow}`]:{top:0,marginTop:"-0.71em","&::before":{transformOrigin:"0 100%"}},[`&[data-popper-placement*="top"] .${Xc.arrow}`]:{bottom:0,marginBottom:"-0.71em","&::before":{transformOrigin:"100% 0"}},[`&[data-popper-placement*="right"] .${Xc.arrow}`]:(0,Se.Z)({},t.isRtl?{right:0,marginRight:"-0.71em"}:{left:0,marginLeft:"-0.71em"},{height:"1em",width:"0.71em","&::before":{transformOrigin:"100% 100%"}}),[`&[data-popper-placement*="left"] .${Xc.arrow}`]:(0,Se.Z)({},t.isRtl?{left:0,marginLeft:"-0.71em"}:{right:0,marginRight:"-0.71em"},{height:"1em",width:"0.71em","&::before":{transformOrigin:"0 0"}})}))),eu=(0,Je.ZP)("div",{name:"MuiTooltip",slot:"Tooltip",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.tooltip,n.touch&&t.touch,n.arrow&&t.tooltipArrow,t[`tooltipPlacement${(0,Ft.Z)(n.placement.split("-")[0])}`]]}})((({theme:e,ownerState:t})=>(0,Se.Z)({backgroundColor:e.vars?e.vars.palette.Tooltip.bg:(0,Ye.Fq)(e.palette.grey[700],.92),borderRadius:(e.vars||e).shape.borderRadius,color:(e.vars||e).palette.common.white,fontFamily:e.typography.fontFamily,padding:"4px 8px",fontSize:e.typography.pxToRem(11),maxWidth:300,margin:2,wordWrap:"break-word",fontWeight:e.typography.fontWeightMedium},t.arrow&&{position:"relative",margin:0},t.touch&&{padding:"8px 16px",fontSize:e.typography.pxToRem(14),lineHeight:(16/14,Math.round(114285.71428571428)/1e5+"em"),fontWeight:e.typography.fontWeightRegular},{[`.${Xc.popper}[data-popper-placement*="left"] &`]:(0,Se.Z)({transformOrigin:"right center"},t.isRtl?(0,Se.Z)({marginLeft:"14px"},t.touch&&{marginLeft:"24px"}):(0,Se.Z)({marginRight:"14px"},t.touch&&{marginRight:"24px"})),[`.${Xc.popper}[data-popper-placement*="right"] &`]:(0,Se.Z)({transformOrigin:"left center"},t.isRtl?(0,Se.Z)({marginRight:"14px"},t.touch&&{marginRight:"24px"}):(0,Se.Z)({marginLeft:"14px"},t.touch&&{marginLeft:"24px"})),[`.${Xc.popper}[data-popper-placement*="top"] &`]:(0,Se.Z)({transformOrigin:"center bottom",marginBottom:"14px"},t.touch&&{marginBottom:"24px"}),[`.${Xc.popper}[data-popper-placement*="bottom"] &`]:(0,Se.Z)({transformOrigin:"center top",marginTop:"14px"},t.touch&&{marginTop:"24px"})}))),tu=(0,Je.ZP)("span",{name:"MuiTooltip",slot:"Arrow",overridesResolver:(e,t)=>t.arrow})((({theme:e})=>({overflow:"hidden",position:"absolute",width:"1em",height:"0.71em",boxSizing:"border-box",color:e.vars?e.vars.palette.Tooltip.bg:(0,Ye.Fq)(e.palette.grey[700],.9),"&::before":{content:'""',margin:"auto",display:"block",width:"100%",height:"100%",backgroundColor:"currentColor",transform:"rotate(45deg)"}})));let nu=!1,ru=null;function ou(e,t){return n=>{t&&t(n),e(n)}}const au=e.forwardRef((function(t,n){var r,o,a,i,l,s;const c=(0,et.Z)({props:t,name:"MuiTooltip"}),{arrow:u=!1,children:d,components:p={},componentsProps:f={},describeChild:m=!1,disableFocusListener:h=!1,disableHoverListener:g=!1,disableInteractive:b=!1,disableTouchListener:v=!1,enterDelay:y=100,enterNextDelay:w=0,enterTouchDelay:x=700,followCursor:E=!1,id:k,leaveDelay:_=0,leaveTouchDelay:S=1500,onClose:O,onOpen:N,open:C,placement:R="bottom",PopperComponent:T,PopperProps:M={},title:P,TransitionComponent:A=lo,TransitionProps:L}=c,Z=(0,Oe.Z)(c,Yc),I=Jr(),j="rtl"===I.direction,[D,z]=e.useState(),[F,B]=e.useState(null),$=e.useRef(!1),U=b||E,W=e.useRef(),H=e.useRef(),q=e.useRef(),V=e.useRef(),[K,G]=(0,ya.Z)({controlled:C,default:!1,name:"Tooltip",state:"open"});let Q=K;const X=(0,Gc.Z)(k),Y=e.useRef(),J=e.useCallback((()=>{void 0!==Y.current&&(document.body.style.WebkitUserSelect=Y.current,Y.current=void 0),clearTimeout(V.current)}),[]);e.useEffect((()=>()=>{clearTimeout(W.current),clearTimeout(H.current),clearTimeout(q.current),J()}),[J]);const ee=e=>{clearTimeout(ru),nu=!0,G(!0),N&&!Q&&N(e)},te=(0,nt.Z)((e=>{clearTimeout(ru),ru=setTimeout((()=>{nu=!1}),800+_),G(!1),O&&Q&&O(e),clearTimeout(W.current),W.current=setTimeout((()=>{$.current=!1}),I.transitions.duration.shortest)})),ne=e=>{$.current&&"touchstart"!==e.type||(D&&D.removeAttribute("title"),clearTimeout(H.current),clearTimeout(q.current),y||nu&&w?H.current=setTimeout((()=>{ee(e)}),nu?w:y):ee(e))},re=e=>{clearTimeout(H.current),clearTimeout(q.current),q.current=setTimeout((()=>{te(e)}),_)},{isFocusVisibleRef:oe,onBlur:ae,onFocus:ie,ref:le}=(0,rt.Z)(),[,se]=e.useState(!1),ce=e=>{ae(e),!1===oe.current&&(se(!1),re(e))},ue=e=>{D||z(e.currentTarget),ie(e),!0===oe.current&&(se(!0),ne(e))},de=e=>{$.current=!0;const t=d.props;t.onTouchStart&&t.onTouchStart(e)},pe=ne,fe=re;e.useEffect((()=>{if(Q)return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)};function e(e){"Escape"!==e.key&&"Esc"!==e.key||te(e)}}),[te,Q]);const me=(0,tt.Z)(z,n),he=(0,tt.Z)(le,me),ge=(0,tt.Z)(d.ref,he);""===P&&(Q=!1);const be=e.useRef({x:0,y:0}),ve=e.useRef(),ye={},we="string"==typeof P;m?(ye.title=Q||!we||g?null:P,ye["aria-describedby"]=Q?X:null):(ye["aria-label"]=we?P:null,ye["aria-labelledby"]=Q&&!we?X:null);const xe=(0,Se.Z)({},ye,Z,d.props,{className:(0,Ne.Z)(Z.className,d.props.className),onTouchStart:de,ref:ge},E?{onMouseMove:e=>{const t=d.props;t.onMouseMove&&t.onMouseMove(e),be.current={x:e.clientX,y:e.clientY},ve.current&&ve.current.update()}}:{}),Ee={};v||(xe.onTouchStart=e=>{de(e),clearTimeout(q.current),clearTimeout(W.current),J(),Y.current=document.body.style.WebkitUserSelect,document.body.style.WebkitUserSelect="none",V.current=setTimeout((()=>{document.body.style.WebkitUserSelect=Y.current,ne(e)}),x)},xe.onTouchEnd=e=>{d.props.onTouchEnd&&d.props.onTouchEnd(e),J(),clearTimeout(q.current),q.current=setTimeout((()=>{te(e)}),S)}),g||(xe.onMouseOver=ou(pe,xe.onMouseOver),xe.onMouseLeave=ou(fe,xe.onMouseLeave),U||(Ee.onMouseOver=pe,Ee.onMouseLeave=fe)),h||(xe.onFocus=ou(ue,xe.onFocus),xe.onBlur=ou(ce,xe.onBlur),U||(Ee.onFocus=ue,Ee.onBlur=ce));const ke=e.useMemo((()=>{var e;let t=[{name:"arrow",enabled:Boolean(F),options:{element:F,padding:4}}];return null!=(e=M.popperOptions)&&e.modifiers&&(t=t.concat(M.popperOptions.modifiers)),(0,Se.Z)({},M.popperOptions,{modifiers:t})}),[F,M]),_e=(0,Se.Z)({},c,{isRtl:j,arrow:u,disableInteractive:U,placement:R,PopperComponentProp:T,touch:$.current}),Ce=(e=>{const{classes:t,disableInteractive:n,arrow:r,touch:o,placement:a}=e,i={popper:["popper",!n&&"popperInteractive",r&&"popperArrow"],tooltip:["tooltip",r&&"tooltipArrow",o&&"touch",`tooltipPlacement${(0,Ft.Z)(a.split("-")[0])}`],arrow:["arrow"]};return(0,Xe.Z)(i,Qc,t)})(_e),Re=null!=(r=p.Popper)?r:Jc,Te=null!=(o=null!=(a=p.Transition)?a:A)?o:lo,Me=null!=(i=p.Tooltip)?i:eu,Pe=null!=(l=p.Arrow)?l:tu,Ae=ko(Re,(0,Se.Z)({},M,f.popper),_e),Le=ko(Te,(0,Se.Z)({},L,f.transition),_e),Ie=ko(Me,(0,Se.Z)({},f.tooltip),_e),je=ko(Pe,(0,Se.Z)({},f.arrow),_e);return(0,Ze.jsxs)(e.Fragment,{children:[e.cloneElement(d,xe),(0,Ze.jsx)(Re,(0,Se.Z)({as:null!=T?T:Kc,placement:R,anchorEl:E?{getBoundingClientRect:()=>({top:be.current.y,left:be.current.x,right:be.current.x,bottom:be.current.y,width:0,height:0})}:D,popperRef:ve,open:!!D&&Q,id:X,transition:!0},Ee,Ae,{className:(0,Ne.Z)(Ce.popper,null==M?void 0:M.className,null==(s=f.popper)?void 0:s.className),popperOptions:ke,children:({TransitionProps:e})=>{var t,n;return(0,Ze.jsx)(Te,(0,Se.Z)({timeout:I.transitions.duration.shorter},e,Le,{children:(0,Ze.jsxs)(Me,(0,Se.Z)({},Ie,{className:(0,Ne.Z)(Ce.tooltip,null==(t=f.tooltip)?void 0:t.className),children:[P,u?(0,Ze.jsx)(Pe,(0,Se.Z)({},je,{className:(0,Ne.Z)(Ce.arrow,null==(n=f.arrow)?void 0:n.className),ref:B})):null]}))}))}}))]})})),iu=au;function lu(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var su=function(t){var n=t.start,r=t.end,o=t.onClick,a=t.testId,i=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a=[],i=!0,l=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);i=!0);}catch(e){l=!0,o=e}finally{try{i||null==n.return||n.return()}finally{if(l)throw o}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return lu(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?lu(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}((0,e.useState)(n),2),l=i[0],s=i[1];return e.createElement(iu,{title:"bttn-copy"===a?"Copy":"Add to Project",placement:"left",arrow:!0},e.createElement(Qt,{"data-testid":a,variant:"outlined",color:"info",onClick:function(){s(r),o(),setTimeout((function(){return s(n)}),1e3)},sx:{marginBottom:1}},l))},cu=function(){var t=E();return e.createElement(Fe,{className:"clipboard-button-container",sx:{justifyContent:"flex-end",alignItems:"flex-end"}},e.createElement(su,{start:e.createElement(Es.Z,null),end:e.createElement(ks.Z,null),onClick:function(){t(Yl())},testId:"bttn-copy"}))};function uu(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var du=function(){Ke.configure({ignoreUnescapedHTML:!0});var t,n=ce(),r=Ya(),o=Number(function(){let{matches:t}=e.useContext(oe),n=t[t.length-1];return n?n.params:{}}().projectId),a=sessionStorage.getItem("isLoggedIn"),i=a?"Delete Project":"Clear Clipboard",l=Ja((function(e){return e.userInfo.projectsInfo})),s=Ja((function(e){return e.clipboard.server})),c=Ja((function(e){return e.clipboard.codeDisplay})),u="",d=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return uu(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?uu(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){l=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(l)throw a}}}}(l);try{for(d.s();!(t=d.n()).done;){var p=t.value;if(p.project_id===o){u=p.project_name;break}}}catch(e){d.e(e)}finally{d.f()}return(0,e.useEffect)((function(){if(a)r(rs(o));else{var e=sessionStorage.getItem("codeSnippets");e&&r(ts(JSON.parse(e)))}Ke.highlightAll()})),e.createElement("div",{className:"page-body"},e.createElement(Fe,{sx:{display:"flex",flexDirection:"column",alignItems:"center",gap:"30px",width:.8}},e.createElement(Xa,{variant:"h3",align:"center",gutterBottom:!0,sx:{color:"#6E00BB",mb:0,mt:5}},u),e.createElement(Ha,{className:"text-display",label:"Server URL",sx:{minWidth:200},value:s,error:""===s,onChange:function(e){r(Jl(e.target.value))}}),e.createElement(Fe,{className:"clipboard-code-container",sx:{width:.85,height:500,overflow:"auto",backgroundColor:"#282C34",borderRadius:2,position:"relative"}},e.createElement("div",{id:"main-clipboard"},e.createElement("pre",null,e.createElement("code",{className:"javascript"},c))),e.createElement(cu,null)),e.createElement(Qt,{onClick:function(){a?(r(ws(o)),n("/")):r(es())},sx:{flexDirection:"column"}},e.createElement(Ge.Z,null),i)))};function pu(e){return(0,Lt.Z)("MuiLink",e)}const fu=(0,yt.Z)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]);var mu=o(4844);const hu={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},gu=({theme:e,ownerState:t})=>{const n=(e=>hu[e]||e)(t.color),r=(0,mu.D)(e,`palette.${n}`,!1)||t.color,o=(0,mu.D)(e,`palette.${n}Channel`);return"vars"in e&&o?`rgba(${o} / 0.4)`:(0,Ye.Fq)(r,.4)},bu=["className","color","component","onBlur","onFocus","TypographyClasses","underline","variant","sx"],vu=(0,Je.ZP)(Xa,{name:"MuiLink",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[`underline${(0,Ft.Z)(n.underline)}`],"button"===n.component&&t.button]}})((({theme:e,ownerState:t})=>(0,Se.Z)({},"none"===t.underline&&{textDecoration:"none"},"hover"===t.underline&&{textDecoration:"none","&:hover":{textDecoration:"underline"}},"always"===t.underline&&(0,Se.Z)({textDecoration:"underline"},"inherit"!==t.color&&{textDecorationColor:gu({theme:e,ownerState:t})},{"&:hover":{textDecorationColor:"inherit"}}),"button"===t.component&&{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${fu.focusVisible}`]:{outline:"auto"}}))),yu=e.forwardRef((function(t,n){const r=(0,et.Z)({props:t,name:"MuiLink"}),{className:o,color:a="primary",component:i="a",onBlur:l,onFocus:s,TypographyClasses:c,underline:u="always",variant:d="inherit",sx:p}=r,f=(0,Oe.Z)(r,bu),{isFocusVisibleRef:m,onBlur:h,onFocus:g,ref:b}=(0,rt.Z)(),[v,y]=e.useState(!1),w=(0,tt.Z)(n,b),x=(0,Se.Z)({},r,{color:a,component:i,focusVisible:v,underline:u,variant:d}),E=(e=>{const{classes:t,component:n,focusVisible:r,underline:o}=e,a={root:["root",`underline${(0,Ft.Z)(o)}`,"button"===n&&"button",r&&"focusVisible"]};return(0,Xe.Z)(a,pu,t)})(x);return(0,Ze.jsx)(vu,(0,Se.Z)({color:a,className:(0,Ne.Z)(E.root,o),classes:c,component:i,onBlur:e=>{h(e),!1===m.current&&y(!1),l&&l(e)},onFocus:e=>{g(e),!0===m.current&&y(!0),s&&s(e)},ref:w,ownerState:x,variant:d,sx:[...Object.keys(hu).includes(a)?[]:[{color:a}],...Array.isArray(p)?p:[p]]},f))}));var wu=function(){return e.createElement(Fe,{id:"footer",sx:{py:3,px:2,mt:"auto"}},e.createElement(Xa,{variant:"body2",color:"text.secondary",align:"center"},"Copyright © ",e.createElement(yu,{color:"inherit",href:"https://github.com/oslabs-beta/Jester"},"Jester")," ",(new Date).getFullYear(),"."))};function xu(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}var Eu=function e(t,n){function r(e,r,o){if("undefined"!=typeof document){"number"==typeof(o=xu({},n,o)).expires&&(o.expires=new Date(Date.now()+864e5*o.expires)),o.expires&&(o.expires=o.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var a="";for(var i in o)o[i]&&(a+="; "+i,!0!==o[i]&&(a+="="+o[i].split(";")[0]));return document.cookie=e+"="+t.write(r,e)+a}}return Object.create({set:r,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var n=document.cookie?document.cookie.split("; "):[],r={},o=0;o<n.length;o++){var a=n[o].split("="),i=a.slice(1).join("=");try{var l=decodeURIComponent(a[0]);if(r[l]=t.read(i,l),e===l)break}catch(e){}}return e?r[e]:r}},remove:function(e,t){r(e,"",xu({},t,{expires:-1}))},withAttributes:function(t){return e(this.converter,xu({},this.attributes,t))},withConverter:function(t){return e(xu({},this.converter,t),this.attributes)}},{attributes:{value:Object.freeze(n)},converter:{value:Object.freeze(t)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});const ku=Eu;var _u=o(9485),Su=o(3540);function Ou(e){return(0,Lt.Z)("MuiAppBar",e)}(0,yt.Z)("MuiAppBar",["root","positionFixed","positionAbsolute","positionSticky","positionStatic","positionRelative","colorDefault","colorPrimary","colorSecondary","colorInherit","colorTransparent"]);const Nu=["className","color","enableColorOnDark","position"],Cu=(e,t)=>`${null==e?void 0:e.replace(")","")}, ${t})`,Ru=(0,Je.ZP)($r,{name:"MuiAppBar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[`position${(0,Ft.Z)(n.position)}`],t[`color${(0,Ft.Z)(n.color)}`]]}})((({theme:e,ownerState:t})=>{const n="light"===e.palette.mode?e.palette.grey[100]:e.palette.grey[900];return(0,Se.Z)({display:"flex",flexDirection:"column",width:"100%",boxSizing:"border-box",flexShrink:0},"fixed"===t.position&&{position:"fixed",zIndex:(e.vars||e).zIndex.appBar,top:0,left:"auto",right:0,"@media print":{position:"absolute"}},"absolute"===t.position&&{position:"absolute",zIndex:(e.vars||e).zIndex.appBar,top:0,left:"auto",right:0},"sticky"===t.position&&{position:"sticky",zIndex:(e.vars||e).zIndex.appBar,top:0,left:"auto",right:0},"static"===t.position&&{position:"static"},"relative"===t.position&&{position:"relative"},!e.vars&&(0,Se.Z)({},"default"===t.color&&{backgroundColor:n,color:e.palette.getContrastText(n)},t.color&&"default"!==t.color&&"inherit"!==t.color&&"transparent"!==t.color&&{backgroundColor:e.palette[t.color].main,color:e.palette[t.color].contrastText},"inherit"===t.color&&{color:"inherit"},"dark"===e.palette.mode&&!t.enableColorOnDark&&{backgroundColor:null,color:null},"transparent"===t.color&&(0,Se.Z)({backgroundColor:"transparent",color:"inherit"},"dark"===e.palette.mode&&{backgroundImage:"none"})),e.vars&&(0,Se.Z)({},"default"===t.color&&{"--AppBar-background":t.enableColorOnDark?e.vars.palette.AppBar.defaultBg:Cu(e.vars.palette.AppBar.darkBg,e.vars.palette.AppBar.defaultBg),"--AppBar-color":t.enableColorOnDark?e.vars.palette.text.primary:Cu(e.vars.palette.AppBar.darkColor,e.vars.palette.text.primary)},t.color&&!t.color.match(/^(default|inherit|transparent)$/)&&{"--AppBar-background":t.enableColorOnDark?e.vars.palette[t.color].main:Cu(e.vars.palette.AppBar.darkBg,e.vars.palette[t.color].main),"--AppBar-color":t.enableColorOnDark?e.vars.palette[t.color].contrastText:Cu(e.vars.palette.AppBar.darkColor,e.vars.palette[t.color].contrastText)},{backgroundColor:"var(--AppBar-background)",color:"inherit"===t.color?"inherit":"var(--AppBar-color)"},"transparent"===t.color&&{backgroundImage:"none",backgroundColor:"transparent",color:"inherit"}))})),Tu=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiAppBar"}),{className:r,color:o="primary",enableColorOnDark:a=!1,position:i="fixed"}=n,l=(0,Oe.Z)(n,Nu),s=(0,Se.Z)({},n,{color:o,position:i,enableColorOnDark:a}),c=(e=>{const{color:t,position:n,classes:r}=e,o={root:["root",`color${(0,Ft.Z)(t)}`,`position${(0,Ft.Z)(n)}`]};return(0,Xe.Z)(o,Ou,r)})(s);return(0,Ze.jsx)(Ru,(0,Se.Z)({square:!0,component:"header",ownerState:s,elevation:4,className:(0,Ne.Z)(c.root,r,"fixed"===i&&"mui-fixed"),ref:t},l))}));function Mu(e){return(0,Lt.Z)("MuiToolbar",e)}(0,yt.Z)("MuiToolbar",["root","gutters","regular","dense"]);const Pu=["className","component","disableGutters","variant"],Au=(0,Je.ZP)("div",{name:"MuiToolbar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disableGutters&&t.gutters,t[n.variant]]}})((({theme:e,ownerState:t})=>(0,Se.Z)({position:"relative",display:"flex",alignItems:"center"},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}},"dense"===t.variant&&{minHeight:48})),(({theme:e,ownerState:t})=>"regular"===t.variant&&e.mixins.toolbar)),Lu=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiToolbar"}),{className:r,component:o="div",disableGutters:a=!1,variant:i="regular"}=n,l=(0,Oe.Z)(n,Pu),s=(0,Se.Z)({},n,{component:o,disableGutters:a,variant:i}),c=(e=>{const{classes:t,disableGutters:n,variant:r}=e,o={root:["root",!n&&"gutters",r]};return(0,Xe.Z)(o,Mu,t)})(s);return(0,Ze.jsx)(Au,(0,Se.Z)({as:o,className:(0,Ne.Z)(c.root,r),ref:t,ownerState:s},l))}));var Zu=o(5449);function Iu(e){return(0,Lt.Z)("MuiDialog",e)}const ju=(0,yt.Z)("MuiDialog",["root","scrollPaper","scrollBody","container","paper","paperScrollPaper","paperScrollBody","paperWidthFalse","paperWidthXs","paperWidthSm","paperWidthMd","paperWidthLg","paperWidthXl","paperFullWidth","paperFullScreen"]),Du=(0,e.createContext)({}),zu=["aria-describedby","aria-labelledby","BackdropComponent","BackdropProps","children","className","disableEscapeKeyDown","fullScreen","fullWidth","maxWidth","onBackdropClick","onClose","open","PaperComponent","PaperProps","scroll","TransitionComponent","transitionDuration","TransitionProps"],Fu=(0,Je.ZP)(Do,{name:"MuiDialog",slot:"Backdrop",overrides:(e,t)=>t.backdrop})({zIndex:-1}),Bu=(0,Je.ZP)(Uo,{name:"MuiDialog",slot:"Root",overridesResolver:(e,t)=>t.root})({"@media print":{position:"absolute !important"}}),$u=(0,Je.ZP)("div",{name:"MuiDialog",slot:"Container",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.container,t[`scroll${(0,Ft.Z)(n.scroll)}`]]}})((({ownerState:e})=>(0,Se.Z)({height:"100%","@media print":{height:"auto"},outline:0},"paper"===e.scroll&&{display:"flex",justifyContent:"center",alignItems:"center"},"body"===e.scroll&&{overflowY:"auto",overflowX:"hidden",textAlign:"center","&:after":{content:'""',display:"inline-block",verticalAlign:"middle",height:"100%",width:"0"}}))),Uu=(0,Je.ZP)($r,{name:"MuiDialog",slot:"Paper",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.paper,t[`scrollPaper${(0,Ft.Z)(n.scroll)}`],t[`paperWidth${(0,Ft.Z)(String(n.maxWidth))}`],n.fullWidth&&t.paperFullWidth,n.fullScreen&&t.paperFullScreen]}})((({theme:e,ownerState:t})=>(0,Se.Z)({margin:32,position:"relative",overflowY:"auto","@media print":{overflowY:"visible",boxShadow:"none"}},"paper"===t.scroll&&{display:"flex",flexDirection:"column",maxHeight:"calc(100% - 64px)"},"body"===t.scroll&&{display:"inline-block",verticalAlign:"middle",textAlign:"left"},!t.maxWidth&&{maxWidth:"calc(100% - 64px)"},"xs"===t.maxWidth&&{maxWidth:"px"===e.breakpoints.unit?Math.max(e.breakpoints.values.xs,444):`${e.breakpoints.values.xs}${e.breakpoints.unit}`,[`&.${ju.paperScrollBody}`]:{[e.breakpoints.down(Math.max(e.breakpoints.values.xs,444)+64)]:{maxWidth:"calc(100% - 64px)"}}},t.maxWidth&&"xs"!==t.maxWidth&&{maxWidth:`${e.breakpoints.values[t.maxWidth]}${e.breakpoints.unit}`,[`&.${ju.paperScrollBody}`]:{[e.breakpoints.down(e.breakpoints.values[t.maxWidth]+64)]:{maxWidth:"calc(100% - 64px)"}}},t.fullWidth&&{width:"calc(100% - 64px)"},t.fullScreen&&{margin:0,width:"100%",maxWidth:"100%",height:"100%",maxHeight:"none",borderRadius:0,[`&.${ju.paperScrollBody}`]:{margin:0,maxWidth:"100%"}}))),Wu=e.forwardRef((function(t,n){const r=(0,et.Z)({props:t,name:"MuiDialog"}),o=Jr(),a={enter:o.transitions.duration.enteringScreen,exit:o.transitions.duration.leavingScreen},{"aria-describedby":i,"aria-labelledby":l,BackdropComponent:s,BackdropProps:c,children:u,className:d,disableEscapeKeyDown:p=!1,fullScreen:f=!1,fullWidth:m=!1,maxWidth:h="sm",onBackdropClick:g,onClose:b,open:v,PaperComponent:y=$r,PaperProps:w={},scroll:x="paper",TransitionComponent:E=Lo,transitionDuration:k=a,TransitionProps:_}=r,S=(0,Oe.Z)(r,zu),O=(0,Se.Z)({},r,{disableEscapeKeyDown:p,fullScreen:f,fullWidth:m,maxWidth:h,scroll:x}),N=(e=>{const{classes:t,scroll:n,maxWidth:r,fullWidth:o,fullScreen:a}=e,i={root:["root"],container:["container",`scroll${(0,Ft.Z)(n)}`],paper:["paper",`paperScroll${(0,Ft.Z)(n)}`,`paperWidth${(0,Ft.Z)(String(r))}`,o&&"paperFullWidth",a&&"paperFullScreen"]};return(0,Xe.Z)(i,Iu,t)})(O),C=e.useRef(),R=(0,Xt.Z)(l),T=e.useMemo((()=>({titleId:R})),[R]);return(0,Ze.jsx)(Bu,(0,Se.Z)({className:(0,Ne.Z)(N.root,d),closeAfterTransition:!0,components:{Backdrop:Fu},componentsProps:{backdrop:(0,Se.Z)({transitionDuration:k,as:s},c)},disableEscapeKeyDown:p,onClose:b,open:v,ref:n,onClick:e=>{C.current&&(C.current=null,g&&g(e),b&&b(e,"backdropClick"))},ownerState:O},S,{children:(0,Ze.jsx)(E,(0,Se.Z)({appear:!0,in:v,timeout:k,role:"presentation"},_,{children:(0,Ze.jsx)($u,{className:(0,Ne.Z)(N.container),onMouseDown:e=>{C.current=e.target===e.currentTarget},ownerState:O,children:(0,Ze.jsx)(Uu,(0,Se.Z)({as:y,elevation:24,role:"dialog","aria-describedby":i,"aria-labelledby":R},w,{className:(0,Ne.Z)(N.paper,w.className),ownerState:O,children:(0,Ze.jsx)(Du.Provider,{value:T,children:u})}))})}))}))})),Hu=Wu;function qu(e){return(0,Lt.Z)("MuiDialogTitle",e)}(0,yt.Z)("MuiDialogTitle",["root"]);const Vu=["className","id"],Ku=(0,Je.ZP)(Xa,{name:"MuiDialogTitle",slot:"Root",overridesResolver:(e,t)=>t.root})({padding:"16px 24px",flex:"0 0 auto"}),Gu=e.forwardRef((function(t,n){const r=(0,et.Z)({props:t,name:"MuiDialogTitle"}),{className:o,id:a}=r,i=(0,Oe.Z)(r,Vu),l=r,s=(e=>{const{classes:t}=e;return(0,Xe.Z)({root:["root"]},qu,t)})(l),{titleId:c=a}=e.useContext(Du);return(0,Ze.jsx)(Ku,(0,Se.Z)({component:"h2",className:(0,Ne.Z)(s.root,o),ownerState:l,ref:n,variant:"h6",id:c},i))}));var Qu=function(t){var n=Ya();return e.createElement(Hu,{onClose:function(){n(fs()),sessionStorage.removeItem("clipboardData")},open:t.open},e.createElement(Fe,{sx:{display:"flex",flexDirection:"column",alignItems:"center",height:230}},e.createElement(Fe,{sx:{width:400,display:"flex",flexDirection:"row",backgroundColor:"#6e00bb",justifyContent:"center"}},e.createElement("img",{alt:"logo",src:"../assets/logo-jester.png"})),e.createElement(Gu,null,"Log in to your account"),e.createElement(Qt,{variant:"outlined",href:"/auth/github",size:"large",sx:{margin:2}},e.createElement(Zu.Z,null),"GitHub"),e.createElement(Xa,{id:"error-message",sx:{display:"none",color:"red"}},"Error")))};function Xu(e){return Xu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xu(e)}function Yu(){Yu=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",a=r.asyncIterator||"@@asyncIterator",i=r.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var o=t&&t.prototype instanceof d?t:d,a=Object.create(o.prototype),i=new k(r||[]);return a._invoke=function(e,t,n){var r="suspendedStart";return function(o,a){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw a;return{value:void 0,done:!0}}for(n.method=o,n.arg=a;;){var i=n.delegate;if(i){var l=w(i,n);if(l){if(l===u)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=c(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===u)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}(e,n,i),a}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var u={};function d(){}function p(){}function f(){}var m={};l(m,o,(function(){return this}));var h=Object.getPrototypeOf,g=h&&h(h(_([])));g&&g!==t&&n.call(g,o)&&(m=g);var b=f.prototype=d.prototype=Object.create(m);function v(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(o,a,i,l){var s=c(e[o],e,a);if("throw"!==s.type){var u=s.arg,d=u.value;return d&&"object"==Xu(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,i,l)}),(function(e){r("throw",e,i,l)})):t.resolve(d).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,l)}))}l(s.arg)}var o;this._invoke=function(e,n){function a(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(a,a):a()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var r=c(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,u;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function _(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,a=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return a.next=a}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=f,l(b,"constructor",f),l(f,"constructor",p),p.displayName=l(f,i,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,l(e,i,"GeneratorFunction")),e.prototype=Object.create(b),e},e.awrap=function(e){return{__await:e}},v(y.prototype),l(y.prototype,a,(function(){return this})),e.AsyncIterator=y,e.async=function(t,n,r,o,a){void 0===a&&(a=Promise);var i=new y(s(t,n,r,o),a);return e.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},v(b),l(b,i,"Generator"),l(b,o,(function(){return this})),l(b,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=_,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return i.type="throw",i.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),s=n.call(a,"finallyLoc");if(l&&s){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,u):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:_(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},e}function Ju(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}var ed=function(){var t=ce(),n=Ja((function(e){return e.userInfo.showLogin})),r=Ja((function(e){return e.clipboard.codeSnippets})),o=Ya(),a=function(){var e=function(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function i(e){Ju(a,r,o,i,l,"next",e)}function l(e){Ju(a,r,o,i,l,"throw",e)}i(void 0)}))}}(Yu().mark((function e(){return Yu().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return ku.remove("username"),ku.remove("code"),ku.remove("email"),ku.remove("github-auth-session"),ku.remove("github-auth-session.sig"),ku.remove("isLoggedIn"),sessionStorage.clear(),e.next=9,ti().post("/auth/logout");case 9:o(bs()),t("/");case 11:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();return e.createElement(Fe,{id:"navbar",sx:{flexGrow:1}},e.createElement(Tu,{position:"static"},e.createElement(Lu,null,e.createElement(_e,{to:"/"},e.createElement("img",{alt:"logo",src:"../assets/logo-jester.png"})),e.createElement(Xa,{variant:"h6",component:"div",sx:{flexGrow:1,marginLeft:"15px"}}),sessionStorage.getItem("isLoggedIn")?e.createElement(Qt,{className:"welcome-text",color:"inherit"},"Welcome, ",sessionStorage.getItem("username"),"!"):e.createElement(Qt,{className:"welcome-text",color:"inherit"},"Welcome, Guest!"),e.createElement(Qt,{color:"inherit"},e.createElement(_e,{className:"nav-link",to:"/contributors"},"Contributors")),sessionStorage.getItem("isLoggedIn")?e.createElement(Qt,{color:"inherit",onClick:a,sx:{display:"auto"}},e.createElement(Su.Z,{sx:{marginRight:"5px",marginLeft:"5px"}})," Logout"):e.createElement(Qt,{color:"inherit",onClick:function(){o(fs()),r.length&&sessionStorage.setItem("clipboardData",JSON.stringify(r))},sx:{display:"auto"}},e.createElement(_u.Z,{sx:{marginRight:"5px",marginLeft:"5px"}}),"Login"),e.createElement(Qu,{open:n}))))},td=o(1523),nd=o(84),rd=o(6638),od=Ml({name:"navPanel",initialState:{showProjectPanel:!1,showAddProject:!1},reducers:{setShowProjectPanel:function(e){e.showProjectPanel=!e.showProjectPanel},setShowAddProject:function(e){e.showAddProject=!e.showAddProject}}}),ad=od.actions,id=ad.setShowProjectPanel,ld=ad.setShowAddProject;const sd=od.reducer;var cd=function(){var t=Ya(),n=ce();return e.createElement(Fe,{className:"panel nav-panel-container",sx:{width:"100px",display:"flex",flexDirection:"column"}},e.createElement(Qt,{onClick:function(){n("/")},sx:{display:"flex",flexDirection:"column",marginBottom:2}},e.createElement(rd.Z,{sx:{scale:"117%"}}),e.createElement(Xa,{sx:{fontSize:"12px"}},"Home")),e.createElement(Qt,{sx:{display:"flex",flexDirection:"column",marginBottom:2},onClick:function(){t(id())}},e.createElement(nd.Z,null),e.createElement(Xa,{sx:{fontSize:"12px"}},"Projects")),e.createElement(Qt,{onClick:function(){n("/documentation")},sx:{display:"flex",flexDirection:"column",marginBottom:2}},e.createElement(td.Z,null),e.createElement(Xa,{sx:{fontSize:"12px"}},"Docs")))},ud=o(4670);function dd(e){return dd="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},dd(e)}function pd(){pd=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",a=r.asyncIterator||"@@asyncIterator",i=r.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var o=t&&t.prototype instanceof d?t:d,a=Object.create(o.prototype),i=new k(r||[]);return a._invoke=function(e,t,n){var r="suspendedStart";return function(o,a){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw a;return{value:void 0,done:!0}}for(n.method=o,n.arg=a;;){var i=n.delegate;if(i){var l=w(i,n);if(l){if(l===u)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=c(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===u)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}(e,n,i),a}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var u={};function d(){}function p(){}function f(){}var m={};l(m,o,(function(){return this}));var h=Object.getPrototypeOf,g=h&&h(h(_([])));g&&g!==t&&n.call(g,o)&&(m=g);var b=f.prototype=d.prototype=Object.create(m);function v(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(o,a,i,l){var s=c(e[o],e,a);if("throw"!==s.type){var u=s.arg,d=u.value;return d&&"object"==dd(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,i,l)}),(function(e){r("throw",e,i,l)})):t.resolve(d).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,l)}))}l(s.arg)}var o;this._invoke=function(e,n){function a(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(a,a):a()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var r=c(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,u;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function _(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,a=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return a.next=a}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=f,l(b,"constructor",f),l(f,"constructor",p),p.displayName=l(f,i,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,l(e,i,"GeneratorFunction")),e.prototype=Object.create(b),e},e.awrap=function(e){return{__await:e}},v(y.prototype),l(y.prototype,a,(function(){return this})),e.AsyncIterator=y,e.async=function(t,n,r,o,a){void 0===a&&(a=Promise);var i=new y(s(t,n,r,o),a);return e.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},v(b),l(b,i,"Generator"),l(b,o,(function(){return this})),l(b,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=_,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return i.type="throw",i.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),s=n.call(a,"finallyLoc");if(l&&s){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,u):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:_(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},e}function fd(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}function md(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function i(e){fd(a,r,o,i,l,"next",e)}function l(e){fd(a,r,o,i,l,"throw",e)}i(void 0)}))}}function hd(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var gd=function(){var t=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a=[],i=!0,l=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);i=!0);}catch(e){l=!0,o=e}finally{try{i||null==n.return||n.return()}finally{if(l)throw o}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return hd(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?hd(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}((0,e.useState)(""),2),n=t[0],r=t[1],o=Ja((function(e){return e.navPanel.showAddProject})),a=Ja((function(e){return e.userInfo.showLogin})),i=Ja((function(e){return e.clipboard.codeSnippets})),l=Ya(),s=function(){l(ld())},c=function(){var e=md(pd().mark((function e(){var t;return pd().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,ti().post("api/project/",{project_name:n});case 2:t=e.sent,l(hs(t.data)),s();case 5:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),u=function(){var e=md(pd().mark((function e(){return pd().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s(),l(fs()),i.length&&sessionStorage.setItem("clipboardData",JSON.stringify(i));case 3:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();return sessionStorage.getItem("isLoggedIn")?e.createElement(Hu,{onClose:s,open:o,sx:{display:"flex",flexDirection:"column",textAlign:"center"}},e.createElement(Fe,{sx:{width:400,display:"flex",flexDirection:"row",backgroundColor:"#6e00bb",justifyContent:"center"}},e.createElement("img",{alt:"logo",src:"../assets/logo-jester.png"})),e.createElement(Gu,null,"Add a Project"),e.createElement(Ha,{label:"Project Name:",onChange:function(e){r(e.target.value)},sx:{width:"250px",alignSelf:"center",marginBottom:"10px"}}),e.createElement(Qt,{onClick:c},"Create Project")):e.createElement(Hu,{onClose:s,open:o,sx:{display:"flex",flexDirection:"column",textAlign:"center"}},e.createElement(Fe,{sx:{width:410,display:"flex",flexDirection:"row",backgroundColor:"#6e00bb",justifyContent:"center"}},e.createElement("img",{alt:"logo",src:"../assets/logo-jester.png"})),e.createElement(Gu,null,"To add a project, you must be logged in!"),e.createElement(Qt,{onClick:u,variant:"outlined",size:"large",sx:{margin:2,width:"250px",alignSelf:"center"}},e.createElement(_u.Z,{sx:{marginRight:"5px",marginLeft:"5px"}}),"Login"),e.createElement(Qu,{open:a}))},bd=o(4927),vd=o(725);function yd(e){return yd="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yd(e)}function wd(){wd=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",a=r.asyncIterator||"@@asyncIterator",i=r.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var o=t&&t.prototype instanceof d?t:d,a=Object.create(o.prototype),i=new k(r||[]);return a._invoke=function(e,t,n){var r="suspendedStart";return function(o,a){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw a;return{value:void 0,done:!0}}for(n.method=o,n.arg=a;;){var i=n.delegate;if(i){var l=w(i,n);if(l){if(l===u)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=c(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===u)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}(e,n,i),a}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var u={};function d(){}function p(){}function f(){}var m={};l(m,o,(function(){return this}));var h=Object.getPrototypeOf,g=h&&h(h(_([])));g&&g!==t&&n.call(g,o)&&(m=g);var b=f.prototype=d.prototype=Object.create(m);function v(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(o,a,i,l){var s=c(e[o],e,a);if("throw"!==s.type){var u=s.arg,d=u.value;return d&&"object"==yd(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,i,l)}),(function(e){r("throw",e,i,l)})):t.resolve(d).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,l)}))}l(s.arg)}var o;this._invoke=function(e,n){function a(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(a,a):a()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var r=c(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,u;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function _(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,a=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return a.next=a}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=f,l(b,"constructor",f),l(f,"constructor",p),p.displayName=l(f,i,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,l(e,i,"GeneratorFunction")),e.prototype=Object.create(b),e},e.awrap=function(e){return{__await:e}},v(y.prototype),l(y.prototype,a,(function(){return this})),e.AsyncIterator=y,e.async=function(t,n,r,o,a){void 0===a&&(a=Promise);var i=new y(s(t,n,r,o),a);return e.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},v(b),l(b,i,"Generator"),l(b,o,(function(){return this})),l(b,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=_,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return i.type="throw",i.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),s=n.call(a,"finallyLoc");if(l&&s){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,u):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:_(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},e}function xd(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}function Ed(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var kd=function(t){var n,r,o=ce(),a=Ya(),i=sessionStorage.getItem("isLoggedIn"),l=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return Ed(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ed(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){l=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(l)throw a}}}}(Ja((function(e){return e.userInfo.projectsInfo})));try{for(l.s();!(r=l.n()).done;){var s=r.value;s.project_id===t.projectId&&(n=s.showAccessClipboard)}}catch(e){l.e(e)}finally{l.f()}var c=function(){var e=function(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function i(e){xd(a,r,o,i,l,"next",e)}function l(e){xd(a,r,o,i,l,"throw",e)}i(void 0)}))}}(wd().mark((function e(){var n;return wd().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!i){e.next=7;break}return e.next=3,ti().delete("/api/project/".concat(t.projectId));case 3:n=e.sent,a(hs(n.data)),e.next=8;break;case 7:a(es());case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();return n?e.createElement(Fe,null,e.createElement(Qt,{onClick:function(){o(i?"/clipboard/".concat(t.projectId):"/clipboard/0")},sx:{display:"flex",flexDirection:"column"}},e.createElement(vd.Z,null),"Clipboard"),e.createElement(Qt,{onClick:c,sx:{display:i?"flex":"none",flexDirection:"column"}},e.createElement(Ge.Z,null),"Delete Project"),e.createElement(Qt,{onClick:c,sx:{display:i?"none":"flex",flexDirection:"column"}},e.createElement(Ge.Z,null),"Clear Clipboard")):null};function _d(e){return _d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_d(e)}function Sd(){Sd=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",a=r.asyncIterator||"@@asyncIterator",i=r.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var o=t&&t.prototype instanceof d?t:d,a=Object.create(o.prototype),i=new k(r||[]);return a._invoke=function(e,t,n){var r="suspendedStart";return function(o,a){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw a;return{value:void 0,done:!0}}for(n.method=o,n.arg=a;;){var i=n.delegate;if(i){var l=w(i,n);if(l){if(l===u)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=c(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===u)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}(e,n,i),a}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var u={};function d(){}function p(){}function f(){}var m={};l(m,o,(function(){return this}));var h=Object.getPrototypeOf,g=h&&h(h(_([])));g&&g!==t&&n.call(g,o)&&(m=g);var b=f.prototype=d.prototype=Object.create(m);function v(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(o,a,i,l){var s=c(e[o],e,a);if("throw"!==s.type){var u=s.arg,d=u.value;return d&&"object"==_d(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,i,l)}),(function(e){r("throw",e,i,l)})):t.resolve(d).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,l)}))}l(s.arg)}var o;this._invoke=function(e,n){function a(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(a,a):a()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var r=c(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,u;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function _(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,a=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return a.next=a}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=f,l(b,"constructor",f),l(f,"constructor",p),p.displayName=l(f,i,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,l(e,i,"GeneratorFunction")),e.prototype=Object.create(b),e},e.awrap=function(e){return{__await:e}},v(y.prototype),l(y.prototype,a,(function(){return this})),e.AsyncIterator=y,e.async=function(t,n,r,o,a){void 0===a&&(a=Promise);var i=new y(s(t,n,r,o),a);return e.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},v(b),l(b,i,"Generator"),l(b,o,(function(){return this})),l(b,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=_,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return i.type="throw",i.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),s=n.call(a,"finallyLoc");if(l&&s){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,u):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:_(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},e}function Od(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}var Nd=function(t){var n=Ya(),r=function(){var e=function(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function i(e){Od(a,r,o,i,l,"next",e)}function l(e){Od(a,r,o,i,l,"throw",e)}i(void 0)}))}}(Sd().mark((function e(){return Sd().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n(vs(t.projectId));case 1:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();return e.createElement(Fe,{sx:{alignItems:"center",justifyContent:"center"}},e.createElement(Qt,{onClick:r,sx:{display:"flex",flexDirection:"column",wordWrap:"anywhere",width:"100%"}},e.createElement(bd.Z,null),t.name),e.createElement(kd,{projectId:t.projectId}))},Cd=function(){var t=Ya(),n=Ja((function(e){return e.navPanel.showProjectPanel})),r=Ja((function(e){return e.userInfo.projectsInfo})),o=[];return r.forEach((function(t){o.push(e.createElement(Nd,{key:t.project_id,name:t.project_name,projectId:t.project_id})),o.push(e.createElement("hr",{className:"divider"}))})),o.pop(),e.createElement(Fe,{className:"panel project-panel-container",sx:{width:"100px",display:n?"flex":"none",flexDirection:"column"}},e.createElement(Qt,{onClick:function(){t(ld())},sx:{display:"flex",flexDirection:"column"}},e.createElement(ud.Z,null),"Add New Project"),e.createElement("hr",{className:"divider"}),o,e.createElement(gd,null))},Rd=function(){return e.createElement(Fe,{sx:{display:"flex",flexDirection:"row"}},e.createElement(cd,null),e.createElement(Cd,null))};function Td(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a=[],i=!0,l=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);i=!0);}catch(e){l=!0,o=e}finally{try{i||null==n.return||n.return()}finally{if(l)throw o}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Md(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Md(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Md(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Pd=function(){var t=ce(),n=Td((0,e.useState)(""),2),r=n[0],o=n[1],a=Td((0,e.useState)(3),2),i=a[0],l=a[1];return(0,e.useEffect)((function(){if(sessionStorage.getItem("isLoggedIn"))t("/");else{var e=ku.get("code")||"",n=ku.get("username")||"",r=ku.get("email")||"";o(n),sessionStorage.removeItem("codeSnippets"),sessionStorage.setItem("username",n),sessionStorage.setItem("email",r),sessionStorage.setItem("code",e),sessionStorage.setItem("isLoggedIn","true"),a=2,i=setInterval((function(){l(a),--a<0&&(clearInterval(i),t("/"))}),1e3)}var a,i}),[]),e.createElement("div",{className:"page-body"},e.createElement(Fe,{sx:{display:"flex",flexDirection:"column",textAlign:"center"}},e.createElement(Xa,{variant:"h4",component:"h4"},"Hello, ",r,"!"),e.createElement(Xa,{variant:"h6",component:"h6"},"Successfully logged in with Github. Redirecting you in ",i," seconds...")))};const Ad=(0,yt.Z)("MuiDivider",["root","absolute","fullWidth","inset","middle","flexItem","light","vertical","withChildren","withChildrenVertical","textAlignRight","textAlignLeft","wrapper","wrapperVertical"]),Ld=(0,yt.Z)("MuiListItemIcon",["root","alignItemsFlexStart"]),Zd=(0,yt.Z)("MuiListItemText",["root","multiline","dense","inset","primary","secondary"]);function Id(e){return(0,Lt.Z)("MuiMenuItem",e)}const jd=(0,yt.Z)("MuiMenuItem",["root","focusVisible","dense","disabled","divider","gutters","selected"]),Dd=["autoFocus","component","dense","divider","disableGutters","focusVisibleClassName","role","tabIndex"],zd=(0,Je.ZP)(zt,{shouldForwardProp:e=>(0,Je.FO)(e)||"classes"===e,name:"MuiMenuItem",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.dense&&t.dense,n.divider&&t.divider,!n.disableGutters&&t.gutters]}})((({theme:e,ownerState:t})=>(0,Se.Z)({},e.typography.body1,{display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",minHeight:48,paddingTop:6,paddingBottom:6,boxSizing:"border-box",whiteSpace:"nowrap"},!t.disableGutters&&{paddingLeft:16,paddingRight:16},t.divider&&{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:"padding-box"},{"&:hover":{textDecoration:"none",backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${jd.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,Ye.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${jd.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:(0,Ye.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${jd.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:(0,Ye.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,Ye.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity)}},[`&.${jd.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${jd.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity},[`& + .${Ad.root}`]:{marginTop:e.spacing(1),marginBottom:e.spacing(1)},[`& + .${Ad.inset}`]:{marginLeft:52},[`& .${Zd.root}`]:{marginTop:0,marginBottom:0},[`& .${Zd.inset}`]:{paddingLeft:36},[`& .${Ld.root}`]:{minWidth:36}},!t.dense&&{[e.breakpoints.up("sm")]:{minHeight:"auto"}},t.dense&&(0,Se.Z)({minHeight:32,paddingTop:4,paddingBottom:4},e.typography.body2,{[`& .${Ld.root} svg`]:{fontSize:"1.25rem"}})))),Fd=e.forwardRef((function(t,n){const r=(0,et.Z)({props:t,name:"MuiMenuItem"}),{autoFocus:o=!1,component:a="li",dense:i=!1,divider:l=!1,disableGutters:s=!1,focusVisibleClassName:c,role:u="menuitem",tabIndex:d}=r,p=(0,Oe.Z)(r,Dd),f=e.useContext(_r),m={dense:i||f.dense||!1,disableGutters:s},h=e.useRef(null);(0,mn.Z)((()=>{o&&h.current&&h.current.focus()}),[o]);const g=(0,Se.Z)({},r,{dense:m.dense,divider:l,disableGutters:s}),b=(e=>{const{disabled:t,dense:n,divider:r,disableGutters:o,selected:a,classes:i}=e,l={root:["root",n&&"dense",t&&"disabled",!o&&"gutters",r&&"divider",a&&"selected"]},s=(0,Xe.Z)(l,Id,i);return(0,Se.Z)({},i,s)})(r),v=(0,tt.Z)(h,n);let y;return r.disabled||(y=void 0!==d?d:-1),(0,Ze.jsx)(_r.Provider,{value:m,children:(0,Ze.jsx)(zd,(0,Se.Z)({ref:v,role:u,tabIndex:y,component:a,focusVisibleClassName:(0,Ne.Z)(b.focusVisible,c)},p,{ownerState:g,classes:b}))})}));var Bd=Ml({name:"code",initialState:{codeOutput:"describe('Sample description', (arg1) => { code.. }"},reducers:{copyText:function(e){navigator.clipboard.writeText(e.codeOutput)},setCodeOutput:function(e,t){e.codeOutput=t.payload}}}),$d=Bd.actions,Ud=$d.copyText,Wd=$d.setCodeOutput;const Hd=Bd.reducer;var qd=Ml({name:"testForm",initialState:{requestType:"Get",assertionList:{},i:0,userInput:"",assertionTypes:["Status Code","Content Type","Response Body"]},reducers:{setRequestType:function(e,t){e.requestType=t.payload},addAssertion:function(e){3===e.i&&(e.i=0),e.assertionList[e.i]=e.assertionTypes[e.i],e.i+=1},setInputType:function(e,t){e.assertionList[t.payload.id]=t.payload.type},deleteAssertion:function(e,t){delete e.assertionList[t.payload]}}}),Vd=qd.actions,Kd=Vd.setRequestType,Gd=Vd.addAssertion,Qd=Vd.setInputType,Xd=Vd.deleteAssertion;const Yd=qd.reducer;var Jd=Ml({name:"userInput",initialState:{errorMsgs:{},userInputType:"",userInputText:void 0,i:0},reducers:{setErrorMsg:function(e){e.errorMsgs[e.i]="",e.i=e.i+1},changeErrorMsg:function(e,t){e.errorMsgs[t.payload.propsId]=t.payload.newMsg},setUserInputType:function(e,t){e.userInputType=t.payload},setUserInputText:function(e,t){e.userInputText=t.payload}}}),ep=Jd.actions,tp=ep.setErrorMsg,np=ep.changeErrorMsg,rp=ep.setUserInputType,op=ep.setUserInputText;const ap=Jd.reducer;var ip=function(t){var n=Ya(),r=Ja((function(e){return e.testForm.assertionList[t.id]})),o=Ja((function(e){return e.testForm.assertionList})),a=Ja((function(e){return e.userInput.errorMsgs}));return Ja((function(e){return e.userInput.i})),e.createElement("div",null,e.createElement(Fe,{sx:{display:"flex",justifyContent:"center",alignItems:"center",gap:"10px"}},e.createElement(gr,null,e.createElement(dr,null),e.createElement(Fa,{className:"text-display",name:"more-test-options",id:t.id,value:r,onChange:function(e){n(Qd({id:t.id,type:e.target.value})),n(rp(e.target.value))},displayEmpty:!0,inputProps:{"aria-label":"Without label"},sx:{height:40}},e.createElement(Fd,{key:"Status Code",value:"Status Code",id:t.id},"Status Code"),e.createElement(Fd,{key:"Content Type",value:"Content Type",id:t.id},"Content Type"),e.createElement(Fd,{key:"Response Body",value:"Response Body",id:t.id},"Response Body"))),e.createElement(Ha,{className:"text-display",label:r,id:r,name:r,error:!!a[t.id],helperText:a[t.id],onChange:function(e){var r,a;a=(r=e).target.value,"Status Code"===r.target.id?Number(a)?n(np(a<100||a>511?{propsId:t.id,newMsg:"enter a number between 100 and 511"}:{propsId:t.id,newMsg:""})):n(np({propsId:t.id,newMsg:"please enter a number"})):"Content Type"===r.target.id&&(Number(a)||!a.includes("/")||"/"===a[0]||"/"===a[a.length-1]?n(np({propsId:t.id,newMsg:"invalid content type"})):n(np({propsId:t.id,newMsg:""}))),function(e){var r=0,a=0;Object.values(o).forEach((function(e){"Status Code"===e&&r++,"Content Type"===e&&a++})),r>=2&&"Status Code"===e.target.id&&n(np({propsId:t.id,newMsg:"1 status code permitted"})),a>=2&&"Content Type"===e.target.id&&n(np({propsId:t.id,newMsg:"1 content type permitted"}))}(e),n(op(e.target.value))},required:!0,size:"small"}),e.createElement(Qt,{id:t.id,onClick:function(e){n(Xd(e.target.id))},variant:"contained",color:"primary",sx:{height:25,minWidth:23,width:23},disableElevation:!0},"-")))};function lp(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var sp=function(t){var n,r=Ya(),o=Ja((function(e){return e.userInfo.currentProject})),a=[],i=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return lp(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?lp(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){l=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(l)throw a}}}}(Ja((function(e){return e.userInfo.projectsInfo})).map((function(e){return e.project_name})));try{for(i.s();!(n=i.n()).done;){var l=n.value;a.push(e.createElement(Fd,{key:l,value:l},l))}}catch(e){i.e(e)}finally{i.f()}return e.createElement(Fe,{sx:{minHeight:25,height:25,width:23,minWidth:200,m:3}},e.createElement(gr,{fullWidth:!0},e.createElement(dr,{id:"project-dropdown-label"},"Project"),e.createElement(Fa,{name:"project-selector",id:"project-selector","data-testid":"project-selector",label:"Project",value:o,onChange:function(e){r(gs(e.target.value))},sx:{height:40},disabled:t.disabled},a)))},cp=function(t){return e.createElement(Ha,{className:"text-display",label:"Request Body",id:"req_body","data-testid":"Request-Body",name:"Request-Body",disabled:!t.showField,sx:{backgroundColor:t.showField?"none":"#E8E8E8"},size:"small"})};function up(e){return up="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},up(e)}function dp(){dp=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",a=r.asyncIterator||"@@asyncIterator",i=r.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var o=t&&t.prototype instanceof d?t:d,a=Object.create(o.prototype),i=new k(r||[]);return a._invoke=function(e,t,n){var r="suspendedStart";return function(o,a){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw a;return{value:void 0,done:!0}}for(n.method=o,n.arg=a;;){var i=n.delegate;if(i){var l=w(i,n);if(l){if(l===u)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=c(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===u)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}(e,n,i),a}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var u={};function d(){}function p(){}function f(){}var m={};l(m,o,(function(){return this}));var h=Object.getPrototypeOf,g=h&&h(h(_([])));g&&g!==t&&n.call(g,o)&&(m=g);var b=f.prototype=d.prototype=Object.create(m);function v(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(o,a,i,l){var s=c(e[o],e,a);if("throw"!==s.type){var u=s.arg,d=u.value;return d&&"object"==up(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,i,l)}),(function(e){r("throw",e,i,l)})):t.resolve(d).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,l)}))}l(s.arg)}var o;this._invoke=function(e,n){function a(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(a,a):a()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var r=c(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,u;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function _(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,a=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return a.next=a}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=f,l(b,"constructor",f),l(f,"constructor",p),p.displayName=l(f,i,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,l(e,i,"GeneratorFunction")),e.prototype=Object.create(b),e},e.awrap=function(e){return{__await:e}},v(y.prototype),l(y.prototype,a,(function(){return this})),e.AsyncIterator=y,e.async=function(t,n,r,o,a){void 0===a&&(a=Promise);var i=new y(s(t,n,r,o),a);return e.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},v(b),l(b,i,"Generator"),l(b,o,(function(){return this})),l(b,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=_,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return i.type="throw",i.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),s=n.call(a,"finallyLoc");if(l&&s){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,u):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:_(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},e}function pp(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}var fp=function(){for(var t=sessionStorage.getItem("isLoggedIn"),n=Ja((function(e){return e.testForm.requestType})),r=Ja((function(e){return e.testForm.assertionList})),o=[],a=0,i=Object.keys(r);a<i.length;a++){var l=i[a];o.push(e.createElement(ip,{id:l,key:l}))}var s=Ya(),c=Ja((function(e){return e.userInfo.projectsInfo})).map((function(e){return e.project_name}));s(gs(c[c.length-1]));for(var u=function(){var e=function(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function i(e){pp(a,r,o,i,l,"next",e)}function l(e){pp(a,r,o,i,l,"throw",e)}i(void 0)}))}}(dp().mark((function e(t){var n,o,a,i,l,c,u,d,p,f,m;return dp().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.preventDefault(),n=0,o=0,Object.values(r).forEach((function(e){"Status Code"===e&&n++,"Content Type"===e&&o++})),!(n>1)){e.next=7;break}return e.abrupt("return",alert("Make sure that you have only one Status Code!"));case 7:if(!(o>1)){e.next=9;break}return e.abrupt("return",alert("Make sure that you have only one Content Type!"));case 9:if(h=t.target,void 0,g=new FormData(h),a=Object.fromEntries(g),i=a["request-selector"].toString(),l=a[i].toString(),c=a["Request-Body"],u=a["Content Type"],d=a["Status Code"],p=a["Response Body"],u||d||p){e.next=18;break}return e.abrupt("return",alert("Please add expected response!"));case 18:return f={header:{},assertions:[]},i&&(f.header.method=i),l&&(f.header.endpoint=l),c&&(f.header.req_body=c.toString()),u&&f.assertions.push({content:u.toString()}),d&&f.assertions.push({status:d.toString()}),p&&f.assertions.push({res_body:p.toString()}),e.next=27,ti().post("/api/tests",f);case 27:return m=e.sent,s(Wd(m.data)),e.abrupt("return");case 30:case"end":return e.stop()}var h,g}),e)})));return function(t){return e.apply(this,arguments)}}(),d=[],p=0,f=["Get","Post","Patch","Delete"];p<f.length;p++){var m=f[p];d.push(e.createElement(Fd,{key:m,value:m},m))}return e.createElement("form",{id:"test-generator-form",onSubmit:u},e.createElement(Fe,{className:"test-gen-header"},e.createElement(gr,null,e.createElement(dr,{id:"requestSelector"},"Request Type"),e.createElement(Fa,{className:"text-display",name:"request-selector",id:"request-selector","data-testid":"request-selector",label:"Request Type",value:n,onChange:function(e){s(Kd(e.target.value))},sx:{height:40,width:"100px"}},d)),e.createElement(Ha,{className:"text-display",label:"Endpoint","data-testid":n,id:"endpoint",name:n,required:!0,size:"small"}),e.createElement(cp,{showField:"Get"!==n})),e.createElement(Fe,{id:"assertion-list",sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"10px",marginBottom:"10px",marginTop:"10px"}},o,e.createElement(Fe,{sx:{display:"flex",gap:"10px",alignItems:"center"}},e.createElement(Xa,null,"Add Expected Response:"),e.createElement(Qt,{id:"add-assertion",name:"add-assertion",variant:"contained",color:"primary",onClick:function(){s(Gd()),s(tp())},sx:{justifySelf:"center",alignSelf:"center",height:25,width:23,minWidth:23},disableElevation:!0},"+"))),e.createElement(Qt,{type:"submit",variant:"contained",sx:{marginTop:"30px",height:40},disableElevation:!0},"Generate Test Code"),t&&e.createElement(sp,null))},mp=function(){var t=Ja((function(e){return e.code.codeOutput})),n=Ya();return e.createElement(Ha,{id:"code-output",className:"text-display",label:"Testing Code",variant:"filled",multiline:!0,minRows:10,value:t,sx:{width:.95,backgroundColor:"#282C34",color:"white",pl:2,borderRadius:2},onChange:function(e){return n(Wd(e.target.value))}})},hp=o(8309),gp=function(){var t=Ja((function(e){return e.code.codeOutput})),n=sessionStorage.getItem("isLoggedIn"),r=Ja((function(e){return e.userInfo.currentProjectId})),o=Ya();return e.createElement(Fe,{className:"button-container",sx:{marginLeft:5,marginTop:2,display:"flex",flexDirection:"column"}},e.createElement(su,{start:e.createElement(Es.Z,null),end:e.createElement(ks.Z,null),onClick:function(){return o(Ud())},testId:"bttn-copy"}),e.createElement(su,{start:e.createElement(hp.Z,null),end:e.createElement(ks.Z,null),onClick:function(){n?(o(ns({projectId:r,codeOutput:[t]})),o(rs(r))):o(Xl(t))},testId:"bttn-append"}))},bp=function(){return e.createElement("div",null,e.createElement(Fe,{className:"test-code-box code-container"},e.createElement(mp,null),e.createElement(gp,null)))},vp=o(1733),yp=o(6818),wp=o(5408),xp=o(2605);const Ep=["component","direction","spacing","divider","children"];function kp(t,n){const r=e.Children.toArray(t).filter(Boolean);return r.reduce(((t,o,a)=>(t.push(o),a<r.length-1&&t.push(e.cloneElement(n,{key:`separator-${a}`})),t)),[])}const _p=(0,Je.ZP)("div",{name:"MuiStack",slot:"Root",overridesResolver:(e,t)=>[t.root]})((({ownerState:e,theme:t})=>{let n=(0,Se.Z)({display:"flex",flexDirection:"column"},(0,wp.k9)({theme:t},(0,wp.P$)({values:e.direction,breakpoints:t.breakpoints.values}),(e=>({flexDirection:e}))));if(e.spacing){const r=(0,xp.hB)(t),o=Object.keys(t.breakpoints.values).reduce(((t,n)=>(("object"==typeof e.spacing&&null!=e.spacing[n]||"object"==typeof e.direction&&null!=e.direction[n])&&(t[n]=!0),t)),{}),a=(0,wp.P$)({values:e.direction,base:o}),i=(0,wp.P$)({values:e.spacing,base:o});"object"==typeof a&&Object.keys(a).forEach(((e,t,n)=>{if(!a[e]){const r=t>0?a[n[t-1]]:"column";a[e]=r}}));const l=(t,n)=>{return{"& > :not(style) + :not(style)":{margin:0,[`margin${o=n?a[n]:e.direction,{row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"}[o]}`]:(0,xp.NA)(r,t)}};var o};n=(0,Te.Z)(n,(0,wp.k9)({theme:t},i,l))}return n=(0,wp.dt)(t.breakpoints,n),n})),Sp=e.forwardRef((function(e,t){const n=Ae((0,et.Z)({props:e,name:"MuiStack"})),{component:r="div",direction:o="column",spacing:a=0,divider:i,children:l}=n,s=(0,Oe.Z)(n,Ep),c={direction:o,spacing:a};return(0,Ze.jsx)(_p,(0,Se.Z)({as:r,ownerState:c,ref:t},s,{children:i?kp(l,i):l}))})),Op=Sp;function Np(e){return Np="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Np(e)}function Cp(){Cp=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",a=r.asyncIterator||"@@asyncIterator",i=r.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var o=t&&t.prototype instanceof d?t:d,a=Object.create(o.prototype),i=new k(r||[]);return a._invoke=function(e,t,n){var r="suspendedStart";return function(o,a){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw a;return{value:void 0,done:!0}}for(n.method=o,n.arg=a;;){var i=n.delegate;if(i){var l=w(i,n);if(l){if(l===u)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=c(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===u)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}(e,n,i),a}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var u={};function d(){}function p(){}function f(){}var m={};l(m,o,(function(){return this}));var h=Object.getPrototypeOf,g=h&&h(h(_([])));g&&g!==t&&n.call(g,o)&&(m=g);var b=f.prototype=d.prototype=Object.create(m);function v(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(o,a,i,l){var s=c(e[o],e,a);if("throw"!==s.type){var u=s.arg,d=u.value;return d&&"object"==Np(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,i,l)}),(function(e){r("throw",e,i,l)})):t.resolve(d).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,l)}))}l(s.arg)}var o;this._invoke=function(e,n){function a(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(a,a):a()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var r=c(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,u;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function _(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,a=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return a.next=a}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=f,l(b,"constructor",f),l(f,"constructor",p),p.displayName=l(f,i,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,l(e,i,"GeneratorFunction")),e.prototype=Object.create(b),e},e.awrap=function(e){return{__await:e}},v(y.prototype),l(y.prototype,a,(function(){return this})),e.AsyncIterator=y,e.async=function(t,n,r,o,a){void 0===a&&(a=Promise);var i=new y(s(t,n,r,o),a);return e.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},v(b),l(b,i,"Generator"),l(b,o,(function(){return this})),l(b,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=_,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return i.type="throw",i.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),s=n.call(a,"finallyLoc");if(l&&s){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,u):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:_(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},e}function Rp(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return Tp(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Tp(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){l=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(l)throw a}}}}function Tp(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Mp(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}var Pp=function(t){var n=Ja((function(e){return e.userInfo.newProject})),r=Ja((function(e){return e.userInfo.currentProject})),o=Ja((function(e){return e.userInfo.projectsInfo})),a=Boolean(n.length),i=Ya(),l=function(){var e=function(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function i(e){Mp(a,r,o,i,l,"next",e)}function l(e){Mp(a,r,o,i,l,"throw",e)}i(void 0)}))}}(Cp().mark((function e(){var t,a,l,s,c,u,d;return Cp().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=[],sessionStorage.getItem("clipboardData")&&(a=sessionStorage.getItem("clipboardData"))&&(t=JSON.parse(a)),""===n){e.next=11;break}return e.next=5,ti().post("api/project/",{project_name:n});case 5:l=e.sent,s=l.data,i(hs(l.data)),i(ns({projectId:s[s.length-1].project_id,codeOutput:t})),e.next=29;break;case 11:c=Rp(o),e.prev=12,c.s();case 14:if((u=c.n()).done){e.next=21;break}if((d=u.value).project_name!==r){e.next=19;break}return i(ns({projectId:d.project_id,codeOutput:t})),e.abrupt("break",21);case 19:e.next=14;break;case 21:e.next=26;break;case 23:e.prev=23,e.t0=e.catch(12),c.e(e.t0);case 26:return e.prev=26,c.f(),e.finish(26);case 29:sessionStorage.removeItem("clipboardData"),i(ms());case 31:case"end":return e.stop()}}),e,null,[[12,23,26,29]])})));return function(){return e.apply(this,arguments)}}();return e.createElement(Hu,{open:t.open},e.createElement(Fe,{sx:{display:"flex",flexDirection:"column",alignItems:"center",height:325}},e.createElement(Fe,{sx:{width:500,display:"flex",flexDirection:"row",backgroundColor:"#6e00bb",justifyContent:"center"}},e.createElement("img",{alt:"logo",src:"../assets/logo-jester.png"})),e.createElement(Gu,null,"Would you like to save your current clipboard?"),e.createElement(sp,{disabled:a}),e.createElement(Ha,{label:"New Project Name","data-testid":"new-project",id:"new-project",size:"small",sx:{width:200,minWidth:200,marginBottom:2},onChange:function(e){i(ys(e.target.value)),i(gs(e.target.value))}}),e.createElement(Op,{direction:"row",spacing:2},e.createElement(Qt,{variant:"outlined",startIcon:e.createElement(vp.Z,null),sx:{width:120},onClick:function(){sessionStorage.removeItem("clipboardData"),i(ms())}},"Discard"),e.createElement(Qt,{variant:"outlined",startIcon:e.createElement(yp.Z,null),sx:{width:120},onClick:l},"Save"))))},Ap=function(){var t=Ja((function(e){return e.userInfo.showSave}));return e.createElement("div",{className:"page-body"},e.createElement(Xa,{variant:"h3",gutterBottom:!0,align:"center",sx:{color:"#6E00BB",mb:3,mt:2}},"Test Generator"),e.createElement(fp,null),e.createElement(bp,null),e.createElement(Pp,{open:t}))};function Lp(e){return(0,Lt.Z)("MuiCard",e)}(0,yt.Z)("MuiCard",["root"]);const Zp=["className","raised"],Ip=(0,Je.ZP)($r,{name:"MuiCard",slot:"Root",overridesResolver:(e,t)=>t.root})((()=>({overflow:"hidden"}))),jp=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiCard"}),{className:r,raised:o=!1}=n,a=(0,Oe.Z)(n,Zp),i=(0,Se.Z)({},n,{raised:o}),l=(e=>{const{classes:t}=e;return(0,Xe.Z)({root:["root"]},Lp,t)})(i);return(0,Ze.jsx)(Ip,(0,Se.Z)({className:(0,Ne.Z)(l.root,r),elevation:o?8:void 0,ref:t,ownerState:i},a))}));function Dp(e){return(0,Lt.Z)("MuiCardActions",e)}(0,yt.Z)("MuiCardActions",["root","spacing"]);const zp=["disableSpacing","className"],Fp=(0,Je.ZP)("div",{name:"MuiCardActions",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disableSpacing&&t.spacing]}})((({ownerState:e})=>(0,Se.Z)({display:"flex",alignItems:"center",padding:8},!e.disableSpacing&&{"& > :not(:first-of-type)":{marginLeft:8}}))),Bp=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiCardActions"}),{disableSpacing:r=!1,className:o}=n,a=(0,Oe.Z)(n,zp),i=(0,Se.Z)({},n,{disableSpacing:r}),l=(e=>{const{classes:t,disableSpacing:n}=e,r={root:["root",!n&&"spacing"]};return(0,Xe.Z)(r,Dp,t)})(i);return(0,Ze.jsx)(Fp,(0,Se.Z)({className:(0,Ne.Z)(l.root,o),ownerState:i,ref:t},a))}));function $p(e){return(0,Lt.Z)("MuiCardContent",e)}(0,yt.Z)("MuiCardContent",["root"]);const Up=["className","component"],Wp=(0,Je.ZP)("div",{name:"MuiCardContent",slot:"Root",overridesResolver:(e,t)=>t.root})((()=>({padding:16,"&:last-child":{paddingBottom:24}}))),Hp=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiCardContent"}),{className:r,component:o="div"}=n,a=(0,Oe.Z)(n,Up),i=(0,Se.Z)({},n,{component:o}),l=(e=>{const{classes:t}=e;return(0,Xe.Z)({root:["root"]},$p,t)})(i);return(0,Ze.jsx)(Wp,(0,Se.Z)({as:o,className:(0,Ne.Z)(l.root,r),ownerState:i,ref:t},a))}));function qp(e){return(0,Lt.Z)("MuiCardMedia",e)}(0,yt.Z)("MuiCardMedia",["root","media","img"]);const Vp=["children","className","component","image","src","style"],Kp=(0,Je.ZP)("div",{name:"MuiCardMedia",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e,{isMediaComponent:r,isImageComponent:o}=n;return[t.root,r&&t.media,o&&t.img]}})((({ownerState:e})=>(0,Se.Z)({display:"block",backgroundSize:"cover",backgroundRepeat:"no-repeat",backgroundPosition:"center"},e.isMediaComponent&&{width:"100%"},e.isImageComponent&&{objectFit:"cover"}))),Gp=["video","audio","picture","iframe","img"],Qp=["picture","img"],Xp=e.forwardRef((function(e,t){const n=(0,et.Z)({props:e,name:"MuiCardMedia"}),{children:r,className:o,component:a="div",image:i,src:l,style:s}=n,c=(0,Oe.Z)(n,Vp),u=-1!==Gp.indexOf(a),d=!u&&i?(0,Se.Z)({backgroundImage:`url("${i}")`},s):s,p=(0,Se.Z)({},n,{component:a,isMediaComponent:u,isImageComponent:-1!==Qp.indexOf(a)}),f=(e=>{const{classes:t,isMediaComponent:n,isImageComponent:r}=e,o={root:["root",n&&"media",r&&"img"]};return(0,Xe.Z)(o,qp,t)})(p);return(0,Ze.jsx)(Kp,(0,Se.Z)({className:(0,Ne.Z)(f.root,o),as:a,role:!u&&i?"img":void 0,ref:t,style:d,ownerState:p,src:u?i||l:void 0},c,{children:r}))})),Yp=Xp;var Jp=function(t){return e.createElement(jp,{sx:{maxWidth:345}},e.createElement(Yp,{component:"img",height:"250",width:"250",image:t.imageUrl,alt:"green iguana"}),e.createElement(Hp,null,e.createElement(Xa,{className:"contributorName",gutterBottom:!0,variant:"h5",component:"div"},t.name)),e.createElement(Bp,null,e.createElement(Qt,{size:"small",color:"primary",href:t.linkedInLink,target:"_blank"},"LinkedIn"),e.createElement(Qt,{size:"small",color:"primary",href:t.githubLink,target:"_blank"},"GitHub")))},ef=function(){var t=[{name:"Michael Lam",githubLink:"https://github.com/mlamchamkee",linkedInLink:"https://www.linkedin.com/in/mlamchamkee",imageUrl:"./assets/photos/michael.jpg"},{name:"Lilah August",githubLink:"https://github.com/lilahaugust",linkedInLink:"https://www.linkedin.com/in/lilahaugust/",imageUrl:"./assets/photos/lilah.png"},{name:"Brian Hao",githubLink:"https://www.github.com/BrianHao",linkedInLink:"https://www.linkedin.com/in/brianhao/",imageUrl:"./assets/photos/brian-headshot.jpg"},{name:"Serena Amos",githubLink:"https://github.com/samos17",linkedInLink:"https://www.linkedin.com/in/serena-amos/",imageUrl:"./assets/photos/serena.png"},{name:"Anshuman Sinha",githubLink:"https://github.com/AnshumanSinha8",linkedInLink:"https://www.linkedin.com/in/anshuman-sinha1998/",imageUrl:"./assets/photos/anshu.png"}];return e.createElement("div",{className:"page-body"},e.createElement("div",null,e.createElement(Xa,{variant:"h3",align:"center",gutterBottom:!0,sx:{mb:7,mt:5,color:"primary.main"},className:"contributors-header"},"Contributors")),e.createElement("div",{className:"contributors-page"},t.map((function(t,n){return e.createElement(Jp,{name:t.name,githubLink:t.githubLink,linkedInLink:t.linkedInLink,imageUrl:t.imageUrl,key:n})}))))},tf=function(){return e.createElement("div",{className:"page-body"},e.createElement(Xa,{variant:"h3",gutterBottom:!0,align:"center",sx:{color:"#6E00BB",mb:4,mt:5}},"Documentation"),e.createElement("div",{className:"documentation-container"},e.createElement("p",{className:"documentation-headers"},"Getting started"),e.createElement("p",{className:"documentation-p"},"To start generating a test, simply navigate to our home page, where you will first be prompted to specify the endpoint for your request. "),e.createElement("p",{className:"documentation-p"},"This can be a url or a local endpoint like ‘/‘, ‘/users’, etc. "),e.createElement("p",{className:"documentation-p"},"At this stage you will also have the option to input a request body to specify the nature of your request (available to all requests types except GET."),e.createElement("p",{className:"documentation-p"},"Once these initial parameters have been satisfied to the necessary extent for your project, you can add assertions to your test by clicking the ‘+’ button next to ‘Add Expected Response’. By default, Jester will populate assertion types in the following order: "),e.createElement("ol",{className:"documentation-p"},e.createElement("li",null,"expected status code (100-511)",e.createElement("li",null,"expected content type (text/html, application/json, etc.)"),e.createElement("li",null,"expected response body (optional)"))),e.createElement("p",{className:"documentation-p"}," You are allowed a maximum of one of each assertion type. Once all of your specifications are in place, click ‘Generate Test Code’ and your new test will appear in the code block below!"),e.createElement("p",{className:"documentation-headers"},"Saving your work"),e.createElement("p",{className:"documentation-p"},"The code block where your tests are displayed also has 2 buttons in the top right corner."),e.createElement("img",{className:"docs-display",src:"./assets/photos/buttons.png"}),e.createElement("p",{className:"documentation-p"},"The first is a copy-to-clipboard button which will enable you to copy the entire block of code to paste wherever you wish. The second is the ‘add to project’ button."),e.createElement("p",{className:"documentation-p"},"There is an option to login with Github. If you are logged in, you will be able to create multiple saved projects under ‘Projects’ and add your generated test code snippets to whatever project you specify. An ‘Add to Project’ dropdown will appear underneath the ‘Generate Test Code’ button for logged in users. To add a test code snippet to a project, select your desired project from this drop-down menu and then click the second button in the upper right corner of the code block. You can view your saved projects in the 'Projects' tab."),e.createElement("p",{className:"documentation-headers"},"Integrating tests into your codebase"),e.createElement("ol",{className:"documentation-p"},e.createElement("li",null,"Create a __tests__ folder in your project with a file called supertest.js"),e.createElement("li",null,"Add jest and supertest as dependencies in your package.json file"),e.createElement("li",null,"Paste generated code into the file supertest.js"))))},nf=function(){var t=Ya();return(0,e.useEffect)((function(){sessionStorage.getItem("isLoggedIn")&&ti().get("/api/project").then((function(e){t(hs(e.data))}))})),e.createElement(Ap,null)},rf=function(){return e.createElement("div",{className:"page-body"},e.createElement(Xa,{variant:"h4",component:"h2"},"404: Page Not Found. Click ",e.createElement(_e,{to:"/"},"here")," to go Home."))},of=(0,De.Z)({palette:{primary:{main:"#6E00BB",contrastText:"#fff"},secondary:{main:"#606F7B",contrastText:"#fff"},info:{main:"#8795A1",contrastText:"#fff"}},typography:{}});const af=function(){var t=Ja((function(e){return e.navPanel.showProjectPanel}));return e.createElement(Ve,{theme:of},e.createElement(ed,null),e.createElement(Fe,{className:"contents",sx:{display:"grid",gridTemplateColumns:t?"1fr 5fr":"1fr 11fr",height:"100%"}},e.createElement(Rd,null),e.createElement("div",{className:"page-container"},e.createElement(ve,null,e.createElement(ge,{path:"/",element:e.createElement(nf,null)}),e.createElement(ge,{path:"/clipboard/:projectId",element:e.createElement(du,null)}),e.createElement(ge,{path:"/documentation",element:e.createElement(tf,null)}),e.createElement(ge,{path:"/contributors",element:e.createElement(ef,null)}),e.createElement(ge,{path:"/authenticate",element:e.createElement(Pd,null)}),e.createElement(ge,{path:"/CodeGenerator/:projectId",element:e.createElement(Ap,null)}),e.createElement(ge,{path:"*",element:e.createElement(rf,null)})),e.createElement(wu,null))))};var lf=function(e){var t,n=function(e){return function(e){void 0===e&&(e={});var t=e.thunk,n=void 0===t||t,r=(e.immutableCheck,e.serializableCheck,new Nl);return n&&(function(e){return"boolean"==typeof e}(n)?r.push(fl):r.push(fl.withExtraArgument(n.extraArgument))),r}(e)},r=e||{},o=r.reducer,a=void 0===o?void 0:o,i=r.middleware,l=void 0===i?n():i,s=r.devTools,c=void 0===s||s,u=r.preloadedState,d=void 0===u?void 0:u,p=r.enhancers,f=void 0===p?void 0:p;if("function"==typeof a)t=a;else{if(!function(e){if("object"!=typeof e||null===e)return!1;var t=Object.getPrototypeOf(e);if(null===t)return!0;for(var n=t;null!==Object.getPrototypeOf(n);)n=Object.getPrototypeOf(n);return t===n}(a))throw new Error('"reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');t=function(e){for(var t=Object.keys(e),n={},r=0;r<t.length;r++){var o=t[r];"function"==typeof e[o]&&(n[o]=e[o])}var a,i=Object.keys(n);try{!function(e){Object.keys(e).forEach((function(t){var n=e[t];if(void 0===n(void 0,{type:il.INIT}))throw new Error(rl(12));if(void 0===n(void 0,{type:il.PROBE_UNKNOWN_ACTION()}))throw new Error(rl(13))}))}(n)}catch(e){a=e}return function(e,t){if(void 0===e&&(e={}),a)throw a;for(var r=!1,o={},l=0;l<i.length;l++){var s=i[l],c=n[s],u=e[s],d=c(u,t);if(void 0===d)throw t&&t.type,new Error(rl(14));o[s]=d,r=r||d!==u}return(r=r||i.length!==Object.keys(e).length)?o:e}}(a)}var m=l;"function"==typeof m&&(m=m(n));var h=ul.apply(void 0,m),g=cl;c&&(g=Ol(_l({trace:!1},"object"==typeof c&&c)));var b=[h];return Array.isArray(f)?b=gl([h],f):"function"==typeof f&&(b=f(b)),sl(t,d,g.apply(void 0,b))}({reducer:{testForm:Yd,userInput:ap,code:Hd,clipboard:os,userInfo:xs,navPanel:sd}});n.createRoot(document.getElementById("root")).render(e.createElement(v,{store:lf},e.createElement(ke,null,e.createElement(af,null))))})()})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUcsUUFBUUEsRUFBRyxRQUFRQSxFQUFHLHVCQUE2QyxHQUFHQSxFQUFHLFFBQVFBLEVBQUcsUUFBUUEsRUFBRyxRQUFRQSxFQUFHLHdCQUFnRCxHQUFHQSxFQUFHLFFBQVFBLEVBQUcsUUFBUUEsRUFBRyxTQUFTQSxFQUFHLDBCQUFtRHJSLEtBQUssSUFDclIsQ0FHQSxNQUNBLEVBRGdCLENBQUMsT0FBUW9SLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLElDUDV4QyxFQUFZLENBQUMsV0FBWSxTQUFVLFNBRzVCRSxHQUFTLENBRXBCQyxVQUFXLCtCQUdYQyxRQUFTLCtCQUVUQyxPQUFRLDZCQUVSQyxNQUFPLGdDQUlJQyxHQUFXLENBQ3RCQyxTQUFVLElBQ1ZDLFFBQVMsSUFDVEMsTUFBTyxJQUVQQyxTQUFVLElBRVZDLFFBQVMsSUFFVEMsZUFBZ0IsSUFFaEJDLGNBQWUsS0FHakIsU0FBU0MsR0FBU0MsR0FDaEIsTUFBTyxHQUFHN1YsS0FBSzRULE1BQU1pQyxNQUN2QixDQUVBLFNBQVNDLEdBQXNCQyxHQUM3QixJQUFLQSxFQUNILE9BQU8sRUFHVCxNQUFNQyxFQUFXRCxFQUFTLEdBRTFCLE9BQU8vVixLQUFLNFQsTUFBbUQsSUFBNUMsRUFBSSxHQUFLb0MsR0FBWSxJQUFPQSxFQUFXLEdBQzVELENBRWUsU0FBU0MsR0FBa0JDLEdBQ3hDLE1BQU1DLEdBQWUsT0FBUyxDQUFDLEVBQUdwQixHQUFRbUIsRUFBaUJuQixRQUVyRHFCLEdBQWlCLE9BQVMsQ0FBQyxFQUFHaEIsR0FBVWMsRUFBaUJkLFVBeUMvRCxPQUFPLE9BQVMsQ0FDZFUseUJBQ0FoTyxPQXpDYSxDQUFDbEcsRUFBUSxDQUFDLE9BQVExRSxFQUFVLENBQUMsS0FDMUMsTUFDRWtZLFNBQVVpQixFQUFpQkQsRUFBZVosU0FDMUNULE9BQVF1QixFQUFlSCxFQUFhbkIsVUFBUyxNQUM3Q3VCLEVBQVEsR0FDTnJaLEVBK0JKLE9BOUJjLE9BQThCQSxFQUFTLElBOEI3Q3FKLE1BQU1zRyxRQUFRakwsR0FBU0EsRUFBUSxDQUFDQSxJQUFRc0UsS0FBSXNRLEdBQWdCLEdBQUdBLEtBQTBDLGlCQUFuQkgsRUFBOEJBLEVBQWlCVCxHQUFTUyxNQUFtQkMsS0FBaUMsaUJBQVZDLEVBQXFCQSxFQUFRWCxHQUFTVyxPQUFVOVMsS0FBSyxJQUFJLEdBTXhQeVMsRUFBa0IsQ0FDbkJuQixPQUFRb0IsRUFDUmYsU0FBVWdCLEdBRWQsQ0MvRkEsTUFVQSxHQVZlLENBQ2JLLGNBQWUsSUFDZkMsSUFBSyxLQUNMQyxVQUFXLEtBQ1hDLE9BQVEsS0FDUkMsT0FBUSxLQUNSQyxNQUFPLEtBQ1BDLFNBQVUsS0FDVkMsUUFBUyxNQ1BMLEdBQVksQ0FBQyxjQUFlLFNBQVUsVUFBVyxVQUFXLGNBQWUsYUFBYyxTQXVGL0YsU0E1RUEsU0FBcUI5WixFQUFVLENBQUMsS0FBTXFRLEdBQ3BDLE1BQ0UwSixPQUFRQyxFQUFjLENBQUMsRUFDdkJ4RSxRQUFTeUUsRUFBZSxDQUFDLEVBQ3pCQyxZQUFhQyxFQUFtQixDQUFDLEVBQ2pDMUUsV0FBWTJFLEVBQWtCLENBQUMsR0FDN0JwYSxFQUNFcVcsR0FBUSxPQUE4QnJXLEVBQVMsSUFFckQsR0FBSUEsRUFBUXFhLEtBQ1YsTUFBTSxJQUFJQyxPQUNjLE9BQXVCLEtBR2pELE1BQU05RSxFTG1LTyxTQUF1QkEsR0FDcEMsTUFBTSxLQUNKK0UsRUFBTyxRQUFPLGtCQUNkQyxFQUFvQixFQUFDLFlBQ3JCeEYsRUFBYyxJQUNaUSxFQUNFYSxHQUFRLE9BQThCYixFQUFTbEMsR0FFL0NHLEVBQVUrQixFQUFRL0IsU0F6RzFCLFNBQTJCOEcsRUFBTyxTQUNoQyxNQUFhLFNBQVRBLEVBQ0ssQ0FDTHBGLEtBQU0sRUFDTjVCLE1BQU8sRUFDUG1CLEtBQU0sR0FJSCxDQUNMUyxLQUFNLEVBQ041QixNQUFPLEVBQ1BtQixLQUFNLEVBRVYsQ0EyRnFDK0YsQ0FBa0JGLEdBQy9DN0csRUFBWThCLEVBQVE5QixXQTFGNUIsU0FBNkI2RyxFQUFPLFNBQ2xDLE1BQWEsU0FBVEEsRUFDSyxDQUNMcEYsS0FBTSxFQUNONUIsTUFBTyxFQUNQbUIsS0FBTSxHQUlILENBQ0xTLEtBQU0sRUFDTjVCLE1BQU8sRUFDUG1CLEtBQU0sRUFFVixDQTRFeUNnRyxDQUFvQkgsR0FDckRJLEVBQVFuRixFQUFRbUYsT0EzRXhCLFNBQXlCSixFQUFPLFNBQzlCLE1BQWEsU0FBVEEsRUFDSyxDQUNMcEYsS0FBTSxFQUNONUIsTUFBTyxFQUNQbUIsS0FBTSxHQUlILENBQ0xTLEtBQU0sRUFDTjVCLE1BQU8sRUFDUG1CLEtBQU0sRUFFVixDQTZEaUNrRyxDQUFnQkwsR0FDekNNLEVBQU9yRixFQUFRcUYsTUE1RHZCLFNBQXdCTixFQUFPLFNBQzdCLE1BQWEsU0FBVEEsRUFDSyxDQUNMcEYsS0FBTSxFQUNONUIsTUFBTyxFQUNQbUIsS0FBTSxHQUlILENBQ0xTLEtBQU0sRUFDTjVCLE1BQU8sRUFDUG1CLEtBQU0sRUFFVixDQThDK0JvRyxDQUFlUCxHQUN0Q1EsRUFBVXZGLEVBQVF1RixTQTdDMUIsU0FBMkJSLEVBQU8sU0FDaEMsTUFBYSxTQUFUQSxFQUNLLENBQ0xwRixLQUFNLEVBQ041QixNQUFPLEVBQ1BtQixLQUFNLEdBSUgsQ0FDTFMsS0FBTSxFQUNONUIsTUFBTyxFQUNQbUIsS0FBTSxFQUVWLENBK0JxQ3NHLENBQWtCVCxHQUMvQ1UsRUFBVXpGLEVBQVF5RixTQTlCMUIsU0FBMkJWLEVBQU8sU0FDaEMsTUFBYSxTQUFUQSxFQUNLLENBQ0xwRixLQUFNLEVBQ041QixNQUFPLEVBQ1BtQixLQUFNLEdBSUgsQ0FDTFMsS0FBTSxVQUVONUIsTUFBTyxFQUNQbUIsS0FBTSxFQUVWLENBZXFDd0csQ0FBa0JYLEdBSXJELFNBQVNZLEdBQWdCdEgsR0FXdkIsT0FWcUIsUUFBaUJBLEVBQVlhLEVBQUtsQixLQUFLQyxVQUFZK0csRUFBb0I5RixFQUFLbEIsS0FBS0MsUUFBVUYsRUFBTUMsS0FBS0MsT0FXN0gsQ0FFQSxNQUFNMkgsR0FBZSxFQUNuQkMsUUFDQTVRLE9BQ0E2USxZQUFZLElBQ1pDLGFBQWEsSUFDYkMsWUFBWSxRQVFaLEtBTkFILEdBQVEsT0FBUyxDQUFDLEVBQUdBLElBRVZsRyxNQUFRa0csRUFBTUMsS0FDdkJELEVBQU1sRyxLQUFPa0csRUFBTUMsS0FHaEJELEVBQU03SSxlQUFlLFFBQ3hCLE1BQU0sSUFBSThILE9BQ3NFLE9BQXVCLEdBQUk3UCxFQUFPLEtBQUtBLEtBQVUsR0FBSTZRLElBR3ZJLEdBQTBCLGlCQUFmRCxFQUFNbEcsS0FDZixNQUFNLElBQUltRixPQWFQLE9BQXVCLEdBQUk3UCxFQUFPLEtBQUtBLEtBQVUsR0FBSWdSLEtBQUtwVixVQUFVZ1YsRUFBTWxHLFFBVS9FLE9BUEFQLEVBQWV5RyxFQUFPLFFBQVNFLEVBQVl2RyxHQUMzQ0osRUFBZXlHLEVBQU8sT0FBUUcsRUFBV3hHLEdBRXBDcUcsRUFBTUssZUFDVEwsRUFBTUssYUFBZVAsR0FBZ0JFLEVBQU1sRyxPQUd0Q2tHLENBQUssRUFHUk0sR0FBUSxDQUNaakgsT0FDQW5CLFNBOERGLE9BckRzQixFQUFBa0UsRUFBQSxJQUFVLE9BQVMsQ0FFdkNtRSxRQUFRLE9BQVMsQ0FBQyxFQUFHLEdBR3JCckIsT0FFQTlHLFFBQVMySCxHQUFhLENBQ3BCQyxNQUFPNUgsRUFDUGhKLEtBQU0sWUFHUmlKLFVBQVcwSCxHQUFhLENBQ3RCQyxNQUFPM0gsRUFDUGpKLEtBQU0sWUFDTjZRLFVBQVcsT0FDWEMsV0FBWSxPQUNaQyxVQUFXLFNBR2JiLE1BQU9TLEdBQWEsQ0FDbEJDLE1BQU9WLEVBQ1BsUSxLQUFNLFVBR1J3USxRQUFTRyxHQUFhLENBQ3BCQyxNQUFPSixFQUNQeFEsS0FBTSxZQUdSb1EsS0FBTU8sR0FBYSxDQUNqQkMsTUFBT1IsRUFDUHBRLEtBQU0sU0FHUnNRLFFBQVNLLEdBQWEsQ0FDcEJDLE1BQU9OLEVBQ1B0USxLQUFNLFlBR1JvUixLQUFJLEVBR0pyQixvQkFFQVcsbUJBRUFDLGdCQUlBcEcsZUFDQzJHLEdBQU1wQixJQUFRbEUsRUFFbkIsQ0toVGtCeUYsQ0FBYzdCLEdBQ3hCOEIsSUFBYyxPQUFrQi9iLEdBQ3RDLElBQUlnYyxJQUFXLEVBQUF2RSxFQUFBLEdBQVVzRSxHQUFhLENBQ3BDaEMsUUM5QmlDa0MsR0Q4QlpGLEdBQVlFLFlDOUJhbEMsR0Q4QkFDLEdDN0J6QyxPQUFTLENBQ2RrQyxRQUFTLENBQ1BDLFVBQVcsR0FDWCxDQUFDRixHQUFZRyxHQUFHLE9BQVEsQ0FDdEIsa0NBQW1DLENBQ2pDRCxVQUFXLEtBR2YsQ0FBQ0YsR0FBWUcsR0FBRyxPQUFRLENBQ3RCRCxVQUFXLE1BR2RwQyxLRGtCRHZFLFVBRUE2RyxRQUFTLFVBQ1Q1RyxXQUFZRixFQUFpQkMsRUFBUzRFLEdBQ3RDRixZQUFhbkIsR0FBa0JvQixHQUMvQnJNLFFBQVEsT0FBUyxDQUFDLEVBQUcsTUNwQ1YsSUFBc0JtTyxHQUFhbEMsR0QyRWhELE9BckNBaUMsSUFBVyxFQUFBdkUsRUFBQSxHQUFVdUUsR0FBVTNGLEdBQy9CMkYsR0FBVzNMLEVBQUtpTSxRQUFPLENBQUNDLEVBQUtDLEtBQWEsRUFBQS9FLEVBQUEsR0FBVThFLEVBQUtDLElBQVdSLElBb0M3REEsRUFDVCxnREU1RUEsTUFDQSxHQURxQixzSUNBckIsTUFBTTFJLEVBQVksQ0FBQyxXQUduQixTQUFTbUosRUFBUS9NLEdBQ2YsT0FBeUIsSUFBbEJBLEVBQU9uUCxNQUNoQixDQVFlLFNBQVNtYyxFQUFnQmhZLEdBQ3RDLE1BQU0sUUFDSmlZLEdBQ0VqWSxFQUNFMlIsR0FBUSxPQUE4QjNSLEVBQU80TyxHQUVuRCxJQUFJc0osRUFBV0QsR0FBVyxHQVExQixPQVBBMVosT0FBTzRaLEtBQUt4RyxHQUFPeUcsT0FBT3JiLFNBQVFMLElBRTlCd2IsR0FEVSxVQUFSeGIsRUFDVXFiLEVBQVFHLEdBQVlsWSxFQUFNdEQsSUFBTyxFQUFBMmIsRUFBQSxHQUFXclksRUFBTXRELElBRWxELEdBQUdxYixFQUFRRyxHQUFZeGIsR0FBTSxFQUFBMmIsRUFBQSxHQUFXM2IsTUFBTyxFQUFBMmIsRUFBQSxHQUFXclksRUFBTXRELEdBQUt1SyxhQUNuRixJQUVLaVIsQ0FDVCxlQzNCQSxNQUFNLEVBQVksQ0FBQyxPQUFRLE9BQVEsdUJBQXdCLFNBQVUscUJBQy9ESSxFQUFhLENBQUMsU0FDZEMsRUFBYSxDQUFDLFNBU3BCLFNBQVMsRUFBUXhOLEdBQ2YsT0FBbUMsSUFBNUJ4TSxPQUFPNFosS0FBS3BOLEdBQUtsUCxNQUMxQixDQTZETyxTQUFTMmMsRUFBa0JDLEdBQ2hDLE1BQWdCLGVBQVRBLEdBQWtDLFVBQVRBLEdBQTZCLE9BQVRBLEdBQTBCLE9BQVRBLENBQ3ZFLENBQ08sTUFBTUMsR0FBcUIsRUFBQUMsRUFBQSxtQkM3RTNCLE1BQU1DLEVBQXdCSCxHQUFRRCxFQUFrQkMsSUFBa0IsWUFBVEEsRUFDM0RJLEVBQXdCTCxFQUMvQk0sRURpRlMsU0FBc0JDLEVBQVEsQ0FBQyxHQUM1QyxNQUFNLGFBQ0pDLEVBQWVOLEVBQWtCLHNCQUNqQ0UsRUFBd0JKLEVBQWlCLHNCQUN6Q0ssRUFBd0JMLEVBQWlCLGdCQUN6Q1MsRUFBa0IsS0FDaEJGLEVBRUVHLEVBQVdsWixJQUNmLE1BQU1tWixFQUFRLEVBQVFuWixFQUFNbVosT0FBU0gsRUFBZWhaLEVBQU1tWixNQUMxRCxPQUFPRixHQUFnQixPQUFTLENBQUMsRUFBR2paLEVBQU8sQ0FDekNtWixVQUNDLEVBSUwsT0FEQUQsRUFBU0UsZ0JBQWlCLEVBQ25CLENBQUMxZCxFQUFLMmQsRUFBZSxDQUFDLE1BRTNCLFFBQWMzZCxHQUFLbUssR0FBVUEsRUFBT3lULFFBQU9DLEtBQW9CLE1BQVRBLEdBQWlCQSxFQUFNSCxvQkFFN0UsTUFDRXJULEtBQU15VCxFQUNOQyxLQUFNQyxFQUNOQyxxQkFBc0JDLEVBQ3RCQyxPQUFRQyxFQUFXLGtCQUNuQkMsR0FDRVYsRUFDRS9kLEdBQVUsT0FBOEIrZCxFQUFjLEdBR3RETSxPQUFxRHJkLElBQTlCc2QsRUFBMENBLEVBQTRCRixHQUFtQyxTQUFsQkEsSUFBNEIsRUFDMUlHLEVBQVNDLElBQWUsRUFTOUIsSUFBSUUsRUFBMEJ4QixFQUVSLFNBQWxCa0IsRUFDRk0sRUFBMEJwQixFQUNqQmMsRUFFVE0sRUFBMEJuQixFQWpIaEMsU0FBcUJuZCxHQUNuQixNQUFzQixpQkFBUkEsR0FHZEEsRUFBSXdELFdBQVcsR0FBSyxFQUN0QixDQTZHZXlOLENBQVlqUixLQUVyQnNlLE9BQTBCMWQsR0FHNUIsTUFBTTJkLEdBQXdCLFFBQW1CdmUsR0FBSyxPQUFTLENBQzdEOGMsa0JBQW1Cd0IsRUFDbkJFLFdBdEJFQSxHQXVCRDVlLElBRUc2ZSxFQUFvQixDQUFDQyxLQUFhQyxLQUN0QyxNQUFNQyxFQUE4QkQsRUFBY0EsRUFBWS9WLEtBQUlpVyxHQUlwQyxtQkFBZEEsR0FBNEJBLEVBQVVDLGlCQUFtQkQsRUFBWXZKLElBQ2pGLElBQ0VtSSxNQUFPc0IsR0FDTHpKLEVBQ0FXLEdBQVEsT0FBOEJYLEVBQU1zSCxHQUVoRCxPQUFPaUMsR0FBVSxPQUFTLENBQ3hCcEIsTUFBTyxFQUFRc0IsR0FBY3pCLEVBQWV5QixHQUMzQzlJLEdBQU8sRUFDUjRJLElBQ0QsR0FDTCxJQUFJRyxFQUFzQk4sRUFFdEJaLEdBQWlCTyxHQUNuQk8sRUFBNEJsZSxNQUFLNEQsSUFDL0IsTUFBTW1aLEVBQVEsRUFBUW5aLEVBQU1tWixPQUFTSCxFQUFlaFosRUFBTW1aLE1BQ3BEd0IsRUExSVUsRUFBQzVVLEVBQU1vVCxJQUMzQkEsRUFBTXlCLFlBQWN6QixFQUFNeUIsV0FBVzdVLElBQVNvVCxFQUFNeUIsV0FBVzdVLEdBQU00VSxlQUNoRXhCLEVBQU15QixXQUFXN1UsR0FBTTRVLGVBR3pCLEtBcUl3QkUsQ0FBa0JyQixFQUFlTCxHQUV4RCxHQUFJd0IsRUFBZ0IsQ0FDbEIsTUFBTUcsRUFBeUIsQ0FBQyxFQU1oQyxPQUxBdmMsT0FBT3djLFFBQVFKLEdBQWdCNWQsU0FBUSxFQUFFaWUsRUFBU0MsTUFDaERILEVBQXVCRSxHQUFnQyxtQkFBZEMsRUFBMkJBLEdBQVUsT0FBUyxDQUFDLEVBQUdqYixFQUFPLENBQ2hHbVosV0FDSThCLENBQVMsSUFFVmxCLEVBQWtCL1osRUFBTzhhLEVBQ2xDLENBRUEsT0FBTyxJQUFJLElBSVh0QixJQUFrQkcsR0FDcEJXLEVBQTRCbGUsTUFBSzRELElBQy9CLE1BQU1tWixFQUFRLEVBQVFuWixFQUFNbVosT0FBU0gsRUFBZWhaLEVBQU1tWixNQUMxRCxNQXRJZSxFQUFDblosRUFBTzZGLEVBQVFzVCxFQUFPcFQsS0FDOUMsSUFBSW1WLEVBQW1CQyxFQUV2QixNQUFNLFdBQ0pDLEVBQWEsQ0FBQyxHQUNacGIsRUFDRXFiLEVBQWlCLEdBQ2pCQyxFQUF5QixNQUFUbkMsR0FBbUUsT0FBekMrQixFQUFvQi9CLEVBQU15QixhQUFvRixPQUFwRE8sRUFBd0JELEVBQWtCblYsU0FBOUcsRUFBd0lvVixFQUFzQmxKLFNBaUJwTSxPQWZJcUosR0FDRkEsRUFBY3ZlLFNBQVF3ZSxJQUNwQixJQUFJQyxHQUFVLEVBQ2RqZCxPQUFPNFosS0FBS29ELEVBQWF2YixPQUFPakQsU0FBUUwsSUFDbEMwZSxFQUFXMWUsS0FBUzZlLEVBQWF2YixNQUFNdEQsSUFBUXNELEVBQU10RCxLQUFTNmUsRUFBYXZiLE1BQU10RCxLQUNuRjhlLEdBQVUsRUFDWixJQUdFQSxHQUNGSCxFQUFlamYsS0FBS3lKLEVBQU9tUyxFQUFnQnVELEVBQWF2YixRQUMxRCxJQUlHcWIsQ0FBYyxFQThHTkksQ0FBaUJ6YixFQXJKVCxFQUFDK0YsRUFBTW9ULEtBQzlCLElBQUlsSCxFQUFXLEdBRVhrSCxHQUFTQSxFQUFNeUIsWUFBY3pCLEVBQU15QixXQUFXN1UsSUFBU29ULEVBQU15QixXQUFXN1UsR0FBTWtNLFdBQ2hGQSxFQUFXa0gsRUFBTXlCLFdBQVc3VSxHQUFNa00sVUFHcEMsTUFBTW9KLEVBQWlCLENBQUMsRUFLeEIsT0FKQXBKLEVBQVNsVixTQUFRMmUsSUFDZixNQUFNaGYsRUFBTXNiLEVBQWdCMEQsRUFBVzFiLE9BQ3ZDcWIsRUFBZTNlLEdBQU9nZixFQUFXbkMsS0FBSyxJQUVqQzhCLENBQWMsRUF5SWtCTSxDQUFpQm5DLEVBQWVMLEdBQVFBLEVBQU9LLEVBQWMsSUFJM0ZLLEdBQ0hTLEVBQTRCbGUsS0FBSzhjLEdBR25DLE1BQU0wQyxFQUF3QnRCLEVBQTRCemUsT0FBU3dlLEVBQVl4ZSxPQUUvRSxHQUFJOEksTUFBTXNHLFFBQVFtUCxJQUFhd0IsRUFBd0IsRUFBRyxDQUN4RCxNQUFNQyxFQUFlLElBQUlsWCxNQUFNaVgsR0FBdUJFLEtBQUssSUFFM0RwQixFQUFzQixJQUFJTixLQUFheUIsR0FDdkNuQixFQUFvQjVPLElBQU0sSUFBSXNPLEVBQVN0TyxPQUFRK1AsRUFDakQsS0FBK0IsbUJBQWJ6QixHQUdsQkEsRUFBU0ksaUJBQW1CSixJQUUxQk0sRUFBc0JxQixJQUNwQixJQUNFNUMsTUFBT3NCLEdBQ0xzQixFQUNBcEssR0FBUSxPQUE4Qm9LLEVBQU94RCxHQUVqRCxPQUFPNkIsR0FBUyxPQUFTLENBQ3ZCakIsTUFBTyxFQUFRc0IsR0FBY3pCLEVBQWV5QixHQUMzQzlJLEdBQU8sR0FvQmQsT0FoQmtCc0ksRUFBc0JTLEtBQXdCSixFQWdCaEQsRUFPbEIsT0FKSUwsRUFBc0IrQixhQUN4QjdCLEVBQWtCNkIsV0FBYS9CLEVBQXNCK0IsWUFHaEQ3QixDQUFpQixDQUU1QixDQzNPZThCLENBQWEsQ0FDMUJqRCxhQUFZLElBQ1pKLDBCQUVGLHdGQ05lLFNBQVMsR0FBYyxNQUNwQzVZLEVBQUssS0FDTCtGLElBRUEsT0NKYSxVQUF1QixNQUNwQy9GLEVBQUssS0FDTCtGLEVBQUksYUFDSmlULElBRUEsTUFDTXJPLEVDUE8sU0FBdUJ1UixHQUNwQyxNQUFNLE1BQ0ovQyxFQUFLLEtBQ0xwVCxFQUFJLE1BQ0ovRixHQUNFa2MsRUFFSixPQUFLL0MsR0FBVUEsRUFBTXlCLFlBQWV6QixFQUFNeUIsV0FBVzdVLElBQVVvVCxFQUFNeUIsV0FBVzdVLEdBQU1vVyxjQUkvRSxFQUFBQyxFQUFBLEdBQWFqRCxFQUFNeUIsV0FBVzdVLEdBQU1vVyxhQUFjbmMsR0FIaERBLENBSVgsQ0RMc0JxYyxDQUFjLENBQ2hDbEQsT0FGWSxFQUFBbUQsRUFBQSxHQUFTdEQsR0FHckJqVCxPQUNBL0YsVUFFRixPQUFPMkssQ0FDVCxDRFJTLENBQW9CLENBQ3pCM0ssUUFDQStGLE9BQ0FpVCxhQUFZLEtBRWhCLGdER1ZBLGdCQUF5Qiw0SUNBbEIsU0FBU3VELEVBQXVCOUMsR0FDckMsT0FBTyxFQUFBK0MsRUFBQSxHQUFxQixhQUFjL0MsRUFDNUMsRUFDdUIsYUFBdUIsYUFBYyxDQUFDLE9BQVEsZUFBZ0IsaUJBQWtCLGNBQWUsYUFBYyxnQkFBaUIsa0JBQW1CLGdCQUFpQixpQkFBa0IsZ0NDRjNNLE1BQU03SyxFQUFZLENBQUMsV0FBWSxZQUFhLFFBQVMsWUFBYSxXQUFZLFlBQWEsaUJBQWtCLGNBQWUsV0F3QnRINk4sR0FBYyxFQUFBM0QsRUFBQSxJQUFPLE1BQU8sQ0FDaEMvUyxLQUFNLGFBQ04wVCxLQUFNLE9BQ05NLGtCQUFtQixDQUFDL1osRUFBTzZGLEtBQ3pCLE1BQU0sV0FDSnVWLEdBQ0VwYixFQUNKLE1BQU8sQ0FBQzZGLEVBQU9oRyxLQUEyQixZQUFyQnViLEVBQVd6RSxPQUF1QjlRLEVBQU8sU0FBUSxFQUFBd1MsRUFBQSxHQUFXK0MsRUFBV3pFLFVBQVc5USxFQUFPLFlBQVcsRUFBQXdTLEVBQUEsR0FBVytDLEVBQVdsSyxhQUFhLEdBUDVJLEVBU2pCLEVBQ0RpSSxRQUNBaUMsaUJBRUEsSUFBSXNCLEVBQW9CQyxFQUF1QkMsRUFBcUJDLEVBQXVCQyxFQUFtQkMsRUFBdUJDLEVBQW9CQyxFQUF1QkMsRUFBb0JDLEVBQXVCQyxFQUF1QkMsRUFBVUMsRUFBd0JDLEVBQVdDLEVBQWtCQyxFQUFXQyxFQUU1VCxNQUFPLENBQ0xDLFdBQVksT0FDWkMsTUFBTyxNQUNQekosT0FBUSxNQUNSMEosUUFBUyxlQUNUL0IsS0FBTSxlQUNOaFUsV0FBWSxFQUNaZ1csV0FBd0QsT0FBM0NwQixFQUFxQnZELEVBQU0zRCxjQUF1RixPQUF0RG1ILEVBQXdCRCxFQUFtQnhXLGFBQXJELEVBQWdGeVcsRUFBc0IvWCxLQUFLOFgsRUFBb0IsT0FBUSxDQUNwTWxKLFNBQXVELE9BQTVDb0osRUFBc0J6RCxFQUFNM0QsY0FBMEYsT0FBekRxSCxFQUF3QkQsRUFBb0JwSixlQUF0RCxFQUFtRnFKLEVBQXNCbkosVUFFekt4QyxTQUFVLENBQ1I2TSxRQUFTLFVBQ1RDLE9BQWtELE9BQXpDbEIsRUFBb0IzRCxFQUFNcEksYUFBc0YsT0FBdERnTSxFQUF3QkQsRUFBa0JyTCxjQUFwRCxFQUFnRnNMLEVBQXNCblksS0FBS2tZLEVBQW1CLE1BQVEsVUFDL0xtQixRQUFvRCxPQUExQ2pCLEVBQXFCN0QsRUFBTXBJLGFBQXVGLE9BQXZEa00sRUFBd0JELEVBQW1CdkwsY0FBckQsRUFBaUZ3TCxFQUFzQnJZLEtBQUtvWSxFQUFvQixNQUFRLFNBQ25Na0IsT0FBbUQsT0FBMUNoQixFQUFxQi9ELEVBQU1wSSxhQUF1RixPQUF2RG9NLEVBQXdCRCxFQUFtQnpMLGNBQXJELEVBQWlGMEwsRUFBc0J2WSxLQUFLc1ksRUFBb0IsTUFBUSxVQUNsTTlCLEVBQVdsSyxVQUVieUYsTUFBdU0sT0FBL0x5RyxFQUFzRSxPQUE3Q0MsR0FBWWxFLEVBQU14RCxNQUFRd0QsR0FBT3JJLFVBQXFGLE9BQXhEd00sRUFBeUJELEVBQVNqQyxFQUFXekUsYUFBdkQsRUFBa0YyRyxFQUF1QjdNLE1BQWdCMk0sRUFBd0IsQ0FDcE8vTixPQUF1RCxPQUE5Q2tPLEdBQWFwRSxFQUFNeEQsTUFBUXdELEdBQU9ySSxVQUFxRSxPQUF4QzBNLEVBQW1CRCxFQUFVbE8sYUFBdkMsRUFBa0VtTyxFQUFpQmxPLE9BQ2pKTCxTQUF5RCxPQUE5Q3dPLEdBQWF0RSxFQUFNeEQsTUFBUXdELEdBQU9ySSxVQUFxRSxPQUF4QzRNLEVBQW1CRCxFQUFVcE8sYUFBdkMsRUFBa0VxTyxFQUFpQnpPLFNBQ25KOE8sYUFBU3poQixHQUNUOGUsRUFBV3pFLE9BQ2QsSUFFR3dILEVBQXVCLGNBQWlCLFNBQWlCQyxFQUFTelgsR0FDdEUsTUFBTTNHLEdBQVEsRUFBQXFlLEVBQUEsR0FBYyxDQUMxQnJlLE1BQU9vZSxFQUNQclksS0FBTSxnQkFHRixTQUNKOUYsRUFBUSxVQUNSd00sRUFBUyxNQUNUa0ssRUFBUSxVQUFTLFVBQ2pCMkgsRUFBWSxNQUFLLFNBQ2pCcE4sRUFBVyxTQUFRLFVBQ25CcU4sRUFBUyxlQUNUQyxHQUFpQixFQUFLLFlBQ3RCQyxFQUFXLFFBQ1hDLEVBQVUsYUFDUjFlLEVBQ0UyUixHQUFRLE9BQThCM1IsRUFBTzRPLEdBRTdDd00sR0FBYSxPQUFTLENBQUMsRUFBR3BiLEVBQU8sQ0FDckMyVyxRQUNBMkgsWUFDQXBOLFdBQ0F5TixpQkFBa0JQLEVBQVFsTixTQUMxQnNOLGlCQUNBRSxZQUdJRSxFQUFPLENBQUMsRUFFVEosSUFDSEksRUFBS0YsUUFBVUEsR0FHakIsTUFBTUcsRUFyRmtCekQsS0FDeEIsTUFBTSxNQUNKekUsRUFBSyxTQUNMekYsRUFBUSxRQUNSMk4sR0FDRXpELEVBQ0UwRCxFQUFRLENBQ1pqZixLQUFNLENBQUMsT0FBa0IsWUFBVjhXLEdBQXVCLFNBQVEsRUFBQTBCLEVBQUEsR0FBVzFCLEtBQVUsWUFBVyxFQUFBMEIsRUFBQSxHQUFXbkgsT0FFM0YsT0FBTyxFQUFBNk4sRUFBQSxHQUFlRCxFQUFPdkMsRUFBd0JzQyxFQUFRLEVBNEU3Q0csQ0FBa0I1RCxHQUNsQyxPQUFvQixVQUFNcUIsR0FBYSxPQUFTLENBQzlDd0MsR0FBSVgsRUFDSjdSLFdBQVcsT0FBS29TLEVBQVFoZixLQUFNNE0sR0FDOUIyTyxXQUFZQSxFQUNaOEQsVUFBVyxRQUNYdkksTUFBTzRILEVBQ1AsZUFBZUUsUUFBY25pQixFQUM3QjZpQixLQUFNVixFQUFjLFdBQVFuaUIsRUFDNUJxSyxJQUFLQSxHQUNKaVksRUFBTWpOLEVBQU8sQ0FDZDFSLFNBQVUsQ0FBQ0EsRUFBVXdlLEdBQTJCLFNBQUssUUFBUyxDQUM1RHhlLFNBQVV3ZSxJQUNQLFFBRVQsSUEyRkFOLEVBQVFpQixRQUFVLFVBQ2xCLFVDdE1lLFNBQVMvUSxFQUFjZ1IsRUFBTUMsR0FDMUMsTUFBTUMsRUFBWSxDQUFDdmYsRUFBTzJHLEtBQXFCLFNBQUssR0FBUyxPQUFTLENBQ3BFLGNBQWUsR0FBRzJZLFFBQ2xCM1ksSUFBS0EsR0FDSjNHLEVBQU8sQ0FDUkMsU0FBVW9mLEtBVVosT0FEQUUsRUFBVUgsUUFBVSxVQUNBLE9BQXlCLGFBQWlCRyxHQUNoRSxnREN2QkEsZ0JBQXVCLHllQ0F2QixnQkFBb0Msd0JDQXBDLFFDRGUsU0FBNEJDLEVBQVdDLEdBRWxELE1BQU8sSUFBTSxJQWFqQiw0Q0NkQSxRQ0FlLFNBQTRCQyxFQUFzQkgsR0FFN0QsTUFBTyxJQUFNLElBMEJqQixFQzVCQSxVQUFxQiwwQkNBckIsUUNEZSxTQUF5QnZmLEVBQU8yZixFQUFVbkcsRUFBZW9HLEVBQVVDLEdBRTlFLE9BQU8sSUFVWCw4Q0NRTyxNQUFNQyxFQUE4QixDQUN6Q0MsVUFBV0MsSUFDVEMsUUFBUUMsS0FBSyxDQUFDLDZHQUE4RyxHQUFJLGlHQUFrRyxHQUFJLG1HQUFvRyxHQUFJLDBFQUEwRXJlLEtBQUssT0FDN1pzZSxFQUFBLFlBQTZCSCxFQUFVLCtEQ3RCM0MsUUNBZSxTQUFzQnBlLEVBQVN3ZSxHQUM1QyxPQUFvQixpQkFBcUJ4ZSxLQUF3RCxJQUE1Q3dlLEVBQVNwaEIsUUFBUTRDLEVBQVE3QixLQUFLcWYsUUFDckYsZ0RDRkEsZ0JBQTRCLGdEQ0E1QixnQkFBMEIsOERDQTFCLFFDQ2UsVUFBdUIsV0FDcENpQixFQUNBbFQsUUFBU21ULEVBQVcsS0FDcEJ2YSxFQUFJLE1BQ0p3YSxFQUFRLFVBR1IsTUFDRTFULFFBQVMyVCxHQUNQLGNBQTRCbGtCLElBQWYrakIsSUFDVkksRUFBWUMsR0FBWSxXQUFlSixHQXdCOUMsTUFBTyxDQXZCT0UsRUFBZUgsRUFBYUksRUFrQlgsZUFBa0JFLElBQzFDSCxHQUNIRSxFQUFTQyxFQUNYLEdBQ0MsSUFFTCxnRENwQ0EsZ0JBQWdDLGdEQ0FoQyxnQkFBK0IsZ0RDQS9CLGNBQXlCLGdEQ0F6QixnQkFBb0IsOERDQ3BCLElBRUlDLEVBRkFDLEdBQW1CLEVBQ25CQyxHQUEwQixFQUU5QixNQUFNQyxFQUFzQixDQUMxQmpTLE1BQU0sRUFDTi9QLFFBQVEsRUFDUmlpQixLQUFLLEVBQ0xDLEtBQUssRUFDTEMsT0FBTyxFQUNQQyxVQUFVLEVBQ1ZDLFFBQVEsRUFDUkMsTUFBTSxFQUNOQyxPQUFPLEVBQ1BDLE1BQU0sRUFDTkMsTUFBTSxFQUNOQyxVQUFVLEVBQ1Ysa0JBQWtCLEdBdUNwQixTQUFTQyxFQUFjQyxHQUNqQkEsRUFBTUMsU0FBV0QsRUFBTUUsUUFBVUYsRUFBTUcsVUFJM0NqQixHQUFtQixFQUNyQixDQVVBLFNBQVNrQixJQUNQbEIsR0FBbUIsQ0FDckIsQ0FFQSxTQUFTbUIsSUFDc0IsV0FBekJ4bUIsS0FBS3ltQixpQkFLSG5CLElBQ0ZELEdBQW1CLEVBR3pCLENDdEZBLFFEMEhlLFdBQ2IsTUFBTWxhLEVBQU0sZUFBa0IvRyxJQW5DaEMsSUFBaUJzaUIsRUFvQ0QsTUFBUnRpQixLQXBDU3NpQixFQXFDSHRpQixFQUFLdWlCLGVBcENiQyxpQkFBaUIsVUFBV1YsR0FBZSxHQUMvQ1EsRUFBSUUsaUJBQWlCLFlBQWFMLEdBQW1CLEdBQ3JERyxFQUFJRSxpQkFBaUIsY0FBZUwsR0FBbUIsR0FDdkRHLEVBQUlFLGlCQUFpQixhQUFjTCxHQUFtQixHQUN0REcsRUFBSUUsaUJBQWlCLG1CQUFvQkosR0FBd0IsR0FpQy9ELEdBQ0MsSUFDR0ssRUFBb0IsVUFBYSxHQXlDdkMsTUFBTyxDQUNMQSxvQkFDQUMsUUFYRixTQUE0QlgsR0FDMUIsUUF6REosU0FBd0JBLEdBQ3RCLE1BQU0sT0FDSlksR0FDRVosRUFFSixJQUNFLE9BQU9ZLEVBQU9DLFFBQVEsaUJBS3hCLENBSkUsTUFBT3ZNLEdBSVQsQ0FJQSxPQUFPNEssR0E1RlQsU0FBdUNqaEIsR0FDckMsTUFBTSxLQUNKRyxFQUFJLFFBQ0owaUIsR0FDRTdpQixFQUVKLFFBQWdCLFVBQVo2aUIsSUFBdUIxQixFQUFvQmhoQixJQUFVSCxFQUFLOGlCLFdBSTlDLGFBQVpELElBQTJCN2lCLEVBQUs4aUIsWUFJaEM5aUIsRUFBSytpQixpQkFLWCxDQXlFNkJDLENBQThCTCxFQUMzRCxDQXlDUU0sQ0FBZWxCLEtBQ2pCVSxFQUFrQnhWLFNBQVUsR0FDckIsRUFJWCxFQUtFaVcsT0F2Q0YsV0FNRSxRQUFJVCxFQUFrQnhWLFVBS3BCaVUsR0FBMEIsRUFDMUJpQyxPQUFPQyxhQUFhcEMsR0FDcEJBLEVBQWlDbUMsT0FBT0UsWUFBVyxLQUNqRG5DLEdBQTBCLENBQUssR0FDOUIsS0FDSHVCLEVBQWtCeFYsU0FBVSxHQUNyQixFQUlYLEVBbUJFbEcsTUFFSixnREV6S0EsZ0JBTmtDLGNBQW9CLDRFQ0N2QyxTQUFTMlYsSUFRdEIsT0FQYyxhQUFpQixJQVFqQyw0RkNUSTRHLEVBQWtCLG85SEFZdEIsU0FWaUMsUUFBUSxTQUFVekssR0FDakQsT0FBT3lLLEVBQWdCQyxLQUFLMUssSUFBZ0MsTUFBdkJBLEVBQUt2WixXQUFXLElBRTNCLE1BQXZCdVosRUFBS3ZaLFdBQVcsSUFFaEJ1WixFQUFLdlosV0FBVyxHQUFLLEVBQzFCLCtDQ0ZJa2tCLEVBQTJCLEVBRTNCQyxFQUEyQixTQUFrQzNtQixHQUMvRCxNQUFlLFVBQVJBLENBQ1QsRUFFSTRtQixFQUE4QixTQUFxQzVuQixHQUNyRSxNQUFzQixpQkFBUkEsR0FHZEEsRUFBSXdELFdBQVcsR0FBSyxHQUFLa2tCLEVBQTJCQyxDQUN0RCxFQUNJRSxFQUE0QixTQUFtQzduQixFQUFLSixFQUFTa29CLEdBQy9FLElBQUloTCxFQUVKLEdBQUlsZCxFQUFTLENBQ1gsSUFBSW1vQixFQUEyQm5vQixFQUFRa2Qsa0JBQ3ZDQSxFQUFvQjljLEVBQUlnb0IsdUJBQXlCRCxFQUEyQixTQUFVOUQsR0FDcEYsT0FBT2prQixFQUFJZ29CLHNCQUFzQi9ELElBQWE4RCxFQUF5QjlELEVBQ3pFLEVBQUk4RCxDQUNOLENBTUEsTUFKaUMsbUJBQXRCakwsR0FBb0NnTCxJQUM3Q2hMLEVBQW9COWMsRUFBSWdvQix1QkFHbkJsTCxDQUNULEVBSUltTCxFQUFZLFNBQW1CM1MsR0FDakMsSUFBSWxMLEVBQVFrTCxFQUFLbEwsTUFDYkgsRUFBYXFMLEVBQUtyTCxXQUNsQmdILEVBQWNxRSxFQUFLckUsWUFNdkIsT0FMQSxRQUFlN0csRUFBT0gsRUFBWWdILElBQ3RCLFFBQXlDLFdBQ25ELE9BQU8sUUFBYTdHLEVBQU9ILEVBQVlnSCxFQUN6QyxJQUVPLElBQ1QsRUN4Q0EsSUFHSWlYLEVEdUNlLFNBQVMzSCxFQUFhdmdCLEVBQUtKLEdBTzVDLElBRUkwUSxFQUNBNlgsRUFIQUwsRUFBUzluQixFQUFJOGUsaUJBQW1COWUsRUFDaENvb0IsRUFBVU4sR0FBVTluQixFQUFJcW9CLGdCQUFrQnJvQixPQUk5QlksSUFBWmhCLElBQ0YwUSxFQUFpQjFRLEVBQVE0ZSxNQUN6QjJKLEVBQWtCdm9CLEVBQVFpbkIsUUFHNUIsSUFBSS9KLEVBQW9CK0ssRUFBMEI3bkIsRUFBS0osRUFBU2tvQixHQUM1RFEsRUFBMkJ4TCxHQUFxQjhLLEVBQTRCUSxHQUM1RUcsR0FBZUQsRUFBeUIsTUFDNUMsT0FBTyxXQUNMLElBQUlyWSxFQUFPdVksVUFDUHJlLEVBQVMyZCxRQUFtQ2xuQixJQUF6QlosRUFBSW1QLGlCQUFpQ25QLEVBQUltUCxpQkFBaUJ4TCxNQUFNLEdBQUssR0FNNUYsUUFKdUIvQyxJQUFuQjBQLEdBQ0ZuRyxFQUFPekosS0FBSyxTQUFXNFAsRUFBaUIsS0FHM0IsTUFBWEwsRUFBSyxTQUE4QnJQLElBQWhCcVAsRUFBSyxHQUFHRyxJQUM3QmpHLEVBQU96SixLQUFLK25CLE1BQU10ZSxFQUFROEYsT0FDckIsQ0FLTDlGLEVBQU96SixLQUFLdVAsRUFBSyxHQUFHLElBSXBCLElBSEEsSUFBSTNFLEVBQU0yRSxFQUFLOVAsT0FDWDRCLEVBQUksRUFFREEsRUFBSXVKLEVBQUt2SixJQUtkb0ksRUFBT3pKLEtBQUt1UCxFQUFLbE8sR0FBSWtPLEVBQUssR0FBR2xPLEdBRWpDLENBR0EsSUFBSTJtQixHQUFTLElBQUFDLElBQWlCLFNBQVVya0IsRUFBTzhGLEVBQU9hLEdBQ3BELElBQUkyZCxFQUFXTCxHQUFlamtCLEVBQU1pZixJQUFNNkUsRUFDdENyWCxFQUFZLEdBQ1o4WCxFQUFzQixHQUN0QjVaLEVBQWMzSyxFQUVsQixHQUFtQixNQUFmQSxFQUFNbVosTUFBZSxDQUd2QixJQUFLLElBQUl6YyxLQUZUaU8sRUFBYyxDQUFDLEVBRUMzSyxFQUNkMkssRUFBWWpPLEdBQU9zRCxFQUFNdEQsR0FHM0JpTyxFQUFZd08sT0FBUSxJQUFBdlMsWUFBVyxFQUFBNGQsRUFDakMsQ0FFK0IsaUJBQXBCeGtCLEVBQU15TSxVQUNmQSxHQUFZLFFBQW9CM0csRUFBTUUsV0FBWXVlLEVBQXFCdmtCLEVBQU15TSxXQUNqRCxNQUFuQnpNLEVBQU15TSxZQUNmQSxFQUFZek0sRUFBTXlNLFVBQVksS0FHaEMsSUFBSTlHLEdBQWEsT0FBZ0JFLEVBQU9KLE9BQU84ZSxHQUFzQnplLEVBQU1FLFdBQVkyRSxHQUN2RjhCLEdBQWEzRyxFQUFNcEosSUFBTSxJQUFNaUosRUFBV0ksVUFFbEJ6SixJQUFwQnVuQixJQUNGcFgsR0FBYSxJQUFNb1gsR0FHckIsSUFBSVksRUFBeUJSLFFBQXFDM25CLElBQXRCa2MsRUFBa0M4SyxFQUE0QmdCLEdBQVlOLEVBQ2xIVSxFQUFXLENBQUMsRUFFaEIsSUFBSyxJQUFJeFosS0FBUWxMLEVBQ1hpa0IsR0FBd0IsT0FBVC9ZLEdBR25CdVosRUFBdUJ2WixLQUNyQndaLEVBQVN4WixHQUFRbEwsRUFBTWtMLElBTTNCLE9BRkF3WixFQUFTalksVUFBWUEsRUFDckJpWSxFQUFTL2QsSUFBTUEsR0FDSyxJQUFBeEosZUFBYyxFQUFBd25CLFNBQVUsTUFBbUIsSUFBQXhuQixlQUFjd21CLEVBQVcsQ0FDdEY3ZCxNQUFPQSxFQUNQSCxXQUFZQSxFQUNaZ0gsWUFBaUMsaUJBQWIyWCxLQUNMLElBQUFubkIsZUFBY21uQixFQUFVSSxHQUMzQyxJQXdCQSxPQXZCQU4sRUFBTzlFLGlCQUFpQ2hqQixJQUFuQjBQLEVBQStCQSxFQUFpQixXQUFnQyxpQkFBWjhYLEVBQXVCQSxFQUFVQSxFQUFReEUsYUFBZXdFLEVBQVEvZCxNQUFRLGFBQWUsSUFDaExxZSxFQUFPakksYUFBZXpnQixFQUFJeWdCLGFBQzFCaUksRUFBTzVKLGVBQWlCNEosRUFDeEJBLEVBQU9MLGVBQWlCRCxFQUN4Qk0sRUFBT3ZaLGlCQUFtQmhGLEVBQzFCdWUsRUFBT1Ysc0JBQXdCbEwsRUFDL0JqYSxPQUFPcVAsZUFBZXdXLEVBQVEsV0FBWSxDQUN4QzFsQixNQUFPLFdBTUwsTUFBTyxJQUFNbWxCLENBQ2YsSUFHRk8sRUFBT1EsY0FBZ0IsU0FBVUMsRUFBU0MsR0FDeEMsT0FBTzdJLEVBQWE0SSxHQUFTLE9BQVMsQ0FBQyxFQUFHdnBCLEVBQVN3cEIsRUFBYSxDQUM5RHRNLGtCQUFtQitLLEVBQTBCYSxFQUFRVSxHQUFhLE1BQ2hFWCxXQUFNLEVBQVF0ZSxFQUNwQixFQUVPdWUsQ0FDVCxDQUNGLEVDbEtnQixPQUhMLENBQUMsSUFBSyxPQUFRLFVBQVcsT0FBUSxVQUFXLFFBQVMsUUFBUyxJQUFLLE9BQVEsTUFBTyxNQUFPLE1BQU8sYUFBYyxPQUFRLEtBQU0sU0FBVSxTQUFVLFVBQVcsT0FBUSxPQUFRLE1BQU8sV0FBWSxPQUFRLFdBQVksS0FBTSxNQUFPLFVBQVcsTUFBTyxTQUFVLE1BQU8sS0FBTSxLQUFNLEtBQU0sUUFBUyxXQUFZLGFBQWMsU0FBVSxTQUFVLE9BQVEsS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sT0FBUSxTQUFVLFNBQVUsS0FBTSxPQUFRLElBQUssU0FBVSxNQUFPLFFBQVMsTUFBTyxNQUFPLFNBQVUsUUFBUyxTQUFVLEtBQU0sT0FBUSxPQUFRLE1BQU8sT0FBUSxVQUFXLE9BQVEsV0FBWSxPQUFRLFFBQVMsTUFBTyxXQUFZLFNBQVUsS0FBTSxXQUFZLFNBQVUsU0FBVSxJQUFLLFFBQVMsVUFBVyxNQUFPLFdBQVksSUFBSyxLQUFNLEtBQU0sT0FBUSxJQUFLLE9BQVEsU0FBVSxVQUFXLFNBQVUsUUFBUyxTQUFVLE9BQVEsU0FBVSxRQUFTLE1BQU8sVUFBVyxNQUFPLFFBQVMsUUFBUyxLQUFNLFdBQVksUUFBUyxLQUFNLFFBQVMsT0FBUSxRQUFTLEtBQU0sUUFBUyxJQUFLLEtBQU0sTUFBTyxRQUFTLE1BQzc3QixTQUFVLFdBQVksT0FBUSxVQUFXLGdCQUFpQixJQUFLLFFBQVMsT0FBUSxpQkFBa0IsT0FBUSxPQUFRLFVBQVcsVUFBVyxXQUFZLGlCQUFrQixPQUFRLE9BQVEsTUFBTyxPQUFRLFNBR2hNcm5CLFNBQVEsU0FBVTBsQixHQUVyQm1CLEVBQVVuQixHQUFXbUIsRUFBVW5CLEVBQ2pDLElBRUEsVUNYZSxTQUFTM0osRUFBT3BkLEVBQUtKLEdBaUJsQyxPQWhCc0IsRUFBU0ksRUFBS0osRUFpQnRDLENBRU8sTUFBTXlwQixFQUF5QixDQUFDcnBCLEVBQUtzcEIsS0FHdENyZ0IsTUFBTXNHLFFBQVF2UCxFQUFJbVAsb0JBQ3BCblAsRUFBSW1QLGlCQUFtQm1hLEVBQVV0cEIsRUFBSW1QLGtCQUN2Qyw0R0MxQkssTUFBTW9hLEVBQVMsQ0FDcEJDLEdBQUksRUFFSkMsR0FBSSxJQUVKQyxHQUFJLElBRUpDLEdBQUksS0FFSkMsR0FBSSxNQUdBQyxFQUFxQixDQUd6QnBOLEtBQU0sQ0FBQyxLQUFNLEtBQU0sS0FBTSxLQUFNLE1BQy9CVCxHQUFJaGIsR0FBTyxxQkFBcUJ1b0IsRUFBT3ZvQixTQUVsQyxTQUFTOG9CLEVBQWtCeGxCLEVBQU95bEIsRUFBV0MsR0FDbEQsTUFBTXZNLEVBQVFuWixFQUFNbVosT0FBUyxDQUFDLEVBRTlCLEdBQUl4VSxNQUFNc0csUUFBUXdhLEdBQVksQ0FDNUIsTUFBTUUsRUFBbUJ4TSxFQUFNNUIsYUFBZWdPLEVBQzlDLE9BQU9FLEVBQVU3TixRQUFPLENBQUNDLEVBQUsrTixFQUFNM21CLEtBQ2xDNFksRUFBSThOLEVBQWlCak8sR0FBR2lPLEVBQWlCeE4sS0FBS2xaLEtBQVd5bUIsRUFBbUJELEVBQVV4bUIsSUFDL0U0WSxJQUNOLENBQUMsRUFDTixDQUVBLEdBQXlCLGlCQUFkNE4sRUFBd0IsQ0FDakMsTUFBTUUsRUFBbUJ4TSxFQUFNNUIsYUFBZWdPLEVBQzlDLE9BQU9obkIsT0FBTzRaLEtBQUtzTixHQUFXN04sUUFBTyxDQUFDQyxFQUFLZ08sS0FFekMsSUFBNEUsSUFBeEV0bkIsT0FBTzRaLEtBQUt3TixFQUFpQlYsUUFBVUEsR0FBUWptQixRQUFRNm1CLEdBRXpEaE8sRUFEaUI4TixFQUFpQmpPLEdBQUdtTyxJQUNyQkgsRUFBbUJELEVBQVVJLEdBQWFBLE9BQ3JELENBQ0wsTUFBTUMsRUFBU0QsRUFDZmhPLEVBQUlpTyxHQUFVTCxFQUFVSyxFQUMxQixDQUVBLE9BQU9qTyxDQUFHLEdBQ1QsQ0FBQyxFQUNOLENBR0EsT0FEZTZOLEVBQW1CRCxFQUVwQyxDQStCTyxTQUFTTSxFQUE0QkMsRUFBbUIsQ0FBQyxHQUM5RCxJQUFJQyxFQU9KLE9BTDhFLE9BQWxEQSxFQUF3QkQsRUFBaUI3TixXQUFnQixFQUFTOE4sRUFBc0JyTyxRQUFPLENBQUNDLEVBQUtuYixLQUUvSG1iLEVBRDJCbU8sRUFBaUJ0TyxHQUFHaGIsSUFDckIsQ0FBQyxFQUNwQm1iLElBQ04sQ0FBQyxLQUN5QixDQUFDLENBQ2hDLENBQ08sU0FBU3FPLEVBQXdCQyxFQUFnQjVNLEdBQ3RELE9BQU80TSxFQUFldk8sUUFBTyxDQUFDQyxFQUFLbmIsS0FDakMsTUFBTTBwQixFQUFtQnZPLEVBQUluYixHQU83QixRQU40QjBwQixHQUE2RCxJQUF6QzduQixPQUFPNFosS0FBS2lPLEdBQWtCdnFCLGdCQUdyRWdjLEVBQUluYixHQUdObWIsQ0FBRyxHQUNUMEIsRUFDTCxDQUNPLFNBQVM4TSxFQUF3QkwsS0FBcUJuZ0IsR0FDM0QsTUFBTXlnQixFQUFtQlAsRUFBNEJDLEdBQy9DTyxFQUFlLENBQUNELEtBQXFCemdCLEdBQVErUixRQUFPLENBQUN4WCxFQUFNQyxLQUFTLE9BQVVELEVBQU1DLElBQU8sQ0FBQyxHQUNsRyxPQUFPNmxCLEVBQXdCM25CLE9BQU80WixLQUFLbU8sR0FBbUJDLEVBQ2hFLENBNkJPLFNBQVNDLEdBQ2R2QixPQUFRd0IsRUFDUmxQLFlBQWFvTyxFQUNiZSxLQUFNQyxJQUVOLE1BQU1ELEVBQU9DLEdBOUJSLFNBQWdDRixFQUFrQmQsR0FFdkQsR0FBZ0MsaUJBQXJCYyxFQUNULE1BQU8sQ0FBQyxFQUdWLE1BQU1DLEVBQU8sQ0FBQyxFQUNSRSxFQUFrQnJvQixPQUFPNFosS0FBS3dOLEdBZ0JwQyxPQWRJaGhCLE1BQU1zRyxRQUFRd2IsR0FDaEJHLEVBQWdCN3BCLFNBQVEsQ0FBQzhvQixFQUFZcG9CLEtBQy9CQSxFQUFJZ3BCLEVBQWlCNXFCLFNBQ3ZCNnFCLEVBQUtiLElBQWMsRUFDckIsSUFHRmUsRUFBZ0I3cEIsU0FBUThvQixJQUNjLE1BQWhDWSxFQUFpQlosS0FDbkJhLEVBQUtiLElBQWMsRUFDckIsSUFJR2EsQ0FDVCxDQU02QkcsQ0FBdUJKLEVBQWtCZCxHQUM5RHhOLEVBQU81WixPQUFPNFosS0FBS3VPLEdBRXpCLEdBQW9CLElBQWhCdk8sRUFBS3RjLE9BQ1AsT0FBTzRxQixFQUdULElBQUkvakIsRUFDSixPQUFPeVYsRUFBS1AsUUFBTyxDQUFDQyxFQUFLZ08sRUFBWXBvQixLQUMvQmtILE1BQU1zRyxRQUFRd2IsSUFDaEI1TyxFQUFJZ08sR0FBcUMsTUFBdkJZLEVBQWlCaHBCLEdBQWFncEIsRUFBaUJocEIsR0FBS2dwQixFQUFpQi9qQixHQUN2RkEsRUFBV2pGLEdBQzBCLGlCQUFyQmdwQixHQUNoQjVPLEVBQUlnTyxHQUE4QyxNQUFoQ1ksRUFBaUJaLEdBQXNCWSxFQUFpQlosR0FBY1ksRUFBaUIvakIsR0FDekdBLEVBQVdtakIsR0FFWGhPLEVBQUlnTyxHQUFjWSxFQUdiNU8sSUFDTixDQUFDLEVBQ04sMEZDNUpBLFNBQVNpUCxFQUFNcG9CLEVBQU9xb0IsRUFBTSxFQUFHQyxFQUFNLEdBT25DLE9BQU81b0IsS0FBSzJvQixJQUFJM29CLEtBQUs0b0IsSUFBSUQsRUFBS3JvQixHQUFRc29CLEVBQ3hDLENBbUNPLFNBQVNDLEVBQWV0USxHQUU3QixHQUFJQSxFQUFNNVcsS0FDUixPQUFPNFcsRUFHVCxHQUF3QixNQUFwQkEsRUFBTXVRLE9BQU8sR0FDZixPQUFPRCxFQWxDSixTQUFrQnRRLEdBQ3ZCQSxFQUFRQSxFQUFNdFgsTUFBTSxHQUNwQixNQUFNOG5CLEVBQUssSUFBSUMsT0FBTyxPQUFPelEsRUFBTTlhLFFBQVUsRUFBSSxFQUFJLEtBQU0sS0FDM0QsSUFBSXdyQixFQUFTMVEsRUFBTW5TLE1BQU0yaUIsR0FNekIsT0FKSUUsR0FBK0IsSUFBckJBLEVBQU8sR0FBR3hyQixTQUN0QndyQixFQUFTQSxFQUFPL2lCLEtBQUlnakIsR0FBS0EsRUFBSUEsS0FHeEJELEVBQVMsTUFBd0IsSUFBbEJBLEVBQU94ckIsT0FBZSxJQUFNLE1BQU13ckIsRUFBTy9pQixLQUFJLENBQUNnakIsRUFBR3JvQixJQUM5REEsRUFBUSxFQUFJc29CLFNBQVNELEVBQUcsSUFBTWxwQixLQUFLNFQsTUFBTXVWLFNBQVNELEVBQUcsSUFBTSxJQUFNLEtBQVEsTUFDL0V6bEIsS0FBSyxTQUFXLEVBQ3JCLENBc0IwQjJsQixDQUFTN1EsSUFHakMsTUFBTThRLEVBQVM5USxFQUFNM1gsUUFBUSxLQUN2QmUsRUFBTzRXLEVBQU0rUSxVQUFVLEVBQUdELEdBRWhDLElBQStELElBQTNELENBQUMsTUFBTyxPQUFRLE1BQU8sT0FBUSxTQUFTem9CLFFBQVFlLEdBQ2xELE1BQU0sSUFBSTZWLE9BQ2dGLE9BQXVCLEVBQUdlLElBR3RILElBQ0lnUixFQURBMUMsRUFBU3RPLEVBQU0rUSxVQUFVRCxFQUFTLEVBQUc5USxFQUFNOWEsT0FBUyxHQUd4RCxHQUFhLFVBQVRrRSxHQVFGLEdBUEFrbEIsRUFBU0EsRUFBTzdmLE1BQU0sS0FDdEJ1aUIsRUFBYTFDLEVBQU8yQyxRQUVFLElBQWxCM0MsRUFBT3BwQixRQUF3QyxNQUF4Qm9wQixFQUFPLEdBQUdpQyxPQUFPLEtBQzFDakMsRUFBTyxHQUFLQSxFQUFPLEdBQUc1bEIsTUFBTSxLQUc2RCxJQUF2RixDQUFDLE9BQVEsYUFBYyxVQUFXLGVBQWdCLFlBQVlMLFFBQVEyb0IsR0FDeEUsTUFBTSxJQUFJL1IsT0FDZ0YsT0FBdUIsR0FBSStSLFNBR3ZIMUMsRUFBU0EsRUFBTzdmLE1BQU0sS0FJeEIsT0FEQTZmLEVBQVNBLEVBQU8zZ0IsS0FBSTVGLEdBQVNtcEIsV0FBV25wQixLQUNqQyxDQUNMcUIsT0FDQWtsQixTQUNBMEMsYUFFSixDQW9CTyxTQUFTRyxFQUFlblIsR0FDN0IsTUFBTSxLQUNKNVcsRUFBSSxXQUNKNG5CLEdBQ0VoUixFQUNKLElBQUksT0FDRnNPLEdBQ0V0TyxFQWdCSixPQWQ2QixJQUF6QjVXLEVBQUtmLFFBQVEsT0FFZmltQixFQUFTQSxFQUFPM2dCLEtBQUksQ0FBQ2dqQixFQUFHN3BCLElBQU1BLEVBQUksRUFBSThwQixTQUFTRCxFQUFHLElBQU1BLEtBQ3RCLElBQXpCdm5CLEVBQUtmLFFBQVEsU0FDdEJpbUIsRUFBTyxHQUFLLEdBQUdBLEVBQU8sTUFDdEJBLEVBQU8sR0FBSyxHQUFHQSxFQUFPLE9BSXRCQSxHQUQ2QixJQUEzQmxsQixFQUFLZixRQUFRLFNBQ04sR0FBRzJvQixLQUFjMUMsRUFBT3BqQixLQUFLLE9BRTdCLEdBQUdvakIsRUFBT3BqQixLQUFLLFFBR25CLEdBQUc5QixLQUFRa2xCLElBQ3BCLENBMERPLFNBQVM4QyxFQUFhcFIsR0FFM0IsSUFBSXFSLEVBQXFCLFNBRHpCclIsRUFBUXNRLEVBQWV0USxJQUNQNVcsS0FBaUJrbkIsRUFwQzVCLFNBQWtCdFEsR0FDdkJBLEVBQVFzUSxFQUFldFEsR0FDdkIsTUFBTSxPQUNKc08sR0FDRXRPLEVBQ0U1UCxFQUFJa2UsRUFBTyxHQUNYZ0QsRUFBSWhELEVBQU8sR0FBSyxJQUNoQmlELEVBQUlqRCxFQUFPLEdBQUssSUFDaEJrRCxFQUFJRixFQUFJN3BCLEtBQUsyb0IsSUFBSW1CLEVBQUcsRUFBSUEsR0FFeEJFLEVBQUksQ0FBQ2QsRUFBR2prQixHQUFLaWtCLEVBQUl2Z0IsRUFBSSxJQUFNLEtBQU9taEIsRUFBSUMsRUFBSS9wQixLQUFLNG9CLElBQUk1b0IsS0FBSzJvQixJQUFJMWpCLEVBQUksRUFBRyxFQUFJQSxFQUFHLElBQUssR0FFckYsSUFBSXRELEVBQU8sTUFDWCxNQUFNaW9CLEVBQU0sQ0FBQzVwQixLQUFLNFQsTUFBYSxJQUFQb1csRUFBRSxJQUFXaHFCLEtBQUs0VCxNQUFhLElBQVBvVyxFQUFFLElBQVdocUIsS0FBSzRULE1BQWEsSUFBUG9XLEVBQUUsS0FPMUUsTUFMbUIsU0FBZnpSLEVBQU01VyxPQUNSQSxHQUFRLElBQ1Jpb0IsRUFBSTVyQixLQUFLNm9CLEVBQU8sS0FHWDZDLEVBQWUsQ0FDcEIvbkIsT0FDQWtsQixPQUFRK0MsR0FFWixDQVlrREssQ0FBUzFSLElBQVFzTyxPQUFTdE8sRUFBTXNPLE9BU2hGLE9BUkErQyxFQUFNQSxFQUFJMWpCLEtBQUlna0IsSUFDTyxVQUFmM1IsRUFBTTVXLE9BQ1J1b0IsR0FBTyxLQUdGQSxHQUFPLE9BQVVBLEVBQU0sUUFBVUEsRUFBTSxNQUFTLFFBQVUsT0FHNURDLFFBQVEsTUFBU1AsRUFBSSxHQUFLLE1BQVNBLEVBQUksR0FBSyxNQUFTQSxFQUFJLElBQUlRLFFBQVEsR0FDOUUsQ0FVTyxTQUFTQyxFQUFpQkMsRUFBWXZaLEdBQzNDLE1BQU13WixFQUFPWixFQUFhVyxHQUNwQkUsRUFBT2IsRUFBYTVZLEdBQzFCLE9BQVEvUSxLQUFLNG9CLElBQUkyQixFQUFNQyxHQUFRLE1BQVN4cUIsS0FBSzJvQixJQUFJNEIsRUFBTUMsR0FBUSxJQUNqRSxDQVNPLFNBQVNDLEVBQU1sUyxFQUFPalksR0FjM0IsT0FiQWlZLEVBQVFzUSxFQUFldFEsR0FDdkJqWSxFQUFRb29CLEVBQU1wb0IsR0FFSyxRQUFmaVksRUFBTTVXLE1BQWlDLFFBQWY0VyxFQUFNNVcsT0FDaEM0VyxFQUFNNVcsTUFBUSxLQUdHLFVBQWY0VyxFQUFNNVcsS0FDUjRXLEVBQU1zTyxPQUFPLEdBQUssSUFBSXZtQixJQUV0QmlZLEVBQU1zTyxPQUFPLEdBQUt2bUIsRUFHYm9wQixFQUFlblIsRUFDeEIsQ0FRTyxTQUFTbVMsRUFBT25TLEVBQU9vUyxHQUk1QixHQUhBcFMsRUFBUXNRLEVBQWV0USxHQUN2Qm9TLEVBQWNqQyxFQUFNaUMsSUFFZSxJQUEvQnBTLEVBQU01VyxLQUFLZixRQUFRLE9BQ3JCMlgsRUFBTXNPLE9BQU8sSUFBTSxFQUFJOEQsT0FDbEIsSUFBbUMsSUFBL0JwUyxFQUFNNVcsS0FBS2YsUUFBUSxTQUFrRCxJQUFqQzJYLEVBQU01VyxLQUFLZixRQUFRLFNBQ2hFLElBQUssSUFBSXZCLEVBQUksRUFBR0EsRUFBSSxFQUFHQSxHQUFLLEVBQzFCa1osRUFBTXNPLE9BQU94bkIsSUFBTSxFQUFJc3JCLEVBSTNCLE9BQU9qQixFQUFlblIsRUFDeEIsQ0FRTyxTQUFTcVMsRUFBUXJTLEVBQU9vUyxHQUk3QixHQUhBcFMsRUFBUXNRLEVBQWV0USxHQUN2Qm9TLEVBQWNqQyxFQUFNaUMsSUFFZSxJQUEvQnBTLEVBQU01VyxLQUFLZixRQUFRLE9BQ3JCMlgsRUFBTXNPLE9BQU8sS0FBTyxJQUFNdE8sRUFBTXNPLE9BQU8sSUFBTThELE9BQ3hDLElBQW1DLElBQS9CcFMsRUFBTTVXLEtBQUtmLFFBQVEsT0FDNUIsSUFBSyxJQUFJdkIsRUFBSSxFQUFHQSxFQUFJLEVBQUdBLEdBQUssRUFDMUJrWixFQUFNc08sT0FBT3huQixLQUFPLElBQU1rWixFQUFNc08sT0FBT3huQixJQUFNc3JCLE9BRTFDLElBQXFDLElBQWpDcFMsRUFBTTVXLEtBQUtmLFFBQVEsU0FDNUIsSUFBSyxJQUFJdkIsRUFBSSxFQUFHQSxFQUFJLEVBQUdBLEdBQUssRUFDMUJrWixFQUFNc08sT0FBT3huQixLQUFPLEVBQUlrWixFQUFNc08sT0FBT3huQixJQUFNc3JCLEVBSS9DLE9BQU9qQixFQUFlblIsRUFDeEIsa0ZDblNBLE1BQU0vSCxFQUFZLENBQUMsU0FBVSxPQUFRLFFDRnJDLE1BR0EsRUFIYyxDQUNacWEsYUFBYyxpQkNDaEIsTUFBTSxFQUFZLENBQUMsY0FBZSxVQUFXLFVBQVcsU0FnQ3hELEVBMUJBLFNBQXFCM3RCLEVBQVUsQ0FBQyxLQUFNcVEsR0FDcEMsTUFDRTRMLFlBQWF5TyxFQUFtQixDQUFDLEVBQ2pDbFYsUUFBU3lFLEVBQWUsQ0FBQyxFQUN6QjJULFFBQVNDLEVBQ1RDLE1BQU9DLEVBQWEsQ0FBQyxHQUNuQi90QixFQUNFcVcsR0FBUSxPQUE4QnJXLEVBQVMsR0FFL0NpYyxFRktPLFNBQTJCQSxHQUN4QyxNQUFNLE9BR0owTixFQUFTLENBQ1BDLEdBQUksRUFFSkMsR0FBSSxJQUVKQyxHQUFJLElBRUpDLEdBQUksS0FFSkMsR0FBSSxNQUVMLEtBQ0RnRSxFQUFPLEtBQUksS0FDWEMsRUFBTyxHQUNMaFMsRUFDRTVGLEdBQVEsT0FBOEI0RixFQUFhM0ksR0FFbkQ0YSxFQXBDc0J2RSxLQUM1QixNQUFNd0UsRUFBcUJsckIsT0FBTzRaLEtBQUs4TSxHQUFRM2dCLEtBQUk1SCxJQUFPLENBQ3hEQSxNQUNBNHJCLElBQUtyRCxFQUFPdm9CLFFBQ1AsR0FHUCxPQURBK3NCLEVBQW1CclIsTUFBSyxDQUFDc1IsRUFBYUMsSUFBZ0JELEVBQVlwQixJQUFNcUIsRUFBWXJCLE1BQzdFbUIsRUFBbUI3UixRQUFPLENBQUNDLEVBQUs5TSxLQUM5QixPQUFTLENBQUMsRUFBRzhNLEVBQUssQ0FDdkIsQ0FBQzlNLEVBQUlyTyxLQUFNcU8sRUFBSXVkLE9BRWhCLENBQUMsRUFBRSxFQXlCZXNCLENBQXNCM0UsR0FDckM5TSxFQUFPNVosT0FBTzRaLEtBQUtxUixHQUV6QixTQUFTOVIsRUFBR2hiLEdBRVYsTUFBTyxxQkFEOEIsaUJBQWhCdW9CLEVBQU92b0IsR0FBb0J1b0IsRUFBT3ZvQixHQUFPQSxJQUMxQjRzQixJQUN0QyxDQUVBLFNBQVNPLEVBQUtudEIsR0FFWixNQUFPLHNCQUQ4QixpQkFBaEJ1b0IsRUFBT3ZvQixHQUFvQnVvQixFQUFPdm9CLEdBQU9BLEdBQzFCNnNCLEVBQU8sTUFBTUQsSUFDbkQsQ0FFQSxTQUFTUSxFQUFRQyxFQUFPM3FCLEdBQ3RCLE1BQU00cUIsRUFBVzdSLEVBQUtuWixRQUFRSSxHQUM5QixNQUFPLHFCQUE4QyxpQkFBbEI2bEIsRUFBTzhFLEdBQXNCOUUsRUFBTzhFLEdBQVNBLElBQVFULHVCQUE0QyxJQUFkVSxHQUFxRCxpQkFBM0IvRSxFQUFPOU0sRUFBSzZSLElBQTBCL0UsRUFBTzlNLEVBQUs2UixJQUFhNXFCLEdBQU9tcUIsRUFBTyxNQUFNRCxJQUNyTyxDQXlCQSxPQUFPLE9BQVMsQ0FDZG5SLE9BQ0E4TSxPQUFRdUUsRUFDUjlSLEtBQ0FtUyxPQUNBQyxVQUNBRyxLQTdCRixTQUFjdnRCLEdBQ1osT0FBSXliLEVBQUtuWixRQUFRdEMsR0FBTyxFQUFJeWIsRUFBS3RjLE9BQ3hCaXVCLEVBQVFwdEIsRUFBS3liLEVBQUtBLEVBQUtuWixRQUFRdEMsR0FBTyxJQUd4Q2diLEVBQUdoYixFQUNaLEVBd0JFd3RCLElBdEJGLFNBQWF4dEIsR0FFWCxNQUFNeXRCLEVBQVdoUyxFQUFLblosUUFBUXRDLEdBRTlCLE9BQWlCLElBQWJ5dEIsRUFDS3pTLEVBQUdTLEVBQUssSUFHYmdTLElBQWFoUyxFQUFLdGMsT0FBUyxFQUN0Qmd1QixFQUFLMVIsRUFBS2dTLElBR1pMLEVBQVFwdEIsRUFBS3liLEVBQUtBLEVBQUtuWixRQUFRdEMsR0FBTyxJQUFJaUMsUUFBUSxTQUFVLHFCQUNyRSxFQVVFMnFCLFFBQ0MzWCxFQUNMLENFN0VzQnlZLENBQWtCcEUsR0FDaENrRCxFQ2ZPLFNBQXVCQyxFQUFlLEdBRW5ELEdBQUlBLEVBQWFrQixJQUNmLE9BQU9sQixFQU1ULE1BQU1tQixHQUFZLFFBQW1CLENBQ25DcEIsUUFBU0MsSUFHTEQsRUFBVSxJQUFJcUIsS0FPZ0IsSUFBckJBLEVBQVUxdUIsT0FBZSxDQUFDLEdBQUswdUIsR0FDaENqbUIsS0FBSXdULElBQ2QsTUFBTXBXLEVBQVM0b0IsRUFBVXhTLEdBQ3pCLE1BQXlCLGlCQUFYcFcsRUFBc0IsR0FBR0EsTUFBYUEsQ0FBTSxJQUN6REcsS0FBSyxLQUlWLE9BREFxbkIsRUFBUW1CLEtBQU0sRUFDUG5CLENBQ1QsQ0Rka0JzQixDQUFjckIsR0FDOUIsSUFBSTdSLEdBQVcsRUFBQXZFLEVBQUEsR0FBVSxDQUN2QndFLGNBQ0FuSCxVQUFXLE1BQ1h3SyxXQUFZLENBQUMsRUFFYjlKLFNBQVMsT0FBUyxDQUNoQitFLEtBQU0sU0FDTE4sR0FDSDJULFVBQ0FFLE9BQU8sT0FBUyxDQUFDLEVBQUcsRUFBT0MsSUFDMUIxWCxHQUVILE9BREEyRixFQUFXM0wsRUFBS2lNLFFBQU8sQ0FBQ0MsRUFBS0MsS0FBYSxFQUFBL0UsRUFBQSxHQUFVOEUsRUFBS0MsSUFBV1IsR0FDN0RBLENBQ1Qsa0ZFUEEsUUF2QkEsWUFBb0J6UixHQUNsQixNQUFNNGtCLEVBQVc1a0IsRUFBTytSLFFBQU8sQ0FBQ0MsRUFBSzBCLEtBQ25DQSxFQUFNbVIsWUFBWTN0QixTQUFRMGIsSUFDeEJaLEVBQUlZLEdBQVFjLENBQUssSUFFWjFCLElBQ04sQ0FBQyxHQUVFNVIsRUFBS2pHLEdBQ0Z6QixPQUFPNFosS0FBS25ZLEdBQU80WCxRQUFPLENBQUNDLEVBQUtZLElBQ2pDZ1MsRUFBU2hTLElBQ0osRUFBQWtTLEVBQUEsR0FBTTlTLEVBQUs0UyxFQUFTaFMsR0FBTXpZLElBRzVCNlgsR0FDTixDQUFDLEdBS04sT0FGQTVSLEVBQUcya0IsVUFBNkgsQ0FBQyxFQUNqSTNrQixFQUFHeWtCLFlBQWM3a0IsRUFBTytSLFFBQU8sQ0FBQ0MsRUFBSzBCLElBQVUxQixFQUFJcFMsT0FBTzhULEVBQU1tUixjQUFjLElBQ3ZFemtCLENBQ1QsMEJDakJBLFNBQVM0a0IsRUFBVW5zQixHQUNqQixNQUFxQixpQkFBVkEsRUFDRkEsRUFHRixHQUFHQSxXQUNaLENBRU8sTUFBTW9zQixHQUFTLEVBQUF2UixFQUFBLEdBQU0sQ0FDMUJkLEtBQU0sU0FDTnNTLFNBQVUsVUFDVlQsVUFBV08sSUFFQUcsR0FBWSxFQUFBelIsRUFBQSxHQUFNLENBQzdCZCxLQUFNLFlBQ05zUyxTQUFVLFVBQ1ZULFVBQVdPLElBRUFJLEdBQWMsRUFBQTFSLEVBQUEsR0FBTSxDQUMvQmQsS0FBTSxjQUNOc1MsU0FBVSxVQUNWVCxVQUFXTyxJQUVBSyxHQUFlLEVBQUEzUixFQUFBLEdBQU0sQ0FDaENkLEtBQU0sZUFDTnNTLFNBQVUsVUFDVlQsVUFBV08sSUFFQU0sR0FBYSxFQUFBNVIsRUFBQSxHQUFNLENBQzlCZCxLQUFNLGFBQ05zUyxTQUFVLFVBQ1ZULFVBQVdPLElBRUFPLEdBQWMsRUFBQTdSLEVBQUEsR0FBTSxDQUMvQmQsS0FBTSxjQUNOc1MsU0FBVSxZQUVDTSxHQUFpQixFQUFBOVIsRUFBQSxHQUFNLENBQ2xDZCxLQUFNLGlCQUNOc1MsU0FBVSxZQUVDTyxHQUFtQixFQUFBL1IsRUFBQSxHQUFNLENBQ3BDZCxLQUFNLG1CQUNOc1MsU0FBVSxZQUVDUSxHQUFvQixFQUFBaFMsRUFBQSxHQUFNLENBQ3JDZCxLQUFNLG9CQUNOc1MsU0FBVSxZQUVDUyxHQUFrQixFQUFBalMsRUFBQSxHQUFNLENBQ25DZCxLQUFNLGtCQUNOc1MsU0FBVSxZQUVDOUIsRUFBZWpwQixJQUMxQixRQUEyQjFELElBQXZCMEQsRUFBTWlwQixjQUFxRCxPQUF2QmpwQixFQUFNaXBCLGFBQXVCLENBQ25FLE1BQU13QyxHQUFjLFFBQWdCenJCLEVBQU1tWixNQUFPLHFCQUFzQixFQUFHLGdCQUVwRXVNLEVBQXFCRCxJQUFhLENBQ3RDd0QsY0FBYyxRQUFTd0MsRUFBYWhHLEtBR3RDLE9BQU8sUUFBa0J6bEIsRUFBT0EsRUFBTWlwQixhQUFjdkQsRUFDdEQsQ0FFQSxPQUFPLElBQUksRUFFYnVELEVBQWEyQixVQUVULENBQUMsRUFDTDNCLEVBQWF5QixZQUFjLENBQUMsZ0JBQzVCLE1BQ0EsRUFEZ0IsRUFBUUksRUFBUUUsRUFBV0MsRUFBYUMsRUFBY0MsRUFBWUMsRUFBYUMsRUFBZ0JDLEVBQWtCQyxFQUFtQkMsRUFBaUJ2QyxHQ2xEckssRUFBZSxHQXhCYSxFQUFBMVAsRUFBQSxHQUFNLENBQ2hDZCxLQUFNLGVBQ05pVCxhQUFhLEVBQ2JwQixVQUFXNXJCLElBQVMsQ0FDbEIsZUFBZ0IsQ0FDZG1mLFFBQVNuZixRQUlXLEVBQUE2YSxFQUFBLEdBQU0sQ0FDOUJkLEtBQU0sYUFFZ0IsRUFBQWMsRUFBQSxHQUFNLENBQzVCZCxLQUFNLGNBRW9CLEVBQUFjLEVBQUEsR0FBTSxDQUNoQ2QsS0FBTSxrQkFFa0IsRUFBQWMsRUFBQSxHQUFNLENBQzlCZCxLQUFNLGdCQUVrQixFQUFBYyxFQUFBLEdBQU0sQ0FDOUJkLEtBQU0sZ0JDa0JSLEVBRGdCLEdBdkNTLEVBQUFjLEVBQUEsR0FBTSxDQUM3QmQsS0FBTSxlQUVxQixFQUFBYyxFQUFBLEdBQU0sQ0FDakNkLEtBQU0sbUJBRWdCLEVBQUFjLEVBQUEsR0FBTSxDQUM1QmQsS0FBTSxjQUVzQixFQUFBYyxFQUFBLEdBQU0sQ0FDbENkLEtBQU0sb0JBRWtCLEVBQUFjLEVBQUEsR0FBTSxDQUM5QmQsS0FBTSxnQkFFb0IsRUFBQWMsRUFBQSxHQUFNLENBQ2hDZCxLQUFNLGtCQUVhLEVBQUFjLEVBQUEsR0FBTSxDQUN6QmQsS0FBTSxXQUVZLEVBQUFjLEVBQUEsR0FBTSxDQUN4QmQsS0FBTSxVQUVnQixFQUFBYyxFQUFBLEdBQU0sQ0FDNUJkLEtBQU0sY0FFa0IsRUFBQWMsRUFBQSxHQUFNLENBQzlCZCxLQUFNLGdCQUVpQixFQUFBYyxFQUFBLEdBQU0sQ0FDN0JkLEtBQU0sZUFFb0IsRUFBQWMsRUFBQSxHQUFNLENBQ2hDZCxLQUFNLGtCQUVtQixFQUFBYyxFQUFBLEdBQU0sQ0FDL0JkLEtBQU0saUJDbENLa1QsRUFBTTNyQixJQUNqQixRQUFrQjFELElBQWQwRCxFQUFNMnJCLEtBQW1DLE9BQWQzckIsRUFBTTJyQixJQUFjLENBQ2pELE1BQU1GLEdBQWMsUUFBZ0J6ckIsRUFBTW1aLE1BQU8sVUFBVyxFQUFHLE9BRXpEdU0sRUFBcUJELElBQWEsQ0FDdENrRyxLQUFLLFFBQVNGLEVBQWFoRyxLQUc3QixPQUFPLFFBQWtCemxCLEVBQU9BLEVBQU0yckIsSUFBS2pHLEVBQzdDLENBRUEsT0FBTyxJQUFJLEVBRWJpRyxFQUFJZixVQUVBLENBQUMsRUFDTGUsRUFBSWpCLFlBQWMsQ0FBQyxPQUNaLE1BQU1rQixFQUFZNXJCLElBQ3ZCLFFBQXdCMUQsSUFBcEIwRCxFQUFNNHJCLFdBQStDLE9BQXBCNXJCLEVBQU00ckIsVUFBb0IsQ0FDN0QsTUFBTUgsR0FBYyxRQUFnQnpyQixFQUFNbVosTUFBTyxVQUFXLEVBQUcsYUFFekR1TSxFQUFxQkQsSUFBYSxDQUN0Q21HLFdBQVcsUUFBU0gsRUFBYWhHLEtBR25DLE9BQU8sUUFBa0J6bEIsRUFBT0EsRUFBTTRyQixVQUFXbEcsRUFDbkQsQ0FFQSxPQUFPLElBQUksRUFFYmtHLEVBQVVoQixVQUVOLENBQUMsRUFDTGdCLEVBQVVsQixZQUFjLENBQUMsYUFDbEIsTUFBTW1CLEVBQVM3ckIsSUFDcEIsUUFBcUIxRCxJQUFqQjBELEVBQU02ckIsUUFBeUMsT0FBakI3ckIsRUFBTTZyQixPQUFpQixDQUN2RCxNQUFNSixHQUFjLFFBQWdCenJCLEVBQU1tWixNQUFPLFVBQVcsRUFBRyxVQUV6RHVNLEVBQXFCRCxJQUFhLENBQ3RDb0csUUFBUSxRQUFTSixFQUFhaEcsS0FHaEMsT0FBTyxRQUFrQnpsQixFQUFPQSxFQUFNNnJCLE9BQVFuRyxFQUNoRCxDQUVBLE9BQU8sSUFBSSxFQUVibUcsRUFBT2pCLFVBRUgsQ0FBQyxFQUNMaUIsRUFBT25CLFlBQWMsQ0FBQyxVQUNmLE1BNEJQLEVBRGEsRUFBUWlCLEVBQUtDLEVBQVdDLEdBM0JYLEVBQUF0UyxFQUFBLEdBQU0sQ0FDOUJkLEtBQU0sZ0JBRWUsRUFBQWMsRUFBQSxHQUFNLENBQzNCZCxLQUFNLGFBRW9CLEVBQUFjLEVBQUEsR0FBTSxDQUNoQ2QsS0FBTSxrQkFFdUIsRUFBQWMsRUFBQSxHQUFNLENBQ25DZCxLQUFNLHFCQUVvQixFQUFBYyxFQUFBLEdBQU0sQ0FDaENkLEtBQU0sa0JBRTJCLEVBQUFjLEVBQUEsR0FBTSxDQUN2Q2QsS0FBTSx5QkFFd0IsRUFBQWMsRUFBQSxHQUFNLENBQ3BDZCxLQUFNLHNCQUV5QixFQUFBYyxFQUFBLEdBQU0sQ0FDckNkLEtBQU0sdUJBRWdCLEVBQUFjLEVBQUEsR0FBTSxDQUM1QmQsS0FBTSxjQzVEUixFQUFlLEdBbkJTLEVBQUFjLEVBQUEsR0FBTSxDQUM1QmQsS0FBTSxjQUVjLEVBQUFjLEVBQUEsR0FBTSxDQUMxQmQsS0FBTSxTQUNOc1MsU0FBVSxZQUVPLEVBQUF4UixFQUFBLEdBQU0sQ0FDdkJkLEtBQU0sU0FFYSxFQUFBYyxFQUFBLEdBQU0sQ0FDekJkLEtBQU0sV0FFYyxFQUFBYyxFQUFBLEdBQU0sQ0FDMUJkLEtBQU0sWUFFWSxFQUFBYyxFQUFBLEdBQU0sQ0FDeEJkLEtBQU0sVUNIUixFQURnQixHQWJLLEVBQUFjLEVBQUEsR0FBTSxDQUN6QmQsS0FBTSxRQUNOc1MsU0FBVSxhQUVXLEVBQUF4UixFQUFBLEdBQU0sQ0FDM0JkLEtBQU0sVUFDTmlULFlBQWEsa0JBQ2JYLFNBQVUsYUFFbUIsRUFBQXhSLEVBQUEsR0FBTSxDQUNuQ2QsS0FBTSxrQkFDTnNTLFNBQVUsYUNSWixHQUprQixFQUFBeFIsRUFBQSxHQUFNLENBQ3RCZCxLQUFNLFlBQ05zUyxTQUFVLFlDQ1osU0FBU1QsRUFBVTVyQixHQUNqQixPQUFPQSxHQUFTLEdBQWUsSUFBVkEsRUFBeUIsSUFBUkEsRUFBSCxJQUFvQkEsQ0FDekQsQ0FFTyxNQUFNa2YsR0FBUSxFQUFBckUsRUFBQSxHQUFNLENBQ3pCZCxLQUFNLFFBQ042UixjQUVXd0IsRUFBVzlyQixJQUN0QixRQUF1QjFELElBQW5CMEQsRUFBTThyQixVQUE2QyxPQUFuQjlyQixFQUFNOHJCLFNBQW1CLENBQzNELE1BQU1wRyxFQUFxQkQsSUFDekIsSUFBSXNHLEVBQWNDLEVBQXVCQyxFQUd6QyxNQUFPLENBQ0xILFVBRmtELE9BQS9CQyxFQUFlL3JCLEVBQU1tWixRQUFnRixPQUFyRDZTLEVBQXdCRCxFQUFheFUsY0FBMkYsT0FBMUQwVSxFQUF5QkQsRUFBc0IvRyxhQUEvSCxFQUEwSmdILEVBQXVCeEcsS0FBZWxPLEVBQUEsR0FBa0JrTyxJQUVuUDZFLEVBQVU3RSxHQUNuQyxFQUdILE9BQU8sUUFBa0J6bEIsRUFBT0EsRUFBTThyQixTQUFVcEcsRUFDbEQsQ0FFQSxPQUFPLElBQUksRUFFYm9HLEVBQVNwQixZQUFjLENBQUMsWUFDakIsTUFBTXdCLEdBQVcsRUFBQTNTLEVBQUEsR0FBTSxDQUM1QmQsS0FBTSxXQUNONlIsY0FFV25XLEdBQVMsRUFBQW9GLEVBQUEsR0FBTSxDQUMxQmQsS0FBTSxTQUNONlIsY0FFVzZCLEdBQVksRUFBQTVTLEVBQUEsR0FBTSxDQUM3QmQsS0FBTSxZQUNONlIsY0FFVzdTLEdBQVksRUFBQThCLEVBQUEsR0FBTSxDQUM3QmQsS0FBTSxZQUNONlIsY0FnQkYsSUFkeUIsRUFBQS9RLEVBQUEsR0FBTSxDQUM3QmQsS0FBTSxPQUNOaVQsWUFBYSxRQUNicEIsZUFFd0IsRUFBQS9RLEVBQUEsR0FBTSxDQUM5QmQsS0FBTSxPQUNOaVQsWUFBYSxTQUNicEIsY0FLYSxFQUFRMU0sRUFBT2tPLEVBQVVJLEVBQVUvWCxFQUFRZ1ksRUFBVzFVLEdBSDVDLEVBQUE4QixFQUFBLEdBQU0sQ0FDN0JkLEtBQU0sZ0JDdERLeEgsR0FBYSxFQUFBc0ksRUFBQSxHQUFNLENBQzlCZCxLQUFNLGFBQ05zUyxTQUFVLGVBRUM3WixHQUFXLEVBQUFxSSxFQUFBLEdBQU0sQ0FDNUJkLEtBQU0sV0FDTnNTLFNBQVUsZUFFQ3FCLEdBQVksRUFBQTdTLEVBQUEsR0FBTSxDQUM3QmQsS0FBTSxZQUNOc1MsU0FBVSxlQUVDbGlCLEdBQWEsRUFBQTBRLEVBQUEsR0FBTSxDQUM5QmQsS0FBTSxhQUNOc1MsU0FBVSxlQUVDalosR0FBZ0IsRUFBQXlILEVBQUEsR0FBTSxDQUNqQ2QsS0FBTSxrQkFFSzlILEdBQWdCLEVBQUE0SSxFQUFBLEdBQU0sQ0FDakNkLEtBQU0sa0JBRUszUCxHQUFhLEVBQUF5USxFQUFBLEdBQU0sQ0FDOUJkLEtBQU0sZUFFSzRULEdBQVksRUFBQTlTLEVBQUEsR0FBTSxDQUM3QmQsS0FBTSxjQVFSLEVBRG1CLEdBTGMsRUFBQWMsRUFBQSxHQUFNLENBQ3JDZCxLQUFNLGFBQ05pVCxhQUFhLEVBQ2JYLFNBQVUsZUFFa0M5WixFQUFZQyxFQUFVa2IsRUFBV3ZqQixFQUFZaUosRUFBZWhKLEVBQVl1akIsRUFBVzFiLEdDekIzSDJiLEVBQXFCLENBQ3pCQyxRQUFTLGNBQ1QxTyxRQUFTQSxFQUFRNk0sWUFDakI4QixRQUFTLGNBQ1RDLEtBQU0sY0FDTkMsVUFBV0EsRUFBVWhDLFlBQ3JCNVosUUFBUyxjQUNUNkcsUUFBU0EsRUFBUStTLFlBQ2pCaUMsT0FBUSxjQUNSekQsUUFBU0EsRUFBQSxlQUNUblksV0FBWSxlQUVENmIsRUFBdUIsQ0FDbENMLFFBQU8sRUFDUDFPLFFBQU8sRUFDUDJPLFFBQU8sRUFDUEMsS0FBSSxFQUNKQyxVQUFTLEVBQ1Q1YixRQUFPLEVBQ1A2RyxRQUFPLEVBQ1BnVixPQUFNLEVBQ056RCxRQUFPLEtBQ1BuWSxXQUFVLEdBRUM4YixFQUFzQnR1QixPQUFPNFosS0FBS21VLEdBQW9CMVUsUUFBTyxDQUFDQyxFQUFLaVYsS0FDOUVSLEVBQW1CUSxHQUFhL3ZCLFNBQVE0aUIsSUFDdEM5SCxFQUFJOEgsR0FBWWlOLEVBQXFCRSxFQUFZLElBRTVDalYsSUFDTixDQUFDLCtEQzFCSixRQVhBLFNBQWVBLEVBQUsrTixHQUNsQixPQUFLQSxHQUlFLE9BQVUvTixFQUFLK04sRUFBTSxDQUMxQjVTLE9BQU8sSUFKQTZFLENBT1gsOEdDTkEsTUFBTWtWLEVBQWEsQ0FDakJDLEVBQUcsU0FDSEMsRUFBRyxXQUVDQyxFQUFhLENBQ2pCQyxFQUFHLE1BQ0hDLEVBQUcsUUFDSEMsRUFBRyxTQUNIbkYsRUFBRyxPQUNINWtCLEVBQUcsQ0FBQyxPQUFRLFNBQ1pDLEVBQUcsQ0FBQyxNQUFPLFdBRVArcEIsRUFBVSxDQUNkQyxRQUFTLEtBQ1RDLFFBQVMsS0FDVEMsU0FBVSxLQUNWQyxTQUFVLE1BS05DLEVDMUJTLFNBQWlCMW5CLEdBQzlCLE1BQU1ILEVBQVEsQ0FBQyxFQUNmLE9BQU9LLFNBQ2M3SixJQUFmd0osRUFBTUssS0FDUkwsRUFBTUssR0RzQnFCc1MsS0FFL0IsR0FBSUEsRUFBSzVjLE9BQVMsRUFBRyxDQUNuQixJQUFJeXhCLEVBQVE3VSxHQUdWLE1BQU8sQ0FBQ0EsR0FGUkEsRUFBTzZVLEVBQVE3VSxFQUluQixDQUVBLE1BQU8wUCxFQUFHa0YsR0FBSzVVLEVBQUtyVCxNQUFNLElBQ3BCM0MsRUFBV3NxQixFQUFXNUUsR0FDdEIvWCxFQUFZOGMsRUFBV0csSUFBTSxHQUNuQyxPQUFPMW9CLE1BQU1zRyxRQUFRbUYsR0FBYUEsRUFBVTlMLEtBQUlzcEIsR0FBT25yQixFQUFXbXJCLElBQU8sQ0FBQ25yQixFQUFXMk4sRUFBVSxFQ25DOUVuSyxDQUFHRSxJQUdYTCxFQUFNSyxHQUVqQixDRGlCeUIwbkIsR0FlbkJDLEVBQWEsQ0FBQyxJQUFLLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLFNBQVUsWUFBYSxjQUFlLGVBQWdCLGFBQWMsVUFBVyxVQUFXLGVBQWdCLG9CQUFxQixrQkFBbUIsY0FBZSxtQkFBb0Isa0JBQzVPQyxFQUFjLENBQUMsSUFBSyxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxVQUFXLGFBQWMsZUFBZ0IsZ0JBQWlCLGNBQWUsV0FBWSxXQUFZLGdCQUFpQixxQkFBc0IsbUJBQW9CLGVBQWdCLG9CQUFxQixtQkFDelBDLEVBQWMsSUFBSUYsS0FBZUMsR0FDaEMsU0FBU0UsRUFBZ0I5VSxFQUFPNFIsRUFBVW1ELEVBQWN2TyxHQUM3RCxJQUFJd08sRUFFSixNQUFNQyxFQUErRCxPQUEvQ0QsR0FBVyxPQUFRaFYsRUFBTzRSLEdBQVUsSUFBa0JvRCxFQUFXRCxFQUV2RixNQUE0QixpQkFBakJFLEVBQ0Zqd0IsR0FDYyxpQkFBUkEsRUFDRkEsRUFTRml3QixFQUFlandCLEVBSXRCd0csTUFBTXNHLFFBQVFtakIsR0FDVGp3QixHQUNjLGlCQUFSQSxFQUNGQSxFQVdGaXdCLEVBQWFqd0IsR0FJSSxtQkFBakJpd0IsRUFDRkEsRUFPRixLQUFlLENBQ3hCLENBQ08sU0FBU0MsRUFBbUJsVixHQUNqQyxPQUFPOFUsRUFBZ0I5VSxFQUFPLFVBQVcsRUFDM0MsQ0FDTyxTQUFTbVYsRUFBUzdDLEVBQWFoRyxHQUNwQyxHQUF5QixpQkFBZEEsR0FBdUMsTUFBYkEsRUFDbkMsT0FBT0EsRUFHVCxNQUNNOEksRUFBYzlDLEVBRFJydEIsS0FBS0QsSUFBSXNuQixJQUdyQixPQUFJQSxHQUFhLEVBQ1I4SSxFQUdrQixpQkFBaEJBLEdBQ0RBLEVBR0gsSUFBSUEsR0FDYixDQXFCQSxTQUFTLEVBQU12dUIsRUFBT21ZLEdBQ3BCLE1BQU1zVCxFQUFjNEMsRUFBbUJydUIsRUFBTW1aLE9BQzdDLE9BQU81YSxPQUFPNFosS0FBS25ZLEdBQU9zRSxLQUFJbVUsR0FmaEMsU0FBNEJ6WSxFQUFPbVksRUFBTU0sRUFBTWdULEdBRzdDLElBQTRCLElBQXhCdFQsRUFBS25aLFFBQVF5WixHQUNmLE9BQU8sS0FHVCxNQUNNaU4sRUFmRCxTQUErQjhJLEVBQWUvQyxHQUNuRCxPQUFPaEcsR0FBYStJLEVBQWM1VyxRQUFPLENBQUNDLEVBQUs2VCxLQUM3QzdULEVBQUk2VCxHQUFlNEMsRUFBUzdDLEVBQWFoRyxHQUNsQzVOLElBQ04sQ0FBQyxFQUNOLENBVTZCNFcsQ0FETGQsRUFBaUJsVixHQUN5QmdULEdBQzFEaEcsRUFBWXpsQixFQUFNeVksR0FDeEIsT0FBTyxRQUFrQnpZLEVBQU95bEIsRUFBV0MsRUFDN0MsQ0FJd0NnSixDQUFtQjF1QixFQUFPbVksRUFBTU0sRUFBTWdULEtBQWM3VCxPQUFPK1MsRUFBQSxFQUFPLENBQUMsRUFDM0csQ0FFTyxTQUFTZ0UsRUFBTzN1QixHQUNyQixPQUFPLEVBQU1BLEVBQU84dEIsRUFDdEIsQ0FNTyxTQUFTYyxFQUFRNXVCLEdBQ3RCLE9BQU8sRUFBTUEsRUFBTyt0QixFQUN0QixDQU9BLFNBQVM3RSxFQUFRbHBCLEdBQ2YsT0FBTyxFQUFNQSxFQUFPZ3VCLEVBQ3RCLENBaEJBVyxFQUFPL0QsVUFHRSxDQUFDLEVBQ1YrRCxFQUFPakUsWUFBY29ELEVBSXJCYyxFQUFRaEUsVUFHQyxDQUFDLEVBQ1ZnRSxFQUFRbEUsWUFBY3FELEVBTXRCN0UsRUFBUTBCLFVBR0MsQ0FBQyxFQUNWMUIsRUFBUXdCLFlBQWNzRCxFQUN0Qix3RkVsS08sU0FBU2EsRUFBUTlqQixFQUFLc1UsRUFBTXlQLEdBQVksR0FDN0MsSUFBS3pQLEdBQXdCLGlCQUFUQSxFQUNsQixPQUFPLEtBSVQsR0FBSXRVLEdBQU9BLEVBQUk0SyxNQUFRbVosRUFBVyxDQUNoQyxNQUFNeEcsRUFBTSxRQUFRakosSUFBT2phLE1BQU0sS0FBS3dTLFFBQU8sQ0FBQ0MsRUFBSytOLElBQVMvTixHQUFPQSxFQUFJK04sR0FBUS9OLEVBQUkrTixHQUFRLE1BQU03YSxHQUVqRyxHQUFXLE1BQVB1ZCxFQUNGLE9BQU9BLENBRVgsQ0FFQSxPQUFPakosRUFBS2phLE1BQU0sS0FBS3dTLFFBQU8sQ0FBQ0MsRUFBSytOLElBQzlCL04sR0FBb0IsTUFBYkEsRUFBSStOLEdBQ04vTixFQUFJK04sR0FHTixNQUNON2EsRUFDTCxDQUVBLFNBQVN1akIsRUFBU1MsRUFBY3pFLEVBQVcwRSxFQUFnQkMsRUFBWUQsR0FDckUsSUFBSXR3QixFQWNKLE9BWEVBLEVBRDBCLG1CQUFqQnF3QixFQUNEQSxFQUFhQyxHQUNacnFCLE1BQU1zRyxRQUFROGpCLEdBQ2ZBLEVBQWFDLElBQW1CQyxFQUVoQ0osRUFBUUUsRUFBY0MsSUFBbUJDLEVBRy9DM0UsSUFDRjVyQixFQUFRNHJCLEVBQVU1ckIsSUFHYkEsQ0FDVCxDQThDQSxRQTVDQSxTQUFlcEQsR0FDYixNQUFNLEtBQ0ptZCxFQUFJLFlBQ0ppVCxFQUFjcHdCLEVBQVFtZCxLQUFJLFNBQzFCc1MsRUFBUSxVQUNSVCxHQUNFaHZCLEVBRUUySyxFQUFLakcsSUFDVCxHQUFtQixNQUFmQSxFQUFNeVksR0FDUixPQUFPLEtBR1QsTUFBTWdOLEVBQVl6bEIsRUFBTXlZLEdBRWxCc1csRUFBZUYsRUFEUDd1QixFQUFNbVosTUFDZ0I0UixJQUFhLENBQUMsRUFtQmxELE9BQU8sUUFBa0IvcUIsRUFBT3lsQixHQWpCTHVKLElBQ3pCLElBQUl0d0IsRUFBUTR2QixFQUFTUyxFQUFjekUsRUFBVzBFLEdBTzlDLE9BTElBLElBQW1CdHdCLEdBQW1DLGlCQUFuQnN3QixJQUVyQ3R3QixFQUFRNHZCLEVBQVNTLEVBQWN6RSxFQUFXLEdBQUc3UixJQUEwQixZQUFuQnVXLEVBQStCLElBQUssT0FBV0EsS0FBbUJBLEtBR3BHLElBQWhCdEQsRUFDS2h0QixFQUdGLENBQ0wsQ0FBQ2d0QixHQUFjaHRCLEVBQ2hCLEdBRzJELEVBT2hFLE9BSkF1SCxFQUFHMmtCLFVBRUMsQ0FBQyxFQUNMM2tCLEVBQUd5a0IsWUFBYyxDQUFDalMsR0FDWHhTLENBQ1Qsa0ZDaUJBLE1BQU1nVCxFQXhGQyxTQUF3QzJULEVBQXVCLE1BQ3BFLE1BQU1DLEVBQXNCdHVCLE9BQU80WixLQUFLeVUsR0FBc0JoVixRQUFPLENBQUNDLEVBQUtpVixLQUN6RUYsRUFBcUJFLEdBQWFwQyxZQUFZM3RCLFNBQVE0aUIsSUFDcEQ5SCxFQUFJOEgsR0FBWWlOLEVBQXFCRSxFQUFZLElBRTVDalYsSUFDTixDQUFDLEdBRUosU0FBU3FYLEVBQWN6VyxFQUFNL1osRUFBT3lhLEdBQ2xDLE1BQU1nVyxFQUFhLENBQ2pCLENBQUMxVyxHQUFPL1osRUFDUnlhLFNBRUlpVyxFQUFnQnZDLEVBQW9CcFUsR0FDMUMsT0FBTzJXLEVBQWdCQSxFQUFjRCxHQUFjLENBQ2pELENBQUMxVyxHQUFPL1osRUFFWixDQXFFQSxPQW5FQSxTQUFTdWEsRUFBZ0JqWixHQUN2QixNQUFNLEdBQ0pxdkIsRUFBRSxNQUNGbFcsRUFBUSxDQUFDLEdBQ1BuWixHQUFTLENBQUMsRUFFZCxJQUFLcXZCLEVBQ0gsT0FBTyxLQVNULFNBQVNDLEVBQVNDLEdBQ2hCLElBQUlDLEVBQVdELEVBRWYsR0FBdUIsbUJBQVpBLEVBQ1RDLEVBQVdELEVBQVFwVyxRQUNkLEdBQXVCLGlCQUFab1csRUFFaEIsT0FBT0EsRUFHVCxJQUFLQyxFQUNILE9BQU8sS0FHVCxNQUFNbEosR0FBbUIsUUFBNEJuTixFQUFNNUIsYUFDckRxUCxFQUFrQnJvQixPQUFPNFosS0FBS21PLEdBQ3BDLElBQUltSixFQUFNbkosRUE2QlYsT0E1QkEvbkIsT0FBTzRaLEtBQUtxWCxHQUFVenlCLFNBQVEyeUIsSUFDNUIsTUFBTWh4QixFQXpEYyxtQkFEVml4QixFQTBEYUgsRUFBU0UsSUF6RENDLEVBeURVeFcsR0F6REt3VyxFQUR4RCxJQUFrQkEsRUE0RFYsR0FBSWp4QixRQUNGLEdBQXFCLGlCQUFWQSxFQUNULEdBQUltdUIsRUFBb0I2QyxHQUN0QkQsR0FBTSxPQUFNQSxFQUFLUCxFQUFjUSxFQUFVaHhCLEVBQU95YSxRQUMzQyxDQUNMLE1BQU15VyxHQUFvQixRQUFrQixDQUMxQ3pXLFNBQ0N6YSxHQUFPNEUsSUFBSyxDQUNiLENBQUNvc0IsR0FBV3BzQixPQTFFNUIsWUFBZ0N1c0IsR0FDOUIsTUFBTUMsRUFBVUQsRUFBUWpZLFFBQU8sQ0FBQ08sRUFBTTRYLElBQVc1WCxFQUFLMVMsT0FBT2xILE9BQU80WixLQUFLNFgsS0FBVSxJQUM3RUMsRUFBUSxJQUFJQyxJQUFJSCxHQUN0QixPQUFPRCxFQUFRSyxPQUFNSCxHQUFVQyxFQUFNN3NCLE9BQVM1RSxPQUFPNFosS0FBSzRYLEdBQVFsMEIsUUFDcEUsQ0F5RWtCczBCLENBQW9CUCxFQUFtQmx4QixHQU16Qyt3QixHQUFNLE9BQU1BLEVBQUtHLEdBTGpCSCxFQUFJQyxHQUFZelcsRUFBZ0IsQ0FDOUJvVyxHQUFJM3dCLEVBQ0p5YSxTQUtOLE1BRUFzVyxHQUFNLE9BQU1BLEVBQUtQLEVBQWNRLEVBQVVoeEIsRUFBT3lhLEdBRXBELEtBRUssUUFBd0J5TixFQUFpQjZJLEVBQ2xELENBRUEsT0FBTzlxQixNQUFNc0csUUFBUW9rQixHQUFNQSxFQUFHL3FCLElBQUlnckIsR0FBWUEsRUFBU0QsRUFDekQsQ0FHRixDQUN3QmUsR0FDeEJuWCxFQUFnQnlSLFlBQWMsQ0FBQyxNQUMvQixnRkN2R08sTUFBTWhTLEdBQXFCLFNBTWxDLEVBSkEsU0FBa0JNLEVBQWVOLEdBQy9CLE9BQU8sT0FBdUJNLEVBQ2hDLDhEQ0tBLFFBTEEsU0FBa0JBLEVBQWUsTUFDL0IsTUFBTXFYLEdBQWUsU0FDckIsT0FBUUEsSUFOYXRsQixFQU1pQnNsQixFQUxILElBQTVCOXhCLE9BQU80WixLQUFLcE4sR0FBS2xQLFFBSzZDdzBCLEVBQWZyWCxFQU54RCxJQUF1QmpPLENBT3ZCLGdEQ1RBLE1BQU11bEIsRUFBbUI5VyxHQUFpQkEsRUFxQjFDLEVBbkJpQyxNQUMvQixJQUFJK1csRUFBV0QsRUFDZixNQUFPLENBQ0x2USxVQUFVQyxHQUNSdVEsRUFBV3ZRLENBQ2IsRUFFQXVRLFNBQVMvVyxHQUNBK1csRUFBUy9XLEdBR2xCZ1gsUUFDRUQsRUFBV0QsQ0FDYixFQUVELEVBR3dCRywrRENmWixTQUFTcFksRUFBV3JOLEdBQ2pDLEdBQXNCLGlCQUFYQSxFQUNULE1BQU0sSUFBSTRLLE9BQXlHLE9BQXVCLElBRzVJLE9BQU81SyxFQUFPa2MsT0FBTyxHQUFHd0osY0FBZ0IxbEIsRUFBTzNMLE1BQU0sRUFDdkQsK0JDWGUsU0FBUzBmLEVBQWVELEVBQU82UixFQUFpQjlSLEdBQzdELE1BQU1uZCxFQUFTLENBQUMsRUFnQmhCLE9BZkFuRCxPQUFPNFosS0FBSzJHLEdBQU8vaEIsU0FFbkIwYyxJQUNFL1gsRUFBTytYLEdBQVFxRixFQUFNckYsR0FBTTdCLFFBQU8sQ0FBQ0MsRUFBS25iLEtBQ2xDQSxJQUNGbWIsRUFBSXpiLEtBQUt1MEIsRUFBZ0JqMEIsSUFFckJtaUIsR0FBV0EsRUFBUW5pQixJQUNyQm1iLEVBQUl6YixLQUFLeWlCLEVBQVFuaUIsS0FJZG1iLElBQ04sSUFBSWhXLEtBQUssSUFBSSxJQUVYSCxDQUNULCtDQ1plLFNBQVNrdkIsS0FBeUJDLEdBQy9DLE9BQU9BLEVBQU1qWixRQUFPLENBQUNDLEVBQUtwUixJQUNaLE1BQVJBLEVBQ0tvUixFQUdGLFlBQTRCbE0sR0FDakNrTSxFQUFJc00sTUFBTTNvQixLQUFNbVEsR0FDaEJsRixFQUFLMGQsTUFBTTNvQixLQUFNbVEsRUFDbkIsSUFDQyxRQUNMLCtDQ2ZlLFNBQVNtbEIsRUFBU3JxQixFQUFNc3FCLEVBQU8sS0FDNUMsSUFBSUMsRUFFSixTQUFTQyxLQUFhdGxCLEdBS3BCcVgsYUFBYWdPLEdBQ2JBLEVBQVUvTixZQUxJLEtBQ1p4YyxFQUFLMGQsTUFBTTNvQixLQUFNbVEsRUFBSyxHQUlJb2xCLEVBQzlCLENBTUEsT0FKQUUsRUFBVUMsTUFBUSxLQUNoQmxPLGFBQWFnTyxFQUFRLEVBR2hCQyxDQUNULHNGQ2xCTyxTQUFTRSxFQUFjdkwsR0FDNUIsT0FBZ0IsT0FBVEEsR0FBaUMsaUJBQVRBLEdBQXFCQSxFQUFLd0wsY0FBZ0I3eUIsTUFDM0UsQ0FDZSxTQUFTd1UsRUFBVXdQLEVBQVE4TyxFQUFRLzFCLEVBQVUsQ0FDMUQwWCxPQUFPLElBRVAsTUFBTXRSLEVBQVNwRyxFQUFRMFgsT0FBUSxPQUFTLENBQUMsRUFBR3VQLEdBQVVBLEVBa0J0RCxPQWhCSTRPLEVBQWM1TyxJQUFXNE8sRUFBY0UsSUFDekM5eUIsT0FBTzRaLEtBQUtrWixHQUFRdDBCLFNBQVFMLElBRWQsY0FBUkEsSUFJQXkwQixFQUFjRSxFQUFPMzBCLEtBQVNBLEtBQU82bEIsR0FBVTRPLEVBQWM1TyxFQUFPN2xCLElBRXRFZ0YsRUFBT2hGLEdBQU9xVyxFQUFVd1AsRUFBTzdsQixHQUFNMjBCLEVBQU8zMEIsR0FBTXBCLEdBRWxEb0csRUFBT2hGLEdBQU8yMEIsRUFBTzMwQixHQUN2QixJQUlHZ0YsQ0FDVCwrQkNyQmUsU0FBUzR2QixFQUFzQkMsR0FNNUMsSUFBSXZRLEVBQU0sMENBQTRDdVEsRUFFdEQsSUFBSyxJQUFJOXpCLEVBQUksRUFBR0EsRUFBSXltQixVQUFVcm9CLE9BQVE0QixHQUFLLEVBR3pDdWpCLEdBQU8sV0FBYXdRLG1CQUFtQnROLFVBQVV6bUIsSUFHbkQsTUFBTyx1QkFBeUI4ekIsRUFBTyxXQUFhdlEsRUFBTSx3QkFFNUQsOEVDcEJBLE1BQU15USxFQUE0QixDQUNoQ25pQixPQUFRLFNBQ1JvaUIsUUFBUyxVQUNUQyxVQUFXLFlBQ1gxaUIsU0FBVSxXQUNWZ0gsTUFBTyxRQUNQMmIsU0FBVSxXQUNWQyxRQUFTLFVBQ1RDLGFBQWMsZUFDZEMsU0FBVSxXQUNWdGlCLFNBQVUsWUFFRyxTQUFTK00sRUFBcUJoRCxFQUFlQyxFQUFNdVksRUFBb0IsT0FDcEYsTUFBTUMsRUFBbUJSLEVBQTBCaFksR0FDbkQsT0FBT3dZLEVBQW1CLEdBQUdELEtBQXFCQyxJQUFxQixHQUFHLGFBQTRCelksTUFBa0JDLEdBQzFILDhEQ2ZlLFNBQVN5WSxFQUF1QjFZLEVBQWVzRixFQUFPa1QsRUFBb0IsT0FDdkYsTUFBTXptQixFQUFTLENBQUMsRUFJaEIsT0FIQXVULEVBQU0vaEIsU0FBUTBjLElBQ1psTyxFQUFPa08sSUFBUSxPQUFxQkQsRUFBZUMsRUFBTXVZLEVBQWtCLElBRXRFem1CLENBQ1QsK0JDUGUsU0FBUzRXLEVBQWN2aUIsR0FDcEMsT0FBT0EsR0FBUUEsRUFBS3VpQixlQUFpQmpsQixRQUN2Qyw4RUNEZSxTQUFTaTFCLEVBQVl2eUIsR0FFbEMsT0FEWSxPQUFjQSxHQUNmd3lCLGFBQWVyUCxNQUM1Qiw4RENJZSxTQUFTM0csRUFBYUQsRUFBY25jLEdBQ2pELE1BQU0wQixHQUFTLE9BQVMsQ0FBQyxFQUFHMUIsR0FPNUIsT0FMQXpCLE9BQU80WixLQUFLZ0UsR0FBY3BmLFNBQVE0aUIsU0FDUHJqQixJQUFyQm9GLEVBQU9pZSxLQUNUamUsRUFBT2llLEdBQVl4RCxFQUFhd0QsR0FDbEMsSUFFS2plLENBQ1QsK0JDSmUsU0FBUzJ3QixFQUFPMXJCLEVBQUtqSSxHQUNmLG1CQUFSaUksRUFDVEEsRUFBSWpJLEdBQ0tpSSxJQUNUQSxFQUFJa0csUUFBVW5PLEVBRWxCLDhFQ2xCQSxNQUNBLEVBRDRDLG9CQUFYcWtCLE9BQXlCLGtCQUF3QixrRkNLbkUsU0FBU3VQLEVBQWlCcnNCLEdBQ3ZDLE1BQU1VLEVBQU0sU0FBYVYsR0FJekIsT0FIQSxRQUFrQixLQUNoQlUsRUFBSWtHLFFBQVU1RyxDQUFFLElBRVgsZUFBa0IsSUFBSTBGLEtBRTdCLEVBQUloRixFQUFJa0csWUFBWWxCLElBQU8sR0FDN0Isc0VDWmUsU0FBUzRtQixFQUFXQyxFQUFNQyxHQU12QyxPQUFPLFdBQWMsSUFDUCxNQUFSRCxHQUF3QixNQUFSQyxFQUNYLEtBR0ZDLEtBQ0wsT0FBT0YsRUFBTUUsSUFDYixPQUFPRCxFQUFNQyxFQUFTLEdBRXZCLENBQUNGLEVBQU1DLEdBQ1osb0VDakJBLElBQUlFLEVBQVcsRUFtQmYsTUFBTUMsR0FBa0IsaUJBQWtCLE1BUTNCLFNBQVNDLEVBQU1DLEdBQzVCLFFBQXdCeDJCLElBQXBCczJCLEVBQStCLENBQ2pDLE1BQU1HLEVBQVVILElBQ2hCLE9BQXFCLE1BQWRFLEVBQXFCQSxFQUFhQyxDQUMzQyxDQUdBLE9BaENGLFNBQXFCRCxHQUNuQixNQUFPRSxFQUFXQyxHQUFnQixXQUFlSCxHQUMzQ0ksRUFBS0osR0FBY0UsRUFXekIsT0FWQSxhQUFnQixLQUNHLE1BQWJBLElBS0ZMLEdBQVksRUFDWk0sRUFBYSxPQUFPTixLQUN0QixHQUNDLENBQUNLLElBQ0dFLENBQ1QsQ0FrQlNDLENBQVlMLEVBQ3JCLGtCQ3BDQU0sRUFBT3JtQixRQUFVLEVBQWpCLG1DQ0VBLElBQUlzbUIsRUFBUSxFQUFRLE1BQ2hCQyxFQUFTLEVBQVEsTUFDakJDLEVBQVUsRUFBUSxNQUNsQkMsRUFBVyxFQUFRLE1BQ25CQyxFQUFnQixFQUFRLE1BQ3hCQyxFQUFlLEVBQVEsTUFDdkJDLEVBQWtCLEVBQVEsTUFDMUJDLEVBQXVCLEVBQVEsTUFDL0JDLEVBQWEsRUFBUSxNQUNyQkMsRUFBZ0IsRUFBUSxLQUN4QkMsRUFBZ0IsRUFBUSxLQUU1QlgsRUFBT3JtQixRQUFVLFNBQW9CaW5CLEdBQ25DLE9BQU8sSUFBSUMsU0FBUSxTQUE0QkMsRUFBU0MsR0FDdEQsSUFHSUMsRUFIQUMsRUFBY0wsRUFBT00sS0FDckJDLEVBQWlCUCxFQUFPUSxRQUN4QkMsRUFBZVQsRUFBT1MsYUFFMUIsU0FBU0MsSUFDSFYsRUFBT1csYUFDVFgsRUFBT1csWUFBWUMsWUFBWVIsR0FHN0JKLEVBQU9hLFFBQ1RiLEVBQU9hLE9BQU9DLG9CQUFvQixRQUFTVixFQUUvQyxDQUVJZixFQUFNMEIsV0FBV1YsSUFBZ0JoQixFQUFNMkIsK0JBQ2xDVCxFQUFlLGdCQUd4QixJQUFJVSxFQUFVLElBQUlDLGVBR2xCLEdBQUlsQixFQUFPbUIsS0FBTSxDQUNmLElBQUlDLEVBQVdwQixFQUFPbUIsS0FBS0MsVUFBWSxHQUNuQ2pVLEVBQVc2UyxFQUFPbUIsS0FBS2hVLFNBQVdrVSxTQUFTN0QsbUJBQW1Cd0MsRUFBT21CLEtBQUtoVSxXQUFhLEdBQzNGb1QsRUFBZWUsY0FBZ0IsU0FBV0MsS0FBS0gsRUFBVyxJQUFNalUsRUFDbEUsQ0FFQSxJQUFJcVUsRUFBVy9CLEVBQWNPLEVBQU95QixRQUFTekIsRUFBT2hULEtBT3BELFNBQVMwVSxJQUNQLEdBQUtULEVBQUwsQ0FJQSxJQUFJVSxFQUFrQiwwQkFBMkJWLEVBQVV2QixFQUFhdUIsRUFBUVcseUJBQTJCLEtBR3ZHQyxFQUFXLENBQ2J2QixLQUhrQkcsR0FBaUMsU0FBakJBLEdBQTZDLFNBQWpCQSxFQUN2Q1EsRUFBUVksU0FBL0JaLEVBQVFhLGFBR1JDLE9BQVFkLEVBQVFjLE9BQ2hCQyxXQUFZZixFQUFRZSxXQUNwQnhCLFFBQVNtQixFQUNUM0IsT0FBUUEsRUFDUmlCLFFBQVNBLEdBR1gzQixHQUFPLFNBQWtCNTBCLEdBQ3ZCdzFCLEVBQVF4MUIsR0FDUmcyQixHQUNGLElBQUcsU0FBaUJ1QixHQUNsQjlCLEVBQU84QixHQUNQdkIsR0FDRixHQUFHbUIsR0FHSFosRUFBVSxJQXZCVixDQXdCRixDQW1FQSxHQW5HQUEsRUFBUWlCLEtBQUtsQyxFQUFPbUMsT0FBT3pGLGNBQWU4QyxFQUFTZ0MsRUFBVXhCLEVBQU85WCxPQUFROFgsRUFBT29DLG1CQUFtQixHQUd0R25CLEVBQVFqRSxRQUFVZ0QsRUFBT2hELFFBK0JyQixjQUFlaUUsRUFFakJBLEVBQVFTLFVBQVlBLEVBR3BCVCxFQUFRb0IsbUJBQXFCLFdBQ3RCcEIsR0FBa0MsSUFBdkJBLEVBQVFxQixhQVFELElBQW5CckIsRUFBUWMsUUFBa0JkLEVBQVFzQixhQUF3RCxJQUF6Q3RCLEVBQVFzQixZQUFZdjNCLFFBQVEsV0FLakZpa0IsV0FBV3lTLEVBQ2IsRUFJRlQsRUFBUXVCLFFBQVUsV0FDWHZCLElBSUxkLEVBQU8sSUFBSU4sRUFBVyxrQkFBbUJBLEVBQVc0QyxhQUFjekMsRUFBUWlCLElBRzFFQSxFQUFVLEtBQ1osRUFHQUEsRUFBUXlCLFFBQVUsV0FHaEJ2QyxFQUFPLElBQUlOLEVBQVcsZ0JBQWlCQSxFQUFXOEMsWUFBYTNDLEVBQVFpQixFQUFTQSxJQUdoRkEsRUFBVSxJQUNaLEVBR0FBLEVBQVEyQixVQUFZLFdBQ2xCLElBQUlDLEVBQXNCN0MsRUFBT2hELFFBQVUsY0FBZ0JnRCxFQUFPaEQsUUFBVSxjQUFnQixtQkFDeEY4RixFQUFlOUMsRUFBTzhDLGNBQWdCbEQsRUFDdENJLEVBQU82QyxzQkFDVEEsRUFBc0I3QyxFQUFPNkMscUJBRS9CMUMsRUFBTyxJQUFJTixFQUNUZ0QsRUFDQUMsRUFBYUMsb0JBQXNCbEQsRUFBV21ELFVBQVluRCxFQUFXNEMsYUFDckV6QyxFQUNBaUIsSUFHRkEsRUFBVSxJQUNaLEVBS0k1QixFQUFNMkIsdUJBQXdCLENBRWhDLElBQUlpQyxHQUFhakQsRUFBT2tELGlCQUFtQnZELEVBQWdCNkIsS0FBY3hCLEVBQU9tRCxlQUM5RTVELEVBQVE2RCxLQUFLcEQsRUFBT21ELHFCQUNwQjc2QixFQUVFMjZCLElBQ0YxQyxFQUFlUCxFQUFPcUQsZ0JBQWtCSixFQUU1QyxDQUdJLHFCQUFzQmhDLEdBQ3hCNUIsRUFBTXQyQixRQUFRdzNCLEdBQWdCLFNBQTBCak0sRUFBSzVyQixRQUNoQyxJQUFoQjIzQixHQUFxRCxpQkFBdEIzM0IsRUFBSTJOLHFCQUVyQ2txQixFQUFlNzNCLEdBR3RCdTRCLEVBQVFxQyxpQkFBaUI1NkIsRUFBSzRyQixFQUVsQyxJQUlHK0ssRUFBTWtFLFlBQVl2RCxFQUFPa0QsbUJBQzVCakMsRUFBUWlDLGtCQUFvQmxELEVBQU9rRCxpQkFJakN6QyxHQUFpQyxTQUFqQkEsSUFDbEJRLEVBQVFSLGFBQWVULEVBQU9TLGNBSVMsbUJBQTlCVCxFQUFPd0Qsb0JBQ2hCdkMsRUFBUTdTLGlCQUFpQixXQUFZNFIsRUFBT3dELG9CQUlQLG1CQUE1QnhELEVBQU95RCxrQkFBbUN4QyxFQUFReUMsUUFDM0R6QyxFQUFReUMsT0FBT3RWLGlCQUFpQixXQUFZNFIsRUFBT3lELG1CQUdqRHpELEVBQU9XLGFBQWVYLEVBQU9hLFVBRy9CVCxFQUFhLFNBQVN1RCxHQUNmMUMsSUFHTGQsR0FBUXdELEdBQVdBLEdBQVVBLEVBQU81M0IsS0FBUSxJQUFJK3pCLEVBQWtCNkQsR0FDbEUxQyxFQUFRMkMsUUFDUjNDLEVBQVUsS0FDWixFQUVBakIsRUFBT1csYUFBZVgsRUFBT1csWUFBWWtELFVBQVV6RCxHQUMvQ0osRUFBT2EsU0FDVGIsRUFBT2EsT0FBT2lELFFBQVUxRCxJQUFlSixFQUFPYSxPQUFPelMsaUJBQWlCLFFBQVNnUyxLQUk5RUMsSUFDSEEsRUFBYyxNQUdoQixJQUFJMEQsRUFBV2hFLEVBQWN5QixHQUV6QnVDLElBQStELElBQW5ELENBQUUsT0FBUSxRQUFTLFFBQVMvNEIsUUFBUSs0QixHQUNsRDVELEVBQU8sSUFBSU4sRUFBVyx3QkFBMEJrRSxFQUFXLElBQUtsRSxFQUFXbUUsZ0JBQWlCaEUsSUFNOUZpQixFQUFRZ0QsS0FBSzVELEVBQ2YsR0FDRiwrQkMzTkEsSUFBSWhCLEVBQVEsRUFBUSxNQUNoQjZFLEVBQU8sRUFBUSxNQUNmQyxFQUFRLEVBQVEsS0FDaEJDLEVBQWMsRUFBUSxNQTRCdEJDLEVBbkJKLFNBQVNDLEVBQWVDLEdBQ3RCLElBQUlDLEVBQVUsSUFBSUwsRUFBTUksR0FDcEJFLEVBQVdQLEVBQUtDLEVBQU12N0IsVUFBVXE0QixRQUFTdUQsR0FhN0MsT0FWQW5GLEVBQU1xRixPQUFPRCxFQUFVTixFQUFNdjdCLFVBQVc0N0IsR0FHeENuRixFQUFNcUYsT0FBT0QsRUFBVUQsR0FHdkJDLEVBQVN2eUIsT0FBUyxTQUFnQnl5QixHQUNoQyxPQUFPTCxFQUFlRixFQUFZRyxFQUFlSSxHQUNuRCxFQUVPRixDQUNULENBR1lILENBM0JHLEVBQVEsT0E4QnZCRCxFQUFNRixNQUFRQSxFQUdkRSxFQUFNdkUsY0FBZ0IsRUFBUSxLQUM5QnVFLEVBQU1PLFlBQWMsRUFBUSxNQUM1QlAsRUFBTVEsU0FBVyxFQUFRLE1BQ3pCUixFQUFNUyxRQUFVLGdCQUNoQlQsRUFBTVUsV0FBYSxFQUFRLE1BRzNCVixFQUFNeEUsV0FBYSxFQUFRLE1BRzNCd0UsRUFBTVcsT0FBU1gsRUFBTXZFLGNBR3JCdUUsRUFBTVksSUFBTSxTQUFhQyxHQUN2QixPQUFPakYsUUFBUWdGLElBQUlDLEVBQ3JCLEVBQ0FiLEVBQU1jLE9BQVMsRUFBUSxNQUd2QmQsRUFBTWUsYUFBZSxFQUFRLE1BRTdCaEcsRUFBT3JtQixRQUFVc3JCLEVBR2pCakYsRUFBT3JtQixRQUFQLFFBQXlCc3JCLCtCQzdEekIsSUFBSXZFLEVBQWdCLEVBQVEsS0FRNUIsU0FBUzhFLEVBQVlTLEdBQ25CLEdBQXdCLG1CQUFiQSxFQUNULE1BQU0sSUFBSUMsVUFBVSxnQ0FHdEIsSUFBSUMsRUFFSi85QixLQUFLZytCLFFBQVUsSUFBSXZGLFNBQVEsU0FBeUJDLEdBQ2xEcUYsRUFBaUJyRixDQUNuQixJQUVBLElBQUkxekIsRUFBUWhGLEtBR1pBLEtBQUtnK0IsUUFBUUMsTUFBSyxTQUFTOUIsR0FDekIsR0FBS24zQixFQUFNazVCLFdBQVgsQ0FFQSxJQUFJajhCLEVBQ0F5cUIsRUFBSTFuQixFQUFNazVCLFdBQVc3OUIsT0FFekIsSUFBSzRCLEVBQUksRUFBR0EsRUFBSXlxQixFQUFHenFCLElBQ2pCK0MsRUFBTWs1QixXQUFXajhCLEdBQUdrNkIsR0FFdEJuM0IsRUFBTWs1QixXQUFhLElBUlUsQ0FTL0IsSUFHQWwrQixLQUFLZytCLFFBQVFDLEtBQU8sU0FBU0UsR0FDM0IsSUFBSUMsRUFFQUosRUFBVSxJQUFJdkYsU0FBUSxTQUFTQyxHQUNqQzF6QixFQUFNcTNCLFVBQVUzRCxHQUNoQjBGLEVBQVcxRixDQUNiLElBQUd1RixLQUFLRSxHQU1SLE9BSkFILEVBQVE3QixPQUFTLFdBQ2ZuM0IsRUFBTW8wQixZQUFZZ0YsRUFDcEIsRUFFT0osQ0FDVCxFQUVBSCxHQUFTLFNBQWdCUSxHQUNuQnI1QixFQUFNaWYsU0FLVmpmLEVBQU1pZixPQUFTLElBQUlxVSxFQUFjK0YsR0FDakNOLEVBQWUvNEIsRUFBTWlmLFFBQ3ZCLEdBQ0YsQ0FLQW1aLEVBQVloOEIsVUFBVWs5QixpQkFBbUIsV0FDdkMsR0FBSXQrQixLQUFLaWtCLE9BQ1AsTUFBTWprQixLQUFLaWtCLE1BRWYsRUFNQW1aLEVBQVloOEIsVUFBVWk3QixVQUFZLFNBQW1Ca0MsR0FDL0N2K0IsS0FBS2lrQixPQUNQc2EsRUFBU3YrQixLQUFLaWtCLFFBSVpqa0IsS0FBS2srQixXQUNQbCtCLEtBQUtrK0IsV0FBV3Q5QixLQUFLMjlCLEdBRXJCditCLEtBQUtrK0IsV0FBYSxDQUFDSyxFQUV2QixFQU1BbkIsRUFBWWg4QixVQUFVZzRCLFlBQWMsU0FBcUJtRixHQUN2RCxHQUFLditCLEtBQUtrK0IsV0FBVixDQUdBLElBQUl6NkIsRUFBUXpELEtBQUtrK0IsV0FBVzE2QixRQUFRKzZCLElBQ3JCLElBQVg5NkIsR0FDRnpELEtBQUtrK0IsV0FBV00sT0FBTy82QixFQUFPLEVBSGhDLENBS0YsRUFNQTI1QixFQUFZdkgsT0FBUyxXQUNuQixJQUFJc0csRUFJSixNQUFPLENBQ0xuM0IsTUFKVSxJQUFJbzRCLEdBQVksU0FBa0JxQixHQUM1Q3RDLEVBQVNzQyxDQUNYLElBR0V0QyxPQUFRQSxFQUVaLEVBRUF2RSxFQUFPcm1CLFFBQVU2ckIsOEJDcEhqQixJQUFJL0UsRUFBYSxFQUFRLE1BU3pCLFNBQVNDLEVBQWMrRixHQUVyQmhHLEVBQVdqdkIsS0FBS3BKLEtBQWlCLE1BQVhxK0IsRUFBa0IsV0FBYUEsRUFBU2hHLEVBQVdxRyxjQUN6RTErQixLQUFLdUssS0FBTyxlQUNkLENBWlksRUFBUSxNQWNkbzBCLFNBQVNyRyxFQUFlRCxFQUFZLENBQ3hDdUcsWUFBWSxJQUdkaEgsRUFBT3JtQixRQUFVK21CLHlCQ25CakJWLEVBQU9ybUIsUUFBVSxTQUFrQnJPLEdBQ2pDLFNBQVVBLElBQVNBLEVBQU0wN0IsV0FDM0IsOEJDRkEsSUFBSS9HLEVBQVEsRUFBUSxNQUNoQkcsRUFBVyxFQUFRLE1BQ25CNkcsRUFBcUIsRUFBUSxLQUM3QkMsRUFBa0IsRUFBUSxNQUMxQmxDLEVBQWMsRUFBUSxNQUN0QjNFLEVBQWdCLEVBQVEsTUFDeEJqVSxFQUFZLEVBQVEsTUFFcEIrYSxFQUFhL2EsRUFBVSthLFdBTTNCLFNBQVNwQyxFQUFNUSxHQUNibjlCLEtBQUtnL0IsU0FBVzdCLEVBQ2hCbjlCLEtBQUtpL0IsYUFBZSxDQUNsQnhGLFFBQVMsSUFBSW9GLEVBQ2J4RSxTQUFVLElBQUl3RSxFQUVsQixDQU9BbEMsRUFBTXY3QixVQUFVcTRCLFFBQVUsU0FBaUJ5RixFQUFhMUcsR0FHM0IsaUJBQWhCMEcsR0FDVDFHLEVBQVNBLEdBQVUsQ0FBQyxHQUNiaFQsSUFBTTBaLEVBRWIxRyxFQUFTMEcsR0FBZSxDQUFDLEdBRzNCMUcsRUFBU29FLEVBQVk1OEIsS0FBS2cvQixTQUFVeEcsSUFHekJtQyxPQUNUbkMsRUFBT21DLE9BQVNuQyxFQUFPbUMsT0FBTzlyQixjQUNyQjdPLEtBQUtnL0IsU0FBU3JFLE9BQ3ZCbkMsRUFBT21DLE9BQVMzNkIsS0FBS2cvQixTQUFTckUsT0FBTzlyQixjQUVyQzJwQixFQUFPbUMsT0FBUyxNQUdsQixJQUFJVyxFQUFlOUMsRUFBTzhDLGtCQUVMeDZCLElBQWpCdzZCLEdBQ0Z0WCxFQUFVbWIsY0FBYzdELEVBQWMsQ0FDcEM4RCxrQkFBbUJMLEVBQVd6RCxhQUFheUQsRUFBV00sU0FDdERDLGtCQUFtQlAsRUFBV3pELGFBQWF5RCxFQUFXTSxTQUN0RDlELG9CQUFxQndELEVBQVd6RCxhQUFheUQsRUFBV00sV0FDdkQsR0FJTCxJQUFJRSxFQUEwQixHQUMxQkMsR0FBaUMsRUFDckN4L0IsS0FBS2kvQixhQUFheEYsUUFBUWw0QixTQUFRLFNBQW9DaytCLEdBQ2pDLG1CQUF4QkEsRUFBWUMsVUFBMEQsSUFBaENELEVBQVlDLFFBQVFsSCxLQUlyRWdILEVBQWlDQSxHQUFrQ0MsRUFBWUUsWUFFL0VKLEVBQXdCSyxRQUFRSCxFQUFZSSxVQUFXSixFQUFZSyxVQUNyRSxJQUVBLElBS0k5QixFQUxBK0IsRUFBMkIsR0FPL0IsR0FOQS8vQixLQUFLaS9CLGFBQWE1RSxTQUFTOTRCLFNBQVEsU0FBa0NrK0IsR0FDbkVNLEVBQXlCbi9CLEtBQUs2K0IsRUFBWUksVUFBV0osRUFBWUssU0FDbkUsS0FJS04sRUFBZ0MsQ0FDbkMsSUFBSVEsRUFBUSxDQUFDbEIsT0FBaUJoK0IsR0FNOUIsSUFKQXFJLE1BQU0vSCxVQUFVdytCLFFBQVFqWCxNQUFNcVgsRUFBT1QsR0FDckNTLEVBQVFBLEVBQU0vMUIsT0FBTzgxQixHQUVyQi9CLEVBQVV2RixRQUFRQyxRQUFRRixHQUNuQndILEVBQU0zL0IsUUFDWDI5QixFQUFVQSxFQUFRQyxLQUFLK0IsRUFBTTVULFFBQVM0VCxFQUFNNVQsU0FHOUMsT0FBTzRSLENBQ1QsQ0FJQSxJQURBLElBQUlpQyxFQUFZekgsRUFDVCtHLEVBQXdCbC9CLFFBQVEsQ0FDckMsSUFBSTYvQixFQUFjWCxFQUF3Qm5ULFFBQ3RDK1QsRUFBYVosRUFBd0JuVCxRQUN6QyxJQUNFNlQsRUFBWUMsRUFBWUQsRUFJMUIsQ0FIRSxNQUFPeGxCLEdBQ1AwbEIsRUFBVzFsQixHQUNYLEtBQ0YsQ0FDRixDQUVBLElBQ0V1akIsRUFBVWMsRUFBZ0JtQixFQUc1QixDQUZFLE1BQU94bEIsR0FDUCxPQUFPZ2UsUUFBUUUsT0FBT2xlLEVBQ3hCLENBRUEsS0FBT3NsQixFQUF5QjEvQixRQUM5QjI5QixFQUFVQSxFQUFRQyxLQUFLOEIsRUFBeUIzVCxRQUFTMlQsRUFBeUIzVCxTQUdwRixPQUFPNFIsQ0FDVCxFQUVBckIsRUFBTXY3QixVQUFVZy9CLE9BQVMsU0FBZ0I1SCxHQUN2Q0EsRUFBU29FLEVBQVk1OEIsS0FBS2cvQixTQUFVeEcsR0FDcEMsSUFBSXdCLEVBQVcvQixFQUFjTyxFQUFPeUIsUUFBU3pCLEVBQU9oVCxLQUNwRCxPQUFPd1MsRUFBU2dDLEVBQVV4QixFQUFPOVgsT0FBUThYLEVBQU9vQyxpQkFDbEQsRUFHQS9DLEVBQU10MkIsUUFBUSxDQUFDLFNBQVUsTUFBTyxPQUFRLFlBQVksU0FBNkJvNUIsR0FFL0VnQyxFQUFNdjdCLFVBQVV1NUIsR0FBVSxTQUFTblYsRUFBS2dULEdBQ3RDLE9BQU94NEIsS0FBS3k1QixRQUFRbUQsRUFBWXBFLEdBQVUsQ0FBQyxFQUFHLENBQzVDbUMsT0FBUUEsRUFDUm5WLElBQUtBLEVBQ0xzVCxNQUFPTixHQUFVLENBQUMsR0FBR00sT0FFekIsQ0FDRixJQUVBakIsRUFBTXQyQixRQUFRLENBQUMsT0FBUSxNQUFPLFVBQVUsU0FBK0JvNUIsR0FHckUsU0FBUzBGLEVBQW1CQyxHQUMxQixPQUFPLFNBQW9COWEsRUFBS3NULEVBQU1OLEdBQ3BDLE9BQU94NEIsS0FBS3k1QixRQUFRbUQsRUFBWXBFLEdBQVUsQ0FBQyxFQUFHLENBQzVDbUMsT0FBUUEsRUFDUjNCLFFBQVNzSCxFQUFTLENBQ2hCLGVBQWdCLHVCQUNkLENBQUMsRUFDTDlhLElBQUtBLEVBQ0xzVCxLQUFNQSxJQUVWLENBQ0YsQ0FFQTZELEVBQU12N0IsVUFBVXU1QixHQUFVMEYsSUFFMUIxRCxFQUFNdjdCLFVBQVV1NUIsRUFBUyxRQUFVMEYsR0FBbUIsRUFDeEQsSUFFQXpJLEVBQU9ybUIsUUFBVW9yQiwrQkM3SmpCLElBQUk5RSxFQUFRLEVBQVEsTUFZcEIsU0FBU1EsRUFBV2dHLEVBQVN0SSxFQUFNeUMsRUFBUWlCLEVBQVNZLEdBQ2xEamdCLE1BQU1oUixLQUFLcEosTUFDWEEsS0FBS3ErQixRQUFVQSxFQUNmcitCLEtBQUt1SyxLQUFPLGFBQ1p3ckIsSUFBUy8xQixLQUFLKzFCLEtBQU9BLEdBQ3JCeUMsSUFBV3g0QixLQUFLdzRCLE9BQVNBLEdBQ3pCaUIsSUFBWXo1QixLQUFLeTVCLFFBQVVBLEdBQzNCWSxJQUFhcjZCLEtBQUtxNkIsU0FBV0EsRUFDL0IsQ0FFQXhDLEVBQU04RyxTQUFTdEcsRUFBWWplLE1BQU8sQ0FDaENtbUIsT0FBUSxXQUNOLE1BQU8sQ0FFTGxDLFFBQVNyK0IsS0FBS3ErQixRQUNkOXpCLEtBQU12SyxLQUFLdUssS0FFWGkyQixZQUFheGdDLEtBQUt3Z0MsWUFDbEI1YSxPQUFRNWxCLEtBQUs0bEIsT0FFYjZhLFNBQVV6Z0MsS0FBS3lnQyxTQUNmQyxXQUFZMWdDLEtBQUswZ0MsV0FDakJDLGFBQWMzZ0MsS0FBSzJnQyxhQUNuQkMsTUFBTzVnQyxLQUFLNGdDLE1BRVpwSSxPQUFReDRCLEtBQUt3NEIsT0FDYnpDLEtBQU0vMUIsS0FBSysxQixLQUNYd0UsT0FBUXY2QixLQUFLcTZCLFVBQVlyNkIsS0FBS3E2QixTQUFTRSxPQUFTdjZCLEtBQUtxNkIsU0FBU0UsT0FBUyxLQUUzRSxJQUdGLElBQUluNUIsRUFBWWkzQixFQUFXajNCLFVBQ3ZCeS9CLEVBQWMsQ0FBQyxFQUVuQixDQUNFLHVCQUNBLGlCQUNBLGVBQ0EsWUFDQSxjQUNBLDRCQUNBLGlCQUNBLG1CQUNBLGtCQUNBLGdCQUVBdC9CLFNBQVEsU0FBU3cwQixHQUNqQjhLLEVBQVk5SyxHQUFRLENBQUM3eUIsTUFBTzZ5QixFQUM5QixJQUVBaHpCLE9BQU8rOUIsaUJBQWlCekksRUFBWXdJLEdBQ3BDOTlCLE9BQU9xUCxlQUFlaFIsRUFBVyxlQUFnQixDQUFDOEIsT0FBTyxJQUd6RG0xQixFQUFXMEksS0FBTyxTQUFTdG1CLEVBQU9zYixFQUFNeUMsRUFBUWlCLEVBQVNZLEVBQVUyRyxHQUNqRSxJQUFJQyxFQUFhbCtCLE9BQU8ySCxPQUFPdEosR0FZL0IsT0FWQXkyQixFQUFNcUosYUFBYXptQixFQUFPd21CLEdBQVksU0FBZ0IxeEIsR0FDcEQsT0FBT0EsSUFBUTZLLE1BQU1oWixTQUN2QixJQUVBaTNCLEVBQVdqdkIsS0FBSzYzQixFQUFZeG1CLEVBQU00akIsUUFBU3RJLEVBQU15QyxFQUFRaUIsRUFBU1ksR0FFbEU0RyxFQUFXMTJCLEtBQU9rUSxFQUFNbFEsS0FFeEJ5MkIsR0FBZWorQixPQUFPQyxPQUFPaStCLEVBQVlELEdBRWxDQyxDQUNULEVBRUFySixFQUFPcm1CLFFBQVU4bUIsOEJDbkZqQixJQUFJUixFQUFRLEVBQVEsTUFFcEIsU0FBU2dILElBQ1A3K0IsS0FBS2l2QixTQUFXLEVBQ2xCLENBVUE0UCxFQUFtQno5QixVQUFVKy9CLElBQU0sU0FBYXRCLEVBQVdDLEVBQVVoZ0MsR0FPbkUsT0FOQUUsS0FBS2l2QixTQUFTcnVCLEtBQUssQ0FDakJpL0IsVUFBV0EsRUFDWEMsU0FBVUEsRUFDVkgsY0FBYTcvQixHQUFVQSxFQUFRNi9CLFlBQy9CRCxRQUFTNS9CLEVBQVVBLEVBQVE0L0IsUUFBVSxPQUVoQzEvQixLQUFLaXZCLFNBQVM1dUIsT0FBUyxDQUNoQyxFQU9BdytCLEVBQW1CejlCLFVBQVVnZ0MsTUFBUSxTQUFlMUosR0FDOUMxM0IsS0FBS2l2QixTQUFTeUksS0FDaEIxM0IsS0FBS2l2QixTQUFTeUksR0FBTSxLQUV4QixFQVVBbUgsRUFBbUJ6OUIsVUFBVUcsUUFBVSxTQUFpQmtKLEdBQ3REb3RCLEVBQU10MkIsUUFBUXZCLEtBQUtpdkIsVUFBVSxTQUF3QjFqQixHQUN6QyxPQUFOQSxHQUNGZCxFQUFHYyxFQUVQLEdBQ0YsRUFFQXFzQixFQUFPcm1CLFFBQVVzdEIsK0JDbkRqQixJQUFJd0MsRUFBZ0IsRUFBUSxNQUN4QkMsRUFBYyxFQUFRLE1BVzFCMUosRUFBT3JtQixRQUFVLFNBQXVCMG9CLEVBQVNzSCxHQUMvQyxPQUFJdEgsSUFBWW9ILEVBQWNFLEdBQ3JCRCxFQUFZckgsRUFBU3NILEdBRXZCQSxDQUNULCtCQ2pCQSxJQUFJMUosRUFBUSxFQUFRLE1BQ2hCMkosRUFBZ0IsRUFBUSxNQUN4Qm5FLEVBQVcsRUFBUSxNQUNuQjJCLEVBQVcsRUFBUSxNQUNuQjFHLEVBQWdCLEVBQVEsS0FLNUIsU0FBU21KLEVBQTZCakosR0FLcEMsR0FKSUEsRUFBT1csYUFDVFgsRUFBT1csWUFBWW1GLG1CQUdqQjlGLEVBQU9hLFFBQVViLEVBQU9hLE9BQU9pRCxRQUNqQyxNQUFNLElBQUloRSxDQUVkLENBUUFWLEVBQU9ybUIsUUFBVSxTQUF5QmluQixHQThCeEMsT0E3QkFpSixFQUE2QmpKLEdBRzdCQSxFQUFPUSxRQUFVUixFQUFPUSxTQUFXLENBQUMsRUFHcENSLEVBQU9NLEtBQU8wSSxFQUFjcDRCLEtBQzFCb3ZCLEVBQ0FBLEVBQU9NLEtBQ1BOLEVBQU9RLFFBQ1BSLEVBQU9rSixrQkFJVGxKLEVBQU9RLFFBQVVuQixFQUFNMUksTUFDckJxSixFQUFPUSxRQUFRdGQsUUFBVSxDQUFDLEVBQzFCOGMsRUFBT1EsUUFBUVIsRUFBT21DLFNBQVcsQ0FBQyxFQUNsQ25DLEVBQU9RLFNBR1RuQixFQUFNdDJCLFFBQ0osQ0FBQyxTQUFVLE1BQU8sT0FBUSxPQUFRLE1BQU8sUUFBUyxXQUNsRCxTQUEyQm81QixVQUNsQm5DLEVBQU9RLFFBQVEyQixFQUN4QixLQUdZbkMsRUFBT21KLFNBQVczQyxFQUFTMkMsU0FFMUJuSixHQUFReUYsTUFBSyxTQUE2QjVELEdBV3ZELE9BVkFvSCxFQUE2QmpKLEdBRzdCNkIsRUFBU3ZCLEtBQU8wSSxFQUFjcDRCLEtBQzVCb3ZCLEVBQ0E2QixFQUFTdkIsS0FDVHVCLEVBQVNyQixRQUNUUixFQUFPb0osbUJBR0Z2SCxDQUNULElBQUcsU0FBNEJwVyxHQWU3QixPQWRLb1osRUFBU3BaLEtBQ1p3ZCxFQUE2QmpKLEdBR3pCdlUsR0FBVUEsRUFBT29XLFdBQ25CcFcsRUFBT29XLFNBQVN2QixLQUFPMEksRUFBY3A0QixLQUNuQ292QixFQUNBdlUsRUFBT29XLFNBQVN2QixLQUNoQjdVLEVBQU9vVyxTQUFTckIsUUFDaEJSLEVBQU9vSixxQkFLTm5KLFFBQVFFLE9BQU8xVSxFQUN4QixHQUNGLCtCQ3BGQSxJQUFJNFQsRUFBUSxFQUFRLE1BVXBCRCxFQUFPcm1CLFFBQVUsU0FBcUJzd0IsRUFBU0MsR0FFN0NBLEVBQVVBLEdBQVcsQ0FBQyxFQUN0QixJQUFJdEosRUFBUyxDQUFDLEVBRWQsU0FBU3VKLEVBQWVoYixFQUFROE8sR0FDOUIsT0FBSWdDLEVBQU1sQyxjQUFjNU8sSUFBVzhRLEVBQU1sQyxjQUFjRSxHQUM5Q2dDLEVBQU0xSSxNQUFNcEksRUFBUThPLEdBQ2xCZ0MsRUFBTWxDLGNBQWNFLEdBQ3RCZ0MsRUFBTTFJLE1BQU0sQ0FBQyxFQUFHMEcsR0FDZGdDLEVBQU1wb0IsUUFBUW9tQixHQUNoQkEsRUFBT2h5QixRQUVUZ3lCLENBQ1QsQ0FHQSxTQUFTbU0sRUFBb0Iva0IsR0FDM0IsT0FBSzRhLEVBQU1rRSxZQUFZK0YsRUFBUTdrQixJQUVuQjRhLEVBQU1rRSxZQUFZOEYsRUFBUTVrQixTQUEvQixFQUNFOGtCLE9BQWVqaEMsRUFBVytnQyxFQUFRNWtCLElBRmxDOGtCLEVBQWVGLEVBQVE1a0IsR0FBTzZrQixFQUFRN2tCLEdBSWpELENBR0EsU0FBU2dsQixFQUFpQmhsQixHQUN4QixJQUFLNGEsRUFBTWtFLFlBQVkrRixFQUFRN2tCLElBQzdCLE9BQU84a0IsT0FBZWpoQyxFQUFXZ2hDLEVBQVE3a0IsR0FFN0MsQ0FHQSxTQUFTaWxCLEVBQWlCamxCLEdBQ3hCLE9BQUs0YSxFQUFNa0UsWUFBWStGLEVBQVE3a0IsSUFFbkI0YSxFQUFNa0UsWUFBWThGLEVBQVE1a0IsU0FBL0IsRUFDRThrQixPQUFlamhDLEVBQVcrZ0MsRUFBUTVrQixJQUZsQzhrQixPQUFlamhDLEVBQVdnaEMsRUFBUTdrQixHQUk3QyxDQUdBLFNBQVNrbEIsRUFBZ0JsbEIsR0FDdkIsT0FBSUEsS0FBUTZrQixFQUNIQyxFQUFlRixFQUFRNWtCLEdBQU82a0IsRUFBUTdrQixJQUNwQ0EsS0FBUTRrQixFQUNWRSxPQUFlamhDLEVBQVcrZ0MsRUFBUTVrQixTQURwQyxDQUdULENBRUEsSUFBSW1sQixFQUFXLENBQ2IsSUFBT0gsRUFDUCxPQUFVQSxFQUNWLEtBQVFBLEVBQ1IsUUFBV0MsRUFDWCxpQkFBb0JBLEVBQ3BCLGtCQUFxQkEsRUFDckIsaUJBQW9CQSxFQUNwQixRQUFXQSxFQUNYLGVBQWtCQSxFQUNsQixnQkFBbUJBLEVBQ25CLFFBQVdBLEVBQ1gsYUFBZ0JBLEVBQ2hCLGVBQWtCQSxFQUNsQixlQUFrQkEsRUFDbEIsaUJBQW9CQSxFQUNwQixtQkFBc0JBLEVBQ3RCLFdBQWNBLEVBQ2QsaUJBQW9CQSxFQUNwQixjQUFpQkEsRUFDakIsZUFBa0JBLEVBQ2xCLFVBQWFBLEVBQ2IsVUFBYUEsRUFDYixXQUFjQSxFQUNkLFlBQWVBLEVBQ2YsV0FBY0EsRUFDZCxpQkFBb0JBLEVBQ3BCLGVBQWtCQyxHQVNwQixPQU5BdEssRUFBTXQyQixRQUFRd0IsT0FBTzRaLEtBQUtrbEIsR0FBUzUzQixPQUFPbEgsT0FBTzRaLEtBQUttbEIsS0FBVyxTQUE0QjdrQixHQUMzRixJQUFJa1MsRUFBUWlULEVBQVNubEIsSUFBUytrQixFQUMxQkssRUFBY2xULEVBQU1sUyxHQUN2QjRhLEVBQU1rRSxZQUFZc0csSUFBZ0JsVCxJQUFVZ1QsSUFBcUIzSixFQUFPdmIsR0FBUW9sQixFQUNuRixJQUVPN0osQ0FDVCwrQkNqR0EsSUFBSUgsRUFBYSxFQUFRLE1BU3pCVCxFQUFPcm1CLFFBQVUsU0FBZ0JtbkIsRUFBU0MsRUFBUTBCLEdBQ2hELElBQUlpSSxFQUFpQmpJLEVBQVM3QixPQUFPOEosZUFDaENqSSxFQUFTRSxRQUFXK0gsSUFBa0JBLEVBQWVqSSxFQUFTRSxRQUdqRTVCLEVBQU8sSUFBSU4sRUFDVCxtQ0FBcUNnQyxFQUFTRSxPQUM5QyxDQUFDbEMsRUFBV21FLGdCQUFpQm5FLEVBQVdrSyxrQkFBa0IzL0IsS0FBSzQvQixNQUFNbkksRUFBU0UsT0FBUyxLQUFPLEdBQzlGRixFQUFTN0IsT0FDVDZCLEVBQVNaLFFBQ1RZLElBUEYzQixFQUFRMkIsRUFVWiwrQkN0QkEsSUFBSXhDLEVBQVEsRUFBUSxNQUNoQm1ILEVBQVcsRUFBUSxNQVV2QnBILEVBQU9ybUIsUUFBVSxTQUF1QnVuQixFQUFNRSxFQUFTeUosR0FDckQsSUFBSXpGLEVBQVVoOUIsTUFBUWcvQixFQU10QixPQUpBbkgsRUFBTXQyQixRQUFRa2hDLEdBQUssU0FBbUJoNEIsR0FDcENxdUIsRUFBT3J1QixFQUFHckIsS0FBSzR6QixFQUFTbEUsRUFBTUUsRUFDaEMsSUFFT0YsQ0FDVCwrQkNuQkEsSUFBSWpCLEVBQVEsRUFBUSxNQUNoQjZLLEVBQXNCLEVBQVEsTUFDOUJySyxFQUFhLEVBQVEsTUFDckJELEVBQXVCLEVBQVEsTUFDL0JtRixFQUFhLEVBQVEsTUFFckJvRixFQUF1QixDQUN6QixlQUFnQixxQ0FHbEIsU0FBU0MsRUFBc0I1SixFQUFTOTFCLElBQ2pDMjBCLEVBQU1rRSxZQUFZL0MsSUFBWW5CLEVBQU1rRSxZQUFZL0MsRUFBUSxtQkFDM0RBLEVBQVEsZ0JBQWtCOTFCLEVBRTlCLENBNkJBLElBMUJNeStCLEVBMEJGM0MsRUFBVyxDQUViMUQsYUFBY2xELEVBRWR1SixVQTdCOEIsb0JBQW5CakksZ0JBR21CLG9CQUFabUosU0FBdUUscUJBQTVDOS9CLE9BQU8zQixVQUFVcUssU0FBU3JDLEtBQUt5NUIsWUFEMUVsQixFQUFVLEVBQVEsT0FLYkEsR0F3QlBELGlCQUFrQixDQUFDLFNBQTBCNUksRUFBTUUsR0FJakQsR0FIQTBKLEVBQW9CMUosRUFBUyxVQUM3QjBKLEVBQW9CMUosRUFBUyxnQkFFekJuQixFQUFNMEIsV0FBV1QsSUFDbkJqQixFQUFNaUwsY0FBY2hLLElBQ3BCakIsRUFBTWtMLFNBQVNqSyxJQUNmakIsRUFBTW1MLFNBQVNsSyxJQUNmakIsRUFBTW9MLE9BQU9uSyxJQUNiakIsRUFBTXFMLE9BQU9wSyxHQUViLE9BQU9BLEVBRVQsR0FBSWpCLEVBQU1zTCxrQkFBa0JySyxHQUMxQixPQUFPQSxFQUFLc0ssT0FFZCxHQUFJdkwsRUFBTXdMLGtCQUFrQnZLLEdBRTFCLE9BREE4SixFQUFzQjVKLEVBQVMsbURBQ3hCRixFQUFLcnRCLFdBR2QsSUFHSTYzQixFQUhBQyxFQUFrQjFMLEVBQU0yTCxTQUFTMUssR0FDakMySyxFQUFjekssR0FBV0EsRUFBUSxnQkFJckMsSUFBS3NLLEVBQWF6TCxFQUFNeUwsV0FBV3hLLEtBQVd5SyxHQUFtQyx3QkFBaEJFLEVBQXdDLENBQ3ZHLElBQUlDLEVBQVkxakMsS0FBSzJqQyxLQUFPM2pDLEtBQUsyakMsSUFBSUMsU0FDckMsT0FBT3JHLEVBQVcrRixFQUFhLENBQUMsVUFBV3hLLEdBQVFBLEVBQU00SyxHQUFhLElBQUlBLEVBQzVFLENBQU8sT0FBSUgsR0FBbUMscUJBQWhCRSxHQUM1QmIsRUFBc0I1SixFQUFTLG9CQW5EckMsU0FBeUI2SyxFQUFVQyxFQUFRQyxHQUN6QyxHQUFJbE0sRUFBTW1NLFNBQVNILEdBQ2pCLElBRUUsT0FEQSxFQUFXdG9CLEtBQUs5VSxPQUFPbzlCLEdBQ2hCaE0sRUFBTTUwQixLQUFLNGdDLEVBS3BCLENBSkUsTUFBT3RoQyxHQUNQLEdBQWUsZ0JBQVhBLEVBQUVnSSxLQUNKLE1BQU1oSSxDQUVWLENBR0YsT0FBTyxFQUFZZ1osS0FBS3BWLFdBQVcwOUIsRUFDckMsQ0F1Q2FJLENBQWdCbkwsSUFHbEJBLENBQ1QsR0FFQThJLGtCQUFtQixDQUFDLFNBQTJCOUksR0FDN0MsSUFBSXdDLEVBQWV0N0IsS0FBS3M3QixjQUFnQjBELEVBQVMxRCxhQUM3QzhELEVBQW9COUQsR0FBZ0JBLEVBQWE4RCxrQkFDakRFLEVBQW9CaEUsR0FBZ0JBLEVBQWFnRSxrQkFDakQ0RSxHQUFxQjlFLEdBQTJDLFNBQXRCcC9CLEtBQUtpNUIsYUFFbkQsR0FBSWlMLEdBQXNCNUUsR0FBcUJ6SCxFQUFNbU0sU0FBU2xMLElBQVNBLEVBQUt6NEIsT0FDMUUsSUFDRSxPQUFPa2IsS0FBSzlVLE1BQU1xeUIsRUFRcEIsQ0FQRSxNQUFPdjJCLEdBQ1AsR0FBSTJoQyxFQUFtQixDQUNyQixHQUFlLGdCQUFYM2hDLEVBQUVnSSxLQUNKLE1BQU04dEIsRUFBVzBJLEtBQUt4K0IsRUFBRzgxQixFQUFXa0ssaUJBQWtCdmlDLEtBQU0sS0FBTUEsS0FBS3E2QixVQUV6RSxNQUFNOTNCLENBQ1IsQ0FDRixDQUdGLE9BQU91MkIsQ0FDVCxHQU1BdEQsUUFBUyxFQUVUbUcsZUFBZ0IsYUFDaEJFLGVBQWdCLGVBRWhCc0ksa0JBQW1CLEVBQ25CQyxlQUFnQixFQUVoQlQsSUFBSyxDQUNIQyxTQUFVLEVBQVEsT0FHcEJ0QixlQUFnQixTQUF3Qi9ILEdBQ3RDLE9BQU9BLEdBQVUsS0FBT0EsRUFBUyxHQUNuQyxFQUVBdkIsUUFBUyxDQUNQdGQsT0FBUSxDQUNOLE9BQVUsdUNBS2hCbWMsRUFBTXQyQixRQUFRLENBQUMsU0FBVSxNQUFPLFNBQVMsU0FBNkJvNUIsR0FDcEVxRSxFQUFTaEcsUUFBUTJCLEdBQVUsQ0FBQyxDQUM5QixJQUVBOUMsRUFBTXQyQixRQUFRLENBQUMsT0FBUSxNQUFPLFVBQVUsU0FBK0JvNUIsR0FDckVxRSxFQUFTaEcsUUFBUTJCLEdBQVU5QyxFQUFNMUksTUFBTXdULEVBQ3pDLElBRUEvSyxFQUFPcm1CLFFBQVV5dEIseUJDL0lqQnBILEVBQU9ybUIsUUFBVSxDQUNmNnRCLG1CQUFtQixFQUNuQkUsbUJBQW1CLEVBQ25CL0QscUJBQXFCLGFDTHZCM0QsRUFBT3JtQixRQUFVLENBQ2YsUUFBVyxpQ0NDYnFtQixFQUFPcm1CLFFBQVUsU0FBYzlHLEVBQUk0NUIsR0FDakMsT0FBTyxXQUVMLElBREEsSUFBSWwwQixFQUFPLElBQUloSCxNQUFNdWYsVUFBVXJvQixRQUN0QjRCLEVBQUksRUFBR0EsRUFBSWtPLEVBQUs5UCxPQUFRNEIsSUFDL0JrTyxFQUFLbE8sR0FBS3ltQixVQUFVem1CLEdBRXRCLE9BQU93SSxFQUFHa2UsTUFBTTBiLEVBQVNsMEIsRUFDM0IsQ0FDRiwrQkNSQSxJQUFJMG5CLEVBQVEsRUFBUSxNQUVwQixTQUFTeU0sRUFBT3hYLEdBQ2QsT0FBT2tKLG1CQUFtQmxKLEdBQ3hCM3BCLFFBQVEsUUFBUyxLQUNqQkEsUUFBUSxPQUFRLEtBQ2hCQSxRQUFRLFFBQVMsS0FDakJBLFFBQVEsT0FBUSxLQUNoQkEsUUFBUSxRQUFTLEtBQ2pCQSxRQUFRLFFBQVMsSUFDckIsQ0FTQXkwQixFQUFPcm1CLFFBQVUsU0FBa0JpVSxFQUFLOUUsRUFBUWthLEdBRTlDLElBQUtsYSxFQUNILE9BQU84RSxFQUdULElBQUkrZSxFQUNKLEdBQUkzSixFQUNGMkosRUFBbUIzSixFQUFpQmxhLFFBQy9CLEdBQUltWCxFQUFNd0wsa0JBQWtCM2lCLEdBQ2pDNmpCLEVBQW1CN2pCLEVBQU9qVixlQUNyQixDQUNMLElBQUkrNEIsRUFBUSxHQUVaM00sRUFBTXQyQixRQUFRbWYsR0FBUSxTQUFtQm9NLEVBQUs1ckIsR0FDeEM0ckIsVUFJQStLLEVBQU1wb0IsUUFBUXFkLEdBQ2hCNXJCLEdBQVksS0FFWjRyQixFQUFNLENBQUNBLEdBR1QrSyxFQUFNdDJCLFFBQVF1ckIsR0FBSyxTQUFvQjJYLEdBQ2pDNU0sRUFBTTZNLE9BQU9ELEdBQ2ZBLEVBQUlBLEVBQUVFLGNBQ0c5TSxFQUFNMkwsU0FBU2lCLEtBQ3hCQSxFQUFJbHBCLEtBQUtwVixVQUFVcytCLElBRXJCRCxFQUFNNWpDLEtBQUswakMsRUFBT3BqQyxHQUFPLElBQU1vakMsRUFBT0csR0FDeEMsSUFDRixJQUVBRixFQUFtQkMsRUFBTW4rQixLQUFLLElBQ2hDLENBRUEsR0FBSWsrQixFQUFrQixDQUNwQixJQUFJSyxFQUFnQnBmLEVBQUloaUIsUUFBUSxNQUNULElBQW5Cb2hDLElBQ0ZwZixFQUFNQSxFQUFJM2hCLE1BQU0sRUFBRytnQyxJQUdyQnBmLEtBQThCLElBQXRCQSxFQUFJaGlCLFFBQVEsS0FBYyxJQUFNLEtBQU8rZ0MsQ0FDakQsQ0FFQSxPQUFPL2UsQ0FDVCx5QkM1REFvUyxFQUFPcm1CLFFBQVUsU0FBcUIwb0IsRUFBUzRLLEdBQzdDLE9BQU9BLEVBQ0g1SyxFQUFROTJCLFFBQVEsT0FBUSxJQUFNLElBQU0waEMsRUFBWTFoQyxRQUFRLE9BQVEsSUFDaEU4MkIsQ0FDTiwrQkNYQSxJQUFJcEMsRUFBUSxFQUFRLE1BRXBCRCxFQUFPcm1CLFFBQ0xzbUIsRUFBTTJCLHVCQUlLLENBQ0xzTCxNQUFPLFNBQWV2NkIsRUFBTXJILEVBQU82aEMsRUFBU2xoQixFQUFNbWhCLEVBQVFDLEdBQ3hELElBQUlDLEVBQVMsR0FDYkEsRUFBT3RrQyxLQUFLMkosRUFBTyxJQUFNeXJCLG1CQUFtQjl5QixJQUV4QzIwQixFQUFNc04sU0FBU0osSUFDakJHLEVBQU90a0MsS0FBSyxXQUFhLElBQUl3a0MsS0FBS0wsR0FBU00sZUFHekN4TixFQUFNbU0sU0FBU25nQixJQUNqQnFoQixFQUFPdGtDLEtBQUssUUFBVWlqQixHQUdwQmdVLEVBQU1tTSxTQUFTZ0IsSUFDakJFLEVBQU90a0MsS0FBSyxVQUFZb2tDLElBR1gsSUFBWEMsR0FDRkMsRUFBT3RrQyxLQUFLLFVBR2RjLFNBQVN3akMsT0FBU0EsRUFBTzcrQixLQUFLLEtBQ2hDLEVBRUF1MUIsS0FBTSxTQUFjcnhCLEdBQ2xCLElBQUl2QixFQUFRdEgsU0FBU3dqQyxPQUFPbDhCLE1BQU0sSUFBSTRpQixPQUFPLGFBQWVyaEIsRUFBTyxjQUNuRSxPQUFRdkIsRUFBUXM4QixtQkFBbUJ0OEIsRUFBTSxJQUFNLElBQ2pELEVBRUF1OEIsT0FBUSxTQUFnQmg3QixHQUN0QnZLLEtBQUs4a0MsTUFBTXY2QixFQUFNLEdBQUk2NkIsS0FBS0ksTUFBUSxNQUNwQyxHQU1LLENBQ0xWLE1BQU8sV0FBa0IsRUFDekJsSixLQUFNLFdBQWtCLE9BQU8sSUFBTSxFQUNyQzJKLE9BQVEsV0FBbUIsMEJDekNuQzNOLEVBQU9ybUIsUUFBVSxTQUF1QmlVLEdBSXRDLE1BQU8sOEJBQThCbUMsS0FBS25DLEVBQzVDLCtCQ1hBLElBQUlxUyxFQUFRLEVBQVEsTUFRcEJELEVBQU9ybUIsUUFBVSxTQUFzQmswQixHQUNyQyxPQUFPNU4sRUFBTTJMLFNBQVNpQyxLQUFzQyxJQUF6QkEsRUFBUTdILFlBQzdDLCtCQ1ZBLElBQUkvRixFQUFRLEVBQVEsTUFFcEJELEVBQU9ybUIsUUFDTHNtQixFQUFNMkIsdUJBSUosV0FDRSxJQUVJa00sRUFGQUMsRUFBTyxrQkFBa0JoZSxLQUFLaWUsVUFBVUMsV0FDeENDLEVBQWlCcGtDLFNBQVNDLGNBQWMsS0FTNUMsU0FBU29rQyxFQUFXdmdCLEdBQ2xCLElBQUl3Z0IsRUFBT3hnQixFQVdYLE9BVEltZ0IsSUFFRkcsRUFBZWxrQyxhQUFhLE9BQVFva0MsR0FDcENBLEVBQU9GLEVBQWVFLE1BR3hCRixFQUFlbGtDLGFBQWEsT0FBUW9rQyxHQUc3QixDQUNMQSxLQUFNRixFQUFlRSxLQUNyQnpKLFNBQVV1SixFQUFldkosU0FBV3VKLEVBQWV2SixTQUFTcDVCLFFBQVEsS0FBTSxJQUFNLEdBQ2hGOGlDLEtBQU1ILEVBQWVHLEtBQ3JCMWlDLE9BQVF1aUMsRUFBZXZpQyxPQUFTdWlDLEVBQWV2aUMsT0FBT0osUUFBUSxNQUFPLElBQU0sR0FDM0VvRCxLQUFNdS9CLEVBQWV2L0IsS0FBT3UvQixFQUFldi9CLEtBQUtwRCxRQUFRLEtBQU0sSUFBTSxHQUNwRStpQyxTQUFVSixFQUFlSSxTQUN6QkMsS0FBTUwsRUFBZUssS0FDckJDLFNBQWlELE1BQXRDTixFQUFlTSxTQUFTMWEsT0FBTyxHQUN4Q29hLEVBQWVNLFNBQ2YsSUFBTU4sRUFBZU0sU0FFM0IsQ0FVQSxPQVJBVixFQUFZSyxFQUFXeGUsT0FBT25ELFNBQVM0aEIsTUFRaEMsU0FBeUJLLEdBQzlCLElBQUk3OUIsRUFBVXF2QixFQUFNbU0sU0FBU3FDLEdBQWVOLEVBQVdNLEdBQWNBLEVBQ3JFLE9BQVE3OUIsRUFBTyt6QixXQUFhbUosRUFBVW5KLFVBQ2xDL3pCLEVBQU95OUIsT0FBU1AsRUFBVU8sSUFDaEMsQ0FDRCxDQWxERCxHQXNEUyxXQUNMLE9BQU8sQ0FDVCwrQkMvRE4sSUFBSXBPLEVBQVEsRUFBUSxNQUVwQkQsRUFBT3JtQixRQUFVLFNBQTZCeW5CLEVBQVNzTixHQUNyRHpPLEVBQU10MkIsUUFBUXkzQixHQUFTLFNBQXVCOTFCLEVBQU9xSCxHQUMvQ0EsSUFBUys3QixHQUFrQi83QixFQUFLMnFCLGdCQUFrQm9SLEVBQWVwUixnQkFDbkU4RCxFQUFRc04sR0FBa0JwakMsU0FDbkI4MUIsRUFBUXp1QixHQUVuQixHQUNGLFlDVkFxdEIsRUFBT3JtQixRQUFVLGtDQ0NqQixJQUFJc21CLEVBQVEsRUFBUSxNQUloQjBPLEVBQW9CLENBQ3RCLE1BQU8sZ0JBQWlCLGlCQUFrQixlQUFnQixPQUMxRCxVQUFXLE9BQVEsT0FBUSxvQkFBcUIsc0JBQ2hELGdCQUFpQixXQUFZLGVBQWdCLHNCQUM3QyxVQUFXLGNBQWUsY0FnQjVCM08sRUFBT3JtQixRQUFVLFNBQXNCeW5CLEdBQ3JDLElBQ0k5M0IsRUFDQTRyQixFQUNBN3FCLEVBSEF1RyxFQUFTLENBQUMsRUFLZCxPQUFLd3dCLEdBRUxuQixFQUFNdDJCLFFBQVF5M0IsRUFBUXB2QixNQUFNLE9BQU8sU0FBZ0I3RixHQUtqRCxHQUpBOUIsRUFBSThCLEVBQUtQLFFBQVEsS0FDakJ0QyxFQUFNMjJCLEVBQU01MEIsS0FBS2MsRUFBS3lpQyxPQUFPLEVBQUd2a0MsSUFBSTRNLGNBQ3BDaWUsRUFBTStLLEVBQU01MEIsS0FBS2MsRUFBS3lpQyxPQUFPdmtDLEVBQUksSUFFN0JmLEVBQUssQ0FDUCxHQUFJc0gsRUFBT3RILElBQVFxbEMsRUFBa0IvaUMsUUFBUXRDLElBQVEsRUFDbkQsT0FHQXNILEVBQU90SCxHQURHLGVBQVJBLEdBQ2FzSCxFQUFPdEgsR0FBT3NILEVBQU90SCxHQUFPLElBQUkrSSxPQUFPLENBQUM2aUIsSUFFekN0a0IsRUFBT3RILEdBQU9zSCxFQUFPdEgsR0FBTyxLQUFPNHJCLEVBQU1BLENBRTNELENBQ0YsSUFFT3RrQixHQW5CZ0JBLENBb0J6Qix3QkNsREFvdkIsRUFBT3JtQixRQUFVLFNBQXVCaVUsR0FDdEMsSUFBSXhjLEVBQVEsNEJBQTRCRCxLQUFLeWMsR0FDN0MsT0FBT3hjLEdBQVNBLEVBQU0sSUFBTSxFQUM5Qix5QkNpQkE0dUIsRUFBT3JtQixRQUFVLFNBQWdCdEwsR0FDL0IsT0FBTyxTQUFjd2dDLEdBQ25CLE9BQU94Z0MsRUFBUzBpQixNQUFNLEtBQU04ZCxFQUM5QixDQUNGLCtCQ3hCQSxJQUFJNU8sRUFBUSxFQUFRLE1BcUVwQkQsRUFBT3JtQixRQTVEUCxTQUFvQmhDLEVBQUttM0IsR0FFdkJBLEVBQVdBLEdBQVksSUFBSTlDLFNBRTNCLElBQUloRCxFQUFRLEdBRVosU0FBUytGLEVBQWF6akMsR0FDcEIsT0FBYyxPQUFWQSxFQUF1QixHQUV2QjIwQixFQUFNNk0sT0FBT3hoQyxHQUNSQSxFQUFNeWhDLGNBR1g5TSxFQUFNaUwsY0FBYzUvQixJQUFVMjBCLEVBQU0rTyxhQUFhMWpDLEdBQzVCLG1CQUFUMmpDLEtBQXNCLElBQUlBLEtBQUssQ0FBQzNqQyxJQUFVNGpDLE9BQU8vRixLQUFLNzlCLEdBRy9EQSxDQUNULENBdUNBLE9BckNBLFNBQVM2akMsRUFBTWpPLEVBQU1rTyxHQUNuQixHQUFJblAsRUFBTWxDLGNBQWNtRCxJQUFTakIsRUFBTXBvQixRQUFRcXBCLEdBQU8sQ0FDcEQsSUFBNkIsSUFBekI4SCxFQUFNcDlCLFFBQVFzMUIsR0FDaEIsTUFBTTFlLE1BQU0sa0NBQW9DNHNCLEdBR2xEcEcsRUFBTWhnQyxLQUFLazRCLEdBRVhqQixFQUFNdDJCLFFBQVF1M0IsR0FBTSxTQUFjNTFCLEVBQU9oQyxHQUN2QyxJQUFJMjJCLEVBQU1rRSxZQUFZNzRCLEdBQXRCLENBQ0EsSUFDSXVqQyxFQURBUSxFQUFVRCxFQUFZQSxFQUFZLElBQU05bEMsRUFBTUEsRUFHbEQsR0FBSWdDLElBQVU4akMsR0FBOEIsaUJBQVY5akMsRUFDaEMsR0FBSTIwQixFQUFNcVAsU0FBU2htQyxFQUFLLE1BRXRCZ0MsRUFBUXFZLEtBQUtwVixVQUFVakQsUUFDbEIsR0FBSTIwQixFQUFNcVAsU0FBU2htQyxFQUFLLFFBQVV1bEMsRUFBTTVPLEVBQU1zUCxRQUFRamtDLElBSzNELFlBSEF1akMsRUFBSWxsQyxTQUFRLFNBQVM2bEMsSUFDbEJ2UCxFQUFNa0UsWUFBWXFMLElBQU9WLEVBQVNXLE9BQU9KLEVBQVNOLEVBQWFTLEdBQ2xFLElBS0pMLEVBQU03akMsRUFBTytqQyxFQWpCdUIsQ0FrQnRDLElBRUFyRyxFQUFNMEcsS0FDUixNQUNFWixFQUFTVyxPQUFPTCxFQUFXTCxFQUFhN04sR0FFNUMsQ0FFQWlPLENBQU14M0IsR0FFQ20zQixDQUNULCtCQ25FQSxJQUFJcEosRUFBVSxnQkFDVmpGLEVBQWEsRUFBUSxNQUVyQjBHLEVBQWEsQ0FBQyxFQUdsQixDQUFDLFNBQVUsVUFBVyxTQUFVLFdBQVksU0FBVSxVQUFVeDlCLFNBQVEsU0FBU2dELEVBQU10QyxHQUNyRjg4QixFQUFXeDZCLEdBQVEsU0FBbUJnakMsR0FDcEMsY0FBY0EsSUFBVWhqQyxHQUFRLEtBQU90QyxFQUFJLEVBQUksS0FBTyxLQUFPc0MsQ0FDL0QsQ0FDRixJQUVBLElBQUlpakMsRUFBcUIsQ0FBQyxFQVMxQnpJLEVBQVd6RCxhQUFlLFNBQXNCdFgsRUFBV3lqQixFQUFTcEosR0FDbEUsU0FBU3FKLEVBQWNDLEVBQUtwMUIsR0FDMUIsTUFBTyxXQUFhK3FCLEVBQVUsMEJBQTZCcUssRUFBTSxJQUFPcDFCLEdBQVE4ckIsRUFBVSxLQUFPQSxFQUFVLEdBQzdHLENBR0EsT0FBTyxTQUFTbjdCLEVBQU95a0MsRUFBS0MsR0FDMUIsSUFBa0IsSUFBZDVqQixFQUNGLE1BQU0sSUFBSXFVLEVBQ1JxUCxFQUFjQyxFQUFLLHFCQUF1QkYsRUFBVSxPQUFTQSxFQUFVLEtBQ3ZFcFAsRUFBV3dQLGdCQWVmLE9BWElKLElBQVlELEVBQW1CRyxLQUNqQ0gsRUFBbUJHLElBQU8sRUFFMUJsakIsUUFBUUMsS0FDTmdqQixFQUNFQyxFQUNBLCtCQUFpQ0YsRUFBVSw4Q0FLMUN6akIsR0FBWUEsRUFBVTlnQixFQUFPeWtDLEVBQUtDLEVBQzNDLENBQ0YsRUFnQ0FoUSxFQUFPcm1CLFFBQVUsQ0FDZjR0QixjQXhCRixTQUF1QnIvQixFQUFTZ29DLEVBQVFDLEdBQ3RDLEdBQXVCLGlCQUFaam9DLEVBQ1QsTUFBTSxJQUFJdTRCLEVBQVcsNEJBQTZCQSxFQUFXMlAsc0JBSS9ELElBRkEsSUFBSXJyQixFQUFPNVosT0FBTzRaLEtBQUs3YyxHQUNuQm1DLEVBQUkwYSxFQUFLdGMsT0FDTjRCLEtBQU0sR0FBRyxDQUNkLElBQUkwbEMsRUFBTWhyQixFQUFLMWEsR0FDWCtoQixFQUFZOGpCLEVBQU9ILEdBQ3ZCLEdBQUkzakIsRUFBSixDQUNFLElBQUk5Z0IsRUFBUXBELEVBQVE2bkMsR0FDaEI1M0IsT0FBbUJqUCxJQUFWb0MsR0FBdUI4Z0IsRUFBVTlnQixFQUFPeWtDLEVBQUs3bkMsR0FDMUQsSUFBZSxJQUFYaVEsRUFDRixNQUFNLElBQUlzb0IsRUFBVyxVQUFZc1AsRUFBTSxZQUFjNTNCLEVBQVFzb0IsRUFBVzJQLHFCQUc1RSxNQUNBLElBQXFCLElBQWpCRCxFQUNGLE1BQU0sSUFBSTFQLEVBQVcsa0JBQW9Cc1AsRUFBS3RQLEVBQVc0UCxlQUU3RCxDQUNGLEVBSUVsSixXQUFZQSxnQ0NsRmQsSUFPdUJ6MEIsRUFQbkJveUIsRUFBTyxFQUFRLE1BSWZqeEIsRUFBVzFJLE9BQU8zQixVQUFVcUssU0FHNUJ5OEIsR0FBbUI1OUIsRUFNcEJ2SCxPQUFPMkgsT0FBTyxNQUpSLFNBQVM2OEIsR0FDZCxJQUFJajhCLEVBQU1HLEVBQVNyQyxLQUFLbStCLEdBQ3hCLE9BQU9qOUIsRUFBTWdCLEtBQVNoQixFQUFNZ0IsR0FBT0EsRUFBSXpILE1BQU0sR0FBSSxHQUFHZ0wsY0FDdEQsR0FHRixTQUFTczVCLEVBQVc1akMsR0FFbEIsT0FEQUEsRUFBT0EsRUFBS3NLLGNBQ0wsU0FBa0IwNEIsR0FDdkIsT0FBT1csRUFBT1gsS0FBV2hqQyxDQUMzQixDQUNGLENBUUEsU0FBU2tMLEVBQVFxZCxHQUNmLE9BQU8zakIsTUFBTXNHLFFBQVFxZCxFQUN2QixDQVFBLFNBQVNpUCxFQUFZalAsR0FDbkIsWUFBc0IsSUFBUkEsQ0FDaEIsQ0FvQkEsSUFBSWdXLEVBQWdCcUYsRUFBVyxlQTZDL0IsU0FBUzNFLEVBQVMxVyxHQUNoQixPQUFlLE9BQVJBLEdBQStCLGlCQUFSQSxDQUNoQyxDQVFBLFNBQVM2SSxFQUFjN0ksR0FDckIsR0FBb0IsV0FBaEJvYixFQUFPcGIsR0FDVCxPQUFPLEVBR1QsSUFBSTFyQixFQUFZMkIsT0FBT3FsQyxlQUFldGIsR0FDdEMsT0FBcUIsT0FBZDFyQixHQUFzQkEsSUFBYzJCLE9BQU8zQixTQUNwRCxDQVNBLElBQUlzakMsRUFBU3lELEVBQVcsUUFTcEJsRixFQUFTa0YsRUFBVyxRQVNwQmpGLEVBQVNpRixFQUFXLFFBU3BCN0UsRUFBYTZFLEVBQVcsWUFRNUIsU0FBU0UsRUFBV3ZiLEdBQ2xCLE1BQThCLHNCQUF2QnJoQixFQUFTckMsS0FBSzBqQixFQUN2QixDQWlDQSxJQUFJdVcsRUFBb0I4RSxFQUFXLG1CQW1EbkMsU0FBUzVtQyxFQUFRZ08sRUFBSzlFLEdBRXBCLEdBQUk4RSxRQVVKLEdBTG1CLGlCQUFSQSxJQUVUQSxFQUFNLENBQUNBLElBR0xFLEVBQVFGLEdBRVYsSUFBSyxJQUFJdE4sRUFBSSxFQUFHeXFCLEVBQUluZCxFQUFJbFAsT0FBUTRCLEVBQUl5cUIsRUFBR3pxQixJQUNyQ3dJLEVBQUdyQixLQUFLLEtBQU1tRyxFQUFJdE4sR0FBSUEsRUFBR3NOLFFBSTNCLElBQUssSUFBSXJPLEtBQU9xTyxFQUNWeE0sT0FBTzNCLFVBQVVrUixlQUFlbEosS0FBS21HLEVBQUtyTyxJQUM1Q3VKLEVBQUdyQixLQUFLLEtBQU1tRyxFQUFJck8sR0FBTUEsRUFBS3FPLEVBSXJDLENBd0pBLElBQTZCKzRCLEVBQXpCMUIsR0FBeUIwQixFQUtKLG9CQUFmQyxZQUE4QnhsQyxPQUFPcWxDLGVBQWVHLFlBSHJELFNBQVNoQixHQUNkLE9BQU9lLEdBQWNmLGFBQWlCZSxDQUN4QyxHQUdGMVEsRUFBT3JtQixRQUFVLENBQ2Y5QixRQUFTQSxFQUNUcXpCLGNBQWVBLEVBQ2ZDLFNBdllGLFNBQWtCalcsR0FDaEIsT0FBZSxPQUFSQSxJQUFpQmlQLEVBQVlqUCxJQUE0QixPQUFwQkEsRUFBSThJLGNBQXlCbUcsRUFBWWpQLEVBQUk4SSxjQUNoRCxtQkFBN0I5SSxFQUFJOEksWUFBWW1OLFVBQTJCalcsRUFBSThJLFlBQVltTixTQUFTalcsRUFDbEYsRUFxWUV5TSxXQTlQRixTQUFvQmdPLEdBQ2xCLElBQUlua0MsRUFBVSxvQkFDZCxPQUFPbWtDLElBQ2dCLG1CQUFiM0QsVUFBMkIyRCxhQUFpQjNELFVBQ3BEbjRCLEVBQVNyQyxLQUFLbStCLEtBQVdua0MsR0FDeEJpbEMsRUFBV2QsRUFBTTk3QixXQUFhODdCLEVBQU05N0IsYUFBZXJJLEVBRXhELEVBd1BFKy9CLGtCQXBYRixTQUEyQnJXLEdBT3pCLE1BTDRCLG9CQUFoQjBiLGFBQWlDQSxZQUFrQixPQUNwREEsWUFBWUMsT0FBTzNiLEdBRW5CLEdBQVVBLEVBQVUsUUFBTWdXLEVBQWNoVyxFQUFJc1csT0FHekQsRUE2V0VZLFNBcldGLFNBQWtCbFgsR0FDaEIsTUFBc0IsaUJBQVJBLENBQ2hCLEVBb1dFcVksU0E1VkYsU0FBa0JyWSxHQUNoQixNQUFzQixpQkFBUkEsQ0FDaEIsRUEyVkUwVyxTQUFVQSxFQUNWN04sY0FBZUEsRUFDZm9HLFlBQWFBLEVBQ2IySSxPQUFRQSxFQUNSekIsT0FBUUEsRUFDUkMsT0FBUUEsRUFDUm1GLFdBQVlBLEVBQ1pyRixTQW5SRixTQUFrQmxXLEdBQ2hCLE9BQU8wVyxFQUFTMVcsSUFBUXViLEVBQVd2YixFQUFJNGIsS0FDekMsRUFrUkVyRixrQkFBbUJBLEVBQ25CN0oscUJBak9GLFdBQ0UsT0FBeUIsb0JBQWRvTSxXQUFvRCxnQkFBdEJBLFVBQVUrQyxTQUNZLGlCQUF0Qi9DLFVBQVUrQyxTQUNZLE9BQXRCL0MsVUFBVStDLFVBSS9CLG9CQUFYcGhCLFFBQ2Esb0JBQWI3bEIsUUFFWCxFQXdORUgsUUFBU0EsRUFDVDR0QixNQS9KRixTQUFTQSxJQUNQLElBQUlwZixFQUFTLENBQUMsRUFDZCxTQUFTNjRCLEVBQVk5YixFQUFLNXJCLEdBQ3BCeTBCLEVBQWM1bEIsRUFBTzdPLEtBQVN5MEIsRUFBYzdJLEdBQzlDL2MsRUFBTzdPLEdBQU9pdUIsRUFBTXBmLEVBQU83TyxHQUFNNHJCLEdBQ3hCNkksRUFBYzdJLEdBQ3ZCL2MsRUFBTzdPLEdBQU9pdUIsRUFBTSxDQUFDLEVBQUdyQyxHQUNmcmQsRUFBUXFkLEdBQ2pCL2MsRUFBTzdPLEdBQU80ckIsRUFBSWpwQixRQUVsQmtNLEVBQU83TyxHQUFPNHJCLENBRWxCLENBRUEsSUFBSyxJQUFJN3FCLEVBQUksRUFBR3lxQixFQUFJaEUsVUFBVXJvQixPQUFRNEIsRUFBSXlxQixFQUFHenFCLElBQzNDVixFQUFRbW5CLFVBQVV6bUIsR0FBSTJtQyxHQUV4QixPQUFPNzRCLENBQ1QsRUE4SUVtdEIsT0FwSUYsU0FBZ0J2USxFQUFHa0YsRUFBR3dTLEdBUXBCLE9BUEE5aUMsRUFBUXN3QixHQUFHLFNBQXFCL0UsRUFBSzVyQixHQUVqQ3lyQixFQUFFenJCLEdBREFtakMsR0FBMEIsbUJBQVJ2WCxFQUNYNFAsRUFBSzVQLEVBQUt1WCxHQUVWdlgsQ0FFYixJQUNPSCxDQUNULEVBNEhFMXBCLEtBeFBGLFNBQWNxSSxHQUNaLE9BQU9BLEVBQUlySSxLQUFPcUksRUFBSXJJLE9BQVNxSSxFQUFJbkksUUFBUSxhQUFjLEdBQzNELEVBdVBFMGxDLFNBckhGLFNBQWtCQyxHQUloQixPQUg4QixRQUExQkEsRUFBUXBsQyxXQUFXLEtBQ3JCb2xDLEVBQVVBLEVBQVFqbEMsTUFBTSxJQUVuQmlsQyxDQUNULEVBaUhFbkssU0F2R0YsU0FBa0IvSSxFQUFhbVQsRUFBa0J2a0MsRUFBT3E4QixHQUN0RGpMLEVBQVl4MEIsVUFBWTJCLE9BQU8ySCxPQUFPcStCLEVBQWlCM25DLFVBQVd5L0IsR0FDbEVqTCxFQUFZeDBCLFVBQVV3MEIsWUFBY0EsRUFDcENweEIsR0FBU3pCLE9BQU9DLE9BQU80eUIsRUFBWXgwQixVQUFXb0QsRUFDaEQsRUFvR0UwOEIsYUExRkYsU0FBc0I4SCxFQUFXQyxFQUFTbnJCLEdBQ3hDLElBQUl0WixFQUNBdkMsRUFDQWdiLEVBQ0Fpc0IsRUFBUyxDQUFDLEVBRWRELEVBQVVBLEdBQVcsQ0FBQyxFQUV0QixFQUFHLENBR0QsSUFEQWhuQyxHQURBdUMsRUFBUXpCLE9BQU9vbUMsb0JBQW9CSCxJQUN6QjNvQyxPQUNINEIsS0FBTSxHQUVOaW5DLEVBRExqc0IsRUFBT3pZLEVBQU12QyxNQUVYZ25DLEVBQVFoc0IsR0FBUStyQixFQUFVL3JCLEdBQzFCaXNCLEVBQU9qc0IsSUFBUSxHQUduQityQixFQUFZam1DLE9BQU9xbEMsZUFBZVksRUFDcEMsT0FBU0EsS0FBZWxyQixHQUFVQSxFQUFPa3JCLEVBQVdDLEtBQWFELElBQWNqbUMsT0FBTzNCLFdBRXRGLE9BQU82bkMsQ0FDVCxFQXFFRWYsT0FBUUEsRUFDUkMsV0FBWUEsRUFDWmpCLFNBOURGLFNBQWtCNTdCLEVBQUs4OUIsRUFBY25sQyxHQUNuQ3FILEVBQU16SSxPQUFPeUksU0FDSXhLLElBQWJtRCxHQUEwQkEsRUFBV3FILEVBQUlqTCxVQUMzQzRELEVBQVdxSCxFQUFJakwsUUFFakI0RCxHQUFZbWxDLEVBQWEvb0MsT0FDekIsSUFBSWtRLEVBQVlqRixFQUFJOUgsUUFBUTRsQyxFQUFjbmxDLEdBQzFDLE9BQXNCLElBQWZzTSxHQUFvQkEsSUFBY3RNLENBQzNDLEVBdURFa2pDLFFBL0NGLFNBQWlCSSxHQUNmLElBQUtBLEVBQU8sT0FBTyxLQUNuQixJQUFJdGxDLEVBQUlzbEMsRUFBTWxuQyxPQUNkLEdBQUkwN0IsRUFBWTk1QixHQUFJLE9BQU8sS0FFM0IsSUFEQSxJQUFJd2tDLEVBQU0sSUFBSXQ5QixNQUFNbEgsR0FDYkEsS0FBTSxHQUNYd2tDLEVBQUl4a0MsR0FBS3NsQyxFQUFNdGxDLEdBRWpCLE9BQU93a0MsQ0FDVCxFQXVDRUcsYUFBY0EsRUFDZHRELFdBQVlBLGdDQ3BkZCxTQUFTMVIsRUFBRXJ2QixHQUFHLElBQUlvdkIsRUFBRS9FLEVBQUVkLEVBQUUsR0FBRyxHQUFHLGlCQUFpQnZwQixHQUFHLGlCQUFpQkEsRUFBRXVwQixHQUFHdnBCLE9BQU8sR0FBRyxpQkFBaUJBLEVBQUUsR0FBRzRHLE1BQU1zRyxRQUFRbE4sR0FBRyxJQUFJb3ZCLEVBQUUsRUFBRUEsRUFBRXB2QixFQUFFbEMsT0FBT3N4QixJQUFJcHZCLEVBQUVvdkIsS0FBSy9FLEVBQUVnRixFQUFFcnZCLEVBQUVvdkIsT0FBTzdGLElBQUlBLEdBQUcsS0FBS0EsR0FBR2MsUUFBUSxJQUFJK0UsS0FBS3B2QixFQUFFQSxFQUFFb3ZCLEtBQUs3RixJQUFJQSxHQUFHLEtBQUtBLEdBQUc2RixHQUFHLE9BQU83RixDQUFDLGtCQUEySCxRQUFuSCxXQUFnQixJQUFJLElBQUl2cEIsRUFBRW92QixFQUFFL0UsRUFBRSxFQUFFZCxFQUFFLEdBQUdjLEVBQUVsRSxVQUFVcm9CLFNBQVNrQyxFQUFFbW1CLFVBQVVrRSxRQUFRK0UsRUFBRUMsRUFBRXJ2QixNQUFNdXBCLElBQUlBLEdBQUcsS0FBS0EsR0FBRzZGLEdBQUcsT0FBTzdGLENBQUMsK0JDRWpXLElBQUl1ZCxFQUFVLEVBQVEsTUFNbEJDLEVBQWdCLENBQ2xCQyxtQkFBbUIsRUFDbkJDLGFBQWEsRUFDYkMsY0FBYyxFQUNkOW9CLGNBQWMsRUFDZG1ELGFBQWEsRUFDYjRsQixpQkFBaUIsRUFDakJDLDBCQUEwQixFQUMxQkMsMEJBQTBCLEVBQzFCL3ZCLFFBQVEsRUFDUnVWLFdBQVcsRUFDWDdxQixNQUFNLEdBRUpzbEMsRUFBZ0IsQ0FDbEJ0L0IsTUFBTSxFQUNObEssUUFBUSxFQUNSZSxXQUFXLEVBQ1gwb0MsUUFBUSxFQUNSQyxRQUFRLEVBQ1JyaEIsV0FBVyxFQUNYc2hCLE9BQU8sR0FTTEMsRUFBZSxDQUNqQixVQUFZLEVBQ1pDLFNBQVMsRUFDVHZwQixjQUFjLEVBQ2RtRCxhQUFhLEVBQ2JzTCxXQUFXLEVBQ1g3cUIsTUFBTSxHQUVKNGxDLEVBQWUsQ0FBQyxFQUlwQixTQUFTQyxFQUFXdG5CLEdBRWxCLE9BQUl1bUIsRUFBUWdCLE9BQU92bkIsR0FDVm1uQixFQUlGRSxFQUFhcm5CLEVBQW9CLFdBQU13bUIsQ0FDaEQsQ0FYQWEsRUFBYWQsRUFBUWlCLFlBaEJLLENBQ3hCLFVBQVksRUFDWkMsUUFBUSxFQUNSNXBCLGNBQWMsRUFDZG1ELGFBQWEsRUFDYnNMLFdBQVcsR0FZYithLEVBQWFkLEVBQVFtQixNQUFRUCxFQVk3QixJQUFJNzNCLEVBQWlCclAsT0FBT3FQLGVBQ3hCKzJCLEVBQXNCcG1DLE9BQU9vbUMsb0JBQzdCc0IsRUFBd0IxbkMsT0FBTzBuQyxzQkFDL0JwNEIsRUFBMkJ0UCxPQUFPc1AseUJBQ2xDKzFCLEVBQWlCcmxDLE9BQU9xbEMsZUFDeEJzQyxFQUFrQjNuQyxPQUFPM0IsVUFzQzdCdzJCLEVBQU9ybUIsUUFyQ1AsU0FBU281QixFQUFxQkMsRUFBaUJDLEVBQWlCQyxHQUM5RCxHQUErQixpQkFBcEJELEVBQThCLENBRXZDLEdBQUlILEVBQWlCLENBQ25CLElBQUlLLEVBQXFCM0MsRUFBZXlDLEdBRXBDRSxHQUFzQkEsSUFBdUJMLEdBQy9DQyxFQUFxQkMsRUFBaUJHLEVBQW9CRCxFQUU5RCxDQUVBLElBQUludUIsRUFBT3dzQixFQUFvQjBCLEdBRTNCSixJQUNGOXRCLEVBQU9BLEVBQUsxUyxPQUFPd2dDLEVBQXNCSSxLQU0zQyxJQUhBLElBQUlHLEVBQWdCWixFQUFXUSxHQUMzQkssRUFBZ0JiLEVBQVdTLEdBRXRCNW9DLEVBQUksRUFBR0EsRUFBSTBhLEVBQUt0YyxTQUFVNEIsRUFBRyxDQUNwQyxJQUFJZixFQUFNeWIsRUFBSzFhLEdBRWYsS0FBSzRuQyxFQUFjM29DLElBQVU0cEMsR0FBYUEsRUFBVTVwQyxJQUFXK3BDLEdBQWlCQSxFQUFjL3BDLElBQVc4cEMsR0FBaUJBLEVBQWM5cEMsSUFBTyxDQUM3SSxJQUFJZ3FDLEVBQWE3NEIsRUFBeUJ3NEIsRUFBaUIzcEMsR0FFM0QsSUFFRWtSLEVBQWV3NEIsRUFBaUIxcEMsRUFBS2dxQyxFQUMxQixDQUFYLE1BQU8zb0MsR0FBSSxDQUNmLENBQ0YsQ0FDRixDQUVBLE9BQU9xb0MsQ0FDVCw2QkMzRmEsSUFBSS9ZLEVBQUUsbUJBQW9Cc1osUUFBUUEsT0FBT0MsSUFBSTNNLEVBQUU1TSxFQUFFc1osT0FBT0MsSUFBSSxpQkFBaUIsTUFBTXY1QixFQUFFZ2dCLEVBQUVzWixPQUFPQyxJQUFJLGdCQUFnQixNQUFNN29DLEVBQUVzdkIsRUFBRXNaLE9BQU9DLElBQUksa0JBQWtCLE1BQU14ZSxFQUFFaUYsRUFBRXNaLE9BQU9DLElBQUkscUJBQXFCLE1BQU1DLEVBQUV4WixFQUFFc1osT0FBT0MsSUFBSSxrQkFBa0IsTUFBTTcvQixFQUFFc21CLEVBQUVzWixPQUFPQyxJQUFJLGtCQUFrQixNQUFNdmpDLEVBQUVncUIsRUFBRXNaLE9BQU9DLElBQUksaUJBQWlCLE1BQU0xZSxFQUFFbUYsRUFBRXNaLE9BQU9DLElBQUksb0JBQW9CLE1BQU01WixFQUFFSyxFQUFFc1osT0FBT0MsSUFBSSx5QkFBeUIsTUFBTXRmLEVBQUUrRixFQUFFc1osT0FBT0MsSUFBSSxxQkFBcUIsTUFBTTNaLEVBQUVJLEVBQUVzWixPQUFPQyxJQUFJLGtCQUFrQixNQUFNRSxFQUFFelosRUFDcGZzWixPQUFPQyxJQUFJLHVCQUF1QixNQUFNeFosRUFBRUMsRUFBRXNaLE9BQU9DLElBQUksY0FBYyxNQUFNelosRUFBRUUsRUFBRXNaLE9BQU9DLElBQUksY0FBYyxNQUFNM0csRUFBRTVTLEVBQUVzWixPQUFPQyxJQUFJLGVBQWUsTUFBTXZpQixFQUFFZ0osRUFBRXNaLE9BQU9DLElBQUkscUJBQXFCLE1BQU10akMsRUFBRStwQixFQUFFc1osT0FBT0MsSUFBSSxtQkFBbUIsTUFBTXJqQyxFQUFFOHBCLEVBQUVzWixPQUFPQyxJQUFJLGVBQWUsTUFDbFEsU0FBU3BqQyxFQUFFMmtCLEdBQUcsR0FBRyxpQkFBa0JBLEdBQUcsT0FBT0EsRUFBRSxDQUFDLElBQUk0ZSxFQUFFNWUsRUFBRTZlLFNBQVMsT0FBT0QsR0FBRyxLQUFLOU0sRUFBRSxPQUFPOVIsRUFBRUEsRUFBRXBvQixNQUFRLEtBQUttb0IsRUFBRSxLQUFLOEUsRUFBRSxLQUFLanZCLEVBQUUsS0FBSzhvQyxFQUFFLEtBQUt6ZSxFQUFFLEtBQUs2RSxFQUFFLE9BQU85RSxFQUFFLFFBQVEsT0FBT0EsRUFBRUEsR0FBR0EsRUFBRTZlLFVBQVksS0FBSzNqQyxFQUFFLEtBQUtpa0IsRUFBRSxLQUFLNkYsRUFBRSxLQUFLQyxFQUFFLEtBQUtybUIsRUFBRSxPQUFPb2hCLEVBQUUsUUFBUSxPQUFPNGUsR0FBRyxLQUFLMTVCLEVBQUUsT0FBTzA1QixFQUFFLENBQUMsQ0FBQyxTQUFTRSxFQUFFOWUsR0FBRyxPQUFPM2tCLEVBQUUya0IsS0FBSzZFLENBQUMsQ0FBQ2pnQixFQUFRbTZCLFVBQVVoZixFQUFFbmIsRUFBUW82QixlQUFlbmEsRUFBRWpnQixFQUFRcTZCLGdCQUFnQi9qQyxFQUFFMEosRUFBUXM2QixnQkFBZ0J0Z0MsRUFBRWdHLEVBQVF1NkIsUUFBUXJOLEVBQUVsdEIsRUFBUSs0QixXQUFXeGUsRUFBRXZhLEVBQVE0WCxTQUFTNW1CLEVBQUVnUCxFQUFRdzZCLEtBQUtwYSxFQUFFcGdCLEVBQVFpNUIsS0FBSzVZLEVBQUVyZ0IsRUFBUXk2QixPQUFPbjZCLEVBQ2hmTixFQUFRMDZCLFNBQVNaLEVBQUU5NUIsRUFBUTI2QixXQUFXdGYsRUFBRXJiLEVBQVE0NkIsU0FBUzFhLEVBQUVsZ0IsRUFBUTY2QixZQUFZLFNBQVN6ZixHQUFHLE9BQU84ZSxFQUFFOWUsSUFBSTNrQixFQUFFMmtCLEtBQUtELENBQUMsRUFBRW5iLEVBQVE4NkIsaUJBQWlCWixFQUFFbDZCLEVBQVErNkIsa0JBQWtCLFNBQVMzZixHQUFHLE9BQU8za0IsRUFBRTJrQixLQUFLOWtCLENBQUMsRUFBRTBKLEVBQVFnN0Isa0JBQWtCLFNBQVM1ZixHQUFHLE9BQU8za0IsRUFBRTJrQixLQUFLcGhCLENBQUMsRUFBRWdHLEVBQVFpN0IsVUFBVSxTQUFTN2YsR0FBRyxNQUFNLGlCQUFrQkEsR0FBRyxPQUFPQSxHQUFHQSxFQUFFNmUsV0FBVy9NLENBQUMsRUFBRWx0QixFQUFRazdCLGFBQWEsU0FBUzlmLEdBQUcsT0FBTzNrQixFQUFFMmtCLEtBQUtiLENBQUMsRUFBRXZhLEVBQVFtN0IsV0FBVyxTQUFTL2YsR0FBRyxPQUFPM2tCLEVBQUUya0IsS0FBS3BxQixDQUFDLEVBQUVnUCxFQUFRbzdCLE9BQU8sU0FBU2hnQixHQUFHLE9BQU8za0IsRUFBRTJrQixLQUFLZ0YsQ0FBQyxFQUMxZHBnQixFQUFRODRCLE9BQU8sU0FBUzFkLEdBQUcsT0FBTzNrQixFQUFFMmtCLEtBQUtpRixDQUFDLEVBQUVyZ0IsRUFBUXE3QixTQUFTLFNBQVNqZ0IsR0FBRyxPQUFPM2tCLEVBQUUya0IsS0FBSzlhLENBQUMsRUFBRU4sRUFBUXM3QixXQUFXLFNBQVNsZ0IsR0FBRyxPQUFPM2tCLEVBQUUya0IsS0FBSzBlLENBQUMsRUFBRTk1QixFQUFRdTdCLGFBQWEsU0FBU25nQixHQUFHLE9BQU8za0IsRUFBRTJrQixLQUFLQyxDQUFDLEVBQUVyYixFQUFRdzdCLFdBQVcsU0FBU3BnQixHQUFHLE9BQU8za0IsRUFBRTJrQixLQUFLOEUsQ0FBQyxFQUMxT2xnQixFQUFReTdCLG1CQUFtQixTQUFTcmdCLEdBQUcsTUFBTSxpQkFBa0JBLEdBQUcsbUJBQW9CQSxHQUFHQSxJQUFJcHFCLEdBQUdvcUIsSUFBSTZFLEdBQUc3RSxJQUFJMGUsR0FBRzFlLElBQUlDLEdBQUdELElBQUk4RSxHQUFHOUUsSUFBSTJlLEdBQUcsaUJBQWtCM2UsR0FBRyxPQUFPQSxJQUFJQSxFQUFFNmUsV0FBVzdaLEdBQUdoRixFQUFFNmUsV0FBVzVaLEdBQUdqRixFQUFFNmUsV0FBV2pnQyxHQUFHb2hCLEVBQUU2ZSxXQUFXM2pDLEdBQUc4a0IsRUFBRTZlLFdBQVcxZixHQUFHYSxFQUFFNmUsV0FBVzNpQixHQUFHOEQsRUFBRTZlLFdBQVcxakMsR0FBRzZrQixFQUFFNmUsV0FBV3pqQyxHQUFHNGtCLEVBQUU2ZSxXQUFXL0csRUFBRSxFQUFFbHpCLEVBQVEwN0IsT0FBT2psQywrQkNYalU0dkIsRUFBT3JtQixRQUFVLEVBQWpCLG1DQ1NXLElBQUkyN0IsRUFBRyxFQUFRLE1BQVNDLEVBQUcsRUFBUSxNQUFhLFNBQVMxYixFQUFFOUUsR0FBRyxJQUFJLElBQUlrRixFQUFFLHlEQUF5RGxGLEVBQUU4UixFQUFFLEVBQUVBLEVBQUUvVixVQUFVcm9CLE9BQU9vK0IsSUFBSTVNLEdBQUcsV0FBV21FLG1CQUFtQnROLFVBQVUrVixJQUFJLE1BQU0seUJBQXlCOVIsRUFBRSxXQUFXa0YsRUFBRSxnSEFBZ0gsQ0FBQyxJQUFJdWIsRUFBRyxJQUFJM1ksSUFBSTRZLEVBQUcsQ0FBQyxFQUFFLFNBQVNDLEVBQUczZ0IsRUFBRWtGLEdBQUcwYixFQUFHNWdCLEVBQUVrRixHQUFHMGIsRUFBRzVnQixFQUFFLFVBQVVrRixFQUFFLENBQ3hiLFNBQVMwYixFQUFHNWdCLEVBQUVrRixHQUFXLElBQVJ3YixFQUFHMWdCLEdBQUdrRixFQUFNbEYsRUFBRSxFQUFFQSxFQUFFa0YsRUFBRXh4QixPQUFPc3NCLElBQUl5Z0IsRUFBR0ksSUFBSTNiLEVBQUVsRixHQUFHLENBQzVELElBQUk4Z0IsSUFBSyxvQkFBcUJsbUIsYUFBUSxJQUFxQkEsT0FBTzdsQixlQUFVLElBQXFCNmxCLE9BQU83bEIsU0FBU0MsZUFBZStyQyxFQUFHM3FDLE9BQU8zQixVQUFVa1IsZUFBZXE3QixFQUFHLDhWQUE4VkMsRUFDcGdCLENBQUMsRUFBRUMsRUFBRyxDQUFDLEVBQ2lOLFNBQVNwSixFQUFFOVgsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxFQUFFcXFCLEVBQUV5ZSxHQUFHcnJDLEtBQUs4dEMsZ0JBQWdCLElBQUlqYyxHQUFHLElBQUlBLEdBQUcsSUFBSUEsRUFBRTd4QixLQUFLK3RDLGNBQWNsOEIsRUFBRTdSLEtBQUtndUMsbUJBQW1CenJDLEVBQUV2QyxLQUFLaXVDLGdCQUFnQnhQLEVBQUV6K0IsS0FBS2t1QyxhQUFhdmhCLEVBQUUzc0IsS0FBS3VFLEtBQUtzdEIsRUFBRTd4QixLQUFLbXVDLFlBQVl2aEIsRUFBRTVzQixLQUFLb3VDLGtCQUFrQi9DLENBQUMsQ0FBQyxJQUFJcmpDLEVBQUUsQ0FBQyxFQUNwYix1SUFBdUk0QixNQUFNLEtBQUtySSxTQUFRLFNBQVNvckIsR0FBRzNrQixFQUFFMmtCLEdBQUcsSUFBSThYLEVBQUU5WCxFQUFFLEdBQUUsRUFBR0EsRUFBRSxNQUFLLEdBQUcsRUFBRyxJQUFHLENBQUMsQ0FBQyxnQkFBZ0Isa0JBQWtCLENBQUMsWUFBWSxTQUFTLENBQUMsVUFBVSxPQUFPLENBQUMsWUFBWSxlQUFlcHJCLFNBQVEsU0FBU29yQixHQUFHLElBQUlrRixFQUFFbEYsRUFBRSxHQUFHM2tCLEVBQUU2cEIsR0FBRyxJQUFJNFMsRUFBRTVTLEVBQUUsR0FBRSxFQUFHbEYsRUFBRSxHQUFHLE1BQUssR0FBRyxFQUFHLElBQUcsQ0FBQyxrQkFBa0IsWUFBWSxhQUFhLFNBQVNwckIsU0FBUSxTQUFTb3JCLEdBQUcza0IsRUFBRTJrQixHQUFHLElBQUk4WCxFQUFFOVgsRUFBRSxHQUFFLEVBQUdBLEVBQUU5ZCxjQUFjLE1BQUssR0FBRyxFQUFHLElBQzFlLENBQUMsY0FBYyw0QkFBNEIsWUFBWSxpQkFBaUJ0TixTQUFRLFNBQVNvckIsR0FBRzNrQixFQUFFMmtCLEdBQUcsSUFBSThYLEVBQUU5WCxFQUFFLEdBQUUsRUFBR0EsRUFBRSxNQUFLLEdBQUcsRUFBRyxJQUFHLDhPQUE4Ty9pQixNQUFNLEtBQUtySSxTQUFRLFNBQVNvckIsR0FBRzNrQixFQUFFMmtCLEdBQUcsSUFBSThYLEVBQUU5WCxFQUFFLEdBQUUsRUFBR0EsRUFBRTlkLGNBQWMsTUFBSyxHQUFHLEVBQUcsSUFDeGIsQ0FBQyxVQUFVLFdBQVcsUUFBUSxZQUFZdE4sU0FBUSxTQUFTb3JCLEdBQUcza0IsRUFBRTJrQixHQUFHLElBQUk4WCxFQUFFOVgsRUFBRSxHQUFFLEVBQUdBLEVBQUUsTUFBSyxHQUFHLEVBQUcsSUFBRyxDQUFDLFVBQVUsWUFBWXByQixTQUFRLFNBQVNvckIsR0FBRzNrQixFQUFFMmtCLEdBQUcsSUFBSThYLEVBQUU5WCxFQUFFLEdBQUUsRUFBR0EsRUFBRSxNQUFLLEdBQUcsRUFBRyxJQUFHLENBQUMsT0FBTyxPQUFPLE9BQU8sUUFBUXByQixTQUFRLFNBQVNvckIsR0FBRzNrQixFQUFFMmtCLEdBQUcsSUFBSThYLEVBQUU5WCxFQUFFLEdBQUUsRUFBR0EsRUFBRSxNQUFLLEdBQUcsRUFBRyxJQUFHLENBQUMsVUFBVSxTQUFTcHJCLFNBQVEsU0FBU29yQixHQUFHM2tCLEVBQUUya0IsR0FBRyxJQUFJOFgsRUFBRTlYLEVBQUUsR0FBRSxFQUFHQSxFQUFFOWQsY0FBYyxNQUFLLEdBQUcsRUFBRyxJQUFHLElBQUl3L0IsRUFBRyxnQkFBZ0IsU0FBU0MsRUFBRzNoQixHQUFHLE9BQU9BLEVBQUUsR0FBR3VJLGFBQWEsQ0FJeFosU0FBU3FaLEVBQUc1aEIsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUcsSUFBSXRQLEVBQUV5RixFQUFFc0ssZUFBZXVmLEdBQUc3cEIsRUFBRTZwQixHQUFHLE1BQVEsT0FBT3R2QixFQUFFLElBQUlBLEVBQUVnQyxLQUFLc04sS0FBSyxFQUFFZ2dCLEVBQUV4eEIsU0FBUyxNQUFNd3hCLEVBQUUsSUFBSSxNQUFNQSxFQUFFLElBQUksTUFBTUEsRUFBRSxJQUFJLE1BQU1BLEVBQUUsTUFQOUksU0FBWWxGLEVBQUVrRixFQUFFNE0sRUFBRTVzQixHQUFHLEdBQUcsTUFBT2dnQixHQUQ2RixTQUFZbEYsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUcsR0FBRyxPQUFPNHNCLEdBQUcsSUFBSUEsRUFBRWw2QixLQUFLLE9BQU0sRUFBRyxjQUFjc3RCLEdBQUcsSUFBSyxXQUFXLElBQUssU0FBUyxPQUFNLEVBQUcsSUFBSyxVQUFVLE9BQUdoZ0IsSUFBYyxPQUFPNHNCLEdBQVNBLEVBQUVxUCxnQkFBbUQsV0FBbkNuaEIsRUFBRUEsRUFBRTlkLGNBQWNoTCxNQUFNLEVBQUUsS0FBc0IsVUFBVThvQixHQUFFLFFBQVEsT0FBTSxFQUFHLENBQy9UNmhCLENBQUc3aEIsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUcsT0FBTSxFQUFHLEdBQUdBLEVBQUUsT0FBTSxFQUFHLEdBQUcsT0FBTzRzQixFQUFFLE9BQU9BLEVBQUVsNkIsTUFBTSxLQUFLLEVBQUUsT0FBT3N0QixFQUFFLEtBQUssRUFBRSxPQUFNLElBQUtBLEVBQUUsS0FBSyxFQUFFLE9BQU80YyxNQUFNNWMsR0FBRyxLQUFLLEVBQUUsT0FBTzRjLE1BQU01YyxJQUFJLEVBQUVBLEVBQUUsT0FBTSxDQUFFLENBT3RFNmMsQ0FBRzdjLEVBQUU0TSxFQUFFbDhCLEVBQUVzUCxLQUFLNHNCLEVBQUUsTUFBTTVzQixHQUFHLE9BQU90UCxFQVJ4SyxTQUFZb3FCLEdBQUcsUUFBRytnQixFQUFHdGtDLEtBQUt5a0MsRUFBR2xoQixLQUFlK2dCLEVBQUd0a0MsS0FBS3drQyxFQUFHamhCLEtBQWVnaEIsRUFBR2htQixLQUFLZ0YsR0FBVWtoQixFQUFHbGhCLElBQUcsR0FBR2loQixFQUFHamhCLElBQUcsR0FBUyxHQUFFLENBUXdEZ2lCLENBQUc5YyxLQUFLLE9BQU80TSxFQUFFOVIsRUFBRWlpQixnQkFBZ0IvYyxHQUFHbEYsRUFBRS9xQixhQUFhaXdCLEVBQUUsR0FBRzRNLElBQUlsOEIsRUFBRTByQyxnQkFBZ0J0aEIsRUFBRXBxQixFQUFFMnJDLGNBQWMsT0FBT3pQLEVBQUUsSUFBSWw4QixFQUFFZ0MsTUFBUSxHQUFHazZCLEdBQUc1TSxFQUFFdHZCLEVBQUV3ckMsY0FBY2w4QixFQUFFdFAsRUFBRXlyQyxtQkFBbUIsT0FBT3ZQLEVBQUU5UixFQUFFaWlCLGdCQUFnQi9jLElBQWE0TSxFQUFFLEtBQVhsOEIsRUFBRUEsRUFBRWdDLE9BQWMsSUFBSWhDLElBQUcsSUFBS2s4QixFQUFFLEdBQUcsR0FBR0EsRUFBRTVzQixFQUFFOGEsRUFBRWtpQixlQUFlaDlCLEVBQUVnZ0IsRUFBRTRNLEdBQUc5UixFQUFFL3FCLGFBQWFpd0IsRUFBRTRNLEtBQUksQ0FIamQsMGpDQUEwakM3MEIsTUFBTSxLQUFLckksU0FBUSxTQUFTb3JCLEdBQUcsSUFBSWtGLEVBQUVsRixFQUFFeHBCLFFBQVFrckMsRUFDem1DQyxHQUFJdG1DLEVBQUU2cEIsR0FBRyxJQUFJNFMsRUFBRTVTLEVBQUUsR0FBRSxFQUFHbEYsRUFBRSxNQUFLLEdBQUcsRUFBRyxJQUFHLDJFQUEyRS9pQixNQUFNLEtBQUtySSxTQUFRLFNBQVNvckIsR0FBRyxJQUFJa0YsRUFBRWxGLEVBQUV4cEIsUUFBUWtyQyxFQUFHQyxHQUFJdG1DLEVBQUU2cEIsR0FBRyxJQUFJNFMsRUFBRTVTLEVBQUUsR0FBRSxFQUFHbEYsRUFBRSxnQ0FBK0IsR0FBRyxFQUFHLElBQUcsQ0FBQyxXQUFXLFdBQVcsYUFBYXByQixTQUFRLFNBQVNvckIsR0FBRyxJQUFJa0YsRUFBRWxGLEVBQUV4cEIsUUFBUWtyQyxFQUFHQyxHQUFJdG1DLEVBQUU2cEIsR0FBRyxJQUFJNFMsRUFBRTVTLEVBQUUsR0FBRSxFQUFHbEYsRUFBRSx3Q0FBdUMsR0FBRyxFQUFHLElBQUcsQ0FBQyxXQUFXLGVBQWVwckIsU0FBUSxTQUFTb3JCLEdBQUcza0IsRUFBRTJrQixHQUFHLElBQUk4WCxFQUFFOVgsRUFBRSxHQUFFLEVBQUdBLEVBQUU5ZCxjQUFjLE1BQUssR0FBRyxFQUFHLElBQ2xkN0csRUFBRThtQyxVQUFVLElBQUlySyxFQUFFLFlBQVksR0FBRSxFQUFHLGFBQWEsZ0NBQStCLEdBQUcsR0FBSSxDQUFDLE1BQU0sT0FBTyxTQUFTLGNBQWNsakMsU0FBUSxTQUFTb3JCLEdBQUcza0IsRUFBRTJrQixHQUFHLElBQUk4WCxFQUFFOVgsRUFBRSxHQUFFLEVBQUdBLEVBQUU5ZCxjQUFjLE1BQUssR0FBRyxFQUFHLElBRTVMLElBQUlrZ0MsRUFBRzdCLEVBQUc4QixtREFBbURDLEVBQUc5RCxPQUFPQyxJQUFJLGlCQUFpQjhELEVBQUcvRCxPQUFPQyxJQUFJLGdCQUFnQitELEVBQUdoRSxPQUFPQyxJQUFJLGtCQUFrQmdFLEVBQUdqRSxPQUFPQyxJQUFJLHFCQUFxQmlFLEVBQUdsRSxPQUFPQyxJQUFJLGtCQUFrQmtFLEVBQUduRSxPQUFPQyxJQUFJLGtCQUFrQm1FLEVBQUdwRSxPQUFPQyxJQUFJLGlCQUFpQm9FLEVBQUdyRSxPQUFPQyxJQUFJLHFCQUFxQnFFLEVBQUd0RSxPQUFPQyxJQUFJLGtCQUFrQnNFLEVBQUd2RSxPQUFPQyxJQUFJLHVCQUF1QnVFLEVBQUd4RSxPQUFPQyxJQUFJLGNBQWN3RSxFQUFHekUsT0FBT0MsSUFBSSxjQUFjRCxPQUFPQyxJQUFJLGVBQWVELE9BQU9DLElBQUksMEJBQ2plLElBQUl5RSxFQUFHMUUsT0FBT0MsSUFBSSxtQkFBbUJELE9BQU9DLElBQUksdUJBQXVCRCxPQUFPQyxJQUFJLGVBQWVELE9BQU9DLElBQUksd0JBQXdCLElBQUkwRSxFQUFHM0UsT0FBTzRFLFNBQVMsU0FBU0MsRUFBR3JqQixHQUFHLE9BQUcsT0FBT0EsR0FBRyxpQkFBa0JBLEVBQVMsS0FBd0MsbUJBQW5DQSxFQUFFbWpCLEdBQUluakIsRUFBRW1qQixJQUFLbmpCLEVBQUUsZUFBMENBLEVBQUUsSUFBSSxDQUFDLElBQW9Cc2pCLEVBQWhCeEUsRUFBRTFvQyxPQUFPQyxPQUFVLFNBQVNrdEMsRUFBR3ZqQixHQUFHLFFBQUcsSUFBU3NqQixFQUFHLElBQUksTUFBTTcxQixPQUEyRSxDQUFsRSxNQUFNcWtCLEdBQUcsSUFBSTVNLEVBQUU0TSxFQUFFbUMsTUFBTTM5QixPQUFPK0YsTUFBTSxnQkFBZ0JpbkMsRUFBR3BlLEdBQUdBLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLb2UsRUFBR3RqQixDQUFDLENBQUMsSUFBSXdqQixHQUFHLEVBQ3piLFNBQVNDLEVBQUd6akIsRUFBRWtGLEdBQUcsSUFBSWxGLEdBQUd3akIsRUFBRyxNQUFNLEdBQUdBLEdBQUcsRUFBRyxJQUFJMVIsRUFBRXJrQixNQUFNaTJCLGtCQUFrQmoyQixNQUFNaTJCLHVCQUFrQixFQUFPLElBQUksR0FBR3hlLEVBQUUsR0FBR0EsRUFBRSxXQUFXLE1BQU16WCxPQUFRLEVBQUVyWCxPQUFPcVAsZUFBZXlmLEVBQUV6d0IsVUFBVSxRQUFRLENBQUNtSCxJQUFJLFdBQVcsTUFBTTZSLE9BQVEsSUFBSSxpQkFBa0JrMkIsU0FBU0EsUUFBUUMsVUFBVSxDQUFDLElBQUlELFFBQVFDLFVBQVUxZSxFQUFFLEdBQW9CLENBQWhCLE1BQU1uRixHQUFHLElBQUk3YSxFQUFFNmEsQ0FBQyxDQUFDNGpCLFFBQVFDLFVBQVU1akIsRUFBRSxHQUFHa0YsRUFBRSxLQUFLLENBQUMsSUFBSUEsRUFBRXpvQixNQUFtQixDQUFaLE1BQU1zakIsR0FBRzdhLEVBQUU2YSxDQUFDLENBQUNDLEVBQUV2akIsS0FBS3lvQixFQUFFendCLFVBQVUsS0FBSyxDQUFDLElBQUksTUFBTWdaLE9BQXFCLENBQVosTUFBTXNTLEdBQUc3YSxFQUFFNmEsQ0FBQyxDQUFDQyxHQUFHLENBQzVELENBRDhELE1BQU1ELEdBQUcsR0FBR0EsR0FBRzdhLEdBQUcsaUJBQWtCNmEsRUFBRWtVLE1BQU0sQ0FBQyxJQUFJLElBQUlyK0IsRUFBRW1xQixFQUFFa1UsTUFBTWgzQixNQUFNLE1BQ25mZ2pCLEVBQUUvYSxFQUFFK3VCLE1BQU1oM0IsTUFBTSxNQUFNeWhDLEVBQUU5b0MsRUFBRWxDLE9BQU8sRUFBRWtMLEVBQUVxaEIsRUFBRXZzQixPQUFPLEVBQUUsR0FBR2dyQyxHQUFHLEdBQUc5L0IsR0FBR2hKLEVBQUU4b0MsS0FBS3plLEVBQUVyaEIsSUFBSUEsSUFBSSxLQUFLLEdBQUc4L0IsR0FBRyxHQUFHOS9CLEVBQUU4L0IsSUFBSTkvQixJQUFJLEdBQUdoSixFQUFFOG9DLEtBQUt6ZSxFQUFFcmhCLEdBQUcsQ0FBQyxHQUFHLElBQUk4L0IsR0FBRyxJQUFJOS9CLEVBQUcsTUFBTTgvQixJQUFRLElBQUo5L0IsR0FBU2hKLEVBQUU4b0MsS0FBS3plLEVBQUVyaEIsR0FBRyxDQUFDLElBQUkxRCxFQUFFLEtBQUt0RixFQUFFOG9DLEdBQUdsb0MsUUFBUSxXQUFXLFFBQTZGLE9BQXJGd3BCLEVBQUU3SSxhQUFhamMsRUFBRTJvQyxTQUFTLGlCQUFpQjNvQyxFQUFFQSxFQUFFMUUsUUFBUSxjQUFjd3BCLEVBQUU3SSxjQUFxQmpjLENBQUMsUUFBTyxHQUFHd2pDLEdBQUcsR0FBRzkvQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUTRrQyxHQUFHLEVBQUcvMUIsTUFBTWkyQixrQkFBa0I1UixDQUFDLENBQUMsT0FBTzlSLEVBQUVBLEVBQUVBLEVBQUU3SSxhQUFhNkksRUFBRXBpQixLQUFLLElBQUkybEMsRUFBR3ZqQixHQUFHLEVBQUUsQ0FDOVosU0FBUzhqQixFQUFHOWpCLEdBQUcsT0FBT0EsRUFBRXpzQixLQUFLLEtBQUssRUFBRSxPQUFPZ3dDLEVBQUd2akIsRUFBRXBvQixNQUFNLEtBQUssR0FBRyxPQUFPMnJDLEVBQUcsUUFBUSxLQUFLLEdBQUcsT0FBT0EsRUFBRyxZQUFZLEtBQUssR0FBRyxPQUFPQSxFQUFHLGdCQUFnQixLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxPQUFTRSxFQUFHempCLEVBQUVwb0IsTUFBSyxHQUFNLEtBQUssR0FBRyxPQUFTNnJDLEVBQUd6akIsRUFBRXBvQixLQUFLZ21DLFFBQU8sR0FBTSxLQUFLLEVBQUUsT0FBUzZGLEVBQUd6akIsRUFBRXBvQixNQUFLLEdBQU0sUUFBUSxNQUFNLEdBQUcsQ0FDeFIsU0FBU21zQyxFQUFHL2pCLEdBQUcsR0FBRyxNQUFNQSxFQUFFLE9BQU8sS0FBSyxHQUFHLG1CQUFvQkEsRUFBRSxPQUFPQSxFQUFFN0ksYUFBYTZJLEVBQUVwaUIsTUFBTSxLQUFLLEdBQUcsaUJBQWtCb2lCLEVBQUUsT0FBT0EsRUFBRSxPQUFPQSxHQUFHLEtBQUt3aUIsRUFBRyxNQUFNLFdBQVcsS0FBS0QsRUFBRyxNQUFNLFNBQVMsS0FBS0csRUFBRyxNQUFNLFdBQVcsS0FBS0QsRUFBRyxNQUFNLGFBQWEsS0FBS0ssRUFBRyxNQUFNLFdBQVcsS0FBS0MsRUFBRyxNQUFNLGVBQWUsR0FBRyxpQkFBa0IvaUIsRUFBRSxPQUFPQSxFQUFFNmUsVUFBVSxLQUFLK0QsRUFBRyxPQUFPNWlCLEVBQUU3SSxhQUFhLFdBQVcsWUFBWSxLQUFLd3JCLEVBQUcsT0FBTzNpQixFQUFFZ2tCLFNBQVM3c0IsYUFBYSxXQUFXLFlBQVksS0FBSzByQixFQUFHLElBQUkzZCxFQUFFbEYsRUFBRTRkLE9BQzdaLE9BRG9hNWQsRUFBRUEsRUFBRTdJLGVBQ25kNkksRUFBRSxNQURpZUEsRUFBRWtGLEVBQUUvTixhQUNsZitOLEVBQUV0bkIsTUFBTSxJQUFZLGNBQWNvaUIsRUFBRSxJQUFJLGNBQXFCQSxFQUFFLEtBQUtnakIsRUFBRyxPQUE2QixRQUF0QjlkLEVBQUVsRixFQUFFN0ksYUFBYSxNQUFjK04sRUFBRTZlLEVBQUcvakIsRUFBRXBvQixPQUFPLE9BQU8sS0FBS3FyQyxFQUFHL2QsRUFBRWxGLEVBQUVpa0IsU0FBU2prQixFQUFFQSxFQUFFa2tCLE1BQU0sSUFBSSxPQUFPSCxFQUFHL2pCLEVBQUVrRixHQUFhLENBQVQsTUFBTTRNLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FDM00sU0FBU3FTLEVBQUdua0IsR0FBRyxJQUFJa0YsRUFBRWxGLEVBQUVwb0IsS0FBSyxPQUFPb29CLEVBQUV6c0IsS0FBSyxLQUFLLEdBQUcsTUFBTSxRQUFRLEtBQUssRUFBRSxPQUFPMnhCLEVBQUUvTixhQUFhLFdBQVcsWUFBWSxLQUFLLEdBQUcsT0FBTytOLEVBQUU4ZSxTQUFTN3NCLGFBQWEsV0FBVyxZQUFZLEtBQUssR0FBRyxNQUFNLHFCQUFxQixLQUFLLEdBQUcsT0FBa0I2SSxHQUFYQSxFQUFFa0YsRUFBRTBZLFFBQVd6bUIsYUFBYTZJLEVBQUVwaUIsTUFBTSxHQUFHc25CLEVBQUUvTixjQUFjLEtBQUs2SSxFQUFFLGNBQWNBLEVBQUUsSUFBSSxjQUFjLEtBQUssRUFBRSxNQUFNLFdBQVcsS0FBSyxFQUFFLE9BQU9rRixFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsS0FBSyxFQUFFLE1BQU0sT0FBTyxLQUFLLEVBQUUsTUFBTSxPQUFPLEtBQUssR0FBRyxPQUFPNmUsRUFBRzdlLEdBQUcsS0FBSyxFQUFFLE9BQU9BLElBQUl1ZCxFQUFHLGFBQWEsT0FBTyxLQUFLLEdBQUcsTUFBTSxZQUN0ZixLQUFLLEdBQUcsTUFBTSxXQUFXLEtBQUssR0FBRyxNQUFNLFFBQVEsS0FBSyxHQUFHLE1BQU0sV0FBVyxLQUFLLEdBQUcsTUFBTSxlQUFlLEtBQUssR0FBRyxNQUFNLGdCQUFnQixLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxHQUFHLG1CQUFvQnZkLEVBQUUsT0FBT0EsRUFBRS9OLGFBQWErTixFQUFFdG5CLE1BQU0sS0FBSyxHQUFHLGlCQUFrQnNuQixFQUFFLE9BQU9BLEVBQUUsT0FBTyxJQUFJLENBQUMsU0FBU2tmLEVBQUdwa0IsR0FBRyxjQUFjQSxHQUFHLElBQUssVUFBVSxJQUFLLFNBQVMsSUFBSyxTQUFTLElBQUssWUFBcUIsSUFBSyxTQUFTLE9BQU9BLEVBQUUsUUFBUSxNQUFNLEdBQUcsQ0FDcmEsU0FBU3FrQixFQUFHcmtCLEdBQUcsSUFBSWtGLEVBQUVsRixFQUFFcG9CLEtBQUssT0FBT29vQixFQUFFQSxFQUFFc2tCLFdBQVcsVUFBVXRrQixFQUFFOWQsZ0JBQWdCLGFBQWFnakIsR0FBRyxVQUFVQSxFQUFFLENBRXRGLFNBQVNxZixFQUFHdmtCLEdBQUdBLEVBQUV3a0IsZ0JBQWdCeGtCLEVBQUV3a0IsY0FEdkQsU0FBWXhrQixHQUFHLElBQUlrRixFQUFFbWYsRUFBR3JrQixHQUFHLFVBQVUsUUFBUThSLEVBQUUxN0IsT0FBT3NQLHlCQUF5QnNhLEVBQUVpSixZQUFZeDBCLFVBQVV5d0IsR0FBR2hnQixFQUFFLEdBQUc4YSxFQUFFa0YsR0FBRyxJQUFJbEYsRUFBRXJhLGVBQWV1ZixTQUFJLElBQXFCNE0sR0FBRyxtQkFBb0JBLEVBQUVuMkIsS0FBSyxtQkFBb0JtMkIsRUFBRWwyQixJQUFJLENBQUMsSUFBSWhHLEVBQUVrOEIsRUFBRW4yQixJQUFJc2tCLEVBQUU2UixFQUFFbDJCLElBQWlMLE9BQTdLeEYsT0FBT3FQLGVBQWV1YSxFQUFFa0YsRUFBRSxDQUFDdWYsY0FBYSxFQUFHOW9DLElBQUksV0FBVyxPQUFPL0YsRUFBRTZHLEtBQUtwSixLQUFLLEVBQUV1SSxJQUFJLFNBQVNva0IsR0FBRzlhLEVBQUUsR0FBRzhhLEVBQUVDLEVBQUV4akIsS0FBS3BKLEtBQUsyc0IsRUFBRSxJQUFJNXBCLE9BQU9xUCxlQUFldWEsRUFBRWtGLEVBQUUsQ0FBQ2xmLFdBQVc4ckIsRUFBRTlyQixhQUFtQixDQUFDbWdCLFNBQVMsV0FBVyxPQUFPamhCLENBQUMsRUFBRXFULFNBQVMsU0FBU3lILEdBQUc5YSxFQUFFLEdBQUc4YSxDQUFDLEVBQUUwa0IsYUFBYSxXQUFXMWtCLEVBQUV3a0IsY0FDeGYsWUFBWXhrQixFQUFFa0YsRUFBRSxFQUFFLENBQUMsQ0FBa0R5ZixDQUFHM2tCLEdBQUcsQ0FBQyxTQUFTNGtCLEVBQUc1a0IsR0FBRyxJQUFJQSxFQUFFLE9BQU0sRUFBRyxJQUFJa0YsRUFBRWxGLEVBQUV3a0IsY0FBYyxJQUFJdGYsRUFBRSxPQUFNLEVBQUcsSUFBSTRNLEVBQUU1TSxFQUFFaUIsV0FBZWpoQixFQUFFLEdBQXFELE9BQWxEOGEsSUFBSTlhLEVBQUVtL0IsRUFBR3JrQixHQUFHQSxFQUFFdUosUUFBUSxPQUFPLFFBQVF2SixFQUFFenBCLFFBQU95cEIsRUFBRTlhLEtBQWE0c0IsSUFBRzVNLEVBQUUzTSxTQUFTeUgsSUFBRyxFQUFNLENBQUMsU0FBUzZrQixFQUFHN2tCLEdBQXdELFFBQUcsS0FBeERBLEVBQUVBLElBQUksb0JBQXFCanJCLFNBQVNBLGNBQVMsSUFBa0MsT0FBTyxLQUFLLElBQUksT0FBT2lyQixFQUFFOGtCLGVBQWU5a0IsRUFBRStrQixJQUEyQixDQUF0QixNQUFNN2YsR0FBRyxPQUFPbEYsRUFBRStrQixJQUFJLENBQUMsQ0FDcGEsU0FBU0MsRUFBR2hsQixFQUFFa0YsR0FBRyxJQUFJNE0sRUFBRTVNLEVBQUVxRSxRQUFRLE9BQU91VixFQUFFLENBQUMsRUFBRTVaLEVBQUUsQ0FBQytmLG9CQUFlLEVBQU9sZixrQkFBYSxFQUFPeHZCLFdBQU0sRUFBT2d6QixRQUFRLE1BQU11SSxFQUFFQSxFQUFFOVIsRUFBRWtsQixjQUFjQyxnQkFBZ0IsQ0FBQyxTQUFTQyxFQUFHcGxCLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFLE1BQU01TSxFQUFFYSxhQUFhLEdBQUdiLEVBQUVhLGFBQWE3Z0IsRUFBRSxNQUFNZ2dCLEVBQUVxRSxRQUFRckUsRUFBRXFFLFFBQVFyRSxFQUFFK2YsZUFBZW5ULEVBQUVzUyxFQUFHLE1BQU1sZixFQUFFM3VCLE1BQU0ydUIsRUFBRTN1QixNQUFNdTdCLEdBQUc5UixFQUFFa2xCLGNBQWMsQ0FBQ0MsZUFBZWpnQyxFQUFFbWdDLGFBQWF2VCxFQUFFNVosV0FBVyxhQUFhZ04sRUFBRXR0QixNQUFNLFVBQVVzdEIsRUFBRXR0QixLQUFLLE1BQU1zdEIsRUFBRXFFLFFBQVEsTUFBTXJFLEVBQUUzdUIsTUFBTSxDQUFDLFNBQVMrdUMsRUFBR3RsQixFQUFFa0YsR0FBZSxPQUFaQSxFQUFFQSxFQUFFcUUsVUFBaUJxWSxFQUFHNWhCLEVBQUUsVUFBVWtGLEdBQUUsRUFBRyxDQUM5ZCxTQUFTcWdCLEVBQUd2bEIsRUFBRWtGLEdBQUdvZ0IsRUFBR3RsQixFQUFFa0YsR0FBRyxJQUFJNE0sRUFBRXNTLEVBQUdsZixFQUFFM3VCLE9BQU8yTyxFQUFFZ2dCLEVBQUV0dEIsS0FBSyxHQUFHLE1BQU1rNkIsRUFBSyxXQUFXNXNCLEdBQU0sSUFBSTRzQixHQUFHLEtBQUs5UixFQUFFenBCLE9BQU95cEIsRUFBRXpwQixPQUFPdTdCLEtBQUU5UixFQUFFenBCLE1BQU0sR0FBR3U3QixHQUFPOVIsRUFBRXpwQixRQUFRLEdBQUd1N0IsSUFBSTlSLEVBQUV6cEIsTUFBTSxHQUFHdTdCLFFBQVEsR0FBRyxXQUFXNXNCLEdBQUcsVUFBVUEsRUFBOEIsWUFBM0I4YSxFQUFFaWlCLGdCQUFnQixTQUFnQi9jLEVBQUV2ZixlQUFlLFNBQVM2L0IsR0FBR3hsQixFQUFFa0YsRUFBRXR0QixLQUFLazZCLEdBQUc1TSxFQUFFdmYsZUFBZSxpQkFBaUI2L0IsR0FBR3hsQixFQUFFa0YsRUFBRXR0QixLQUFLd3NDLEVBQUdsZixFQUFFYSxlQUFlLE1BQU1iLEVBQUVxRSxTQUFTLE1BQU1yRSxFQUFFK2YsaUJBQWlCamxCLEVBQUVpbEIsaUJBQWlCL2YsRUFBRStmLGVBQWUsQ0FDbGEsU0FBU1EsRUFBR3psQixFQUFFa0YsRUFBRTRNLEdBQUcsR0FBRzVNLEVBQUV2ZixlQUFlLFVBQVV1ZixFQUFFdmYsZUFBZSxnQkFBZ0IsQ0FBQyxJQUFJVCxFQUFFZ2dCLEVBQUV0dEIsS0FBSyxLQUFLLFdBQVdzTixHQUFHLFVBQVVBLFFBQUcsSUFBU2dnQixFQUFFM3VCLE9BQU8sT0FBTzJ1QixFQUFFM3VCLE9BQU8sT0FBTzJ1QixFQUFFLEdBQUdsRixFQUFFa2xCLGNBQWNHLGFBQWF2VCxHQUFHNU0sSUFBSWxGLEVBQUV6cEIsUUFBUXlwQixFQUFFenBCLE1BQU0ydUIsR0FBR2xGLEVBQUUrRixhQUFhYixDQUFDLENBQVUsTUFBVDRNLEVBQUU5UixFQUFFcGlCLFFBQWNvaUIsRUFBRXBpQixLQUFLLElBQUlvaUIsRUFBRWlsQixpQkFBaUJqbEIsRUFBRWtsQixjQUFjQyxlQUFlLEtBQUtyVCxJQUFJOVIsRUFBRXBpQixLQUFLazBCLEVBQUUsQ0FDelYsU0FBUzBULEdBQUd4bEIsRUFBRWtGLEVBQUU0TSxHQUFNLFdBQVc1TSxHQUFHMmYsRUFBRzdrQixFQUFFaEcsaUJBQWlCZ0csSUFBRSxNQUFNOFIsRUFBRTlSLEVBQUUrRixhQUFhLEdBQUcvRixFQUFFa2xCLGNBQWNHLGFBQWFybEIsRUFBRStGLGVBQWUsR0FBRytMLElBQUk5UixFQUFFK0YsYUFBYSxHQUFHK0wsR0FBRSxDQUFDLElBQUk0VCxHQUFHbHBDLE1BQU1zRyxRQUM3SyxTQUFTNmlDLEdBQUczbEIsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQWUsR0FBWjhhLEVBQUVBLEVBQUU3c0IsUUFBVyt4QixFQUFFLENBQUNBLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSXR2QixFQUFFLEVBQUVBLEVBQUVrOEIsRUFBRXArQixPQUFPa0MsSUFBSXN2QixFQUFFLElBQUk0TSxFQUFFbDhCLEtBQUksRUFBRyxJQUFJazhCLEVBQUUsRUFBRUEsRUFBRTlSLEVBQUV0c0IsT0FBT28rQixJQUFJbDhCLEVBQUVzdkIsRUFBRXZmLGVBQWUsSUFBSXFhLEVBQUU4UixHQUFHdjdCLE9BQU95cEIsRUFBRThSLEdBQUd4cUIsV0FBVzFSLElBQUlvcUIsRUFBRThSLEdBQUd4cUIsU0FBUzFSLEdBQUdBLEdBQUdzUCxJQUFJOGEsRUFBRThSLEdBQUc4VCxpQkFBZ0IsRUFBRyxLQUFLLENBQW1CLElBQWxCOVQsRUFBRSxHQUFHc1MsRUFBR3RTLEdBQUc1TSxFQUFFLEtBQVN0dkIsRUFBRSxFQUFFQSxFQUFFb3FCLEVBQUV0c0IsT0FBT2tDLElBQUksQ0FBQyxHQUFHb3FCLEVBQUVwcUIsR0FBR1csUUFBUXU3QixFQUFpRCxPQUE5QzlSLEVBQUVwcUIsR0FBRzBSLFVBQVMsT0FBR3BDLElBQUk4YSxFQUFFcHFCLEdBQUdnd0MsaUJBQWdCLElBQVcsT0FBTzFnQixHQUFHbEYsRUFBRXBxQixHQUFHa1IsV0FBV29lLEVBQUVsRixFQUFFcHFCLEdBQUcsQ0FBQyxPQUFPc3ZCLElBQUlBLEVBQUU1ZCxVQUFTLEVBQUcsQ0FBQyxDQUN4WSxTQUFTdStCLEdBQUc3bEIsRUFBRWtGLEdBQUcsR0FBRyxNQUFNQSxFQUFFNGdCLHdCQUF3QixNQUFNcjRCLE1BQU1xWCxFQUFFLEtBQUssT0FBT2dhLEVBQUUsQ0FBQyxFQUFFNVosRUFBRSxDQUFDM3VCLFdBQU0sRUFBT3d2QixrQkFBYSxFQUFPanVCLFNBQVMsR0FBR2tvQixFQUFFa2xCLGNBQWNHLGNBQWMsQ0FBQyxTQUFTVSxHQUFHL2xCLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFNU0sRUFBRTN1QixNQUFNLEdBQUcsTUFBTXU3QixFQUFFLENBQStCLEdBQTlCQSxFQUFFNU0sRUFBRXB0QixTQUFTb3RCLEVBQUVBLEVBQUVhLGFBQWdCLE1BQU0rTCxFQUFFLENBQUMsR0FBRyxNQUFNNU0sRUFBRSxNQUFNelgsTUFBTXFYLEVBQUUsS0FBSyxHQUFHNGdCLEdBQUc1VCxHQUFHLENBQUMsR0FBRyxFQUFFQSxFQUFFcCtCLE9BQU8sTUFBTStaLE1BQU1xWCxFQUFFLEtBQUtnTixFQUFFQSxFQUFFLEVBQUUsQ0FBQzVNLEVBQUU0TSxDQUFDLENBQUMsTUFBTTVNLElBQUlBLEVBQUUsSUFBSTRNLEVBQUU1TSxDQUFDLENBQUNsRixFQUFFa2xCLGNBQWMsQ0FBQ0csYUFBYWpCLEVBQUd0UyxHQUFHLENBQ25ZLFNBQVNrVSxHQUFHaG1CLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFc1MsRUFBR2xmLEVBQUUzdUIsT0FBTzJPLEVBQUVrL0IsRUFBR2xmLEVBQUVhLGNBQWMsTUFBTStMLEtBQUlBLEVBQUUsR0FBR0EsS0FBTTlSLEVBQUV6cEIsUUFBUXlwQixFQUFFenBCLE1BQU11N0IsR0FBRyxNQUFNNU0sRUFBRWEsY0FBYy9GLEVBQUUrRixlQUFlK0wsSUFBSTlSLEVBQUUrRixhQUFhK0wsSUFBSSxNQUFNNXNCLElBQUk4YSxFQUFFK0YsYUFBYSxHQUFHN2dCLEVBQUUsQ0FBQyxTQUFTK2dDLEdBQUdqbUIsR0FBRyxJQUFJa0YsRUFBRWxGLEVBQUVrbUIsWUFBWWhoQixJQUFJbEYsRUFBRWtsQixjQUFjRyxjQUFjLEtBQUtuZ0IsR0FBRyxPQUFPQSxJQUFJbEYsRUFBRXpwQixNQUFNMnVCLEVBQUUsQ0FBQyxTQUFTaWhCLEdBQUdubUIsR0FBRyxPQUFPQSxHQUFHLElBQUssTUFBTSxNQUFNLDZCQUE2QixJQUFLLE9BQU8sTUFBTSxxQ0FBcUMsUUFBUSxNQUFNLCtCQUErQixDQUM3YyxTQUFTb21CLEdBQUdwbUIsRUFBRWtGLEdBQUcsT0FBTyxNQUFNbEYsR0FBRyxpQ0FBaUNBLEVBQUVtbUIsR0FBR2poQixHQUFHLCtCQUErQmxGLEdBQUcsa0JBQWtCa0YsRUFBRSwrQkFBK0JsRixDQUFDLENBQ2hLLElBQUlxbUIsR0FBZXJtQixHQUFac21CLElBQVl0bUIsR0FBc0osU0FBU0EsRUFBRWtGLEdBQUcsR0FBRywrQkFBK0JsRixFQUFFdW1CLGNBQWMsY0FBY3ZtQixFQUFFQSxFQUFFd21CLFVBQVV0aEIsTUFBTSxDQUEyRixLQUExRm1oQixHQUFHQSxJQUFJdHhDLFNBQVNDLGNBQWMsUUFBVXd4QyxVQUFVLFFBQVF0aEIsRUFBRXVoQixVQUFVM25DLFdBQVcsU0FBYW9tQixFQUFFbWhCLEdBQUd0eUMsV0FBV2lzQixFQUFFanNCLFlBQVlpc0IsRUFBRWpxQixZQUFZaXFCLEVBQUVqc0IsWUFBWSxLQUFLbXhCLEVBQUVueEIsWUFBWWlzQixFQUFFOXFCLFlBQVlnd0IsRUFBRW54QixXQUFXLENBQUMsRUFBdmIsb0JBQXFCMnlDLE9BQU9BLE1BQU1DLHdCQUF3QixTQUFTemhCLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxHQUFHOHdDLE1BQU1DLHlCQUF3QixXQUFXLE9BQU8zbUIsR0FBRWtGLEVBQUU0TSxFQUFNLEdBQUUsRUFBRTlSLElBQ3RLLFNBQVM0bUIsR0FBRzVtQixFQUFFa0YsR0FBRyxHQUFHQSxFQUFFLENBQUMsSUFBSTRNLEVBQUU5UixFQUFFanNCLFdBQVcsR0FBRys5QixHQUFHQSxJQUFJOVIsRUFBRTZtQixXQUFXLElBQUkvVSxFQUFFZ1YsU0FBd0IsWUFBZGhWLEVBQUVpVixVQUFVN2hCLEVBQVMsQ0FBQ2xGLEVBQUVrbUIsWUFBWWhoQixDQUFDLENBQ3RILElBQUk4aEIsR0FBRyxDQUFDam9DLHlCQUF3QixFQUFHa29DLGFBQVksRUFBR2pvQyxtQkFBa0IsRUFBR0Msa0JBQWlCLEVBQUdDLGtCQUFpQixFQUFHQyxTQUFRLEVBQUdDLGNBQWEsRUFBR0MsaUJBQWdCLEVBQUdDLGFBQVksRUFBR0MsU0FBUSxFQUFHQyxNQUFLLEVBQUdDLFVBQVMsRUFBR0MsY0FBYSxFQUFHQyxZQUFXLEVBQUdDLGNBQWEsRUFBR0MsV0FBVSxFQUFHcW5DLFVBQVMsRUFBR3BuQyxTQUFRLEVBQUdDLFlBQVcsRUFBR0MsYUFBWSxFQUFHQyxjQUFhLEVBQUdDLFlBQVcsRUFBR0MsZUFBYyxFQUFHQyxnQkFBZSxFQUFHQyxpQkFBZ0IsRUFBR0ssWUFBVyxFQUFHeW1DLFdBQVUsRUFBR3htQyxZQUFXLEVBQUdDLFNBQVEsRUFBR0MsT0FBTSxFQUFHQyxTQUFRLEVBQUdDLFNBQVEsRUFBR0MsUUFBTyxFQUFHQyxRQUFPLEVBQ2xmQyxNQUFLLEVBQUdFLGFBQVksRUFBR0MsY0FBYSxFQUFHQyxhQUFZLEVBQUdDLGlCQUFnQixFQUFHQyxrQkFBaUIsRUFBR0Msa0JBQWlCLEVBQUdDLGVBQWMsRUFBR0MsYUFBWSxHQUFJeWxDLEdBQUcsQ0FBQyxTQUFTLEtBQUssTUFBTSxLQUE2SCxTQUFTQyxHQUFHcm5CLEVBQUVrRixFQUFFNE0sR0FBRyxPQUFPLE1BQU01TSxHQUFHLGtCQUFtQkEsR0FBRyxLQUFLQSxFQUFFLEdBQUc0TSxHQUFHLGlCQUFrQjVNLEdBQUcsSUFBSUEsR0FBRzhoQixHQUFHcmhDLGVBQWVxYSxJQUFJZ25CLEdBQUdobkIsSUFBSSxHQUFHa0YsR0FBRzV1QixPQUFPNHVCLEVBQUUsSUFBSSxDQUN6YixTQUFTb2lCLEdBQUd0bkIsRUFBRWtGLEdBQWEsSUFBSSxJQUFJNE0sS0FBbEI5UixFQUFFQSxFQUFFNU8sTUFBbUI4VCxFQUFFLEdBQUdBLEVBQUV2ZixlQUFlbXNCLEdBQUcsQ0FBQyxJQUFJNXNCLEVBQUUsSUFBSTRzQixFQUFFajdCLFFBQVEsTUFBTWpCLEVBQUV5eEMsR0FBR3ZWLEVBQUU1TSxFQUFFNE0sR0FBRzVzQixHQUFHLFVBQVU0c0IsSUFBSUEsRUFBRSxZQUFZNXNCLEVBQUU4YSxFQUFFdW5CLFlBQVl6VixFQUFFbDhCLEdBQUdvcUIsRUFBRThSLEdBQUdsOEIsQ0FBQyxDQUFDLENBRFlRLE9BQU80WixLQUFLZzNCLElBQUlweUMsU0FBUSxTQUFTb3JCLEdBQUdvbkIsR0FBR3h5QyxTQUFRLFNBQVNzd0IsR0FBR0EsRUFBRUEsRUFBRWxGLEVBQUVqQixPQUFPLEdBQUd3SixjQUFjdkksRUFBRVQsVUFBVSxHQUFHeW5CLEdBQUc5aEIsR0FBRzhoQixHQUFHaG5CLEVBQUUsR0FBRSxJQUNoSSxJQUFJd25CLEdBQUcxSSxFQUFFLENBQUMySSxVQUFTLEdBQUksQ0FBQ0MsTUFBSyxFQUFHbnBCLE1BQUssRUFBR29wQixJQUFHLEVBQUdDLEtBQUksRUFBR0MsT0FBTSxFQUFHQyxJQUFHLEVBQUdDLEtBQUksRUFBR24zQixPQUFNLEVBQUdvM0IsUUFBTyxFQUFHQyxNQUFLLEVBQUdDLE1BQUssRUFBR0MsT0FBTSxFQUFHamYsUUFBTyxFQUFHa2YsT0FBTSxFQUFHQyxLQUFJLElBQ2xULFNBQVNDLEdBQUd0b0IsRUFBRWtGLEdBQUcsR0FBR0EsRUFBRSxDQUFDLEdBQUdzaUIsR0FBR3huQixLQUFLLE1BQU1rRixFQUFFcHRCLFVBQVUsTUFBTW90QixFQUFFNGdCLHlCQUF5QixNQUFNcjRCLE1BQU1xWCxFQUFFLElBQUk5RSxJQUFJLEdBQUcsTUFBTWtGLEVBQUU0Z0Isd0JBQXdCLENBQUMsR0FBRyxNQUFNNWdCLEVBQUVwdEIsU0FBUyxNQUFNMlYsTUFBTXFYLEVBQUUsS0FBSyxHQUFHLGlCQUFrQkksRUFBRTRnQiwyQkFBMkIsV0FBVzVnQixFQUFFNGdCLHlCQUF5QixNQUFNcjRCLE1BQU1xWCxFQUFFLElBQUssQ0FBQyxHQUFHLE1BQU1JLEVBQUU5VCxPQUFPLGlCQUFrQjhULEVBQUU5VCxNQUFNLE1BQU0zRCxNQUFNcVgsRUFBRSxJQUFLLENBQUMsQ0FDbFcsU0FBU3lqQixHQUFHdm9CLEVBQUVrRixHQUFHLElBQUksSUFBSWxGLEVBQUVucEIsUUFBUSxLQUFLLE1BQU0saUJBQWtCcXVCLEVBQUVzakIsR0FBRyxPQUFPeG9CLEdBQUcsSUFBSyxpQkFBaUIsSUFBSyxnQkFBZ0IsSUFBSyxZQUFZLElBQUssZ0JBQWdCLElBQUssZ0JBQWdCLElBQUssbUJBQW1CLElBQUssaUJBQWlCLElBQUssZ0JBQWdCLE9BQU0sRUFBRyxRQUFRLE9BQU0sRUFBRyxDQUFDLElBQUl5b0IsR0FBRyxLQUFLLFNBQVNDLEdBQUcxb0IsR0FBNkYsT0FBMUZBLEVBQUVBLEVBQUU1RixRQUFRNEYsRUFBRTJvQixZQUFZL3RCLFFBQVNndUIsMEJBQTBCNW9CLEVBQUVBLEVBQUU0b0IseUJBQWdDLElBQUk1b0IsRUFBRThtQixTQUFTOW1CLEVBQUVscUIsV0FBV2txQixDQUFDLENBQUMsSUFBSTZvQixHQUFHLEtBQUtDLEdBQUcsS0FBS0MsR0FBRyxLQUNwYyxTQUFTQyxHQUFHaHBCLEdBQUcsR0FBR0EsRUFBRWlwQixHQUFHanBCLEdBQUcsQ0FBQyxHQUFHLG1CQUFvQjZvQixHQUFHLE1BQU1wN0IsTUFBTXFYLEVBQUUsTUFBTSxJQUFJSSxFQUFFbEYsRUFBRWtwQixVQUFVaGtCLElBQUlBLEVBQUVpa0IsR0FBR2prQixHQUFHMmpCLEdBQUc3b0IsRUFBRWtwQixVQUFVbHBCLEVBQUVwb0IsS0FBS3N0QixHQUFHLENBQUMsQ0FBQyxTQUFTa2tCLEdBQUdwcEIsR0FBRzhvQixHQUFHQyxHQUFHQSxHQUFHOTBDLEtBQUsrckIsR0FBRytvQixHQUFHLENBQUMvb0IsR0FBRzhvQixHQUFHOW9CLENBQUMsQ0FBQyxTQUFTcXBCLEtBQUssR0FBR1AsR0FBRyxDQUFDLElBQUk5b0IsRUFBRThvQixHQUFHNWpCLEVBQUU2akIsR0FBb0IsR0FBakJBLEdBQUdELEdBQUcsS0FBS0UsR0FBR2hwQixHQUFNa0YsRUFBRSxJQUFJbEYsRUFBRSxFQUFFQSxFQUFFa0YsRUFBRXh4QixPQUFPc3NCLElBQUlncEIsR0FBRzlqQixFQUFFbEYsR0FBRyxDQUFDLENBQUMsU0FBU3NwQixHQUFHdHBCLEVBQUVrRixHQUFHLE9BQU9sRixFQUFFa0YsRUFBRSxDQUFDLFNBQVNxa0IsS0FBSyxDQUFDLElBQUlDLElBQUcsRUFBRyxTQUFTQyxHQUFHenBCLEVBQUVrRixFQUFFNE0sR0FBRyxHQUFHMFgsR0FBRyxPQUFPeHBCLEVBQUVrRixFQUFFNE0sR0FBRzBYLElBQUcsRUFBRyxJQUFJLE9BQU9GLEdBQUd0cEIsRUFBRWtGLEVBQUU0TSxFQUFrRCxDQUEvQyxRQUFXMFgsSUFBRyxHQUFHLE9BQU9WLElBQUksT0FBT0MsTUFBR1EsS0FBS0YsS0FBSSxDQUFDLENBQ2hiLFNBQVNLLEdBQUcxcEIsRUFBRWtGLEdBQUcsSUFBSTRNLEVBQUU5UixFQUFFa3BCLFVBQVUsR0FBRyxPQUFPcFgsRUFBRSxPQUFPLEtBQUssSUFBSTVzQixFQUFFaWtDLEdBQUdyWCxHQUFHLEdBQUcsT0FBTzVzQixFQUFFLE9BQU8sS0FBSzRzQixFQUFFNXNCLEVBQUVnZ0IsR0FBR2xGLEVBQUUsT0FBT2tGLEdBQUcsSUFBSyxVQUFVLElBQUssaUJBQWlCLElBQUssZ0JBQWdCLElBQUssdUJBQXVCLElBQUssY0FBYyxJQUFLLHFCQUFxQixJQUFLLGNBQWMsSUFBSyxxQkFBcUIsSUFBSyxZQUFZLElBQUssbUJBQW1CLElBQUssZ0JBQWdCaGdCLEdBQUdBLEVBQUU0QixZQUFxQjVCLElBQUksWUFBYjhhLEVBQUVBLEVBQUVwb0IsT0FBdUIsVUFBVW9vQixHQUFHLFdBQVdBLEdBQUcsYUFBYUEsSUFBSUEsR0FBRzlhLEVBQUUsTUFBTThhLEVBQUUsUUFBUUEsR0FBRSxFQUFHLEdBQUdBLEVBQUUsT0FBTyxLQUFLLEdBQUc4UixHQUFHLG1CQUNsZUEsRUFBRSxNQUFNcmtCLE1BQU1xWCxFQUFFLElBQUlJLFNBQVM0TSxJQUFJLE9BQU9BLENBQUMsQ0FBQyxJQUFJNlgsSUFBRyxFQUFHLEdBQUc3SSxFQUFHLElBQUksSUFBSThJLEdBQUcsQ0FBQyxFQUFFeHpDLE9BQU9xUCxlQUFlbWtDLEdBQUcsVUFBVSxDQUFDanVDLElBQUksV0FBV2d1QyxJQUFHLENBQUUsSUFBSS91QixPQUFPWCxpQkFBaUIsT0FBTzJ2QixHQUFHQSxJQUFJaHZCLE9BQU8rUixvQkFBb0IsT0FBT2lkLEdBQUdBLEdBQWtCLENBQWQsTUFBTTVwQixJQUFHMnBCLElBQUcsQ0FBRSxDQUFDLFNBQVNFLEdBQUc3cEIsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxFQUFFcXFCLEVBQUV5ZSxFQUFFOS9CLEVBQUUxRCxHQUFHLElBQUk2a0IsRUFBRXZqQixNQUFNL0gsVUFBVXlDLE1BQU11RixLQUFLc2YsVUFBVSxHQUFHLElBQUltSixFQUFFbEosTUFBTThWLEVBQUUvUixFQUEyQixDQUF4QixNQUFNOEUsR0FBR3h4QixLQUFLeTJDLFFBQVFqbEIsRUFBRSxDQUFDLENBQUMsSUFBSWtsQixJQUFHLEVBQUdDLEdBQUcsS0FBS0MsSUFBRyxFQUFHQyxHQUFHLEtBQUtDLEdBQUcsQ0FBQ0wsUUFBUSxTQUFTOXBCLEdBQUcrcEIsSUFBRyxFQUFHQyxHQUFHaHFCLENBQUMsR0FBRyxTQUFTb3FCLEdBQUdwcUIsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxFQUFFcXFCLEVBQUV5ZSxFQUFFOS9CLEVBQUUxRCxHQUFHNnVDLElBQUcsRUFBR0MsR0FBRyxLQUFLSCxHQUFHN3RCLE1BQU1tdUIsR0FBR3B1QixVQUFVLENBQ2pXLFNBQVNzdUIsR0FBR3JxQixHQUFHLElBQUlrRixFQUFFbEYsRUFBRThSLEVBQUU5UixFQUFFLEdBQUdBLEVBQUVzcUIsVUFBVSxLQUFLcGxCLEVBQUVudEIsUUFBUW10QixFQUFFQSxFQUFFbnRCLFdBQVcsQ0FBQ2lvQixFQUFFa0YsRUFBRSxHQUFPLElBQWEsTUFBakJBLEVBQUVsRixHQUFTdXFCLFNBQWN6WSxFQUFFNU0sRUFBRW50QixRQUFRaW9CLEVBQUVrRixFQUFFbnRCLGFBQWFpb0IsRUFBRSxDQUFDLE9BQU8sSUFBSWtGLEVBQUUzeEIsSUFBSXUrQixFQUFFLElBQUksQ0FBQyxTQUFTMFksR0FBR3hxQixHQUFHLEdBQUcsS0FBS0EsRUFBRXpzQixJQUFJLENBQUMsSUFBSTJ4QixFQUFFbEYsRUFBRXlxQixjQUFzRSxHQUF4RCxPQUFPdmxCLEdBQWtCLFFBQWRsRixFQUFFQSxFQUFFc3FCLGFBQXFCcGxCLEVBQUVsRixFQUFFeXFCLGVBQW1CLE9BQU92bEIsRUFBRSxPQUFPQSxFQUFFd2xCLFVBQVUsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTQyxHQUFHM3FCLEdBQUcsR0FBR3FxQixHQUFHcnFCLEtBQUtBLEVBQUUsTUFBTXZTLE1BQU1xWCxFQUFFLEtBQU0sQ0FFMVMsU0FBUzhsQixHQUFHNXFCLEdBQVcsT0FBTyxRQUFmQSxFQUR0TixTQUFZQSxHQUFHLElBQUlrRixFQUFFbEYsRUFBRXNxQixVQUFVLElBQUlwbEIsRUFBRSxDQUFTLEdBQUcsUUFBWEEsRUFBRW1sQixHQUFHcnFCLElBQWUsTUFBTXZTLE1BQU1xWCxFQUFFLE1BQU0sT0FBT0ksSUFBSWxGLEVBQUUsS0FBS0EsQ0FBQyxDQUFDLElBQUksSUFBSThSLEVBQUU5UixFQUFFOWEsRUFBRWdnQixJQUFJLENBQUMsSUFBSXR2QixFQUFFazhCLEVBQUUvNUIsT0FBTyxHQUFHLE9BQU9uQyxFQUFFLE1BQU0sSUFBSXFxQixFQUFFcnFCLEVBQUUwMEMsVUFBVSxHQUFHLE9BQU9ycUIsRUFBRSxDQUFZLEdBQUcsUUFBZC9hLEVBQUV0UCxFQUFFbUMsUUFBbUIsQ0FBQys1QixFQUFFNXNCLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHdFAsRUFBRWkxQyxRQUFRNXFCLEVBQUU0cUIsTUFBTSxDQUFDLElBQUk1cUIsRUFBRXJxQixFQUFFaTFDLE1BQU01cUIsR0FBRyxDQUFDLEdBQUdBLElBQUk2UixFQUFFLE9BQU82WSxHQUFHLzBDLEdBQUdvcUIsRUFBRSxHQUFHQyxJQUFJL2EsRUFBRSxPQUFPeWxDLEdBQUcvMEMsR0FBR3N2QixFQUFFakYsRUFBRUEsRUFBRTZxQixPQUFPLENBQUMsTUFBTXI5QixNQUFNcVgsRUFBRSxLQUFNLENBQUMsR0FBR2dOLEVBQUUvNUIsU0FBU21OLEVBQUVuTixPQUFPKzVCLEVBQUVsOEIsRUFBRXNQLEVBQUUrYSxNQUFNLENBQUMsSUFBSSxJQUFJeWUsR0FBRSxFQUFHOS9CLEVBQUVoSixFQUFFaTFDLE1BQU1qc0MsR0FBRyxDQUFDLEdBQUdBLElBQUlrekIsRUFBRSxDQUFDNE0sR0FBRSxFQUFHNU0sRUFBRWw4QixFQUFFc1AsRUFBRSthLEVBQUUsS0FBSyxDQUFDLEdBQUdyaEIsSUFBSXNHLEVBQUUsQ0FBQ3c1QixHQUFFLEVBQUd4NUIsRUFBRXRQLEVBQUVrOEIsRUFBRTdSLEVBQUUsS0FBSyxDQUFDcmhCLEVBQUVBLEVBQUVrc0MsT0FBTyxDQUFDLElBQUlwTSxFQUFFLENBQUMsSUFBSTkvQixFQUFFcWhCLEVBQUU0cUIsTUFBTWpzQyxHQUFHLENBQUMsR0FBR0EsSUFDNWZrekIsRUFBRSxDQUFDNE0sR0FBRSxFQUFHNU0sRUFBRTdSLEVBQUUvYSxFQUFFdFAsRUFBRSxLQUFLLENBQUMsR0FBR2dKLElBQUlzRyxFQUFFLENBQUN3NUIsR0FBRSxFQUFHeDVCLEVBQUUrYSxFQUFFNlIsRUFBRWw4QixFQUFFLEtBQUssQ0FBQ2dKLEVBQUVBLEVBQUVrc0MsT0FBTyxDQUFDLElBQUlwTSxFQUFFLE1BQU1qeEIsTUFBTXFYLEVBQUUsS0FBTSxDQUFDLENBQUMsR0FBR2dOLEVBQUV3WSxZQUFZcGxDLEVBQUUsTUFBTXVJLE1BQU1xWCxFQUFFLEtBQU0sQ0FBQyxHQUFHLElBQUlnTixFQUFFditCLElBQUksTUFBTWthLE1BQU1xWCxFQUFFLE1BQU0sT0FBT2dOLEVBQUVvWCxVQUFVeGtDLFVBQVVvdEIsRUFBRTlSLEVBQUVrRixDQUFDLENBQWtCNmxCLENBQUcvcUIsSUFBbUJnckIsR0FBR2hyQixHQUFHLElBQUksQ0FBQyxTQUFTZ3JCLEdBQUdockIsR0FBRyxHQUFHLElBQUlBLEVBQUV6c0IsS0FBSyxJQUFJeXNCLEVBQUV6c0IsSUFBSSxPQUFPeXNCLEVBQUUsSUFBSUEsRUFBRUEsRUFBRTZxQixNQUFNLE9BQU83cUIsR0FBRyxDQUFDLElBQUlrRixFQUFFOGxCLEdBQUdockIsR0FBRyxHQUFHLE9BQU9rRixFQUFFLE9BQU9BLEVBQUVsRixFQUFFQSxFQUFFOHFCLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FDMVgsSUFBSUcsR0FBR3pLLEVBQUcwSywwQkFBMEJDLEdBQUczSyxFQUFHNEssd0JBQXdCQyxHQUFHN0ssRUFBRzhLLHFCQUFxQkMsR0FBRy9LLEVBQUdnTCxzQkFBc0JDLEdBQUVqTCxFQUFHa0wsYUFBYUMsR0FBR25MLEVBQUdvTCxpQ0FBaUNDLEdBQUdyTCxFQUFHc0wsMkJBQTJCQyxHQUFHdkwsRUFBR3dMLDhCQUE4QkMsR0FBR3pMLEVBQUcwTCx3QkFBd0JDLEdBQUczTCxFQUFHNEwscUJBQXFCQyxHQUFHN0wsRUFBRzhMLHNCQUFzQkMsR0FBRyxLQUFLQyxHQUFHLEtBQ25WQyxHQUFHeDJDLEtBQUt5MkMsTUFBTXoyQyxLQUFLeTJDLE1BQWlDLFNBQVkxc0IsR0FBVSxPQUFPLElBQWRBLEtBQUssR0FBZSxHQUFHLElBQUkyc0IsR0FBRzNzQixHQUFHNHNCLEdBQUcsR0FBRyxDQUFDLEVBQS9FRCxHQUFHMTJDLEtBQUs0MkMsSUFBSUQsR0FBRzMyQyxLQUFLNjJDLElBQWdFQyxHQUFHLEdBQUdDLEdBQUcsUUFDN0gsU0FBU0MsR0FBR2p0QixHQUFHLE9BQU9BLEdBQUdBLEdBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE1BQU0sS0FBSyxNQUFNLEtBQUssTUFBTSxLQUFLLE9BQU8sS0FBSyxPQUFPLEtBQUssT0FBTyxLQUFLLFFBQVEsS0FBSyxRQUFRLE9BQVMsUUFBRkEsRUFBVSxLQUFLLFFBQVEsS0FBSyxRQUFRLEtBQUssU0FBUyxLQUFLLFNBQVMsS0FBSyxTQUFTLE9BQVMsVUFBRkEsRUFBWSxLQUFLLFVBQVUsT0FBTyxVQUFVLEtBQUssVUFBVSxPQUFPLFVBQVUsS0FBSyxVQUFVLE9BQU8sVUFBVSxLQUFLLFdBQVcsT0FBTyxXQUN6Z0IsUUFBUSxPQUFPQSxFQUFFLENBQUMsU0FBU2t0QixHQUFHbHRCLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFOVIsRUFBRW10QixhQUFhLEdBQUcsSUFBSXJiLEVBQUUsT0FBTyxFQUFFLElBQUk1c0IsRUFBRSxFQUFFdFAsRUFBRW9xQixFQUFFb3RCLGVBQWVudEIsRUFBRUQsRUFBRXF0QixZQUFZM08sRUFBSSxVQUFGNU0sRUFBWSxHQUFHLElBQUk0TSxFQUFFLENBQUMsSUFBSTkvQixFQUFFOC9CLEdBQUc5b0MsRUFBRSxJQUFJZ0osRUFBRXNHLEVBQUUrbkMsR0FBR3J1QyxHQUFTLElBQUxxaEIsR0FBR3llLEtBQVV4NUIsRUFBRStuQyxHQUFHaHRCLEdBQUksTUFBYSxJQUFQeWUsRUFBRTVNLEdBQUdsOEIsR0FBUXNQLEVBQUUrbkMsR0FBR3ZPLEdBQUcsSUFBSXplLElBQUkvYSxFQUFFK25DLEdBQUdodEIsSUFBSSxHQUFHLElBQUkvYSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUlnZ0IsR0FBR0EsSUFBSWhnQixHQUFHLElBQUtnZ0IsRUFBRXR2QixNQUFLQSxFQUFFc1AsR0FBR0EsS0FBRSthLEVBQUVpRixHQUFHQSxJQUFRLEtBQUt0dkIsR0FBRyxJQUFPLFFBQUZxcUIsSUFBWSxPQUFPaUYsRUFBMEMsR0FBeEMsSUFBTyxFQUFGaGdCLEtBQU9BLEdBQUssR0FBRjRzQixHQUE0QixLQUF0QjVNLEVBQUVsRixFQUFFc3RCLGdCQUF3QixJQUFJdHRCLEVBQUVBLEVBQUV1dEIsY0FBY3JvQixHQUFHaGdCLEVBQUUsRUFBRWdnQixHQUFjdHZCLEVBQUUsSUFBYms4QixFQUFFLEdBQUcyYSxHQUFHdm5CLElBQVVoZ0IsR0FBRzhhLEVBQUU4UixHQUFHNU0sSUFBSXR2QixFQUFFLE9BQU9zUCxDQUFDLENBQ3ZjLFNBQVNzb0MsR0FBR3h0QixFQUFFa0YsR0FBRyxPQUFPbEYsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPa0YsRUFBRSxJQUFJLEtBQUssRUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLEtBQUssTUFBTSxLQUFLLE1BQU0sS0FBSyxPQUFPLEtBQUssT0FBTyxLQUFLLE9BQU8sS0FBSyxRQUFRLEtBQUssUUFBUSxPQUFPQSxFQUFFLElBQXVKLFFBQVEsT0FBTyxFQUFFLENBQ3JOLFNBQVN1b0IsR0FBR3p0QixHQUFnQyxPQUFPLElBQXBDQSxHQUFrQixXQUFoQkEsRUFBRW10QixjQUFzQ250QixFQUFJLFdBQUZBLEVBQWEsV0FBVyxDQUFDLENBQUMsU0FBUzB0QixLQUFLLElBQUkxdEIsRUFBRStzQixHQUFvQyxPQUExQixJQUFRLFNBQWZBLEtBQUssTUFBcUJBLEdBQUcsSUFBVy9zQixDQUFDLENBQUMsU0FBUzJ0QixHQUFHM3RCLEdBQUcsSUFBSSxJQUFJa0YsRUFBRSxHQUFHNE0sRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUk1TSxFQUFFanhCLEtBQUsrckIsR0FBRyxPQUFPa0YsQ0FBQyxDQUMzYSxTQUFTMG9CLEdBQUc1dEIsRUFBRWtGLEVBQUU0TSxHQUFHOVIsRUFBRW10QixjQUFjam9CLEVBQUUsWUFBWUEsSUFBSWxGLEVBQUVvdEIsZUFBZSxFQUFFcHRCLEVBQUVxdEIsWUFBWSxJQUFHcnRCLEVBQUVBLEVBQUU2dEIsWUFBVzNvQixFQUFFLEdBQUd1bkIsR0FBR3ZuQixJQUFRNE0sQ0FBQyxDQUN6SCxTQUFTZ2MsR0FBRzl0QixFQUFFa0YsR0FBRyxJQUFJNE0sRUFBRTlSLEVBQUVzdEIsZ0JBQWdCcG9CLEVBQUUsSUFBSWxGLEVBQUVBLEVBQUV1dEIsY0FBY3piLEdBQUcsQ0FBQyxJQUFJNXNCLEVBQUUsR0FBR3VuQyxHQUFHM2EsR0FBR2w4QixFQUFFLEdBQUdzUCxFQUFFdFAsRUFBRXN2QixFQUFFbEYsRUFBRTlhLEdBQUdnZ0IsSUFBSWxGLEVBQUU5YSxJQUFJZ2dCLEdBQUc0TSxJQUFJbDhCLENBQUMsQ0FBQyxDQUFDLElBQUltNEMsR0FBRSxFQUFFLFNBQVNDLEdBQUdodUIsR0FBUyxPQUFPLEdBQWJBLElBQUlBLEdBQWEsRUFBRUEsRUFBRSxJQUFPLFVBQUZBLEdBQWEsR0FBRyxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUlpdUIsR0FBR0MsR0FBR0MsR0FBR0MsR0FBR0MsR0FBR0MsSUFBRyxFQUFHQyxHQUFHLEdBQUdDLEdBQUcsS0FBS0MsR0FBRyxLQUFLQyxHQUFHLEtBQUtDLEdBQUcsSUFBSUMsSUFBSUMsR0FBRyxJQUFJRCxJQUFJRSxHQUFHLEdBQUdDLEdBQUcsNlBBQTZQOXhDLE1BQU0sS0FDaGlCLFNBQVMreEMsR0FBR2h2QixFQUFFa0YsR0FBRyxPQUFPbEYsR0FBRyxJQUFLLFVBQVUsSUFBSyxXQUFXd3VCLEdBQUcsS0FBSyxNQUFNLElBQUssWUFBWSxJQUFLLFlBQVlDLEdBQUcsS0FBSyxNQUFNLElBQUssWUFBWSxJQUFLLFdBQVdDLEdBQUcsS0FBSyxNQUFNLElBQUssY0FBYyxJQUFLLGFBQWFDLEdBQUdNLE9BQU8vcEIsRUFBRWdxQixXQUFXLE1BQU0sSUFBSyxvQkFBb0IsSUFBSyxxQkFBcUJMLEdBQUdJLE9BQU8vcEIsRUFBRWdxQixXQUFXLENBQ25ULFNBQVNDLEdBQUdudkIsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxFQUFFcXFCLEdBQUcsT0FBRyxPQUFPRCxHQUFHQSxFQUFFb3ZCLGNBQWNudkIsR0FBU0QsRUFBRSxDQUFDcXZCLFVBQVVucUIsRUFBRW9xQixhQUFheGQsRUFBRXlkLGlCQUFpQnJxQyxFQUFFa3FDLFlBQVludkIsRUFBRXV2QixpQkFBaUIsQ0FBQzU1QyxJQUFJLE9BQU9zdkIsR0FBWSxRQUFSQSxFQUFFK2pCLEdBQUcvakIsS0FBYWdwQixHQUFHaHBCLEdBQUlsRixJQUFFQSxFQUFFdXZCLGtCQUFrQnJxQyxFQUFFZ2dCLEVBQUVsRixFQUFFd3ZCLGlCQUFpQixPQUFPNTVDLElBQUksSUFBSXN2QixFQUFFcnVCLFFBQVFqQixJQUFJc3ZCLEVBQUVqeEIsS0FBSzJCLEdBQVVvcUIsRUFBQyxDQUVwUixTQUFTeXZCLEdBQUd6dkIsR0FBRyxJQUFJa0YsRUFBRXdxQixHQUFHMXZCLEVBQUU1RixRQUFRLEdBQUcsT0FBTzhLLEVBQUUsQ0FBQyxJQUFJNE0sRUFBRXVZLEdBQUdubEIsR0FBRyxHQUFHLE9BQU80TSxFQUFFLEdBQVcsTUFBUjVNLEVBQUU0TSxFQUFFditCLE1BQVksR0FBVyxRQUFSMnhCLEVBQUVzbEIsR0FBRzFZLElBQTRELE9BQS9DOVIsRUFBRXF2QixVQUFVbnFCLE9BQUVtcEIsR0FBR3J1QixFQUFFMnZCLFVBQVMsV0FBV3hCLEdBQUdyYyxFQUFFLFNBQWdCLEdBQUcsSUFBSTVNLEdBQUc0TSxFQUFFb1gsVUFBVXhrQyxRQUFRK2xDLGNBQWNtRixhQUFtRSxZQUFyRDV2QixFQUFFcXZCLFVBQVUsSUFBSXZkLEVBQUV2K0IsSUFBSXUrQixFQUFFb1gsVUFBVTJHLGNBQWMsS0FBWSxDQUFDN3ZCLEVBQUVxdkIsVUFBVSxJQUFJLENBQ2xULFNBQVNTLEdBQUc5dkIsR0FBRyxHQUFHLE9BQU9BLEVBQUVxdkIsVUFBVSxPQUFNLEVBQUcsSUFBSSxJQUFJbnFCLEVBQUVsRixFQUFFd3ZCLGlCQUFpQixFQUFFdHFCLEVBQUV4eEIsUUFBUSxDQUFDLElBQUlvK0IsRUFBRWllLEdBQUcvdkIsRUFBRXN2QixhQUFhdHZCLEVBQUV1dkIsaUJBQWlCcnFCLEVBQUUsR0FBR2xGLEVBQUVvdkIsYUFBYSxHQUFHLE9BQU90ZCxFQUFpRyxPQUFlLFFBQVI1TSxFQUFFK2pCLEdBQUduWCxLQUFhb2MsR0FBR2hwQixHQUFHbEYsRUFBRXF2QixVQUFVdmQsR0FBRSxFQUEzSCxJQUFJNXNCLEVBQUUsSUFBdEI0c0IsRUFBRTlSLEVBQUVvdkIsYUFBd0JubUIsWUFBWTZJLEVBQUVsNkIsS0FBS2s2QixHQUFHMlcsR0FBR3ZqQyxFQUFFNHNCLEVBQUUxWCxPQUFPNDFCLGNBQWM5cUMsR0FBR3VqQyxHQUFHLEtBQTBEdmpCLEVBQUV6RixPQUFPLENBQUMsT0FBTSxDQUFFLENBQUMsU0FBU3d3QixHQUFHandCLEVBQUVrRixFQUFFNE0sR0FBR2dlLEdBQUc5dkIsSUFBSThSLEVBQUVtZCxPQUFPL3BCLEVBQUUsQ0FBQyxTQUFTZ3JCLEtBQUs1QixJQUFHLEVBQUcsT0FBT0UsSUFBSXNCLEdBQUd0QixNQUFNQSxHQUFHLE1BQU0sT0FBT0MsSUFBSXFCLEdBQUdyQixNQUFNQSxHQUFHLE1BQU0sT0FBT0MsSUFBSW9CLEdBQUdwQixNQUFNQSxHQUFHLE1BQU1DLEdBQUcvNUMsUUFBUXE3QyxJQUFJcEIsR0FBR2o2QyxRQUFRcTdDLEdBQUcsQ0FDbmYsU0FBU0UsR0FBR253QixFQUFFa0YsR0FBR2xGLEVBQUVxdkIsWUFBWW5xQixJQUFJbEYsRUFBRXF2QixVQUFVLEtBQUtmLEtBQUtBLElBQUcsRUFBRzlOLEVBQUcwSywwQkFBMEIxSyxFQUFHMEwsd0JBQXdCZ0UsS0FBSyxDQUM1SCxTQUFTRSxHQUFHcHdCLEdBQUcsU0FBU2tGLEVBQUVBLEdBQUcsT0FBT2lyQixHQUFHanJCLEVBQUVsRixFQUFFLENBQUMsR0FBRyxFQUFFdXVCLEdBQUc3NkMsT0FBTyxDQUFDeThDLEdBQUc1QixHQUFHLEdBQUd2dUIsR0FBRyxJQUFJLElBQUk4UixFQUFFLEVBQUVBLEVBQUV5YyxHQUFHNzZDLE9BQU9vK0IsSUFBSSxDQUFDLElBQUk1c0IsRUFBRXFwQyxHQUFHemMsR0FBRzVzQixFQUFFbXFDLFlBQVlydkIsSUFBSTlhLEVBQUVtcUMsVUFBVSxLQUFLLENBQUMsQ0FBeUYsSUFBeEYsT0FBT2IsSUFBSTJCLEdBQUczQixHQUFHeHVCLEdBQUcsT0FBT3l1QixJQUFJMEIsR0FBRzFCLEdBQUd6dUIsR0FBRyxPQUFPMHVCLElBQUl5QixHQUFHekIsR0FBRzF1QixHQUFHMnVCLEdBQUcvNUMsUUFBUXN3QixHQUFHMnBCLEdBQUdqNkMsUUFBUXN3QixHQUFPNE0sRUFBRSxFQUFFQSxFQUFFZ2QsR0FBR3A3QyxPQUFPbytCLEtBQUk1c0IsRUFBRTRwQyxHQUFHaGQsSUFBS3VkLFlBQVlydkIsSUFBSTlhLEVBQUVtcUMsVUFBVSxNQUFNLEtBQUssRUFBRVAsR0FBR3A3QyxRQUFpQixRQUFSbytCLEVBQUVnZCxHQUFHLElBQVlPLFdBQVlJLEdBQUczZCxHQUFHLE9BQU9BLEVBQUV1ZCxXQUFXUCxHQUFHcnZCLE9BQU8sQ0FBQyxJQUFJNHdCLEdBQUdqTyxFQUFHa08sd0JBQXdCQyxJQUFHLEVBQzVhLFNBQVNDLEdBQUd4d0IsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUcsSUFBSXRQLEVBQUVtNEMsR0FBRTl0QixFQUFFb3dCLEdBQUcxNkIsV0FBVzA2QixHQUFHMTZCLFdBQVcsS0FBSyxJQUFJbzRCLEdBQUUsRUFBRTBDLEdBQUd6d0IsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQThCLENBQTNCLFFBQVE2b0MsR0FBRW40QyxFQUFFeTZDLEdBQUcxNkIsV0FBV3NLLENBQUMsQ0FBQyxDQUFDLFNBQVN5d0IsR0FBRzF3QixFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBRyxJQUFJdFAsRUFBRW00QyxHQUFFOXRCLEVBQUVvd0IsR0FBRzE2QixXQUFXMDZCLEdBQUcxNkIsV0FBVyxLQUFLLElBQUlvNEIsR0FBRSxFQUFFMEMsR0FBR3p3QixFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBOEIsQ0FBM0IsUUFBUTZvQyxHQUFFbjRDLEVBQUV5NkMsR0FBRzE2QixXQUFXc0ssQ0FBQyxDQUFDLENBQ2pPLFNBQVN3d0IsR0FBR3p3QixFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBRyxHQUFHcXJDLEdBQUcsQ0FBQyxJQUFJMzZDLEVBQUVtNkMsR0FBRy92QixFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBRyxHQUFHLE9BQU90UCxFQUFFKzZDLEdBQUczd0IsRUFBRWtGLEVBQUVoZ0IsRUFBRTZsQixHQUFHK0csR0FBR2tkLEdBQUdodkIsRUFBRTlhLFFBQVEsR0FOdEYsU0FBWThhLEVBQUVrRixFQUFFNE0sRUFBRTVzQixFQUFFdFAsR0FBRyxPQUFPc3ZCLEdBQUcsSUFBSyxVQUFVLE9BQU9zcEIsR0FBR1csR0FBR1gsR0FBR3h1QixFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRXRQLElBQUcsRUFBRyxJQUFLLFlBQVksT0FBTzY0QyxHQUFHVSxHQUFHVixHQUFHenVCLEVBQUVrRixFQUFFNE0sRUFBRTVzQixFQUFFdFAsSUFBRyxFQUFHLElBQUssWUFBWSxPQUFPODRDLEdBQUdTLEdBQUdULEdBQUcxdUIsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxJQUFHLEVBQUcsSUFBSyxjQUFjLElBQUlxcUIsRUFBRXJxQixFQUFFczVDLFVBQWtELE9BQXhDUCxHQUFHL3lDLElBQUlxa0IsRUFBRWt2QixHQUFHUixHQUFHaHpDLElBQUlza0IsSUFBSSxLQUFLRCxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRXRQLEtBQVUsRUFBRyxJQUFLLG9CQUFvQixPQUFPcXFCLEVBQUVycUIsRUFBRXM1QyxVQUFVTCxHQUFHanpDLElBQUlxa0IsRUFBRWt2QixHQUFHTixHQUFHbHpDLElBQUlza0IsSUFBSSxLQUFLRCxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRXRQLEtBQUksRUFBRyxPQUFNLENBQUUsQ0FNMVFnN0MsQ0FBR2g3QyxFQUFFb3FCLEVBQUVrRixFQUFFNE0sRUFBRTVzQixHQUFHQSxFQUFFMnJDLHVCQUF1QixHQUFHN0IsR0FBR2h2QixFQUFFOWEsR0FBSyxFQUFGZ2dCLElBQU0sRUFBRTZwQixHQUFHbDRDLFFBQVFtcEIsR0FBRyxDQUFDLEtBQUssT0FBT3BxQixHQUFHLENBQUMsSUFBSXFxQixFQUFFZ3BCLEdBQUdyekMsR0FBMEQsR0FBdkQsT0FBT3FxQixHQUFHZ3VCLEdBQUdodUIsR0FBaUIsUUFBZEEsRUFBRTh2QixHQUFHL3ZCLEVBQUVrRixFQUFFNE0sRUFBRTVzQixLQUFheXJDLEdBQUczd0IsRUFBRWtGLEVBQUVoZ0IsRUFBRTZsQixHQUFHK0csR0FBTTdSLElBQUlycUIsRUFBRSxNQUFNQSxFQUFFcXFCLENBQUMsQ0FBQyxPQUFPcnFCLEdBQUdzUCxFQUFFMnJDLGlCQUFpQixNQUFNRixHQUFHM3dCLEVBQUVrRixFQUFFaGdCLEVBQUUsS0FBSzRzQixFQUFFLENBQUMsQ0FBQyxJQUFJL0csR0FBRyxLQUNwVSxTQUFTZ2xCLEdBQUcvdkIsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQTJCLEdBQXhCNmxCLEdBQUcsS0FBd0IsUUFBWC9LLEVBQUUwdkIsR0FBVjF2QixFQUFFMG9CLEdBQUd4akMsS0FBdUIsR0FBVyxRQUFSZ2dCLEVBQUVtbEIsR0FBR3JxQixJQUFZQSxFQUFFLFVBQVUsR0FBVyxNQUFSOFIsRUFBRTVNLEVBQUUzeEIsS0FBVyxDQUFTLEdBQUcsUUFBWHlzQixFQUFFd3FCLEdBQUd0bEIsSUFBZSxPQUFPbEYsRUFBRUEsRUFBRSxJQUFJLE1BQU0sR0FBRyxJQUFJOFIsRUFBRSxDQUFDLEdBQUc1TSxFQUFFZ2tCLFVBQVV4a0MsUUFBUStsQyxjQUFjbUYsYUFBYSxPQUFPLElBQUkxcUIsRUFBRTN4QixJQUFJMnhCLEVBQUVna0IsVUFBVTJHLGNBQWMsS0FBSzd2QixFQUFFLElBQUksTUFBTWtGLElBQUlsRixJQUFJQSxFQUFFLE1BQVcsT0FBTCtLLEdBQUcvSyxFQUFTLElBQUksQ0FDN1MsU0FBUzh3QixHQUFHOXdCLEdBQUcsT0FBT0EsR0FBRyxJQUFLLFNBQVMsSUFBSyxRQUFRLElBQUssUUFBUSxJQUFLLGNBQWMsSUFBSyxPQUFPLElBQUssTUFBTSxJQUFLLFdBQVcsSUFBSyxXQUFXLElBQUssVUFBVSxJQUFLLFlBQVksSUFBSyxPQUFPLElBQUssVUFBVSxJQUFLLFdBQVcsSUFBSyxRQUFRLElBQUssVUFBVSxJQUFLLFVBQVUsSUFBSyxXQUFXLElBQUssUUFBUSxJQUFLLFlBQVksSUFBSyxVQUFVLElBQUssUUFBUSxJQUFLLFFBQVEsSUFBSyxPQUFPLElBQUssZ0JBQWdCLElBQUssY0FBYyxJQUFLLFlBQVksSUFBSyxhQUFhLElBQUssUUFBUSxJQUFLLFNBQVMsSUFBSyxTQUFTLElBQUssU0FBUyxJQUFLLGNBQWMsSUFBSyxXQUFXLElBQUssYUFBYSxJQUFLLGVBQWUsSUFBSyxTQUFTLElBQUssa0JBQWtCLElBQUssWUFBWSxJQUFLLG1CQUFtQixJQUFLLGlCQUFpQixJQUFLLG9CQUFvQixJQUFLLGFBQWEsSUFBSyxZQUFZLElBQUssY0FBYyxJQUFLLE9BQU8sSUFBSyxtQkFBbUIsSUFBSyxRQUFRLElBQUssYUFBYSxJQUFLLFdBQVcsSUFBSyxTQUFTLElBQUssY0FBYyxPQUFPLEVBQUUsSUFBSyxPQUFPLElBQUssWUFBWSxJQUFLLFdBQVcsSUFBSyxZQUFZLElBQUssV0FBVyxJQUFLLFlBQVksSUFBSyxXQUFXLElBQUssWUFBWSxJQUFLLGNBQWMsSUFBSyxhQUFhLElBQUssY0FBYyxJQUFLLFNBQVMsSUFBSyxTQUFTLElBQUssWUFBWSxJQUFLLFFBQVEsSUFBSyxhQUFhLElBQUssYUFBYSxJQUFLLGVBQWUsSUFBSyxlQUFlLE9BQU8sRUFDcHFDLElBQUssVUFBVSxPQUFPMnJCLE1BQU0sS0FBS0UsR0FBRyxPQUFPLEVBQUUsS0FBS0UsR0FBRyxPQUFPLEVBQUUsS0FBS0UsR0FBRyxLQUFLRSxHQUFHLE9BQU8sR0FBRyxLQUFLRSxHQUFHLE9BQU8sVUFBVSxRQUFRLE9BQU8sR0FBRyxRQUFRLE9BQU8sR0FBRyxDQUFDLElBQUkwRSxHQUFHLEtBQUtDLEdBQUcsS0FBSy96QixHQUFHLEtBQUssU0FBU2cwQixLQUFLLEdBQUdoMEIsR0FBRyxPQUFPQSxHQUFHLElBQUkrQyxFQUFrQjlhLEVBQWhCZ2dCLEVBQUU4ckIsR0FBR2xmLEVBQUU1TSxFQUFFeHhCLE9BQVNrQyxFQUFFLFVBQVVtN0MsR0FBR0EsR0FBR3g2QyxNQUFNdzZDLEdBQUc3SyxZQUFZam1CLEVBQUVycUIsRUFBRWxDLE9BQU8sSUFBSXNzQixFQUFFLEVBQUVBLEVBQUU4UixHQUFHNU0sRUFBRWxGLEtBQUtwcUIsRUFBRW9xQixHQUFHQSxLQUFLLElBQUkwZSxFQUFFNU0sRUFBRTlSLEVBQUUsSUFBSTlhLEVBQUUsRUFBRUEsR0FBR3c1QixHQUFHeFosRUFBRTRNLEVBQUU1c0IsS0FBS3RQLEVBQUVxcUIsRUFBRS9hLEdBQUdBLEtBQUssT0FBTytYLEdBQUdybkIsRUFBRXNCLE1BQU04b0IsRUFBRSxFQUFFOWEsRUFBRSxFQUFFQSxPQUFFLEVBQU8sQ0FDeFksU0FBU2dzQyxHQUFHbHhCLEdBQUcsSUFBSWtGLEVBQUVsRixFQUFFbXhCLFFBQStFLE1BQXZFLGFBQWFueEIsRUFBZ0IsS0FBYkEsRUFBRUEsRUFBRW94QixXQUFnQixLQUFLbHNCLElBQUlsRixFQUFFLElBQUtBLEVBQUVrRixFQUFFLEtBQUtsRixJQUFJQSxFQUFFLElBQVcsSUFBSUEsR0FBRyxLQUFLQSxFQUFFQSxFQUFFLENBQUMsQ0FBQyxTQUFTcXhCLEtBQUssT0FBTSxDQUFFLENBQUMsU0FBU0MsS0FBSyxPQUFNLENBQUUsQ0FDNUssU0FBU0MsR0FBR3Z4QixHQUFHLFNBQVNrRixFQUFFQSxFQUFFaGdCLEVBQUV0UCxFQUFFcXFCLEVBQUV5ZSxHQUE2RyxJQUFJLElBQUk1TSxLQUFsSHorQixLQUFLbStDLFdBQVd0c0IsRUFBRTd4QixLQUFLbytDLFlBQVk3N0MsRUFBRXZDLEtBQUt1RSxLQUFLc04sRUFBRTdSLEtBQUsrN0MsWUFBWW52QixFQUFFNXNCLEtBQUsrbUIsT0FBT3NrQixFQUFFcnJDLEtBQUtxK0MsY0FBYyxLQUFrQjF4QixFQUFFQSxFQUFFcmEsZUFBZW1zQixLQUFLNU0sRUFBRWxGLEVBQUU4UixHQUFHeitCLEtBQUt5K0IsR0FBRzVNLEVBQUVBLEVBQUVqRixHQUFHQSxFQUFFNlIsSUFBZ0ksT0FBNUh6K0IsS0FBS3MrQyxvQkFBb0IsTUFBTTF4QixFQUFFMnhCLGlCQUFpQjN4QixFQUFFMnhCLGtCQUFpQixJQUFLM3hCLEVBQUU0eEIsYUFBYVIsR0FBR0MsR0FBR2orQyxLQUFLeStDLHFCQUFxQlIsR0FBVWorQyxJQUFJLENBQzlFLE9BRCtFeXJDLEVBQUU1WixFQUFFendCLFVBQVUsQ0FBQ3M5QyxlQUFlLFdBQVcxK0MsS0FBS3UrQyxrQkFBaUIsRUFBRyxJQUFJNXhCLEVBQUUzc0IsS0FBSys3QyxZQUFZcHZCLElBQUlBLEVBQUUreEIsZUFBZS94QixFQUFFK3hCLGlCQUFpQixrQkFBbUIveEIsRUFBRTZ4QixjQUM3ZTd4QixFQUFFNnhCLGFBQVksR0FBSXgrQyxLQUFLcytDLG1CQUFtQk4sR0FBRyxFQUFFUixnQkFBZ0IsV0FBVyxJQUFJN3dCLEVBQUUzc0IsS0FBSys3QyxZQUFZcHZCLElBQUlBLEVBQUU2d0IsZ0JBQWdCN3dCLEVBQUU2d0Isa0JBQWtCLGtCQUFtQjd3QixFQUFFZ3lCLGVBQWVoeUIsRUFBRWd5QixjQUFhLEdBQUkzK0MsS0FBS3krQyxxQkFBcUJULEdBQUcsRUFBRVksUUFBUSxXQUFXLEVBQUVDLGFBQWFiLEtBQVluc0IsQ0FBQyxDQUNqUixJQUFvTGl0QixHQUFHQyxHQUFHQyxHQUF0TEMsR0FBRyxDQUFDQyxXQUFXLEVBQUVDLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxVQUFVLFNBQVMxeUIsR0FBRyxPQUFPQSxFQUFFMHlCLFdBQVdqYSxLQUFLSSxLQUFLLEVBQUUrWSxpQkFBaUIsRUFBRWUsVUFBVSxHQUFHQyxHQUFHckIsR0FBR2UsSUFBSU8sR0FBRy9ULEVBQUUsQ0FBQyxFQUFFd1QsR0FBRyxDQUFDUSxLQUFLLEVBQUVDLE9BQU8sSUFBSUMsR0FBR3pCLEdBQUdzQixJQUFhSSxHQUFHblUsRUFBRSxDQUFDLEVBQUUrVCxHQUFHLENBQUNLLFFBQVEsRUFBRUMsUUFBUSxFQUFFQyxRQUFRLEVBQUVDLFFBQVEsRUFBRUMsTUFBTSxFQUFFQyxNQUFNLEVBQUU1NUIsUUFBUSxFQUFFNjVCLFNBQVMsRUFBRTk1QixPQUFPLEVBQUVELFFBQVEsRUFBRWc2QixpQkFBaUJDLEdBQUdqcEMsT0FBTyxFQUFFa3BDLFFBQVEsRUFBRUMsY0FBYyxTQUFTNXpCLEdBQUcsWUFBTyxJQUFTQSxFQUFFNHpCLGNBQWM1ekIsRUFBRTZ6QixjQUFjN3pCLEVBQUUyb0IsV0FBVzNvQixFQUFFOHpCLFVBQVU5ekIsRUFBRTZ6QixZQUFZN3pCLEVBQUU0ekIsYUFBYSxFQUFFRyxVQUFVLFNBQVMvekIsR0FBRyxNQUFHLGNBQzNlQSxFQUFTQSxFQUFFK3pCLFdBQVUvekIsSUFBSXF5QixLQUFLQSxJQUFJLGNBQWNyeUIsRUFBRXBvQixNQUFNdTZDLEdBQUdueUIsRUFBRWt6QixRQUFRYixHQUFHYSxRQUFRZCxHQUFHcHlCLEVBQUVtekIsUUFBUWQsR0FBR2MsU0FBU2YsR0FBR0QsR0FBRyxFQUFFRSxHQUFHcnlCLEdBQVVteUIsR0FBRSxFQUFFNkIsVUFBVSxTQUFTaDBCLEdBQUcsTUFBTSxjQUFjQSxFQUFFQSxFQUFFZzBCLFVBQVU1QixFQUFFLElBQUk2QixHQUFHMUMsR0FBRzBCLElBQWlDaUIsR0FBRzNDLEdBQTdCelMsRUFBRSxDQUFDLEVBQUVtVSxHQUFHLENBQUNrQixhQUFhLEtBQTRDQyxHQUFHN0MsR0FBOUJ6UyxFQUFFLENBQUMsRUFBRStULEdBQUcsQ0FBQ2UsY0FBYyxLQUEwRVMsR0FBRzlDLEdBQTVEelMsRUFBRSxDQUFDLEVBQUV3VCxHQUFHLENBQUNnQyxjQUFjLEVBQUVDLFlBQVksRUFBRUMsY0FBYyxLQUFjQyxHQUFHM1YsRUFBRSxDQUFDLEVBQUV3VCxHQUFHLENBQUNvQyxjQUFjLFNBQVMxMEIsR0FBRyxNQUFNLGtCQUFrQkEsRUFBRUEsRUFBRTAwQixjQUFjOTVCLE9BQU84NUIsYUFBYSxJQUFJQyxHQUFHcEQsR0FBR2tELElBQXlCRyxHQUFHckQsR0FBckJ6UyxFQUFFLENBQUMsRUFBRXdULEdBQUcsQ0FBQ25tQixLQUFLLEtBQWMwb0IsR0FBRyxDQUFDQyxJQUFJLFNBQ3hmQyxTQUFTLElBQUlDLEtBQUssWUFBWUMsR0FBRyxVQUFVQyxNQUFNLGFBQWFDLEtBQUssWUFBWUMsSUFBSSxTQUFTQyxJQUFJLEtBQUtDLEtBQUssY0FBY0MsS0FBSyxjQUFjQyxPQUFPLGFBQWFDLGdCQUFnQixnQkFBZ0JDLEdBQUcsQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLEdBQUcsUUFBUSxHQUFHLFFBQVEsR0FBRyxRQUFRLEdBQUcsVUFBVSxHQUFHLE1BQU0sR0FBRyxRQUFRLEdBQUcsV0FBVyxHQUFHLFNBQVMsR0FBRyxJQUFJLEdBQUcsU0FBUyxHQUFHLFdBQVcsR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLFlBQVksR0FBRyxVQUFVLEdBQUcsYUFBYSxHQUFHLFlBQVksR0FBRyxTQUFTLEdBQUcsU0FBUyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQ3RmLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxVQUFVLElBQUksYUFBYSxJQUFJLFFBQVFDLEdBQUcsQ0FBQ0MsSUFBSSxTQUFTQyxRQUFRLFVBQVVDLEtBQUssVUFBVUMsTUFBTSxZQUFZLFNBQVNDLEdBQUdoMkIsR0FBRyxJQUFJa0YsRUFBRTd4QixLQUFLKzdDLFlBQVksT0FBT2xxQixFQUFFdXVCLGlCQUFpQnZ1QixFQUFFdXVCLGlCQUFpQnp6QixNQUFJQSxFQUFFMjFCLEdBQUczMUIsT0FBTWtGLEVBQUVsRixFQUFLLENBQUMsU0FBUzB6QixLQUFLLE9BQU9zQyxFQUFFLENBQ2hTLElBQUlDLEdBQUduWCxFQUFFLENBQUMsRUFBRStULEdBQUcsQ0FBQ3QrQyxJQUFJLFNBQVN5ckIsR0FBRyxHQUFHQSxFQUFFenJCLElBQUksQ0FBQyxJQUFJMndCLEVBQUUydkIsR0FBRzcwQixFQUFFenJCLE1BQU15ckIsRUFBRXpyQixJQUFJLEdBQUcsaUJBQWlCMndCLEVBQUUsT0FBT0EsQ0FBQyxDQUFDLE1BQU0sYUFBYWxGLEVBQUVwb0IsS0FBYyxNQUFSb29CLEVBQUVreEIsR0FBR2x4QixJQUFVLFFBQVE5cEIsT0FBT0MsYUFBYTZwQixHQUFJLFlBQVlBLEVBQUVwb0IsTUFBTSxVQUFVb29CLEVBQUVwb0IsS0FBSzg5QyxHQUFHMTFCLEVBQUVteEIsVUFBVSxlQUFlLEVBQUUsRUFBRS9uQixLQUFLLEVBQUUzUixTQUFTLEVBQUVrQyxRQUFRLEVBQUU2NUIsU0FBUyxFQUFFOTVCLE9BQU8sRUFBRUQsUUFBUSxFQUFFeThCLE9BQU8sRUFBRUMsT0FBTyxFQUFFMUMsaUJBQWlCQyxHQUFHdEMsU0FBUyxTQUFTcHhCLEdBQUcsTUFBTSxhQUFhQSxFQUFFcG9CLEtBQUtzNUMsR0FBR2x4QixHQUFHLENBQUMsRUFBRW14QixRQUFRLFNBQVNueEIsR0FBRyxNQUFNLFlBQVlBLEVBQUVwb0IsTUFBTSxVQUFVb29CLEVBQUVwb0IsS0FBS29vQixFQUFFbXhCLFFBQVEsQ0FBQyxFQUFFaUYsTUFBTSxTQUFTcDJCLEdBQUcsTUFBTSxhQUM3ZUEsRUFBRXBvQixLQUFLczVDLEdBQUdseEIsR0FBRyxZQUFZQSxFQUFFcG9CLE1BQU0sVUFBVW9vQixFQUFFcG9CLEtBQUtvb0IsRUFBRW14QixRQUFRLENBQUMsSUFBSWtGLEdBQUc5RSxHQUFHMEUsSUFBaUlLLEdBQUcvRSxHQUE3SHpTLEVBQUUsQ0FBQyxFQUFFbVUsR0FBRyxDQUFDL0QsVUFBVSxFQUFFejVCLE1BQU0sRUFBRXpKLE9BQU8sRUFBRXVxQyxTQUFTLEVBQUVDLG1CQUFtQixFQUFFQyxNQUFNLEVBQUVDLE1BQU0sRUFBRUMsTUFBTSxFQUFFQyxZQUFZLEVBQUVDLFVBQVUsS0FBbUlDLEdBQUd2RixHQUFySHpTLEVBQUUsQ0FBQyxFQUFFK1QsR0FBRyxDQUFDa0UsUUFBUSxFQUFFQyxjQUFjLEVBQUVDLGVBQWUsRUFBRXY5QixPQUFPLEVBQUVELFFBQVEsRUFBRUUsUUFBUSxFQUFFNjVCLFNBQVMsRUFBRUMsaUJBQWlCQyxNQUEwRXdELEdBQUczRixHQUEzRHpTLEVBQUUsQ0FBQyxFQUFFd1QsR0FBRyxDQUFDL1EsYUFBYSxFQUFFZ1QsWUFBWSxFQUFFQyxjQUFjLEtBQWMyQyxHQUFHclksRUFBRSxDQUFDLEVBQUVtVSxHQUFHLENBQUNtRSxPQUFPLFNBQVNwM0IsR0FBRyxNQUFNLFdBQVdBLEVBQUVBLEVBQUVvM0IsT0FBTyxnQkFBZ0JwM0IsR0FBR0EsRUFBRXEzQixZQUFZLENBQUMsRUFDbmZDLE9BQU8sU0FBU3QzQixHQUFHLE1BQU0sV0FBV0EsRUFBRUEsRUFBRXMzQixPQUFPLGdCQUFnQnQzQixHQUFHQSxFQUFFdTNCLFlBQVksZUFBZXYzQixHQUFHQSxFQUFFdzNCLFdBQVcsQ0FBQyxFQUFFQyxPQUFPLEVBQUVDLFVBQVUsSUFBSUMsR0FBR3BHLEdBQUc0RixJQUFJUyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSUMsR0FBRy9XLEdBQUkscUJBQXFCbG1CLE9BQU9rOUIsR0FBRyxLQUFLaFgsR0FBSSxpQkFBaUIvckMsV0FBVytpRCxHQUFHL2lELFNBQVNnakQsY0FBYyxJQUFJQyxHQUFHbFgsR0FBSSxjQUFjbG1CLFNBQVNrOUIsR0FBR0csR0FBR25YLEtBQU0rVyxJQUFJQyxJQUFJLEVBQUVBLElBQUksSUFBSUEsSUFBSUksR0FBR2hpRCxPQUFPQyxhQUFhLElBQUlnaUQsSUFBRyxFQUMxVyxTQUFTQyxHQUFHcDRCLEVBQUVrRixHQUFHLE9BQU9sRixHQUFHLElBQUssUUFBUSxPQUFPLElBQUk0M0IsR0FBRy9nRCxRQUFRcXVCLEVBQUVpc0IsU0FBUyxJQUFLLFVBQVUsT0FBTyxNQUFNanNCLEVBQUVpc0IsUUFBUSxJQUFLLFdBQVcsSUFBSyxZQUFZLElBQUssV0FBVyxPQUFNLEVBQUcsUUFBUSxPQUFNLEVBQUcsQ0FBQyxTQUFTa0gsR0FBR3I0QixHQUFjLE1BQU0saUJBQWpCQSxFQUFFQSxFQUFFK3lCLFNBQWtDLFNBQVMveUIsRUFBRUEsRUFBRW1NLEtBQUssSUFBSSxDQUFDLElBQUltc0IsSUFBRyxFQUUxUUMsR0FBRyxDQUFDL3BDLE9BQU0sRUFBRzBLLE1BQUssRUFBR0ksVUFBUyxFQUFHLGtCQUFpQixFQUFHUCxPQUFNLEVBQUdJLE9BQU0sRUFBR0YsUUFBTyxFQUFHRCxVQUFTLEVBQUd3L0IsT0FBTSxFQUFHNWhELFFBQU8sRUFBR2tpQixLQUFJLEVBQUduUyxNQUFLLEVBQUcwUyxNQUFLLEVBQUdSLEtBQUksRUFBR08sTUFBSyxHQUFJLFNBQVNxL0IsR0FBR3o0QixHQUFHLElBQUlrRixFQUFFbEYsR0FBR0EsRUFBRXNrQixVQUFVdGtCLEVBQUVza0IsU0FBU3BpQyxjQUFjLE1BQU0sVUFBVWdqQixJQUFJcXpCLEdBQUd2NEIsRUFBRXBvQixNQUFNLGFBQWFzdEIsQ0FBTyxDQUFDLFNBQVN3ekIsR0FBRzE0QixFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBR2trQyxHQUFHbGtDLEdBQXNCLEdBQW5CZ2dCLEVBQUV5ekIsR0FBR3p6QixFQUFFLGFBQWdCeHhCLFNBQVNvK0IsRUFBRSxJQUFJOGdCLEdBQUcsV0FBVyxTQUFTLEtBQUs5Z0IsRUFBRTVzQixHQUFHOGEsRUFBRS9yQixLQUFLLENBQUN1bEIsTUFBTXNZLEVBQUU4bUIsVUFBVTF6QixJQUFJLENBQUMsSUFBSTJ6QixHQUFHLEtBQUtDLEdBQUcsS0FBSyxTQUFTOTVCLEdBQUdnQixHQUFHKzRCLEdBQUcvNEIsRUFBRSxFQUFFLENBQUMsU0FBU2c1QixHQUFHaDVCLEdBQWUsR0FBRzRrQixFQUFUcVUsR0FBR2o1QixJQUFZLE9BQU9BLENBQUMsQ0FDcGUsU0FBU2s1QixHQUFHbDVCLEVBQUVrRixHQUFHLEdBQUcsV0FBV2xGLEVBQUUsT0FBT2tGLENBQUMsQ0FBQyxJQUFJaTBCLElBQUcsRUFBRyxHQUFHclksRUFBRyxDQUFDLElBQUlzWSxHQUFHLEdBQUd0WSxFQUFHLENBQUMsSUFBSXVZLEdBQUcsWUFBWXRrRCxTQUFTLElBQUlza0QsR0FBRyxDQUFDLElBQUlDLEdBQUd2a0QsU0FBU0MsY0FBYyxPQUFPc2tELEdBQUdya0QsYUFBYSxVQUFVLFdBQVdva0QsR0FBRyxtQkFBb0JDLEdBQUdDLE9BQU8sQ0FBQ0gsR0FBR0MsRUFBRSxNQUFNRCxJQUFHLEVBQUdELEdBQUdDLE1BQU1ya0QsU0FBU2dqRCxjQUFjLEVBQUVoakQsU0FBU2dqRCxhQUFhLENBQUMsU0FBU3lCLEtBQUtYLEtBQUtBLEdBQUdZLFlBQVksbUJBQW1CQyxJQUFJWixHQUFHRCxHQUFHLEtBQUssQ0FBQyxTQUFTYSxHQUFHMTVCLEdBQUcsR0FBRyxVQUFVQSxFQUFFdWhCLGNBQWN5WCxHQUFHRixJQUFJLENBQUMsSUFBSTV6QixFQUFFLEdBQUd3ekIsR0FBR3h6QixFQUFFNHpCLEdBQUc5NEIsRUFBRTBvQixHQUFHMW9CLElBQUl5cEIsR0FBR3pxQixHQUFHa0csRUFBRSxDQUFDLENBQy9iLFNBQVN5MEIsR0FBRzM1QixFQUFFa0YsRUFBRTRNLEdBQUcsWUFBWTlSLEdBQUd3NUIsS0FBVVYsR0FBR2huQixHQUFSK21CLEdBQUczekIsR0FBVTAwQixZQUFZLG1CQUFtQkYsS0FBSyxhQUFhMTVCLEdBQUd3NUIsSUFBSSxDQUFDLFNBQVNLLEdBQUc3NUIsR0FBRyxHQUFHLG9CQUFvQkEsR0FBRyxVQUFVQSxHQUFHLFlBQVlBLEVBQUUsT0FBT2c1QixHQUFHRixHQUFHLENBQUMsU0FBU2dCLEdBQUc5NUIsRUFBRWtGLEdBQUcsR0FBRyxVQUFVbEYsRUFBRSxPQUFPZzVCLEdBQUc5ekIsRUFBRSxDQUFDLFNBQVM2MEIsR0FBRy81QixFQUFFa0YsR0FBRyxHQUFHLFVBQVVsRixHQUFHLFdBQVdBLEVBQUUsT0FBT2c1QixHQUFHOXpCLEVBQUUsQ0FBaUUsSUFBSTgwQixHQUFHLG1CQUFvQjVqRCxPQUFPb3lDLEdBQUdweUMsT0FBT295QyxHQUE1RyxTQUFZeG9CLEVBQUVrRixHQUFHLE9BQU9sRixJQUFJa0YsSUFBSSxJQUFJbEYsR0FBRyxFQUFFQSxHQUFJLEVBQUVrRixJQUFJbEYsR0FBSUEsR0FBR2tGLEdBQUlBLENBQUMsRUFDdFcsU0FBUyswQixHQUFHajZCLEVBQUVrRixHQUFHLEdBQUc4MEIsR0FBR2g2QixFQUFFa0YsR0FBRyxPQUFNLEVBQUcsR0FBRyxpQkFBa0JsRixHQUFHLE9BQU9BLEdBQUcsaUJBQWtCa0YsR0FBRyxPQUFPQSxFQUFFLE9BQU0sRUFBRyxJQUFJNE0sRUFBRTE3QixPQUFPNFosS0FBS2dRLEdBQUc5YSxFQUFFOU8sT0FBTzRaLEtBQUtrVixHQUFHLEdBQUc0TSxFQUFFcCtCLFNBQVN3UixFQUFFeFIsT0FBTyxPQUFNLEVBQUcsSUFBSXdSLEVBQUUsRUFBRUEsRUFBRTRzQixFQUFFcCtCLE9BQU93UixJQUFJLENBQUMsSUFBSXRQLEVBQUVrOEIsRUFBRTVzQixHQUFHLElBQUk2N0IsRUFBR3RrQyxLQUFLeW9CLEVBQUV0dkIsS0FBS29rRCxHQUFHaDZCLEVBQUVwcUIsR0FBR3N2QixFQUFFdHZCLElBQUksT0FBTSxDQUFFLENBQUMsT0FBTSxDQUFFLENBQUMsU0FBU3NrRCxHQUFHbDZCLEdBQUcsS0FBS0EsR0FBR0EsRUFBRWpzQixZQUFZaXNCLEVBQUVBLEVBQUVqc0IsV0FBVyxPQUFPaXNCLENBQUMsQ0FDdFUsU0FBU202QixHQUFHbjZCLEVBQUVrRixHQUFHLElBQXdCaGdCLEVBQXBCNHNCLEVBQUVvb0IsR0FBR2w2QixHQUFPLElBQUpBLEVBQUUsRUFBWThSLEdBQUcsQ0FBQyxHQUFHLElBQUlBLEVBQUVnVixTQUFTLENBQTBCLEdBQXpCNWhDLEVBQUU4YSxFQUFFOFIsRUFBRW9VLFlBQVl4eUMsT0FBVXNzQixHQUFHa0YsR0FBR2hnQixHQUFHZ2dCLEVBQUUsTUFBTSxDQUFDenRCLEtBQUtxNkIsRUFBRTEzQixPQUFPOHFCLEVBQUVsRixHQUFHQSxFQUFFOWEsQ0FBQyxDQUFDOGEsRUFBRSxDQUFDLEtBQUs4UixHQUFHLENBQUMsR0FBR0EsRUFBRWwrQixZQUFZLENBQUNrK0IsRUFBRUEsRUFBRWwrQixZQUFZLE1BQU1vc0IsQ0FBQyxDQUFDOFIsRUFBRUEsRUFBRWg4QixVQUFVLENBQUNnOEIsT0FBRSxDQUFNLENBQUNBLEVBQUVvb0IsR0FBR3BvQixFQUFFLENBQUMsQ0FBQyxTQUFTc29CLEdBQUdwNkIsRUFBRWtGLEdBQUcsU0FBT2xGLElBQUdrRixLQUFFbEYsSUFBSWtGLEtBQUtsRixHQUFHLElBQUlBLEVBQUU4bUIsWUFBWTVoQixHQUFHLElBQUlBLEVBQUU0aEIsU0FBU3NULEdBQUdwNkIsRUFBRWtGLEVBQUVwdkIsWUFBWSxhQUFha3FCLEVBQUVBLEVBQUVxNkIsU0FBU24xQixLQUFHbEYsRUFBRXM2Qiw0QkFBd0QsR0FBN0J0NkIsRUFBRXM2Qix3QkFBd0JwMUIsS0FBWSxDQUM5WixTQUFTcTFCLEtBQUssSUFBSSxJQUFJdjZCLEVBQUVwRixPQUFPc0ssRUFBRTJmLElBQUszZixhQUFhbEYsRUFBRXc2QixtQkFBbUIsQ0FBQyxJQUFJLElBQUkxb0IsRUFBRSxpQkFBa0I1TSxFQUFFdTFCLGNBQWNoakMsU0FBUzRoQixJQUFrQixDQUFiLE1BQU1uMEIsR0FBRzRzQixHQUFFLENBQUUsQ0FBQyxJQUFHQSxFQUF5QixNQUFNNU0sRUFBRTJmLEdBQS9CN2tCLEVBQUVrRixFQUFFdTFCLGVBQWdDMWxELFNBQVMsQ0FBQyxPQUFPbXdCLENBQUMsQ0FBQyxTQUFTdzFCLEdBQUcxNkIsR0FBRyxJQUFJa0YsRUFBRWxGLEdBQUdBLEVBQUVza0IsVUFBVXRrQixFQUFFc2tCLFNBQVNwaUMsY0FBYyxPQUFPZ2pCLElBQUksVUFBVUEsSUFBSSxTQUFTbEYsRUFBRXBvQixNQUFNLFdBQVdvb0IsRUFBRXBvQixNQUFNLFFBQVFvb0IsRUFBRXBvQixNQUFNLFFBQVFvb0IsRUFBRXBvQixNQUFNLGFBQWFvb0IsRUFBRXBvQixPQUFPLGFBQWFzdEIsR0FBRyxTQUFTbEYsRUFBRTI2QixnQkFBZ0IsQ0FDeGEsU0FBU0MsR0FBRzU2QixHQUFHLElBQUlrRixFQUFFcTFCLEtBQUt6b0IsRUFBRTlSLEVBQUU2NkIsWUFBWTMxQyxFQUFFOGEsRUFBRTg2QixlQUFlLEdBQUc1MUIsSUFBSTRNLEdBQUdBLEdBQUdBLEVBQUU5WCxlQUFlb2dDLEdBQUd0b0IsRUFBRTlYLGNBQWMrZ0MsZ0JBQWdCanBCLEdBQUcsQ0FBQyxHQUFHLE9BQU81c0IsR0FBR3cxQyxHQUFHNW9CLEdBQUcsR0FBRzVNLEVBQUVoZ0IsRUFBRTBjLFdBQWMsS0FBUjVCLEVBQUU5YSxFQUFFak8sT0FBaUIrb0IsRUFBRWtGLEdBQUcsbUJBQW1CNE0sRUFBRUEsRUFBRWtwQixlQUFlOTFCLEVBQUU0TSxFQUFFbXBCLGFBQWFobEQsS0FBSzJvQixJQUFJb0IsRUFBRThSLEVBQUV2N0IsTUFBTTdDLGFBQWEsSUFBR3NzQixHQUFHa0YsRUFBRTRNLEVBQUU5WCxlQUFlamxCLFdBQVdtd0IsRUFBRStFLGFBQWFyUCxRQUFTc2dDLGFBQWEsQ0FBQ2w3QixFQUFFQSxFQUFFazdCLGVBQWUsSUFBSXRsRCxFQUFFazhCLEVBQUVvVSxZQUFZeHlDLE9BQU91c0IsRUFBRWhxQixLQUFLMm9CLElBQUkxWixFQUFFMGMsTUFBTWhzQixHQUFHc1AsT0FBRSxJQUFTQSxFQUFFak8sSUFBSWdwQixFQUFFaHFCLEtBQUsyb0IsSUFBSTFaLEVBQUVqTyxJQUFJckIsSUFBSW9xQixFQUFFdVEsUUFBUXRRLEVBQUUvYSxJQUFJdFAsRUFBRXNQLEVBQUVBLEVBQUUrYSxFQUFFQSxFQUFFcnFCLEdBQUdBLEVBQUV1a0QsR0FBR3JvQixFQUFFN1IsR0FBRyxJQUFJeWUsRUFBRXliLEdBQUdyb0IsRUFDdmY1c0IsR0FBR3RQLEdBQUc4b0MsSUFBSSxJQUFJMWUsRUFBRW03QixZQUFZbjdCLEVBQUVvN0IsYUFBYXhsRCxFQUFFNkIsTUFBTXVvQixFQUFFcTdCLGVBQWV6bEQsRUFBRXdFLFFBQVE0bEIsRUFBRXM3QixZQUFZNWMsRUFBRWpuQyxNQUFNdW9CLEVBQUV1N0IsY0FBYzdjLEVBQUV0a0MsV0FBVThxQixFQUFFQSxFQUFFczJCLGVBQWdCQyxTQUFTN2xELEVBQUU2QixLQUFLN0IsRUFBRXdFLFFBQVE0bEIsRUFBRTA3QixrQkFBa0J6N0IsRUFBRS9hLEdBQUc4YSxFQUFFMjdCLFNBQVN6MkIsR0FBR2xGLEVBQUV1USxPQUFPbU8sRUFBRWpuQyxLQUFLaW5DLEVBQUV0a0MsVUFBVThxQixFQUFFMDJCLE9BQU9sZCxFQUFFam5DLEtBQUtpbkMsRUFBRXRrQyxRQUFRNGxCLEVBQUUyN0IsU0FBU3oyQixJQUFJLENBQU0sSUFBTEEsRUFBRSxHQUFPbEYsRUFBRThSLEVBQUU5UixFQUFFQSxFQUFFbHFCLFlBQVksSUFBSWtxQixFQUFFOG1CLFVBQVU1aEIsRUFBRWp4QixLQUFLLENBQUN3RixRQUFRdW1CLEVBQUU2N0IsS0FBSzc3QixFQUFFODdCLFdBQVdDLElBQUkvN0IsRUFBRWc4QixZQUFtRCxJQUF2QyxtQkFBb0JscUIsRUFBRXBxQixPQUFPb3FCLEVBQUVwcUIsUUFBWW9xQixFQUFFLEVBQUVBLEVBQUU1TSxFQUFFeHhCLE9BQU9vK0IsS0FBSTlSLEVBQUVrRixFQUFFNE0sSUFBS3I0QixRQUFRcWlELFdBQVc5N0IsRUFBRTY3QixLQUFLNzdCLEVBQUV2bUIsUUFBUXVpRCxVQUFVaDhCLEVBQUUrN0IsR0FBRyxDQUFDLENBQ3pmLElBQUlFLEdBQUduYixHQUFJLGlCQUFpQi9yQyxVQUFVLElBQUlBLFNBQVNnakQsYUFBYW1FLEdBQUcsS0FBS0MsR0FBRyxLQUFLQyxHQUFHLEtBQUtDLElBQUcsRUFDM0YsU0FBU0MsR0FBR3Q4QixFQUFFa0YsRUFBRTRNLEdBQUcsSUFBSTVzQixFQUFFNHNCLEVBQUVsWCxTQUFTa1gsRUFBRUEsRUFBRS84QixTQUFTLElBQUkrOEIsRUFBRWdWLFNBQVNoVixFQUFFQSxFQUFFOVgsY0FBY3FpQyxJQUFJLE1BQU1ILElBQUlBLEtBQUtyWCxFQUFHMy9CLEtBQXNDQSxFQUE1QixtQkFBTEEsRUFBRWczQyxLQUF5QnhCLEdBQUd4MUMsR0FBSyxDQUFDMGMsTUFBTTFjLEVBQUU4MUMsZUFBZS9qRCxJQUFJaU8sRUFBRSsxQyxjQUF5RixDQUFDRyxZQUEzRWwyQyxHQUFHQSxFQUFFOFUsZUFBZTlVLEVBQUU4VSxjQUFjaVEsYUFBYXJQLFFBQVFzZ0MsZ0JBQStCRSxXQUFXQyxhQUFhbjJDLEVBQUVtMkMsYUFBYUMsVUFBVXAyQyxFQUFFbzJDLFVBQVVDLFlBQVlyMkMsRUFBRXEyQyxhQUFjYSxJQUFJbkMsR0FBR21DLEdBQUdsM0MsS0FBS2szQyxHQUFHbDNDLEVBQXNCLEdBQXBCQSxFQUFFeXpDLEdBQUd3RCxHQUFHLGFBQWdCem9ELFNBQVN3eEIsRUFBRSxJQUFJMHRCLEdBQUcsV0FBVyxTQUFTLEtBQUsxdEIsRUFBRTRNLEdBQUc5UixFQUFFL3JCLEtBQUssQ0FBQ3VsQixNQUFNMEwsRUFBRTB6QixVQUFVMXpDLElBQUlnZ0IsRUFBRTlLLE9BQU84aEMsS0FBSyxDQUN0ZixTQUFTSyxHQUFHdjhCLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFLENBQUMsRUFBaUYsT0FBL0VBLEVBQUU5UixFQUFFOWQsZUFBZWdqQixFQUFFaGpCLGNBQWM0dkIsRUFBRSxTQUFTOVIsR0FBRyxTQUFTa0YsRUFBRTRNLEVBQUUsTUFBTTlSLEdBQUcsTUFBTWtGLEVBQVM0TSxDQUFDLENBQUMsSUFBSTBxQixHQUFHLENBQUNDLGFBQWFGLEdBQUcsWUFBWSxnQkFBZ0JHLG1CQUFtQkgsR0FBRyxZQUFZLHNCQUFzQkksZUFBZUosR0FBRyxZQUFZLGtCQUFrQkssY0FBY0wsR0FBRyxhQUFhLGtCQUFrQk0sR0FBRyxDQUFDLEVBQUVDLEdBQUcsQ0FBQyxFQUNwRixTQUFTQyxHQUFHLzhCLEdBQUcsR0FBRzY4QixHQUFHNzhCLEdBQUcsT0FBTzY4QixHQUFHNzhCLEdBQUcsSUFBSXc4QixHQUFHeDhCLEdBQUcsT0FBT0EsRUFBRSxJQUFZOFIsRUFBUjVNLEVBQUVzM0IsR0FBR3g4QixHQUFLLElBQUk4UixLQUFLNU0sRUFBRSxHQUFHQSxFQUFFdmYsZUFBZW1zQixJQUFJQSxLQUFLZ3JCLEdBQUcsT0FBT0QsR0FBRzc4QixHQUFHa0YsRUFBRTRNLEdBQUcsT0FBTzlSLENBQUMsQ0FBL1g4Z0IsSUFBS2djLEdBQUcvbkQsU0FBU0MsY0FBYyxPQUFPb2MsTUFBTSxtQkFBbUJ3SixnQkFBZ0I0aEMsR0FBR0MsYUFBYU8saUJBQWlCUixHQUFHRSxtQkFBbUJNLGlCQUFpQlIsR0FBR0csZUFBZUssV0FBVyxvQkFBb0JwaUMsZUFBZTRoQyxHQUFHSSxjQUFjam5DLFlBQXdKLElBQUlzbkMsR0FBR0YsR0FBRyxnQkFBZ0JHLEdBQUdILEdBQUcsc0JBQXNCSSxHQUFHSixHQUFHLGtCQUFrQkssR0FBR0wsR0FBRyxpQkFBaUJNLEdBQUcsSUFBSXpPLElBQUkwTyxHQUFHLHNtQkFBc21CcmdELE1BQU0sS0FDL2xDLFNBQVNzZ0QsR0FBR3Y5QixFQUFFa0YsR0FBR200QixHQUFHemhELElBQUlva0IsRUFBRWtGLEdBQUd5YixFQUFHemIsRUFBRSxDQUFDbEYsR0FBRyxDQUFDLElBQUksSUFBSXc5QixHQUFHLEVBQUVBLEdBQUdGLEdBQUc1cEQsT0FBTzhwRCxLQUFLLENBQUMsSUFBSUMsR0FBR0gsR0FBR0UsSUFBMkRELEdBQXBERSxHQUFHdjdDLGNBQXVELE1BQXRDdTdDLEdBQUcsR0FBR2wxQixjQUFjazFCLEdBQUd2bUQsTUFBTSxJQUFpQixDQUFDcW1ELEdBQUdOLEdBQUcsa0JBQWtCTSxHQUFHTCxHQUFHLHdCQUF3QkssR0FBR0osR0FBRyxvQkFBb0JJLEdBQUcsV0FBVyxpQkFBaUJBLEdBQUcsVUFBVSxXQUFXQSxHQUFHLFdBQVcsVUFBVUEsR0FBR0gsR0FBRyxtQkFBbUJ4YyxFQUFHLGVBQWUsQ0FBQyxXQUFXLGNBQWNBLEVBQUcsZUFBZSxDQUFDLFdBQVcsY0FBY0EsRUFBRyxpQkFBaUIsQ0FBQyxhQUFhLGdCQUM3Y0EsRUFBRyxpQkFBaUIsQ0FBQyxhQUFhLGdCQUFnQkQsRUFBRyxXQUFXLG9FQUFvRTFqQyxNQUFNLE1BQU0wakMsRUFBRyxXQUFXLHVGQUF1RjFqQyxNQUFNLE1BQU0wakMsRUFBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsV0FBVyxZQUFZLFVBQVVBLEVBQUcsbUJBQW1CLDJEQUEyRDFqQyxNQUFNLE1BQU0wakMsRUFBRyxxQkFBcUIsNkRBQTZEMWpDLE1BQU0sTUFDL2YwakMsRUFBRyxzQkFBc0IsOERBQThEMWpDLE1BQU0sTUFBTSxJQUFJeWdELEdBQUcsNk5BQTZOemdELE1BQU0sS0FBSzBnRCxHQUFHLElBQUk3MUIsSUFBSSwwQ0FBMEM3cUIsTUFBTSxLQUFLSyxPQUFPb2dELEtBQ3paLFNBQVNFLEdBQUc1OUIsRUFBRWtGLEVBQUU0TSxHQUFHLElBQUk1c0IsRUFBRThhLEVBQUVwb0IsTUFBTSxnQkFBZ0Jvb0IsRUFBRTB4QixjQUFjNWYsRUFsRGpFLFNBQVk5UixFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRXRQLEVBQUVxcUIsRUFBRXllLEVBQUU5L0IsRUFBRTFELEdBQTRCLEdBQXpCa3ZDLEdBQUdwdUIsTUFBTTNvQixLQUFLMG9CLFdBQWNndUIsR0FBRyxDQUFDLElBQUdBLEdBQWdDLE1BQU10OEIsTUFBTXFYLEVBQUUsTUFBMUMsSUFBSS9FLEVBQUVpcUIsR0FBR0QsSUFBRyxFQUFHQyxHQUFHLEtBQThCQyxLQUFLQSxJQUFHLEVBQUdDLEdBQUducUIsRUFBRSxDQUFDLENBa0RwRTg5QixDQUFHMzRDLEVBQUVnZ0IsT0FBRSxFQUFPbEYsR0FBR0EsRUFBRTB4QixjQUFjLElBQUksQ0FDeEcsU0FBU3FILEdBQUcvNEIsRUFBRWtGLEdBQUdBLEVBQUUsSUFBTyxFQUFGQSxHQUFLLElBQUksSUFBSTRNLEVBQUUsRUFBRUEsRUFBRTlSLEVBQUV0c0IsT0FBT28rQixJQUFJLENBQUMsSUFBSTVzQixFQUFFOGEsRUFBRThSLEdBQUdsOEIsRUFBRXNQLEVBQUVzVSxNQUFNdFUsRUFBRUEsRUFBRTB6QyxVQUFVNTRCLEVBQUUsQ0FBQyxJQUFJQyxPQUFFLEVBQU8sR0FBR2lGLEVBQUUsSUFBSSxJQUFJd1osRUFBRXg1QixFQUFFeFIsT0FBTyxFQUFFLEdBQUdnckMsRUFBRUEsSUFBSSxDQUFDLElBQUk5L0IsRUFBRXNHLEVBQUV3NUIsR0FBR3hqQyxFQUFFMEQsRUFBRTB4QixTQUFTdlEsRUFBRW5oQixFQUFFOHlDLGNBQTJCLEdBQWI5eUMsRUFBRUEsRUFBRWd6QixTQUFZMTJCLElBQUkra0IsR0FBR3JxQixFQUFFazhDLHVCQUF1QixNQUFNOXhCLEVBQUU0OUIsR0FBR2hvRCxFQUFFZ0osRUFBRW1oQixHQUFHRSxFQUFFL2tCLENBQUMsTUFBTSxJQUFJd2pDLEVBQUUsRUFBRUEsRUFBRXg1QixFQUFFeFIsT0FBT2dyQyxJQUFJLENBQW9ELEdBQTVDeGpDLEdBQVAwRCxFQUFFc0csRUFBRXc1QixJQUFPcE8sU0FBU3ZRLEVBQUVuaEIsRUFBRTh5QyxjQUFjOXlDLEVBQUVBLEVBQUVnekIsU0FBWTEyQixJQUFJK2tCLEdBQUdycUIsRUFBRWs4Qyx1QkFBdUIsTUFBTTl4QixFQUFFNDlCLEdBQUdob0QsRUFBRWdKLEVBQUVtaEIsR0FBR0UsRUFBRS9rQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcrdUMsR0FBRyxNQUFNanFCLEVBQUVrcUIsR0FBR0QsSUFBRyxFQUFHQyxHQUFHLEtBQUtscUIsQ0FBRSxDQUM1YSxTQUFTODlCLEdBQUU5OUIsRUFBRWtGLEdBQUcsSUFBSTRNLEVBQUU1TSxFQUFFNjRCLFNBQUksSUFBU2pzQixJQUFJQSxFQUFFNU0sRUFBRTY0QixJQUFJLElBQUlqMkIsS0FBSyxJQUFJNWlCLEVBQUU4YSxFQUFFLFdBQVc4UixFQUFFeHNCLElBQUlKLEtBQUs4NEMsR0FBRzk0QixFQUFFbEYsRUFBRSxHQUFFLEdBQUk4UixFQUFFK08sSUFBSTM3QixHQUFHLENBQUMsU0FBUys0QyxHQUFHaitCLEVBQUVrRixFQUFFNE0sR0FBRyxJQUFJNXNCLEVBQUUsRUFBRWdnQixJQUFJaGdCLEdBQUcsR0FBRzg0QyxHQUFHbHNCLEVBQUU5UixFQUFFOWEsRUFBRWdnQixFQUFFLENBQUMsSUFBSWc1QixHQUFHLGtCQUFrQmpvRCxLQUFLa29ELFNBQVNyL0MsU0FBUyxJQUFJNUgsTUFBTSxHQUFHLFNBQVNrbkQsR0FBR3ArQixHQUFHLElBQUlBLEVBQUVrK0IsSUFBSSxDQUFDbCtCLEVBQUVrK0IsS0FBSSxFQUFHemQsRUFBRzdyQyxTQUFRLFNBQVNzd0IsR0FBRyxvQkFBb0JBLElBQUl5NEIsR0FBR3I0QyxJQUFJNGYsSUFBSSs0QixHQUFHLzRCLEdBQUUsRUFBR2xGLEdBQUdpK0IsR0FBRy80QixHQUFFLEVBQUdsRixHQUFHLElBQUcsSUFBSWtGLEVBQUUsSUFBSWxGLEVBQUU4bUIsU0FBUzltQixFQUFFQSxFQUFFaEcsY0FBYyxPQUFPa0wsR0FBR0EsRUFBRWc1QixNQUFNaDVCLEVBQUVnNUIsS0FBSSxFQUFHRCxHQUFHLG1CQUFrQixFQUFHLzRCLEdBQUcsQ0FBQyxDQUNqYixTQUFTODRCLEdBQUdoK0IsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUcsT0FBTzRyQyxHQUFHNXJCLElBQUksS0FBSyxFQUFFLElBQUl0dkIsRUFBRTQ2QyxHQUFHLE1BQU0sS0FBSyxFQUFFNTZDLEVBQUU4NkMsR0FBRyxNQUFNLFFBQVE5NkMsRUFBRTY2QyxHQUFHM2UsRUFBRWw4QixFQUFFbTZCLEtBQUssS0FBSzdLLEVBQUU0TSxFQUFFOVIsR0FBR3BxQixPQUFFLEdBQVErekMsSUFBSSxlQUFlemtCLEdBQUcsY0FBY0EsR0FBRyxVQUFVQSxJQUFJdHZCLEdBQUUsR0FBSXNQLE9BQUUsSUFBU3RQLEVBQUVvcUIsRUFBRS9GLGlCQUFpQmlMLEVBQUU0TSxFQUFFLENBQUN1c0IsU0FBUSxFQUFHQyxRQUFRMW9ELElBQUlvcUIsRUFBRS9GLGlCQUFpQmlMLEVBQUU0TSxHQUFFLFFBQUksSUFBU2w4QixFQUFFb3FCLEVBQUUvRixpQkFBaUJpTCxFQUFFNE0sRUFBRSxDQUFDd3NCLFFBQVExb0QsSUFBSW9xQixFQUFFL0YsaUJBQWlCaUwsRUFBRTRNLEdBQUUsRUFBRyxDQUNsVixTQUFTNmUsR0FBRzN3QixFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRXRQLEdBQUcsSUFBSXFxQixFQUFFL2EsRUFBRSxHQUFHLElBQU8sRUFBRmdnQixJQUFNLElBQU8sRUFBRkEsSUFBTSxPQUFPaGdCLEVBQUU4YSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU85YSxFQUFFLE9BQU8sSUFBSXc1QixFQUFFeDVCLEVBQUUzUixJQUFJLEdBQUcsSUFBSW1yQyxHQUFHLElBQUlBLEVBQUUsQ0FBQyxJQUFJOS9CLEVBQUVzRyxFQUFFZ2tDLFVBQVUyRyxjQUFjLEdBQUdqeEMsSUFBSWhKLEdBQUcsSUFBSWdKLEVBQUVrb0MsVUFBVWxvQyxFQUFFOUksYUFBYUYsRUFBRSxNQUFNLEdBQUcsSUFBSThvQyxFQUFFLElBQUlBLEVBQUV4NUIsRUFBRW5OLE9BQU8sT0FBTzJtQyxHQUFHLENBQUMsSUFBSXhqQyxFQUFFd2pDLEVBQUVuckMsSUFBSSxJQUFHLElBQUkySCxHQUFHLElBQUlBLE1BQUtBLEVBQUV3akMsRUFBRXdLLFVBQVUyRyxpQkFBa0JqNkMsR0FBRyxJQUFJc0YsRUFBRTRyQyxVQUFVNXJDLEVBQUVwRixhQUFhRixHQUFFLE9BQU84b0MsRUFBRUEsRUFBRTNtQyxNQUFNLENBQUMsS0FBSyxPQUFPNkcsR0FBRyxDQUFTLEdBQUcsUUFBWDgvQixFQUFFZ1IsR0FBRzl3QyxJQUFlLE9BQWUsR0FBRyxLQUFYMUQsRUFBRXdqQyxFQUFFbnJDLE1BQWMsSUFBSTJILEVBQUUsQ0FBQ2dLLEVBQUUrYSxFQUFFeWUsRUFBRSxTQUFTMWUsQ0FBQyxDQUFDcGhCLEVBQUVBLEVBQUU5SSxVQUFVLENBQUMsQ0FBQ29QLEVBQUVBLEVBQUVuTixNQUFNLENBQUMweEMsSUFBRyxXQUFXLElBQUl2a0MsRUFBRSthLEVBQUVycUIsRUFBRTh5QyxHQUFHNVcsR0FBRzRNLEVBQUUsR0FDcGYxZSxFQUFFLENBQUMsSUFBSXBoQixFQUFFeStDLEdBQUcxaEQsSUFBSXFrQixHQUFHLFFBQUcsSUFBU3BoQixFQUFFLENBQUMsSUFBSTFELEVBQUUwM0MsR0FBR3p6QixFQUFFYSxFQUFFLE9BQU9BLEdBQUcsSUFBSyxXQUFXLEdBQUcsSUFBSWt4QixHQUFHcGYsR0FBRyxNQUFNOVIsRUFBRSxJQUFLLFVBQVUsSUFBSyxRQUFROWtCLEVBQUVtN0MsR0FBRyxNQUFNLElBQUssVUFBVWwzQixFQUFFLFFBQVFqa0IsRUFBRWs1QyxHQUFHLE1BQU0sSUFBSyxXQUFXajFCLEVBQUUsT0FBT2prQixFQUFFazVDLEdBQUcsTUFBTSxJQUFLLGFBQWEsSUFBSyxZQUFZbDVDLEVBQUVrNUMsR0FBRyxNQUFNLElBQUssUUFBUSxHQUFHLElBQUl0aUIsRUFBRXJuQixPQUFPLE1BQU11VixFQUFFLElBQUssV0FBVyxJQUFLLFdBQVcsSUFBSyxZQUFZLElBQUssWUFBWSxJQUFLLFVBQVUsSUFBSyxXQUFXLElBQUssWUFBWSxJQUFLLGNBQWM5a0IsRUFBRSs0QyxHQUFHLE1BQU0sSUFBSyxPQUFPLElBQUssVUFBVSxJQUFLLFlBQVksSUFBSyxXQUFXLElBQUssWUFBWSxJQUFLLFdBQVcsSUFBSyxZQUFZLElBQUssT0FBTy80QyxFQUMxaUJnNUMsR0FBRyxNQUFNLElBQUssY0FBYyxJQUFLLFdBQVcsSUFBSyxZQUFZLElBQUssYUFBYWg1QyxFQUFFNDdDLEdBQUcsTUFBTSxLQUFLbUcsR0FBRyxLQUFLQyxHQUFHLEtBQUtDLEdBQUdqaUQsRUFBRW01QyxHQUFHLE1BQU0sS0FBSytJLEdBQUdsaUQsRUFBRWc4QyxHQUFHLE1BQU0sSUFBSyxTQUFTaDhDLEVBQUU4M0MsR0FBRyxNQUFNLElBQUssUUFBUTkzQyxFQUFFeThDLEdBQUcsTUFBTSxJQUFLLE9BQU8sSUFBSyxNQUFNLElBQUssUUFBUXo4QyxFQUFFeTVDLEdBQUcsTUFBTSxJQUFLLG9CQUFvQixJQUFLLHFCQUFxQixJQUFLLGdCQUFnQixJQUFLLGNBQWMsSUFBSyxjQUFjLElBQUssYUFBYSxJQUFLLGNBQWMsSUFBSyxZQUFZejVDLEVBQUVvN0MsR0FBRyxJQUFJdHhCLEVBQUUsSUFBTyxFQUFGRSxHQUFLcTVCLEdBQUd2NUIsR0FBRyxXQUFXaEYsRUFBRTdrQixFQUFFNnBCLEVBQUUsT0FBT3BtQixFQUFFQSxFQUFFLFVBQVUsS0FBS0EsRUFBRW9tQixFQUFFLEdBQUcsSUFBSSxJQUFRNFosRUFBSjFpQixFQUFFaFgsRUFBSSxPQUMvZWdYLEdBQUcsQ0FBSyxJQUFJc2lDLEdBQVI1ZixFQUFFMWlCLEdBQVVndEIsVUFBc0YsR0FBNUUsSUFBSXRLLEVBQUVyckMsS0FBSyxPQUFPaXJELElBQUk1ZixFQUFFNGYsRUFBRSxPQUFPcmpELEdBQWMsT0FBVnFqRCxFQUFFOVUsR0FBR3h0QixFQUFFL2dCLEtBQVk2cEIsRUFBRS93QixLQUFLd3FELEdBQUd2aUMsRUFBRXNpQyxFQUFFNWYsS0FBUzJmLEVBQUUsTUFBTXJpQyxFQUFFQSxFQUFFbmtCLE1BQU0sQ0FBQyxFQUFFaXRCLEVBQUV0eEIsU0FBU2tMLEVBQUUsSUFBSTFELEVBQUUwRCxFQUFFdWdCLEVBQUUsS0FBSzJTLEVBQUVsOEIsR0FBRzhvQyxFQUFFenFDLEtBQUssQ0FBQ3VsQixNQUFNNWEsRUFBRWc2QyxVQUFVNXpCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBTyxFQUFGRSxHQUFLLENBQTRFLEdBQW5DaHFCLEVBQUUsYUFBYThrQixHQUFHLGVBQWVBLEtBQXRFcGhCLEVBQUUsY0FBY29oQixHQUFHLGdCQUFnQkEsSUFBMkM4UixJQUFJMlcsTUFBS3RwQixFQUFFMlMsRUFBRThoQixlQUFlOWhCLEVBQUUraEIsZUFBZW5FLEdBQUd2d0IsS0FBSUEsRUFBRXUvQixPQUFnQnhqRCxHQUFHMEQsS0FBR0EsRUFBRWhKLEVBQUVnbEIsU0FBU2hsQixFQUFFQSxHQUFHZ0osRUFBRWhKLEVBQUVva0IsZUFBZXBiLEVBQUVxckIsYUFBYXJyQixFQUFFKy9DLGFBQWEvakMsT0FBVTFmLEdBQXFDQSxFQUFFZ0ssRUFBaUIsUUFBZmlhLEdBQW5DQSxFQUFFMlMsRUFBRThoQixlQUFlOWhCLEVBQUVnaUIsV0FBa0JwRSxHQUFHdndCLEdBQUcsUUFDOWRBLEtBQVJvL0IsRUFBRWxVLEdBQUdsckIsS0FBVSxJQUFJQSxFQUFFNXJCLEtBQUssSUFBSTRyQixFQUFFNXJCLE9BQUs0ckIsRUFBRSxRQUFVamtCLEVBQUUsS0FBS2lrQixFQUFFamEsR0FBS2hLLElBQUlpa0IsR0FBRSxDQUFnVSxHQUEvVDZGLEVBQUVpdkIsR0FBR3VLLEVBQUUsZUFBZXJqRCxFQUFFLGVBQWUrZ0IsRUFBRSxRQUFXLGVBQWU4RCxHQUFHLGdCQUFnQkEsSUFBRWdGLEVBQUVzeEIsR0FBR2tJLEVBQUUsaUJBQWlCcmpELEVBQUUsaUJBQWlCK2dCLEVBQUUsV0FBVXFpQyxFQUFFLE1BQU1yakQsRUFBRTBELEVBQUVxNkMsR0FBRy85QyxHQUFHMGpDLEVBQUUsTUFBTXpmLEVBQUV2Z0IsRUFBRXE2QyxHQUFHOTVCLElBQUd2Z0IsRUFBRSxJQUFJb21CLEVBQUV3NUIsRUFBRXRpQyxFQUFFLFFBQVFoaEIsRUFBRTQyQixFQUFFbDhCLElBQUt3a0IsT0FBT21rQyxFQUFFMy9DLEVBQUVnMUMsY0FBY2hWLEVBQUU0ZixFQUFFLEtBQUs5TyxHQUFHOTVDLEtBQUtzUCxLQUFJOGYsRUFBRSxJQUFJQSxFQUFFN3BCLEVBQUUrZ0IsRUFBRSxRQUFRaUQsRUFBRTJTLEVBQUVsOEIsSUFBS3drQixPQUFPd2tCLEVBQUU1WixFQUFFNHVCLGNBQWMySyxFQUFFQyxFQUFFeDVCLEdBQUd1NUIsRUFBRUMsRUFBS3RqRCxHQUFHaWtCLEVBQUUrRixFQUFFLENBQWEsSUFBUi9wQixFQUFFZ2tCLEVBQUVqRCxFQUFFLEVBQU0waUIsRUFBaEI1WixFQUFFOXBCLEVBQWtCMGpDLEVBQUVBLEVBQUVnZ0IsR0FBR2hnQixHQUFHMWlCLElBQVEsSUFBSjBpQixFQUFFLEVBQU00ZixFQUFFcmpELEVBQUVxakQsRUFBRUEsRUFBRUksR0FBR0osR0FBRzVmLElBQUksS0FBSyxFQUFFMWlCLEVBQUUwaUIsR0FBRzVaLEVBQUU0NUIsR0FBRzU1QixHQUFHOUksSUFBSSxLQUFLLEVBQUUwaUIsRUFBRTFpQixHQUFHL2dCLEVBQ3BmeWpELEdBQUd6akQsR0FBR3lqQyxJQUFJLEtBQUsxaUIsS0FBSyxDQUFDLEdBQUc4SSxJQUFJN3BCLEdBQUcsT0FBT0EsR0FBRzZwQixJQUFJN3BCLEVBQUVtdkMsVUFBVSxNQUFNcGxCLEVBQUVGLEVBQUU0NUIsR0FBRzU1QixHQUFHN3BCLEVBQUV5akQsR0FBR3pqRCxFQUFFLENBQUM2cEIsRUFBRSxJQUFJLE1BQU1BLEVBQUUsS0FBSyxPQUFPOXBCLEdBQUcyakQsR0FBR25nQixFQUFFOS9CLEVBQUUxRCxFQUFFOHBCLEdBQUUsR0FBSSxPQUFPN0YsR0FBRyxPQUFPby9CLEdBQUdNLEdBQUduZ0IsRUFBRTZmLEVBQUVwL0IsRUFBRTZGLEdBQUUsRUFBRyxDQUE4RCxHQUFHLFlBQTFDOXBCLEdBQWpCMEQsRUFBRXNHLEVBQUUrekMsR0FBRy96QyxHQUFHMFYsUUFBVzBwQixVQUFVMWxDLEVBQUUwbEMsU0FBU3BpQyxnQkFBK0IsVUFBVWhILEdBQUcsU0FBUzBELEVBQUVoSCxLQUFLLElBQUlrbkQsRUFBRzVGLFFBQVEsR0FBR1QsR0FBRzc1QyxHQUFHLEdBQUd1NkMsR0FBRzJGLEVBQUcvRSxPQUFPLENBQUMrRSxFQUFHakYsR0FBRyxJQUFJa0YsRUFBR3BGLEVBQUUsTUFBTXorQyxFQUFFMEQsRUFBRTBsQyxXQUFXLFVBQVVwcEMsRUFBRWdILGdCQUFnQixhQUFhdEQsRUFBRWhILE1BQU0sVUFBVWdILEVBQUVoSCxRQUFRa25ELEVBQUdoRixJQUNyVixPQUQ0VmdGLElBQUtBLEVBQUdBLEVBQUc5K0IsRUFBRTlhLElBQUt3ekMsR0FBR2hhLEVBQUVvZ0IsRUFBR2h0QixFQUFFbDhCLElBQVdtcEQsR0FBSUEsRUFBRy8rQixFQUFFcGhCLEVBQUVzRyxHQUFHLGFBQWE4YSxJQUFJKytCLEVBQUduZ0QsRUFBRXNtQyxnQkFDbGY2WixFQUFHN21DLFlBQVksV0FBV3RaLEVBQUVoSCxNQUFNNHRDLEdBQUc1bUMsRUFBRSxTQUFTQSxFQUFFckksUUFBT3dvRCxFQUFHNzVDLEVBQUUrekMsR0FBRy96QyxHQUFHMFYsT0FBY29GLEdBQUcsSUFBSyxXQUFheTRCLEdBQUdzRyxJQUFLLFNBQVNBLEVBQUdwRSxtQkFBZ0J1QixHQUFHNkMsRUFBRzVDLEdBQUdqM0MsRUFBRWszQyxHQUFHLE1BQUssTUFBTSxJQUFLLFdBQVdBLEdBQUdELEdBQUdELEdBQUcsS0FBSyxNQUFNLElBQUssWUFBWUcsSUFBRyxFQUFHLE1BQU0sSUFBSyxjQUFjLElBQUssVUFBVSxJQUFLLFVBQVVBLElBQUcsRUFBR0MsR0FBRzVkLEVBQUU1TSxFQUFFbDhCLEdBQUcsTUFBTSxJQUFLLGtCQUFrQixHQUFHcW1ELEdBQUcsTUFBTSxJQUFLLFVBQVUsSUFBSyxRQUFRSyxHQUFHNWQsRUFBRTVNLEVBQUVsOEIsR0FBRyxJQUFJb3BELEVBQUcsR0FBR25ILEdBQUczeUIsRUFBRSxDQUFDLE9BQU9sRixHQUFHLElBQUssbUJBQW1CLElBQUlpL0IsRUFBRyxxQkFBcUIsTUFBTS81QixFQUFFLElBQUssaUJBQWlCKzVCLEVBQUcsbUJBQ3BlLE1BQU0vNUIsRUFBRSxJQUFLLG9CQUFvQis1QixFQUFHLHNCQUFzQixNQUFNLzVCLEVBQUUrNUIsT0FBRyxDQUFNLE1BQU0zRyxHQUFHRixHQUFHcDRCLEVBQUU4UixLQUFLbXRCLEVBQUcsb0JBQW9CLFlBQVlqL0IsR0FBRyxNQUFNOFIsRUFBRXFmLFVBQVU4TixFQUFHLHNCQUFzQkEsSUFBS2hILElBQUksT0FBT25tQixFQUFFcWtCLFNBQVNtQyxJQUFJLHVCQUF1QjJHLEVBQUcscUJBQXFCQSxHQUFJM0csS0FBSzBHLEVBQUcvTixPQUFZRCxHQUFHLFVBQVJELEdBQUduN0MsR0FBa0JtN0MsR0FBR3g2QyxNQUFNdzZDLEdBQUc3SyxZQUFZb1MsSUFBRyxJQUFpQixHQUFaeUcsRUFBR3BHLEdBQUd6ekMsRUFBRSs1QyxJQUFTdnJELFNBQVN1ckQsRUFBRyxJQUFJckssR0FBR3FLLEVBQUdqL0IsRUFBRSxLQUFLOFIsRUFBRWw4QixHQUFHOG9DLEVBQUV6cUMsS0FBSyxDQUFDdWxCLE1BQU15bEMsRUFBR3JHLFVBQVVtRyxLQUFLQyxHQUF3QixRQUFUQSxFQUFHM0csR0FBR3ZtQixPQUFsQm10QixFQUFHOXlCLEtBQUs2eUIsTUFBMkNBLEVBQUdoSCxHQTVCaE0sU0FBWWg0QixFQUFFa0YsR0FBRyxPQUFPbEYsR0FBRyxJQUFLLGlCQUFpQixPQUFPcTRCLEdBQUduekIsR0FBRyxJQUFLLFdBQVcsT0FBRyxLQUFLQSxFQUFFa3hCLE1BQWEsTUFBSytCLElBQUcsRUFBVUQsSUFBRyxJQUFLLFlBQVksT0FBT2w0QixFQUFFa0YsRUFBRWlILFFBQVMrckIsSUFBSUMsR0FBRyxLQUFLbjRCLEVBQUUsUUFBUSxPQUFPLEtBQUssQ0E0QkVrL0IsQ0FBR2wvQixFQUFFOFIsR0EzQnpkLFNBQVk5UixFQUFFa0YsR0FBRyxHQUFHb3pCLEdBQUcsTUFBTSxtQkFBbUJ0NEIsSUFBSTYzQixJQUFJTyxHQUFHcDRCLEVBQUVrRixJQUFJbEYsRUFBRWl4QixLQUFLaDBCLEdBQUcrekIsR0FBR0QsR0FBRyxLQUFLdUgsSUFBRyxFQUFHdDRCLEdBQUcsS0FBSyxPQUFPQSxHQUFHLElBQUssUUFBZ1EsUUFBUSxPQUFPLEtBQTNQLElBQUssV0FBVyxLQUFLa0YsRUFBRXZMLFNBQVN1TCxFQUFFeEwsUUFBUXdMLEVBQUV6TCxVQUFVeUwsRUFBRXZMLFNBQVN1TCxFQUFFeEwsT0FBTyxDQUFDLEdBQUd3TCxFQUFFaTZCLE1BQU0sRUFBRWo2QixFQUFFaTZCLEtBQUt6ckQsT0FBTyxPQUFPd3hCLEVBQUVpNkIsS0FBSyxHQUFHajZCLEVBQUVreEIsTUFBTSxPQUFPbGdELE9BQU9DLGFBQWErdUIsRUFBRWt4QixNQUFNLENBQUMsT0FBTyxLQUFLLElBQUssaUJBQWlCLE9BQU82QixJQUFJLE9BQU8veUIsRUFBRWl4QixPQUFPLEtBQUtqeEIsRUFBRWlILEtBQXlCLENBMkJxRml6QixDQUFHcC9CLEVBQUU4UixLQUNqZSxHQURvZTVzQixFQUFFeXpDLEdBQUd6ekMsRUFBRSxrQkFDdmV4UixTQUFTa0MsRUFBRSxJQUFJZy9DLEdBQUcsZ0JBQWdCLGNBQWMsS0FBSzlpQixFQUFFbDhCLEdBQUc4b0MsRUFBRXpxQyxLQUFLLENBQUN1bEIsTUFBTTVqQixFQUFFZ2pELFVBQVUxekMsSUFBSXRQLEVBQUV1MkIsS0FBSzZ5QixFQUFHLENBQUNqRyxHQUFHcmEsRUFBRXhaLEVBQUUsR0FBRSxDQUFDLFNBQVN1NUIsR0FBR3orQixFQUFFa0YsRUFBRTRNLEdBQUcsTUFBTSxDQUFDeEIsU0FBU3RRLEVBQUU0UixTQUFTMU0sRUFBRXdzQixjQUFjNWYsRUFBRSxDQUFDLFNBQVM2bUIsR0FBRzM0QixFQUFFa0YsR0FBRyxJQUFJLElBQUk0TSxFQUFFNU0sRUFBRSxVQUFVaGdCLEVBQUUsR0FBRyxPQUFPOGEsR0FBRyxDQUFDLElBQUlwcUIsRUFBRW9xQixFQUFFQyxFQUFFcnFCLEVBQUVzekMsVUFBVSxJQUFJdHpDLEVBQUVyQyxLQUFLLE9BQU8wc0IsSUFBSXJxQixFQUFFcXFCLEVBQVksT0FBVkEsRUFBRXlwQixHQUFHMXBCLEVBQUU4UixLQUFZNXNCLEVBQUUrdEIsUUFBUXdyQixHQUFHeitCLEVBQUVDLEVBQUVycUIsSUFBYyxPQUFWcXFCLEVBQUV5cEIsR0FBRzFwQixFQUFFa0YsS0FBWWhnQixFQUFFalIsS0FBS3dxRCxHQUFHeitCLEVBQUVDLEVBQUVycUIsS0FBS29xQixFQUFFQSxFQUFFam9CLE1BQU0sQ0FBQyxPQUFPbU4sQ0FBQyxDQUFDLFNBQVMwNUMsR0FBRzUrQixHQUFHLEdBQUcsT0FBT0EsRUFBRSxPQUFPLEtBQUssR0FBR0EsRUFBRUEsRUFBRWpvQixhQUFhaW9CLEdBQUcsSUFBSUEsRUFBRXpzQixLQUFLLE9BQU95c0IsR0FBSSxJQUFJLENBQ25kLFNBQVM2K0IsR0FBRzcrQixFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRXRQLEdBQUcsSUFBSSxJQUFJcXFCLEVBQUVpRixFQUFFc3NCLFdBQVc5UyxFQUFFLEdBQUcsT0FBTzVNLEdBQUdBLElBQUk1c0IsR0FBRyxDQUFDLElBQUl0RyxFQUFFa3pCLEVBQUU1MkIsRUFBRTBELEVBQUUwckMsVUFBVXZxQixFQUFFbmhCLEVBQUVzcUMsVUFBVSxHQUFHLE9BQU9odUMsR0FBR0EsSUFBSWdLLEVBQUUsTUFBTSxJQUFJdEcsRUFBRXJMLEtBQUssT0FBT3dzQixJQUFJbmhCLEVBQUVtaEIsRUFBRW5xQixFQUFhLE9BQVZzRixFQUFFd3VDLEdBQUc1WCxFQUFFN1IsS0FBWXllLEVBQUV6TCxRQUFRd3JCLEdBQUczc0IsRUFBRTUyQixFQUFFMEQsSUFBS2hKLEdBQWMsT0FBVnNGLEVBQUV3dUMsR0FBRzVYLEVBQUU3UixLQUFZeWUsRUFBRXpxQyxLQUFLd3FELEdBQUczc0IsRUFBRTUyQixFQUFFMEQsS0FBTWt6QixFQUFFQSxFQUFFLzVCLE1BQU0sQ0FBQyxJQUFJMm1DLEVBQUVockMsUUFBUXNzQixFQUFFL3JCLEtBQUssQ0FBQ3VsQixNQUFNMEwsRUFBRTB6QixVQUFVbGEsR0FBRyxDQUFDLElBQUkyZ0IsR0FBRyxTQUFTQyxHQUFHLGlCQUFpQixTQUFTQyxHQUFHdi9CLEdBQUcsT0FBTyxpQkFBa0JBLEVBQUVBLEVBQUUsR0FBR0EsR0FBR3hwQixRQUFRNm9ELEdBQUcsTUFBTTdvRCxRQUFROG9ELEdBQUcsR0FBRyxDQUFDLFNBQVNFLEdBQUd4L0IsRUFBRWtGLEVBQUU0TSxHQUFXLEdBQVI1TSxFQUFFcTZCLEdBQUdyNkIsR0FBTXE2QixHQUFHdi9CLEtBQUtrRixHQUFHNE0sRUFBRSxNQUFNcmtCLE1BQU1xWCxFQUFFLEtBQU0sQ0FBQyxTQUFTMjZCLEtBQUssQ0FDOWUsSUFBSUMsR0FBRyxLQUFLQyxHQUFHLEtBQUssU0FBU0MsR0FBRzUvQixFQUFFa0YsR0FBRyxNQUFNLGFBQWFsRixHQUFHLGFBQWFBLEdBQUcsaUJBQWtCa0YsRUFBRXB0QixVQUFVLGlCQUFrQm90QixFQUFFcHRCLFVBQVUsaUJBQWtCb3RCLEVBQUU0Z0IseUJBQXlCLE9BQU81Z0IsRUFBRTRnQix5QkFBeUIsTUFBTTVnQixFQUFFNGdCLHdCQUF3QitaLE1BQU0sQ0FDNVAsSUFBSUMsR0FBRyxtQkFBb0JobEMsV0FBV0EsZ0JBQVcsRUFBT2lsQyxHQUFHLG1CQUFvQmxsQyxhQUFhQSxrQkFBYSxFQUFPbWxDLEdBQUcsbUJBQW9CbDBCLFFBQVFBLGFBQVEsRUFBT20wQixHQUFHLG1CQUFvQkMsZUFBZUEsb0JBQWUsSUFBcUJGLEdBQUcsU0FBU2hnQyxHQUFHLE9BQU9nZ0MsR0FBR2owQixRQUFRLE1BQU11RixLQUFLdFIsR0FBR21nQyxNQUFNQyxHQUFHLEVBQUVOLEdBQUcsU0FBU00sR0FBR3BnQyxHQUFHbEYsWUFBVyxXQUFXLE1BQU1rRixDQUFFLEdBQUUsQ0FDcFYsU0FBU3FnQyxHQUFHcmdDLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFNU0sRUFBRWhnQixFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUl0UCxFQUFFazhCLEVBQUVsK0IsWUFBNkIsR0FBakJvc0IsRUFBRWpxQixZQUFZKzdCLEdBQU1sOEIsR0FBRyxJQUFJQSxFQUFFa3hDLFNBQVMsR0FBWSxRQUFUaFYsRUFBRWw4QixFQUFFdTJCLE1BQWMsQ0FBQyxHQUFHLElBQUlqbkIsRUFBMEIsT0FBdkI4YSxFQUFFanFCLFlBQVlILFFBQUd3NkMsR0FBR2xyQixHQUFVaGdCLEdBQUcsS0FBSyxNQUFNNHNCLEdBQUcsT0FBT0EsR0FBRyxPQUFPQSxHQUFHNXNCLElBQUk0c0IsRUFBRWw4QixDQUFDLE9BQU9rOEIsR0FBR3NlLEdBQUdsckIsRUFBRSxDQUFDLFNBQVNvN0IsR0FBR3RnQyxHQUFHLEtBQUssTUFBTUEsRUFBRUEsRUFBRUEsRUFBRXBzQixZQUFZLENBQUMsSUFBSXN4QixFQUFFbEYsRUFBRThtQixTQUFTLEdBQUcsSUFBSTVoQixHQUFHLElBQUlBLEVBQUUsTUFBTSxHQUFHLElBQUlBLEVBQUUsQ0FBVSxHQUFHLE9BQVpBLEVBQUVsRixFQUFFbU0sT0FBaUIsT0FBT2pILEdBQUcsT0FBT0EsRUFBRSxNQUFNLEdBQUcsT0FBT0EsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU9sRixDQUFDLENBQ2pZLFNBQVN1Z0MsR0FBR3ZnQyxHQUFHQSxFQUFFQSxFQUFFd2dDLGdCQUFnQixJQUFJLElBQUl0N0IsRUFBRSxFQUFFbEYsR0FBRyxDQUFDLEdBQUcsSUFBSUEsRUFBRThtQixTQUFTLENBQUMsSUFBSWhWLEVBQUU5UixFQUFFbU0sS0FBSyxHQUFHLE1BQU0yRixHQUFHLE9BQU9BLEdBQUcsT0FBT0EsRUFBRSxDQUFDLEdBQUcsSUFBSTVNLEVBQUUsT0FBT2xGLEVBQUVrRixHQUFHLEtBQUssT0FBTzRNLEdBQUc1TSxHQUFHLENBQUNsRixFQUFFQSxFQUFFd2dDLGVBQWUsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJQyxHQUFHeHFELEtBQUtrb0QsU0FBU3IvQyxTQUFTLElBQUk1SCxNQUFNLEdBQUd3cEQsR0FBRyxnQkFBZ0JELEdBQUdFLEdBQUcsZ0JBQWdCRixHQUFHL0IsR0FBRyxvQkFBb0IrQixHQUFHMUMsR0FBRyxpQkFBaUIwQyxHQUFHRyxHQUFHLG9CQUFvQkgsR0FBR0ksR0FBRyxrQkFBa0JKLEdBQ2xYLFNBQVMvUSxHQUFHMXZCLEdBQUcsSUFBSWtGLEVBQUVsRixFQUFFMGdDLElBQUksR0FBR3g3QixFQUFFLE9BQU9BLEVBQUUsSUFBSSxJQUFJNE0sRUFBRTlSLEVBQUVscUIsV0FBV2c4QixHQUFHLENBQUMsR0FBRzVNLEVBQUU0TSxFQUFFNHNCLEtBQUs1c0IsRUFBRTR1QixJQUFJLENBQWUsR0FBZDV1QixFQUFFNU0sRUFBRW9sQixVQUFhLE9BQU9wbEIsRUFBRTJsQixPQUFPLE9BQU8vWSxHQUFHLE9BQU9BLEVBQUUrWSxNQUFNLElBQUk3cUIsRUFBRXVnQyxHQUFHdmdDLEdBQUcsT0FBT0EsR0FBRyxDQUFDLEdBQUc4UixFQUFFOVIsRUFBRTBnQyxJQUFJLE9BQU81dUIsRUFBRTlSLEVBQUV1Z0MsR0FBR3ZnQyxFQUFFLENBQUMsT0FBT2tGLENBQUMsQ0FBSzRNLEdBQUo5UixFQUFFOFIsR0FBTWg4QixVQUFVLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBU216QyxHQUFHanBCLEdBQWtCLFFBQWZBLEVBQUVBLEVBQUUwZ0MsS0FBSzFnQyxFQUFFMCtCLE1BQWMsSUFBSTErQixFQUFFenNCLEtBQUssSUFBSXlzQixFQUFFenNCLEtBQUssS0FBS3lzQixFQUFFenNCLEtBQUssSUFBSXlzQixFQUFFenNCLElBQUksS0FBS3lzQixDQUFDLENBQUMsU0FBU2k1QixHQUFHajVCLEdBQUcsR0FBRyxJQUFJQSxFQUFFenNCLEtBQUssSUFBSXlzQixFQUFFenNCLElBQUksT0FBT3lzQixFQUFFa3BCLFVBQVUsTUFBTXo3QixNQUFNcVgsRUFBRSxJQUFLLENBQUMsU0FBU3FrQixHQUFHbnBCLEdBQUcsT0FBT0EsRUFBRTJnQyxLQUFLLElBQUksQ0FBQyxJQUFJRyxHQUFHLEdBQUdDLElBQUksRUFBRSxTQUFTQyxHQUFHaGhDLEdBQUcsTUFBTSxDQUFDdGIsUUFBUXNiLEVBQUUsQ0FDdmUsU0FBU2loQyxHQUFFamhDLEdBQUcsRUFBRStnQyxLQUFLL2dDLEVBQUV0YixRQUFRbzhDLEdBQUdDLElBQUlELEdBQUdDLElBQUksS0FBS0EsS0FBSyxDQUFDLFNBQVNHLEdBQUVsaEMsRUFBRWtGLEdBQUc2N0IsS0FBS0QsR0FBR0MsSUFBSS9nQyxFQUFFdGIsUUFBUXNiLEVBQUV0YixRQUFRd2dCLENBQUMsQ0FBQyxJQUFJaThCLEdBQUcsQ0FBQyxFQUFFQyxHQUFFSixHQUFHRyxJQUFJRSxHQUFHTCxJQUFHLEdBQUlNLEdBQUdILEdBQUcsU0FBU0ksR0FBR3ZoQyxFQUFFa0YsR0FBRyxJQUFJNE0sRUFBRTlSLEVBQUVwb0IsS0FBS2tsQyxhQUFhLElBQUloTCxFQUFFLE9BQU9xdkIsR0FBRyxJQUFJajhDLEVBQUU4YSxFQUFFa3BCLFVBQVUsR0FBR2hrQyxHQUFHQSxFQUFFczhDLDhDQUE4Q3Q4QixFQUFFLE9BQU9oZ0IsRUFBRXU4QywwQ0FBMEMsSUFBU3hoQyxFQUFMcnFCLEVBQUUsQ0FBQyxFQUFJLElBQUlxcUIsS0FBSzZSLEVBQUVsOEIsRUFBRXFxQixHQUFHaUYsRUFBRWpGLEdBQW9ILE9BQWpIL2EsS0FBSThhLEVBQUVBLEVBQUVrcEIsV0FBWXNZLDRDQUE0Q3Q4QixFQUFFbEYsRUFBRXloQywwQ0FBMEM3ckQsR0FBVUEsQ0FBQyxDQUM5ZCxTQUFTOHJELEdBQUcxaEMsR0FBeUIsT0FBTyxNQUEzQkEsRUFBRTRjLGlCQUE2QyxDQUFDLFNBQVMra0IsS0FBS1YsR0FBRUksSUFBSUosR0FBRUcsR0FBRSxDQUFDLFNBQVNRLEdBQUc1aEMsRUFBRWtGLEVBQUU0TSxHQUFHLEdBQUdzdkIsR0FBRTE4QyxVQUFVeThDLEdBQUcsTUFBTTF6QyxNQUFNcVgsRUFBRSxNQUFNbzhCLEdBQUVFLEdBQUVsOEIsR0FBR2c4QixHQUFFRyxHQUFHdnZCLEVBQUUsQ0FBQyxTQUFTK3ZCLEdBQUc3aEMsRUFBRWtGLEVBQUU0TSxHQUFHLElBQUk1c0IsRUFBRThhLEVBQUVrcEIsVUFBZ0MsR0FBdEJoa0IsRUFBRUEsRUFBRTBYLGtCQUFxQixtQkFBb0IxM0IsRUFBRTQ4QyxnQkFBZ0IsT0FBT2h3QixFQUF3QixJQUFJLElBQUlsOEIsS0FBOUJzUCxFQUFFQSxFQUFFNDhDLGtCQUFpQyxLQUFLbHNELEtBQUtzdkIsR0FBRyxNQUFNelgsTUFBTXFYLEVBQUUsSUFBSXFmLEVBQUdua0IsSUFBSSxVQUFVcHFCLElBQUksT0FBT2twQyxFQUFFLENBQUMsRUFBRWhOLEVBQUU1c0IsRUFBRSxDQUN4WCxTQUFTNjhDLEdBQUcvaEMsR0FBMkcsT0FBeEdBLEdBQUdBLEVBQUVBLEVBQUVrcEIsWUFBWWxwQixFQUFFZ2lDLDJDQUEyQ2IsR0FBR0csR0FBR0YsR0FBRTE4QyxRQUFRdzhDLEdBQUVFLEdBQUVwaEMsR0FBR2toQyxHQUFFRyxHQUFHQSxHQUFHMzhDLFVBQWUsQ0FBRSxDQUFDLFNBQVN1OUMsR0FBR2ppQyxFQUFFa0YsRUFBRTRNLEdBQUcsSUFBSTVzQixFQUFFOGEsRUFBRWtwQixVQUFVLElBQUloa0MsRUFBRSxNQUFNdUksTUFBTXFYLEVBQUUsTUFBTWdOLEdBQUc5UixFQUFFNmhDLEdBQUc3aEMsRUFBRWtGLEVBQUVvOEIsSUFBSXA4QyxFQUFFODhDLDBDQUEwQ2hpQyxFQUFFaWhDLEdBQUVJLElBQUlKLEdBQUVHLElBQUdGLEdBQUVFLEdBQUVwaEMsSUFBSWloQyxHQUFFSSxJQUFJSCxHQUFFRyxHQUFHdnZCLEVBQUUsQ0FBQyxJQUFJb3dCLEdBQUcsS0FBS0MsSUFBRyxFQUFHQyxJQUFHLEVBQUcsU0FBU0MsR0FBR3JpQyxHQUFHLE9BQU9raUMsR0FBR0EsR0FBRyxDQUFDbGlDLEdBQUdraUMsR0FBR2p1RCxLQUFLK3JCLEVBQUUsQ0FDaFcsU0FBU3NpQyxLQUFLLElBQUlGLElBQUksT0FBT0YsR0FBRyxDQUFDRSxJQUFHLEVBQUcsSUFBSXBpQyxFQUFFLEVBQUVrRixFQUFFNm9CLEdBQUUsSUFBSSxJQUFJamMsRUFBRW93QixHQUFHLElBQUluVSxHQUFFLEVBQUUvdEIsRUFBRThSLEVBQUVwK0IsT0FBT3NzQixJQUFJLENBQUMsSUFBSTlhLEVBQUU0c0IsRUFBRTlSLEdBQUcsR0FBRzlhLEVBQUVBLEdBQUUsU0FBVSxPQUFPQSxFQUFFLENBQUNnOUMsR0FBRyxLQUFLQyxJQUFHLENBQThFLENBQTNFLE1BQU12c0QsR0FBRyxNQUFNLE9BQU9zc0QsS0FBS0EsR0FBR0EsR0FBR2hyRCxNQUFNOG9CLEVBQUUsSUFBSWlyQixHQUFHWSxHQUFHeVcsSUFBSTFzRCxDQUFFLENBQUMsUUFBUW00QyxHQUFFN29CLEVBQUVrOUIsSUFBRyxDQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJRyxHQUFHLEdBQUdybEMsR0FBRyxFQUFFc2xDLEdBQUcsS0FBS0MsR0FBRyxFQUFFQyxHQUFHLEdBQUdDLEdBQUcsRUFBRUMsR0FBRyxLQUFLQyxHQUFHLEVBQUVDLEdBQUcsR0FBRyxTQUFTQyxHQUFHL2lDLEVBQUVrRixHQUFHcTlCLEdBQUdybEMsTUFBTXVsQyxHQUFHRixHQUFHcmxDLE1BQU1zbEMsR0FBR0EsR0FBR3hpQyxFQUFFeWlDLEdBQUd2OUIsQ0FBQyxDQUNqVixTQUFTODlCLEdBQUdoakMsRUFBRWtGLEVBQUU0TSxHQUFHNHdCLEdBQUdDLE1BQU1FLEdBQUdILEdBQUdDLE1BQU1HLEdBQUdKLEdBQUdDLE1BQU1DLEdBQUdBLEdBQUc1aUMsRUFBRSxJQUFJOWEsRUFBRTI5QyxHQUFHN2lDLEVBQUU4aUMsR0FBRyxJQUFJbHRELEVBQUUsR0FBRzYyQyxHQUFHdm5DLEdBQUcsRUFBRUEsS0FBSyxHQUFHdFAsR0FBR2s4QixHQUFHLEVBQUUsSUFBSTdSLEVBQUUsR0FBR3dzQixHQUFHdm5CLEdBQUd0dkIsRUFBRSxHQUFHLEdBQUdxcUIsRUFBRSxDQUFDLElBQUl5ZSxFQUFFOW9DLEVBQUVBLEVBQUUsRUFBRXFxQixHQUFHL2EsR0FBRyxHQUFHdzVCLEdBQUcsR0FBRzUvQixTQUFTLElBQUlvRyxJQUFJdzVCLEVBQUU5b0MsR0FBRzhvQyxFQUFFbWtCLEdBQUcsR0FBRyxHQUFHcFcsR0FBR3ZuQixHQUFHdHZCLEVBQUVrOEIsR0FBR2w4QixFQUFFc1AsRUFBRTQ5QyxHQUFHN2lDLEVBQUVELENBQUMsTUFBTTZpQyxHQUFHLEdBQUc1aUMsRUFBRTZSLEdBQUdsOEIsRUFBRXNQLEVBQUU0OUMsR0FBRzlpQyxDQUFDLENBQUMsU0FBU2lqQyxHQUFHampDLEdBQUcsT0FBT0EsRUFBRWpvQixTQUFTZ3JELEdBQUcvaUMsRUFBRSxHQUFHZ2pDLEdBQUdoakMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxTQUFTa2pDLEdBQUdsakMsR0FBRyxLQUFLQSxJQUFJd2lDLElBQUlBLEdBQUdELEtBQUtybEMsSUFBSXFsQyxHQUFHcmxDLElBQUksS0FBS3VsQyxHQUFHRixLQUFLcmxDLElBQUlxbEMsR0FBR3JsQyxJQUFJLEtBQUssS0FBSzhDLElBQUk0aUMsSUFBSUEsR0FBR0YsS0FBS0MsSUFBSUQsR0FBR0MsSUFBSSxLQUFLRyxHQUFHSixLQUFLQyxJQUFJRCxHQUFHQyxJQUFJLEtBQUtFLEdBQUdILEtBQUtDLElBQUlELEdBQUdDLElBQUksSUFBSSxDQUFDLElBQUlRLEdBQUcsS0FBS0MsR0FBRyxLQUFLQyxJQUFFLEVBQUdDLEdBQUcsS0FDamUsU0FBU0MsR0FBR3ZqQyxFQUFFa0YsR0FBRyxJQUFJNE0sRUFBRTB4QixHQUFHLEVBQUUsS0FBSyxLQUFLLEdBQUcxeEIsRUFBRTJ4QixZQUFZLFVBQVUzeEIsRUFBRW9YLFVBQVVoa0IsRUFBRTRNLEVBQUUvNUIsT0FBT2lvQixFQUFnQixRQUFka0YsRUFBRWxGLEVBQUUwakMsWUFBb0IxakMsRUFBRTBqQyxVQUFVLENBQUM1eEIsR0FBRzlSLEVBQUV1cUIsT0FBTyxJQUFJcmxCLEVBQUVqeEIsS0FBSzY5QixFQUFFLENBQ3hKLFNBQVM2eEIsR0FBRzNqQyxFQUFFa0YsR0FBRyxPQUFPbEYsRUFBRXpzQixLQUFLLEtBQUssRUFBRSxJQUFJdStCLEVBQUU5UixFQUFFcG9CLEtBQXlFLE9BQU8sUUFBM0VzdEIsRUFBRSxJQUFJQSxFQUFFNGhCLFVBQVVoVixFQUFFNXZCLGdCQUFnQmdqQixFQUFFb2YsU0FBU3BpQyxjQUFjLEtBQUtnakIsS0FBbUJsRixFQUFFa3BCLFVBQVVoa0IsRUFBRWkrQixHQUFHbmpDLEVBQUVvakMsR0FBRzlDLEdBQUdwN0IsRUFBRW54QixhQUFZLEdBQU8sS0FBSyxFQUFFLE9BQW9ELFFBQTdDbXhCLEVBQUUsS0FBS2xGLEVBQUU0akMsY0FBYyxJQUFJMStCLEVBQUU0aEIsU0FBUyxLQUFLNWhCLEtBQVlsRixFQUFFa3BCLFVBQVVoa0IsRUFBRWkrQixHQUFHbmpDLEVBQUVvakMsR0FBRyxNQUFLLEdBQU8sS0FBSyxHQUFHLE9BQStCLFFBQXhCbCtCLEVBQUUsSUFBSUEsRUFBRTRoQixTQUFTLEtBQUs1aEIsS0FBWTRNLEVBQUUsT0FBTzh3QixHQUFHLENBQUM3M0IsR0FBRzgzQixHQUFHZ0IsU0FBU2YsSUFBSSxLQUFLOWlDLEVBQUV5cUIsY0FBYyxDQUFDQyxXQUFXeGxCLEVBQUU0K0IsWUFBWWh5QixFQUFFaXlCLFVBQVUsYUFBWWp5QixFQUFFMHhCLEdBQUcsR0FBRyxLQUFLLEtBQUssSUFBS3RhLFVBQVVoa0IsRUFBRTRNLEVBQUUvNUIsT0FBT2lvQixFQUFFQSxFQUFFNnFCLE1BQU0vWSxFQUFFcXhCLEdBQUduakMsRUFBRW9qQyxHQUNsZixNQUFLLEdBQU8sUUFBUSxPQUFNLEVBQUcsQ0FBQyxTQUFTWSxHQUFHaGtDLEdBQUcsT0FBTyxJQUFZLEVBQVBBLEVBQUV0UyxPQUFTLElBQWEsSUFBUnNTLEVBQUV1cUIsTUFBVSxDQUFDLFNBQVMwWixHQUFHamtDLEdBQUcsR0FBR3FqQyxHQUFFLENBQUMsSUFBSW4rQixFQUFFaytCLEdBQUcsR0FBR2wrQixFQUFFLENBQUMsSUFBSTRNLEVBQUU1TSxFQUFFLElBQUl5K0IsR0FBRzNqQyxFQUFFa0YsR0FBRyxDQUFDLEdBQUc4K0IsR0FBR2hrQyxHQUFHLE1BQU12UyxNQUFNcVgsRUFBRSxNQUFNSSxFQUFFbzdCLEdBQUd4dUIsRUFBRWwrQixhQUFhLElBQUlzUixFQUFFaStDLEdBQUdqK0IsR0FBR3krQixHQUFHM2pDLEVBQUVrRixHQUFHcStCLEdBQUdyK0MsRUFBRTRzQixJQUFJOVIsRUFBRXVxQixPQUFlLEtBQVR2cUIsRUFBRXVxQixNQUFZLEVBQUU4WSxJQUFFLEVBQUdGLEdBQUduakMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHZ2tDLEdBQUdoa0MsR0FBRyxNQUFNdlMsTUFBTXFYLEVBQUUsTUFBTTlFLEVBQUV1cUIsT0FBZSxLQUFUdnFCLEVBQUV1cUIsTUFBWSxFQUFFOFksSUFBRSxFQUFHRixHQUFHbmpDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBU2trQyxHQUFHbGtDLEdBQUcsSUFBSUEsRUFBRUEsRUFBRWpvQixPQUFPLE9BQU9pb0IsR0FBRyxJQUFJQSxFQUFFenNCLEtBQUssSUFBSXlzQixFQUFFenNCLEtBQUssS0FBS3lzQixFQUFFenNCLEtBQUt5c0IsRUFBRUEsRUFBRWpvQixPQUFPb3JELEdBQUduakMsQ0FBQyxDQUNoYSxTQUFTbWtDLEdBQUdua0MsR0FBRyxHQUFHQSxJQUFJbWpDLEdBQUcsT0FBTSxFQUFHLElBQUlFLEdBQUUsT0FBT2EsR0FBR2xrQyxHQUFHcWpDLElBQUUsR0FBRyxFQUFHLElBQUluK0IsRUFBa0csSUFBL0ZBLEVBQUUsSUFBSWxGLEVBQUV6c0IsUUFBUTJ4QixFQUFFLElBQUlsRixFQUFFenNCLE9BQWdCMnhCLEVBQUUsVUFBWEEsRUFBRWxGLEVBQUVwb0IsT0FBbUIsU0FBU3N0QixJQUFJMDZCLEdBQUc1L0IsRUFBRXBvQixLQUFLb29CLEVBQUVva0MsZ0JBQW1CbC9CLElBQUlBLEVBQUVrK0IsSUFBSSxDQUFDLEdBQUdZLEdBQUdoa0MsR0FBRyxNQUFNcWtDLEtBQUs1MkMsTUFBTXFYLEVBQUUsTUFBTSxLQUFLSSxHQUFHcStCLEdBQUd2akMsRUFBRWtGLEdBQUdBLEVBQUVvN0IsR0FBR3A3QixFQUFFdHhCLFlBQVksQ0FBTyxHQUFOc3dELEdBQUdsa0MsR0FBTSxLQUFLQSxFQUFFenNCLElBQUksQ0FBZ0QsS0FBN0J5c0IsRUFBRSxRQUFwQkEsRUFBRUEsRUFBRXlxQixlQUF5QnpxQixFQUFFMHFCLFdBQVcsTUFBVyxNQUFNajlCLE1BQU1xWCxFQUFFLE1BQU05RSxFQUFFLENBQWlCLElBQWhCQSxFQUFFQSxFQUFFcHNCLFlBQWdCc3hCLEVBQUUsRUFBRWxGLEdBQUcsQ0FBQyxHQUFHLElBQUlBLEVBQUU4bUIsU0FBUyxDQUFDLElBQUloVixFQUFFOVIsRUFBRW1NLEtBQUssR0FBRyxPQUFPMkYsRUFBRSxDQUFDLEdBQUcsSUFBSTVNLEVBQUUsQ0FBQ2srQixHQUFHOUMsR0FBR3RnQyxFQUFFcHNCLGFBQWEsTUFBTW9zQixDQUFDLENBQUNrRixHQUFHLEtBQUssTUFBTTRNLEdBQUcsT0FBT0EsR0FBRyxPQUFPQSxHQUFHNU0sR0FBRyxDQUFDbEYsRUFBRUEsRUFBRXBzQixXQUFXLENBQUN3dkQsR0FDamdCLElBQUksQ0FBQyxNQUFNQSxHQUFHRCxHQUFHN0MsR0FBR3RnQyxFQUFFa3BCLFVBQVV0MUMsYUFBYSxLQUFLLE9BQU0sQ0FBRSxDQUFDLFNBQVN5d0QsS0FBSyxJQUFJLElBQUlya0MsRUFBRW9qQyxHQUFHcGpDLEdBQUdBLEVBQUVzZ0MsR0FBR3RnQyxFQUFFcHNCLFlBQVksQ0FBQyxTQUFTMHdELEtBQUtsQixHQUFHRCxHQUFHLEtBQUtFLElBQUUsQ0FBRSxDQUFDLFNBQVNrQixHQUFHdmtDLEdBQUcsT0FBT3NqQyxHQUFHQSxHQUFHLENBQUN0akMsR0FBR3NqQyxHQUFHcnZELEtBQUsrckIsRUFBRSxDQUFDLElBQUl3a0MsR0FBR3BpQixFQUFHa08sd0JBQXdCLFNBQVNtVSxHQUFHemtDLEVBQUVrRixHQUFHLEdBQUdsRixHQUFHQSxFQUFFaE0sYUFBYSxDQUE0QixJQUFJLElBQUk4ZCxLQUFuQzVNLEVBQUU0WixFQUFFLENBQUMsRUFBRTVaLEdBQUdsRixFQUFFQSxFQUFFaE0sa0JBQTRCLElBQVNrUixFQUFFNE0sS0FBSzVNLEVBQUU0TSxHQUFHOVIsRUFBRThSLElBQUksT0FBTzVNLENBQUMsQ0FBQyxPQUFPQSxDQUFDLENBQUMsSUFBSXcvQixHQUFHMUQsR0FBRyxNQUFNMkQsR0FBRyxLQUFLQyxHQUFHLEtBQUtDLEdBQUcsS0FBSyxTQUFTQyxLQUFLRCxHQUFHRCxHQUFHRCxHQUFHLElBQUksQ0FBQyxTQUFTSSxHQUFHL2tDLEdBQUcsSUFBSWtGLEVBQUV3L0IsR0FBR2hnRCxRQUFRdThDLEdBQUV5RCxJQUFJMWtDLEVBQUVnbEMsY0FBYzkvQixDQUFDLENBQ2pkLFNBQVMrL0IsR0FBR2psQyxFQUFFa0YsRUFBRTRNLEdBQUcsS0FBSyxPQUFPOVIsR0FBRyxDQUFDLElBQUk5YSxFQUFFOGEsRUFBRXNxQixVQUErSCxJQUFwSHRxQixFQUFFa2xDLFdBQVdoZ0MsS0FBS0EsR0FBR2xGLEVBQUVrbEMsWUFBWWhnQyxFQUFFLE9BQU9oZ0IsSUFBSUEsRUFBRWdnRCxZQUFZaGdDLElBQUksT0FBT2hnQixJQUFJQSxFQUFFZ2dELFdBQVdoZ0MsS0FBS0EsSUFBSWhnQixFQUFFZ2dELFlBQVloZ0MsR0FBTWxGLElBQUk4UixFQUFFLE1BQU05UixFQUFFQSxFQUFFam9CLE1BQU0sQ0FBQyxDQUFDLFNBQVNvdEQsR0FBR25sQyxFQUFFa0YsR0FBR3kvQixHQUFHM2tDLEVBQUU2a0MsR0FBR0QsR0FBRyxLQUFzQixRQUFqQjVrQyxFQUFFQSxFQUFFb2xDLGVBQXVCLE9BQU9wbEMsRUFBRXFsQyxlQUFlLElBQUtybEMsRUFBRXNsQyxNQUFNcGdDLEtBQUtxZ0MsSUFBRyxHQUFJdmxDLEVBQUVxbEMsYUFBYSxLQUFLLENBQ3RVLFNBQVNHLEdBQUd4bEMsR0FBRyxJQUFJa0YsRUFBRWxGLEVBQUVnbEMsY0FBYyxHQUFHSCxLQUFLN2tDLEVBQUUsR0FBR0EsRUFBRSxDQUFDcVEsUUFBUXJRLEVBQUV5bEMsY0FBY3ZnQyxFQUFFaHRCLEtBQUssTUFBTSxPQUFPMHNELEdBQUcsQ0FBQyxHQUFHLE9BQU9ELEdBQUcsTUFBTWwzQyxNQUFNcVgsRUFBRSxNQUFNOC9CLEdBQUc1a0MsRUFBRTJrQyxHQUFHUyxhQUFhLENBQUNFLE1BQU0sRUFBRUQsYUFBYXJsQyxFQUFFLE1BQU00a0MsR0FBR0EsR0FBRzFzRCxLQUFLOG5CLEVBQUUsT0FBT2tGLENBQUMsQ0FBQyxJQUFJd2dDLEdBQUcsS0FBSyxTQUFTQyxHQUFHM2xDLEdBQUcsT0FBTzBsQyxHQUFHQSxHQUFHLENBQUMxbEMsR0FBRzBsQyxHQUFHenhELEtBQUsrckIsRUFBRSxDQUFDLFNBQVM0bEMsR0FBRzVsQyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBRyxJQUFJdFAsRUFBRXN2QixFQUFFMmdDLFlBQStFLE9BQW5FLE9BQU9qd0QsR0FBR2s4QixFQUFFNTVCLEtBQUs0NUIsRUFBRTZ6QixHQUFHemdDLEtBQUs0TSxFQUFFNTVCLEtBQUt0QyxFQUFFc0MsS0FBS3RDLEVBQUVzQyxLQUFLNDVCLEdBQUc1TSxFQUFFMmdDLFlBQVkvekIsRUFBU2cwQixHQUFHOWxDLEVBQUU5YSxFQUFFLENBQ2hZLFNBQVM0Z0QsR0FBRzlsQyxFQUFFa0YsR0FBR2xGLEVBQUVzbEMsT0FBT3BnQyxFQUFFLElBQUk0TSxFQUFFOVIsRUFBRXNxQixVQUFxQyxJQUEzQixPQUFPeFksSUFBSUEsRUFBRXd6QixPQUFPcGdDLEdBQUc0TSxFQUFFOVIsRUFBTUEsRUFBRUEsRUFBRWpvQixPQUFPLE9BQU9pb0IsR0FBR0EsRUFBRWtsQyxZQUFZaGdDLEVBQWdCLFFBQWQ0TSxFQUFFOVIsRUFBRXNxQixhQUFxQnhZLEVBQUVvekIsWUFBWWhnQyxHQUFHNE0sRUFBRTlSLEVBQUVBLEVBQUVBLEVBQUVqb0IsT0FBTyxPQUFPLElBQUkrNUIsRUFBRXYrQixJQUFJdStCLEVBQUVvWCxVQUFVLElBQUksQ0FBQyxJQUFJNmMsSUFBRyxFQUFHLFNBQVNDLEdBQUdobUMsR0FBR0EsRUFBRWltQyxZQUFZLENBQUNDLFVBQVVsbUMsRUFBRXlxQixjQUFjMGIsZ0JBQWdCLEtBQUtDLGVBQWUsS0FBS0MsT0FBTyxDQUFDQyxRQUFRLEtBQUtULFlBQVksS0FBS1AsTUFBTSxHQUFHaUIsUUFBUSxLQUFLLENBQ3BYLFNBQVNDLEdBQUd4bUMsRUFBRWtGLEdBQUdsRixFQUFFQSxFQUFFaW1DLFlBQVkvZ0MsRUFBRStnQyxjQUFjam1DLElBQUlrRixFQUFFK2dDLFlBQVksQ0FBQ0MsVUFBVWxtQyxFQUFFa21DLFVBQVVDLGdCQUFnQm5tQyxFQUFFbW1DLGdCQUFnQkMsZUFBZXBtQyxFQUFFb21DLGVBQWVDLE9BQU9ybUMsRUFBRXFtQyxPQUFPRSxRQUFRdm1DLEVBQUV1bUMsU0FBUyxDQUFDLFNBQVNFLEdBQUd6bUMsRUFBRWtGLEdBQUcsTUFBTSxDQUFDd2hDLFVBQVUxbUMsRUFBRTJtQyxLQUFLemhDLEVBQUUzeEIsSUFBSSxFQUFFdWxDLFFBQVEsS0FBS3gvQixTQUFTLEtBQUtwQixLQUFLLEtBQUssQ0FDdFIsU0FBUzB1RCxHQUFHNW1DLEVBQUVrRixFQUFFNE0sR0FBRyxJQUFJNXNCLEVBQUU4YSxFQUFFaW1DLFlBQVksR0FBRyxPQUFPL2dELEVBQUUsT0FBTyxLQUFnQixHQUFYQSxFQUFFQSxFQUFFbWhELE9BQVUsSUFBTyxFQUFGUSxJQUFLLENBQUMsSUFBSWp4RCxFQUFFc1AsRUFBRW9oRCxRQUErRCxPQUF2RCxPQUFPMXdELEVBQUVzdkIsRUFBRWh0QixLQUFLZ3RCLEdBQUdBLEVBQUVodEIsS0FBS3RDLEVBQUVzQyxLQUFLdEMsRUFBRXNDLEtBQUtndEIsR0FBR2hnQixFQUFFb2hELFFBQVFwaEMsRUFBUzRnQyxHQUFHOWxDLEVBQUU4UixFQUFFLENBQW9GLE9BQW5FLFFBQWhCbDhCLEVBQUVzUCxFQUFFMmdELGNBQXNCM2dDLEVBQUVodEIsS0FBS2d0QixFQUFFeWdDLEdBQUd6Z0QsS0FBS2dnQixFQUFFaHRCLEtBQUt0QyxFQUFFc0MsS0FBS3RDLEVBQUVzQyxLQUFLZ3RCLEdBQUdoZ0IsRUFBRTJnRCxZQUFZM2dDLEVBQVM0Z0MsR0FBRzlsQyxFQUFFOFIsRUFBRSxDQUFDLFNBQVNnMUIsR0FBRzltQyxFQUFFa0YsRUFBRTRNLEdBQW1CLEdBQUcsUUFBbkI1TSxFQUFFQSxFQUFFK2dDLGVBQTBCL2dDLEVBQUVBLEVBQUVtaEMsT0FBTyxJQUFPLFFBQUZ2MEIsSUFBWSxDQUFDLElBQUk1c0IsRUFBRWdnQixFQUFFb2dDLE1BQXdCeHpCLEdBQWxCNXNCLEdBQUc4YSxFQUFFbXRCLGFBQWtCam9CLEVBQUVvZ0MsTUFBTXh6QixFQUFFZ2MsR0FBRzl0QixFQUFFOFIsRUFBRSxDQUFDLENBQ3JaLFNBQVNpMUIsR0FBRy9tQyxFQUFFa0YsR0FBRyxJQUFJNE0sRUFBRTlSLEVBQUVpbUMsWUFBWS9nRCxFQUFFOGEsRUFBRXNxQixVQUFVLEdBQUcsT0FBT3BsQyxHQUFvQjRzQixLQUFoQjVzQixFQUFFQSxFQUFFK2dELGFBQW1CLENBQUMsSUFBSXJ3RCxFQUFFLEtBQUtxcUIsRUFBRSxLQUF5QixHQUFHLFFBQXZCNlIsRUFBRUEsRUFBRXEwQixpQkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSXpuQixFQUFFLENBQUNnb0IsVUFBVTUwQixFQUFFNDBCLFVBQVVDLEtBQUs3MEIsRUFBRTYwQixLQUFLcHpELElBQUl1K0IsRUFBRXYrQixJQUFJdWxDLFFBQVFoSCxFQUFFZ0gsUUFBUXgvQixTQUFTdzRCLEVBQUV4NEIsU0FBU3BCLEtBQUssTUFBTSxPQUFPK25CLEVBQUVycUIsRUFBRXFxQixFQUFFeWUsRUFBRXplLEVBQUVBLEVBQUUvbkIsS0FBS3dtQyxFQUFFNU0sRUFBRUEsRUFBRTU1QixJQUFJLE9BQU8sT0FBTzQ1QixHQUFHLE9BQU83UixFQUFFcnFCLEVBQUVxcUIsRUFBRWlGLEVBQUVqRixFQUFFQSxFQUFFL25CLEtBQUtndEIsQ0FBQyxNQUFNdHZCLEVBQUVxcUIsRUFBRWlGLEVBQWlILE9BQS9HNE0sRUFBRSxDQUFDbzBCLFVBQVVoaEQsRUFBRWdoRCxVQUFVQyxnQkFBZ0J2d0QsRUFBRXd3RCxlQUFlbm1DLEVBQUVvbUMsT0FBT25oRCxFQUFFbWhELE9BQU9FLFFBQVFyaEQsRUFBRXFoRCxjQUFTdm1DLEVBQUVpbUMsWUFBWW4wQixFQUFRLENBQW9CLFFBQW5COVIsRUFBRThSLEVBQUVzMEIsZ0JBQXdCdDBCLEVBQUVxMEIsZ0JBQWdCamhDLEVBQUVsRixFQUFFOW5CLEtBQ25mZ3RCLEVBQUU0TSxFQUFFczBCLGVBQWVsaEMsQ0FBQyxDQUNwQixTQUFTOGhDLEdBQUdobkMsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUcsSUFBSXRQLEVBQUVvcUIsRUFBRWltQyxZQUFZRixJQUFHLEVBQUcsSUFBSTlsQyxFQUFFcnFCLEVBQUV1d0QsZ0JBQWdCem5CLEVBQUU5b0MsRUFBRXd3RCxlQUFleG5ELEVBQUVoSixFQUFFeXdELE9BQU9DLFFBQVEsR0FBRyxPQUFPMW5ELEVBQUUsQ0FBQ2hKLEVBQUV5d0QsT0FBT0MsUUFBUSxLQUFLLElBQUlwckQsRUFBRTBELEVBQUVtaEIsRUFBRTdrQixFQUFFaEQsS0FBS2dELEVBQUVoRCxLQUFLLEtBQUssT0FBT3dtQyxFQUFFemUsRUFBRUYsRUFBRTJlLEVBQUV4bUMsS0FBSzZuQixFQUFFMmUsRUFBRXhqQyxFQUFFLElBQUkycEIsRUFBRTdFLEVBQUVzcUIsVUFBVSxPQUFPemxCLElBQW9Cam1CLEdBQWhCaW1CLEVBQUVBLEVBQUVvaEMsYUFBZ0JHLGtCQUFtQjFuQixJQUFJLE9BQU85L0IsRUFBRWltQixFQUFFc2hDLGdCQUFnQnBtQyxFQUFFbmhCLEVBQUUxRyxLQUFLNm5CLEVBQUU4RSxFQUFFdWhDLGVBQWVsckQsRUFBRyxDQUFDLEdBQUcsT0FBTytrQixFQUFFLENBQUMsSUFBSTBlLEVBQUUvb0MsRUFBRXN3RCxVQUE2QixJQUFuQnhuQixFQUFFLEVBQUU3WixFQUFFOUUsRUFBRTdrQixFQUFFLEtBQUswRCxFQUFFcWhCLElBQUksQ0FBQyxJQUFJZ0YsRUFBRXJtQixFQUFFK25ELEtBQUt2ckQsRUFBRXdELEVBQUU4bkQsVUFBVSxJQUFJeGhELEVBQUUrZixLQUFLQSxFQUFFLENBQUMsT0FBT0osSUFBSUEsRUFBRUEsRUFBRTNzQixLQUFLLENBQUN3dUQsVUFBVXRyRCxFQUFFdXJELEtBQUssRUFBRXB6RCxJQUFJcUwsRUFBRXJMLElBQUl1bEMsUUFBUWw2QixFQUFFazZCLFFBQVF4L0IsU0FBU3NGLEVBQUV0RixTQUN2ZnBCLEtBQUssT0FBTzhuQixFQUFFLENBQUMsSUFBSWIsRUFBRWEsRUFBRWdGLEVBQUVwbUIsRUFBVSxPQUFScW1CLEVBQUVDLEVBQUU5cEIsRUFBRTAyQixFQUFTOU0sRUFBRXp4QixLQUFLLEtBQUssRUFBYyxHQUFHLG1CQUFmNHJCLEVBQUU2RixFQUFFOFQsU0FBaUMsQ0FBQzZGLEVBQUV4ZixFQUFFMWlCLEtBQUtyQixFQUFFdWpDLEVBQUUxWixHQUFHLE1BQU1qRixDQUFDLENBQUMyZSxFQUFFeGYsRUFBRSxNQUFNYSxFQUFFLEtBQUssRUFBRWIsRUFBRW9yQixPQUFlLE1BQVRwckIsRUFBRW9yQixNQUFhLElBQUksS0FBSyxFQUFzRCxHQUFHLE9BQTNDdGxCLEVBQUUsbUJBQWQ5RixFQUFFNkYsRUFBRThULFNBQWdDM1osRUFBRTFpQixLQUFLckIsRUFBRXVqQyxFQUFFMVosR0FBRzlGLEdBQTBCLE1BQU1hLEVBQUUyZSxFQUFFRyxFQUFFLENBQUMsRUFBRUgsRUFBRTFaLEdBQUcsTUFBTWpGLEVBQUUsS0FBSyxFQUFFK2xDLElBQUcsRUFBRyxDQUFDLE9BQU9ubkQsRUFBRXRGLFVBQVUsSUFBSXNGLEVBQUUrbkQsT0FBTzNtQyxFQUFFdXFCLE9BQU8sR0FBZSxRQUFadGxCLEVBQUVydkIsRUFBRTJ3RCxTQUFpQjN3RCxFQUFFMndELFFBQVEsQ0FBQzNuRCxHQUFHcW1CLEVBQUVoeEIsS0FBSzJLLEdBQUcsTUFBTXhELEVBQUUsQ0FBQ3NyRCxVQUFVdHJELEVBQUV1ckQsS0FBSzFoQyxFQUFFMXhCLElBQUlxTCxFQUFFckwsSUFBSXVsQyxRQUFRbDZCLEVBQUVrNkIsUUFBUXgvQixTQUFTc0YsRUFBRXRGLFNBQVNwQixLQUFLLE1BQU0sT0FBTzJzQixHQUFHOUUsRUFBRThFLEVBQUV6cEIsRUFBRUYsRUFBRXlqQyxHQUFHOVosRUFBRUEsRUFBRTNzQixLQUFLa0QsRUFBRXNqQyxHQUFHelosRUFDM2UsR0FBRyxRQUFacm1CLEVBQUVBLEVBQUUxRyxNQUFpQixJQUFzQixRQUFuQjBHLEVBQUVoSixFQUFFeXdELE9BQU9DLFNBQWlCLE1BQWUxbkQsR0FBSnFtQixFQUFFcm1CLEdBQU0xRyxLQUFLK3NCLEVBQUUvc0IsS0FBSyxLQUFLdEMsRUFBRXd3RCxlQUFlbmhDLEVBQUVydkIsRUFBRXl3RCxPQUFPQyxRQUFRLEtBQUksQ0FBc0csR0FBNUYsT0FBT3poQyxJQUFJM3BCLEVBQUV5akMsR0FBRy9vQyxFQUFFc3dELFVBQVVockQsRUFBRXRGLEVBQUV1d0QsZ0JBQWdCcG1DLEVBQUVucUIsRUFBRXd3RCxlQUFldmhDLEVBQTRCLFFBQTFCSyxFQUFFdHZCLEVBQUV5d0QsT0FBT1IsYUFBd0IsQ0FBQ2p3RCxFQUFFc3ZCLEVBQUUsR0FBR3daLEdBQUc5b0MsRUFBRSt3RCxLQUFLL3dELEVBQUVBLEVBQUVzQyxXQUFXdEMsSUFBSXN2QixFQUFFLE1BQU0sT0FBT2pGLElBQUlycUIsRUFBRXl3RCxPQUFPZixNQUFNLEdBQUcyQixJQUFJdm9CLEVBQUUxZSxFQUFFc2xDLE1BQU01bUIsRUFBRTFlLEVBQUV5cUIsY0FBYzlMLENBQUMsQ0FBQyxDQUM5VixTQUFTdW9CLEdBQUdsbkMsRUFBRWtGLEVBQUU0TSxHQUE4QixHQUEzQjlSLEVBQUVrRixFQUFFcWhDLFFBQVFyaEMsRUFBRXFoQyxRQUFRLEtBQVEsT0FBT3ZtQyxFQUFFLElBQUlrRixFQUFFLEVBQUVBLEVBQUVsRixFQUFFdHNCLE9BQU93eEIsSUFBSSxDQUFDLElBQUloZ0IsRUFBRThhLEVBQUVrRixHQUFHdHZCLEVBQUVzUCxFQUFFNUwsU0FBUyxHQUFHLE9BQU8xRCxFQUFFLENBQXFCLEdBQXBCc1AsRUFBRTVMLFNBQVMsS0FBSzRMLEVBQUU0c0IsRUFBSyxtQkFBb0JsOEIsRUFBRSxNQUFNNlgsTUFBTXFYLEVBQUUsSUFBSWx2QixJQUFJQSxFQUFFNkcsS0FBS3lJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSWlpRCxJQUFHLElBQUs1bUIsRUFBR25wQixXQUFXZ3dDLEtBQUssU0FBU0MsR0FBR3JuQyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBOEI0c0IsRUFBRSxPQUFYQSxFQUFFQSxFQUFFNXNCLEVBQXRCZ2dCLEVBQUVsRixFQUFFeXFCLGdCQUE4Q3ZsQixFQUFFNFosRUFBRSxDQUFDLEVBQUU1WixFQUFFNE0sR0FBRzlSLEVBQUV5cUIsY0FBYzNZLEVBQUUsSUFBSTlSLEVBQUVzbEMsUUFBUXRsQyxFQUFFaW1DLFlBQVlDLFVBQVVwMEIsRUFBRSxDQUNsWCxJQUFJdzFCLEdBQUcsQ0FBQ0MsVUFBVSxTQUFTdm5DLEdBQUcsU0FBT0EsRUFBRUEsRUFBRXduQyxrQkFBaUJuZCxHQUFHcnFCLEtBQUtBLENBQUksRUFBRXluQyxnQkFBZ0IsU0FBU3puQyxFQUFFa0YsRUFBRTRNLEdBQUc5UixFQUFFQSxFQUFFd25DLGdCQUFnQixJQUFJdGlELEVBQUV3aUQsS0FBSTl4RCxFQUFFK3hELEdBQUczbkMsR0FBR0MsRUFBRXdtQyxHQUFHdmhELEVBQUV0UCxHQUFHcXFCLEVBQUU2WSxRQUFRNVQsRUFBRSxNQUFTNE0sSUFBYzdSLEVBQUUzbUIsU0FBU3c0QixHQUFlLFFBQVo1TSxFQUFFMGhDLEdBQUc1bUMsRUFBRUMsRUFBRXJxQixNQUFjZ3lELEdBQUcxaUMsRUFBRWxGLEVBQUVwcUIsRUFBRXNQLEdBQUc0aEQsR0FBRzVoQyxFQUFFbEYsRUFBRXBxQixHQUFHLEVBQUVpeUQsb0JBQW9CLFNBQVM3bkMsRUFBRWtGLEVBQUU0TSxHQUFHOVIsRUFBRUEsRUFBRXduQyxnQkFBZ0IsSUFBSXRpRCxFQUFFd2lELEtBQUk5eEQsRUFBRSt4RCxHQUFHM25DLEdBQUdDLEVBQUV3bUMsR0FBR3ZoRCxFQUFFdFAsR0FBR3FxQixFQUFFMXNCLElBQUksRUFBRTBzQixFQUFFNlksUUFBUTVULEVBQUUsTUFBUzRNLElBQWM3UixFQUFFM21CLFNBQVN3NEIsR0FBZSxRQUFaNU0sRUFBRTBoQyxHQUFHNW1DLEVBQUVDLEVBQUVycUIsTUFBY2d5RCxHQUFHMWlDLEVBQUVsRixFQUFFcHFCLEVBQUVzUCxHQUFHNGhELEdBQUc1aEMsRUFBRWxGLEVBQUVwcUIsR0FBRyxFQUFFa3lELG1CQUFtQixTQUFTOW5DLEVBQUVrRixHQUFHbEYsRUFBRUEsRUFBRXduQyxnQkFBZ0IsSUFBSTExQixFQUFFNDFCLEtBQUl4aUQsRUFDbmZ5aUQsR0FBRzNuQyxHQUFHcHFCLEVBQUU2d0QsR0FBRzMwQixFQUFFNXNCLEdBQUd0UCxFQUFFckMsSUFBSSxFQUFFLE1BQVMyeEIsSUFBY3R2QixFQUFFMEQsU0FBUzRyQixHQUFlLFFBQVpBLEVBQUUwaEMsR0FBRzVtQyxFQUFFcHFCLEVBQUVzUCxNQUFjMGlELEdBQUcxaUMsRUFBRWxGLEVBQUU5YSxFQUFFNHNCLEdBQUdnMUIsR0FBRzVoQyxFQUFFbEYsRUFBRTlhLEdBQUcsR0FBRyxTQUFTNmlELEdBQUcvbkMsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxFQUFFcXFCLEVBQUV5ZSxHQUFpQixNQUFNLG1CQUFwQjFlLEVBQUVBLEVBQUVrcEIsV0FBc0M4ZSxzQkFBc0Job0MsRUFBRWdvQyxzQkFBc0I5aUQsRUFBRSthLEVBQUV5ZSxLQUFHeFosRUFBRXp3QixXQUFXeXdCLEVBQUV6d0IsVUFBVXd6RCxzQkFBc0JoTyxHQUFHbm9CLEVBQUU1c0IsSUFBSyswQyxHQUFHcmtELEVBQUVxcUIsR0FBSyxDQUMxUyxTQUFTaW9DLEdBQUdsb0MsRUFBRWtGLEVBQUU0TSxHQUFHLElBQUk1c0IsR0FBRSxFQUFHdFAsRUFBRXVyRCxHQUFPbGhDLEVBQUVpRixFQUFFMlgsWUFBMlcsTUFBL1YsaUJBQWtCNWMsR0FBRyxPQUFPQSxFQUFFQSxFQUFFdWxDLEdBQUd2bEMsSUFBSXJxQixFQUFFOHJELEdBQUd4OEIsR0FBR284QixHQUFHRixHQUFFMThDLFFBQXlCdWIsR0FBRy9hLEVBQUUsT0FBdEJBLEVBQUVnZ0IsRUFBRTRYLGVBQXdDeWtCLEdBQUd2aEMsRUFBRXBxQixHQUFHdXJELElBQUlqOEIsRUFBRSxJQUFJQSxFQUFFNE0sRUFBRTdSLEdBQUdELEVBQUV5cUIsY0FBYyxPQUFPdmxCLEVBQUU5TSxZQUFPLElBQVM4TSxFQUFFOU0sTUFBTThNLEVBQUU5TSxNQUFNLEtBQUs4TSxFQUFFaWpDLFFBQVFiLEdBQUd0bkMsRUFBRWtwQixVQUFVaGtCLEVBQUVBLEVBQUVzaUMsZ0JBQWdCeG5DLEVBQUU5YSxLQUFJOGEsRUFBRUEsRUFBRWtwQixXQUFZc1ksNENBQTRDNXJELEVBQUVvcUIsRUFBRXloQywwQ0FBMEN4aEMsR0FBVWlGLENBQUMsQ0FDNVosU0FBU2tqQyxHQUFHcG9DLEVBQUVrRixFQUFFNE0sRUFBRTVzQixHQUFHOGEsRUFBRWtGLEVBQUU5TSxNQUFNLG1CQUFvQjhNLEVBQUVtakMsMkJBQTJCbmpDLEVBQUVtakMsMEJBQTBCdjJCLEVBQUU1c0IsR0FBRyxtQkFBb0JnZ0IsRUFBRW9qQyxrQ0FBa0NwakMsRUFBRW9qQyxpQ0FBaUN4MkIsRUFBRTVzQixHQUFHZ2dCLEVBQUU5TSxRQUFRNEgsR0FBR3NuQyxHQUFHTyxvQkFBb0IzaUMsRUFBRUEsRUFBRTlNLE1BQU0sS0FBSyxDQUNwUSxTQUFTbXdDLEdBQUd2b0MsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUcsSUFBSXRQLEVBQUVvcUIsRUFBRWtwQixVQUFVdHpDLEVBQUVpQyxNQUFNaTZCLEVBQUVsOEIsRUFBRXdpQixNQUFNNEgsRUFBRXlxQixjQUFjNzBDLEVBQUV3eEQsS0FBS0QsR0FBR25CLEdBQUdobUMsR0FBRyxJQUFJQyxFQUFFaUYsRUFBRTJYLFlBQVksaUJBQWtCNWMsR0FBRyxPQUFPQSxFQUFFcnFCLEVBQUV5NkIsUUFBUW0xQixHQUFHdmxDLElBQUlBLEVBQUV5aEMsR0FBR3g4QixHQUFHbzhCLEdBQUdGLEdBQUUxOEMsUUFBUTlPLEVBQUV5NkIsUUFBUWt4QixHQUFHdmhDLEVBQUVDLElBQUlycUIsRUFBRXdpQixNQUFNNEgsRUFBRXlxQixjQUEyQyxtQkFBN0J4cUIsRUFBRWlGLEVBQUUrWCw0QkFBaURvcUIsR0FBR3JuQyxFQUFFa0YsRUFBRWpGLEVBQUU2UixHQUFHbDhCLEVBQUV3aUIsTUFBTTRILEVBQUV5cUIsZUFBZSxtQkFBb0J2bEIsRUFBRStYLDBCQUEwQixtQkFBb0JybkMsRUFBRTR5RCx5QkFBeUIsbUJBQW9CNXlELEVBQUU2eUQsMkJBQTJCLG1CQUFvQjd5RCxFQUFFOHlELHFCQUFxQnhqQyxFQUFFdHZCLEVBQUV3aUIsTUFDcmYsbUJBQW9CeGlCLEVBQUU4eUQsb0JBQW9COXlELEVBQUU4eUQscUJBQXFCLG1CQUFvQjl5RCxFQUFFNnlELDJCQUEyQjd5RCxFQUFFNnlELDRCQUE0QnZqQyxJQUFJdHZCLEVBQUV3aUIsT0FBT2t2QyxHQUFHTyxvQkFBb0JqeUQsRUFBRUEsRUFBRXdpQixNQUFNLE1BQU00dUMsR0FBR2huQyxFQUFFOFIsRUFBRWw4QixFQUFFc1AsR0FBR3RQLEVBQUV3aUIsTUFBTTRILEVBQUV5cUIsZUFBZSxtQkFBb0I3MEMsRUFBRSt5RCxvQkFBb0Izb0MsRUFBRXVxQixPQUFPLFFBQVEsQ0FDcFMsU0FBU3FlLEdBQUc1b0MsRUFBRWtGLEVBQUU0TSxHQUFXLEdBQUcsUUFBWDlSLEVBQUU4UixFQUFFdHpCLE1BQWlCLG1CQUFvQndoQixHQUFHLGlCQUFrQkEsRUFBRSxDQUFDLEdBQUc4UixFQUFFKzJCLE9BQU8sQ0FBWSxHQUFYLzJCLEVBQUVBLEVBQUUrMkIsT0FBWSxDQUFDLEdBQUcsSUFBSS8yQixFQUFFditCLElBQUksTUFBTWthLE1BQU1xWCxFQUFFLE1BQU0sSUFBSTVmLEVBQUU0c0IsRUFBRW9YLFNBQVMsQ0FBQyxJQUFJaGtDLEVBQUUsTUFBTXVJLE1BQU1xWCxFQUFFLElBQUk5RSxJQUFJLElBQUlwcUIsRUFBRXNQLEVBQUUrYSxFQUFFLEdBQUdELEVBQUUsT0FBRyxPQUFPa0YsR0FBRyxPQUFPQSxFQUFFMW1CLEtBQUssbUJBQW9CMG1CLEVBQUUxbUIsS0FBSzBtQixFQUFFMW1CLElBQUlzcUQsYUFBYTdvQyxFQUFTaUYsRUFBRTFtQixLQUFJMG1CLEVBQUUsU0FBU2xGLEdBQUcsSUFBSWtGLEVBQUV0dkIsRUFBRXd4RCxLQUFLbGlDLElBQUlpaUMsS0FBS2ppQyxFQUFFdHZCLEVBQUV3eEQsS0FBSyxDQUFDLEdBQUcsT0FBT3BuQyxTQUFTa0YsRUFBRWpGLEdBQUdpRixFQUFFakYsR0FBR0QsQ0FBQyxFQUFFa0YsRUFBRTRqQyxXQUFXN29DLEVBQVNpRixFQUFDLENBQUMsR0FBRyxpQkFBa0JsRixFQUFFLE1BQU12UyxNQUFNcVgsRUFBRSxNQUFNLElBQUlnTixFQUFFKzJCLE9BQU8sTUFBTXA3QyxNQUFNcVgsRUFBRSxJQUFJOUUsR0FBSSxDQUFDLE9BQU9BLENBQUMsQ0FDcmUsU0FBUytvQyxHQUFHL29DLEVBQUVrRixHQUF1QyxNQUFwQ2xGLEVBQUU1cEIsT0FBTzNCLFVBQVVxSyxTQUFTckMsS0FBS3lvQixHQUFTelgsTUFBTXFYLEVBQUUsR0FBRyxvQkFBb0I5RSxFQUFFLHFCQUFxQjVwQixPQUFPNFosS0FBS2tWLEdBQUd4ckIsS0FBSyxNQUFNLElBQUlzbUIsR0FBSSxDQUFDLFNBQVNncEMsR0FBR2hwQyxHQUFpQixPQUFPa0YsRUFBZmxGLEVBQUVra0IsT0FBZWxrQixFQUFFaWtCLFNBQVMsQ0FDck0sU0FBU2dsQixHQUFHanBDLEdBQUcsU0FBU2tGLEVBQUVBLEVBQUU0TSxHQUFHLEdBQUc5UixFQUFFLENBQUMsSUFBSTlhLEVBQUVnZ0IsRUFBRXcrQixVQUFVLE9BQU94K0MsR0FBR2dnQixFQUFFdytCLFVBQVUsQ0FBQzV4QixHQUFHNU0sRUFBRXFsQixPQUFPLElBQUlybEMsRUFBRWpSLEtBQUs2OUIsRUFBRSxDQUFDLENBQUMsU0FBU0EsRUFBRUEsRUFBRTVzQixHQUFHLElBQUk4YSxFQUFFLE9BQU8sS0FBSyxLQUFLLE9BQU85YSxHQUFHZ2dCLEVBQUU0TSxFQUFFNXNCLEdBQUdBLEVBQUVBLEVBQUU0bEMsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTNWxDLEVBQUU4YSxFQUFFa0YsR0FBRyxJQUFJbEYsRUFBRSxJQUFJNHVCLElBQUksT0FBTzFwQixHQUFHLE9BQU9BLEVBQUUzd0IsSUFBSXlyQixFQUFFcGtCLElBQUlzcEIsRUFBRTN3QixJQUFJMndCLEdBQUdsRixFQUFFcGtCLElBQUlzcEIsRUFBRXB1QixNQUFNb3VCLEdBQUdBLEVBQUVBLEVBQUU0bEIsUUFBUSxPQUFPOXFCLENBQUMsQ0FBQyxTQUFTcHFCLEVBQUVvcUIsRUFBRWtGLEdBQXNDLE9BQW5DbEYsRUFBRWtwQyxHQUFHbHBDLEVBQUVrRixJQUFLcHVCLE1BQU0sRUFBRWtwQixFQUFFOHFCLFFBQVEsS0FBWTlxQixDQUFDLENBQUMsU0FBU0MsRUFBRWlGLEVBQUU0TSxFQUFFNXNCLEdBQWEsT0FBVmdnQixFQUFFcHVCLE1BQU1vTyxFQUFNOGEsRUFBNkMsUUFBakI5YSxFQUFFZ2dCLEVBQUVvbEIsWUFBNkJwbEMsRUFBRUEsRUFBRXBPLE9BQVFnN0IsR0FBRzVNLEVBQUVxbEIsT0FBTyxFQUFFelksR0FBRzVzQixHQUFFZ2dCLEVBQUVxbEIsT0FBTyxFQUFTelksSUFBckc1TSxFQUFFcWxCLE9BQU8sUUFBUXpZLEVBQXFGLENBQUMsU0FBUzRNLEVBQUV4WixHQUN6ZCxPQUQ0ZGxGLEdBQzdmLE9BQU9rRixFQUFFb2xCLFlBQVlwbEIsRUFBRXFsQixPQUFPLEdBQVVybEIsQ0FBQyxDQUFDLFNBQVN0bUIsRUFBRW9oQixFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBRyxPQUFHLE9BQU9nZ0IsR0FBRyxJQUFJQSxFQUFFM3hCLE1BQVcyeEIsRUFBRWlrQyxHQUFHcjNCLEVBQUU5UixFQUFFdFMsS0FBS3hJLElBQUtuTixPQUFPaW9CLEVBQUVrRixLQUFFQSxFQUFFdHZCLEVBQUVzdkIsRUFBRTRNLElBQUsvNUIsT0FBT2lvQixFQUFTa0YsRUFBQyxDQUFDLFNBQVNocUIsRUFBRThrQixFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBRyxJQUFJK2EsRUFBRTZSLEVBQUVsNkIsS0FBSyxPQUFHcW9CLElBQUl1aUIsRUFBVTNkLEVBQUU3RSxFQUFFa0YsRUFBRTRNLEVBQUVqNkIsTUFBTUMsU0FBU29OLEVBQUU0c0IsRUFBRXY5QixLQUFRLE9BQU8yd0IsSUFBSUEsRUFBRXUrQixjQUFjeGpDLEdBQUcsaUJBQWtCQSxHQUFHLE9BQU9BLEdBQUdBLEVBQUU0ZSxXQUFXb0UsR0FBSStsQixHQUFHL29DLEtBQUtpRixFQUFFdHRCLFFBQWFzTixFQUFFdFAsRUFBRXN2QixFQUFFNE0sRUFBRWo2QixRQUFTMkcsSUFBSW9xRCxHQUFHNW9DLEVBQUVrRixFQUFFNE0sR0FBRzVzQixFQUFFbk4sT0FBT2lvQixFQUFFOWEsS0FBRUEsRUFBRWtrRCxHQUFHdDNCLEVBQUVsNkIsS0FBS2s2QixFQUFFdjlCLElBQUl1OUIsRUFBRWo2QixNQUFNLEtBQUttb0IsRUFBRXRTLEtBQUt4SSxJQUFLMUcsSUFBSW9xRCxHQUFHNW9DLEVBQUVrRixFQUFFNE0sR0FBRzVzQixFQUFFbk4sT0FBT2lvQixFQUFTOWEsRUFBQyxDQUFDLFNBQVM2YSxFQUFFQyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBRyxPQUFHLE9BQU9nZ0IsR0FBRyxJQUFJQSxFQUFFM3hCLEtBQ2pmMnhCLEVBQUVna0IsVUFBVTJHLGdCQUFnQi9kLEVBQUUrZCxlQUFlM3FCLEVBQUVna0IsVUFBVW1nQixpQkFBaUJ2M0IsRUFBRXUzQixpQkFBc0Jua0MsRUFBRW9rQyxHQUFHeDNCLEVBQUU5UixFQUFFdFMsS0FBS3hJLElBQUtuTixPQUFPaW9CLEVBQUVrRixLQUFFQSxFQUFFdHZCLEVBQUVzdkIsRUFBRTRNLEVBQUVoNkIsVUFBVSxLQUFNQyxPQUFPaW9CLEVBQVNrRixFQUFDLENBQUMsU0FBU0wsRUFBRTdFLEVBQUVrRixFQUFFNE0sRUFBRTVzQixFQUFFK2EsR0FBRyxPQUFHLE9BQU9pRixHQUFHLElBQUlBLEVBQUUzeEIsTUFBVzJ4QixFQUFFcWtDLEdBQUd6M0IsRUFBRTlSLEVBQUV0UyxLQUFLeEksRUFBRSthLElBQUtsb0IsT0FBT2lvQixFQUFFa0YsS0FBRUEsRUFBRXR2QixFQUFFc3ZCLEVBQUU0TSxJQUFLLzVCLE9BQU9pb0IsRUFBU2tGLEVBQUMsQ0FBQyxTQUFTeVosRUFBRTNlLEVBQUVrRixFQUFFNE0sR0FBRyxHQUFHLGlCQUFrQjVNLEdBQUcsS0FBS0EsR0FBRyxpQkFBa0JBLEVBQUUsT0FBT0EsRUFBRWlrQyxHQUFHLEdBQUdqa0MsRUFBRWxGLEVBQUV0UyxLQUFLb2tCLElBQUsvNUIsT0FBT2lvQixFQUFFa0YsRUFBRSxHQUFHLGlCQUFrQkEsR0FBRyxPQUFPQSxFQUFFLENBQUMsT0FBT0EsRUFBRTJaLFVBQVUsS0FBS3lELEVBQUcsT0FBT3hRLEVBQUVzM0IsR0FBR2xrQyxFQUFFdHRCLEtBQUtzdEIsRUFBRTN3QixJQUFJMndCLEVBQUVydEIsTUFBTSxLQUFLbW9CLEVBQUV0UyxLQUFLb2tCLElBQ2pmdHpCLElBQUlvcUQsR0FBRzVvQyxFQUFFLEtBQUtrRixHQUFHNE0sRUFBRS81QixPQUFPaW9CLEVBQUU4UixFQUFFLEtBQUt5USxFQUFHLE9BQU9yZCxFQUFFb2tDLEdBQUdwa0MsRUFBRWxGLEVBQUV0UyxLQUFLb2tCLElBQUsvNUIsT0FBT2lvQixFQUFFa0YsRUFBRSxLQUFLK2QsRUFBaUIsT0FBT3RFLEVBQUUzZSxHQUFFOWEsRUFBbkJnZ0IsRUFBRWdmLE9BQW1CaGYsRUFBRStlLFVBQVVuUyxHQUFHLEdBQUc0VCxHQUFHeGdCLElBQUltZSxFQUFHbmUsR0FBRyxPQUFPQSxFQUFFcWtDLEdBQUdya0MsRUFBRWxGLEVBQUV0UyxLQUFLb2tCLEVBQUUsT0FBUS81QixPQUFPaW9CLEVBQUVrRixFQUFFNmpDLEdBQUcvb0MsRUFBRWtGLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTRCxFQUFFakYsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUcsSUFBSXRQLEVBQUUsT0FBT3N2QixFQUFFQSxFQUFFM3dCLElBQUksS0FBSyxHQUFHLGlCQUFrQnU5QixHQUFHLEtBQUtBLEdBQUcsaUJBQWtCQSxFQUFFLE9BQU8sT0FBT2w4QixFQUFFLEtBQUtnSixFQUFFb2hCLEVBQUVrRixFQUFFLEdBQUc0TSxFQUFFNXNCLEdBQUcsR0FBRyxpQkFBa0I0c0IsR0FBRyxPQUFPQSxFQUFFLENBQUMsT0FBT0EsRUFBRStNLFVBQVUsS0FBS3lELEVBQUcsT0FBT3hRLEVBQUV2OUIsTUFBTXFCLEVBQUVzRixFQUFFOGtCLEVBQUVrRixFQUFFNE0sRUFBRTVzQixHQUFHLEtBQUssS0FBS3E5QixFQUFHLE9BQU96USxFQUFFdjlCLE1BQU1xQixFQUFFbXFCLEVBQUVDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixHQUFHLEtBQUssS0FBSys5QixFQUFHLE9BQWlCaGUsRUFBRWpGLEVBQ3Bma0YsR0FEd2V0dkIsRUFBRWs4QixFQUFFb1MsT0FDeGVwUyxFQUFFbVMsVUFBVS8rQixHQUFHLEdBQUd3Z0MsR0FBRzVULElBQUl1UixFQUFHdlIsR0FBRyxPQUFPLE9BQU9sOEIsRUFBRSxLQUFLaXZCLEVBQUU3RSxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRSxNQUFNNmpELEdBQUcvb0MsRUFBRThSLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTMTJCLEVBQUU0a0IsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxHQUFHLEdBQUcsaUJBQWtCc1AsR0FBRyxLQUFLQSxHQUFHLGlCQUFrQkEsRUFBRSxPQUF3QnRHLEVBQUVzbUIsRUFBbkJsRixFQUFFQSxFQUFFcmtCLElBQUltMkIsSUFBSSxLQUFXLEdBQUc1c0IsRUFBRXRQLEdBQUcsR0FBRyxpQkFBa0JzUCxHQUFHLE9BQU9BLEVBQUUsQ0FBQyxPQUFPQSxFQUFFMjVCLFVBQVUsS0FBS3lELEVBQUcsT0FBMkNwbkMsRUFBRWdxQixFQUF0Q2xGLEVBQUVBLEVBQUVya0IsSUFBSSxPQUFPdUosRUFBRTNRLElBQUl1OUIsRUFBRTVzQixFQUFFM1EsTUFBTSxLQUFXMlEsRUFBRXRQLEdBQUcsS0FBSzJzQyxFQUFHLE9BQTJDeGlCLEVBQUVtRixFQUF0Q2xGLEVBQUVBLEVBQUVya0IsSUFBSSxPQUFPdUosRUFBRTNRLElBQUl1OUIsRUFBRTVzQixFQUFFM1EsTUFBTSxLQUFXMlEsRUFBRXRQLEdBQUcsS0FBS3F0QyxFQUFpQixPQUFPN25DLEVBQUU0a0IsRUFBRWtGLEVBQUU0TSxHQUFFN1IsRUFBdkIvYSxFQUFFZy9CLE9BQXVCaC9CLEVBQUUrK0IsVUFBVXJ1QyxHQUFHLEdBQUc4dkMsR0FBR3hnQyxJQUFJbStCLEVBQUduK0IsR0FBRyxPQUF3QjJmLEVBQUVLLEVBQW5CbEYsRUFBRUEsRUFBRXJrQixJQUFJbTJCLElBQUksS0FBVzVzQixFQUFFdFAsRUFBRSxNQUFNbXpELEdBQUc3akMsRUFBRWhnQixFQUFFLENBQUMsT0FBTyxJQUFJLENBQzlmLFNBQVNpYSxFQUFFdnBCLEVBQUU4b0MsRUFBRTkvQixFQUFFMUQsR0FBRyxJQUFJLElBQUk2a0IsRUFBRSxLQUFLOEUsRUFBRSxLQUFLK1osRUFBRUYsRUFBRXhpQixFQUFFd2lCLEVBQUUsRUFBRXZqQyxFQUFFLEtBQUssT0FBT3lqQyxHQUFHMWlCLEVBQUV0ZCxFQUFFbEwsT0FBT3dvQixJQUFJLENBQUMwaUIsRUFBRTluQyxNQUFNb2xCLEdBQUcvZ0IsRUFBRXlqQyxFQUFFQSxFQUFFLE1BQU16akMsRUFBRXlqQyxFQUFFa00sUUFBUSxJQUFJM3JCLEVBQUU4RixFQUFFcnZCLEVBQUVncEMsRUFBRWhnQyxFQUFFc2QsR0FBR2hoQixHQUFHLEdBQUcsT0FBT2lrQixFQUFFLENBQUMsT0FBT3lmLElBQUlBLEVBQUV6akMsR0FBRyxLQUFLLENBQUM2a0IsR0FBRzRlLEdBQUcsT0FBT3pmLEVBQUVtckIsV0FBV3BsQixFQUFFdHZCLEVBQUVncEMsR0FBR0YsRUFBRXplLEVBQUVkLEVBQUV1ZixFQUFFeGlCLEdBQUcsT0FBTzJJLEVBQUU5RSxFQUFFWixFQUFFMEYsRUFBRWltQixRQUFRM3JCLEVBQUUwRixFQUFFMUYsRUFBRXlmLEVBQUV6akMsQ0FBQyxDQUFDLEdBQUcrZ0IsSUFBSXRkLEVBQUVsTCxPQUFPLE9BQU9vK0IsRUFBRWw4QixFQUFFZ3BDLEdBQUd5a0IsSUFBR04sR0FBR250RCxFQUFFc21CLEdBQUc2RCxFQUFFLEdBQUcsT0FBTzZlLEVBQUUsQ0FBQyxLQUFLMWlCLEVBQUV0ZCxFQUFFbEwsT0FBT3dvQixJQUFrQixRQUFkMGlCLEVBQUVELEVBQUUvb0MsRUFBRWdKLEVBQUVzZCxHQUFHaGhCLE1BQWN3akMsRUFBRXplLEVBQUUyZSxFQUFFRixFQUFFeGlCLEdBQUcsT0FBTzJJLEVBQUU5RSxFQUFFNmUsRUFBRS9aLEVBQUVpbUIsUUFBUWxNLEVBQUUvWixFQUFFK1osR0FBYyxPQUFYeWtCLElBQUdOLEdBQUdudEQsRUFBRXNtQixHQUFVNkQsQ0FBQyxDQUFDLElBQUk2ZSxFQUFFMTVCLEVBQUV0UCxFQUFFZ3BDLEdBQUcxaUIsRUFBRXRkLEVBQUVsTCxPQUFPd29CLElBQXNCLFFBQWxCL2dCLEVBQUVDLEVBQUV3akMsRUFBRWhwQyxFQUFFc21CLEVBQUV0ZCxFQUFFc2QsR0FBR2hoQixNQUFjOGtCLEdBQUcsT0FBTzdrQixFQUFFbXZDLFdBQVcxTCxFQUFFcVEsT0FBTyxPQUN2Zjl6QyxFQUFFNUcsSUFBSTJuQixFQUFFL2dCLEVBQUU1RyxLQUFLbXFDLEVBQUV6ZSxFQUFFOWtCLEVBQUV1akMsRUFBRXhpQixHQUFHLE9BQU8ySSxFQUFFOUUsRUFBRTVrQixFQUFFMHBCLEVBQUVpbUIsUUFBUTN2QyxFQUFFMHBCLEVBQUUxcEIsR0FBdUQsT0FBcEQ2a0IsR0FBRzRlLEVBQUVocUMsU0FBUSxTQUFTb3JCLEdBQUcsT0FBT2tGLEVBQUV0dkIsRUFBRW9xQixFQUFFLElBQUdxakMsSUFBR04sR0FBR250RCxFQUFFc21CLEdBQVU2RCxDQUFDLENBQUMsU0FBU2lGLEVBQUVwdkIsRUFBRThvQyxFQUFFOS9CLEVBQUUxRCxHQUFHLElBQUk2a0IsRUFBRXNqQixFQUFHemtDLEdBQUcsR0FBRyxtQkFBb0JtaEIsRUFBRSxNQUFNdFMsTUFBTXFYLEVBQUUsTUFBa0IsR0FBRyxPQUFmbG1CLEVBQUVtaEIsRUFBRXRqQixLQUFLbUMsSUFBYyxNQUFNNk8sTUFBTXFYLEVBQUUsTUFBTSxJQUFJLElBQUk4WixFQUFFN2UsRUFBRSxLQUFLOEUsRUFBRTZaLEVBQUV4aUIsRUFBRXdpQixFQUFFLEVBQUV2akMsRUFBRSxLQUFLZ2tCLEVBQUV2Z0IsRUFBRTFHLE9BQU8sT0FBTzJzQixJQUFJMUYsRUFBRW9OLEtBQUtyUSxJQUFJaUQsRUFBRXZnQixFQUFFMUcsT0FBTyxDQUFDMnNCLEVBQUUvdEIsTUFBTW9sQixHQUFHL2dCLEVBQUUwcEIsRUFBRUEsRUFBRSxNQUFNMXBCLEVBQUUwcEIsRUFBRWltQixRQUFRLElBQUk5bEIsRUFBRUMsRUFBRXJ2QixFQUFFaXZCLEVBQUUxRixFQUFFNW9CLE1BQU0yRSxHQUFHLEdBQUcsT0FBTzhwQixFQUFFLENBQUMsT0FBT0gsSUFBSUEsRUFBRTFwQixHQUFHLEtBQUssQ0FBQzZrQixHQUFHNkUsR0FBRyxPQUFPRyxFQUFFc2xCLFdBQVdwbEIsRUFBRXR2QixFQUFFaXZCLEdBQUc2WixFQUFFemUsRUFBRStFLEVBQUUwWixFQUFFeGlCLEdBQUcsT0FBTzBpQixFQUFFN2UsRUFBRWlGLEVBQUU0WixFQUFFa00sUUFBUTlsQixFQUFFNFosRUFBRTVaLEVBQUVILEVBQUUxcEIsQ0FBQyxDQUFDLEdBQUdna0IsRUFBRW9OLEtBQUssT0FBT3VGLEVBQUVsOEIsRUFDemZpdkIsR0FBR3crQixJQUFHTixHQUFHbnRELEVBQUVzbUIsR0FBRzZELEVBQUUsR0FBRyxPQUFPOEUsRUFBRSxDQUFDLE1BQU0xRixFQUFFb04sS0FBS3JRLElBQUlpRCxFQUFFdmdCLEVBQUUxRyxPQUF3QixRQUFqQmluQixFQUFFd2YsRUFBRS9vQyxFQUFFdXBCLEVBQUU1b0IsTUFBTTJFLE1BQWN3akMsRUFBRXplLEVBQUVkLEVBQUV1ZixFQUFFeGlCLEdBQUcsT0FBTzBpQixFQUFFN2UsRUFBRVosRUFBRXlmLEVBQUVrTSxRQUFRM3JCLEVBQUV5ZixFQUFFemYsR0FBYyxPQUFYa2tDLElBQUdOLEdBQUdudEQsRUFBRXNtQixHQUFVNkQsQ0FBQyxDQUFDLElBQUk4RSxFQUFFM2YsRUFBRXRQLEVBQUVpdkIsSUFBSTFGLEVBQUVvTixLQUFLclEsSUFBSWlELEVBQUV2Z0IsRUFBRTFHLE9BQTRCLFFBQXJCaW5CLEVBQUUvakIsRUFBRXlwQixFQUFFanZCLEVBQUVzbUIsRUFBRWlELEVBQUU1b0IsTUFBTTJFLE1BQWM4a0IsR0FBRyxPQUFPYixFQUFFbXJCLFdBQVd6bEIsRUFBRW9xQixPQUFPLE9BQU85dkIsRUFBRTVxQixJQUFJMm5CLEVBQUVpRCxFQUFFNXFCLEtBQUttcUMsRUFBRXplLEVBQUVkLEVBQUV1ZixFQUFFeGlCLEdBQUcsT0FBTzBpQixFQUFFN2UsRUFBRVosRUFBRXlmLEVBQUVrTSxRQUFRM3JCLEVBQUV5ZixFQUFFemYsR0FBdUQsT0FBcERhLEdBQUc2RSxFQUFFandCLFNBQVEsU0FBU29yQixHQUFHLE9BQU9rRixFQUFFdHZCLEVBQUVvcUIsRUFBRSxJQUFHcWpDLElBQUdOLEdBQUdudEQsRUFBRXNtQixHQUFVNkQsQ0FBQyxDQUczVCxPQUg0VCxTQUFTdytCLEVBQUV2K0IsRUFBRTlhLEVBQUUrYSxFQUFFcmhCLEdBQWtGLEdBQS9FLGlCQUFrQnFoQixHQUFHLE9BQU9BLEdBQUdBLEVBQUVyb0IsT0FBTzRxQyxHQUFJLE9BQU92aUIsRUFBRTFyQixNQUFNMHJCLEVBQUVBLEVBQUVwb0IsTUFBTUMsVUFBYSxpQkFBa0Jtb0IsR0FBRyxPQUFPQSxFQUFFLENBQUMsT0FBT0EsRUFBRTRlLFVBQVUsS0FBS3lELEVBQUd0aUIsRUFBRSxDQUFDLElBQUksSUFBSTlrQixFQUM3aEIra0IsRUFBRTFyQixJQUFJd3JCLEVBQUU3YSxFQUFFLE9BQU82YSxHQUFHLENBQUMsR0FBR0EsRUFBRXhyQixNQUFNMkcsRUFBRSxDQUFVLElBQVRBLEVBQUUra0IsRUFBRXJvQixRQUFZNHFDLEdBQUksR0FBRyxJQUFJemlCLEVBQUV4c0IsSUFBSSxDQUFDdStCLEVBQUU5UixFQUFFRCxFQUFFK3FCLFVBQVM1bEMsRUFBRXRQLEVBQUVtcUIsRUFBRUUsRUFBRXBvQixNQUFNQyxXQUFZQyxPQUFPaW9CLEVBQUVBLEVBQUU5YSxFQUFFLE1BQU04YSxDQUFDLE9BQU8sR0FBR0QsRUFBRTBqQyxjQUFjdm9ELEdBQUcsaUJBQWtCQSxHQUFHLE9BQU9BLEdBQUdBLEVBQUUyakMsV0FBV29FLEdBQUkrbEIsR0FBRzl0RCxLQUFLNmtCLEVBQUVub0IsS0FBSyxDQUFDazZCLEVBQUU5UixFQUFFRCxFQUFFK3FCLFVBQVM1bEMsRUFBRXRQLEVBQUVtcUIsRUFBRUUsRUFBRXBvQixRQUFTMkcsSUFBSW9xRCxHQUFHNW9DLEVBQUVELEVBQUVFLEdBQUcvYSxFQUFFbk4sT0FBT2lvQixFQUFFQSxFQUFFOWEsRUFBRSxNQUFNOGEsQ0FBQyxDQUFDOFIsRUFBRTlSLEVBQUVELEdBQUcsS0FBSyxDQUFNbUYsRUFBRWxGLEVBQUVELEdBQUdBLEVBQUVBLEVBQUUrcUIsT0FBTyxDQUFDN3FCLEVBQUVyb0IsT0FBTzRxQyxJQUFJdDlCLEVBQUVxa0QsR0FBR3RwQyxFQUFFcG9CLE1BQU1DLFNBQVNrb0IsRUFBRXRTLEtBQUs5TyxFQUFFcWhCLEVBQUUxckIsTUFBT3dELE9BQU9pb0IsRUFBRUEsRUFBRTlhLEtBQUl0RyxFQUFFd3FELEdBQUducEMsRUFBRXJvQixLQUFLcW9CLEVBQUUxckIsSUFBSTByQixFQUFFcG9CLE1BQU0sS0FBS21vQixFQUFFdFMsS0FBSzlPLElBQUtKLElBQUlvcUQsR0FBRzVvQyxFQUFFOWEsRUFBRSthLEdBQUdyaEIsRUFBRTdHLE9BQU9pb0IsRUFBRUEsRUFBRXBoQixFQUFFLENBQUMsT0FBTzgvQixFQUFFMWUsR0FBRyxLQUFLdWlCLEVBQUd2aUIsRUFBRSxDQUFDLElBQUlELEVBQUVFLEVBQUUxckIsSUFBSSxPQUN6ZjJRLEdBQUcsQ0FBQyxHQUFHQSxFQUFFM1EsTUFBTXdyQixFQUFFLElBQUcsSUFBSTdhLEVBQUUzUixLQUFLMlIsRUFBRWdrQyxVQUFVMkcsZ0JBQWdCNXZCLEVBQUU0dkIsZUFBZTNxQyxFQUFFZ2tDLFVBQVVtZ0IsaUJBQWlCcHBDLEVBQUVvcEMsZUFBZSxDQUFDdjNCLEVBQUU5UixFQUFFOWEsRUFBRTRsQyxVQUFTNWxDLEVBQUV0UCxFQUFFc1AsRUFBRSthLEVBQUVub0IsVUFBVSxLQUFNQyxPQUFPaW9CLEVBQUVBLEVBQUU5YSxFQUFFLE1BQU04YSxDQUFDLENBQU04UixFQUFFOVIsRUFBRTlhLEdBQUcsS0FBSyxDQUFNZ2dCLEVBQUVsRixFQUFFOWEsR0FBR0EsRUFBRUEsRUFBRTRsQyxPQUFPLEVBQUM1bEMsRUFBRW9rRCxHQUFHcnBDLEVBQUVELEVBQUV0UyxLQUFLOU8sSUFBSzdHLE9BQU9pb0IsRUFBRUEsRUFBRTlhLENBQUMsQ0FBQyxPQUFPdzVCLEVBQUUxZSxHQUFHLEtBQUtpakIsRUFBRyxPQUFpQnNiLEVBQUV2K0IsRUFBRTlhLEdBQWQ2YSxFQUFFRSxFQUFFaWtCLE9BQWNqa0IsRUFBRWdrQixVQUFVcmxDLEdBQUcsR0FBRzhtQyxHQUFHemxCLEdBQUcsT0FBT2QsRUFBRWEsRUFBRTlhLEVBQUUrYSxFQUFFcmhCLEdBQUcsR0FBR3lrQyxFQUFHcGpCLEdBQUcsT0FBTytFLEVBQUVoRixFQUFFOWEsRUFBRSthLEVBQUVyaEIsR0FBR21xRCxHQUFHL29DLEVBQUVDLEVBQUUsQ0FBQyxNQUFNLGlCQUFrQkEsR0FBRyxLQUFLQSxHQUFHLGlCQUFrQkEsR0FBR0EsRUFBRSxHQUFHQSxFQUFFLE9BQU8vYSxHQUFHLElBQUlBLEVBQUUzUixLQUFLdStCLEVBQUU5UixFQUFFOWEsRUFBRTRsQyxVQUFTNWxDLEVBQUV0UCxFQUFFc1AsRUFBRSthLElBQUtsb0IsT0FBT2lvQixFQUFFQSxFQUFFOWEsSUFDbmY0c0IsRUFBRTlSLEVBQUU5YSxJQUFHQSxFQUFFaWtELEdBQUdscEMsRUFBRUQsRUFBRXRTLEtBQUs5TyxJQUFLN0csT0FBT2lvQixFQUFFQSxFQUFFOWEsR0FBR3c1QixFQUFFMWUsSUFBSThSLEVBQUU5UixFQUFFOWEsRUFBRSxDQUFTLENBQUMsSUFBSXNrRCxHQUFHUCxJQUFHLEdBQUlRLEdBQUdSLElBQUcsR0FBSVMsR0FBRyxDQUFDLEVBQUVDLEdBQUczSSxHQUFHMEksSUFBSUUsR0FBRzVJLEdBQUcwSSxJQUFJRyxHQUFHN0ksR0FBRzBJLElBQUksU0FBU0ksR0FBRzlwQyxHQUFHLEdBQUdBLElBQUkwcEMsR0FBRyxNQUFNajhDLE1BQU1xWCxFQUFFLE1BQU0sT0FBTzlFLENBQUMsQ0FBQyxTQUFTK3BDLEdBQUcvcEMsRUFBRWtGLEdBQXlDLE9BQXRDZzhCLEdBQUUySSxHQUFHM2tDLEdBQUdnOEIsR0FBRTBJLEdBQUc1cEMsR0FBR2toQyxHQUFFeUksR0FBR0QsSUFBSTFwQyxFQUFFa0YsRUFBRTRoQixVQUFtQixLQUFLLEVBQUUsS0FBSyxHQUFHNWhCLEdBQUdBLEVBQUVBLEVBQUU2MUIsaUJBQWlCNzFCLEVBQUVxaEIsYUFBYUgsR0FBRyxLQUFLLElBQUksTUFBTSxRQUFrRWxoQixFQUFFa2hCLEdBQXJDbGhCLEdBQXZCbEYsRUFBRSxJQUFJQSxFQUFFa0YsRUFBRXB2QixXQUFXb3ZCLEdBQU1xaEIsY0FBYyxLQUFLdm1CLEVBQUVBLEVBQUUxRixTQUFrQjJtQyxHQUFFMEksSUFBSXpJLEdBQUV5SSxHQUFHemtDLEVBQUUsQ0FBQyxTQUFTOGtDLEtBQUsvSSxHQUFFMEksSUFBSTFJLEdBQUUySSxJQUFJM0ksR0FBRTRJLEdBQUcsQ0FDbmIsU0FBU0ksR0FBR2pxQyxHQUFHOHBDLEdBQUdELEdBQUdubEQsU0FBUyxJQUFJd2dCLEVBQUU0a0MsR0FBR0gsR0FBR2psRCxTQUFhb3RCLEVBQUVzVSxHQUFHbGhCLEVBQUVsRixFQUFFcG9CLE1BQU1zdEIsSUFBSTRNLElBQUlvdkIsR0FBRTBJLEdBQUc1cEMsR0FBR2toQyxHQUFFeUksR0FBRzczQixHQUFHLENBQUMsU0FBU280QixHQUFHbHFDLEdBQUc0cEMsR0FBR2xsRCxVQUFVc2IsSUFBSWloQyxHQUFFMEksSUFBSTFJLEdBQUUySSxJQUFJLENBQUMsSUFBSU8sR0FBRW5KLEdBQUcsR0FDckosU0FBU29KLEdBQUdwcUMsR0FBRyxJQUFJLElBQUlrRixFQUFFbEYsRUFBRSxPQUFPa0YsR0FBRyxDQUFDLEdBQUcsS0FBS0EsRUFBRTN4QixJQUFJLENBQUMsSUFBSXUrQixFQUFFNU0sRUFBRXVsQixjQUFjLEdBQUcsT0FBTzNZLElBQW1CLFFBQWZBLEVBQUVBLEVBQUU0WSxhQUFxQixPQUFPNVksRUFBRTNGLE1BQU0sT0FBTzJGLEVBQUUzRixNQUFNLE9BQU9qSCxDQUFDLE1BQU0sR0FBRyxLQUFLQSxFQUFFM3hCLFVBQUssSUFBUzJ4QixFQUFFay9CLGNBQWNpRyxhQUFhLEdBQUcsSUFBYSxJQUFSbmxDLEVBQUVxbEIsT0FBVyxPQUFPcmxCLE9BQU8sR0FBRyxPQUFPQSxFQUFFMmxCLE1BQU0sQ0FBQzNsQixFQUFFMmxCLE1BQU05eUMsT0FBT210QixFQUFFQSxFQUFFQSxFQUFFMmxCLE1BQU0sUUFBUSxDQUFDLEdBQUczbEIsSUFBSWxGLEVBQUUsTUFBTSxLQUFLLE9BQU9rRixFQUFFNGxCLFNBQVMsQ0FBQyxHQUFHLE9BQU81bEIsRUFBRW50QixRQUFRbXRCLEVBQUVudEIsU0FBU2lvQixFQUFFLE9BQU8sS0FBS2tGLEVBQUVBLEVBQUVudEIsTUFBTSxDQUFDbXRCLEVBQUU0bEIsUUFBUS95QyxPQUFPbXRCLEVBQUVudEIsT0FBT210QixFQUFFQSxFQUFFNGxCLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJd2YsR0FBRyxHQUNyYyxTQUFTQyxLQUFLLElBQUksSUFBSXZxQyxFQUFFLEVBQUVBLEVBQUVzcUMsR0FBRzUyRCxPQUFPc3NCLElBQUlzcUMsR0FBR3RxQyxHQUFHd3FDLDhCQUE4QixLQUFLRixHQUFHNTJELE9BQU8sQ0FBQyxDQUFDLElBQUkrMkQsR0FBR3JvQixFQUFHc29CLHVCQUF1QkMsR0FBR3ZvQixFQUFHa08sd0JBQXdCc2EsR0FBRyxFQUFFQyxHQUFFLEtBQUtDLEdBQUUsS0FBS0MsR0FBRSxLQUFLQyxJQUFHLEVBQUdDLElBQUcsRUFBR0MsR0FBRyxFQUFFQyxHQUFHLEVBQUUsU0FBU0MsS0FBSSxNQUFNMzlDLE1BQU1xWCxFQUFFLEtBQU0sQ0FBQyxTQUFTdW1DLEdBQUdyckMsRUFBRWtGLEdBQUcsR0FBRyxPQUFPQSxFQUFFLE9BQU0sRUFBRyxJQUFJLElBQUk0TSxFQUFFLEVBQUVBLEVBQUU1TSxFQUFFeHhCLFFBQVFvK0IsRUFBRTlSLEVBQUV0c0IsT0FBT28rQixJQUFJLElBQUlrb0IsR0FBR2g2QixFQUFFOFIsR0FBRzVNLEVBQUU0TSxJQUFJLE9BQU0sRUFBRyxPQUFNLENBQUUsQ0FDaFcsU0FBU3c1QixHQUFHdHJDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixFQUFFdFAsRUFBRXFxQixHQUF5SCxHQUF0SDJxQyxHQUFHM3FDLEVBQUU0cUMsR0FBRTNsQyxFQUFFQSxFQUFFdWxCLGNBQWMsS0FBS3ZsQixFQUFFK2dDLFlBQVksS0FBSy9nQyxFQUFFb2dDLE1BQU0sRUFBRW1GLEdBQUcvbEQsUUFBUSxPQUFPc2IsR0FBRyxPQUFPQSxFQUFFeXFCLGNBQWM4Z0IsR0FBR0MsR0FBR3hyQyxFQUFFOFIsRUFBRTVzQixFQUFFdFAsR0FBTXExRCxHQUFHLENBQUNockMsRUFBRSxFQUFFLEVBQUUsQ0FBWSxHQUFYZ3JDLElBQUcsRUFBR0MsR0FBRyxFQUFLLElBQUlqckMsRUFBRSxNQUFNeFMsTUFBTXFYLEVBQUUsTUFBTTdFLEdBQUcsRUFBRThxQyxHQUFFRCxHQUFFLEtBQUs1bEMsRUFBRStnQyxZQUFZLEtBQUt3RSxHQUFHL2xELFFBQVErbUQsR0FBR3pyQyxFQUFFOFIsRUFBRTVzQixFQUFFdFAsRUFBRSxPQUFPcTFELEdBQUcsQ0FBK0QsR0FBOURSLEdBQUcvbEQsUUFBUWduRCxHQUFHeG1DLEVBQUUsT0FBTzRsQyxJQUFHLE9BQU9BLEdBQUU1eUQsS0FBSzB5RCxHQUFHLEVBQUVHLEdBQUVELEdBQUVELEdBQUUsS0FBS0csSUFBRyxFQUFNOWxDLEVBQUUsTUFBTXpYLE1BQU1xWCxFQUFFLE1BQU0sT0FBTzlFLENBQUMsQ0FBQyxTQUFTMnJDLEtBQUssSUFBSTNyQyxFQUFFLElBQUlrckMsR0FBUSxPQUFMQSxHQUFHLEVBQVNsckMsQ0FBQyxDQUMvWSxTQUFTNHJDLEtBQUssSUFBSTVyQyxFQUFFLENBQUN5cUIsY0FBYyxLQUFLeWIsVUFBVSxLQUFLMkYsVUFBVSxLQUFLQyxNQUFNLEtBQUs1ekQsS0FBSyxNQUE4QyxPQUF4QyxPQUFPNnlELEdBQUVGLEdBQUVwZ0IsY0FBY3NnQixHQUFFL3FDLEVBQUUrcUMsR0FBRUEsR0FBRTd5RCxLQUFLOG5CLEVBQVMrcUMsRUFBQyxDQUFDLFNBQVNnQixLQUFLLEdBQUcsT0FBT2pCLEdBQUUsQ0FBQyxJQUFJOXFDLEVBQUU2cUMsR0FBRXZnQixVQUFVdHFCLEVBQUUsT0FBT0EsRUFBRUEsRUFBRXlxQixjQUFjLElBQUksTUFBTXpxQixFQUFFOHFDLEdBQUU1eUQsS0FBSyxJQUFJZ3RCLEVBQUUsT0FBTzZsQyxHQUFFRixHQUFFcGdCLGNBQWNzZ0IsR0FBRTd5RCxLQUFLLEdBQUcsT0FBT2d0QixFQUFFNmxDLEdBQUU3bEMsRUFBRTRsQyxHQUFFOXFDLE1BQU0sQ0FBQyxHQUFHLE9BQU9BLEVBQUUsTUFBTXZTLE1BQU1xWCxFQUFFLE1BQVU5RSxFQUFFLENBQUN5cUIsZUFBUHFnQixHQUFFOXFDLEdBQXFCeXFCLGNBQWN5YixVQUFVNEUsR0FBRTVFLFVBQVUyRixVQUFVZixHQUFFZSxVQUFVQyxNQUFNaEIsR0FBRWdCLE1BQU01ekQsS0FBSyxNQUFNLE9BQU82eUQsR0FBRUYsR0FBRXBnQixjQUFjc2dCLEdBQUUvcUMsRUFBRStxQyxHQUFFQSxHQUFFN3lELEtBQUs4bkIsQ0FBQyxDQUFDLE9BQU8rcUMsRUFBQyxDQUNqZSxTQUFTaUIsR0FBR2hzQyxFQUFFa0YsR0FBRyxNQUFNLG1CQUFvQkEsRUFBRUEsRUFBRWxGLEdBQUdrRixDQUFDLENBQ25ELFNBQVMrbUMsR0FBR2pzQyxHQUFHLElBQUlrRixFQUFFNm1DLEtBQUtqNkIsRUFBRTVNLEVBQUU0bUMsTUFBTSxHQUFHLE9BQU9oNkIsRUFBRSxNQUFNcmtCLE1BQU1xWCxFQUFFLE1BQU1nTixFQUFFbzZCLG9CQUFvQmxzQyxFQUFFLElBQUk5YSxFQUFFNGxELEdBQUVsMUQsRUFBRXNQLEVBQUUybUQsVUFBVTVyQyxFQUFFNlIsRUFBRXcwQixRQUFRLEdBQUcsT0FBT3JtQyxFQUFFLENBQUMsR0FBRyxPQUFPcnFCLEVBQUUsQ0FBQyxJQUFJOG9DLEVBQUU5b0MsRUFBRXNDLEtBQUt0QyxFQUFFc0MsS0FBSytuQixFQUFFL25CLEtBQUsrbkIsRUFBRS9uQixLQUFLd21DLENBQUMsQ0FBQ3g1QixFQUFFMm1ELFVBQVVqMkQsRUFBRXFxQixFQUFFNlIsRUFBRXcwQixRQUFRLElBQUksQ0FBQyxHQUFHLE9BQU8xd0QsRUFBRSxDQUFDcXFCLEVBQUVycUIsRUFBRXNDLEtBQUtnTixFQUFFQSxFQUFFZ2hELFVBQVUsSUFBSXRuRCxFQUFFOC9CLEVBQUUsS0FBS3hqQyxFQUFFLEtBQUs2a0IsRUFBRUUsRUFBRSxFQUFFLENBQUMsSUFBSTRFLEVBQUU5RSxFQUFFNG1DLEtBQUssSUFBSWlFLEdBQUcvbEMsS0FBS0EsRUFBRSxPQUFPM3BCLElBQUlBLEVBQUVBLEVBQUVoRCxLQUFLLENBQUN5dUQsS0FBSyxFQUFFei9DLE9BQU82WSxFQUFFN1ksT0FBT2lsRCxjQUFjcHNDLEVBQUVvc0MsY0FBY0MsV0FBV3JzQyxFQUFFcXNDLFdBQVdsMEQsS0FBSyxPQUFPZ04sRUFBRTZhLEVBQUVvc0MsY0FBY3BzQyxFQUFFcXNDLFdBQVdwc0MsRUFBRTlhLEVBQUU2YSxFQUFFN1ksWUFBWSxDQUFDLElBQUl5M0IsRUFBRSxDQUFDZ29CLEtBQUs5aEMsRUFBRTNkLE9BQU82WSxFQUFFN1ksT0FBT2lsRCxjQUFjcHNDLEVBQUVvc0MsY0FDbmdCQyxXQUFXcnNDLEVBQUVxc0MsV0FBV2wwRCxLQUFLLE1BQU0sT0FBT2dELEdBQUcwRCxFQUFFMUQsRUFBRXlqQyxFQUFFRCxFQUFFeDVCLEdBQUdoSyxFQUFFQSxFQUFFaEQsS0FBS3ltQyxFQUFFa3NCLEdBQUV2RixPQUFPemdDLEVBQUVvaUMsSUFBSXBpQyxDQUFDLENBQUM5RSxFQUFFQSxFQUFFN25CLElBQUksT0FBTyxPQUFPNm5CLEdBQUdBLElBQUlFLEdBQUcsT0FBTy9rQixFQUFFd2pDLEVBQUV4NUIsRUFBRWhLLEVBQUVoRCxLQUFLMEcsRUFBRW83QyxHQUFHOTBDLEVBQUVnZ0IsRUFBRXVsQixpQkFBaUI4YSxJQUFHLEdBQUlyZ0MsRUFBRXVsQixjQUFjdmxDLEVBQUVnZ0IsRUFBRWdoQyxVQUFVeG5CLEVBQUV4WixFQUFFMm1DLFVBQVUzd0QsRUFBRTQyQixFQUFFdTZCLGtCQUFrQm5uRCxDQUFDLENBQWlCLEdBQUcsUUFBbkI4YSxFQUFFOFIsRUFBRSt6QixhQUF3QixDQUFDandELEVBQUVvcUIsRUFBRSxHQUFHQyxFQUFFcnFCLEVBQUUrd0QsS0FBS2tFLEdBQUV2RixPQUFPcmxDLEVBQUVnbkMsSUFBSWhuQyxFQUFFcnFCLEVBQUVBLEVBQUVzQyxXQUFXdEMsSUFBSW9xQixFQUFFLE1BQU0sT0FBT3BxQixJQUFJazhCLEVBQUV3ekIsTUFBTSxHQUFHLE1BQU0sQ0FBQ3BnQyxFQUFFdWxCLGNBQWMzWSxFQUFFdzZCLFNBQVMsQ0FDOVgsU0FBU0MsR0FBR3ZzQyxHQUFHLElBQUlrRixFQUFFNm1DLEtBQUtqNkIsRUFBRTVNLEVBQUU0bUMsTUFBTSxHQUFHLE9BQU9oNkIsRUFBRSxNQUFNcmtCLE1BQU1xWCxFQUFFLE1BQU1nTixFQUFFbzZCLG9CQUFvQmxzQyxFQUFFLElBQUk5YSxFQUFFNHNCLEVBQUV3NkIsU0FBUzEyRCxFQUFFazhCLEVBQUV3MEIsUUFBUXJtQyxFQUFFaUYsRUFBRXVsQixjQUFjLEdBQUcsT0FBTzcwQyxFQUFFLENBQUNrOEIsRUFBRXcwQixRQUFRLEtBQUssSUFBSTVuQixFQUFFOW9DLEVBQUVBLEVBQUVzQyxLQUFLLEdBQUcrbkIsRUFBRUQsRUFBRUMsRUFBRXllLEVBQUV4M0IsUUFBUXczQixFQUFFQSxFQUFFeG1DLFdBQVd3bUMsSUFBSTlvQyxHQUFHb2tELEdBQUcvNUIsRUFBRWlGLEVBQUV1bEIsaUJBQWlCOGEsSUFBRyxHQUFJcmdDLEVBQUV1bEIsY0FBY3hxQixFQUFFLE9BQU9pRixFQUFFMm1DLFlBQVkzbUMsRUFBRWdoQyxVQUFVam1DLEdBQUc2UixFQUFFdTZCLGtCQUFrQnBzQyxDQUFDLENBQUMsTUFBTSxDQUFDQSxFQUFFL2EsRUFBRSxDQUFDLFNBQVNzbkQsS0FBSyxDQUNwVyxTQUFTQyxHQUFHenNDLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFKzRCLEdBQUUzbEQsRUFBRTZtRCxLQUFLbjJELEVBQUVzdkIsSUFBSWpGLEdBQUcrNUIsR0FBRzkwQyxFQUFFdWxDLGNBQWM3MEMsR0FBc0UsR0FBbkVxcUIsSUFBSS9hLEVBQUV1bEMsY0FBYzcwQyxFQUFFMnZELElBQUcsR0FBSXJnRCxFQUFFQSxFQUFFNG1ELE1BQU1ZLEdBQUdDLEdBQUc1OEIsS0FBSyxLQUFLK0IsRUFBRTVzQixFQUFFOGEsR0FBRyxDQUFDQSxJQUFPOWEsRUFBRTBuRCxjQUFjMW5DLEdBQUdqRixHQUFHLE9BQU84cUMsSUFBdUIsRUFBcEJBLEdBQUV0Z0IsY0FBY2wzQyxJQUFNLENBQXVELEdBQXREdStCLEVBQUV5WSxPQUFPLEtBQUtzaUIsR0FBRyxFQUFFQyxHQUFHLzhCLEtBQUssS0FBSytCLEVBQUU1c0IsRUFBRXRQLEVBQUVzdkIsUUFBRyxFQUFPLE1BQVMsT0FBTzZuQyxHQUFFLE1BQU10L0MsTUFBTXFYLEVBQUUsTUFBTSxJQUFRLEdBQUg4bEMsS0FBUW9DLEdBQUdsN0IsRUFBRTVNLEVBQUV0dkIsRUFBRSxDQUFDLE9BQU9BLENBQUMsQ0FBQyxTQUFTbzNELEdBQUdodEMsRUFBRWtGLEVBQUU0TSxHQUFHOVIsRUFBRXVxQixPQUFPLE1BQU12cUIsRUFBRSxDQUFDNHNDLFlBQVkxbkMsRUFBRTN1QixNQUFNdTdCLEdBQW1CLFFBQWhCNU0sRUFBRTJsQyxHQUFFNUUsY0FBc0IvZ0MsRUFBRSxDQUFDK25DLFdBQVcsS0FBS0MsT0FBTyxNQUFNckMsR0FBRTVFLFlBQVkvZ0MsRUFBRUEsRUFBRWdvQyxPQUFPLENBQUNsdEMsSUFBZ0IsUUFBWDhSLEVBQUU1TSxFQUFFZ29DLFFBQWdCaG9DLEVBQUVnb0MsT0FBTyxDQUFDbHRDLEdBQUc4UixFQUFFNzlCLEtBQUsrckIsRUFBRyxDQUNsZixTQUFTOHNDLEdBQUc5c0MsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUdnZ0IsRUFBRTN1QixNQUFNdTdCLEVBQUU1TSxFQUFFMG5DLFlBQVkxbkQsRUFBRWlvRCxHQUFHam9DLElBQUlrb0MsR0FBR3B0QyxFQUFFLENBQUMsU0FBUzJzQyxHQUFHM3NDLEVBQUVrRixFQUFFNE0sR0FBRyxPQUFPQSxHQUFFLFdBQVdxN0IsR0FBR2pvQyxJQUFJa29DLEdBQUdwdEMsRUFBRSxHQUFFLENBQUMsU0FBU210QyxHQUFHbnRDLEdBQUcsSUFBSWtGLEVBQUVsRixFQUFFNHNDLFlBQVk1c0MsRUFBRUEsRUFBRXpwQixNQUFNLElBQUksSUFBSXU3QixFQUFFNU0sSUFBSSxPQUFPODBCLEdBQUdoNkIsRUFBRThSLEVBQW9CLENBQWpCLE1BQU01c0IsR0FBRyxPQUFNLENBQUUsQ0FBQyxDQUFDLFNBQVNrb0QsR0FBR3B0QyxHQUFHLElBQUlrRixFQUFFNGdDLEdBQUc5bEMsRUFBRSxHQUFHLE9BQU9rRixHQUFHMGlDLEdBQUcxaUMsRUFBRWxGLEVBQUUsR0FBRyxFQUFFLENBQ2xRLFNBQVNxdEMsR0FBR3J0QyxHQUFHLElBQUlrRixFQUFFMG1DLEtBQThNLE1BQXpNLG1CQUFvQjVyQyxJQUFJQSxFQUFFQSxLQUFLa0YsRUFBRXVsQixjQUFjdmxCLEVBQUVnaEMsVUFBVWxtQyxFQUFFQSxFQUFFLENBQUNzbUMsUUFBUSxLQUFLVCxZQUFZLEtBQUtQLE1BQU0sRUFBRWdILFNBQVMsS0FBS0osb0JBQW9CRixHQUFHSyxrQkFBa0Jyc0MsR0FBR2tGLEVBQUU0bUMsTUFBTTlyQyxFQUFFQSxFQUFFQSxFQUFFc3NDLFNBQVNnQixHQUFHdjlCLEtBQUssS0FBSzg2QixHQUFFN3FDLEdBQVMsQ0FBQ2tGLEVBQUV1bEIsY0FBY3pxQixFQUFFLENBQzVQLFNBQVM2c0MsR0FBRzdzQyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBOE8sT0FBM084YSxFQUFFLENBQUN6c0IsSUFBSXlzQixFQUFFamlCLE9BQU9tbkIsRUFBRXFvQyxRQUFRejdCLEVBQUUwN0IsS0FBS3RvRCxFQUFFaE4sS0FBSyxNQUFzQixRQUFoQmd0QixFQUFFMmxDLEdBQUU1RSxjQUFzQi9nQyxFQUFFLENBQUMrbkMsV0FBVyxLQUFLQyxPQUFPLE1BQU1yQyxHQUFFNUUsWUFBWS9nQyxFQUFFQSxFQUFFK25DLFdBQVdqdEMsRUFBRTluQixLQUFLOG5CLEdBQW1CLFFBQWY4UixFQUFFNU0sRUFBRStuQyxZQUFvQi9uQyxFQUFFK25DLFdBQVdqdEMsRUFBRTluQixLQUFLOG5CLEdBQUc5YSxFQUFFNHNCLEVBQUU1NUIsS0FBSzQ1QixFQUFFNTVCLEtBQUs4bkIsRUFBRUEsRUFBRTluQixLQUFLZ04sRUFBRWdnQixFQUFFK25DLFdBQVdqdEMsR0FBV0EsQ0FBQyxDQUFDLFNBQVN5dEMsS0FBSyxPQUFPMUIsS0FBS3RoQixhQUFhLENBQUMsU0FBU2lqQixHQUFHMXRDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixHQUFHLElBQUl0UCxFQUFFZzJELEtBQUtmLEdBQUV0Z0IsT0FBT3ZxQixFQUFFcHFCLEVBQUU2MEMsY0FBY29pQixHQUFHLEVBQUUzbkMsRUFBRTRNLE9BQUUsT0FBTyxJQUFTNXNCLEVBQUUsS0FBS0EsRUFBRSxDQUM5WSxTQUFTeW9ELEdBQUczdEMsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUcsSUFBSXRQLEVBQUVtMkQsS0FBSzdtRCxPQUFFLElBQVNBLEVBQUUsS0FBS0EsRUFBRSxJQUFJK2EsT0FBRSxFQUFPLEdBQUcsT0FBTzZxQyxHQUFFLENBQUMsSUFBSXBzQixFQUFFb3NCLEdBQUVyZ0IsY0FBMEIsR0FBWnhxQixFQUFFeWUsRUFBRTZ1QixRQUFXLE9BQU9yb0QsR0FBR21tRCxHQUFHbm1ELEVBQUV3NUIsRUFBRTh1QixNQUFtQyxZQUE1QjUzRCxFQUFFNjBDLGNBQWNvaUIsR0FBRzNuQyxFQUFFNE0sRUFBRTdSLEVBQUUvYSxHQUFVLENBQUMybEQsR0FBRXRnQixPQUFPdnFCLEVBQUVwcUIsRUFBRTYwQyxjQUFjb2lCLEdBQUcsRUFBRTNuQyxFQUFFNE0sRUFBRTdSLEVBQUUvYSxFQUFFLENBQUMsU0FBUzBvRCxHQUFHNXRDLEVBQUVrRixHQUFHLE9BQU93b0MsR0FBRyxRQUFRLEVBQUUxdEMsRUFBRWtGLEVBQUUsQ0FBQyxTQUFTd25DLEdBQUcxc0MsRUFBRWtGLEdBQUcsT0FBT3lvQyxHQUFHLEtBQUssRUFBRTN0QyxFQUFFa0YsRUFBRSxDQUFDLFNBQVMyb0MsR0FBRzd0QyxFQUFFa0YsR0FBRyxPQUFPeW9DLEdBQUcsRUFBRSxFQUFFM3RDLEVBQUVrRixFQUFFLENBQUMsU0FBUzRvQyxHQUFHOXRDLEVBQUVrRixHQUFHLE9BQU95b0MsR0FBRyxFQUFFLEVBQUUzdEMsRUFBRWtGLEVBQUUsQ0FDaFgsU0FBUzZvQyxHQUFHL3RDLEVBQUVrRixHQUFHLE1BQUcsbUJBQW9CQSxHQUFTbEYsRUFBRUEsSUFBSWtGLEVBQUVsRixHQUFHLFdBQVdrRixFQUFFLEtBQUssR0FBSyxNQUFPQSxHQUFxQmxGLEVBQUVBLElBQUlrRixFQUFFeGdCLFFBQVFzYixFQUFFLFdBQVdrRixFQUFFeGdCLFFBQVEsSUFBSSxRQUExRSxDQUEyRSxDQUFDLFNBQVNzcEQsR0FBR2h1QyxFQUFFa0YsRUFBRTRNLEdBQTZDLE9BQTFDQSxFQUFFLE1BQU9BLEVBQWNBLEVBQUV4MEIsT0FBTyxDQUFDMGlCLElBQUksS0FBWTJ0QyxHQUFHLEVBQUUsRUFBRUksR0FBR2grQixLQUFLLEtBQUs3SyxFQUFFbEYsR0FBRzhSLEVBQUUsQ0FBQyxTQUFTbThCLEtBQUssQ0FBQyxTQUFTQyxHQUFHbHVDLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFaTZCLEtBQUs3bUMsT0FBRSxJQUFTQSxFQUFFLEtBQUtBLEVBQUUsSUFBSWhnQixFQUFFNHNCLEVBQUUyWSxjQUFjLE9BQUcsT0FBT3ZsQyxHQUFHLE9BQU9nZ0IsR0FBR21tQyxHQUFHbm1DLEVBQUVoZ0IsRUFBRSxJQUFXQSxFQUFFLElBQUc0c0IsRUFBRTJZLGNBQWMsQ0FBQ3pxQixFQUFFa0YsR0FBVWxGLEVBQUMsQ0FDN1osU0FBU211QyxHQUFHbnVDLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFaTZCLEtBQUs3bUMsT0FBRSxJQUFTQSxFQUFFLEtBQUtBLEVBQUUsSUFBSWhnQixFQUFFNHNCLEVBQUUyWSxjQUFjLE9BQUcsT0FBT3ZsQyxHQUFHLE9BQU9nZ0IsR0FBR21tQyxHQUFHbm1DLEVBQUVoZ0IsRUFBRSxJQUFXQSxFQUFFLElBQUc4YSxFQUFFQSxJQUFJOFIsRUFBRTJZLGNBQWMsQ0FBQ3pxQixFQUFFa0YsR0FBVWxGLEVBQUMsQ0FBQyxTQUFTb3VDLEdBQUdwdUMsRUFBRWtGLEVBQUU0TSxHQUFHLE9BQUcsSUFBUSxHQUFIODRCLEtBQWM1cUMsRUFBRWttQyxZQUFZbG1DLEVBQUVrbUMsV0FBVSxFQUFHWCxJQUFHLEdBQUl2bEMsRUFBRXlxQixjQUFjM1ksSUFBRWtvQixHQUFHbG9CLEVBQUU1TSxLQUFLNE0sRUFBRTRiLEtBQUttZCxHQUFFdkYsT0FBT3h6QixFQUFFbTFCLElBQUluMUIsRUFBRTlSLEVBQUVrbUMsV0FBVSxHQUFXaGhDLEVBQUMsQ0FBQyxTQUFTbXBDLEdBQUdydUMsRUFBRWtGLEdBQUcsSUFBSTRNLEVBQUVpYyxHQUFFQSxHQUFFLElBQUlqYyxHQUFHLEVBQUVBLEVBQUVBLEVBQUUsRUFBRTlSLEdBQUUsR0FBSSxJQUFJOWEsRUFBRXlsRCxHQUFHaDFDLFdBQVdnMUMsR0FBR2gxQyxXQUFXLENBQUMsRUFBRSxJQUFJcUssR0FBRSxHQUFJa0YsR0FBK0IsQ0FBM0IsUUFBUTZvQixHQUFFamMsRUFBRTY0QixHQUFHaDFDLFdBQVd6USxDQUFDLENBQUMsQ0FBQyxTQUFTb3BELEtBQUssT0FBT3ZDLEtBQUt0aEIsYUFBYSxDQUMxZCxTQUFTOGpCLEdBQUd2dUMsRUFBRWtGLEVBQUU0TSxHQUFHLElBQUk1c0IsRUFBRXlpRCxHQUFHM25DLEdBQUc4UixFQUFFLENBQUM2MEIsS0FBS3poRCxFQUFFZ0MsT0FBTzRxQixFQUFFcTZCLGVBQWMsRUFBR0MsV0FBVyxLQUFLbDBELEtBQUssTUFBU3MyRCxHQUFHeHVDLEdBQUd5dUMsR0FBR3ZwQyxFQUFFNE0sR0FBeUIsUUFBZEEsRUFBRTh6QixHQUFHNWxDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixNQUF1QjBpRCxHQUFHOTFCLEVBQUU5UixFQUFFOWEsRUFBWHdpRCxNQUFnQmdILEdBQUc1OEIsRUFBRTVNLEVBQUVoZ0IsR0FBRyxDQUMvSyxTQUFTb29ELEdBQUd0dEMsRUFBRWtGLEVBQUU0TSxHQUFHLElBQUk1c0IsRUFBRXlpRCxHQUFHM25DLEdBQUdwcUIsRUFBRSxDQUFDK3dELEtBQUt6aEQsRUFBRWdDLE9BQU80cUIsRUFBRXE2QixlQUFjLEVBQUdDLFdBQVcsS0FBS2wwRCxLQUFLLE1BQU0sR0FBR3MyRCxHQUFHeHVDLEdBQUd5dUMsR0FBR3ZwQyxFQUFFdHZCLE9BQU8sQ0FBQyxJQUFJcXFCLEVBQUVELEVBQUVzcUIsVUFBVSxHQUFHLElBQUl0cUIsRUFBRXNsQyxRQUFRLE9BQU9ybEMsR0FBRyxJQUFJQSxFQUFFcWxDLFFBQWlDLFFBQXhCcmxDLEVBQUVpRixFQUFFZ25DLHFCQUE4QixJQUFJLElBQUl4dEIsRUFBRXhaLEVBQUVtbkMsa0JBQWtCenRELEVBQUVxaEIsRUFBRXllLEVBQUU1TSxHQUFxQyxHQUFsQ2w4QixFQUFFdTJELGVBQWMsRUFBR3YyRCxFQUFFdzJELFdBQVd4dEQsRUFBS283QyxHQUFHcDdDLEVBQUU4L0IsR0FBRyxDQUFDLElBQUl4akMsRUFBRWdxQixFQUFFMmdDLFlBQStFLE9BQW5FLE9BQU8zcUQsR0FBR3RGLEVBQUVzQyxLQUFLdEMsRUFBRSt2RCxHQUFHemdDLEtBQUt0dkIsRUFBRXNDLEtBQUtnRCxFQUFFaEQsS0FBS2dELEVBQUVoRCxLQUFLdEMsUUFBR3N2QixFQUFFMmdDLFlBQVlqd0QsRUFBUSxDQUFvQixDQUFsQixNQUFNbXFCLEdBQUcsQ0FBd0IsUUFBZCtSLEVBQUU4ekIsR0FBRzVsQyxFQUFFa0YsRUFBRXR2QixFQUFFc1AsTUFBb0IwaUQsR0FBRzkxQixFQUFFOVIsRUFBRTlhLEVBQWJ0UCxFQUFFOHhELE1BQWdCZ0gsR0FBRzU4QixFQUFFNU0sRUFBRWhnQixHQUFHLENBQUMsQ0FDL2MsU0FBU3NwRCxHQUFHeHVDLEdBQUcsSUFBSWtGLEVBQUVsRixFQUFFc3FCLFVBQVUsT0FBT3RxQixJQUFJNnFDLElBQUcsT0FBTzNsQyxHQUFHQSxJQUFJMmxDLEVBQUMsQ0FBQyxTQUFTNEQsR0FBR3p1QyxFQUFFa0YsR0FBRytsQyxHQUFHRCxJQUFHLEVBQUcsSUFBSWw1QixFQUFFOVIsRUFBRXNtQyxRQUFRLE9BQU94MEIsRUFBRTVNLEVBQUVodEIsS0FBS2d0QixHQUFHQSxFQUFFaHRCLEtBQUs0NUIsRUFBRTU1QixLQUFLNDVCLEVBQUU1NUIsS0FBS2d0QixHQUFHbEYsRUFBRXNtQyxRQUFRcGhDLENBQUMsQ0FBQyxTQUFTd3BDLEdBQUcxdUMsRUFBRWtGLEVBQUU0TSxHQUFHLEdBQUcsSUFBTyxRQUFGQSxHQUFXLENBQUMsSUFBSTVzQixFQUFFZ2dCLEVBQUVvZ0MsTUFBd0J4ekIsR0FBbEI1c0IsR0FBRzhhLEVBQUVtdEIsYUFBa0Jqb0IsRUFBRW9nQyxNQUFNeHpCLEVBQUVnYyxHQUFHOXRCLEVBQUU4UixFQUFFLENBQUMsQ0FDOVAsSUFBSTQ1QixHQUFHLENBQUNpRCxZQUFZbkosR0FBR29KLFlBQVl4RCxHQUFFM3NELFdBQVcyc0QsR0FBRXlELFVBQVV6RCxHQUFFMEQsb0JBQW9CMUQsR0FBRXRuRCxtQkFBbUJzbkQsR0FBRW5uRCxnQkFBZ0JtbkQsR0FBRTJELFFBQVEzRCxHQUFFNEQsV0FBVzVELEdBQUU2RCxPQUFPN0QsR0FBRThELFNBQVM5RCxHQUFFK0QsY0FBYy9ELEdBQUVnRSxpQkFBaUJoRSxHQUFFaUUsY0FBY2pFLEdBQUVrRSxpQkFBaUJsRSxHQUFFbUUscUJBQXFCbkUsR0FBRTFnQyxNQUFNMGdDLEdBQUVvRSwwQkFBeUIsR0FBSWpFLEdBQUcsQ0FBQ29ELFlBQVluSixHQUFHb0osWUFBWSxTQUFTNXVDLEVBQUVrRixHQUE0QyxPQUF6QzBtQyxLQUFLbmhCLGNBQWMsQ0FBQ3pxQixPQUFFLElBQVNrRixFQUFFLEtBQUtBLEdBQVVsRixDQUFDLEVBQUV2aEIsV0FBVyttRCxHQUFHcUosVUFBVWpCLEdBQUdrQixvQkFBb0IsU0FBUzl1QyxFQUFFa0YsRUFBRTRNLEdBQTZDLE9BQTFDQSxFQUFFLE1BQU9BLEVBQWNBLEVBQUV4MEIsT0FBTyxDQUFDMGlCLElBQUksS0FBWTB0QyxHQUFHLFFBQzNmLEVBQUVLLEdBQUdoK0IsS0FBSyxLQUFLN0ssRUFBRWxGLEdBQUc4UixFQUFFLEVBQUU3dEIsZ0JBQWdCLFNBQVMrYixFQUFFa0YsR0FBRyxPQUFPd29DLEdBQUcsUUFBUSxFQUFFMXRDLEVBQUVrRixFQUFFLEVBQUVwaEIsbUJBQW1CLFNBQVNrYyxFQUFFa0YsR0FBRyxPQUFPd29DLEdBQUcsRUFBRSxFQUFFMXRDLEVBQUVrRixFQUFFLEVBQUU2cEMsUUFBUSxTQUFTL3VDLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFODVCLEtBQXFELE9BQWhEMW1DLE9BQUUsSUFBU0EsRUFBRSxLQUFLQSxFQUFFbEYsRUFBRUEsSUFBSThSLEVBQUUyWSxjQUFjLENBQUN6cUIsRUFBRWtGLEdBQVVsRixDQUFDLEVBQUVndkMsV0FBVyxTQUFTaHZDLEVBQUVrRixFQUFFNE0sR0FBRyxJQUFJNXNCLEVBQUUwbUQsS0FBa00sT0FBN0wxbUMsT0FBRSxJQUFTNE0sRUFBRUEsRUFBRTVNLEdBQUdBLEVBQUVoZ0IsRUFBRXVsQyxjQUFjdmxDLEVBQUVnaEQsVUFBVWhoQyxFQUFFbEYsRUFBRSxDQUFDc21DLFFBQVEsS0FBS1QsWUFBWSxLQUFLUCxNQUFNLEVBQUVnSCxTQUFTLEtBQUtKLG9CQUFvQmxzQyxFQUFFcXNDLGtCQUFrQm5uQyxHQUFHaGdCLEVBQUU0bUQsTUFBTTlyQyxFQUFFQSxFQUFFQSxFQUFFc3NDLFNBQVNpQyxHQUFHeCtCLEtBQUssS0FBSzg2QixHQUFFN3FDLEdBQVMsQ0FBQzlhLEVBQUV1bEMsY0FBY3pxQixFQUFFLEVBQUVpdkMsT0FBTyxTQUFTanZDLEdBQzNkLE9BQWRBLEVBQUUsQ0FBQ3RiLFFBQVFzYixHQUFoQjRyQyxLQUE0Qm5oQixjQUFjenFCLENBQUMsRUFBRWt2QyxTQUFTN0IsR0FBRzhCLGNBQWNsQixHQUFHbUIsaUJBQWlCLFNBQVNwdkMsR0FBRyxPQUFPNHJDLEtBQUtuaEIsY0FBY3pxQixDQUFDLEVBQUVxdkMsY0FBYyxXQUFXLElBQUlydkMsRUFBRXF0QyxJQUFHLEdBQUlub0MsRUFBRWxGLEVBQUUsR0FBNkMsT0FBMUNBLEVBQUVxdUMsR0FBR3QrQixLQUFLLEtBQUsvUCxFQUFFLElBQUk0ckMsS0FBS25oQixjQUFjenFCLEVBQVEsQ0FBQ2tGLEVBQUVsRixFQUFFLEVBQUVzdkMsaUJBQWlCLFdBQVcsRUFBRUMscUJBQXFCLFNBQVN2dkMsRUFBRWtGLEVBQUU0TSxHQUFHLElBQUk1c0IsRUFBRTJsRCxHQUFFajFELEVBQUVnMkQsS0FBSyxHQUFHdkksR0FBRSxDQUFDLFFBQUcsSUFBU3Z4QixFQUFFLE1BQU1ya0IsTUFBTXFYLEVBQUUsTUFBTWdOLEVBQUVBLEdBQUcsS0FBSyxDQUFPLEdBQU5BLEVBQUU1TSxJQUFPLE9BQU82bkMsR0FBRSxNQUFNdC9DLE1BQU1xWCxFQUFFLE1BQU0sSUFBUSxHQUFIOGxDLEtBQVFvQyxHQUFHOW5ELEVBQUVnZ0IsRUFBRTRNLEVBQUUsQ0FBQ2w4QixFQUFFNjBDLGNBQWMzWSxFQUFFLElBQUk3UixFQUFFLENBQUMxcEIsTUFBTXU3QixFQUFFODZCLFlBQVkxbkMsR0FDdlosT0FEMFp0dkIsRUFBRWsyRCxNQUFNN3JDLEVBQUUydEMsR0FBR2pCLEdBQUc1OEIsS0FBSyxLQUFLN3FCLEVBQ3BmK2EsRUFBRUQsR0FBRyxDQUFDQSxJQUFJOWEsRUFBRXFsQyxPQUFPLEtBQUtzaUIsR0FBRyxFQUFFQyxHQUFHLzhCLEtBQUssS0FBSzdxQixFQUFFK2EsRUFBRTZSLEVBQUU1TSxRQUFHLEVBQU8sTUFBYTRNLENBQUMsRUFBRXBILE1BQU0sV0FBVyxJQUFJMUssRUFBRTRyQyxLQUFLMW1DLEVBQUU2bkMsR0FBRTBDLGlCQUFpQixHQUFHcE0sR0FBRSxDQUFDLElBQUl2eEIsRUFBRWd4QixHQUFrRDU5QixFQUFFLElBQUlBLEVBQUUsS0FBOUM0TSxHQUFIK3dCLEtBQVUsR0FBRyxHQUFHcFcsR0FBaEJvVyxJQUFzQixJQUFJL2pELFNBQVMsSUFBSWd6QixHQUF1QixHQUFQQSxFQUFFbzVCLFFBQVdobUMsR0FBRyxJQUFJNE0sRUFBRWh6QixTQUFTLEtBQUtvbUIsR0FBRyxHQUFHLE1BQWFBLEVBQUUsSUFBSUEsRUFBRSxLQUFmNE0sRUFBRXE1QixNQUFtQnJzRCxTQUFTLElBQUksSUFBSSxPQUFPa2hCLEVBQUV5cUIsY0FBY3ZsQixDQUFDLEVBQUVzcUMsMEJBQXlCLEdBQUloRSxHQUFHLENBQUNtRCxZQUFZbkosR0FBR29KLFlBQVlWLEdBQUd6dkQsV0FBVyttRCxHQUFHcUosVUFBVW5DLEdBQUdvQyxvQkFBb0JkLEdBQUdscUQsbUJBQW1CK3BELEdBQUc1cEQsZ0JBQWdCNnBELEdBQUdpQixRQUFRWixHQUFHYSxXQUFXL0MsR0FBR2dELE9BQU94QixHQUFHeUIsU0FBUyxXQUFXLE9BQU9qRCxHQUFHRCxHQUFHLEVBQ3JoQm1ELGNBQWNsQixHQUFHbUIsaUJBQWlCLFNBQVNwdkMsR0FBYyxPQUFPb3VDLEdBQVpyQyxLQUFpQmpCLEdBQUVyZ0IsY0FBY3pxQixFQUFFLEVBQUVxdkMsY0FBYyxXQUFnRCxNQUFNLENBQXJDcEQsR0FBR0QsSUFBSSxHQUFLRCxLQUFLdGhCLGNBQXlCLEVBQUU2a0IsaUJBQWlCOUMsR0FBRytDLHFCQUFxQjlDLEdBQUcvaEMsTUFBTTRqQyxHQUFHa0IsMEJBQXlCLEdBQUkvRCxHQUFHLENBQUNrRCxZQUFZbkosR0FBR29KLFlBQVlWLEdBQUd6dkQsV0FBVyttRCxHQUFHcUosVUFBVW5DLEdBQUdvQyxvQkFBb0JkLEdBQUdscUQsbUJBQW1CK3BELEdBQUc1cEQsZ0JBQWdCNnBELEdBQUdpQixRQUFRWixHQUFHYSxXQUFXekMsR0FBRzBDLE9BQU94QixHQUFHeUIsU0FBUyxXQUFXLE9BQU8zQyxHQUFHUCxHQUFHLEVBQUVtRCxjQUFjbEIsR0FBR21CLGlCQUFpQixTQUFTcHZDLEdBQUcsSUFBSWtGLEVBQUU2bUMsS0FBSyxPQUFPLE9BQ3pmakIsR0FBRTVsQyxFQUFFdWxCLGNBQWN6cUIsRUFBRW91QyxHQUFHbHBDLEVBQUU0bEMsR0FBRXJnQixjQUFjenFCLEVBQUUsRUFBRXF2QyxjQUFjLFdBQWdELE1BQU0sQ0FBckM5QyxHQUFHUCxJQUFJLEdBQUtELEtBQUt0aEIsY0FBeUIsRUFBRTZrQixpQkFBaUI5QyxHQUFHK0MscUJBQXFCOUMsR0FBRy9oQyxNQUFNNGpDLEdBQUdrQiwwQkFBeUIsR0FBSSxTQUFTRSxHQUFHMXZDLEVBQUVrRixHQUFHLElBQUksSUFBSTRNLEVBQUUsR0FBRzVzQixFQUFFZ2dCLEVBQUUsR0FBRzRNLEdBQUdnUyxFQUFHNStCLEdBQUdBLEVBQUVBLEVBQUVuTixhQUFhbU4sR0FBRyxJQUFJdFAsRUFBRWs4QixDQUFnRSxDQUE5RCxNQUFNN1IsR0FBR3JxQixFQUFFLDZCQUE2QnFxQixFQUFFeVIsUUFBUSxLQUFLelIsRUFBRWdVLEtBQUssQ0FBQyxNQUFNLENBQUMxOUIsTUFBTXlwQixFQUFFa0osT0FBT2hFLEVBQUUrTyxNQUFNcitCLEVBQUUrNUQsT0FBTyxLQUFLLENBQUMsU0FBU0MsR0FBRzV2QyxFQUFFa0YsRUFBRTRNLEdBQUcsTUFBTSxDQUFDdjdCLE1BQU15cEIsRUFBRWtKLE9BQU8sS0FBSytLLE1BQU0sTUFBTW5DLEVBQUVBLEVBQUUsS0FBSzY5QixPQUFPLE1BQU16cUMsRUFBRUEsRUFBRSxLQUFLLENBQ3pkLFNBQVMycUMsR0FBRzd2QyxFQUFFa0YsR0FBRyxJQUFJcE4sUUFBUWhLLE1BQU1vWCxFQUFFM3VCLE1BQWdELENBQXpDLE1BQU11N0IsR0FBR2hYLFlBQVcsV0FBVyxNQUFNZ1gsQ0FBRSxHQUFFLENBQUMsQ0FBQyxJQUFJZytCLEdBQUcsbUJBQW9CdDBELFFBQVFBLFFBQVFvekMsSUFBSSxTQUFTbWhCLEdBQUcvdkMsRUFBRWtGLEVBQUU0TSxJQUFHQSxFQUFFMjBCLElBQUksRUFBRTMwQixJQUFLditCLElBQUksRUFBRXUrQixFQUFFZ0gsUUFBUSxDQUFDci9CLFFBQVEsTUFBTSxJQUFJeUwsRUFBRWdnQixFQUFFM3VCLE1BQXNELE9BQWhEdTdCLEVBQUV4NEIsU0FBUyxXQUFXMDJELEtBQUtBLElBQUcsRUFBR0MsR0FBRy9xRCxHQUFHMnFELEdBQUc3dkMsRUFBRWtGLEVBQUUsRUFBUzRNLENBQUMsQ0FDM1EsU0FBU28rQixHQUFHbHdDLEVBQUVrRixFQUFFNE0sSUFBR0EsRUFBRTIwQixJQUFJLEVBQUUzMEIsSUFBS3YrQixJQUFJLEVBQUUsSUFBSTJSLEVBQUU4YSxFQUFFcG9CLEtBQUtvbEMseUJBQXlCLEdBQUcsbUJBQW9COTNCLEVBQUUsQ0FBQyxJQUFJdFAsRUFBRXN2QixFQUFFM3VCLE1BQU11N0IsRUFBRWdILFFBQVEsV0FBVyxPQUFPNXpCLEVBQUV0UCxFQUFFLEVBQUVrOEIsRUFBRXg0QixTQUFTLFdBQVd1MkQsR0FBRzd2QyxFQUFFa0YsRUFBRSxDQUFDLENBQUMsSUFBSWpGLEVBQUVELEVBQUVrcEIsVUFBOE8sT0FBcE8sT0FBT2pwQixHQUFHLG1CQUFvQkEsRUFBRWt3QyxvQkFBb0JyK0IsRUFBRXg0QixTQUFTLFdBQVd1MkQsR0FBRzd2QyxFQUFFa0YsR0FBRyxtQkFBb0JoZ0IsSUFBSSxPQUFPa3JELEdBQUdBLEdBQUcsSUFBSXRvQyxJQUFJLENBQUN6MEIsT0FBTys4RCxHQUFHdnZCLElBQUl4dEMsT0FBTyxJQUFJeStCLEVBQUU1TSxFQUFFK08sTUFBTTVnQyxLQUFLODhELGtCQUFrQmpyQyxFQUFFM3VCLE1BQU0sQ0FBQzg1RCxlQUFlLE9BQU92K0IsRUFBRUEsRUFBRSxJQUFJLEdBQVVBLENBQUMsQ0FDbmIsU0FBU3crQixHQUFHdHdDLEVBQUVrRixFQUFFNE0sR0FBRyxJQUFJNXNCLEVBQUU4YSxFQUFFdXdDLFVBQVUsR0FBRyxPQUFPcnJELEVBQUUsQ0FBQ0EsRUFBRThhLEVBQUV1d0MsVUFBVSxJQUFJVCxHQUFHLElBQUlsNkQsRUFBRSxJQUFJa3lCLElBQUk1aUIsRUFBRXRKLElBQUlzcEIsRUFBRXR2QixFQUFFLFdBQWlCLEtBQVhBLEVBQUVzUCxFQUFFdkosSUFBSXVwQixNQUFnQnR2QixFQUFFLElBQUlreUIsSUFBSTVpQixFQUFFdEosSUFBSXNwQixFQUFFdHZCLElBQUlBLEVBQUUwUCxJQUFJd3NCLEtBQUtsOEIsRUFBRWlyQyxJQUFJL08sR0FBRzlSLEVBQUV3d0MsR0FBR3pnQyxLQUFLLEtBQUsvUCxFQUFFa0YsRUFBRTRNLEdBQUc1TSxFQUFFb00sS0FBS3RSLEVBQUVBLEdBQUcsQ0FBQyxTQUFTeXdDLEdBQUd6d0MsR0FBRyxFQUFFLENBQUMsSUFBSWtGLEVBQTRFLElBQXZFQSxFQUFFLEtBQUtsRixFQUFFenNCLE9BQXNCMnhCLEVBQUUsUUFBcEJBLEVBQUVsRixFQUFFeXFCLGdCQUF5QixPQUFPdmxCLEVBQUV3bEIsWUFBdUJ4bEIsRUFBRSxPQUFPbEYsRUFBRUEsRUFBRUEsRUFBRWpvQixNQUFNLE9BQU8sT0FBT2lvQixHQUFHLE9BQU8sSUFBSSxDQUNoVyxTQUFTMHdDLEdBQUcxd0MsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxHQUFHLE9BQUcsSUFBWSxFQUFQb3FCLEVBQUV0UyxPQUFlc1MsSUFBSWtGLEVBQUVsRixFQUFFdXFCLE9BQU8sT0FBT3ZxQixFQUFFdXFCLE9BQU8sSUFBSXpZLEVBQUV5WSxPQUFPLE9BQU96WSxFQUFFeVksUUFBUSxNQUFNLElBQUl6WSxFQUFFditCLE1BQU0sT0FBT3UrQixFQUFFd1ksVUFBVXhZLEVBQUV2K0IsSUFBSSxLQUFJMnhCLEVBQUV1aEMsSUFBSSxFQUFFLElBQUtsekQsSUFBSSxFQUFFcXpELEdBQUc5MEIsRUFBRTVNLEVBQUUsS0FBSzRNLEVBQUV3ekIsT0FBTyxHQUFHdGxDLElBQUVBLEVBQUV1cUIsT0FBTyxNQUFNdnFCLEVBQUVzbEMsTUFBTTF2RCxFQUFTb3FCLEVBQUMsQ0FBQyxJQUFJMndDLEdBQUd2dUIsRUFBR3d1QixrQkFBa0JyTCxJQUFHLEVBQUcsU0FBU3NMLEdBQUc3d0MsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUdnZ0IsRUFBRTJsQixNQUFNLE9BQU83cUIsRUFBRXlwQyxHQUFHdmtDLEVBQUUsS0FBSzRNLEVBQUU1c0IsR0FBR3NrRCxHQUFHdGtDLEVBQUVsRixFQUFFNnFCLE1BQU0vWSxFQUFFNXNCLEVBQUUsQ0FDblYsU0FBUzRyRCxHQUFHOXdDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixFQUFFdFAsR0FBR2s4QixFQUFFQSxFQUFFOEwsT0FBTyxJQUFJM2QsRUFBRWlGLEVBQUUxbUIsSUFBcUMsT0FBakMybUQsR0FBR2pnQyxFQUFFdHZCLEdBQUdzUCxFQUFFb21ELEdBQUd0ckMsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUUrYSxFQUFFcnFCLEdBQUdrOEIsRUFBRTY1QixLQUFRLE9BQU8zckMsR0FBSXVsQyxJQUEyRWxDLElBQUd2eEIsR0FBR214QixHQUFHLzlCLEdBQUdBLEVBQUVxbEIsT0FBTyxFQUFFc21CLEdBQUc3d0MsRUFBRWtGLEVBQUVoZ0IsRUFBRXRQLEdBQVVzdkIsRUFBRTJsQixRQUE3RzNsQixFQUFFK2dDLFlBQVlqbUMsRUFBRWltQyxZQUFZL2dDLEVBQUVxbEIsUUFBUSxLQUFLdnFCLEVBQUVzbEMsUUFBUTF2RCxFQUFFbTdELEdBQUcvd0MsRUFBRWtGLEVBQUV0dkIsR0FBb0QsQ0FDek4sU0FBU283RCxHQUFHaHhDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixFQUFFdFAsR0FBRyxHQUFHLE9BQU9vcUIsRUFBRSxDQUFDLElBQUlDLEVBQUU2UixFQUFFbDZCLEtBQUssTUFBRyxtQkFBb0Jxb0IsR0FBSWd4QyxHQUFHaHhDLFNBQUksSUFBU0EsRUFBRWpNLGNBQWMsT0FBTzhkLEVBQUV5TCxjQUFTLElBQVN6TCxFQUFFOWQsZUFBb0RnTSxFQUFFb3BDLEdBQUd0M0IsRUFBRWw2QixLQUFLLEtBQUtzTixFQUFFZ2dCLEVBQUVBLEVBQUV4WCxLQUFLOVgsSUFBSzRJLElBQUkwbUIsRUFBRTFtQixJQUFJd2hCLEVBQUVqb0IsT0FBT210QixFQUFTQSxFQUFFMmxCLE1BQU03cUIsSUFBckdrRixFQUFFM3hCLElBQUksR0FBRzJ4QixFQUFFdHRCLEtBQUtxb0IsRUFBRWl4QyxHQUFHbHhDLEVBQUVrRixFQUFFakYsRUFBRS9hLEVBQUV0UCxHQUF5RSxDQUFXLEdBQVZxcUIsRUFBRUQsRUFBRTZxQixNQUFTLElBQUs3cUIsRUFBRXNsQyxNQUFNMXZELEdBQUcsQ0FBQyxJQUFJOG9DLEVBQUV6ZSxFQUFFbWtDLGNBQTBDLElBQWhCdHlCLEVBQUUsUUFBZEEsRUFBRUEsRUFBRXlMLFNBQW1CekwsRUFBRW1vQixJQUFRdmIsRUFBRXg1QixJQUFJOGEsRUFBRXhoQixNQUFNMG1CLEVBQUUxbUIsSUFBSSxPQUFPdXlELEdBQUcvd0MsRUFBRWtGLEVBQUV0dkIsRUFBRSxDQUE2QyxPQUE1Q3N2QixFQUFFcWxCLE9BQU8sR0FBRXZxQixFQUFFa3BDLEdBQUdqcEMsRUFBRS9hLElBQUsxRyxJQUFJMG1CLEVBQUUxbUIsSUFBSXdoQixFQUFFam9CLE9BQU9tdEIsRUFBU0EsRUFBRTJsQixNQUFNN3FCLENBQUMsQ0FDMWIsU0FBU2t4QyxHQUFHbHhDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixFQUFFdFAsR0FBRyxHQUFHLE9BQU9vcUIsRUFBRSxDQUFDLElBQUlDLEVBQUVELEVBQUVva0MsY0FBYyxHQUFHbkssR0FBR2g2QixFQUFFL2EsSUFBSThhLEVBQUV4aEIsTUFBTTBtQixFQUFFMW1CLElBQUksSUFBRyttRCxJQUFHLEVBQUdyZ0MsRUFBRTArQixhQUFhMStDLEVBQUUrYSxFQUFFLElBQUtELEVBQUVzbEMsTUFBTTF2RCxHQUFzQyxPQUFPc3ZCLEVBQUVvZ0MsTUFBTXRsQyxFQUFFc2xDLE1BQU15TCxHQUFHL3dDLEVBQUVrRixFQUFFdHZCLEdBQWpFLElBQWEsT0FBUm9xQixFQUFFdXFCLFNBQWdCZ2IsSUFBRyxFQUF3QyxDQUFDLENBQUMsT0FBTzRMLEdBQUdueEMsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxFQUFFLENBQ3hOLFNBQVN3N0QsR0FBR3B4QyxFQUFFa0YsRUFBRTRNLEdBQUcsSUFBSTVzQixFQUFFZ2dCLEVBQUUwK0IsYUFBYWh1RCxFQUFFc1AsRUFBRXBOLFNBQVNtb0IsRUFBRSxPQUFPRCxFQUFFQSxFQUFFeXFCLGNBQWMsS0FBSyxHQUFHLFdBQVd2bEMsRUFBRXdJLEtBQUssR0FBRyxJQUFZLEVBQVB3WCxFQUFFeFgsTUFBUXdYLEVBQUV1bEIsY0FBYyxDQUFDNG1CLFVBQVUsRUFBRUMsVUFBVSxLQUFLamtELFlBQVksTUFBTTZ6QyxHQUFFcVEsR0FBR0MsSUFBSUEsSUFBSTEvQixNQUFNLENBQUMsR0FBRyxJQUFPLFdBQUZBLEdBQWMsT0FBTzlSLEVBQUUsT0FBT0MsRUFBRUEsRUFBRW94QyxVQUFVdi9CLEVBQUVBLEVBQUU1TSxFQUFFb2dDLE1BQU1wZ0MsRUFBRWdnQyxXQUFXLFdBQVdoZ0MsRUFBRXVsQixjQUFjLENBQUM0bUIsVUFBVXJ4QyxFQUFFc3hDLFVBQVUsS0FBS2prRCxZQUFZLE1BQU02WCxFQUFFK2dDLFlBQVksS0FBSy9FLEdBQUVxUSxHQUFHQyxJQUFJQSxJQUFJeHhDLEVBQUUsS0FBS2tGLEVBQUV1bEIsY0FBYyxDQUFDNG1CLFVBQVUsRUFBRUMsVUFBVSxLQUFLamtELFlBQVksTUFBTW5JLEVBQUUsT0FBTythLEVBQUVBLEVBQUVveEMsVUFBVXYvQixFQUFFb3ZCLEdBQUVxUSxHQUFHQyxJQUFJQSxJQUFJdHNELENBQUMsTUFBTSxPQUN0ZithLEdBQUcvYSxFQUFFK2EsRUFBRW94QyxVQUFVdi9CLEVBQUU1TSxFQUFFdWxCLGNBQWMsTUFBTXZsQyxFQUFFNHNCLEVBQUVvdkIsR0FBRXFRLEdBQUdDLElBQUlBLElBQUl0c0QsRUFBYyxPQUFaMnJELEdBQUc3d0MsRUFBRWtGLEVBQUV0dkIsRUFBRWs4QixHQUFVNU0sRUFBRTJsQixLQUFLLENBQUMsU0FBUzRtQixHQUFHenhDLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFNU0sRUFBRTFtQixLQUFPLE9BQU93aEIsR0FBRyxPQUFPOFIsR0FBRyxPQUFPOVIsR0FBR0EsRUFBRXhoQixNQUFNc3pCLEtBQUU1TSxFQUFFcWxCLE9BQU8sSUFBSXJsQixFQUFFcWxCLE9BQU8sUUFBTyxDQUFDLFNBQVM0bUIsR0FBR254QyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRXRQLEdBQUcsSUFBSXFxQixFQUFFeWhDLEdBQUc1dkIsR0FBR3d2QixHQUFHRixHQUFFMThDLFFBQW1ELE9BQTNDdWIsRUFBRXNoQyxHQUFHcjhCLEVBQUVqRixHQUFHa2xDLEdBQUdqZ0MsRUFBRXR2QixHQUFHazhCLEVBQUV3NUIsR0FBR3RyQyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRSthLEVBQUVycUIsR0FBR3NQLEVBQUV5bUQsS0FBUSxPQUFPM3JDLEdBQUl1bEMsSUFBMkVsQyxJQUFHbitDLEdBQUcrOUMsR0FBRy85QixHQUFHQSxFQUFFcWxCLE9BQU8sRUFBRXNtQixHQUFHN3dDLEVBQUVrRixFQUFFNE0sRUFBRWw4QixHQUFVc3ZCLEVBQUUybEIsUUFBN0czbEIsRUFBRStnQyxZQUFZam1DLEVBQUVpbUMsWUFBWS9nQyxFQUFFcWxCLFFBQVEsS0FBS3ZxQixFQUFFc2xDLFFBQVExdkQsRUFBRW03RCxHQUFHL3dDLEVBQUVrRixFQUFFdHZCLEdBQW9ELENBQ2xhLFNBQVM4N0QsR0FBRzF4QyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRXRQLEdBQUcsR0FBRzhyRCxHQUFHNXZCLEdBQUcsQ0FBQyxJQUFJN1IsR0FBRSxFQUFHOGhDLEdBQUc3OEIsRUFBRSxNQUFNakYsR0FBRSxFQUFXLEdBQVJrbEMsR0FBR2pnQyxFQUFFdHZCLEdBQU0sT0FBT3N2QixFQUFFZ2tCLFVBQVV5b0IsR0FBRzN4QyxFQUFFa0YsR0FBR2dqQyxHQUFHaGpDLEVBQUU0TSxFQUFFNXNCLEdBQUdxakQsR0FBR3JqQyxFQUFFNE0sRUFBRTVzQixFQUFFdFAsR0FBR3NQLEdBQUUsT0FBUSxHQUFHLE9BQU84YSxFQUFFLENBQUMsSUFBSTBlLEVBQUV4WixFQUFFZ2tCLFVBQVV0cUMsRUFBRXNtQixFQUFFay9CLGNBQWMxbEIsRUFBRTdtQyxNQUFNK0csRUFBRSxJQUFJMUQsRUFBRXdqQyxFQUFFck8sUUFBUXRRLEVBQUUrUixFQUFFK0ssWUFBMEM5YyxFQUE5QixpQkFBa0JBLEdBQUcsT0FBT0EsRUFBSXlsQyxHQUFHemxDLEdBQTJCd2hDLEdBQUdyOEIsRUFBMUJuRixFQUFFMmhDLEdBQUc1dkIsR0FBR3d2QixHQUFHRixHQUFFMThDLFNBQW1CLElBQUltZ0IsRUFBRWlOLEVBQUVtTCx5QkFBeUIwQixFQUFFLG1CQUFvQjlaLEdBQUcsbUJBQW9CNlosRUFBRThwQix3QkFBd0I3cEIsR0FBRyxtQkFBb0JELEVBQUU0cEIsa0NBQWtDLG1CQUFvQjVwQixFQUFFMnBCLDRCQUMxZHpwRCxJQUFJc0csR0FBR2hLLElBQUk2a0IsSUFBSXFvQyxHQUFHbGpDLEVBQUV3WixFQUFFeDVCLEVBQUU2YSxHQUFHZ21DLElBQUcsRUFBRyxJQUFJOWdDLEVBQUVDLEVBQUV1bEIsY0FBYy9MLEVBQUV0bUIsTUFBTTZNLEVBQUUraEMsR0FBRzloQyxFQUFFaGdCLEVBQUV3NUIsRUFBRTlvQyxHQUFHc0YsRUFBRWdxQixFQUFFdWxCLGNBQWM3ckMsSUFBSXNHLEdBQUcrZixJQUFJL3BCLEdBQUdtbUQsR0FBRzM4QyxTQUFTcWhELElBQUksbUJBQW9CbGhDLElBQUl3aUMsR0FBR25pQyxFQUFFNE0sRUFBRWpOLEVBQUUzZixHQUFHaEssRUFBRWdxQixFQUFFdWxCLGdCQUFnQjdyQyxFQUFFbW5ELElBQUlnQyxHQUFHN2lDLEVBQUU0TSxFQUFFbHpCLEVBQUVzRyxFQUFFK2YsRUFBRS9wQixFQUFFNmtCLEtBQUs0ZSxHQUFHLG1CQUFvQkQsRUFBRStwQiwyQkFBMkIsbUJBQW9CL3BCLEVBQUVncUIscUJBQXFCLG1CQUFvQmhxQixFQUFFZ3FCLG9CQUFvQmhxQixFQUFFZ3FCLHFCQUFxQixtQkFBb0JocUIsRUFBRStwQiwyQkFBMkIvcEIsRUFBRStwQiw2QkFBNkIsbUJBQW9CL3BCLEVBQUVpcUIsb0JBQW9CempDLEVBQUVxbEIsT0FBTyxXQUNsZixtQkFBb0I3TCxFQUFFaXFCLG9CQUFvQnpqQyxFQUFFcWxCLE9BQU8sU0FBU3JsQixFQUFFay9CLGNBQWNsL0MsRUFBRWdnQixFQUFFdWxCLGNBQWN2dkMsR0FBR3dqQyxFQUFFN21DLE1BQU1xTixFQUFFdzVCLEVBQUV0bUIsTUFBTWxkLEVBQUV3akMsRUFBRXJPLFFBQVF0USxFQUFFN2EsRUFBRXRHLElBQUksbUJBQW9COC9CLEVBQUVpcUIsb0JBQW9CempDLEVBQUVxbEIsT0FBTyxTQUFTcmxDLEdBQUUsRUFBRyxLQUFLLENBQUN3NUIsRUFBRXhaLEVBQUVna0IsVUFBVXNkLEdBQUd4bUMsRUFBRWtGLEdBQUd0bUIsRUFBRXNtQixFQUFFay9CLGNBQWNya0MsRUFBRW1GLEVBQUV0dEIsT0FBT3N0QixFQUFFdStCLFlBQVk3a0QsRUFBRTZsRCxHQUFHdi9CLEVBQUV0dEIsS0FBS2dILEdBQUc4L0IsRUFBRTdtQyxNQUFNa29CLEVBQUU0ZSxFQUFFelosRUFBRTArQixhQUFhMytCLEVBQUV5WixFQUFFck8sUUFBc0RuMUIsRUFBOUIsaUJBQWhCQSxFQUFFNDJCLEVBQUUrSyxjQUFpQyxPQUFPM2hDLEVBQUlzcUQsR0FBR3RxRCxHQUEyQnFtRCxHQUFHcjhCLEVBQTFCaHFCLEVBQUV3bUQsR0FBRzV2QixHQUFHd3ZCLEdBQUdGLEdBQUUxOEMsU0FBbUIsSUFBSXRKLEVBQUUwMkIsRUFBRW1MLDBCQUEwQnBZLEVBQUUsbUJBQW9CenBCLEdBQUcsbUJBQW9Cc2pDLEVBQUU4cEIsMEJBQzllLG1CQUFvQjlwQixFQUFFNHBCLGtDQUFrQyxtQkFBb0I1cEIsRUFBRTJwQiw0QkFBNEJ6cEQsSUFBSSsvQixHQUFHMVosSUFBSS9wQixJQUFJa3RELEdBQUdsakMsRUFBRXdaLEVBQUV4NUIsRUFBRWhLLEdBQUc2cUQsSUFBRyxFQUFHOWdDLEVBQUVDLEVBQUV1bEIsY0FBYy9MLEVBQUV0bUIsTUFBTTZNLEVBQUUraEMsR0FBRzloQyxFQUFFaGdCLEVBQUV3NUIsRUFBRTlvQyxHQUFHLElBQUl1cEIsRUFBRStGLEVBQUV1bEIsY0FBYzdyQyxJQUFJKy9CLEdBQUcxWixJQUFJOUYsR0FBR2tpQyxHQUFHMzhDLFNBQVNxaEQsSUFBSSxtQkFBb0IzcUQsSUFBSWlzRCxHQUFHbmlDLEVBQUU0TSxFQUFFMTJCLEVBQUU4SixHQUFHaWEsRUFBRStGLEVBQUV1bEIsZ0JBQWdCMXFCLEVBQUVnbUMsSUFBSWdDLEdBQUc3aUMsRUFBRTRNLEVBQUUvUixFQUFFN2EsRUFBRStmLEVBQUU5RixFQUFFamtCLEtBQUksSUFBSzJwQixHQUFHLG1CQUFvQjZaLEVBQUVrekIsNEJBQTRCLG1CQUFvQmx6QixFQUFFbXpCLHNCQUFzQixtQkFBb0JuekIsRUFBRW16QixxQkFBcUJuekIsRUFBRW16QixvQkFBb0Izc0QsRUFBRWlhLEVBQUVqa0IsR0FBRyxtQkFBb0J3akMsRUFBRWt6Qiw0QkFDNWZsekIsRUFBRWt6QiwyQkFBMkIxc0QsRUFBRWlhLEVBQUVqa0IsSUFBSSxtQkFBb0J3akMsRUFBRW96QixxQkFBcUI1c0MsRUFBRXFsQixPQUFPLEdBQUcsbUJBQW9CN0wsRUFBRThwQiwwQkFBMEJ0akMsRUFBRXFsQixPQUFPLFFBQVEsbUJBQW9CN0wsRUFBRW96QixvQkFBb0JsekQsSUFBSW9oQixFQUFFb2tDLGVBQWVuL0IsSUFBSWpGLEVBQUV5cUIsZ0JBQWdCdmxCLEVBQUVxbEIsT0FBTyxHQUFHLG1CQUFvQjdMLEVBQUU4cEIseUJBQXlCNXBELElBQUlvaEIsRUFBRW9rQyxlQUFlbi9CLElBQUlqRixFQUFFeXFCLGdCQUFnQnZsQixFQUFFcWxCLE9BQU8sTUFBTXJsQixFQUFFay9CLGNBQWNsL0MsRUFBRWdnQixFQUFFdWxCLGNBQWN0ckIsR0FBR3VmLEVBQUU3bUMsTUFBTXFOLEVBQUV3NUIsRUFBRXRtQixNQUFNK0csRUFBRXVmLEVBQUVyTyxRQUFRbjFCLEVBQUVnSyxFQUFFNmEsSUFBSSxtQkFBb0IyZSxFQUFFb3pCLG9CQUFvQmx6RCxJQUFJb2hCLEVBQUVva0MsZUFBZW4vQixJQUNqZmpGLEVBQUV5cUIsZ0JBQWdCdmxCLEVBQUVxbEIsT0FBTyxHQUFHLG1CQUFvQjdMLEVBQUU4cEIseUJBQXlCNXBELElBQUlvaEIsRUFBRW9rQyxlQUFlbi9CLElBQUlqRixFQUFFeXFCLGdCQUFnQnZsQixFQUFFcWxCLE9BQU8sTUFBTXJsQyxHQUFFLEVBQUcsQ0FBQyxPQUFPNnNELEdBQUcveEMsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUUrYSxFQUFFcnFCLEVBQUUsQ0FDbkssU0FBU204RCxHQUFHL3hDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixFQUFFdFAsRUFBRXFxQixHQUFHd3hDLEdBQUd6eEMsRUFBRWtGLEdBQUcsSUFBSXdaLEVBQUUsSUFBYSxJQUFSeFosRUFBRXFsQixPQUFXLElBQUlybEMsSUFBSXc1QixFQUFFLE9BQU85b0MsR0FBR3FzRCxHQUFHLzhCLEVBQUU0TSxHQUFFLEdBQUlpL0IsR0FBRy93QyxFQUFFa0YsRUFBRWpGLEdBQUcvYSxFQUFFZ2dCLEVBQUVna0IsVUFBVXluQixHQUFHanNELFFBQVF3Z0IsRUFBRSxJQUFJdG1CLEVBQUU4L0IsR0FBRyxtQkFBb0I1TSxFQUFFa0wseUJBQXlCLEtBQUs5M0IsRUFBRTA0QixTQUF3SSxPQUEvSDFZLEVBQUVxbEIsT0FBTyxFQUFFLE9BQU92cUIsR0FBRzBlLEdBQUd4WixFQUFFMmxCLE1BQU0yZSxHQUFHdGtDLEVBQUVsRixFQUFFNnFCLE1BQU0sS0FBSzVxQixHQUFHaUYsRUFBRTJsQixNQUFNMmUsR0FBR3RrQyxFQUFFLEtBQUt0bUIsRUFBRXFoQixJQUFJNHdDLEdBQUc3d0MsRUFBRWtGLEVBQUV0bUIsRUFBRXFoQixHQUFHaUYsRUFBRXVsQixjQUFjdmxDLEVBQUVrVCxNQUFNeGlCLEdBQUdxc0QsR0FBRy84QixFQUFFNE0sR0FBRSxHQUFXNU0sRUFBRTJsQixLQUFLLENBQUMsU0FBU21uQixHQUFHaHlDLEdBQUcsSUFBSWtGLEVBQUVsRixFQUFFa3BCLFVBQVVoa0IsRUFBRStzQyxlQUFlclEsR0FBRzVoQyxFQUFFa0YsRUFBRStzQyxlQUFlL3NDLEVBQUUrc0MsaUJBQWlCL3NDLEVBQUVtTCxTQUFTbkwsRUFBRW1MLFNBQVN1eEIsR0FBRzVoQyxFQUFFa0YsRUFBRW1MLFNBQVEsR0FBSTA1QixHQUFHL3BDLEVBQUVrRixFQUFFMnFCLGNBQWMsQ0FDNWUsU0FBU3FpQixHQUFHbHlDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixFQUFFdFAsR0FBdUMsT0FBcEMwdUQsS0FBS0MsR0FBRzN1RCxHQUFHc3ZCLEVBQUVxbEIsT0FBTyxJQUFJc21CLEdBQUc3d0MsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQVVnZ0IsRUFBRTJsQixLQUFLLENBQUMsSUFhcUxzbkIsR0FBTUMsR0FBR0MsR0FiMUxDLEdBQUcsQ0FBQzVuQixXQUFXLEtBQUtvWixZQUFZLEtBQUtDLFVBQVUsR0FBRyxTQUFTd08sR0FBR3Z5QyxHQUFHLE1BQU0sQ0FBQ3F4QyxVQUFVcnhDLEVBQUVzeEMsVUFBVSxLQUFLamtELFlBQVksS0FBSyxDQUNsTSxTQUFTbWxELEdBQUd4eUMsRUFBRWtGLEVBQUU0TSxHQUFHLElBQTBEbHpCLEVBQXREc0csRUFBRWdnQixFQUFFMCtCLGFBQWFodUQsRUFBRXUwRCxHQUFFemxELFFBQVF1YixHQUFFLEVBQUd5ZSxFQUFFLElBQWEsSUFBUnhaLEVBQUVxbEIsT0FBcUosSUFBdkkzckMsRUFBRTgvQixLQUFLOS9CLEdBQUUsT0FBT29oQixHQUFHLE9BQU9BLEVBQUV5cUIsZ0JBQWlCLElBQU8sRUFBRjcwQyxJQUFTZ0osR0FBRXFoQixHQUFFLEVBQUdpRixFQUFFcWxCLFFBQVEsS0FBWSxPQUFPdnFCLEdBQUcsT0FBT0EsRUFBRXlxQixnQkFBYzcwQyxHQUFHLEdBQUVzckQsR0FBRWlKLEdBQUksRUFBRnYwRCxHQUFRLE9BQU9vcUIsRUFBMkIsT0FBeEJpa0MsR0FBRy8rQixHQUF3QixRQUFyQmxGLEVBQUVrRixFQUFFdWxCLGdCQUEyQyxRQUFmenFCLEVBQUVBLEVBQUUwcUIsYUFBNEIsSUFBWSxFQUFQeGxCLEVBQUV4WCxNQUFRd1gsRUFBRW9nQyxNQUFNLEVBQUUsT0FBT3RsQyxFQUFFbU0sS0FBS2pILEVBQUVvZ0MsTUFBTSxFQUFFcGdDLEVBQUVvZ0MsTUFBTSxXQUFXLE9BQUs1bUIsRUFBRXg1QixFQUFFcE4sU0FBU2tvQixFQUFFOWEsRUFBRXV0RCxTQUFnQnh5QyxHQUFHL2EsRUFBRWdnQixFQUFFeFgsS0FBS3VTLEVBQUVpRixFQUFFMmxCLE1BQU1uTSxFQUFFLENBQUNoeEIsS0FBSyxTQUFTNVYsU0FBUzRtQyxHQUFHLElBQU8sRUFBRng1QixJQUFNLE9BQU8rYSxHQUFHQSxFQUFFaWxDLFdBQVcsRUFBRWpsQyxFQUFFMmpDLGFBQzdlbGxCLEdBQUd6ZSxFQUFFeXlDLEdBQUdoMEIsRUFBRXg1QixFQUFFLEVBQUUsTUFBTThhLEVBQUV1cEMsR0FBR3ZwQyxFQUFFOWEsRUFBRTRzQixFQUFFLE1BQU03UixFQUFFbG9CLE9BQU9tdEIsRUFBRWxGLEVBQUVqb0IsT0FBT210QixFQUFFakYsRUFBRTZxQixRQUFROXFCLEVBQUVrRixFQUFFMmxCLE1BQU01cUIsRUFBRWlGLEVBQUUybEIsTUFBTUosY0FBYzhuQixHQUFHemdDLEdBQUc1TSxFQUFFdWxCLGNBQWM2bkIsR0FBR3R5QyxHQUFHMnlDLEdBQUd6dEMsRUFBRXdaLElBQXFCLEdBQUcsUUFBckI5b0MsRUFBRW9xQixFQUFFeXFCLGdCQUEyQyxRQUFmN3JDLEVBQUVoSixFQUFFODBDLFlBQXFCLE9BR3BNLFNBQVkxcUIsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxFQUFFcXFCLEVBQUV5ZSxHQUFHLEdBQUc1TSxFQUFHLE9BQVcsSUFBUjVNLEVBQUVxbEIsT0FBaUJybEIsRUFBRXFsQixRQUFRLElBQXdCcW9CLEdBQUc1eUMsRUFBRWtGLEVBQUV3WixFQUEzQng1QixFQUFFMHFELEdBQUduaUQsTUFBTXFYLEVBQUUsU0FBc0IsT0FBT0ksRUFBRXVsQixlQUFxQnZsQixFQUFFMmxCLE1BQU03cUIsRUFBRTZxQixNQUFNM2xCLEVBQUVxbEIsT0FBTyxJQUFJLE9BQUt0cUIsRUFBRS9hLEVBQUV1dEQsU0FBUzc4RCxFQUFFc3ZCLEVBQUV4WCxLQUFLeEksRUFBRXd0RCxHQUFHLENBQUNobEQsS0FBSyxVQUFVNVYsU0FBU29OLEVBQUVwTixVQUFVbEMsRUFBRSxFQUFFLE9BQU1xcUIsRUFBRXNwQyxHQUFHdHBDLEVBQUVycUIsRUFBRThvQyxFQUFFLE9BQVE2TCxPQUFPLEVBQUVybEMsRUFBRW5OLE9BQU9tdEIsRUFBRWpGLEVBQUVsb0IsT0FBT210QixFQUFFaGdCLEVBQUU0bEMsUUFBUTdxQixFQUFFaUYsRUFBRTJsQixNQUFNM2xDLEVBQUUsSUFBWSxFQUFQZ2dCLEVBQUV4WCxPQUFTODdDLEdBQUd0a0MsRUFBRWxGLEVBQUU2cUIsTUFBTSxLQUFLbk0sR0FBR3haLEVBQUUybEIsTUFBTUosY0FBYzhuQixHQUFHN3pCLEdBQUd4WixFQUFFdWxCLGNBQWM2bkIsR0FBVXJ5QyxHQUFFLEdBQUcsSUFBWSxFQUFQaUYsRUFBRXhYLE1BQVEsT0FBT2tsRCxHQUFHNXlDLEVBQUVrRixFQUFFd1osRUFBRSxNQUFNLEdBQUcsT0FBTzlvQyxFQUFFdTJCLEtBQUssQ0FDaGQsR0FEaWRqbkIsRUFBRXRQLEVBQUVoQyxhQUFhZ0MsRUFBRWhDLFlBQVlpL0QsUUFDM2UsSUFBSWowRCxFQUFFc0csRUFBRTR0RCxLQUEwQyxPQUFyQzV0RCxFQUFFdEcsRUFBMENnMEQsR0FBRzV5QyxFQUFFa0YsRUFBRXdaLEVBQS9CeDVCLEVBQUUwcUQsR0FBbEIzdkMsRUFBRXhTLE1BQU1xWCxFQUFFLE1BQWE1ZixPQUFFLEdBQTBCLENBQXdCLEdBQXZCdEcsRUFBRSxJQUFLOC9CLEVBQUUxZSxFQUFFa2xDLFlBQWVLLElBQUkzbUQsRUFBRSxDQUFLLEdBQUcsUUFBUHNHLEVBQUU2bkQsSUFBYyxDQUFDLE9BQU9ydUIsR0FBR0EsR0FBRyxLQUFLLEVBQUU5b0MsRUFBRSxFQUFFLE1BQU0sS0FBSyxHQUFHQSxFQUFFLEVBQUUsTUFBTSxLQUFLLEdBQUcsS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBTSxLQUFLLE1BQU0sS0FBSyxNQUFNLEtBQUssT0FBTyxLQUFLLE9BQU8sS0FBSyxPQUFPLEtBQUssUUFBUSxLQUFLLFFBQVEsS0FBSyxRQUFRLEtBQUssUUFBUSxLQUFLLFNBQVMsS0FBSyxTQUFTLEtBQUssU0FBU0EsRUFBRSxHQUFHLE1BQU0sS0FBSyxVQUFVQSxFQUFFLFVBQVUsTUFBTSxRQUFRQSxFQUFFLEVBQ2hkLEtBRGtkQSxFQUFFLElBQUtBLEdBQUdzUCxFQUFFa29DLGVBQWUxTyxJQUFJLEVBQUU5b0MsSUFDNWVBLElBQUlxcUIsRUFBRThqQyxZQUFZOWpDLEVBQUU4akMsVUFBVW51RCxFQUFFa3dELEdBQUc5bEMsRUFBRXBxQixHQUFHZ3lELEdBQUcxaUQsRUFBRThhLEVBQUVwcUIsR0FBRyxHQUFHLENBQTBCLE9BQXpCbTlELEtBQWdDSCxHQUFHNXlDLEVBQUVrRixFQUFFd1osRUFBbEN4NUIsRUFBRTBxRCxHQUFHbmlELE1BQU1xWCxFQUFFLE9BQXlCLENBQUMsTUFBRyxPQUFPbHZCLEVBQUV1MkIsTUFBWWpILEVBQUVxbEIsT0FBTyxJQUFJcmxCLEVBQUUybEIsTUFBTTdxQixFQUFFNnFCLE1BQU0zbEIsRUFBRTh0QyxHQUFHampDLEtBQUssS0FBSy9QLEdBQUdwcUIsRUFBRXE5RCxZQUFZL3RDLEVBQUUsT0FBS2xGLEVBQUVDLEVBQUU2akMsWUFBWVYsR0FBRzlDLEdBQUcxcUQsRUFBRWhDLGFBQWF1dkQsR0FBR2orQixFQUFFbStCLElBQUUsRUFBR0MsR0FBRyxLQUFLLE9BQU90akMsSUFBSTBpQyxHQUFHQyxNQUFNRSxHQUFHSCxHQUFHQyxNQUFNRyxHQUFHSixHQUFHQyxNQUFNQyxHQUFHQyxHQUFHN2lDLEVBQUUrSyxHQUFHKzNCLEdBQUc5aUMsRUFBRTZqQyxTQUFTakIsR0FBRzE5QixJQUFHQSxFQUFFeXRDLEdBQUd6dEMsRUFBRWhnQixFQUFFcE4sV0FBWXl5QyxPQUFPLEtBQVlybEIsRUFBQyxDQUxyS2d1QyxDQUFHbHpDLEVBQUVrRixFQUFFd1osRUFBRXg1QixFQUFFdEcsRUFBRWhKLEVBQUVrOEIsR0FBRyxHQUFHN1IsRUFBRSxDQUFDQSxFQUFFL2EsRUFBRXV0RCxTQUFTL3pCLEVBQUV4WixFQUFFeFgsS0FBZTlPLEdBQVZoSixFQUFFb3FCLEVBQUU2cUIsT0FBVUMsUUFBUSxJQUFJNXZDLEVBQUUsQ0FBQ3dTLEtBQUssU0FBUzVWLFNBQVNvTixFQUFFcE4sVUFDaEYsT0FEMEYsSUFBTyxFQUFGNG1DLElBQU14WixFQUFFMmxCLFFBQVFqMUMsSUFBR3NQLEVBQUVnZ0IsRUFBRTJsQixPQUFRcWEsV0FBVyxFQUFFaGdELEVBQUUwK0MsYUFBYTFvRCxFQUFFZ3FCLEVBQUV3K0IsVUFBVSxPQUFPeCtDLEVBQUVna0QsR0FBR3R6RCxFQUFFc0YsSUFBS2k0RCxhQUE0QixTQUFmdjlELEVBQUV1OUQsYUFBdUIsT0FBT3YwRCxFQUFFcWhCLEVBQUVpcEMsR0FBR3RxRCxFQUFFcWhCLElBQUlBLEVBQUVzcEMsR0FBR3RwQyxFQUFFeWUsRUFBRTVNLEVBQUUsT0FBUXlZLE9BQU8sRUFBR3RxQixFQUFFbG9CLE9BQ25mbXRCLEVBQUVoZ0IsRUFBRW5OLE9BQU9tdEIsRUFBRWhnQixFQUFFNGxDLFFBQVE3cUIsRUFBRWlGLEVBQUUybEIsTUFBTTNsQyxFQUFFQSxFQUFFK2EsRUFBRUEsRUFBRWlGLEVBQUUybEIsTUFBOEJuTSxFQUFFLFFBQTFCQSxFQUFFMWUsRUFBRTZxQixNQUFNSixlQUF5QjhuQixHQUFHemdDLEdBQUcsQ0FBQ3UvQixVQUFVM3lCLEVBQUUyeUIsVUFBVXYvQixFQUFFdy9CLFVBQVUsS0FBS2prRCxZQUFZcXhCLEVBQUVyeEIsYUFBYTRTLEVBQUV3cUIsY0FBYy9MLEVBQUV6ZSxFQUFFaWxDLFdBQVdsbEMsRUFBRWtsQyxZQUFZcHpCLEVBQUU1TSxFQUFFdWxCLGNBQWM2bkIsR0FBVXB0RCxDQUFDLENBQW9PLE9BQXpOOGEsR0FBVkMsRUFBRUQsRUFBRTZxQixPQUFVQyxRQUFRNWxDLEVBQUVna0QsR0FBR2pwQyxFQUFFLENBQUN2UyxLQUFLLFVBQVU1VixTQUFTb04sRUFBRXBOLFdBQVcsSUFBWSxFQUFQb3RCLEVBQUV4WCxRQUFVeEksRUFBRW9nRCxNQUFNeHpCLEdBQUc1c0IsRUFBRW5OLE9BQU9tdEIsRUFBRWhnQixFQUFFNGxDLFFBQVEsS0FBSyxPQUFPOXFCLElBQWtCLFFBQWQ4UixFQUFFNU0sRUFBRXcrQixZQUFvQngrQixFQUFFdytCLFVBQVUsQ0FBQzFqQyxHQUFHa0YsRUFBRXFsQixPQUFPLElBQUl6WSxFQUFFNzlCLEtBQUsrckIsSUFBSWtGLEVBQUUybEIsTUFBTTNsQyxFQUFFZ2dCLEVBQUV1bEIsY0FBYyxLQUFZdmxDLENBQUMsQ0FDbmQsU0FBU3l0RCxHQUFHM3lDLEVBQUVrRixHQUE4RCxPQUEzREEsRUFBRXd0QyxHQUFHLENBQUNobEQsS0FBSyxVQUFVNVYsU0FBU290QixHQUFHbEYsRUFBRXRTLEtBQUssRUFBRSxPQUFRM1YsT0FBT2lvQixFQUFTQSxFQUFFNnFCLE1BQU0zbEIsQ0FBQyxDQUFDLFNBQVMwdEMsR0FBRzV5QyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBd0csT0FBckcsT0FBT0EsR0FBR3EvQyxHQUFHci9DLEdBQUdza0QsR0FBR3RrQyxFQUFFbEYsRUFBRTZxQixNQUFNLEtBQUsvWSxJQUFHOVIsRUFBRTJ5QyxHQUFHenRDLEVBQUVBLEVBQUUwK0IsYUFBYTlyRCxXQUFZeXlDLE9BQU8sRUFBRXJsQixFQUFFdWxCLGNBQWMsS0FBWXpxQixDQUFDLENBR2tKLFNBQVNvekMsR0FBR3B6QyxFQUFFa0YsRUFBRTRNLEdBQUc5UixFQUFFc2xDLE9BQU9wZ0MsRUFBRSxJQUFJaGdCLEVBQUU4YSxFQUFFc3FCLFVBQVUsT0FBT3BsQyxJQUFJQSxFQUFFb2dELE9BQU9wZ0MsR0FBRysvQixHQUFHamxDLEVBQUVqb0IsT0FBT210QixFQUFFNE0sRUFBRSxDQUN4YyxTQUFTdWhDLEdBQUdyekMsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxHQUFHLElBQUlxcUIsRUFBRUQsRUFBRXlxQixjQUFjLE9BQU94cUIsRUFBRUQsRUFBRXlxQixjQUFjLENBQUM2b0IsWUFBWXB1QyxFQUFFcXVDLFVBQVUsS0FBS0MsbUJBQW1CLEVBQUVDLEtBQUt2dUQsRUFBRXd1RCxLQUFLNWhDLEVBQUU2aEMsU0FBUy85RCxJQUFJcXFCLEVBQUVxekMsWUFBWXB1QyxFQUFFakYsRUFBRXN6QyxVQUFVLEtBQUt0ekMsRUFBRXV6QyxtQkFBbUIsRUFBRXZ6QyxFQUFFd3pDLEtBQUt2dUQsRUFBRSthLEVBQUV5ekMsS0FBSzVoQyxFQUFFN1IsRUFBRTB6QyxTQUFTLzlELEVBQUUsQ0FDM08sU0FBU2crRCxHQUFHNXpDLEVBQUVrRixFQUFFNE0sR0FBRyxJQUFJNXNCLEVBQUVnZ0IsRUFBRTArQixhQUFhaHVELEVBQUVzUCxFQUFFbWxELFlBQVlwcUMsRUFBRS9hLEVBQUV3dUQsS0FBc0MsR0FBakM3QyxHQUFHN3dDLEVBQUVrRixFQUFFaGdCLEVBQUVwTixTQUFTZzZCLEdBQWtCLElBQU8sR0FBdEI1c0IsRUFBRWlsRCxHQUFFemxELFVBQXFCUSxFQUFJLEVBQUZBLEVBQUksRUFBRWdnQixFQUFFcWxCLE9BQU8sUUFBUSxDQUFDLEdBQUcsT0FBT3ZxQixHQUFHLElBQWEsSUFBUkEsRUFBRXVxQixPQUFXdnFCLEVBQUUsSUFBSUEsRUFBRWtGLEVBQUUybEIsTUFBTSxPQUFPN3FCLEdBQUcsQ0FBQyxHQUFHLEtBQUtBLEVBQUV6c0IsSUFBSSxPQUFPeXNCLEVBQUV5cUIsZUFBZTJvQixHQUFHcHpDLEVBQUU4UixFQUFFNU0sUUFBUSxHQUFHLEtBQUtsRixFQUFFenNCLElBQUk2L0QsR0FBR3B6QyxFQUFFOFIsRUFBRTVNLFFBQVEsR0FBRyxPQUFPbEYsRUFBRTZxQixNQUFNLENBQUM3cUIsRUFBRTZxQixNQUFNOXlDLE9BQU9pb0IsRUFBRUEsRUFBRUEsRUFBRTZxQixNQUFNLFFBQVEsQ0FBQyxHQUFHN3FCLElBQUlrRixFQUFFLE1BQU1sRixFQUFFLEtBQUssT0FBT0EsRUFBRThxQixTQUFTLENBQUMsR0FBRyxPQUFPOXFCLEVBQUVqb0IsUUFBUWlvQixFQUFFam9CLFNBQVNtdEIsRUFBRSxNQUFNbEYsRUFBRUEsRUFBRUEsRUFBRWpvQixNQUFNLENBQUNpb0IsRUFBRThxQixRQUFRL3lDLE9BQU9pb0IsRUFBRWpvQixPQUFPaW9CLEVBQUVBLEVBQUU4cUIsT0FBTyxDQUFDNWxDLEdBQUcsQ0FBQyxDQUFRLEdBQVBnOEMsR0FBRWlKLEdBQUVqbEQsR0FBTSxJQUFZLEVBQVBnZ0IsRUFBRXhYLE1BQVF3WCxFQUFFdWxCLGNBQy9lLFVBQVUsT0FBTzcwQyxHQUFHLElBQUssV0FBcUIsSUFBVms4QixFQUFFNU0sRUFBRTJsQixNQUFVajFDLEVBQUUsS0FBSyxPQUFPazhCLEdBQWlCLFFBQWQ5UixFQUFFOFIsRUFBRXdZLFlBQW9CLE9BQU84ZixHQUFHcHFDLEtBQUtwcUIsRUFBRWs4QixHQUFHQSxFQUFFQSxFQUFFZ1osUUFBWSxRQUFKaFosRUFBRWw4QixJQUFZQSxFQUFFc3ZCLEVBQUUybEIsTUFBTTNsQixFQUFFMmxCLE1BQU0sT0FBT2oxQyxFQUFFazhCLEVBQUVnWixRQUFRaFosRUFBRWdaLFFBQVEsTUFBTXVvQixHQUFHbnVDLEdBQUUsRUFBR3R2QixFQUFFazhCLEVBQUU3UixHQUFHLE1BQU0sSUFBSyxZQUE2QixJQUFqQjZSLEVBQUUsS0FBS2w4QixFQUFFc3ZCLEVBQUUybEIsTUFBVTNsQixFQUFFMmxCLE1BQU0sS0FBSyxPQUFPajFDLEdBQUcsQ0FBZSxHQUFHLFFBQWpCb3FCLEVBQUVwcUIsRUFBRTAwQyxZQUF1QixPQUFPOGYsR0FBR3BxQyxHQUFHLENBQUNrRixFQUFFMmxCLE1BQU1qMUMsRUFBRSxLQUFLLENBQUNvcUIsRUFBRXBxQixFQUFFazFDLFFBQVFsMUMsRUFBRWsxQyxRQUFRaFosRUFBRUEsRUFBRWw4QixFQUFFQSxFQUFFb3FCLENBQUMsQ0FBQ3F6QyxHQUFHbnVDLEdBQUUsRUFBRzRNLEVBQUUsS0FBSzdSLEdBQUcsTUFBTSxJQUFLLFdBQVdvekMsR0FBR251QyxHQUFFLEVBQUcsS0FBSyxVQUFLLEdBQVEsTUFBTSxRQUFRQSxFQUFFdWxCLGNBQWMsS0FBSyxPQUFPdmxCLEVBQUUybEIsS0FBSyxDQUM3ZCxTQUFTOG1CLEdBQUczeEMsRUFBRWtGLEdBQUcsSUFBWSxFQUFQQSxFQUFFeFgsT0FBUyxPQUFPc1MsSUFBSUEsRUFBRXNxQixVQUFVLEtBQUtwbEIsRUFBRW9sQixVQUFVLEtBQUtwbEIsRUFBRXFsQixPQUFPLEVBQUUsQ0FBQyxTQUFTd21CLEdBQUcvd0MsRUFBRWtGLEVBQUU0TSxHQUF5RCxHQUF0RCxPQUFPOVIsSUFBSWtGLEVBQUVrZ0MsYUFBYXBsQyxFQUFFb2xDLGNBQWM2QixJQUFJL2hDLEVBQUVvZ0MsTUFBUyxJQUFLeHpCLEVBQUU1TSxFQUFFZ2dDLFlBQVksT0FBTyxLQUFLLEdBQUcsT0FBT2xsQyxHQUFHa0YsRUFBRTJsQixRQUFRN3FCLEVBQUU2cUIsTUFBTSxNQUFNcDlCLE1BQU1xWCxFQUFFLE1BQU0sR0FBRyxPQUFPSSxFQUFFMmxCLE1BQU0sQ0FBNEMsSUFBakMvWSxFQUFFbzNCLEdBQVpscEMsRUFBRWtGLEVBQUUybEIsTUFBYTdxQixFQUFFNGpDLGNBQWMxK0IsRUFBRTJsQixNQUFNL1ksRUFBTUEsRUFBRS81QixPQUFPbXRCLEVBQUUsT0FBT2xGLEVBQUU4cUIsU0FBUzlxQixFQUFFQSxFQUFFOHFCLFNBQVFoWixFQUFFQSxFQUFFZ1osUUFBUW9lLEdBQUdscEMsRUFBRUEsRUFBRTRqQyxlQUFnQjdyRCxPQUFPbXRCLEVBQUU0TSxFQUFFZ1osUUFBUSxJQUFJLENBQUMsT0FBTzVsQixFQUFFMmxCLEtBQUssQ0FPOWEsU0FBU2dwQixHQUFHN3pDLEVBQUVrRixHQUFHLElBQUltK0IsR0FBRSxPQUFPcmpDLEVBQUUyekMsVUFBVSxJQUFLLFNBQVN6dUMsRUFBRWxGLEVBQUUwekMsS0FBSyxJQUFJLElBQUk1aEMsRUFBRSxLQUFLLE9BQU81TSxHQUFHLE9BQU9BLEVBQUVvbEIsWUFBWXhZLEVBQUU1TSxHQUFHQSxFQUFFQSxFQUFFNGxCLFFBQVEsT0FBT2haLEVBQUU5UixFQUFFMHpDLEtBQUssS0FBSzVoQyxFQUFFZ1osUUFBUSxLQUFLLE1BQU0sSUFBSyxZQUFZaFosRUFBRTlSLEVBQUUwekMsS0FBSyxJQUFJLElBQUl4dUQsRUFBRSxLQUFLLE9BQU80c0IsR0FBRyxPQUFPQSxFQUFFd1ksWUFBWXBsQyxFQUFFNHNCLEdBQUdBLEVBQUVBLEVBQUVnWixRQUFRLE9BQU81bEMsRUFBRWdnQixHQUFHLE9BQU9sRixFQUFFMHpDLEtBQUsxekMsRUFBRTB6QyxLQUFLLEtBQUsxekMsRUFBRTB6QyxLQUFLNW9CLFFBQVEsS0FBSzVsQyxFQUFFNGxDLFFBQVEsS0FBSyxDQUM1VSxTQUFTZ3BCLEdBQUU5ekMsR0FBRyxJQUFJa0YsRUFBRSxPQUFPbEYsRUFBRXNxQixXQUFXdHFCLEVBQUVzcUIsVUFBVU8sUUFBUTdxQixFQUFFNnFCLE1BQU0vWSxFQUFFLEVBQUU1c0IsRUFBRSxFQUFFLEdBQUdnZ0IsRUFBRSxJQUFJLElBQUl0dkIsRUFBRW9xQixFQUFFNnFCLE1BQU0sT0FBT2oxQyxHQUFHazhCLEdBQUdsOEIsRUFBRTB2RCxNQUFNMXZELEVBQUVzdkQsV0FBV2hnRCxHQUFrQixTQUFmdFAsRUFBRXU5RCxhQUFzQmp1RCxHQUFXLFNBQVJ0UCxFQUFFMjBDLE1BQWUzMEMsRUFBRW1DLE9BQU9pb0IsRUFBRXBxQixFQUFFQSxFQUFFazFDLGFBQWEsSUFBSWwxQyxFQUFFb3FCLEVBQUU2cUIsTUFBTSxPQUFPajFDLEdBQUdrOEIsR0FBR2w4QixFQUFFMHZELE1BQU0xdkQsRUFBRXN2RCxXQUFXaGdELEdBQUd0UCxFQUFFdTlELGFBQWFqdUQsR0FBR3RQLEVBQUUyMEMsTUFBTTMwQyxFQUFFbUMsT0FBT2lvQixFQUFFcHFCLEVBQUVBLEVBQUVrMUMsUUFBeUMsT0FBakM5cUIsRUFBRW16QyxjQUFjanVELEVBQUU4YSxFQUFFa2xDLFdBQVdwekIsRUFBUzVNLENBQUMsQ0FDN1YsU0FBUzZ1QyxHQUFHL3pDLEVBQUVrRixFQUFFNE0sR0FBRyxJQUFJNXNCLEVBQUVnZ0IsRUFBRTArQixhQUFtQixPQUFOVixHQUFHaCtCLEdBQVVBLEVBQUUzeEIsS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLEdBQUcsT0FBT3VnRSxHQUFFNXVDLEdBQUcsS0FBSyxLQUFLLEVBVXRELEtBQUssR0FBRyxPQUFPdzhCLEdBQUd4OEIsRUFBRXR0QixPQUFPK3BELEtBQUttUyxHQUFFNXVDLEdBQUcsS0FWcUQsS0FBSyxFQUEyUSxPQUF6UWhnQixFQUFFZ2dCLEVBQUVna0IsVUFBVThnQixLQUFLL0ksR0FBRUksSUFBSUosR0FBRUcsSUFBR21KLEtBQUtybEQsRUFBRStzRCxpQkFBaUIvc0QsRUFBRW1yQixRQUFRbnJCLEVBQUUrc0QsZUFBZS9zRCxFQUFFK3NELGVBQWUsTUFBUyxPQUFPanlDLEdBQUcsT0FBT0EsRUFBRTZxQixRQUFNc1osR0FBR2ovQixHQUFHQSxFQUFFcWxCLE9BQU8sRUFBRSxPQUFPdnFCLEdBQUdBLEVBQUV5cUIsY0FBY21GLGNBQWMsSUFBYSxJQUFSMXFCLEVBQUVxbEIsU0FBYXJsQixFQUFFcWxCLE9BQU8sS0FBSyxPQUFPK1ksS0FBSzBRLEdBQUcxUSxJQUFJQSxHQUFHLFFBQWV3USxHQUFFNXVDLEdBQVUsS0FBSyxLQUFLLEVBQUVnbEMsR0FBR2hsQyxHQUFHLElBQUl0dkIsRUFBRWswRCxHQUFHRCxHQUFHbmxELFNBQzdlLEdBQVRvdEIsRUFBRTVNLEVBQUV0dEIsS0FBUSxPQUFPb29CLEdBQUcsTUFBTWtGLEVBQUVna0IsVUFBVWtwQixHQUFHcHlDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixHQUFLOGEsRUFBRXhoQixNQUFNMG1CLEVBQUUxbUIsTUFBTTBtQixFQUFFcWxCLE9BQU8sSUFBSXJsQixFQUFFcWxCLE9BQU8sYUFBYSxDQUFDLElBQUlybEMsRUFBRSxDQUFDLEdBQUcsT0FBT2dnQixFQUFFZ2tCLFVBQVUsTUFBTXo3QixNQUFNcVgsRUFBRSxNQUFXLE9BQUxndkMsR0FBRTV1QyxHQUFVLElBQUksQ0FBa0IsR0FBakJsRixFQUFFOHBDLEdBQUdILEdBQUdqbEQsU0FBWXkvQyxHQUFHai9CLEdBQUcsQ0FBQ2hnQixFQUFFZ2dCLEVBQUVna0IsVUFBVXBYLEVBQUU1TSxFQUFFdHRCLEtBQUssSUFBSXFvQixFQUFFaUYsRUFBRWsvQixjQUErQyxPQUFqQ2wvQyxFQUFFdzdDLElBQUl4N0IsRUFBRWhnQixFQUFFeTdDLElBQUkxZ0MsRUFBRUQsRUFBRSxJQUFZLEVBQVBrRixFQUFFeFgsTUFBZW9rQixHQUFHLElBQUssU0FBU2dzQixHQUFFLFNBQVM1NEMsR0FBRzQ0QyxHQUFFLFFBQVE1NEMsR0FBRyxNQUFNLElBQUssU0FBUyxJQUFLLFNBQVMsSUFBSyxRQUFRNDRDLEdBQUUsT0FBTzU0QyxHQUFHLE1BQU0sSUFBSyxRQUFRLElBQUssUUFBUSxJQUFJdFAsRUFBRSxFQUFFQSxFQUFFOG5ELEdBQUdocUQsT0FBT2tDLElBQUlrb0QsR0FBRUosR0FBRzluRCxHQUFHc1AsR0FBRyxNQUFNLElBQUssU0FBUzQ0QyxHQUFFLFFBQVE1NEMsR0FBRyxNQUFNLElBQUssTUFBTSxJQUFLLFFBQVEsSUFBSyxPQUFPNDRDLEdBQUUsUUFDbmhCNTRDLEdBQUc0NEMsR0FBRSxPQUFPNTRDLEdBQUcsTUFBTSxJQUFLLFVBQVU0NEMsR0FBRSxTQUFTNTRDLEdBQUcsTUFBTSxJQUFLLFFBQVFrZ0MsRUFBR2xnQyxFQUFFK2EsR0FBRzY5QixHQUFFLFVBQVU1NEMsR0FBRyxNQUFNLElBQUssU0FBU0EsRUFBRWdnQyxjQUFjLENBQUMrdUIsY0FBY2gwQyxFQUFFaTBDLFVBQVVwVyxHQUFFLFVBQVU1NEMsR0FBRyxNQUFNLElBQUssV0FBVzZnQyxHQUFHN2dDLEVBQUUrYSxHQUFHNjlCLEdBQUUsVUFBVTU0QyxHQUFrQixJQUFJLElBQUl3NUIsS0FBdkI0SixHQUFHeFcsRUFBRTdSLEdBQUdycUIsRUFBRSxLQUFrQnFxQixFQUFFLEdBQUdBLEVBQUV0YSxlQUFlKzRCLEdBQUcsQ0FBQyxJQUFJOS9CLEVBQUVxaEIsRUFBRXllLEdBQUcsYUFBYUEsRUFBRSxpQkFBa0I5L0IsRUFBRXNHLEVBQUVnaEMsY0FBY3RuQyxLQUFJLElBQUtxaEIsRUFBRWswQywwQkFBMEIzVSxHQUFHdDZDLEVBQUVnaEMsWUFBWXRuQyxFQUFFb2hCLEdBQUdwcUIsRUFBRSxDQUFDLFdBQVdnSixJQUFJLGlCQUFrQkEsR0FBR3NHLEVBQUVnaEMsY0FBYyxHQUFHdG5DLEtBQUksSUFBS3FoQixFQUFFazBDLDBCQUEwQjNVLEdBQUd0NkMsRUFBRWdoQyxZQUMxZXRuQyxFQUFFb2hCLEdBQUdwcUIsRUFBRSxDQUFDLFdBQVcsR0FBR2dKLElBQUk4aEMsRUFBRy82QixlQUFlKzRCLElBQUksTUFBTTkvQixHQUFHLGFBQWE4L0IsR0FBR29mLEdBQUUsU0FBUzU0QyxFQUFFLENBQUMsT0FBTzRzQixHQUFHLElBQUssUUFBUXlTLEVBQUdyL0IsR0FBR3VnQyxFQUFHdmdDLEVBQUUrYSxHQUFFLEdBQUksTUFBTSxJQUFLLFdBQVdza0IsRUFBR3IvQixHQUFHK2dDLEdBQUcvZ0MsR0FBRyxNQUFNLElBQUssU0FBUyxJQUFLLFNBQVMsTUFBTSxRQUFRLG1CQUFvQithLEVBQUVtMEMsVUFBVWx2RCxFQUFFbXZELFFBQVE1VSxJQUFJdjZDLEVBQUV0UCxFQUFFc3ZCLEVBQUUrZ0MsWUFBWS9nRCxFQUFFLE9BQU9BLElBQUlnZ0IsRUFBRXFsQixPQUFPLEVBQUUsS0FBSyxDQUFDN0wsRUFBRSxJQUFJOW9DLEVBQUVreEMsU0FBU2x4QyxFQUFFQSxFQUFFb2tCLGNBQWMsaUNBQWlDZ0csSUFBSUEsRUFBRW1tQixHQUFHclUsSUFBSSxpQ0FBaUM5UixFQUFFLFdBQVc4UixJQUFHOVIsRUFBRTBlLEVBQUUxcEMsY0FBYyxRQUFTd3hDLFVBQVUscUJBQXVCeG1CLEVBQUVBLEVBQUVqcUIsWUFBWWlxQixFQUFFanNCLGFBQy9mLGlCQUFrQm1SLEVBQUVzakMsR0FBR3hvQixFQUFFMGUsRUFBRTFwQyxjQUFjODhCLEVBQUUsQ0FBQzBXLEdBQUd0akMsRUFBRXNqQyxNQUFNeG9CLEVBQUUwZSxFQUFFMXBDLGNBQWM4OEIsR0FBRyxXQUFXQSxJQUFJNE0sRUFBRTFlLEVBQUU5YSxFQUFFZ3ZELFNBQVN4MUIsRUFBRXcxQixVQUFTLEVBQUdodkQsRUFBRWxLLE9BQU8wakMsRUFBRTFqQyxLQUFLa0ssRUFBRWxLLFFBQVFnbEIsRUFBRTBlLEVBQUU0MUIsZ0JBQWdCdDBDLEVBQUU4UixHQUFHOVIsRUFBRTBnQyxJQUFJeDdCLEVBQUVsRixFQUFFMmdDLElBQUl6N0MsRUFBRWl0RCxHQUFHbnlDLEVBQUVrRixHQUFTQSxFQUFFZ2tCLFVBQVVscEIsRUFBRUEsRUFBRSxDQUFXLE9BQVYwZSxFQUFFNkosR0FBR3pXLEVBQUU1c0IsR0FBVTRzQixHQUFHLElBQUssU0FBU2dzQixHQUFFLFNBQVM5OUIsR0FBRzg5QixHQUFFLFFBQVE5OUIsR0FBR3BxQixFQUFFc1AsRUFBRSxNQUFNLElBQUssU0FBUyxJQUFLLFNBQVMsSUFBSyxRQUFRNDRDLEdBQUUsT0FBTzk5QixHQUFHcHFCLEVBQUVzUCxFQUFFLE1BQU0sSUFBSyxRQUFRLElBQUssUUFBUSxJQUFJdFAsRUFBRSxFQUFFQSxFQUFFOG5ELEdBQUdocUQsT0FBT2tDLElBQUlrb0QsR0FBRUosR0FBRzluRCxHQUFHb3FCLEdBQUdwcUIsRUFBRXNQLEVBQUUsTUFBTSxJQUFLLFNBQVM0NEMsR0FBRSxRQUFROTlCLEdBQUdwcUIsRUFBRXNQLEVBQUUsTUFBTSxJQUFLLE1BQU0sSUFBSyxRQUFRLElBQUssT0FBTzQ0QyxHQUFFLFFBQ2xmOTlCLEdBQUc4OUIsR0FBRSxPQUFPOTlCLEdBQUdwcUIsRUFBRXNQLEVBQUUsTUFBTSxJQUFLLFVBQVU0NEMsR0FBRSxTQUFTOTlCLEdBQUdwcUIsRUFBRXNQLEVBQUUsTUFBTSxJQUFLLFFBQVFrZ0MsRUFBR3BsQixFQUFFOWEsR0FBR3RQLEVBQUVvdkMsRUFBR2hsQixFQUFFOWEsR0FBRzQ0QyxHQUFFLFVBQVU5OUIsR0FBRyxNQUFNLElBQUssU0FBaUwsUUFBUXBxQixFQUFFc1AsUUFBeEssSUFBSyxTQUFTOGEsRUFBRWtsQixjQUFjLENBQUMrdUIsY0FBYy91RCxFQUFFZ3ZELFVBQVV0K0QsRUFBRWtwQyxFQUFFLENBQUMsRUFBRTU1QixFQUFFLENBQUMzTyxXQUFNLElBQVN1bkQsR0FBRSxVQUFVOTlCLEdBQUcsTUFBTSxJQUFLLFdBQVcrbEIsR0FBRy9sQixFQUFFOWEsR0FBR3RQLEVBQUVpd0MsR0FBRzdsQixFQUFFOWEsR0FBRzQ0QyxHQUFFLFVBQVU5OUIsR0FBaUMsSUFBSUMsS0FBaEJxb0IsR0FBR3hXLEVBQUVsOEIsR0FBR2dKLEVBQUVoSixFQUFhLEdBQUdnSixFQUFFK0csZUFBZXNhLEdBQUcsQ0FBQyxJQUFJL2tCLEVBQUUwRCxFQUFFcWhCLEdBQUcsVUFBVUEsRUFBRXFuQixHQUFHdG5CLEVBQUU5a0IsR0FBRyw0QkFBNEIra0IsRUFBdUIsT0FBcEIva0IsRUFBRUEsRUFBRUEsRUFBRTJrRCxZQUFPLElBQWdCdlosR0FBR3RtQixFQUFFOWtCLEdBQUksYUFBYStrQixFQUFFLGlCQUFrQi9rQixHQUFHLGFBQzdlNDJCLEdBQUcsS0FBSzUyQixJQUFJMHJDLEdBQUc1bUIsRUFBRTlrQixHQUFHLGlCQUFrQkEsR0FBRzByQyxHQUFHNW1CLEVBQUUsR0FBRzlrQixHQUFHLG1DQUFtQytrQixHQUFHLDZCQUE2QkEsR0FBRyxjQUFjQSxJQUFJeWdCLEVBQUcvNkIsZUFBZXNhLEdBQUcsTUFBTS9rQixHQUFHLGFBQWEra0IsR0FBRzY5QixHQUFFLFNBQVM5OUIsR0FBRyxNQUFNOWtCLEdBQUcwbUMsRUFBRzVoQixFQUFFQyxFQUFFL2tCLEVBQUV3akMsR0FBRyxDQUFDLE9BQU81TSxHQUFHLElBQUssUUFBUXlTLEVBQUd2a0IsR0FBR3lsQixFQUFHemxCLEVBQUU5YSxHQUFFLEdBQUksTUFBTSxJQUFLLFdBQVdxL0IsRUFBR3ZrQixHQUFHaW1CLEdBQUdqbUIsR0FBRyxNQUFNLElBQUssU0FBUyxNQUFNOWEsRUFBRTNPLE9BQU95cEIsRUFBRS9xQixhQUFhLFFBQVEsR0FBR212QyxFQUFHbC9CLEVBQUUzTyxRQUFRLE1BQU0sSUFBSyxTQUFTeXBCLEVBQUVrMEMsV0FBV2h2RCxFQUFFZ3ZELFNBQW1CLE9BQVZqMEMsRUFBRS9hLEVBQUUzTyxPQUFjb3ZDLEdBQUczbEIsSUFBSTlhLEVBQUVndkQsU0FBU2owQyxHQUFFLEdBQUksTUFBTS9hLEVBQUU2Z0IsY0FBYzRmLEdBQUczbEIsSUFBSTlhLEVBQUVndkQsU0FBU2h2RCxFQUFFNmdCLGNBQ2xmLEdBQUksTUFBTSxRQUFRLG1CQUFvQm53QixFQUFFdytELFVBQVVwMEMsRUFBRXEwQyxRQUFRNVUsSUFBSSxPQUFPM3RCLEdBQUcsSUFBSyxTQUFTLElBQUssUUFBUSxJQUFLLFNBQVMsSUFBSyxXQUFXNXNCLElBQUlBLEVBQUVxdkQsVUFBVSxNQUFNdjBDLEVBQUUsSUFBSyxNQUFNOWEsR0FBRSxFQUFHLE1BQU04YSxFQUFFLFFBQVE5YSxHQUFFLEVBQUcsQ0FBQ0EsSUFBSWdnQixFQUFFcWxCLE9BQU8sRUFBRSxDQUFDLE9BQU9ybEIsRUFBRTFtQixNQUFNMG1CLEVBQUVxbEIsT0FBTyxJQUFJcmxCLEVBQUVxbEIsT0FBTyxRQUFRLENBQU0sT0FBTHVwQixHQUFFNXVDLEdBQVUsS0FBSyxLQUFLLEVBQUUsR0FBR2xGLEdBQUcsTUFBTWtGLEVBQUVna0IsVUFBVW1wQixHQUFHcnlDLEVBQUVrRixFQUFFbEYsRUFBRW9rQyxjQUFjbC9DLE9BQU8sQ0FBQyxHQUFHLGlCQUFrQkEsR0FBRyxPQUFPZ2dCLEVBQUVna0IsVUFBVSxNQUFNejdCLE1BQU1xWCxFQUFFLE1BQXNDLEdBQWhDZ04sRUFBRWc0QixHQUFHRCxHQUFHbmxELFNBQVNvbEQsR0FBR0gsR0FBR2psRCxTQUFZeS9DLEdBQUdqL0IsR0FBRyxDQUF5QyxHQUF4Q2hnQixFQUFFZ2dCLEVBQUVna0IsVUFBVXBYLEVBQUU1TSxFQUFFay9CLGNBQWNsL0MsRUFBRXc3QyxJQUFJeDdCLEdBQUtqRixFQUFFL2EsRUFBRTZoQyxZQUFZalYsSUFDL2UsUUFEb2Y5UixFQUN2Zm1qQyxJQUFZLE9BQU9uakMsRUFBRXpzQixLQUFLLEtBQUssRUFBRWlzRCxHQUFHdDZDLEVBQUU2aEMsVUFBVWpWLEVBQUUsSUFBWSxFQUFQOVIsRUFBRXRTLE9BQVMsTUFBTSxLQUFLLEdBQUUsSUFBS3NTLEVBQUVva0MsY0FBYytQLDBCQUEwQjNVLEdBQUd0NkMsRUFBRTZoQyxVQUFValYsRUFBRSxJQUFZLEVBQVA5UixFQUFFdFMsT0FBU3VTLElBQUlpRixFQUFFcWxCLE9BQU8sRUFBRSxNQUFNcmxDLEdBQUcsSUFBSTRzQixFQUFFZ1YsU0FBU2hWLEVBQUVBLEVBQUU5WCxlQUFlN2tCLGVBQWUrUCxJQUFLdzdDLElBQUl4N0IsRUFBRUEsRUFBRWdrQixVQUFVaGtDLENBQUMsQ0FBTSxPQUFMNHVELEdBQUU1dUMsR0FBVSxLQUFLLEtBQUssR0FBMEIsR0FBdkIrN0IsR0FBRWtKLElBQUdqbEQsRUFBRWdnQixFQUFFdWxCLGNBQWlCLE9BQU96cUIsR0FBRyxPQUFPQSxFQUFFeXFCLGVBQWUsT0FBT3pxQixFQUFFeXFCLGNBQWNDLFdBQVcsQ0FBQyxHQUFHMlksSUFBRyxPQUFPRCxJQUFJLElBQVksRUFBUGwrQixFQUFFeFgsT0FBUyxJQUFhLElBQVJ3WCxFQUFFcWxCLE9BQVc4WixLQUFLQyxLQUFLcC9CLEVBQUVxbEIsT0FBTyxNQUFNdHFCLEdBQUUsT0FBUSxHQUFHQSxFQUFFa2tDLEdBQUdqL0IsR0FBRyxPQUFPaGdCLEdBQUcsT0FBT0EsRUFBRXdsQyxXQUFXLENBQUMsR0FBRyxPQUM1ZjFxQixFQUFFLENBQUMsSUFBSUMsRUFBRSxNQUFNeFMsTUFBTXFYLEVBQUUsTUFBcUQsS0FBN0I3RSxFQUFFLFFBQXBCQSxFQUFFaUYsRUFBRXVsQixlQUF5QnhxQixFQUFFeXFCLFdBQVcsTUFBVyxNQUFNajlCLE1BQU1xWCxFQUFFLE1BQU03RSxFQUFFeWdDLElBQUl4N0IsQ0FBQyxNQUFNby9CLEtBQUssSUFBYSxJQUFScC9CLEVBQUVxbEIsU0FBYXJsQixFQUFFdWxCLGNBQWMsTUFBTXZsQixFQUFFcWxCLE9BQU8sRUFBRXVwQixHQUFFNXVDLEdBQUdqRixHQUFFLENBQUUsTUFBTSxPQUFPcWpDLEtBQUswUSxHQUFHMVEsSUFBSUEsR0FBRyxNQUFNcmpDLEdBQUUsRUFBRyxJQUFJQSxFQUFFLE9BQWUsTUFBUmlGLEVBQUVxbEIsTUFBWXJsQixFQUFFLElBQUksQ0FBQyxPQUFHLElBQWEsSUFBUkEsRUFBRXFsQixRQUFrQnJsQixFQUFFb2dDLE1BQU14ekIsRUFBRTVNLEtBQUVoZ0IsRUFBRSxPQUFPQSxLQUFPLE9BQU84YSxHQUFHLE9BQU9BLEVBQUV5cUIsZ0JBQWdCdmxDLElBQUlnZ0IsRUFBRTJsQixNQUFNTixPQUFPLEtBQUssSUFBWSxFQUFQcmxCLEVBQUV4WCxRQUFVLE9BQU9zUyxHQUFHLElBQWUsRUFBVm1xQyxHQUFFemxELFNBQVcsSUFBSTJYLEtBQUlBLEdBQUUsR0FBRzAyQyxPQUFPLE9BQU83dEMsRUFBRStnQyxjQUFjL2dDLEVBQUVxbEIsT0FBTyxHQUFHdXBCLEdBQUU1dUMsR0FBVSxNQUFLLEtBQUssRUFBRSxPQUFPOGtDLEtBQzdlLE9BQU9ocUMsR0FBR28rQixHQUFHbDVCLEVBQUVna0IsVUFBVTJHLGVBQWVpa0IsR0FBRTV1QyxHQUFHLEtBQUssS0FBSyxHQUFHLE9BQU82L0IsR0FBRzcvQixFQUFFdHRCLEtBQUtvc0MsVUFBVTh2QixHQUFFNXVDLEdBQUcsS0FBK0MsS0FBSyxHQUEwQixHQUF2Qis3QixHQUFFa0osSUFBd0IsUUFBckJscUMsRUFBRWlGLEVBQUV1bEIsZUFBMEIsT0FBT3FwQixHQUFFNXVDLEdBQUcsS0FBdUMsR0FBbENoZ0IsRUFBRSxJQUFhLElBQVJnZ0IsRUFBRXFsQixPQUE0QixRQUFqQjdMLEVBQUV6ZSxFQUFFc3pDLFdBQXNCLEdBQUdydUQsRUFBRTJ1RCxHQUFHNXpDLEdBQUUsT0FBUSxDQUFDLEdBQUcsSUFBSTVELElBQUcsT0FBTzJELEdBQUcsSUFBYSxJQUFSQSxFQUFFdXFCLE9BQVcsSUFBSXZxQixFQUFFa0YsRUFBRTJsQixNQUFNLE9BQU83cUIsR0FBRyxDQUFTLEdBQUcsUUFBWDBlLEVBQUUwckIsR0FBR3BxQyxJQUFlLENBQW1HLElBQWxHa0YsRUFBRXFsQixPQUFPLElBQUlzcEIsR0FBRzV6QyxHQUFFLEdBQW9CLFFBQWhCL2EsRUFBRXc1QixFQUFFdW5CLGVBQXVCL2dDLEVBQUUrZ0MsWUFBWS9nRCxFQUFFZ2dCLEVBQUVxbEIsT0FBTyxHQUFHcmxCLEVBQUVpdUMsYUFBYSxFQUFFanVELEVBQUU0c0IsRUFBTUEsRUFBRTVNLEVBQUUybEIsTUFBTSxPQUFPL1ksR0FBTzlSLEVBQUU5YSxHQUFOK2EsRUFBRTZSLEdBQVF5WSxPQUFPLFNBQy9kLFFBQWQ3TCxFQUFFemUsRUFBRXFxQixZQUFvQnJxQixFQUFFaWxDLFdBQVcsRUFBRWpsQyxFQUFFcWxDLE1BQU10bEMsRUFBRUMsRUFBRTRxQixNQUFNLEtBQUs1cUIsRUFBRWt6QyxhQUFhLEVBQUVsekMsRUFBRW1rQyxjQUFjLEtBQUtua0MsRUFBRXdxQixjQUFjLEtBQUt4cUIsRUFBRWdtQyxZQUFZLEtBQUtobUMsRUFBRW1sQyxhQUFhLEtBQUtubEMsRUFBRWlwQixVQUFVLE9BQU9qcEIsRUFBRWlsQyxXQUFXeG1CLEVBQUV3bUIsV0FBV2psQyxFQUFFcWxDLE1BQU01bUIsRUFBRTRtQixNQUFNcmxDLEVBQUU0cUIsTUFBTW5NLEVBQUVtTSxNQUFNNXFCLEVBQUVrekMsYUFBYSxFQUFFbHpDLEVBQUV5akMsVUFBVSxLQUFLempDLEVBQUVta0MsY0FBYzFsQixFQUFFMGxCLGNBQWNua0MsRUFBRXdxQixjQUFjL0wsRUFBRStMLGNBQWN4cUIsRUFBRWdtQyxZQUFZdm5CLEVBQUV1bkIsWUFBWWhtQyxFQUFFcm9CLEtBQUs4bUMsRUFBRTltQyxLQUFLb29CLEVBQUUwZSxFQUFFMG1CLGFBQWFubEMsRUFBRW1sQyxhQUFhLE9BQU9wbEMsRUFBRSxLQUFLLENBQUNzbEMsTUFBTXRsQyxFQUFFc2xDLE1BQU1ELGFBQWFybEMsRUFBRXFsQyxlQUFldnpCLEVBQUVBLEVBQUVnWixRQUEyQixPQUFuQm9XLEdBQUVpSixHQUFZLEVBQVZBLEdBQUV6bEQsUUFBVSxHQUFVd2dCLEVBQUUybEIsS0FBSyxDQUFDN3FCLEVBQ2xnQkEsRUFBRThxQixPQUFPLENBQUMsT0FBTzdxQixFQUFFeXpDLE1BQU1qb0IsS0FBSStvQixLQUFLdHZDLEVBQUVxbEIsT0FBTyxJQUFJcmxDLEdBQUUsRUFBRzJ1RCxHQUFHNXpDLEdBQUUsR0FBSWlGLEVBQUVvZ0MsTUFBTSxRQUFRLEtBQUssQ0FBQyxJQUFJcGdELEVBQUUsR0FBVyxRQUFSOGEsRUFBRW9xQyxHQUFHMXJCLEtBQWEsR0FBR3haLEVBQUVxbEIsT0FBTyxJQUFJcmxDLEdBQUUsRUFBbUIsUUFBaEI0c0IsRUFBRTlSLEVBQUVpbUMsZUFBdUIvZ0MsRUFBRStnQyxZQUFZbjBCLEVBQUU1TSxFQUFFcWxCLE9BQU8sR0FBR3NwQixHQUFHNXpDLEdBQUUsR0FBSSxPQUFPQSxFQUFFeXpDLE1BQU0sV0FBV3p6QyxFQUFFMHpDLFdBQVdqMUIsRUFBRTRMLFlBQVkrWSxHQUFFLE9BQU95USxHQUFFNXVDLEdBQUcsVUFBVSxFQUFFdW1CLEtBQUl4ckIsRUFBRXV6QyxtQkFBbUJnQixJQUFJLGFBQWExaUMsSUFBSTVNLEVBQUVxbEIsT0FBTyxJQUFJcmxDLEdBQUUsRUFBRzJ1RCxHQUFHNXpDLEdBQUUsR0FBSWlGLEVBQUVvZ0MsTUFBTSxTQUFTcmxDLEVBQUVxekMsYUFBYTUwQixFQUFFb00sUUFBUTVsQixFQUFFMmxCLE1BQU0zbEIsRUFBRTJsQixNQUFNbk0sSUFBYSxRQUFUNU0sRUFBRTdSLEVBQUV3ekMsTUFBYzNoQyxFQUFFZ1osUUFBUXBNLEVBQUV4WixFQUFFMmxCLE1BQU1uTSxFQUFFemUsRUFBRXd6QyxLQUFLLzBCLEVBQUUsQ0FBQyxPQUFHLE9BQU96ZSxFQUFFeXpDLE1BQVl4dUMsRUFBRWpGLEVBQUV5ekMsS0FBS3p6QyxFQUFFc3pDLFVBQzllcnVDLEVBQUVqRixFQUFFeXpDLEtBQUt4dUMsRUFBRTRsQixRQUFRN3FCLEVBQUV1ekMsbUJBQW1CL25CLEtBQUl2bUIsRUFBRTRsQixRQUFRLEtBQUtoWixFQUFFcTRCLEdBQUV6bEQsUUFBUXc4QyxHQUFFaUosR0FBRWpsRCxFQUFJLEVBQUY0c0IsRUFBSSxFQUFJLEVBQUZBLEdBQUs1TSxJQUFFNHVDLEdBQUU1dUMsR0FBVSxNQUFLLEtBQUssR0FBRyxLQUFLLEdBQUcsT0FBT3V2QyxLQUFLdnZELEVBQUUsT0FBT2dnQixFQUFFdWxCLGNBQWMsT0FBT3pxQixHQUFHLE9BQU9BLEVBQUV5cUIsZ0JBQWdCdmxDLElBQUlnZ0IsRUFBRXFsQixPQUFPLE1BQU1ybEMsR0FBRyxJQUFZLEVBQVBnZ0IsRUFBRXhYLE1BQVEsSUFBUSxXQUFIOGpELE1BQWlCc0MsR0FBRTV1QyxHQUFrQixFQUFmQSxFQUFFaXVDLGVBQWlCanVDLEVBQUVxbEIsT0FBTyxPQUFPdXBCLEdBQUU1dUMsR0FBRyxLQUFLLEtBQUssR0FBZSxLQUFLLEdBQUcsT0FBTyxLQUFLLE1BQU16WCxNQUFNcVgsRUFBRSxJQUFJSSxFQUFFM3hCLEtBQU0sQ0FDbFgsU0FBU21oRSxHQUFHMTBDLEVBQUVrRixHQUFTLE9BQU5nK0IsR0FBR2grQixHQUFVQSxFQUFFM3hCLEtBQUssS0FBSyxFQUFFLE9BQU9tdUQsR0FBR3g4QixFQUFFdHRCLE9BQU8rcEQsS0FBaUIsT0FBWjNoQyxFQUFFa0YsRUFBRXFsQixRQUFlcmxCLEVBQUVxbEIsT0FBUyxNQUFIdnFCLEVBQVMsSUFBSWtGLEdBQUcsS0FBSyxLQUFLLEVBQUUsT0FBTzhrQyxLQUFLL0ksR0FBRUksSUFBSUosR0FBRUcsSUFBR21KLEtBQWUsSUFBTyxPQUFqQnZxQyxFQUFFa0YsRUFBRXFsQixTQUFxQixJQUFPLElBQUZ2cUIsSUFBUWtGLEVBQUVxbEIsT0FBUyxNQUFIdnFCLEVBQVMsSUFBSWtGLEdBQUcsS0FBSyxLQUFLLEVBQUUsT0FBT2dsQyxHQUFHaGxDLEdBQUcsS0FBSyxLQUFLLEdBQTBCLEdBQXZCKzdCLEdBQUVrSixJQUF3QixRQUFyQm5xQyxFQUFFa0YsRUFBRXVsQixnQkFBMkIsT0FBT3pxQixFQUFFMHFCLFdBQVcsQ0FBQyxHQUFHLE9BQU94bEIsRUFBRW9sQixVQUFVLE1BQU03OEIsTUFBTXFYLEVBQUUsTUFBTXcvQixJQUFJLENBQVcsT0FBUyxPQUFuQnRrQyxFQUFFa0YsRUFBRXFsQixRQUFzQnJsQixFQUFFcWxCLE9BQVMsTUFBSHZxQixFQUFTLElBQUlrRixHQUFHLEtBQUssS0FBSyxHQUFHLE9BQU8rN0IsR0FBRWtKLElBQUcsS0FBSyxLQUFLLEVBQUUsT0FBT0gsS0FBSyxLQUFLLEtBQUssR0FBRyxPQUFPakYsR0FBRzcvQixFQUFFdHRCLEtBQUtvc0MsVUFBVSxLQUFLLEtBQUssR0FBRyxLQUFLLEdBQUcsT0FBT3l3QixLQUMxZ0IsS0FBeUIsUUFBUSxPQUFPLEtBQUssQ0FyQjdDdEMsR0FBRyxTQUFTbnlDLEVBQUVrRixHQUFHLElBQUksSUFBSTRNLEVBQUU1TSxFQUFFMmxCLE1BQU0sT0FBTy9ZLEdBQUcsQ0FBQyxHQUFHLElBQUlBLEVBQUV2K0IsS0FBSyxJQUFJdStCLEVBQUV2K0IsSUFBSXlzQixFQUFFOXFCLFlBQVk0OEIsRUFBRW9YLGdCQUFnQixHQUFHLElBQUlwWCxFQUFFditCLEtBQUssT0FBT3UrQixFQUFFK1ksTUFBTSxDQUFDL1ksRUFBRStZLE1BQU05eUMsT0FBTys1QixFQUFFQSxFQUFFQSxFQUFFK1ksTUFBTSxRQUFRLENBQUMsR0FBRy9ZLElBQUk1TSxFQUFFLE1BQU0sS0FBSyxPQUFPNE0sRUFBRWdaLFNBQVMsQ0FBQyxHQUFHLE9BQU9oWixFQUFFLzVCLFFBQVErNUIsRUFBRS81QixTQUFTbXRCLEVBQUUsT0FBTzRNLEVBQUVBLEVBQUUvNUIsTUFBTSxDQUFDKzVCLEVBQUVnWixRQUFRL3lDLE9BQU8rNUIsRUFBRS81QixPQUFPKzVCLEVBQUVBLEVBQUVnWixPQUFPLENBQUMsRUFDeFNzbkIsR0FBRyxTQUFTcHlDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixHQUFHLElBQUl0UCxFQUFFb3FCLEVBQUVva0MsY0FBYyxHQUFHeHVELElBQUlzUCxFQUFFLENBQUM4YSxFQUFFa0YsRUFBRWdrQixVQUFVNGdCLEdBQUdILEdBQUdqbEQsU0FBUyxJQUE0Umc2QixFQUF4UnplLEVBQUUsS0FBSyxPQUFPNlIsR0FBRyxJQUFLLFFBQVFsOEIsRUFBRW92QyxFQUFHaGxCLEVBQUVwcUIsR0FBR3NQLEVBQUU4L0IsRUFBR2hsQixFQUFFOWEsR0FBRythLEVBQUUsR0FBRyxNQUFNLElBQUssU0FBU3JxQixFQUFFa3BDLEVBQUUsQ0FBQyxFQUFFbHBDLEVBQUUsQ0FBQ1csV0FBTSxJQUFTMk8sRUFBRTQ1QixFQUFFLENBQUMsRUFBRTU1QixFQUFFLENBQUMzTyxXQUFNLElBQVMwcEIsRUFBRSxHQUFHLE1BQU0sSUFBSyxXQUFXcnFCLEVBQUVpd0MsR0FBRzdsQixFQUFFcHFCLEdBQUdzUCxFQUFFMmdDLEdBQUc3bEIsRUFBRTlhLEdBQUcrYSxFQUFFLEdBQUcsTUFBTSxRQUFRLG1CQUFvQnJxQixFQUFFdytELFNBQVMsbUJBQW9CbHZELEVBQUVrdkQsVUFBVXAwQyxFQUFFcTBDLFFBQVE1VSxJQUF5QixJQUFJMS9CLEtBQXpCdW9CLEdBQUd4VyxFQUFFNXNCLEdBQVM0c0IsRUFBRSxLQUFjbDhCLEVBQUUsSUFBSXNQLEVBQUVTLGVBQWVvYSxJQUFJbnFCLEVBQUUrUCxlQUFlb2EsSUFBSSxNQUFNbnFCLEVBQUVtcUIsR0FBRyxHQUFHLFVBQVVBLEVBQUUsQ0FBQyxJQUFJbmhCLEVBQUVoSixFQUFFbXFCLEdBQUcsSUFBSTJlLEtBQUs5L0IsRUFBRUEsRUFBRStHLGVBQWUrNEIsS0FDamY1TSxJQUFJQSxFQUFFLENBQUMsR0FBR0EsRUFBRTRNLEdBQUcsR0FBRyxLQUFLLDRCQUE0QjNlLEdBQUcsYUFBYUEsR0FBRyxtQ0FBbUNBLEdBQUcsNkJBQTZCQSxHQUFHLGNBQWNBLElBQUkyZ0IsRUFBRy82QixlQUFlb2EsR0FBR0UsSUFBSUEsRUFBRSxLQUFLQSxFQUFFQSxHQUFHLElBQUloc0IsS0FBSzhyQixFQUFFLE9BQU8sSUFBSUEsS0FBSzdhLEVBQUUsQ0FBQyxJQUFJaEssRUFBRWdLLEVBQUU2YSxHQUF5QixHQUF0Qm5oQixFQUFFLE1BQU1oSixFQUFFQSxFQUFFbXFCLFFBQUcsRUFBVTdhLEVBQUVTLGVBQWVvYSxJQUFJN2tCLElBQUkwRCxJQUFJLE1BQU0xRCxHQUFHLE1BQU0wRCxHQUFHLEdBQUcsVUFBVW1oQixFQUFFLEdBQUduaEIsRUFBRSxDQUFDLElBQUk4L0IsS0FBSzkvQixHQUFHQSxFQUFFK0csZUFBZSs0QixJQUFJeGpDLEdBQUdBLEVBQUV5SyxlQUFlKzRCLEtBQUs1TSxJQUFJQSxFQUFFLENBQUMsR0FBR0EsRUFBRTRNLEdBQUcsSUFBSSxJQUFJQSxLQUFLeGpDLEVBQUVBLEVBQUV5SyxlQUFlKzRCLElBQUk5L0IsRUFBRTgvQixLQUFLeGpDLEVBQUV3akMsS0FBSzVNLElBQUlBLEVBQUUsQ0FBQyxHQUFHQSxFQUFFNE0sR0FBR3hqQyxFQUFFd2pDLEdBQUcsTUFBTTVNLElBQUk3UixJQUFJQSxFQUFFLElBQUlBLEVBQUVoc0IsS0FBSzhyQixFQUNwZitSLElBQUlBLEVBQUU1MkIsTUFBTSw0QkFBNEI2a0IsR0FBRzdrQixFQUFFQSxFQUFFQSxFQUFFMmtELFlBQU8sRUFBT2poRCxFQUFFQSxFQUFFQSxFQUFFaWhELFlBQU8sRUFBTyxNQUFNM2tELEdBQUcwRCxJQUFJMUQsSUFBSStrQixFQUFFQSxHQUFHLElBQUloc0IsS0FBSzhyQixFQUFFN2tCLElBQUksYUFBYTZrQixFQUFFLGlCQUFrQjdrQixHQUFHLGlCQUFrQkEsSUFBSStrQixFQUFFQSxHQUFHLElBQUloc0IsS0FBSzhyQixFQUFFLEdBQUc3a0IsR0FBRyxtQ0FBbUM2a0IsR0FBRyw2QkFBNkJBLElBQUkyZ0IsRUFBRy82QixlQUFlb2EsSUFBSSxNQUFNN2tCLEdBQUcsYUFBYTZrQixHQUFHKzlCLEdBQUUsU0FBUzk5QixHQUFHQyxHQUFHcmhCLElBQUkxRCxJQUFJK2tCLEVBQUUsTUFBTUEsRUFBRUEsR0FBRyxJQUFJaHNCLEtBQUs4ckIsRUFBRTdrQixHQUFHLENBQUM0MkIsSUFBSTdSLEVBQUVBLEdBQUcsSUFBSWhzQixLQUFLLFFBQVE2OUIsR0FBRyxJQUFJL1IsRUFBRUUsR0FBS2lGLEVBQUUrZ0MsWUFBWWxtQyxLQUFFbUYsRUFBRXFsQixPQUFPLEVBQUMsQ0FBQyxFQUFFOG5CLEdBQUcsU0FBU3J5QyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBRzRzQixJQUFJNXNCLElBQUlnZ0IsRUFBRXFsQixPQUFPLEVBQUUsRUFrQmxiLElBQUlvcUIsSUFBRyxFQUFHQyxJQUFFLEVBQUdDLEdBQUcsbUJBQW9CQyxRQUFRQSxRQUFRaHRDLElBQUlpdEMsR0FBRSxLQUFLLFNBQVNDLEdBQUdoMUMsRUFBRWtGLEdBQUcsSUFBSTRNLEVBQUU5UixFQUFFeGhCLElBQUksR0FBRyxPQUFPc3pCLEVBQUUsR0FBRyxtQkFBb0JBLEVBQUUsSUFBSUEsRUFBRSxLQUF1QixDQUFqQixNQUFNNXNCLEdBQUcrdkQsR0FBRWoxQyxFQUFFa0YsRUFBRWhnQixFQUFFLE1BQU00c0IsRUFBRXB0QixRQUFRLElBQUksQ0FBQyxTQUFTd3dELEdBQUdsMUMsRUFBRWtGLEVBQUU0TSxHQUFHLElBQUlBLEdBQXFCLENBQWpCLE1BQU01c0IsR0FBRyt2RCxHQUFFajFDLEVBQUVrRixFQUFFaGdCLEVBQUUsQ0FBQyxDQUFDLElBQUlpd0QsSUFBRyxFQUl4UixTQUFTQyxHQUFHcDFDLEVBQUVrRixFQUFFNE0sR0FBRyxJQUFJNXNCLEVBQUVnZ0IsRUFBRStnQyxZQUF5QyxHQUFHLFFBQWhDL2dELEVBQUUsT0FBT0EsRUFBRUEsRUFBRStuRCxXQUFXLE1BQWlCLENBQUMsSUFBSXIzRCxFQUFFc1AsRUFBRUEsRUFBRWhOLEtBQUssRUFBRSxDQUFDLElBQUl0QyxFQUFFckMsSUFBSXlzQixLQUFLQSxFQUFFLENBQUMsSUFBSUMsRUFBRXJxQixFQUFFMjNELFFBQVEzM0QsRUFBRTIzRCxhQUFRLE9BQU8sSUFBU3R0QyxHQUFHaTFDLEdBQUdod0MsRUFBRTRNLEVBQUU3UixFQUFFLENBQUNycUIsRUFBRUEsRUFBRXNDLElBQUksT0FBT3RDLElBQUlzUCxFQUFFLENBQUMsQ0FBQyxTQUFTbXdELEdBQUdyMUMsRUFBRWtGLEdBQWdELEdBQUcsUUFBaENBLEVBQUUsUUFBbEJBLEVBQUVBLEVBQUUrZ0MsYUFBdUIvZ0MsRUFBRStuQyxXQUFXLE1BQWlCLENBQUMsSUFBSW43QixFQUFFNU0sRUFBRUEsRUFBRWh0QixLQUFLLEVBQUUsQ0FBQyxJQUFJNDVCLEVBQUV2K0IsSUFBSXlzQixLQUFLQSxFQUFFLENBQUMsSUFBSTlhLEVBQUU0c0IsRUFBRS96QixPQUFPK3pCLEVBQUV5N0IsUUFBUXJvRCxHQUFHLENBQUM0c0IsRUFBRUEsRUFBRTU1QixJQUFJLE9BQU80NUIsSUFBSTVNLEVBQUUsQ0FBQyxDQUFDLFNBQVNvd0MsR0FBR3QxQyxHQUFHLElBQUlrRixFQUFFbEYsRUFBRXhoQixJQUFJLEdBQUcsT0FBTzBtQixFQUFFLENBQUMsSUFBSTRNLEVBQUU5UixFQUFFa3BCLFVBQWlCbHBCLEVBQUV6c0IsSUFBOEJ5c0IsRUFBRThSLEVBQUUsbUJBQW9CNU0sRUFBRUEsRUFBRWxGLEdBQUdrRixFQUFFeGdCLFFBQVFzYixDQUFDLENBQUMsQ0FDbGYsU0FBU3UxQyxHQUFHdjFDLEdBQUcsSUFBSWtGLEVBQUVsRixFQUFFc3FCLFVBQVUsT0FBT3BsQixJQUFJbEYsRUFBRXNxQixVQUFVLEtBQUtpckIsR0FBR3J3QyxJQUFJbEYsRUFBRTZxQixNQUFNLEtBQUs3cUIsRUFBRTBqQyxVQUFVLEtBQUsxakMsRUFBRThxQixRQUFRLEtBQUssSUFBSTlxQixFQUFFenNCLEtBQW9CLFFBQWQyeEIsRUFBRWxGLEVBQUVrcEIsb0JBQTRCaGtCLEVBQUV3N0IsV0FBV3g3QixFQUFFeTdCLFdBQVd6N0IsRUFBRTY0QixXQUFXNzRCLEVBQUUwN0IsV0FBVzE3QixFQUFFMjdCLEtBQU03Z0MsRUFBRWtwQixVQUFVLEtBQUtscEIsRUFBRWpvQixPQUFPLEtBQUtpb0IsRUFBRW9sQyxhQUFhLEtBQUtwbEMsRUFBRW9rQyxjQUFjLEtBQUtwa0MsRUFBRXlxQixjQUFjLEtBQUt6cUIsRUFBRTRqQyxhQUFhLEtBQUs1akMsRUFBRWtwQixVQUFVLEtBQUtscEIsRUFBRWltQyxZQUFZLElBQUksQ0FBQyxTQUFTdVAsR0FBR3gxQyxHQUFHLE9BQU8sSUFBSUEsRUFBRXpzQixLQUFLLElBQUl5c0IsRUFBRXpzQixLQUFLLElBQUl5c0IsRUFBRXpzQixHQUFHLENBQ25hLFNBQVNraUUsR0FBR3oxQyxHQUFHQSxFQUFFLE9BQU8sQ0FBQyxLQUFLLE9BQU9BLEVBQUU4cUIsU0FBUyxDQUFDLEdBQUcsT0FBTzlxQixFQUFFam9CLFFBQVF5OUQsR0FBR3gxQyxFQUFFam9CLFFBQVEsT0FBTyxLQUFLaW9CLEVBQUVBLEVBQUVqb0IsTUFBTSxDQUEyQixJQUExQmlvQixFQUFFOHFCLFFBQVEveUMsT0FBT2lvQixFQUFFam9CLE9BQVdpb0IsRUFBRUEsRUFBRThxQixRQUFRLElBQUk5cUIsRUFBRXpzQixLQUFLLElBQUl5c0IsRUFBRXpzQixLQUFLLEtBQUt5c0IsRUFBRXpzQixLQUFLLENBQUMsR0FBVyxFQUFSeXNCLEVBQUV1cUIsTUFBUSxTQUFTdnFCLEVBQUUsR0FBRyxPQUFPQSxFQUFFNnFCLE9BQU8sSUFBSTdxQixFQUFFenNCLElBQUksU0FBU3lzQixFQUFPQSxFQUFFNnFCLE1BQU05eUMsT0FBT2lvQixFQUFFQSxFQUFFQSxFQUFFNnFCLEtBQUssQ0FBQyxLQUFhLEVBQVI3cUIsRUFBRXVxQixPQUFTLE9BQU92cUIsRUFBRWtwQixTQUFTLENBQUMsQ0FDelQsU0FBU3dzQixHQUFHMTFDLEVBQUVrRixFQUFFNE0sR0FBRyxJQUFJNXNCLEVBQUU4YSxFQUFFenNCLElBQUksR0FBRyxJQUFJMlIsR0FBRyxJQUFJQSxFQUFFOGEsRUFBRUEsRUFBRWtwQixVQUFVaGtCLEVBQUUsSUFBSTRNLEVBQUVnVixTQUFTaFYsRUFBRWg4QixXQUFXOUIsYUFBYWdzQixFQUFFa0YsR0FBRzRNLEVBQUU5OUIsYUFBYWdzQixFQUFFa0YsSUFBSSxJQUFJNE0sRUFBRWdWLFVBQVU1aEIsRUFBRTRNLEVBQUVoOEIsWUFBYTlCLGFBQWFnc0IsRUFBRThSLElBQUs1TSxFQUFFNE0sR0FBSTU4QixZQUFZOHFCLEdBQTRCLE9BQXhCOFIsRUFBRUEsRUFBRTZqQyxzQkFBMEMsT0FBT3p3QyxFQUFFbXZDLFVBQVVudkMsRUFBRW12QyxRQUFRNVUsVUFBVSxHQUFHLElBQUl2NkMsR0FBYyxRQUFWOGEsRUFBRUEsRUFBRTZxQixPQUFnQixJQUFJNnFCLEdBQUcxMUMsRUFBRWtGLEVBQUU0TSxHQUFHOVIsRUFBRUEsRUFBRThxQixRQUFRLE9BQU85cUIsR0FBRzAxQyxHQUFHMTFDLEVBQUVrRixFQUFFNE0sR0FBRzlSLEVBQUVBLEVBQUU4cUIsT0FBTyxDQUMxWCxTQUFTOHFCLEdBQUc1MUMsRUFBRWtGLEVBQUU0TSxHQUFHLElBQUk1c0IsRUFBRThhLEVBQUV6c0IsSUFBSSxHQUFHLElBQUkyUixHQUFHLElBQUlBLEVBQUU4YSxFQUFFQSxFQUFFa3BCLFVBQVVoa0IsRUFBRTRNLEVBQUU5OUIsYUFBYWdzQixFQUFFa0YsR0FBRzRNLEVBQUU1OEIsWUFBWThxQixRQUFRLEdBQUcsSUFBSTlhLEdBQWMsUUFBVjhhLEVBQUVBLEVBQUU2cUIsT0FBZ0IsSUFBSStxQixHQUFHNTFDLEVBQUVrRixFQUFFNE0sR0FBRzlSLEVBQUVBLEVBQUU4cUIsUUFBUSxPQUFPOXFCLEdBQUc0MUMsR0FBRzUxQyxFQUFFa0YsRUFBRTRNLEdBQUc5UixFQUFFQSxFQUFFOHFCLE9BQU8sQ0FBQyxJQUFJK3FCLEdBQUUsS0FBS0MsSUFBRyxFQUFHLFNBQVNDLEdBQUcvMUMsRUFBRWtGLEVBQUU0TSxHQUFHLElBQUlBLEVBQUVBLEVBQUUrWSxNQUFNLE9BQU8vWSxHQUFHa2tDLEdBQUdoMkMsRUFBRWtGLEVBQUU0TSxHQUFHQSxFQUFFQSxFQUFFZ1osT0FBTyxDQUNuUixTQUFTa3JCLEdBQUdoMkMsRUFBRWtGLEVBQUU0TSxHQUFHLEdBQUcwYSxJQUFJLG1CQUFvQkEsR0FBR3lwQixxQkFBcUIsSUFBSXpwQixHQUFHeXBCLHFCQUFxQjFwQixHQUFHemEsRUFBWSxDQUFULE1BQU1sekIsR0FBRyxDQUFDLE9BQU9rekIsRUFBRXYrQixLQUFLLEtBQUssRUFBRXFoRSxJQUFHSSxHQUFHbGpDLEVBQUU1TSxHQUFHLEtBQUssRUFBRSxJQUFJaGdCLEVBQUUyd0QsR0FBRWpnRSxFQUFFa2dFLEdBQUdELEdBQUUsS0FBS0UsR0FBRy8xQyxFQUFFa0YsRUFBRTRNLEdBQU9na0MsR0FBR2xnRSxFQUFFLFFBQVRpZ0UsR0FBRTN3RCxLQUFrQjR3RCxJQUFJOTFDLEVBQUU2MUMsR0FBRS9qQyxFQUFFQSxFQUFFb1gsVUFBVSxJQUFJbHBCLEVBQUU4bUIsU0FBUzltQixFQUFFbHFCLFdBQVdDLFlBQVkrN0IsR0FBRzlSLEVBQUVqcUIsWUFBWSs3QixJQUFJK2pDLEdBQUU5L0QsWUFBWSs3QixFQUFFb1gsWUFBWSxNQUFNLEtBQUssR0FBRyxPQUFPMnNCLEtBQUlDLElBQUk5MUMsRUFBRTYxQyxHQUFFL2pDLEVBQUVBLEVBQUVvWCxVQUFVLElBQUlscEIsRUFBRThtQixTQUFTdVosR0FBR3JnQyxFQUFFbHFCLFdBQVdnOEIsR0FBRyxJQUFJOVIsRUFBRThtQixVQUFVdVosR0FBR3JnQyxFQUFFOFIsR0FBR3NlLEdBQUdwd0IsSUFBSXFnQyxHQUFHd1YsR0FBRS9qQyxFQUFFb1gsWUFBWSxNQUFNLEtBQUssRUFBRWhrQyxFQUFFMndELEdBQUVqZ0UsRUFBRWtnRSxHQUFHRCxHQUFFL2pDLEVBQUVvWCxVQUFVMkcsY0FBY2ltQixJQUFHLEVBQ2xmQyxHQUFHLzFDLEVBQUVrRixFQUFFNE0sR0FBRytqQyxHQUFFM3dELEVBQUU0d0QsR0FBR2xnRSxFQUFFLE1BQU0sS0FBSyxFQUFFLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUlnL0QsSUFBb0IsUUFBaEIxdkQsRUFBRTRzQixFQUFFbTBCLGNBQXNDLFFBQWYvZ0QsRUFBRUEsRUFBRStuRCxZQUFzQixDQUFDcjNELEVBQUVzUCxFQUFFQSxFQUFFaE4sS0FBSyxFQUFFLENBQUMsSUFBSStuQixFQUFFcnFCLEVBQUU4b0MsRUFBRXplLEVBQUVzdEMsUUFBUXR0QyxFQUFFQSxFQUFFMXNCLFNBQUksSUFBU21yQyxJQUFJLElBQU8sRUFBRnplLElBQWUsSUFBTyxFQUFGQSxLQUFmaTFDLEdBQUdwakMsRUFBRTVNLEVBQUV3WixHQUF5QjlvQyxFQUFFQSxFQUFFc0MsSUFBSSxPQUFPdEMsSUFBSXNQLEVBQUUsQ0FBQzZ3RCxHQUFHLzFDLEVBQUVrRixFQUFFNE0sR0FBRyxNQUFNLEtBQUssRUFBRSxJQUFJOGlDLEtBQUlJLEdBQUdsakMsRUFBRTVNLEdBQWlCLG1CQUFkaGdCLEVBQUU0c0IsRUFBRW9YLFdBQWdDZ3RCLHNCQUFzQixJQUFJaHhELEVBQUVyTixNQUFNaTZCLEVBQUVzeUIsY0FBY2wvQyxFQUFFa1QsTUFBTTBaLEVBQUUyWSxjQUFjdmxDLEVBQUVneEQsc0JBQXdDLENBQWpCLE1BQU10M0QsR0FBR3EyRCxHQUFFbmpDLEVBQUU1TSxFQUFFdG1CLEVBQUUsQ0FBQ20zRCxHQUFHLzFDLEVBQUVrRixFQUFFNE0sR0FBRyxNQUFNLEtBQUssR0FBR2lrQyxHQUFHLzFDLEVBQUVrRixFQUFFNE0sR0FBRyxNQUFNLEtBQUssR0FBVSxFQUFQQSxFQUFFcGtCLE1BQVFrbkQsSUFBRzF2RCxFQUFFMHZELEtBQUksT0FDaGY5aUMsRUFBRTJZLGNBQWNzckIsR0FBRy8xQyxFQUFFa0YsRUFBRTRNLEdBQUc4aUMsR0FBRTF2RCxHQUFHNndELEdBQUcvMUMsRUFBRWtGLEVBQUU0TSxHQUFHLE1BQU0sUUFBUWlrQyxHQUFHLzFDLEVBQUVrRixFQUFFNE0sR0FBRyxDQUFDLFNBQVNxa0MsR0FBR24yQyxHQUFHLElBQUlrRixFQUFFbEYsRUFBRWltQyxZQUFZLEdBQUcsT0FBTy9nQyxFQUFFLENBQUNsRixFQUFFaW1DLFlBQVksS0FBSyxJQUFJbjBCLEVBQUU5UixFQUFFa3BCLFVBQVUsT0FBT3BYLElBQUlBLEVBQUU5UixFQUFFa3BCLFVBQVUsSUFBSTJyQixJQUFJM3ZDLEVBQUV0d0IsU0FBUSxTQUFTc3dCLEdBQUcsSUFBSWhnQixFQUFFa3hELEdBQUdybUMsS0FBSyxLQUFLL1AsRUFBRWtGLEdBQUc0TSxFQUFFeHNCLElBQUk0ZixLQUFLNE0sRUFBRStPLElBQUkzYixHQUFHQSxFQUFFb00sS0FBS3BzQixFQUFFQSxHQUFHLEdBQUUsQ0FBQyxDQUN6USxTQUFTbXhELEdBQUdyMkMsRUFBRWtGLEdBQUcsSUFBSTRNLEVBQUU1TSxFQUFFdytCLFVBQVUsR0FBRyxPQUFPNXhCLEVBQUUsSUFBSSxJQUFJNXNCLEVBQUUsRUFBRUEsRUFBRTRzQixFQUFFcCtCLE9BQU93UixJQUFJLENBQUMsSUFBSXRQLEVBQUVrOEIsRUFBRTVzQixHQUFHLElBQUksSUFBSSthLEVBQUVELEVBQUUwZSxFQUFFeFosRUFBRXRtQixFQUFFOC9CLEVBQUUxZSxFQUFFLEtBQUssT0FBT3BoQixHQUFHLENBQUMsT0FBT0EsRUFBRXJMLEtBQUssS0FBSyxFQUFFc2lFLEdBQUVqM0QsRUFBRXNxQyxVQUFVNHNCLElBQUcsRUFBRyxNQUFNOTFDLEVBQUUsS0FBSyxFQUE0QyxLQUFLLEVBQUU2MUMsR0FBRWozRCxFQUFFc3FDLFVBQVUyRyxjQUFjaW1CLElBQUcsRUFBRyxNQUFNOTFDLEVBQUVwaEIsRUFBRUEsRUFBRTdHLE1BQU0sQ0FBQyxHQUFHLE9BQU84OUQsR0FBRSxNQUFNcG9ELE1BQU1xWCxFQUFFLE1BQU1reEMsR0FBRy8xQyxFQUFFeWUsRUFBRTlvQyxHQUFHaWdFLEdBQUUsS0FBS0MsSUFBRyxFQUFHLElBQUk1NkQsRUFBRXRGLEVBQUUwMEMsVUFBVSxPQUFPcHZDLElBQUlBLEVBQUVuRCxPQUFPLE1BQU1uQyxFQUFFbUMsT0FBTyxJQUFzQixDQUFqQixNQUFNZ29CLEdBQUdrMUMsR0FBRXIvRCxFQUFFc3ZCLEVBQUVuRixFQUFFLENBQUMsQ0FBQyxHQUFrQixNQUFmbUYsRUFBRWl1QyxhQUFtQixJQUFJanVDLEVBQUVBLEVBQUUybEIsTUFBTSxPQUFPM2xCLEdBQUdveEMsR0FBR3B4QyxFQUFFbEYsR0FBR2tGLEVBQUVBLEVBQUU0bEIsT0FBTyxDQUNqZSxTQUFTd3JCLEdBQUd0MkMsRUFBRWtGLEdBQUcsSUFBSTRNLEVBQUU5UixFQUFFc3FCLFVBQVVwbEMsRUFBRThhLEVBQUV1cUIsTUFBTSxPQUFPdnFCLEVBQUV6c0IsS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQWlCLEdBQWQ4aUUsR0FBR254QyxFQUFFbEYsR0FBR3UyQyxHQUFHdjJDLEdBQVEsRUFBRjlhLEVBQUksQ0FBQyxJQUFJa3dELEdBQUcsRUFBRXAxQyxFQUFFQSxFQUFFam9CLFFBQVFzOUQsR0FBRyxFQUFFcjFDLEVBQTJCLENBQXhCLE1BQU1nRixHQUFHaXdDLEdBQUVqMUMsRUFBRUEsRUFBRWpvQixPQUFPaXRCLEVBQUUsQ0FBQyxJQUFJb3dDLEdBQUcsRUFBRXAxQyxFQUFFQSxFQUFFam9CLE9BQWdDLENBQXhCLE1BQU1pdEIsR0FBR2l3QyxHQUFFajFDLEVBQUVBLEVBQUVqb0IsT0FBT2l0QixFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRXF4QyxHQUFHbnhDLEVBQUVsRixHQUFHdTJDLEdBQUd2MkMsR0FBSyxJQUFGOWEsR0FBTyxPQUFPNHNCLEdBQUdrakMsR0FBR2xqQyxFQUFFQSxFQUFFLzVCLFFBQVEsTUFBTSxLQUFLLEVBQWdELEdBQTlDcytELEdBQUdueEMsRUFBRWxGLEdBQUd1MkMsR0FBR3YyQyxHQUFLLElBQUY5YSxHQUFPLE9BQU80c0IsR0FBR2tqQyxHQUFHbGpDLEVBQUVBLEVBQUUvNUIsUUFBbUIsR0FBUmlvQixFQUFFdXFCLE1BQVMsQ0FBQyxJQUFJMzBDLEVBQUVvcUIsRUFBRWtwQixVQUFVLElBQUl0QyxHQUFHaHhDLEVBQUUsR0FBNEIsQ0FBeEIsTUFBTW92QixHQUFHaXdDLEdBQUVqMUMsRUFBRUEsRUFBRWpvQixPQUFPaXRCLEVBQUUsQ0FBQyxDQUFDLEdBQUssRUFBRjlmLEdBQW9CLE9BQWR0UCxFQUFFb3FCLEVBQUVrcEIsV0FBbUIsQ0FBQyxJQUFJanBCLEVBQUVELEVBQUVva0MsY0FBYzFsQixFQUFFLE9BQU81TSxFQUFFQSxFQUFFc3lCLGNBQWNua0MsRUFBRXJoQixFQUFFb2hCLEVBQUVwb0IsS0FBS3NELEVBQUU4a0IsRUFBRWltQyxZQUNqZSxHQUFuQmptQyxFQUFFaW1DLFlBQVksS0FBUSxPQUFPL3FELEVBQUUsSUFBSSxVQUFVMEQsR0FBRyxVQUFVcWhCLEVBQUVyb0IsTUFBTSxNQUFNcW9CLEVBQUVyaUIsTUFBTTBuQyxFQUFHMXZDLEVBQUVxcUIsR0FBR3NvQixHQUFHM3BDLEVBQUU4L0IsR0FBRyxJQUFJM2UsRUFBRXdvQixHQUFHM3BDLEVBQUVxaEIsR0FBRyxJQUFJeWUsRUFBRSxFQUFFQSxFQUFFeGpDLEVBQUV4SCxPQUFPZ3JDLEdBQUcsRUFBRSxDQUFDLElBQUk3WixFQUFFM3BCLEVBQUV3akMsR0FBR0MsRUFBRXpqQyxFQUFFd2pDLEVBQUUsR0FBRyxVQUFVN1osRUFBRXlpQixHQUFHMXhDLEVBQUUrb0MsR0FBRyw0QkFBNEI5WixFQUFFeWhCLEdBQUcxd0MsRUFBRStvQyxHQUFHLGFBQWE5WixFQUFFK2hCLEdBQUdoeEMsRUFBRStvQyxHQUFHaUQsRUFBR2hzQyxFQUFFaXZCLEVBQUU4WixFQUFFNWUsRUFBRSxDQUFDLE9BQU9uaEIsR0FBRyxJQUFLLFFBQVEybUMsRUFBRzN2QyxFQUFFcXFCLEdBQUcsTUFBTSxJQUFLLFdBQVcrbEIsR0FBR3B3QyxFQUFFcXFCLEdBQUcsTUFBTSxJQUFLLFNBQVMsSUFBSWdGLEVBQUVydkIsRUFBRXN2QyxjQUFjK3VCLFlBQVlyK0QsRUFBRXN2QyxjQUFjK3VCLGNBQWNoMEMsRUFBRWkwQyxTQUFTLElBQUk5NEQsRUFBRTZrQixFQUFFMXBCLE1BQU0sTUFBTTZFLEVBQUV1cUMsR0FBRy92QyxJQUFJcXFCLEVBQUVpMEMsU0FBUzk0RCxHQUFFLEdBQUk2cEIsTUFBTWhGLEVBQUVpMEMsV0FBVyxNQUFNajBDLEVBQUU4RixhQUFhNGYsR0FBRy92QyxJQUFJcXFCLEVBQUVpMEMsU0FDbmZqMEMsRUFBRThGLGNBQWEsR0FBSTRmLEdBQUcvdkMsSUFBSXFxQixFQUFFaTBDLFNBQVNqMEMsRUFBRWkwQyxTQUFTLEdBQUcsSUFBRyxJQUFLdCtELEVBQUUrcUQsSUFBSTFnQyxDQUEwQixDQUF4QixNQUFNK0UsR0FBR2l3QyxHQUFFajFDLEVBQUVBLEVBQUVqb0IsT0FBT2l0QixFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBZ0IsR0FBZHF4QyxHQUFHbnhDLEVBQUVsRixHQUFHdTJDLEdBQUd2MkMsR0FBUSxFQUFGOWEsRUFBSSxDQUFDLEdBQUcsT0FBTzhhLEVBQUVrcEIsVUFBVSxNQUFNejdCLE1BQU1xWCxFQUFFLE1BQU1sdkIsRUFBRW9xQixFQUFFa3BCLFVBQVVqcEIsRUFBRUQsRUFBRW9rQyxjQUFjLElBQUl4dUQsRUFBRW14QyxVQUFVOW1CLENBQTBCLENBQXhCLE1BQU0rRSxHQUFHaXdDLEdBQUVqMUMsRUFBRUEsRUFBRWpvQixPQUFPaXRCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFnQixHQUFkcXhDLEdBQUdueEMsRUFBRWxGLEdBQUd1MkMsR0FBR3YyQyxHQUFRLEVBQUY5YSxHQUFLLE9BQU80c0IsR0FBR0EsRUFBRTJZLGNBQWNtRixhQUFhLElBQUlRLEdBQUdsckIsRUFBRTJxQixjQUF1QyxDQUF4QixNQUFNN3FCLEdBQUdpd0MsR0FBRWoxQyxFQUFFQSxFQUFFam9CLE9BQU9pdEIsRUFBRSxDQUFDLE1BQU0sS0FBSyxFQUc0RyxRQUFRcXhDLEdBQUdueEMsRUFDbmZsRixHQUFHdTJDLEdBQUd2MkMsU0FKNFksS0FBSyxHQUFHcTJDLEdBQUdueEMsRUFBRWxGLEdBQUd1MkMsR0FBR3YyQyxHQUFxQixNQUFsQnBxQixFQUFFb3FCLEVBQUU2cUIsT0FBUU4sUUFBYXRxQixFQUFFLE9BQU9ycUIsRUFBRTYwQyxjQUFjNzBDLEVBQUVzekMsVUFBVXN0QixTQUFTdjJDLEdBQUdBLEdBQ2xmLE9BQU9ycUIsRUFBRTAwQyxXQUFXLE9BQU8xMEMsRUFBRTAwQyxVQUFVRyxnQkFBZ0Jnc0IsR0FBR2hyQixPQUFRLEVBQUZ2bUMsR0FBS2l4RCxHQUFHbjJDLEdBQUcsTUFBTSxLQUFLLEdBQXNGLEdBQW5GNkUsRUFBRSxPQUFPaU4sR0FBRyxPQUFPQSxFQUFFMlksY0FBcUIsRUFBUHpxQixFQUFFdFMsTUFBUWtuRCxJQUFHNzBDLEVBQUU2MEMsS0FBSS92QyxFQUFFd3hDLEdBQUdueEMsRUFBRWxGLEdBQUc0MEMsR0FBRTcwQyxHQUFHczJDLEdBQUdueEMsRUFBRWxGLEdBQUd1MkMsR0FBR3YyQyxHQUFRLEtBQUY5YSxFQUFPLENBQTBCLEdBQXpCNmEsRUFBRSxPQUFPQyxFQUFFeXFCLGVBQWtCenFCLEVBQUVrcEIsVUFBVXN0QixTQUFTejJDLEtBQUs4RSxHQUFHLElBQVksRUFBUDdFLEVBQUV0UyxNQUFRLElBQUlxbkQsR0FBRS8wQyxFQUFFNkUsRUFBRTdFLEVBQUU2cUIsTUFBTSxPQUFPaG1CLEdBQUcsQ0FBQyxJQUFJOFosRUFBRW8yQixHQUFFbHdDLEVBQUUsT0FBT2t3QyxJQUFHLENBQWUsT0FBVjM1RCxHQUFKNnBCLEVBQUU4dkMsSUFBTWxxQixNQUFhNWxCLEVBQUUxeEIsS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUc2aEUsR0FBRyxFQUFFbndDLEVBQUVBLEVBQUVsdEIsUUFBUSxNQUFNLEtBQUssRUFBRWk5RCxHQUFHL3ZDLEVBQUVBLEVBQUVsdEIsUUFBUSxJQUFJb25CLEVBQUU4RixFQUFFaWtCLFVBQVUsR0FBRyxtQkFBb0IvcEIsRUFBRSsyQyxxQkFBcUIsQ0FBQ2h4RCxFQUFFK2YsRUFBRTZNLEVBQUU3TSxFQUFFbHRCLE9BQU8sSUFBSW10QixFQUFFaGdCLEVBQUVpYSxFQUFFdG5CLE1BQ3BmcXRCLEVBQUVrL0IsY0FBY2psQyxFQUFFL0csTUFBTThNLEVBQUV1bEIsY0FBY3RyQixFQUFFKzJDLHNCQUF3QyxDQUFqQixNQUFNbHhDLEdBQUdpd0MsR0FBRS92RCxFQUFFNHNCLEVBQUU5TSxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRWd3QyxHQUFHL3ZDLEVBQUVBLEVBQUVsdEIsUUFBUSxNQUFNLEtBQUssR0FBRyxHQUFHLE9BQU9rdEIsRUFBRXdsQixjQUFjLENBQUNpc0IsR0FBRy8zQixHQUFHLFFBQVEsRUFBRSxPQUFPdmpDLEdBQUdBLEVBQUVyRCxPQUFPa3RCLEVBQUU4dkMsR0FBRTM1RCxHQUFHczdELEdBQUcvM0IsRUFBRSxDQUFDOVosRUFBRUEsRUFBRWltQixPQUFPLENBQUM5cUIsRUFBRSxJQUFJNkUsRUFBRSxLQUFLOFosRUFBRTNlLElBQUksQ0FBQyxHQUFHLElBQUkyZSxFQUFFcHJDLEtBQUssR0FBRyxPQUFPc3hCLEVBQUUsQ0FBQ0EsRUFBRThaLEVBQUUsSUFBSS9vQyxFQUFFK29DLEVBQUV1SyxVQUFVbnBCLEVBQWEsbUJBQVZFLEVBQUVycUIsRUFBRXdiLE9BQTRCbTJCLFlBQVl0bkIsRUFBRXNuQixZQUFZLFVBQVUsT0FBTyxhQUFhdG5CLEVBQUV2SyxRQUFRLFFBQVM5VyxFQUFFKy9CLEVBQUV1SyxVQUFrQ3hLLEVBQUUsT0FBMUJ4akMsRUFBRXlqQyxFQUFFeWxCLGNBQWNoekMsUUFBOEJsVyxFQUFFeUssZUFBZSxXQUFXekssRUFBRXdhLFFBQVEsS0FBSzlXLEVBQUV3UyxNQUFNc0UsUUFDemYyeEIsR0FBRyxVQUFVM0ksR0FBNEIsQ0FBeEIsTUFBTTFaLEdBQUdpd0MsR0FBRWoxQyxFQUFFQSxFQUFFam9CLE9BQU9pdEIsRUFBRSxDQUFDLE9BQU8sR0FBRyxJQUFJMlosRUFBRXByQyxLQUFLLEdBQUcsT0FBT3N4QixFQUFFLElBQUk4WixFQUFFdUssVUFBVW5DLFVBQVVobkIsRUFBRSxHQUFHNGUsRUFBRXlsQixhQUFzQyxDQUF4QixNQUFNcC9CLEdBQUdpd0MsR0FBRWoxQyxFQUFFQSxFQUFFam9CLE9BQU9pdEIsRUFBRSxPQUFPLElBQUksS0FBSzJaLEVBQUVwckMsS0FBSyxLQUFLb3JDLEVBQUVwckMsS0FBSyxPQUFPb3JDLEVBQUU4TCxlQUFlOUwsSUFBSTNlLElBQUksT0FBTzJlLEVBQUVrTSxNQUFNLENBQUNsTSxFQUFFa00sTUFBTTl5QyxPQUFPNG1DLEVBQUVBLEVBQUVBLEVBQUVrTSxNQUFNLFFBQVEsQ0FBQyxHQUFHbE0sSUFBSTNlLEVBQUUsTUFBTUEsRUFBRSxLQUFLLE9BQU8yZSxFQUFFbU0sU0FBUyxDQUFDLEdBQUcsT0FBT25NLEVBQUU1bUMsUUFBUTRtQyxFQUFFNW1DLFNBQVNpb0IsRUFBRSxNQUFNQSxFQUFFNkUsSUFBSThaLElBQUk5WixFQUFFLE1BQU04WixFQUFFQSxFQUFFNW1DLE1BQU0sQ0FBQzhzQixJQUFJOFosSUFBSTlaLEVBQUUsTUFBTThaLEVBQUVtTSxRQUFRL3lDLE9BQU80bUMsRUFBRTVtQyxPQUFPNG1DLEVBQUVBLEVBQUVtTSxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssR0FBR3VyQixHQUFHbnhDLEVBQUVsRixHQUFHdTJDLEdBQUd2MkMsR0FBSyxFQUFGOWEsR0FBS2l4RCxHQUFHbjJDLEdBQVMsS0FBSyxJQUN0ZCxDQUFDLFNBQVN1MkMsR0FBR3YyQyxHQUFHLElBQUlrRixFQUFFbEYsRUFBRXVxQixNQUFNLEdBQUssRUFBRnJsQixFQUFJLENBQUMsSUFBSWxGLEVBQUUsQ0FBQyxJQUFJLElBQUk4UixFQUFFOVIsRUFBRWpvQixPQUFPLE9BQU8rNUIsR0FBRyxDQUFDLEdBQUcwakMsR0FBRzFqQyxHQUFHLENBQUMsSUFBSTVzQixFQUFFNHNCLEVBQUUsTUFBTTlSLENBQUMsQ0FBQzhSLEVBQUVBLEVBQUUvNUIsTUFBTSxDQUFDLE1BQU0wVixNQUFNcVgsRUFBRSxLQUFNLENBQUMsT0FBTzVmLEVBQUUzUixLQUFLLEtBQUssRUFBRSxJQUFJcUMsRUFBRXNQLEVBQUVna0MsVUFBa0IsR0FBUmhrQyxFQUFFcWxDLFFBQVczRCxHQUFHaHhDLEVBQUUsSUFBSXNQLEVBQUVxbEMsUUFBUSxJQUFnQnFyQixHQUFHNTFDLEVBQVR5MUMsR0FBR3oxQyxHQUFVcHFCLEdBQUcsTUFBTSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUk4b0MsRUFBRXg1QixFQUFFZ2tDLFVBQVUyRyxjQUFzQjZsQixHQUFHMTFDLEVBQVR5MUMsR0FBR3oxQyxHQUFVMGUsR0FBRyxNQUFNLFFBQVEsTUFBTWp4QixNQUFNcVgsRUFBRSxNQUFnQyxDQUF4QixNQUFNNXBCLEdBQUcrNUQsR0FBRWoxQyxFQUFFQSxFQUFFam9CLE9BQU9tRCxFQUFFLENBQUM4a0IsRUFBRXVxQixRQUFRLENBQUMsQ0FBRyxLQUFGcmxCLElBQVNsRixFQUFFdXFCLFFBQVEsS0FBSyxDQUFDLFNBQVNvc0IsR0FBRzMyQyxFQUFFa0YsRUFBRTRNLEdBQUdpakMsR0FBRS8wQyxFQUFFNDJDLEdBQUc1MkMsRUFBRWtGLEVBQUU0TSxFQUFFLENBQ3ZiLFNBQVM4a0MsR0FBRzUyQyxFQUFFa0YsRUFBRTRNLEdBQUcsSUFBSSxJQUFJNXNCLEVBQUUsSUFBWSxFQUFQOGEsRUFBRXRTLE1BQVEsT0FBT3FuRCxJQUFHLENBQUMsSUFBSW4vRCxFQUFFbS9ELEdBQUU5MEMsRUFBRXJxQixFQUFFaTFDLE1BQU0sR0FBRyxLQUFLajFDLEVBQUVyQyxLQUFLMlIsRUFBRSxDQUFDLElBQUl3NUIsRUFBRSxPQUFPOW9DLEVBQUU2MEMsZUFBZWtxQixHQUFHLElBQUlqMkIsRUFBRSxDQUFDLElBQUk5L0IsRUFBRWhKLEVBQUUwMEMsVUFBVXB2QyxFQUFFLE9BQU8wRCxHQUFHLE9BQU9BLEVBQUU2ckMsZUFBZW1xQixHQUFFaDJELEVBQUUrMUQsR0FBRyxJQUFJNTBDLEVBQUU2MEMsR0FBTyxHQUFMRCxHQUFHajJCLEdBQU1rMkIsR0FBRTE1RCxLQUFLNmtCLEVBQUUsSUFBSWcxQyxHQUFFbi9ELEVBQUUsT0FBT20vRCxJQUFPNzVELEdBQUp3akMsRUFBRXEyQixJQUFNbHFCLE1BQU0sS0FBS25NLEVBQUVuckMsS0FBSyxPQUFPbXJDLEVBQUUrTCxjQUFjb3NCLEdBQUdqaEUsR0FBRyxPQUFPc0YsR0FBR0EsRUFBRW5ELE9BQU8ybUMsRUFBRXEyQixHQUFFNzVELEdBQUcyN0QsR0FBR2poRSxHQUFHLEtBQUssT0FBT3FxQixHQUFHODBDLEdBQUU5MEMsRUFBRTIyQyxHQUFHMzJDLEVBQUVpRixFQUFFNE0sR0FBRzdSLEVBQUVBLEVBQUU2cUIsUUFBUWlxQixHQUFFbi9ELEVBQUUrK0QsR0FBRy8xRCxFQUFFZzJELEdBQUU3MEMsQ0FBQyxDQUFDKzJDLEdBQUc5MkMsRUFBTSxNQUFNLElBQW9CLEtBQWZwcUIsRUFBRXU5RCxlQUFvQixPQUFPbHpDLEdBQUdBLEVBQUVsb0IsT0FBT25DLEVBQUVtL0QsR0FBRTkwQyxHQUFHNjJDLEdBQUc5MkMsRUFBTSxDQUFDLENBQ3ZjLFNBQVM4MkMsR0FBRzkyQyxHQUFHLEtBQUssT0FBTyswQyxJQUFHLENBQUMsSUFBSTd2QyxFQUFFNnZDLEdBQUUsR0FBRyxJQUFhLEtBQVI3dkMsRUFBRXFsQixPQUFZLENBQUMsSUFBSXpZLEVBQUU1TSxFQUFFb2xCLFVBQVUsSUFBSSxHQUFHLElBQWEsS0FBUnBsQixFQUFFcWxCLE9BQVksT0FBT3JsQixFQUFFM3hCLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxLQUFLLEdBQUdxaEUsSUFBR1MsR0FBRyxFQUFFbndDLEdBQUcsTUFBTSxLQUFLLEVBQUUsSUFBSWhnQixFQUFFZ2dCLEVBQUVna0IsVUFBVSxHQUFXLEVBQVJoa0IsRUFBRXFsQixRQUFVcXFCLEdBQUUsR0FBRyxPQUFPOWlDLEVBQUU1c0IsRUFBRXlqRCx3QkFBd0IsQ0FBQyxJQUFJL3lELEVBQUVzdkIsRUFBRXUrQixjQUFjditCLEVBQUV0dEIsS0FBS2s2QixFQUFFc3lCLGNBQWNLLEdBQUd2L0IsRUFBRXR0QixLQUFLazZCLEVBQUVzeUIsZUFBZWwvQyxFQUFFNHNELG1CQUFtQmw4RCxFQUFFazhCLEVBQUUyWSxjQUFjdmxDLEVBQUU2eEQsb0NBQW9DLENBQUMsSUFBSTkyQyxFQUFFaUYsRUFBRStnQyxZQUFZLE9BQU9obUMsR0FBR2luQyxHQUFHaGlDLEVBQUVqRixFQUFFL2EsR0FBRyxNQUFNLEtBQUssRUFBRSxJQUFJdzVCLEVBQUV4WixFQUFFK2dDLFlBQVksR0FBRyxPQUFPdm5CLEVBQUUsQ0FBUSxHQUFQNU0sRUFBRSxLQUFRLE9BQU81TSxFQUFFMmxCLE1BQU0sT0FBTzNsQixFQUFFMmxCLE1BQU10M0MsS0FBSyxLQUFLLEVBQ3ZmLEtBQUssRUFBRXUrQixFQUFFNU0sRUFBRTJsQixNQUFNM0IsVUFBVWdlLEdBQUdoaUMsRUFBRXdaLEVBQUU1TSxFQUFFLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSWx6QixFQUFFc21CLEVBQUVna0IsVUFBVSxHQUFHLE9BQU9wWCxHQUFXLEVBQVI1TSxFQUFFcWxCLE1BQVEsQ0FBQ3pZLEVBQUVsekIsRUFBRSxJQUFJMUQsRUFBRWdxQixFQUFFay9CLGNBQWMsT0FBT2wvQixFQUFFdHRCLE1BQU0sSUFBSyxTQUFTLElBQUssUUFBUSxJQUFLLFNBQVMsSUFBSyxXQUFXc0QsRUFBRXE1RCxXQUFXemlDLEVBQUVwcUIsUUFBUSxNQUFNLElBQUssTUFBTXhNLEVBQUU4N0QsTUFBTWxsQyxFQUFFa2xDLElBQUk5N0QsRUFBRTg3RCxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQVEsS0FBSyxFQUFRLEtBQUssR0FBeUosS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBaE0sS0FBSyxHQUFHLEdBQUcsT0FBTzl4QyxFQUFFdWxCLGNBQWMsQ0FBQyxJQUFJMXFCLEVBQUVtRixFQUFFb2xCLFVBQVUsR0FBRyxPQUFPdnFCLEVBQUUsQ0FBQyxJQUFJOEUsRUFBRTlFLEVBQUUwcUIsY0FBYyxHQUFHLE9BQU81bEIsRUFBRSxDQUFDLElBQUk4WixFQUFFOVosRUFBRTZsQixXQUFXLE9BQU8vTCxHQUFHeVIsR0FBR3pSLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFDNWMsUUFBUSxNQUFNbHhCLE1BQU1xWCxFQUFFLE1BQU84dkMsSUFBVyxJQUFSMXZDLEVBQUVxbEIsT0FBVytxQixHQUFHcHdDLEVBQTJCLENBQXhCLE1BQU1ELEdBQUdnd0MsR0FBRS92QyxFQUFFQSxFQUFFbnRCLE9BQU9rdEIsRUFBRSxDQUFDLENBQUMsR0FBR0MsSUFBSWxGLEVBQUUsQ0FBQyswQyxHQUFFLEtBQUssS0FBSyxDQUFhLEdBQUcsUUFBZmpqQyxFQUFFNU0sRUFBRTRsQixTQUFvQixDQUFDaFosRUFBRS81QixPQUFPbXRCLEVBQUVudEIsT0FBT2c5RCxHQUFFampDLEVBQUUsS0FBSyxDQUFDaWpDLEdBQUU3dkMsRUFBRW50QixNQUFNLENBQUMsQ0FBQyxTQUFTMitELEdBQUcxMkMsR0FBRyxLQUFLLE9BQU8rMEMsSUFBRyxDQUFDLElBQUk3dkMsRUFBRTZ2QyxHQUFFLEdBQUc3dkMsSUFBSWxGLEVBQUUsQ0FBQyswQyxHQUFFLEtBQUssS0FBSyxDQUFDLElBQUlqakMsRUFBRTVNLEVBQUU0bEIsUUFBUSxHQUFHLE9BQU9oWixFQUFFLENBQUNBLEVBQUUvNUIsT0FBT210QixFQUFFbnRCLE9BQU9nOUQsR0FBRWpqQyxFQUFFLEtBQUssQ0FBQ2lqQyxHQUFFN3ZDLEVBQUVudEIsTUFBTSxDQUFDLENBQ3ZTLFNBQVM4K0QsR0FBRzcyQyxHQUFHLEtBQUssT0FBTyswQyxJQUFHLENBQUMsSUFBSTd2QyxFQUFFNnZDLEdBQUUsSUFBSSxPQUFPN3ZDLEVBQUUzeEIsS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJdStCLEVBQUU1TSxFQUFFbnRCLE9BQU8sSUFBSXM5RCxHQUFHLEVBQUVud0MsRUFBb0IsQ0FBakIsTUFBTWhxQixHQUFHKzVELEdBQUUvdkMsRUFBRTRNLEVBQUU1MkIsRUFBRSxDQUFDLE1BQU0sS0FBSyxFQUFFLElBQUlnSyxFQUFFZ2dCLEVBQUVna0IsVUFBVSxHQUFHLG1CQUFvQmhrQyxFQUFFeWpELGtCQUFrQixDQUFDLElBQUkveUQsRUFBRXN2QixFQUFFbnRCLE9BQU8sSUFBSW1OLEVBQUV5akQsbUJBQXFDLENBQWpCLE1BQU16dEQsR0FBRys1RCxHQUFFL3ZDLEVBQUV0dkIsRUFBRXNGLEVBQUUsQ0FBQyxDQUFDLElBQUkra0IsRUFBRWlGLEVBQUVudEIsT0FBTyxJQUFJdTlELEdBQUdwd0MsRUFBb0IsQ0FBakIsTUFBTWhxQixHQUFHKzVELEdBQUUvdkMsRUFBRWpGLEVBQUUva0IsRUFBRSxDQUFDLE1BQU0sS0FBSyxFQUFFLElBQUl3akMsRUFBRXhaLEVBQUVudEIsT0FBTyxJQUFJdTlELEdBQUdwd0MsRUFBb0IsQ0FBakIsTUFBTWhxQixHQUFHKzVELEdBQUUvdkMsRUFBRXdaLEVBQUV4akMsRUFBRSxFQUEyQixDQUF4QixNQUFNQSxHQUFHKzVELEdBQUUvdkMsRUFBRUEsRUFBRW50QixPQUFPbUQsRUFBRSxDQUFDLEdBQUdncUIsSUFBSWxGLEVBQUUsQ0FBQyswQyxHQUFFLEtBQUssS0FBSyxDQUFDLElBQUluMkQsRUFBRXNtQixFQUFFNGxCLFFBQVEsR0FBRyxPQUFPbHNDLEVBQUUsQ0FBQ0EsRUFBRTdHLE9BQU9tdEIsRUFBRW50QixPQUFPZzlELEdBQUVuMkQsRUFBRSxLQUFLLENBQUNtMkQsR0FBRTd2QyxFQUFFbnRCLE1BQU0sQ0FBQyxDQUM3ZCxJQXdCa05rL0QsR0F4QjlNQyxHQUFHamhFLEtBQUtraEUsS0FBS0MsR0FBR2gxQixFQUFHc29CLHVCQUF1QjJNLEdBQUdqMUIsRUFBR3d1QixrQkFBa0IwRyxHQUFHbDFCLEVBQUdrTyx3QkFBd0J1VyxHQUFFLEVBQUVrRyxHQUFFLEtBQUt3SyxHQUFFLEtBQUtDLEdBQUUsRUFBRWhHLEdBQUcsRUFBRUQsR0FBR3ZRLEdBQUcsR0FBRzNrQyxHQUFFLEVBQUVvN0MsR0FBRyxLQUFLeFEsR0FBRyxFQUFFeVEsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLEdBQUcsS0FBS0MsR0FBRyxLQUFLcEIsR0FBRyxFQUFFakMsR0FBR3NELElBQVNDLEdBQUcsS0FBSy9ILElBQUcsRUFBR0MsR0FBRyxLQUFLRyxHQUFHLEtBQUs0SCxJQUFHLEVBQUdDLEdBQUcsS0FBS0MsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLEdBQUcsS0FBS0MsSUFBSSxFQUFFQyxHQUFHLEVBQUUsU0FBUzVRLEtBQUksT0FBTyxJQUFPLEVBQUZiLElBQUtwYixNQUFLLElBQUk0c0IsR0FBR0EsR0FBR0EsR0FBRzVzQixJQUFHLENBQ2hVLFNBQVNrYyxHQUFHM25DLEdBQUcsT0FBRyxJQUFZLEVBQVBBLEVBQUV0UyxNQUFlLEVBQUssSUFBTyxFQUFGbTVDLEtBQU0sSUFBSTJRLEdBQVNBLElBQUdBLEdBQUssT0FBT2hULEdBQUc3dUMsWUFBa0IsSUFBSTJpRCxLQUFLQSxHQUFHNXFCLE1BQU00cUIsSUFBVSxLQUFQdDRDLEVBQUUrdEIsSUFBa0IvdEIsRUFBaUJBLE9BQUUsS0FBakJBLEVBQUVwRixPQUFPcEIsT0FBbUIsR0FBR3MzQixHQUFHOXdCLEVBQUVwb0IsS0FBYyxDQUFDLFNBQVNnd0QsR0FBRzVuQyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsR0FBRyxHQUFHLEdBQUdpekQsR0FBRyxNQUFNQSxHQUFHLEVBQUVDLEdBQUcsS0FBSzNxRCxNQUFNcVgsRUFBRSxNQUFNOG9CLEdBQUc1dEIsRUFBRThSLEVBQUU1c0IsR0FBTSxJQUFPLEVBQUYyaEQsS0FBTTdtQyxJQUFJK3NDLEtBQUUvc0MsSUFBSStzQyxLQUFJLElBQU8sRUFBRmxHLE1BQU82USxJQUFJNWxDLEdBQUcsSUFBSXpWLElBQUdrOEMsR0FBR3Y0QyxFQUFFdzNDLEtBQUlnQixHQUFHeDRDLEVBQUU5YSxHQUFHLElBQUk0c0IsR0FBRyxJQUFJKzBCLElBQUcsSUFBWSxFQUFQM2hDLEVBQUV4WCxRQUFVOG1ELEdBQUcvb0IsS0FBSSxJQUFJMFcsSUFBSUcsTUFBSyxDQUMxWSxTQUFTa1csR0FBR3g0QyxFQUFFa0YsR0FBRyxJQUFJNE0sRUFBRTlSLEVBQUV5NEMsY0E1TXpCLFNBQVl6NEMsRUFBRWtGLEdBQUcsSUFBSSxJQUFJNE0sRUFBRTlSLEVBQUVvdEIsZUFBZWxvQyxFQUFFOGEsRUFBRXF0QixZQUFZejNDLEVBQUVvcUIsRUFBRTA0QyxnQkFBZ0J6NEMsRUFBRUQsRUFBRW10QixhQUFhLEVBQUVsdEIsR0FBRyxDQUFDLElBQUl5ZSxFQUFFLEdBQUcrTixHQUFHeHNCLEdBQUdyaEIsRUFBRSxHQUFHOC9CLEVBQUV4akMsRUFBRXRGLEVBQUU4b0MsSUFBTyxJQUFJeGpDLEVBQU0sSUFBSzBELEVBQUVrekIsSUFBSSxJQUFLbHpCLEVBQUVzRyxLQUFHdFAsRUFBRThvQyxHQUFHOE8sR0FBRzV1QyxFQUFFc21CLElBQVFocUIsR0FBR2dxQixJQUFJbEYsRUFBRTI0QyxjQUFjLzVELEdBQUdxaEIsSUFBSXJoQixDQUFDLENBQUMsQ0E0TW5MZzZELENBQUc1NEMsRUFBRWtGLEdBQUcsSUFBSWhnQixFQUFFZ29DLEdBQUdsdEIsRUFBRUEsSUFBSStzQyxHQUFFeUssR0FBRSxHQUFHLEdBQUcsSUFBSXR5RCxFQUFFLE9BQU80c0IsR0FBR3FaLEdBQUdyWixHQUFHOVIsRUFBRXk0QyxhQUFhLEtBQUt6NEMsRUFBRTY0QyxpQkFBaUIsT0FBTyxHQUFHM3pDLEVBQUVoZ0IsR0FBR0EsRUFBRThhLEVBQUU2NEMsbUJBQW1CM3pDLEVBQUUsQ0FBZ0IsR0FBZixNQUFNNE0sR0FBR3FaLEdBQUdyWixHQUFNLElBQUk1TSxFQUFFLElBQUlsRixFQUFFenNCLElBN0lzSixTQUFZeXNCLEdBQUdtaUMsSUFBRyxFQUFHRSxHQUFHcmlDLEVBQUUsQ0E2STVLODRDLENBQUdDLEdBQUdocEMsS0FBSyxLQUFLL1AsSUFBSXFpQyxHQUFHMFcsR0FBR2hwQyxLQUFLLEtBQUsvUCxJQUFJaWdDLElBQUcsV0FBVyxJQUFPLEVBQUY0RyxLQUFNdkUsSUFBSSxJQUFHeHdCLEVBQUUsU0FBUyxDQUFDLE9BQU9rYyxHQUFHOW9DLElBQUksS0FBSyxFQUFFNHNCLEVBQUUrWixHQUFHLE1BQU0sS0FBSyxFQUFFL1osRUFBRWlhLEdBQUcsTUFBTSxLQUFLLEdBQXdDLFFBQVFqYSxFQUFFbWEsU0FBcEMsS0FBSyxVQUFVbmEsRUFBRXVhLEdBQXNCdmEsRUFBRWtuQyxHQUFHbG5DLEVBQUVtbkMsR0FBR2xwQyxLQUFLLEtBQUsvUCxHQUFHLENBQUNBLEVBQUU2NEMsaUJBQWlCM3pDLEVBQUVsRixFQUFFeTRDLGFBQWEzbUMsQ0FBQyxDQUFDLENBQzdjLFNBQVNtbkMsR0FBR2o1QyxFQUFFa0YsR0FBYyxHQUFYbXpDLElBQUksRUFBRUMsR0FBRyxFQUFLLElBQU8sRUFBRnpSLElBQUssTUFBTXA1QyxNQUFNcVgsRUFBRSxNQUFNLElBQUlnTixFQUFFOVIsRUFBRXk0QyxhQUFhLEdBQUdTLE1BQU1sNUMsRUFBRXk0QyxlQUFlM21DLEVBQUUsT0FBTyxLQUFLLElBQUk1c0IsRUFBRWdvQyxHQUFHbHRCLEVBQUVBLElBQUkrc0MsR0FBRXlLLEdBQUUsR0FBRyxHQUFHLElBQUl0eUQsRUFBRSxPQUFPLEtBQUssR0FBRyxJQUFPLEdBQUZBLElBQU8sSUFBS0EsRUFBRThhLEVBQUUyNEMsZUFBZXp6QyxFQUFFQSxFQUFFaTBDLEdBQUduNUMsRUFBRTlhLE9BQU8sQ0FBQ2dnQixFQUFFaGdCLEVBQUUsSUFBSXRQLEVBQUVpeEQsR0FBRUEsSUFBRyxFQUFFLElBQUk1bUMsRUFBRW01QyxLQUFnRCxJQUF4Q3JNLEtBQUkvc0MsR0FBR3czQyxLQUFJdHlDLElBQUU2eUMsR0FBRyxLQUFLdkQsR0FBRy9vQixLQUFJLElBQUk0dEIsR0FBR3I1QyxFQUFFa0YsVUFBVW8wQyxLQUFLLE1BQU0sTUFBTTE2RCxHQUFHMjZELEdBQUd2NUMsRUFBRXBoQixFQUFFLENBQVVrbUQsS0FBS3NTLEdBQUcxeUQsUUFBUXViLEVBQUU0bUMsR0FBRWp4RCxFQUFFLE9BQU8yaEUsR0FBRXJ5QyxFQUFFLEdBQUc2bkMsR0FBRSxLQUFLeUssR0FBRSxFQUFFdHlDLEVBQUU3SSxHQUFFLENBQUMsR0FBRyxJQUFJNkksRUFBRSxDQUF5QyxHQUF4QyxJQUFJQSxHQUFZLEtBQVJ0dkIsRUFBRTYzQyxHQUFHenRCLE1BQVc5YSxFQUFFdFAsRUFBRXN2QixFQUFFczBDLEdBQUd4NUMsRUFBRXBxQixJQUFRLElBQUlzdkIsRUFBRSxNQUFNNE0sRUFBRTJsQyxHQUFHNEIsR0FBR3I1QyxFQUFFLEdBQUd1NEMsR0FBR3Y0QyxFQUFFOWEsR0FBR3N6RCxHQUFHeDRDLEVBQUV5ckIsTUFBSzNaLEVBQUUsR0FBRyxJQUFJNU0sRUFBRXF6QyxHQUFHdjRDLEVBQUU5YSxPQUNoZixDQUF1QixHQUF0QnRQLEVBQUVvcUIsRUFBRXRiLFFBQVE0bEMsVUFBYSxJQUFPLEdBQUZwbEMsS0FHbkMsU0FBWThhLEdBQUcsSUFBSSxJQUFJa0YsRUFBRWxGLElBQUksQ0FBQyxHQUFXLE1BQVJrRixFQUFFcWxCLE1BQVksQ0FBQyxJQUFJelksRUFBRTVNLEVBQUUrZ0MsWUFBWSxHQUFHLE9BQU9uMEIsR0FBZSxRQUFYQSxFQUFFQSxFQUFFbzdCLFFBQWlCLElBQUksSUFBSWhvRCxFQUFFLEVBQUVBLEVBQUU0c0IsRUFBRXArQixPQUFPd1IsSUFBSSxDQUFDLElBQUl0UCxFQUFFazhCLEVBQUU1c0IsR0FBRythLEVBQUVycUIsRUFBRWczRCxZQUFZaDNELEVBQUVBLEVBQUVXLE1BQU0sSUFBSSxJQUFJeWpELEdBQUcvNUIsSUFBSXJxQixHQUFHLE9BQU0sQ0FBb0IsQ0FBakIsTUFBTThvQyxHQUFHLE9BQU0sQ0FBRSxDQUFDLENBQUMsQ0FBVyxHQUFWNU0sRUFBRTVNLEVBQUUybEIsTUFBd0IsTUFBZjNsQixFQUFFaXVDLGNBQW9CLE9BQU9yaEMsRUFBRUEsRUFBRS81QixPQUFPbXRCLEVBQUVBLEVBQUU0TSxNQUFNLENBQUMsR0FBRzVNLElBQUlsRixFQUFFLE1BQU0sS0FBSyxPQUFPa0YsRUFBRTRsQixTQUFTLENBQUMsR0FBRyxPQUFPNWxCLEVBQUVudEIsUUFBUW10QixFQUFFbnRCLFNBQVNpb0IsRUFBRSxPQUFNLEVBQUdrRixFQUFFQSxFQUFFbnRCLE1BQU0sQ0FBQ210QixFQUFFNGxCLFFBQVEveUMsT0FBT210QixFQUFFbnRCLE9BQU9tdEIsRUFBRUEsRUFBRTRsQixPQUFPLENBQUMsQ0FBQyxPQUFNLENBQUUsQ0FIdlgydUIsQ0FBRzdqRSxLQUFlLEtBQVZzdkIsRUFBRWkwQyxHQUFHbjVDLEVBQUU5YSxLQUFtQixLQUFSK2EsRUFBRXd0QixHQUFHenRCLE1BQVc5YSxFQUFFK2EsRUFBRWlGLEVBQUVzMEMsR0FBR3g1QyxFQUFFQyxJQUFLLElBQUlpRixHQUFHLE1BQU00TSxFQUFFMmxDLEdBQUc0QixHQUFHcjVDLEVBQUUsR0FBR3U0QyxHQUFHdjRDLEVBQUU5YSxHQUFHc3pELEdBQUd4NEMsRUFBRXlyQixNQUFLM1osRUFBcUMsT0FBbkM5UixFQUFFMDVDLGFBQWE5akUsRUFBRW9xQixFQUFFMjVDLGNBQWN6MEQsRUFBU2dnQixHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTXpYLE1BQU1xWCxFQUFFLE1BQU0sS0FBSyxFQUM4QixLQUFLLEVBQUU4MEMsR0FBRzU1QyxFQUFFNjNDLEdBQUdFLElBQUksTUFEN0IsS0FBSyxFQUFVLEdBQVJRLEdBQUd2NEMsRUFBRTlhLElBQVMsVUFBRkEsS0FBZUEsR0FBaUIsSUFBYmdnQixFQUFFdXhDLEdBQUcsSUFBSWhyQixNQUFVLENBQUMsR0FBRyxJQUFJeUIsR0FBR2x0QixFQUFFLEdBQUcsTUFBeUIsS0FBbkJwcUIsRUFBRW9xQixFQUFFb3RCLGdCQUFxQmxvQyxLQUFLQSxFQUFFLENBQUN3aUQsS0FBSTFuQyxFQUFFcXRCLGFBQWFydEIsRUFBRW90QixlQUFleDNDLEVBQUUsS0FBSyxDQUFDb3FCLEVBQUU2NUMsY0FBYy9aLEdBQUc4WixHQUFHN3BDLEtBQUssS0FBSy9QLEVBQUU2M0MsR0FBR0UsSUFBSTd5QyxHQUFHLEtBQUssQ0FBQzAwQyxHQUFHNTVDLEVBQUU2M0MsR0FBR0UsSUFBSSxNQUFNLEtBQUssRUFBVSxHQUFSUSxHQUFHdjRDLEVBQUU5YSxJQUFTLFFBQUZBLEtBQzllQSxFQUFFLE1BQXFCLElBQWZnZ0IsRUFBRWxGLEVBQUU2dEIsV0FBZWo0QyxHQUFHLEVBQUUsRUFBRXNQLEdBQUcsQ0FBQyxJQUFJdzVCLEVBQUUsR0FBRytOLEdBQUd2bkMsR0FBRythLEVBQUUsR0FBR3llLEdBQUVBLEVBQUV4WixFQUFFd1osSUFBSzlvQyxJQUFJQSxFQUFFOG9DLEdBQUd4NUIsSUFBSSthLENBQUMsQ0FBcUcsR0FBcEcvYSxFQUFFdFAsRUFBcUcsSUFBM0ZzUCxHQUFHLEtBQVhBLEVBQUV1bUMsS0FBSXZtQyxHQUFXLElBQUksSUFBSUEsRUFBRSxJQUFJLEtBQUtBLEVBQUUsS0FBSyxLQUFLQSxFQUFFLEtBQUssSUFBSUEsRUFBRSxJQUFJLEtBQUtBLEVBQUUsS0FBSyxLQUFLZ3lELEdBQUdoeUQsRUFBRSxPQUFPQSxHQUFVLENBQUM4YSxFQUFFNjVDLGNBQWMvWixHQUFHOFosR0FBRzdwQyxLQUFLLEtBQUsvUCxFQUFFNjNDLEdBQUdFLElBQUk3eUQsR0FBRyxLQUFLLENBQUMwMEQsR0FBRzU1QyxFQUFFNjNDLEdBQUdFLElBQUksTUFBK0IsUUFBUSxNQUFNdHFELE1BQU1xWCxFQUFFLE1BQU8sQ0FBQyxDQUFXLE9BQVYwekMsR0FBR3g0QyxFQUFFeXJCLE1BQVl6ckIsRUFBRXk0QyxlQUFlM21DLEVBQUVtbkMsR0FBR2xwQyxLQUFLLEtBQUsvUCxHQUFHLElBQUksQ0FDclgsU0FBU3c1QyxHQUFHeDVDLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFOGxDLEdBQTJHLE9BQXhHNTNDLEVBQUV0YixRQUFRK2xDLGNBQWNtRixlQUFleXBCLEdBQUdyNUMsRUFBRWtGLEdBQUdxbEIsT0FBTyxLQUFlLEtBQVZ2cUIsRUFBRW01QyxHQUFHbjVDLEVBQUVrRixNQUFXQSxFQUFFMnlDLEdBQUdBLEdBQUcvbEMsRUFBRSxPQUFPNU0sR0FBRzh1QyxHQUFHOXVDLElBQVdsRixDQUFDLENBQUMsU0FBU2cwQyxHQUFHaDBDLEdBQUcsT0FBTzYzQyxHQUFHQSxHQUFHNzNDLEVBQUU2M0MsR0FBRzVqRSxLQUFLK25CLE1BQU02N0MsR0FBRzczQyxFQUFFLENBRTVMLFNBQVN1NEMsR0FBR3Y0QyxFQUFFa0YsR0FBdUQsSUFBcERBLElBQUl5eUMsR0FBR3p5QyxJQUFJd3lDLEdBQUcxM0MsRUFBRW90QixnQkFBZ0Jsb0IsRUFBRWxGLEVBQUVxdEIsY0FBY25vQixFQUFNbEYsRUFBRUEsRUFBRTA0QyxnQkFBZ0IsRUFBRXh6QyxHQUFHLENBQUMsSUFBSTRNLEVBQUUsR0FBRzJhLEdBQUd2bkIsR0FBR2hnQixFQUFFLEdBQUc0c0IsRUFBRTlSLEVBQUU4UixJQUFJLEVBQUU1TSxJQUFJaGdCLENBQUMsQ0FBQyxDQUFDLFNBQVM2ekQsR0FBRy80QyxHQUFHLEdBQUcsSUFBTyxFQUFGNm1DLElBQUssTUFBTXA1QyxNQUFNcVgsRUFBRSxNQUFNbzBDLEtBQUssSUFBSWgwQyxFQUFFZ29CLEdBQUdsdEIsRUFBRSxHQUFHLEdBQUcsSUFBTyxFQUFGa0YsR0FBSyxPQUFPc3pDLEdBQUd4NEMsRUFBRXlyQixNQUFLLEtBQUssSUFBSTNaLEVBQUVxbkMsR0FBR241QyxFQUFFa0YsR0FBRyxHQUFHLElBQUlsRixFQUFFenNCLEtBQUssSUFBSXUrQixFQUFFLENBQUMsSUFBSTVzQixFQUFFdW9DLEdBQUd6dEIsR0FBRyxJQUFJOWEsSUFBSWdnQixFQUFFaGdCLEVBQUU0c0IsRUFBRTBuQyxHQUFHeDVDLEVBQUU5YSxHQUFHLENBQUMsR0FBRyxJQUFJNHNCLEVBQUUsTUFBTUEsRUFBRTJsQyxHQUFHNEIsR0FBR3I1QyxFQUFFLEdBQUd1NEMsR0FBR3Y0QyxFQUFFa0YsR0FBR3N6QyxHQUFHeDRDLEVBQUV5ckIsTUFBSzNaLEVBQUUsR0FBRyxJQUFJQSxFQUFFLE1BQU1ya0IsTUFBTXFYLEVBQUUsTUFBaUYsT0FBM0U5RSxFQUFFMDVDLGFBQWExNUMsRUFBRXRiLFFBQVE0bEMsVUFBVXRxQixFQUFFMjVDLGNBQWN6MEMsRUFBRTAwQyxHQUFHNTVDLEVBQUU2M0MsR0FBR0UsSUFBSVMsR0FBR3g0QyxFQUFFeXJCLE1BQVksSUFBSSxDQUN2ZCxTQUFTcXVCLEdBQUc5NUMsRUFBRWtGLEdBQUcsSUFBSTRNLEVBQUUrMEIsR0FBRUEsSUFBRyxFQUFFLElBQUksT0FBTzdtQyxFQUFFa0YsRUFBMkMsQ0FBeEMsUUFBWSxLQUFKMmhDLEdBQUUvMEIsS0FBVTBpQyxHQUFHL29CLEtBQUksSUFBSTBXLElBQUlHLEtBQUssQ0FBQyxDQUFDLFNBQVN5WCxHQUFHLzVDLEdBQUcsT0FBT2k0QyxJQUFJLElBQUlBLEdBQUcxa0UsS0FBSyxJQUFPLEVBQUZzekQsS0FBTXFTLEtBQUssSUFBSWgwQyxFQUFFMmhDLEdBQUVBLElBQUcsRUFBRSxJQUFJLzBCLEVBQUV3bEMsR0FBRzNoRCxXQUFXelEsRUFBRTZvQyxHQUFFLElBQUksR0FBR3VwQixHQUFHM2hELFdBQVcsS0FBS280QixHQUFFLEVBQUUvdEIsRUFBRSxPQUFPQSxHQUFtRCxDQUEvQyxRQUFRK3RCLEdBQUU3b0MsRUFBRW95RCxHQUFHM2hELFdBQVdtYyxFQUFNLElBQU8sR0FBWCswQixHQUFFM2hDLEtBQWFvOUIsSUFBSSxDQUFDLENBQUMsU0FBU21TLEtBQUtqRCxHQUFHRCxHQUFHN3NELFFBQVF1OEMsR0FBRXNRLEdBQUcsQ0FDaFQsU0FBUzhILEdBQUdyNUMsRUFBRWtGLEdBQUdsRixFQUFFMDVDLGFBQWEsS0FBSzE1QyxFQUFFMjVDLGNBQWMsRUFBRSxJQUFJN25DLEVBQUU5UixFQUFFNjVDLGNBQWlELElBQWxDLElBQUkvbkMsSUFBSTlSLEVBQUU2NUMsZUFBZSxFQUFFOVosR0FBR2p1QixJQUFPLE9BQU95bEMsR0FBRSxJQUFJemxDLEVBQUV5bEMsR0FBRXgvRCxPQUFPLE9BQU8rNUIsR0FBRyxDQUFDLElBQUk1c0IsRUFBRTRzQixFQUFRLE9BQU5veEIsR0FBR2grQyxHQUFVQSxFQUFFM1IsS0FBSyxLQUFLLEVBQTZCLE9BQTNCMlIsRUFBRUEsRUFBRXROLEtBQUtnbEMsb0JBQXdDK2tCLEtBQUssTUFBTSxLQUFLLEVBQUVxSSxLQUFLL0ksR0FBRUksSUFBSUosR0FBRUcsSUFBR21KLEtBQUssTUFBTSxLQUFLLEVBQUVMLEdBQUdobEQsR0FBRyxNQUFNLEtBQUssRUFBRThrRCxLQUFLLE1BQU0sS0FBSyxHQUFjLEtBQUssR0FBRy9JLEdBQUVrSixJQUFHLE1BQU0sS0FBSyxHQUFHcEYsR0FBRzcvQyxFQUFFdE4sS0FBS29zQyxVQUFVLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBR3l3QixLQUFLM2lDLEVBQUVBLEVBQUUvNUIsTUFBTSxDQUFxRSxHQUFwRWcxRCxHQUFFL3NDLEVBQUV1M0MsR0FBRXYzQyxFQUFFa3BDLEdBQUdscEMsRUFBRXRiLFFBQVEsTUFBTTh5RCxHQUFFaEcsR0FBR3RzQyxFQUFFN0ksR0FBRSxFQUFFbzdDLEdBQUcsS0FBS0UsR0FBR0QsR0FBR3pRLEdBQUcsRUFBRTRRLEdBQUdELEdBQUcsS0FBUSxPQUFPbFMsR0FBRyxDQUFDLElBQUl4Z0MsRUFDMWYsRUFBRUEsRUFBRXdnQyxHQUFHaHlELE9BQU93eEIsSUFBSSxHQUEyQixRQUFoQmhnQixHQUFSNHNCLEVBQUU0ekIsR0FBR3hnQyxJQUFPMmdDLGFBQXFCLENBQUMvekIsRUFBRSt6QixZQUFZLEtBQUssSUFBSWp3RCxFQUFFc1AsRUFBRWhOLEtBQUsrbkIsRUFBRTZSLEVBQUV3MEIsUUFBUSxHQUFHLE9BQU9ybUMsRUFBRSxDQUFDLElBQUl5ZSxFQUFFemUsRUFBRS9uQixLQUFLK25CLEVBQUUvbkIsS0FBS3RDLEVBQUVzUCxFQUFFaE4sS0FBS3dtQyxDQUFDLENBQUM1TSxFQUFFdzBCLFFBQVFwaEQsQ0FBQyxDQUFDd2dELEdBQUcsSUFBSSxDQUFDLE9BQU8xbEMsQ0FBQyxDQUMzSyxTQUFTdTVDLEdBQUd2NUMsRUFBRWtGLEdBQUcsT0FBRSxDQUFDLElBQUk0TSxFQUFFeWxDLEdBQUUsSUFBdUIsR0FBbkJ6UyxLQUFLMkYsR0FBRy9sRCxRQUFRZ25ELEdBQU1WLEdBQUcsQ0FBQyxJQUFJLElBQUk5bEQsRUFBRTJsRCxHQUFFcGdCLGNBQWMsT0FBT3ZsQyxHQUFHLENBQUMsSUFBSXRQLEVBQUVzUCxFQUFFNG1ELE1BQU0sT0FBT2wyRCxJQUFJQSxFQUFFMHdELFFBQVEsTUFBTXBoRCxFQUFFQSxFQUFFaE4sSUFBSSxDQUFDOHlELElBQUcsQ0FBRSxDQUE0QyxHQUEzQ0osR0FBRyxFQUFFRyxHQUFFRCxHQUFFRCxHQUFFLEtBQUtJLElBQUcsRUFBR0MsR0FBRyxFQUFFbU0sR0FBRzN5RCxRQUFRLEtBQVEsT0FBT290QixHQUFHLE9BQU9BLEVBQUUvNUIsT0FBTyxDQUFDc2tCLEdBQUUsRUFBRW83QyxHQUFHdnlDLEVBQUVxeUMsR0FBRSxLQUFLLEtBQUssQ0FBQ3YzQyxFQUFFLENBQUMsSUFBSUMsRUFBRUQsRUFBRTBlLEVBQUU1TSxFQUFFLzVCLE9BQU82RyxFQUFFa3pCLEVBQUU1MkIsRUFBRWdxQixFQUFxQixHQUFuQkEsRUFBRXN5QyxHQUFFNTRELEVBQUUyckMsT0FBTyxNQUFTLE9BQU9ydkMsR0FBRyxpQkFBa0JBLEdBQUcsbUJBQW9CQSxFQUFFbzJCLEtBQUssQ0FBQyxJQUFJdlIsRUFBRTdrQixFQUFFMnBCLEVBQUVqbUIsRUFBRSsvQixFQUFFOVosRUFBRXR4QixJQUFJLEdBQUcsSUFBWSxFQUFQc3hCLEVBQUVuWCxRQUFVLElBQUlpeEIsR0FBRyxLQUFLQSxHQUFHLEtBQUtBLEdBQUcsQ0FBQyxJQUFJMVosRUFBRUosRUFBRXlsQixVQUFVcmxCLEdBQUdKLEVBQUVvaEMsWUFBWWhoQyxFQUFFZ2hDLFlBQVlwaEMsRUFBRTRsQixjQUFjeGxCLEVBQUV3bEIsY0FDeGU1bEIsRUFBRXlnQyxNQUFNcmdDLEVBQUVxZ0MsUUFBUXpnQyxFQUFFb2hDLFlBQVksS0FBS3BoQyxFQUFFNGxCLGNBQWMsS0FBSyxDQUFDLElBQUlydkMsRUFBRXExRCxHQUFHL3hCLEdBQUcsR0FBRyxPQUFPdGpDLEVBQUUsQ0FBQ0EsRUFBRW12QyxRQUFRLElBQUltbUIsR0FBR3QxRCxFQUFFc2pDLEVBQUU5L0IsRUFBRXFoQixFQUFFaUYsR0FBVSxFQUFQOXBCLEVBQUVzUyxNQUFRNGlELEdBQUdyd0MsRUFBRUYsRUFBRW1GLEdBQU9ocUIsRUFBRTZrQixFQUFFLElBQUlaLEdBQVorRixFQUFFOXBCLEdBQWM2cUQsWUFBWSxHQUFHLE9BQU85bUMsRUFBRSxDQUFDLElBQUk2RixFQUFFLElBQUk4QyxJQUFJOUMsRUFBRTZiLElBQUkzbEMsR0FBR2dxQixFQUFFK2dDLFlBQVlqaEMsQ0FBQyxNQUFNN0YsRUFBRTBoQixJQUFJM2xDLEdBQUcsTUFBTThrQixDQUFDLENBQU0sR0FBRyxJQUFPLEVBQUZrRixHQUFLLENBQUNvckMsR0FBR3J3QyxFQUFFRixFQUFFbUYsR0FBRzZ0QyxLQUFLLE1BQU0veUMsQ0FBQyxDQUFDOWtCLEVBQUV1UyxNQUFNcVgsRUFBRSxLQUFNLE1BQU0sR0FBR3UrQixJQUFVLEVBQVB6a0QsRUFBRThPLEtBQU8sQ0FBQyxJQUFJNndDLEVBQUVrUyxHQUFHL3hCLEdBQUcsR0FBRyxPQUFPNmYsRUFBRSxDQUFDLElBQWEsTUFBUkEsRUFBRWhVLFNBQWVnVSxFQUFFaFUsT0FBTyxLQUFLbW1CLEdBQUduUyxFQUFFN2YsRUFBRTkvQixFQUFFcWhCLEVBQUVpRixHQUFHcS9CLEdBQUdtTCxHQUFHeDBELEVBQUUwRCxJQUFJLE1BQU1vaEIsQ0FBQyxDQUFDLENBQUNDLEVBQUUva0IsRUFBRXcwRCxHQUFHeDBELEVBQUUwRCxHQUFHLElBQUl5ZCxLQUFJQSxHQUFFLEdBQUcsT0FBT3U3QyxHQUFHQSxHQUFHLENBQUMzM0MsR0FBRzIzQyxHQUFHM2pFLEtBQUtnc0IsR0FBR0EsRUFBRXllLEVBQUUsRUFBRSxDQUFDLE9BQU96ZSxFQUFFMXNCLEtBQUssS0FBSyxFQUFFMHNCLEVBQUVzcUIsT0FBTyxNQUNwZnJsQixJQUFJQSxFQUFFakYsRUFBRXFsQyxPQUFPcGdDLEVBQWtCNmhDLEdBQUc5bUMsRUFBYjh2QyxHQUFHOXZDLEVBQUUva0IsRUFBRWdxQixJQUFXLE1BQU1sRixFQUFFLEtBQUssRUFBRXBoQixFQUFFMUQsRUFBRSxJQUFJZ2hCLEVBQUUrRCxFQUFFcm9CLEtBQUtnbkMsRUFBRTNlLEVBQUVpcEIsVUFBVSxHQUFHLElBQWEsSUFBUmpwQixFQUFFc3FCLFNBQWEsbUJBQW9CcnVCLEVBQUU4Z0IsMEJBQTBCLE9BQU80QixHQUFHLG1CQUFvQkEsRUFBRXV4QixvQkFBb0IsT0FBT0MsS0FBS0EsR0FBRzlxRCxJQUFJczVCLEtBQUssQ0FBQzNlLEVBQUVzcUIsT0FBTyxNQUFNcmxCLElBQUlBLEVBQUVqRixFQUFFcWxDLE9BQU9wZ0MsRUFBa0I2aEMsR0FBRzltQyxFQUFiaXdDLEdBQUdqd0MsRUFBRXJoQixFQUFFc21CLElBQVcsTUFBTWxGLENBQUMsRUFBRUMsRUFBRUEsRUFBRWxvQixNQUFNLE9BQU8sT0FBT2tvQixFQUFFLENBQUMrNUMsR0FBR2xvQyxFQUEwRCxDQUF2RCxNQUFNZ3RCLEdBQUk1NUIsRUFBRTQ1QixFQUFHeVksS0FBSXpsQyxHQUFHLE9BQU9BLElBQUl5bEMsR0FBRXpsQyxFQUFFQSxFQUFFLzVCLFFBQVEsUUFBUSxDQUFDLEtBQUssQ0FBUyxDQUFDLFNBQVNxaEUsS0FBSyxJQUFJcDVDLEVBQUVvM0MsR0FBRzF5RCxRQUFzQixPQUFkMHlELEdBQUcxeUQsUUFBUWduRCxHQUFVLE9BQU8xckMsRUFBRTByQyxHQUFHMXJDLENBQUMsQ0FDcmQsU0FBUyt5QyxLQUFRLElBQUkxMkMsSUFBRyxJQUFJQSxJQUFHLElBQUlBLEtBQUVBLEdBQUUsR0FBRSxPQUFPMHdDLElBQUcsSUFBUSxVQUFIOUYsS0FBZSxJQUFRLFVBQUh5USxLQUFlYSxHQUFHeEwsR0FBRXlLLEdBQUUsQ0FBQyxTQUFTMkIsR0FBR241QyxFQUFFa0YsR0FBRyxJQUFJNE0sRUFBRSswQixHQUFFQSxJQUFHLEVBQUUsSUFBSTNoRCxFQUFFazBELEtBQXFDLElBQTdCck0sS0FBSS9zQyxHQUFHdzNDLEtBQUl0eUMsSUFBRTZ5QyxHQUFHLEtBQUtzQixHQUFHcjVDLEVBQUVrRixVQUFVKzBDLEtBQUssTUFBTSxNQUFNcmtFLEdBQUcyakUsR0FBR3Y1QyxFQUFFcHFCLEVBQUUsQ0FBZ0MsR0FBdEJrdkQsS0FBSytCLEdBQUUvMEIsRUFBRXNsQyxHQUFHMXlELFFBQVFRLEVBQUssT0FBT3F5RCxHQUFFLE1BQU05cEQsTUFBTXFYLEVBQUUsTUFBaUIsT0FBWGlvQyxHQUFFLEtBQUt5SyxHQUFFLEVBQVNuN0MsRUFBQyxDQUFDLFNBQVM0OUMsS0FBSyxLQUFLLE9BQU8xQyxJQUFHMkMsR0FBRzNDLEdBQUUsQ0FBQyxTQUFTK0IsS0FBSyxLQUFLLE9BQU8vQixLQUFJbHNCLE1BQU02dUIsR0FBRzNDLEdBQUUsQ0FBQyxTQUFTMkMsR0FBR2w2QyxHQUFHLElBQUlrRixFQUFFK3hDLEdBQUdqM0MsRUFBRXNxQixVQUFVdHFCLEVBQUV3eEMsSUFBSXh4QyxFQUFFb2tDLGNBQWNwa0MsRUFBRTRqQyxhQUFhLE9BQU8xK0IsRUFBRTgwQyxHQUFHaDZDLEdBQUd1M0MsR0FBRXJ5QyxFQUFFbXlDLEdBQUczeUQsUUFBUSxJQUFJLENBQzFkLFNBQVNzMUQsR0FBR2g2QyxHQUFHLElBQUlrRixFQUFFbEYsRUFBRSxFQUFFLENBQUMsSUFBSThSLEVBQUU1TSxFQUFFb2xCLFVBQXFCLEdBQVh0cUIsRUFBRWtGLEVBQUVudEIsT0FBVSxJQUFhLE1BQVJtdEIsRUFBRXFsQixRQUFjLEdBQWdCLFFBQWJ6WSxFQUFFaWlDLEdBQUdqaUMsRUFBRTVNLEVBQUVzc0MsS0FBa0IsWUFBSitGLEdBQUV6bEMsT0FBYyxDQUFXLEdBQUcsUUFBYkEsRUFBRTRpQyxHQUFHNWlDLEVBQUU1TSxJQUFtQyxPQUFuQjRNLEVBQUV5WSxPQUFPLFdBQU1ndEIsR0FBRXpsQyxHQUFTLEdBQUcsT0FBTzlSLEVBQW1FLE9BQVgzRCxHQUFFLE9BQUVrN0MsR0FBRSxNQUE1RHYzQyxFQUFFdXFCLE9BQU8sTUFBTXZxQixFQUFFbXpDLGFBQWEsRUFBRW56QyxFQUFFMGpDLFVBQVUsSUFBNEIsQ0FBYSxHQUFHLFFBQWZ4K0IsRUFBRUEsRUFBRTRsQixTQUF5QixZQUFKeXNCLEdBQUVyeUMsR0FBU3F5QyxHQUFFcnlDLEVBQUVsRixDQUFDLE9BQU8sT0FBT2tGLEdBQUcsSUFBSTdJLEtBQUlBLEdBQUUsRUFBRSxDQUFDLFNBQVN1OUMsR0FBRzU1QyxFQUFFa0YsRUFBRTRNLEdBQUcsSUFBSTVzQixFQUFFNm9DLEdBQUVuNEMsRUFBRTBoRSxHQUFHM2hELFdBQVcsSUFBSTJoRCxHQUFHM2hELFdBQVcsS0FBS280QixHQUFFLEVBQzNZLFNBQVkvdEIsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUcsR0FBR2cwRCxXQUFXLE9BQU9qQixJQUFJLEdBQUcsSUFBTyxFQUFGcFIsSUFBSyxNQUFNcDVDLE1BQU1xWCxFQUFFLE1BQU1nTixFQUFFOVIsRUFBRTA1QyxhQUFhLElBQUk5akUsRUFBRW9xQixFQUFFMjVDLGNBQWMsR0FBRyxPQUFPN25DLEVBQUUsT0FBTyxLQUEyQyxHQUF0QzlSLEVBQUUwNUMsYUFBYSxLQUFLMTVDLEVBQUUyNUMsY0FBYyxFQUFLN25DLElBQUk5UixFQUFFdGIsUUFBUSxNQUFNK0ksTUFBTXFYLEVBQUUsTUFBTTlFLEVBQUV5NEMsYUFBYSxLQUFLejRDLEVBQUU2NEMsaUJBQWlCLEVBQUUsSUFBSTU0QyxFQUFFNlIsRUFBRXd6QixNQUFNeHpCLEVBQUVvekIsV0FBOEosR0ExTnRULFNBQVlsbEMsRUFBRWtGLEdBQUcsSUFBSTRNLEVBQUU5UixFQUFFbXRCLGNBQWNqb0IsRUFBRWxGLEVBQUVtdEIsYUFBYWpvQixFQUFFbEYsRUFBRW90QixlQUFlLEVBQUVwdEIsRUFBRXF0QixZQUFZLEVBQUVydEIsRUFBRTI0QyxjQUFjenpDLEVBQUVsRixFQUFFbTZDLGtCQUFrQmoxQyxFQUFFbEYsRUFBRXN0QixnQkFBZ0Jwb0IsRUFBRUEsRUFBRWxGLEVBQUV1dEIsY0FBYyxJQUFJcm9DLEVBQUU4YSxFQUFFNnRCLFdBQVcsSUFBSTd0QixFQUFFQSxFQUFFMDRDLGdCQUFnQixFQUFFNW1DLEdBQUcsQ0FBQyxJQUFJbDhCLEVBQUUsR0FBRzYyQyxHQUFHM2EsR0FBRzdSLEVBQUUsR0FBR3JxQixFQUFFc3ZCLEVBQUV0dkIsR0FBRyxFQUFFc1AsRUFBRXRQLElBQUksRUFBRW9xQixFQUFFcHFCLElBQUksRUFBRWs4QixJQUFJN1IsQ0FBQyxDQUFDLENBME41R202QyxDQUFHcDZDLEVBQUVDLEdBQUdELElBQUkrc0MsS0FBSXdLLEdBQUV4SyxHQUFFLEtBQUt5SyxHQUFFLEdBQUcsSUFBb0IsS0FBZjFsQyxFQUFFcWhDLGVBQW9CLElBQWEsS0FBUnJoQyxFQUFFeVksUUFBYXl0QixLQUFLQSxJQUFHLEVBQUdnQixHQUFHL3NCLElBQUcsV0FBZ0IsT0FBTGl0QixLQUFZLElBQUksS0FBSWo1QyxFQUFFLElBQWEsTUFBUjZSLEVBQUV5WSxPQUFnQixJQUFvQixNQUFmelksRUFBRXFoQyxlQUFxQmx6QyxFQUFFLENBQUNBLEVBQUVxM0MsR0FBRzNoRCxXQUFXMmhELEdBQUczaEQsV0FBVyxLQUNoZixJQUFJK29CLEVBQUVxUCxHQUFFQSxHQUFFLEVBQUUsSUFBSW52QyxFQUFFaW9ELEdBQUVBLElBQUcsRUFBRXdRLEdBQUczeUQsUUFBUSxLQTFDcEMsU0FBWXNiLEVBQUVrRixHQUFnQixHQUFidzZCLEdBQUduUCxHQUFhbUssR0FBVjE2QixFQUFFdTZCLE1BQWMsQ0FBQyxHQUFHLG1CQUFtQnY2QixFQUFFLElBQUk4UixFQUFFLENBQUNsUSxNQUFNNUIsRUFBRWc3QixlQUFlL2pELElBQUkrb0IsRUFBRWk3QixtQkFBbUJqN0IsRUFBRSxDQUE4QyxJQUFJOWEsR0FBakQ0c0IsR0FBR0EsRUFBRTlSLEVBQUVoRyxnQkFBZ0I4WCxFQUFFN0gsYUFBYXJQLFFBQWVzZ0MsY0FBY3BwQixFQUFFb3BCLGVBQWUsR0FBR2gyQyxHQUFHLElBQUlBLEVBQUVpMkMsV0FBVyxDQUFDcnBCLEVBQUU1c0IsRUFBRWsyQyxXQUFXLElBQUl4bEQsRUFBRXNQLEVBQUVtMkMsYUFBYXA3QixFQUFFL2EsRUFBRW8yQyxVQUFVcDJDLEVBQUVBLEVBQUVxMkMsWUFBWSxJQUFJenBCLEVBQUVnVixTQUFTN21CLEVBQUU2bUIsUUFBZ0MsQ0FBdkIsTUFBTTBYLEdBQUcxc0IsRUFBRSxLQUFLLE1BQU05UixDQUFDLENBQUMsSUFBSTBlLEVBQUUsRUFBRTkvQixHQUFHLEVBQUUxRCxHQUFHLEVBQUU2a0IsRUFBRSxFQUFFOEUsRUFBRSxFQUFFOFosRUFBRTNlLEVBQUVpRixFQUFFLEtBQUtDLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSTlwQixFQUFLdWpDLElBQUk3TSxHQUFHLElBQUlsOEIsR0FBRyxJQUFJK29DLEVBQUVtSSxXQUFXbG9DLEVBQUU4L0IsRUFBRTlvQyxHQUFHK29DLElBQUkxZSxHQUFHLElBQUkvYSxHQUFHLElBQUl5NUIsRUFBRW1JLFdBQVc1ckMsRUFBRXdqQyxFQUFFeDVCLEdBQUcsSUFBSXk1QixFQUFFbUksV0FBV3BJLEdBQ25mQyxFQUFFb0ksVUFBVXJ6QyxRQUFXLFFBQVEwSCxFQUFFdWpDLEVBQUU1cUMsYUFBa0JreEIsRUFBRTBaLEVBQUVBLEVBQUV2akMsRUFBRSxPQUFPLENBQUMsR0FBR3VqQyxJQUFJM2UsRUFBRSxNQUFNa0YsRUFBOEMsR0FBNUNELElBQUk2TSxLQUFLL1IsSUFBSW5xQixJQUFJZ0osRUFBRTgvQixHQUFHelosSUFBSWhGLEtBQUs0RSxJQUFJM2YsSUFBSWhLLEVBQUV3akMsR0FBTSxRQUFRdGpDLEVBQUV1akMsRUFBRS9xQyxhQUFhLE1BQVVxeEIsR0FBSjBaLEVBQUUxWixHQUFNbnZCLFVBQVUsQ0FBQzZvQyxFQUFFdmpDLENBQUMsQ0FBQzAyQixHQUFHLElBQUlsekIsSUFBSSxJQUFJMUQsRUFBRSxLQUFLLENBQUMwbUIsTUFBTWhqQixFQUFFM0gsSUFBSWlFLEVBQUUsTUFBTTQyQixFQUFFLElBQUksQ0FBQ0EsRUFBRUEsR0FBRyxDQUFDbFEsTUFBTSxFQUFFM3FCLElBQUksRUFBRSxNQUFNNjZCLEVBQUUsS0FBK0MsSUFBMUM2dEIsR0FBRyxDQUFDOUUsWUFBWTc2QixFQUFFODZCLGVBQWVocEIsR0FBR3llLElBQUcsRUFBT3drQixHQUFFN3ZDLEVBQUUsT0FBTzZ2QyxJQUFHLEdBQU8vMEMsR0FBSmtGLEVBQUU2dkMsSUFBTWxxQixNQUFNLElBQW9CLEtBQWYzbEIsRUFBRWl1QyxlQUFvQixPQUFPbnpDLEVBQUVBLEVBQUVqb0IsT0FBT210QixFQUFFNnZDLEdBQUUvMEMsT0FBTyxLQUFLLE9BQU8rMEMsSUFBRyxDQUFDN3ZDLEVBQUU2dkMsR0FBRSxJQUFJLElBQUk1MUMsRUFBRStGLEVBQUVvbEIsVUFBVSxHQUFHLElBQWEsS0FBUnBsQixFQUFFcWxCLE9BQVksT0FBT3JsQixFQUFFM3hCLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxLQUFLLEdBQ3ZLLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxNQUEzVyxLQUFLLEVBQUUsR0FBRyxPQUFPNHJCLEVBQUUsQ0FBQyxJQUFJNkYsRUFBRTdGLEVBQUVpbEMsY0FBYzdGLEVBQUVwL0IsRUFBRXNyQixjQUFjdHZDLEVBQUUrcEIsRUFBRWdrQixVQUFVaHRCLEVBQUUvZ0IsRUFBRXF0RCx3QkFBd0J0akMsRUFBRXUrQixjQUFjditCLEVBQUV0dEIsS0FBS290QixFQUFFeS9CLEdBQUd2L0IsRUFBRXR0QixLQUFLb3RCLEdBQUd1NUIsR0FBR3BqRCxFQUFFNDdELG9DQUFvQzc2QyxDQUFDLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSTBpQixFQUFFMVosRUFBRWdrQixVQUFVMkcsY0FBYyxJQUFJalIsRUFBRWtJLFNBQVNsSSxFQUFFc0gsWUFBWSxHQUFHLElBQUl0SCxFQUFFa0ksVUFBVWxJLEVBQUVtYyxpQkFBaUJuYyxFQUFFN29DLFlBQVk2b0MsRUFBRW1jLGlCQUFpQixNQUF5QyxRQUFRLE1BQU10dEMsTUFBTXFYLEVBQUUsTUFBZ0MsQ0FBeEIsTUFBTTA1QixHQUFHeVcsR0FBRS92QyxFQUFFQSxFQUFFbnRCLE9BQU95bUQsRUFBRSxDQUFhLEdBQUcsUUFBZngrQixFQUFFa0YsRUFBRTRsQixTQUFvQixDQUFDOXFCLEVBQUVqb0IsT0FBT210QixFQUFFbnRCLE9BQU9nOUQsR0FBRS8wQyxFQUFFLEtBQUssQ0FBQyswQyxHQUFFN3ZDLEVBQUVudEIsTUFBTSxDQUFDb25CLEVBQUVnMkMsR0FBR0EsSUFBRyxDQUFXLENBd0NsZGtGLENBQUdyNkMsRUFBRThSLEdBQUd3a0MsR0FBR3hrQyxFQUFFOVIsR0FBRzQ2QixHQUFHK0UsSUFBSXBQLEtBQUttUCxHQUFHQyxHQUFHRCxHQUFHLEtBQUsxL0IsRUFBRXRiLFFBQVFvdEIsRUFBRTZrQyxHQUFHN2tDLEVBQUU5UixFQUFFcHFCLEdBQUcyMUMsS0FBS3NiLEdBQUVqb0QsRUFBRW12QyxHQUFFclAsRUFBRTQ0QixHQUFHM2hELFdBQVdzSyxDQUFDLE1BQU1ELEVBQUV0YixRQUFRb3RCLEVBQXNGLEdBQXBGa21DLEtBQUtBLElBQUcsRUFBR0MsR0FBR2o0QyxFQUFFazRDLEdBQUd0aUUsR0FBb0IsS0FBakJxcUIsRUFBRUQsRUFBRW10QixnQkFBcUJpakIsR0FBRyxNQWpPbUosU0FBWXB3QyxHQUFHLEdBQUd3c0IsSUFBSSxtQkFBb0JBLEdBQUc4dEIsa0JBQWtCLElBQUk5dEIsR0FBRzh0QixrQkFBa0IvdEIsR0FBR3ZzQixPQUFFLEVBQU8sTUFBdUIsSUFBaEJBLEVBQUV0YixRQUFRNmxDLE9BQXFCLENBQVQsTUFBTXJsQixHQUFHLENBQUMsQ0FpT3hScTFDLENBQUd6b0MsRUFBRW9YLFdBQWFzdkIsR0FBR3g0QyxFQUFFeXJCLE1BQVEsT0FBT3ZtQixFQUFFLElBQUloZ0IsRUFBRThhLEVBQUV3NkMsbUJBQW1CMW9DLEVBQUUsRUFBRUEsRUFBRTVNLEVBQUV4eEIsT0FBT28rQixJQUFXNXNCLEdBQVB0UCxFQUFFc3ZCLEVBQUU0TSxJQUFPdjdCLE1BQU0sQ0FBQzg1RCxlQUFlejZELEVBQUVxK0IsTUFBTTA3QixPQUFPLzVELEVBQUUrNUQsU0FBUyxHQUFHSyxHQUFHLE1BQU1BLElBQUcsRUFBR2h3QyxFQUFFaXdDLEdBQUdBLEdBQUcsS0FBS2p3QyxFQUFFLElBQVEsRUFBSGs0QyxLQUFPLElBQUlsNEMsRUFBRXpzQixLQUFLMmxFLEtBQXNCLElBQU8sR0FBeEJqNUMsRUFBRUQsRUFBRW10QixlQUF1Qm50QixJQUFJbzRDLEdBQUdELE1BQU1BLEdBQUcsRUFBRUMsR0FBR3A0QyxHQUFHbTRDLEdBQUcsRUFBRTdWLElBQWdCLENBRnhGbVksQ0FBR3o2QyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBOEIsQ0FBM0IsUUFBUW95RCxHQUFHM2hELFdBQVcvZixFQUFFbTRDLEdBQUU3b0MsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUdoYyxTQUFTZzBELEtBQUssR0FBRyxPQUFPakIsR0FBRyxDQUFDLElBQUlqNEMsRUFBRWd1QixHQUFHa3FCLElBQUloekMsRUFBRW95QyxHQUFHM2hELFdBQVdtYyxFQUFFaWMsR0FBRSxJQUFtQyxHQUEvQnVwQixHQUFHM2hELFdBQVcsS0FBS280QixHQUFFLEdBQUcvdEIsRUFBRSxHQUFHQSxFQUFLLE9BQU9pNEMsR0FBRyxJQUFJL3lELEdBQUUsTUFBTyxDQUFtQixHQUFsQjhhLEVBQUVpNEMsR0FBR0EsR0FBRyxLQUFLQyxHQUFHLEVBQUssSUFBTyxFQUFGclIsSUFBSyxNQUFNcDVDLE1BQU1xWCxFQUFFLE1BQU0sSUFBSWx2QixFQUFFaXhELEdBQU8sSUFBTEEsSUFBRyxFQUFNa08sR0FBRS8wQyxFQUFFdGIsUUFBUSxPQUFPcXdELElBQUcsQ0FBQyxJQUFJOTBDLEVBQUU4MEMsR0FBRXIyQixFQUFFemUsRUFBRTRxQixNQUFNLEdBQUcsSUFBYSxHQUFSa3FCLEdBQUV4cUIsT0FBVSxDQUFDLElBQUkzckMsRUFBRXFoQixFQUFFeWpDLFVBQVUsR0FBRyxPQUFPOWtELEVBQUUsQ0FBQyxJQUFJLElBQUkxRCxFQUFFLEVBQUVBLEVBQUUwRCxFQUFFbEwsT0FBT3dILElBQUksQ0FBQyxJQUFJNmtCLEVBQUVuaEIsRUFBRTFELEdBQUcsSUFBSTY1RCxHQUFFaDFDLEVBQUUsT0FBT2cxQyxJQUFHLENBQUMsSUFBSWx3QyxFQUFFa3dDLEdBQUUsT0FBT2x3QyxFQUFFdHhCLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxLQUFLLEdBQUc2aEUsR0FBRyxFQUFFdndDLEVBQUU1RSxHQUFHLElBQUkwZSxFQUFFOVosRUFBRWdtQixNQUFNLEdBQUcsT0FBT2xNLEVBQUVBLEVBQUU1bUMsT0FBTzhzQixFQUFFa3dDLEdBQUVwMkIsT0FBTyxLQUFLLE9BQU9vMkIsSUFBRyxDQUFLLElBQUk5dkMsR0FBUkosRUFBRWt3QyxJQUFVanFCLFFBQVExdkMsRUFBRXlwQixFQUFFOXNCLE9BQWEsR0FBTnc5RCxHQUFHMXdDLEdBQU1BLElBQ25mOUUsRUFBRSxDQUFDZzFDLEdBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxPQUFPOXZDLEVBQUUsQ0FBQ0EsRUFBRWx0QixPQUFPcUQsRUFBRTI1RCxHQUFFOXZDLEVBQUUsS0FBSyxDQUFDOHZDLEdBQUUzNUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJK2pCLEVBQUVjLEVBQUVxcUIsVUFBVSxHQUFHLE9BQU9uckIsRUFBRSxDQUFDLElBQUk2RixFQUFFN0YsRUFBRTByQixNQUFNLEdBQUcsT0FBTzdsQixFQUFFLENBQUM3RixFQUFFMHJCLE1BQU0sS0FBSyxFQUFFLENBQUMsSUFBSTBULEVBQUV2NUIsRUFBRThsQixRQUFROWxCLEVBQUU4bEIsUUFBUSxLQUFLOWxCLEVBQUV1NUIsQ0FBQyxPQUFPLE9BQU92NUIsRUFBRSxDQUFDLENBQUMrdkMsR0FBRTkwQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQW9CLEtBQWZBLEVBQUVrekMsZUFBb0IsT0FBT3owQixFQUFFQSxFQUFFM21DLE9BQU9rb0IsRUFBRTgwQyxHQUFFcjJCLE9BQU94WixFQUFFLEtBQUssT0FBTzZ2QyxJQUFHLENBQUssR0FBRyxJQUFhLE1BQXBCOTBDLEVBQUU4MEMsSUFBWXhxQixPQUFZLE9BQU90cUIsRUFBRTFzQixLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHNmhFLEdBQUcsRUFBRW4xQyxFQUFFQSxFQUFFbG9CLFFBQVEsSUFBSW9ELEVBQUU4a0IsRUFBRTZxQixRQUFRLEdBQUcsT0FBTzN2QyxFQUFFLENBQUNBLEVBQUVwRCxPQUFPa29CLEVBQUVsb0IsT0FBT2c5RCxHQUFFNTVELEVBQUUsTUFBTStwQixDQUFDLENBQUM2dkMsR0FBRTkwQyxFQUFFbG9CLE1BQU0sQ0FBQyxDQUFDLElBQUlta0IsRUFBRThELEVBQUV0YixRQUFRLElBQUlxd0QsR0FBRTc0QyxFQUFFLE9BQU82NEMsSUFBRyxDQUFLLElBQUluMkIsR0FBUkYsRUFBRXEyQixJQUFVbHFCLE1BQU0sR0FBRyxJQUFvQixLQUFmbk0sRUFBRXkwQixlQUFvQixPQUNsZnYwQixFQUFFQSxFQUFFN21DLE9BQU8ybUMsRUFBRXEyQixHQUFFbjJCLE9BQU8xWixFQUFFLElBQUl3WixFQUFFeGlCLEVBQUUsT0FBTzY0QyxJQUFHLENBQUssR0FBRyxJQUFhLE1BQXBCbjJELEVBQUVtMkQsSUFBWXhxQixPQUFZLElBQUksT0FBTzNyQyxFQUFFckwsS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRzhoRSxHQUFHLEVBQUV6MkQsR0FBOEIsQ0FBMUIsTUFBTWtnRCxHQUFJbVcsR0FBRXIyRCxFQUFFQSxFQUFFN0csT0FBTyttRCxFQUFHLENBQUMsR0FBR2xnRCxJQUFJOC9CLEVBQUUsQ0FBQ3EyQixHQUFFLEtBQUssTUFBTTd2QyxDQUFDLENBQUMsSUFBSXM1QixFQUFFNS9DLEVBQUVrc0MsUUFBUSxHQUFHLE9BQU8wVCxFQUFFLENBQUNBLEVBQUV6bUQsT0FBTzZHLEVBQUU3RyxPQUFPZzlELEdBQUV2VyxFQUFFLE1BQU10NUIsQ0FBQyxDQUFDNnZDLEdBQUVuMkQsRUFBRTdHLE1BQU0sQ0FBQyxDQUFVLEdBQVQ4dUQsR0FBRWp4RCxFQUFFMHNELEtBQVE5VixJQUFJLG1CQUFvQkEsR0FBR2t1QixzQkFBc0IsSUFBSWx1QixHQUFHa3VCLHNCQUFzQm51QixHQUFHdnNCLEVBQWEsQ0FBVixNQUFNOCtCLEdBQUksQ0FBQzU1QyxHQUFFLENBQUUsQ0FBQyxPQUFPQSxDQUE2QixDQUEzQixRQUFRNm9DLEdBQUVqYyxFQUFFd2xDLEdBQUczaEQsV0FBV3VQLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBRSxDQUFDLFNBQVN5MUMsR0FBRzM2QyxFQUFFa0YsRUFBRTRNLEdBQXlCOVIsRUFBRTRtQyxHQUFHNW1DLEVBQWpCa0YsRUFBRTZxQyxHQUFHL3ZDLEVBQWZrRixFQUFFd3FDLEdBQUc1OUIsRUFBRTVNLEdBQVksR0FBWSxHQUFHQSxFQUFFd2lDLEtBQUksT0FBTzFuQyxJQUFJNHRCLEdBQUc1dEIsRUFBRSxFQUFFa0YsR0FBR3N6QyxHQUFHeDRDLEVBQUVrRixHQUFHLENBQ3plLFNBQVMrdkMsR0FBRWoxQyxFQUFFa0YsRUFBRTRNLEdBQUcsR0FBRyxJQUFJOVIsRUFBRXpzQixJQUFJb25FLEdBQUczNkMsRUFBRUEsRUFBRThSLFFBQVEsS0FBSyxPQUFPNU0sR0FBRyxDQUFDLEdBQUcsSUFBSUEsRUFBRTN4QixJQUFJLENBQUNvbkUsR0FBR3oxQyxFQUFFbEYsRUFBRThSLEdBQUcsS0FBSyxDQUFNLEdBQUcsSUFBSTVNLEVBQUUzeEIsSUFBSSxDQUFDLElBQUkyUixFQUFFZ2dCLEVBQUVna0IsVUFBVSxHQUFHLG1CQUFvQmhrQixFQUFFdHRCLEtBQUtvbEMsMEJBQTBCLG1CQUFvQjkzQixFQUFFaXJELG9CQUFvQixPQUFPQyxLQUFLQSxHQUFHOXFELElBQUlKLElBQUksQ0FBdUJnZ0IsRUFBRTBoQyxHQUFHMWhDLEVBQWpCbEYsRUFBRWt3QyxHQUFHaHJDLEVBQWZsRixFQUFFMHZDLEdBQUc1OUIsRUFBRTlSLEdBQVksR0FBWSxHQUFHQSxFQUFFMG5DLEtBQUksT0FBT3hpQyxJQUFJMG9CLEdBQUcxb0IsRUFBRSxFQUFFbEYsR0FBR3c0QyxHQUFHdHpDLEVBQUVsRixJQUFJLEtBQUssQ0FBQyxDQUFDa0YsRUFBRUEsRUFBRW50QixNQUFNLENBQUMsQ0FDblYsU0FBU3k0RCxHQUFHeHdDLEVBQUVrRixFQUFFNE0sR0FBRyxJQUFJNXNCLEVBQUU4YSxFQUFFdXdDLFVBQVUsT0FBT3JyRCxHQUFHQSxFQUFFK3BDLE9BQU8vcEIsR0FBR0EsRUFBRXdpQyxLQUFJMW5DLEVBQUVxdEIsYUFBYXJ0QixFQUFFb3RCLGVBQWV0YixFQUFFaTdCLEtBQUkvc0MsSUFBSXczQyxHQUFFMWxDLEtBQUtBLElBQUksSUFBSXpWLElBQUcsSUFBSUEsS0FBTSxVQUFGbTdDLE1BQWVBLElBQUcsSUFBSS9yQixLQUFJZ3JCLEdBQUc0QyxHQUFHcjVDLEVBQUUsR0FBRzIzQyxJQUFJN2xDLEdBQUcwbUMsR0FBR3g0QyxFQUFFa0YsRUFBRSxDQUFDLFNBQVMwMUMsR0FBRzU2QyxFQUFFa0YsR0FBRyxJQUFJQSxJQUFJLElBQVksRUFBUGxGLEVBQUV0UyxNQUFRd1gsRUFBRSxHQUFHQSxFQUFFOG5CLEdBQVUsSUFBUSxXQUFmQSxLQUFLLE1BQXVCQSxHQUFHLFdBQVcsSUFBSWxiLEVBQUU0MUIsS0FBYyxRQUFWMW5DLEVBQUU4bEMsR0FBRzlsQyxFQUFFa0YsTUFBYzBvQixHQUFHNXRCLEVBQUVrRixFQUFFNE0sR0FBRzBtQyxHQUFHeDRDLEVBQUU4UixHQUFHLENBQUMsU0FBU2toQyxHQUFHaHpDLEdBQUcsSUFBSWtGLEVBQUVsRixFQUFFeXFCLGNBQWMzWSxFQUFFLEVBQUUsT0FBTzVNLElBQUk0TSxFQUFFNU0sRUFBRTYrQixXQUFXNlcsR0FBRzU2QyxFQUFFOFIsRUFBRSxDQUNqWixTQUFTc2tDLEdBQUdwMkMsRUFBRWtGLEdBQUcsSUFBSTRNLEVBQUUsRUFBRSxPQUFPOVIsRUFBRXpzQixLQUFLLEtBQUssR0FBRyxJQUFJMlIsRUFBRThhLEVBQUVrcEIsVUFBY3R6QyxFQUFFb3FCLEVBQUV5cUIsY0FBYyxPQUFPNzBDLElBQUlrOEIsRUFBRWw4QixFQUFFbXVELFdBQVcsTUFBTSxLQUFLLEdBQUc3K0MsRUFBRThhLEVBQUVrcEIsVUFBVSxNQUFNLFFBQVEsTUFBTXo3QixNQUFNcVgsRUFBRSxNQUFPLE9BQU81ZixHQUFHQSxFQUFFK3BDLE9BQU8vcEIsR0FBRzAxQyxHQUFHNTZDLEVBQUU4UixFQUFFLENBUXFLLFNBQVNrbkMsR0FBR2g1QyxFQUFFa0YsR0FBRyxPQUFPK2xCLEdBQUdqckIsRUFBRWtGLEVBQUUsQ0FDalosU0FBUzIxQyxHQUFHNzZDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixHQUFHN1IsS0FBS0UsSUFBSXlzQixFQUFFM3NCLEtBQUtrQixJQUFJdTlCLEVBQUV6K0IsS0FBS3kzQyxRQUFRejNDLEtBQUt3M0MsTUFBTXgzQyxLQUFLMEUsT0FBTzFFLEtBQUs2MUMsVUFBVTcxQyxLQUFLdUUsS0FBS3ZFLEtBQUtvd0QsWUFBWSxLQUFLcHdELEtBQUt5RCxNQUFNLEVBQUV6RCxLQUFLbUwsSUFBSSxLQUFLbkwsS0FBS3V3RCxhQUFhMStCLEVBQUU3eEIsS0FBSyt4RCxhQUFhL3hELEtBQUtvM0MsY0FBY3AzQyxLQUFLNHlELFlBQVk1eUQsS0FBSyt3RCxjQUFjLEtBQUsvd0QsS0FBS3FhLEtBQUt4SSxFQUFFN1IsS0FBSzgvRCxhQUFhOS9ELEtBQUtrM0MsTUFBTSxFQUFFbDNDLEtBQUtxd0QsVUFBVSxLQUFLcndELEtBQUs2eEQsV0FBVzd4RCxLQUFLaXlELE1BQU0sRUFBRWp5RCxLQUFLaTNDLFVBQVUsSUFBSSxDQUFDLFNBQVNrWixHQUFHeGpDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixHQUFHLE9BQU8sSUFBSTIxRCxHQUFHNzZDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixFQUFFLENBQUMsU0FBUytyRCxHQUFHanhDLEdBQWlCLFVBQWRBLEVBQUVBLEVBQUV2ckIsYUFBdUJ1ckIsRUFBRTg2QyxpQkFBaUIsQ0FFcGQsU0FBUzVSLEdBQUdscEMsRUFBRWtGLEdBQUcsSUFBSTRNLEVBQUU5UixFQUFFc3FCLFVBQ3VCLE9BRGIsT0FBT3hZLElBQUdBLEVBQUUweEIsR0FBR3hqQyxFQUFFenNCLElBQUkyeEIsRUFBRWxGLEVBQUV6ckIsSUFBSXlyQixFQUFFdFMsT0FBUSsxQyxZQUFZempDLEVBQUV5akMsWUFBWTN4QixFQUFFbDZCLEtBQUtvb0IsRUFBRXBvQixLQUFLazZCLEVBQUVvWCxVQUFVbHBCLEVBQUVrcEIsVUFBVXBYLEVBQUV3WSxVQUFVdHFCLEVBQUVBLEVBQUVzcUIsVUFBVXhZLElBQUlBLEVBQUU4eEIsYUFBYTErQixFQUFFNE0sRUFBRWw2QixLQUFLb29CLEVBQUVwb0IsS0FBS2s2QixFQUFFeVksTUFBTSxFQUFFelksRUFBRXFoQyxhQUFhLEVBQUVyaEMsRUFBRTR4QixVQUFVLE1BQU01eEIsRUFBRXlZLE1BQWMsU0FBUnZxQixFQUFFdXFCLE1BQWV6WSxFQUFFb3pCLFdBQVdsbEMsRUFBRWtsQyxXQUFXcHpCLEVBQUV3ekIsTUFBTXRsQyxFQUFFc2xDLE1BQU14ekIsRUFBRStZLE1BQU03cUIsRUFBRTZxQixNQUFNL1ksRUFBRXN5QixjQUFjcGtDLEVBQUVva0MsY0FBY3R5QixFQUFFMlksY0FBY3pxQixFQUFFeXFCLGNBQWMzWSxFQUFFbTBCLFlBQVlqbUMsRUFBRWltQyxZQUFZL2dDLEVBQUVsRixFQUFFb2xDLGFBQWF0ekIsRUFBRXN6QixhQUFhLE9BQU9sZ0MsRUFBRSxLQUFLLENBQUNvZ0MsTUFBTXBnQyxFQUFFb2dDLE1BQU1ELGFBQWFuZ0MsRUFBRW1nQyxjQUMvZXZ6QixFQUFFZ1osUUFBUTlxQixFQUFFOHFCLFFBQVFoWixFQUFFaDdCLE1BQU1rcEIsRUFBRWxwQixNQUFNZzdCLEVBQUV0ekIsSUFBSXdoQixFQUFFeGhCLElBQVdzekIsQ0FBQyxDQUN4RCxTQUFTczNCLEdBQUdwcEMsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEVBQUV0UCxFQUFFcXFCLEdBQUcsSUFBSXllLEVBQUUsRUFBTSxHQUFKeDVCLEVBQUU4YSxFQUFLLG1CQUFvQkEsRUFBRWl4QyxHQUFHanhDLEtBQUswZSxFQUFFLFFBQVEsR0FBRyxpQkFBa0IxZSxFQUFFMGUsRUFBRSxPQUFPMWUsRUFBRSxPQUFPQSxHQUFHLEtBQUt3aUIsRUFBRyxPQUFPK21CLEdBQUd6M0IsRUFBRWg2QixTQUFTbEMsRUFBRXFxQixFQUFFaUYsR0FBRyxLQUFLdWQsRUFBRy9ELEVBQUUsRUFBRTlvQyxHQUFHLEVBQUUsTUFBTSxLQUFLOHNDLEVBQUcsT0FBTzFpQixFQUFFd2pDLEdBQUcsR0FBRzF4QixFQUFFNU0sRUFBSSxFQUFGdHZCLElBQU82dEQsWUFBWS9nQixFQUFHMWlCLEVBQUVzbEMsTUFBTXJsQyxFQUFFRCxFQUFFLEtBQUs4aUIsRUFBRyxPQUFPOWlCLEVBQUV3akMsR0FBRyxHQUFHMXhCLEVBQUU1TSxFQUFFdHZCLElBQUs2dEQsWUFBWTNnQixFQUFHOWlCLEVBQUVzbEMsTUFBTXJsQyxFQUFFRCxFQUFFLEtBQUsraUIsRUFBRyxPQUFPL2lCLEVBQUV3akMsR0FBRyxHQUFHMXhCLEVBQUU1TSxFQUFFdHZCLElBQUs2dEQsWUFBWTFnQixFQUFHL2lCLEVBQUVzbEMsTUFBTXJsQyxFQUFFRCxFQUFFLEtBQUtrakIsRUFBRyxPQUFPd3ZCLEdBQUc1Z0MsRUFBRWw4QixFQUFFcXFCLEVBQUVpRixHQUFHLFFBQVEsR0FBRyxpQkFBa0JsRixHQUFHLE9BQU9BLEVBQUUsT0FBT0EsRUFBRTZlLFVBQVUsS0FBSzhELEVBQUdqRSxFQUFFLEdBQUcsTUFBTTFlLEVBQUUsS0FBSzRpQixFQUFHbEUsRUFBRSxFQUFFLE1BQU0xZSxFQUFFLEtBQUs2aUIsRUFBR25FLEVBQUUsR0FDcGYsTUFBTTFlLEVBQUUsS0FBS2dqQixFQUFHdEUsRUFBRSxHQUFHLE1BQU0xZSxFQUFFLEtBQUtpakIsRUFBR3ZFLEVBQUUsR0FBR3g1QixFQUFFLEtBQUssTUFBTThhLEVBQUUsTUFBTXZTLE1BQU1xWCxFQUFFLElBQUksTUFBTTlFLEVBQUVBLFNBQVNBLEVBQUUsS0FBdUQsT0FBakRrRixFQUFFcytCLEdBQUc5a0IsRUFBRTVNLEVBQUU1TSxFQUFFdHZCLElBQUs2dEQsWUFBWXpqQyxFQUFFa0YsRUFBRXR0QixLQUFLc04sRUFBRWdnQixFQUFFb2dDLE1BQU1ybEMsRUFBU2lGLENBQUMsQ0FBQyxTQUFTcWtDLEdBQUd2cEMsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQTJCLE9BQXhCOGEsRUFBRXdqQyxHQUFHLEVBQUV4akMsRUFBRTlhLEVBQUVnZ0IsSUFBS29nQyxNQUFNeHpCLEVBQVM5UixDQUFDLENBQUMsU0FBUzB5QyxHQUFHMXlDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixHQUF1RSxPQUFwRThhLEVBQUV3akMsR0FBRyxHQUFHeGpDLEVBQUU5YSxFQUFFZ2dCLElBQUt1K0IsWUFBWXZnQixFQUFHbGpCLEVBQUVzbEMsTUFBTXh6QixFQUFFOVIsRUFBRWtwQixVQUFVLENBQUNzdEIsVUFBUyxHQUFXeDJDLENBQUMsQ0FBQyxTQUFTbXBDLEdBQUducEMsRUFBRWtGLEVBQUU0TSxHQUE4QixPQUEzQjlSLEVBQUV3akMsR0FBRyxFQUFFeGpDLEVBQUUsS0FBS2tGLElBQUtvZ0MsTUFBTXh6QixFQUFTOVIsQ0FBQyxDQUM1VyxTQUFTc3BDLEdBQUd0cEMsRUFBRWtGLEVBQUU0TSxHQUE4SixPQUEzSjVNLEVBQUVzK0IsR0FBRyxFQUFFLE9BQU94akMsRUFBRWxvQixTQUFTa29CLEVBQUVsb0IsU0FBUyxHQUFHa29CLEVBQUV6ckIsSUFBSTJ3QixJQUFLb2dDLE1BQU14ekIsRUFBRTVNLEVBQUVna0IsVUFBVSxDQUFDMkcsY0FBYzd2QixFQUFFNnZCLGNBQWNrckIsZ0JBQWdCLEtBQUsxUixlQUFlcnBDLEVBQUVxcEMsZ0JBQXVCbmtDLENBQUMsQ0FDdEwsU0FBUzgxQyxHQUFHaDdDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixFQUFFdFAsR0FBR3ZDLEtBQUtFLElBQUkyeEIsRUFBRTd4QixLQUFLdzhDLGNBQWM3dkIsRUFBRTNzQixLQUFLcW1FLGFBQWFybUUsS0FBS2s5RCxVQUFVbDlELEtBQUtxUixRQUFRclIsS0FBSzBuRSxnQkFBZ0IsS0FBSzFuRSxLQUFLd21FLGVBQWUsRUFBRXhtRSxLQUFLb2xFLGFBQWFwbEUsS0FBSzQrRCxlQUFlNStELEtBQUtnOUIsUUFBUSxLQUFLaDlCLEtBQUt3bEUsaUJBQWlCLEVBQUV4bEUsS0FBS3c2QyxXQUFXRixHQUFHLEdBQUd0NkMsS0FBS3FsRSxnQkFBZ0IvcUIsSUFBSSxHQUFHdDZDLEtBQUtpNkMsZUFBZWo2QyxLQUFLc21FLGNBQWN0bUUsS0FBSzhtRSxpQkFBaUI5bUUsS0FBS3NsRSxhQUFhdGxFLEtBQUtnNkMsWUFBWWg2QyxLQUFLKzVDLGVBQWUvNUMsS0FBSzg1QyxhQUFhLEVBQUU5NUMsS0FBS2s2QyxjQUFjSSxHQUFHLEdBQUd0NkMsS0FBS284RCxpQkFBaUJ2cUQsRUFBRTdSLEtBQUttbkUsbUJBQW1CNWtFLEVBQUV2QyxLQUFLNG5FLGdDQUMvZSxJQUFJLENBQUMsU0FBU0MsR0FBR2w3QyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRXRQLEVBQUVxcUIsRUFBRXllLEVBQUU5L0IsRUFBRTFELEdBQWdOLE9BQTdNOGtCLEVBQUUsSUFBSWc3QyxHQUFHaDdDLEVBQUVrRixFQUFFNE0sRUFBRWx6QixFQUFFMUQsR0FBRyxJQUFJZ3FCLEdBQUdBLEVBQUUsR0FBRSxJQUFLakYsSUFBSWlGLEdBQUcsSUFBSUEsRUFBRSxFQUFFakYsRUFBRXVqQyxHQUFHLEVBQUUsS0FBSyxLQUFLdCtCLEdBQUdsRixFQUFFdGIsUUFBUXViLEVBQUVBLEVBQUVpcEIsVUFBVWxwQixFQUFFQyxFQUFFd3FCLGNBQWMsQ0FBQ2h4QyxRQUFReUwsRUFBRTBxQyxhQUFhOWQsRUFBRW4wQixNQUFNLEtBQUswUCxZQUFZLEtBQUs4dEQsMEJBQTBCLE1BQU1uVixHQUFHL2xDLEdBQVVELENBQUMsQ0FBQyxTQUFTbzdDLEdBQUdwN0MsRUFBRWtGLEVBQUU0TSxHQUFHLElBQUk1c0IsRUFBRSxFQUFFNlcsVUFBVXJvQixhQUFRLElBQVNxb0IsVUFBVSxHQUFHQSxVQUFVLEdBQUcsS0FBSyxNQUFNLENBQUM4aUIsU0FBUzBELEVBQUdodUMsSUFBSSxNQUFNMlEsRUFBRSxLQUFLLEdBQUdBLEVBQUVwTixTQUFTa29CLEVBQUU2dkIsY0FBYzNxQixFQUFFbWtDLGVBQWV2M0IsRUFBRSxDQUNwYSxTQUFTMkksR0FBR3phLEdBQUcsSUFBSUEsRUFBRSxPQUFPbWhDLEdBQXVCbmhDLEVBQUUsQ0FBQyxHQUFHcXFCLEdBQTFCcnFCLEVBQUVBLEVBQUV3bkMsbUJBQThCeG5DLEdBQUcsSUFBSUEsRUFBRXpzQixJQUFJLE1BQU1rYSxNQUFNcVgsRUFBRSxNQUFNLElBQUlJLEVBQUVsRixFQUFFLEVBQUUsQ0FBQyxPQUFPa0YsRUFBRTN4QixLQUFLLEtBQUssRUFBRTJ4QixFQUFFQSxFQUFFZ2tCLFVBQVU3WSxRQUFRLE1BQU1yUSxFQUFFLEtBQUssRUFBRSxHQUFHMGhDLEdBQUd4OEIsRUFBRXR0QixNQUFNLENBQUNzdEIsRUFBRUEsRUFBRWdrQixVQUFVOFksMENBQTBDLE1BQU1oaUMsQ0FBQyxFQUFFa0YsRUFBRUEsRUFBRW50QixNQUFNLE9BQU8sT0FBT210QixHQUFHLE1BQU16WCxNQUFNcVgsRUFBRSxLQUFNLENBQUMsR0FBRyxJQUFJOUUsRUFBRXpzQixJQUFJLENBQUMsSUFBSXUrQixFQUFFOVIsRUFBRXBvQixLQUFLLEdBQUc4cEQsR0FBRzV2QixHQUFHLE9BQU8rdkIsR0FBRzdoQyxFQUFFOFIsRUFBRTVNLEVBQUUsQ0FBQyxPQUFPQSxDQUFDLENBQ3BXLFNBQVNtMkMsR0FBR3I3QyxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRXRQLEVBQUVxcUIsRUFBRXllLEVBQUU5L0IsRUFBRTFELEdBQXdLLE9BQXJLOGtCLEVBQUVrN0MsR0FBR3BwQyxFQUFFNXNCLEdBQUUsRUFBRzhhLEVBQUVwcUIsRUFBRXFxQixFQUFFeWUsRUFBRTkvQixFQUFFMUQsSUFBS20xQixRQUFRb0ssR0FBRyxNQUFNM0ksRUFBRTlSLEVBQUV0YixTQUFzQnViLEVBQUV3bUMsR0FBaEJ2aEQsRUFBRXdpRCxLQUFJOXhELEVBQUUreEQsR0FBRzcxQixLQUFleDRCLFNBQVMsTUFBUzRyQixFQUFZQSxFQUFFLEtBQUswaEMsR0FBRzkwQixFQUFFN1IsRUFBRXJxQixHQUFHb3FCLEVBQUV0YixRQUFRNGdELE1BQU0xdkQsRUFBRWc0QyxHQUFHNXRCLEVBQUVwcUIsRUFBRXNQLEdBQUdzekQsR0FBR3g0QyxFQUFFOWEsR0FBVThhLENBQUMsQ0FBQyxTQUFTczdDLEdBQUd0N0MsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUcsSUFBSXRQLEVBQUVzdkIsRUFBRXhnQixRQUFRdWIsRUFBRXluQyxLQUFJaHBCLEVBQUVpcEIsR0FBRy94RCxHQUFzTCxPQUFuTGs4QixFQUFFMkksR0FBRzNJLEdBQUcsT0FBTzVNLEVBQUVtTCxRQUFRbkwsRUFBRW1MLFFBQVF5QixFQUFFNU0sRUFBRStzQyxlQUFlbmdDLEdBQUU1TSxFQUFFdWhDLEdBQUd4bUMsRUFBRXllLElBQUs1RixRQUFRLENBQUNyL0IsUUFBUXVtQixHQUF1QixRQUFwQjlhLE9BQUUsSUFBU0EsRUFBRSxLQUFLQSxLQUFhZ2dCLEVBQUU1ckIsU0FBUzRMLEdBQWUsUUFBWjhhLEVBQUU0bUMsR0FBR2h4RCxFQUFFc3ZCLEVBQUV3WixNQUFja3BCLEdBQUc1bkMsRUFBRXBxQixFQUFFOG9DLEVBQUV6ZSxHQUFHNm1DLEdBQUc5bUMsRUFBRXBxQixFQUFFOG9DLElBQVdBLENBQUMsQ0FDM2IsU0FBUzY4QixHQUFHdjdDLEdBQWUsT0FBWkEsRUFBRUEsRUFBRXRiLFNBQWNtbUMsT0FBeUI3cUIsRUFBRTZxQixNQUFNdDNDLElBQW9EeXNCLEVBQUU2cUIsTUFBTTNCLFdBQWhGLElBQTBGLENBQUMsU0FBU3N5QixHQUFHeDdDLEVBQUVrRixHQUFxQixHQUFHLFFBQXJCbEYsRUFBRUEsRUFBRXlxQixnQkFBMkIsT0FBT3pxQixFQUFFMHFCLFdBQVcsQ0FBQyxJQUFJNVksRUFBRTlSLEVBQUUrakMsVUFBVS9qQyxFQUFFK2pDLFVBQVUsSUFBSWp5QixHQUFHQSxFQUFFNU0sRUFBRTRNLEVBQUU1TSxDQUFDLENBQUMsQ0FBQyxTQUFTdTJDLEdBQUd6N0MsRUFBRWtGLEdBQUdzMkMsR0FBR3g3QyxFQUFFa0YsSUFBSWxGLEVBQUVBLEVBQUVzcUIsWUFBWWt4QixHQUFHeDdDLEVBQUVrRixFQUFFLENBbkI3Uyt4QyxHQUFHLFNBQVNqM0MsRUFBRWtGLEVBQUU0TSxHQUFHLEdBQUcsT0FBTzlSLEVBQUUsR0FBR0EsRUFBRW9rQyxnQkFBZ0JsL0IsRUFBRTArQixjQUFjdkMsR0FBRzM4QyxRQUFRNmdELElBQUcsTUFBTyxDQUFDLEdBQUcsSUFBS3ZsQyxFQUFFc2xDLE1BQU14ekIsSUFBSSxJQUFhLElBQVI1TSxFQUFFcWxCLE9BQVcsT0FBT2diLElBQUcsRUF6RTFJLFNBQVl2bEMsRUFBRWtGLEVBQUU0TSxHQUFHLE9BQU81TSxFQUFFM3hCLEtBQUssS0FBSyxFQUFFeStELEdBQUc5c0MsR0FBR28vQixLQUFLLE1BQU0sS0FBSyxFQUFFMkYsR0FBRy9rQyxHQUFHLE1BQU0sS0FBSyxFQUFFdzhCLEdBQUd4OEIsRUFBRXR0QixPQUFPbXFELEdBQUc3OEIsR0FBRyxNQUFNLEtBQUssRUFBRTZrQyxHQUFHN2tDLEVBQUVBLEVBQUVna0IsVUFBVTJHLGVBQWUsTUFBTSxLQUFLLEdBQUcsSUFBSTNxQyxFQUFFZ2dCLEVBQUV0dEIsS0FBS29zQyxTQUFTcHVDLEVBQUVzdkIsRUFBRWsvQixjQUFjN3RELE1BQU0ycUQsR0FBRXdELEdBQUd4L0MsRUFBRTgvQyxlQUFlOS9DLEVBQUU4L0MsY0FBY3B2RCxFQUFFLE1BQU0sS0FBSyxHQUFxQixHQUFHLFFBQXJCc1AsRUFBRWdnQixFQUFFdWxCLGVBQTJCLE9BQUcsT0FBT3ZsQyxFQUFFd2xDLFlBQWtCd1csR0FBRWlKLEdBQVksRUFBVkEsR0FBRXpsRCxTQUFXd2dCLEVBQUVxbEIsT0FBTyxJQUFJLE1BQVEsSUFBS3pZLEVBQUU1TSxFQUFFMmxCLE1BQU1xYSxZQUFtQnNOLEdBQUd4eUMsRUFBRWtGLEVBQUU0TSxJQUFHb3ZCLEdBQUVpSixHQUFZLEVBQVZBLEdBQUV6bEQsU0FBOEIsUUFBbkJzYixFQUFFK3dDLEdBQUcvd0MsRUFBRWtGLEVBQUU0TSxJQUFtQjlSLEVBQUU4cUIsUUFBUSxNQUFLb1csR0FBRWlKLEdBQVksRUFBVkEsR0FBRXpsRCxTQUFXLE1BQU0sS0FBSyxHQUM3ZCxHQURnZVEsRUFBRSxJQUFLNHNCLEVBQ3JmNU0sRUFBRWdnQyxZQUFlLElBQWEsSUFBUmxsQyxFQUFFdXFCLE9BQVcsQ0FBQyxHQUFHcmxDLEVBQUUsT0FBTzB1RCxHQUFHNXpDLEVBQUVrRixFQUFFNE0sR0FBRzVNLEVBQUVxbEIsT0FBTyxHQUFHLENBQTZGLEdBQTFFLFFBQWxCMzBDLEVBQUVzdkIsRUFBRXVsQixpQkFBeUI3MEMsRUFBRTI5RCxVQUFVLEtBQUszOUQsRUFBRTg5RCxLQUFLLEtBQUs5OUQsRUFBRXEzRCxXQUFXLE1BQU0vTCxHQUFFaUosR0FBRUEsR0FBRXpsRCxTQUFZUSxFQUFFLE1BQVcsT0FBTyxLQUFLLEtBQUssR0FBRyxLQUFLLEdBQUcsT0FBT2dnQixFQUFFb2dDLE1BQU0sRUFBRThMLEdBQUdweEMsRUFBRWtGLEVBQUU0TSxHQUFHLE9BQU9pL0IsR0FBRy93QyxFQUFFa0YsRUFBRTRNLEVBQUUsQ0F3RTdHNHBDLENBQUcxN0MsRUFBRWtGLEVBQUU0TSxHQUFHeXpCLEdBQUcsSUFBYSxPQUFSdmxDLEVBQUV1cUIsTUFBbUIsTUFBTWdiLElBQUcsRUFBR2xDLElBQUcsSUFBYSxRQUFSbitCLEVBQUVxbEIsUUFBZ0J5WSxHQUFHOTlCLEVBQUV1OUIsR0FBR3Y5QixFQUFFcHVCLE9BQWlCLE9BQVZvdUIsRUFBRW9nQyxNQUFNLEVBQVNwZ0MsRUFBRTN4QixLQUFLLEtBQUssRUFBRSxJQUFJMlIsRUFBRWdnQixFQUFFdHRCLEtBQUsrNUQsR0FBRzN4QyxFQUFFa0YsR0FBR2xGLEVBQUVrRixFQUFFMCtCLGFBQWEsSUFBSWh1RCxFQUFFMnJELEdBQUdyOEIsRUFBRWs4QixHQUFFMThDLFNBQVN5Z0QsR0FBR2pnQyxFQUFFNE0sR0FBR2w4QixFQUFFMDFELEdBQUcsS0FBS3BtQyxFQUFFaGdCLEVBQUU4YSxFQUFFcHFCLEVBQUVrOEIsR0FBRyxJQUFJN1IsRUFBRTByQyxLQUN2SSxPQUQ0SXptQyxFQUFFcWxCLE9BQU8sRUFBRSxpQkFBa0IzMEMsR0FBRyxPQUFPQSxHQUFHLG1CQUFvQkEsRUFBRWdvQyxhQUFRLElBQVNob0MsRUFBRWlwQyxVQUFVM1osRUFBRTN4QixJQUFJLEVBQUUyeEIsRUFBRXVsQixjQUFjLEtBQUt2bEIsRUFBRStnQyxZQUMxZSxLQUFLdkUsR0FBR3g4QyxJQUFJK2EsR0FBRSxFQUFHOGhDLEdBQUc3OEIsSUFBSWpGLEdBQUUsRUFBR2lGLEVBQUV1bEIsY0FBYyxPQUFPNzBDLEVBQUV3aUIsWUFBTyxJQUFTeGlCLEVBQUV3aUIsTUFBTXhpQixFQUFFd2lCLE1BQU0sS0FBSzR0QyxHQUFHOWdDLEdBQUd0dkIsRUFBRXV5RCxRQUFRYixHQUFHcGlDLEVBQUVna0IsVUFBVXR6QyxFQUFFQSxFQUFFNHhELGdCQUFnQnRpQyxFQUFFcWpDLEdBQUdyakMsRUFBRWhnQixFQUFFOGEsRUFBRThSLEdBQUc1TSxFQUFFNnNDLEdBQUcsS0FBSzdzQyxFQUFFaGdCLEdBQUUsRUFBRythLEVBQUU2UixLQUFLNU0sRUFBRTN4QixJQUFJLEVBQUU4dkQsSUFBR3BqQyxHQUFHZ2pDLEdBQUcvOUIsR0FBRzJyQyxHQUFHLEtBQUszckMsRUFBRXR2QixFQUFFazhCLEdBQUc1TSxFQUFFQSxFQUFFMmxCLE9BQWMzbEIsRUFBRSxLQUFLLEdBQUdoZ0IsRUFBRWdnQixFQUFFdStCLFlBQVl6akMsRUFBRSxDQUFxRixPQUFwRjJ4QyxHQUFHM3hDLEVBQUVrRixHQUFHbEYsRUFBRWtGLEVBQUUwK0IsYUFBdUIxK0MsR0FBVnRQLEVBQUVzUCxFQUFFZy9CLE9BQVVoL0IsRUFBRSsrQixVQUFVL2UsRUFBRXR0QixLQUFLc04sRUFBRXRQLEVBQUVzdkIsRUFBRTN4QixJQVF0VSxTQUFZeXNCLEdBQUcsR0FBRyxtQkFBb0JBLEVBQUUsT0FBT2l4QyxHQUFHanhDLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBU0EsRUFBWSxDQUFjLElBQWJBLEVBQUVBLEVBQUU2ZSxZQUFnQmdFLEVBQUcsT0FBTyxHQUFHLEdBQUc3aUIsSUFBSWdqQixFQUFHLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQVIyTDI0QixDQUFHejJELEdBQUc4YSxFQUFFeWtDLEdBQUd2L0MsRUFBRThhLEdBQVVwcUIsR0FBRyxLQUFLLEVBQUVzdkIsRUFBRWlzQyxHQUFHLEtBQUtqc0MsRUFBRWhnQixFQUFFOGEsRUFBRThSLEdBQUcsTUFBTTlSLEVBQUUsS0FBSyxFQUFFa0YsRUFBRXdzQyxHQUFHLEtBQUt4c0MsRUFBRWhnQixFQUFFOGEsRUFBRThSLEdBQUcsTUFBTTlSLEVBQUUsS0FBSyxHQUFHa0YsRUFBRTRyQyxHQUFHLEtBQUs1ckMsRUFBRWhnQixFQUFFOGEsRUFBRThSLEdBQUcsTUFBTTlSLEVBQUUsS0FBSyxHQUFHa0YsRUFBRThyQyxHQUFHLEtBQUs5ckMsRUFBRWhnQixFQUFFdS9DLEdBQUd2L0MsRUFBRXROLEtBQUtvb0IsR0FBRzhSLEdBQUcsTUFBTTlSLEVBQUUsTUFBTXZTLE1BQU1xWCxFQUFFLElBQ3ZnQjVmLEVBQUUsSUFBSyxDQUFDLE9BQU9nZ0IsRUFBRSxLQUFLLEVBQUUsT0FBT2hnQixFQUFFZ2dCLEVBQUV0dEIsS0FBS2hDLEVBQUVzdkIsRUFBRTArQixhQUEyQ3VOLEdBQUdueEMsRUFBRWtGLEVBQUVoZ0IsRUFBckN0UCxFQUFFc3ZCLEVBQUV1K0IsY0FBY3YrQyxFQUFFdFAsRUFBRTZ1RCxHQUFHdi9DLEVBQUV0UCxHQUFjazhCLEdBQUcsS0FBSyxFQUFFLE9BQU81c0IsRUFBRWdnQixFQUFFdHRCLEtBQUtoQyxFQUFFc3ZCLEVBQUUwK0IsYUFBMkM4TixHQUFHMXhDLEVBQUVrRixFQUFFaGdCLEVBQXJDdFAsRUFBRXN2QixFQUFFdStCLGNBQWN2K0MsRUFBRXRQLEVBQUU2dUQsR0FBR3YvQyxFQUFFdFAsR0FBY2s4QixHQUFHLEtBQUssRUFBRTlSLEVBQUUsQ0FBTyxHQUFOZ3lDLEdBQUc5c0MsR0FBTSxPQUFPbEYsRUFBRSxNQUFNdlMsTUFBTXFYLEVBQUUsTUFBTTVmLEVBQUVnZ0IsRUFBRTArQixhQUErQmh1RCxHQUFsQnFxQixFQUFFaUYsRUFBRXVsQixlQUFrQmh4QyxRQUFRK3NELEdBQUd4bUMsRUFBRWtGLEdBQUc4aEMsR0FBRzloQyxFQUFFaGdCLEVBQUUsS0FBSzRzQixHQUFHLElBQUk0TSxFQUFFeFosRUFBRXVsQixjQUEwQixHQUFadmxDLEVBQUV3NUIsRUFBRWpsQyxRQUFXd21CLEVBQUUydkIsYUFBYSxJQUFHM3ZCLEVBQUUsQ0FBQ3htQixRQUFReUwsRUFBRTBxQyxjQUFhLEVBQUdqeUMsTUFBTStnQyxFQUFFL2dDLE1BQU13OUQsMEJBQTBCejhCLEVBQUV5OEIsMEJBQTBCOXRELFlBQVlxeEIsRUFBRXJ4QixhQUFhNlgsRUFBRStnQyxZQUFZQyxVQUNoZmptQyxFQUFFaUYsRUFBRXVsQixjQUFjeHFCLEVBQVUsSUFBUmlGLEVBQUVxbEIsTUFBVSxDQUF1QnJsQixFQUFFZ3RDLEdBQUdseUMsRUFBRWtGLEVBQUVoZ0IsRUFBRTRzQixFQUFqQ2w4QixFQUFFODVELEdBQUdqaUQsTUFBTXFYLEVBQUUsTUFBTUksSUFBbUIsTUFBTWxGLENBQUMsQ0FBTSxHQUFHOWEsSUFBSXRQLEVBQUUsQ0FBdUJzdkIsRUFBRWd0QyxHQUFHbHlDLEVBQUVrRixFQUFFaGdCLEVBQUU0c0IsRUFBakNsOEIsRUFBRTg1RCxHQUFHamlELE1BQU1xWCxFQUFFLE1BQU1JLElBQW1CLE1BQU1sRixDQUFDLENBQU0sSUFBSW9qQyxHQUFHOUMsR0FBR3A3QixFQUFFZ2tCLFVBQVUyRyxjQUFjOTdDLFlBQVlvdkQsR0FBR2orQixFQUFFbStCLElBQUUsRUFBR0MsR0FBRyxLQUFLeHhCLEVBQUUyM0IsR0FBR3ZrQyxFQUFFLEtBQUtoZ0IsRUFBRTRzQixHQUFHNU0sRUFBRTJsQixNQUFNL1ksRUFBRUEsR0FBR0EsRUFBRXlZLE9BQWUsRUFBVHpZLEVBQUV5WSxNQUFTLEtBQUt6WSxFQUFFQSxFQUFFZ1osT0FBTyxLQUFLLENBQU0sR0FBTHdaLEtBQVFwL0MsSUFBSXRQLEVBQUUsQ0FBQ3N2QixFQUFFNnJDLEdBQUcvd0MsRUFBRWtGLEVBQUU0TSxHQUFHLE1BQU05UixDQUFDLENBQUM2d0MsR0FBRzd3QyxFQUFFa0YsRUFBRWhnQixFQUFFNHNCLEVBQUUsQ0FBQzVNLEVBQUVBLEVBQUUybEIsS0FBSyxDQUFDLE9BQU8zbEIsRUFBRSxLQUFLLEVBQUUsT0FBTytrQyxHQUFHL2tDLEdBQUcsT0FBT2xGLEdBQUdpa0MsR0FBRy8rQixHQUFHaGdCLEVBQUVnZ0IsRUFBRXR0QixLQUFLaEMsRUFBRXN2QixFQUFFMCtCLGFBQWEzakMsRUFBRSxPQUFPRCxFQUFFQSxFQUFFb2tDLGNBQWMsS0FBSzFsQixFQUFFOW9DLEVBQUVrQyxTQUFTOG5ELEdBQUcxNkMsRUFBRXRQLEdBQUc4b0MsRUFBRSxLQUFLLE9BQU96ZSxHQUFHMi9CLEdBQUcxNkMsRUFBRSthLEtBQUtpRixFQUFFcWxCLE9BQU8sSUFDbmZrbkIsR0FBR3p4QyxFQUFFa0YsR0FBRzJyQyxHQUFHN3dDLEVBQUVrRixFQUFFd1osRUFBRTVNLEdBQUc1TSxFQUFFMmxCLE1BQU0sS0FBSyxFQUFFLE9BQU8sT0FBTzdxQixHQUFHaWtDLEdBQUcvK0IsR0FBRyxLQUFLLEtBQUssR0FBRyxPQUFPc3RDLEdBQUd4eUMsRUFBRWtGLEVBQUU0TSxHQUFHLEtBQUssRUFBRSxPQUFPaTRCLEdBQUc3a0MsRUFBRUEsRUFBRWdrQixVQUFVMkcsZUFBZTNxQyxFQUFFZ2dCLEVBQUUwK0IsYUFBYSxPQUFPNWpDLEVBQUVrRixFQUFFMmxCLE1BQU0yZSxHQUFHdGtDLEVBQUUsS0FBS2hnQixFQUFFNHNCLEdBQUcrK0IsR0FBRzd3QyxFQUFFa0YsRUFBRWhnQixFQUFFNHNCLEdBQUc1TSxFQUFFMmxCLE1BQU0sS0FBSyxHQUFHLE9BQU8zbEMsRUFBRWdnQixFQUFFdHRCLEtBQUtoQyxFQUFFc3ZCLEVBQUUwK0IsYUFBMkNrTixHQUFHOXdDLEVBQUVrRixFQUFFaGdCLEVBQXJDdFAsRUFBRXN2QixFQUFFdStCLGNBQWN2K0MsRUFBRXRQLEVBQUU2dUQsR0FBR3YvQyxFQUFFdFAsR0FBY2s4QixHQUFHLEtBQUssRUFBRSxPQUFPKytCLEdBQUc3d0MsRUFBRWtGLEVBQUVBLEVBQUUwK0IsYUFBYTl4QixHQUFHNU0sRUFBRTJsQixNQUFNLEtBQUssRUFBbUQsS0FBSyxHQUFHLE9BQU9nbUIsR0FBRzd3QyxFQUFFa0YsRUFBRUEsRUFBRTArQixhQUFhOXJELFNBQVNnNkIsR0FBRzVNLEVBQUUybEIsTUFBTSxLQUFLLEdBQUc3cUIsRUFBRSxDQUN4WixHQUR5WjlhLEVBQUVnZ0IsRUFBRXR0QixLQUFLb3NDLFNBQVNwdUMsRUFBRXN2QixFQUFFMCtCLGFBQWEzakMsRUFBRWlGLEVBQUVrL0IsY0FDbGYxbEIsRUFBRTlvQyxFQUFFVyxNQUFNMnFELEdBQUV3RCxHQUFHeC9DLEVBQUU4L0MsZUFBZTkvQyxFQUFFOC9DLGNBQWN0bUIsRUFBSyxPQUFPemUsRUFBRSxHQUFHKzVCLEdBQUcvNUIsRUFBRTFwQixNQUFNbW9DLElBQUksR0FBR3plLEVBQUVub0IsV0FBV2xDLEVBQUVrQyxXQUFXdXBELEdBQUczOEMsUUFBUSxDQUFDd2dCLEVBQUU2ckMsR0FBRy93QyxFQUFFa0YsRUFBRTRNLEdBQUcsTUFBTTlSLENBQUMsT0FBTyxJQUFjLFFBQVZDLEVBQUVpRixFQUFFMmxCLFNBQWlCNXFCLEVBQUVsb0IsT0FBT210QixHQUFHLE9BQU9qRixHQUFHLENBQUMsSUFBSXJoQixFQUFFcWhCLEVBQUVtbEMsYUFBYSxHQUFHLE9BQU94bUQsRUFBRSxDQUFDOC9CLEVBQUV6ZSxFQUFFNHFCLE1BQU0sSUFBSSxJQUFJM3ZDLEVBQUUwRCxFQUFFeW1ELGFBQWEsT0FBT25xRCxHQUFHLENBQUMsR0FBR0EsRUFBRW0xQixVQUFVbnJCLEVBQUUsQ0FBQyxHQUFHLElBQUkrYSxFQUFFMXNCLElBQUksRUFBQzJILEVBQUV1ckQsSUFBSSxFQUFFMzBCLEdBQUdBLElBQUt2K0IsSUFBSSxFQUFFLElBQUl3c0IsRUFBRUUsRUFBRWdtQyxZQUFZLEdBQUcsT0FBT2xtQyxFQUFFLENBQVksSUFBSThFLEdBQWY5RSxFQUFFQSxFQUFFc21DLFFBQWVDLFFBQVEsT0FBT3poQyxFQUFFM3BCLEVBQUVoRCxLQUFLZ0QsR0FBR0EsRUFBRWhELEtBQUsyc0IsRUFBRTNzQixLQUFLMnNCLEVBQUUzc0IsS0FBS2dELEdBQUc2a0IsRUFBRXVtQyxRQUFRcHJELENBQUMsQ0FBQyxDQUFDK2tCLEVBQUVxbEMsT0FBT3h6QixFQUFnQixRQUFkNTJCLEVBQUUra0IsRUFBRXFxQixhQUFxQnB2QyxFQUFFb3FELE9BQU94ekIsR0FBR216QixHQUFHaGxDLEVBQUVsb0IsT0FDbGYrNUIsRUFBRTVNLEdBQUd0bUIsRUFBRTBtRCxPQUFPeHpCLEVBQUUsS0FBSyxDQUFDNTJCLEVBQUVBLEVBQUVoRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUsrbkIsRUFBRTFzQixJQUFJbXJDLEVBQUV6ZSxFQUFFcm9CLE9BQU9zdEIsRUFBRXR0QixLQUFLLEtBQUtxb0IsRUFBRTRxQixXQUFXLEdBQUcsS0FBSzVxQixFQUFFMXNCLElBQUksQ0FBWSxHQUFHLFFBQWRtckMsRUFBRXplLEVBQUVsb0IsUUFBbUIsTUFBTTBWLE1BQU1xWCxFQUFFLE1BQU00WixFQUFFNG1CLE9BQU94ekIsRUFBZ0IsUUFBZGx6QixFQUFFOC9CLEVBQUU0TCxhQUFxQjFyQyxFQUFFMG1ELE9BQU94ekIsR0FBR216QixHQUFHdm1CLEVBQUU1TSxFQUFFNU0sR0FBR3daLEVBQUV6ZSxFQUFFNnFCLE9BQU8sTUFBTXBNLEVBQUV6ZSxFQUFFNHFCLE1BQU0sR0FBRyxPQUFPbk0sRUFBRUEsRUFBRTNtQyxPQUFPa29CLE9BQU8sSUFBSXllLEVBQUV6ZSxFQUFFLE9BQU95ZSxHQUFHLENBQUMsR0FBR0EsSUFBSXhaLEVBQUUsQ0FBQ3daLEVBQUUsS0FBSyxLQUFLLENBQWEsR0FBRyxRQUFmemUsRUFBRXllLEVBQUVvTSxTQUFvQixDQUFDN3FCLEVBQUVsb0IsT0FBTzJtQyxFQUFFM21DLE9BQU8ybUMsRUFBRXplLEVBQUUsS0FBSyxDQUFDeWUsRUFBRUEsRUFBRTNtQyxNQUFNLENBQUNrb0IsRUFBRXllLENBQUMsQ0FBQ215QixHQUFHN3dDLEVBQUVrRixFQUFFdHZCLEVBQUVrQyxTQUFTZzZCLEdBQUc1TSxFQUFFQSxFQUFFMmxCLEtBQUssQ0FBQyxPQUFPM2xCLEVBQUUsS0FBSyxFQUFFLE9BQU90dkIsRUFBRXN2QixFQUFFdHRCLEtBQUtzTixFQUFFZ2dCLEVBQUUwK0IsYUFBYTlyRCxTQUFTcXRELEdBQUdqZ0MsRUFBRTRNLEdBQVc1c0IsRUFBRUEsRUFBVnRQLEVBQUU0dkQsR0FBRzV2RCxJQUFVc3ZCLEVBQUVxbEIsT0FBTyxFQUFFc21CLEdBQUc3d0MsRUFBRWtGLEVBQUVoZ0IsRUFBRTRzQixHQUNwZjVNLEVBQUUybEIsTUFBTSxLQUFLLEdBQUcsT0FBZ0JqMUMsRUFBRTZ1RCxHQUFYdi9DLEVBQUVnZ0IsRUFBRXR0QixLQUFZc3RCLEVBQUUwK0IsY0FBNkJvTixHQUFHaHhDLEVBQUVrRixFQUFFaGdCLEVBQXRCdFAsRUFBRTZ1RCxHQUFHdi9DLEVBQUV0TixLQUFLaEMsR0FBY2s4QixHQUFHLEtBQUssR0FBRyxPQUFPby9CLEdBQUdseEMsRUFBRWtGLEVBQUVBLEVBQUV0dEIsS0FBS3N0QixFQUFFMCtCLGFBQWE5eEIsR0FBRyxLQUFLLEdBQUcsT0FBTzVzQixFQUFFZ2dCLEVBQUV0dEIsS0FBS2hDLEVBQUVzdkIsRUFBRTArQixhQUFhaHVELEVBQUVzdkIsRUFBRXUrQixjQUFjditDLEVBQUV0UCxFQUFFNnVELEdBQUd2L0MsRUFBRXRQLEdBQUcrN0QsR0FBRzN4QyxFQUFFa0YsR0FBR0EsRUFBRTN4QixJQUFJLEVBQUVtdUQsR0FBR3g4QyxJQUFJOGEsR0FBRSxFQUFHK2hDLEdBQUc3OEIsSUFBSWxGLEdBQUUsRUFBR21sQyxHQUFHamdDLEVBQUU0TSxHQUFHbzJCLEdBQUdoakMsRUFBRWhnQixFQUFFdFAsR0FBRzJ5RCxHQUFHcmpDLEVBQUVoZ0IsRUFBRXRQLEVBQUVrOEIsR0FBR2lnQyxHQUFHLEtBQUs3c0MsRUFBRWhnQixHQUFFLEVBQUc4YSxFQUFFOFIsR0FBRyxLQUFLLEdBQUcsT0FBTzhoQyxHQUFHNXpDLEVBQUVrRixFQUFFNE0sR0FBRyxLQUFLLEdBQUcsT0FBT3MvQixHQUFHcHhDLEVBQUVrRixFQUFFNE0sR0FBRyxNQUFNcmtCLE1BQU1xWCxFQUFFLElBQUlJLEVBQUUzeEIsS0FBTSxFQVl4QyxJQUFJcW9FLEdBQUcsbUJBQW9CQyxZQUFZQSxZQUFZLFNBQVM3N0MsR0FBR2xJLFFBQVFoSyxNQUFNa1MsRUFBRSxFQUFFLFNBQVM4N0MsR0FBRzk3QyxHQUFHM3NCLEtBQUswb0UsY0FBYy83QyxDQUFDLENBQ2pJLFNBQVNnOEMsR0FBR2g4QyxHQUFHM3NCLEtBQUswb0UsY0FBYy83QyxDQUFDLENBQzVKLFNBQVNpOEMsR0FBR2o4QyxHQUFHLFNBQVNBLEdBQUcsSUFBSUEsRUFBRThtQixVQUFVLElBQUk5bUIsRUFBRThtQixVQUFVLEtBQUs5bUIsRUFBRThtQixTQUFTLENBQUMsU0FBU28xQixHQUFHbDhDLEdBQUcsU0FBU0EsR0FBRyxJQUFJQSxFQUFFOG1CLFVBQVUsSUFBSTltQixFQUFFOG1CLFVBQVUsS0FBSzltQixFQUFFOG1CLFdBQVcsSUFBSTltQixFQUFFOG1CLFVBQVUsaUNBQWlDOW1CLEVBQUUrbUIsV0FBVyxDQUFDLFNBQVNvMUIsS0FBSyxDQUV4YSxTQUFTQyxHQUFHcDhDLEVBQUVrRixFQUFFNE0sRUFBRTVzQixFQUFFdFAsR0FBRyxJQUFJcXFCLEVBQUU2UixFQUFFNmpDLG9CQUFvQixHQUFHMTFDLEVBQUUsQ0FBQyxJQUFJeWUsRUFBRXplLEVBQUUsR0FBRyxtQkFBb0JycUIsRUFBRSxDQUFDLElBQUlnSixFQUFFaEosRUFBRUEsRUFBRSxXQUFXLElBQUlvcUIsRUFBRXU3QyxHQUFHNzhCLEdBQUc5L0IsRUFBRW5DLEtBQUt1akIsRUFBRSxDQUFDLENBQUNzN0MsR0FBR3AyQyxFQUFFd1osRUFBRTFlLEVBQUVwcUIsRUFBRSxNQUFNOG9DLEVBRHhKLFNBQVkxZSxFQUFFa0YsRUFBRTRNLEVBQUU1c0IsRUFBRXRQLEdBQUcsR0FBR0EsRUFBRSxDQUFDLEdBQUcsbUJBQW9Cc1AsRUFBRSxDQUFDLElBQUkrYSxFQUFFL2EsRUFBRUEsRUFBRSxXQUFXLElBQUk4YSxFQUFFdTdDLEdBQUc3OEIsR0FBR3plLEVBQUV4akIsS0FBS3VqQixFQUFFLENBQUMsQ0FBQyxJQUFJMGUsRUFBRTI4QixHQUFHbjJDLEVBQUVoZ0IsRUFBRThhLEVBQUUsRUFBRSxNQUFLLEVBQUcsRUFBRyxHQUFHbThDLElBQW1GLE9BQS9FbjhDLEVBQUUyMUMsb0JBQW9CajNCLEVBQUUxZSxFQUFFMCtCLElBQUloZ0IsRUFBRWg2QixRQUFRMDVDLEdBQUcsSUFBSXArQixFQUFFOG1CLFNBQVM5bUIsRUFBRWxxQixXQUFXa3FCLEdBQUcrNUMsS0FBWXI3QixDQUFDLENBQUMsS0FBSzlvQyxFQUFFb3FCLEVBQUU2bUIsV0FBVzdtQixFQUFFanFCLFlBQVlILEdBQUcsR0FBRyxtQkFBb0JzUCxFQUFFLENBQUMsSUFBSXRHLEVBQUVzRyxFQUFFQSxFQUFFLFdBQVcsSUFBSThhLEVBQUV1N0MsR0FBR3JnRSxHQUFHMEQsRUFBRW5DLEtBQUt1akIsRUFBRSxDQUFDLENBQUMsSUFBSTlrQixFQUFFZ2dFLEdBQUdsN0MsRUFBRSxHQUFFLEVBQUcsS0FBSyxHQUFLLEVBQUcsRUFBRyxHQUFHbThDLElBQTBHLE9BQXRHbjhDLEVBQUUyMUMsb0JBQW9CejZELEVBQUU4a0IsRUFBRTArQixJQUFJeGpELEVBQUV3SixRQUFRMDVDLEdBQUcsSUFBSXArQixFQUFFOG1CLFNBQVM5bUIsRUFBRWxxQixXQUFXa3FCLEdBQUcrNUMsSUFBRyxXQUFXdUIsR0FBR3AyQyxFQUFFaHFCLEVBQUU0MkIsRUFBRTVzQixFQUFFLElBQVVoSyxDQUFDLENBQ3BVbWhFLENBQUd2cUMsRUFBRTVNLEVBQUVsRixFQUFFcHFCLEVBQUVzUCxHQUFHLE9BQU9xMkQsR0FBRzc4QixFQUFFLENBSHBMczlCLEdBQUd2bkUsVUFBVW1wQyxPQUFPaytCLEdBQUdybkUsVUFBVW1wQyxPQUFPLFNBQVM1ZCxHQUFHLElBQUlrRixFQUFFN3hCLEtBQUswb0UsY0FBYyxHQUFHLE9BQU83MkMsRUFBRSxNQUFNelgsTUFBTXFYLEVBQUUsTUFBTXcyQyxHQUFHdDdDLEVBQUVrRixFQUFFLEtBQUssS0FBSyxFQUFFODJDLEdBQUd2bkUsVUFBVTZuRSxRQUFRUixHQUFHcm5FLFVBQVU2bkUsUUFBUSxXQUFXLElBQUl0OEMsRUFBRTNzQixLQUFLMG9FLGNBQWMsR0FBRyxPQUFPLzdDLEVBQUUsQ0FBQzNzQixLQUFLMG9FLGNBQWMsS0FBSyxJQUFJNzJDLEVBQUVsRixFQUFFNnZCLGNBQWNrcUIsSUFBRyxXQUFXdUIsR0FBRyxLQUFLdDdDLEVBQUUsS0FBSyxLQUFLLElBQUdrRixFQUFFdzVCLElBQUksSUFBSSxDQUFDLEVBQ3pUc2QsR0FBR3ZuRSxVQUFVOG5FLDJCQUEyQixTQUFTdjhDLEdBQUcsR0FBR0EsRUFBRSxDQUFDLElBQUlrRixFQUFFa3BCLEtBQUtwdUIsRUFBRSxDQUFDcXZCLFVBQVUsS0FBS2oxQixPQUFPNEYsRUFBRTJ2QixTQUFTenFCLEdBQUcsSUFBSSxJQUFJNE0sRUFBRSxFQUFFQSxFQUFFZ2QsR0FBR3A3QyxRQUFRLElBQUl3eEIsR0FBR0EsRUFBRTRwQixHQUFHaGQsR0FBRzZkLFNBQVM3ZCxLQUFLZ2QsR0FBR2pkLE9BQU9DLEVBQUUsRUFBRTlSLEdBQUcsSUFBSThSLEdBQUcyZCxHQUFHenZCLEVBQUUsQ0FBQyxFQUVYaXVCLEdBQUcsU0FBU2p1QixHQUFHLE9BQU9BLEVBQUV6c0IsS0FBSyxLQUFLLEVBQUUsSUFBSTJ4QixFQUFFbEYsRUFBRWtwQixVQUFVLEdBQUdoa0IsRUFBRXhnQixRQUFRK2xDLGNBQWNtRixhQUFhLENBQUMsSUFBSTlkLEVBQUVtYixHQUFHL25CLEVBQUVpb0IsY0FBYyxJQUFJcmIsSUFBSWdjLEdBQUc1b0IsRUFBSSxFQUFGNE0sR0FBSzBtQyxHQUFHdHpDLEVBQUV1bUIsTUFBSyxJQUFPLEVBQUZvYixNQUFPMk4sR0FBRy9vQixLQUFJLElBQUk2VyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUd5WCxJQUFHLFdBQVcsSUFBSTcwQyxFQUFFNGdDLEdBQUc5bEMsRUFBRSxHQUFHLEdBQUcsT0FBT2tGLEVBQUUsQ0FBQyxJQUFJNE0sRUFBRTQxQixLQUFJRSxHQUFHMWlDLEVBQUVsRixFQUFFLEVBQUU4UixFQUFFLENBQUMsSUFBRzJwQyxHQUFHejdDLEVBQUUsR0FBRyxFQUMvYmt1QixHQUFHLFNBQVNsdUIsR0FBRyxHQUFHLEtBQUtBLEVBQUV6c0IsSUFBSSxDQUFDLElBQUkyeEIsRUFBRTRnQyxHQUFHOWxDLEVBQUUsV0FBYyxPQUFPa0YsR0FBYTBpQyxHQUFHMWlDLEVBQUVsRixFQUFFLFVBQVgwbkMsTUFBd0IrVCxHQUFHejdDLEVBQUUsVUFBVSxDQUFDLEVBQUVtdUIsR0FBRyxTQUFTbnVCLEdBQUcsR0FBRyxLQUFLQSxFQUFFenNCLElBQUksQ0FBQyxJQUFJMnhCLEVBQUV5aUMsR0FBRzNuQyxHQUFHOFIsRUFBRWcwQixHQUFHOWxDLEVBQUVrRixHQUFNLE9BQU80TSxHQUFhODFCLEdBQUc5MUIsRUFBRTlSLEVBQUVrRixFQUFYd2lDLE1BQWdCK1QsR0FBR3o3QyxFQUFFa0YsRUFBRSxDQUFDLEVBQUVrcEIsR0FBRyxXQUFXLE9BQU9MLEVBQUMsRUFBRU0sR0FBRyxTQUFTcnVCLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFaWMsR0FBRSxJQUFJLE9BQU9BLEdBQUUvdEIsRUFBRWtGLEdBQWUsQ0FBWCxRQUFRNm9CLEdBQUVqYyxDQUFDLENBQUMsRUFDbFMrVyxHQUFHLFNBQVM3b0IsRUFBRWtGLEVBQUU0TSxHQUFHLE9BQU81TSxHQUFHLElBQUssUUFBeUIsR0FBakJxZ0IsRUFBR3ZsQixFQUFFOFIsR0FBRzVNLEVBQUU0TSxFQUFFbDBCLEtBQVEsVUFBVWswQixFQUFFbDZCLE1BQU0sTUFBTXN0QixFQUFFLENBQUMsSUFBSTRNLEVBQUU5UixFQUFFOFIsRUFBRWg4QixZQUFZZzhCLEVBQUVBLEVBQUVoOEIsV0FBc0YsSUFBM0VnOEIsRUFBRUEsRUFBRXYxQixpQkFBaUIsY0FBY3FTLEtBQUtwVixVQUFVLEdBQUcwckIsR0FBRyxtQkFBdUJBLEVBQUUsRUFBRUEsRUFBRTRNLEVBQUVwK0IsT0FBT3d4QixJQUFJLENBQUMsSUFBSWhnQixFQUFFNHNCLEVBQUU1TSxHQUFHLEdBQUdoZ0IsSUFBSThhLEdBQUc5YSxFQUFFczNELE9BQU94OEMsRUFBRXc4QyxLQUFLLENBQUMsSUFBSTVtRSxFQUFFdXpDLEdBQUdqa0MsR0FBRyxJQUFJdFAsRUFBRSxNQUFNNlgsTUFBTXFYLEVBQUUsS0FBSzhmLEVBQUcxL0IsR0FBR3FnQyxFQUFHcmdDLEVBQUV0UCxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSyxXQUFXb3dDLEdBQUdobUIsRUFBRThSLEdBQUcsTUFBTSxJQUFLLFNBQW1CLE9BQVY1TSxFQUFFNE0sRUFBRXY3QixRQUFlb3ZDLEdBQUczbEIsSUFBSThSLEVBQUVvaUMsU0FBU2h2QyxHQUFFLEdBQUksRUFBRW9rQixHQUFHd3dCLEdBQUd2d0IsR0FBR3d3QixHQUNwYSxJQUFJMEMsR0FBRyxDQUFDQyx1QkFBc0IsRUFBR0MsT0FBTyxDQUFDMXpCLEdBQUdnUSxHQUFHOVAsR0FBR0MsR0FBR0MsR0FBR3l3QixLQUFLOEMsR0FBRyxDQUFDQyx3QkFBd0JudEIsR0FBR290QixXQUFXLEVBQUVoaUMsUUFBUSxTQUFTaWlDLG9CQUFvQixhQUMxSUMsR0FBRyxDQUFDRixXQUFXRixHQUFHRSxXQUFXaGlDLFFBQVE4aEMsR0FBRzloQyxRQUFRaWlDLG9CQUFvQkgsR0FBR0csb0JBQW9CRSxlQUFlTCxHQUFHSyxlQUFlQyxrQkFBa0IsS0FBS0MsNEJBQTRCLEtBQUtDLDRCQUE0QixLQUFLQyxjQUFjLEtBQUtDLHdCQUF3QixLQUFLQyx3QkFBd0IsS0FBS0MsZ0JBQWdCLEtBQUtDLG1CQUFtQixLQUFLQyxlQUFlLEtBQUtDLHFCQUFxQnY3QixFQUFHc29CLHVCQUF1QmtULHdCQUF3QixTQUFTNTlDLEdBQVcsT0FBTyxRQUFmQSxFQUFFNHFCLEdBQUc1cUIsSUFBbUIsS0FBS0EsRUFBRWtwQixTQUFTLEVBQUUyekIsd0JBQXdCRCxHQUFHQyx5QkFSak4sV0FBYyxPQUFPLElBQUksRUFTcFVnQiw0QkFBNEIsS0FBS0MsZ0JBQWdCLEtBQUtDLGFBQWEsS0FBS0Msa0JBQWtCLEtBQUtDLGdCQUFnQixLQUFLQyxrQkFBa0Isa0NBQWtDLEdBQUcsb0JBQXFCQywrQkFBK0IsQ0FBQyxJQUFJQyxHQUFHRCwrQkFBK0IsSUFBSUMsR0FBR0MsWUFBWUQsR0FBR0UsY0FBYyxJQUFJL3hCLEdBQUc2eEIsR0FBR0csT0FBT3ZCLElBQUl4d0IsR0FBRzR4QixFQUFZLENBQVQsTUFBTXArQyxJQUFHLENBQUMsQ0FBQ3BiLEVBQVF5OUIsbURBQW1EbzZCLEdBQzlZNzNELEVBQVE0NUQsYUFBYSxTQUFTeCtDLEVBQUVrRixHQUFHLElBQUk0TSxFQUFFLEVBQUUvVixVQUFVcm9CLGFBQVEsSUFBU3FvQixVQUFVLEdBQUdBLFVBQVUsR0FBRyxLQUFLLElBQUlrZ0QsR0FBRy8yQyxHQUFHLE1BQU16WCxNQUFNcVgsRUFBRSxNQUFNLE9BQU9zMkMsR0FBR3A3QyxFQUFFa0YsRUFBRSxLQUFLNE0sRUFBRSxFQUFFbHRCLEVBQVE2NUQsV0FBVyxTQUFTeitDLEVBQUVrRixHQUFHLElBQUkrMkMsR0FBR2o4QyxHQUFHLE1BQU12UyxNQUFNcVgsRUFBRSxNQUFNLElBQUlnTixHQUFFLEVBQUc1c0IsRUFBRSxHQUFHdFAsRUFBRWdtRSxHQUE0UCxPQUF6UCxNQUFPMTJDLEtBQWdCLElBQUtBLEVBQUV3NUMsc0JBQXNCNXNDLEdBQUUsUUFBSSxJQUFTNU0sRUFBRXVxQyxtQkFBbUJ2cUQsRUFBRWdnQixFQUFFdXFDLHVCQUFrQixJQUFTdnFDLEVBQUVzMUMscUJBQXFCNWtFLEVBQUVzdkIsRUFBRXMxQyxxQkFBcUJ0MUMsRUFBRWcyQyxHQUFHbDdDLEVBQUUsR0FBRSxFQUFHLEtBQUssRUFBSzhSLEVBQUUsRUFBRzVzQixFQUFFdFAsR0FBR29xQixFQUFFMCtCLElBQUl4NUIsRUFBRXhnQixRQUFRMDVDLEdBQUcsSUFBSXArQixFQUFFOG1CLFNBQVM5bUIsRUFBRWxxQixXQUFXa3FCLEdBQVUsSUFBSTg3QyxHQUFHNTJDLEVBQUUsRUFDcmZ0Z0IsRUFBUSs1RCxZQUFZLFNBQVMzK0MsR0FBRyxHQUFHLE1BQU1BLEVBQUUsT0FBTyxLQUFLLEdBQUcsSUFBSUEsRUFBRThtQixTQUFTLE9BQU85bUIsRUFBRSxJQUFJa0YsRUFBRWxGLEVBQUV3bkMsZ0JBQWdCLFFBQUcsSUFBU3RpQyxFQUFFLENBQUMsR0FBRyxtQkFBb0JsRixFQUFFNGQsT0FBTyxNQUFNbndCLE1BQU1xWCxFQUFFLE1BQWlDLE1BQTNCOUUsRUFBRTVwQixPQUFPNFosS0FBS2dRLEdBQUd0bUIsS0FBSyxLQUFXK1QsTUFBTXFYLEVBQUUsSUFBSTlFLEdBQUksQ0FBcUMsT0FBMUIsUUFBVkEsRUFBRTRxQixHQUFHMWxCLElBQWMsS0FBS2xGLEVBQUVrcEIsU0FBa0IsRUFBRXRrQyxFQUFRZzZELFVBQVUsU0FBUzUrQyxHQUFHLE9BQU8rNUMsR0FBRy81QyxFQUFFLEVBQUVwYixFQUFRbFEsUUFBUSxTQUFTc3JCLEVBQUVrRixFQUFFNE0sR0FBRyxJQUFJb3FDLEdBQUdoM0MsR0FBRyxNQUFNelgsTUFBTXFYLEVBQUUsTUFBTSxPQUFPczNDLEdBQUcsS0FBS3A4QyxFQUFFa0YsR0FBRSxFQUFHNE0sRUFBRSxFQUMvWWx0QixFQUFRaTZELFlBQVksU0FBUzcrQyxFQUFFa0YsRUFBRTRNLEdBQUcsSUFBSW1xQyxHQUFHajhDLEdBQUcsTUFBTXZTLE1BQU1xWCxFQUFFLE1BQU0sSUFBSTVmLEVBQUUsTUFBTTRzQixHQUFHQSxFQUFFZ3RDLGlCQUFpQixLQUFLbHBFLEdBQUUsRUFBR3FxQixFQUFFLEdBQUd5ZSxFQUFFazlCLEdBQXlPLEdBQXRPLE1BQU85cEMsS0FBZ0IsSUFBS0EsRUFBRTRzQyxzQkFBc0I5b0UsR0FBRSxRQUFJLElBQVNrOEIsRUFBRTI5QixtQkFBbUJ4dkMsRUFBRTZSLEVBQUUyOUIsdUJBQWtCLElBQVMzOUIsRUFBRTBvQyxxQkFBcUI5N0IsRUFBRTVNLEVBQUUwb0MscUJBQXFCdDFDLEVBQUVtMkMsR0FBR24yQyxFQUFFLEtBQUtsRixFQUFFLEVBQUUsTUFBTThSLEVBQUVBLEVBQUUsS0FBS2w4QixFQUFFLEVBQUdxcUIsRUFBRXllLEdBQUcxZSxFQUFFMCtCLElBQUl4NUIsRUFBRXhnQixRQUFRMDVDLEdBQUdwK0IsR0FBTTlhLEVBQUUsSUFBSThhLEVBQUUsRUFBRUEsRUFBRTlhLEVBQUV4UixPQUFPc3NCLElBQTJCcHFCLEdBQWhCQSxHQUFQazhCLEVBQUU1c0IsRUFBRThhLElBQU8rK0MsYUFBZ0JqdEMsRUFBRWt0QyxTQUFTLE1BQU05NUMsRUFBRSsxQyxnQ0FBZ0MvMUMsRUFBRSsxQyxnQ0FBZ0MsQ0FBQ25wQyxFQUFFbDhCLEdBQUdzdkIsRUFBRSsxQyxnQ0FBZ0NobkUsS0FBSzY5QixFQUN2aEJsOEIsR0FBRyxPQUFPLElBQUlvbUUsR0FBRzkyQyxFQUFFLEVBQUV0Z0IsRUFBUWc1QixPQUFPLFNBQVM1ZCxFQUFFa0YsRUFBRTRNLEdBQUcsSUFBSW9xQyxHQUFHaDNDLEdBQUcsTUFBTXpYLE1BQU1xWCxFQUFFLE1BQU0sT0FBT3MzQyxHQUFHLEtBQUtwOEMsRUFBRWtGLEdBQUUsRUFBRzRNLEVBQUUsRUFBRWx0QixFQUFRcTZELHVCQUF1QixTQUFTai9DLEdBQUcsSUFBSWs4QyxHQUFHbDhDLEdBQUcsTUFBTXZTLE1BQU1xWCxFQUFFLEtBQUssUUFBTzlFLEVBQUUyMUMsc0JBQXFCb0UsSUFBRyxXQUFXcUMsR0FBRyxLQUFLLEtBQUtwOEMsR0FBRSxHQUFHLFdBQVdBLEVBQUUyMUMsb0JBQW9CLEtBQUszMUMsRUFBRTArQixJQUFJLElBQUksR0FBRSxLQUFHLEVBQU0sRUFBRTk1QyxFQUFRczZELHdCQUF3QnBGLEdBQy9VbDFELEVBQVF1NkQsb0NBQW9DLFNBQVNuL0MsRUFBRWtGLEVBQUU0TSxFQUFFNXNCLEdBQUcsSUFBSWczRCxHQUFHcHFDLEdBQUcsTUFBTXJrQixNQUFNcVgsRUFBRSxNQUFNLEdBQUcsTUFBTTlFLFFBQUcsSUFBU0EsRUFBRXduQyxnQkFBZ0IsTUFBTS81QyxNQUFNcVgsRUFBRSxLQUFLLE9BQU9zM0MsR0FBR3A4QyxFQUFFa0YsRUFBRTRNLEdBQUUsRUFBRzVzQixFQUFFLEVBQUVOLEVBQVFrMkIsUUFBUSw2RENoVTdMLElBQUlqVyxFQUFJLEVBQVEsTUFFZGpnQixFQUFRNjVELFdBQWE1NUMsRUFBRTQ1QyxXQUN2Qjc1RCxFQUFRaTZELFlBQWNoNkMsRUFBRWc2QywwQ0NIMUIsU0FBU08sSUFFUCxHQUM0QyxvQkFBbkNqQixnQ0FDNEMsbUJBQTVDQSwrQkFBK0JpQixTQWN4QyxJQUVFakIsK0JBQStCaUIsU0FBU0EsRUFLMUMsQ0FKRSxNQUFPdHhDLEdBR1BoVyxRQUFRaEssTUFBTWdnQixFQUNoQixDQUNGLENBS0VzeEMsR0FDQW4wQyxFQUFPcm1CLFFBQVUsRUFBakIsaUNDekJpQjQ1QixPQUFPQyxJQUFJLGlCQUFtQkQsT0FBT0MsSUFBSSxnQkFBa0JELE9BQU9DLElBQUksa0JBQW9CRCxPQUFPQyxJQUFJLHFCQUF1QkQsT0FBT0MsSUFBSSxrQkFBb0JELE9BQU9DLElBQUksa0JBQW9CRCxPQUFPQyxJQUFJLGlCQUFtQkQsT0FBT0MsSUFBSSx3QkFBMEJELE9BQU9DLElBQUkscUJBQXVCRCxPQUFPQyxJQUFJLGtCQUFvQkQsT0FBT0MsSUFBSSx1QkFBeUJELE9BQU9DLElBQUksY0FBZ0JELE9BQU9DLElBQUksY0FBZ0JELE9BQU9DLElBQUksbUJBQXVCRCxPQUFPQyxJQUFJLHVEQ050ZCxxQ0NNVyxJQUFJeGUsRUFBRSxFQUFRLE1BQVMva0IsRUFBRXNqQyxPQUFPQyxJQUFJLGlCQUFpQjFlLEVBQUV5ZSxPQUFPQyxJQUFJLGtCQUFrQjVaLEVBQUV6dUIsT0FBTzNCLFVBQVVrUixlQUFld1osRUFBRWMsRUFBRW9pQixtREFBbUR1dUIsa0JBQWtCOXJDLEVBQUUsQ0FBQ3Z3QixLQUFJLEVBQUdpSyxLQUFJLEVBQUc2Z0UsUUFBTyxFQUFHQyxVQUFTLEdBQ2hQLFNBQVMzZ0MsRUFBRTdNLEVBQUU5UixFQUFFMGUsR0FBRyxJQUFJeFosRUFBRWhnQixFQUFFLENBQUMsRUFBRXRQLEVBQUUsS0FBS2dKLEVBQUUsS0FBaUYsSUFBSXNtQixVQUFoRixJQUFTd1osSUFBSTlvQyxFQUFFLEdBQUc4b0MsUUFBRyxJQUFTMWUsRUFBRXpyQixNQUFNcUIsRUFBRSxHQUFHb3FCLEVBQUV6ckIsVUFBSyxJQUFTeXJCLEVBQUV4aEIsTUFBTUksRUFBRW9oQixFQUFFeGhCLEtBQWN3aEIsRUFBRTZFLEVBQUVwb0IsS0FBS3VqQixFQUFFa0YsS0FBS0osRUFBRW5mLGVBQWV1ZixLQUFLaGdCLEVBQUVnZ0IsR0FBR2xGLEVBQUVrRixJQUFJLEdBQUc0TSxHQUFHQSxFQUFFOWQsYUFBYSxJQUFJa1IsS0FBS2xGLEVBQUU4UixFQUFFOWQsa0JBQWUsSUFBUzlPLEVBQUVnZ0IsS0FBS2hnQixFQUFFZ2dCLEdBQUdsRixFQUFFa0YsSUFBSSxNQUFNLENBQUMyWixTQUFTM2pDLEVBQUV0RCxLQUFLazZCLEVBQUV2OUIsSUFBSXFCLEVBQUU0SSxJQUFJSSxFQUFFL0csTUFBTXFOLEVBQUUyakQsT0FBTzFwQyxFQUFFemEsUUFBUSxDQUFDRSxFQUFRNFgsU0FBU3VELEVBQUVuYixFQUFRSyxJQUFJMDVCLEVBQUUvNUIsRUFBUTI2RCxLQUFLNWdDLDZCQ0Q3VixJQUFJNWUsRUFBRXllLE9BQU9DLElBQUksaUJBQWlCdGYsRUFBRXFmLE9BQU9DLElBQUksZ0JBQWdCM1osRUFBRTBaLE9BQU9DLElBQUksa0JBQWtCRSxFQUFFSCxPQUFPQyxJQUFJLHFCQUFxQnhaLEVBQUV1WixPQUFPQyxJQUFJLGtCQUFrQnpaLEVBQUV3WixPQUFPQyxJQUFJLGtCQUFrQkcsRUFBRUosT0FBT0MsSUFBSSxpQkFBaUIzRyxFQUFFMEcsT0FBT0MsSUFBSSxxQkFBcUJ2aUIsRUFBRXNpQixPQUFPQyxJQUFJLGtCQUFrQnRqQyxFQUFFcWpDLE9BQU9DLElBQUksY0FBY3JqQyxFQUFFb2pDLE9BQU9DLElBQUksY0FBY3BqQyxFQUFFbWpDLE9BQU80RSxTQUNyV3FJLEVBQUUsQ0FBQzhiLFVBQVUsV0FBVyxPQUFNLENBQUUsRUFBRU8sbUJBQW1CLFdBQVcsRUFBRUQsb0JBQW9CLFdBQVcsRUFBRUosZ0JBQWdCLFdBQVcsR0FBRzFaLEVBQUUzM0MsT0FBT0MsT0FBT3luRCxFQUFFLENBQUMsRUFBRSxTQUFTbUQsRUFBRWpoQyxFQUFFa0YsRUFBRXR2QixHQUFHdkMsS0FBS3dFLE1BQU1tb0IsRUFBRTNzQixLQUFLZzlCLFFBQVFuTCxFQUFFN3hCLEtBQUsrekQsS0FBS3RKLEVBQUV6cUQsS0FBSzgwRCxRQUFRdnlELEdBQUc2MUMsQ0FBQyxDQUN3SSxTQUFTK1MsSUFBSSxDQUF5QixTQUFTMEMsRUFBRWxoQyxFQUFFa0YsRUFBRXR2QixHQUFHdkMsS0FBS3dFLE1BQU1tb0IsRUFBRTNzQixLQUFLZzlCLFFBQVFuTCxFQUFFN3hCLEtBQUsrekQsS0FBS3RKLEVBQUV6cUQsS0FBSzgwRCxRQUFRdnlELEdBQUc2MUMsQ0FBQyxDQUR4UHdWLEVBQUV4c0QsVUFBVXFtRSxpQkFBaUIsQ0FBQyxFQUNwUTdaLEVBQUV4c0QsVUFBVStxRSxTQUFTLFNBQVN4L0MsRUFBRWtGLEdBQUcsR0FBRyxpQkFBa0JsRixHQUFHLG1CQUFvQkEsR0FBRyxNQUFNQSxFQUFFLE1BQU12UyxNQUFNLHlIQUF5SHBhLEtBQUs4MEQsUUFBUVYsZ0JBQWdCcDBELEtBQUsyc0IsRUFBRWtGLEVBQUUsV0FBVyxFQUFFKzdCLEVBQUV4c0QsVUFBVWdyRSxZQUFZLFNBQVN6L0MsR0FBRzNzQixLQUFLODBELFFBQVFMLG1CQUFtQnowRCxLQUFLMnNCLEVBQUUsY0FBYyxFQUFnQncrQixFQUFFL3BELFVBQVV3c0QsRUFBRXhzRCxVQUFzRixJQUFJMnNELEVBQUVGLEVBQUV6c0QsVUFBVSxJQUFJK3BELEVBQ3JmNEMsRUFBRW40QixZQUFZaTRCLEVBQUVuVCxFQUFFcVQsRUFBRUgsRUFBRXhzRCxXQUFXMnNELEVBQUU2RyxzQkFBcUIsRUFBRyxJQUFJNUUsRUFBRTdtRCxNQUFNc0csUUFBUXk3QyxFQUFFbm9ELE9BQU8zQixVQUFVa1IsZUFBZWtoRCxFQUFFLENBQUNuaUQsUUFBUSxNQUFNZ2pELEVBQUUsQ0FBQ256RCxLQUFJLEVBQUdpSyxLQUFJLEVBQUc2Z0UsUUFBTyxFQUFHQyxVQUFTLEdBQ3RLLFNBQVNuVixFQUFFbnFDLEVBQUVrRixFQUFFdHZCLEdBQUcsSUFBSXNQLEVBQUU0c0IsRUFBRSxDQUFDLEVBQUU1MkIsRUFBRSxLQUFLMEQsRUFBRSxLQUFLLEdBQUcsTUFBTXNtQixFQUFFLElBQUloZ0IsVUFBSyxJQUFTZ2dCLEVBQUUxbUIsTUFBTUksRUFBRXNtQixFQUFFMW1CLFVBQUssSUFBUzBtQixFQUFFM3dCLE1BQU0yRyxFQUFFLEdBQUdncUIsRUFBRTN3QixLQUFLMndCLEVBQUVxNUIsRUFBRTloRCxLQUFLeW9CLEVBQUVoZ0IsS0FBS3dpRCxFQUFFL2hELGVBQWVULEtBQUs0c0IsRUFBRTVzQixHQUFHZ2dCLEVBQUVoZ0IsSUFBSSxJQUFJdzVCLEVBQUUzaUIsVUFBVXJvQixPQUFPLEVBQUUsR0FBRyxJQUFJZ3JDLEVBQUU1TSxFQUFFaDZCLFNBQVNsQyxPQUFPLEdBQUcsRUFBRThvQyxFQUFFLENBQUMsSUFBSSxJQUFJemUsRUFBRXpqQixNQUFNa2lDLEdBQUc3WixFQUFFLEVBQUVBLEVBQUU2WixFQUFFN1osSUFBSTVFLEVBQUU0RSxHQUFHOUksVUFBVThJLEVBQUUsR0FBR2lOLEVBQUVoNkIsU0FBU21vQixDQUFDLENBQUMsR0FBR0QsR0FBR0EsRUFBRWhNLGFBQWEsSUFBSTlPLEtBQUt3NUIsRUFBRTFlLEVBQUVoTSxrQkFBZSxJQUFTOGQsRUFBRTVzQixLQUFLNHNCLEVBQUU1c0IsR0FBR3c1QixFQUFFeDVCLElBQUksTUFBTSxDQUFDMjVCLFNBQVM5ZSxFQUFFbm9CLEtBQUtvb0IsRUFBRXpyQixJQUFJMkcsRUFBRXNELElBQUlJLEVBQUUvRyxNQUFNaTZCLEVBQUUrMkIsT0FBT2hDLEVBQUVuaUQsUUFBUSxDQUNoVixTQUFTb21ELEVBQUU5cUMsR0FBRyxNQUFNLGlCQUFrQkEsR0FBRyxPQUFPQSxHQUFHQSxFQUFFNmUsV0FBVzllLENBQUMsQ0FBb0csSUFBSWdyQyxFQUFFLE9BQU8sU0FBU0ssRUFBRXByQyxFQUFFa0YsR0FBRyxNQUFNLGlCQUFrQmxGLEdBQUcsT0FBT0EsR0FBRyxNQUFNQSxFQUFFenJCLElBQTdLLFNBQWdCeXJCLEdBQUcsSUFBSWtGLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxNQUFNLE1BQU0sSUFBSWxGLEVBQUV4cEIsUUFBUSxTQUFRLFNBQVN3cEIsR0FBRyxPQUFPa0YsRUFBRWxGLEVBQUUsR0FBRSxDQUErRTAvQyxDQUFPLEdBQUcxL0MsRUFBRXpyQixLQUFLMndCLEVBQUVwbUIsU0FBUyxHQUFHLENBQy9XLFNBQVNpdUQsRUFBRS9zQyxFQUFFa0YsRUFBRXR2QixFQUFFc1AsRUFBRTRzQixHQUFHLElBQUk1MkIsU0FBUzhrQixFQUFLLGNBQWM5a0IsR0FBRyxZQUFZQSxJQUFFOGtCLEVBQUUsTUFBSyxJQUFJcGhCLEdBQUUsRUFBRyxHQUFHLE9BQU9vaEIsRUFBRXBoQixHQUFFLE9BQVEsT0FBTzFELEdBQUcsSUFBSyxTQUFTLElBQUssU0FBUzBELEdBQUUsRUFBRyxNQUFNLElBQUssU0FBUyxPQUFPb2hCLEVBQUU2ZSxVQUFVLEtBQUs5ZSxFQUFFLEtBQUtaLEVBQUV2Z0IsR0FBRSxHQUFJLEdBQUdBLEVBQUUsT0FBV2t6QixFQUFFQSxFQUFObHpCLEVBQUVvaEIsR0FBU0EsRUFBRSxLQUFLOWEsRUFBRSxJQUFJa21ELEVBQUV4c0QsRUFBRSxHQUFHc0csRUFBRW0rQyxFQUFFdnhCLElBQUlsOEIsRUFBRSxHQUFHLE1BQU1vcUIsSUFBSXBxQixFQUFFb3FCLEVBQUV4cEIsUUFBUXUwRCxFQUFFLE9BQU8sS0FBS2dDLEVBQUVqN0IsRUFBRTVNLEVBQUV0dkIsRUFBRSxJQUFHLFNBQVNvcUIsR0FBRyxPQUFPQSxDQUFDLEtBQUksTUFBTThSLElBQUlnNUIsRUFBRWg1QixLQUFLQSxFQURuVyxTQUFXOVIsRUFBRWtGLEdBQUcsTUFBTSxDQUFDMlosU0FBUzllLEVBQUVub0IsS0FBS29vQixFQUFFcG9CLEtBQUtyRCxJQUFJMndCLEVBQUUxbUIsSUFBSXdoQixFQUFFeGhCLElBQUkzRyxNQUFNbW9CLEVBQUVub0IsTUFBTWd4RCxPQUFPN29DLEVBQUU2b0MsT0FBTyxDQUN5UWdDLENBQUUvNEIsRUFBRWw4QixJQUFJazhCLEVBQUV2OUIsS0FBS3FLLEdBQUdBLEVBQUVySyxNQUFNdTlCLEVBQUV2OUIsSUFBSSxJQUFJLEdBQUd1OUIsRUFBRXY5QixLQUFLaUMsUUFBUXUwRCxFQUFFLE9BQU8sS0FBSy9xQyxJQUFJa0YsRUFBRWp4QixLQUFLNjlCLElBQUksRUFBeUIsR0FBdkJsekIsRUFBRSxFQUFFc0csRUFBRSxLQUFLQSxFQUFFLElBQUlBLEVBQUUsSUFBT20rQyxFQUFFcmpDLEdBQUcsSUFBSSxJQUFJMGUsRUFBRSxFQUFFQSxFQUFFMWUsRUFBRXRzQixPQUFPZ3JDLElBQUksQ0FDL2UsSUFBSXplLEVBQUUvYSxFQUFFa21ELEVBRHdlbHdELEVBQ3JmOGtCLEVBQUUwZSxHQUFlQSxHQUFHOS9CLEdBQUdtdUQsRUFBRTd4RCxFQUFFZ3FCLEVBQUV0dkIsRUFBRXFxQixFQUFFNlIsRUFBRSxNQUFNLEdBQUc3UixFQVBzVSxTQUFXRCxHQUFHLE9BQUcsT0FBT0EsR0FBRyxpQkFBa0JBLEVBQVMsS0FBc0MsbUJBQWpDQSxFQUFFM2tCLEdBQUcya0IsRUFBRTNrQixJQUFJMmtCLEVBQUUsZUFBMENBLEVBQUUsSUFBSSxDQU81YjhlLENBQUU5ZSxHQUFHLG1CQUFvQkMsRUFBRSxJQUFJRCxFQUFFQyxFQUFFeGpCLEtBQUt1akIsR0FBRzBlLEVBQUUsSUFBSXhqQyxFQUFFOGtCLEVBQUU5bkIsUUFBUXEwQixNQUE2QjN0QixHQUFHbXVELEVBQTFCN3hELEVBQUVBLEVBQUUzRSxNQUEwQjJ1QixFQUFFdHZCLEVBQXRCcXFCLEVBQUUvYSxFQUFFa21ELEVBQUVsd0QsRUFBRXdqQyxLQUFrQjVNLFFBQVEsR0FBRyxXQUFXNTJCLEVBQUUsTUFBTWdxQixFQUFFaHZCLE9BQU84cEIsR0FBR3ZTLE1BQU0sbURBQW1ELG9CQUFvQnlYLEVBQUUscUJBQXFCOXVCLE9BQU80WixLQUFLZ1EsR0FBR3RtQixLQUFLLE1BQU0sSUFBSXdyQixHQUFHLDZFQUE2RSxPQUFPdG1CLENBQUMsQ0FDelosU0FBU2sxRCxFQUFFOXpDLEVBQUVrRixFQUFFdHZCLEdBQUcsR0FBRyxNQUFNb3FCLEVBQUUsT0FBT0EsRUFBRSxJQUFJOWEsRUFBRSxHQUFHNHNCLEVBQUUsRUFBbUQsT0FBakRpN0IsRUFBRS9zQyxFQUFFOWEsRUFBRSxHQUFHLElBQUcsU0FBUzhhLEdBQUcsT0FBT2tGLEVBQUV6b0IsS0FBSzdHLEVBQUVvcUIsRUFBRThSLElBQUksSUFBVTVzQixDQUFDLENBQUMsU0FBU21YLEVBQUUyRCxHQUFHLElBQUksSUFBSUEsRUFBRTIvQyxRQUFRLENBQUMsSUFBSXo2QyxFQUFFbEYsRUFBRTQvQyxTQUFRMTZDLEVBQUVBLEtBQU1vTSxNQUFLLFNBQVNwTSxHQUFNLElBQUlsRixFQUFFMi9DLFVBQVUsSUFBSTMvQyxFQUFFMi9DLFVBQVEzL0MsRUFBRTIvQyxRQUFRLEVBQUUzL0MsRUFBRTQvQyxRQUFRMTZDLEVBQUMsSUFBRSxTQUFTQSxHQUFNLElBQUlsRixFQUFFMi9DLFVBQVUsSUFBSTMvQyxFQUFFMi9DLFVBQVEzL0MsRUFBRTIvQyxRQUFRLEVBQUUzL0MsRUFBRTQvQyxRQUFRMTZDLEVBQUMsS0FBSSxJQUFJbEYsRUFBRTIvQyxVQUFVMy9DLEVBQUUyL0MsUUFBUSxFQUFFMy9DLEVBQUU0L0MsUUFBUTE2QyxFQUFFLENBQUMsR0FBRyxJQUFJbEYsRUFBRTIvQyxRQUFRLE9BQU8zL0MsRUFBRTQvQyxRQUFRNTZELFFBQVEsTUFBTWdiLEVBQUU0L0MsT0FBUSxDQUM1WixJQUFJaEwsRUFBRSxDQUFDbHdELFFBQVEsTUFBTXF3RCxFQUFFLENBQUNwL0MsV0FBVyxNQUFNcy9DLEVBQUUsQ0FBQ3ZLLHVCQUF1QmtLLEVBQUV0a0Isd0JBQXdCeWtCLEVBQUVuRSxrQkFBa0IvSixHQUFHamlELEVBQVFpN0QsU0FBUyxDQUFDMWpFLElBQUkyM0QsRUFBRWwvRCxRQUFRLFNBQVNvckIsRUFBRWtGLEVBQUV0dkIsR0FBR2srRCxFQUFFOXpDLEdBQUUsV0FBV2tGLEVBQUVsSixNQUFNM29CLEtBQUswb0IsVUFBVSxHQUFFbm1CLEVBQUUsRUFBRWdELE1BQU0sU0FBU29uQixHQUFHLElBQUlrRixFQUFFLEVBQXVCLE9BQXJCNHVDLEVBQUU5ekMsR0FBRSxXQUFXa0YsR0FBRyxJQUFVQSxDQUFDLEVBQUVzVixRQUFRLFNBQVN4YSxHQUFHLE9BQU84ekMsRUFBRTl6QyxHQUFFLFNBQVNBLEdBQUcsT0FBT0EsQ0FBQyxLQUFJLEVBQUUsRUFBRThCLEtBQUssU0FBUzlCLEdBQUcsSUFBSThxQyxFQUFFOXFDLEdBQUcsTUFBTXZTLE1BQU0seUVBQXlFLE9BQU91UyxDQUFDLEdBQUdwYixFQUFRd1MsVUFBVTZwQyxFQUFFcjhDLEVBQVE0WCxTQUFTc0ksRUFDbmVsZ0IsRUFBUTA2QixTQUFTcmEsRUFBRXJnQixFQUFRazdELGNBQWM1ZSxFQUFFdDhDLEVBQVEyNkIsV0FBV1osRUFBRS81QixFQUFRNDZCLFNBQVN0akIsRUFBRXRYLEVBQVF5OUIsbURBQW1ENHlCLEVBQzlJcndELEVBQVFtN0QsYUFBYSxTQUFTLy9DLEVBQUVrRixFQUFFdHZCLEdBQUcsR0FBRyxNQUFPb3FCLEVBQWMsTUFBTXZTLE1BQU0saUZBQWlGdVMsRUFBRSxLQUFLLElBQUk5YSxFQUFFNm9DLEVBQUUsQ0FBQyxFQUFFL3RCLEVBQUVub0IsT0FBT2k2QixFQUFFOVIsRUFBRXpyQixJQUFJMkcsRUFBRThrQixFQUFFeGhCLElBQUlJLEVBQUVvaEIsRUFBRTZvQyxPQUFPLEdBQUcsTUFBTTNqQyxFQUFFLENBQW9FLFFBQW5FLElBQVNBLEVBQUUxbUIsTUFBTXRELEVBQUVncUIsRUFBRTFtQixJQUFJSSxFQUFFaW9ELEVBQUVuaUQsY0FBUyxJQUFTd2dCLEVBQUUzd0IsTUFBTXU5QixFQUFFLEdBQUc1TSxFQUFFM3dCLEtBQVF5ckIsRUFBRXBvQixNQUFNb29CLEVBQUVwb0IsS0FBS29jLGFBQWEsSUFBSTBxQixFQUFFMWUsRUFBRXBvQixLQUFLb2MsYUFBYSxJQUFJaU0sS0FBS2lGLEVBQUVxNUIsRUFBRTloRCxLQUFLeW9CLEVBQUVqRixLQUFLeW5DLEVBQUUvaEQsZUFBZXNhLEtBQUsvYSxFQUFFK2EsUUFBRyxJQUFTaUYsRUFBRWpGLFNBQUksSUFBU3llLEVBQUVBLEVBQUV6ZSxHQUFHaUYsRUFBRWpGLEdBQUcsQ0FBQyxJQUFJQSxFQUFFbEUsVUFBVXJvQixPQUFPLEVBQUUsR0FBRyxJQUFJdXNCLEVBQUUvYSxFQUFFcE4sU0FBU2xDLE9BQU8sR0FBRyxFQUFFcXFCLEVBQUUsQ0FBQ3llLEVBQUVsaUMsTUFBTXlqQixHQUNyZixJQUFJLElBQUk0RSxFQUFFLEVBQUVBLEVBQUU1RSxFQUFFNEUsSUFBSTZaLEVBQUU3WixHQUFHOUksVUFBVThJLEVBQUUsR0FBRzNmLEVBQUVwTixTQUFTNG1DLENBQUMsQ0FBQyxNQUFNLENBQUNHLFNBQVM5ZSxFQUFFbm9CLEtBQUtvb0IsRUFBRXBvQixLQUFLckQsSUFBSXU5QixFQUFFdHpCLElBQUl0RCxFQUFFckQsTUFBTXFOLEVBQUUyakQsT0FBT2pxRCxFQUFFLEVBQUVnRyxFQUFRMUcsY0FBYyxTQUFTOGhCLEdBQXFLLE9BQWxLQSxFQUFFLENBQUM2ZSxTQUFTRCxFQUFFb21CLGNBQWNobEMsRUFBRWdnRCxlQUFlaGdELEVBQUVpZ0QsYUFBYSxFQUFFN2hFLFNBQVMsS0FBSzhoRSxTQUFTLEtBQUtDLGNBQWMsS0FBS0MsWUFBWSxPQUFRaGlFLFNBQVMsQ0FBQ3lnQyxTQUFTN1osRUFBRWdmLFNBQVNoa0IsR0FBVUEsRUFBRWtnRCxTQUFTbGdELENBQUMsRUFBRXBiLEVBQVE1UCxjQUFjbTFELEVBQUV2bEQsRUFBUXk3RCxjQUFjLFNBQVNyZ0QsR0FBRyxJQUFJa0YsRUFBRWlsQyxFQUFFcDZCLEtBQUssS0FBSy9QLEdBQVksT0FBVGtGLEVBQUV0dEIsS0FBS29vQixFQUFTa0YsQ0FBQyxFQUFFdGdCLEVBQVEwN0QsVUFBVSxXQUFXLE1BQU0sQ0FBQzU3RCxRQUFRLEtBQUssRUFDOWRFLEVBQVFyRyxXQUFXLFNBQVN5aEIsR0FBRyxNQUFNLENBQUM2ZSxTQUFTL0csRUFBRThGLE9BQU81ZCxFQUFFLEVBQUVwYixFQUFRMjdELGVBQWV6VixFQUFFbG1ELEVBQVE0N0QsS0FBSyxTQUFTeGdELEdBQUcsTUFBTSxDQUFDNmUsU0FBU3pqQyxFQUFFNm9DLFNBQVMsQ0FBQzA3QixTQUFTLEVBQUVDLFFBQVE1L0MsR0FBR2trQixNQUFNN25CLEVBQUUsRUFBRXpYLEVBQVE2N0QsS0FBSyxTQUFTemdELEVBQUVrRixHQUFHLE1BQU0sQ0FBQzJaLFNBQVMxakMsRUFBRXZELEtBQUtvb0IsRUFBRXVkLGFBQVEsSUFBU3JZLEVBQUUsS0FBS0EsRUFBRSxFQUFFdGdCLEVBQVE4N0QsZ0JBQWdCLFNBQVMxZ0QsR0FBRyxJQUFJa0YsRUFBRTZ2QyxFQUFFcC9DLFdBQVdvL0MsRUFBRXAvQyxXQUFXLENBQUMsRUFBRSxJQUFJcUssR0FBMEIsQ0FBdEIsUUFBUSswQyxFQUFFcC9DLFdBQVd1UCxDQUFDLENBQUMsRUFBRXRnQixFQUFRKzdELGFBQWEsV0FBVyxNQUFNbHpELE1BQU0sMkRBQTRELEVBQzFjN0ksRUFBUWdxRCxZQUFZLFNBQVM1dUMsRUFBRWtGLEdBQUcsT0FBTzB2QyxFQUFFbHdELFFBQVFrcUQsWUFBWTV1QyxFQUFFa0YsRUFBRSxFQUFFdGdCLEVBQVFuRyxXQUFXLFNBQVN1aEIsR0FBRyxPQUFPNDBDLEVBQUVsd0QsUUFBUWpHLFdBQVd1aEIsRUFBRSxFQUFFcGIsRUFBUXVxRCxjQUFjLFdBQVcsRUFBRXZxRCxFQUFRd3FELGlCQUFpQixTQUFTcHZDLEdBQUcsT0FBTzQwQyxFQUFFbHdELFFBQVEwcUQsaUJBQWlCcHZDLEVBQUUsRUFBRXBiLEVBQVFpcUQsVUFBVSxTQUFTN3VDLEVBQUVrRixHQUFHLE9BQU8wdkMsRUFBRWx3RCxRQUFRbXFELFVBQVU3dUMsRUFBRWtGLEVBQUUsRUFBRXRnQixFQUFROGxCLE1BQU0sV0FBVyxPQUFPa3FDLEVBQUVsd0QsUUFBUWdtQixPQUFPLEVBQUU5bEIsRUFBUWtxRCxvQkFBb0IsU0FBUzl1QyxFQUFFa0YsRUFBRXR2QixHQUFHLE9BQU9nL0QsRUFBRWx3RCxRQUFRb3FELG9CQUFvQjl1QyxFQUFFa0YsRUFBRXR2QixFQUFFLEVBQzdiZ1AsRUFBUWQsbUJBQW1CLFNBQVNrYyxFQUFFa0YsR0FBRyxPQUFPMHZDLEVBQUVsd0QsUUFBUVosbUJBQW1Ca2MsRUFBRWtGLEVBQUUsRUFBRXRnQixFQUFRWCxnQkFBZ0IsU0FBUytiLEVBQUVrRixHQUFHLE9BQU8wdkMsRUFBRWx3RCxRQUFRVCxnQkFBZ0IrYixFQUFFa0YsRUFBRSxFQUFFdGdCLEVBQVFtcUQsUUFBUSxTQUFTL3VDLEVBQUVrRixHQUFHLE9BQU8wdkMsRUFBRWx3RCxRQUFRcXFELFFBQVEvdUMsRUFBRWtGLEVBQUUsRUFBRXRnQixFQUFRb3FELFdBQVcsU0FBU2h2QyxFQUFFa0YsRUFBRXR2QixHQUFHLE9BQU9nL0QsRUFBRWx3RCxRQUFRc3FELFdBQVdodkMsRUFBRWtGLEVBQUV0dkIsRUFBRSxFQUFFZ1AsRUFBUXFxRCxPQUFPLFNBQVNqdkMsR0FBRyxPQUFPNDBDLEVBQUVsd0QsUUFBUXVxRCxPQUFPanZDLEVBQUUsRUFBRXBiLEVBQVFzcUQsU0FBUyxTQUFTbHZDLEdBQUcsT0FBTzQwQyxFQUFFbHdELFFBQVF3cUQsU0FBU2x2QyxFQUFFLEVBQUVwYixFQUFRMnFELHFCQUFxQixTQUFTdnZDLEVBQUVrRixFQUFFdHZCLEdBQUcsT0FBT2cvRCxFQUFFbHdELFFBQVE2cUQscUJBQXFCdnZDLEVBQUVrRixFQUFFdHZCLEVBQUUsRUFDL2VnUCxFQUFReXFELGNBQWMsV0FBVyxPQUFPdUYsRUFBRWx3RCxRQUFRMnFELGVBQWUsRUFBRXpxRCxFQUFRazJCLFFBQVEsc0NDdEJqRjdQLEVBQU9ybUIsUUFBVSxFQUFqQixtQ0NBQXFtQixFQUFPcm1CLFFBQVUsRUFBakIsK0JDTVcsU0FBU3FiLEVBQUVELEVBQUVrRixHQUFHLElBQUk0TSxFQUFFOVIsRUFBRXRzQixPQUFPc3NCLEVBQUUvckIsS0FBS2l4QixHQUFHbEYsRUFBRSxLQUFLLEVBQUU4UixHQUFHLENBQUMsSUFBSTVzQixFQUFFNHNCLEVBQUUsSUFBSSxFQUFFbDhCLEVBQUVvcUIsRUFBRTlhLEdBQUcsS0FBRyxFQUFFdzVCLEVBQUU5b0MsRUFBRXN2QixJQUEwQixNQUFNbEYsRUFBN0JBLEVBQUU5YSxHQUFHZ2dCLEVBQUVsRixFQUFFOFIsR0FBR2w4QixFQUFFazhCLEVBQUU1c0IsQ0FBYyxDQUFDLENBQUMsU0FBU3RHLEVBQUVvaEIsR0FBRyxPQUFPLElBQUlBLEVBQUV0c0IsT0FBTyxLQUFLc3NCLEVBQUUsRUFBRSxDQUFDLFNBQVM5a0IsRUFBRThrQixHQUFHLEdBQUcsSUFBSUEsRUFBRXRzQixPQUFPLE9BQU8sS0FBSyxJQUFJd3hCLEVBQUVsRixFQUFFLEdBQUc4UixFQUFFOVIsRUFBRTJhLE1BQU0sR0FBRzdJLElBQUk1TSxFQUFFLENBQUNsRixFQUFFLEdBQUc4UixFQUFFOVIsRUFBRSxJQUFJLElBQUk5YSxFQUFFLEVBQUV0UCxFQUFFb3FCLEVBQUV0c0IsT0FBT3dvQixFQUFFdG1CLElBQUksRUFBRXNQLEVBQUVnWCxHQUFHLENBQUMsSUFBSTJJLEVBQUUsR0FBRzNmLEVBQUUsR0FBRyxFQUFFNm9DLEVBQUUvdEIsRUFBRTZFLEdBQUcxRixFQUFFMEYsRUFBRSxFQUFFMXBCLEVBQUU2a0IsRUFBRWIsR0FBRyxHQUFHLEVBQUV1ZixFQUFFcVAsRUFBRWpjLEdBQUczUyxFQUFFdnBCLEdBQUcsRUFBRThvQyxFQUFFdmpDLEVBQUU0eUMsSUFBSS90QixFQUFFOWEsR0FBRy9KLEVBQUU2a0IsRUFBRWIsR0FBRzJTLEVBQUU1c0IsRUFBRWlhLElBQUlhLEVBQUU5YSxHQUFHNm9DLEVBQUUvdEIsRUFBRTZFLEdBQUdpTixFQUFFNXNCLEVBQUUyZixPQUFRLE1BQUcxRixFQUFFdnBCLEdBQUcsRUFBRThvQyxFQUFFdmpDLEVBQUUyMkIsSUFBMEIsTUFBTTlSLEVBQTdCQSxFQUFFOWEsR0FBRy9KLEVBQUU2a0IsRUFBRWIsR0FBRzJTLEVBQUU1c0IsRUFBRWlhLENBQWFhLENBQUMsQ0FBQyxDQUFDLE9BQU9rRixDQUFDLENBQzNjLFNBQVN3WixFQUFFMWUsRUFBRWtGLEdBQUcsSUFBSTRNLEVBQUU5UixFQUFFNGdELFVBQVUxN0MsRUFBRTA3QyxVQUFVLE9BQU8sSUFBSTl1QyxFQUFFQSxFQUFFOVIsRUFBRStLLEdBQUc3RixFQUFFNkYsRUFBRSxDQUFDLEdBQUcsaUJBQWtCODFDLGFBQWEsbUJBQW9CQSxZQUFZaG9DLElBQUksQ0FBQyxJQUFJOVksRUFBRThnRCxZQUFZajhELEVBQVE4bUMsYUFBYSxXQUFXLE9BQU8zckIsRUFBRThZLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSS9ULEVBQUUyVCxLQUFLa0csRUFBRTdaLEVBQUUrVCxNQUFNajBCLEVBQVE4bUMsYUFBYSxXQUFXLE9BQU81bUIsRUFBRStULE1BQU04RixDQUFDLENBQUMsQ0FBQyxJQUFJMVosRUFBRSxHQUFHRCxFQUFFLEdBQUc0WixFQUFFLEVBQUU5RyxFQUFFLEtBQUsxOEIsRUFBRSxFQUFFQyxHQUFFLEVBQUd5akMsR0FBRSxFQUFHMk0sR0FBRSxFQUFHcVMsRUFBRSxtQkFBb0JoakMsV0FBV0EsV0FBVyxLQUFLbW1DLEVBQUUsbUJBQW9CcG1DLGFBQWFBLGFBQWEsS0FBSzJqQyxFQUFFLG9CQUFxQnNpQixhQUFhQSxhQUFhLEtBQ25ULFNBQVM1ZixFQUFFbGhDLEdBQUcsSUFBSSxJQUFJa0YsRUFBRXRtQixFQUFFb21CLEdBQUcsT0FBT0UsR0FBRyxDQUFDLEdBQUcsT0FBT0EsRUFBRTVyQixTQUFTNEIsRUFBRThwQixPQUFRLE1BQUdFLEVBQUU2N0MsV0FBVy9nRCxHQUFnRCxNQUE5QzlrQixFQUFFOHBCLEdBQUdFLEVBQUUwN0MsVUFBVTE3QyxFQUFFODdDLGVBQWUvZ0QsRUFBRWdGLEVBQUVDLEVBQWEsQ0FBQ0EsRUFBRXRtQixFQUFFb21CLEVBQUUsQ0FBQyxDQUFDLFNBQVNvOEIsRUFBRXBoQyxHQUFhLEdBQVZ5ckIsR0FBRSxFQUFHeVYsRUFBRWxoQyxJQUFPOGUsRUFBRSxHQUFHLE9BQU9sZ0MsRUFBRXFtQixHQUFHNlosR0FBRSxFQUFHdWtCLEVBQUU5RSxPQUFPLENBQUMsSUFBSXI1QixFQUFFdG1CLEVBQUVvbUIsR0FBRyxPQUFPRSxHQUFHMmhDLEVBQUV6RixFQUFFbDhCLEVBQUU2N0MsVUFBVS9nRCxFQUFFLENBQUMsQ0FDcmEsU0FBU3UrQixFQUFFditCLEVBQUVrRixHQUFHNFosR0FBRSxFQUFHMk0sSUFBSUEsR0FBRSxFQUFHd1YsRUFBRXlHLEdBQUdBLEdBQUcsR0FBR3JzRCxHQUFFLEVBQUcsSUFBSXkyQixFQUFFMTJCLEVBQUUsSUFBUyxJQUFMOGxELEVBQUVoOEIsR0FBTzRTLEVBQUVsNUIsRUFBRXFtQixHQUFHLE9BQU82UyxNQUFNQSxFQUFFa3BDLGVBQWU5N0MsSUFBSWxGLElBQUltcUMsTUFBTSxDQUFDLElBQUlqbEQsRUFBRTR5QixFQUFFeCtCLFNBQVMsR0FBRyxtQkFBb0I0TCxFQUFFLENBQUM0eUIsRUFBRXgrQixTQUFTLEtBQUs4QixFQUFFMDhCLEVBQUVtcEMsY0FBYyxJQUFJcnJFLEVBQUVzUCxFQUFFNHlCLEVBQUVrcEMsZ0JBQWdCOTdDLEdBQUdBLEVBQUV0Z0IsRUFBUThtQyxlQUFlLG1CQUFvQjkxQyxFQUFFa2lDLEVBQUV4K0IsU0FBUzFELEVBQUVraUMsSUFBSWw1QixFQUFFcW1CLElBQUkvcEIsRUFBRStwQixHQUFHaThCLEVBQUVoOEIsRUFBRSxNQUFNaHFCLEVBQUUrcEIsR0FBRzZTLEVBQUVsNUIsRUFBRXFtQixFQUFFLENBQUMsR0FBRyxPQUFPNlMsRUFBRSxJQUFJNWIsR0FBRSxNQUFPLENBQUMsSUFBSTJJLEVBQUVqbUIsRUFBRW9tQixHQUFHLE9BQU9ILEdBQUdnaUMsRUFBRXpGLEVBQUV2OEIsRUFBRWs4QyxVQUFVNzdDLEdBQUdoSixHQUFFLENBQUUsQ0FBQyxPQUFPQSxDQUF5QixDQUF2QixRQUFRNGIsRUFBRSxLQUFLMThCLEVBQUUwMkIsRUFBRXoyQixHQUFFLENBQUUsQ0FBQyxDQUQxYSxvQkFBcUI0OUIsZ0JBQVcsSUFBU0EsVUFBVWlvQyxpQkFBWSxJQUFTam9DLFVBQVVpb0MsV0FBV0MsZ0JBQWdCbG9DLFVBQVVpb0MsV0FBV0MsZUFBZXB4QyxLQUFLa0osVUFBVWlvQyxZQUMyUSxJQUN6UHBOLEVBRDZQakosR0FBRSxFQUFHQyxFQUFFLEtBQUtwRCxHQUFHLEVBQUVxRCxFQUFFLEVBQUVLLEdBQUcsRUFDdmMsU0FBU2pCLElBQUksUUFBT3ZsRCxFQUFROG1DLGVBQWUwZixFQUFFTCxFQUFPLENBQUMsU0FBU2dDLElBQUksR0FBRyxPQUFPakMsRUFBRSxDQUFDLElBQUk5cUMsRUFBRXBiLEVBQVE4bUMsZUFBZTBmLEVBQUVwckMsRUFBRSxJQUFJa0YsR0FBRSxFQUFHLElBQUlBLEVBQUU0bEMsR0FBRSxFQUFHOXFDLEVBQThCLENBQTNCLFFBQVFrRixFQUFFNHVDLEtBQUtqSixHQUFFLEVBQUdDLEVBQUUsS0FBSyxDQUFDLE1BQU1ELEdBQUUsQ0FBRSxDQUFPLEdBQUcsbUJBQW9Cck0sRUFBRXNWLEVBQUUsV0FBV3RWLEVBQUV1TyxFQUFFLE9BQU8sR0FBRyxvQkFBcUJxVSxlQUFlLENBQUMsSUFBSS9rRCxFQUFFLElBQUkra0QsZUFBZXhNLEVBQUV2NEMsRUFBRWdsRCxNQUFNaGxELEVBQUVpbEQsTUFBTUMsVUFBVXhVLEVBQUUrRyxFQUFFLFdBQVdjLEVBQUU0TSxZQUFZLEtBQUssQ0FBQyxNQUFNMU4sRUFBRSxXQUFXaFcsRUFBRWlQLEVBQUUsRUFBRSxFQUFFLFNBQVMxSixFQUFFcmpDLEdBQUc4cUMsRUFBRTlxQyxFQUFFNnFDLElBQUlBLEdBQUUsRUFBR2lKLElBQUksQ0FBQyxTQUFTak4sRUFBRTdtQyxFQUFFa0YsR0FBR3dpQyxFQUFFNUosR0FBRSxXQUFXOTlCLEVBQUVwYixFQUFROG1DLGVBQWUsR0FBRXhtQixFQUFFLENBQzVkdGdCLEVBQVEwbkMsc0JBQXNCLEVBQUUxbkMsRUFBUWtuQywyQkFBMkIsRUFBRWxuQyxFQUFRd25DLHFCQUFxQixFQUFFeG5DLEVBQVFzbkMsd0JBQXdCLEVBQUV0bkMsRUFBUTY4RCxtQkFBbUIsS0FBSzc4RCxFQUFRb25DLDhCQUE4QixFQUFFcG5DLEVBQVF3bUMsd0JBQXdCLFNBQVNwckIsR0FBR0EsRUFBRTFtQixTQUFTLElBQUksRUFBRXNMLEVBQVE4OEQsMkJBQTJCLFdBQVc1aUMsR0FBR3pqQyxJQUFJeWpDLEdBQUUsRUFBR3VrQixFQUFFOUUsR0FBRyxFQUMxVTM1QyxFQUFRKzhELHdCQUF3QixTQUFTM2hELEdBQUcsRUFBRUEsR0FBRyxJQUFJQSxFQUFFbEksUUFBUWhLLE1BQU0sbUhBQW1IaTlDLEVBQUUsRUFBRS9xQyxFQUFFL3BCLEtBQUs0L0IsTUFBTSxJQUFJN1YsR0FBRyxDQUFDLEVBQUVwYixFQUFRZ25DLGlDQUFpQyxXQUFXLE9BQU94d0MsQ0FBQyxFQUFFd0osRUFBUWc5RCw4QkFBOEIsV0FBVyxPQUFPaGpFLEVBQUVxbUIsRUFBRSxFQUFFcmdCLEVBQVFpOUQsY0FBYyxTQUFTN2hELEdBQUcsT0FBTzVrQixHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUk4cEIsRUFBRSxFQUFFLE1BQU0sUUFBUUEsRUFBRTlwQixFQUFFLElBQUkwMkIsRUFBRTEyQixFQUFFQSxFQUFFOHBCLEVBQUUsSUFBSSxPQUFPbEYsR0FBZSxDQUFYLFFBQVE1a0IsRUFBRTAyQixDQUFDLENBQUMsRUFBRWx0QixFQUFRazlELHdCQUF3QixXQUFXLEVBQzlmbDlELEVBQVE0bUMsc0JBQXNCLFdBQVcsRUFBRTVtQyxFQUFRbTlELHlCQUF5QixTQUFTL2hELEVBQUVrRixHQUFHLE9BQU9sRixHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRQSxFQUFFLEVBQUUsSUFBSThSLEVBQUUxMkIsRUFBRUEsRUFBRTRrQixFQUFFLElBQUksT0FBT2tGLEdBQWUsQ0FBWCxRQUFROXBCLEVBQUUwMkIsQ0FBQyxDQUFDLEVBQ2hNbHRCLEVBQVFzbUMsMEJBQTBCLFNBQVNsckIsRUFBRWtGLEVBQUU0TSxHQUFHLElBQUk1c0IsRUFBRU4sRUFBUThtQyxlQUE4RixPQUF0QzVaLEVBQXpDLGlCQUFrQkEsR0FBRyxPQUFPQSxHQUFlLGlCQUFaQSxFQUFFQSxFQUFFdGxCLFFBQTZCLEVBQUVzbEIsRUFBRTVzQixFQUFFNHNCLEVBQU81c0IsRUFBUzhhLEdBQUcsS0FBSyxFQUFFLElBQUlwcUIsR0FBRyxFQUFFLE1BQU0sS0FBSyxFQUFFQSxFQUFFLElBQUksTUFBTSxLQUFLLEVBQUVBLEVBQUUsV0FBVyxNQUFNLEtBQUssRUFBRUEsRUFBRSxJQUFJLE1BQU0sUUFBUUEsRUFBRSxJQUFtTixPQUF6TW9xQixFQUFFLENBQUMrSyxHQUFHNlQsSUFBSXRsQyxTQUFTNHJCLEVBQUUrN0MsY0FBY2poRCxFQUFFK2dELFVBQVVqdkMsRUFBRWt2QyxlQUF2RHByRSxFQUFFazhCLEVBQUVsOEIsRUFBb0VnckUsV0FBVyxHQUFHOXVDLEVBQUU1c0IsR0FBRzhhLEVBQUU0Z0QsVUFBVTl1QyxFQUFFN1IsRUFBRStFLEVBQUVoRixHQUFHLE9BQU9waEIsRUFBRXFtQixJQUFJakYsSUFBSXBoQixFQUFFb21CLEtBQUt5bUIsR0FBR3dWLEVBQUV5RyxHQUFHQSxHQUFHLEdBQUdqYyxHQUFFLEVBQUdvYixFQUFFekYsRUFBRXR2QixFQUFFNXNCLE1BQU04YSxFQUFFNGdELFVBQVVockUsRUFBRXFxQixFQUFFZ0YsRUFBRWpGLEdBQUc4ZSxHQUFHempDLElBQUl5akMsR0FBRSxFQUFHdWtCLEVBQUU5RSxLQUFZditCLENBQUMsRUFDbmVwYixFQUFRMG1DLHFCQUFxQjZlLEVBQUV2bEQsRUFBUW85RCxzQkFBc0IsU0FBU2hpRCxHQUFHLElBQUlrRixFQUFFOXBCLEVBQUUsT0FBTyxXQUFXLElBQUkwMkIsRUFBRTEyQixFQUFFQSxFQUFFOHBCLEVBQUUsSUFBSSxPQUFPbEYsRUFBRWhFLE1BQU0zb0IsS0FBSzBvQixVQUFzQixDQUFYLFFBQVEzZ0IsRUFBRTAyQixDQUFDLENBQUMsQ0FBQywrQkNmN0o3RyxFQUFPcm1CLFFBQVUsRUFBakIsaUNDTVcsSUFBSWhQLEVBQUUsRUFBUSxNQUE0RXNGLEVBQUUsbUJBQW9COUUsT0FBT295QyxHQUFHcHlDLE9BQU9veUMsR0FBMUcsU0FBV3hvQixFQUFFa0YsR0FBRyxPQUFPbEYsSUFBSWtGLElBQUksSUFBSWxGLEdBQUcsRUFBRUEsR0FBSSxFQUFFa0YsSUFBSWxGLEdBQUlBLEdBQUdrRixHQUFJQSxDQUFDLEVBQWlEbkYsRUFBRW5xQixFQUFFczVELFNBQVNycUMsRUFBRWp2QixFQUFFaTVELFVBQVUxdkMsRUFBRXZwQixFQUFFcU8sZ0JBQWdCNmdCLEVBQUVsdkIsRUFBRXU1RCxjQUN0TSxTQUFTbHFDLEVBQUVqRixHQUFHLElBQUlrRixFQUFFbEYsRUFBRTRzQyxZQUFZNXNDLEVBQUVBLEVBQUV6cEIsTUFBTSxJQUFJLElBQUkyTyxFQUFFZ2dCLElBQUksT0FBT2hxQixFQUFFOGtCLEVBQUU5YSxFQUFvQixDQUFqQixNQUFNK2EsR0FBRyxPQUFNLENBQUUsQ0FBQyxDQUE0QixJQUFJMmUsRUFBRSxvQkFBcUJoa0IsYUFBUSxJQUFxQkEsT0FBTzdsQixlQUFVLElBQXFCNmxCLE9BQU83bEIsU0FBU0MsY0FBekksU0FBV2dyQixFQUFFa0YsR0FBRyxPQUFPQSxHQUFHLEVBRCtGLFNBQVdsRixFQUFFa0YsR0FBRyxJQUFJaGdCLEVBQUVnZ0IsSUFBSWpGLEVBQUVGLEVBQUUsQ0FBQ2tpRCxLQUFLLENBQUMxckUsTUFBTTJPLEVBQUUwbkQsWUFBWTFuQyxLQUFLNE0sRUFBRTdSLEVBQUUsR0FBR2dpRCxLQUFLdmpDLEVBQUV6ZSxFQUFFLEdBQXdKLE9BQXJKZCxHQUFFLFdBQVcyUyxFQUFFdjdCLE1BQU0yTyxFQUFFNHNCLEVBQUU4NkIsWUFBWTFuQyxFQUFFRCxFQUFFNk0sSUFBSTRNLEVBQUUsQ0FBQ3VqQyxLQUFLbndDLEdBQUcsR0FBRSxDQUFDOVIsRUFBRTlhLEVBQUVnZ0IsSUFBSUwsR0FBRSxXQUE2QixPQUFsQkksRUFBRTZNLElBQUk0TSxFQUFFLENBQUN1akMsS0FBS253QyxJQUFXOVIsR0FBRSxXQUFXaUYsRUFBRTZNLElBQUk0TSxFQUFFLENBQUN1akMsS0FBS253QyxHQUFHLEdBQUUsR0FBRSxDQUFDOVIsSUFBSThFLEVBQUU1ZixHQUFVQSxDQUFDLEVBQzVNTixFQUFRMnFELDBCQUFxQixJQUFTMzVELEVBQUUyNUQscUJBQXFCMzVELEVBQUUyNUQscUJBQXFCM3dCLDhCQ0Q3VCxJQUFJaGdDLEVBQUUsRUFBUSxNQUFTdWdCLEVBQUUsRUFBUSxNQUFtR3dmLEVBQUUsbUJBQW9Cdm9DLE9BQU9veUMsR0FBR3B5QyxPQUFPb3lDLEdBQTFHLFNBQVd4b0IsRUFBRWtGLEdBQUcsT0FBT2xGLElBQUlrRixJQUFJLElBQUlsRixHQUFHLEVBQUVBLEdBQUksRUFBRWtGLElBQUlsRixHQUFJQSxHQUFHa0YsR0FBSUEsQ0FBQyxFQUFpREQsRUFBRTlGLEVBQUVvd0MscUJBQXFCdnFDLEVBQUVwbUIsRUFBRXF3RCxPQUFPcndCLEVBQUVoZ0MsRUFBRWl3RCxVQUFVLzJCLEVBQUVsNUIsRUFBRW13RCxRQUFRN3lDLEVBQUV0ZCxFQUFFdXdELGNBQy9QdnFELEVBQVFzOUQsaUNBQWlDLFNBQVNsaUQsRUFBRWtGLEVBQUV0dkIsRUFBRW1xQixFQUFFMmUsR0FBRyxJQUFJNU0sRUFBRTlNLEVBQUUsTUFBTSxHQUFHLE9BQU84TSxFQUFFcHRCLFFBQVEsQ0FBQyxJQUFJdWIsRUFBRSxDQUFDa2lELFVBQVMsRUFBRzVyRSxNQUFNLE1BQU11N0IsRUFBRXB0QixRQUFRdWIsQ0FBQyxNQUFNQSxFQUFFNlIsRUFBRXB0QixRQUFRb3RCLEVBQUVnRyxHQUFFLFdBQVcsU0FBUzlYLEVBQUVBLEdBQUcsSUFBSThSLEVBQUUsQ0FBaUIsR0FBaEJBLEdBQUUsRUFBRzVzQixFQUFFOGEsRUFBRUEsRUFBRUQsRUFBRUMsUUFBTSxJQUFTMGUsR0FBR3plLEVBQUVraUQsU0FBUyxDQUFDLElBQUlqOUMsRUFBRWpGLEVBQUUxcEIsTUFBTSxHQUFHbW9DLEVBQUV4WixFQUFFbEYsR0FBRyxPQUFPOWtCLEVBQUVncUIsQ0FBQyxDQUFDLE9BQU9ocUIsRUFBRThrQixDQUFDLENBQUssR0FBSmtGLEVBQUVocUIsRUFBS3lqQyxFQUFFejVCLEVBQUU4YSxHQUFHLE9BQU9rRixFQUFFLElBQUl0dkIsRUFBRW1xQixFQUFFQyxHQUFHLFlBQUcsSUFBUzBlLEdBQUdBLEVBQUV4WixFQUFFdHZCLEdBQVVzdkIsR0FBRWhnQixFQUFFOGEsRUFBUzlrQixFQUFFdEYsRUFBQyxDQUFDLElBQVNzUCxFQUFFaEssRUFBUDQyQixHQUFFLEVBQU9qTixPQUFFLElBQVNqdkIsRUFBRSxLQUFLQSxFQUFFLE1BQU0sQ0FBQyxXQUFXLE9BQU9vcUIsRUFBRWtGLElBQUksRUFBRSxPQUFPTCxPQUFFLEVBQU8sV0FBVyxPQUFPN0UsRUFBRTZFLElBQUksRUFBRSxHQUFFLENBQUNLLEVBQUV0dkIsRUFBRW1xQixFQUFFMmUsSUFBSSxJQUFJeDVCLEVBQUUrZixFQUFFakYsRUFBRThSLEVBQUUsR0FBR0EsRUFBRSxJQUNuYyxPQUFoRDhNLEdBQUUsV0FBVzNlLEVBQUVraUQsVUFBUyxFQUFHbGlELEVBQUUxcEIsTUFBTTJPLENBQUMsR0FBRSxDQUFDQSxJQUFJZ1gsRUFBRWhYLEdBQVVBLENBQUMsK0JDUnREK2xCLEVBQU9ybUIsUUFBVSxFQUFqQixtQ0NBQXFtQixFQUFPcm1CLFFBQVUsRUFBakIsZUNHRnFtQixFQUFPcm1CLFFBTlAsU0FBZ0NoQyxHQUM5QixPQUFPQSxHQUFPQSxFQUFJd0MsV0FBYXhDLEVBQU0sQ0FDbkMsUUFBV0EsRUFFZixFQUV5Q3FvQixFQUFPcm1CLFFBQVFRLFlBQWEsRUFBTTZsQixFQUFPcm1CLFFBQWlCLFFBQUlxbUIsRUFBT3JtQix3QkNOOUcsSUFBSXc5RCxFQUFPLEVBQVEsTUFFbkJBLEVBQUtDLGlCQUFpQixNQUFPLEVBQVEsT0FDckNELEVBQUtDLGlCQUFpQixPQUFRLEVBQVEsT0FDdENELEVBQUtDLGlCQUFpQixJQUFLLEVBQVEsTUFDbkNELEVBQUtDLGlCQUFpQixNQUFPLEVBQVEsT0FDckNELEVBQUtDLGlCQUFpQixTQUFVLEVBQVEsT0FDeENELEVBQUtDLGlCQUFpQixNQUFPLEVBQVEsT0FDckNELEVBQUtDLGlCQUFpQixXQUFZLEVBQVEsT0FDMUNELEVBQUtDLGlCQUFpQixPQUFRLEVBQVEsT0FDdENELEVBQUtDLGlCQUFpQixPQUFRLEVBQVEsT0FDdENELEVBQUtDLGlCQUFpQixLQUFNLEVBQVEsT0FDcENELEVBQUtDLGlCQUFpQixVQUFXLEVBQVEsT0FDekNELEVBQUtDLGlCQUFpQixNQUFPLEVBQVEsT0FDckNELEVBQUtDLGlCQUFpQixPQUFRLEVBQVEsT0FDdENELEVBQUtDLGlCQUFpQixhQUFjLEVBQVEsTUFDNUNELEVBQUtDLGlCQUFpQixPQUFRLEVBQVEsS0FDdENELEVBQUtDLGlCQUFpQixTQUFVLEVBQVEsT0FDeENELEVBQUtDLGlCQUFpQixPQUFRLEVBQVEsT0FDdENELEVBQUtDLGlCQUFpQixNQUFPLEVBQVEsT0FDckNELEVBQUtDLGlCQUFpQixXQUFZLEVBQVEsT0FDMUNELEVBQUtDLGlCQUFpQixPQUFRLEVBQVEsT0FDdENELEVBQUtDLGlCQUFpQixhQUFjLEVBQVEsT0FDNUNELEVBQUtDLGlCQUFpQixNQUFPLEVBQVEsT0FDckNELEVBQUtDLGlCQUFpQixlQUFnQixFQUFRLE9BQzlDRCxFQUFLQyxpQkFBaUIsWUFBYSxFQUFRLE9BQzNDRCxFQUFLQyxpQkFBaUIsU0FBVSxFQUFRLE9BQ3hDRCxFQUFLQyxpQkFBaUIsY0FBZSxFQUFRLE9BQzdDRCxFQUFLQyxpQkFBaUIsSUFBSyxFQUFRLE9BQ25DRCxFQUFLQyxpQkFBaUIsT0FBUSxFQUFRLE9BQ3RDRCxFQUFLQyxpQkFBaUIsT0FBUSxFQUFRLE9BQ3RDRCxFQUFLQyxpQkFBaUIsUUFBUyxFQUFRLE9BQ3ZDRCxFQUFLQyxpQkFBaUIsTUFBTyxFQUFRLE9BQ3JDRCxFQUFLQyxpQkFBaUIsUUFBUyxFQUFRLE9BQ3ZDRCxFQUFLQyxpQkFBaUIsT0FBUSxFQUFRLE9BQ3RDRCxFQUFLQyxpQkFBaUIsYUFBYyxFQUFRLE9BQzVDRCxFQUFLQyxpQkFBaUIsUUFBUyxFQUFRLE9BQ3ZDRCxFQUFLQyxpQkFBaUIsT0FBUSxFQUFRLE9BRXRDRCxFQUFLRSxZQUFjRixFQUNuQkEsRUFBS3A5RCxRQUFVbzlELEVBQ2ZuM0MsRUFBT3JtQixRQUFVdzlELFlDekNqQixJQUFJRyxFQUFnQixDQUFDMzlELFFBQVMsQ0FBQyxHQUUvQixTQUFTNDlELEVBQVc1L0QsR0F1QmhCLE9BdEJJQSxhQUFlZ3NDLElBQ2Zoc0MsRUFBSW1tQixNQUFRbm1CLEVBQUlxc0MsT0FBU3JzQyxFQUFJaEgsSUFBTSxXQUMvQixNQUFNLElBQUk2UixNQUFNLG1CQUNwQixFQUNPN0ssYUFBZWtsQixNQUN0QmxsQixFQUFJaStCLElBQU1qK0IsRUFBSW1tQixNQUFRbm1CLEVBQUlxc0MsT0FBUyxXQUMvQixNQUFNLElBQUl4aEMsTUFBTSxtQkFDcEIsR0FJSnJYLE9BQU9xc0UsT0FBTzcvRCxHQUVkeE0sT0FBT29tQyxvQkFBb0I1NUIsR0FBS2hPLFNBQVEsU0FBVWdKLEdBQzlDLElBQUkwUyxFQUFPMU4sRUFBSWhGLEdBR0ksaUJBQVIwUyxHQUFxQmxhLE9BQU9zc0UsU0FBU3B5RCxJQUM1Q2t5RCxFQUFXbHlELEVBRW5CLElBRU8xTixDQUNYLENBRUEyL0QsRUFBYzM5RCxRQUFVNDlELEVBQ3hCRCxFQUFjMzlELFFBQVFJLFFBQVV3OUQsRUFNaEMsTUFBTUcsRUFJSjE1QyxZQUFZdmIsUUFFUXZaLElBQWR1WixFQUFLeWUsT0FBb0J6ZSxFQUFLeWUsS0FBTyxDQUFDLEdBRTFDOTRCLEtBQUs4NEIsS0FBT3plLEVBQUt5ZSxLQUNqQjk0QixLQUFLdXZFLGdCQUFpQixDQUN4QixDQUVBQyxjQUNFeHZFLEtBQUt1dkUsZ0JBQWlCLENBQ3hCLEVBT0YsU0FBU0UsRUFBV3ZzRSxHQUNsQixPQUFPQSxFQUNKQyxRQUFRLEtBQU0sU0FDZEEsUUFBUSxLQUFNLFFBQ2RBLFFBQVEsS0FBTSxRQUNkQSxRQUFRLEtBQU0sVUFDZEEsUUFBUSxLQUFNLFNBQ25CLENBVUEsU0FBU3VzRSxFQUFVQyxLQUFhdDdDLEdBRTlCLE1BQU10a0IsRUFBU2hOLE9BQU8ySCxPQUFPLE1BRTdCLElBQUssTUFBTXhKLEtBQU95dUUsRUFDaEI1L0QsRUFBTzdPLEdBQU95dUUsRUFBU3p1RSxHQU96QixPQUxBbXpCLEVBQVE5eUIsU0FBUSxTQUFTZ08sR0FDdkIsSUFBSyxNQUFNck8sS0FBT3FPLEVBQ2hCUSxFQUFPN08sR0FBT3FPLEVBQUlyTyxFQUV0QixJQUN3QixDQUMxQixDQWNBLE1BTU0wdUUsRUFBcUJ4ckUsS0FHaEJBLEVBQUt5ckUsT0FBVXpyRSxFQUFLMHJFLGFBQWUxckUsRUFBSzJyRSxTQW9CbkQsTUFBTUMsRUFPSnA2QyxZQUFZcTZDLEVBQVdud0UsR0FDckJFLEtBQUtvakMsT0FBUyxHQUNkcGpDLEtBQUtrd0UsWUFBY3B3RSxFQUFRb3dFLFlBQzNCRCxFQUFVRSxLQUFLbndFLEtBQ2pCLENBTUFvd0UsUUFBUTk4RCxHQUNOdFQsS0FBS29qQyxRQUFVcXNDLEVBQVduOEQsRUFDNUIsQ0FNQSs4RCxTQUFTanNFLEdBQ1AsSUFBS3dyRSxFQUFrQnhyRSxHQUFPLE9BRTlCLElBQUk2TSxFQUFZLEdBRWRBLEVBREU3TSxFQUFLMHJFLFlBQ0ssWUFBWTFyRSxFQUFLMnJFLFdBMUNYLEVBQUN4bEUsR0FBUWpFLGFBQy9CLEdBQUlpRSxFQUFLaW1DLFNBQVMsS0FBTSxDQUN0QixNQUFNOC9CLEVBQVMvbEUsRUFBS1gsTUFBTSxLQUMxQixNQUFPLENBQ0wsR0FBR3RELElBQVNncUUsRUFBT2xrRCxhQUNma2tELEVBQU94bkUsS0FBSSxDQUFDaEIsRUFBRzdGLElBQU0sR0FBRzZGLElBQUksSUFBSSs2QyxPQUFPNWdELEVBQUksUUFDL0NvRSxLQUFLLElBQ1QsQ0FDQSxNQUFPLEdBQUdDLElBQVNpRSxHQUFNLEVBb0NUZ21FLENBQWdCbnNFLEVBQUt5ckUsTUFBTyxDQUFFdnBFLE9BQVF0RyxLQUFLa3dFLGNBRXpEbHdFLEtBQUt3d0UsS0FBS3YvRCxFQUNaLENBTUF3L0QsVUFBVXJzRSxHQUNId3JFLEVBQWtCeHJFLEtBRXZCcEUsS0FBS29qQyxRQXpFVSxVQTBFakIsQ0FLQWxnQyxRQUNFLE9BQU9sRCxLQUFLb2pDLE1BQ2QsQ0FRQW90QyxLQUFLdi9ELEdBQ0hqUixLQUFLb2pDLFFBQVUsZ0JBQWdCbnlCLEtBQ2pDLEVBU0YsTUFBTXkvRCxFQUFVLENBQUM5b0MsRUFBTyxDQUFDLEtBRXZCLE1BQU03M0IsRUFBUyxDQUFFdEwsU0FBVSxJQUUzQixPQURBMUIsT0FBT0MsT0FBTytNLEVBQVE2M0IsR0FDZjczQixDQUFNLEVBR2YsTUFBTTRnRSxFQUNKLzZDLGNBRUU1MUIsS0FBSzR3RSxTQUFXRixJQUNoQjF3RSxLQUFLNGdDLE1BQVEsQ0FBQzVnQyxLQUFLNHdFLFNBQ3JCLENBRUlsb0IsVUFDRixPQUFPMW9ELEtBQUs0Z0MsTUFBTTVnQyxLQUFLNGdDLE1BQU12Z0MsT0FBUyxFQUN4QyxDQUVJZ0UsV0FBUyxPQUFPckUsS0FBSzR3RSxRQUFVLENBR25DcGpDLElBQUlwcEMsR0FDRnBFLEtBQUswb0QsSUFBSWprRCxTQUFTN0QsS0FBS3dELEVBQ3pCLENBR0Fpc0UsU0FBU1IsR0FFUCxNQUFNenJFLEVBQU9zc0UsRUFBUSxDQUFFYixVQUN2Qjd2RSxLQUFLd3RDLElBQUlwcEMsR0FDVHBFLEtBQUs0Z0MsTUFBTWhnQyxLQUFLd0QsRUFDbEIsQ0FFQXFzRSxZQUNFLEdBQUl6d0UsS0FBSzRnQyxNQUFNdmdDLE9BQVMsRUFDdEIsT0FBT0wsS0FBSzRnQyxNQUFNMEcsS0FJdEIsQ0FFQXVwQyxnQkFDRSxLQUFPN3dFLEtBQUt5d0UsY0FDZCxDQUVBbHdDLFNBQ0UsT0FBT2hsQixLQUFLcFYsVUFBVW5HLEtBQUs0d0UsU0FBVSxLQUFNLEVBQzdDLENBTUFULEtBQUtXLEdBRUgsT0FBTzl3RSxLQUFLNDFCLFlBQVltN0MsTUFBTUQsRUFBUzl3RSxLQUFLNHdFLFNBRzlDLENBTUFJLGFBQWFGLEVBQVMxc0UsR0FRcEIsTUFQb0IsaUJBQVRBLEVBQ1Qwc0UsRUFBUVYsUUFBUWhzRSxHQUNQQSxFQUFLSyxXQUNkcXNFLEVBQVFULFNBQVNqc0UsR0FDakJBLEVBQUtLLFNBQVNsRCxTQUFTaTJDLEdBQVV4M0MsS0FBSyt3RSxNQUFNRCxFQUFTdDVCLEtBQ3JEczVCLEVBQVFMLFVBQVVyc0UsSUFFYjBzRSxDQUNULENBS0FFLGlCQUFpQjVzRSxHQUNLLGlCQUFUQSxHQUNOQSxFQUFLSyxXQUVOTCxFQUFLSyxTQUFTaXdCLE9BQU0wUyxHQUFvQixpQkFBUEEsSUFHbkNoakMsRUFBS0ssU0FBVyxDQUFDTCxFQUFLSyxTQUFTNEIsS0FBSyxLQUVwQ2pDLEVBQUtLLFNBQVNsRCxTQUFTaTJDLElBQ3JCbTVCLEVBQVVNLFVBQVV6NUIsRUFBTSxJQUdoQyxFQXVCRixNQUFNMDVCLFVBQXlCUCxFQUk3Qi82QyxZQUFZOTFCLEdBQ1ZxeEUsUUFDQW54RSxLQUFLRixRQUFVQSxDQUNqQixDQU1Bc3hFLFdBQVc5OUQsRUFBTXU4RCxHQUNGLEtBQVR2OEQsSUFFSnRULEtBQUtxd0UsU0FBU1IsR0FDZDd2RSxLQUFLb3dFLFFBQVE5OEQsR0FDYnRULEtBQUt5d0UsWUFDUCxDQUtBTCxRQUFROThELEdBQ08sS0FBVEEsR0FFSnRULEtBQUt3dEMsSUFBSWw2QixFQUNYLENBTUErOUQsZUFBZUMsRUFBUy9tRSxHQUV0QixNQUFNbkcsRUFBT2t0RSxFQUFRanRFLEtBQ3JCRCxFQUFLMHJFLGFBQWMsRUFDbkIxckUsRUFBSzJyRSxTQUFXeGxFLEVBQ2hCdkssS0FBS3d0QyxJQUFJcHBDLEVBQ1gsQ0FFQW10RSxTQUVFLE9BRGlCLElBQUl2QixFQUFhaHdFLEtBQU1BLEtBQUtGLFNBQzdCb0QsT0FDbEIsQ0FFQXN1RSxXQUNFLE9BQU8sQ0FDVCxFQVlGLFNBQVMzN0MsRUFBT2xLLEdBQ2QsT0FBS0EsRUFDYSxpQkFBUEEsRUFBd0JBLEVBRTVCQSxFQUFHa0ssT0FITSxJQUlsQixDQU1BLFNBQVM0N0MsRUFBVTlsRCxHQUNqQixPQUFPMWhCLEVBQU8sTUFBTzBoQixFQUFJLElBQzNCLENBTUEsU0FBUytsRCxFQUFpQi9sRCxHQUN4QixPQUFPMWhCLEVBQU8sTUFBTzBoQixFQUFJLEtBQzNCLENBTUEsU0FBU2dtRCxFQUFTaG1ELEdBQ2hCLE9BQU8xaEIsRUFBTyxNQUFPMGhCLEVBQUksS0FDM0IsQ0FNQSxTQUFTMWhCLEtBQVVrRyxHQUVqQixPQURlQSxFQUFLckgsS0FBS2hCLEdBQU0rdEIsRUFBTy90QixLQUFJekIsS0FBSyxHQUVqRCxDQTBCQSxTQUFTdXJFLEtBQVV6aEUsR0FFakIsTUFBTXkzQixFQXRCUixTQUE4QnozQixHQUM1QixNQUFNeTNCLEVBQU96M0IsRUFBS0EsRUFBSzlQLE9BQVMsR0FFaEMsTUFBb0IsaUJBQVR1bkMsR0FBcUJBLEVBQUtoUyxjQUFnQjd5QixRQUNuRG9OLEVBQUtxdUIsT0FBT3J1QixFQUFLOVAsT0FBUyxFQUFHLEdBQ3RCdW5DLEdBRUEsQ0FBQyxDQUVaLENBYWVpcUMsQ0FBcUIxaEUsR0FJbEMsTUFIZSxLQUNWeTNCLEVBQUtvakIsUUFBVSxHQUFLLE1BQ3JCNzZDLEVBQUtySCxLQUFLaEIsR0FBTSt0QixFQUFPL3RCLEtBQUl6QixLQUFLLEtBQU8sR0FFN0MsQ0FNQSxTQUFTeXJFLEVBQWlCbm1ELEdBQ3hCLE9BQU8sSUFBS0MsT0FBT0QsRUFBR2xnQixXQUFhLEtBQU0xQyxLQUFLLElBQUkxSSxPQUFTLENBQzdELENBbUJBLE1BQU0weEUsRUFBYSxpREFhbkIsU0FBU0MsRUFBdUJDLEdBQVMsU0FBRUMsSUFDekMsSUFBSUMsRUFBYyxFQUVsQixPQUFPRixFQUFRbnBFLEtBQUtzcEUsSUFDbEJELEdBQWUsRUFDZixNQUFNcHJFLEVBQVNvckUsRUFDZixJQUFJeG1ELEVBQUtrSyxFQUFPdThDLEdBQ1pDLEVBQU0sR0FFVixLQUFPMW1ELEVBQUd0ckIsT0FBUyxHQUFHLENBQ3BCLE1BQU0ySSxFQUFRK29FLEVBQVdocEUsS0FBSzRpQixHQUM5QixJQUFLM2lCLEVBQU8sQ0FDVnFwRSxHQUFPMW1ELEVBQ1AsS0FDRixDQUNBMG1ELEdBQU8xbUQsRUFBR08sVUFBVSxFQUFHbGpCLEVBQU12RixPQUM3QmtvQixFQUFLQSxFQUFHTyxVQUFVbGpCLEVBQU12RixNQUFRdUYsRUFBTSxHQUFHM0ksUUFDckIsT0FBaEIySSxFQUFNLEdBQUcsSUFBZUEsRUFBTSxHQUVoQ3FwRSxHQUFPLEtBQU94dkUsT0FBT2txQixPQUFPL2pCLEVBQU0sSUFBTWpDLElBRXhDc3JFLEdBQU9ycEUsRUFBTSxHQUNJLE1BQWJBLEVBQU0sSUFDUm1wRSxJQUdOLENBQ0EsT0FBT0UsQ0FBRyxJQUNUdnBFLEtBQUk2aUIsR0FBTSxJQUFJQSxPQUFPdGxCLEtBQUs2ckUsRUFDL0IsQ0FNQSxNQUNNSSxFQUFXLGVBQ1hDLEVBQXNCLGdCQUN0QkMsRUFBWSxvQkFDWkMsRUFBYyx5RUFDZEMsRUFBbUIsZUE0Qm5CQyxFQUFtQixDQUN2Qmh2RSxNQUFPLGVBQWdCaXZFLFVBQVcsR0FFOUJDLEVBQW1CLENBQ3ZCaEQsTUFBTyxTQUNQbHNFLE1BQU8sSUFDUEMsSUFBSyxJQUNMa3ZFLFFBQVMsTUFDVDlyQixTQUFVLENBQUMyckIsSUFFUEksRUFBb0IsQ0FDeEJsRCxNQUFPLFNBQ1Bsc0UsTUFBTyxJQUNQQyxJQUFLLElBQ0xrdkUsUUFBUyxNQUNUOXJCLFNBQVUsQ0FBQzJyQixJQWFQOXNFLEVBQVUsU0FBU2xDLEVBQU9DLEVBQUtvdkUsRUFBYyxDQUFDLEdBQ2xELE1BQU0zNEQsRUFBT3ExRCxFQUNYLENBQ0VHLE1BQU8sVUFDUGxzRSxRQUNBQyxNQUNBb2pELFNBQVUsSUFFWmdzQixHQUVGMzRELEVBQUsyc0MsU0FBU3BtRCxLQUFLLENBQ2pCaXZFLE1BQU8sU0FHUGxzRSxNQUFPLG1EQUNQQyxJQUFLLDJDQUNMcXZFLGNBQWMsRUFDZEwsVUFBVyxJQUViLE1BQU1NLEVBQWV0QixFQUVuQixJQUNBLElBQ0EsS0FDQSxLQUNBLEtBQ0EsS0FDQSxLQUNBLEtBQ0EsS0FDQSxLQUNBLEtBRUEsaUNBQ0EscUJBQ0EscUJBNEJGLE9BekJBdjNELEVBQUsyc0MsU0FBU3BtRCxLQUNaLENBZ0JFK0MsTUFBT3NHLEVBQ0wsT0FDQSxJQUNBaXBFLEVBQ0EsdUJBQ0EsVUFHQzc0RCxDQUNULEVBQ004NEQsRUFBc0J0dEUsRUFBUSxLQUFNLEtBQ3BDdXRFLEVBQXVCdnRFLEVBQVEsT0FBUSxRQUN2Q3d0RSxFQUFvQnh0RSxFQUFRLElBQUssS0FDakN5dEUsRUFBYyxDQUNsQnpELE1BQU8sU0FDUGxzRSxNQUFPNnVFLEVBQ1BJLFVBQVcsR0FFUFcsRUFBZ0IsQ0FDcEIxRCxNQUFPLFNBQ1Bsc0UsTUFBTzh1RSxFQUNQRyxVQUFXLEdBRVBZLEVBQXFCLENBQ3pCM0QsTUFBTyxTQUNQbHNFLE1BQU8rdUUsRUFDUEUsVUFBVyxHQUVQYSxFQUFjLENBT2xCOXZFLE1BQU8sa0JBQ1BxakQsU0FBVSxDQUFDLENBQ1Q2b0IsTUFBTyxTQUNQbHNFLE1BQU8sS0FDUEMsSUFBSyxhQUNMa3ZFLFFBQVMsS0FDVDlyQixTQUFVLENBQ1IyckIsRUFDQSxDQUNFaHZFLE1BQU8sS0FDUEMsSUFBSyxLQUNMZ3ZFLFVBQVcsRUFDWDVyQixTQUFVLENBQUMyckIsUUFLYmUsRUFBYSxDQUNqQjdELE1BQU8sUUFDUGxzRSxNQUFPMnVFLEVBQ1BNLFVBQVcsR0FFUGUsRUFBd0IsQ0FDNUI5RCxNQUFPLFFBQ1Bsc0UsTUFBTzR1RSxFQUNQSyxVQUFXLEdBeUJiLElBQUlnQixFQUFxQjd3RSxPQUFPcXNFLE9BQU8sQ0FDbkN5RSxVQUFXLEtBQ1hDLGlCQTNNcUIsT0E0TXJCeEIsU0FBVUEsRUFDVkMsb0JBQXFCQSxFQUNyQkMsVUFBV0EsRUFDWEMsWUFBYUEsRUFDYkMsaUJBQWtCQSxFQUNsQnFCLGVBM01tQiwrSUE0TW5CQyxRQXZNWSxDQUFDcHNDLEVBQU8sQ0FBQyxLQUN2QixNQUFNcXNDLEVBQWUsWUFRckIsT0FQSXJzQyxFQUFLc3NDLFNBQ1B0c0MsRUFBS2prQyxNQUFRc0csRUFDWGdxRSxFQUNBLE9BQ0Fyc0MsRUFBS3NzQyxPQUNMLFNBRUd4RSxFQUFVLENBQ2ZHLE1BQU8sT0FDUGxzRSxNQUFPc3dFLEVBQ1Byd0UsSUFBSyxJQUNMZ3ZFLFVBQVcsRUFFWCxXQUFZLENBQUNwaEQsRUFBRzJpRCxLQUNFLElBQVozaUQsRUFBRS90QixPQUFhMHdFLEVBQUszRSxhQUFhLEdBRXRDNW5DLEVBQUssRUFzTE4rcUMsaUJBQWtCQSxFQUNsQkUsaUJBQWtCQSxFQUNsQkUsa0JBQW1CQSxFQUNuQnFCLG1CQXBLdUIsQ0FDekJ6d0UsTUFBTyw4SUFvS0xrQyxRQUFTQSxFQUNUc3RFLG9CQUFxQkEsRUFDckJDLHFCQUFzQkEsRUFDdEJDLGtCQUFtQkEsRUFDbkJDLFlBQWFBLEVBQ2JDLGNBQWVBLEVBQ2ZDLG1CQUFvQkEsRUFDcEJDLFlBQWFBLEVBQ2JDLFdBQVlBLEVBQ1pDLHNCQUF1QkEsRUFDdkJVLGFBL0NpQixDQUVuQjF3RSxNQUFPLHVCQUNQaXZFLFVBQVcsR0E2Q1QwQixrQkFuQ3NCLFNBQVNqNkQsR0FDakMsT0FBT3RYLE9BQU9DLE9BQU9xWCxFQUNuQixDQUVFLFdBQVksQ0FBQ21YLEVBQUcyaUQsS0FBV0EsRUFBS3I3QyxLQUFLeTdDLFlBQWMvaUQsRUFBRSxFQUFFLEVBRXZELFNBQVUsQ0FBQ0EsRUFBRzJpRCxLQUFlQSxFQUFLcjdDLEtBQUt5N0MsY0FBZ0IvaUQsRUFBRSxJQUFJMmlELEVBQUszRSxhQUFhLEdBRXJGLElBMkRBLFNBQVNnRixFQUFzQnhyRSxFQUFPcXhCLEdBRXJCLE1BREFyeEIsRUFBTXVVLE1BQU12VSxFQUFNdkYsTUFBUSxJQUV2QzQyQixFQUFTbTFDLGFBRWIsQ0FNQSxTQUFTaUYsRUFBZXA2RCxFQUFNcTZELFFBRUw1ekUsSUFBbkJ1WixFQUFLcEosWUFDUG9KLEVBQUt3MUQsTUFBUXgxRCxFQUFLcEosaUJBQ1hvSixFQUFLcEosVUFFaEIsQ0FNQSxTQUFTMGpFLEVBQWN0NkQsRUFBTS9WLEdBQ3RCQSxHQUNBK1YsRUFBS3M2RCxnQkFPVnQ2RCxFQUFLMVcsTUFBUSxPQUFTMFcsRUFBS3M2RCxjQUFjL3FFLE1BQU0sS0FBS3ZELEtBQUssS0FBTyxzQkFDaEVnVSxFQUFLdTZELGNBQWdCSixFQUNyQm42RCxFQUFLdzZELFNBQVd4NkQsRUFBS3c2RCxVQUFZeDZELEVBQUtzNkQscUJBQy9CdDZELEVBQUtzNkQsbUJBS1c3ekUsSUFBbkJ1WixFQUFLdTRELFlBQXlCdjRELEVBQUt1NEQsVUFBWSxHQUNyRCxDQU1BLFNBQVNrQyxFQUFlejZELEVBQU1xNkQsR0FDdkJ2ckUsTUFBTXNHLFFBQVE0SyxFQUFLeTRELFdBRXhCejRELEVBQUt5NEQsUUFBVWxCLEtBQVV2M0QsRUFBS3k0RCxTQUNoQyxDQU1BLFNBQVNpQyxFQUFhMTZELEVBQU1xNkQsR0FDMUIsR0FBS3I2RCxFQUFLclIsTUFBVixDQUNBLEdBQUlxUixFQUFLMVcsT0FBUzBXLEVBQUt6VyxJQUFLLE1BQU0sSUFBSXdXLE1BQU0sNENBRTVDQyxFQUFLMVcsTUFBUTBXLEVBQUtyUixhQUNYcVIsRUFBS3JSLEtBSlcsQ0FLekIsQ0FNQSxTQUFTZ3NFLEVBQWlCMzZELEVBQU1xNkQsUUFFUDV6RSxJQUFuQnVaLEVBQUt1NEQsWUFBeUJ2NEQsRUFBS3U0RCxVQUFZLEVBQ3JELENBSUEsTUFBTXFDLEVBQWlCLENBQUM1NkQsRUFBTS9WLEtBQzVCLElBQUsrVixFQUFLNjZELFlBQWEsT0FHdkIsR0FBSTc2RCxFQUFLODZELE9BQVEsTUFBTSxJQUFJLzZELE1BQU0sMENBRWpDLE1BQU1nN0QsRUFBZXJ5RSxPQUFPQyxPQUFPLENBQUMsRUFBR3FYLEdBQ3ZDdFgsT0FBTzRaLEtBQUt0QyxHQUFNOVksU0FBU0wsV0FBaUJtWixFQUFLblosRUFBSSxJQUVyRG1aLEVBQUt3NkQsU0FBV08sRUFBYVAsU0FDN0J4NkQsRUFBSzFXLE1BQVFzRyxFQUFPbXJFLEVBQWFGLFlBQWF6RCxFQUFVMkQsRUFBYXp4RSxRQUNyRTBXLEVBQUs4NkQsT0FBUyxDQUNadkMsVUFBVyxFQUNYNXJCLFNBQVUsQ0FDUmprRCxPQUFPQyxPQUFPb3lFLEVBQWMsQ0FBRUMsWUFBWSxNQUc5Q2g3RCxFQUFLdTRELFVBQVksU0FFVndDLEVBQWFGLFdBQVcsRUFJM0JJLEVBQWtCLENBQ3RCLEtBQ0EsTUFDQSxNQUNBLEtBQ0EsTUFDQSxLQUNBLEtBQ0EsT0FDQSxTQUNBLE9BQ0EsU0FXRixTQUFTQyxFQUFnQkMsRUFBYUMsRUFBaUJDLEVBUnpCLFdBVTVCLE1BQU1DLEVBQW1CNXlFLE9BQU8ySCxPQUFPLE1BaUJ2QyxNQWIyQixpQkFBaEI4cUUsRUFDVEksRUFBWUYsRUFBV0YsRUFBWTVyRSxNQUFNLE1BQ2hDVCxNQUFNc0csUUFBUStsRSxHQUN2QkksRUFBWUYsRUFBV0YsR0FFdkJ6eUUsT0FBTzRaLEtBQUs2NEQsR0FBYWowRSxTQUFRLFNBQVNtMEUsR0FFeEMzeUUsT0FBT0MsT0FDTDJ5RSxFQUNBSixFQUFnQkMsRUFBWUUsR0FBWUQsRUFBaUJDLEdBRTdELElBRUtDLEVBWVAsU0FBU0MsRUFBWUYsRUFBV0csR0FDMUJKLElBQ0ZJLEVBQWNBLEVBQVkvc0UsS0FBSWhCLEdBQUtBLEVBQUUrRyxpQkFFdkNnbkUsRUFBWXQwRSxTQUFRLFNBQVN1MEUsR0FDM0IsTUFBTUMsRUFBT0QsRUFBUWxzRSxNQUFNLEtBQzNCK3JFLEVBQWlCSSxFQUFLLElBQU0sQ0FBQ0wsRUFBV00sRUFBZ0JELEVBQUssR0FBSUEsRUFBSyxJQUN4RSxHQUNGLENBQ0YsQ0FVQSxTQUFTQyxFQUFnQkYsRUFBU0csR0FHaEMsT0FBSUEsRUFDS2xwRCxPQUFPa3BELEdBVWxCLFNBQXVCSCxHQUNyQixPQUFPUixFQUFnQjlrQyxTQUFTc2xDLEVBQVFqbkUsY0FDMUMsQ0FUU3FuRSxDQUFjSixHQUFXLEVBQUksQ0FDdEMsQ0FvQkEsTUFBTUssRUFBbUIsQ0FBQyxFQUtwQjE3RCxFQUFTNGpCLElBQ2I1WixRQUFRaEssTUFBTTRqQixFQUFRLEVBT2xCM1osRUFBTyxDQUFDMlosS0FBWWx1QixLQUN4QnNVLFFBQVErMEIsSUFBSSxTQUFTbmIsT0FBY2x1QixFQUFLLEVBT3BDaW1FLEVBQWEsQ0FBQzN1QyxFQUFTcEosS0FDdkI4M0MsRUFBaUIsR0FBRzF1QyxLQUFXcEosT0FFbkM1WixRQUFRKzBCLElBQUksb0JBQW9CL1IsTUFBWXBKLEtBQzVDODNDLEVBQWlCLEdBQUcxdUMsS0FBV3BKLE1BQWEsRUFBSSxFQVM1Q2c0QyxFQUFrQixJQUFJajhELE1BOEI1QixTQUFTazhELEdBQWdCajhELEVBQU1rOEQsR0FBUyxJQUFFcjFFLElBQ3hDLElBQUk2RixFQUFTLEVBQ2IsTUFBTXl2RSxFQUFhbjhELEVBQUtuWixHQUVsQnUxRSxFQUFPLENBQUMsRUFFUnZsRCxFQUFZLENBQUMsRUFFbkIsSUFBSyxJQUFJanZCLEVBQUksRUFBR0EsR0FBS3MwRSxFQUFRbDJFLE9BQVE0QixJQUNuQ2l2QixFQUFVanZCLEVBQUk4RSxHQUFVeXZFLEVBQVd2MEUsR0FDbkN3MEUsRUFBS3gwRSxFQUFJOEUsSUFBVSxFQUNuQkEsR0FBVStxRSxFQUFpQnlFLEVBQVF0MEUsRUFBSSxJQUl6Q29ZLEVBQUtuWixHQUFPZ3dCLEVBQ1o3VyxFQUFLblosR0FBS3cxRSxNQUFRRCxFQUNsQnA4RCxFQUFLblosR0FBS3kxRSxRQUFTLENBQ3JCLENBK0RBLFNBQVNDLEdBQVd2OEQsSUFWcEIsU0FBb0JBLEdBQ2RBLEVBQUt3MUQsT0FBK0IsaUJBQWZ4MUQsRUFBS3cxRCxPQUFxQyxPQUFmeDFELEVBQUt3MUQsUUFDdkR4MUQsRUFBS3c4RCxXQUFheDhELEVBQUt3MUQsYUFDaEJ4MUQsRUFBS3cxRCxNQUVoQixDQU1FaUgsQ0FBV3o4RCxHQUVvQixpQkFBcEJBLEVBQUt3OEQsYUFDZHg4RCxFQUFLdzhELFdBQWEsQ0FBRUUsTUFBTzE4RCxFQUFLdzhELGFBRUwsaUJBQWxCeDhELEVBQUsyOEQsV0FDZDM4RCxFQUFLMjhELFNBQVcsQ0FBRUQsTUFBTzE4RCxFQUFLMjhELFdBakVsQyxTQUF5QjM4RCxHQUN2QixHQUFLbFIsTUFBTXNHLFFBQVE0SyxFQUFLMVcsT0FBeEIsQ0FFQSxHQUFJMFcsRUFBSzQ4RCxNQUFRNThELEVBQUs0NEQsY0FBZ0I1NEQsRUFBSzY4RCxZQUV6QyxNQURBejhELEVBQU0sc0VBQ0E0N0QsRUFHUixHQUErQixpQkFBcEJoOEQsRUFBS3c4RCxZQUErQyxPQUFwQng4RCxFQUFLdzhELFdBRTlDLE1BREFwOEQsRUFBTSw2QkFDQTQ3RCxFQUdSQyxHQUFnQmo4RCxFQUFNQSxFQUFLMVcsTUFBTyxDQUFFekMsSUFBSyxlQUN6Q21aLEVBQUsxVyxNQUFRcXVFLEVBQXVCMzNELEVBQUsxVyxNQUFPLENBQUV1dUUsU0FBVSxJQWJ0QixDQWN4QyxDQXFERWlGLENBQWdCOThELEdBaERsQixTQUF1QkEsR0FDckIsR0FBS2xSLE1BQU1zRyxRQUFRNEssRUFBS3pXLEtBQXhCLENBRUEsR0FBSXlXLEVBQUs0OEQsTUFBUTU4RCxFQUFLKzhELFlBQWMvOEQsRUFBS2c5RCxVQUV2QyxNQURBNThELEVBQU0sZ0VBQ0E0N0QsRUFHUixHQUE2QixpQkFBbEJoOEQsRUFBSzI4RCxVQUEyQyxPQUFsQjM4RCxFQUFLMjhELFNBRTVDLE1BREF2OEQsRUFBTSwyQkFDQTQ3RCxFQUdSQyxHQUFnQmo4RCxFQUFNQSxFQUFLelcsSUFBSyxDQUFFMUMsSUFBSyxhQUN2Q21aLEVBQUt6VyxJQUFNb3VFLEVBQXVCMzNELEVBQUt6VyxJQUFLLENBQUVzdUUsU0FBVSxJQWJwQixDQWN0QyxDQWtDRW9GLENBQWNqOUQsRUFDaEIsQ0FvQkEsU0FBU2s5RCxHQUFnQnhILEdBT3ZCLFNBQVN5SCxFQUFPdDBFLEVBQU91MEUsR0FDckIsT0FBTyxJQUFJN3JELE9BQ1RpSyxFQUFPM3lCLEdBQ1AsS0FDRzZzRSxFQUFTMkgsaUJBQW1CLElBQU0sS0FDbEMzSCxFQUFTNEgsYUFBZSxJQUFNLEtBQzlCRixFQUFTLElBQU0sSUFFdEIsQ0FlQSxNQUFNRyxFQUNKaGlELGNBQ0U1MUIsS0FBSzYzRSxhQUFlLENBQUMsRUFFckI3M0UsS0FBS3UyRSxRQUFVLEdBQ2Z2MkUsS0FBSzgzRSxRQUFVLEVBQ2Y5M0UsS0FBS2lFLFNBQVcsQ0FDbEIsQ0FHQTh6RSxRQUFRcHNELEVBQUlpYyxHQUNWQSxFQUFLM2pDLFNBQVdqRSxLQUFLaUUsV0FFckJqRSxLQUFLNjNFLGFBQWE3M0UsS0FBSzgzRSxTQUFXbHdDLEVBQ2xDNW5DLEtBQUt1MkUsUUFBUTMxRSxLQUFLLENBQUNnbkMsRUFBTWpjLElBQ3pCM3JCLEtBQUs4M0UsU0FBV2hHLEVBQWlCbm1ELEdBQU0sQ0FDekMsQ0FFQW5sQixVQUM4QixJQUF4QnhHLEtBQUt1MkUsUUFBUWwyRSxTQUdmTCxLQUFLK0ksS0FBTyxJQUFNLE1BRXBCLE1BQU1pdkUsRUFBY2g0RSxLQUFLdTJFLFFBQVF6dEUsS0FBSXMrQixHQUFNQSxFQUFHLEtBQzlDcG5DLEtBQUtpNEUsVUFBWVQsRUFBT3hGLEVBQXVCZ0csRUFBYSxDQUFFOUYsU0FBVSxPQUFRLEdBQ2hGbHlFLEtBQUt1USxVQUFZLENBQ25CLENBR0F4SCxLQUFLMGpCLEdBQ0h6c0IsS0FBS2k0RSxVQUFVMW5FLFVBQVl2USxLQUFLdVEsVUFDaEMsTUFBTXZILEVBQVFoSixLQUFLaTRFLFVBQVVsdkUsS0FBSzBqQixHQUNsQyxJQUFLempCLEVBQVMsT0FBTyxLQUdyQixNQUFNL0csRUFBSStHLEVBQU1rdkUsV0FBVSxDQUFDOXdDLEVBQUlubEMsSUFBTUEsRUFBSSxRQUFZbkIsSUFBUHNtQyxJQUV4Qyt3QyxFQUFZbjRFLEtBQUs2M0UsYUFBYTUxRSxHQUtwQyxPQUZBK0csRUFBTXcxQixPQUFPLEVBQUd2OEIsR0FFVGMsT0FBT0MsT0FBT2dHLEVBQU9tdkUsRUFDOUIsRUFrQ0YsTUFBTUMsRUFDSnhpRCxjQUVFNTFCLEtBQUswRyxNQUFRLEdBRWIxRyxLQUFLcTRFLGFBQWUsR0FDcEJyNEUsS0FBS3VGLE1BQVEsRUFFYnZGLEtBQUt1USxVQUFZLEVBQ2pCdlEsS0FBS3M0RSxXQUFhLENBQ3BCLENBR0FDLFdBQVc5MEUsR0FDVCxHQUFJekQsS0FBS3E0RSxhQUFhNTBFLEdBQVEsT0FBT3pELEtBQUtxNEUsYUFBYTUwRSxHQUV2RCxNQUFNKzBFLEVBQVUsSUFBSVosRUFJcEIsT0FIQTUzRSxLQUFLMEcsTUFBTTdDLE1BQU1KLEdBQU9sQyxTQUFRLEVBQUVvcUIsRUFBSWljLEtBQVU0d0MsRUFBUVQsUUFBUXBzRCxFQUFJaWMsS0FDcEU0d0MsRUFBUWh5RSxVQUNSeEcsS0FBS3E0RSxhQUFhNTBFLEdBQVMrMEUsRUFDcEJBLENBQ1QsQ0FFQUMsNkJBQ0UsT0FBMkIsSUFBcEJ6NEUsS0FBS3M0RSxVQUNkLENBRUFJLGNBQ0UxNEUsS0FBS3M0RSxXQUFhLENBQ3BCLENBR0FQLFFBQVFwc0QsRUFBSWljLEdBQ1Y1bkMsS0FBSzBHLE1BQU05RixLQUFLLENBQUMrcUIsRUFBSWljLElBQ0gsVUFBZEEsRUFBS3JqQyxNQUFrQnZFLEtBQUt1RixPQUNsQyxDQUdBd0QsS0FBSzBqQixHQUNILE1BQU0rRSxFQUFJeHhCLEtBQUt1NEUsV0FBV3Y0RSxLQUFLczRFLFlBQy9COW1ELEVBQUVqaEIsVUFBWXZRLEtBQUt1USxVQUNuQixJQUFJUixFQUFTeWhCLEVBQUV6b0IsS0FBSzBqQixHQWlDcEIsR0FBSXpzQixLQUFLeTRFLDZCQUNQLEdBQUkxb0UsR0FBVUEsRUFBT3RNLFFBQVV6RCxLQUFLdVEsZUFBa0IsQ0FDcEQsTUFBTW9vRSxFQUFLMzRFLEtBQUt1NEUsV0FBVyxHQUMzQkksRUFBR3BvRSxVQUFZdlEsS0FBS3VRLFVBQVksRUFDaENSLEVBQVM0b0UsRUFBRzV2RSxLQUFLMGpCLEVBQ25CLENBV0YsT0FSSTFjLElBQ0YvUCxLQUFLczRFLFlBQWN2b0UsRUFBTzlMLFNBQVcsRUFDakNqRSxLQUFLczRFLGFBQWV0NEUsS0FBS3VGLE9BRTNCdkYsS0FBSzA0RSxlQUlGM29FLENBQ1QsRUEySUYsR0FIS2dnRSxFQUFTNkkscUJBQW9CN0ksRUFBUzZJLG1CQUFxQixJQUc1RDdJLEVBQVMvb0IsVUFBWStvQixFQUFTL29CLFNBQVN4VyxTQUFTLFFBQ2xELE1BQU0sSUFBSXAyQixNQUFNLDZGQU1sQixPQUZBMjFELEVBQVM4SSxpQkFBbUJuSixFQUFVSyxFQUFTOEksa0JBQW9CLENBQUMsR0FoRnBFLFNBQVNDLEVBQVl6K0QsRUFBTS9WLEdBQ3pCLE1BQU15MEUsRUFBa0MsRUFDeEMsR0FBSTErRCxFQUFLMitELFdBQVksT0FBT0QsRUFFNUIsQ0FDRXRFLEVBR0FNLEVBQ0E2QixHQUNBM0IsR0FDQTF6RSxTQUFRMDNFLEdBQU9BLEVBQUk1K0QsRUFBTS9WLEtBRTNCeXJFLEVBQVM2SSxtQkFBbUJyM0UsU0FBUTAzRSxHQUFPQSxFQUFJNStELEVBQU0vVixLQUdyRCtWLEVBQUt1NkQsY0FBZ0IsS0FFckIsQ0FDRUQsRUFHQUcsRUFFQUUsR0FDQXp6RSxTQUFRMDNFLEdBQU9BLEVBQUk1K0QsRUFBTS9WLEtBRTNCK1YsRUFBSzIrRCxZQUFhLEVBRWxCLElBQUlFLEVBQWlCLEtBd0NyQixNQXZDNkIsaUJBQWxCNytELEVBQUt3NkQsVUFBeUJ4NkQsRUFBS3c2RCxTQUFTc0UsV0FJckQ5K0QsRUFBS3c2RCxTQUFXOXhFLE9BQU9DLE9BQU8sQ0FBQyxFQUFHcVgsRUFBS3c2RCxVQUN2Q3FFLEVBQWlCNytELEVBQUt3NkQsU0FBU3NFLGdCQUN4QjkrRCxFQUFLdzZELFNBQVNzRSxVQUV2QkQsRUFBaUJBLEdBQWtCLE1BRS9CNytELEVBQUt3NkQsV0FDUHg2RCxFQUFLdzZELFNBQVdVLEVBQWdCbDdELEVBQUt3NkQsU0FBVTlFLEVBQVMySCxtQkFHMURxQixFQUFNSyxpQkFBbUI1QixFQUFPMEIsR0FBZ0IsR0FFNUM1MEUsSUFDRytWLEVBQUsxVyxRQUFPMFcsRUFBSzFXLE1BQVEsU0FDOUJvMUUsRUFBTU0sUUFBVTdCLEVBQU91QixFQUFNcDFFLE9BQ3hCMFcsRUFBS3pXLEtBQVF5VyxFQUFLaS9ELGlCQUFnQmovRCxFQUFLelcsSUFBTSxTQUM5Q3lXLEVBQUt6VyxNQUFLbTFFLEVBQU1RLE1BQVEvQixFQUFPdUIsRUFBTW4xRSxNQUN6Q20xRSxFQUFNUyxjQUFnQjNqRCxFQUFPa2pELEVBQU1uMUUsTUFBUSxHQUN2Q3lXLEVBQUtpL0QsZ0JBQWtCaDFFLEVBQU9rMUUsZ0JBQ2hDVCxFQUFNUyxnQkFBa0JuL0QsRUFBS3pXLElBQU0sSUFBTSxJQUFNVSxFQUFPazFFLGdCQUd0RG4vRCxFQUFLeTRELFVBQVNpRyxFQUFNVSxVQUFZakMsRUFBdUNuOUQsRUFBWSxVQUNsRkEsRUFBSzJzQyxXQUFVM3NDLEVBQUsyc0MsU0FBVyxJQUVwQzNzQyxFQUFLMnNDLFNBQVcsR0FBRy84QyxVQUFVb1EsRUFBSzJzQyxTQUFTbCtDLEtBQUksU0FBUzIxQixHQUN0RCxPQW9ETixTQUEyQnBrQixHQVV6QixPQVRJQSxFQUFLNUQsV0FBYTRELEVBQUtxL0QsaUJBQ3pCci9ELEVBQUtxL0QsZUFBaUJyL0QsRUFBSzVELFNBQVMzTixLQUFJLFNBQVMyVCxHQUMvQyxPQUFPaXpELEVBQVVyMUQsRUFBTSxDQUFFNUQsU0FBVSxNQUFRZ0csRUFDN0MsS0FNRXBDLEVBQUtxL0QsZUFDQXIvRCxFQUFLcS9ELGVBT1ZDLEdBQW1CdC9ELEdBQ2RxMUQsRUFBVXIxRCxFQUFNLENBQUU4NkQsT0FBUTk2RCxFQUFLODZELE9BQVN6RixFQUFVcjFELEVBQUs4NkQsUUFBVSxPQUd0RXB5RSxPQUFPc3NFLFNBQVNoMUQsR0FDWHExRCxFQUFVcjFELEdBSVpBLENBQ1QsQ0FoRmF1L0QsQ0FBd0IsU0FBTm43QyxFQUFlcGtCLEVBQU9va0IsRUFDakQsS0FDQXBrQixFQUFLMnNDLFNBQVN6bEQsU0FBUSxTQUFTazlCLEdBQUtxNkMsRUFBOEIsRUFBS0MsRUFBUSxJQUUzRTErRCxFQUFLODZELFFBQ1AyRCxFQUFZeitELEVBQUs4NkQsT0FBUTd3RSxHQUczQnkwRSxFQUFNUCxRQTFIUixTQUF3Qm4rRCxHQUN0QixNQUFNdy9ELEVBQUssSUFBSXpCLEVBV2YsT0FUQS85RCxFQUFLMnNDLFNBQVN6bEQsU0FBUXU0RSxHQUFRRCxFQUFHOUIsUUFBUStCLEVBQUtuMkUsTUFBTyxDQUFFbEMsS0FBTXE0RSxFQUFNdjFFLEtBQU0sWUFFckU4VixFQUFLbS9ELGVBQ1BLLEVBQUc5QixRQUFRMTlELEVBQUttL0QsY0FBZSxDQUFFajFFLEtBQU0sUUFFckM4VixFQUFLeTRELFNBQ1ArRyxFQUFHOUIsUUFBUTE5RCxFQUFLeTRELFFBQVMsQ0FBRXZ1RSxLQUFNLFlBRzVCczFFLENBQ1QsQ0E2R2tCRSxDQUFlaEIsR0FDeEJBLENBQ1QsQ0FZT0QsQ0FBOEIsRUFDdkMsQ0FhQSxTQUFTYSxHQUFtQnQvRCxHQUMxQixRQUFLQSxJQUVFQSxFQUFLaS9ELGdCQUFrQkssR0FBbUJ0L0QsRUFBSzg2RCxRQUN4RCxDQTRDQSxNQUFNNkUsV0FBMkI1L0QsTUFDL0J3YixZQUFZM1IsRUFBUWcyRCxHQUNsQjlJLE1BQU1sdEQsR0FDTmprQixLQUFLdUssS0FBTyxxQkFDWnZLLEtBQUtpNkUsS0FBT0EsQ0FDZCxFQThCRixNQUFNNU4sR0FBU29ELEVBQ1RsdEQsR0FBVW10RCxFQUNWd0ssR0FBVy91QyxPQUFPLFdBazhCeEIsSUFBSWd2QyxHQTM3QlMsU0FBU3BMLEdBR3BCLE1BQU1xTCxFQUFZcjNFLE9BQU8ySCxPQUFPLE1BRTFCb25CLEVBQVUvdUIsT0FBTzJILE9BQU8sTUFFeEIydkUsRUFBVSxHQUloQixJQUFJQyxHQUFZLEVBQ2hCLE1BQU1DLEVBQXFCLHNGQUVyQkMsRUFBcUIsQ0FBRUMsbUJBQW1CLEVBQU1sd0UsS0FBTSxhQUFjeThDLFNBQVUsSUFLcEYsSUFBSWxuRCxFQUFVLENBQ1o0NkUscUJBQXFCLEVBQ3JCQyxvQkFBb0IsRUFDcEJDLGNBQWUscUJBQ2ZDLGlCQUFrQiw4QkFDbEIzSyxZQUFhLFFBQ2I0SyxZQUFhLFdBQ2JWLFVBQVcsS0FHWFcsVUFBVzdKLEdBU2IsU0FBUzhKLEVBQW1CQyxHQUMxQixPQUFPbjdFLEVBQVE4NkUsY0FBY2p6RCxLQUFLc3pELEVBQ3BDLENBK0NBLFNBQVNkLEVBQVVlLEVBQW9CQyxFQUFlQyxHQUNwRCxJQUFJcmxELEVBQU8sR0FDUGtsRCxFQUFlLEdBQ1UsaUJBQWxCRSxHQUNUcGxELEVBQU9tbEQsRUFDUEUsRUFBaUJELEVBQWNDLGVBQy9CSCxFQUFlRSxFQUFjcEwsV0FHN0JxRyxFQUFXLFNBQVUsdURBQ3JCQSxFQUFXLFNBQVUseUdBQ3JCNkUsRUFBZUMsRUFDZm5sRCxFQUFPb2xELFFBS2NyNkUsSUFBbkJzNkUsSUFBZ0NBLEdBQWlCLEdBR3JELE1BQU1wK0MsRUFBVSxDQUNkakgsT0FDQWc2QyxTQUFVa0wsR0FJWkksRUFBSyxtQkFBb0JyK0MsR0FJekIsTUFBTWp0QixFQUFTaXRCLEVBQVFqdEIsT0FDbkJpdEIsRUFBUWp0QixPQUNSdXJFLEVBQVd0K0MsRUFBUSt5QyxTQUFVL3lDLEVBQVFqSCxLQUFNcWxELEdBTS9DLE9BSkFyckUsRUFBT2dtQixLQUFPaUgsRUFBUWpILEtBRXRCc2xELEVBQUssa0JBQW1CdHJFLEdBRWpCQSxDQUNULENBV0EsU0FBU3VyRSxFQUFXTCxFQUFjTSxFQUFpQkgsRUFBZ0JJLEdBQ2pFLE1BQU1DLEVBQWMxNEUsT0FBTzJILE9BQU8sTUFZbEMsU0FBU2d4RSxJQUNQLElBQUtoekIsRUFBSW1zQixTQUVQLFlBREF2RCxFQUFRbEIsUUFBUXVMLEdBSWxCLElBQUlwckUsRUFBWSxFQUNoQm00QyxFQUFJMHdCLGlCQUFpQjdvRSxVQUFZLEVBQ2pDLElBQUl2SCxFQUFRMC9DLEVBQUkwd0IsaUJBQWlCcndFLEtBQUs0eUUsR0FDbENDLEVBQU0sR0FFVixLQUFPNXlFLEdBQU8sQ0FDWjR5RSxHQUFPRCxFQUFXenZELFVBQVUzYixFQUFXdkgsRUFBTXZGLE9BQzdDLE1BQU1vNEUsRUFBTzlMLEVBQVMySCxpQkFBbUIxdUUsRUFBTSxHQUFHNkYsY0FBZ0I3RixFQUFNLEdBQ2xFOHZCLEdBbEJpQmdqRCxFQWtCT0QsRUFBTG56QixFQWpCZm1zQixTQUFTaUgsSUFrQm5CLEdBQUloakQsRUFBTSxDQUNSLE1BQU9pakQsRUFBTUMsR0FBb0JsakQsRUFNakMsR0FMQXc0QyxFQUFRbEIsUUFBUXdMLEdBQ2hCQSxFQUFNLEdBRU5ILEVBQVlJLElBQVNKLEVBQVlJLElBQVMsR0FBSyxFQUMzQ0osRUFBWUksSUFqTEQsSUFpTDRCakosR0FBYW9KLEdBQ3BERCxFQUFLRSxXQUFXLEtBR2xCTCxHQUFPNXlFLEVBQU0sT0FDUixDQUNMLE1BQU1rekUsRUFBV25NLEVBQVM4SSxpQkFBaUJrRCxJQUFTQSxFQUNwRHpLLEVBQVFGLFdBQVdwb0UsRUFBTSxHQUFJa3pFLEVBQy9CLENBQ0YsTUFDRU4sR0FBTzV5RSxFQUFNLEdBRWZ1SCxFQUFZbTRDLEVBQUkwd0IsaUJBQWlCN29FLFVBQ2pDdkgsRUFBUTAvQyxFQUFJMHdCLGlCQUFpQnJ3RSxLQUFLNHlFLEVBQ3BDLENBdkNGLElBQTJCRyxFQXdDekJGLEdBQU9ELEVBQVd6dkQsVUFBVTNiLEdBQzVCK2dFLEVBQVFsQixRQUFRd0wsRUFDbEIsQ0E0QkEsU0FBU08sSUFDZ0IsTUFBbkJ6ekIsRUFBSTB6QixZQTNCVixXQUNFLEdBQW1CLEtBQWZULEVBQW1CLE9BRXZCLElBQUk1ckUsRUFBUyxLQUViLEdBQStCLGlCQUFwQjI0QyxFQUFJMHpCLFlBQTBCLENBQ3ZDLElBQUtoQyxFQUFVMXhCLEVBQUkwekIsYUFFakIsWUFEQTlLLEVBQVFsQixRQUFRdUwsR0FHbEI1ckUsRUFBU3VyRSxFQUFXNXlCLEVBQUkwekIsWUFBYVQsR0FBWSxFQUFNVSxFQUFjM3pCLEVBQUkwekIsY0FDekVDLEVBQWMzekIsRUFBSTB6QixhQUE0Q3JzRSxFQUFXLElBQzNFLE1BQ0VBLEVBQVN1c0UsRUFBY1gsRUFBWWp6QixFQUFJMHpCLFlBQVkvN0UsT0FBU3FvRCxFQUFJMHpCLFlBQWMsTUFPNUUxekIsRUFBSWtxQixVQUFZLElBQ2xCQSxHQUFhN2lFLEVBQU82aUUsV0FFdEJ0QixFQUFRRCxlQUFldGhFLEVBQU93c0UsU0FBVXhzRSxFQUFPZ2dFLFNBQ2pELENBSUl5TSxHQUVBZCxJQUVGQyxFQUFhLEVBQ2YsQ0FNQSxTQUFTYyxFQUFlNU0sRUFBTzdtRSxHQUM3QixJQUFJL0csRUFBSSxFQUNSLE1BQU11cEIsRUFBTXhpQixFQUFNM0ksT0FBUyxFQUMzQixLQUFPNEIsR0FBS3VwQixHQUFLLENBQ2YsSUFBS3FrRCxFQUFNNkcsTUFBTXowRSxHQUFJLENBQUVBLElBQUssUUFBVSxDQUN0QyxNQUFNeTZFLEVBQVEzTSxFQUFTOEksaUJBQWlCaEosRUFBTTV0RSxLQUFPNHRFLEVBQU01dEUsR0FDckRxUixFQUFPdEssRUFBTS9HLEdBQ2Z5NkUsRUFDRnBMLEVBQVFGLFdBQVc5OUQsRUFBTW9wRSxJQUV6QmYsRUFBYXJvRSxFQUNib29FLElBQ0FDLEVBQWEsSUFFZjE1RSxHQUNGLENBQ0YsQ0FNQSxTQUFTMDZFLEVBQWF0aUUsRUFBTXJSLEdBaUIxQixPQWhCSXFSLEVBQUt3MUQsT0FBK0IsaUJBQWZ4MUQsRUFBS3cxRCxPQUM1QnlCLEVBQVFqQixTQUFTTixFQUFTOEksaUJBQWlCeCtELEVBQUt3MUQsUUFBVXgxRCxFQUFLdzFELE9BRTdEeDFELEVBQUt3OEQsYUFFSHg4RCxFQUFLdzhELFdBQVdFLE9BQ2xCekYsRUFBUUYsV0FBV3VLLEVBQVk1TCxFQUFTOEksaUJBQWlCeCtELEVBQUt3OEQsV0FBV0UsUUFBVTE4RCxFQUFLdzhELFdBQVdFLE9BQ25HNEUsRUFBYSxJQUNKdGhFLEVBQUt3OEQsV0FBV0YsU0FFekI4RixFQUFlcGlFLEVBQUt3OEQsV0FBWTd0RSxHQUNoQzJ5RSxFQUFhLEtBSWpCanpCLEVBQU0zbEQsT0FBTzJILE9BQU8yUCxFQUFNLENBQUUvVixPQUFRLENBQUVwQixNQUFPd2xELEtBQ3RDQSxDQUNULENBUUEsU0FBU2swQixFQUFVdmlFLEVBQU1yUixFQUFPNnpFLEdBQzlCLElBQUlDLEVBLzRDVixTQUFvQm54RCxFQUFJb3hELEdBQ3RCLE1BQU0vekUsRUFBUTJpQixHQUFNQSxFQUFHNWlCLEtBQUtnMEUsR0FDNUIsT0FBTy96RSxHQUF5QixJQUFoQkEsRUFBTXZGLEtBQ3hCLENBNDRDb0J3NEUsQ0FBVzVoRSxFQUFLay9ELE1BQU9zRCxHQUVyQyxHQUFJQyxFQUFTLENBQ1gsR0FBSXppRSxFQUFLLFVBQVcsQ0FDbEIsTUFBTTg1RCxFQUFPLElBQUk3RSxFQUFTajFELEdBQzFCQSxFQUFLLFVBQVVyUixFQUFPbXJFLEdBQ2xCQSxFQUFLNUUsaUJBQWdCdU4sR0FBVSxFQUNyQyxDQUVBLEdBQUlBLEVBQVMsQ0FDWCxLQUFPemlFLEVBQUtnN0QsWUFBY2g3RCxFQUFLL1YsUUFDN0IrVixFQUFPQSxFQUFLL1YsT0FFZCxPQUFPK1YsQ0FDVCxDQUNGLENBR0EsR0FBSUEsRUFBS2kvRCxlQUNQLE9BQU9zRCxFQUFVdmlFLEVBQUsvVixPQUFRMEUsRUFBTzZ6RSxFQUV6QyxDQU9BLFNBQVNHLEVBQVNELEdBQ2hCLE9BQStCLElBQTNCcjBCLEVBQUk4dkIsUUFBUUYsWUFHZHFELEdBQWNvQixFQUFPLEdBQ2QsSUFJUEUsR0FBMkIsRUFDcEIsRUFFWCxDQXlDQSxTQUFTQyxFQUFXbDBFLEdBQ2xCLE1BQU0rekUsRUFBUy96RSxFQUFNLEdBQ2Y2ekUsRUFBcUJ0QixFQUFnQnJ2RCxVQUFVbGpCLEVBQU12RixPQUVyRDA1RSxFQUFVUCxFQUFVbDBCLEVBQUsxL0MsRUFBTzZ6RSxHQUN0QyxJQUFLTSxFQUFXLE9BQU9qRCxHQUV2QixNQUFNa0QsRUFBUzEwQixFQUNYQSxFQUFJc3VCLFVBQVl0dUIsRUFBSXN1QixTQUFTRCxPQUMvQm9GLElBQ0E3SyxFQUFRRixXQUFXMkwsRUFBUXIwQixFQUFJc3VCLFNBQVNELFFBQy9CcnVCLEVBQUlzdUIsVUFBWXR1QixFQUFJc3VCLFNBQVNMLFFBQ3RDd0YsSUFDQU0sRUFBZS96QixFQUFJc3VCLFNBQVVodUUsSUFDcEJvMEUsRUFBT25HLEtBQ2hCMEUsR0FBY29CLEdBRVJLLEVBQU8vRixXQUFhK0YsRUFBT2hHLGFBQy9CdUUsR0FBY29CLEdBRWhCWixJQUNJaUIsRUFBT2hHLGFBQ1R1RSxFQUFhb0IsSUFHakIsR0FDTXIwQixFQUFJbW5CLE9BQ055QixFQUFRYixZQUVML25CLEVBQUl1dUIsTUFBU3Z1QixFQUFJMHpCLGNBQ3BCeEosR0FBYWxxQixFQUFJa3FCLFdBRW5CbHFCLEVBQU1BLEVBQUlwa0QsYUFDSG9rRCxJQUFReTBCLEVBQVE3NEUsUUFJekIsT0FISTY0RSxFQUFRaEksUUFDVndILEVBQWFRLEVBQVFoSSxPQUFRbnNFLEdBRXhCbzBFLEVBQU8vRixVQUFZLEVBQUkwRixFQUFPMThFLE1BQ3ZDLENBYUEsSUFBSWc5RSxFQUFZLENBQUMsRUFRakIsU0FBU0MsRUFBY0MsRUFBaUJ2MEUsR0FDdEMsTUFBTSt6RSxFQUFTL3pFLEdBQVNBLEVBQU0sR0FLOUIsR0FGQTJ5RSxHQUFjNEIsRUFFQSxNQUFWUixFQUVGLE9BREFaLElBQ08sRUFPVCxHQUF1QixVQUFuQmtCLEVBQVU5NEUsTUFBbUMsUUFBZnlFLEVBQU16RSxNQUFrQjg0RSxFQUFVNTVFLFFBQVV1RixFQUFNdkYsT0FBb0IsS0FBWHM1RSxFQUFlLENBRzFHLEdBREFwQixHQUFjSixFQUFnQjEzRSxNQUFNbUYsRUFBTXZGLE1BQU91RixFQUFNdkYsTUFBUSxJQUMxRDYyRSxFQUFXLENBRWQsTUFBTTcvQyxFQUFNLElBQUlyZ0IsTUFBTSx3QkFBd0I2Z0UsTUFHOUMsTUFGQXhnRCxFQUFJd2dELGFBQWVBLEVBQ25CeGdELEVBQUkraUQsUUFBVUgsRUFBVTU3RSxLQUNsQmc1QixDQUNSLENBQ0EsT0FBTyxDQUNULENBR0EsR0FGQTRpRCxFQUFZcjBFLEVBRU8sVUFBZkEsRUFBTXpFLEtBQ1IsT0ExSEosU0FBc0J5RSxHQUNwQixNQUFNK3pFLEVBQVMvekUsRUFBTSxHQUNmeTBFLEVBQVV6MEUsRUFBTXZILEtBRWhCMHlFLEVBQU8sSUFBSTdFLEVBQVNtTyxHQUVwQkMsRUFBa0IsQ0FBQ0QsRUFBUTdJLGNBQWU2SSxFQUFRLGFBQ3hELElBQUssTUFBTXRyQyxLQUFNdXJDLEVBQ2YsR0FBS3ZyQyxJQUNMQSxFQUFHbnBDLEVBQU9tckUsR0FDTkEsRUFBSzVFLGdCQUFnQixPQUFPeU4sRUFBU0QsR0FlM0MsT0FaSVUsRUFBUXhHLEtBQ1YwRSxHQUFjb0IsR0FFVlUsRUFBUXhLLGVBQ1YwSSxHQUFjb0IsR0FFaEJaLElBQ0tzQixFQUFRdkcsYUFBZ0J1RyxFQUFReEssZUFDbkMwSSxFQUFhb0IsSUFHakJKLEVBQWFjLEVBQVN6MEUsR0FDZnkwRSxFQUFRdkcsWUFBYyxFQUFJNkYsRUFBTzE4RSxNQUMxQyxDQWdHV3M5RSxDQUFhMzBFLEdBQ2YsR0FBbUIsWUFBZkEsRUFBTXpFLE9BQXVCNjJFLEVBQWdCLENBR3RELE1BQU0zZ0QsRUFBTSxJQUFJcmdCLE1BQU0sbUJBQXFCMmlFLEVBQVMsZ0JBQWtCcjBCLEVBQUltbkIsT0FBUyxhQUFlLEtBRWxHLE1BREFwMUMsRUFBSXBnQixLQUFPcXVDLEVBQ0xqdUIsQ0FDUixDQUFPLEdBQW1CLFFBQWZ6eEIsRUFBTXpFLEtBQWdCLENBQy9CLE1BQU1xNUUsRUFBWVYsRUFBV2wwRSxHQUM3QixHQUFJNDBFLElBQWMxRCxHQUNoQixPQUFPMEQsQ0FFWCxDQUtBLEdBQW1CLFlBQWY1MEUsRUFBTXpFLE1BQWlDLEtBQVh3NEUsRUFFOUIsT0FBTyxFQU9ULEdBQUljLEVBQWEsS0FBVUEsRUFBMkIsRUFBZDcwRSxFQUFNdkYsTUFFNUMsTUFEWSxJQUFJMlcsTUFBTSw2REFheEIsT0FEQXVoRSxHQUFjb0IsRUFDUEEsRUFBTzE4RSxNQUNoQixDQUVBLE1BQU0wdkUsRUFBVytOLEVBQVk3QyxHQUM3QixJQUFLbEwsRUFFSCxNQURBdDFELEVBQU04L0QsRUFBbUJwM0UsUUFBUSxLQUFNODNFLElBQ2pDLElBQUk3Z0UsTUFBTSxzQkFBd0I2Z0UsRUFBZSxLQUd6RCxNQUFNcnhELEVBQUsydEQsR0FBZ0J4SCxHQUMzQixJQUFJaGdFLEVBQVMsR0FFVDI0QyxFQUFNOHlCLEdBQWdCNXhELEVBRTFCLE1BQU15eUQsRUFBZ0IsQ0FBQyxFQUNqQi9LLEVBQVUsSUFBSXh4RSxFQUFRaTdFLFVBQVVqN0UsSUF4R3RDLFdBQ0UsTUFBTWkrRSxFQUFPLEdBQ2IsSUFBSyxJQUFJMXNFLEVBQVVxM0MsRUFBS3IzQyxJQUFZMCtELEVBQVUxK0QsRUFBVUEsRUFBUS9NLE9BQzFEK00sRUFBUXcrRCxPQUNWa08sRUFBS24rQyxRQUFRdnVCLEVBQVF3K0QsT0FHekJrTyxFQUFLeDhFLFNBQVE2b0IsR0FBUWtuRCxFQUFRakIsU0FBU2ptRCxJQUN4QyxDQWlHQTR6RCxHQUNBLElBQUlyQyxFQUFhLEdBQ2IvSSxFQUFZLEVBQ1pudkUsRUFBUSxFQUNSbzZFLEVBQWEsRUFDYlosR0FBMkIsRUFFL0IsSUFHRSxJQUZBdjBCLEVBQUk4dkIsUUFBUUUsZ0JBRUgsQ0FDUG1GLElBQ0laLEVBR0ZBLEdBQTJCLEVBRTNCdjBCLEVBQUk4dkIsUUFBUUUsY0FFZGh3QixFQUFJOHZCLFFBQVFqb0UsVUFBWTlNLEVBRXhCLE1BQU11RixFQUFRMC9DLEVBQUk4dkIsUUFBUXp2RSxLQUFLd3lFLEdBRy9CLElBQUt2eUUsRUFBTyxNQUVaLE1BQ01pMUUsRUFBaUJYLEVBREgvQixFQUFnQnJ2RCxVQUFVem9CLEVBQU91RixFQUFNdkYsT0FDVHVGLEdBQ2xEdkYsRUFBUXVGLEVBQU12RixNQUFRdzZFLENBQ3hCLENBTUEsT0FMQVgsRUFBYy9CLEVBQWdCcnZELFVBQVV6b0IsSUFDeEM2dEUsRUFBUVQsZ0JBQ1JTLEVBQVFFLFdBQ1J6aEUsRUFBU3VoRSxFQUFRQyxTQUVWLENBQ0x4QixTQUFVa0wsRUFDVi8zRSxNQUFPNk0sRUFDUDZpRSxVQUFXQSxFQUNYRSxTQUFTLEVBQ1R5SixTQUFVakwsRUFDVjRNLEtBQU14MUIsRUErQlYsQ0E3QkUsTUFBT2p1QixHQUNQLEdBQUlBLEVBQUk0RCxTQUFXNUQsRUFBSTRELFFBQVFtUyxTQUFTLFdBQ3RDLE1BQU8sQ0FDTHUvQixTQUFVa0wsRUFDVi8zRSxNQUFPbXBFLEdBQU9rUCxHQUNkekksU0FBUyxFQUNURixVQUFXLEVBQ1h1TCxXQUFZLENBQ1Y5L0MsUUFBUzVELEVBQUk0RCxRQUNiNTZCLE1BQU9BLEVBQ1B1NUIsUUFBU3UrQyxFQUFnQjEzRSxNQUFNSixFQUFRLElBQUtBLEVBQVEsS0FDcEQ0VyxLQUFNb2dCLEVBQUlwZ0IsS0FDVitqRSxZQUFhcnVFLEdBRWZ3c0UsU0FBVWpMLEdBRVAsR0FBSWdKLEVBQ1QsTUFBTyxDQUNMdkssU0FBVWtMLEVBQ1YvM0UsTUFBT21wRSxHQUFPa1AsR0FDZHpJLFNBQVMsRUFDVEYsVUFBVyxFQUNYeUwsWUFBYTVqRCxFQUNiOGhELFNBQVVqTCxFQUNWNE0sS0FBTXgxQixHQUdSLE1BQU1qdUIsQ0FFVixDQUNGLENBbUNBLFNBQVM2aEQsRUFBY3ZtRCxFQUFNdW9ELEdBQzNCQSxFQUFpQkEsR0FBa0J4K0UsRUFBUXM2RSxXQUFhcjNFLE9BQU80WixLQUFLeTlELEdBQ3BFLE1BQU1tRSxFQTVCUixTQUFpQ3hvRCxHQUMvQixNQUFNaG1CLEVBQVMsQ0FDYjdNLE1BQU9tcEUsR0FBT3QyQyxHQUNkKzhDLFNBQVMsRUFDVEYsVUFBVyxFQUNYc0wsS0FBTTFELEVBQ04rQixTQUFVLElBQUl6OEUsRUFBUWk3RSxVQUFVajdFLElBR2xDLE9BREFpUSxFQUFPd3NFLFNBQVNuTSxRQUFRcjZDLEdBQ2pCaG1CLENBQ1QsQ0FrQm9CeXVFLENBQXdCem9ELEdBRXBDMG9ELEVBQVVILEVBQWV4Z0UsT0FBT2dnRSxHQUFhaGdFLE9BQU80Z0UsR0FBZTUxRSxLQUFJeUIsR0FDM0Urd0UsRUFBVy93RSxFQUFNd3JCLEdBQU0sS0FFekIwb0QsRUFBUTcrQyxRQUFRMitDLEdBRWhCLE1BQU1JLEVBQVNGLEVBQVE3aEUsTUFBSyxDQUFDK1AsRUFBR2tGLEtBRTlCLEdBQUlsRixFQUFFaW1ELFlBQWMvZ0QsRUFBRStnRCxVQUFXLE9BQU8vZ0QsRUFBRStnRCxVQUFZam1ELEVBQUVpbUQsVUFJeEQsR0FBSWptRCxFQUFFb2pELFVBQVlsK0MsRUFBRWsrQyxTQUFVLENBQzVCLEdBQUkrTixFQUFZbnhELEVBQUVvakQsVUFBVTZPLGFBQWUvc0QsRUFBRWsrQyxTQUMzQyxPQUFPLEVBQ0YsR0FBSStOLEVBQVlqc0QsRUFBRWsrQyxVQUFVNk8sYUFBZWp5RCxFQUFFb2pELFNBQ2xELE9BQVEsQ0FFWixDQU1BLE9BQU8sQ0FBQyxLQUdIOE8sRUFBTUMsR0FBY0gsRUFHckI1dUUsRUFBUzh1RSxFQUdmLE9BRkE5dUUsRUFBTyt1RSxXQUFhQSxFQUViL3VFLENBQ1QsQ0FxQkEsU0FBU2d2RSxFQUFpQjM0RSxHQUV4QixJQUFJaEMsRUFBTyxLQUNYLE1BQU0yckUsRUFwbkJSLFNBQXVCaVAsR0FDckIsSUFBSTM3RCxFQUFVMjdELEVBQU0vdEUsVUFBWSxJQUVoQ29TLEdBQVcyN0QsRUFBTXY4RSxXQUFhdThFLEVBQU12OEUsV0FBV3dPLFVBQVksR0FHM0QsTUFBTWpJLEVBQVFsSixFQUFRKzZFLGlCQUFpQjl4RSxLQUFLc2EsR0FDNUMsR0FBSXJhLEVBQU8sQ0FDVCxNQUFNK21FLEVBQVcrTixFQUFZOTBFLEVBQU0sSUFLbkMsT0FKSyttRSxJQUNIcnJELEVBQUs2MUQsRUFBbUJwM0UsUUFBUSxLQUFNNkYsRUFBTSxLQUM1QzBiLEVBQUssb0RBQXFEczZELElBRXJEalAsRUFBVy9tRSxFQUFNLEdBQUssY0FDL0IsQ0FFQSxPQUFPcWEsRUFDSnpaLE1BQU0sT0FDTnExRSxNQUFNQyxHQUFXbEUsRUFBbUJrRSxJQUFXcEIsRUFBWW9CLElBQ2hFLENBaW1CbUJDLENBQWMvNEUsR0FFL0IsR0FBSTQwRSxFQUFtQmpMLEdBQVcsT0FVbEMsR0FSQXNMLEVBQUssMEJBQ0gsQ0FBRWowQyxHQUFJaGhDLEVBQVMycEUsU0FBVUEsSUFPdkIzcEUsRUFBUTNCLFNBQVNwRSxPQUFTLElBQ3ZCUCxFQUFRNDZFLHNCQUNYajJELFFBQVFDLEtBQUssaUdBQ2JELFFBQVFDLEtBQUssNkRBQ2JELFFBQVFDLEtBQUssb0NBQ2JELFFBQVFDLEtBQUt0ZSxJQUVYdEcsRUFBUTY2RSxvQkFLVixNQUpZLElBQUlYLEdBQ2QsbURBQ0E1ekUsRUFBUStzQyxXQU1kL3VDLEVBQU9nQyxFQUNQLE1BQU1rTixFQUFPbFAsRUFBS3l1QyxZQUNaOWlDLEVBQVNnZ0UsRUFBV29LLEVBQVU3bUUsRUFBTSxDQUFFeThELFdBQVVxTCxnQkFBZ0IsSUFBVWtCLEVBQWNocEUsR0FFOUZsTixFQUFRK3NDLFVBQVlwakMsRUFBTzdNLE1BL0M3QixTQUF5QmtELEVBQVNnNUUsRUFBYUMsR0FDN0MsTUFBTXRQLEVBQVlxUCxHQUFldHRELEVBQVFzdEQsSUFBaUJDLEVBRTFEajVFLEVBQVFrNUUsVUFBVTl4QyxJQUFJLFFBQ3RCcG5DLEVBQVFrNUUsVUFBVTl4QyxJQUFJLFlBQVl1aUMsSUFDcEMsQ0EyQ0V3UCxDQUFnQm41RSxFQUFTMnBFLEVBQVVoZ0UsRUFBT2dnRSxVQUMxQzNwRSxFQUFRMkosT0FBUyxDQUNmZ2dFLFNBQVVoZ0UsRUFBT2dnRSxTQUVqQnBrRCxHQUFJNWIsRUFBTzZpRSxVQUNYQSxVQUFXN2lFLEVBQU82aUUsV0FFaEI3aUUsRUFBTyt1RSxhQUNUMTRFLEVBQVEwNEUsV0FBYSxDQUNuQi9PLFNBQVVoZ0UsRUFBTyt1RSxXQUFXL08sU0FDNUI2QyxVQUFXN2lFLEVBQU8rdUUsV0FBV2xNLFlBSWpDeUksRUFBSyx5QkFBMEIsQ0FBRWowQyxHQUFJaGhDLEVBQVMySixTQUFRdUQsUUFDeEQsQ0F1QkEsSUFBSWtzRSxHQUFpQixFQUtyQixTQUFTQyxJQUVxQixZQUF4Qi85RSxTQUFTbzVCLFdBS0VwNUIsU0FBU3dILGlCQUFpQnBKLEVBQVFnN0UsYUFDMUN2NUUsUUFBUXc5RSxHQUxiUyxHQUFpQixDQU1yQixDQW1FQSxTQUFTMUIsRUFBWXZ6RSxHQUVuQixPQURBQSxHQUFRQSxHQUFRLElBQUlzRSxjQUNidXJFLEVBQVU3dkUsSUFBUzZ2RSxFQUFVdG9ELEVBQVF2bkIsR0FDOUMsQ0FPQSxTQUFTbTFFLEVBQWdCQyxHQUFXLGFBQUUxRSxJQUNYLGlCQUFkMEUsSUFDVEEsRUFBWSxDQUFDQSxJQUVmQSxFQUFVcCtFLFNBQVFxK0UsSUFBVzl0RCxFQUFROHRELEVBQU0vd0UsZUFBaUJvc0UsQ0FBWSxHQUMxRSxDQU1BLFNBQVN5RCxFQUFjbjBFLEdBQ3JCLE1BQU1zMUUsRUFBTy9CLEVBQVl2ekUsR0FDekIsT0FBT3MxRSxJQUFTQSxFQUFLcEYsaUJBQ3ZCLENBc0NBLFNBQVNZLEVBQUtsMUQsRUFBT2hXLEdBQ25CLE1BQU1naUMsRUFBS2hzQixFQUNYazBELEVBQVE5NEUsU0FBUSxTQUFTdStFLEdBQ25CQSxFQUFPM3RDLElBQ1QydEMsRUFBTzN0QyxHQUFJaGlDLEVBRWYsR0FDRixDQWhJc0Isb0JBQVhvWCxRQUEwQkEsT0FBT1gsa0JBQzFDVyxPQUFPWCxpQkFBaUIsb0JBUDFCLFdBRU00NEQsR0FBZ0JDLEdBQ3RCLElBSW9ELEdBNklwRDE4RSxPQUFPQyxPQUFPK3JFLEVBQU0sQ0FDbEJvTCxZQUNBbUMsZ0JBQ0FtRCxlQUNBVixtQkFFQWdCLGVBZEYsU0FBaUMzNEMsR0FJL0IsT0FIQWd2QyxFQUFXLFNBQVUsb0RBQ3JCQSxFQUFXLFNBQVUsb0NBRWQySSxFQUFpQjMzQyxFQUMxQixFQVVFN2lCLFVBM0xGLFNBQW1CeTdELEdBQ2pCbGdGLEVBQVV5aUIsR0FBUXppQixFQUFTa2dGLEVBQzdCLEVBMExFQyxpQkF2THVCLEtBQ3ZCUixJQUNBckosRUFBVyxTQUFVLDBEQUEwRCxFQXNML0U4Six1QkFsTEYsV0FDRVQsSUFDQXJKLEVBQVcsU0FBVSxnRUFDdkIsRUFnTEVwSCxpQkE5SUYsU0FBMEJpTSxFQUFja0YsR0FDdEMsSUFBSU4sRUFBTyxLQUNYLElBQ0VBLEVBQU9NLEVBQW1CcFIsRUFVNUIsQ0FURSxNQUFPcVIsR0FHUCxHQUZBM2xFLEVBQU0sd0RBQXdEdFgsUUFBUSxLQUFNODNFLEtBRXZFWCxFQUFhLE1BQU04RixFQUFrQjNsRSxFQUFNMmxFLEdBS2hEUCxFQUFPckYsQ0FDVCxDQUVLcUYsRUFBS3QxRSxPQUFNczFFLEVBQUt0MUUsS0FBTzB3RSxHQUM1QmIsRUFBVWEsR0FBZ0I0RSxFQUMxQkEsRUFBS1EsY0FBZ0JGLEVBQW1CempELEtBQUssS0FBTXF5QyxHQUUvQzhRLEVBQUsvdEQsU0FDUDR0RCxFQUFnQkcsRUFBSy90RCxRQUFTLENBQUVtcEQsZ0JBRXBDLEVBeUhFcUYsbUJBbEhGLFNBQTRCckYsVUFDbkJiLEVBQVVhLEdBQ2pCLElBQUssTUFBTTJFLEtBQVM3OEUsT0FBTzRaLEtBQUttVixHQUMxQkEsRUFBUTh0RCxLQUFXM0UsVUFDZG5wRCxFQUFROHRELEVBR3JCLEVBNEdFVyxjQXZHRixXQUNFLE9BQU94OUUsT0FBTzRaLEtBQUt5OUQsRUFDckIsRUFzR0UwRCxjQUNBNEIsa0JBQ0FoQixnQkFDQW44RCxXQUNBaStELFVBaERGLFNBQW1CVixJQXJCbkIsU0FBMEJBLEdBRXBCQSxFQUFPLDJCQUE2QkEsRUFBTyw2QkFDN0NBLEVBQU8sMkJBQThCaG5ELElBQ25DZ25ELEVBQU8seUJBQ0wvOEUsT0FBT0MsT0FBTyxDQUFFZzhFLE1BQU9sbUQsRUFBS3NPLElBQU10TyxHQUNuQyxHQUdEZ25ELEVBQU8sMEJBQTRCQSxFQUFPLDRCQUM1Q0EsRUFBTywwQkFBNkJobkQsSUFDbENnbkQsRUFBTyx3QkFDTC84RSxPQUFPQyxPQUFPLENBQUVnOEUsTUFBT2xtRCxFQUFLc08sSUFBTXRPLEdBQ25DLEVBR1AsQ0FNRTJuRCxDQUFpQlgsR0FDakJ6RixFQUFRejVFLEtBQUtrL0UsRUFDZixJQWdEQS9RLEVBQUsyUixVQUFZLFdBQWFwRyxHQUFZLENBQU8sRUFDakR2TCxFQUFLNFIsU0FBVyxXQUFhckcsR0FBWSxDQUFNLEVBQy9DdkwsRUFBSzZSLGNBaDlCTyxTQWs5Qlo3UixFQUFLcUQsTUFBUSxDQUNYbm9FLE9BQVFBLEVBQ1J3bkUsVUFBV0EsRUFDWEcsT0FBUUEsRUFDUkQsU0FBVUEsRUFDVkQsaUJBQWtCQSxHQUdwQixJQUFLLE1BQU14d0UsS0FBTzB5RSxFQUVVLGlCQUFmQSxFQUFNMXlFLElBRWZndUUsRUFBYzM5RCxRQUFRcWlFLEVBQU0xeUUsSUFPaEMsT0FGQTZCLE9BQU9DLE9BQU8rckUsRUFBTTZFLEdBRWI3RSxDQUNULENBR2dCOFIsQ0FBSyxDQUFDLEdBRXRCanBELEVBQU9ybUIsUUFBVTRvRSxHQUNqQkEsR0FBVWxMLFlBQWNrTCxHQUN4QkEsR0FBVXhvRSxRQUFVd29FLGFDbm9FcEJ2aUQsRUFBT3JtQixRQXpYUCxTQUFjdzlELEdBQ1osTUFBTXFELEVBQVFyRCxFQUFLcUQsTUFDYjBPLEVBQU0sQ0FBQyxFQUNQQyxFQUFhLENBQ2pCcDlFLE1BQU8sT0FDUEMsSUFBSyxLQUNMb2pELFNBQVUsQ0FDUixPQUNBLENBQ0VyakQsTUFBTyxLQUNQcWpELFNBQVUsQ0FBRTg1QixNQUlsQi85RSxPQUFPQyxPQUFPODlFLEVBQUssQ0FDakI3dkUsVUFBVyxXQUNYd0YsU0FBVSxDQUNSLENBQUU5UyxNQUFPeXVFLEVBQU1ub0UsT0FBTyxxQkFHcEIsd0JBQ0Y4MkUsS0FJSixNQUFNQyxFQUFRLENBQ1ovdkUsVUFBVyxRQUNYdE4sTUFBTyxPQUNQQyxJQUFLLEtBQ0xvakQsU0FBVSxDQUFFK25CLEVBQUs0RCxtQkFFYnNPLEVBQVcsQ0FDZnQ5RSxNQUFPLGlCQUNQd3hFLE9BQVEsQ0FBRW51QixTQUFVLENBQ2xCK25CLEVBQUt1RixrQkFBa0IsQ0FDckIzd0UsTUFBTyxRQUNQQyxJQUFLLFFBQ0xxTixVQUFXLGNBSVhpd0UsRUFBZSxDQUNuQmp3RSxVQUFXLFNBQ1h0TixNQUFPLElBQ1BDLElBQUssSUFDTG9qRCxTQUFVLENBQ1IrbkIsRUFBSzRELGlCQUNMbU8sRUFDQUUsSUFHSkEsRUFBTWg2QixTQUFTcG1ELEtBQUtzZ0YsR0FDcEIsTUFVTUMsRUFBYSxDQUNqQng5RSxNQUFPLFNBQ1BDLElBQUssT0FDTG9qRCxTQUFVLENBQ1IsQ0FDRXJqRCxNQUFPLGdCQUNQc04sVUFBVyxVQUViODlELEVBQUt1RSxZQUNMd04sSUFjRU0sRUFBZ0JyUyxFQUFLaUYsUUFBUSxDQUNqQ0UsT0FBUSxJQVphLENBQ3JCLE9BQ0EsT0FDQSxNQUNBLEtBQ0EsTUFDQSxNQUNBLE9BQ0EsT0FDQSxRQUcyQjd0RSxLQUFLLFFBQ2hDdXNFLFVBQVcsS0FFUHlPLEVBQVcsQ0FDZnB3RSxVQUFXLFdBQ1h0TixNQUFPLDRCQUNQdXpFLGFBQWEsRUFDYmx3QixTQUFVLENBQUUrbkIsRUFBS3hzRCxRQUFRd3NELEVBQUsyRSxXQUFZLENBQUUvdkUsTUFBTyxnQkFDbkRpdkUsVUFBVyxHQTBQYixNQUFPLENBQ0xyb0UsS0FBTSxPQUNOdW5CLFFBQVMsQ0FBRSxNQUNYK2lELFNBQVUsQ0FDUnNFLFNBQVUsd0JBQ1ZyRCxRQTVQYSxDQUNmLEtBQ0EsT0FDQSxPQUNBLE9BQ0EsS0FDQSxNQUNBLFFBQ0EsS0FDQSxLQUNBLE9BQ0EsT0FDQSxPQUNBLFlBZ1BFd0wsUUE3T2EsQ0FDZixPQUNBLFNBNE9FQyxTQUFVLENBcE9aLFFBQ0EsS0FDQSxXQUNBLE9BQ0EsT0FDQSxPQUNBLFNBQ0EsVUFDQSxPQUNBLE1BQ0EsV0FDQSxTQUNBLFFBQ0EsT0FDQSxRQUNBLE9BQ0EsUUFDQSxRQUlBLFFBQ0EsT0FDQSxVQUNBLFNBQ0EsVUFDQSxVQUNBLE9BQ0EsU0FDQSxPQUNBLE1BQ0EsUUFDQSxTQUNBLFVBQ0EsU0FDQSxPQUNBLFlBQ0EsU0FDQSxPQUNBLFVBQ0EsU0FDQSxVQStMSSxNQUNBLFFBNUxKLFdBQ0EsS0FDQSxVQUNBLE1BQ0EsTUFDQSxRQUNBLFFBQ0EsZ0JBQ0EsV0FDQSxVQUNBLGVBQ0EsWUFDQSxhQUNBLFlBQ0EsV0FDQSxVQUNBLGFBQ0EsT0FDQSxVQUNBLFNBQ0EsU0FDQSxTQUNBLFVBQ0EsS0FDQSxLQUNBLFFBQ0EsWUFDQSxTQUNBLFFBQ0EsVUFDQSxVQUNBLE9BQ0EsT0FDQSxRQUNBLE1BQ0EsU0FDQSxPQUNBLFFBQ0EsUUFDQSxTQUNBLFNBQ0EsUUFDQSxTQUNBLFNBQ0EsT0FDQSxVQUNBLFNBQ0EsYUFDQSxTQUNBLFVBQ0EsV0FDQSxRQUNBLE9BQ0EsU0FDQSxRQUNBLFFBQ0EsV0FDQSxVQUNBLE9BQ0EsTUFDQSxXQUNBLGFBQ0EsUUFDQSxPQUNBLGNBQ0EsVUFDQSxTQUNBLE9BSUEsUUFDQSxRQUNBLFFBQ0EsUUFDQSxLQUNBLEtBQ0EsS0FDQSxNQUNBLFlBQ0EsS0FDQSxLQUNBLFFBQ0EsU0FDQSxRQUNBLFNBQ0EsS0FDQSxXQUNBLEtBQ0EsUUFDQSxRQUNBLE9BQ0EsUUFDQSxXQUNBLE9BQ0EsUUFDQSxTQUNBLFNBQ0EsTUFDQSxRQUNBLE9BQ0EsU0FDQSxNQUNBLFNBQ0EsTUFDQSxPQUNBLE9BQ0EsT0FDQSxTQUNBLEtBQ0EsU0FDQSxLQUNBLFFBQ0EsTUFDQSxLQUNBLFVBQ0EsWUFDQSxZQUNBLFlBQ0EsWUFDQSxPQUNBLE9BQ0EsUUFDQSxNQUNBLE1BQ0EsT0FDQSxLQUNBLFFBQ0EsV0FDQSxPQUNBLEtBQ0EsT0FDQSxXQUNBLFNBQ0EsT0FDQSxVQUNBLEtBQ0EsT0FDQSxNQUNBLE9BQ0EsU0FFQSxTQUNBLFNBQ0EsS0FDQSxPQUNBLFVBQ0EsT0FDQSxRQUNBLFFBQ0EsVUFDQSxRQUNBLFdBQ0EsU0FDQSxNQUNBLFdBQ0EsU0FDQSxNQUNBLFFBQ0EsT0FDQSxTQUNBLE9BQ0EsTUFDQSxPQUNBLFVBRUEsTUFDQSxRQUNBLFNBQ0EsU0FDQSxRQUNBLE1BQ0EsU0FDQSxRQW9CQXY2QixTQUFVLENBQ1JvNkIsRUFDQXJTLEVBQUtpRixVQUNMcU4sRUFDQUYsRUFDQXBTLEVBQUtzRSxrQkFDTDROLEVBeFBjLENBQUVqNEUsTUFBTyxrQkEwUHZCazRFLEVBN1RrQixDQUNwQmp3RSxVQUFXLEdBQ1h0TixNQUFPLE9BR1csQ0FDbEJzTixVQUFXLFNBQ1h0TixNQUFPLElBQ1BDLElBQUssS0F3VEhrOUUsR0FHTixXQ25FQWxwRCxFQUFPcm1CLFFBdFRQLFNBQVd3OUQsR0FDVCxNQUFNcUQsRUFBUXJELEVBQUtxRCxNQUliZSxFQUFzQnBFLEVBQUtscEUsUUFBUSxLQUFNLElBQUssQ0FBRW1oRCxTQUFVLENBQUUsQ0FBRXJqRCxNQUFPLFdBRXJFNjlFLEVBQWUsa0JBRWZDLEVBQW1CLHVCQUVyQnJQLEVBQU1ULFNBQVM2UCxHQUNmLGdCQUFrQnBQLEVBQU1ULFNBSkMsWUFLM0IsSUFHSStQLEVBQVEsQ0FDWnp3RSxVQUFXLE9BQ1h3RixTQUFVLENBQ1IsQ0FBRTlTLE1BQU8sc0JBQ1QsQ0FBRXFGLE1BQU8sMkJBUVAyNEUsRUFBVSxDQUNkMXdFLFVBQVcsU0FDWHdGLFNBQVUsQ0FDUixDQUNFOVMsTUFBTyxjQUNQQyxJQUFLLElBQ0xrdkUsUUFBUyxNQUNUOXJCLFNBQVUsQ0FBRStuQixFQUFLNEQsbUJBRW5CLENBQ0VodkUsTUFBTyxzRUFDUEMsSUFBSyxJQUNMa3ZFLFFBQVMsS0FFWC9ELEVBQUt1RixrQkFBa0IsQ0FDckIzd0UsTUFBTyxtQ0FDUEMsSUFBSywwQkFLTGcrRSxFQUFVLENBQ2Qzd0UsVUFBVyxTQUNYd0YsU0FBVSxDQUNSLENBQUU5UyxNQUFPLGlCQUNULENBQUVBLE1BQU8seUZBQ1QsQ0FBRUEsTUFBTyx3RkFFWGl2RSxVQUFXLEdBR1BpUCxFQUFlLENBQ25CNXdFLFVBQVcsT0FDWHROLE1BQU8sZUFDUEMsSUFBSyxJQUNMaXhFLFNBQVUsQ0FBRWlCLFFBQ1IsMEZBRUo5dUIsU0FBVSxDQUNSLENBQ0VyakQsTUFBTyxPQUNQaXZFLFVBQVcsR0FFYjdELEVBQUt4c0QsUUFBUW8vRCxFQUFTLENBQUUxd0UsVUFBVyxXQUNuQyxDQUNFQSxVQUFXLFNBQ1h0TixNQUFPLFNBRVR3dkUsRUFDQXBFLEVBQUtxRSx1QkFJSE0sRUFBYSxDQUNqQnppRSxVQUFXLFFBQ1h0TixNQUFPeXVFLEVBQU1ULFNBQVM2UCxHQUFnQnpTLEVBQUt1RCxTQUMzQ00sVUFBVyxHQUdQa1AsRUFBaUIxUCxFQUFNVCxTQUFTNlAsR0FBZ0J6UyxFQUFLdUQsU0FBVyxVQXNFaEV5UCxFQUFXLENBQ2ZqTSxRQXJFaUIsQ0FDakIsTUFDQSxPQUNBLFFBQ0EsT0FDQSxXQUNBLFVBQ0EsS0FDQSxPQUNBLE9BQ0EsU0FDQSxNQUNBLFVBQ0EsT0FDQSxLQUNBLFNBQ0EsV0FDQSxXQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsVUFDQSxRQUNBLFdBQ0EsUUFDQSxXQUNBLFdBQ0EsVUFDQSxXQUNBLFlBQ0EsaUJBQ0EsZ0JBRUEsVUFDQSxVQUNBLFdBQ0EsZ0JBQ0EsZUFFQSxXQThCQXZ4RSxLQTNCYyxDQUNkLFFBQ0EsU0FDQSxTQUNBLFdBQ0EsTUFDQSxRQUNBLE9BQ0EsT0FDQSxPQUNBLFFBQ0EsV0FDQSxhQUNBLGFBQ0EsYUFDQSxjQUVBLFFBQ0EsU0FFQSxVQUNBLE9BQ0EsYUFNQSs4RSxRQUFTLGtCQUVUQyxTQUFVLG96QkFXTlMsRUFBc0IsQ0FDMUJILEVBQ0FILEVBQ0F2TyxFQUNBcEUsRUFBS3FFLHFCQUNMd08sRUFDQUQsR0FHSU0sRUFBcUIsQ0FJekJ4ckUsU0FBVSxDQUNSLENBQ0U5UyxNQUFPLElBQ1BDLElBQUssS0FFUCxDQUNFRCxNQUFPLEtBQ1BDLElBQUssTUFFUCxDQUNFK3dFLGNBQWUsd0JBQ2Yvd0UsSUFBSyxNQUdUaXhFLFNBQVVrTixFQUNWLzZCLFNBQVVnN0IsRUFBb0IvM0UsT0FBTyxDQUNuQyxDQUNFdEcsTUFBTyxLQUNQQyxJQUFLLEtBQ0xpeEUsU0FBVWtOLEVBQ1YvNkIsU0FBVWc3QixFQUFvQi8zRSxPQUFPLENBQUUsU0FDdkMyb0UsVUFBVyxLQUdmQSxVQUFXLEdBR1BzUCxFQUF1QixDQUMzQnYrRSxNQUFPLElBQU04OUUsRUFBbUIsZUFBaUJLLEVBQ2pENUssYUFBYSxFQUNidHpFLElBQUssUUFDTHd6RSxZQUFZLEVBQ1p2QyxTQUFVa04sRUFDVmpQLFFBQVMsaUJBQ1Q5ckIsU0FBVSxDQUNSLENBQ0VyakQsTUF4Tm1CLHFCQXlObkJreEUsU0FBVWtOLEVBQ1ZuUCxVQUFXLEdBRWIsQ0FDRWp2RSxNQUFPbStFLEVBQ1A1SyxhQUFhLEVBQ2Jsd0IsU0FBVSxDQUFFK25CLEVBQUt4c0QsUUFBUW14RCxFQUFZLENBQUV6aUUsVUFBVyxvQkFDbEQyaEUsVUFBVyxHQUliLENBQ0VBLFVBQVcsRUFDWDVwRSxNQUFPLEtBRVQsQ0FDRWlJLFVBQVcsU0FDWHROLE1BQU8sS0FDUEMsSUFBSyxLQUNMaXhFLFNBQVVrTixFQUNWblAsVUFBVyxFQUNYNXJCLFNBQVUsQ0FDUm1zQixFQUNBcEUsRUFBS3FFLHFCQUNMdU8sRUFDQUMsRUFDQUYsRUFFQSxDQUNFLzlFLE1BQU8sS0FDUEMsSUFBSyxLQUNMaXhFLFNBQVVrTixFQUNWblAsVUFBVyxFQUNYNXJCLFNBQVUsQ0FDUixPQUNBbXNCLEVBQ0FwRSxFQUFLcUUscUJBQ0x1TyxFQUNBQyxFQUNBRixNQUtSQSxFQUNBdk8sRUFDQXBFLEVBQUtxRSxxQkFDTHlPLElBSUosTUFBTyxDQUNMdDNFLEtBQU0sSUFDTnVuQixRQUFTLENBQUUsS0FDWCtpRCxTQUFVa04sRUFHVnRILG1CQUFtQixFQUNuQjNILFFBQVMsS0FDVDlyQixTQUFVLEdBQUcvOEMsT0FDWGc0RSxFQUNBQyxFQUNBRixFQUNBLENBQ0VILEVBQ0EsQ0FDRWwrRSxNQUFPb3JFLEVBQUt1RCxTQUFXLEtBQ3ZCdUMsU0FBVWtOLEdBRVosQ0FDRTl3RSxVQUFXLFFBQ1gwakUsY0FBZSwwQkFDZi93RSxJQUFLLFdBQ0xvakQsU0FBVSxDQUNSLENBQUUydEIsY0FBZSxzQkFDakI1RixFQUFLMkUsZUFJYm5pRSxRQUFTLENBQ1A0d0UsYUFBY04sRUFDZHh4RSxRQUFTc3hFLEVBQ1Q5TSxTQUFVa04sR0FHaEIsWUM0UEFucUQsRUFBT3JtQixRQWhqQlAsU0FBYXc5RCxHQUNYLE1BQU1xRCxFQUFRckQsRUFBS3FELE1BSWJlLEVBQXNCcEUsRUFBS2xwRSxRQUFRLEtBQU0sSUFBSyxDQUFFbWhELFNBQVUsQ0FBRSxDQUFFcmpELE1BQU8sV0FFckU2OUUsRUFBZSxrQkFFZkMsRUFBbUIsaUNBRXJCclAsRUFBTVQsU0FBUzZQLEdBQ2YsZ0JBQWtCcFAsRUFBTVQsU0FKQyxZQUszQixJQUVJeVEsRUFBc0IsQ0FDMUJueEUsVUFBVyxPQUNYdE4sTUFBTyxzQkFNSGcrRSxFQUFVLENBQ2Qxd0UsVUFBVyxTQUNYd0YsU0FBVSxDQUNSLENBQ0U5UyxNQUFPLGNBQ1BDLElBQUssSUFDTGt2RSxRQUFTLE1BQ1Q5ckIsU0FBVSxDQUFFK25CLEVBQUs0RCxtQkFFbkIsQ0FDRWh2RSxNQUFPLHNFQUNQQyxJQUFLLElBQ0xrdkUsUUFBUyxLQUVYL0QsRUFBS3VGLGtCQUFrQixDQUNyQjN3RSxNQUFPLG1DQUNQQyxJQUFLLDBCQUtMZytFLEVBQVUsQ0FDZDN3RSxVQUFXLFNBQ1h3RixTQUFVLENBQ1IsQ0FBRTlTLE1BQU8saUJBQ1QsQ0FBRUEsTUFBTyx5RkFDVCxDQUFFQSxNQUFPLHdGQUVYaXZFLFVBQVcsR0FHUGlQLEVBQWUsQ0FDbkI1d0UsVUFBVyxPQUNYdE4sTUFBTyxlQUNQQyxJQUFLLElBQ0xpeEUsU0FBVSxDQUFFaUIsUUFDUiwwRkFFSjl1QixTQUFVLENBQ1IsQ0FDRXJqRCxNQUFPLE9BQ1BpdkUsVUFBVyxHQUViN0QsRUFBS3hzRCxRQUFRby9ELEVBQVMsQ0FBRTF3RSxVQUFXLFdBQ25DLENBQ0VBLFVBQVcsU0FDWHROLE1BQU8sU0FFVHd2RSxFQUNBcEUsRUFBS3FFLHVCQUlITSxFQUFhLENBQ2pCemlFLFVBQVcsUUFDWHROLE1BQU95dUUsRUFBTVQsU0FBUzZQLEdBQWdCelMsRUFBS3VELFNBQzNDTSxVQUFXLEdBR1BrUCxFQUFpQjFQLEVBQU1ULFNBQVM2UCxHQUFnQnpTLEVBQUt1RCxTQUFXLFVBNlJoRStQLEVBQWUsQ0FDbkI5OUUsS0FoTXFCLENBQ3JCLE9BQ0EsT0FDQSxXQUNBLFdBQ0EsVUFDQSxTQUNBLFFBQ0EsTUFDQSxPQUNBLFFBQ0EsT0FDQSxVQUNBLFdBQ0EsU0FDQSxRQUNBLFVBaUxBdXhFLFFBNVJ3QixDQUN4QixVQUNBLFVBQ0EsTUFDQSxTQUNBLE1BQ0EsZ0JBQ0EsZ0JBQ0Esa0JBQ0EsT0FDQSxTQUNBLFFBQ0EsUUFDQSxPQUNBLFFBQ0EsUUFDQSxXQUNBLFlBQ0EsV0FDQSxRQUNBLFVBQ0EsZ0JBQ0EsWUFDQSxZQUNBLFlBQ0EsV0FDQSxXQUNBLFVBQ0EsU0FDQSxLQUNBLGtCQUNBLE9BQ0EsT0FDQSxXQUNBLFNBQ0EsU0FDQSxRQUNBLFFBQ0EsTUFDQSxTQUNBLE9BQ0EsS0FDQSxTQUNBLFNBQ0EsU0FDQSxVQUNBLFlBQ0EsTUFDQSxXQUNBLE1BQ0EsU0FDQSxVQUNBLFdBQ0EsS0FDQSxRQUNBLFdBQ0EsVUFDQSxZQUNBLFNBQ0EsV0FDQSxXQUNBLHNCQUNBLFdBQ0EsU0FDQSxTQUNBLGdCQUNBLGlCQUNBLFNBQ0EsU0FDQSxlQUNBLFdBQ0EsT0FDQSxlQUNBLFFBQ0EsbUJBQ0EsMkJBQ0EsT0FDQSxNQUNBLFVBQ0EsU0FDQSxXQUNBLFFBQ0EsUUFDQSxVQUNBLFdBQ0EsUUFDQSxNQUNBLFVBc01Bd0wsUUFkZSxDQUNmLE9BQ0EsUUFDQSxVQUNBLFVBQ0EsUUFVQUMsU0FOZSxDQUFFLFdBT2pCZSxZQWpMaUIsQ0FDakIsTUFDQSxXQUNBLFVBQ0EsbUJBQ0EsU0FDQSxVQUNBLHFCQUNBLHlCQUNBLHFCQUNBLFFBQ0EsYUFDQSxTQUNBLFlBQ0EsbUJBQ0EsZ0JBQ0EsVUFDQSxRQUNBLGFBQ0EsV0FDQSxXQUNBLFFBQ0EsV0FDQSxnQkFDQSxnQkFDQSxPQUNBLFVBQ0EsaUJBQ0EsUUFDQSxrQkFDQSx3QkFDQSxjQUNBLE1BQ0EsZ0JBQ0EsY0FDQSxlQUNBLHFCQUNBLGFBQ0EsUUFDQSxjQUNBLGVBQ0EsY0FDQSxTQUNBLFlBQ0EsUUFDQSxjQUNBLGFBQ0EsZ0JBQ0EscUJBQ0EscUJBQ0EsZ0JBQ0EsVUFDQSxTQUNBLFdBQ0EsVUFDQSxpQkE2SElDLEVBQW9CLENBQ3hCdHhFLFVBQVcsb0JBQ1gyaEUsVUFBVyxFQUNYaUMsU0FBVSxDQUVSMk4sTUEvSG1CLENBQ3JCLFFBQ0EsTUFDQSxPQUNBLFFBQ0EsV0FDQSxPQUNBLE9BQ0EsUUFDQSxTQUNBLE9BQ0EsT0FDQSxNQUNBLE9BQ0EsTUFDQSxPQUNBLE9BQ0EsVUFDQSxPQUNBLFdBQ0EsT0FDQSxNQUNBLE9BQ0EsUUFDQSxPQUNBLFVBQ0EsVUFDQSxRQUNBLE9BQ0EsUUFDQSxTQUNBLFNBQ0EsU0FDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFdBQ0EsT0FDQSxVQUNBLFFBQ0EsTUFDQSxRQUNBLFlBQ0EsY0FDQSw0QkFDQSxhQUNBLGNBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLE9BQ0EsT0FDQSxNQUNBLFNBQ0EsVUFDQSxPQUNBLFVBQ0EsUUFDQSxNQUNBLE9BQ0EsV0FDQSxVQUNBLE9BQ0EsU0FDQSxNQUNBLFNBQ0EsUUFDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsVUFDQSxTQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxTQUNBLFNBQ0EsT0FDQSxNQUNBLE9BQ0EsWUFDQSxnQkFDQSxVQUNBLFVBQ0EsV0FDQSxRQUNBLFVBQ0EsYUE0QkE3K0UsTUFBT3l1RSxFQUFNbm9FLE9BQ1gsS0FDQSxlQUNBLFNBQ0EsVUFDQSxhQUNBLFlBQ0E4a0UsRUFBS3VELFNBQ0xGLEVBQU1YLFVBQVUsc0JBR2R1USxFQUFzQixDQUMxQk8sRUFDQVYsRUFDQU8sRUFDQWpQLEVBQ0FwRSxFQUFLcUUscUJBQ0x3TyxFQUNBRCxHQUdJTSxFQUFxQixDQUl6QnhyRSxTQUFVLENBQ1IsQ0FDRTlTLE1BQU8sSUFDUEMsSUFBSyxLQUVQLENBQ0VELE1BQU8sS0FDUEMsSUFBSyxNQUVQLENBQ0Urd0UsY0FBZSx3QkFDZi93RSxJQUFLLE1BR1RpeEUsU0FBVXdOLEVBQ1ZyN0IsU0FBVWc3QixFQUFvQi8zRSxPQUFPLENBQ25DLENBQ0V0RyxNQUFPLEtBQ1BDLElBQUssS0FDTGl4RSxTQUFVd04sRUFDVnI3QixTQUFVZzdCLEVBQW9CLzNFLE9BQU8sQ0FBRSxTQUN2QzJvRSxVQUFXLEtBR2ZBLFVBQVcsR0FHUHNQLEVBQXVCLENBQzNCanhFLFVBQVcsV0FDWHROLE1BQU8sSUFBTTg5RSxFQUFtQixlQUFpQkssRUFDakQ1SyxhQUFhLEVBQ2J0ekUsSUFBSyxRQUNMd3pFLFlBQVksRUFDWnZDLFNBQVV3TixFQUNWdlAsUUFBUyxpQkFDVDlyQixTQUFVLENBQ1IsQ0FDRXJqRCxNQXJibUIscUJBc2JuQmt4RSxTQUFVd04sRUFDVnpQLFVBQVcsR0FFYixDQUNFanZFLE1BQU9tK0UsRUFDUDVLLGFBQWEsRUFDYmx3QixTQUFVLENBQUUwc0IsR0FDWmQsVUFBVyxHQUliLENBQ0VqdkUsTUFBTyxLQUNQaXZFLFVBQVcsR0FHYixDQUNFanZFLE1BQU8sSUFDUDIxRSxnQkFBZ0IsRUFDaEJ0eUIsU0FBVSxDQUNSMjZCLEVBQ0FDLElBS0osQ0FDRWhQLFVBQVcsRUFDWDVwRSxNQUFPLEtBRVQsQ0FDRWlJLFVBQVcsU0FDWHROLE1BQU8sS0FDUEMsSUFBSyxLQUNMaXhFLFNBQVV3TixFQUNWelAsVUFBVyxFQUNYNXJCLFNBQVUsQ0FDUm1zQixFQUNBcEUsRUFBS3FFLHFCQUNMdU8sRUFDQUMsRUFDQVEsRUFFQSxDQUNFeitFLE1BQU8sS0FDUEMsSUFBSyxLQUNMaXhFLFNBQVV3TixFQUNWelAsVUFBVyxFQUNYNXJCLFNBQVUsQ0FDUixPQUNBbXNCLEVBQ0FwRSxFQUFLcUUscUJBQ0x1TyxFQUNBQyxFQUNBUSxNQUtSQSxFQUNBalAsRUFDQXBFLEVBQUtxRSxxQkFDTHlPLElBSUosTUFBTyxDQUNMdDNFLEtBQU0sTUFDTnVuQixRQUFTLENBQ1AsS0FDQSxNQUNBLE1BQ0EsTUFDQSxLQUNBLE1BQ0EsT0FFRitpRCxTQUFVd04sRUFDVnZQLFFBQVMsS0FDVCtGLGlCQUFrQixDQUFFLG9CQUFxQixZQUN6Qzd4QixTQUFVLEdBQUcvOEMsT0FDWGc0RSxFQUNBQyxFQUNBSyxFQUNBUCxFQUNBLENBQ0VILEVBQ0EsQ0FDRWwrRSxNQUFPLDRNQUNQQyxJQUFLLElBQ0xpeEUsU0FBVXdOLEVBQ1ZyN0IsU0FBVSxDQUNSLE9BQ0FvN0IsSUFHSixDQUNFeitFLE1BQU9vckUsRUFBS3VELFNBQVcsS0FDdkJ1QyxTQUFVd04sR0FFWixDQUNFcjVFLE1BQU8sQ0FFTCx3REFDQSxNQUNBLE9BRUZpSSxVQUFXLENBQ1QsRUFBRyxVQUNILEVBQUcsa0JBS2YsWUN0S0EybUIsRUFBT3JtQixRQXRZUCxTQUFnQnc5RCxHQUNkLE1BNklNZ1QsRUFBVyxDQUNmak0sUUFqR3NCLENBQ3RCLFdBQ0EsS0FDQSxPQUNBLFFBQ0EsT0FDQSxRQUNBLFFBQ0EsUUFDQSxXQUNBLEtBQ0EsT0FDQSxRQUNBLFdBQ0EsU0FDQSxVQUNBLFFBQ0EsTUFDQSxVQUNBLE9BQ0EsS0FDQSxXQUNBLEtBQ0EsWUFDQSxXQUNBLEtBQ0EsT0FDQSxZQUNBLE1BQ0EsV0FDQSxNQUNBLFdBQ0EsU0FDQSxVQUNBLFlBQ0EsU0FDQSxXQUNBLFNBQ0EsTUFDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLGFBQ0EsU0FDQSxTQUNBLFNBQ0EsT0FDQSxRQUNBLE1BQ0EsU0FDQSxZQUNBLFNBQ0EsUUFDQSxVQUNBLE9BQ0EsV0FDQSxTQXdDeUI3ckUsT0F0Q0MsQ0FDMUIsTUFDQSxRQUNBLE1BQ0EsWUFDQSxRQUNBLFFBQ0EsS0FDQSxhQUNBLFNBQ0EsT0FDQSxNQUNBLFNBQ0EsUUFDQSxPQUNBLE9BQ0EsT0FDQSxNQUNBLFNBQ0EsTUFDQSxVQUNBLEtBQ0EsS0FDQSxVQUNBLFVBQ0EsU0FDQSxTQUNBLE1BQ0EsWUFDQSxVQUNBLE1BQ0EsT0FDQSxRQUNBLE9BQ0EsVUFLQXMzRSxTQS9Jd0IsQ0FDeEIsT0FDQSxPQUNBLE9BQ0EsVUFDQSxXQUNBLFNBQ0EsVUFDQSxPQUNBLFFBQ0EsTUFDQSxPQUNBLE9BQ0EsUUFDQSxTQUNBLFFBQ0EsUUFDQSxTQUNBLFFBQ0EsT0FDQSxVQTRIQUQsUUF6R3VCLENBQ3ZCLFVBQ0EsUUFDQSxPQUNBLFNBdUdJNU4sRUFBYTNFLEVBQUt4c0QsUUFBUXdzRCxFQUFLMkUsV0FBWSxDQUFFL3ZFLE1BQU8sdUJBQ3BEaStFLEVBQVUsQ0FDZDN3RSxVQUFXLFNBQ1h3RixTQUFVLENBQ1IsQ0FBRTlTLE1BQU8saUJBQ1QsQ0FBRUEsTUFBTyxtRUFDVCxDQUFFQSxNQUFPLHdGQUVYaXZFLFVBQVcsR0FFUDZQLEVBQWtCLENBQ3RCeHhFLFVBQVcsU0FDWHROLE1BQU8sS0FDUEMsSUFBSyxJQUNMb2pELFNBQVUsQ0FBRSxDQUFFcmpELE1BQU8sUUFFakIrK0UsRUFBd0IzVCxFQUFLeHNELFFBQVFrZ0UsRUFBaUIsQ0FBRTNQLFFBQVMsT0FDakVrTyxFQUFRLENBQ1ovdkUsVUFBVyxRQUNYdE4sTUFBTyxLQUNQQyxJQUFLLEtBQ0xpeEUsU0FBVWtOLEdBRU5ZLEVBQWM1VCxFQUFLeHNELFFBQVF5K0QsRUFBTyxDQUFFbE8sUUFBUyxPQUM3QzhQLEVBQXNCLENBQzFCM3hFLFVBQVcsU0FDWHROLE1BQU8sTUFDUEMsSUFBSyxJQUNMa3ZFLFFBQVMsS0FDVDlyQixTQUFVLENBQ1IsQ0FBRXJqRCxNQUFPLFFBQ1QsQ0FBRUEsTUFBTyxRQUNUb3JFLEVBQUs0RCxpQkFDTGdRLElBR0VFLEVBQStCLENBQ25DNXhFLFVBQVcsU0FDWHROLE1BQU8sT0FDUEMsSUFBSyxJQUNMb2pELFNBQVUsQ0FDUixDQUFFcmpELE1BQU8sUUFDVCxDQUFFQSxNQUFPLFFBQ1QsQ0FBRUEsTUFBTyxNQUNUcTlFLElBR0U4QixFQUFxQy9ULEVBQUt4c0QsUUFBUXNnRSxFQUE4QixDQUNwRi9QLFFBQVMsS0FDVDlyQixTQUFVLENBQ1IsQ0FBRXJqRCxNQUFPLFFBQ1QsQ0FBRUEsTUFBTyxRQUNULENBQUVBLE1BQU8sTUFDVGcvRSxLQUdKM0IsRUFBTWg2QixTQUFXLENBQ2Y2N0IsRUFDQUQsRUFDQUgsRUFDQTFULEVBQUs4RCxpQkFDTDlELEVBQUtnRSxrQkFDTDZPLEVBQ0E3UyxFQUFLcUUsc0JBRVB1UCxFQUFZMzdCLFNBQVcsQ0FDckI4N0IsRUFDQUYsRUFDQUYsRUFDQTNULEVBQUs4RCxpQkFDTDlELEVBQUtnRSxrQkFDTDZPLEVBQ0E3UyxFQUFLeHNELFFBQVF3c0QsRUFBS3FFLHFCQUFzQixDQUFFTixRQUFTLFFBRXJELE1BQU1pUSxFQUFTLENBQUV0c0UsU0FBVSxDQUN6Qm9zRSxFQUNBRCxFQUNBSCxFQUNBMVQsRUFBSzhELGlCQUNMOUQsRUFBS2dFLG9CQUdEaVEsRUFBbUIsQ0FDdkJyL0UsTUFBTyxJQUNQQyxJQUFLLElBQ0xvakQsU0FBVSxDQUNSLENBQUUydEIsY0FBZSxVQUNqQmpCLElBR0V1UCxFQUFnQmxVLEVBQUt1RCxTQUFXLEtBQU92RCxFQUFLdUQsU0FBVyxhQUFldkQsRUFBS3VELFNBQVcsaUJBQ3RGNFEsRUFBZ0IsQ0FHcEJ2L0UsTUFBTyxJQUFNb3JFLEVBQUt1RCxTQUNsQk0sVUFBVyxHQUdiLE1BQU8sQ0FDTHJvRSxLQUFNLEtBQ051bkIsUUFBUyxDQUNQLEtBQ0EsTUFFRitpRCxTQUFVa04sRUFDVmpQLFFBQVMsS0FDVDlyQixTQUFVLENBQ1IrbkIsRUFBS2xwRSxRQUNILE1BQ0EsSUFDQSxDQUNFcXhFLGFBQWEsRUFDYmx3QixTQUFVLENBQ1IsQ0FDRS8xQyxVQUFXLFNBQ1h3RixTQUFVLENBQ1IsQ0FDRTlTLE1BQU8sTUFDUGl2RSxVQUFXLEdBRWIsQ0FBRWp2RSxNQUFPLGtCQUNULENBQ0VBLE1BQU8sTUFDUEMsSUFBSyxVQU9qQm1yRSxFQUFLb0Usb0JBQ0xwRSxFQUFLcUUscUJBQ0wsQ0FDRW5pRSxVQUFXLE9BQ1h0TixNQUFPLElBQ1BDLElBQUssSUFDTGl4RSxTQUFVLENBQUVpQixRQUFTLHdGQUV2QmlOLEVBQ0FuQixFQUNBLENBQ0VqTixjQUFlLGtCQUNmL0IsVUFBVyxFQUNYaHZFLElBQUssUUFDTGt2RSxRQUFTLFVBQ1Q5ckIsU0FBVSxDQUNSLENBQUUydEIsY0FBZSxlQUNqQmpCLEVBQ0FzUCxFQUNBalUsRUFBS29FLG9CQUNMcEUsRUFBS3FFLHVCQUdULENBQ0V1QixjQUFlLFlBQ2YvQixVQUFXLEVBQ1hodkUsSUFBSyxRQUNMa3ZFLFFBQVMsU0FDVDlyQixTQUFVLENBQ1Iwc0IsRUFDQTNFLEVBQUtvRSxvQkFDTHBFLEVBQUtxRSx1QkFHVCxDQUNFdUIsY0FBZSxTQUNmL0IsVUFBVyxFQUNYaHZFLElBQUssUUFDTGt2RSxRQUFTLFNBQ1Q5ckIsU0FBVSxDQUNSMHNCLEVBQ0FzUCxFQUNBalUsRUFBS29FLG9CQUNMcEUsRUFBS3FFLHVCQUdULENBRUVuaUUsVUFBVyxPQUNYdE4sTUFBTyxvQkFDUHN2RSxjQUFjLEVBQ2RydkUsSUFBSyxNQUNMd3pFLFlBQVksRUFDWnB3QixTQUFVLENBQ1IsQ0FDRS8xQyxVQUFXLFNBQ1h0TixNQUFPLElBQ1BDLElBQUssT0FJWCxDQUdFK3dFLGNBQWUsOEJBQ2YvQixVQUFXLEdBRWIsQ0FDRTNoRSxVQUFXLFdBQ1h0TixNQUFPLElBQU1zL0UsRUFBZ0IsU0FBV2xVLEVBQUt1RCxTQUFXLHdCQUN4RDRFLGFBQWEsRUFDYnR6RSxJQUFLLFdBQ0x3ekUsWUFBWSxFQUNadkMsU0FBVWtOLEVBQ1YvNkIsU0FBVSxDQUVSLENBQ0UydEIsY0EzVWlCLENBQ3pCLFNBQ0EsVUFDQSxZQUNBLFNBQ0EsV0FDQSxZQUNBLFdBQ0EsUUFDQSxTQUNBLFdBQ0EsU0FDQSxVQUNBLE1BQ0EsU0FDQSxXQTRUMEN0dUUsS0FBSyxLQUN2Q3VzRSxVQUFXLEdBRWIsQ0FDRWp2RSxNQUFPb3JFLEVBQUt1RCxTQUFXLHdCQUN2QjRFLGFBQWEsRUFDYmx3QixTQUFVLENBQ1IrbkIsRUFBSzJFLFdBQ0xzUCxHQUVGcFEsVUFBVyxHQUViLENBQUU1cEUsTUFBTyxRQUNULENBQ0VpSSxVQUFXLFNBQ1h0TixNQUFPLEtBQ1BDLElBQUssS0FDTHF2RSxjQUFjLEVBQ2RtRSxZQUFZLEVBQ1p2QyxTQUFVa04sRUFDVm5QLFVBQVcsRUFDWDVyQixTQUFVLENBQ1IrN0IsRUFDQW5CLEVBQ0E3UyxFQUFLcUUsdUJBR1RyRSxFQUFLb0Usb0JBQ0xwRSxFQUFLcUUsdUJBR1Q4UCxHQUdOLFlDN1lBLE1BNkNNQyxFQUFPLENBQ1gsSUFDQSxPQUNBLFVBQ0EsVUFDQSxRQUNBLFFBQ0EsSUFDQSxhQUNBLE9BQ0EsU0FDQSxTQUNBLFVBQ0EsT0FDQSxPQUNBLEtBQ0EsTUFDQSxVQUNBLE1BQ0EsTUFDQSxLQUNBLEtBQ0EsS0FDQSxXQUNBLGFBQ0EsU0FDQSxTQUNBLE9BQ0EsS0FDQSxLQUNBLEtBQ0EsS0FDQSxLQUNBLEtBQ0EsU0FDQSxTQUNBLE9BQ0EsSUFDQSxTQUNBLE1BQ0EsUUFDQSxNQUNBLE1BQ0EsUUFDQSxTQUNBLEtBQ0EsT0FDQSxPQUNBLE9BQ0EsTUFDQSxTQUNBLEtBQ0EsSUFDQSxJQUNBLFFBQ0EsT0FDQSxVQUNBLE9BQ0EsU0FDQSxVQUNBLE1BQ0EsUUFDQSxRQUNBLEtBQ0EsV0FDQSxRQUNBLEtBQ0EsUUFDQSxPQUNBLEtBQ0EsS0FDQSxNQUNBLFNBR0lDLEVBQWlCLENBQ3JCLFlBQ0EsY0FDQSxlQUNBLFFBQ0EsY0FDQSxjQUNBLHNCQUNBLGdCQUNBLGVBQ0EsZUFDQSxnQkFDQSxPQUNBLFNBQ0EsUUFDQSxrQkFDQSxhQUNBLGNBQ0EsaUJBQ0Esa0JBQ0EsVUFDQSx1QkFDQSxtQkFDQSx5QkFDQSwrQkFDQSxhQUNBLE9BQ0EsWUFDQSxTQUNBLFFBRUEsWUFDQSxZQUNBLGFBQ0EsY0FJSUMsRUFBaUIsQ0FDckIsU0FDQSxXQUNBLFFBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxNQUNBLFdBQ0EsT0FDQSxRQUNBLFVBQ0EsUUFDQSxjQUNBLGdCQUNBLGFBQ0EsU0FDQSxRQUNBLGdCQUNBLGVBQ0EsTUFDQSxPQUNBLGVBQ0EsUUFDQSxnQkFDQSxXQUNBLFVBQ0EsS0FDQSxPQUNBLGFBQ0EsZUFDQSxPQUNBLE9BQ0EsYUFDQSxNQUNBLFlBQ0EsVUFDQSxpQkFDQSxlQUNBLG1CQUNBLGNBQ0EsYUFDQSxlQUNBLFdBQ0EsZUFDQSxPQUNBLG9CQUNBLFlBQ0EsYUFDQSxXQUNBLFFBQ0EsT0FDQSxRQUNBLFNBQ0EsZ0JBQ0EsZUFDQSxRQUNBLFVBQ0EsU0FJSUMsRUFBa0IsQ0FDdEIsUUFDQSxXQUNBLFNBQ0EsTUFDQSxhQUNBLGVBQ0EsYUFDQSxnQkFDQSxTQUNBLE9BQ0EsY0FDQSxZQUNBLFVBQ0Esa0JBR0lDLEVBQWEsQ0FDakIsZ0JBQ0EsY0FDQSxhQUNBLE1BQ0EsWUFDQSxrQkFDQSxzQkFDQSxxQkFDQSxzQkFDQSw0QkFDQSxpQkFDQSx1QkFDQSw0QkFDQSxzQkFDQSxhQUNBLHdCQUNBLHdCQUNBLGtCQUNBLG1CQUNBLG1CQUNBLG9CQUNBLHNCQUNBLG9CQUNBLGtCQUNBLGFBQ0EsU0FDQSxlQUNBLHFCQUNBLG1CQUNBLHlCQUNBLHlCQUNBLHlCQUNBLHFCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLHFCQUNBLHFCQUNBLGdCQUNBLHNCQUNBLDRCQUNBLDZCQUNBLHNCQUNBLHNCQUNBLGtCQUNBLGVBQ0EsZUFDQSxzQkFDQSxzQkFDQSxxQkFDQSxzQkFDQSxxQkFDQSxnQkFDQSxzQkFDQSxvQkFDQSwwQkFDQSwwQkFDQSwwQkFDQSxzQkFDQSw0QkFDQSw0QkFDQSw0QkFDQSxzQkFDQSxzQkFDQSxjQUNBLG9CQUNBLG9CQUNBLG9CQUNBLGdCQUNBLGVBQ0EscUJBQ0EscUJBQ0EscUJBQ0EsaUJBQ0EsZUFDQSxhQUNBLG1CQUNBLHlCQUNBLDBCQUNBLG1CQUNBLG1CQUNBLGVBQ0EsU0FDQSx1QkFDQSxhQUNBLGFBQ0EsY0FDQSxlQUNBLGVBQ0EsZUFDQSxjQUNBLFFBQ0EsT0FDQSxZQUNBLFlBQ0EsUUFDQSxlQUNBLGNBQ0EsYUFDQSxjQUNBLG9CQUNBLG9CQUNBLG9CQUNBLGNBQ0EsZUFDQSxVQUNBLFVBQ0EsVUFDQSxxQkFDQSxvQkFDQSxnQkFDQSxNQUNBLFlBQ0EsYUFDQSxTQUNBLFlBQ0EsVUFDQSxjQUNBLFNBQ0EsT0FDQSxhQUNBLGlCQUNBLFlBQ0EsWUFDQSxjQUNBLFlBQ0EsUUFDQSxPQUNBLE9BQ0EsZUFDQSxjQUNBLHdCQUNBLGVBQ0EseUJBQ0EsWUFDQSxtQkFDQSxpQkFDQSxlQUNBLGFBQ0EsaUJBQ0EsZUFDQSxvQkFDQSwwQkFDQSx5QkFDQSx1QkFDQSx3QkFDQSwwQkFDQSxjQUNBLE1BQ0EsNkJBQ0EsT0FDQSxZQUNBLG9CQUNBLGlCQUNBLGlCQUNBLGNBQ0Esa0JBQ0Esb0JBQ0EsV0FDQSxXQUNBLGVBQ0EsaUJBQ0EsZ0JBQ0Esc0JBQ0Esd0JBQ0EscUJBQ0Esc0JBQ0EsU0FDQSxVQUNBLE9BQ0Esb0JBQ0Esa0JBQ0EsbUJBQ0EsV0FDQSxjQUNBLFlBQ0Esa0JBQ0EsT0FDQSxpQkFDQSxhQUNBLGNBQ0EsYUFDQSxtQkFDQSxzQkFDQSxrQkFDQSxTQUNBLGVBQ0EsbUJBQ0EscUJBQ0EsZ0JBQ0EsZ0JBQ0Esb0JBQ0Esc0JBQ0EsY0FDQSxlQUNBLGFBQ0EsUUFDQSxPQUNBLGNBQ0EsbUJBQ0EscUJBQ0EscUJBQ0Esb0JBQ0EscUJBQ0Esb0JBQ0EsWUFDQSxpQkFDQSxhQUNBLFlBQ0EsY0FDQSxnQkFDQSxjQUNBLFlBQ0EsWUFDQSxpQkFDQSxhQUNBLGtCQUNBLFlBQ0EsaUJBQ0EsYUFDQSxrQkFDQSxZQUNBLGlCQUNBLFdBQ0EsWUFDQSxXQUNBLFlBQ0EsU0FDQSxPQUNBLFNBQ0EsYUFDQSxrQkFDQSxVQUNBLFFBQ0EsVUFDQSxVQUNBLGdCQUNBLGlCQUNBLGdCQUNBLGdCQUNBLFdBQ0EsZ0JBQ0EsYUFDQSxhQUNBLFVBQ0EsZ0JBQ0Esb0JBQ0Esc0JBQ0EsaUJBQ0EsaUJBQ0EscUJBQ0EsdUJBQ0EsZUFDQSxnQkFDQSxjQUNBLG1CQUNBLG9CQUNBLG9CQUNBLFFBQ0EsY0FDQSxlQUNBLGNBQ0EscUJBQ0EsaUJBQ0EsV0FDQSxTQUNBLFNBQ0EsT0FDQSxhQUNBLGNBQ0EsUUFDQSxVQUNBLGdCQUNBLHNCQUNBLDBCQUNBLDRCQUNBLHVCQUNBLHVCQUNBLDJCQUNBLDZCQUNBLHFCQUNBLHNCQUNBLG9CQUNBLGlCQUNBLHVCQUNBLDJCQUNBLDZCQUNBLHdCQUNBLHdCQUNBLDRCQUNBLDhCQUNBLHNCQUNBLHVCQUNBLHFCQUNBLG9CQUNBLG1CQUNBLG1CQUNBLGtCQUNBLG1CQUNBLGtCQUNBLHdCQUNBLGVBQ0EsZ0JBQ0EsUUFDQSxXQUNBLE1BQ0EsV0FDQSxlQUNBLGFBQ0EsaUJBQ0Esa0JBQ0EsdUJBQ0Esa0JBQ0Esd0JBQ0EsdUJBQ0Esd0JBQ0EsZ0JBQ0Esc0JBQ0EseUJBQ0Esc0JBQ0EsY0FDQSxlQUNBLG1CQUNBLGdCQUNBLGlCQUNBLGNBQ0EsaUJBQ0EsMEJBQ0EsTUFDQSxZQUNBLGdCQUNBLG1CQUNBLGtCQUNBLGFBQ0EsbUJBQ0Esc0JBQ0Esc0JBQ0EsNkJBQ0EsZUFDQSxpQkFDQSxhQUNBLGdCQUNBLGlCQUNBLGVBQ0EsY0FDQSxjQUNBLGFBQ0EsZUFDQSxlQUNBLGNBQ0EsU0FDQSxRQUNBLGNBQ0EsYUFDQSxlQUNBLFlBQ0EsZUFDQSxXQUdBQyxVQXlJRjVyRCxFQUFPcm1CLFFBaElQLFNBQWF3OUQsR0FDWCxNQUFNcUQsRUFBUXJELEVBQUtxRCxNQUNiMzJELEVBbG1CTSxDQUFDc3pELElBQ04sQ0FDTDBVLFVBQVcsQ0FDVDVULE1BQU8sT0FDUGxzRSxNQUFPLGNBRVQrL0UsY0FBZTNVLEVBQUtxRSxxQkFDcEJ1USxTQUFVLENBQ1I5VCxNQUFPLFNBQ1Bsc0UsTUFBTyxtREFFVDQrRSxrQkFBbUIsQ0FDakJ0eEUsVUFBVyxXQUNYdE4sTUFBTyxnQkFFVGlnRix3QkFBeUIsQ0FDdkIvVCxNQUFPLGdCQUNQbHNFLE1BQU8sS0FDUEMsSUFBSyxLQUNMa3ZFLFFBQVMsSUFDVDlyQixTQUFVLENBQ1IrbkIsRUFBSzhELGlCQUNMOUQsRUFBS2dFLG9CQUdUOFEsZ0JBQWlCLENBQ2ZoVSxNQUFPLFNBQ1Bsc0UsTUFBT29yRSxFQUFLeUQsVUFBTHpELGtHQVNQNkQsVUFBVyxHQUVia1IsYUFBYyxDQUNaN3lFLFVBQVcsT0FDWHROLE1BQU8sOEJBMGpCR2l3RSxDQUFNN0UsR0FLZDRTLEVBQVUsQ0FDZDVTLEVBQUs4RCxpQkFDTDlELEVBQUtnRSxtQkFHUCxNQUFPLENBQ0x4b0UsS0FBTSxNQUNObXRFLGtCQUFrQixFQUNsQjVFLFFBQVMsVUFDVCtCLFNBQVUsQ0FBRWtQLGlCQUFrQixXQUM5QmxMLGlCQUFrQixDQUdoQmtMLGlCQUFrQixnQkFDcEIvOEIsU0FBVSxDQUNSdnJDLEVBQU1pb0UsY0FuQlksQ0FBRS8vRSxNQUFPLGdDQXVCM0I4WCxFQUFNb29FLGdCQUNOLENBQ0U1eUUsVUFBVyxjQUNYdE4sTUFBTyxrQkFDUGl2RSxVQUFXLEdBRWIsQ0FDRTNoRSxVQUFXLGlCQUNYdE4sTUFBTyw2QkFDUGl2RSxVQUFXLEdBRWJuM0QsRUFBTW1vRSx3QkFDTixDQUNFM3lFLFVBQVcsa0JBQ1h3RixTQUFVLENBQ1IsQ0FBRTlTLE1BQU8sS0FBTzAvRSxFQUFlaDlFLEtBQUssS0FBTyxLQUMzQyxDQUFFMUMsTUFBTyxTQUFXMi9FLEVBQWdCajlFLEtBQUssS0FBTyxPQVNwRG9WLEVBQU1xb0UsYUFDTixDQUNFN3lFLFVBQVcsWUFDWHROLE1BQU8sT0FBUzQvRSxFQUFXbDlFLEtBQUssS0FBTyxRQUd6QyxDQUNFMUMsTUFBTyxJQUNQQyxJQUFLLFFBQ0xvakQsU0FBVSxDQUNSdnJDLEVBQU1pb0UsY0FDTmpvRSxFQUFNa29FLFNBQ05sb0UsRUFBTWdvRSxVQUNOaG9FLEVBQU1vb0UsbUJBQ0hsQyxFQUlILENBQ0VoK0UsTUFBTyxtQkFDUEMsSUFBSyxLQUNMZ3ZFLFVBQVcsRUFDWGlDLFNBQVUsQ0FBRTBNLFNBQVUsZ0JBQ3RCdjZCLFNBQVUsSUFDTDI2QixFQUNILENBQ0Uxd0UsVUFBVyxTQUdYdE4sTUFBTyxPQUNQMjFFLGdCQUFnQixFQUNoQmxDLFlBQVksS0FJbEIzN0QsRUFBTThtRSxvQkFHVixDQUNFNStFLE1BQU95dUUsRUFBTVgsVUFBVSxLQUN2Qjd0RSxJQUFLLE9BQ0xndkUsVUFBVyxFQUNYRSxRQUFTLElBQ1Q5ckIsU0FBVSxDQUNSLENBQ0UvMUMsVUFBVyxVQUNYdE4sTUE1RmEscUJBOEZmLENBQ0VBLE1BQU8sS0FDUDIxRSxnQkFBZ0IsRUFDaEJsQyxZQUFZLEVBQ1p4RSxVQUFXLEVBQ1hpQyxTQUFVLENBQ1JzRSxTQUFVLFVBQ1ZyRCxRQXRHUyxrQkF1R1RrTyxVQUFXWixFQUFlLzhFLEtBQUssTUFFakMyZ0QsU0FBVSxDQUNSLENBQ0VyakQsTUFBTyxlQUNQc04sVUFBVyxnQkFFVjB3RSxFQUNIbG1FLEVBQU1vb0Usb0JBS2QsQ0FDRTV5RSxVQUFXLGVBQ1h0TixNQUFPLE9BQVN3L0UsRUFBSzk4RSxLQUFLLEtBQU8sU0FJekMsWUNqcUJBdXhCLEVBQU9ybUIsUUFwRFAsU0FBY3c5RCxHQUNaLE1BQU1xRCxFQUFRckQsRUFBS3FELE1BQ25CLE1BQU8sQ0FDTDduRSxLQUFNLE9BQ051bkIsUUFBUyxDQUFFLFNBQ1hrMUIsU0FBVSxDQUNSLENBQ0UvMUMsVUFBVyxPQUNYMmhFLFVBQVcsR0FDWDVwRSxNQUFPb3BFLEVBQU1SLE9BQ1gsK0JBQ0EsOEJBQ0EseUJBR0osQ0FDRTNnRSxVQUFXLFVBQ1h3RixTQUFVLENBQ1IsQ0FDRTlTLE1BQU95dUUsRUFBTVIsT0FDWCxVQUNBLFNBQ0EsUUFDQSxRQUNBLFVBQ0EsU0FDQSxlQUVGaHVFLElBQUssS0FFUCxDQUFFb0YsTUFBTyxjQUdiLENBQ0VpSSxVQUFXLFdBQ1h0TixNQUFPLE1BQ1BDLElBQUssS0FFUCxDQUNFcU4sVUFBVyxXQUNYdE4sTUFBTyxLQUNQQyxJQUFLLEtBRVAsQ0FDRXFOLFVBQVcsV0FDWHROLE1BQU8sS0FDUEMsSUFBSyxNQUliLFlDaUZBZzBCLEVBQU9ybUIsUUFuSVAsU0FBWXc5RCxHQUNWLE1Bd0VNZ1QsRUFBVyxDQUNmak0sUUE1QlUsQ0FDVixRQUNBLE9BQ0EsT0FDQSxRQUNBLFdBQ0EsVUFDQSxRQUNBLE9BQ0EsY0FDQSxNQUNBLE9BQ0EsS0FDQSxPQUNBLEtBQ0EsU0FDQSxZQUNBLE1BQ0EsVUFDQSxRQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsT0FDQSxPQUlBdnhFLEtBbkRZLENBQ1osT0FDQSxPQUNBLFlBQ0EsYUFDQSxRQUNBLFVBQ0EsVUFDQSxPQUNBLFFBQ0EsUUFDQSxRQUNBLFNBQ0EsUUFDQSxTQUNBLFNBQ0EsU0FDQSxNQUNBLE9BQ0EsVUFDQSxRQWdDQSs4RSxRQTNFZSxDQUNmLE9BQ0EsUUFDQSxPQUNBLE9Bd0VBQyxTQXRFZ0IsQ0FDaEIsU0FDQSxNQUNBLFFBQ0EsVUFDQSxPQUNBLE9BQ0EsTUFDQSxPQUNBLE1BQ0EsUUFDQSxRQUNBLFVBQ0EsT0FDQSxVQUNBLFdBeURGLE1BQU8sQ0FDTGgzRSxLQUFNLEtBQ051bkIsUUFBUyxDQUFFLFVBQ1graUQsU0FBVWtOLEVBQ1ZqUCxRQUFTLEtBQ1Q5ckIsU0FBVSxDQUNSK25CLEVBQUtvRSxvQkFDTHBFLEVBQUtxRSxxQkFDTCxDQUNFbmlFLFVBQVcsU0FDWHdGLFNBQVUsQ0FDUnM0RCxFQUFLZ0Usa0JBQ0xoRSxFQUFLOEQsaUJBQ0wsQ0FDRWx2RSxNQUFPLElBQ1BDLElBQUssT0FJWCxDQUNFcU4sVUFBVyxTQUNYd0YsU0FBVSxDQUNSLENBQ0U5UyxNQUFPb3JFLEVBQUswRCxZQUFjLE1BQzFCRyxVQUFXLEdBRWI3RCxFQUFLd0UsZ0JBR1QsQ0FBRTV2RSxNQUFPLE1BRVQsQ0FDRXNOLFVBQVcsV0FDWDBqRSxjQUFlLE9BQ2Yvd0UsSUFBSyxjQUNMd3pFLFlBQVksRUFDWnB3QixTQUFVLENBQ1IrbkIsRUFBSzJFLFdBQ0wsQ0FDRXppRSxVQUFXLFNBQ1h0TixNQUFPLEtBQ1BDLElBQUssS0FDTHl4RSxZQUFZLEVBQ1pSLFNBQVVrTixFQUNWalAsUUFBUyxXQU1yQixZQzdEQWw3QyxFQUFPcm1CLFFBckVQLFNBQWlCdzlELEdBQ2YsTUFBTXFELEVBQVFyRCxFQUFLcUQsTUFFbkIsTUFBTyxDQUNMN25FLEtBQU0sVUFDTnVuQixRQUFTLENBQUUsT0FDWDRsRCxrQkFBa0IsRUFDbEIrQyxtQkFBbUIsRUFDbkI1RixTQUFVLENBQ1JpQixRQUFTLENBQ1AsUUFDQSxXQUNBLGVBQ0EsT0FDQSxRQUNBLFNBQ0EsWUFDQSxZQUNBLFFBQ0EsU0FDQSxXQUNBLE9BQ0EsTUFFRndMLFFBQVMsQ0FDUCxPQUNBLFFBQ0EsU0FHSnQ2QixTQUFVLENBQ1IrbkIsRUFBS3NFLGtCQUNMdEUsRUFBS2dFLGtCQUNMaEUsRUFBS3VFLFlBQ0wsQ0FDRXpELE1BQU8sY0FDUDdtRSxNQUFPLFNBQ1A0cEUsVUFBVyxHQUViLENBQ0UvQyxNQUFPLGNBQ1Bsc0UsTUFBTyw0QkFDUGl2RSxVQUFXLEdBRWIsQ0FDRS9DLE1BQU8sV0FDUGxzRSxNQUFPLEtBQ1BDLElBQUssS0FDTHd6RSxZQUFZLEVBQ1p4RSxVQUFXLEdBRWIsQ0FDRS9DLE1BQU8sT0FDUDdtRSxNQUFPLE9BQ1BvdUUsWUFBWSxHQUVkLENBQ0V2SCxNQUFPLFNBQ1Bsc0UsTUFBT3l1RSxFQUFNbm9FLE9BeERGLHlCQXdEbUJtb0UsRUFBTVgsVUFBVSxTQUM5Q21CLFVBQVcsSUFHZkUsUUFBUyxDQUNQLFFBQ0EsU0FHTixZQzZDQWw3QyxFQUFPcm1CLFFBaEhQLFNBQWF3OUQsR0FDWCxNQUFNcUQsRUFBUXJELEVBQUtxRCxNQUNid1AsRUFBVSxDQUNkM3dFLFVBQVcsU0FDWDJoRSxVQUFXLEVBQ1huOEQsU0FBVSxDQUNSLENBQUU5UyxNQUFPLHdCQUNULENBQUVBLE1BQU9vckUsRUFBS3lELGFBR1p5UixFQUFXbFYsRUFBS2xwRSxVQUN0Qm8rRSxFQUFTeHRFLFNBQVcsQ0FDbEIsQ0FDRTlTLE1BQU8sSUFDUEMsSUFBSyxLQUVQLENBQ0VELE1BQU8sSUFDUEMsSUFBSyxNQUdULE1BQU1zZ0YsRUFBWSxDQUNoQmp6RSxVQUFXLFdBQ1h3RixTQUFVLENBQ1IsQ0FBRTlTLE1BQU8scUJBQ1QsQ0FBRUEsTUFBTyxpQkFHUHdnRixFQUFXLENBQ2ZsekUsVUFBVyxVQUNYdE4sTUFBTyxnQ0FFSGcrRSxFQUFVLENBQ2Qxd0UsVUFBVyxTQUNYKzFDLFNBQVUsQ0FBRStuQixFQUFLNEQsa0JBQ2pCbDhELFNBQVUsQ0FDUixDQUNFOVMsTUFBTyxNQUNQQyxJQUFLLE1BQ0xndkUsVUFBVyxJQUViLENBQ0VqdkUsTUFBTyxNQUNQQyxJQUFLLE1BQ0xndkUsVUFBVyxJQUViLENBQ0VqdkUsTUFBTyxJQUNQQyxJQUFLLEtBRVAsQ0FDRUQsTUFBTyxJQUNQQyxJQUFLLE9BSUx3Z0YsRUFBUSxDQUNaemdGLE1BQU8sS0FDUEMsSUFBSyxLQUNMb2pELFNBQVUsQ0FDUmk5QixFQUNBRSxFQUNBRCxFQUNBdkMsRUFDQUMsRUFDQSxRQUVGaFAsVUFBVyxHQU1QeVIsRUFBVWpTLEVBQU1SLE9BSEwsaUJBQ2UsZ0JBQ0EsV0FTaEMsTUFBTyxDQUNMcm5FLEtBQU0saUJBQ051bkIsUUFBUyxDQUFFLFFBQ1g0bEQsa0JBQWtCLEVBQ2xCNUUsUUFBUyxLQUNUOXJCLFNBQVUsQ0FDUmk5QixFQUNBLENBQ0VoekUsVUFBVyxVQUNYdE4sTUFBTyxNQUNQQyxJQUFLLE9BRVAsQ0FDRUQsTUFsQmF5dUUsRUFBTW5vRSxPQUN2Qm82RSxFQUFTLGVBQWdCQSxFQUFTLEtBQ2xDalMsRUFBTVgsVUFBVSxrQkFpQlp4Z0UsVUFBVyxPQUNYa2tFLE9BQVEsQ0FDTnZ4RSxJQUFLLElBQ0xvakQsU0FBVSxDQUNSaTlCLEVBQ0FHLEVBQ0FELEVBQ0FELEVBQ0F2QyxFQUNBQyxNQU1aLFlDckhBLElBQ0kwQyxFQUFPLHVCQUNQQyxFQUFZLDhCQUNaQyxFQUFVLENBQ1p2ekUsVUFBVyxTQUNYd0YsU0FBVSxDQUdSLENBQUU5UyxNQUFPLDBCQUEyQjJnRixhQUFnQkEsMkNBR3BELENBQUUzZ0YsTUFBTyx5QkFBMEIyZ0YsaUNBQ25DLENBQUUzZ0YsTUFBTyxJQUFJMmdGLGdCQUNiLENBQUUzZ0YsTUFBTyxpQ0FHVCxDQUFFQSxNQUFPLGFBQWE0Z0YsV0FBbUJBLFVBQWtCQSwyQ0FJM0QsQ0FBRTVnRixNQUFPLGtDQUdULENBQUVBLE1BQU8sWUFBWTRnRixjQUdyQixDQUFFNWdGLE1BQU8sMEJBR1QsQ0FBRUEsTUFBTyxrQ0FFWGl2RSxVQUFXLEdBcUJiLFNBQVM2UixFQUFXOTRELEVBQUkrNEQsRUFBY0MsR0FDcEMsT0FBZSxJQUFYQSxFQUFxQixHQUVsQmg1RCxFQUFHeG9CLFFBQVF1aEYsR0FBY0UsR0FDdkJILEVBQVc5NEQsRUFBSSs0RCxFQUFjQyxFQUFRLElBRWhELENBa09BL3NELEVBQU9ybUIsUUEvTlAsU0FBY3c5RCxHQUNaLE1BQU1xRCxFQUFRckQsRUFBS3FELE1BQ2J5UyxFQUFnQixpQ0FDaEJDLEVBQW1CRCxFQUNyQkosRUFBVyxPQUFTSSxFQUFnQixrQkFBb0JBLEVBQWdCLFdBQVksT0FBUSxHQWtFMUY5QyxFQUFXLENBQ2ZqTSxRQWxFb0IsQ0FDcEIsZUFDQSxXQUNBLFVBQ0EsTUFDQSxTQUNBLEtBQ0EsU0FDQSxNQUNBLFFBQ0EsV0FDQSxVQUNBLFlBQ0EsU0FDQSxTQUNBLFFBQ0EsT0FDQSxPQUNBLE9BQ0EsUUFDQSxZQUNBLFFBQ0EsYUFDQSxXQUNBLE9BQ0EsU0FDQSxVQUNBLFVBQ0EsU0FDQSxNQUNBLFNBQ0EsV0FDQSxTQUNBLFlBQ0EsU0FDQSxVQUNBLFNBQ0EsV0FDQSxVQUNBLEtBQ0EsVUEyQkF3TCxRQW5CZSxDQUNmLFFBQ0EsT0FDQSxRQWlCQS84RSxLQWRZLENBQ1osT0FDQSxVQUNBLE9BQ0EsUUFDQSxNQUNBLE9BQ0EsUUFDQSxVQU9BZzlFLFNBMUJnQixDQUNoQixRQUNBLFNBMkJJd0QsRUFBYSxDQUNqQjl6RSxVQUFXLE9BQ1h0TixNQUFPLElBQU1raEYsRUFDYjc5QixTQUFVLENBQ1IsQ0FDRXJqRCxNQUFPLEtBQ1BDLElBQUssS0FDTG9qRCxTQUFVLENBQUUsV0FJWmcrQixFQUFTLENBQ2IvekUsVUFBVyxTQUNYdE4sTUFBTyxLQUNQQyxJQUFLLEtBQ0xpeEUsU0FBVWtOLEVBQ1ZuUCxVQUFXLEVBQ1g1ckIsU0FBVSxDQUFFK25CLEVBQUtxRSxzQkFDakJpQyxZQUFZLEdBR2QsTUFBTyxDQUNMOXFFLEtBQU0sT0FDTnVuQixRQUFTLENBQUUsT0FDWCtpRCxTQUFVa04sRUFDVmpQLFFBQVMsUUFDVDlyQixTQUFVLENBQ1IrbkIsRUFBS2xwRSxRQUNILFVBQ0EsT0FDQSxDQUNFK3NFLFVBQVcsRUFDWDVyQixTQUFVLENBQ1IsQ0FFRXJqRCxNQUFPLE9BQ1BpdkUsVUFBVyxHQUViLENBQ0UzaEUsVUFBVyxTQUNYdE4sTUFBTyxpQkFNZixDQUNFQSxNQUFPLHdCQUNQa3hFLFNBQVUsU0FDVmpDLFVBQVcsR0FFYjdELEVBQUtvRSxvQkFDTHBFLEVBQUtxRSxxQkFDTCxDQUNFenZFLE1BQU8sTUFDUEMsSUFBSyxNQUNMcU4sVUFBVyxTQUNYKzFDLFNBQVUsQ0FBRStuQixFQUFLNEQsbUJBRW5CNUQsRUFBSzhELGlCQUNMOUQsRUFBS2dFLGtCQUNMLENBQ0UvcEUsTUFBTyxDQUNMLG9EQUNBLE1BQ0E2N0UsR0FFRjV6RSxVQUFXLENBQ1QsRUFBRyxVQUNILEVBQUcsZ0JBR1AsQ0FFRWpJLE1BQU8sYUFDUDZtRSxNQUFPLFdBRVQsQ0FDRWxzRSxNQUFPLENBQ0x5dUUsRUFBTW5vRSxPQUFPLFdBQVk0NkUsR0FDekIsTUFDQUEsRUFDQSxNQUNBLFVBRUY1ekUsVUFBVyxDQUNULEVBQUcsT0FDSCxFQUFHLFdBQ0gsRUFBRyxhQUdQLENBQ0V0TixNQUFPLENBQ0wsU0FDQSxNQUNBa2hGLEdBRUY1ekUsVUFBVyxDQUNULEVBQUcsVUFDSCxFQUFHLGVBRUwrMUMsU0FBVSxDQUNSZytCLEVBQ0FqVyxFQUFLb0Usb0JBQ0xwRSxFQUFLcUUsdUJBR1QsQ0FHRXVCLGNBQWUsd0JBQ2YvQixVQUFXLEdBRWIsQ0FDRWp2RSxNQUFPLENBQ0wsTUFBUW1oRixFQUFtQixRQUMzQi9WLEVBQUt3RCxvQkFDTCxhQUVGdGhFLFVBQVcsQ0FBRSxFQUFHLGtCQUNoQjRqRSxTQUFVa04sRUFDVi82QixTQUFVLENBQ1IsQ0FDRS8xQyxVQUFXLFNBQ1h0TixNQUFPLEtBQ1BDLElBQUssS0FDTGl4RSxTQUFVa04sRUFDVm5QLFVBQVcsRUFDWDVyQixTQUFVLENBQ1IrOUIsRUFDQWhXLEVBQUs4RCxpQkFDTDlELEVBQUtnRSxrQkFDTHlSLEVBQ0F6VixFQUFLcUUsdUJBR1RyRSxFQUFLb0Usb0JBQ0xwRSxFQUFLcUUsdUJBR1RvUixFQUNBTyxHQUdOLFdDM1JBLE1BQU16UyxFQUFXLDJCQUNYeVAsRUFBVyxDQUNmLEtBQ0EsS0FDQSxLQUNBLEtBQ0EsTUFDQSxRQUNBLFVBQ0EsTUFDQSxNQUNBLFdBQ0EsS0FDQSxTQUNBLE9BQ0EsT0FDQSxRQUNBLFFBQ0EsYUFDQSxPQUNBLFFBQ0EsT0FDQSxVQUNBLE1BQ0EsU0FDQSxXQUNBLFNBQ0EsU0FDQSxNQUNBLFFBQ0EsUUFDQSxRQUlBLFdBQ0EsUUFDQSxRQUNBLFNBQ0EsU0FDQSxPQUNBLFNBQ0EsV0FFSW9DLEVBQVcsQ0FDZixPQUNBLFFBQ0EsT0FDQSxZQUNBLE1BQ0EsWUFJSXpDLEVBQVEsQ0FFWixTQUNBLFdBQ0EsVUFDQSxTQUVBLE9BQ0EsT0FDQSxTQUNBLFNBRUEsU0FDQSxTQUVBLFFBQ0EsZUFDQSxlQUNBLFlBQ0EsYUFDQSxvQkFDQSxhQUNBLGFBQ0EsY0FDQSxjQUNBLGdCQUNBLGlCQUVBLE1BQ0EsTUFDQSxVQUNBLFVBRUEsY0FDQSxvQkFDQSxVQUNBLFdBQ0EsT0FFQSxVQUNBLFlBQ0Esb0JBQ0EsZ0JBRUEsVUFDQSxRQUVBLE9BRUEsZUFHSXVELEVBQWMsQ0FDbEIsUUFDQSxZQUNBLGdCQUNBLGFBQ0EsaUJBQ0EsY0FDQSxZQUNBLFlBR0lDLEVBQW1CLENBQ3ZCLGNBQ0EsYUFDQSxnQkFDQSxlQUVBLFVBQ0EsVUFFQSxPQUNBLFdBQ0EsUUFDQSxhQUNBLFdBQ0EsWUFDQSxxQkFDQSxZQUNBLHFCQUNBLFNBQ0EsWUFHSUMsRUFBcUIsQ0FDekIsWUFDQSxPQUNBLFFBQ0EsVUFDQSxTQUNBLFdBQ0EsZUFDQSxTQUNBLFVBR0lDLEVBQVksR0FBR243RSxPQUNuQmk3RSxFQUNBeEQsRUFDQXVELEdBb2tCRnJ0RCxFQUFPcm1CLFFBempCUCxTQUFvQnc5RCxHQUNsQixNQUFNcUQsRUFBUXJELEVBQUtxRCxNQWNiaVQsRUFBYS9TLEVBT2JnVCxFQUFVLENBQ2QzaEYsTUFBTyxzQkFDUEMsSUFBSyw0QkFLTDJoRixrQkFBbUIsQ0FBQ3Y4RSxFQUFPcXhCLEtBQ3pCLE1BQU1tckQsRUFBa0J4OEUsRUFBTSxHQUFHM0ksT0FBUzJJLEVBQU12RixNQUMxQ2dpRixFQUFXejhFLEVBQU11VSxNQUFNaW9FLEdBQzdCLEdBSWUsTUFBYkMsR0FHYSxNQUFiQSxFQUVBLFlBREFwckQsRUFBU20xQyxjQW1CWCxJQUFJaCtDLEVBYmEsTUFBYmkwRCxJQXJDYyxFQUFDejhFLEdBQVMwOEUsWUFDOUIsTUFBTXhsRixFQUFNLEtBQU84SSxFQUFNLEdBQUduRixNQUFNLEdBRWxDLE9BQWdCLElBREptRixFQUFNdVUsTUFBTS9aLFFBQVF0RCxFQUFLd2xGLEVBQ3BCLEVBcUNSQyxDQUFjMzhFLEVBQU8sQ0FBRTA4RSxNQUFPRixLQUNqQ25yRCxFQUFTbTFDLGdCQVlSaCtDLEVBRmN4b0IsRUFBTXVVLE1BQU0yTyxVQUFVczVELEdBRXJCeDhFLE1BQU0sb0JBQ1IsSUFBWndvQixFQUFFL3RCLE9BQ0o0MkIsRUFBU20xQyxhQUliLEdBR0VvVyxFQUFhLENBQ2pCek0sU0FBVTdHLEVBQ1Z3RCxRQUFTaU0sRUFDVFQsUUFBUzZDLEVBQ1Q1QyxTQUFVNkQsRUFDVixvQkFBcUJELEdBS2pCYixFQUFPLHVCQUdQdUIsRUFBaUIsc0NBQ2pCQyxFQUFTLENBQ2I3MEUsVUFBVyxTQUNYd0YsU0FBVSxDQUVSLENBQUU5UyxNQUFPLFFBQVFraUYsT0FBb0J2QixhQUFnQkEsb0NBRXJELENBQUUzZ0YsTUFBTyxPQUFPa2lGLFVBQXVCdkIsZ0JBQW1CQSxTQUcxRCxDQUFFM2dGLE1BQU8sOEJBR1QsQ0FBRUEsTUFBTyw0Q0FDVCxDQUFFQSxNQUFPLGdDQUNULENBQUVBLE1BQU8sZ0NBSVQsQ0FBRUEsTUFBTyxvQkFFWGl2RSxVQUFXLEdBR1BvTyxFQUFRLENBQ1ovdkUsVUFBVyxRQUNYdE4sTUFBTyxTQUNQQyxJQUFLLE1BQ0xpeEUsU0FBVStRLEVBQ1Y1K0IsU0FBVSxJQUVOKytCLEVBQWdCLENBQ3BCcGlGLE1BQU8sUUFDUEMsSUFBSyxHQUNMdXhFLE9BQVEsQ0FDTnZ4RSxJQUFLLElBQ0x5ekUsV0FBVyxFQUNYcndCLFNBQVUsQ0FDUituQixFQUFLNEQsaUJBQ0xxTyxHQUVGNUUsWUFBYSxRQUdYNEosRUFBZSxDQUNuQnJpRixNQUFPLE9BQ1BDLElBQUssR0FDTHV4RSxPQUFRLENBQ052eEUsSUFBSyxJQUNMeXpFLFdBQVcsRUFDWHJ3QixTQUFVLENBQ1IrbkIsRUFBSzRELGlCQUNMcU8sR0FFRjVFLFlBQWEsUUFHWDZKLEVBQWtCLENBQ3RCaDFFLFVBQVcsU0FDWHROLE1BQU8sSUFDUEMsSUFBSyxJQUNMb2pELFNBQVUsQ0FDUituQixFQUFLNEQsaUJBQ0xxTyxJQTBDRW43RSxFQUFVLENBQ2RvTCxVQUFXLFVBQ1h3RixTQUFVLENBekNVczRELEVBQUtscEUsUUFDekIsZUFDQSxPQUNBLENBQ0Urc0UsVUFBVyxFQUNYNXJCLFNBQVUsQ0FDUixDQUNFcmpELE1BQU8saUJBQ1BpdkUsVUFBVyxFQUNYNXJCLFNBQVUsQ0FDUixDQUNFLzFDLFVBQVcsU0FDWHROLE1BQU8sY0FFVCxDQUNFc04sVUFBVyxPQUNYdE4sTUFBTyxNQUNQQyxJQUFLLE1BQ0x3ekUsWUFBWSxFQUNabkUsY0FBYyxFQUNkTCxVQUFXLEdBRWIsQ0FDRTNoRSxVQUFXLFdBQ1h0TixNQUFPMGhGLEVBQWEsZ0JBQ3BCaFEsWUFBWSxFQUNaekMsVUFBVyxHQUliLENBQ0VqdkUsTUFBTyxjQUNQaXZFLFVBQVcsUUFXbkI3RCxFQUFLcUUscUJBQ0xyRSxFQUFLb0Usc0JBR0grUyxFQUFrQixDQUN0Qm5YLEVBQUs4RCxpQkFDTDlELEVBQUtnRSxrQkFDTGdULEVBQ0FDLEVBQ0FDLEVBQ0FILEdBS0Y5RSxFQUFNaDZCLFNBQVdrL0IsRUFDZGo4RSxPQUFPLENBR050RyxNQUFPLEtBQ1BDLElBQUssS0FDTGl4RSxTQUFVK1EsRUFDVjUrQixTQUFVLENBQ1IsUUFDQS84QyxPQUFPaThFLEtBRWIsTUFBTUMsRUFBcUIsR0FBR2w4RSxPQUFPcEUsRUFBU203RSxFQUFNaDZCLFVBQzlDby9CLEVBQWtCRCxFQUFtQmw4RSxPQUFPLENBRWhELENBQ0V0RyxNQUFPLEtBQ1BDLElBQUssS0FDTGl4RSxTQUFVK1EsRUFDVjUrQixTQUFVLENBQUMsUUFBUS84QyxPQUFPazhFLE1BR3hCbkIsRUFBUyxDQUNiL3pFLFVBQVcsU0FDWHROLE1BQU8sS0FDUEMsSUFBSyxLQUNMcXZFLGNBQWMsRUFDZG1FLFlBQVksRUFDWnZDLFNBQVUrUSxFQUNWNStCLFNBQVVvL0IsR0FJTkMsRUFBbUIsQ0FDdkI1dkUsU0FBVSxDQUVSLENBQ0V6TixNQUFPLENBQ0wsUUFDQSxNQUNBcThFLEVBQ0EsTUFDQSxVQUNBLE1BQ0FqVCxFQUFNbm9FLE9BQU9vN0UsRUFBWSxJQUFLalQsRUFBTW5vRSxPQUFPLEtBQU1vN0UsR0FBYSxPQUVoRXhWLE1BQU8sQ0FDTCxFQUFHLFVBQ0gsRUFBRyxjQUNILEVBQUcsVUFDSCxFQUFHLDBCQUlQLENBQ0U3bUUsTUFBTyxDQUNMLFFBQ0EsTUFDQXE4RSxHQUVGeFYsTUFBTyxDQUNMLEVBQUcsVUFDSCxFQUFHLGtCQU9MeVcsRUFBa0IsQ0FDdEIxVCxVQUFXLEVBQ1g1cEUsTUFDQW9wRSxFQUFNUixPQUVKLFNBRUEsaUNBRUEsNkNBRUEsb0RBTUYzZ0UsVUFBVyxjQUNYNGpFLFNBQVUsQ0FDUitQLEVBQUcsSUFFRWxELEtBQ0F1RCxLQVlIc0IsRUFBc0IsQ0FDMUI5dkUsU0FBVSxDQUNSLENBQ0V6TixNQUFPLENBQ0wsV0FDQSxNQUNBcThFLEVBQ0EsY0FJSixDQUNFcjhFLE1BQU8sQ0FDTCxXQUNBLGVBSU5pSSxVQUFXLENBQ1QsRUFBRyxVQUNILEVBQUcsa0JBRUx5TixNQUFPLFdBQ1Bzb0MsU0FBVSxDQUFFZytCLEdBQ1psUyxRQUFTLEtBYUwwVCxFQUFnQixDQUNwQng5RSxNQUFPb3BFLEVBQU1ub0UsT0FDWCxNQU5ZOHpFLEVBT0wsSUFDRm1ILEVBQ0gsU0FSRzlTLEVBQU1ub0UsT0FBTyxNQUFPOHpFLEVBQUsxM0UsS0FBSyxLQUFNLE1BVXpDZy9FLEVBQVlqVCxFQUFNWCxVQUFVLE9BQzlCeGdFLFVBQVcsaUJBQ1gyaEUsVUFBVyxHQWJiLElBQWdCbUwsRUFnQmhCLE1BQU0wSSxFQUFrQixDQUN0QjlpRixNQUFPeXVFLEVBQU1ub0UsT0FBTyxLQUFNbW9FLEVBQU1YLFVBQzlCVyxFQUFNbm9FLE9BQU9vN0UsRUFBWSx3QkFFM0J6aEYsSUFBS3loRixFQUNMcFMsY0FBYyxFQUNkNEIsU0FBVSxZQUNWNWpFLFVBQVcsV0FDWDJoRSxVQUFXLEdBR1A4VCxFQUFtQixDQUN2QjE5RSxNQUFPLENBQ0wsVUFDQSxNQUNBcThFLEVBQ0EsVUFFRnAwRSxVQUFXLENBQ1QsRUFBRyxVQUNILEVBQUcsa0JBRUwrMUMsU0FBVSxDQUNSLENBQ0VyakQsTUFBTyxRQUVUcWhGLElBSUUyQixFQUFrQiwyREFNYjVYLEVBQUt3RCxvQkFBc0IsVUFFaENxVSxFQUFvQixDQUN4QjU5RSxNQUFPLENBQ0wsZ0JBQWlCLE1BQ2pCcThFLEVBQVksTUFDWixPQUNBLGNBQ0FqVCxFQUFNWCxVQUFVa1YsSUFFbEI5UixTQUFVLFFBQ1Y1akUsVUFBVyxDQUNULEVBQUcsVUFDSCxFQUFHLGtCQUVMKzFDLFNBQVUsQ0FDUmcrQixJQUlKLE1BQU8sQ0FDTHo2RSxLQUFNLGFBQ051bkIsUUFBUyxDQUFDLEtBQU0sTUFBTyxNQUFPLE9BQzlCK2lELFNBQVUrUSxFQUVWcjBFLFFBQVMsQ0FBRTYwRSxrQkFBaUJFLG1CQUM1QnhULFFBQVMsZUFDVDlyQixTQUFVLENBQ1IrbkIsRUFBS2lGLFFBQVEsQ0FDWHQxRCxNQUFPLFVBQ1B3MUQsT0FBUSxPQUNSdEIsVUFBVyxJQTNIRSxDQUNqQmwwRCxNQUFPLGFBQ1B6TixVQUFXLE9BQ1gyaEUsVUFBVyxHQUNYanZFLE1BQU8sZ0NBMEhMb3JFLEVBQUs4RCxpQkFDTDlELEVBQUtnRSxrQkFDTGdULEVBQ0FDLEVBQ0FDLEVBQ0FwZ0YsRUFDQWlnRixFQUNBUSxFQUNBLENBQ0VyMUUsVUFBVyxPQUNYdE4sTUFBTzBoRixFQUFhalQsRUFBTVgsVUFBVSxLQUNwQ21CLFVBQVcsR0FFYmdVLEVBQ0EsQ0FDRWpqRixNQUFPLElBQU1vckUsRUFBS2dGLGVBQWlCLGtDQUNuQ2MsU0FBVSxvQkFDVmpDLFVBQVcsRUFDWDVyQixTQUFVLENBQ1JuaEQsRUFDQWtwRSxFQUFLMEUsWUFDTCxDQUNFeGlFLFVBQVcsV0FJWHROLE1BQU9nakYsRUFDUHpQLGFBQWEsRUFDYnR6RSxJQUFLLFNBQ0xvakQsU0FBVSxDQUNSLENBQ0UvMUMsVUFBVyxTQUNYd0YsU0FBVSxDQUNSLENBQ0U5UyxNQUFPb3JFLEVBQUt3RCxvQkFDWkssVUFBVyxHQUViLENBQ0UzaEUsVUFBVyxLQUNYdE4sTUFBTyxVQUNQc3pFLE1BQU0sR0FFUixDQUNFdHpFLE1BQU8sS0FDUEMsSUFBSyxLQUNMcXZFLGNBQWMsRUFDZG1FLFlBQVksRUFDWnZDLFNBQVUrUSxFQUNWNStCLFNBQVVvL0IsT0FNcEIsQ0FDRXppRixNQUFPLElBQ1BpdkUsVUFBVyxHQUViLENBQ0U1cEUsTUFBTyxNQUNQNHBFLFVBQVcsR0FFYixDQUNFbjhELFNBQVUsQ0FDUixDQUFFOVMsTUE1ZEwsS0E0ZDRCQyxJQTNkOUIsT0E0ZEssQ0FBRW9GLE1BemRXLDZCQTBkYixDQUNFckYsTUFBTzJoRixFQUFRM2hGLE1BR2YsV0FBWTJoRixFQUFRQyxrQkFDcEIzaEYsSUFBSzBoRixFQUFRMWhGLE1BR2pCdzRFLFlBQWEsTUFDYnAxQixTQUFVLENBQ1IsQ0FDRXJqRCxNQUFPMmhGLEVBQVEzaEYsTUFDZkMsSUFBSzBoRixFQUFRMWhGLElBQ2JxekUsTUFBTSxFQUNOandCLFNBQVUsQ0FBQyxhQU1yQnUvQixFQUNBLENBR0U1UixjQUFlLDZCQUVqQixDQUlFaHhFLE1BQU8sa0JBQW9Cb3JFLEVBQUt3RCxvQkFBekIsZ0VBUVAyRSxhQUFZLEVBQ1p4NEQsTUFBTyxXQUNQc29DLFNBQVUsQ0FDUmcrQixFQUNBalcsRUFBS3hzRCxRQUFRd3NELEVBQUsyRSxXQUFZLENBQUUvdkUsTUFBTzBoRixFQUFZcDBFLFVBQVcscUJBSWxFLENBQ0VqSSxNQUFPLFNBQ1A0cEUsVUFBVyxHQUViNlQsRUFJQSxDQUNFejlFLE1BQU8sTUFBUXE4RSxFQUNmelMsVUFBVyxHQUViLENBQ0U1cEUsTUFBTyxDQUFFLDBCQUNUaUksVUFBVyxDQUFFLEVBQUcsa0JBQ2hCKzFDLFNBQVUsQ0FBRWcrQixJQUVkd0IsRUE3TndCLENBQzFCNVQsVUFBVyxFQUNYNXBFLE1BQU8sc0JBQ1BpSSxVQUFXLHFCQTROVG8xRSxFQUNBSyxFQUNBLENBQ0UxOUUsTUFBTyxXQUlmLFVDeHFCQTR1QixFQUFPcm1CLFFBNUNQLFNBQWN3OUQsR0FDWixNQVVNb1YsRUFBVyxDQUNmLE9BQ0EsUUFDQSxRQU9JMEMsRUFBZ0IsQ0FDcEJoWCxNQUFPLFVBQ1A4RSxjQUFld1AsRUFBUzk5RSxLQUFLLE1BRy9CLE1BQU8sQ0FDTGtFLEtBQU0sT0FDTnNxRSxTQUFTLENBQ1B5TSxRQUFTNkMsR0FFWG45QixTQUFVLENBOUJNLENBQ2hCLzFDLFVBQVcsT0FDWHROLE1BQU8sOEJBQ1BpdkUsVUFBVyxNQUVPLENBQ2xCNXBFLE1BQU8sWUFDUGlJLFVBQVcsY0FDWDJoRSxVQUFXLEdBeUJUN0QsRUFBS2dFLGtCQUNMOFQsRUFDQTlYLEVBQUt3RSxjQUNMeEUsRUFBS29FLG9CQUNMcEUsRUFBS3FFLHNCQUVQTixRQUFTLE1BRWIsWUNqREEsSUFDSXdSLEVBQU8sdUJBQ1BDLEVBQVksOEJBQ1pDLEVBQVUsQ0FDWnZ6RSxVQUFXLFNBQ1h3RixTQUFVLENBR1IsQ0FBRTlTLE1BQU8sMEJBQTJCMmdGLGFBQWdCQSwyQ0FHcEQsQ0FBRTNnRixNQUFPLHlCQUEwQjJnRixpQ0FDbkMsQ0FBRTNnRixNQUFPLElBQUkyZ0YsZ0JBQ2IsQ0FBRTNnRixNQUFPLGlDQUdULENBQUVBLE1BQU8sYUFBYTRnRixXQUFtQkEsVUFBa0JBLDJDQUkzRCxDQUFFNWdGLE1BQU8sa0NBR1QsQ0FBRUEsTUFBTyxZQUFZNGdGLGNBR3JCLENBQUU1Z0YsTUFBTywwQkFHVCxDQUFFQSxNQUFPLGtDQUVYaXZFLFVBQVcsR0E0UGJoN0MsRUFBT3JtQixRQWpQUCxTQUFnQnc5RCxHQUNkLE1BQU1nVCxFQUFXLENBQ2ZqTSxRQUNFLHdZQUtGeUwsU0FDRSxrRUFDRkQsUUFDRSxtQkFZRXdGLEVBQVEsQ0FDWjcxRSxVQUFXLFNBQ1h0TixNQUFPb3JFLEVBQUt3RCxvQkFBc0IsS0FJOUJ5TyxFQUFRLENBQ1ovdkUsVUFBVyxRQUNYdE4sTUFBTyxPQUNQQyxJQUFLLEtBQ0xvakQsU0FBVSxDQUFFK25CLEVBQUt3RSxnQkFFYndULEVBQVcsQ0FDZjkxRSxVQUFXLFdBQ1h0TixNQUFPLE1BQVFvckUsRUFBS3dELHFCQUVoQndRLEVBQVMsQ0FDYjl4RSxVQUFXLFNBQ1h3RixTQUFVLENBQ1IsQ0FDRTlTLE1BQU8sTUFDUEMsSUFBSyxjQUNMb2pELFNBQVUsQ0FDUisvQixFQUNBL0YsSUFNSixDQUNFcjlFLE1BQU8sSUFDUEMsSUFBSyxJQUNMa3ZFLFFBQVMsS0FDVDlyQixTQUFVLENBQUUrbkIsRUFBSzRELG1CQUVuQixDQUNFaHZFLE1BQU8sSUFDUEMsSUFBSyxJQUNMa3ZFLFFBQVMsS0FDVDlyQixTQUFVLENBQ1IrbkIsRUFBSzRELGlCQUNMb1UsRUFDQS9GLE1BS1JBLEVBQU1oNkIsU0FBU3BtRCxLQUFLbWlGLEdBRXBCLE1BQU1pRSxFQUFzQixDQUMxQi8xRSxVQUFXLE9BQ1h0TixNQUFPLGdGQUFrRm9yRSxFQUFLd0Qsb0JBQXNCLE1BRWhId1MsRUFBYSxDQUNqQjl6RSxVQUFXLE9BQ1h0TixNQUFPLElBQU1vckUsRUFBS3dELG9CQUNsQnZyQixTQUFVLENBQ1IsQ0FDRXJqRCxNQUFPLEtBQ1BDLElBQUssS0FDTG9qRCxTQUFVLENBQ1IrbkIsRUFBS3hzRCxRQUFRd2dFLEVBQVEsQ0FBRTl4RSxVQUFXLFdBQ2xDLFdBU0ZnMkUsRUFBcUJ6QyxFQUNyQjBDLEVBQXdCblksRUFBS2xwRSxRQUNqQyxPQUFRLE9BQ1IsQ0FBRW1oRCxTQUFVLENBQUUrbkIsRUFBS3FFLHdCQUVmK1QsRUFBb0IsQ0FBRTF3RSxTQUFVLENBQ3BDLENBQ0V4RixVQUFXLE9BQ1h0TixNQUFPb3JFLEVBQUt3RCxxQkFFZCxDQUNFNXVFLE1BQU8sS0FDUEMsSUFBSyxLQUNMb2pELFNBQVUsTUFHUm9nQyxFQUFxQkQsRUFJM0IsT0FIQUMsRUFBbUIzd0UsU0FBUyxHQUFHdXdDLFNBQVcsQ0FBRW1nQyxHQUM1Q0EsRUFBa0Ixd0UsU0FBUyxHQUFHdXdDLFNBQVcsQ0FBRW9nQyxHQUVwQyxDQUNMNzhFLEtBQU0sU0FDTnVuQixRQUFTLENBQ1AsS0FDQSxPQUVGK2lELFNBQVVrTixFQUNWLzZCLFNBQVUsQ0FDUituQixFQUFLbHBFLFFBQ0gsVUFDQSxPQUNBLENBQ0Urc0UsVUFBVyxFQUNYNXJCLFNBQVUsQ0FDUixDQUNFLzFDLFVBQVcsU0FDWHROLE1BQU8saUJBS2ZvckUsRUFBS29FLG9CQUNMK1QsRUE1SHdCLENBQzFCajJFLFVBQVcsVUFDWHROLE1BQU8sbUNBQ1B3eEUsT0FBUSxDQUFFbnVCLFNBQVUsQ0FDbEIsQ0FDRS8xQyxVQUFXLFNBQ1h0TixNQUFPLFdBd0hUbWpGLEVBQ0FFLEVBQ0FqQyxFQUNBLENBQ0U5ekUsVUFBVyxXQUNYMGpFLGNBQWUsTUFDZi93RSxJQUFLLFFBQ0xzekUsYUFBYSxFQUNiRSxZQUFZLEVBQ1p2QyxTQUFVa04sRUFDVm5QLFVBQVcsRUFDWDVyQixTQUFVLENBQ1IsQ0FDRXJqRCxNQUFPb3JFLEVBQUt3RCxvQkFBc0IsVUFDbEMyRSxhQUFhLEVBQ2J0RSxVQUFXLEVBQ1g1ckIsU0FBVSxDQUFFK25CLEVBQUs0RSx3QkFFbkIsQ0FDRTFpRSxVQUFXLE9BQ1h0TixNQUFPLElBQ1BDLElBQUssSUFDTGl4RSxTQUFVLFVBQ1ZqQyxVQUFXLEdBRWIsQ0FDRTNoRSxVQUFXLFNBQ1h0TixNQUFPLEtBQ1BDLElBQUssS0FDTHl4RSxZQUFZLEVBQ1pSLFNBQVVrTixFQUNWblAsVUFBVyxFQUNYNXJCLFNBQVUsQ0FDUixDQUNFcmpELE1BQU8sSUFDUEMsSUFBSyxTQUNMMDFFLGdCQUFnQixFQUNoQnR5QixTQUFVLENBQ1JtZ0MsRUFDQXBZLEVBQUtvRSxvQkFDTCtULEdBRUZ0VSxVQUFXLEdBRWI3RCxFQUFLb0Usb0JBQ0wrVCxFQUNBRixFQUNBakMsRUFDQWhDLEVBQ0FoVSxFQUFLd0UsZ0JBR1QyVCxJQUdKLENBQ0V2akYsTUFBTyxDQUNMLHdCQUNBLE1BQ0FvckUsRUFBS3dELHFCQUVQc0UsV0FBWSxDQUNWLEVBQUcsZUFFTGhDLFNBQVUsd0JBQ1ZqeEUsSUFBSyxXQUNMd3pFLFlBQVksRUFDWnRFLFFBQVMscUJBQ1Q5ckIsU0FBVSxDQUNSLENBQUUydEIsY0FBZSxpREFDakI1RixFQUFLNEUsc0JBQ0wsQ0FDRTFpRSxVQUFXLE9BQ1h0TixNQUFPLElBQ1BDLElBQUssSUFDTHF2RSxjQUFjLEVBQ2RtRSxZQUFZLEVBQ1p4RSxVQUFXLEdBRWIsQ0FDRTNoRSxVQUFXLE9BQ1h0TixNQUFPLFVBQ1BDLElBQUssZUFDTHF2RSxjQUFjLEVBQ2RvRSxXQUFXLEdBRWIyUCxFQUNBakMsSUFHSmhDLEVBQ0EsQ0FDRTl4RSxVQUFXLE9BQ1h0TixNQUFPLGtCQUNQQyxJQUFLLElBQ0xrdkUsUUFBUyxNQUVYbVUsR0FHTixZQzFSQSxNQTZDTTlELEVBQU8sQ0FDWCxJQUNBLE9BQ0EsVUFDQSxVQUNBLFFBQ0EsUUFDQSxJQUNBLGFBQ0EsT0FDQSxTQUNBLFNBQ0EsVUFDQSxPQUNBLE9BQ0EsS0FDQSxNQUNBLFVBQ0EsTUFDQSxNQUNBLEtBQ0EsS0FDQSxLQUNBLFdBQ0EsYUFDQSxTQUNBLFNBQ0EsT0FDQSxLQUNBLEtBQ0EsS0FDQSxLQUNBLEtBQ0EsS0FDQSxTQUNBLFNBQ0EsT0FDQSxJQUNBLFNBQ0EsTUFDQSxRQUNBLE1BQ0EsTUFDQSxRQUNBLFNBQ0EsS0FDQSxPQUNBLE9BQ0EsT0FDQSxNQUNBLFNBQ0EsS0FDQSxJQUNBLElBQ0EsUUFDQSxPQUNBLFVBQ0EsT0FDQSxTQUNBLFVBQ0EsTUFDQSxRQUNBLFFBQ0EsS0FDQSxXQUNBLFFBQ0EsS0FDQSxRQUNBLE9BQ0EsS0FDQSxLQUNBLE1BQ0EsU0FHSUMsRUFBaUIsQ0FDckIsWUFDQSxjQUNBLGVBQ0EsUUFDQSxjQUNBLGNBQ0Esc0JBQ0EsZ0JBQ0EsZUFDQSxlQUNBLGdCQUNBLE9BQ0EsU0FDQSxRQUNBLGtCQUNBLGFBQ0EsY0FDQSxpQkFDQSxrQkFDQSxVQUNBLHVCQUNBLG1CQUNBLHlCQUNBLCtCQUNBLGFBQ0EsT0FDQSxZQUNBLFNBQ0EsUUFFQSxZQUNBLFlBQ0EsYUFDQSxjQUlJQyxFQUFpQixDQUNyQixTQUNBLFdBQ0EsUUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLE1BQ0EsV0FDQSxPQUNBLFFBQ0EsVUFDQSxRQUNBLGNBQ0EsZ0JBQ0EsYUFDQSxTQUNBLFFBQ0EsZ0JBQ0EsZUFDQSxNQUNBLE9BQ0EsZUFDQSxRQUNBLGdCQUNBLFdBQ0EsVUFDQSxLQUNBLE9BQ0EsYUFDQSxlQUNBLE9BQ0EsT0FDQSxhQUNBLE1BQ0EsWUFDQSxVQUNBLGlCQUNBLGVBQ0EsbUJBQ0EsY0FDQSxhQUNBLGVBQ0EsV0FDQSxlQUNBLE9BQ0Esb0JBQ0EsWUFDQSxhQUNBLFdBQ0EsUUFDQSxPQUNBLFFBQ0EsU0FDQSxnQkFDQSxlQUNBLFFBQ0EsVUFDQSxTQUlJQyxFQUFrQixDQUN0QixRQUNBLFdBQ0EsU0FDQSxNQUNBLGFBQ0EsZUFDQSxhQUNBLGdCQUNBLFNBQ0EsT0FDQSxjQUNBLFlBQ0EsVUFDQSxrQkFHSUMsRUFBYSxDQUNqQixnQkFDQSxjQUNBLGFBQ0EsTUFDQSxZQUNBLGtCQUNBLHNCQUNBLHFCQUNBLHNCQUNBLDRCQUNBLGlCQUNBLHVCQUNBLDRCQUNBLHNCQUNBLGFBQ0Esd0JBQ0Esd0JBQ0Esa0JBQ0EsbUJBQ0EsbUJBQ0Esb0JBQ0Esc0JBQ0Esb0JBQ0Esa0JBQ0EsYUFDQSxTQUNBLGVBQ0EscUJBQ0EsbUJBQ0EseUJBQ0EseUJBQ0EseUJBQ0EscUJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EscUJBQ0EscUJBQ0EsZ0JBQ0Esc0JBQ0EsNEJBQ0EsNkJBQ0Esc0JBQ0Esc0JBQ0Esa0JBQ0EsZUFDQSxlQUNBLHNCQUNBLHNCQUNBLHFCQUNBLHNCQUNBLHFCQUNBLGdCQUNBLHNCQUNBLG9CQUNBLDBCQUNBLDBCQUNBLDBCQUNBLHNCQUNBLDRCQUNBLDRCQUNBLDRCQUNBLHNCQUNBLHNCQUNBLGNBQ0Esb0JBQ0Esb0JBQ0Esb0JBQ0EsZ0JBQ0EsZUFDQSxxQkFDQSxxQkFDQSxxQkFDQSxpQkFDQSxlQUNBLGFBQ0EsbUJBQ0EseUJBQ0EsMEJBQ0EsbUJBQ0EsbUJBQ0EsZUFDQSxTQUNBLHVCQUNBLGFBQ0EsYUFDQSxjQUNBLGVBQ0EsZUFDQSxlQUNBLGNBQ0EsUUFDQSxPQUNBLFlBQ0EsWUFDQSxRQUNBLGVBQ0EsY0FDQSxhQUNBLGNBQ0Esb0JBQ0Esb0JBQ0Esb0JBQ0EsY0FDQSxlQUNBLFVBQ0EsVUFDQSxVQUNBLHFCQUNBLG9CQUNBLGdCQUNBLE1BQ0EsWUFDQSxhQUNBLFNBQ0EsWUFDQSxVQUNBLGNBQ0EsU0FDQSxPQUNBLGFBQ0EsaUJBQ0EsWUFDQSxZQUNBLGNBQ0EsWUFDQSxRQUNBLE9BQ0EsT0FDQSxlQUNBLGNBQ0Esd0JBQ0EsZUFDQSx5QkFDQSxZQUNBLG1CQUNBLGlCQUNBLGVBQ0EsYUFDQSxpQkFDQSxlQUNBLG9CQUNBLDBCQUNBLHlCQUNBLHVCQUNBLHdCQUNBLDBCQUNBLGNBQ0EsTUFDQSw2QkFDQSxPQUNBLFlBQ0Esb0JBQ0EsaUJBQ0EsaUJBQ0EsY0FDQSxrQkFDQSxvQkFDQSxXQUNBLFdBQ0EsZUFDQSxpQkFDQSxnQkFDQSxzQkFDQSx3QkFDQSxxQkFDQSxzQkFDQSxTQUNBLFVBQ0EsT0FDQSxvQkFDQSxrQkFDQSxtQkFDQSxXQUNBLGNBQ0EsWUFDQSxrQkFDQSxPQUNBLGlCQUNBLGFBQ0EsY0FDQSxhQUNBLG1CQUNBLHNCQUNBLGtCQUNBLFNBQ0EsZUFDQSxtQkFDQSxxQkFDQSxnQkFDQSxnQkFDQSxvQkFDQSxzQkFDQSxjQUNBLGVBQ0EsYUFDQSxRQUNBLE9BQ0EsY0FDQSxtQkFDQSxxQkFDQSxxQkFDQSxvQkFDQSxxQkFDQSxvQkFDQSxZQUNBLGlCQUNBLGFBQ0EsWUFDQSxjQUNBLGdCQUNBLGNBQ0EsWUFDQSxZQUNBLGlCQUNBLGFBQ0Esa0JBQ0EsWUFDQSxpQkFDQSxhQUNBLGtCQUNBLFlBQ0EsaUJBQ0EsV0FDQSxZQUNBLFdBQ0EsWUFDQSxTQUNBLE9BQ0EsU0FDQSxhQUNBLGtCQUNBLFVBQ0EsUUFDQSxVQUNBLFVBQ0EsZ0JBQ0EsaUJBQ0EsZ0JBQ0EsZ0JBQ0EsV0FDQSxnQkFDQSxhQUNBLGFBQ0EsVUFDQSxnQkFDQSxvQkFDQSxzQkFDQSxpQkFDQSxpQkFDQSxxQkFDQSx1QkFDQSxlQUNBLGdCQUNBLGNBQ0EsbUJBQ0Esb0JBQ0Esb0JBQ0EsUUFDQSxjQUNBLGVBQ0EsY0FDQSxxQkFDQSxpQkFDQSxXQUNBLFNBQ0EsU0FDQSxPQUNBLGFBQ0EsY0FDQSxRQUNBLFVBQ0EsZ0JBQ0Esc0JBQ0EsMEJBQ0EsNEJBQ0EsdUJBQ0EsdUJBQ0EsMkJBQ0EsNkJBQ0EscUJBQ0Esc0JBQ0Esb0JBQ0EsaUJBQ0EsdUJBQ0EsMkJBQ0EsNkJBQ0Esd0JBQ0Esd0JBQ0EsNEJBQ0EsOEJBQ0Esc0JBQ0EsdUJBQ0EscUJBQ0Esb0JBQ0EsbUJBQ0EsbUJBQ0Esa0JBQ0EsbUJBQ0Esa0JBQ0Esd0JBQ0EsZUFDQSxnQkFDQSxRQUNBLFdBQ0EsTUFDQSxXQUNBLGVBQ0EsYUFDQSxpQkFDQSxrQkFDQSx1QkFDQSxrQkFDQSx3QkFDQSx1QkFDQSx3QkFDQSxnQkFDQSxzQkFDQSx5QkFDQSxzQkFDQSxjQUNBLGVBQ0EsbUJBQ0EsZ0JBQ0EsaUJBQ0EsY0FDQSxpQkFDQSwwQkFDQSxNQUNBLFlBQ0EsZ0JBQ0EsbUJBQ0Esa0JBQ0EsYUFDQSxtQkFDQSxzQkFDQSxzQkFDQSw2QkFDQSxlQUNBLGlCQUNBLGFBQ0EsZ0JBQ0EsaUJBQ0EsZUFDQSxjQUNBLGNBQ0EsYUFDQSxlQUNBLGVBQ0EsY0FDQSxTQUNBLFFBQ0EsY0FDQSxhQUNBLGVBQ0EsWUFDQSxlQUNBLFdBR0FDLFVBR0k2RCxFQUFtQmhFLEVBQWVwNUUsT0FBT3E1RSxHQTJPL0MxckQsRUFBT3JtQixRQWhPUCxTQUFjdzlELEdBQ1osTUFBTXR6RCxFQXRtQk0sQ0FBQ3N6RCxJQUNOLENBQ0wwVSxVQUFXLENBQ1Q1VCxNQUFPLE9BQ1Bsc0UsTUFBTyxjQUVUKy9FLGNBQWUzVSxFQUFLcUUscUJBQ3BCdVEsU0FBVSxDQUNSOVQsTUFBTyxTQUNQbHNFLE1BQU8sbURBRVQ0K0Usa0JBQW1CLENBQ2pCdHhFLFVBQVcsV0FDWHROLE1BQU8sZ0JBRVRpZ0Ysd0JBQXlCLENBQ3ZCL1QsTUFBTyxnQkFDUGxzRSxNQUFPLEtBQ1BDLElBQUssS0FDTGt2RSxRQUFTLElBQ1Q5ckIsU0FBVSxDQUNSK25CLEVBQUs4RCxpQkFDTDlELEVBQUtnRSxvQkFHVDhRLGdCQUFpQixDQUNmaFUsTUFBTyxTQUNQbHNFLE1BQU9vckUsRUFBS3lELFVBQUx6RCxrR0FTUDZELFVBQVcsR0FFYmtSLGFBQWMsQ0FDWjd5RSxVQUFXLE9BQ1h0TixNQUFPLDhCQThqQkdpd0UsQ0FBTTdFLEdBQ2R1WSxFQUFxQkQsRUFJckJFLEVBQWtCLDJCQUlsQkMsRUFBUSxHQUFVQyxFQUFjLEdBRWhDQyxFQUFjLFNBQVNqcEQsR0FDM0IsTUFBTyxDQUVMeHRCLFVBQVcsU0FDWHROLE1BQU8sS0FBTzg2QixFQUFJLE1BQVFBLEVBRTlCLEVBRU1rcEQsRUFBYSxTQUFTcDlFLEVBQU01RyxFQUFPaXZFLEdBQ3ZDLE1BQU8sQ0FDTDNoRSxVQUFXMUcsRUFDWDVHLE1BQU9BLEVBQ1BpdkUsVUFBV0EsRUFFZixFQUVNZ1YsRUFBYyxDQUNsQnpPLFNBQVUsVUFDVnJELFFBMUJtQixrQkEyQm5Ca08sVUFBV1osRUFBZS84RSxLQUFLLE1BRzNCd2hGLEVBQWMsQ0FFbEJsa0YsTUFBTyxNQUNQQyxJQUFLLE1BQ0xvakQsU0FBVXlnQyxFQUNWNVMsU0FBVStTLEVBQ1ZoVixVQUFXLEdBSWI2VSxFQUFZN21GLEtBQ1ZtdUUsRUFBS29FLG9CQUNMcEUsRUFBS3FFLHFCQUNMc1UsRUFBWSxLQUNaQSxFQUFZLEtBQ1pqc0UsRUFBTW9vRSxnQkFDTixDQUNFbGdGLE1BQU8sb0JBQ1B3eEUsT0FBUSxDQUNObGtFLFVBQVcsU0FDWHJOLElBQUssV0FDTHd6RSxZQUFZLElBR2hCMzdELEVBQU1rb0UsU0FDTmtFLEVBQ0FGLEVBQVcsV0FBWSxhQUFrQixJQUN6Q0EsRUFBVyxXQUFZLGtCQUN2QkEsRUFBVyxXQUFZLGNBQ3ZCLENBQ0UxMkUsVUFBVyxZQUNYdE4sTUFBTzJ1RSxlQUNQMXVFLElBQUssSUFDTHN6RSxhQUFhLEVBQ2JFLFlBQVksR0FFZDM3RCxFQUFNZ29FLFVBQ04sQ0FBRTlPLGNBQWUsV0FDakJsNUQsRUFBTThtRSxtQkFHUixNQUFNdUYsRUFBc0JMLEVBQVl4OUUsT0FBTyxDQUM3Q3RHLE1BQU8sS0FDUEMsSUFBSyxLQUNMb2pELFNBQVV3Z0MsSUFHTk8sRUFBbUIsQ0FDdkJwVCxjQUFlLE9BQ2YyRSxnQkFBZ0IsRUFDaEJ0eUIsU0FBVSxDQUFFLENBQUUydEIsY0FBZSxZQUFjMXFFLE9BQU93OUUsSUFLOUNPLEVBQVksQ0FDaEJya0YsTUFBTzRqRixFQUFrQixRQUN6QnJRLGFBQWEsRUFDYnR6RSxJQUFLLE9BQ0xndkUsVUFBVyxFQUNYNXJCLFNBQVUsQ0FDUixDQUFFcmpELE1BQU8sdUJBQ1Q4WCxFQUFNcW9FLGFBQ04sQ0FDRTd5RSxVQUFXLFlBQ1h0TixNQUFPLE9BQVM0L0UsRUFBV2w5RSxLQUFLLEtBQU8sT0FDdkN6QyxJQUFLLFFBQ0x1eEUsT0FBUSxDQUNObUUsZ0JBQWdCLEVBQ2hCeEcsUUFBUyxRQUNURixVQUFXLEVBQ1g1ckIsU0FBVXlnQyxNQU1aUSxFQUFlLENBQ25CaDNFLFVBQVcsVUFDWHROLE1BQU8sMkdBQ1B3eEUsT0FBUSxDQUNOdnhFLElBQUssUUFDTGl4RSxTQUFVK1MsRUFDVnZRLFdBQVcsRUFDWHJ3QixTQUFVeWdDLEVBQ1Y3VSxVQUFXLElBS1RzVixFQUFnQixDQUNwQmozRSxVQUFXLFdBQ1h3RixTQUFVLENBS1IsQ0FDRTlTLE1BQU8sZ0JBQ1BpdkUsVUFBVyxJQUViLENBQUVqdkUsTUFBTyxhQUVYd3hFLE9BQVEsQ0FDTnZ4RSxJQUFLLE9BQ0x5ekUsV0FBVyxFQUNYcndCLFNBQVU4Z0MsSUFJUkssRUFBZ0IsQ0FJcEIxeEUsU0FBVSxDQUNSLENBQ0U5UyxNQUFPLGVBQ1BDLElBQUssU0FFUCxDQUNFRCxNQUFPNGpGLEVBQ1AzakYsSUFBSyxPQUdUc3pFLGFBQWEsRUFDYkcsV0FBVyxFQUNYdkUsUUFBUyxXQUNURixVQUFXLEVBQ1g1ckIsU0FBVSxDQUNSK25CLEVBQUtvRSxvQkFDTHBFLEVBQUtxRSxxQkFDTDJVLEVBQ0FKLEVBQVcsVUFBVyxVQUN0QkEsRUFBVyxXQUFZLGtCQUV2QixDQUNFaGtGLE1BQU8sT0FBU3cvRSxFQUFLOThFLEtBQUssS0FBTyxPQUNqQzRLLFVBQVcsZ0JBRWJ3SyxFQUFNb29FLGdCQUNOOEQsRUFBVyxlQUFnQkosRUFBaUIsR0FDNUNJLEVBQVcsY0FBZSxJQUFNSixHQUNoQ0ksRUFBVyxpQkFBa0IsTUFBUUosRUFBaUIsR0FDdERJLEVBQVcsZUFBZ0IsSUFBSyxHQUNoQ2xzRSxFQUFNbW9FLHdCQUNOLENBQ0UzeUUsVUFBVyxrQkFDWHROLE1BQU8sS0FBTzAvRSxFQUFlaDlFLEtBQUssS0FBTyxLQUUzQyxDQUNFNEssVUFBVyxrQkFDWHROLE1BQU8sU0FBVzIvRSxFQUFnQmo5RSxLQUFLLEtBQU8sS0FFaEQsQ0FDRTFDLE1BQU8sS0FDUEMsSUFBSyxLQUNMZ3ZFLFVBQVcsRUFDWDVyQixTQUFVOGdDLEdBRVosQ0FBRW5rRixNQUFPLGNBQ1Q4WCxFQUFNOG1FLG9CQUlKNkYsRUFBdUIsQ0FDM0J6a0YsTUFBNEIsZ0JBQUkyakYsRUFBbUJqaEYsS0FBSyxRQUN4RDZ3RSxhQUFhLEVBQ2Jsd0IsU0FBVSxDQUFFbWhDLElBZWQsT0FaQVgsRUFBTTVtRixLQUNKbXVFLEVBQUtvRSxvQkFDTHBFLEVBQUtxRSxxQkFDTDZVLEVBQ0FDLEVBQ0FFLEVBQ0FKLEVBQ0FHLEVBQ0FKLEVBQ0F0c0UsRUFBTThtRSxtQkFHRCxDQUNMaDRFLEtBQU0sT0FDTm10RSxrQkFBa0IsRUFDbEI1RSxRQUFTLGNBQ1Q5ckIsU0FBVXdnQyxFQUVkLFlDcHZCQTV2RCxFQUFPcm1CLFFBdkVQLFNBQWF3OUQsR0FDWCxNQUFNc1osRUFBdUIsV0FDdkJDLEVBQXVCLFdBQ3ZCQyxFQUFnQixDQUNwQjVrRixNQUFPMGtGLEVBQ1B6a0YsSUFBSzBrRixFQUNMdGhDLFNBQVUsQ0FBRSxTQUVSaTlCLEVBQVcsQ0FDZmxWLEVBQUtscEUsUUFBUSxpQkFBc0MsS0FDbkRrcEUsRUFBS2xwRSxRQUNILGFBQ0F5aUYsRUFDQSxDQUNFdGhDLFNBQVUsQ0FBRXVoQyxHQUNaM1YsVUFBVyxNQUlqQixNQUFPLENBQ0xyb0UsS0FBTSxNQUNOc3FFLFNBQVUsQ0FDUnNFLFNBQVVwSyxFQUFLd0Qsb0JBQ2YrTyxRQUFTLGlCQUNUeEwsUUFBUywwRkFDVHlMLFNBRUUsd2xDQWVKdjZCLFNBQVVpOUIsRUFBU2g2RSxPQUFPLENBQ3hCLENBQ0VnSCxVQUFXLFdBQ1gwakUsY0FBZSxXQUNmL3dFLElBQUssTUFDTG9qRCxTQUFVLENBQ1IrbkIsRUFBS3hzRCxRQUFRd3NELEVBQUsyRSxXQUFZLENBQUUvdkUsTUFBTyxzREFDdkMsQ0FDRXNOLFVBQVcsU0FDWHROLE1BQU8sTUFDUDIxRSxnQkFBZ0IsRUFDaEJ0eUIsU0FBVWk5QixJQUVaaDZFLE9BQU9nNkUsSUFFWGxWLEVBQUt3RSxjQUNMeEUsRUFBSzhELGlCQUNMOUQsRUFBS2dFLGtCQUNMLENBQ0U5aEUsVUFBVyxTQUNYdE4sTUFBTzBrRixFQUNQemtGLElBQUswa0YsRUFDTHRoQyxTQUFVLENBQUV1aEMsR0FDWjNWLFVBQVcsS0FJbkIsWUNRQWg3QyxFQUFPcm1CLFFBN0VQLFNBQWtCdzlELEdBRWhCLE1BQU1nWSxFQUFXLENBQ2Y5MUUsVUFBVyxXQUNYd0YsU0FBVSxDQUNSLENBQ0U5UyxNQUFPLFNBQVdvckUsRUFBS3dELG9CQUFzQixNQUM3Q3ZyQixTQUFVLENBQUUrbkIsRUFBSzRELG1CQUVuQixDQUFFaHZFLE1BQU8sb0JBSVB1OUUsRUFBZSxDQUNuQmp3RSxVQUFXLFNBQ1h0TixNQUFPLElBQ1BDLElBQUssSUFDTG9qRCxTQUFVLENBQ1IrbkIsRUFBSzRELGlCQUNMb1UsSUFJRXlCLEVBQU8sQ0FDWHYzRSxVQUFXLFdBQ1h0TixNQUFPLGVBQ1BDLElBQUssS0FDTGl4RSxTQUFVLENBQUUwTSxTQUNSLGtQQUlKdjZCLFNBQVUsQ0FBRSsvQixJQUdSMEIsRUFBYSxDQUFFOWtGLE1BQU8sSUFBTW9yRSxFQUFLd0Qsb0JBQXNCLG1CQVl2RG1XLEVBQVMsQ0FDYnozRSxVQUFXLFVBQ1h0TixNQUFPLFdBQ1BDLElBQUssSUFDTG9qRCxTQUFVLENBQUUrL0IsSUFFZCxNQUFPLENBQ0x4OEUsS0FBTSxXQUNOdW5CLFFBQVMsQ0FDUCxLQUNBLE1BQ0EsUUFFRitpRCxTQUFVLENBQ1JzRSxTQUFVLFNBQ1ZyRCxRQUFTLDZIQUdYOXVCLFNBQVUsQ0FDUituQixFQUFLc0Usa0JBQ0wwVCxFQUNBN0YsRUFDQXNILEVBQ0FDLEVBakNTLENBQ1h4M0UsVUFBVyxPQUNYdE4sTUFBTyxZQUNQQyxJQUFLLElBQ0xpeEUsU0FBVSxDQUNSc0UsU0FBVSxVQUNWckQsUUFBUyxXQTZCVDRTLEdBR04sWUM2SkE5d0QsRUFBT3JtQixRQXhPUCxTQUFrQnc5RCxHQUNoQixNQUNNNFosRUFBYyxDQUNsQmhsRixNQUFPLGdCQUNQQyxJQUFLLElBQ0x3NEUsWUFBYSxNQUNieEosVUFBVyxHQThEUGdXLEVBQU8sQ0FDWG55RSxTQUFVLENBR1IsQ0FDRTlTLE1BQU8saUJBQ1BpdkUsVUFBVyxHQUdiLENBQ0VqdkUsTUFBTyxnRUFDUGl2RSxVQUFXLEdBRWIsQ0FDRWp2RSxNQWpGUW9yRSxFQUFLcUQsTUFpRkFub0UsT0FBTyxZQWZQLDBCQWVnQyxjQUM3QzJvRSxVQUFXLEdBR2IsQ0FDRWp2RSxNQUFPLHdCQUNQaXZFLFVBQVcsR0FHYixDQUNFanZFLE1BQU8saUJBQ1BpdkUsVUFBVyxJQUdmc0UsYUFBYSxFQUNibHdCLFNBQVUsQ0FDUixDQUVFaCtDLE1BQU8sWUFDVCxDQUNFaUksVUFBVyxTQUNYMmhFLFVBQVcsRUFDWGp2RSxNQUFPLE1BQ1BDLElBQUssTUFDTHF2RSxjQUFjLEVBQ2RvRSxXQUFXLEdBRWIsQ0FDRXBtRSxVQUFXLE9BQ1gyaEUsVUFBVyxFQUNYanZFLE1BQU8sU0FDUEMsSUFBSyxNQUNMcXZFLGNBQWMsRUFDZG1FLFlBQVksR0FFZCxDQUNFbm1FLFVBQVcsU0FDWDJoRSxVQUFXLEVBQ1hqdkUsTUFBTyxTQUNQQyxJQUFLLE1BQ0xxdkUsY0FBYyxFQUNkbUUsWUFBWSxLQUlaeVIsRUFBTyxDQUNYNTNFLFVBQVcsU0FDWCsxQyxTQUFVLEdBQ1Z2d0MsU0FBVSxDQUNSLENBQ0U5UyxNQUFPLE9BQ1BDLElBQUssUUFFUCxDQUNFRCxNQUFPLFFBQ1BDLElBQUssV0FJTGtsRixFQUFTLENBQ2I3M0UsVUFBVyxXQUNYKzFDLFNBQVUsR0FDVnZ3QyxTQUFVLENBQ1IsQ0FDRTlTLE1BQU8sV0FDUEMsSUFBSyxNQUVQLENBQ0VELE1BQU8sU0FDUEMsSUFBSyxJQUNMZ3ZFLFVBQVcsS0FRWG1XLEVBQXNCaGEsRUFBS3hzRCxRQUFRc21FLEVBQU0sQ0FBRTdoQyxTQUFVLEtBQ3JEZ2lDLEVBQXNCamEsRUFBS3hzRCxRQUFRdW1FLEVBQVEsQ0FBRTloQyxTQUFVLEtBQzdENmhDLEVBQUs3aEMsU0FBU3BtRCxLQUFLb29GLEdBQ25CRixFQUFPOWhDLFNBQVNwbUQsS0FBS21vRixHQUVyQixJQUFJRSxFQUFjLENBQ2hCTixFQUNBQyxHQTJDRixNQXhDQSxDQUNFQyxFQUNBQyxFQUNBQyxFQUNBQyxHQUNBem5GLFNBQVFpd0IsSUFDUkEsRUFBRXcxQixTQUFXeDFCLEVBQUV3MUIsU0FBUy84QyxPQUFPZy9FLEVBQVksSUFHN0NBLEVBQWNBLEVBQVloL0UsT0FBTzQrRSxFQUFNQyxHQStCaEMsQ0FDTHYrRSxLQUFNLFdBQ051bkIsUUFBUyxDQUNQLEtBQ0EsU0FDQSxPQUVGazFCLFNBQVUsQ0FwQ0csQ0FDYi8xQyxVQUFXLFVBQ1h3RixTQUFVLENBQ1IsQ0FDRTlTLE1BQU8sVUFDUEMsSUFBSyxJQUNMb2pELFNBQVVpaUMsR0FFWixDQUNFdGxGLE1BQU8sdUJBQ1BxakQsU0FBVSxDQUNSLENBQUVyakQsTUFBTyxXQUNULENBQ0VBLE1BQU8sSUFDUEMsSUFBSyxNQUNMb2pELFNBQVVpaUMsT0F1QmhCTixFQWpMUyxDQUNYMTNFLFVBQVcsU0FDWHROLE1BQU8sbUNBQ1BDLElBQUssT0FDTHd6RSxZQUFZLEdBK0tWeVIsRUFDQUMsRUFuQmUsQ0FDakI3M0UsVUFBVyxRQUNYdE4sTUFBTyxTQUNQcWpELFNBQVVpaUMsRUFDVnJsRixJQUFLLEtBbk1NLENBQ1hxTixVQUFXLE9BQ1h3RixTQUFVLENBRVIsQ0FBRTlTLE1BQU8saUNBQ1QsQ0FBRUEsTUFBTyxpQ0FFVCxDQUNFQSxNQUFPLE1BQ1BDLElBQUssYUFFUCxDQUNFRCxNQUFPLE1BQ1BDLElBQUssYUFFUCxDQUFFRCxNQUFPLFNBQ1QsQ0FDRUEsTUFBTyxrQkFHUHFqRCxTQUFVLENBQ1IsQ0FDRXJqRCxNQUFPLGNBQ1BDLElBQUssV0FHVGd2RSxVQUFXLEtBOUJPLENBQ3RCanZFLE1BQU8sY0FDUEMsSUFBSyxLQXdOSGdsRixFQWxMbUIsQ0FDckJqbEYsTUFBTyxlQUNQdXpFLGFBQWEsRUFDYmx3QixTQUFVLENBQ1IsQ0FDRS8xQyxVQUFXLFNBQ1h0TixNQUFPLEtBQ1BDLElBQUssS0FDTHF2RSxjQUFjLEVBQ2RtRSxZQUFZLEdBRWQsQ0FDRW5tRSxVQUFXLE9BQ1h0TixNQUFPLE9BQ1BDLElBQUssSUFDTHF2RSxjQUFjLE1BdUt0QixZQ2NBcjdDLEVBQU9ybUIsUUFwUFAsU0FBb0J3OUQsR0FDbEIsTUFJTW1hLEVBQWdCLHlCQWtLaEJDLEVBQWlCLENBQ3JCaFEsU0FBVStQLEVBQ1ZwVCxRQUFTLENBQ1AsYUFDQSxTQUNBLFlBQ0Esb0JBR0osTUFBTyxDQUNMdnJFLEtBQU0sY0FDTnVuQixRQUFTLENBQ1AsS0FDQSxPQUNBLFFBQ0EsVUFDQSxpQkFFRitpRCxTQTdCZSxDQUNmLG9CQUFxQixDQUNuQixPQUNBLFNBRUZzRSxTQUFVK1AsRUFDVnBULFFBM0lVLENBQ1YsUUFDQSxTQUNBLFNBQ0EsVUFDQSxRQUNBLFNBQ0EsTUFDQSxRQUNBLFdBQ0EsU0FDQSxVQUNBLEtBQ0EsS0FDQSxTQUNBLE9BQ0EsT0FDQSxPQUNBLFFBQ0EsU0FDQSxNQUNBLE9BQ0EsVUFDQSxXQUNBLFdBQ0EsV0FDQSxTQUNBLFdBQ0EsU0FDQSxXQUNBLFNBQ0EsWUFDQSxPQUNBLGdCQUNBLEtBQ0EsU0FDQSxZQUNBLFdBQ0EsV0FDQSxTQUNBLE9BQ0EsT0FDQSxLQUNBLE1BQ0EsUUFDQSxTQUNBLFFBQ0EsU0FDQSxXQUNBLFNBQ0EsVUFDQSxrQkFDQSxXQUNBLGFBQ0EsVUFDQSxPQUNBLFlBQ0EsT0FDQSxTQUNBLFNBQ0EsV0FDQSxtQkFDQSxjQUNBLFdBQ0EsWUFDQSxZQUNBLFlBQ0EsVUFDQSxXQUNBLFVBQ0EsUUFDQSx1QkFDQSxXQUNBLG9CQUNBLG9CQUNBLGtCQUNBLGNBQ0Esa0JBQ0EsV0FDQSxXQUNBLFlBQ0Esb0JBQ0EsZUFDQSxzQkFDQSxnQkFDQSxTQUNBLFNBQ0EsU0FDQSxvQkFDQSxVQUNBLFdBQ0EsbUJBQ0Esa0JBQ0EsUUFDQSxlQUNBLDRCQUNBLGlCQUNBLG9CQUNBLDJCQUNBLFlBQ0EsZUFDQSxnQkFDQSxVQUNBLGFBQ0EsdUJBQ0EsMEJBQ0Esd0JBQ0EsdUJBQ0EsZ0JBQ0EsbUJBQ0EsWUFDQSxhQUNBLGdCQUNBLGlCQUNBLGlCQTBCQXdMLFFBeEJlLENBQ2YsUUFDQSxPQUNBLFFBQ0EsT0FDQSxNQUNBLE1BQ0EsS0FDQSxRQWlCQUMsU0FmZ0IsQ0FDaEIsa0JBQ0EsbUJBQ0EsZ0JBQ0EsaUJBQ0EsaUJBV0FoOUUsS0EvSlksQ0FDWixNQUNBLFFBQ0EsT0FDQSxXQUNBLFNBQ0EsUUFDQSxPQUNBLFNBQ0EsVUFDQSxVQUNBLE9BQ0EsT0FDQSxPQUNBLE9BQ0EsVUFxS0F1dUUsUUFBUyxLQUNUOXJCLFNBQVUsQ0ExTE0sQ0FDaEIvMUMsVUFBVyxXQUNYdE4sTUFBTyx3RUEwTExvckUsRUFBS29FLG9CQUNMcEUsRUFBS3FFLHFCQUNMckUsRUFBS3dFLGNBQ0x4RSxFQUFLZ0Usa0JBQ0xoRSxFQUFLOEQsaUJBQ0wsQ0FDRTVoRSxVQUFXLFNBQ1h3RixTQUFVLENBQ1IsQ0FDRTlTLE1BQU8sS0FDUEMsSUFBSyxJQUNMa3ZFLFFBQVMsTUFDVDlyQixTQUFVLENBQUUrbkIsRUFBSzRELHFCQUl2QixDQUNFMWhFLFVBQVcsT0FDWHROLE1BQU8sZUFDUEMsSUFBSyxJQUNMaXhFLFNBQVUsQ0FBRWlCLFFBQ1Isa0ZBRUo5dUIsU0FBVSxDQUNSLENBQ0VyakQsTUFBTyxPQUNQaXZFLFVBQVcsR0FFYjdELEVBQUt4c0QsUUFBUXdzRCxFQUFLZ0Usa0JBQW1CLENBQUU5aEUsVUFBVyxXQUNsRCxDQUNFQSxVQUFXLFNBQ1h0TixNQUFPLFFBQ1BDLElBQUssSUFDTGt2RSxRQUFTLE9BRVgvRCxFQUFLb0Usb0JBQ0xwRSxFQUFLcUUsdUJBR1QsQ0FDRW5pRSxVQUFXLFFBQ1h0TixNQUFPLElBQU13bEYsRUFBZXJULFFBQVF6dkUsS0FBSyxLQUFPLE9BQ2hEekMsSUFBSyxTQUNMd3pFLFlBQVksRUFDWnZDLFNBQVVzVSxFQUNWbmlDLFNBQVUsQ0FBRStuQixFQUFLNEUsd0JBRW5CLENBQ0Vod0UsTUFBTyxNQUFRb3JFLEVBQUt3RCxvQkFDcEJLLFVBQVcsSUFJbkIsWUM0TkFoN0MsRUFBT3JtQixRQTljUCxTQUFjdzlELEdBQ1osTUFBTXFELEVBQVFyRCxFQUFLcUQsTUEyT2JnWCxFQUFrQix1QkFDbEJDLEVBQWdCLENBQ3BCbFEsU0FBVSxTQUNWckQsUUE3T2UsQ0FDZixNQUNBLFNBQ0EsUUFDQSxNQUNBLFFBQ0EsT0FDQSxVQUNBLFFBQ0EsUUFDQSxTQUNBLFFBQ0EsUUFDQSxRQUNBLE9BQ0EsUUFDQSxNQUNBLFNBQ0EsUUFDQSxXQUNBLFVBQ0EsV0FDQSxNQUNBLFFBQ0EsV0FDQSxVQUNBLFVBQ0EsU0FDQSxNQUNBLEtBQ0EsT0FDQSxPQUNBLE9BQ0EsUUFDQSxXQUNBLGFBQ0EsWUFDQSxjQUNBLFdBQ0EsYUFDQSxNQUNBLE9BQ0EsT0FDQSxTQUNBLE9BQ0EsTUFDQSxRQUNBLFNBQ0EsUUFDQSxNQUNBLFVBQ0EsT0FDQSxTQUNBLFdBQ0EsT0FDQSxXQUNBLFdBQ0EsV0FDQSxnQkFDQSxnQkFDQSxhQUNBLFdBQ0EsZUFDQSxlQUNBLFlBQ0EsY0FDQSxVQUNBLGNBQ0EsaUJBQ0EsbUJBQ0EsY0FDQSxXQUNBLFdBQ0EsV0FDQSxnQkFDQSxnQkFDQSxhQUNBLGNBQ0EsYUFDQSxRQUNBLE9BQ0EsU0FDQSxPQUNBLE9BQ0EsS0FDQSxNQUNBLEtBQ0EsUUFDQSxNQUNBLFFBQ0EsT0FDQSxPQUNBLE9BQ0EsT0FDQSxLQUNBLFVBQ0EsU0FDQSxPQUNBLFNBQ0EsUUFDQSxZQUNBLE1BQ0EsUUFDQSxLQUNBLEtBQ0EsTUFDQSxRQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsS0FDQSxLQUNBLE9BQ0EsS0FDQSxNQUNBLE1BQ0EsT0FDQSxVQUNBLEtBQ0EsTUFDQSxNQUNBLE9BQ0EsVUFDQSxPQUNBLE1BQ0EsTUFDQSxRQUNBLFNBQ0EsWUFDQSxPQUNBLE1BQ0EsS0FDQSxZQUNBLEtBQ0EsS0FDQSxPQUNBLE9BQ0EsVUFDQSxXQUNBLFdBQ0EsV0FDQSxPQUNBLE9BQ0EsTUFDQSxTQUNBLFVBQ0EsUUFDQSxTQUNBLFVBQ0EsWUFDQSxTQUNBLFFBQ0EsTUFDQSxTQUNBLE9BQ0EsVUFDQSxTQUNBLFNBQ0EsU0FDQSxRQUNBLE9BQ0EsV0FDQSxhQUNBLFlBQ0EsVUFDQSxjQUNBLGNBQ0EsV0FDQSxhQUNBLGFBQ0EsUUFDQSxTQUNBLFNBQ0EsVUFDQSxXQUNBLFdBQ0EsTUFDQSxRQUNBLFNBQ0EsYUFDQSxPQUNBLFNBQ0EsUUFDQSxVQUNBLE9BQ0EsUUFDQSxPQUNBLFFBQ0EsUUFDQSxNQUNBLFNBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFNBQ0EsV0FDQSxPQUNBLFVBQ0EsTUFDQSxPQUNBLE9BQ0EsUUFDQSxLQUNBLFdBQ0EsS0FDQSxVQUNBLFFB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QSxPQUNBLFFBQ0EsV0FDQSxVQUNBLFVBQ0EsU0FDQSxTQUNBLFlBQ0EsVUFDQSxhQUNBLFdBQ0EsVUFDQSxPQUNBLE9BQ0EsZ0JBQ0EsTUFDQSxPQUNBLFFBQ0EsWUFDQSxhQUNBLFNBQ0EsUUFDQSxPQUNBLFlBQ0EsVUFDQSxrQkFDQSxlQUNBLGtDQUNBLGVBQ0EsZUFDQSxjQUNBLGlCQUNBLGVBQ0Esb0JBQ0EsZUFDQSxlQUNBLG1DQUNBLGVBQ0EsU0FDQSxRQUNBLE9BQ0EsTUFDQSxhQUNBLE1BQ0EsVUFDQSxXQUNBLFVBQ0EsVUFDQSxTQUNBLFNBQ0EsYUFDQSxRQUNBLFdBQ0EsZ0JBQ0EsYUFDQSxXQUNBLFNBQ0EsT0FDQSxVQUNBLE9BQ0EsVUFDQSxPQUNBLFFBQ0EsTUFDQSxZQUNBLGdCQUNBLFdBQ0EsU0FDQSxTQUNBLFFBQ0EsU0FDQSxPQUNBLFVBQ0EsU0FDQSxNQUNBLFdBQ0EsVUFDQSxRQUNBLFFBQ0EsU0FDQSxjQUNBLFFBQ0EsUUFDQSxNQUNBLFVBQ0EsWUFDQSxPQUNBLE9BQ0EsT0FDQSxXQUNBLFNBQ0EsTUFDQSxTQUNBLFFBQ0EsUUFDQSxXQUNBLFNBQ0EsU0FDQSxPQUNBLE9BQ0EsV0FDQSxLQUNBLFlBQ0EsVUFDQSxRQUNBLFFBQ0EsY0FDQSxTQUNBLE1BQ0EsVUFDQSxZQUNBLGVBQ0EsV0FDQSxPQUNBLEtBQ0EsT0FDQSxhQUNBLGdCQUNBLGNBQ0EsY0FDQSxpQkFDQSxhQUNBLGFBQ0EsdUJBQ0EsYUFDQSxNQUNBLFdBQ0EsUUFDQSxhQUNBLFVBQ0EsT0FDQSxVQUNBLE9BQ0EsT0FDQSxhQUNBLFVBQ0EsS0FDQSxRQUNBLFlBQ0EsaUJBQ0EsTUFDQSxRQUNBLFFBQ0EsUUFDQSxlQUNBLGtCQUNBLFVBQ0EsTUFDQSxTQUNBLFFBQ0EsU0FDQSxNQUNBLFNBQ0EsTUFDQSxXQUNBLFNBQ0EsUUFDQSxXQUNBLFdBQ0EsVUFDQSxRQUNBLFFBQ0EsTUFDQSxLQUNBLE9BQ0EsWUFDQSxNQUNBLFlBQ0EsUUFDQSxPQUNBLFNBQ0EsVUFDQSxlQUNBLG9CQUNBLEtBQ0EsU0FDQSxNQUNB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d0ksR0FBVUEsRUFBT3RQLEtBQzVCLElBQUk2VixNQUE4QzQzRyxHQUF1QixLQUdqRm5XLEVBQVVuc0csR0FBUWcxSSxFQUNsQkYsRUFBYUEsR0FBY0UsSUFBb0JELENBQ2pELENBR0EsT0FEQUQsRUFBYUEsR0FBY0YsRUFBaUJqa0osU0FBVzBDLE9BQU80WixLQUFLb0ksR0FBTzFrQixRQUN0RHc3RyxFQUFZOTJGLENBQ2xDLENBQ0YsQ0VySHNCNC9ILENBQWdCanlCLEVBSWxDLENBQ0EsSUFBSWt5QixFQUFrQi93QixFQUNTLG1CQUFwQit3QixJQUNQQSxFQUFrQkEsRUFBZ0JwQixJQVF0QyxJQUFJcUIsRUFBcUJweEIsR0FBZ0I5cUcsV0FBTSxFQUFRaThILEdBQ25ERSxFQUFldHhCLEdBQ2Zzd0IsSUFDQWdCLEVBQWU3dkIsR0FBb0JILEdBQWUsQ0FDOUNpd0IsT0FBTyxHQUNZLGlCQUFiakIsR0FBeUJBLEtBRXZDLElBQUlrQixFQUFpQixDQUFDSCxHQVF0QixPQVBJMTdJLE1BQU1zRyxRQUFRdzBJLEdBQ2RlLEVBQWlCM3dCLEdBQWMsQ0FBQ3d3QixHQUFxQlosR0FFM0IsbUJBQWRBLElBQ1plLEVBQWlCZixFQUFVZSxJQUd4QnZ5QixHQUFZOHdCLEVBQWE1d0IsRUFEVG15QixFQUFhbjhILFdBQU0sRUFBUXE4SCxHQUV0RCxDMkg5ZHFCQyxDQUFlLENBQ2xDdnlCLFFBQVMsQ0FDUDhyQixTQUFVMEcsR0FDVjVILFVBQVc2SCxHQUNYcHZILEtBQU1xdkgsR0FDTnRwQixVQUFXdXBCLEdBQ1gxTyxTQUFVMk8sR0FDVjlKLFNBQVUrSixNQ1JEQyxFQUFBQSxXQUFvQjlqSixTQUFTK3FILGVBQWUsU0FDcERsaUYsT0FDSCxnQkFBQyxFQUFELENBQVUwbkQsTUFBT0EsSUFDZixnQkFBQ3FMLEdBQUQsS0FDRSxnQkFBQyxHQUFEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vamVzdGVyL3dlYnBhY2svcnVudGltZS9jcmVhdGUgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zaGVldC9kaXN0L2Vtb3Rpb24tc2hlZXQuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVXRpbGl0eS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9Ub2tlbml6ZXIuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1ByZWZpeGVyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9lbW90aW9uLW1lbW9pemUuZXNtLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tZWxlbWVudC02YTg4M2RhOS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy9kaXN0L2Vtb3Rpb24tdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9BZGRCb3guanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvQWRkQ2FyZC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9BcnRpY2xlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL0NvbGxlY3Rpb25zQm9va21hcmsuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ29udGVudENvcHkuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ3JlZGl0Q2FyZC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9EZWxldGUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvRGVsZXRlRm9yZXZlci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9Eb25lQWxsLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL0dpdEh1Yi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9Ib21lLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL0ludGVncmF0aW9uSW5zdHJ1Y3Rpb25zLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL0xvZ2luLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL0xvZ291dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9TYXZlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL3V0aWxzL2NyZWF0ZVN2Z0ljb24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL2NvbG9ycy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL2NvbG9ycy9ncmV5LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9jb2xvcnMvcHVycGxlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9jb2xvcnMvcmVkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9jb2xvcnMvb3JhbmdlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9jb2xvcnMvYmx1ZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vY29sb3JzL2xpZ2h0Qmx1ZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vY29sb3JzL2dyZWVuLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9zdHlsZXMvY3JlYXRlUGFsZXR0ZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vc3R5bGVzL2NyZWF0ZVR5cG9ncmFwaHkuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3N0eWxlcy9zaGFkb3dzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9zdHlsZXMvY3JlYXRlVHJhbnNpdGlvbnMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3N0eWxlcy96SW5kZXguanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3N0eWxlcy9jcmVhdGVUaGVtZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vc3R5bGVzL2NyZWF0ZU1peGlucy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vc3R5bGVzL2RlZmF1bHRUaGVtZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3Byb3BzVG9DbGFzc0tleS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVN0eWxlZC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vc3R5bGVzL3N0eWxlZC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vc3R5bGVzL3VzZVRoZW1lUHJvcHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVByb3BzL3VzZVRoZW1lUHJvcHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVByb3BzL2dldFRoZW1lUHJvcHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3V0aWxzL2NhcGl0YWxpemUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1N2Z0ljb24vc3ZnSWNvbkNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1N2Z0ljb24vU3ZnSWNvbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvY3JlYXRlU3ZnSWNvbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvZGVib3VuY2UuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvZGVwcmVjYXRlZFByb3BUeXBlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9kZXByZWNhdGVkUHJvcFR5cGUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3V0aWxzL3JlcXVpcmVQcm9wRmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vcmVxdWlyZVByb3BGYWN0b3J5LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy9zZXRSZWYuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3V0aWxzL3Vuc3VwcG9ydGVkUHJvcC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vdW5zdXBwb3J0ZWRQcm9wLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvaXNNdWlFbGVtZW50LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9pc011aUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3V0aWxzL293bmVyRG9jdW1lbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3V0aWxzL293bmVyV2luZG93LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy91c2VDb250cm9sbGVkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS91c2VDb250cm9sbGVkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy91c2VFbmhhbmNlZEVmZmVjdC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvdXNlRXZlbnRDYWxsYmFjay5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvdXNlRm9ya1JlZi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdXRpbHMvdXNlSWQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUlzRm9jdXNWaXNpYmxlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS91dGlscy91c2VJc0ZvY3VzVmlzaWJsZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9wcml2YXRlLXRoZW1pbmcvdXNlVGhlbWUvVGhlbWVDb250ZXh0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy91c2VUaGVtZS91c2VUaGVtZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaXMtcHJvcC12YWxpZC9kaXN0L2Vtb3Rpb24taXMtcHJvcC12YWxpZC5lc20uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxlZC9iYXNlL2Rpc3QvZW1vdGlvbi1zdHlsZWQtYmFzZS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc3R5bGVkL2Rpc3QvZW1vdGlvbi1zdHlsZWQuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2JyZWFrcG9pbnRzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY29sb3JNYW5pcHVsYXRvci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2NyZWF0ZUJyZWFrcG9pbnRzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvc2hhcGUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVUaGVtZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2NyZWF0ZVNwYWNpbmcuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jb21wb3NlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYm9yZGVycy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2Rpc3BsYXkuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9mbGV4Ym94LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3NzR3JpZC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3Bvc2l0aW9ucy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3BhbGV0dGUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zaGFkb3dzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc2l6aW5nLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdHlwb2dyYXBoeS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2dldFRoZW1lVmFsdWUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZXJnZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3NwYWNpbmcuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZW1vaXplLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZUZ1bmN0aW9uU3gvc3R5bGVGdW5jdGlvblN4LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVdpdGhvdXREZWZhdWx0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9DbGFzc05hbWVHZW5lcmF0b3IvQ2xhc3NOYW1lR2VuZXJhdG9yLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9jYXBpdGFsaXplLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9jb21wb3NlQ2xhc3Nlcy9jb21wb3NlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vZGVlcG1lcmdlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9mb3JtYXRNdWlFcnJvck1lc3NhZ2UuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2dlbmVyYXRlVXRpbGl0eUNsYXNzL2dlbmVyYXRlVXRpbGl0eUNsYXNzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL293bmVyRG9jdW1lbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL293bmVyV2luZG93LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9yZXNvbHZlUHJvcHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3NldFJlZi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vdXNlRW5oYW5jZWRFZmZlY3QuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUV2ZW50Q2FsbGJhY2suanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUZvcmtSZWYuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUlkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0Vycm9yLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL251bGwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvY2xzeC9kaXN0L2Nsc3gubS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvZGlzdC9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5janMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9jbGllbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC9janMvcmVhY3QucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC9qc3gtcnVudGltZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vd2l0aC1zZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvY29tbW9uLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2NvcmUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Jhc2guanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2MuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NwcC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3NoYXJwLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jc3MuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2RpZmYuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dvLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ncmFwaHFsLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9pbmkuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2phdmEuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2phdmFzY3JpcHQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2pzb24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2tvdGxpbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGVzcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbHVhLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tYWtlZmlsZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWFya2Rvd24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL29iamVjdGl2ZWMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BlcmwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BocC10ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGhwLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wbGFpbnRleHQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3B5dGhvbi1yZXBsLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9weXRob24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3IuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3J1YnkuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3J1c3QuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Njc3MuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NoZWxsLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zcWwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N3aWZ0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90eXBlc2NyaXB0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92Ym5ldC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvd2FzbS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMveG1sLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy95YW1sLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovL2plc3Rlci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9qZXN0ZXIvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vamVzdGVyL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9qZXN0ZXIvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9qZXN0ZXIvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvYmF0Y2guanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaG9va3MvdXNlUmVkdXhDb250ZXh0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvdXNlU3luY0V4dGVybmFsU3RvcmUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL1N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29tcG9uZW50cy9jb25uZWN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL1Byb3ZpZGVyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VTdG9yZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaG9va3MvdXNlRGlzcGF0Y2guanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0ByZW1peC1ydW4vcm91dGVyL2Rpc3Qvcm91dGVyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVhY3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci1kb20vZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlRnVuY3Rpb25TeC9leHRlbmRTeFByb3AuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVCb3guanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0JveC9Cb3guanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL1RoZW1lUHJvdmlkZXIvbmVzdGVkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy9UaGVtZVByb3ZpZGVyL1RoZW1lUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9UaGVtZVByb3ZpZGVyL1RoZW1lUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9lcy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXBDb250ZXh0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0J1dHRvbkJhc2UvdG91Y2hSaXBwbGVDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9CdXR0b25CYXNlL1RvdWNoUmlwcGxlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9CdXR0b25CYXNlL1JpcHBsZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQnV0dG9uQmFzZS9idXR0b25CYXNlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQnV0dG9uQmFzZS9CdXR0b25CYXNlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9CdXR0b24vYnV0dG9uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBDb250ZXh0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9CdXR0b24vQnV0dG9uLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvVGV4dGFyZWFBdXRvc2l6ZS9UZXh0YXJlYUF1dG9zaXplLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvdXRpbHMvaXNIb3N0Q29tcG9uZW50LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vSW5wdXRCYXNlL3V0aWxzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9JbnB1dEJhc2UvaW5wdXRCYXNlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vSW5wdXRCYXNlL0lucHV0QmFzZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vSW5wdXQvaW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9JbnB1dC9JbnB1dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRmlsbGVkSW5wdXQvZmlsbGVkSW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9GaWxsZWRJbnB1dC9GaWxsZWRJbnB1dC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vT3V0bGluZWRJbnB1dC9Ob3RjaGVkT3V0bGluZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vT3V0bGluZWRJbnB1dC9vdXRsaW5lZElucHV0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vT3V0bGluZWRJbnB1dC9PdXRsaW5lZElucHV0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9Gb3JtTGFiZWwvZm9ybUxhYmVsQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRm9ybUxhYmVsL0Zvcm1MYWJlbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vSW5wdXRMYWJlbC9pbnB1dExhYmVsQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vSW5wdXRMYWJlbC9JbnB1dExhYmVsLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9Gb3JtSGVscGVyVGV4dC9mb3JtSGVscGVyVGV4dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0Zvcm1IZWxwZXJUZXh0L0Zvcm1IZWxwZXJUZXh0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9MaXN0L0xpc3RDb250ZXh0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9MaXN0L2xpc3RDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9MaXN0L0xpc3QuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2dldFNjcm9sbGJhclNpemUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3V0aWxzL2dldFNjcm9sbGJhclNpemUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL01lbnVMaXN0L01lbnVMaXN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9QYXBlci9wYXBlckNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1BhcGVyL1BhcGVyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9yZWZsb3cuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL3N0eWxlcy91c2VUaGVtZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vdHJhbnNpdGlvbnMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0dyb3cvR3Jvdy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL1BvcnRhbC9Qb3J0YWwuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS9Nb2RhbFVuc3R5bGVkL01vZGFsTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL1RyYXBGb2N1cy9UcmFwRm9jdXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS9Nb2RhbFVuc3R5bGVkL21vZGFsVW5zdHlsZWRDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvdXRpbHMvYXBwZW5kT3duZXJTdGF0ZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL3V0aWxzL29taXRFdmVudEhhbmRsZXJzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvdXRpbHMvcmVzb2x2ZUNvbXBvbmVudFByb3BzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvdXRpbHMvdXNlU2xvdFByb3BzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvdXRpbHMvbWVyZ2VTbG90UHJvcHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS91dGlscy9leHRyYWN0RXZlbnRIYW5kbGVycy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL01vZGFsVW5zdHlsZWQvTW9kYWxVbnN0eWxlZC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRmFkZS9GYWRlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9CYWNrZHJvcC9iYWNrZHJvcENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0JhY2tkcm9wL0JhY2tkcm9wLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9Nb2RhbC9Nb2RhbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vUG9wb3Zlci9wb3BvdmVyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vUG9wb3Zlci9Qb3BvdmVyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9NZW51L21lbnVDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9NZW51L01lbnUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL05hdGl2ZVNlbGVjdC9uYXRpdmVTZWxlY3RDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9OYXRpdmVTZWxlY3QvTmF0aXZlU2VsZWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1NlbGVjdC9zZWxlY3RDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9TZWxlY3QvU2VsZWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL2ludGVybmFsL3N2Zy1pY29ucy9BcnJvd0Ryb3BEb3duLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9TZWxlY3QvU2VsZWN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9UZXh0RmllbGQvdGV4dEZpZWxkQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vVGV4dEZpZWxkL1RleHRGaWVsZC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vVHlwb2dyYXBoeS90eXBvZ3JhcGh5Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vVHlwb2dyYXBoeS9UeXBvZ3JhcGh5LmpzIiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9yZWR1eC9ob29rcy50cyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvaW1tZXIvZGlzdC9pbW1lci5lc20ubWpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvcmVkdXguanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL3JlZHV4LXRodW5rL2VzL2luZGV4LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L2Rpc3QvcmVkdXgtdG9vbGtpdC5lc20uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbnN0YW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvcmVkdXgvcmVkdWNlcnMvY2xpcGJvYXJkU2xpY2UudHMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L3JlZHV4L3JlZHVjZXJzL3VzZXJJbmZvU2xpY2UudHMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tYXRoLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzTGF5b3V0Vmlld3BvcnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzVGFibGVFbGVtZW50LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvb3JkZXJNb2RpZmllcnMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvb2Zmc2V0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9leHBhbmRUb0hhc2hNYXAuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy93aXRoaW4uanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QWx0QXhpcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS9Qb3BwZXJVbnN0eWxlZC9wb3BwZXJVbnN0eWxlZENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS9Qb3BwZXJVbnN0eWxlZC9Qb3BwZXJVbnN0eWxlZC5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vUG9wcGVyL1BvcHBlci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vVG9vbHRpcC90b29sdGlwQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vVG9vbHRpcC9Ub29sdGlwLmpzIiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb21wb25lbnRzL0FwcEJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvQ2xpcGJvYXJkQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvY29tcG9uZW50cy9DbGlwYm9hcmQudHN4Iiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9MaW5rL2xpbmtDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9MaW5rL2dldFRleHREZWNvcmF0aW9uLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9MaW5rL0xpbmsuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvRm9vdGVyLnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvanMtY29va2llL2Rpc3QvanMuY29va2llLm1qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQXBwQmFyL2FwcEJhckNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0FwcEJhci9BcHBCYXIuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1Rvb2xiYXIvdG9vbGJhckNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL1Rvb2xiYXIvVG9vbGJhci5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRGlhbG9nL2RpYWxvZ0NsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0RpYWxvZy9EaWFsb2dDb250ZXh0LmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9EaWFsb2cvRGlhbG9nLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9EaWFsb2dUaXRsZS9kaWFsb2dUaXRsZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0RpYWxvZ1RpdGxlL0RpYWxvZ1RpdGxlLmpzIiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb21wb25lbnRzL0xvZ2luLnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvY29tcG9uZW50cy9OYXZCYXIudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9yZWR1eC9yZWR1Y2Vycy9uYXZQYW5lbFNsaWNlLnRzIiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb21wb25lbnRzL05hdlBhbmVsRGlzcGxheS50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvQWRkUHJvamVjdERpYWxvZy50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvTmF2UHJvamVjdE1lbnUudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb21wb25lbnRzL1Byb2plY3QudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb250YWluZXJzL1Byb2plY3RQYW5lbENvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbnRhaW5lcnMvTmF2UGFuZWxDb250YWluZXIudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9wYWdlcy9BdXRoLnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vRGl2aWRlci9kaXZpZGVyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vTGlzdEl0ZW1JY29uL2xpc3RJdGVtSWNvbkNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0xpc3RJdGVtVGV4dC9saXN0SXRlbVRleHRDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9NZW51SXRlbS9tZW51SXRlbUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL01lbnVJdGVtL01lbnVJdGVtLmpzIiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9yZWR1eC9yZWR1Y2Vycy9jb2RlU2xpY2UudHMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L3JlZHV4L3JlZHVjZXJzL3Rlc3RGb3JtU2xpY2UudHMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L3JlZHV4L3JlZHVjZXJzL3VzZXJJbnB1dFNsaWNlLnRzIiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb21wb25lbnRzL0Fzc2VydGlvbnMudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb21wb25lbnRzL1Byb2plY3REcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2NvbXBvbmVudHMvUmVxdWVzdEJvZHkudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb21wb25lbnRzL1Rlc3RJbnB1dEZvcm0udHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb21wb25lbnRzL0NvZGVUZXh0LnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvY29udGFpbmVycy9CdXR0b25Db250YWluZXIudHN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb250YWluZXJzL0NvZGVDb250YWluZXIudHN4Iiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9TdGFjay9TdGFjay5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvY29udGFpbmVycy9TYXZlRGF0YUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L3BhZ2VzL0NvZGVHZW5lcmF0b3IudHN4Iiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9DYXJkL2NhcmRDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9DYXJkL0NhcmQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0NhcmRBY3Rpb25zL2NhcmRBY3Rpb25zQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQ2FyZEFjdGlvbnMvQ2FyZEFjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0NhcmRDb250ZW50L2NhcmRDb250ZW50Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9lc20vQ2FyZENvbnRlbnQvQ2FyZENvbnRlbnQuanMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvZXNtL0NhcmRNZWRpYS9jYXJkTWVkaWFDbGFzc2VzLmpzIiwid2VicGFjazovL2plc3Rlci8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2VzbS9DYXJkTWVkaWEvQ2FyZE1lZGlhLmpzIiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9jb21wb25lbnRzL0NvbnRyaWJ1dG9yQ2FyZC50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L3BhZ2VzL0NvbnRyaWJ1dG9ycy50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2Fzc2V0cy9waG90b3NPYmouanN4Iiwid2VicGFjazovL2plc3Rlci8uL2NsaWVudC9wYWdlcy9Eb2N1bWVudGF0aW9uLnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvcGFnZXMvSG9tZS50c3giLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L3BhZ2VzL05vdEZvdW5kLnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvQXBwLnRzeCIsIndlYnBhY2s6Ly9qZXN0ZXIvLi9jbGllbnQvcmVkdXgvc3RvcmUudHMiLCJ3ZWJwYWNrOi8vamVzdGVyLy4vY2xpZW50L2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyAob2JqKSA9PiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpIDogKG9iaikgPT4gKG9iai5fX3Byb3RvX18pO1xudmFyIGxlYWZQcm90b3R5cGVzO1xuLy8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLy8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vLyBtb2RlICYgMTY6IHJldHVybiB2YWx1ZSB3aGVuIGl0J3MgUHJvbWlzZS1saWtlXG4vLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuXHRpZihtb2RlICYgMSkgdmFsdWUgPSB0aGlzKHZhbHVlKTtcblx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcblx0aWYodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSkge1xuXHRcdGlmKChtb2RlICYgNCkgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmKChtb2RlICYgMTYpICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWU7XG5cdH1cblx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcblx0dmFyIGRlZiA9IHt9O1xuXHRsZWFmUHJvdG90eXBlcyA9IGxlYWZQcm90b3R5cGVzIHx8IFtudWxsLCBnZXRQcm90byh7fSksIGdldFByb3RvKFtdKSwgZ2V0UHJvdG8oZ2V0UHJvdG8pXTtcblx0Zm9yKHZhciBjdXJyZW50ID0gbW9kZSAmIDIgJiYgdmFsdWU7IHR5cGVvZiBjdXJyZW50ID09ICdvYmplY3QnICYmICF+bGVhZlByb3RvdHlwZXMuaW5kZXhPZihjdXJyZW50KTsgY3VycmVudCA9IGdldFByb3RvKGN1cnJlbnQpKSB7XG5cdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudCkuZm9yRWFjaCgoa2V5KSA9PiAoZGVmW2tleV0gPSAoKSA9PiAodmFsdWVba2V5XSkpKTtcblx0fVxuXHRkZWZbJ2RlZmF1bHQnXSA9ICgpID0+ICh2YWx1ZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChucywgZGVmKTtcblx0cmV0dXJuIG5zO1xufTsiLCIvKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIOKdpO+4j1xuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuLy8gJEZsb3dGaXhNZVxuZnVuY3Rpb24gc2hlZXRGb3JUYWcodGFnKSB7XG4gIGlmICh0YWcuc2hlZXQpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIHRhZy5zaGVldDtcbiAgfSAvLyB0aGlzIHdlaXJkbmVzcyBicm91Z2h0IHRvIHlvdSBieSBmaXJlZm94XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlID09PSB0YWcpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIG9wdGlvbnMua2V5KTtcblxuICBpZiAob3B0aW9ucy5ub25jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBvcHRpb25zLm5vbmNlKTtcbiAgfVxuXG4gIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gIHJldHVybiB0YWc7XG59XG5cbnZhciBTdHlsZVNoZWV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgLy8gVXNpbmcgTm9kZSBpbnN0ZWFkIG9mIEhUTUxFbGVtZW50IHNpbmNlIGNvbnRhaW5lciBtYXkgYmUgYSBTaGFkb3dSb290XG4gIGZ1bmN0aW9uIFN0eWxlU2hlZXQob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9pbnNlcnRUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgYmVmb3JlO1xuXG4gICAgICBpZiAoX3RoaXMudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKF90aGlzLmluc2VydGlvblBvaW50KSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuaW5zZXJ0aW9uUG9pbnQubmV4dFNpYmxpbmc7XG4gICAgICAgIH0gZWxzZSBpZiAoX3RoaXMucHJlcGVuZCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmJlZm9yZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVmb3JlID0gX3RoaXMudGFnc1tfdGhpcy50YWdzLmxlbmd0aCAtIDFdLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHRhZywgYmVmb3JlKTtcblxuICAgICAgX3RoaXMudGFncy5wdXNoKHRhZyk7XG4gICAgfTtcblxuICAgIHRoaXMuaXNTcGVlZHkgPSBvcHRpb25zLnNwZWVkeSA9PT0gdW5kZWZpbmVkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgaXNJbXBvcnRSdWxlID0gcnVsZS5jaGFyQ29kZUF0KDApID09PSA2NCAmJiBydWxlLmNoYXJDb2RlQXQoMSkgPT09IDEwNTtcblxuICAgICAgaWYgKGlzSW1wb3J0UnVsZSAmJiB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSkge1xuICAgICAgICAvLyB0aGlzIHdvdWxkIG9ubHkgY2F1c2UgcHJvYmxlbSBpbiBzcGVlZHkgbW9kZVxuICAgICAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCBlbmFibGluZyBzcGVlZHkgdG8gYWZmZWN0IHRoZSBvYnNlcnZhYmxlIGJlaGF2aW9yXG4gICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGlzIGVycm9yIGF0IGFsbCB0aW1lc1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiWW91J3JlIGF0dGVtcHRpbmcgdG8gaW5zZXJ0IHRoZSBmb2xsb3dpbmcgcnVsZTpcXG5cIiArIHJ1bGUgKyAnXFxuXFxuYEBpbXBvcnRgIHJ1bGVzIG11c3QgYmUgYmVmb3JlIGFsbCBvdGhlciB0eXBlcyBvZiBydWxlcyBpbiBhIHN0eWxlc2hlZXQgYnV0IG90aGVyIHJ1bGVzIGhhdmUgYWxyZWFkeSBiZWVuIGluc2VydGVkLiBQbGVhc2UgZW5zdXJlIHRoYXQgYEBpbXBvcnRgIHJ1bGVzIGFyZSBiZWZvcmUgYWxsIG90aGVyIHJ1bGVzLicpO1xuICAgICAgfVxuICAgICAgdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUgPSB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSB8fCAhaXNJbXBvcnRSdWxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIS86KC1tb3otcGxhY2Vob2xkZXJ8LW1vei1mb2N1cy1pbm5lcnwtbW96LWZvY3VzcmluZ3wtbXMtaW5wdXQtcGxhY2Vob2xkZXJ8LW1vei1yZWFkLXdyaXRlfC1tb3otcmVhZC1vbmx5fC1tcy1jbGVhcil7Ly50ZXN0KHJ1bGUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZXJlIHdhcyBhIHByb2JsZW0gaW5zZXJ0aW5nIHRoZSBmb2xsb3dpbmcgcnVsZTogXFxcIlwiICsgcnVsZSArIFwiXFxcIlwiLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSkpO1xuICAgIH1cblxuICAgIHRoaXMuY3RyKys7XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHJldHVybiB0YWcucGFyZW50Tm9kZSAmJiB0YWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YWcpO1xuICAgIH0pO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuZXhwb3J0IHsgU3R5bGVTaGVldCB9O1xuIiwiLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IHZhciBhYnMgPSBNYXRoLmFic1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgdmFyIGZyb20gPSBTdHJpbmcuZnJvbUNoYXJDb2RlXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCB2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaCAodmFsdWUsIGxlbmd0aCkge1xuXHRyZXR1cm4gKCgoKCgoKGxlbmd0aCA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMCkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAxKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDIpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCJpbXBvcnQge2Zyb20sIHRyaW0sIGNoYXJhdCwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgYXNzaWdufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbmV4cG9ydCB2YXIgbGluZSA9IDFcbmV4cG9ydCB2YXIgY29sdW1uID0gMVxuZXhwb3J0IHZhciBsZW5ndGggPSAwXG5leHBvcnQgdmFyIHBvc2l0aW9uID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXIgPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlcnMgPSAnJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSByb290XG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmd9IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdFtdIHwgc3RyaW5nfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9kZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHJvb3QsIHByb3BzKSB7XG5cdHJldHVybiBhc3NpZ24obm9kZSgnJywgbnVsbCwgbnVsbCwgJycsIG51bGwsIG51bGwsIDApLCByb290LCB7bGVuZ3RoOiAtcm9vdC5sZW5ndGh9LCBwcm9wcylcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyICgpIHtcblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXYgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA+IDAgPyBjaGFyYXQoY2hhcmFjdGVycywgLS1wb3NpdGlvbikgOiAwXG5cblx0aWYgKGNvbHVtbi0tLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUtLVxuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPCBsZW5ndGggPyBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24rKykgOiAwXG5cblx0aWYgKGNvbHVtbisrLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUrK1xuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZWVrICgpIHtcblx0cmV0dXJuIGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXJldCAoKSB7XG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHN1YnN0cihjaGFyYWN0ZXJzLCBiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbiAodHlwZSkge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHQvLyBcXDAgXFx0IFxcbiBcXHIgXFxzIHdoaXRlc3BhY2UgdG9rZW5cblx0XHRjYXNlIDA6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdHJldHVybiA1XG5cdFx0Ly8gISArICwgLyA+IEAgfiBpc29sYXRlIHRva2VuXG5cdFx0Y2FzZSAzMzogY2FzZSA0MzogY2FzZSA0NDogY2FzZSA0NzogY2FzZSA2MjogY2FzZSA2NDogY2FzZSAxMjY6XG5cdFx0Ly8gOyB7IH0gYnJlYWtwb2ludCB0b2tlblxuXHRcdGNhc2UgNTk6IGNhc2UgMTIzOiBjYXNlIDEyNTpcblx0XHRcdHJldHVybiA0XG5cdFx0Ly8gOiBhY2NvbXBhbmllZCB0b2tlblxuXHRcdGNhc2UgNTg6XG5cdFx0XHRyZXR1cm4gM1xuXHRcdC8vIFwiICcgKCBbIG9wZW5pbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgNDA6IGNhc2UgOTE6XG5cdFx0XHRyZXR1cm4gMlxuXHRcdC8vICkgXSBjbG9zaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDQxOiBjYXNlIDkzOlxuXHRcdFx0cmV0dXJuIDFcblx0fVxuXG5cdHJldHVybiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnlbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gbGluZSA9IGNvbHVtbiA9IDEsIGxlbmd0aCA9IHN0cmxlbihjaGFyYWN0ZXJzID0gdmFsdWUpLCBwb3NpdGlvbiA9IDAsIFtdXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gY2hhcmFjdGVycyA9ICcnLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ICh0eXBlKSB7XG5cdHJldHVybiB0cmltKHNsaWNlKHBvc2l0aW9uIC0gMSwgZGVsaW1pdGVyKHR5cGUgPT09IDkxID8gdHlwZSArIDIgOiB0eXBlID09PSA0MCA/IHR5cGUgKyAxIDogdHlwZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2ModG9rZW5pemVyKGFsbG9jKHZhbHVlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlc3BhY2UgKHR5cGUpIHtcblx0d2hpbGUgKGNoYXJhY3RlciA9IHBlZWsoKSlcblx0XHRpZiAoY2hhcmFjdGVyIDwgMzMpXG5cdFx0XHRuZXh0KClcblx0XHRlbHNlXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiB0b2tlbih0eXBlKSA+IDIgfHwgdG9rZW4oY2hhcmFjdGVyKSA+IDMgPyAnJyA6ICcgJ1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplciAoY2hpbGRyZW4pIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcblx0XHRcdGNhc2UgMDogYXBwZW5kKGlkZW50aWZpZXIocG9zaXRpb24gLSAxKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlIDI6IGFwcGVuZChkZWxpbWl0KGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0ZGVmYXVsdDogYXBwZW5kKGZyb20oY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0fVxuXG5cdHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGluZyAoaW5kZXgsIGNvdW50KSB7XG5cdHdoaWxlICgtLWNvdW50ICYmIG5leHQoKSlcblx0XHQvLyBub3QgMC05IEEtRiBhLWZcblx0XHRpZiAoY2hhcmFjdGVyIDwgNDggfHwgY2hhcmFjdGVyID4gMTAyIHx8IChjaGFyYWN0ZXIgPiA1NyAmJiBjaGFyYWN0ZXIgPCA2NSkgfHwgKGNoYXJhY3RlciA+IDcwICYmIGNoYXJhY3RlciA8IDk3KSlcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBjYXJldCgpICsgKGNvdW50IDwgNiAmJiBwZWVrKCkgPT0gMzIgJiYgbmV4dCgpID09IDMyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdGVyICh0eXBlKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdC8vIF0gKSBcIiAnXG5cdFx0XHRjYXNlIHR5cGU6XG5cdFx0XHRcdHJldHVybiBwb3NpdGlvblxuXHRcdFx0Ly8gXCIgJ1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTpcblx0XHRcdFx0aWYgKHR5cGUgIT09IDM0ICYmIHR5cGUgIT09IDM5KVxuXHRcdFx0XHRcdGRlbGltaXRlcihjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAodHlwZSA9PT0gNDEpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKHR5cGUpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0bmV4dCgpXG5cdFx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnRlciAodHlwZSwgaW5kZXgpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHQvLyAvL1xuXHRcdGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0NyArIDEwKVxuXHRcdFx0YnJlYWtcblx0XHQvLyAvKlxuXHRcdGVsc2UgaWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQyICsgNDIgJiYgcGVlaygpID09PSA0Nylcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuICcvKicgKyBzbGljZShpbmRleCwgcG9zaXRpb24gLSAxKSArICcqJyArIGZyb20odHlwZSA9PT0gNDcgPyB0eXBlIDogbmV4dCgpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllciAoaW5kZXgpIHtcblx0d2hpbGUgKCF0b2tlbihwZWVrKCkpKVxuXHRcdG5leHQoKVxuXG5cdHJldHVybiBzbGljZShpbmRleCwgcG9zaXRpb24pXG59XG4iLCJleHBvcnQgdmFyIE1TID0gJy1tcy0nXG5leHBvcnQgdmFyIE1PWiA9ICctbW96LSdcbmV4cG9ydCB2YXIgV0VCS0lUID0gJy13ZWJraXQtJ1xuXG5leHBvcnQgdmFyIENPTU1FTlQgPSAnY29tbSdcbmV4cG9ydCB2YXIgUlVMRVNFVCA9ICdydWxlJ1xuZXhwb3J0IHZhciBERUNMQVJBVElPTiA9ICdkZWNsJ1xuXG5leHBvcnQgdmFyIFBBR0UgPSAnQHBhZ2UnXG5leHBvcnQgdmFyIE1FRElBID0gJ0BtZWRpYSdcbmV4cG9ydCB2YXIgSU1QT1JUID0gJ0BpbXBvcnQnXG5leHBvcnQgdmFyIENIQVJTRVQgPSAnQGNoYXJzZXQnXG5leHBvcnQgdmFyIFZJRVdQT1JUID0gJ0B2aWV3cG9ydCdcbmV4cG9ydCB2YXIgU1VQUE9SVFMgPSAnQHN1cHBvcnRzJ1xuZXhwb3J0IHZhciBET0NVTUVOVCA9ICdAZG9jdW1lbnQnXG5leHBvcnQgdmFyIE5BTUVTUEFDRSA9ICdAbmFtZXNwYWNlJ1xuZXhwb3J0IHZhciBLRVlGUkFNRVMgPSAnQGtleWZyYW1lcydcbmV4cG9ydCB2YXIgRk9OVF9GQUNFID0gJ0Bmb250LWZhY2UnXG5leHBvcnQgdmFyIENPVU5URVJfU1RZTEUgPSAnQGNvdW50ZXItc3R5bGUnXG5leHBvcnQgdmFyIEZPTlRfRkVBVFVSRV9WQUxVRVMgPSAnQGZvbnQtZmVhdHVyZS12YWx1ZXMnXG4iLCJpbXBvcnQge0lNUE9SVCwgQ09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT04sIEtFWUZSQU1FU30gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtzdHJsZW4sIHNpemVvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplIChjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0dmFyIG91dHB1dCA9ICcnXG5cdHZhciBsZW5ndGggPSBzaXplb2YoY2hpbGRyZW4pXG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRvdXRwdXQgKz0gY2FsbGJhY2soY2hpbGRyZW5baV0sIGksIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRyZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJylcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsImltcG9ydCB7TVMsIE1PWiwgV0VCS0lUfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2hhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCByZXBsYWNlfSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXggKHZhbHVlLCBsZW5ndGgpIHtcblx0c3dpdGNoIChoYXNoKHZhbHVlLCBsZW5ndGgpKSB7XG5cdFx0Ly8gY29sb3ItYWRqdXN0XG5cdFx0Y2FzZSA1MTAzOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArICdwcmludC0nICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXHRcdGNhc2UgNTczNzogY2FzZSA0MjAxOiBjYXNlIDMxNzc6IGNhc2UgMzQzMzogY2FzZSAxNjQxOiBjYXNlIDQ0NTc6IGNhc2UgMjkyMTpcblx0XHQvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cdFx0Y2FzZSA1NTcyOiBjYXNlIDYzNTY6IGNhc2UgNTg0NDogY2FzZSAzMTkxOiBjYXNlIDY2NDU6IGNhc2UgMzAwNTpcblx0XHQvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblx0XHRjYXNlIDYzOTE6IGNhc2UgNTg3OTogY2FzZSA1NjIzOiBjYXNlIDYxMzU6IGNhc2UgNDU5OTogY2FzZSA0ODU1OlxuXHRcdC8vIGJhY2tncm91bmQtY2xpcCwgY29sdW1ucywgY29sdW1uLShjb3VudHxmaWxsfGdhcHxydWxlfHJ1bGUtY29sb3J8cnVsZS1zdHlsZXxydWxlLXdpZHRofHNwYW58d2lkdGgpXG5cdFx0Y2FzZSA0MjE1OiBjYXNlIDYzODk6IGNhc2UgNTEwOTogY2FzZSA1MzY1OiBjYXNlIDU2MjE6IGNhc2UgMzgyOTpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXHRcdGNhc2UgNTM0OTogY2FzZSA0MjQ2OiBjYXNlIDQ4MTA6IGNhc2UgNjk2ODogY2FzZSAyNzU2OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBmbGV4LCBmbGV4LWRpcmVjdGlvblxuXHRcdGNhc2UgNjgyODogY2FzZSA0MjY4OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gb3JkZXJcblx0XHRjYXNlIDYxNjU6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24taXRlbXNcblx0XHRjYXNlIDUxODc6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWVcblx0XHQvLyBhbGlnbi1zZWxmXG5cdFx0Y2FzZSA1NDQzOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGFsaWduLWNvbnRlbnRcblx0XHRjYXNlIDQ2NzU6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlXG5cdFx0Ly8gZmxleC1zaHJpbmtcblx0XHRjYXNlIDU1NDg6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlXG5cdFx0Ly8gZmxleC1iYXNpc1xuXHRcdGNhc2UgNTI5Mjpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZVxuXHRcdC8vIGZsZXgtZ3Jvd1xuXHRcdGNhc2UgNjA2MDpcblx0XHRcdHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlXG5cdFx0Ly8gdHJhbnNpdGlvblxuXHRcdGNhc2UgNDU1NDpcblx0XHRcdHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWVcblx0XHQvLyBjdXJzb3Jcblx0XHRjYXNlIDYxODc6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2Vcblx0XHRjYXNlIDU0OTU6IGNhc2UgMzk1OTpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKGltYWdlLXNldFxcKFteXSopLywgV0VCS0lUICsgJyQxJyArICckYCQxJylcblx0XHQvLyBqdXN0aWZ5LWNvbnRlbnRcblx0XHRjYXNlIDQ5Njg6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKC4rOikoZmxleC0pPyguKikvLCBXRUJLSVQgKyAnYm94LXBhY2s6JDMnICsgTVMgKyAnZmxleC1wYWNrOiQzJyksIC9zListYlteO10rLywgJ2p1c3RpZnknKSArIFdFQktJVCArIHZhbHVlICsgdmFsdWVcblx0XHQvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXHRcdGNhc2UgNDA5NTogY2FzZSAzNTgzOiBjYXNlIDQwNjg6IGNhc2UgMjUzMjpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rKS1pbmxpbmUoLispLywgV0VCS0lUICsgJyQxJDInKSArIHZhbHVlXG5cdFx0Ly8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblx0XHRjYXNlIDgxMTY6IGNhc2UgNzA1OTogY2FzZSA1NzUzOiBjYXNlIDU1MzU6XG5cdFx0Y2FzZSA1NDQ1OiBjYXNlIDU3MDE6IGNhc2UgNDkzMzogY2FzZSA0Njc3OlxuXHRcdGNhc2UgNTUzMzogY2FzZSA1Nzg5OiBjYXNlIDUwMjE6IGNhc2UgNDc2NTpcblx0XHRcdC8vIHN0cmV0Y2gsIG1heC1jb250ZW50LCBtaW4tY29udGVudCwgZmlsbC1hdmFpbGFibGVcblx0XHRcdGlmIChzdHJsZW4odmFsdWUpIC0gMSAtIGxlbmd0aCA+IDYpXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSkge1xuXHRcdFx0XHRcdC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcblx0XHRcdFx0XHRjYXNlIDEwOTpcblx0XHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRcdGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSlcblx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAoZilpbGwtYXZhaWxhYmxlLCAoZilpdC1jb250ZW50XG5cdFx0XHRcdFx0Y2FzZSAxMDI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWVcblx0XHRcdFx0XHQvLyAocyl0cmV0Y2hcblx0XHRcdFx0XHRjYXNlIDExNTpcblx0XHRcdFx0XHRcdHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWUgOiB2YWx1ZVxuXHRcdFx0XHR9XG5cdFx0XHRicmVha1xuXHRcdC8vIHBvc2l0aW9uOiBzdGlja3lcblx0XHRjYXNlIDQ5NDk6XG5cdFx0XHQvLyAocyl0aWNreT9cblx0XHRcdGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpICE9PSAxMTUpXG5cdFx0XHRcdGJyZWFrXG5cdFx0Ly8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXgpXG5cdFx0Y2FzZSA2NDQ0OlxuXHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIHN0cmxlbih2YWx1ZSkgLSAzIC0gKH5pbmRleG9mKHZhbHVlLCAnIWltcG9ydGFudCcpICYmIDEwKSkpIHtcblx0XHRcdFx0Ly8gc3RpYyhrKXlcblx0XHRcdFx0Y2FzZSAxMDc6XG5cdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsICc6JywgJzonICsgV0VCS0lUKSArIHZhbHVlXG5cdFx0XHRcdC8vIChpbmxpbmUtKT9mbChlKXhcblx0XHRcdFx0Y2FzZSAxMDE6XG5cdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KShbXjshXSspKDt8IS4rKT8vLCAnJDEnICsgV0VCS0lUICsgKGNoYXJhdCh2YWx1ZSwgMTQpID09PSA0NSA/ICdpbmxpbmUtJyA6ICcnKSArICdib3gkMycgKyAnJDEnICsgV0VCS0lUICsgJyQyJDMnICsgJyQxJyArIE1TICsgJyQyYm94JDMnKSArIHZhbHVlXG5cdFx0XHR9XG5cdFx0XHRicmVha1xuXHRcdC8vIHdyaXRpbmctbW9kZVxuXHRcdGNhc2UgNTkzNjpcblx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxMSkpIHtcblx0XHRcdFx0Ly8gdmVydGljYWwtbChyKVxuXHRcdFx0XHRjYXNlIDExNDpcblx0XHRcdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyB2ZXJ0aWNhbC1yKGwpXG5cdFx0XHRcdGNhc2UgMTA4OlxuXHRcdFx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGItcmwnKSArIHZhbHVlXG5cdFx0XHRcdC8vIGhvcml6b250YWwoLSl0YlxuXHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAnbHInKSArIHZhbHVlXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZVxuXHR9XG5cblx0cmV0dXJuIHZhbHVlXG59XG4iLCJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgdHJpbSwgZnJvbSwgc2l6ZW9mLCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCByZXBsYWNlLCBpbmRleG9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge25vZGUsIGNoYXIsIHByZXYsIG5leHQsIHBlZWssIGNhcmV0LCBhbGxvYywgZGVhbGxvYywgZGVsaW1pdCwgd2hpdGVzcGFjZSwgZXNjYXBpbmcsIGlkZW50aWZpZXIsIGNvbW1lbnRlcn0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtvYmplY3RbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHBhcnNlKCcnLCBudWxsLCBudWxsLCBudWxsLCBbJyddLCB2YWx1ZSA9IGFsbG9jKHZhbHVlKSwgMCwgWzBdLCB2YWx1ZSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc2V0c1xuICogQHBhcmFtIHtudW1iZXJbXX0gcHNldWRvXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGRlY2xhcmF0aW9uc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKHZhbHVlLCByb290LCBwYXJlbnQsIHJ1bGUsIHJ1bGVzLCBydWxlc2V0cywgcHNldWRvLCBwb2ludHMsIGRlY2xhcmF0aW9ucykge1xuXHR2YXIgaW5kZXggPSAwXG5cdHZhciBvZmZzZXQgPSAwXG5cdHZhciBsZW5ndGggPSBwc2V1ZG9cblx0dmFyIGF0cnVsZSA9IDBcblx0dmFyIHByb3BlcnR5ID0gMFxuXHR2YXIgcHJldmlvdXMgPSAwXG5cdHZhciB2YXJpYWJsZSA9IDFcblx0dmFyIHNjYW5uaW5nID0gMVxuXHR2YXIgYW1wZXJzYW5kID0gMVxuXHR2YXIgY2hhcmFjdGVyID0gMFxuXHR2YXIgdHlwZSA9ICcnXG5cdHZhciBwcm9wcyA9IHJ1bGVzXG5cdHZhciBjaGlsZHJlbiA9IHJ1bGVzZXRzXG5cdHZhciByZWZlcmVuY2UgPSBydWxlXG5cdHZhciBjaGFyYWN0ZXJzID0gdHlwZVxuXG5cdHdoaWxlIChzY2FubmluZylcblx0XHRzd2l0Y2ggKHByZXZpb3VzID0gY2hhcmFjdGVyLCBjaGFyYWN0ZXIgPSBuZXh0KCkpIHtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmIChwcmV2aW91cyAhPSAxMDggJiYgY2hhcmFjdGVycy5jaGFyQ29kZUF0KGxlbmd0aCAtIDEpID09IDU4KSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4b2YoY2hhcmFjdGVycyArPSByZXBsYWNlKGRlbGltaXQoY2hhcmFjdGVyKSwgJyYnLCAnJlxcZicpLCAnJlxcZicpICE9IC0xKVxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gLTFcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBcIiAnIFtcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgOTE6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXHQgXFxuIFxcciBcXHNcblx0XHRcdGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSB3aGl0ZXNwYWNlKHByZXZpb3VzKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZXNjYXBpbmcoY2FyZXQoKSAtIDEsIDcpXG5cdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHQvLyAvXG5cdFx0XHRjYXNlIDQ3OlxuXHRcdFx0XHRzd2l0Y2ggKHBlZWsoKSkge1xuXHRcdFx0XHRcdGNhc2UgNDI6IGNhc2UgNDc6XG5cdFx0XHRcdFx0XHRhcHBlbmQoY29tbWVudChjb21tZW50ZXIobmV4dCgpLCBjYXJldCgpKSwgcm9vdCwgcGFyZW50KSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSAnLydcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8ge1xuXHRcdFx0Y2FzZSAxMjMgKiB2YXJpYWJsZTpcblx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gc3RybGVuKGNoYXJhY3RlcnMpICogYW1wZXJzYW5kXG5cdFx0XHQvLyB9IDsgXFwwXG5cdFx0XHRjYXNlIDEyNSAqIHZhcmlhYmxlOiBjYXNlIDU5OiBjYXNlIDA6XG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHRcdFx0Ly8gXFwwIH1cblx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgMTI1OiBzY2FubmluZyA9IDBcblx0XHRcdFx0XHQvLyA7XG5cdFx0XHRcdFx0Y2FzZSA1OSArIG9mZnNldDpcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA+IDAgJiYgKHN0cmxlbihjaGFyYWN0ZXJzKSAtIGxlbmd0aCkpXG5cdFx0XHRcdFx0XHRcdGFwcGVuZChwcm9wZXJ0eSA+IDMyID8gZGVjbGFyYXRpb24oY2hhcmFjdGVycyArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAxKSA6IGRlY2xhcmF0aW9uKHJlcGxhY2UoY2hhcmFjdGVycywgJyAnLCAnJykgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMiksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQCA7XG5cdFx0XHRcdFx0Y2FzZSA1OTogY2hhcmFjdGVycyArPSAnOydcblx0XHRcdFx0XHQvLyB7IHJ1bGUvYXQtcnVsZVxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRhcHBlbmQocmVmZXJlbmNlID0gcnVsZXNldChjaGFyYWN0ZXJzLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzID0gW10sIGNoaWxkcmVuID0gW10sIGxlbmd0aCksIHJ1bGVzZXRzKVxuXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSAxMjMpXG5cdFx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcm9vdCwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHByb3BzLCBydWxlc2V0cywgbGVuZ3RoLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChhdHJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGQgbSBzXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDEwMDogY2FzZSAxMDk6IGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZSh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJ1bGUgJiYgYXBwZW5kKHJ1bGVzZXQodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCAwLCAwLCBydWxlcywgcG9pbnRzLCB0eXBlLCBydWxlcywgcHJvcHMgPSBbXSwgbGVuZ3RoKSwgY2hpbGRyZW4pLCBydWxlcywgY2hpbGRyZW4sIGxlbmd0aCwgcG9pbnRzLCBydWxlID8gcHJvcHMgOiBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIFsnJ10sIGNoaWxkcmVuLCAwLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZGV4ID0gb2Zmc2V0ID0gcHJvcGVydHkgPSAwLCB2YXJpYWJsZSA9IGFtcGVyc2FuZCA9IDEsIHR5cGUgPSBjaGFyYWN0ZXJzID0gJycsIGxlbmd0aCA9IHBzZXVkb1xuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gOlxuXHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0bGVuZ3RoID0gMSArIHN0cmxlbihjaGFyYWN0ZXJzKSwgcHJvcGVydHkgPSBwcmV2aW91c1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKHZhcmlhYmxlIDwgMSlcblx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09IDEyMylcblx0XHRcdFx0XHRcdC0tdmFyaWFibGVcblx0XHRcdFx0XHRlbHNlIGlmIChjaGFyYWN0ZXIgPT0gMTI1ICYmIHZhcmlhYmxlKysgPT0gMCAmJiBwcmV2KCkgPT0gMTI1KVxuXHRcdFx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3RlcnMgKz0gZnJvbShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgKiB2YXJpYWJsZSkge1xuXHRcdFx0XHRcdC8vICZcblx0XHRcdFx0XHRjYXNlIDM4OlxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gb2Zmc2V0ID4gMCA/IDEgOiAoY2hhcmFjdGVycyArPSAnXFxmJywgLTEpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vICxcblx0XHRcdFx0XHRjYXNlIDQ0OlxuXHRcdFx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gKHN0cmxlbihjaGFyYWN0ZXJzKSAtIDEpICogYW1wZXJzYW5kLCBhbXBlcnNhbmQgPSAxXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEBcblx0XHRcdFx0XHRjYXNlIDY0OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKHBlZWsoKSA9PT0gNDUpXG5cdFx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChuZXh0KCkpXG5cblx0XHRcdFx0XHRcdGF0cnVsZSA9IHBlZWsoKSwgb2Zmc2V0ID0gbGVuZ3RoID0gc3RybGVuKHR5cGUgPSBjaGFyYWN0ZXJzICs9IGlkZW50aWZpZXIoY2FyZXQoKSkpLCBjaGFyYWN0ZXIrK1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRcdGlmIChwcmV2aW91cyA9PT0gNDUgJiYgc3RybGVuKGNoYXJhY3RlcnMpID09IDIpXG5cdFx0XHRcdFx0XHRcdHZhcmlhYmxlID0gMFxuXHRcdFx0XHR9XG5cdFx0fVxuXG5cdHJldHVybiBydWxlc2V0c1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHZhciBwb3N0ID0gb2Zmc2V0IC0gMVxuXHR2YXIgcnVsZSA9IG9mZnNldCA9PT0gMCA/IHJ1bGVzIDogWycnXVxuXHR2YXIgc2l6ZSA9IHNpemVvZihydWxlKVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gMCwgayA9IDA7IGkgPCBpbmRleDsgKytpKVxuXHRcdGZvciAodmFyIHggPSAwLCB5ID0gc3Vic3RyKHZhbHVlLCBwb3N0ICsgMSwgcG9zdCA9IGFicyhqID0gcG9pbnRzW2ldKSksIHogPSB2YWx1ZTsgeCA8IHNpemU7ICsreClcblx0XHRcdGlmICh6ID0gdHJpbShqID4gMCA/IHJ1bGVbeF0gKyAnICcgKyB5IDogcmVwbGFjZSh5LCAvJlxcZi9nLCBydWxlW3hdKSkpXG5cdFx0XHRcdHByb3BzW2srK10gPSB6XG5cblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgb2Zmc2V0ID09PSAwID8gUlVMRVNFVCA6IHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50KSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIENPTU1FTlQsIGZyb20oY2hhcigpKSwgc3Vic3RyKHZhbHVlLCAyLCAtMiksIDApXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgREVDTEFSQVRJT04sIHN1YnN0cih2YWx1ZSwgMCwgbGVuZ3RoKSwgc3Vic3RyKHZhbHVlLCBsZW5ndGggKyAxLCAtMSksIGxlbmd0aClcbn1cbiIsImltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCc7XG5pbXBvcnQgeyBkZWFsbG9jLCBhbGxvYywgbmV4dCwgdG9rZW4sIGZyb20sIHBlZWssIGRlbGltaXQsIHNsaWNlLCBwb3NpdGlvbiwgc3RyaW5naWZ5LCBDT01NRU5ULCBydWxlc2hlZXQsIG1pZGRsZXdhcmUsIHByZWZpeGVyLCBzZXJpYWxpemUsIGNvbXBpbGUgfSBmcm9tICdzdHlsaXMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyA9IGZ1bmN0aW9uIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhiZWdpbiwgcG9pbnRzLCBpbmRleCkge1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHByZXZpb3VzID0gY2hhcmFjdGVyO1xuICAgIGNoYXJhY3RlciA9IHBlZWsoKTsgLy8gJlxcZlxuXG4gICAgaWYgKHByZXZpb3VzID09PSAzOCAmJiBjaGFyYWN0ZXIgPT09IDEyKSB7XG4gICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlKGJlZ2luLCBwb3NpdGlvbik7XG59O1xuXG52YXIgdG9SdWxlcyA9IGZ1bmN0aW9uIHRvUnVsZXMocGFyc2VkLCBwb2ludHMpIHtcbiAgLy8gcHJldGVuZCB3ZSd2ZSBzdGFydGVkIHdpdGggYSBjb21tYVxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGNoYXJhY3RlciA9IDQ0O1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgLy8gJlxcZlxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAzOCAmJiBwZWVrKCkgPT09IDEyKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCB3ZSBkb24ndCBhY2NvdW50IGZvciBsaXRlcmFsIHNlcXVlbmNlcyBoZXJlIC0gbGlrZSBmb3IgZXhhbXBsZSBxdW90ZWQgc3RyaW5nc1xuICAgICAgICAgIC8vIHN0eWxpcyBpbnNlcnRzIFxcZiBhZnRlciAmIHRvIGtub3cgd2hlbiAmIHdoZXJlIGl0IHNob3VsZCByZXBsYWNlIHRoaXMgc2VxdWVuY2Ugd2l0aCB0aGUgY29udGV4dCBzZWxlY3RvclxuICAgICAgICAgIC8vIGFuZCB3aGVuIGl0IHNob3VsZCBqdXN0IGNvbmNhdGVuYXRlIHRoZSBvdXRlciBhbmQgaW5uZXIgc2VsZWN0b3JzXG4gICAgICAgICAgLy8gaXQncyB2ZXJ5IHVubGlrZWx5IGZvciB0aGlzIHNlcXVlbmNlIHRvIGFjdHVhbGx5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBzbyB3ZSBqdXN0IGxldmVyYWdlIHRoaXMgZmFjdCBoZXJlXG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhwb3NpdGlvbiAtIDEsIHBvaW50cywgaW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGRlbGltaXQoY2hhcmFjdGVyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgLy8gY29tbWFcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gNDQpIHtcbiAgICAgICAgICAvLyBjb2xvblxuICAgICAgICAgIHBhcnNlZFsrK2luZGV4XSA9IHBlZWsoKSA9PT0gNTggPyAnJlxcZicgOiAnJztcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gcGFyc2VkW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBmcm9tKGNoYXJhY3Rlcik7XG4gICAgfVxuICB9IHdoaWxlIChjaGFyYWN0ZXIgPSBuZXh0KCkpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG52YXIgZ2V0UnVsZXMgPSBmdW5jdGlvbiBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKSB7XG4gIHJldHVybiBkZWFsbG9jKHRvUnVsZXMoYWxsb2ModmFsdWUpLCBwb2ludHMpKTtcbn07IC8vIFdlYWtTZXQgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZSwgYnV0IG9ubHkgV2Vha01hcCBpcyBzdXBwb3J0ZWQgaW4gSUUxMVxuXG5cbnZhciBmaXhlZEVsZW1lbnRzID0gLyogI19fUFVSRV9fICovbmV3IFdlYWtNYXAoKTtcbnZhciBjb21wYXQgPSBmdW5jdGlvbiBjb21wYXQoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgIWVsZW1lbnQucGFyZW50IHx8IC8vIHBvc2l0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGNvbnRhaW5zIHBzZXVkb1xuICAvLyBuZWdhdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBoYXMgYmVlbiBhbHJlYWR5IHByZWZpeGVkXG4gIGVsZW1lbnQubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWUsXG4gICAgICBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgdmFyIGlzSW1wbGljaXRSdWxlID0gZWxlbWVudC5jb2x1bW4gPT09IHBhcmVudC5jb2x1bW4gJiYgZWxlbWVudC5saW5lID09PSBwYXJlbnQubGluZTtcblxuICB3aGlsZSAocGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgfSAvLyBzaG9ydC1jaXJjdWl0IGZvciB0aGUgc2ltcGxlc3QgY2FzZVxuXG5cbiAgaWYgKGVsZW1lbnQucHJvcHMubGVuZ3RoID09PSAxICYmIHZhbHVlLmNoYXJDb2RlQXQoMCkgIT09IDU4XG4gIC8qIGNvbG9uICovXG4gICYmICFmaXhlZEVsZW1lbnRzLmdldChwYXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGlmIHRoaXMgaXMgYW4gaW1wbGljaXRseSBpbnNlcnRlZCBydWxlICh0aGUgb25lIGVhZ2VybHkgaW5zZXJ0ZWQgYXQgdGhlIGVhY2ggbmV3IG5lc3RlZCBsZXZlbClcbiAgLy8gdGhlbiB0aGUgcHJvcHMgaGFzIGFscmVhZHkgYmVlbiBtYW5pcHVsYXRlZCBiZWZvcmVoYW5kIGFzIHRoZXkgdGhhdCBhcnJheSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgaXRzIFwicnVsZSBwYXJlbnRcIlxuXG5cbiAgaWYgKGlzSW1wbGljaXRSdWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZml4ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgdHJ1ZSk7XG4gIHZhciBwb2ludHMgPSBbXTtcbiAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModmFsdWUsIHBvaW50cyk7XG4gIHZhciBwYXJlbnRSdWxlcyA9IHBhcmVudC5wcm9wcztcblxuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyZW50UnVsZXMubGVuZ3RoOyBqKyssIGsrKykge1xuICAgICAgZWxlbWVudC5wcm9wc1trXSA9IHBvaW50c1tpXSA/IHJ1bGVzW2ldLnJlcGxhY2UoLyZcXGYvZywgcGFyZW50UnVsZXNbal0pIDogcGFyZW50UnVsZXNbal0gKyBcIiBcIiArIHJ1bGVzW2ldO1xuICAgIH1cbiAgfVxufTtcbnZhciByZW1vdmVMYWJlbCA9IGZ1bmN0aW9uIHJlbW92ZUxhYmVsKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuICAgIGlmICggLy8gY2hhcmNvZGUgZm9yIGxcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDApID09PSAxMDggJiYgLy8gY2hhcmNvZGUgZm9yIGJcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgLy8gdGhpcyBpZ25vcmVzIGxhYmVsXG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gICAgICBlbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG59O1xudmFyIGlnbm9yZUZsYWcgPSAnZW1vdGlvbi1kaXNhYmxlLXNlcnZlci1yZW5kZXJpbmctdW5zYWZlLXNlbGVjdG9yLXdhcm5pbmctcGxlYXNlLWRvLW5vdC11c2UtdGhpcy10aGUtd2FybmluZy1leGlzdHMtZm9yLWEtcmVhc29uJztcblxudmFyIGlzSWdub3JpbmdDb21tZW50ID0gZnVuY3Rpb24gaXNJZ25vcmluZ0NvbW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC50eXBlID09PSAnY29tbScgJiYgZWxlbWVudC5jaGlsZHJlbi5pbmRleE9mKGlnbm9yZUZsYWcpID4gLTE7XG59O1xuXG52YXIgY3JlYXRlVW5zYWZlU2VsZWN0b3JzQWxhcm0gPSBmdW5jdGlvbiBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybShjYWNoZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbikge1xuICAgIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCBjYWNoZS5jb21wYXQpIHJldHVybjtcbiAgICB2YXIgdW5zYWZlUHNldWRvQ2xhc3NlcyA9IGVsZW1lbnQudmFsdWUubWF0Y2goLyg6Zmlyc3R8Om50aHw6bnRoLWxhc3QpLWNoaWxkL2cpO1xuXG4gICAgaWYgKHVuc2FmZVBzZXVkb0NsYXNzZXMpIHtcbiAgICAgIHZhciBpc05lc3RlZCA9IGVsZW1lbnQucGFyZW50ID09PSBjaGlsZHJlblswXTsgLy8gaW4gbmVzdGVkIHJ1bGVzIGNvbW1lbnRzIGJlY29tZSBjaGlsZHJlbiBvZiB0aGUgXCJhdXRvLWluc2VydGVkXCIgcnVsZVxuICAgICAgLy9cbiAgICAgIC8vIGNvbnNpZGVyaW5nIHRoaXMgaW5wdXQ6XG4gICAgICAvLyAuYSB7XG4gICAgICAvLyAgIC5iIC8qIGNvbW0gKi8ge31cbiAgICAgIC8vICAgY29sb3I6IGhvdHBpbms7XG4gICAgICAvLyB9XG4gICAgICAvLyB3ZSBnZXQgb3V0cHV0IGNvcnJlc3BvbmRpbmcgdG8gdGhpczpcbiAgICAgIC8vIC5hIHtcbiAgICAgIC8vICAgJiB7XG4gICAgICAvLyAgICAgLyogY29tbSAqL1xuICAgICAgLy8gICAgIGNvbG9yOiBob3RwaW5rO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIC5iIHt9XG4gICAgICAvLyB9XG5cbiAgICAgIHZhciBjb21tZW50Q29udGFpbmVyID0gaXNOZXN0ZWQgPyBjaGlsZHJlblswXS5jaGlsZHJlbiA6IC8vIGdsb2JhbCBydWxlIGF0IHRoZSByb290IGxldmVsXG4gICAgICBjaGlsZHJlbjtcblxuICAgICAgZm9yICh2YXIgaSA9IGNvbW1lbnRDb250YWluZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBjb21tZW50Q29udGFpbmVyW2ldO1xuXG4gICAgICAgIGlmIChub2RlLmxpbmUgPCBlbGVtZW50LmxpbmUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBpdCBpcyBxdWl0ZSB3ZWlyZCBidXQgY29tbWVudHMgYXJlICp1c3VhbGx5KiBwdXQgYXQgYGNvbHVtbjogZWxlbWVudC5jb2x1bW4gLSAxYFxuICAgICAgICAvLyBzbyB3ZSBzZWVrICpmcm9tIHRoZSBlbmQqIGZvciB0aGUgbm9kZSB0aGF0IGlzIGVhcmxpZXIgdGhhbiB0aGUgcnVsZSdzIGBlbGVtZW50YCBhbmQgY2hlY2sgdGhhdFxuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBtYXRjaCBpbnB1dHMgbGlrZSB0aGlzOlxuICAgICAgICAvLyAuYSB7XG4gICAgICAgIC8vICAgLyogY29tbSAqL1xuICAgICAgICAvLyAgIC5iIHt9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYnV0IHRoYXQgaXMgZmluZVxuICAgICAgICAvL1xuICAgICAgICAvLyBpdCB3b3VsZCBiZSB0aGUgZWFzaWVzdCB0byBjaGFuZ2UgdGhlIHBsYWNlbWVudCBvZiB0aGUgY29tbWVudCB0byBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJ1bGU6XG4gICAgICAgIC8vIC5hIHtcbiAgICAgICAgLy8gICAuYiB7IC8qIGNvbW0gKi8gfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHdpdGggc3VjaCBpbnB1dHMgd2Ugd291bGRuJ3QgaGF2ZSB0byBzZWFyY2ggZm9yIHRoZSBjb21tZW50IGF0IGFsbFxuICAgICAgICAvLyBUT0RPOiBjb25zaWRlciBjaGFuZ2luZyB0aGlzIGNvbW1lbnQgcGxhY2VtZW50IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblxuXG4gICAgICAgIGlmIChub2RlLmNvbHVtbiA8IGVsZW1lbnQuY29sdW1uKSB7XG4gICAgICAgICAgaWYgKGlzSWdub3JpbmdDb21tZW50KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHBzZXVkbyBjbGFzcyBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcyArIFwiXFxcIiBpcyBwb3RlbnRpYWxseSB1bnNhZmUgd2hlbiBkb2luZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIFRyeSBjaGFuZ2luZyBpdCB0byBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcy5zcGxpdCgnLWNoaWxkJylbMF0gKyBcIi1vZi10eXBlXFxcIi5cIik7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgaXNJbXBvcnRSdWxlID0gZnVuY3Rpb24gaXNJbXBvcnRSdWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZS5jaGFyQ29kZUF0KDEpID09PSAxMDUgJiYgZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMCkgPT09IDY0O1xufTtcblxudmFyIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyA9IGZ1bmN0aW9uIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoIWlzSW1wb3J0UnVsZShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IC8vIHVzZSB0aGlzIHRvIHJlbW92ZSBpbmNvcnJlY3QgZWxlbWVudHMgZnJvbSBmdXJ0aGVyIHByb2Nlc3Npbmdcbi8vIHNvIHRoZXkgZG9uJ3QgZ2V0IGhhbmRlZCB0byB0aGUgYHNoZWV0YCAob3IgYW55dGhpbmcgZWxzZSlcbi8vIGFzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhZGRpdGlvbmFsIGxvZ3Mgd2hpY2ggaW4gdHVybiBjb3VsZCBiZSBvdmVyaGVsbWluZyB0byB0aGUgdXNlclxuXG5cbnZhciBudWxsaWZ5RWxlbWVudCA9IGZ1bmN0aW9uIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpIHtcbiAgZWxlbWVudC50eXBlID0gJyc7XG4gIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICBlbGVtZW50LmNoaWxkcmVuID0gJyc7XG4gIGVsZW1lbnQucHJvcHMgPSAnJztcbn07XG5cbnZhciBpbmNvcnJlY3RJbXBvcnRBbGFybSA9IGZ1bmN0aW9uIGluY29ycmVjdEltcG9ydEFsYXJtKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbikge1xuICBpZiAoIWlzSW1wb3J0UnVsZShlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJgQGltcG9ydGAgcnVsZXMgY2FuJ3QgYmUgbmVzdGVkIGluc2lkZSBvdGhlciBydWxlcy4gUGxlYXNlIG1vdmUgaXQgdG8gdGhlIHRvcCBsZXZlbCBhbmQgcHV0IGl0IGJlZm9yZSByZWd1bGFyIHJ1bGVzLiBLZWVwIGluIG1pbmQgdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGdsb2JhbCBzdHlsZXMuXCIpO1xuICAgIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpO1xuICB9IGVsc2UgaWYgKGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pKSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBhZnRlciBvdGhlciBydWxlcy4gUGxlYXNlIHB1dCB5b3VyIGBAaW1wb3J0YCBydWxlcyBiZWZvcmUgeW91ciBvdGhlciBydWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgaGF2ZSB0byBjb25maWd1cmUgYGtleWAgZm9yIHlvdXIgY2FjaGUuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB1bmlxdWUgKGFuZCBub3QgZXF1YWwgdG8gJ2NzcycpIGFzIGl0J3MgdXNlZCBmb3IgbGlua2luZyBzdHlsZXMgdG8geW91ciBjYWNoZS5cXG5cIiArIFwiSWYgbXVsdGlwbGUgY2FjaGVzIHNoYXJlIHRoZSBzYW1lIGtleSB0aGV5IG1pZ2h0IFxcXCJmaWdodFxcXCIgZm9yIGVhY2ggb3RoZXIncyBzdHlsZSBlbGVtZW50cy5cIik7XG4gIH1cblxuICBpZiAoIGtleSA9PT0gJ2NzcycpIHtcbiAgICB2YXIgc3NyU3R5bGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl06bm90KFtkYXRhLXNdKVwiKTsgLy8gZ2V0IFNTUmVkIHN0eWxlcyBvdXQgb2YgdGhlIHdheSBvZiBSZWFjdCdzIGh5ZHJhdGlvblxuICAgIC8vIGRvY3VtZW50LmhlYWQgaXMgYSBzYWZlIHBsYWNlIHRvIG1vdmUgdGhlbSB0byh0aG91Z2ggbm90ZSBkb2N1bWVudC5oZWFkIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgbGFzdCBwbGFjZSB0aGV5IHdpbGwgYmUpXG4gICAgLy8gbm90ZSB0aGlzIHZlcnkgdmVyeSBpbnRlbnRpb25hbGx5IHRhcmdldHMgYWxsIHN0eWxlIGVsZW1lbnRzIHJlZ2FyZGxlc3Mgb2YgdGhlIGtleSB0byBlbnN1cmVcbiAgICAvLyB0aGF0IGNyZWF0aW5nIGEgY2FjaGUgd29ya3MgaW5zaWRlIG9mIHJlbmRlciBvZiBhIFJlYWN0IGNvbXBvbmVudFxuXG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzc3JTdHlsZXMsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAvLyB3ZSB3YW50IHRvIG9ubHkgbW92ZSBlbGVtZW50cyB3aGljaCBoYXZlIGEgc3BhY2UgaW4gdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIC8vIGJlY2F1c2UgdGhhdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBhbiBFbW90aW9uIDExIHNlcnZlci1zaWRlIHJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgICAvLyB3aGlsZSB3ZSB3aWxsIGFscmVhZHkgaWdub3JlIEVtb3Rpb24gMTEgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGJlY2F1c2Ugb2YgdGhlIDpub3QoW2RhdGEtc10pIHBhcnQgaW4gdGhlIHNlbGVjdG9yXG4gICAgICAvLyBFbW90aW9uIDEwIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBkaWQgbm90IGhhdmUgZGF0YS1zIChidXQgaW1wb3J0YW50bHkgZGlkIG5vdCBoYXZlIGEgc3BhY2UgaW4gdGhlaXIgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZXMpXG4gICAgICAvLyBzbyBjaGVja2luZyBmb3IgdGhlIHNwYWNlIGVuc3VyZXMgdGhhdCBsb2FkaW5nIEVtb3Rpb24gMTEgYWZ0ZXIgRW1vdGlvbiAxMCBoYXMgaW5zZXJ0ZWQgc29tZSBzdHlsZXNcbiAgICAgIC8vIHdpbGwgbm90IHJlc3VsdCBpbiB0aGUgRW1vdGlvbiAxMCBzdHlsZXMgYmVpbmcgZGVzdHJveWVkXG4gICAgICB2YXIgZGF0YUVtb3Rpb25BdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJyk7XG5cbiAgICAgIGlmIChkYXRhRW1vdGlvbkF0dHJpYnV0ZS5pbmRleE9mKCcgJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIHN0eWxpc1BsdWdpbnMgPSBvcHRpb25zLnN0eWxpc1BsdWdpbnMgfHwgZGVmYXVsdFN0eWxpc1BsdWdpbnM7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgaWYgKC9bXmEtei1dLy50ZXN0KGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtb3Rpb24ga2V5IG11c3Qgb25seSBjb250YWluIGxvd2VyIGNhc2UgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgYW5kIC0gYnV0IFxcXCJcIiArIGtleSArIFwiXFxcIiB3YXMgcGFzc2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbnNlcnRlZCA9IHt9O1xuICB2YXIgY29udGFpbmVyO1xuICB2YXIgbm9kZXNUb0h5ZHJhdGUgPSBbXTtcblxuICB7XG4gICAgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgfHwgZG9jdW1lbnQuaGVhZDtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCAvLyB0aGlzIG1lYW5zIHdlIHdpbGwgaWdub3JlIGVsZW1lbnRzIHdoaWNoIGRvbid0IGhhdmUgYSBzcGFjZSBpbiB0aGVtIHdoaWNoXG4gICAgLy8gbWVhbnMgdGhhdCB0aGUgc3R5bGUgZWxlbWVudHMgd2UncmUgbG9va2luZyBhdCBhcmUgb25seSBFbW90aW9uIDExIHNlcnZlci1yZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25ePVxcXCJcIiArIGtleSArIFwiIFxcXCJdXCIpLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGF0dHJpYiA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1lbW90aW9uXCIpLnNwbGl0KCcgJyk7IC8vICRGbG93Rml4TWVcblxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhdHRyaWIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW5zZXJ0ZWRbYXR0cmliW2ldXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzVG9IeWRyYXRlLnB1c2gobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgX2luc2VydDtcblxuICB2YXIgb21uaXByZXNlbnRQbHVnaW5zID0gW2NvbXBhdCwgcmVtb3ZlTGFiZWxdO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgb21uaXByZXNlbnRQbHVnaW5zLnB1c2goY3JlYXRlVW5zYWZlU2VsZWN0b3JzQWxhcm0oe1xuICAgICAgZ2V0IGNvbXBhdCgpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlLmNvbXBhdDtcbiAgICAgIH1cblxuICAgIH0pLCBpbmNvcnJlY3RJbXBvcnRBbGFybSk7XG4gIH1cblxuICB7XG4gICAgdmFyIGN1cnJlbnRTaGVldDtcbiAgICB2YXIgZmluYWxpemluZ1BsdWdpbnMgPSBbc3RyaW5naWZ5LCBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIGlmICghZWxlbWVudC5yb290KSB7XG4gICAgICAgIGlmIChlbGVtZW50W1wicmV0dXJuXCJdKSB7XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50W1wicmV0dXJuXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnZhbHVlICYmIGVsZW1lbnQudHlwZSAhPT0gQ09NTUVOVCkge1xuICAgICAgICAgIC8vIGluc2VydCBlbXB0eSBydWxlIGluIG5vbi1wcm9kdWN0aW9uIGVudmlyb25tZW50c1xuICAgICAgICAgIC8vIHNvIEBlbW90aW9uL2plc3QgY2FuIGdyYWIgYGtleWAgZnJvbSB0aGUgKEpTKURPTSBmb3IgY2FjaGVzIHdpdGhvdXQgYW55IHJ1bGVzIGluc2VydGVkIHlldFxuICAgICAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQoZWxlbWVudC52YWx1ZSArIFwie31cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IDogcnVsZXNoZWV0KGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KHJ1bGUpO1xuICAgIH0pXTtcbiAgICB2YXIgc2VyaWFsaXplciA9IG1pZGRsZXdhcmUob21uaXByZXNlbnRQbHVnaW5zLmNvbmNhdChzdHlsaXNQbHVnaW5zLCBmaW5hbGl6aW5nUGx1Z2lucykpO1xuXG4gICAgdmFyIHN0eWxpcyA9IGZ1bmN0aW9uIHN0eWxpcyhzdHlsZXMpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemUoY29tcGlsZShzdHlsZXMpLCBzZXJpYWxpemVyKTtcbiAgICB9O1xuXG4gICAgX2luc2VydCA9IGZ1bmN0aW9uIGluc2VydChzZWxlY3Rvciwgc2VyaWFsaXplZCwgc2hlZXQsIHNob3VsZENhY2hlKSB7XG4gICAgICBjdXJyZW50U2hlZXQgPSBzaGVldDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2VyaWFsaXplZC5tYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjdXJyZW50U2hlZXQgPSB7XG4gICAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgICAgICAgICAgc2hlZXQuaW5zZXJ0KHJ1bGUgKyBzZXJpYWxpemVkLm1hcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBzdHlsaXMoc2VsZWN0b3IgPyBzZWxlY3RvciArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIiA6IHNlcmlhbGl6ZWQuc3R5bGVzKTtcblxuICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgY2FjaGUgPSB7XG4gICAga2V5OiBrZXksXG4gICAgc2hlZXQ6IG5ldyBTdHlsZVNoZWV0KHtcbiAgICAgIGtleToga2V5LFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICAgIHNwZWVkeTogb3B0aW9ucy5zcGVlZHksXG4gICAgICBwcmVwZW5kOiBvcHRpb25zLnByZXBlbmQsXG4gICAgICBpbnNlcnRpb25Qb2ludDogb3B0aW9ucy5pbnNlcnRpb25Qb2ludFxuICAgIH0pLFxuICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgIGluc2VydGVkOiBpbnNlcnRlZCxcbiAgICByZWdpc3RlcmVkOiB7fSxcbiAgICBpbnNlcnQ6IF9pbnNlcnRcbiAgfTtcbiAgY2FjaGUuc2hlZXQuaHlkcmF0ZShub2Rlc1RvSHlkcmF0ZSk7XG4gIHJldHVybiBjYWNoZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUNhY2hlO1xuIiwiaW1wb3J0IHtNUywgTU9aLCBXRUJLSVQsIFJVTEVTRVQsIEtFWUZSQU1FUywgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7bWF0Y2gsIGNoYXJhdCwgc3Vic3RyLCBzdHJsZW4sIHNpemVvZiwgcmVwbGFjZSwgY29tYmluZX0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtjb3B5LCB0b2tlbml6ZX0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5pbXBvcnQge3NlcmlhbGl6ZX0gZnJvbSAnLi9TZXJpYWxpemVyLmpzJ1xuaW1wb3J0IHtwcmVmaXh9IGZyb20gJy4vUHJlZml4ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbltdfSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZGRsZXdhcmUgKGNvbGxlY3Rpb24pIHtcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjb2xsZWN0aW9uKVxuXG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRcdHZhciBvdXRwdXQgPSAnJ1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdG91dHB1dCArPSBjb2xsZWN0aW9uW2ldKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2hlZXQgKGNhbGxiYWNrKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudC5yb290KVxuXHRcdFx0aWYgKGVsZW1lbnQgPSBlbGVtZW50LnJldHVybilcblx0XHRcdFx0Y2FsbGJhY2soZWxlbWVudClcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ZXIgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0aWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpXG5cdFx0aWYgKCFlbGVtZW50LnJldHVybilcblx0XHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgREVDTEFSQVRJT046IGVsZW1lbnQucmV0dXJuID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdGNhc2UgS0VZRlJBTUVTOlxuXHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3ZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldfSldLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0XHQvLyA6cGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6OnBsYWNlaG9sZGVyJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldfSlcblx0XHRcdFx0XHRcdFx0XHRcdF0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2UgKGVsZW1lbnQpIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRlbGVtZW50LnByb3BzID0gZWxlbWVudC5wcm9wcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBjb21iaW5lKHRva2VuaXplKHZhbHVlKSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgMCkpIHtcblx0XHRcdFx0XHRcdC8vIFxcZlxuXHRcdFx0XHRcdFx0Y2FzZSAxMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YnN0cih2YWx1ZSwgMSwgc3RybGVuKHZhbHVlKSlcblx0XHRcdFx0XHRcdC8vIFxcMCAoICsgPiB+XG5cdFx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgNDA6IGNhc2UgNDM6IGNhc2UgNjI6IGNhc2UgMTI2OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdC8vIDpcblx0XHRcdFx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdFx0XHRcdGlmIChjaGlsZHJlblsrK2luZGV4XSA9PT0gJ2dsb2JhbCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW5baW5kZXhdID0gJycsIGNoaWxkcmVuWysraW5kZXhdID0gJ1xcZicgKyBzdWJzdHIoY2hpbGRyZW5baW5kZXhdLCBpbmRleCA9IDEsIC0xKVxuXHRcdFx0XHRcdFx0Ly8gXFxzXG5cdFx0XHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAwOiBlbGVtZW50ID0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaXplb2YoY2hpbGRyZW4pID4gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRjYXNlIGluZGV4ID0gc2l6ZW9mKGNoaWxkcmVuKSAtIDE6IGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMiA/IHZhbHVlICsgZWxlbWVudCArIGVsZW1lbnQgOiB2YWx1ZSArIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHR9XG59XG4iLCJmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemU7XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCBmb3J3YXJkUmVmLCBjcmVhdGVFbGVtZW50LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgd2Vha01lbW9pemUgZnJvbSAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCBob2lzdE5vblJlYWN0U3RhdGljcyBmcm9tICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIEVtb3Rpb25DYWNoZUNvbnRleHQgPSAvKiAjX19QVVJFX18gKi9jcmVhdGVDb250ZXh0KCAvLyB3ZSdyZSBkb2luZyB0aGlzIHRvIGF2b2lkIHByZWNvbnN0cnVjdCdzIGRlYWQgY29kZSBlbGltaW5hdGlvbiBpbiB0aGlzIG9uZSBjYXNlXG4vLyBiZWNhdXNlIHRoaXMgbW9kdWxlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdGhlIGJyb3dzZXIgYW5kIG5vZGVcbi8vIGJ1dCBpdCdzIGFsc28gcmVxdWlyZWQgaW4gcmVhY3QgbmF0aXZlIGFuZCBzaW1pbGFyIGVudmlyb25tZW50cyBzb21ldGltZXNcbi8vIGFuZCB3ZSBjb3VsZCBoYXZlIGEgc3BlY2lhbCBidWlsZCBqdXN0IGZvciB0aGF0XG4vLyBidXQgdGhpcyBpcyBtdWNoIGVhc2llciBhbmQgdGhlIG5hdGl2ZSBwYWNrYWdlc1xuLy8gbWlnaHQgdXNlIGEgZGlmZmVyZW50IHRoZW1lIGNvbnRleHQgaW4gdGhlIGZ1dHVyZSBhbnl3YXlcbnR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgPyAvKiAjX19QVVJFX18gKi9jcmVhdGVDYWNoZSh7XG4gIGtleTogJ2Nzcydcbn0pIDogbnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb25DYWNoZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNhY2hlQ29udGV4dCc7XG59XG5cbnZhciBDYWNoZVByb3ZpZGVyID0gRW1vdGlvbkNhY2hlQ29udGV4dC5Qcm92aWRlcjtcbnZhciBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUgPSBmdW5jdGlvbiB1c2VFbW90aW9uQ2FjaGUoKSB7XG4gIHJldHVybiB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xufTtcblxudmFyIHdpdGhFbW90aW9uQ2FjaGUgPSBmdW5jdGlvbiB3aXRoRW1vdGlvbkNhY2hlKGZ1bmMpIHtcbiAgLy8gJEZsb3dGaXhNZVxuICByZXR1cm4gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICAvLyB0aGUgY2FjaGUgd2lsbCBuZXZlciBiZSBudWxsIGluIHRoZSBicm93c2VyXG4gICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbiAgICByZXR1cm4gZnVuYyhwcm9wcywgY2FjaGUsIHJlZik7XG4gIH0pO1xufTtcblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnRW1vdGlvblRoZW1lQ29udGV4dCc7XG59XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKG1lcmdlZFRoZW1lID09IG51bGwgfHwgdHlwZW9mIG1lcmdlZFRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG1lcmdlZFRoZW1lKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLiB0aGVtZT17KCkgPT4gKHt9KX0hJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKHRoZW1lID09IG51bGwgfHwgdHlwZW9mIHRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHRoZW1lKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tUaGVtZVByb3ZpZGVyXSBQbGVhc2UgbWFrZSB5b3VyIHRoZW1lIHByb3AgYSBwbGFpbiBvYmplY3QnKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgdmFyIHRoZW1lID0gdXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IHVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07IC8vICRGbG93Rml4TWVcblxuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGdldExhc3RQYXJ0ID0gZnVuY3Rpb24gZ2V0TGFzdFBhcnQoZnVuY3Rpb25OYW1lKSB7XG4gIC8vIFRoZSBtYXRjaCBtYXkgYmUgc29tZXRoaW5nIGxpa2UgJ09iamVjdC5jcmVhdGVFbW90aW9uUHJvcHMnIG9yXG4gIC8vICdMb2FkZXIucHJvdG90eXBlLnJlbmRlcidcbiAgdmFyIHBhcnRzID0gZnVuY3Rpb25OYW1lLnNwbGl0KCcuJyk7XG4gIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbn07XG5cbnZhciBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUgPSBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZSkge1xuICAvLyBWOFxuICB2YXIgbWF0Y2ggPSAvXlxccythdFxccysoW0EtWmEtejAtOSQuXSspXFxzLy5leGVjKGxpbmUpO1xuICBpZiAobWF0Y2gpIHJldHVybiBnZXRMYXN0UGFydChtYXRjaFsxXSk7IC8vIFNhZmFyaSAvIEZpcmVmb3hcblxuICBtYXRjaCA9IC9eKFtBLVphLXowLTkkLl0rKUAvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciBpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcyA9IC8qICNfX1BVUkVfXyAqL25ldyBTZXQoWydyZW5kZXJXaXRoSG9va3MnLCAncHJvY2Vzc0NoaWxkJywgJ2ZpbmlzaENsYXNzQ29tcG9uZW50JywgJ3JlbmRlclRvU3RyaW5nJ10pOyAvLyBUaGVzZSBpZGVudGlmaWVycyBjb21lIGZyb20gZXJyb3Igc3RhY2tzLCBzbyB0aGV5IGhhdmUgdG8gYmUgdmFsaWQgSlNcbi8vIGlkZW50aWZpZXJzLCB0aHVzIHdlIG9ubHkgbmVlZCB0byByZXBsYWNlIHdoYXQgaXMgYSB2YWxpZCBjaGFyYWN0ZXIgZm9yIEpTLFxuLy8gYnV0IG5vdCBmb3IgQ1NTLlxuXG52YXIgc2FuaXRpemVJZGVudGlmaWVyID0gZnVuY3Rpb24gc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgcmV0dXJuIGlkZW50aWZpZXIucmVwbGFjZSgvXFwkL2csICctJyk7XG59O1xuXG52YXIgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIGdldExhYmVsRnJvbVN0YWNrVHJhY2Uoc3RhY2tUcmFjZSkge1xuICBpZiAoIXN0YWNrVHJhY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciBsaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lKGxpbmVzW2ldKTsgLy8gVGhlIGZpcnN0IGxpbmUgb2YgVjggc3RhY2sgdHJhY2VzIGlzIGp1c3QgXCJFcnJvclwiXG5cbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgY29udGludWU7IC8vIElmIHdlIHJlYWNoIG9uZSBvZiB0aGVzZSwgd2UgaGF2ZSBnb25lIHRvbyBmYXIgYW5kIHNob3VsZCBxdWl0XG5cbiAgICBpZiAoaW50ZXJuYWxSZWFjdEZ1bmN0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uTmFtZSkpIGJyZWFrOyAvLyBUaGUgY29tcG9uZW50IG5hbWUgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzdGFjayB0aGF0IHN0YXJ0cyB3aXRoIGFuXG4gICAgLy8gdXBwZXJjYXNlIGxldHRlclxuXG4gICAgaWYgKC9eW0EtWl0vLnRlc3QoZnVuY3Rpb25OYW1lKSkgcmV0dXJuIHNhbml0aXplSWRlbnRpZmllcihmdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgbGFiZWxQcm9wTmFtZSA9ICdfX0VNT1RJT05fTEFCRUxfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgY3JlYXRlRW1vdGlvblByb3BzID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBwcm9wcy5jc3MgPT09ICdzdHJpbmcnICYmIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgY3NzIGRlY2xhcmF0aW9uXG4gIHByb3BzLmNzcy5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaW5ncyBhcmUgbm90IGFsbG93ZWQgYXMgY3NzIHByb3AgdmFsdWVzLCBwbGVhc2Ugd3JhcCBpdCBpbiBhIGNzcyB0ZW1wbGF0ZSBsaXRlcmFsIGZyb20gJ0BlbW90aW9uL3JlYWN0JyBsaWtlIHRoaXM6IGNzc2BcIiArIHByb3BzLmNzcyArIFwiYFwiKTtcbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wc1t0eXBlUHJvcE5hbWVdID0gdHlwZTsgLy8gRm9yIHBlcmZvcm1hbmNlLCBvbmx5IGNhbGwgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSBpbiBkZXZlbG9wbWVudCBhbmQgd2hlblxuICAvLyB0aGUgbGFiZWwgaGFzbid0IGFscmVhZHkgYmVlbiBjb21wdXRlZFxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICEhcHJvcHMuY3NzICYmICh0eXBlb2YgcHJvcHMuY3NzICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgcHJvcHMuY3NzLm5hbWUgIT09ICdzdHJpbmcnIHx8IHByb3BzLmNzcy5uYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpKSB7XG4gICAgdmFyIGxhYmVsID0gZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZShuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgaWYgKGxhYmVsKSBuZXdQcm9wc1tsYWJlbFByb3BOYW1lXSA9IGxhYmVsO1xuICB9XG5cbiAgcmV0dXJuIG5ld1Byb3BzO1xufTtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgcnVsZXMgPSB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIEVtb3Rpb24gPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICB2YXIgY3NzUHJvcCA9IHByb3BzLmNzczsgLy8gc28gdGhhdCB1c2luZyBgY3NzYCBmcm9tIGBlbW90aW9uYCBhbmQgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHRoZSBjc3MgcHJvcCB3b3Jrc1xuICAvLyBub3QgcGFzc2luZyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBzZXJpYWxpemVTdHlsZXMgYmVjYXVzZSBpdCB3b3VsZFxuICAvLyBtYWtlIGNlcnRhaW4gYmFiZWwgb3B0aW1pc2F0aW9ucyBub3QgcG9zc2libGVcblxuICBpZiAodHlwZW9mIGNzc1Byb3AgPT09ICdzdHJpbmcnICYmIGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNzc1Byb3AgPSBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdO1xuICB9XG5cbiAgdmFyIFdyYXBwZWRDb21wb25lbnQgPSBwcm9wc1t0eXBlUHJvcE5hbWVdO1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtjc3NQcm9wXTtcbiAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuXG4gIGlmICh0eXBlb2YgcHJvcHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMocmVnaXN0ZXJlZFN0eWxlcywgdW5kZWZpbmVkLCB1c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHNlcmlhbGl6ZWQubmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgdmFyIGxhYmVsRnJvbVN0YWNrID0gcHJvcHNbbGFiZWxQcm9wTmFtZV07XG5cbiAgICBpZiAobGFiZWxGcm9tU3RhY2spIHtcbiAgICAgIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoW3NlcmlhbGl6ZWQsICdsYWJlbDonICsgbGFiZWxGcm9tU3RhY2sgKyAnOyddKTtcbiAgICB9XG4gIH1cblxuICBjbGFzc05hbWUgKz0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpICYmIGtleSAhPT0gJ2NzcycgJiYga2V5ICE9PSB0eXBlUHJvcE5hbWUgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgfHwga2V5ICE9PSBsYWJlbFByb3BOYW1lKSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHMucmVmID0gcmVmO1xuICBuZXdQcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIHNlcmlhbGl6ZWQ6IHNlcmlhbGl6ZWQsXG4gICAgaXNTdHJpbmdUYWc6IHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09PSAnc3RyaW5nJ1xuICB9KSwgLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgbmV3UHJvcHMpKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBFbW90aW9uLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25Dc3NQcm9wSW50ZXJuYWwnO1xufVxuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24gYXMgRSwgVGhlbWVDb250ZXh0IGFzIFQsIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSBhcyBfLCBUaGVtZVByb3ZpZGVyIGFzIGEsIHdpdGhUaGVtZSBhcyBiLCBjcmVhdGVFbW90aW9uUHJvcHMgYXMgYywgaGFzT3duUHJvcGVydHkgYXMgaCwgdXNlVGhlbWUgYXMgdSwgd2l0aEVtb3Rpb25DYWNoZSBhcyB3IH07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWFwcGxlYnkvc21oYXNoZXIvYmxvYi82MWEwNTMwZjI4Mjc3ZjJlODUwYmZjMzk2MDBjZTYxZDAyYjUxOGRlL3NyYy9NdXJtdXJIYXNoMi5jcHAjTDM3LUw4NlxuZnVuY3Rpb24gbXVybXVyMihzdHIpIHtcbiAgLy8gJ20nIGFuZCAncicgYXJlIG1peGluZyBjb25zdGFudHMgZ2VuZXJhdGVkIG9mZmxpbmUuXG4gIC8vIFRoZXkncmUgbm90IHJlYWxseSAnbWFnaWMnLCB0aGV5IGp1c3QgaGFwcGVuIHRvIHdvcmsgd2VsbC5cbiAgLy8gY29uc3QgbSA9IDB4NWJkMWU5OTU7XG4gIC8vIGNvbnN0IHIgPSAyNDtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaFxuICB2YXIgaCA9IDA7IC8vIE1peCA0IGJ5dGVzIGF0IGEgdGltZSBpbnRvIHRoZSBoYXNoXG5cbiAgdmFyIGssXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGxlbiA+PSA0OyArK2ksIGxlbiAtPSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICAgIGsgXj1cbiAgICAvKiBrID4+PiByOiAqL1xuICAgIGsgPj4+IDI0O1xuICAgIGggPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpIF5cbiAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIG9mIHRoZSBpbnB1dCBhcnJheVxuXG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPVxuICAgICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBEbyBhIGZldyBmaW5hbCBtaXhlcyBvZiB0aGUgaGFzaCB0byBlbnN1cmUgdGhlIGxhc3QgZmV3XG4gIC8vIGJ5dGVzIGFyZSB3ZWxsLWluY29ycG9yYXRlZC5cblxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPVxuICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIHJldHVybiAoKGggXiBoID4+PiAxNSkgPj4+IDApLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbXVybXVyMjtcbiIsInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICB0YWJTaXplOiAxLFxuICB3aWRvd3M6IDEsXG4gIHpJbmRleDogMSxcbiAgem9vbTogMSxcbiAgV2Via2l0TGluZUNsYW1wOiAxLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAxLFxuICBmbG9vZE9wYWNpdHk6IDEsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gIHN0cm9rZU9wYWNpdHk6IDEsXG4gIHN0cm9rZVdpZHRoOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCB1bml0bGVzc0tleXM7XG4iLCJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SID0gXCJZb3UgaGF2ZSBpbGxlZ2FsIGVzY2FwZSBzZXF1ZW5jZSBpbiB5b3VyIHRlbXBsYXRlIGxpdGVyYWwsIG1vc3QgbGlrZWx5IGluc2lkZSBjb250ZW50J3MgcHJvcGVydHkgdmFsdWUuXFxuQmVjYXVzZSB5b3Ugd3JpdGUgeW91ciBDU1MgaW5zaWRlIGEgSmF2YVNjcmlwdCBzdHJpbmcgeW91IGFjdHVhbGx5IGhhdmUgdG8gZG8gZG91YmxlIGVzY2FwaW5nLCBzbyBmb3IgZXhhbXBsZSBcXFwiY29udGVudDogJ1xcXFwwMGQ3JztcXFwiIHNob3VsZCBiZWNvbWUgXFxcImNvbnRlbnQ6ICdcXFxcXFxcXDAwZDcnO1xcXCIuXFxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxcbmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1RlbXBsYXRlX2xpdGVyYWxzI0VTMjAxOF9yZXZpc2lvbl9vZl9pbGxlZ2FsX2VzY2FwZV9zZXF1ZW5jZXNcIjtcbnZhciBVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUiA9IFwiWW91IGhhdmUgcGFzc2VkIGluIGZhbHN5IHZhbHVlIGFzIHN0eWxlIG9iamVjdCdzIGtleSAoY2FuIGhhcHBlbiB3aGVuIGluIGV4YW1wbGUgeW91IHBhc3MgdW5leHBvcnRlZCBjb21wb25lbnQgYXMgY29tcHV0ZWQga2V5KS5cIjtcbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xuXG52YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIGlzQ3VzdG9tUHJvcGVydHkocHJvcGVydHkpIHtcbiAgcmV0dXJuIHByb3BlcnR5LmNoYXJDb2RlQXQoMSkgPT09IDQ1O1xufTtcblxudmFyIGlzUHJvY2Vzc2FibGVWYWx1ZSA9IGZ1bmN0aW9uIGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbn07XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBpc0N1c3RvbVByb3BlcnR5KHN0eWxlTmFtZSkgPyBzdHlsZU5hbWUgOiBzdHlsZU5hbWUucmVwbGFjZShoeXBoZW5hdGVSZWdleCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG59KTtcblxudmFyIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHAxLFxuICAgICAgICAgICAgICBzdHlsZXM6IHAyLFxuICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICh1bml0bGVzc1trZXldICE9PSAxICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgY29udGVudFZhbHVlUGF0dGVybiA9IC8odmFyfGF0dHJ8Y291bnRlcnM/fHVybHwoKChyZXBlYXRpbmctKT8obGluZWFyfHJhZGlhbCkpfGNvbmljKS1ncmFkaWVudClcXCh8KG5vLSk/KG9wZW58Y2xvc2UpLXF1b3RlLztcbiAgdmFyIGNvbnRlbnRWYWx1ZXMgPSBbJ25vcm1hbCcsICdub25lJywgJ2luaXRpYWwnLCAnaW5oZXJpdCcsICd1bnNldCddO1xuICB2YXIgb2xkUHJvY2Vzc1N0eWxlVmFsdWUgPSBwcm9jZXNzU3R5bGVWYWx1ZTtcbiAgdmFyIG1zUGF0dGVybiA9IC9eLW1zLS87XG4gIHZhciBoeXBoZW5QYXR0ZXJuID0gLy0oLikvZztcbiAgdmFyIGh5cGhlbmF0ZWRDYWNoZSA9IHt9O1xuXG4gIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgPT09ICdjb250ZW50Jykge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgY29udGVudFZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEgJiYgIWNvbnRlbnRWYWx1ZVBhdHRlcm4udGVzdCh2YWx1ZSkgJiYgKHZhbHVlLmNoYXJBdCgwKSAhPT0gdmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aCAtIDEpIHx8IHZhbHVlLmNoYXJBdCgwKSAhPT0gJ1wiJyAmJiB2YWx1ZS5jaGFyQXQoMCkgIT09IFwiJ1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3Ugc2VlbSB0byBiZSB1c2luZyBhIHZhbHVlIGZvciAnY29udGVudCcgd2l0aG91dCBxdW90ZXMsIHRyeSByZXBsYWNpbmcgaXQgd2l0aCBgY29udGVudDogJ1xcXCJcIiArIHZhbHVlICsgXCJcXFwiJ2BcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb2Nlc3NlZCA9IG9sZFByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpO1xuXG4gICAgaWYgKHByb2Nlc3NlZCAhPT0gJycgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiBrZXkuaW5kZXhPZignLScpICE9PSAtMSAmJiBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFwiVXNpbmcga2ViYWItY2FzZSBmb3IgY3NzIHByb3BlcnRpZXMgaW4gb2JqZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiBEaWQgeW91IG1lYW4gXCIgKyBrZXkucmVwbGFjZShtc1BhdHRlcm4sICdtcy0nKS5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChzdHIsIF9jaGFyKSB7XG4gICAgICAgIHJldHVybiBfY2hhci50b1VwcGVyQ2FzZSgpO1xuICAgICAgfSkgKyBcIj9cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfTtcbn1cblxudmFyIG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlID0gJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICcgKyAnQGVtb3Rpb24vYmFiZWwtcGx1Z2luLCB0aGUgc3djIEVtb3Rpb24gcGx1Z2luLCBvciBhbm90aGVyIEVtb3Rpb24tYXdhcmUgJyArICdjb21waWxlciB0cmFuc2Zvcm0uJztcblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbikge1xuICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGludGVycG9sYXRpb24uX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW50ZXJwb2xhdGlvbi50b1N0cmluZygpID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIGludGVycG9sYXRpb24pIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGludGVycG9sYXRpb24uYW5pbSA9PT0gMSkge1xuICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGludGVycG9sYXRpb24ubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczogaW50ZXJwb2xhdGlvbi5zdHlsZXMsXG4gICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBpbnRlcnBvbGF0aW9uLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBuZXh0ID0gaW50ZXJwb2xhdGlvbi5uZXh0O1xuXG4gICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyBldmVyIGJ1dCB0aGlzIGlzIGEgcHJldHR5IHJhcmUgY2FzZVxuICAgICAgICAgICAgLy8gYW5kIHRoZXJlIHdpbGwgYmUgdmVyeSBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGdlbmVyYWxseVxuICAgICAgICAgICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmV4dC5uYW1lLFxuICAgICAgICAgICAgICAgIHN0eWxlczogbmV4dC5zdHlsZXMsXG4gICAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlcyA9IGludGVycG9sYXRpb24uc3R5bGVzICsgXCI7XCI7XG5cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdHlsZXMgKz0gaW50ZXJwb2xhdGlvbi5tYXA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKG1lcmdlZFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNDdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVycG9sYXRpb24obWVyZ2VkUHJvcHMpO1xuICAgICAgICAgIGN1cnNvciA9IHByZXZpb3VzQ3Vyc29yO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCByZXN1bHQpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGdW5jdGlvbnMgdGhhdCBhcmUgaW50ZXJwb2xhdGVkIGluIGNzcyBjYWxscyB3aWxsIGJlIHN0cmluZ2lmaWVkLlxcbicgKyAnSWYgeW91IHdhbnQgdG8gaGF2ZSBhIGNzcyBjYWxsIGJhc2VkIG9uIHByb3BzLCBjcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjc3MgY2FsbCBsaWtlIHRoaXNcXG4nICsgJ2xldCBkeW5hbWljU3R5bGUgPSAocHJvcHMpID0+IGNzc2Bjb2xvcjogJHtwcm9wcy5jb2xvcn1gXFxuJyArICdJdCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IHdpdGggcHJvcHMgb3IgaW50ZXJwb2xhdGVkIGluIGEgc3R5bGVkIGNhbGwgbGlrZSB0aGlzXFxuJyArIFwibGV0IFNvbWVDb21wb25lbnQgPSBzdHlsZWQoJ2RpdicpYCR7ZHluYW1pY1N0eWxlfWBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFtdO1xuICAgICAgICB2YXIgcmVwbGFjZWQgPSBpbnRlcnBvbGF0aW9uLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgdmFyIGZha2VWYXJOYW1lID0gXCJhbmltYXRpb25cIiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICAgIG1hdGNoZWQucHVzaChcImNvbnN0IFwiICsgZmFrZVZhck5hbWUgKyBcIiA9IGtleWZyYW1lc2BcIiArIHAyLnJlcGxhY2UoL15Aa2V5ZnJhbWVzIGFuaW1hdGlvbi1cXHcrLywgJycpICsgXCJgXCIpO1xuICAgICAgICAgIHJldHVybiBcIiR7XCIgKyBmYWtlVmFyTmFtZSArIFwifVwiO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdga2V5ZnJhbWVzYCBvdXRwdXQgZ290IGludGVycG9sYXRlZCBpbnRvIHBsYWluIHN0cmluZywgcGxlYXNlIHdyYXAgaXQgd2l0aCBgY3NzYC5cXG5cXG4nICsgJ0luc3RlYWQgb2YgZG9pbmcgdGhpczpcXG5cXG4nICsgW10uY29uY2F0KG1hdGNoZWQsIFtcImBcIiArIHJlcGxhY2VkICsgXCJgXCJdKS5qb2luKCdcXG4nKSArICdcXG5cXG5Zb3Ugc2hvdWxkIHdyYXAgaXQgd2l0aCBgY3NzYCBsaWtlIHRoaXM6XFxuXFxuJyArIChcImNzc2BcIiArIHJlcGxhY2VkICsgXCJgXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfSAvLyBmaW5hbGl6ZSBzdHJpbmcgdmFsdWVzIChyZWd1bGFyIHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBpbnRlcnBvbGF0ZWQgaW50byBjc3MgY2FsbHMpXG5cblxuICBpZiAocmVnaXN0ZXJlZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGludGVycG9sYXRpb247XG4gIH1cblxuICB2YXIgY2FjaGVkID0gcmVnaXN0ZXJlZFtpbnRlcnBvbGF0aW9uXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogaW50ZXJwb2xhdGlvbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqKSB7XG4gIHZhciBzdHJpbmcgPSAnJztcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN0cmluZyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmpbaV0pICsgXCI7XCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9rZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpbX2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZWdpc3RlcmVkICE9IG51bGwgJiYgcmVnaXN0ZXJlZFt2YWx1ZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0cmluZyArPSBfa2V5ICsgXCJ7XCIgKyByZWdpc3RlcmVkW3ZhbHVlXSArIFwifVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWUpICsgXCI7XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChfa2V5ID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdzdHJpbmcnICYmIChyZWdpc3RlcmVkID09IG51bGwgfHwgcmVnaXN0ZXJlZFt2YWx1ZVswXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdmFsdWUubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlW19pXSkpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKF9rZXksIHZhbHVlW19pXSkgKyBcIjtcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGludGVycG9sYXRlZCA9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHZhbHVlKTtcblxuICAgICAgICAgIHN3aXRjaCAoX2tleSkge1xuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBfa2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqKDt8JCkvZztcbnZhciBzb3VyY2VNYXBQYXR0ZXJuO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzb3VyY2VNYXBQYXR0ZXJuID0gL1xcL1xcKiNcXHNzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb25cXC9qc29uO1xcUytcXHMrXFwqXFwvL2c7XG59IC8vIHRoaXMgaXMgdGhlIGN1cnNvciBmb3Iga2V5ZnJhbWVzXG4vLyBrZXlmcmFtZXMgYXJlIHN0b3JlZCBvbiB0aGUgU2VyaWFsaXplZFN0eWxlcyBvYmplY3QgYXMgYSBsaW5rZWQgbGlzdFxuXG5cbnZhciBjdXJzb3I7XG52YXIgc2VyaWFsaXplU3R5bGVzID0gZnVuY3Rpb24gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIHJlZ2lzdGVyZWQsIG1lcmdlZFByb3BzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcgJiYgYXJnc1swXSAhPT0gbnVsbCAmJiBhcmdzWzBdLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyZ3NbMF07XG4gIH1cblxuICB2YXIgc3RyaW5nTW9kZSA9IHRydWU7XG4gIHZhciBzdHlsZXMgPSAnJztcbiAgY3Vyc29yID0gdW5kZWZpbmVkO1xuICB2YXIgc3RyaW5ncyA9IGFyZ3NbMF07XG5cbiAgaWYgKHN0cmluZ3MgPT0gbnVsbCB8fCBzdHJpbmdzLnJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RyaW5nTW9kZSA9IGZhbHNlO1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBzdHJpbmdzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdHJpbmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IpO1xuICAgIH1cblxuICAgIHN0eWxlcyArPSBzdHJpbmdzWzBdO1xuICB9IC8vIHdlIHN0YXJ0IGF0IDEgc2luY2Ugd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBmaXJzdCBhcmdcblxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBhcmdzW2ldKTtcblxuICAgIGlmIChzdHJpbmdNb2RlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdHJpbmdzW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlcyArPSBzdHJpbmdzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzb3VyY2VNYXA7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBzdHlsZXMgPSBzdHlsZXMucmVwbGFjZShzb3VyY2VNYXBQYXR0ZXJuLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgIHNvdXJjZU1hcCA9IG1hdGNoO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xuICB9IC8vIHVzaW5nIGEgZ2xvYmFsIHJlZ2V4IHdpdGggLmV4ZWMgaXMgc3RhdGVmdWwgc28gbGFzdEluZGV4IGhhcyB0byBiZSByZXNldCBlYWNoIHRpbWVcblxuXG4gIGxhYmVsUGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICB2YXIgaWRlbnRpZmllck5hbWUgPSAnJztcbiAgdmFyIG1hdGNoOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViODA5YzJjZjI5NDk4MDBhMGY2MWZiNVxuXG4gIHdoaWxlICgobWF0Y2ggPSBsYWJlbFBhdHRlcm4uZXhlYyhzdHlsZXMpKSAhPT0gbnVsbCkge1xuICAgIGlkZW50aWZpZXJOYW1lICs9ICctJyArIC8vICRGbG93Rml4TWUgd2Uga25vdyBpdCdzIG5vdCBudWxsXG4gICAgbWF0Y2hbMV07XG4gIH1cblxuICB2YXIgbmFtZSA9IGhhc2hTdHJpbmcoc3R5bGVzKSArIGlkZW50aWZpZXJOYW1lO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gJEZsb3dGaXhNZSBTZXJpYWxpemVkU3R5bGVzIHR5cGUgZG9lc24ndCBoYXZlIHRvU3RyaW5nIHByb3BlcnR5IChhbmQgd2UgZG9uJ3Qgd2FudCB0byBhZGQgaXQpXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICAgIG1hcDogc291cmNlTWFwLFxuICAgICAgbmV4dDogY3Vyc29yLFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICBuZXh0OiBjdXJzb3JcbiAgfTtcbn07XG5cbmV4cG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9O1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG52YXIgc3luY0ZhbGxiYWNrID0gZnVuY3Rpb24gc3luY0ZhbGxiYWNrKGNyZWF0ZSkge1xuICByZXR1cm4gY3JlYXRlKCk7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IGZhbHNlO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgPSAgdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IHN5bmNGYWxsYmFjaztcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgdXNlTGF5b3V0RWZmZWN0O1xuXG5leHBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgfTtcbiIsInZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gKyBcIjtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhd0NsYXNzTmFtZSArPSBjbGFzc05hbWUgKyBcIiBcIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmF3Q2xhc3NOYW1lO1xufVxudmFyIHJlZ2lzdGVyU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG59O1xudmFyIGluc2VydFN0eWxlcyA9IGZ1bmN0aW9uIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY3VycmVudCA9IHNlcmlhbGl6ZWQ7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgbWF5YmVTdHlsZXMgPSBjYWNoZS5pbnNlcnQoc2VyaWFsaXplZCA9PT0gY3VycmVudCA/IFwiLlwiICsgY2xhc3NOYW1lIDogJycsIGN1cnJlbnQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcblxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9IHdoaWxlIChjdXJyZW50ICE9PSB1bmRlZmluZWQpO1xuICB9XG59O1xuXG5leHBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzIH07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG5cbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcblxudmFyIF9kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBoLTR2NGgtMnYtNEg3di0yaDRWN2gydjRoNHYyelwiXG59KSwgJ0FkZEJveCcpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG5cbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcblxudmFyIF9kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTB2LTJINHYtNmgxOFY2YzAtMS4xMS0uODktMi0yLTJ6bTAgNEg0VjZoMTZ2MnptNCA5djJoLTN2M2gtMnYtM2gtM3YtMmgzdi0zaDJ2M2gzelwiXG59KSwgJ0FkZENhcmQnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNSAxNEg3di0yaDd2MnptMy00SDd2LTJoMTB2MnptMC00SDdWN2gxMHYyelwiXG59KSwgJ0FydGljbGUnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KShbLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2elwiXG59LCBcIjBcIiksIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk0yMCAySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptMCAxMC0yLjUtMS41TDE1IDEyVjRoNXY4elwiXG59LCBcIjFcIildLCAnQ29sbGVjdGlvbnNCb29rbWFyaycpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG5cbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcblxudmFyIF9kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6XCJcbn0pLCAnQ29udGVudENvcHknKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yem0wIDE0SDR2LTZoMTZ2NnptMC0xMEg0VjZoMTZ2MnpcIlxufSksICdDcmVkaXRDYXJkJyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcblxudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6XCJcbn0pLCAnRGVsZXRlJyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcblxudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMiAxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6XCJcbn0pLCAnRGVsZXRlRm9yZXZlcicpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG5cbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcblxudmFyIF9kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJtMTggNy0xLjQxLTEuNDEtNi4zNCA2LjM0IDEuNDEgMS40MUwxOCA3em00LjI0LTEuNDFMMTEuNjYgMTYuMTcgNy40OCAxMmwtMS40MSAxLjQxTDExLjY2IDE5bDEyLTEyLTEuNDItMS40MXpNLjQxIDEzLjQxIDYgMTlsMS40MS0xLjQxTDEuODMgMTIgLjQxIDEzLjQxelwiXG59KSwgJ0RvbmVBbGwnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgUmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwicmVhY3RcIikpO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkgeyBpZiAodHlwZW9mIFdlYWtNYXAgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7IHZhciBjYWNoZUJhYmVsSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7IHZhciBjYWNoZU5vZGVJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAobm9kZUludGVyb3ApIHsgcmV0dXJuIG5vZGVJbnRlcm9wID8gY2FjaGVOb2RlSW50ZXJvcCA6IGNhY2hlQmFiZWxJbnRlcm9wOyB9KShub2RlSW50ZXJvcCk7IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqLCBub2RlSW50ZXJvcCkgeyBpZiAoIW5vZGVJbnRlcm9wICYmIG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHsgcmV0dXJuIHsgZGVmYXVsdDogb2JqIH07IH0gdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoa2V5ICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7IHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsOyBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7IH0gZWxzZSB7IG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSB9IG5ld09iai5kZWZhdWx0ID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEyIDEuMjdhMTEgMTEgMCAwMC0zLjQ4IDIxLjQ2Yy41NS4wOS43My0uMjguNzMtLjU1di0xLjg0Yy0zLjAzLjY0LTMuNjctMS40Ni0zLjY3LTEuNDYtLjU1LTEuMjktMS4yOC0xLjY1LTEuMjgtMS42NS0uOTItLjY1LjEtLjY1LjEtLjY1IDEuMSAwIDEuNzMgMS4xIDEuNzMgMS4xLjkyIDEuNjUgMi41NyAxLjIgMy4yMS45MmEyIDIgMCAwMS42NC0xLjQ3Yy0yLjQ3LS4yNy01LjA0LTEuMTktNS4wNC01LjUgMC0xLjEuNDYtMi4xIDEuMi0yLjg0YTMuNzYgMy43NiAwIDAxMC0yLjkzcy45MS0uMjggMy4xMSAxLjFjMS44LS40OSAzLjctLjQ5IDUuNSAwIDIuMS0xLjM4IDMuMDItMS4xIDMuMDItMS4xYTMuNzYgMy43NiAwIDAxMCAyLjkzYy44My43NCAxLjIgMS43NCAxLjIgMi45NCAwIDQuMjEtMi41NyA1LjEzLTUuMDQgNS40LjQ1LjM3LjgyLjkyLjgyIDIuMDJ2My4wM2MwIC4yNy4xLjY0LjczLjU1QTExIDExIDAgMDAxMiAxLjI3XCJcbn0pLCAnR2l0SHViJyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcblxudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6XCJcbn0pLCAnSG9tZScpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG5cbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcblxudmFyIF9kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFzLTIuNC44NC0yLjgyIDJINWMtLjE0IDAtLjI3LjAxLS40LjA0LS4zOS4wOC0uNzQuMjgtMS4wMS41NS0uMTguMTgtLjMzLjQtLjQzLjY0LS4xLjIzLS4xNi40OS0uMTYuNzd2MTRjMCAuMjcuMDYuNTQuMTYuNzhzLjI1LjQ1LjQzLjY0Yy4yNy4yNy42Mi40NyAxLjAxLjU1LjEzLjAyLjI2LjAzLjQuMDNoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTggMTEuMTctMS40MSAxLjQyTDYgMTJsMy41OS0zLjU5TDExIDkuODMgOC44MyAxMiAxMSAxNC4xN3ptMS05LjkyYy0uNDEgMC0uNzUtLjM0LS43NS0uNzVzLjM0LS43NS43NS0uNzUuNzUuMzQuNzUuNzUtLjM0Ljc1LS43NS43NXptMi40MSAxMS4zNEwxMyAxNC4xNyAxNS4xNyAxMiAxMyA5LjgzbDEuNDEtMS40MkwxOCAxMmwtMy41OSAzLjU5elwiXG59KSwgJ0ludGVncmF0aW9uSW5zdHJ1Y3Rpb25zJyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcblxudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk0xMSA3IDkuNiA4LjRsMi42IDIuNkgydjJoMTAuMmwtMi42IDIuNkwxMSAxN2w1LTUtNS01em05IDEyaC04djJoOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yaC04djJoOHYxNHpcIlxufSksICdMb2dpbicpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG5cbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcblxudmFyIF9kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJtMTcgNy0xLjQxIDEuNDFMMTguMTcgMTFIOHYyaDEwLjE3bC0yLjU4IDIuNThMMTcgMTdsNS01ek00IDVoOFYzSDRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoOHYtMkg0VjV6XCJcbn0pLCAnTG9nb3V0Jyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcblxudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHpcIlxufSksICdTYXZlJyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbHMuY3JlYXRlU3ZnSWNvbjtcbiAgfVxufSk7XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiQG11aS9tYXRlcmlhbC91dGlsc1wiKTsiLCJjb25zdCBjb21tb24gPSB7XG4gIGJsYWNrOiAnIzAwMCcsXG4gIHdoaXRlOiAnI2ZmZidcbn07XG5leHBvcnQgZGVmYXVsdCBjb21tb247IiwiY29uc3QgZ3JleSA9IHtcbiAgNTA6ICcjZmFmYWZhJyxcbiAgMTAwOiAnI2Y1ZjVmNScsXG4gIDIwMDogJyNlZWVlZWUnLFxuICAzMDA6ICcjZTBlMGUwJyxcbiAgNDAwOiAnI2JkYmRiZCcsXG4gIDUwMDogJyM5ZTllOWUnLFxuICA2MDA6ICcjNzU3NTc1JyxcbiAgNzAwOiAnIzYxNjE2MScsXG4gIDgwMDogJyM0MjQyNDInLFxuICA5MDA6ICcjMjEyMTIxJyxcbiAgQTEwMDogJyNmNWY1ZjUnLFxuICBBMjAwOiAnI2VlZWVlZScsXG4gIEE0MDA6ICcjYmRiZGJkJyxcbiAgQTcwMDogJyM2MTYxNjEnXG59O1xuZXhwb3J0IGRlZmF1bHQgZ3JleTsiLCJjb25zdCBwdXJwbGUgPSB7XG4gIDUwOiAnI2YzZTVmNScsXG4gIDEwMDogJyNlMWJlZTcnLFxuICAyMDA6ICcjY2U5M2Q4JyxcbiAgMzAwOiAnI2JhNjhjOCcsXG4gIDQwMDogJyNhYjQ3YmMnLFxuICA1MDA6ICcjOWMyN2IwJyxcbiAgNjAwOiAnIzhlMjRhYScsXG4gIDcwMDogJyM3YjFmYTInLFxuICA4MDA6ICcjNmExYjlhJyxcbiAgOTAwOiAnIzRhMTQ4YycsXG4gIEExMDA6ICcjZWE4MGZjJyxcbiAgQTIwMDogJyNlMDQwZmInLFxuICBBNDAwOiAnI2Q1MDBmOScsXG4gIEE3MDA6ICcjYWEwMGZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IHB1cnBsZTsiLCJjb25zdCByZWQgPSB7XG4gIDUwOiAnI2ZmZWJlZScsXG4gIDEwMDogJyNmZmNkZDInLFxuICAyMDA6ICcjZWY5YTlhJyxcbiAgMzAwOiAnI2U1NzM3MycsXG4gIDQwMDogJyNlZjUzNTAnLFxuICA1MDA6ICcjZjQ0MzM2JyxcbiAgNjAwOiAnI2U1MzkzNScsXG4gIDcwMDogJyNkMzJmMmYnLFxuICA4MDA6ICcjYzYyODI4JyxcbiAgOTAwOiAnI2I3MWMxYycsXG4gIEExMDA6ICcjZmY4YTgwJyxcbiAgQTIwMDogJyNmZjUyNTInLFxuICBBNDAwOiAnI2ZmMTc0NCcsXG4gIEE3MDA6ICcjZDUwMDAwJ1xufTtcbmV4cG9ydCBkZWZhdWx0IHJlZDsiLCJjb25zdCBvcmFuZ2UgPSB7XG4gIDUwOiAnI2ZmZjNlMCcsXG4gIDEwMDogJyNmZmUwYjInLFxuICAyMDA6ICcjZmZjYzgwJyxcbiAgMzAwOiAnI2ZmYjc0ZCcsXG4gIDQwMDogJyNmZmE3MjYnLFxuICA1MDA6ICcjZmY5ODAwJyxcbiAgNjAwOiAnI2ZiOGMwMCcsXG4gIDcwMDogJyNmNTdjMDAnLFxuICA4MDA6ICcjZWY2YzAwJyxcbiAgOTAwOiAnI2U2NTEwMCcsXG4gIEExMDA6ICcjZmZkMTgwJyxcbiAgQTIwMDogJyNmZmFiNDAnLFxuICBBNDAwOiAnI2ZmOTEwMCcsXG4gIEE3MDA6ICcjZmY2ZDAwJ1xufTtcbmV4cG9ydCBkZWZhdWx0IG9yYW5nZTsiLCJjb25zdCBibHVlID0ge1xuICA1MDogJyNlM2YyZmQnLFxuICAxMDA6ICcjYmJkZWZiJyxcbiAgMjAwOiAnIzkwY2FmOScsXG4gIDMwMDogJyM2NGI1ZjYnLFxuICA0MDA6ICcjNDJhNWY1JyxcbiAgNTAwOiAnIzIxOTZmMycsXG4gIDYwMDogJyMxZTg4ZTUnLFxuICA3MDA6ICcjMTk3NmQyJyxcbiAgODAwOiAnIzE1NjVjMCcsXG4gIDkwMDogJyMwZDQ3YTEnLFxuICBBMTAwOiAnIzgyYjFmZicsXG4gIEEyMDA6ICcjNDQ4YWZmJyxcbiAgQTQwMDogJyMyOTc5ZmYnLFxuICBBNzAwOiAnIzI5NjJmZidcbn07XG5leHBvcnQgZGVmYXVsdCBibHVlOyIsImNvbnN0IGxpZ2h0Qmx1ZSA9IHtcbiAgNTA6ICcjZTFmNWZlJyxcbiAgMTAwOiAnI2IzZTVmYycsXG4gIDIwMDogJyM4MWQ0ZmEnLFxuICAzMDA6ICcjNGZjM2Y3JyxcbiAgNDAwOiAnIzI5YjZmNicsXG4gIDUwMDogJyMwM2E5ZjQnLFxuICA2MDA6ICcjMDM5YmU1JyxcbiAgNzAwOiAnIzAyODhkMScsXG4gIDgwMDogJyMwMjc3YmQnLFxuICA5MDA6ICcjMDE1NzliJyxcbiAgQTEwMDogJyM4MGQ4ZmYnLFxuICBBMjAwOiAnIzQwYzRmZicsXG4gIEE0MDA6ICcjMDBiMGZmJyxcbiAgQTcwMDogJyMwMDkxZWEnXG59O1xuZXhwb3J0IGRlZmF1bHQgbGlnaHRCbHVlOyIsImNvbnN0IGdyZWVuID0ge1xuICA1MDogJyNlOGY1ZTknLFxuICAxMDA6ICcjYzhlNmM5JyxcbiAgMjAwOiAnI2E1ZDZhNycsXG4gIDMwMDogJyM4MWM3ODQnLFxuICA0MDA6ICcjNjZiYjZhJyxcbiAgNTAwOiAnIzRjYWY1MCcsXG4gIDYwMDogJyM0M2EwNDcnLFxuICA3MDA6ICcjMzg4ZTNjJyxcbiAgODAwOiAnIzJlN2QzMicsXG4gIDkwMDogJyMxYjVlMjAnLFxuICBBMTAwOiAnI2I5ZjZjYScsXG4gIEEyMDA6ICcjNjlmMGFlJyxcbiAgQTQwMDogJyMwMGU2NzYnLFxuICBBNzAwOiAnIzAwYzg1Mydcbn07XG5leHBvcnQgZGVmYXVsdCBncmVlbjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IHsgZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGFzIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgfSBmcm9tIFwiQG11aS91dGlsc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wibW9kZVwiLCBcImNvbnRyYXN0VGhyZXNob2xkXCIsIFwidG9uYWxPZmZzZXRcIl07XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGRhcmtlbiwgZ2V0Q29udHJhc3RSYXRpbywgbGlnaHRlbiB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBjb21tb24gZnJvbSAnLi4vY29sb3JzL2NvbW1vbic7XG5pbXBvcnQgZ3JleSBmcm9tICcuLi9jb2xvcnMvZ3JleSc7XG5pbXBvcnQgcHVycGxlIGZyb20gJy4uL2NvbG9ycy9wdXJwbGUnO1xuaW1wb3J0IHJlZCBmcm9tICcuLi9jb2xvcnMvcmVkJztcbmltcG9ydCBvcmFuZ2UgZnJvbSAnLi4vY29sb3JzL29yYW5nZSc7XG5pbXBvcnQgYmx1ZSBmcm9tICcuLi9jb2xvcnMvYmx1ZSc7XG5pbXBvcnQgbGlnaHRCbHVlIGZyb20gJy4uL2NvbG9ycy9saWdodEJsdWUnO1xuaW1wb3J0IGdyZWVuIGZyb20gJy4uL2NvbG9ycy9ncmVlbic7XG5leHBvcnQgY29uc3QgbGlnaHQgPSB7XG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgdGV4dC5cbiAgdGV4dDoge1xuICAgIC8vIFRoZSBtb3N0IGltcG9ydGFudCB0ZXh0LlxuICAgIHByaW1hcnk6ICdyZ2JhKDAsIDAsIDAsIDAuODcpJyxcbiAgICAvLyBTZWNvbmRhcnkgdGV4dC5cbiAgICBzZWNvbmRhcnk6ICdyZ2JhKDAsIDAsIDAsIDAuNiknLFxuICAgIC8vIERpc2FibGVkIHRleHQgaGF2ZSBldmVuIGxvd2VyIHZpc3VhbCBwcm9taW5lbmNlLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjM4KSdcbiAgfSxcbiAgLy8gVGhlIGNvbG9yIHVzZWQgdG8gZGl2aWRlIGRpZmZlcmVudCBlbGVtZW50cy5cbiAgZGl2aWRlcjogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgc3VyZmFjZXMuXG4gIC8vIENvbnNpc3RlbmN5IGJldHdlZW4gdGhlc2UgdmFsdWVzIGlzIGltcG9ydGFudC5cbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiBjb21tb24ud2hpdGUsXG4gICAgZGVmYXVsdDogY29tbW9uLndoaXRlXG4gIH0sXG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgYWN0aW9uIGVsZW1lbnRzLlxuICBhY3Rpb246IHtcbiAgICAvLyBUaGUgY29sb3Igb2YgYW4gYWN0aXZlIGFjdGlvbiBsaWtlIGFuIGljb24gYnV0dG9uLlxuICAgIGFjdGl2ZTogJ3JnYmEoMCwgMCwgMCwgMC41NCknLFxuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBob3ZlcmVkIGFjdGlvbi5cbiAgICBob3ZlcjogJ3JnYmEoMCwgMCwgMCwgMC4wNCknLFxuICAgIGhvdmVyT3BhY2l0eTogMC4wNCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBzZWxlY3RlZCBhY3Rpb24uXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMDgsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGEgZGlzYWJsZWQgYWN0aW9uLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjI2KScsXG4gICAgLy8gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWRCYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZGlzYWJsZWRPcGFjaXR5OiAwLjM4LFxuICAgIGZvY3VzOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZm9jdXNPcGFjaXR5OiAwLjEyLFxuICAgIGFjdGl2YXRlZE9wYWNpdHk6IDAuMTJcbiAgfVxufTtcbmV4cG9ydCBjb25zdCBkYXJrID0ge1xuICB0ZXh0OiB7XG4gICAgcHJpbWFyeTogY29tbW9uLndoaXRlLFxuICAgIHNlY29uZGFyeTogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KScsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknLFxuICAgIGljb246ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknXG4gIH0sXG4gIGRpdmlkZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiAnIzEyMTIxMicsXG4gICAgZGVmYXVsdDogJyMxMjEyMTInXG4gIH0sXG4gIGFjdGlvbjoge1xuICAgIGFjdGl2ZTogY29tbW9uLndoaXRlLFxuICAgIGhvdmVyOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA4LFxuICAgIHNlbGVjdGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KScsXG4gICAgc2VsZWN0ZWRPcGFjaXR5OiAwLjE2LFxuICAgIGRpc2FibGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpJyxcbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4yNFxuICB9XG59O1xuXG5mdW5jdGlvbiBhZGRMaWdodE9yRGFyayhpbnRlbnQsIGRpcmVjdGlvbiwgc2hhZGUsIHRvbmFsT2Zmc2V0KSB7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0TGlnaHQgPSB0b25hbE9mZnNldC5saWdodCB8fCB0b25hbE9mZnNldDtcbiAgY29uc3QgdG9uYWxPZmZzZXREYXJrID0gdG9uYWxPZmZzZXQuZGFyayB8fCB0b25hbE9mZnNldCAqIDEuNTtcblxuICBpZiAoIWludGVudFtkaXJlY3Rpb25dKSB7XG4gICAgaWYgKGludGVudC5oYXNPd25Qcm9wZXJ0eShzaGFkZSkpIHtcbiAgICAgIGludGVudFtkaXJlY3Rpb25dID0gaW50ZW50W3NoYWRlXTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xpZ2h0Jykge1xuICAgICAgaW50ZW50LmxpZ2h0ID0gbGlnaHRlbihpbnRlbnQubWFpbiwgdG9uYWxPZmZzZXRMaWdodCk7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdkYXJrJykge1xuICAgICAgaW50ZW50LmRhcmsgPSBkYXJrZW4oaW50ZW50Lm1haW4sIHRvbmFsT2Zmc2V0RGFyayk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRQcmltYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogYmx1ZVsyMDBdLFxuICAgICAgbGlnaHQ6IGJsdWVbNTBdLFxuICAgICAgZGFyazogYmx1ZVs0MDBdXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWFpbjogYmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBibHVlWzQwMF0sXG4gICAgZGFyazogYmx1ZVs4MDBdXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRTZWNvbmRhcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBwdXJwbGVbMjAwXSxcbiAgICAgIGxpZ2h0OiBwdXJwbGVbNTBdLFxuICAgICAgZGFyazogcHVycGxlWzQwMF1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBwdXJwbGVbNTAwXSxcbiAgICBsaWdodDogcHVycGxlWzMwMF0sXG4gICAgZGFyazogcHVycGxlWzcwMF1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEVycm9yKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcmVkWzUwMF0sXG4gICAgICBsaWdodDogcmVkWzMwMF0sXG4gICAgICBkYXJrOiByZWRbNzAwXVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1haW46IHJlZFs3MDBdLFxuICAgIGxpZ2h0OiByZWRbNDAwXSxcbiAgICBkYXJrOiByZWRbODAwXVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0SW5mbyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGxpZ2h0Qmx1ZVs0MDBdLFxuICAgICAgbGlnaHQ6IGxpZ2h0Qmx1ZVszMDBdLFxuICAgICAgZGFyazogbGlnaHRCbHVlWzcwMF1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBsaWdodEJsdWVbNzAwXSxcbiAgICBsaWdodDogbGlnaHRCbHVlWzUwMF0sXG4gICAgZGFyazogbGlnaHRCbHVlWzkwMF1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFN1Y2Nlc3MobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBncmVlbls0MDBdLFxuICAgICAgbGlnaHQ6IGdyZWVuWzMwMF0sXG4gICAgICBkYXJrOiBncmVlbls3MDBdXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWFpbjogZ3JlZW5bODAwXSxcbiAgICBsaWdodDogZ3JlZW5bNTAwXSxcbiAgICBkYXJrOiBncmVlbls5MDBdXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRXYXJuaW5nKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogb3JhbmdlWzQwMF0sXG4gICAgICBsaWdodDogb3JhbmdlWzMwMF0sXG4gICAgICBkYXJrOiBvcmFuZ2VbNzAwXVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1haW46ICcjZWQ2YzAyJyxcbiAgICAvLyBjbG9zZXN0IHRvIG9yYW5nZVs4MDBdIHRoYXQgcGFzcyAzOjEuXG4gICAgbGlnaHQ6IG9yYW5nZVs1MDBdLFxuICAgIGRhcms6IG9yYW5nZVs5MDBdXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVBhbGV0dGUocGFsZXR0ZSkge1xuICBjb25zdCB7XG4gICAgbW9kZSA9ICdsaWdodCcsXG4gICAgY29udHJhc3RUaHJlc2hvbGQgPSAzLFxuICAgIHRvbmFsT2Zmc2V0ID0gMC4yXG4gIH0gPSBwYWxldHRlLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhbGV0dGUsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgcHJpbWFyeSA9IHBhbGV0dGUucHJpbWFyeSB8fCBnZXREZWZhdWx0UHJpbWFyeShtb2RlKTtcbiAgY29uc3Qgc2Vjb25kYXJ5ID0gcGFsZXR0ZS5zZWNvbmRhcnkgfHwgZ2V0RGVmYXVsdFNlY29uZGFyeShtb2RlKTtcbiAgY29uc3QgZXJyb3IgPSBwYWxldHRlLmVycm9yIHx8IGdldERlZmF1bHRFcnJvcihtb2RlKTtcbiAgY29uc3QgaW5mbyA9IHBhbGV0dGUuaW5mbyB8fCBnZXREZWZhdWx0SW5mbyhtb2RlKTtcbiAgY29uc3Qgc3VjY2VzcyA9IHBhbGV0dGUuc3VjY2VzcyB8fCBnZXREZWZhdWx0U3VjY2Vzcyhtb2RlKTtcbiAgY29uc3Qgd2FybmluZyA9IHBhbGV0dGUud2FybmluZyB8fCBnZXREZWZhdWx0V2FybmluZyhtb2RlKTsgLy8gVXNlIHRoZSBzYW1lIGxvZ2ljIGFzXG4gIC8vIEJvb3RzdHJhcDogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvMWQ2ZTM3MTBkZDQ0N2RlMWEyMDBmMjllOGZhNTIxZjhhMDkwOGY3MC9zY3NzL19mdW5jdGlvbnMuc2NzcyNMNTlcbiAgLy8gYW5kIG1hdGVyaWFsLWNvbXBvbmVudHMtd2ViIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYWM0NmI4ODYzYzRkYWI5ZmMyMmM0YzY2MmRjNmJkMWI2NWRkNjUyZi9wYWNrYWdlcy9tZGMtdGhlbWUvX2Z1bmN0aW9ucy5zY3NzI0w1NFxuXG4gIGZ1bmN0aW9uIGdldENvbnRyYXN0VGV4dChiYWNrZ3JvdW5kKSB7XG4gICAgY29uc3QgY29udHJhc3RUZXh0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBkYXJrLnRleHQucHJpbWFyeSkgPj0gY29udHJhc3RUaHJlc2hvbGQgPyBkYXJrLnRleHQucHJpbWFyeSA6IGxpZ2h0LnRleHQucHJpbWFyeTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBjb250cmFzdCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgY29udHJhc3RUZXh0KTtcblxuICAgICAgaWYgKGNvbnRyYXN0IDwgMykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgY29udHJhc3QgcmF0aW8gb2YgJHtjb250cmFzdH06MSBmb3IgJHtjb250cmFzdFRleHR9IG9uICR7YmFja2dyb3VuZH1gLCAnZmFsbHMgYmVsb3cgdGhlIFdDQUcgcmVjb21tZW5kZWQgYWJzb2x1dGUgbWluaW11bSBjb250cmFzdCByYXRpbyBvZiAzOjEuJywgJ2h0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdCddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udHJhc3RUZXh0O1xuICB9XG5cbiAgY29uc3QgYXVnbWVudENvbG9yID0gKHtcbiAgICBjb2xvcixcbiAgICBuYW1lLFxuICAgIG1haW5TaGFkZSA9IDUwMCxcbiAgICBsaWdodFNoYWRlID0gMzAwLFxuICAgIGRhcmtTaGFkZSA9IDcwMFxuICB9KSA9PiB7XG4gICAgY29sb3IgPSBfZXh0ZW5kcyh7fSwgY29sb3IpO1xuXG4gICAgaWYgKCFjb2xvci5tYWluICYmIGNvbG9yW21haW5TaGFkZV0pIHtcbiAgICAgIGNvbG9yLm1haW4gPSBjb2xvclttYWluU2hhZGVdO1xuICAgIH1cblxuICAgIGlmICghY29sb3IuaGFzT3duUHJvcGVydHkoJ21haW4nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5UaGUgY29sb3Igb2JqZWN0IG5lZWRzIHRvIGhhdmUgYSBcXGBtYWluXFxgIHByb3BlcnR5IG9yIGEgXFxgJHttYWluU2hhZGV9XFxgIHByb3BlcnR5LmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDExLCBuYW1lID8gYCAoJHtuYW1lfSlgIDogJycsIG1haW5TaGFkZSkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29sb3IubWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuXFxgY29sb3IubWFpblxcYCBzaG91bGQgYmUgYSBzdHJpbmcsIGJ1dCBcXGAke0pTT04uc3RyaW5naWZ5KGNvbG9yLm1haW4pfVxcYCB3YXMgcHJvdmlkZWQgaW5zdGVhZC5cblxuRGlkIHlvdSBpbnRlbmQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFwcHJvYWNoZXM/XG5cbmltcG9ydCB7IGdyZWVuIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvY29sb3JzXCI7XG5cbmNvbnN0IHRoZW1lMSA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiBncmVlbixcbn0gfSk7XG5cbmNvbnN0IHRoZW1lMiA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiB7IG1haW46IGdyZWVuWzUwMF0gfSxcbn0gfSk7YCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTIsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgSlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbikpKTtcbiAgICB9XG5cbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2xpZ2h0JywgbGlnaHRTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnZGFyaycsIGRhcmtTaGFkZSwgdG9uYWxPZmZzZXQpO1xuXG4gICAgaWYgKCFjb2xvci5jb250cmFzdFRleHQpIHtcbiAgICAgIGNvbG9yLmNvbnRyYXN0VGV4dCA9IGdldENvbnRyYXN0VGV4dChjb2xvci5tYWluKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sb3I7XG4gIH07XG5cbiAgY29uc3QgbW9kZXMgPSB7XG4gICAgZGFyayxcbiAgICBsaWdodFxuICB9O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCFtb2Rlc1ttb2RlXSkge1xuICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUaGUgcGFsZXR0ZSBtb2RlIFxcYCR7bW9kZX1cXGAgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwYWxldHRlT3V0cHV0ID0gZGVlcG1lcmdlKF9leHRlbmRzKHtcbiAgICAvLyBBIGNvbGxlY3Rpb24gb2YgY29tbW9uIGNvbG9ycy5cbiAgICBjb21tb246IF9leHRlbmRzKHt9LCBjb21tb24pLFxuICAgIC8vIHByZXZlbnQgbXV0YWJsZSBvYmplY3QuXG4gICAgLy8gVGhlIHBhbGV0dGUgbW9kZSwgY2FuIGJlIGxpZ2h0IG9yIGRhcmsuXG4gICAgbW9kZSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHByaW1hcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgcHJpbWFyeTogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBwcmltYXJ5LFxuICAgICAgbmFtZTogJ3ByaW1hcnknXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBzZWNvbmRhcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgc2Vjb25kYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHNlY29uZGFyeSxcbiAgICAgIG5hbWU6ICdzZWNvbmRhcnknLFxuICAgICAgbWFpblNoYWRlOiAnQTQwMCcsXG4gICAgICBsaWdodFNoYWRlOiAnQTIwMCcsXG4gICAgICBkYXJrU2hhZGU6ICdBNzAwJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgaW50ZXJmYWNlIGVsZW1lbnRzIHRoYXQgdGhlIHVzZXIgc2hvdWxkIGJlIG1hZGUgYXdhcmUgb2YuXG4gICAgZXJyb3I6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogZXJyb3IsXG4gICAgICBuYW1lOiAnZXJyb3InXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgYWN0aW9ucyBvciBpbXBvcnRhbnQgbWVzc2FnZXMuXG4gICAgd2FybmluZzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiB3YXJuaW5nLFxuICAgICAgbmFtZTogJ3dhcm5pbmcnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHByZXNlbnQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgdGhhdCBpcyBuZXV0cmFsIGFuZCBub3QgbmVjZXNzYXJpbHkgaW1wb3J0YW50LlxuICAgIGluZm86IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogaW5mbyxcbiAgICAgIG5hbWU6ICdpbmZvJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGFuIGFjdGlvbiB0aGF0IHVzZXIgdHJpZ2dlcmVkLlxuICAgIHN1Y2Nlc3M6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc3VjY2VzcyxcbiAgICAgIG5hbWU6ICdzdWNjZXNzJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBncmV5IGNvbG9ycy5cbiAgICBncmV5LFxuICAgIC8vIFVzZWQgYnkgYGdldENvbnRyYXN0VGV4dCgpYCB0byBtYXhpbWl6ZSB0aGUgY29udHJhc3QgYmV0d2VlblxuICAgIC8vIHRoZSBiYWNrZ3JvdW5kIGFuZCB0aGUgdGV4dC5cbiAgICBjb250cmFzdFRocmVzaG9sZCxcbiAgICAvLyBUYWtlcyBhIGJhY2tncm91bmQgY29sb3IgYW5kIHJldHVybnMgdGhlIHRleHQgY29sb3IgdGhhdCBtYXhpbWl6ZXMgdGhlIGNvbnRyYXN0LlxuICAgIGdldENvbnRyYXN0VGV4dCxcbiAgICAvLyBHZW5lcmF0ZSBhIHJpY2ggY29sb3Igb2JqZWN0LlxuICAgIGF1Z21lbnRDb2xvcixcbiAgICAvLyBVc2VkIGJ5IHRoZSBmdW5jdGlvbnMgYmVsb3cgdG8gc2hpZnQgYSBjb2xvcidzIGx1bWluYW5jZSBieSBhcHByb3hpbWF0ZWx5XG4gICAgLy8gdHdvIGluZGV4ZXMgd2l0aGluIGl0cyB0b25hbCBwYWxldHRlLlxuICAgIC8vIEUuZy4sIHNoaWZ0IGZyb20gUmVkIDUwMCB0byBSZWQgMzAwIG9yIFJlZCA3MDAuXG4gICAgdG9uYWxPZmZzZXRcbiAgfSwgbW9kZXNbbW9kZV0pLCBvdGhlcik7XG4gIHJldHVybiBwYWxldHRlT3V0cHV0O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJmb250RmFtaWx5XCIsIFwiZm9udFNpemVcIiwgXCJmb250V2VpZ2h0TGlnaHRcIiwgXCJmb250V2VpZ2h0UmVndWxhclwiLCBcImZvbnRXZWlnaHRNZWRpdW1cIiwgXCJmb250V2VpZ2h0Qm9sZFwiLCBcImh0bWxGb250U2l6ZVwiLCBcImFsbFZhcmlhbnRzXCIsIFwicHhUb1JlbVwiXTtcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuXG5mdW5jdGlvbiByb3VuZCh2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDFlNSkgLyAxZTU7XG59XG5cbmNvbnN0IGNhc2VBbGxDYXBzID0ge1xuICB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJ1xufTtcbmNvbnN0IGRlZmF1bHRGb250RmFtaWx5ID0gJ1wiUm9ib3RvXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgc2Fucy1zZXJpZic7XG4vKipcbiAqIEBzZWUgQGxpbmt7aHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vdHlwb2dyYXBoeS90aGUtdHlwZS1zeXN0ZW0uaHRtbH1cbiAqIEBzZWUgQGxpbmt7aHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vdHlwb2dyYXBoeS91bmRlcnN0YW5kaW5nLXR5cG9ncmFwaHkuaHRtbH1cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUeXBvZ3JhcGh5KHBhbGV0dGUsIHR5cG9ncmFwaHkpIHtcbiAgY29uc3QgX3JlZiA9IHR5cGVvZiB0eXBvZ3JhcGh5ID09PSAnZnVuY3Rpb24nID8gdHlwb2dyYXBoeShwYWxldHRlKSA6IHR5cG9ncmFwaHksXG4gICAgICAgIHtcbiAgICBmb250RmFtaWx5ID0gZGVmYXVsdEZvbnRGYW1pbHksXG4gICAgLy8gVGhlIGRlZmF1bHQgZm9udCBzaXplIG9mIHRoZSBNYXRlcmlhbCBTcGVjaWZpY2F0aW9uLlxuICAgIGZvbnRTaXplID0gMTQsXG4gICAgLy8gcHhcbiAgICBmb250V2VpZ2h0TGlnaHQgPSAzMDAsXG4gICAgZm9udFdlaWdodFJlZ3VsYXIgPSA0MDAsXG4gICAgZm9udFdlaWdodE1lZGl1bSA9IDUwMCxcbiAgICBmb250V2VpZ2h0Qm9sZCA9IDcwMCxcbiAgICAvLyBUZWxsIE1VSSB3aGF0J3MgdGhlIGZvbnQtc2l6ZSBvbiB0aGUgaHRtbCBlbGVtZW50LlxuICAgIC8vIDE2cHggaXMgdGhlIGRlZmF1bHQgZm9udC1zaXplIHVzZWQgYnkgYnJvd3NlcnMuXG4gICAgaHRtbEZvbnRTaXplID0gMTYsXG4gICAgLy8gQXBwbHkgdGhlIENTUyBwcm9wZXJ0aWVzIHRvIGFsbCB0aGUgdmFyaWFudHMuXG4gICAgYWxsVmFyaWFudHMsXG4gICAgcHhUb1JlbTogcHhUb1JlbTJcbiAgfSA9IF9yZWYsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgZm9udFNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBmb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBodG1sRm9udFNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBodG1sRm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvZWYgPSBmb250U2l6ZSAvIDE0O1xuXG4gIGNvbnN0IHB4VG9SZW0gPSBweFRvUmVtMiB8fCAoc2l6ZSA9PiBgJHtzaXplIC8gaHRtbEZvbnRTaXplICogY29lZn1yZW1gKTtcblxuICBjb25zdCBidWlsZFZhcmlhbnQgPSAoZm9udFdlaWdodCwgc2l6ZSwgbGluZUhlaWdodCwgbGV0dGVyU3BhY2luZywgY2FzaW5nKSA9PiBfZXh0ZW5kcyh7XG4gICAgZm9udEZhbWlseSxcbiAgICBmb250V2VpZ2h0LFxuICAgIGZvbnRTaXplOiBweFRvUmVtKHNpemUpLFxuICAgIC8vIFVuaXRsZXNzIGZvbGxvd2luZyBodHRwczovL21leWVyd2ViLmNvbS9lcmljL3Rob3VnaHRzLzIwMDYvMDIvMDgvdW5pdGxlc3MtbGluZS1oZWlnaHRzL1xuICAgIGxpbmVIZWlnaHRcbiAgfSwgZm9udEZhbWlseSA9PT0gZGVmYXVsdEZvbnRGYW1pbHkgPyB7XG4gICAgbGV0dGVyU3BhY2luZzogYCR7cm91bmQobGV0dGVyU3BhY2luZyAvIHNpemUpfWVtYFxuICB9IDoge30sIGNhc2luZywgYWxsVmFyaWFudHMpO1xuXG4gIGNvbnN0IHZhcmlhbnRzID0ge1xuICAgIGgxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA5NiwgMS4xNjcsIC0xLjUpLFxuICAgIGgyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA2MCwgMS4yLCAtMC41KSxcbiAgICBoMzogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCA0OCwgMS4xNjcsIDApLFxuICAgIGg0OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDM0LCAxLjIzNSwgMC4yNSksXG4gICAgaDU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMjQsIDEuMzM0LCAwKSxcbiAgICBoNjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDIwLCAxLjYsIDAuMTUpLFxuICAgIHN1YnRpdGxlMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS43NSwgMC4xNSksXG4gICAgc3VidGl0bGUyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNTcsIDAuMSksXG4gICAgYm9keTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNSwgMC4xNSksXG4gICAgYm9keTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTQsIDEuNDMsIDAuMTUpLFxuICAgIGJ1dHRvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjc1LCAwLjQsIGNhc2VBbGxDYXBzKSxcbiAgICBjYXB0aW9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAxLjY2LCAwLjQpLFxuICAgIG92ZXJsaW5lOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAyLjY2LCAxLCBjYXNlQWxsQ2FwcylcbiAgfTtcbiAgcmV0dXJuIGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgaHRtbEZvbnRTaXplLFxuICAgIHB4VG9SZW0sXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgICBmb250V2VpZ2h0TGlnaHQsXG4gICAgZm9udFdlaWdodFJlZ3VsYXIsXG4gICAgZm9udFdlaWdodE1lZGl1bSxcbiAgICBmb250V2VpZ2h0Qm9sZFxuICB9LCB2YXJpYW50cyksIG90aGVyLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcFxuXG4gIH0pO1xufSIsImNvbnN0IHNoYWRvd0tleVVtYnJhT3BhY2l0eSA9IDAuMjtcbmNvbnN0IHNoYWRvd0tleVBlbnVtYnJhT3BhY2l0eSA9IDAuMTQ7XG5jb25zdCBzaGFkb3dBbWJpZW50U2hhZG93T3BhY2l0eSA9IDAuMTI7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNoYWRvdyguLi5weCkge1xuICByZXR1cm4gW2Ake3B4WzBdfXB4ICR7cHhbMV19cHggJHtweFsyXX1weCAke3B4WzNdfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlVbWJyYU9wYWNpdHl9KWAsIGAke3B4WzRdfXB4ICR7cHhbNV19cHggJHtweFs2XX1weCAke3B4WzddfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHl9KWAsIGAke3B4WzhdfXB4ICR7cHhbOV19cHggJHtweFsxMF19cHggJHtweFsxMV19cHggcmdiYSgwLDAsMCwke3NoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5fSlgXS5qb2luKCcsJyk7XG59IC8vIFZhbHVlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYmU4NzQ3Zjk0NTc0NjY5Y2I1ZTdhZGQxYTdjNTRmYTQxYTg5Y2VjNy9wYWNrYWdlcy9tZGMtZWxldmF0aW9uL192YXJpYWJsZXMuc2Nzc1xuXG5cbmNvbnN0IHNoYWRvd3MgPSBbJ25vbmUnLCBjcmVhdGVTaGFkb3coMCwgMiwgMSwgLTEsIDAsIDEsIDEsIDAsIDAsIDEsIDMsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgMSwgLTIsIDAsIDIsIDIsIDAsIDAsIDEsIDUsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgMywgLTIsIDAsIDMsIDQsIDAsIDAsIDEsIDgsIDApLCBjcmVhdGVTaGFkb3coMCwgMiwgNCwgLTEsIDAsIDQsIDUsIDAsIDAsIDEsIDEwLCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA1LCA4LCAwLCAwLCAxLCAxNCwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCA1LCAtMSwgMCwgNiwgMTAsIDAsIDAsIDEsIDE4LCAwKSwgY3JlYXRlU2hhZG93KDAsIDQsIDUsIC0yLCAwLCA3LCAxMCwgMSwgMCwgMiwgMTYsIDEpLCBjcmVhdGVTaGFkb3coMCwgNSwgNSwgLTMsIDAsIDgsIDEwLCAxLCAwLCAzLCAxNCwgMiksIGNyZWF0ZVNoYWRvdygwLCA1LCA2LCAtMywgMCwgOSwgMTIsIDEsIDAsIDMsIDE2LCAyKSwgY3JlYXRlU2hhZG93KDAsIDYsIDYsIC0zLCAwLCAxMCwgMTQsIDEsIDAsIDQsIDE4LCAzKSwgY3JlYXRlU2hhZG93KDAsIDYsIDcsIC00LCAwLCAxMSwgMTUsIDEsIDAsIDQsIDIwLCAzKSwgY3JlYXRlU2hhZG93KDAsIDcsIDgsIC00LCAwLCAxMiwgMTcsIDIsIDAsIDUsIDIyLCA0KSwgY3JlYXRlU2hhZG93KDAsIDcsIDgsIC00LCAwLCAxMywgMTksIDIsIDAsIDUsIDI0LCA0KSwgY3JlYXRlU2hhZG93KDAsIDcsIDksIC00LCAwLCAxNCwgMjEsIDIsIDAsIDUsIDI2LCA0KSwgY3JlYXRlU2hhZG93KDAsIDgsIDksIC01LCAwLCAxNSwgMjIsIDIsIDAsIDYsIDI4LCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDEwLCAtNSwgMCwgMTYsIDI0LCAyLCAwLCA2LCAzMCwgNSksIGNyZWF0ZVNoYWRvdygwLCA4LCAxMSwgLTUsIDAsIDE3LCAyNiwgMiwgMCwgNiwgMzIsIDUpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTEsIC01LCAwLCAxOCwgMjgsIDIsIDAsIDcsIDM0LCA2KSwgY3JlYXRlU2hhZG93KDAsIDksIDEyLCAtNiwgMCwgMTksIDI5LCAyLCAwLCA3LCAzNiwgNiksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTMsIC02LCAwLCAyMCwgMzEsIDMsIDAsIDgsIDM4LCA3KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIxLCAzMywgMywgMCwgOCwgNDAsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDE0LCAtNiwgMCwgMjIsIDM1LCAzLCAwLCA4LCA0MiwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMSwgMTQsIC03LCAwLCAyMywgMzYsIDMsIDAsIDksIDQ0LCA4KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNSwgLTcsIDAsIDI0LCAzOCwgMywgMCwgOSwgNDYsIDgpXTtcbmV4cG9ydCBkZWZhdWx0IHNoYWRvd3M7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImR1cmF0aW9uXCIsIFwiZWFzaW5nXCIsIFwiZGVsYXlcIl07XG4vLyBGb2xsb3cgaHR0cHM6Ly9tYXRlcmlhbC5nb29nbGUuY29tL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctbmF0dXJhbC1lYXNpbmctY3VydmVzXG4vLyB0byBsZWFybiB0aGUgY29udGV4dCBpbiB3aGljaCBlYWNoIGVhc2luZyBzaG91bGQgYmUgdXNlZC5cbmV4cG9ydCBjb25zdCBlYXNpbmcgPSB7XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGVhc2luZyBjdXJ2ZS5cbiAgZWFzZUluT3V0OiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgZW50ZXIgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5IGZyb20gb2ZmLXNjcmVlbiBhbmRcbiAgLy8gc2xvd2x5IGRlY2VsZXJhdGUgdG8gYSByZXN0aW5nIHBvaW50LlxuICBlYXNlT3V0OiAnY3ViaWMtYmV6aWVyKDAuMCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgbGVhdmUgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5LiBUaGV5IGRvIG5vdCBkZWNlbGVyYXRlIHdoZW4gb2ZmLXNjcmVlbi5cbiAgZWFzZUluOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSknLFxuICAvLyBUaGUgc2hhcnAgY3VydmUgaXMgdXNlZCBieSBvYmplY3RzIHRoYXQgbWF5IHJldHVybiB0byB0aGUgc2NyZWVuIGF0IGFueSB0aW1lLlxuICBzaGFycDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSknXG59OyAvLyBGb2xsb3cgaHR0cHM6Ly9tYXRlcmlhbC5pby9ndWlkZWxpbmVzL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctY29tbW9uLWR1cmF0aW9uc1xuLy8gdG8gbGVhcm4gd2hlbiB1c2Ugd2hhdCB0aW1pbmdcblxuZXhwb3J0IGNvbnN0IGR1cmF0aW9uID0ge1xuICBzaG9ydGVzdDogMTUwLFxuICBzaG9ydGVyOiAyMDAsXG4gIHNob3J0OiAyNTAsXG4gIC8vIG1vc3QgYmFzaWMgcmVjb21tZW5kZWQgdGltaW5nXG4gIHN0YW5kYXJkOiAzMDAsXG4gIC8vIHRoaXMgaXMgdG8gYmUgdXNlZCBpbiBjb21wbGV4IGFuaW1hdGlvbnNcbiAgY29tcGxleDogMzc1LFxuICAvLyByZWNvbW1lbmRlZCB3aGVuIHNvbWV0aGluZyBpcyBlbnRlcmluZyBzY3JlZW5cbiAgZW50ZXJpbmdTY3JlZW46IDIyNSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgbGVhdmluZyBzY3JlZW5cbiAgbGVhdmluZ1NjcmVlbjogMTk1XG59O1xuXG5mdW5jdGlvbiBmb3JtYXRNcyhtaWxsaXNlY29uZHMpIHtcbiAgcmV0dXJuIGAke01hdGgucm91bmQobWlsbGlzZWNvbmRzKX1tc2A7XG59XG5cbmZ1bmN0aW9uIGdldEF1dG9IZWlnaHREdXJhdGlvbihoZWlnaHQpIHtcbiAgaWYgKCFoZWlnaHQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0IGNvbnN0YW50ID0gaGVpZ2h0IC8gMzY7IC8vIGh0dHBzOi8vd3d3LndvbGZyYW1hbHBoYS5jb20vaW5wdXQvP2k9KDQrJTJCKzE1KyorKHgrJTJGKzM2KykrKiorMC4yNSslMkIrKHgrJTJGKzM2KSslMkYrNSkrKisxMFxuXG4gIHJldHVybiBNYXRoLnJvdW5kKCg0ICsgMTUgKiBjb25zdGFudCAqKiAwLjI1ICsgY29uc3RhbnQgLyA1KSAqIDEwKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVHJhbnNpdGlvbnMoaW5wdXRUcmFuc2l0aW9ucykge1xuICBjb25zdCBtZXJnZWRFYXNpbmcgPSBfZXh0ZW5kcyh7fSwgZWFzaW5nLCBpbnB1dFRyYW5zaXRpb25zLmVhc2luZyk7XG5cbiAgY29uc3QgbWVyZ2VkRHVyYXRpb24gPSBfZXh0ZW5kcyh7fSwgZHVyYXRpb24sIGlucHV0VHJhbnNpdGlvbnMuZHVyYXRpb24pO1xuXG4gIGNvbnN0IGNyZWF0ZSA9IChwcm9wcyA9IFsnYWxsJ10sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbk9wdGlvbiA9IG1lcmdlZER1cmF0aW9uLnN0YW5kYXJkLFxuICAgICAgZWFzaW5nOiBlYXNpbmdPcHRpb24gPSBtZXJnZWRFYXNpbmcuZWFzZUluT3V0LFxuICAgICAgZGVsYXkgPSAwXG4gICAgfSA9IG9wdGlvbnMsXG4gICAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGlzU3RyaW5nID0gdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJzsgLy8gSUUxMSBzdXBwb3J0LCByZXBsYWNlIHdpdGggTnVtYmVyLmlzTmFOXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG5cblxuICAgICAgY29uc3QgaXNOdW1iZXIgPSB2YWx1ZSA9PiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpO1xuXG4gICAgICBpZiAoIWlzU3RyaW5nKHByb3BzKSAmJiAhQXJyYXkuaXNBcnJheShwcm9wcykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBBcmd1bWVudCBcInByb3BzXCIgbXVzdCBiZSBhIHN0cmluZyBvciBBcnJheS4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc051bWJlcihkdXJhdGlvbk9wdGlvbikgJiYgIWlzU3RyaW5nKGR1cmF0aW9uT3B0aW9uKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IEFyZ3VtZW50IFwiZHVyYXRpb25cIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nIGJ1dCBmb3VuZCAke2R1cmF0aW9uT3B0aW9ufS5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1N0cmluZyhlYXNpbmdPcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJlYXNpbmdcIiBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTnVtYmVyKGRlbGF5KSAmJiAhaXNTdHJpbmcoZGVsYXkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJkZWxheVwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdGhlcikubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVW5yZWNvZ25pemVkIGFyZ3VtZW50KHMpIFske09iamVjdC5rZXlzKG90aGVyKS5qb2luKCcsJyl9XS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkocHJvcHMpID8gcHJvcHMgOiBbcHJvcHNdKS5tYXAoYW5pbWF0ZWRQcm9wID0+IGAke2FuaW1hdGVkUHJvcH0gJHt0eXBlb2YgZHVyYXRpb25PcHRpb24gPT09ICdzdHJpbmcnID8gZHVyYXRpb25PcHRpb24gOiBmb3JtYXRNcyhkdXJhdGlvbk9wdGlvbil9ICR7ZWFzaW5nT3B0aW9ufSAke3R5cGVvZiBkZWxheSA9PT0gJ3N0cmluZycgPyBkZWxheSA6IGZvcm1hdE1zKGRlbGF5KX1gKS5qb2luKCcsJyk7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBnZXRBdXRvSGVpZ2h0RHVyYXRpb24sXG4gICAgY3JlYXRlXG4gIH0sIGlucHV0VHJhbnNpdGlvbnMsIHtcbiAgICBlYXNpbmc6IG1lcmdlZEVhc2luZyxcbiAgICBkdXJhdGlvbjogbWVyZ2VkRHVyYXRpb25cbiAgfSk7XG59IiwiLy8gV2UgbmVlZCB0byBjZW50cmFsaXplIHRoZSB6SW5kZXggZGVmaW5pdGlvbnMgYXMgdGhleSB3b3JrXG4vLyBsaWtlIGdsb2JhbCB2YWx1ZXMgaW4gdGhlIGJyb3dzZXIuXG5jb25zdCB6SW5kZXggPSB7XG4gIG1vYmlsZVN0ZXBwZXI6IDEwMDAsXG4gIGZhYjogMTA1MCxcbiAgc3BlZWREaWFsOiAxMDUwLFxuICBhcHBCYXI6IDExMDAsXG4gIGRyYXdlcjogMTIwMCxcbiAgbW9kYWw6IDEzMDAsXG4gIHNuYWNrYmFyOiAxNDAwLFxuICB0b29sdGlwOiAxNTAwXG59O1xuZXhwb3J0IGRlZmF1bHQgekluZGV4OyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgeyBmb3JtYXRNdWlFcnJvck1lc3NhZ2UgYXMgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSB9IGZyb20gXCJAbXVpL3V0aWxzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcIm1peGluc1wiLCBcInNwYWNpbmdcIiwgXCJwYWxldHRlXCIsIFwidHJhbnNpdGlvbnNcIiwgXCJ0eXBvZ3JhcGh5XCIsIFwic2hhcGVcIl07XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IGNyZWF0ZVRoZW1lIGFzIHN5c3RlbUNyZWF0ZVRoZW1lIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGNyZWF0ZU1peGlucyBmcm9tICcuL2NyZWF0ZU1peGlucyc7XG5pbXBvcnQgY3JlYXRlUGFsZXR0ZSBmcm9tICcuL2NyZWF0ZVBhbGV0dGUnO1xuaW1wb3J0IGNyZWF0ZVR5cG9ncmFwaHkgZnJvbSAnLi9jcmVhdGVUeXBvZ3JhcGh5JztcbmltcG9ydCBzaGFkb3dzIGZyb20gJy4vc2hhZG93cyc7XG5pbXBvcnQgY3JlYXRlVHJhbnNpdGlvbnMgZnJvbSAnLi9jcmVhdGVUcmFuc2l0aW9ucyc7XG5pbXBvcnQgekluZGV4IGZyb20gJy4vekluZGV4JztcblxuZnVuY3Rpb24gY3JlYXRlVGhlbWUob3B0aW9ucyA9IHt9LCAuLi5hcmdzKSB7XG4gIGNvbnN0IHtcbiAgICBtaXhpbnM6IG1peGluc0lucHV0ID0ge30sXG4gICAgcGFsZXR0ZTogcGFsZXR0ZUlucHV0ID0ge30sXG4gICAgdHJhbnNpdGlvbnM6IHRyYW5zaXRpb25zSW5wdXQgPSB7fSxcbiAgICB0eXBvZ3JhcGh5OiB0eXBvZ3JhcGh5SW5wdXQgPSB7fVxuICB9ID0gb3B0aW9ucyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuXG4gIGlmIChvcHRpb25zLnZhcnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogXFxgdmFyc1xcYCBpcyBhIHByaXZhdGUgZmllbGQgdXNlZCBmb3IgQ1NTIHZhcmlhYmxlcyBzdXBwb3J0LlxuUGxlYXNlIHVzZSBhbm90aGVyIG5hbWUuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTgpKTtcbiAgfVxuXG4gIGNvbnN0IHBhbGV0dGUgPSBjcmVhdGVQYWxldHRlKHBhbGV0dGVJbnB1dCk7XG4gIGNvbnN0IHN5c3RlbVRoZW1lID0gc3lzdGVtQ3JlYXRlVGhlbWUob3B0aW9ucyk7XG4gIGxldCBtdWlUaGVtZSA9IGRlZXBtZXJnZShzeXN0ZW1UaGVtZSwge1xuICAgIG1peGluczogY3JlYXRlTWl4aW5zKHN5c3RlbVRoZW1lLmJyZWFrcG9pbnRzLCBtaXhpbnNJbnB1dCksXG4gICAgcGFsZXR0ZSxcbiAgICAvLyBEb24ndCB1c2UgWy4uLnNoYWRvd3NdIHVudGlsIHlvdSd2ZSB2ZXJpZmllZCBpdHMgdHJhbnNwaWxlZCBjb2RlIGlzIG5vdCBpbnZva2luZyB0aGUgaXRlcmF0b3IgcHJvdG9jb2wuXG4gICAgc2hhZG93czogc2hhZG93cy5zbGljZSgpLFxuICAgIHR5cG9ncmFwaHk6IGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeUlucHV0KSxcbiAgICB0cmFuc2l0aW9uczogY3JlYXRlVHJhbnNpdGlvbnModHJhbnNpdGlvbnNJbnB1dCksXG4gICAgekluZGV4OiBfZXh0ZW5kcyh7fSwgekluZGV4KVxuICB9KTtcbiAgbXVpVGhlbWUgPSBkZWVwbWVyZ2UobXVpVGhlbWUsIG90aGVyKTtcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zdCBzdGF0ZUNsYXNzZXMgPSBbJ2FjdGl2ZScsICdjaGVja2VkJywgJ2NvbXBsZXRlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdleHBhbmRlZCcsICdmb2N1c2VkJywgJ2ZvY3VzVmlzaWJsZScsICdyZXF1aXJlZCcsICdzZWxlY3RlZCddO1xuXG4gICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZSwgY29tcG9uZW50KSA9PiB7XG4gICAgICBsZXQga2V5OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluLCBuby1yZXN0cmljdGVkLXN5bnRheFxuXG4gICAgICBmb3IgKGtleSBpbiBub2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZVtrZXldO1xuXG4gICAgICAgIGlmIChzdGF0ZUNsYXNzZXMuaW5kZXhPZihrZXkpICE9PSAtMSAmJiBPYmplY3Qua2V5cyhjaGlsZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZUNsYXNzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJycsIGtleSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgJHtjb21wb25lbnR9XFxgIGNvbXBvbmVudCBpbmNyZWFzZXMgYCArIGB0aGUgQ1NTIHNwZWNpZmljaXR5IG9mIHRoZSBcXGAke2tleX1cXGAgaW50ZXJuYWwgc3RhdGUuYCwgJ1lvdSBjYW4gbm90IG92ZXJyaWRlIGl0IGxpa2UgdGhpczogJywgSlNPTi5zdHJpbmdpZnkobm9kZSwgbnVsbCwgMiksICcnLCBgSW5zdGVhZCwgeW91IG5lZWQgdG8gdXNlIHRoZSAnJi4ke3N0YXRlQ2xhc3N9JyBzeW50YXg6YCwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICByb290OiB7XG4gICAgICAgICAgICAgICAgW2AmLiR7c3RhdGVDbGFzc31gXTogY2hpbGRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgbnVsbCwgMiksICcnLCAnaHR0cHM6Ly9tdWkuY29tL3Ivc3RhdGUtY2xhc3Nlcy1ndWlkZSddLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgICB9IC8vIFJlbW92ZSB0aGUgc3R5bGUgdG8gcHJldmVudCBnbG9iYWwgY29uZmxpY3RzLlxuXG5cbiAgICAgICAgICBub2RlW2tleV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBPYmplY3Qua2V5cyhtdWlUaGVtZS5jb21wb25lbnRzKS5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IG11aVRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50XS5zdHlsZU92ZXJyaWRlcztcblxuICAgICAgaWYgKHN0eWxlT3ZlcnJpZGVzICYmIGNvbXBvbmVudC5pbmRleE9mKCdNdWknKSA9PT0gMCkge1xuICAgICAgICB0cmF2ZXJzZShzdHlsZU92ZXJyaWRlcywgY29tcG9uZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtdWlUaGVtZTtcbn1cblxubGV0IHdhcm5lZE9uY2UgPSBmYWxzZTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNdWlUaGVtZSguLi5hcmdzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCF3YXJuZWRPbmNlKSB7XG4gICAgICB3YXJuZWRPbmNlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IHRoZSBjcmVhdGVNdWlUaGVtZSBmdW5jdGlvbiB3YXMgcmVuYW1lZCB0byBjcmVhdGVUaGVtZS4nLCAnJywgXCJZb3Ugc2hvdWxkIHVzZSBgaW1wb3J0IHsgY3JlYXRlVGhlbWUgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcydgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlVGhlbWUoLi4uYXJncyk7XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUaGVtZTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZU1peGlucyhicmVha3BvaW50cywgbWl4aW5zKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgdG9vbGJhcjoge1xuICAgICAgbWluSGVpZ2h0OiA1NixcbiAgICAgIFticmVha3BvaW50cy51cCgneHMnKV06IHtcbiAgICAgICAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgICAgICAgbWluSGVpZ2h0OiA0OFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2JyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgICAgICBtaW5IZWlnaHQ6IDY0XG4gICAgICB9XG4gICAgfVxuICB9LCBtaXhpbnMpO1xufSIsImltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuL2NyZWF0ZVRoZW1lJztcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0VGhlbWU7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJ2YXJpYW50XCJdO1xuaW1wb3J0IHsgdW5zdGFibGVfY2FwaXRhbGl6ZSBhcyBjYXBpdGFsaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG5cbmZ1bmN0aW9uIGlzRW1wdHkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID09PSAwO1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgc3RyaW5nIGNsYXNzS2V5IGJhc2VkIG9uIHRoZSBwcm9wZXJ0aWVzIHByb3ZpZGVkLiBJdCBzdGFydHMgd2l0aCB0aGVcbiAqIHZhcmlhbnQgaWYgZGVmaW5lZCwgYW5kIHRoZW4gaXQgYXBwZW5kcyBhbGwgb3RoZXIgcHJvcGVydGllcyBpbiBhbHBoYWJldGljYWwgb3JkZXIuXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgLSB0aGUgcHJvcGVydGllcyBmb3Igd2hpY2ggdGhlIGNsYXNzS2V5IHNob3VsZCBiZSBjcmVhdGVkLlxuICovXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJvcHNUb0NsYXNzS2V5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICB2YXJpYW50XG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBsZXQgY2xhc3NLZXkgPSB2YXJpYW50IHx8ICcnO1xuICBPYmplY3Qua2V5cyhvdGhlcikuc29ydCgpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoa2V5ID09PSAnY29sb3InKSB7XG4gICAgICBjbGFzc0tleSArPSBpc0VtcHR5KGNsYXNzS2V5KSA/IHByb3BzW2tleV0gOiBjYXBpdGFsaXplKHByb3BzW2tleV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGFzc0tleSArPSBgJHtpc0VtcHR5KGNsYXNzS2V5KSA/IGtleSA6IGNhcGl0YWxpemUoa2V5KX0ke2NhcGl0YWxpemUocHJvcHNba2V5XS50b1N0cmluZygpKX1gO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjbGFzc0tleTtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wibmFtZVwiLCBcInNsb3RcIiwgXCJza2lwVmFyaWFudHNSZXNvbHZlclwiLCBcInNraXBTeFwiLCBcIm92ZXJyaWRlc1Jlc29sdmVyXCJdLFxuICAgICAgX2V4Y2x1ZGVkMiA9IFtcInRoZW1lXCJdLFxuICAgICAgX2V4Y2x1ZGVkMyA9IFtcInRoZW1lXCJdO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IHN0eWxlZEVuZ2luZVN0eWxlZCwgeyBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIGFzIHByb2Nlc3NTdHlsZXMgfSBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuaW1wb3J0IHsgZ2V0RGlzcGxheU5hbWUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuL2NyZWF0ZVRoZW1lJztcbmltcG9ydCBwcm9wc1RvQ2xhc3NLZXkgZnJvbSAnLi9wcm9wc1RvQ2xhc3NLZXknO1xuaW1wb3J0IGRlZmF1bHRTdHlsZUZ1bmN0aW9uU3ggZnJvbSAnLi9zdHlsZUZ1bmN0aW9uU3gnO1xuXG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vYmxvYi8yNmRlZDYxMDlmY2Q4Y2E5ODc1Y2MyY2U0NTY0ZmVlNjc4YTNmM2M1L3BhY2thZ2VzL3N0eWxlZC9zcmMvdXRpbHMuanMjTDQwXG5cblxuZnVuY3Rpb24gaXNTdHJpbmdUYWcodGFnKSB7XG4gIHJldHVybiB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyAmJiAvLyA5NiBpcyBvbmUgbGVzcyB0aGFuIHRoZSBjaGFyIGNvZGVcbiAgLy8gZm9yIFwiYVwiIHNvIHRoaXMgaXMgY2hlY2tpbmcgdGhhdFxuICAvLyBpdCdzIGEgbG93ZXJjYXNlIGNoYXJhY3RlclxuICB0YWcuY2hhckNvZGVBdCgwKSA+IDk2O1xufVxuXG5jb25zdCBnZXRTdHlsZU92ZXJyaWRlcyA9IChuYW1lLCB0aGVtZSkgPT4ge1xuICBpZiAodGhlbWUuY29tcG9uZW50cyAmJiB0aGVtZS5jb21wb25lbnRzW25hbWVdICYmIHRoZW1lLmNvbXBvbmVudHNbbmFtZV0uc3R5bGVPdmVycmlkZXMpIHtcbiAgICByZXR1cm4gdGhlbWUuY29tcG9uZW50c1tuYW1lXS5zdHlsZU92ZXJyaWRlcztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgZ2V0VmFyaWFudFN0eWxlcyA9IChuYW1lLCB0aGVtZSkgPT4ge1xuICBsZXQgdmFyaWFudHMgPSBbXTtcblxuICBpZiAodGhlbWUgJiYgdGhlbWUuY29tcG9uZW50cyAmJiB0aGVtZS5jb21wb25lbnRzW25hbWVdICYmIHRoZW1lLmNvbXBvbmVudHNbbmFtZV0udmFyaWFudHMpIHtcbiAgICB2YXJpYW50cyA9IHRoZW1lLmNvbXBvbmVudHNbbmFtZV0udmFyaWFudHM7XG4gIH1cblxuICBjb25zdCB2YXJpYW50c1N0eWxlcyA9IHt9O1xuICB2YXJpYW50cy5mb3JFYWNoKGRlZmluaXRpb24gPT4ge1xuICAgIGNvbnN0IGtleSA9IHByb3BzVG9DbGFzc0tleShkZWZpbml0aW9uLnByb3BzKTtcbiAgICB2YXJpYW50c1N0eWxlc1trZXldID0gZGVmaW5pdGlvbi5zdHlsZTtcbiAgfSk7XG4gIHJldHVybiB2YXJpYW50c1N0eWxlcztcbn07XG5cbmNvbnN0IHZhcmlhbnRzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcywgdGhlbWUsIG5hbWUpID0+IHtcbiAgdmFyIF90aGVtZSRjb21wb25lbnRzLCBfdGhlbWUkY29tcG9uZW50cyRuYW07XG5cbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGUgPSB7fVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHZhcmlhbnRzU3R5bGVzID0gW107XG4gIGNvbnN0IHRoZW1lVmFyaWFudHMgPSB0aGVtZSA9PSBudWxsID8gdm9pZCAwIDogKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCA/IHZvaWQgMCA6IChfdGhlbWUkY29tcG9uZW50cyRuYW0gPSBfdGhlbWUkY29tcG9uZW50c1tuYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzJG5hbS52YXJpYW50cztcblxuICBpZiAodGhlbWVWYXJpYW50cykge1xuICAgIHRoZW1lVmFyaWFudHMuZm9yRWFjaCh0aGVtZVZhcmlhbnQgPT4ge1xuICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgT2JqZWN0LmtleXModGhlbWVWYXJpYW50LnByb3BzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChvd25lclN0YXRlW2tleV0gIT09IHRoZW1lVmFyaWFudC5wcm9wc1trZXldICYmIHByb3BzW2tleV0gIT09IHRoZW1lVmFyaWFudC5wcm9wc1trZXldKSB7XG4gICAgICAgICAgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgdmFyaWFudHNTdHlsZXMucHVzaChzdHlsZXNbcHJvcHNUb0NsYXNzS2V5KHRoZW1lVmFyaWFudC5wcm9wcyldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYW50c1N0eWxlcztcbn07IC8vIFVwZGF0ZSAvc3lzdGVtL3N0eWxlZC8jYXBpIGluIGNhc2UgaWYgdGhpcyBjaGFuZ2VzXG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEZvcndhcmRQcm9wKHByb3ApIHtcbiAgcmV0dXJuIHByb3AgIT09ICdvd25lclN0YXRlJyAmJiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJztcbn1cbmV4cG9ydCBjb25zdCBzeXN0ZW1EZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuXG5jb25zdCBsb3dlcmNhc2VGaXJzdExldHRlciA9IHN0cmluZyA9PiB7XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTdHlsZWQoaW5wdXQgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lLFxuICAgIHJvb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wLFxuICAgIHNsb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wLFxuICAgIHN0eWxlRnVuY3Rpb25TeCA9IGRlZmF1bHRTdHlsZUZ1bmN0aW9uU3hcbiAgfSA9IGlucHV0O1xuXG4gIGNvbnN0IHN5c3RlbVN4ID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gaXNFbXB0eShwcm9wcy50aGVtZSkgPyBkZWZhdWx0VGhlbWUgOiBwcm9wcy50aGVtZTtcbiAgICByZXR1cm4gc3R5bGVGdW5jdGlvblN4KF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgdGhlbWVcbiAgICB9KSk7XG4gIH07XG5cbiAgc3lzdGVtU3guX19tdWlfc3lzdGVtU3ggPSB0cnVlO1xuICByZXR1cm4gKHRhZywgaW5wdXRPcHRpb25zID0ge30pID0+IHtcbiAgICAvLyBGaWx0ZXIgb3V0IHRoZSBgc3hgIHN0eWxlIGZ1bmN0aW9uIGZyb20gdGhlIHByZXZpb3VzIHN0eWxlZCBjb21wb25lbnQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBzdHlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21wb3NpdGUgY29tcG9uZW50cy5cbiAgICBwcm9jZXNzU3R5bGVzKHRhZywgc3R5bGVzID0+IHN0eWxlcy5maWx0ZXIoc3R5bGUgPT4gIShzdHlsZSAhPSBudWxsICYmIHN0eWxlLl9fbXVpX3N5c3RlbVN4KSkpO1xuXG4gICAgY29uc3Qge1xuICAgICAgbmFtZTogY29tcG9uZW50TmFtZSxcbiAgICAgIHNsb3Q6IGNvbXBvbmVudFNsb3QsXG4gICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgIHNraXBTeDogaW5wdXRTa2lwU3gsXG4gICAgICBvdmVycmlkZXNSZXNvbHZlclxuICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICAgICAgb3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGlucHV0T3B0aW9ucywgX2V4Y2x1ZGVkKTsgLy8gaWYgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgb3B0aW9uIGlzIGRlZmluZWQsIHRha2UgdGhlIHZhbHVlLCBvdGhlcndpc2UsIHRydWUgZm9yIHJvb3QgYW5kIGZhbHNlIGZvciBvdGhlciBzbG90cy5cblxuXG4gICAgY29uc3Qgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgPSBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyICE9PSB1bmRlZmluZWQgPyBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyIDogY29tcG9uZW50U2xvdCAmJiBjb21wb25lbnRTbG90ICE9PSAnUm9vdCcgfHwgZmFsc2U7XG4gICAgY29uc3Qgc2tpcFN4ID0gaW5wdXRTa2lwU3ggfHwgZmFsc2U7XG4gICAgbGV0IGxhYmVsO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIGxhYmVsID0gYCR7Y29tcG9uZW50TmFtZX0tJHtsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90IHx8ICdSb290Jyl9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzaG91bGRGb3J3YXJkUHJvcDtcblxuICAgIGlmIChjb21wb25lbnRTbG90ID09PSAnUm9vdCcpIHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gcm9vdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoY29tcG9uZW50U2xvdCkge1xuICAgICAgLy8gYW55IG90aGVyIHNsb3Qgc3BlY2lmaWVkXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHNsb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nVGFnKHRhZykpIHtcbiAgICAgIC8vIGZvciBzdHJpbmcgKGh0bWwpIHRhZywgcHJlc2VydmUgdGhlIGJlaGF2aW9yIGluIGVtb3Rpb24gJiBzdHlsZWQtY29tcG9uZW50cy5cbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZWRSZXNvbHZlciA9IHN0eWxlZEVuZ2luZVN0eWxlZCh0YWcsIF9leHRlbmRzKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuXG4gICAgY29uc3QgbXVpU3R5bGVkUmVzb2x2ZXIgPSAoc3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zKSA9PiB7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcChzdHlsZXNBcmcgPT4ge1xuICAgICAgICAvLyBPbiB0aGUgc2VydmVyIEVtb3Rpb24gZG9lc24ndCB1c2UgUmVhY3QuZm9yd2FyZFJlZiBmb3IgY3JlYXRpbmcgY29tcG9uZW50cywgc28gdGhlIGNyZWF0ZWRcbiAgICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAgIC8vIHdoaWNoIGFyZSBiYXNpY2FsbHkgY29tcG9uZW50cyB1c2VkIGFzIGEgc2VsZWN0b3JzLlxuICAgICAgICByZXR1cm4gdHlwZW9mIHN0eWxlc0FyZyA9PT0gJ2Z1bmN0aW9uJyAmJiBzdHlsZXNBcmcuX19lbW90aW9uX3JlYWwgIT09IHN0eWxlc0FyZyA/IF9yZWYgPT4ge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICB0aGVtZTogdGhlbWVJbnB1dFxuICAgICAgICAgIH0gPSBfcmVmLFxuICAgICAgICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZDIpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlc0FyZyhfZXh0ZW5kcyh7XG4gICAgICAgICAgICB0aGVtZTogaXNFbXB0eSh0aGVtZUlucHV0KSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lSW5wdXRcbiAgICAgICAgICB9LCBvdGhlcikpO1xuICAgICAgICB9IDogc3R5bGVzQXJnO1xuICAgICAgfSkgOiBbXTtcbiAgICAgIGxldCB0cmFuc2Zvcm1lZFN0eWxlQXJnID0gc3R5bGVBcmc7XG5cbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IGlzRW1wdHkocHJvcHMudGhlbWUpID8gZGVmYXVsdFRoZW1lIDogcHJvcHMudGhlbWU7XG4gICAgICAgICAgY29uc3Qgc3R5bGVPdmVycmlkZXMgPSBnZXRTdHlsZU92ZXJyaWRlcyhjb21wb25lbnROYW1lLCB0aGVtZSk7XG5cbiAgICAgICAgICBpZiAoc3R5bGVPdmVycmlkZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkU3R5bGVPdmVycmlkZXMgPSB7fTtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN0eWxlT3ZlcnJpZGVzKS5mb3JFYWNoKChbc2xvdEtleSwgc2xvdFN0eWxlXSkgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzW3Nsb3RLZXldID0gdHlwZW9mIHNsb3RTdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHNsb3RTdHlsZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICB9KSkgOiBzbG90U3R5bGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvdmVycmlkZXNSZXNvbHZlcihwcm9wcywgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiAhc2tpcFZhcmlhbnRzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHRoZW1lID0gaXNFbXB0eShwcm9wcy50aGVtZSkgPyBkZWZhdWx0VGhlbWUgOiBwcm9wcy50aGVtZTtcbiAgICAgICAgICByZXR1cm4gdmFyaWFudHNSZXNvbHZlcihwcm9wcywgZ2V0VmFyaWFudFN0eWxlcyhjb21wb25lbnROYW1lLCB0aGVtZSksIHRoZW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc2tpcFN4KSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHN5c3RlbVN4KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID0gZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLmxlbmd0aCAtIGV4cHJlc3Npb25zLmxlbmd0aDtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3R5bGVBcmcpICYmIG51bU9mQ3VzdG9tRm5zQXBwbGllZCA+IDApIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJzID0gbmV3IEFycmF5KG51bU9mQ3VzdG9tRm5zQXBwbGllZCkuZmlsbCgnJyk7IC8vIElmIHRoZSB0eXBlIGlzIGFycmF5LCB0aGFuIHdlIG5lZWQgdG8gYWRkIHBsYWNlaG9sZGVycyBpbiB0aGUgdGVtcGxhdGUgZm9yIHRoZSBvdmVycmlkZXMsIHZhcmlhbnRzIGFuZCB0aGUgc3ggc3R5bGVzLlxuXG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcgPSBbLi4uc3R5bGVBcmcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcucmF3ID0gWy4uLnN0eWxlQXJnLnJhdywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0eWxlQXJnID09PSAnZnVuY3Rpb24nICYmIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIHN0eWxlQXJnLl9fZW1vdGlvbl9yZWFsICE9PSBzdHlsZUFyZykge1xuICAgICAgICAvLyBJZiB0aGUgdHlwZSBpcyBmdW5jdGlvbiwgd2UgbmVlZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgdGhlbWUuXG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcgPSBfcmVmMiA9PiB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIHRoZW1lOiB0aGVtZUlucHV0XG4gICAgICAgICAgfSA9IF9yZWYyLFxuICAgICAgICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYyLCBfZXhjbHVkZWQzKTtcblxuICAgICAgICAgIHJldHVybiBzdHlsZUFyZyhfZXh0ZW5kcyh7XG4gICAgICAgICAgICB0aGVtZTogaXNFbXB0eSh0aGVtZUlucHV0KSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lSW5wdXRcbiAgICAgICAgICB9LCBvdGhlcikpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBDb21wb25lbnQgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIodHJhbnNmb3JtZWRTdHlsZUFyZywgLi4uZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lKTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgbGV0IGRpc3BsYXlOYW1lO1xuXG4gICAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSBgJHtjb21wb25lbnROYW1lfSR7Y29tcG9uZW50U2xvdCB8fCAnJ31gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGBTdHlsZWQoJHtnZXREaXNwbGF5TmFtZSh0YWcpfSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcblxuICAgIGlmIChkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZykge1xuICAgICAgbXVpU3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZyA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnO1xuICAgIH1cblxuICAgIHJldHVybiBtdWlTdHlsZWRSZXNvbHZlcjtcbiAgfTtcbn0iLCJpbXBvcnQgeyBjcmVhdGVTdHlsZWQsIHNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuL2RlZmF1bHRUaGVtZSc7XG5leHBvcnQgY29uc3Qgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gcHJvcCA9PiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAnY2xhc3Nlcyc7XG5leHBvcnQgY29uc3Qgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3A7XG5jb25zdCBzdHlsZWQgPSBjcmVhdGVTdHlsZWQoe1xuICBkZWZhdWx0VGhlbWUsXG4gIHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSk7XG5leHBvcnQgZGVmYXVsdCBzdHlsZWQ7IiwiaW1wb3J0IHsgdXNlVGhlbWVQcm9wcyBhcyBzeXN0ZW1Vc2VUaGVtZVByb3BzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuL2RlZmF1bHRUaGVtZSc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZVByb3BzKHtcbiAgcHJvcHMsXG4gIG5hbWVcbn0pIHtcbiAgcmV0dXJuIHN5c3RlbVVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzLFxuICAgIG5hbWUsXG4gICAgZGVmYXVsdFRoZW1lXG4gIH0pO1xufSIsImltcG9ydCBnZXRUaGVtZVByb3BzIGZyb20gJy4vZ2V0VGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vdXNlVGhlbWUnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWVQcm9wcyh7XG4gIHByb3BzLFxuICBuYW1lLFxuICBkZWZhdWx0VGhlbWVcbn0pIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZShkZWZhdWx0VGhlbWUpO1xuICBjb25zdCBtZXJnZWRQcm9wcyA9IGdldFRoZW1lUHJvcHMoe1xuICAgIHRoZW1lLFxuICAgIG5hbWUsXG4gICAgcHJvcHNcbiAgfSk7XG4gIHJldHVybiBtZXJnZWRQcm9wcztcbn0iLCJpbXBvcnQgeyBpbnRlcm5hbF9yZXNvbHZlUHJvcHMgYXMgcmVzb2x2ZVByb3BzIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaGVtZVByb3BzKHBhcmFtcykge1xuICBjb25zdCB7XG4gICAgdGhlbWUsXG4gICAgbmFtZSxcbiAgICBwcm9wc1xuICB9ID0gcGFyYW1zO1xuXG4gIGlmICghdGhlbWUgfHwgIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbbmFtZV0gfHwgIXRoZW1lLmNvbXBvbmVudHNbbmFtZV0uZGVmYXVsdFByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmVQcm9wcyh0aGVtZS5jb21wb25lbnRzW25hbWVdLmRlZmF1bHRQcm9wcywgcHJvcHMpO1xufSIsImltcG9ydCB7IHVuc3RhYmxlX2NhcGl0YWxpemUgYXMgY2FwaXRhbGl6ZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgY2FwaXRhbGl6ZTsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU3ZnSWNvbicsIHNsb3QpO1xufVxuY29uc3Qgc3ZnSWNvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTdmdJY29uJywgWydyb290JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvckFjdGlvbicsICdjb2xvckVycm9yJywgJ2NvbG9yRGlzYWJsZWQnLCAnZm9udFNpemVJbmhlcml0JywgJ2ZvbnRTaXplU21hbGwnLCAnZm9udFNpemVNZWRpdW0nLCAnZm9udFNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IHN2Z0ljb25DbGFzc2VzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZm9udFNpemVcIiwgXCJodG1sQ29sb3JcIiwgXCJpbmhlcml0Vmlld0JveFwiLCBcInRpdGxlQWNjZXNzXCIsIFwidmlld0JveFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldFN2Z0ljb25VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3N2Z0ljb25DbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBmb250U2l6ZSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBjb2xvciAhPT0gJ2luaGVyaXQnICYmIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYGZvbnRTaXplJHtjYXBpdGFsaXplKGZvbnRTaXplKX1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFN2Z0ljb25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgU3ZnSWNvblJvb3QgPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aVN2Z0ljb24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIHN0eWxlc1tgZm9udFNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5mb250U2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHRyYW5zaXRpb25zLCBfdGhlbWUkdHJhbnNpdGlvbnMkY3IsIF90aGVtZSR0cmFuc2l0aW9uczIsIF90aGVtZSR0cmFuc2l0aW9uczIkZCwgX3RoZW1lJHR5cG9ncmFwaHksIF90aGVtZSR0eXBvZ3JhcGh5JHB4VCwgX3RoZW1lJHR5cG9ncmFwaHkyLCBfdGhlbWUkdHlwb2dyYXBoeTIkcHgsIF90aGVtZSR0eXBvZ3JhcGh5MywgX3RoZW1lJHR5cG9ncmFwaHkzJHB4LCBfcGFsZXR0ZSRvd25lclN0YXRlJGMsIF9wYWxldHRlLCBfcGFsZXR0ZSRvd25lclN0YXRlJGMyLCBfcGFsZXR0ZTIsIF9wYWxldHRlMiRhY3Rpb24sIF9wYWxldHRlMywgX3BhbGV0dGUzJGFjdGlvbjtcblxuICByZXR1cm4ge1xuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICB3aWR0aDogJzFlbScsXG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICBmaWxsOiAnY3VycmVudENvbG9yJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIHRyYW5zaXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfdGhlbWUkdHJhbnNpdGlvbnMkY3IgPSBfdGhlbWUkdHJhbnNpdGlvbnMuY3JlYXRlKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHRyYW5zaXRpb25zJGNyLmNhbGwoX3RoZW1lJHRyYW5zaXRpb25zLCAnZmlsbCcsIHtcbiAgICAgIGR1cmF0aW9uOiAoX3RoZW1lJHRyYW5zaXRpb25zMiA9IHRoZW1lLnRyYW5zaXRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF90aGVtZSR0cmFuc2l0aW9uczIkZCA9IF90aGVtZSR0cmFuc2l0aW9uczIuZHVyYXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMyJGQuc2hvcnRlclxuICAgIH0pLFxuICAgIGZvbnRTaXplOiB7XG4gICAgICBpbmhlcml0OiAnaW5oZXJpdCcsXG4gICAgICBzbWFsbDogKChfdGhlbWUkdHlwb2dyYXBoeSA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgPyB2b2lkIDAgOiAoX3RoZW1lJHR5cG9ncmFwaHkkcHhUID0gX3RoZW1lJHR5cG9ncmFwaHkucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5JHB4VC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5LCAyMCkpIHx8ICcxLjI1cmVtJyxcbiAgICAgIG1lZGl1bTogKChfdGhlbWUkdHlwb2dyYXBoeTIgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsID8gdm9pZCAwIDogKF90aGVtZSR0eXBvZ3JhcGh5MiRweCA9IF90aGVtZSR0eXBvZ3JhcGh5Mi5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkyJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkyLCAyNCkpIHx8ICcxLjVyZW0nLFxuICAgICAgbGFyZ2U6ICgoX3RoZW1lJHR5cG9ncmFwaHkzID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCA/IHZvaWQgMCA6IChfdGhlbWUkdHlwb2dyYXBoeTMkcHggPSBfdGhlbWUkdHlwb2dyYXBoeTMucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5MyRweC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5MywgMzUpKSB8fCAnMi4xODc1J1xuICAgIH1bb3duZXJTdGF0ZS5mb250U2l6ZV0sXG4gICAgLy8gVE9ETyB2NSBkZXByZWNhdGUsIHY2IHJlbW92ZSBmb3Igc3hcbiAgICBjb2xvcjogKF9wYWxldHRlJG93bmVyU3RhdGUkYyA9IChfcGFsZXR0ZSA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsID8gdm9pZCAwIDogKF9wYWxldHRlJG93bmVyU3RhdGUkYzIgPSBfcGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlJG93bmVyU3RhdGUkYzIubWFpbikgIT0gbnVsbCA/IF9wYWxldHRlJG93bmVyU3RhdGUkYyA6IHtcbiAgICAgIGFjdGlvbjogKF9wYWxldHRlMiA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsID8gdm9pZCAwIDogKF9wYWxldHRlMiRhY3Rpb24gPSBfcGFsZXR0ZTIuYWN0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUyJGFjdGlvbi5hY3RpdmUsXG4gICAgICBkaXNhYmxlZDogKF9wYWxldHRlMyA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsID8gdm9pZCAwIDogKF9wYWxldHRlMyRhY3Rpb24gPSBfcGFsZXR0ZTMuYWN0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUzJGFjdGlvbi5kaXNhYmxlZCxcbiAgICAgIGluaGVyaXQ6IHVuZGVmaW5lZFxuICAgIH1bb3duZXJTdGF0ZS5jb2xvcl1cbiAgfTtcbn0pO1xuY29uc3QgU3ZnSWNvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFN2Z0ljb24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVN2Z0ljb24nXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgY29sb3IgPSAnaW5oZXJpdCcsXG4gICAgY29tcG9uZW50ID0gJ3N2ZycsXG4gICAgZm9udFNpemUgPSAnbWVkaXVtJyxcbiAgICBodG1sQ29sb3IsXG4gICAgaW5oZXJpdFZpZXdCb3ggPSBmYWxzZSxcbiAgICB0aXRsZUFjY2VzcyxcbiAgICB2aWV3Qm94ID0gJzAgMCAyNCAyNCdcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZm9udFNpemUsXG4gICAgaW5zdGFuY2VGb250U2l6ZTogaW5Qcm9wcy5mb250U2l6ZSxcbiAgICBpbmhlcml0Vmlld0JveCxcbiAgICB2aWV3Qm94XG4gIH0pO1xuXG4gIGNvbnN0IG1vcmUgPSB7fTtcblxuICBpZiAoIWluaGVyaXRWaWV3Qm94KSB7XG4gICAgbW9yZS52aWV3Qm94ID0gdmlld0JveDtcbiAgfVxuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhTdmdJY29uUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGZvY3VzYWJsZTogXCJmYWxzZVwiLFxuICAgIGNvbG9yOiBodG1sQ29sb3IsXG4gICAgXCJhcmlhLWhpZGRlblwiOiB0aXRsZUFjY2VzcyA/IHVuZGVmaW5lZCA6IHRydWUsXG4gICAgcm9sZTogdGl0bGVBY2Nlc3MgPyAnaW1nJyA6IHVuZGVmaW5lZCxcbiAgICByZWY6IHJlZlxuICB9LCBtb3JlLCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIHRpdGxlQWNjZXNzID8gLyojX19QVVJFX18qL19qc3goXCJ0aXRsZVwiLCB7XG4gICAgICBjaGlsZHJlbjogdGl0bGVBY2Nlc3NcbiAgICB9KSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3ZnSWNvbi5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogTm9kZSBwYXNzZWQgaW50byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNhZGRpbmctbmV3LWNvbG9ycykuXG4gICAqIFlvdSBjYW4gdXNlIHRoZSBgaHRtbENvbG9yYCBwcm9wIHRvIGFwcGx5IGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdhY3Rpb24nLCAnZGlzYWJsZWQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBmb250U2l6ZSBhcHBsaWVkIHRvIHRoZSBpY29uLiBEZWZhdWx0cyB0byAyNHB4LCBidXQgY2FuIGJlIGNvbmZpZ3VyZSB0byBpbmhlcml0IGZvbnQgc2l6ZS5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIGZvbnRTaXplOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ2xhcmdlJywgJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGh0bWxDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcm9vdCBub2RlIHdpbGwgaW5oZXJpdCB0aGUgY3VzdG9tIGBjb21wb25lbnRgJ3Mgdmlld0JveCBhbmQgdGhlIGB2aWV3Qm94YFxuICAgKiBwcm9wIHdpbGwgYmUgaWdub3JlZC5cbiAgICogVXNlZnVsIHdoZW4geW91IHdhbnQgdG8gcmVmZXJlbmNlIGEgY3VzdG9tIGBjb21wb25lbnRgIGFuZCBoYXZlIGBTdmdJY29uYCBwYXNzIHRoYXRcbiAgICogYGNvbXBvbmVudGAncyB2aWV3Qm94IHRvIHRoZSByb290IG5vZGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbmhlcml0Vmlld0JveDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBzaGFwZS1yZW5kZXJpbmcgYXR0cmlidXRlLiBUaGUgYmVoYXZpb3Igb2YgdGhlIGRpZmZlcmVudCBvcHRpb25zIGlzIGRlc2NyaWJlZCBvbiB0aGVcbiAgICogW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9zaGFwZS1yZW5kZXJpbmcpLlxuICAgKiBJZiB5b3UgYXJlIGhhdmluZyBpc3N1ZXMgd2l0aCBibHVycnkgaWNvbnMgeW91IHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGlzIHByb3AuXG4gICAqL1xuICBzaGFwZVJlbmRlcmluZzogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhIGh1bWFuLXJlYWRhYmxlIHRpdGxlIGZvciB0aGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIGl0LlxuICAgKiBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHLWFjY2Vzcy8jRXF1aXZhbGVudFxuICAgKi9cbiAgdGl0bGVBY2Nlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEFsbG93cyB5b3UgdG8gcmVkZWZpbmUgd2hhdCB0aGUgY29vcmRpbmF0ZXMgd2l0aG91dCB1bml0cyBtZWFuIGluc2lkZSBhbiBTVkcgZWxlbWVudC5cbiAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSBTVkcgZWxlbWVudCBpcyA1MDAgKHdpZHRoKSBieSAyMDAgKGhlaWdodCksXG4gICAqIGFuZCB5b3UgcGFzcyB2aWV3Qm94PVwiMCAwIDUwIDIwXCIsXG4gICAqIHRoaXMgbWVhbnMgdGhhdCB0aGUgY29vcmRpbmF0ZXMgaW5zaWRlIHRoZSBTVkcgd2lsbCBnbyBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIgKDAsMClcbiAgICogdG8gYm90dG9tIHJpZ2h0ICg1MCwyMCkgYW5kIGVhY2ggdW5pdCB3aWxsIGJlIHdvcnRoIDEwcHguXG4gICAqIEBkZWZhdWx0ICcwIDAgMjQgMjQnXG4gICAqL1xuICB2aWV3Qm94OiBQcm9wVHlwZXMuc3RyaW5nXG59IDogdm9pZCAwO1xuU3ZnSWNvbi5tdWlOYW1lID0gJ1N2Z0ljb24nO1xuZXhwb3J0IGRlZmF1bHQgU3ZnSWNvbjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTdmdJY29uIGZyb20gJy4uL1N2Z0ljb24nO1xuLyoqXG4gKiBQcml2YXRlIG1vZHVsZSByZXNlcnZlZCBmb3IgQG11aSBwYWNrYWdlcy5cbiAqL1xuXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3ZnSWNvbihwYXRoLCBkaXNwbGF5TmFtZSkge1xuICBjb25zdCBDb21wb25lbnQgPSAocHJvcHMsIHJlZikgPT4gLyojX19QVVJFX18qL19qc3goU3ZnSWNvbiwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS10ZXN0aWRcIjogYCR7ZGlzcGxheU5hbWV9SWNvbmAsXG4gICAgcmVmOiByZWZcbiAgfSwgcHJvcHMsIHtcbiAgICBjaGlsZHJlbjogcGF0aFxuICB9KSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBOZWVkIHRvIHNldCBgZGlzcGxheU5hbWVgIG9uIHRoZSBpbm5lciBjb21wb25lbnQgZm9yIFJlYWN0Lm1lbW8uXG4gICAgLy8gUmVhY3QgcHJpb3IgdG8gMTYuMTQgaWdub3JlcyBgZGlzcGxheU5hbWVgIG9uIHRoZSB3cmFwcGVyLlxuICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGAke2Rpc3BsYXlOYW1lfUljb25gO1xuICB9XG5cbiAgQ29tcG9uZW50Lm11aU5hbWUgPSBTdmdJY29uLm11aU5hbWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QubWVtbyggLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoQ29tcG9uZW50KSk7XG59IiwiaW1wb3J0IHsgdW5zdGFibGVfZGVib3VuY2UgYXMgZGVib3VuY2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGRlYm91bmNlOyIsImltcG9ydCB7IHVuc3RhYmxlX2NyZWF0ZUNoYWluZWRGdW5jdGlvbiBhcyBjcmVhdGVDaGFpbmVkRnVuY3Rpb24gfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUNoYWluZWRGdW5jdGlvbjsiLCJpbXBvcnQgeyB1bnN0YWJsZV9kZXByZWNhdGVkUHJvcFR5cGUgYXMgZGVwcmVjYXRlZFByb3BUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBkZXByZWNhdGVkUHJvcFR5cGU7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVwcmVjYXRlZFByb3BUeXBlKHZhbGlkYXRvciwgcmVhc29uKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuICgpID0+IG51bGw7XG4gIH1cblxuICByZXR1cm4gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkgPT4ge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWVTYWZlID0gY29tcG9uZW50TmFtZSB8fCAnPDxhbm9ueW1vdXM+Pic7XG4gICAgY29uc3QgcHJvcEZ1bGxOYW1lU2FmZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgIGlmICh0eXBlb2YgcHJvcHNbcHJvcE5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihgVGhlICR7bG9jYXRpb259IFxcYCR7cHJvcEZ1bGxOYW1lU2FmZX1cXGAgb2YgYCArIGBcXGAke2NvbXBvbmVudE5hbWVTYWZlfVxcYCBpcyBkZXByZWNhdGVkLiAke3JlYXNvbn1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9yZXF1aXJlUHJvcEZhY3RvcnkgYXMgcmVxdWlyZVByb3BGYWN0b3J5IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCByZXF1aXJlUHJvcEZhY3Rvcnk7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXF1aXJlUHJvcEZhY3RvcnkoY29tcG9uZW50TmFtZUluRXJyb3IsIENvbXBvbmVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiAoKSA9PiBudWxsO1xuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mb3JiaWQtZm9yZWlnbi1wcm9wLXR5cGVzXG5cblxuICBjb25zdCBwcmV2UHJvcFR5cGVzID0gQ29tcG9uZW50ID8gX2V4dGVuZHMoe30sIENvbXBvbmVudC5wcm9wVHlwZXMpIDogbnVsbDtcblxuICBjb25zdCByZXF1aXJlUHJvcCA9IHJlcXVpcmVkUHJvcCA9PiAocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCAuLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcHJvcEZ1bGxOYW1lU2FmZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcbiAgICBjb25zdCBkZWZhdWx0VHlwZUNoZWNrZXIgPSBwcmV2UHJvcFR5cGVzID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UHJvcFR5cGVzW3Byb3BGdWxsTmFtZVNhZmVdO1xuXG4gICAgaWYgKGRlZmF1bHRUeXBlQ2hlY2tlcikge1xuICAgICAgY29uc3QgdHlwZUNoZWNrZXJSZXN1bHQgPSBkZWZhdWx0VHlwZUNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCAuLi5hcmdzKTtcblxuICAgICAgaWYgKHR5cGVDaGVja2VyUmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB0eXBlQ2hlY2tlclJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb3BzW3Byb3BOYW1lXSAhPT0gJ3VuZGVmaW5lZCcgJiYgIXByb3BzW3JlcXVpcmVkUHJvcF0pIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoYFRoZSBwcm9wIFxcYCR7cHJvcEZ1bGxOYW1lU2FmZX1cXGAgb2YgYCArIGBcXGAke2NvbXBvbmVudE5hbWVJbkVycm9yfVxcYCBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIFxcYCR7cmVxdWlyZWRQcm9wfVxcYCBwcm9wLmApO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHJldHVybiByZXF1aXJlUHJvcDtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9zZXRSZWYgYXMgc2V0UmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBzZXRSZWY7IiwiaW1wb3J0IHsgdW5zdGFibGVfdW5zdXBwb3J0ZWRQcm9wIGFzIHVuc3VwcG9ydGVkUHJvcCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdW5zdXBwb3J0ZWRQcm9wOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuc3VwcG9ydGVkUHJvcChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHByb3BGdWxsTmFtZVNhZmUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgaWYgKHR5cGVvZiBwcm9wc1twcm9wTmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihgVGhlIHByb3AgXFxgJHtwcm9wRnVsbE5hbWVTYWZlfVxcYCBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgcmVtb3ZlIGl0LmApO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IiwiaW1wb3J0IHsgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yIGFzIENsYXNzTmFtZUdlbmVyYXRvciB9IGZyb20gJ0BtdWkvYmFzZS9jbGFzc05hbWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjYXBpdGFsaXplIH0gZnJvbSAnLi9jYXBpdGFsaXplJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIH0gZnJvbSAnLi9jcmVhdGVDaGFpbmVkRnVuY3Rpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVTdmdJY29uIH0gZnJvbSAnLi9jcmVhdGVTdmdJY29uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGVib3VuY2UgfSBmcm9tICcuL2RlYm91bmNlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGVwcmVjYXRlZFByb3BUeXBlIH0gZnJvbSAnLi9kZXByZWNhdGVkUHJvcFR5cGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc011aUVsZW1lbnQgfSBmcm9tICcuL2lzTXVpRWxlbWVudCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG93bmVyRG9jdW1lbnQgfSBmcm9tICcuL293bmVyRG9jdW1lbnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvd25lcldpbmRvdyB9IGZyb20gJy4vb3duZXJXaW5kb3cnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByZXF1aXJlUHJvcEZhY3RvcnkgfSBmcm9tICcuL3JlcXVpcmVQcm9wRmFjdG9yeSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNldFJlZiB9IGZyb20gJy4vc2V0UmVmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfdXNlRW5oYW5jZWRFZmZlY3QgfSBmcm9tICcuL3VzZUVuaGFuY2VkRWZmZWN0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfdXNlSWQgfSBmcm9tICcuL3VzZUlkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdXBwb3J0ZWRQcm9wIH0gZnJvbSAnLi91bnN1cHBvcnRlZFByb3AnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VDb250cm9sbGVkIH0gZnJvbSAnLi91c2VDb250cm9sbGVkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlRXZlbnRDYWxsYmFjayB9IGZyb20gJy4vdXNlRXZlbnRDYWxsYmFjayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUZvcmtSZWYgfSBmcm9tICcuL3VzZUZvcmtSZWYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VJc0ZvY3VzVmlzaWJsZSB9IGZyb20gJy4vdXNlSXNGb2N1c1Zpc2libGUnOyAvLyBUT0RPOiByZW1vdmUgdGhpcyBleHBvcnQgb25jZSBDbGFzc05hbWVHZW5lcmF0b3IgaXMgc3RhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5cbmV4cG9ydCBjb25zdCB1bnN0YWJsZV9DbGFzc05hbWVHZW5lcmF0b3IgPSB7XG4gIGNvbmZpZ3VyZTogZ2VuZXJhdG9yID0+IHtcbiAgICBjb25zb2xlLndhcm4oWydNVUk6IGBDbGFzc05hbWVHZW5lcmF0b3JgIGltcG9ydCBmcm9tIGBAbXVpL21hdGVyaWFsL3V0aWxzYCBpcyBvdXRkYXRlZCBhbmQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBpc3N1ZXMuJywgJycsIFwiWW91IHNob3VsZCB1c2UgYGltcG9ydCB7IHVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvY2xhc3NOYW1lJ2AgaW5zdGVhZFwiLCAnJywgJ1RoZSBkZXRhaWwgb2YgdGhlIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8zMDAxMSNpc3N1ZWNvbW1lbnQtMTAyNDk5MzQwMScsICcnLCAnVGhlIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9tdWkuY29tL2d1aWRlcy9jbGFzc25hbWUtZ2VuZXJhdG9yLyddLmpvaW4oJ1xcbicpKTtcbiAgICBDbGFzc05hbWVHZW5lcmF0b3IuY29uZmlndXJlKGdlbmVyYXRvcik7XG4gIH1cbn07IiwiaW1wb3J0IHsgdW5zdGFibGVfaXNNdWlFbGVtZW50IGFzIGlzTXVpRWxlbWVudCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgaXNNdWlFbGVtZW50OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTXVpRWxlbWVudChlbGVtZW50LCBtdWlOYW1lcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpICYmIG11aU5hbWVzLmluZGV4T2YoZWxlbWVudC50eXBlLm11aU5hbWUpICE9PSAtMTtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IG93bmVyRG9jdW1lbnQ7IiwiaW1wb3J0IHsgdW5zdGFibGVfb3duZXJXaW5kb3cgYXMgb3duZXJXaW5kb3cgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IG93bmVyV2luZG93OyIsImltcG9ydCB7IHVuc3RhYmxlX3VzZUNvbnRyb2xsZWQgYXMgdXNlQ29udHJvbGxlZCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlQ29udHJvbGxlZDsiLCIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rcywgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VDb250cm9sbGVkKHtcbiAgY29udHJvbGxlZCxcbiAgZGVmYXVsdDogZGVmYXVsdFByb3AsXG4gIG5hbWUsXG4gIHN0YXRlID0gJ3ZhbHVlJ1xufSkge1xuICAvLyBpc0NvbnRyb2xsZWQgaXMgaWdub3JlZCBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RzIGFzIGl0IHNob3VsZCBuZXZlciBjaGFuZ2UuXG4gIGNvbnN0IHtcbiAgICBjdXJyZW50OiBpc0NvbnRyb2xsZWRcbiAgfSA9IFJlYWN0LnVzZVJlZihjb250cm9sbGVkICE9PSB1bmRlZmluZWQpO1xuICBjb25zdCBbdmFsdWVTdGF0ZSwgc2V0VmFsdWVdID0gUmVhY3QudXNlU3RhdGUoZGVmYXVsdFByb3ApO1xuICBjb25zdCB2YWx1ZSA9IGlzQ29udHJvbGxlZCA/IGNvbnRyb2xsZWQgOiB2YWx1ZVN0YXRlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChpc0NvbnRyb2xsZWQgIT09IChjb250cm9sbGVkICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IEEgY29tcG9uZW50IGlzIGNoYW5naW5nIHRoZSAke2lzQ29udHJvbGxlZCA/ICcnIDogJ3VuJ31jb250cm9sbGVkICR7c3RhdGV9IHN0YXRlIG9mICR7bmFtZX0gdG8gYmUgJHtpc0NvbnRyb2xsZWQgPyAndW4nIDogJyd9Y29udHJvbGxlZC5gLCAnRWxlbWVudHMgc2hvdWxkIG5vdCBzd2l0Y2ggZnJvbSB1bmNvbnRyb2xsZWQgdG8gY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuJywgYERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJHtuYW1lfSBgICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LicsIFwiVGhlIG5hdHVyZSBvZiB0aGUgc3RhdGUgaXMgZGV0ZXJtaW5lZCBkdXJpbmcgdGhlIGZpcnN0IHJlbmRlci4gSXQncyBjb25zaWRlcmVkIGNvbnRyb2xsZWQgaWYgdGhlIHZhbHVlIGlzIG5vdCBgdW5kZWZpbmVkYC5cIiwgJ01vcmUgaW5mbzogaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW3N0YXRlLCBuYW1lLCBjb250cm9sbGVkXSk7XG4gICAgY29uc3Qge1xuICAgICAgY3VycmVudDogZGVmYXVsdFZhbHVlXG4gICAgfSA9IFJlYWN0LnVzZVJlZihkZWZhdWx0UHJvcCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghaXNDb250cm9sbGVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gZGVmYXVsdFByb3ApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgdGhlIGRlZmF1bHQgJHtzdGF0ZX0gc3RhdGUgb2YgYW4gdW5jb250cm9sbGVkICR7bmFtZX0gYWZ0ZXIgYmVpbmcgaW5pdGlhbGl6ZWQuIGAgKyBgVG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIG9wdCB0byB1c2UgYSBjb250cm9sbGVkICR7bmFtZX0uYF0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtKU09OLnN0cmluZ2lmeShkZWZhdWx0UHJvcCldKTtcbiAgfVxuXG4gIGNvbnN0IHNldFZhbHVlSWZVbmNvbnRyb2xsZWQgPSBSZWFjdC51c2VDYWxsYmFjayhuZXdWYWx1ZSA9PiB7XG4gICAgaWYgKCFpc0NvbnRyb2xsZWQpIHtcbiAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFt2YWx1ZSwgc2V0VmFsdWVJZlVuY29udHJvbGxlZF07XG59IiwiaW1wb3J0IHsgdW5zdGFibGVfdXNlRW5oYW5jZWRFZmZlY3QgYXMgdXNlRW5oYW5jZWRFZmZlY3QgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUVuaGFuY2VkRWZmZWN0OyIsImltcG9ydCB7IHVuc3RhYmxlX3VzZUV2ZW50Q2FsbGJhY2sgYXMgdXNlRXZlbnRDYWxsYmFjayB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRXZlbnRDYWxsYmFjazsiLCJpbXBvcnQgeyB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcmtSZWY7IiwiaW1wb3J0IHsgdW5zdGFibGVfdXNlSWQgYXMgdXNlSWQgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUlkOyIsIi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi92NC4xLjUvc3JjL2ZvY3VzLXZpc2libGUuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmxldCBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbmxldCBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xubGV0IGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5VGltZW91dDtcbmNvbnN0IGlucHV0VHlwZXNXaGl0ZWxpc3QgPSB7XG4gIHRleHQ6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgd2VlazogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWVcbn07XG4vKipcbiAqIENvbXB1dGVzIHdoZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgdHJpZ2dlciB0aGVcbiAqIGBmb2N1cy12aXNpYmxlYCBjbGFzcyBiZWluZyBhZGRlZCwgaS5lLiB3aGV0aGVyIGl0IHNob3VsZCBhbHdheXMgbWF0Y2hcbiAqIGA6Zm9jdXMtdmlzaWJsZWAgd2hlbiBmb2N1c2VkLlxuICogQHBhcmFtIHtFbGVtZW50fSBub2RlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eShub2RlKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIHRhZ05hbWVcbiAgfSA9IG5vZGU7XG5cbiAgaWYgKHRhZ05hbWUgPT09ICdJTlBVVCcgJiYgaW5wdXRUeXBlc1doaXRlbGlzdFt0eXBlXSAmJiAhbm9kZS5yZWFkT25seSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHRhZ05hbWUgPT09ICdURVhUQVJFQScgJiYgIW5vZGUucmVhZE9ubHkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIEtlZXAgdHJhY2sgb2Ygb3VyIGtleWJvYXJkIG1vZGFsaXR5IHN0YXRlIHdpdGggYGhhZEtleWJvYXJkRXZlbnRgLlxuICogSWYgdGhlIG1vc3QgcmVjZW50IHVzZXIgaW50ZXJhY3Rpb24gd2FzIHZpYSB0aGUga2V5Ym9hcmQ7XG4gKiBhbmQgdGhlIGtleSBwcmVzcyBkaWQgbm90IGluY2x1ZGUgYSBtZXRhLCBhbHQvb3B0aW9uLCBvciBjb250cm9sIGtleTtcbiAqIHRoZW4gdGhlIG1vZGFsaXR5IGlzIGtleWJvYXJkLiBPdGhlcndpc2UsIHRoZSBtb2RhbGl0eSBpcyBub3Qga2V5Ym9hcmQuXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XG4gKi9cblxuXG5mdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gIGlmIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG59XG4vKipcbiAqIElmIGF0IGFueSBwb2ludCBhIHVzZXIgY2xpY2tzIHdpdGggYSBwb2ludGluZyBkZXZpY2UsIGVuc3VyZSB0aGF0IHdlIGNoYW5nZVxuICogdGhlIG1vZGFsaXR5IGF3YXkgZnJvbSBrZXlib2FyZC5cbiAqIFRoaXMgYXZvaWRzIHRoZSBzaXR1YXRpb24gd2hlcmUgYSB1c2VyIHByZXNzZXMgYSBrZXkgb24gYW4gYWxyZWFkeSBmb2N1c2VkXG4gKiBlbGVtZW50LCBhbmQgdGhlbiBjbGlja3Mgb24gYSBkaWZmZXJlbnQgZWxlbWVudCwgZm9jdXNpbmcgaXQgd2l0aCBhXG4gKiBwb2ludGluZyBkZXZpY2UsIHdoaWxlIHdlIHN0aWxsIHRoaW5rIHdlJ3JlIGluIGtleWJvYXJkIG1vZGFsaXR5LlxuICovXG5cblxuZnVuY3Rpb24gaGFuZGxlUG9pbnRlckRvd24oKSB7XG4gIGhhZEtleWJvYXJkRXZlbnQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgaWYgKHRoaXMudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgIC8vIElmIHRoZSB0YWIgYmVjb21lcyBhY3RpdmUgYWdhaW4sIHRoZSBicm93c2VyIHdpbGwgaGFuZGxlIGNhbGxpbmcgZm9jdXNcbiAgICAvLyBvbiB0aGUgZWxlbWVudCAoU2FmYXJpIGFjdHVhbGx5IGNhbGxzIGl0IHR3aWNlKS5cbiAgICAvLyBJZiB0aGlzIHRhYiBjaGFuZ2UgY2F1c2VkIGEgYmx1ciBvbiBhbiBlbGVtZW50IHdpdGggZm9jdXMtdmlzaWJsZSxcbiAgICAvLyByZS1hcHBseSB0aGUgY2xhc3Mgd2hlbiB0aGUgdXNlciBzd2l0Y2hlcyBiYWNrIHRvIHRoZSB0YWIuXG4gICAgaWYgKGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5KSB7XG4gICAgICBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZShkb2MpIHtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlYXJkb3duKGRvYykge1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBoYW5kbGVQb2ludGVyRG93biwgdHJ1ZSk7XG4gIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBpc0ZvY3VzVmlzaWJsZShldmVudCkge1xuICBjb25zdCB7XG4gICAgdGFyZ2V0XG4gIH0gPSBldmVudDtcblxuICB0cnkge1xuICAgIHJldHVybiB0YXJnZXQubWF0Y2hlcygnOmZvY3VzLXZpc2libGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsvLyBCcm93c2VycyBub3QgaW1wbGVtZW50aW5nIDpmb2N1cy12aXNpYmxlIHdpbGwgdGhyb3cgYSBTeW50YXhFcnJvci5cbiAgICAvLyBXZSB1c2Ugb3VyIG93biBoZXVyaXN0aWMgZm9yIHRob3NlIGJyb3dzZXJzLlxuICAgIC8vIFJldGhyb3cgbWlnaHQgYmUgYmV0dGVyIGlmIGl0J3Mgbm90IHRoZSBleHBlY3RlZCBlcnJvciBidXQgZG8gd2UgcmVhbGx5XG4gICAgLy8gd2FudCB0byBjcmFzaCBpZiBmb2N1cy12aXNpYmxlIG1hbGZ1bmN0aW9uZWQ/XG4gIH0gLy8gTm8gbmVlZCBmb3IgdmFsaWRGb2N1c1RhcmdldCBjaGVjay4gVGhlIHVzZXIgZG9lcyB0aGF0IGJ5IGF0dGFjaGluZyBpdCB0b1xuICAvLyBmb2N1c2FibGUgZXZlbnRzIG9ubHkuXG5cblxuICByZXR1cm4gaGFkS2V5Ym9hcmRFdmVudCB8fCBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eSh0YXJnZXQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VJc0ZvY3VzVmlzaWJsZSgpIHtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgcHJlcGFyZShub2RlLm93bmVyRG9jdW1lbnQpO1xuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCBpc0ZvY3VzVmlzaWJsZVJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIC8qKlxuICAgKiBTaG91bGQgYmUgY2FsbGVkIGlmIGEgYmx1ciBldmVudCBpcyBmaXJlZFxuICAgKi9cblxuICBmdW5jdGlvbiBoYW5kbGVCbHVyVmlzaWJsZSgpIHtcbiAgICAvLyBjaGVja2luZyBhZ2FpbnN0IHBvdGVudGlhbCBzdGF0ZSB2YXJpYWJsZSBkb2VzIG5vdCBzdWZmaWNlIGlmIHdlIGZvY3VzIGFuZCBibHVyIHN5bmNocm9ub3VzbHkuXG4gICAgLy8gUmVhY3Qgd291bGRuJ3QgaGF2ZSB0aW1lIHRvIHRyaWdnZXIgYSByZS1yZW5kZXIgc28gYGZvY3VzVmlzaWJsZWAgd291bGQgYmUgc3RhbGUuXG4gICAgLy8gSWRlYWxseSB3ZSB3b3VsZCBhZGp1c3QgYGlzRm9jdXNWaXNpYmxlKGV2ZW50KWAgdG8gbG9vayBhdCBgcmVsYXRlZFRhcmdldGAgZm9yIGJsdXIgZXZlbnRzLlxuICAgIC8vIFRoaXMgZG9lc24ndCB3b3JrIGluIElFMTEgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzc1MVxuICAgIC8vIFRPRE86IGNoZWNrIGFnYWluIGlmIFJlYWN0IHJlbGVhc2VzIHRoZWlyIGludGVybmFsIGNoYW5nZXMgdG8gZm9jdXMgZXZlbnQgaGFuZGxpbmcgKGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MTg2KS5cbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCkge1xuICAgICAgLy8gVG8gZGV0ZWN0IGEgdGFiL3dpbmRvdyBzd2l0Y2gsIHdlIGxvb2sgZm9yIGEgYmx1ciBldmVudCBmb2xsb3dlZFxuICAgICAgLy8gcmFwaWRseSBieSBhIHZpc2liaWxpdHkgY2hhbmdlLlxuICAgICAgLy8gSWYgd2UgZG9uJ3Qgc2VlIGEgdmlzaWJpbGl0eSBjaGFuZ2Ugd2l0aGluIDEwMG1zLCBpdCdzIHByb2JhYmx5IGFcbiAgICAgIC8vIHJlZ3VsYXIgZm9jdXMgY2hhbmdlLlxuICAgICAgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkgPSB0cnVlO1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dChoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQpO1xuICAgICAgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xuICAgICAgfSwgMTAwKTtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG5cblxuICBmdW5jdGlvbiBoYW5kbGVGb2N1c1Zpc2libGUoZXZlbnQpIHtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGUoZXZlbnQpKSB7XG4gICAgICBpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgcmVmXG4gIH07XG59IiwiaW1wb3J0IHsgdW5zdGFibGVfdXNlSXNGb2N1c1Zpc2libGUgYXMgdXNlSXNGb2N1c1Zpc2libGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUlzRm9jdXNWaXNpYmxlOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IFRoZW1lQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnVGhlbWVDb250ZXh0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGhlbWVDb250ZXh0OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUaGVtZUNvbnRleHQgZnJvbSAnLi9UaGVtZUNvbnRleHQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWUoKSB7XG4gIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRGVidWdWYWx1ZSh0aGVtZSk7XG4gIH1cblxuICByZXR1cm4gdGhlbWU7XG59IiwiaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciByZWFjdFByb3BzUmVnZXggPSAvXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhYmJyfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGVudGVyS2V5SGludHxmb3JtfGZvcm1BY3Rpb258Zm9ybUVuY1R5cGV8Zm9ybU1ldGhvZHxmb3JtTm9WYWxpZGF0ZXxmb3JtVGFyZ2V0fGZyYW1lQm9yZGVyfGhlYWRlcnN8aGVpZ2h0fGhpZGRlbnxoaWdofGhyZWZ8aHJlZkxhbmd8aHRtbEZvcnxodHRwRXF1aXZ8aWR8aW5wdXRNb2RlfGludGVncml0eXxpc3xrZXlQYXJhbXN8a2V5VHlwZXxraW5kfGxhYmVsfGxhbmd8bGlzdHxsb2FkaW5nfGxvb3B8bG93fG1hcmdpbkhlaWdodHxtYXJnaW5XaWR0aHxtYXh8bWF4TGVuZ3RofG1lZGlhfG1lZGlhR3JvdXB8bWV0aG9kfG1pbnxtaW5MZW5ndGh8bXVsdGlwbGV8bXV0ZWR8bmFtZXxub25jZXxub1ZhbGlkYXRlfG9wZW58b3B0aW11bXxwYXR0ZXJufHBsYWNlaG9sZGVyfHBsYXlzSW5saW5lfHBvc3RlcnxwcmVsb2FkfHByb2ZpbGV8cmFkaW9Hcm91cHxyZWFkT25seXxyZWZlcnJlclBvbGljeXxyZWx8cmVxdWlyZWR8cmV2ZXJzZWR8cm9sZXxyb3dzfHJvd1NwYW58c2FuZGJveHxzY29wZXxzY29wZWR8c2Nyb2xsaW5nfHNlYW1sZXNzfHNlbGVjdGVkfHNoYXBlfHNpemV8c2l6ZXN8c2xvdHxzcGFufHNwZWxsQ2hlY2t8c3JjfHNyY0RvY3xzcmNMYW5nfHNyY1NldHxzdGFydHxzdGVwfHN0eWxlfHN1bW1hcnl8dGFiSW5kZXh8dGFyZ2V0fHRpdGxlfHRyYW5zbGF0ZXx0eXBlfHVzZU1hcHx2YWx1ZXx3aWR0aHx3bW9kZXx3cmFwfGFib3V0fGRhdGF0eXBlfGlubGlzdHxwcmVmaXh8cHJvcGVydHl8cmVzb3VyY2V8dHlwZW9mfHZvY2FifGF1dG9DYXBpdGFsaXplfGF1dG9Db3JyZWN0fGF1dG9TYXZlfGNvbG9yfGluY3JlbWVudGFsfGZhbGxiYWNrfGluZXJ0fGl0ZW1Qcm9wfGl0ZW1TY29wZXxpdGVtVHlwZXxpdGVtSUR8aXRlbVJlZnxvbnxvcHRpb258cmVzdWx0c3xzZWN1cml0eXx1bnNlbGVjdGFibGV8YWNjZW50SGVpZ2h0fGFjY3VtdWxhdGV8YWRkaXRpdmV8YWxpZ25tZW50QmFzZWxpbmV8YWxsb3dSZW9yZGVyfGFscGhhYmV0aWN8YW1wbGl0dWRlfGFyYWJpY0Zvcm18YXNjZW50fGF0dHJpYnV0ZU5hbWV8YXR0cmlidXRlVHlwZXxhdXRvUmV2ZXJzZXxhemltdXRofGJhc2VGcmVxdWVuY3l8YmFzZWxpbmVTaGlmdHxiYXNlUHJvZmlsZXxiYm94fGJlZ2lufGJpYXN8Ynl8Y2FsY01vZGV8Y2FwSGVpZ2h0fGNsaXB8Y2xpcFBhdGhVbml0c3xjbGlwUGF0aHxjbGlwUnVsZXxjb2xvckludGVycG9sYXRpb258Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc3xjb2xvclByb2ZpbGV8Y29sb3JSZW5kZXJpbmd8Y29udGVudFNjcmlwdFR5cGV8Y29udGVudFN0eWxlVHlwZXxjdXJzb3J8Y3h8Y3l8ZHxkZWNlbGVyYXRlfGRlc2NlbnR8ZGlmZnVzZUNvbnN0YW50fGRpcmVjdGlvbnxkaXNwbGF5fGRpdmlzb3J8ZG9taW5hbnRCYXNlbGluZXxkdXJ8ZHh8ZHl8ZWRnZU1vZGV8ZWxldmF0aW9ufGVuYWJsZUJhY2tncm91bmR8ZW5kfGV4cG9uZW50fGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWR8ZmlsbHxmaWxsT3BhY2l0eXxmaWxsUnVsZXxmaWx0ZXJ8ZmlsdGVyUmVzfGZpbHRlclVuaXRzfGZsb29kQ29sb3J8Zmxvb2RPcGFjaXR5fGZvY3VzYWJsZXxmb250RmFtaWx5fGZvbnRTaXplfGZvbnRTaXplQWRqdXN0fGZvbnRTdHJldGNofGZvbnRTdHlsZXxmb250VmFyaWFudHxmb250V2VpZ2h0fGZvcm1hdHxmcm9tfGZyfGZ4fGZ5fGcxfGcyfGdseXBoTmFtZXxnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbHxnbHlwaE9yaWVudGF0aW9uVmVydGljYWx8Z2x5cGhSZWZ8Z3JhZGllbnRUcmFuc2Zvcm18Z3JhZGllbnRVbml0c3xoYW5naW5nfGhvcml6QWR2WHxob3Jpek9yaWdpblh8aWRlb2dyYXBoaWN8aW1hZ2VSZW5kZXJpbmd8aW58aW4yfGludGVyY2VwdHxrfGsxfGsyfGszfGs0fGtlcm5lbE1hdHJpeHxrZXJuZWxVbml0TGVuZ3RofGtlcm5pbmd8a2V5UG9pbnRzfGtleVNwbGluZXN8a2V5VGltZXN8bGVuZ3RoQWRqdXN0fGxldHRlclNwYWNpbmd8bGlnaHRpbmdDb2xvcnxsaW1pdGluZ0NvbmVBbmdsZXxsb2NhbHxtYXJrZXJFbmR8bWFya2VyTWlkfG1hcmtlclN0YXJ0fG1hcmtlckhlaWdodHxtYXJrZXJVbml0c3xtYXJrZXJXaWR0aHxtYXNrfG1hc2tDb250ZW50VW5pdHN8bWFza1VuaXRzfG1hdGhlbWF0aWNhbHxtb2RlfG51bU9jdGF2ZXN8b2Zmc2V0fG9wYWNpdHl8b3BlcmF0b3J8b3JkZXJ8b3JpZW50fG9yaWVudGF0aW9ufG9yaWdpbnxvdmVyZmxvd3xvdmVybGluZVBvc2l0aW9ufG92ZXJsaW5lVGhpY2tuZXNzfHBhbm9zZTF8cGFpbnRPcmRlcnxwYXRoTGVuZ3RofHBhdHRlcm5Db250ZW50VW5pdHN8cGF0dGVyblRyYW5zZm9ybXxwYXR0ZXJuVW5pdHN8cG9pbnRlckV2ZW50c3xwb2ludHN8cG9pbnRzQXRYfHBvaW50c0F0WXxwb2ludHNBdFp8cHJlc2VydmVBbHBoYXxwcmVzZXJ2ZUFzcGVjdFJhdGlvfHByaW1pdGl2ZVVuaXRzfHJ8cmFkaXVzfHJlZlh8cmVmWXxyZW5kZXJpbmdJbnRlbnR8cmVwZWF0Q291bnR8cmVwZWF0RHVyfHJlcXVpcmVkRXh0ZW5zaW9uc3xyZXF1aXJlZEZlYXR1cmVzfHJlc3RhcnR8cmVzdWx0fHJvdGF0ZXxyeHxyeXxzY2FsZXxzZWVkfHNoYXBlUmVuZGVyaW5nfHNsb3BlfHNwYWNpbmd8c3BlY3VsYXJDb25zdGFudHxzcGVjdWxhckV4cG9uZW50fHNwZWVkfHNwcmVhZE1ldGhvZHxzdGFydE9mZnNldHxzdGREZXZpYXRpb258c3RlbWh8c3RlbXZ8c3RpdGNoVGlsZXN8c3RvcENvbG9yfHN0b3BPcGFjaXR5fHN0cmlrZXRocm91Z2hQb3NpdGlvbnxzdHJpa2V0aHJvdWdoVGhpY2tuZXNzfHN0cmluZ3xzdHJva2V8c3Ryb2tlRGFzaGFycmF5fHN0cm9rZURhc2hvZmZzZXR8c3Ryb2tlTGluZWNhcHxzdHJva2VMaW5lam9pbnxzdHJva2VNaXRlcmxpbWl0fHN0cm9rZU9wYWNpdHl8c3Ryb2tlV2lkdGh8c3VyZmFjZVNjYWxlfHN5c3RlbUxhbmd1YWdlfHRhYmxlVmFsdWVzfHRhcmdldFh8dGFyZ2V0WXx0ZXh0QW5jaG9yfHRleHREZWNvcmF0aW9ufHRleHRSZW5kZXJpbmd8dGV4dExlbmd0aHx0b3x0cmFuc2Zvcm18dTF8dTJ8dW5kZXJsaW5lUG9zaXRpb258dW5kZXJsaW5lVGhpY2tuZXNzfHVuaWNvZGV8dW5pY29kZUJpZGl8dW5pY29kZVJhbmdlfHVuaXRzUGVyRW18dkFscGhhYmV0aWN8dkhhbmdpbmd8dklkZW9ncmFwaGljfHZNYXRoZW1hdGljYWx8dmFsdWVzfHZlY3RvckVmZmVjdHx2ZXJzaW9ufHZlcnRBZHZZfHZlcnRPcmlnaW5YfHZlcnRPcmlnaW5ZfHZpZXdCb3h8dmlld1RhcmdldHx2aXNpYmlsaXR5fHdpZHRoc3x3b3JkU3BhY2luZ3x3cml0aW5nTW9kZXx4fHhIZWlnaHR8eDF8eDJ8eENoYW5uZWxTZWxlY3Rvcnx4bGlua0FjdHVhdGV8eGxpbmtBcmNyb2xlfHhsaW5rSHJlZnx4bGlua1JvbGV8eGxpbmtTaG93fHhsaW5rVGl0bGV8eGxpbmtUeXBlfHhtbEJhc2V8eG1sbnN8eG1sbnNYbGlua3x4bWxMYW5nfHhtbFNwYWNlfHl8eTF8eTJ8eUNoYW5uZWxTZWxlY3Rvcnx6fHpvb21BbmRQYW58Zm9yfGNsYXNzfGF1dG9mb2N1cyl8KChbRGRdW0FhXVtUdF1bQWFdfFtBYV1bUnJdW0lpXVtBYV18eCktLiopKSQvOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViZmVlNjhhNGNkN2U2MDA5ZWY2MWQyM1xuXG52YXIgaXNQcm9wVmFsaWQgPSAvKiAjX19QVVJFX18gKi9tZW1vaXplKGZ1bmN0aW9uIChwcm9wKSB7XG4gIHJldHVybiByZWFjdFByb3BzUmVnZXgudGVzdChwcm9wKSB8fCBwcm9wLmNoYXJDb2RlQXQoMCkgPT09IDExMVxuICAvKiBvICovXG4gICYmIHByb3AuY2hhckNvZGVBdCgxKSA9PT0gMTEwXG4gIC8qIG4gKi9cbiAgJiYgcHJvcC5jaGFyQ29kZUF0KDIpIDwgOTE7XG59XG4vKiBaKzEgKi9cbik7XG5cbmV4cG9ydCBkZWZhdWx0IGlzUHJvcFZhbGlkO1xuIiwiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgY3JlYXRlRWxlbWVudCwgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaXNQcm9wVmFsaWQgZnJvbSAnQGVtb3Rpb24vaXMtcHJvcC12YWxpZCc7XG5pbXBvcnQgeyB3aXRoRW1vdGlvbkNhY2hlLCBUaGVtZUNvbnRleHQgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCByZWdpc3RlclN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciB0ZXN0T21pdFByb3BzT25TdHJpbmdUYWcgPSBpc1Byb3BWYWxpZDtcblxudmFyIHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudCA9IGZ1bmN0aW9uIHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudChrZXkpIHtcbiAgcmV0dXJuIGtleSAhPT0gJ3RoZW1lJztcbn07XG5cbnZhciBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AgPSBmdW5jdGlvbiBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AodGFnKSB7XG4gIHJldHVybiB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyAmJiAvLyA5NiBpcyBvbmUgbGVzcyB0aGFuIHRoZSBjaGFyIGNvZGVcbiAgLy8gZm9yIFwiYVwiIHNvIHRoaXMgaXMgY2hlY2tpbmcgdGhhdFxuICAvLyBpdCdzIGEgbG93ZXJjYXNlIGNoYXJhY3RlclxuICB0YWcuY2hhckNvZGVBdCgwKSA+IDk2ID8gdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnIDogdGVzdE9taXRQcm9wc09uQ29tcG9uZW50O1xufTtcbnZhciBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzID0gZnVuY3Rpb24gY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyh0YWcsIG9wdGlvbnMsIGlzUmVhbCkge1xuICB2YXIgc2hvdWxkRm9yd2FyZFByb3A7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB2YXIgb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wID0gb3B0aW9ucy5zaG91bGRGb3J3YXJkUHJvcDtcbiAgICBzaG91bGRGb3J3YXJkUHJvcCA9IHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3AgJiYgb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wID8gZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICByZXR1cm4gdGFnLl9fZW1vdGlvbl9mb3J3YXJkUHJvcChwcm9wTmFtZSkgJiYgb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wKHByb3BOYW1lKTtcbiAgICB9IDogb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzaG91bGRGb3J3YXJkUHJvcCAhPT0gJ2Z1bmN0aW9uJyAmJiBpc1JlYWwpIHtcbiAgICBzaG91bGRGb3J3YXJkUHJvcCA9IHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3A7XG4gIH1cblxuICByZXR1cm4gc2hvdWxkRm9yd2FyZFByb3A7XG59O1xuXG52YXIgSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IgPSBcIllvdSBoYXZlIGlsbGVnYWwgZXNjYXBlIHNlcXVlbmNlIGluIHlvdXIgdGVtcGxhdGUgbGl0ZXJhbCwgbW9zdCBsaWtlbHkgaW5zaWRlIGNvbnRlbnQncyBwcm9wZXJ0eSB2YWx1ZS5cXG5CZWNhdXNlIHlvdSB3cml0ZSB5b3VyIENTUyBpbnNpZGUgYSBKYXZhU2NyaXB0IHN0cmluZyB5b3UgYWN0dWFsbHkgaGF2ZSB0byBkbyBkb3VibGUgZXNjYXBpbmcsIHNvIGZvciBleGFtcGxlIFxcXCJjb250ZW50OiAnXFxcXDAwZDcnO1xcXCIgc2hvdWxkIGJlY29tZSBcXFwiY29udGVudDogJ1xcXFxcXFxcMDBkNyc7XFxcIi5cXG5Zb3UgY2FuIHJlYWQgbW9yZSBhYm91dCB0aGlzIGhlcmU6XFxuaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvVGVtcGxhdGVfbGl0ZXJhbHMjRVMyMDE4X3JldmlzaW9uX29mX2lsbGVnYWxfZXNjYXBlX3NlcXVlbmNlc1wiO1xuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWQgPSBfcmVmLnNlcmlhbGl6ZWQsXG4gICAgICBpc1N0cmluZ1RhZyA9IF9yZWYuaXNTdHJpbmdUYWc7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBydWxlcyA9IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgY3JlYXRlU3R5bGVkID0gZnVuY3Rpb24gY3JlYXRlU3R5bGVkKHRhZywgb3B0aW9ucykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0YWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgYXJlIHRyeWluZyB0byBjcmVhdGUgYSBzdHlsZWQgZWxlbWVudCB3aXRoIGFuIHVuZGVmaW5lZCBjb21wb25lbnQuXFxuWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBpbXBvcnQgaXQuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGlzUmVhbCA9IHRhZy5fX2Vtb3Rpb25fcmVhbCA9PT0gdGFnO1xuICB2YXIgYmFzZVRhZyA9IGlzUmVhbCAmJiB0YWcuX19lbW90aW9uX2Jhc2UgfHwgdGFnO1xuICB2YXIgaWRlbnRpZmllck5hbWU7XG4gIHZhciB0YXJnZXRDbGFzc05hbWU7XG5cbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlkZW50aWZpZXJOYW1lID0gb3B0aW9ucy5sYWJlbDtcbiAgICB0YXJnZXRDbGFzc05hbWUgPSBvcHRpb25zLnRhcmdldDtcbiAgfVxuXG4gIHZhciBzaG91bGRGb3J3YXJkUHJvcCA9IGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHModGFnLCBvcHRpb25zLCBpc1JlYWwpO1xuICB2YXIgZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3AgfHwgZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wKGJhc2VUYWcpO1xuICB2YXIgc2hvdWxkVXNlQXMgPSAhZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wKCdhcycpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBzdHlsZXMgPSBpc1JlYWwgJiYgdGFnLl9fZW1vdGlvbl9zdHlsZXMgIT09IHVuZGVmaW5lZCA/IHRhZy5fX2Vtb3Rpb25fc3R5bGVzLnNsaWNlKDApIDogW107XG5cbiAgICBpZiAoaWRlbnRpZmllck5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3R5bGVzLnB1c2goXCJsYWJlbDpcIiArIGlkZW50aWZpZXJOYW1lICsgXCI7XCIpO1xuICAgIH1cblxuICAgIGlmIChhcmdzWzBdID09IG51bGwgfHwgYXJnc1swXS5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc3R5bGVzLnB1c2guYXBwbHkoc3R5bGVzLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXJnc1swXVswXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IpO1xuICAgICAgfVxuXG4gICAgICBzdHlsZXMucHVzaChhcmdzWzBdWzBdKTtcbiAgICAgIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgICAgIHZhciBpID0gMTtcblxuICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhcmdzWzBdW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlcy5wdXNoKGFyZ3NbaV0sIGFyZ3NbMF1baV0pO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZTogd2UgbmVlZCB0byBjYXN0IFN0YXRlbGVzc0Z1bmN0aW9uYWxDb21wb25lbnQgdG8gb3VyIFByaXZhdGVTdHlsZWRDb21wb25lbnQgY2xhc3NcblxuXG4gICAgdmFyIFN0eWxlZCA9IHdpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSwgcmVmKSB7XG4gICAgICB2YXIgRmluYWxUYWcgPSBzaG91bGRVc2VBcyAmJiBwcm9wcy5hcyB8fCBiYXNlVGFnO1xuICAgICAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuICAgICAgdmFyIGNsYXNzSW50ZXJwb2xhdGlvbnMgPSBbXTtcbiAgICAgIHZhciBtZXJnZWRQcm9wcyA9IHByb3BzO1xuXG4gICAgICBpZiAocHJvcHMudGhlbWUgPT0gbnVsbCkge1xuICAgICAgICBtZXJnZWRQcm9wcyA9IHt9O1xuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICAgIG1lcmdlZFByb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgbWVyZ2VkUHJvcHMudGhlbWUgPSB1c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgcHJvcHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIGNsYXNzSW50ZXJwb2xhdGlvbnMsIHByb3BzLmNsYXNzTmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKHByb3BzLmNsYXNzTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhzdHlsZXMuY29uY2F0KGNsYXNzSW50ZXJwb2xhdGlvbnMpLCBjYWNoZS5yZWdpc3RlcmVkLCBtZXJnZWRQcm9wcyk7XG4gICAgICBjbGFzc05hbWUgKz0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgICAgIGlmICh0YXJnZXRDbGFzc05hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyB0YXJnZXRDbGFzc05hbWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBmaW5hbFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkVXNlQXMgJiYgc2hvdWxkRm9yd2FyZFByb3AgPT09IHVuZGVmaW5lZCA/IGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcChGaW5hbFRhZykgOiBkZWZhdWx0U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICAgICAgZm9yICh2YXIgX2tleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAoc2hvdWxkVXNlQXMgJiYgX2tleSA9PT0gJ2FzJykgY29udGludWU7XG5cbiAgICAgICAgaWYgKCAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIGZpbmFsU2hvdWxkRm9yd2FyZFByb3AoX2tleSkpIHtcbiAgICAgICAgICBuZXdQcm9wc1tfa2V5XSA9IHByb3BzW19rZXldO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgIG5ld1Byb3BzLnJlZiA9IHJlZjtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgICAgIGNhY2hlOiBjYWNoZSxcbiAgICAgICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICAgICAgaXNTdHJpbmdUYWc6IHR5cGVvZiBGaW5hbFRhZyA9PT0gJ3N0cmluZydcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChGaW5hbFRhZywgbmV3UHJvcHMpKTtcbiAgICB9KTtcbiAgICBTdHlsZWQuZGlzcGxheU5hbWUgPSBpZGVudGlmaWVyTmFtZSAhPT0gdW5kZWZpbmVkID8gaWRlbnRpZmllck5hbWUgOiBcIlN0eWxlZChcIiArICh0eXBlb2YgYmFzZVRhZyA9PT0gJ3N0cmluZycgPyBiYXNlVGFnIDogYmFzZVRhZy5kaXNwbGF5TmFtZSB8fCBiYXNlVGFnLm5hbWUgfHwgJ0NvbXBvbmVudCcpICsgXCIpXCI7XG4gICAgU3R5bGVkLmRlZmF1bHRQcm9wcyA9IHRhZy5kZWZhdWx0UHJvcHM7XG4gICAgU3R5bGVkLl9fZW1vdGlvbl9yZWFsID0gU3R5bGVkO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fYmFzZSA9IGJhc2VUYWc7XG4gICAgU3R5bGVkLl9fZW1vdGlvbl9zdHlsZXMgPSBzdHlsZXM7XG4gICAgU3R5bGVkLl9fZW1vdGlvbl9mb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHlsZWQsICd0b1N0cmluZycsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSgpIHtcbiAgICAgICAgaWYgKHRhcmdldENsYXNzTmFtZSA9PT0gdW5kZWZpbmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUic7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZTogY29lcmNlIHVuZGVmaW5lZCB0byBzdHJpbmdcblxuXG4gICAgICAgIHJldHVybiBcIi5cIiArIHRhcmdldENsYXNzTmFtZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFN0eWxlZC53aXRoQ29tcG9uZW50ID0gZnVuY3Rpb24gKG5leHRUYWcsIG5leHRPcHRpb25zKSB7XG4gICAgICByZXR1cm4gY3JlYXRlU3R5bGVkKG5leHRUYWcsIF9leHRlbmRzKHt9LCBvcHRpb25zLCBuZXh0T3B0aW9ucywge1xuICAgICAgICBzaG91bGRGb3J3YXJkUHJvcDogY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyhTdHlsZWQsIG5leHRPcHRpb25zLCB0cnVlKVxuICAgICAgfSkpLmFwcGx5KHZvaWQgMCwgc3R5bGVzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFN0eWxlZDtcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN0eWxlZDtcbiIsImltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzJztcbmltcG9ydCAncmVhY3QnO1xuaW1wb3J0ICdAZW1vdGlvbi9pcy1wcm9wLXZhbGlkJztcbmltcG9ydCBjcmVhdGVTdHlsZWQgZnJvbSAnLi4vYmFzZS9kaXN0L2Vtb3Rpb24tc3R5bGVkLWJhc2UuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgdGFncyA9IFsnYScsICdhYmJyJywgJ2FkZHJlc3MnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2F1ZGlvJywgJ2InLCAnYmFzZScsICdiZGknLCAnYmRvJywgJ2JpZycsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhbnZhcycsICdjYXB0aW9uJywgJ2NpdGUnLCAnY29kZScsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGF0YScsICdkYXRhbGlzdCcsICdkZCcsICdkZWwnLCAnZGV0YWlscycsICdkZm4nLCAnZGlhbG9nJywgJ2RpdicsICdkbCcsICdkdCcsICdlbScsICdlbWJlZCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaW5zJywgJ2tiZCcsICdrZXlnZW4nLCAnbGFiZWwnLCAnbGVnZW5kJywgJ2xpJywgJ2xpbmsnLCAnbWFpbicsICdtYXAnLCAnbWFyaycsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0YScsICdtZXRlcicsICduYXYnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ29sJywgJ29wdGdyb3VwJywgJ29wdGlvbicsICdvdXRwdXQnLCAncCcsICdwYXJhbScsICdwaWN0dXJlJywgJ3ByZScsICdwcm9ncmVzcycsICdxJywgJ3JwJywgJ3J0JywgJ3J1YnknLCAncycsICdzYW1wJywgJ3NjcmlwdCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzbWFsbCcsICdzb3VyY2UnLCAnc3BhbicsICdzdHJvbmcnLCAnc3R5bGUnLCAnc3ViJywgJ3N1bW1hcnknLCAnc3VwJywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpbWUnLCAndGl0bGUnLCAndHInLCAndHJhY2snLCAndScsICd1bCcsICd2YXInLCAndmlkZW8nLCAnd2JyJywgLy8gU1ZHXG4nY2lyY2xlJywgJ2NsaXBQYXRoJywgJ2RlZnMnLCAnZWxsaXBzZScsICdmb3JlaWduT2JqZWN0JywgJ2cnLCAnaW1hZ2UnLCAnbGluZScsICdsaW5lYXJHcmFkaWVudCcsICdtYXNrJywgJ3BhdGgnLCAncGF0dGVybicsICdwb2x5Z29uJywgJ3BvbHlsaW5lJywgJ3JhZGlhbEdyYWRpZW50JywgJ3JlY3QnLCAnc3RvcCcsICdzdmcnLCAndGV4dCcsICd0c3BhbiddO1xuXG52YXIgbmV3U3R5bGVkID0gY3JlYXRlU3R5bGVkLmJpbmQoKTtcbnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnTmFtZSkge1xuICAvLyAkRmxvd0ZpeE1lOiB3ZSBjYW4gaWdub3JlIHRoaXMgYmVjYXVzZSBpdHMgZXhwb3NlZCB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIENyZWF0ZVN0eWxlZCB0eXBlXG4gIG5ld1N0eWxlZFt0YWdOYW1lXSA9IG5ld1N0eWxlZCh0YWdOYW1lKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBuZXdTdHlsZWQ7XG4iLCIvKiogQGxpY2Vuc2UgTVVJIHY1LjEwLjZcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBlbVN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3R5bGVkKHRhZywgb3B0aW9ucykge1xuICBjb25zdCBzdHlsZXNGYWN0b3J5ID0gZW1TdHlsZWQodGFnLCBvcHRpb25zKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiAoLi4uc3R5bGVzKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyA/IGBcIiR7dGFnfVwiYCA6ICdjb21wb25lbnQnO1xuXG4gICAgICBpZiAoc3R5bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBTZWVtcyBsaWtlIHlvdSBjYWxsZWQgXFxgc3R5bGVkKCR7Y29tcG9uZW50fSkoKVxcYCB3aXRob3V0IGEgXFxgc3R5bGVcXGAgYXJndW1lbnQuYCwgJ1lvdSBtdXN0IHByb3ZpZGUgYSBgc3R5bGVzYCBhcmd1bWVudDogYHN0eWxlZChcImRpdlwiKShzdHlsZVlvdUZvcmdvdFRvUGFzcylgLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGVzLnNvbWUoc3R5bGUgPT4gc3R5bGUgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiB0aGUgc3R5bGVkKCR7Y29tcG9uZW50fSkoLi4uYXJncykgQVBJIHJlcXVpcmVzIGFsbCBpdHMgYXJncyB0byBiZSBkZWZpbmVkLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGVzRmFjdG9yeSguLi5zdHlsZXMpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3R5bGVzRmFjdG9yeTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuXG5leHBvcnQgY29uc3QgaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyA9ICh0YWcsIHByb2Nlc3NvcikgPT4ge1xuICAvLyBFbW90aW9uIGF0dGFjaGVzIGFsbCB0aGUgc3R5bGVzIGFzIGBfX2Vtb3Rpb25fc3R5bGVzYC5cbiAgLy8gUmVmOiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMTZkOTcxZDBkYTIyOTU5NmQ2YmNjMzlkMjgyYmE5NzUzYzllZTdjZi9wYWNrYWdlcy9zdHlsZWQvc3JjL2Jhc2UuanMjTDE4NlxuICBpZiAoQXJyYXkuaXNBcnJheSh0YWcuX19lbW90aW9uX3N0eWxlcykpIHtcbiAgICB0YWcuX19lbW90aW9uX3N0eWxlcyA9IHByb2Nlc3Nvcih0YWcuX19lbW90aW9uX3N0eWxlcyk7XG4gIH1cbn07XG5leHBvcnQgeyBUaGVtZUNvbnRleHQsIGtleWZyYW1lcywgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdHlsZWRFbmdpbmVQcm92aWRlciB9IGZyb20gJy4vU3R5bGVkRW5naW5lUHJvdmlkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHbG9iYWxTdHlsZXMgfSBmcm9tICcuL0dsb2JhbFN0eWxlcyc7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7IC8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc21bLlxuXG5leHBvcnQgY29uc3QgdmFsdWVzID0ge1xuICB4czogMCxcbiAgLy8gcGhvbmVcbiAgc206IDYwMCxcbiAgLy8gdGFibGV0XG4gIG1kOiA5MDAsXG4gIC8vIHNtYWxsIGxhcHRvcFxuICBsZzogMTIwMCxcbiAgLy8gZGVza3RvcFxuICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cblxufTtcbmNvbnN0IGRlZmF1bHRCcmVha3BvaW50cyA9IHtcbiAgLy8gU29ydGVkIEFTQyBieSBzaXplLiBUaGF0J3MgaW1wb3J0YW50LlxuICAvLyBJdCBjYW4ndCBiZSBjb25maWd1cmVkIGFzIGl0J3MgdXNlZCBzdGF0aWNhbGx5IGZvciBwcm9wVHlwZXMuXG4gIGtleXM6IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnXSxcbiAgdXA6IGtleSA9PiBgQG1lZGlhIChtaW4td2lkdGg6JHt2YWx1ZXNba2V5XX1weClgXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSkge1xuICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lIHx8IHt9O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBwcm9wVmFsdWUucmVkdWNlKChhY2MsIGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cCh0aGVtZUJyZWFrcG9pbnRzLmtleXNbaW5kZXhdKV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2luZGV4XSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BWYWx1ZSkucmVkdWNlKChhY2MsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIC8vIGtleSBpcyBicmVha3BvaW50XG4gICAgICBpZiAoT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cy52YWx1ZXMgfHwgdmFsdWVzKS5pbmRleE9mKGJyZWFrcG9pbnQpICE9PSAtMSkge1xuICAgICAgICBjb25zdCBtZWRpYUtleSA9IHRoZW1lQnJlYWtwb2ludHMudXAoYnJlYWtwb2ludCk7XG4gICAgICAgIGFjY1ttZWRpYUtleV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2JyZWFrcG9pbnRdLCBicmVha3BvaW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNzc0tleSA9IGJyZWFrcG9pbnQ7XG4gICAgICAgIGFjY1tjc3NLZXldID0gcHJvcFZhbHVlW2Nzc0tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0ID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIGJyZWFrcG9pbnRzKHN0eWxlRnVuY3Rpb24pIHtcbiAgY29uc3QgbmV3U3R5bGVGdW5jdGlvbiA9IHByb3BzID0+IHtcbiAgICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lIHx8IHt9O1xuICAgIGNvbnN0IGJhc2UgPSBzdHlsZUZ1bmN0aW9uKHByb3BzKTtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIGNvbnN0IGV4dGVuZGVkID0gdGhlbWVCcmVha3BvaW50cy5rZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGlmIChwcm9wc1trZXldKSB7XG4gICAgICAgIGFjYyA9IGFjYyB8fCB7fTtcbiAgICAgICAgYWNjW3RoZW1lQnJlYWtwb2ludHMudXAoa2V5KV0gPSBzdHlsZUZ1bmN0aW9uKF9leHRlbmRzKHtcbiAgICAgICAgICB0aGVtZVxuICAgICAgICB9LCBwcm9wc1trZXldKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbnVsbCk7XG4gICAgcmV0dXJuIG1lcmdlKGJhc2UsIGV4dGVuZGVkKTtcbiAgfTtcblxuICBuZXdTdHlsZUZ1bmN0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBfZXh0ZW5kcyh7fSwgc3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMsIHtcbiAgICB4czogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzbTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBtZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBsZzogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB4bDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSA6IHt9O1xuICBuZXdTdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzID0gWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCcsIC4uLnN0eWxlRnVuY3Rpb24uZmlsdGVyUHJvcHNdO1xuICByZXR1cm4gbmV3U3R5bGVGdW5jdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdChicmVha3BvaW50c0lucHV0ID0ge30pIHtcbiAgdmFyIF9icmVha3BvaW50c0lucHV0JGtleTtcblxuICBjb25zdCBicmVha3BvaW50c0luT3JkZXIgPSAoX2JyZWFrcG9pbnRzSW5wdXQka2V5ID0gYnJlYWtwb2ludHNJbnB1dC5rZXlzKSA9PSBudWxsID8gdm9pZCAwIDogX2JyZWFrcG9pbnRzSW5wdXQka2V5LnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVLZXkgPSBicmVha3BvaW50c0lucHV0LnVwKGtleSk7XG4gICAgYWNjW2JyZWFrcG9pbnRTdHlsZUtleV0gPSB7fTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBicmVha3BvaW50c0luT3JkZXIgfHwge307XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoYnJlYWtwb2ludEtleXMsIHN0eWxlKSB7XG4gIHJldHVybiBicmVha3BvaW50S2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludE91dHB1dCA9IGFjY1trZXldO1xuICAgIGNvbnN0IGlzQnJlYWtwb2ludFVudXNlZCA9ICFicmVha3BvaW50T3V0cHV0IHx8IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRPdXRwdXQpLmxlbmd0aCA9PT0gMDtcblxuICAgIGlmIChpc0JyZWFrcG9pbnRVbnVzZWQpIHtcbiAgICAgIGRlbGV0ZSBhY2Nba2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCBzdHlsZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VCcmVha3BvaW50c0luT3JkZXIoYnJlYWtwb2ludHNJbnB1dCwgLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGVtcHR5QnJlYWtwb2ludHMgPSBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IG1lcmdlZE91dHB1dCA9IFtlbXB0eUJyZWFrcG9pbnRzLCAuLi5zdHlsZXNdLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gZGVlcG1lcmdlKHByZXYsIG5leHQpLCB7fSk7XG4gIHJldHVybiByZW1vdmVVbnVzZWRCcmVha3BvaW50cyhPYmplY3Qua2V5cyhlbXB0eUJyZWFrcG9pbnRzKSwgbWVyZ2VkT3V0cHV0KTtcbn0gLy8gY29tcHV0ZSBiYXNlIGZvciByZXNwb25zaXZlIHZhbHVlczsgZS5nLixcbi8vIFsxLDIsM10gPT4ge3hzOiB0cnVlLCBzbTogdHJ1ZSwgbWQ6IHRydWV9XG4vLyB7eHM6IDEsIHNtOiAyLCBtZDogM30gPT4ge3hzOiB0cnVlLCBzbTogdHJ1ZSwgbWQ6IHRydWV9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpIHtcbiAgLy8gZml4ZWQgdmFsdWVcbiAgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IGJhc2UgPSB7fTtcbiAgY29uc3QgYnJlYWtwb2ludHNLZXlzID0gT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cyk7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludFZhbHVlcykpIHtcbiAgICBicmVha3BvaW50c0tleXMuZm9yRWFjaCgoYnJlYWtwb2ludCwgaSkgPT4ge1xuICAgICAgaWYgKGkgPCBicmVha3BvaW50VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICBiYXNlW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBicmVha3BvaW50c0tleXMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgIGlmIChicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdICE9IG51bGwpIHtcbiAgICAgICAgYmFzZVticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYmFzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gIHZhbHVlczogYnJlYWtwb2ludFZhbHVlcyxcbiAgYnJlYWtwb2ludHM6IHRoZW1lQnJlYWtwb2ludHMsXG4gIGJhc2U6IGN1c3RvbUJhc2Vcbn0pIHtcbiAgY29uc3QgYmFzZSA9IGN1c3RvbUJhc2UgfHwgY29tcHV0ZUJyZWFrcG9pbnRzQmFzZShicmVha3BvaW50VmFsdWVzLCB0aGVtZUJyZWFrcG9pbnRzKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGJhc2UpO1xuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBicmVha3BvaW50VmFsdWVzO1xuICB9XG5cbiAgbGV0IHByZXZpb3VzO1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCwgaSkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzW2ldICE9IG51bGwgPyBicmVha3BvaW50VmFsdWVzW2ldIDogYnJlYWtwb2ludFZhbHVlc1twcmV2aW91c107XG4gICAgICBwcmV2aW91cyA9IGk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYnJlYWtwb2ludFZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gYnJlYWtwb2ludDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlcztcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5leHBvcnQgZGVmYXVsdCBicmVha3BvaW50czsiLCJpbXBvcnQgeyBmb3JtYXRNdWlFcnJvck1lc3NhZ2UgYXMgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSB9IGZyb20gXCJAbXVpL3V0aWxzXCI7XG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciB3aG9zZSB2YWx1ZSBpcyBsaW1pdGVkIHRvIHRoZSBnaXZlbiByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgY2xhbXBlZFxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiBUaGUgbG93ZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHBhcmFtIHtudW1iZXJ9IG1heCBUaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHJldHVybnMge251bWJlcn0gQSBudW1iZXIgaW4gdGhlIHJhbmdlIFttaW4sIG1heF1cbiAqL1xuZnVuY3Rpb24gY2xhbXAodmFsdWUsIG1pbiA9IDAsIG1heCA9IDEpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVGhlIHZhbHVlIHByb3ZpZGVkICR7dmFsdWV9IGlzIG91dCBvZiByYW5nZSBbJHttaW59LCAke21heH1dLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChtaW4sIHZhbHVlKSwgbWF4KTtcbn1cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIENTUyBoZXggZm9ybWF0IHRvIENTUyByZ2IgZm9ybWF0LlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gSGV4IGNvbG9yLCBpLmUuICNubm4gb3IgI25ubm5ublxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgcmdiIGNvbG9yIHN0cmluZ1xuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGhleFRvUmdiKGNvbG9yKSB7XG4gIGNvbG9yID0gY29sb3Iuc2xpY2UoMSk7XG4gIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgLnsxLCR7Y29sb3IubGVuZ3RoID49IDYgPyAyIDogMX19YCwgJ2cnKTtcbiAgbGV0IGNvbG9ycyA9IGNvbG9yLm1hdGNoKHJlKTtcblxuICBpZiAoY29sb3JzICYmIGNvbG9yc1swXS5sZW5ndGggPT09IDEpIHtcbiAgICBjb2xvcnMgPSBjb2xvcnMubWFwKG4gPT4gbiArIG4pO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9ycyA/IGByZ2Ike2NvbG9ycy5sZW5ndGggPT09IDQgPyAnYScgOiAnJ30oJHtjb2xvcnMubWFwKChuLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiBpbmRleCA8IDMgPyBwYXJzZUludChuLCAxNikgOiBNYXRoLnJvdW5kKHBhcnNlSW50KG4sIDE2KSAvIDI1NSAqIDEwMDApIC8gMTAwMDtcbiAgfSkuam9pbignLCAnKX0pYCA6ICcnO1xufVxuXG5mdW5jdGlvbiBpbnRUb0hleChpbnQpIHtcbiAgY29uc3QgaGV4ID0gaW50LnRvU3RyaW5nKDE2KTtcbiAgcmV0dXJuIGhleC5sZW5ndGggPT09IDEgPyBgMCR7aGV4fWAgOiBoZXg7XG59XG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIHR5cGUgYW5kIHZhbHVlcyBvZiBhIGNvbG9yLlxuICpcbiAqIE5vdGU6IERvZXMgbm90IHN1cHBvcnQgcmdiICUgdmFsdWVzLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHJldHVybnMge29iamVjdH0gLSBBIE1VSSBjb2xvciBvYmplY3Q6IHt0eXBlOiBzdHJpbmcsIHZhbHVlczogbnVtYmVyW119XG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb21wb3NlQ29sb3IoY29sb3IpIHtcbiAgLy8gSWRlbXBvdGVudFxuICBpZiAoY29sb3IudHlwZSkge1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuXG4gIGlmIChjb2xvci5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgIHJldHVybiBkZWNvbXBvc2VDb2xvcihoZXhUb1JnYihjb2xvcikpO1xuICB9XG5cbiAgY29uc3QgbWFya2VyID0gY29sb3IuaW5kZXhPZignKCcpO1xuICBjb25zdCB0eXBlID0gY29sb3Iuc3Vic3RyaW5nKDAsIG1hcmtlcik7XG5cbiAgaWYgKFsncmdiJywgJ3JnYmEnLCAnaHNsJywgJ2hzbGEnLCAnY29sb3InXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBVbnN1cHBvcnRlZCBcXGAke2NvbG9yfVxcYCBjb2xvci5cblRoZSBmb2xsb3dpbmcgZm9ybWF0cyBhcmUgc3VwcG9ydGVkOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDksIGNvbG9yKSk7XG4gIH1cblxuICBsZXQgdmFsdWVzID0gY29sb3Iuc3Vic3RyaW5nKG1hcmtlciArIDEsIGNvbG9yLmxlbmd0aCAtIDEpO1xuICBsZXQgY29sb3JTcGFjZTtcblxuICBpZiAodHlwZSA9PT0gJ2NvbG9yJykge1xuICAgIHZhbHVlcyA9IHZhbHVlcy5zcGxpdCgnICcpO1xuICAgIGNvbG9yU3BhY2UgPSB2YWx1ZXMuc2hpZnQoKTtcblxuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSA0ICYmIHZhbHVlc1szXS5jaGFyQXQoMCkgPT09ICcvJykge1xuICAgICAgdmFsdWVzWzNdID0gdmFsdWVzWzNdLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIGlmIChbJ3NyZ2InLCAnZGlzcGxheS1wMycsICdhOTgtcmdiJywgJ3Byb3Bob3RvLXJnYicsICdyZWMtMjAyMCddLmluZGV4T2YoY29sb3JTcGFjZSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogdW5zdXBwb3J0ZWQgXFxgJHtjb2xvclNwYWNlfVxcYCBjb2xvciBzcGFjZS5cblRoZSBmb2xsb3dpbmcgY29sb3Igc3BhY2VzIGFyZSBzdXBwb3J0ZWQ6IHNyZ2IsIGRpc3BsYXktcDMsIGE5OC1yZ2IsIHByb3Bob3RvLXJnYiwgcmVjLTIwMjAuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTAsIGNvbG9yU3BhY2UpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWVzID0gdmFsdWVzLnNwbGl0KCcsJyk7XG4gIH1cblxuICB2YWx1ZXMgPSB2YWx1ZXMubWFwKHZhbHVlID0+IHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlLFxuICAgIHZhbHVlcyxcbiAgICBjb2xvclNwYWNlXG4gIH07XG59XG4vKipcbiAqIFJldHVybnMgYSBjaGFubmVsIGNyZWF0ZWQgZnJvbSB0aGUgaW5wdXQgY29sb3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgY2hhbm5lbCBmb3IgdGhlIGNvbG9yLCB0aGF0IGNhbiBiZSB1c2VkIGluIHJnYmEgb3IgaHNsYSBjb2xvcnNcbiAqL1xuXG5leHBvcnQgY29uc3QgY29sb3JDaGFubmVsID0gY29sb3IgPT4ge1xuICBjb25zdCBkZWNvbXBvc2VkQ29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIHJldHVybiBkZWNvbXBvc2VkQ29sb3IudmFsdWVzLnNsaWNlKDAsIDMpLm1hcCgodmFsLCBpZHgpID0+IGRlY29tcG9zZWRDb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSAmJiBpZHggIT09IDAgPyBgJHt2YWx9JWAgOiB2YWwpLmpvaW4oJyAnKTtcbn07XG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3Igb2JqZWN0IHdpdGggdHlwZSBhbmQgdmFsdWVzIHRvIGEgc3RyaW5nLlxuICogQHBhcmFtIHtvYmplY3R9IGNvbG9yIC0gRGVjb21wb3NlZCBjb2xvclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yLnR5cGUgLSBPbmUgb2Y6ICdyZ2InLCAncmdiYScsICdoc2wnLCAnaHNsYScsICdjb2xvcidcbiAqIEBwYXJhbSB7YXJyYXl9IGNvbG9yLnZhbHVlcyAtIFtuLG4sbl0gb3IgW24sbixuLG5dXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmdcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVjb21wb3NlQ29sb3IoY29sb3IpIHtcbiAgY29uc3Qge1xuICAgIHR5cGUsXG4gICAgY29sb3JTcGFjZVxuICB9ID0gY29sb3I7XG4gIGxldCB7XG4gICAgdmFsdWVzXG4gIH0gPSBjb2xvcjtcblxuICBpZiAodHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEpIHtcbiAgICAvLyBPbmx5IGNvbnZlcnQgdGhlIGZpcnN0IDMgdmFsdWVzIHRvIGludCAoaS5lLiBub3QgYWxwaGEpXG4gICAgdmFsdWVzID0gdmFsdWVzLm1hcCgobiwgaSkgPT4gaSA8IDMgPyBwYXJzZUludChuLCAxMCkgOiBuKTtcbiAgfSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIHZhbHVlc1sxXSA9IGAke3ZhbHVlc1sxXX0lYDtcbiAgICB2YWx1ZXNbMl0gPSBgJHt2YWx1ZXNbMl19JWA7XG4gIH1cblxuICBpZiAodHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIHZhbHVlcyA9IGAke2NvbG9yU3BhY2V9ICR7dmFsdWVzLmpvaW4oJyAnKX1gO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlcyA9IGAke3ZhbHVlcy5qb2luKCcsICcpfWA7XG4gIH1cblxuICByZXR1cm4gYCR7dHlwZX0oJHt2YWx1ZXN9KWA7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBDU1MgcmdiIGZvcm1hdCB0byBDU1MgaGV4IGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIFJHQiBjb2xvciwgaS5lLiByZ2IobiwgbiwgbilcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIHJnYiBjb2xvciBzdHJpbmcsIGkuZS4gI25ubm5ublxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByZ2JUb0hleChjb2xvcikge1xuICAvLyBJZGVtcG90ZW50XG4gIGlmIChjb2xvci5pbmRleE9mKCcjJykgPT09IDApIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cblxuICBjb25zdCB7XG4gICAgdmFsdWVzXG4gIH0gPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIHJldHVybiBgIyR7dmFsdWVzLm1hcCgobiwgaSkgPT4gaW50VG9IZXgoaSA9PT0gMyA/IE1hdGgucm91bmQoMjU1ICogbikgOiBuKSkuam9pbignJyl9YDtcbn1cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIGhzbCBmb3JtYXQgdG8gcmdiIGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIEhTTCBjb2xvciB2YWx1ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHJnYiBjb2xvciB2YWx1ZXNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaHNsVG9SZ2IoY29sb3IpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvbnN0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGNvbG9yO1xuICBjb25zdCBoID0gdmFsdWVzWzBdO1xuICBjb25zdCBzID0gdmFsdWVzWzFdIC8gMTAwO1xuICBjb25zdCBsID0gdmFsdWVzWzJdIC8gMTAwO1xuICBjb25zdCBhID0gcyAqIE1hdGgubWluKGwsIDEgLSBsKTtcblxuICBjb25zdCBmID0gKG4sIGsgPSAobiArIGggLyAzMCkgJSAxMikgPT4gbCAtIGEgKiBNYXRoLm1heChNYXRoLm1pbihrIC0gMywgOSAtIGssIDEpLCAtMSk7XG5cbiAgbGV0IHR5cGUgPSAncmdiJztcbiAgY29uc3QgcmdiID0gW01hdGgucm91bmQoZigwKSAqIDI1NSksIE1hdGgucm91bmQoZig4KSAqIDI1NSksIE1hdGgucm91bmQoZig0KSAqIDI1NSldO1xuXG4gIGlmIChjb2xvci50eXBlID09PSAnaHNsYScpIHtcbiAgICB0eXBlICs9ICdhJztcbiAgICByZ2IucHVzaCh2YWx1ZXNbM10pO1xuICB9XG5cbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKHtcbiAgICB0eXBlLFxuICAgIHZhbHVlczogcmdiXG4gIH0pO1xufVxuLyoqXG4gKiBUaGUgcmVsYXRpdmUgYnJpZ2h0bmVzcyBvZiBhbnkgcG9pbnQgaW4gYSBjb2xvciBzcGFjZSxcbiAqIG5vcm1hbGl6ZWQgdG8gMCBmb3IgZGFya2VzdCBibGFjayBhbmQgMSBmb3IgbGlnaHRlc3Qgd2hpdGUuXG4gKlxuICogRm9ybXVsYTogaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC1URUNIUy9HMTcuaHRtbCNHMTctdGVzdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSByZWxhdGl2ZSBicmlnaHRuZXNzIG9mIHRoZSBjb2xvciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0THVtaW5hbmNlKGNvbG9yKSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBsZXQgcmdiID0gY29sb3IudHlwZSA9PT0gJ2hzbCcgPyBkZWNvbXBvc2VDb2xvcihoc2xUb1JnYihjb2xvcikpLnZhbHVlcyA6IGNvbG9yLnZhbHVlcztcbiAgcmdiID0gcmdiLm1hcCh2YWwgPT4ge1xuICAgIGlmIChjb2xvci50eXBlICE9PSAnY29sb3InKSB7XG4gICAgICB2YWwgLz0gMjU1OyAvLyBub3JtYWxpemVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbCA8PSAwLjAzOTI4ID8gdmFsIC8gMTIuOTIgOiAoKHZhbCArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQ7XG4gIH0pOyAvLyBUcnVuY2F0ZSBhdCAzIGRpZ2l0c1xuXG4gIHJldHVybiBOdW1iZXIoKDAuMjEyNiAqIHJnYlswXSArIDAuNzE1MiAqIHJnYlsxXSArIDAuMDcyMiAqIHJnYlsyXSkudG9GaXhlZCgzKSk7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbnRyYXN0IHJhdGlvIGJldHdlZW4gdHdvIGNvbG9ycy5cbiAqXG4gKiBGb3JtdWxhOiBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLVRFQ0hTL0cxNy5odG1sI0cxNy10ZXN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGZvcmVncm91bmQgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFja2dyb3VuZCAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKClcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEEgY29udHJhc3QgcmF0aW8gdmFsdWUgaW4gdGhlIHJhbmdlIDAgLSAyMS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJhc3RSYXRpbyhmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kKSB7XG4gIGNvbnN0IGx1bUEgPSBnZXRMdW1pbmFuY2UoZm9yZWdyb3VuZCk7XG4gIGNvbnN0IGx1bUIgPSBnZXRMdW1pbmFuY2UoYmFja2dyb3VuZCk7XG4gIHJldHVybiAoTWF0aC5tYXgobHVtQSwgbHVtQikgKyAwLjA1KSAvIChNYXRoLm1pbihsdW1BLCBsdW1CKSArIDAuMDUpO1xufVxuLyoqXG4gKiBTZXRzIHRoZSBhYnNvbHV0ZSB0cmFuc3BhcmVuY3kgb2YgYSBjb2xvci5cbiAqIEFueSBleGlzdGluZyBhbHBoYSB2YWx1ZXMgYXJlIG92ZXJ3cml0dGVuLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gdmFsdWUgdG8gc2V0IHRoZSBhbHBoYSBjaGFubmVsIHRvIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWxwaGEoY29sb3IsIHZhbHVlKSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICB2YWx1ZSA9IGNsYW1wKHZhbHVlKTtcblxuICBpZiAoY29sb3IudHlwZSA9PT0gJ3JnYicgfHwgY29sb3IudHlwZSA9PT0gJ2hzbCcpIHtcbiAgICBjb2xvci50eXBlICs9ICdhJztcbiAgfVxuXG4gIGlmIChjb2xvci50eXBlID09PSAnY29sb3InKSB7XG4gICAgY29sb3IudmFsdWVzWzNdID0gYC8ke3ZhbHVlfWA7XG4gIH0gZWxzZSB7XG4gICAgY29sb3IudmFsdWVzWzNdID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuLyoqXG4gKiBEYXJrZW5zIGEgY29sb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgY29lZmZpY2llbnQgPSBjbGFtcChjb2VmZmljaWVudCk7XG5cbiAgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgY29sb3IudmFsdWVzWzJdICo9IDEgLSBjb2VmZmljaWVudDtcbiAgfSBlbHNlIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ3JnYicpICE9PSAtMSB8fCBjb2xvci50eXBlLmluZGV4T2YoJ2NvbG9yJykgIT09IC0xKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpICs9IDEpIHtcbiAgICAgIGNvbG9yLnZhbHVlc1tpXSAqPSAxIC0gY29lZmZpY2llbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKGNvbG9yKTtcbn1cbi8qKlxuICogTGlnaHRlbnMgYSBjb2xvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudCAtIG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsaWdodGVuKGNvbG9yLCBjb2VmZmljaWVudCkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgY29lZmZpY2llbnQgPSBjbGFtcChjb2VmZmljaWVudCk7XG5cbiAgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgY29sb3IudmFsdWVzWzJdICs9ICgxMDAgLSBjb2xvci52YWx1ZXNbMl0pICogY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgyNTUgLSBjb2xvci52YWx1ZXNbaV0pICogY29lZmZpY2llbnQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgxIC0gY29sb3IudmFsdWVzW2ldKSAqIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWNvbXBvc2VDb2xvcihjb2xvcik7XG59XG4vKipcbiAqIERhcmtlbiBvciBsaWdodGVuIGEgY29sb3IsIGRlcGVuZGluZyBvbiBpdHMgbHVtaW5hbmNlLlxuICogTGlnaHQgY29sb3JzIGFyZSBkYXJrZW5lZCwgZGFyayBjb2xvcnMgYXJlIGxpZ2h0ZW5lZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudD0wLjE1IC0gbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQgPSAwLjE1KSB7XG4gIHJldHVybiBnZXRMdW1pbmFuY2UoY29sb3IpID4gMC41ID8gZGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCkgOiBsaWdodGVuKGNvbG9yLCBjb2VmZmljaWVudCk7XG59IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInZhbHVlc1wiLCBcInVuaXRcIiwgXCJzdGVwXCJdO1xuLy8gU29ydGVkIEFTQyBieSBzaXplLiBUaGF0J3MgaW1wb3J0YW50LlxuLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuZXhwb3J0IGNvbnN0IGJyZWFrcG9pbnRLZXlzID0gWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddO1xuXG5jb25zdCBzb3J0QnJlYWtwb2ludHNWYWx1ZXMgPSB2YWx1ZXMgPT4ge1xuICBjb25zdCBicmVha3BvaW50c0FzQXJyYXkgPSBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcChrZXkgPT4gKHtcbiAgICBrZXksXG4gICAgdmFsOiB2YWx1ZXNba2V5XVxuICB9KSkgfHwgW107IC8vIFNvcnQgaW4gYXNjZW5kaW5nIG9yZGVyXG5cbiAgYnJlYWtwb2ludHNBc0FycmF5LnNvcnQoKGJyZWFrcG9pbnQxLCBicmVha3BvaW50MikgPT4gYnJlYWtwb2ludDEudmFsIC0gYnJlYWtwb2ludDIudmFsKTtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzQXNBcnJheS5yZWR1Y2UoKGFjYywgb2JqKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhY2MsIHtcbiAgICAgIFtvYmoua2V5XTogb2JqLnZhbFxuICAgIH0pO1xuICB9LCB7fSk7XG59OyAvLyBLZWVwIGluIG1pbmQgdGhhdCBAbWVkaWEgaXMgaW5jbHVzaXZlIGJ5IHRoZSBDU1Mgc3BlY2lmaWNhdGlvbi5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVCcmVha3BvaW50cyhicmVha3BvaW50cykge1xuICBjb25zdCB7XG4gICAgLy8gVGhlIGJyZWFrcG9pbnQgKipzdGFydCoqIGF0IHRoaXMgdmFsdWUuXG4gICAgLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc20pLlxuICAgIHZhbHVlcyA9IHtcbiAgICAgIHhzOiAwLFxuICAgICAgLy8gcGhvbmVcbiAgICAgIHNtOiA2MDAsXG4gICAgICAvLyB0YWJsZXRcbiAgICAgIG1kOiA5MDAsXG4gICAgICAvLyBzbWFsbCBsYXB0b3BcbiAgICAgIGxnOiAxMjAwLFxuICAgICAgLy8gZGVza3RvcFxuICAgICAgeGw6IDE1MzYgLy8gbGFyZ2Ugc2NyZWVuXG5cbiAgICB9LFxuICAgIHVuaXQgPSAncHgnLFxuICAgIHN0ZXAgPSA1XG4gIH0gPSBicmVha3BvaW50cyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShicmVha3BvaW50cywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBzb3J0ZWRWYWx1ZXMgPSBzb3J0QnJlYWtwb2ludHNWYWx1ZXModmFsdWVzKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNvcnRlZFZhbHVlcyk7XG5cbiAgZnVuY3Rpb24gdXAoa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlfSR7dW5pdH0pYDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRvd24oa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1heC13aWR0aDoke3ZhbHVlIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cblxuICBmdW5jdGlvbiBiZXR3ZWVuKHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBlbmRJbmRleCA9IGtleXMuaW5kZXhPZihlbmQpO1xuICAgIHJldHVybiBgQG1lZGlhIChtaW4td2lkdGg6JHt0eXBlb2YgdmFsdWVzW3N0YXJ0XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNbc3RhcnRdIDogc3RhcnR9JHt1bml0fSkgYW5kIGAgKyBgKG1heC13aWR0aDokeyhlbmRJbmRleCAhPT0gLTEgJiYgdHlwZW9mIHZhbHVlc1trZXlzW2VuZEluZGV4XV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleXNbZW5kSW5kZXhdXSA6IGVuZCkgLSBzdGVwIC8gMTAwfSR7dW5pdH0pYDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9ubHkoa2V5KSB7XG4gICAgaWYgKGtleXMuaW5kZXhPZihrZXkpICsgMSA8IGtleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmV0d2VlbihrZXksIGtleXNba2V5cy5pbmRleE9mKGtleSkgKyAxXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwKGtleSk7XG4gIH1cblxuICBmdW5jdGlvbiBub3Qoa2V5KSB7XG4gICAgLy8gaGFuZGxlIGZpcnN0IGFuZCBsYXN0IGtleSBzZXBhcmF0ZWx5LCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5XG4gICAgY29uc3Qga2V5SW5kZXggPSBrZXlzLmluZGV4T2Yoa2V5KTtcblxuICAgIGlmIChrZXlJbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVwKGtleXNbMV0pO1xuICAgIH1cblxuICAgIGlmIChrZXlJbmRleCA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gZG93bihrZXlzW2tleUluZGV4XSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJldHdlZW4oa2V5LCBrZXlzW2tleXMuaW5kZXhPZihrZXkpICsgMV0pLnJlcGxhY2UoJ0BtZWRpYScsICdAbWVkaWEgbm90IGFsbCBhbmQnKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAga2V5cyxcbiAgICB2YWx1ZXM6IHNvcnRlZFZhbHVlcyxcbiAgICB1cCxcbiAgICBkb3duLFxuICAgIGJldHdlZW4sXG4gICAgb25seSxcbiAgICBub3QsXG4gICAgdW5pdFxuICB9LCBvdGhlcik7XG59IiwiY29uc3Qgc2hhcGUgPSB7XG4gIGJvcmRlclJhZGl1czogNFxufTtcbmV4cG9ydCBkZWZhdWx0IHNoYXBlOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcInBhbGV0dGVcIiwgXCJzcGFjaW5nXCIsIFwic2hhcGVcIl07XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBjcmVhdGVCcmVha3BvaW50cyBmcm9tICcuL2NyZWF0ZUJyZWFrcG9pbnRzJztcbmltcG9ydCBzaGFwZSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCBjcmVhdGVTcGFjaW5nIGZyb20gJy4vY3JlYXRlU3BhY2luZyc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzSW5wdXQgPSB7fSxcbiAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXQsXG4gICAgc2hhcGU6IHNoYXBlSW5wdXQgPSB7fVxuICB9ID0gb3B0aW9ucyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IGJyZWFrcG9pbnRzID0gY3JlYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IHNwYWNpbmcgPSBjcmVhdGVTcGFjaW5nKHNwYWNpbmdJbnB1dCk7XG4gIGxldCBtdWlUaGVtZSA9IGRlZXBtZXJnZSh7XG4gICAgYnJlYWtwb2ludHMsXG4gICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICAvLyBJbmplY3QgY29tcG9uZW50IGRlZmluaXRpb25zLlxuICAgIHBhbGV0dGU6IF9leHRlbmRzKHtcbiAgICAgIG1vZGU6ICdsaWdodCdcbiAgICB9LCBwYWxldHRlSW5wdXQpLFxuICAgIHNwYWNpbmcsXG4gICAgc2hhcGU6IF9leHRlbmRzKHt9LCBzaGFwZSwgc2hhcGVJbnB1dClcbiAgfSwgb3RoZXIpO1xuICBtdWlUaGVtZSA9IGFyZ3MucmVkdWNlKChhY2MsIGFyZ3VtZW50KSA9PiBkZWVwbWVyZ2UoYWNjLCBhcmd1bWVudCksIG11aVRoZW1lKTtcbiAgcmV0dXJuIG11aVRoZW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUaGVtZTsiLCJpbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcgfSBmcm9tICcuLi9zcGFjaW5nJztcblxuLyogdHNsaW50OmVuYWJsZTp1bmlmaWVkLXNpZ25hdHVyZXMgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVNwYWNpbmcoc3BhY2luZ0lucHV0ID0gOCkge1xuICAvLyBBbHJlYWR5IHRyYW5zZm9ybWVkLlxuICBpZiAoc3BhY2luZ0lucHV0Lm11aSkge1xuICAgIHJldHVybiBzcGFjaW5nSW5wdXQ7XG4gIH0gLy8gTWF0ZXJpYWwgRGVzaWduIGxheW91dHMgYXJlIHZpc3VhbGx5IGJhbGFuY2VkLiBNb3N0IG1lYXN1cmVtZW50cyBhbGlnbiB0byBhbiA4ZHAgZ3JpZCwgd2hpY2ggYWxpZ25zIGJvdGggc3BhY2luZyBhbmQgdGhlIG92ZXJhbGwgbGF5b3V0LlxuICAvLyBTbWFsbGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgaWNvbnMsIGNhbiBhbGlnbiB0byBhIDRkcCBncmlkLlxuICAvLyBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9sYXlvdXQvdW5kZXJzdGFuZGluZy1sYXlvdXQuaHRtbCN1c2FnZVxuXG5cbiAgY29uc3QgdHJhbnNmb3JtID0gY3JlYXRlVW5hcnlTcGFjaW5nKHtcbiAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXRcbiAgfSk7XG5cbiAgY29uc3Qgc3BhY2luZyA9ICguLi5hcmdzSW5wdXQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCEoYXJnc0lucHV0Lmxlbmd0aCA8PSA0KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZCwgZXhwZWN0ZWQgYmV0d2VlbiAwIGFuZCA0LCBnb3QgJHthcmdzSW5wdXQubGVuZ3RofWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFyZ3MgPSBhcmdzSW5wdXQubGVuZ3RoID09PSAwID8gWzFdIDogYXJnc0lucHV0O1xuICAgIHJldHVybiBhcmdzLm1hcChhcmd1bWVudCA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0cmFuc2Zvcm0oYXJndW1lbnQpO1xuICAgICAgcmV0dXJuIHR5cGVvZiBvdXRwdXQgPT09ICdudW1iZXInID8gYCR7b3V0cHV0fXB4YCA6IG91dHB1dDtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH07XG5cbiAgc3BhY2luZy5tdWkgPSB0cnVlO1xuICByZXR1cm4gc3BhY2luZztcbn0iLCJpbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5cbmZ1bmN0aW9uIGNvbXBvc2UoLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4ge1xuICAgIHN0eWxlLmZpbHRlclByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBhY2NbcHJvcF0gPSBzdHlsZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgY29uc3QgZm4gPSBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BzKS5yZWR1Y2UoKGFjYywgcHJvcCkgPT4ge1xuICAgICAgaWYgKGhhbmRsZXJzW3Byb3BdKSB7XG4gICAgICAgIHJldHVybiBtZXJnZShhY2MsIGhhbmRsZXJzW3Byb3BdKHByb3BzKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9O1xuXG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc3R5bGUucHJvcFR5cGVzKSwge30pIDoge307XG4gIGZuLmZpbHRlclByb3BzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gYWNjLmNvbmNhdChzdHlsZS5maWx0ZXJQcm9wcyksIFtdKTtcbiAgcmV0dXJuIGZuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlOyIsImltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmltcG9ydCB7IGNyZWF0ZVVuYXJ5VW5pdCwgZ2V0VmFsdWUgfSBmcm9tICcuL3NwYWNpbmcnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcblxuZnVuY3Rpb24gZ2V0Qm9yZGVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGAke3ZhbHVlfXB4IHNvbGlkYDtcbn1cblxuZXhwb3J0IGNvbnN0IGJvcmRlciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JvcmRlcicsXG4gIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gIHRyYW5zZm9ybTogZ2V0Qm9yZGVyXG59KTtcbmV4cG9ydCBjb25zdCBib3JkZXJUb3AgPSBzdHlsZSh7XG4gIHByb3A6ICdib3JkZXJUb3AnLFxuICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICB0cmFuc2Zvcm06IGdldEJvcmRlclxufSk7XG5leHBvcnQgY29uc3QgYm9yZGVyUmlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdib3JkZXJSaWdodCcsXG4gIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gIHRyYW5zZm9ybTogZ2V0Qm9yZGVyXG59KTtcbmV4cG9ydCBjb25zdCBib3JkZXJCb3R0b20gPSBzdHlsZSh7XG4gIHByb3A6ICdib3JkZXJCb3R0b20nLFxuICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICB0cmFuc2Zvcm06IGdldEJvcmRlclxufSk7XG5leHBvcnQgY29uc3QgYm9yZGVyTGVmdCA9IHN0eWxlKHtcbiAgcHJvcDogJ2JvcmRlckxlZnQnLFxuICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICB0cmFuc2Zvcm06IGdldEJvcmRlclxufSk7XG5leHBvcnQgY29uc3QgYm9yZGVyQ29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdib3JkZXJDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZSdcbn0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclRvcENvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnYm9yZGVyVG9wQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnXG59KTtcbmV4cG9ydCBjb25zdCBib3JkZXJSaWdodENvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnYm9yZGVyUmlnaHRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZSdcbn0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlckJvdHRvbUNvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnYm9yZGVyQm90dG9tQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnXG59KTtcbmV4cG9ydCBjb25zdCBib3JkZXJMZWZ0Q29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdib3JkZXJMZWZ0Q29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnXG59KTtcbmV4cG9ydCBjb25zdCBib3JkZXJSYWRpdXMgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5ib3JkZXJSYWRpdXMgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5ib3JkZXJSYWRpdXMgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NoYXBlLmJvcmRlclJhZGl1cycsIDQsICdib3JkZXJSYWRpdXMnKTtcblxuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgYm9yZGVyUmFkaXVzOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5ib3JkZXJSYWRpdXMsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5ib3JkZXJSYWRpdXMucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgYm9yZGVyUmFkaXVzOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmJvcmRlclJhZGl1cy5maWx0ZXJQcm9wcyA9IFsnYm9yZGVyUmFkaXVzJ107XG5jb25zdCBib3JkZXJzID0gY29tcG9zZShib3JkZXIsIGJvcmRlclRvcCwgYm9yZGVyUmlnaHQsIGJvcmRlckJvdHRvbSwgYm9yZGVyTGVmdCwgYm9yZGVyQ29sb3IsIGJvcmRlclRvcENvbG9yLCBib3JkZXJSaWdodENvbG9yLCBib3JkZXJCb3R0b21Db2xvciwgYm9yZGVyTGVmdENvbG9yLCBib3JkZXJSYWRpdXMpO1xuZXhwb3J0IGRlZmF1bHQgYm9yZGVyczsiLCJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuZXhwb3J0IGNvbnN0IGRpc3BsYXlQcmludCA9IHN0eWxlKHtcbiAgcHJvcDogJ2Rpc3BsYXlQcmludCcsXG4gIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgdHJhbnNmb3JtOiB2YWx1ZSA9PiAoe1xuICAgICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgICBkaXNwbGF5OiB2YWx1ZVxuICAgIH1cbiAgfSlcbn0pO1xuZXhwb3J0IGNvbnN0IGRpc3BsYXlSYXcgPSBzdHlsZSh7XG4gIHByb3A6ICdkaXNwbGF5J1xufSk7XG5leHBvcnQgY29uc3Qgb3ZlcmZsb3cgPSBzdHlsZSh7XG4gIHByb3A6ICdvdmVyZmxvdydcbn0pO1xuZXhwb3J0IGNvbnN0IHRleHRPdmVyZmxvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ3RleHRPdmVyZmxvdydcbn0pO1xuZXhwb3J0IGNvbnN0IHZpc2liaWxpdHkgPSBzdHlsZSh7XG4gIHByb3A6ICd2aXNpYmlsaXR5J1xufSk7XG5leHBvcnQgY29uc3Qgd2hpdGVTcGFjZSA9IHN0eWxlKHtcbiAgcHJvcDogJ3doaXRlU3BhY2UnXG59KTtcbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoZGlzcGxheVByaW50LCBkaXNwbGF5UmF3LCBvdmVyZmxvdywgdGV4dE92ZXJmbG93LCB2aXNpYmlsaXR5LCB3aGl0ZVNwYWNlKTsiLCJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuZXhwb3J0IGNvbnN0IGZsZXhCYXNpcyA9IHN0eWxlKHtcbiAgcHJvcDogJ2ZsZXhCYXNpcydcbn0pO1xuZXhwb3J0IGNvbnN0IGZsZXhEaXJlY3Rpb24gPSBzdHlsZSh7XG4gIHByb3A6ICdmbGV4RGlyZWN0aW9uJ1xufSk7XG5leHBvcnQgY29uc3QgZmxleFdyYXAgPSBzdHlsZSh7XG4gIHByb3A6ICdmbGV4V3JhcCdcbn0pO1xuZXhwb3J0IGNvbnN0IGp1c3RpZnlDb250ZW50ID0gc3R5bGUoe1xuICBwcm9wOiAnanVzdGlmeUNvbnRlbnQnXG59KTtcbmV4cG9ydCBjb25zdCBhbGlnbkl0ZW1zID0gc3R5bGUoe1xuICBwcm9wOiAnYWxpZ25JdGVtcydcbn0pO1xuZXhwb3J0IGNvbnN0IGFsaWduQ29udGVudCA9IHN0eWxlKHtcbiAgcHJvcDogJ2FsaWduQ29udGVudCdcbn0pO1xuZXhwb3J0IGNvbnN0IG9yZGVyID0gc3R5bGUoe1xuICBwcm9wOiAnb3JkZXInXG59KTtcbmV4cG9ydCBjb25zdCBmbGV4ID0gc3R5bGUoe1xuICBwcm9wOiAnZmxleCdcbn0pO1xuZXhwb3J0IGNvbnN0IGZsZXhHcm93ID0gc3R5bGUoe1xuICBwcm9wOiAnZmxleEdyb3cnXG59KTtcbmV4cG9ydCBjb25zdCBmbGV4U2hyaW5rID0gc3R5bGUoe1xuICBwcm9wOiAnZmxleFNocmluaydcbn0pO1xuZXhwb3J0IGNvbnN0IGFsaWduU2VsZiA9IHN0eWxlKHtcbiAgcHJvcDogJ2FsaWduU2VsZidcbn0pO1xuZXhwb3J0IGNvbnN0IGp1c3RpZnlJdGVtcyA9IHN0eWxlKHtcbiAgcHJvcDogJ2p1c3RpZnlJdGVtcydcbn0pO1xuZXhwb3J0IGNvbnN0IGp1c3RpZnlTZWxmID0gc3R5bGUoe1xuICBwcm9wOiAnanVzdGlmeVNlbGYnXG59KTtcbmNvbnN0IGZsZXhib3ggPSBjb21wb3NlKGZsZXhCYXNpcywgZmxleERpcmVjdGlvbiwgZmxleFdyYXAsIGp1c3RpZnlDb250ZW50LCBhbGlnbkl0ZW1zLCBhbGlnbkNvbnRlbnQsIG9yZGVyLCBmbGV4LCBmbGV4R3JvdywgZmxleFNocmluaywgYWxpZ25TZWxmLCBqdXN0aWZ5SXRlbXMsIGp1c3RpZnlTZWxmKTtcbmV4cG9ydCBkZWZhdWx0IGZsZXhib3g7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmltcG9ydCB7IGNyZWF0ZVVuYXJ5VW5pdCwgZ2V0VmFsdWUgfSBmcm9tICcuL3NwYWNpbmcnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuZXhwb3J0IGNvbnN0IGdhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmdhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmdhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdnYXAnKTtcblxuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgZ2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5nYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5nYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgZ2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmdhcC5maWx0ZXJQcm9wcyA9IFsnZ2FwJ107XG5leHBvcnQgY29uc3QgY29sdW1uR2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuY29sdW1uR2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuY29sdW1uR2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ2NvbHVtbkdhcCcpO1xuXG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBjb2x1bW5HYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmNvbHVtbkdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbmNvbHVtbkdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBjb2x1bW5HYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuY29sdW1uR2FwLmZpbHRlclByb3BzID0gWydjb2x1bW5HYXAnXTtcbmV4cG9ydCBjb25zdCByb3dHYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5yb3dHYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5yb3dHYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAncm93R2FwJyk7XG5cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIHJvd0dhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcblxuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMucm93R2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xucm93R2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIHJvd0dhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5yb3dHYXAuZmlsdGVyUHJvcHMgPSBbJ3Jvd0dhcCddO1xuZXhwb3J0IGNvbnN0IGdyaWRDb2x1bW4gPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQ29sdW1uJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFJvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRSb3cnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b0Zsb3cgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b0Zsb3cnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b0NvbHVtbnMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b0NvbHVtbnMnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b1Jvd3MgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b1Jvd3MnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVDb2x1bW5zID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQ29sdW1ucydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZVJvd3MgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVSb3dzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlQXJlYXMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVBcmVhcydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBcmVhID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEFyZWEnXG59KTtcbmNvbnN0IGdyaWQgPSBjb21wb3NlKGdhcCwgY29sdW1uR2FwLCByb3dHYXAsIGdyaWRDb2x1bW4sIGdyaWRSb3csIGdyaWRBdXRvRmxvdywgZ3JpZEF1dG9Db2x1bW5zLCBncmlkQXV0b1Jvd3MsIGdyaWRUZW1wbGF0ZUNvbHVtbnMsIGdyaWRUZW1wbGF0ZVJvd3MsIGdyaWRUZW1wbGF0ZUFyZWFzLCBncmlkQXJlYSk7XG5leHBvcnQgZGVmYXVsdCBncmlkOyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgY29uc3QgcG9zaXRpb24gPSBzdHlsZSh7XG4gIHByb3A6ICdwb3NpdGlvbidcbn0pO1xuZXhwb3J0IGNvbnN0IHpJbmRleCA9IHN0eWxlKHtcbiAgcHJvcDogJ3pJbmRleCcsXG4gIHRoZW1lS2V5OiAnekluZGV4J1xufSk7XG5leHBvcnQgY29uc3QgdG9wID0gc3R5bGUoe1xuICBwcm9wOiAndG9wJ1xufSk7XG5leHBvcnQgY29uc3QgcmlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdyaWdodCdcbn0pO1xuZXhwb3J0IGNvbnN0IGJvdHRvbSA9IHN0eWxlKHtcbiAgcHJvcDogJ2JvdHRvbSdcbn0pO1xuZXhwb3J0IGNvbnN0IGxlZnQgPSBzdHlsZSh7XG4gIHByb3A6ICdsZWZ0J1xufSk7XG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKHBvc2l0aW9uLCB6SW5kZXgsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmV4cG9ydCBjb25zdCBjb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2NvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJ1xufSk7XG5leHBvcnQgY29uc3QgYmdjb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JnY29sb3InLFxuICBjc3NQcm9wZXJ0eTogJ2JhY2tncm91bmRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZSdcbn0pO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JhY2tncm91bmRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZSdcbn0pO1xuY29uc3QgcGFsZXR0ZSA9IGNvbXBvc2UoY29sb3IsIGJnY29sb3IsIGJhY2tncm91bmRDb2xvcik7XG5leHBvcnQgZGVmYXVsdCBwYWxldHRlOyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmNvbnN0IGJveFNoYWRvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2JveFNoYWRvdycsXG4gIHRoZW1lS2V5OiAnc2hhZG93cydcbn0pO1xuZXhwb3J0IGRlZmF1bHQgYm94U2hhZG93OyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgdmFsdWVzIGFzIGJyZWFrcG9pbnRzVmFsdWVzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPD0gMSAmJiB2YWx1ZSAhPT0gMCA/IGAke3ZhbHVlICogMTAwfSVgIDogdmFsdWU7XG59XG5cbmV4cG9ydCBjb25zdCB3aWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBtYXhXaWR0aCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLm1heFdpZHRoICE9PSB1bmRlZmluZWQgJiYgcHJvcHMubWF4V2lkdGggIT09IG51bGwpIHtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4ge1xuICAgICAgdmFyIF9wcm9wcyR0aGVtZSwgX3Byb3BzJHRoZW1lJGJyZWFrcG9pLCBfcHJvcHMkdGhlbWUkYnJlYWtwb2kyO1xuXG4gICAgICBjb25zdCBicmVha3BvaW50ID0gKChfcHJvcHMkdGhlbWUgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IChfcHJvcHMkdGhlbWUkYnJlYWtwb2kgPSBfcHJvcHMkdGhlbWUuYnJlYWtwb2ludHMpID09IG51bGwgPyB2b2lkIDAgOiAoX3Byb3BzJHRoZW1lJGJyZWFrcG9pMiA9IF9wcm9wcyR0aGVtZSRicmVha3BvaS52YWx1ZXMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWUkYnJlYWtwb2kyW3Byb3BWYWx1ZV0pIHx8IGJyZWFrcG9pbnRzVmFsdWVzW3Byb3BWYWx1ZV07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXhXaWR0aDogYnJlYWtwb2ludCB8fCB0cmFuc2Zvcm0ocHJvcFZhbHVlKVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5tYXhXaWR0aCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbm1heFdpZHRoLmZpbHRlclByb3BzID0gWydtYXhXaWR0aCddO1xuZXhwb3J0IGNvbnN0IG1pbldpZHRoID0gc3R5bGUoe1xuICBwcm9wOiAnbWluV2lkdGgnLFxuICB0cmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ2hlaWdodCcsXG4gIHRyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWF4SGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnbWF4SGVpZ2h0JyxcbiAgdHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBtaW5IZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdtaW5IZWlnaHQnLFxuICB0cmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IHNpemVXaWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ3NpemUnLFxuICBjc3NQcm9wZXJ0eTogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBzaXplSGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBib3hTaXppbmcgPSBzdHlsZSh7XG4gIHByb3A6ICdib3hTaXppbmcnXG59KTtcbmNvbnN0IHNpemluZyA9IGNvbXBvc2Uod2lkdGgsIG1heFdpZHRoLCBtaW5XaWR0aCwgaGVpZ2h0LCBtYXhIZWlnaHQsIG1pbkhlaWdodCwgYm94U2l6aW5nKTtcbmV4cG9ydCBkZWZhdWx0IHNpemluZzsiLCJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuZXhwb3J0IGNvbnN0IGZvbnRGYW1pbHkgPSBzdHlsZSh7XG4gIHByb3A6ICdmb250RmFtaWx5JyxcbiAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xufSk7XG5leHBvcnQgY29uc3QgZm9udFNpemUgPSBzdHlsZSh7XG4gIHByb3A6ICdmb250U2l6ZScsXG4gIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbn0pO1xuZXhwb3J0IGNvbnN0IGZvbnRTdHlsZSA9IHN0eWxlKHtcbiAgcHJvcDogJ2ZvbnRTdHlsZScsXG4gIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbn0pO1xuZXhwb3J0IGNvbnN0IGZvbnRXZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdmb250V2VpZ2h0JyxcbiAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xufSk7XG5leHBvcnQgY29uc3QgbGV0dGVyU3BhY2luZyA9IHN0eWxlKHtcbiAgcHJvcDogJ2xldHRlclNwYWNpbmcnXG59KTtcbmV4cG9ydCBjb25zdCB0ZXh0VHJhbnNmb3JtID0gc3R5bGUoe1xuICBwcm9wOiAndGV4dFRyYW5zZm9ybSdcbn0pO1xuZXhwb3J0IGNvbnN0IGxpbmVIZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdsaW5lSGVpZ2h0J1xufSk7XG5leHBvcnQgY29uc3QgdGV4dEFsaWduID0gc3R5bGUoe1xuICBwcm9wOiAndGV4dEFsaWduJ1xufSk7XG5leHBvcnQgY29uc3QgdHlwb2dyYXBoeVZhcmlhbnQgPSBzdHlsZSh7XG4gIHByb3A6ICd0eXBvZ3JhcGh5JyxcbiAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG59KTtcbmNvbnN0IHR5cG9ncmFwaHkgPSBjb21wb3NlKHR5cG9ncmFwaHlWYXJpYW50LCBmb250RmFtaWx5LCBmb250U2l6ZSwgZm9udFN0eWxlLCBmb250V2VpZ2h0LCBsZXR0ZXJTcGFjaW5nLCBsaW5lSGVpZ2h0LCB0ZXh0QWxpZ24sIHRleHRUcmFuc2Zvcm0pO1xuZXhwb3J0IGRlZmF1bHQgdHlwb2dyYXBoeTsiLCJpbXBvcnQgYm9yZGVycyBmcm9tICcuL2JvcmRlcnMnO1xuaW1wb3J0IGRpc3BsYXkgZnJvbSAnLi9kaXNwbGF5JztcbmltcG9ydCBmbGV4Ym94IGZyb20gJy4vZmxleGJveCc7XG5pbXBvcnQgZ3JpZCBmcm9tICcuL2Nzc0dyaWQnO1xuaW1wb3J0IHBvc2l0aW9ucyBmcm9tICcuL3Bvc2l0aW9ucyc7XG5pbXBvcnQgcGFsZXR0ZSBmcm9tICcuL3BhbGV0dGUnO1xuaW1wb3J0IHNoYWRvd3MgZnJvbSAnLi9zaGFkb3dzJztcbmltcG9ydCBzaXppbmcgZnJvbSAnLi9zaXppbmcnO1xuaW1wb3J0IHNwYWNpbmcgZnJvbSAnLi9zcGFjaW5nJztcbmltcG9ydCB0eXBvZ3JhcGh5IGZyb20gJy4vdHlwb2dyYXBoeSc7XG5jb25zdCBmaWx0ZXJQcm9wc01hcHBpbmcgPSB7XG4gIGJvcmRlcnM6IGJvcmRlcnMuZmlsdGVyUHJvcHMsXG4gIGRpc3BsYXk6IGRpc3BsYXkuZmlsdGVyUHJvcHMsXG4gIGZsZXhib3g6IGZsZXhib3guZmlsdGVyUHJvcHMsXG4gIGdyaWQ6IGdyaWQuZmlsdGVyUHJvcHMsXG4gIHBvc2l0aW9uczogcG9zaXRpb25zLmZpbHRlclByb3BzLFxuICBwYWxldHRlOiBwYWxldHRlLmZpbHRlclByb3BzLFxuICBzaGFkb3dzOiBzaGFkb3dzLmZpbHRlclByb3BzLFxuICBzaXppbmc6IHNpemluZy5maWx0ZXJQcm9wcyxcbiAgc3BhY2luZzogc3BhY2luZy5maWx0ZXJQcm9wcyxcbiAgdHlwb2dyYXBoeTogdHlwb2dyYXBoeS5maWx0ZXJQcm9wc1xufTtcbmV4cG9ydCBjb25zdCBzdHlsZUZ1bmN0aW9uTWFwcGluZyA9IHtcbiAgYm9yZGVycyxcbiAgZGlzcGxheSxcbiAgZmxleGJveCxcbiAgZ3JpZCxcbiAgcG9zaXRpb25zLFxuICBwYWxldHRlLFxuICBzaGFkb3dzLFxuICBzaXppbmcsXG4gIHNwYWNpbmcsXG4gIHR5cG9ncmFwaHlcbn07XG5leHBvcnQgY29uc3QgcHJvcFRvU3R5bGVGdW5jdGlvbiA9IE9iamVjdC5rZXlzKGZpbHRlclByb3BzTWFwcGluZykucmVkdWNlKChhY2MsIHN0eWxlRm5OYW1lKSA9PiB7XG4gIGZpbHRlclByb3BzTWFwcGluZ1tzdHlsZUZuTmFtZV0uZm9yRWFjaChwcm9wTmFtZSA9PiB7XG4gICAgYWNjW3Byb3BOYW1lXSA9IHN0eWxlRnVuY3Rpb25NYXBwaW5nW3N0eWxlRm5OYW1lXTtcbiAgfSk7XG4gIHJldHVybiBhY2M7XG59LCB7fSk7XG5cbmZ1bmN0aW9uIGdldFRoZW1lVmFsdWUocHJvcCwgdmFsdWUsIHRoZW1lKSB7XG4gIGNvbnN0IGlucHV0UHJvcHMgPSB7XG4gICAgW3Byb3BdOiB2YWx1ZSxcbiAgICB0aGVtZVxuICB9O1xuICBjb25zdCBzdHlsZUZ1bmN0aW9uID0gcHJvcFRvU3R5bGVGdW5jdGlvbltwcm9wXTtcbiAgcmV0dXJuIHN0eWxlRnVuY3Rpb24gPyBzdHlsZUZ1bmN0aW9uKGlucHV0UHJvcHMpIDoge1xuICAgIFtwcm9wXTogdmFsdWVcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0VGhlbWVWYWx1ZTsiLCJpbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcblxuZnVuY3Rpb24gbWVyZ2UoYWNjLCBpdGVtKSB7XG4gIGlmICghaXRlbSkge1xuICAgIHJldHVybiBhY2M7XG4gIH1cblxuICByZXR1cm4gZGVlcG1lcmdlKGFjYywgaXRlbSwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXAsIGl0J3Mgd2F5IGZhc3Rlci5cblxuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVyZ2U7IiwiaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IHsgZ2V0UGF0aCB9IGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4vbWVyZ2UnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnLi9tZW1vaXplJztcbmNvbnN0IHByb3BlcnRpZXMgPSB7XG4gIG06ICdtYXJnaW4nLFxuICBwOiAncGFkZGluZydcbn07XG5jb25zdCBkaXJlY3Rpb25zID0ge1xuICB0OiAnVG9wJyxcbiAgcjogJ1JpZ2h0JyxcbiAgYjogJ0JvdHRvbScsXG4gIGw6ICdMZWZ0JyxcbiAgeDogWydMZWZ0JywgJ1JpZ2h0J10sXG4gIHk6IFsnVG9wJywgJ0JvdHRvbSddXG59O1xuY29uc3QgYWxpYXNlcyA9IHtcbiAgbWFyZ2luWDogJ214JyxcbiAgbWFyZ2luWTogJ215JyxcbiAgcGFkZGluZ1g6ICdweCcsXG4gIHBhZGRpbmdZOiAncHknXG59OyAvLyBtZW1vaXplKCkgaW1wYWN0OlxuLy8gRnJvbSAzMDAsMDAwIG9wcy9zZWNcbi8vIFRvIDM1MCwwMDAgb3BzL3NlY1xuXG5jb25zdCBnZXRDc3NQcm9wZXJ0aWVzID0gbWVtb2l6ZShwcm9wID0+IHtcbiAgLy8gSXQncyBub3QgYSBzaG9ydGhhbmQgbm90YXRpb24uXG4gIGlmIChwcm9wLmxlbmd0aCA+IDIpIHtcbiAgICBpZiAoYWxpYXNlc1twcm9wXSkge1xuICAgICAgcHJvcCA9IGFsaWFzZXNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgY29uc3QgW2EsIGJdID0gcHJvcC5zcGxpdCgnJyk7XG4gIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1thXTtcbiAgY29uc3QgZGlyZWN0aW9uID0gZGlyZWN0aW9uc1tiXSB8fCAnJztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGlyZWN0aW9uKSA/IGRpcmVjdGlvbi5tYXAoZGlyID0+IHByb3BlcnR5ICsgZGlyKSA6IFtwcm9wZXJ0eSArIGRpcmVjdGlvbl07XG59KTtcbmNvbnN0IG1hcmdpbktleXMgPSBbJ20nLCAnbXQnLCAnbXInLCAnbWInLCAnbWwnLCAnbXgnLCAnbXknLCAnbWFyZ2luJywgJ21hcmdpblRvcCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5YJywgJ21hcmdpblknLCAnbWFyZ2luSW5saW5lJywgJ21hcmdpbklubGluZVN0YXJ0JywgJ21hcmdpbklubGluZUVuZCcsICdtYXJnaW5CbG9jaycsICdtYXJnaW5CbG9ja1N0YXJ0JywgJ21hcmdpbkJsb2NrRW5kJ107XG5jb25zdCBwYWRkaW5nS2V5cyA9IFsncCcsICdwdCcsICdwcicsICdwYicsICdwbCcsICdweCcsICdweScsICdwYWRkaW5nJywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1gnLCAncGFkZGluZ1knLCAncGFkZGluZ0lubGluZScsICdwYWRkaW5nSW5saW5lU3RhcnQnLCAncGFkZGluZ0lubGluZUVuZCcsICdwYWRkaW5nQmxvY2snLCAncGFkZGluZ0Jsb2NrU3RhcnQnLCAncGFkZGluZ0Jsb2NrRW5kJ107XG5jb25zdCBzcGFjaW5nS2V5cyA9IFsuLi5tYXJnaW5LZXlzLCAuLi5wYWRkaW5nS2V5c107XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCB0aGVtZUtleSwgZGVmYXVsdFZhbHVlLCBwcm9wTmFtZSkge1xuICB2YXIgX2dldFBhdGg7XG5cbiAgY29uc3QgdGhlbWVTcGFjaW5nID0gKF9nZXRQYXRoID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXksIGZhbHNlKSkgIT0gbnVsbCA/IF9nZXRQYXRoIDogZGVmYXVsdFZhbHVlO1xuXG4gIGlmICh0eXBlb2YgdGhlbWVTcGFjaW5nID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhYnMgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhYnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhYnM7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWJzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogRXhwZWN0ZWQgJHtwcm9wTmFtZX0gYXJndW1lbnQgdG8gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcsIGdvdCAke2Fic30uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZyAqIGFicztcbiAgICB9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodGhlbWVTcGFjaW5nKSkge1xuICAgIHJldHVybiBhYnMgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhYnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhYnM7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhYnMpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFycmF5IHR5cGUgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggbm9uIGludGVnZXIgdmFsdWVzLmAgKyBgWW91IHNob3VsZCBlaXRoZXIgdXNlIGFuIGludGVnZXIgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbmRleCwgb3IgZGVmaW5lIHRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcyBhIG51bWJlci5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWJzID4gdGhlbWVTcGFjaW5nLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgKCR7YWJzfSkgb3ZlcmZsb3dzLmAsIGBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7SlNPTi5zdHJpbmdpZnkodGhlbWVTcGFjaW5nKX0uYCwgYCR7YWJzfSA+ICR7dGhlbWVTcGFjaW5nLmxlbmd0aCAtIDF9LCB5b3UgbmVlZCB0byBhZGQgdGhlIG1pc3NpbmcgdmFsdWVzLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhlbWVTcGFjaW5nW2Fic107XG4gICAgfTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdGhlbWVTcGFjaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRoZW1lU3BhY2luZztcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIHZhbHVlICgke3RoZW1lU3BhY2luZ30pIGlzIGludmFsaWQuYCwgJ0l0IHNob3VsZCBiZSBhIG51bWJlciwgYW4gYXJyYXkgb3IgYSBmdW5jdGlvbi4nXS5qb2luKCdcXG4nKSk7XG4gIH1cblxuICByZXR1cm4gKCkgPT4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuYXJ5U3BhY2luZyh0aGVtZSkge1xuICByZXR1cm4gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCAnc3BhY2luZycsIDgsICdzcGFjaW5nJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSkge1xuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycgfHwgcHJvcFZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gcHJvcFZhbHVlO1xuICB9XG5cbiAgY29uc3QgYWJzID0gTWF0aC5hYnMocHJvcFZhbHVlKTtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1lcihhYnMpO1xuXG4gIGlmIChwcm9wVmFsdWUgPj0gMCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHJhbnNmb3JtZWQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIC10cmFuc2Zvcm1lZDtcbiAgfVxuXG4gIHJldHVybiBgLSR7dHJhbnNmb3JtZWR9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHlsZUZyb21Qcm9wVmFsdWUoY3NzUHJvcGVydGllcywgdHJhbnNmb3JtZXIpIHtcbiAgcmV0dXJuIHByb3BWYWx1ZSA9PiBjc3NQcm9wZXJ0aWVzLnJlZHVjZSgoYWNjLCBjc3NQcm9wZXJ0eSkgPT4ge1xuICAgIGFjY1tjc3NQcm9wZXJ0eV0gPSBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpIHtcbiAgLy8gVXNpbmcgYSBoYXNoIGNvbXB1dGF0aW9uIG92ZXIgYW4gYXJyYXkgaXRlcmF0aW9uIGNvdWxkIGJlIGZhc3RlciwgYnV0IHdpdGggb25seSAyOCBpdGVtcyxcbiAgLy8gaXQncyBkb2Vzbid0IHdvcnRoIHRoZSBidW5kbGUgc2l6ZS5cbiAgaWYgKGtleXMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNzc1Byb3BlcnRpZXMgPSBnZXRDc3NQcm9wZXJ0aWVzKHByb3ApO1xuICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBnZXRTdHlsZUZyb21Qcm9wVmFsdWUoY3NzUHJvcGVydGllcywgdHJhbnNmb3JtZXIpO1xuICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1twcm9wXTtcbiAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHN0eWxlKHByb3BzLCBrZXlzKSB7XG4gIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlTcGFjaW5nKHByb3BzLnRoZW1lKTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BzKS5tYXAocHJvcCA9PiByZXNvbHZlQ3NzUHJvcGVydHkocHJvcHMsIGtleXMsIHByb3AsIHRyYW5zZm9ybWVyKSkucmVkdWNlKG1lcmdlLCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJnaW4ocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBtYXJnaW5LZXlzKTtcbn1cbm1hcmdpbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gbWFyZ2luS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5tYXJnaW4uZmlsdGVyUHJvcHMgPSBtYXJnaW5LZXlzO1xuZXhwb3J0IGZ1bmN0aW9uIHBhZGRpbmcocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBwYWRkaW5nS2V5cyk7XG59XG5wYWRkaW5nLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwYWRkaW5nS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5wYWRkaW5nLmZpbHRlclByb3BzID0gcGFkZGluZ0tleXM7XG5cbmZ1bmN0aW9uIHNwYWNpbmcocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBzcGFjaW5nS2V5cyk7XG59XG5cbnNwYWNpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHNwYWNpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnNwYWNpbmcuZmlsdGVyUHJvcHMgPSBzcGFjaW5nS2V5cztcbmV4cG9ydCBkZWZhdWx0IHNwYWNpbmc7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICBjb25zdCBjYWNoZSA9IHt9O1xuICByZXR1cm4gYXJnID0+IHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9jYXBpdGFsaXplIGFzIGNhcGl0YWxpemUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoKG9iaiwgcGF0aCwgY2hlY2tWYXJzID0gdHJ1ZSkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gQ2hlY2sgaWYgQ1NTIHZhcmlhYmxlcyBhcmUgdXNlZFxuXG5cbiAgaWYgKG9iaiAmJiBvYmoudmFycyAmJiBjaGVja1ZhcnMpIHtcbiAgICBjb25zdCB2YWwgPSBgdmFycy4ke3BhdGh9YC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBhY2MgJiYgYWNjW2l0ZW1dID8gYWNjW2l0ZW1dIDogbnVsbCwgb2JqKTtcblxuICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgaWYgKGFjYyAmJiBhY2NbaXRlbV0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFjY1tpdGVtXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSwgb2JqKTtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsLCB1c2VyVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCkge1xuICBsZXQgdmFsdWU7XG5cbiAgaWYgKHR5cGVvZiB0aGVtZU1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZyhwcm9wVmFsdWVGaW5hbCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZU1hcHBpbmcpKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmdbcHJvcFZhbHVlRmluYWxdIHx8IHVzZXJWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGdldFBhdGgodGhlbWVNYXBwaW5nLCBwcm9wVmFsdWVGaW5hbCkgfHwgdXNlclZhbHVlO1xuICB9XG5cbiAgaWYgKHRyYW5zZm9ybSkge1xuICAgIHZhbHVlID0gdHJhbnNmb3JtKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gc3R5bGUob3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcHJvcCxcbiAgICBjc3NQcm9wZXJ0eSA9IG9wdGlvbnMucHJvcCxcbiAgICB0aGVtZUtleSxcbiAgICB0cmFuc2Zvcm1cbiAgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgZm4gPSBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzW3Byb3BdID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWU7XG4gICAgY29uc3QgdGhlbWVNYXBwaW5nID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXkpIHx8IHt9O1xuXG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlRmluYWwgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZ2V0VmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcblxuICAgICAgaWYgKHByb3BWYWx1ZUZpbmFsID09PSB2YWx1ZSAmJiB0eXBlb2YgcHJvcFZhbHVlRmluYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNzc1Byb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtjc3NQcm9wZXJ0eV06IHZhbHVlXG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfTtcblxuICBmbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICAgIFtwcm9wXTogcmVzcG9uc2l2ZVByb3BUeXBlXG4gIH0gOiB7fTtcbiAgZm4uZmlsdGVyUHJvcHMgPSBbcHJvcF07XG4gIHJldHVybiBmbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGU7IiwiaW1wb3J0IG1lcmdlIGZyb20gJy4uL21lcmdlJztcbmltcG9ydCB7IHN0eWxlRnVuY3Rpb25NYXBwaW5nIGFzIGRlZmF1bHRTdHlsZUZ1bmN0aW9uTWFwcGluZyB9IGZyb20gJy4uL2dldFRoZW1lVmFsdWUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMsIGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCwgcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMgfSBmcm9tICcuLi9icmVha3BvaW50cyc7XG5cbmZ1bmN0aW9uIG9iamVjdHNIYXZlU2FtZUtleXMoLi4ub2JqZWN0cykge1xuICBjb25zdCBhbGxLZXlzID0gb2JqZWN0cy5yZWR1Y2UoKGtleXMsIG9iamVjdCkgPT4ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMob2JqZWN0KSksIFtdKTtcbiAgY29uc3QgdW5pb24gPSBuZXcgU2V0KGFsbEtleXMpO1xuICByZXR1cm4gb2JqZWN0cy5ldmVyeShvYmplY3QgPT4gdW5pb24uc2l6ZSA9PT0gT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBjYWxsSWZGbihtYXliZUZuLCBhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nID8gbWF5YmVGbihhcmcpIDogbWF5YmVGbjtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuXG5cbmV4cG9ydCBmdW5jdGlvbiB1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3goc3R5bGVGdW5jdGlvbk1hcHBpbmcgPSBkZWZhdWx0U3R5bGVGdW5jdGlvbk1hcHBpbmcpIHtcbiAgY29uc3QgcHJvcFRvU3R5bGVGdW5jdGlvbiA9IE9iamVjdC5rZXlzKHN0eWxlRnVuY3Rpb25NYXBwaW5nKS5yZWR1Y2UoKGFjYywgc3R5bGVGbk5hbWUpID0+IHtcbiAgICBzdHlsZUZ1bmN0aW9uTWFwcGluZ1tzdHlsZUZuTmFtZV0uZmlsdGVyUHJvcHMuZm9yRWFjaChwcm9wTmFtZSA9PiB7XG4gICAgICBhY2NbcHJvcE5hbWVdID0gc3R5bGVGdW5jdGlvbk1hcHBpbmdbc3R5bGVGbk5hbWVdO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICBmdW5jdGlvbiBnZXRUaGVtZVZhbHVlKHByb3AsIHZhbHVlLCB0aGVtZSkge1xuICAgIGNvbnN0IGlucHV0UHJvcHMgPSB7XG4gICAgICBbcHJvcF06IHZhbHVlLFxuICAgICAgdGhlbWVcbiAgICB9O1xuICAgIGNvbnN0IHN0eWxlRnVuY3Rpb24gPSBwcm9wVG9TdHlsZUZ1bmN0aW9uW3Byb3BdO1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uID8gc3R5bGVGdW5jdGlvbihpbnB1dFByb3BzKSA6IHtcbiAgICAgIFtwcm9wXTogdmFsdWVcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc3R5bGVGdW5jdGlvblN4KHByb3BzKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3gsXG4gICAgICB0aGVtZSA9IHt9XG4gICAgfSA9IHByb3BzIHx8IHt9O1xuXG4gICAgaWYgKCFzeCkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIEVtb3Rpb24gJiBzdHlsZWQtY29tcG9uZW50cyB3aWxsIG5lZ2xlY3QgbnVsbFxuICAgIH1cbiAgICAvKlxuICAgICAqIFJlY2VpdmUgYHN4SW5wdXRgIGFzIG9iamVjdCBvciBjYWxsYmFja1xuICAgICAqIGFuZCB0aGVuIHJlY3Vyc2l2ZWx5IGNoZWNrIGtleXMgJiB2YWx1ZXMgdG8gY3JlYXRlIG1lZGlhIHF1ZXJ5IG9iamVjdCBzdHlsZXMuXG4gICAgICogKHRoZSByZXN1bHQgd2lsbCBiZSB1c2VkIGluIGBzdHlsZWRgKVxuICAgICAqL1xuXG5cbiAgICBmdW5jdGlvbiB0cmF2ZXJzZShzeElucHV0KSB7XG4gICAgICBsZXQgc3hPYmplY3QgPSBzeElucHV0O1xuXG4gICAgICBpZiAodHlwZW9mIHN4SW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc3hPYmplY3QgPSBzeElucHV0KHRoZW1lKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN4SW5wdXQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIHZhbHVlXG4gICAgICAgIHJldHVybiBzeElucHV0O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN4T2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbXB0eUJyZWFrcG9pbnRzID0gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KHRoZW1lLmJyZWFrcG9pbnRzKTtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpO1xuICAgICAgbGV0IGNzcyA9IGVtcHR5QnJlYWtwb2ludHM7XG4gICAgICBPYmplY3Qua2V5cyhzeE9iamVjdCkuZm9yRWFjaChzdHlsZUtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2FsbElmRm4oc3hPYmplY3Rbc3R5bGVLZXldLCB0aGVtZSk7XG5cbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHByb3BUb1N0eWxlRnVuY3Rpb25bc3R5bGVLZXldKSB7XG4gICAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgZ2V0VGhlbWVWYWx1ZShzdHlsZUtleSwgdmFsdWUsIHRoZW1lKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c1ZhbHVlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICB9LCB2YWx1ZSwgeCA9PiAoe1xuICAgICAgICAgICAgICAgIFtzdHlsZUtleV06IHhcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIGlmIChvYmplY3RzSGF2ZVNhbWVLZXlzKGJyZWFrcG9pbnRzVmFsdWVzLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjc3Nbc3R5bGVLZXldID0gc3R5bGVGdW5jdGlvblN4KHtcbiAgICAgICAgICAgICAgICAgIHN4OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3NzID0gbWVyZ2UoY3NzLCBicmVha3BvaW50c1ZhbHVlcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3NzID0gbWVyZ2UoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzS2V5cywgY3NzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShzeCkgPyBzeC5tYXAodHJhdmVyc2UpIDogdHJhdmVyc2Uoc3gpO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeDtcbn1cbmNvbnN0IHN0eWxlRnVuY3Rpb25TeCA9IHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCgpO1xuc3R5bGVGdW5jdGlvblN4LmZpbHRlclByb3BzID0gWydzeCddO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVGdW5jdGlvblN4OyIsImltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuL2NyZWF0ZVRoZW1lJztcbmltcG9ydCB1c2VUaGVtZVdpdGhvdXREZWZhdWx0IGZyb20gJy4vdXNlVGhlbWVXaXRob3V0RGVmYXVsdCc7XG5leHBvcnQgY29uc3Qgc3lzdGVtRGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcblxuZnVuY3Rpb24gdXNlVGhlbWUoZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lKSB7XG4gIHJldHVybiB1c2VUaGVtZVdpdGhvdXREZWZhdWx0KGRlZmF1bHRUaGVtZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVRoZW1lOyIsImltcG9ydCB7IHVzZVRoZW1lIGFzIG11aVVzZVRoZW1lIH0gZnJvbSAnQG11aS9wcml2YXRlLXRoZW1pbmcnO1xuXG5mdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5cbmZ1bmN0aW9uIHVzZVRoZW1lKGRlZmF1bHRUaGVtZSA9IG51bGwpIHtcbiAgY29uc3QgY29udGV4dFRoZW1lID0gbXVpVXNlVGhlbWUoKTtcbiAgcmV0dXJuICFjb250ZXh0VGhlbWUgfHwgaXNPYmplY3RFbXB0eShjb250ZXh0VGhlbWUpID8gZGVmYXVsdFRoZW1lIDogY29udGV4dFRoZW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VUaGVtZTsiLCJjb25zdCBkZWZhdWx0R2VuZXJhdG9yID0gY29tcG9uZW50TmFtZSA9PiBjb21wb25lbnROYW1lO1xuXG5jb25zdCBjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IgPSAoKSA9PiB7XG4gIGxldCBnZW5lcmF0ZSA9IGRlZmF1bHRHZW5lcmF0b3I7XG4gIHJldHVybiB7XG4gICAgY29uZmlndXJlKGdlbmVyYXRvcikge1xuICAgICAgZ2VuZXJhdGUgPSBnZW5lcmF0b3I7XG4gICAgfSxcblxuICAgIGdlbmVyYXRlKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZShjb21wb25lbnROYW1lKTtcbiAgICB9LFxuXG4gICAgcmVzZXQoKSB7XG4gICAgICBnZW5lcmF0ZSA9IGRlZmF1bHRHZW5lcmF0b3I7XG4gICAgfVxuXG4gIH07XG59O1xuXG5jb25zdCBDbGFzc05hbWVHZW5lcmF0b3IgPSBjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IoKTtcbmV4cG9ydCBkZWZhdWx0IENsYXNzTmFtZUdlbmVyYXRvcjsiLCJpbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiLi9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbi8vIEl0IHNob3VsZCB0byBiZSBub3RlZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXF1aXZhbGVudCB0byBgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemVgLlxuLy9cbi8vIEEgc3RyaWN0IGNhcGl0YWxpemF0aW9uIHNob3VsZCB1cHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgaW4gdGhlIHNlbnRlbmNlLlxuLy8gV2Ugb25seSBoYW5kbGUgdGhlIGZpcnN0IHdvcmQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogXFxgY2FwaXRhbGl6ZShzdHJpbmcpXFxgIGV4cGVjdHMgYSBzdHJpbmcgYXJndW1lbnQuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoNykpO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKSB7XG4gIGNvbnN0IG91dHB1dCA9IHt9O1xuICBPYmplY3Qua2V5cyhzbG90cykuZm9yRWFjaCggLy8gYE9iamV0LmtleXMoc2xvdHMpYCBjYW4ndCBiZSB3aWRlciB0aGFuIGBUYCBiZWNhdXNlIHdlIGluZmVyIGBUYCBmcm9tIGBzbG90c2AuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L3B1bGwvMTIyNTMjaXNzdWVjb21tZW50LTI2MzEzMjIwOFxuICBzbG90ID0+IHtcbiAgICBvdXRwdXRbc2xvdF0gPSBzbG90c1tzbG90XS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGFjYy5wdXNoKGdldFV0aWxpdHlDbGFzcyhrZXkpKTtcblxuICAgICAgICBpZiAoY2xhc3NlcyAmJiBjbGFzc2VzW2tleV0pIHtcbiAgICAgICAgICBhY2MucHVzaChjbGFzc2VzW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pLmpvaW4oJyAnKTtcbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59IiwiLyoqXG4gKiBTYWZlIGNoYWluZWQgZnVuY3Rpb24uXG4gKlxuICogV2lsbCBvbmx5IGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBpZiBuZWVkZWQsXG4gKiBvdGhlcndpc2Ugd2lsbCBwYXNzIGJhY2sgZXhpc3RpbmcgZnVuY3Rpb25zIG9yIG51bGwuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUNoYWluZWRGdW5jdGlvbiguLi5mdW5jcykge1xuICByZXR1cm4gZnVuY3MucmVkdWNlKChhY2MsIGZ1bmMpID0+IHtcbiAgICBpZiAoZnVuYyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiBjaGFpbmVkRnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgYWNjLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9LCAoKSA9PiB7fSk7XG59IiwiLy8gQ29ycmVzcG9uZHMgdG8gMTAgZnJhbWVzIGF0IDYwIEh6LlxuLy8gQSBmZXcgYnl0ZXMgcGF5bG9hZCBvdmVyaGVhZCB3aGVuIGxvZGFzaC9kZWJvdW5jZSBpcyB+MyBrQiBhbmQgZGVib3VuY2UgfjMwMCBCLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCA9IDE2Nikge1xuICBsZXQgdGltZW91dDtcblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoLi4uYXJncykge1xuICAgIGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgfVxuXG4gIGRlYm91bmNlZC5jbGVhciA9ICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gIH07XG5cbiAgcmV0dXJuIGRlYm91bmNlZDtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KGl0ZW0pIHtcbiAgcmV0dXJuIGl0ZW0gIT09IG51bGwgJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0uY29uc3RydWN0b3IgPT09IE9iamVjdDtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZXBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucyA9IHtcbiAgY2xvbmU6IHRydWVcbn0pIHtcbiAgY29uc3Qgb3V0cHV0ID0gb3B0aW9ucy5jbG9uZSA/IF9leHRlbmRzKHt9LCB0YXJnZXQpIDogdGFyZ2V0O1xuXG4gIGlmIChpc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAvLyBBdm9pZCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHNvdXJjZVtrZXldKSAmJiBrZXkgaW4gdGFyZ2V0ICYmIGlzUGxhaW5PYmplY3QodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgIC8vIFNpbmNlIGBvdXRwdXRgIGlzIGEgY2xvbmUgb2YgYHRhcmdldGAgYW5kIHdlIGhhdmUgbmFycm93ZWQgYHRhcmdldGAgaW4gdGhpcyBibG9jayB3ZSBjYW4gY2FzdCB0byB0aGUgc2FtZSB0eXBlLlxuICAgICAgICBvdXRwdXRba2V5XSA9IGRlZXBtZXJnZSh0YXJnZXRba2V5XSwgc291cmNlW2tleV0sIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59IiwiLyoqXG4gKiBXQVJOSU5HOiBEb24ndCBpbXBvcnQgdGhpcyBkaXJlY3RseS5cbiAqIFVzZSBgTXVpRXJyb3JgIGZyb20gYEBtdWkvdXRpbHMvbWFjcm9zL011aUVycm9yLm1hY3JvYCBpbnN0ZWFkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0TXVpRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgLy8gQXBwbHkgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscyBpbiBsb29zZSBtb2RlXG4gIC8vIGxvb3NlIG1vZGUgaXMgc2FmZSBpZmYgd2UncmUgY29uY2F0ZW5hdGluZyBwcmltaXRpdmVzXG4gIC8vIHNlZSBodHRwczovL2JhYmVsanMuaW8vZG9jcy9lbi9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXRlbXBsYXRlLWxpdGVyYWxzI2xvb3NlXG5cbiAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXRlbXBsYXRlICovXG4gIGxldCB1cmwgPSAnaHR0cHM6Ly9tdWkuY29tL3Byb2R1Y3Rpb24tZXJyb3IvP2NvZGU9JyArIGNvZGU7XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAvLyByZXN0IHBhcmFtcyBvdmVyLXRyYW5zcGlsZSBmb3IgdGhpcyBjYXNlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgIHVybCArPSAnJmFyZ3NbXT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tpXSk7XG4gIH1cblxuICByZXR1cm4gJ01pbmlmaWVkIE1VSSBlcnJvciAjJyArIGNvZGUgKyAnOyB2aXNpdCAnICsgdXJsICsgJyBmb3IgdGhlIGZ1bGwgbWVzc2FnZS4nO1xuICAvKiBlc2xpbnQtZW5hYmxlIHByZWZlci10ZW1wbGF0ZSAqL1xufSIsImltcG9ydCBDbGFzc05hbWVHZW5lcmF0b3IgZnJvbSAnLi4vQ2xhc3NOYW1lR2VuZXJhdG9yJztcbmNvbnN0IGdsb2JhbFN0YXRlQ2xhc3Nlc01hcHBpbmcgPSB7XG4gIGFjdGl2ZTogJ2FjdGl2ZScsXG4gIGNoZWNrZWQ6ICdjaGVja2VkJyxcbiAgY29tcGxldGVkOiAnY29tcGxldGVkJyxcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGVycm9yOiAnZXJyb3InLFxuICBleHBhbmRlZDogJ2V4cGFuZGVkJyxcbiAgZm9jdXNlZDogJ2ZvY3VzZWQnLFxuICBmb2N1c1Zpc2libGU6ICdmb2N1c1Zpc2libGUnLFxuICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgc2VsZWN0ZWQ6ICdzZWxlY3RlZCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZVV0aWxpdHlDbGFzcyhjb21wb25lbnROYW1lLCBzbG90LCBnbG9iYWxTdGF0ZVByZWZpeCA9ICdNdWknKSB7XG4gIGNvbnN0IGdsb2JhbFN0YXRlQ2xhc3MgPSBnbG9iYWxTdGF0ZUNsYXNzZXNNYXBwaW5nW3Nsb3RdO1xuICByZXR1cm4gZ2xvYmFsU3RhdGVDbGFzcyA/IGAke2dsb2JhbFN0YXRlUHJlZml4fS0ke2dsb2JhbFN0YXRlQ2xhc3N9YCA6IGAke0NsYXNzTmFtZUdlbmVyYXRvci5nZW5lcmF0ZShjb21wb25lbnROYW1lKX0tJHtzbG90fWA7XG59IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoY29tcG9uZW50TmFtZSwgc2xvdHMsIGdsb2JhbFN0YXRlUHJlZml4ID0gJ011aScpIHtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIHNsb3RzLmZvckVhY2goc2xvdCA9PiB7XG4gICAgcmVzdWx0W3Nsb3RdID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoY29tcG9uZW50TmFtZSwgc2xvdCwgZ2xvYmFsU3RhdGVQcmVmaXgpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvd25lckRvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xufSIsImltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4vb3duZXJEb2N1bWVudCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvd25lcldpbmRvdyhub2RlKSB7XG4gIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQobm9kZSk7XG4gIHJldHVybiBkb2MuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuXG4vKipcbiAqIEFkZCBrZXlzLCB2YWx1ZXMgb2YgYGRlZmF1bHRQcm9wc2AgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiBgcHJvcHNgXG4gKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdFByb3BzXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm5zIHtvYmplY3R9IHJlc29sdmVkIHByb3BzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc29sdmVQcm9wcyhkZWZhdWx0UHJvcHMsIHByb3BzKSB7XG4gIGNvbnN0IG91dHB1dCA9IF9leHRlbmRzKHt9LCBwcm9wcyk7XG5cbiAgT2JqZWN0LmtleXMoZGVmYXVsdFByb3BzKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICBpZiAob3V0cHV0W3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRwdXRbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufSIsIi8qKlxuICogVE9ETyB2NTogY29uc2lkZXIgbWFraW5nIGl0IHByaXZhdGVcbiAqXG4gKiBwYXNzZXMge3ZhbHVlfSB0byB7cmVmfVxuICpcbiAqIFdBUk5JTkc6IEJlIHN1cmUgdG8gb25seSBjYWxsIHRoaXMgaW5zaWRlIGEgY2FsbGJhY2sgdGhhdCBpcyBwYXNzZWQgYXMgYSByZWYuXG4gKiBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0byBjbGVhbnVwIHRoZSBwcmV2aW91cyB7cmVmfSBpZiBpdCBjaGFuZ2VzLiBTZWVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzEzNTM5XG4gKlxuICogVXNlZnVsIGlmIHlvdSB3YW50IHRvIGV4cG9zZSB0aGUgcmVmIG9mIGFuIGlubmVyIGNvbXBvbmVudCB0byB0aGUgcHVibGljIEFQSVxuICogd2hpbGUgc3RpbGwgdXNpbmcgaXQgaW5zaWRlIHRoZSBjb21wb25lbnQuXG4gKiBAcGFyYW0gcmVmIEEgcmVmIGNhbGxiYWNrIG9yIHJlZiBvYmplY3QuIElmIGFueXRoaW5nIGZhbHN5LCB0aGlzIGlzIGEgbm8tb3AuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldFJlZihyZWYsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChyZWYpIHtcbiAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICB9XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgdXNlRW5oYW5jZWRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IFJlYWN0LnVzZUxheW91dEVmZmVjdCA6IFJlYWN0LnVzZUVmZmVjdDtcbmV4cG9ydCBkZWZhdWx0IHVzZUVuaGFuY2VkRWZmZWN0OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuL3VzZUVuaGFuY2VkRWZmZWN0Jztcbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDA5OSNpc3N1ZWNvbW1lbnQtNDQwMDEzODkyXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRXZlbnRDYWxsYmFjayhmbikge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYoZm4pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgcmVmLmN1cnJlbnQgPSBmbjtcbiAgfSk7XG4gIHJldHVybiBSZWFjdC51c2VDYWxsYmFjaygoLi4uYXJncykgPT4gLy8gQHRzLWV4cGVjdC1lcnJvciBoaWRlIGB0aGlzYFxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YmFuLWNvbW1hLW9wZXJhdG9yXG4gICgwLCByZWYuY3VycmVudCkoLi4uYXJncyksIFtdKTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc2V0UmVmIGZyb20gJy4vc2V0UmVmJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUZvcmtSZWYocmVmQSwgcmVmQikge1xuICAvKipcbiAgICogVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBpZiB0aGUgcmVmIHByb3BzIGNoYW5nZSBhbmQgYXJlIGRlZmluZWQuXG4gICAqIFRoaXMgbWVhbnMgcmVhY3Qgd2lsbCBjYWxsIHRoZSBvbGQgZm9ya1JlZiB3aXRoIGBudWxsYCBhbmQgdGhlIG5ldyBmb3JrUmVmXG4gICAqIHdpdGggdGhlIHJlZi4gQ2xlYW51cCBuYXR1cmFsbHkgZW1lcmdlcyBmcm9tIHRoaXMgYmVoYXZpb3IuXG4gICAqL1xuICByZXR1cm4gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlZkEgPT0gbnVsbCAmJiByZWZCID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiByZWZWYWx1ZSA9PiB7XG4gICAgICBzZXRSZWYocmVmQSwgcmVmVmFsdWUpO1xuICAgICAgc2V0UmVmKHJlZkIsIHJlZlZhbHVlKTtcbiAgICB9O1xuICB9LCBbcmVmQSwgcmVmQl0pO1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmxldCBnbG9iYWxJZCA9IDA7XG5cbmZ1bmN0aW9uIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpIHtcbiAgY29uc3QgW2RlZmF1bHRJZCwgc2V0RGVmYXVsdElkXSA9IFJlYWN0LnVzZVN0YXRlKGlkT3ZlcnJpZGUpO1xuICBjb25zdCBpZCA9IGlkT3ZlcnJpZGUgfHwgZGVmYXVsdElkO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0SWQgPT0gbnVsbCkge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gdGhpcyBkZWZhdWx0IGlkIHdoZW4gcG9zc2libGUuXG4gICAgICAvLyBVc2UgdGhlIGluY3JlbWVudGluZyB2YWx1ZSBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIG9ubHkuXG4gICAgICAvLyBXZSBjYW4ndCB1c2UgaXQgc2VydmVyLXNpZGUuXG4gICAgICAvLyBJZiB5b3Ugd2FudCB0byB1c2UgcmFuZG9tIHZhbHVlcyBwbGVhc2UgY29uc2lkZXIgdGhlIEJpcnRoZGF5IFByb2JsZW06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpcnRoZGF5X3Byb2JsZW1cbiAgICAgIGdsb2JhbElkICs9IDE7XG4gICAgICBzZXREZWZhdWx0SWQoYG11aS0ke2dsb2JhbElkfWApO1xuICAgIH1cbiAgfSwgW2RlZmF1bHRJZF0pO1xuICByZXR1cm4gaWQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbmNhdCAtLSBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrL2lzc3Vlcy8xNDgxNFxuXG5cbmNvbnN0IG1heWJlUmVhY3RVc2VJZCA9IFJlYWN0Wyd1c2VJZCcgKyAnJ107XG4vKipcbiAqXG4gKiBAZXhhbXBsZSA8ZGl2IGlkPXt1c2VJZCgpfSAvPlxuICogQHBhcmFtIGlkT3ZlcnJpZGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlSWQoaWRPdmVycmlkZSkge1xuICBpZiAobWF5YmVSZWFjdFVzZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCByZWFjdElkID0gbWF5YmVSZWFjdFVzZUlkKCk7XG4gICAgcmV0dXJuIGlkT3ZlcnJpZGUgIT0gbnVsbCA/IGlkT3ZlcnJpZGUgOiByZWFjdElkO1xuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rcyAtLSBgUmVhY3QudXNlSWRgIGlzIGludmFyaWFudCBhdCBydW50aW1lLlxuXG5cbiAgcmV0dXJuIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpO1xufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbCcpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcbnZhciBwYXJzZVByb3RvY29sID0gcmVxdWlyZSgnLi4vaGVscGVycy9wYXJzZVByb3RvY29sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgcmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB2YXIgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkgJiYgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8ICByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgKGNhbmNlbCAmJiBjYW5jZWwudHlwZSkgPyBuZXcgQ2FuY2VsZWRFcnJvcigpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcmVxdWVzdERhdGEpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKGZ1bGxQYXRoKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBbICdodHRwJywgJ2h0dHBzJywgJ2ZpbGUnIF0uaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIEF4aW9zID0gcmVxdWlyZSgnLi9jb3JlL0F4aW9zJyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL2NvcmUvbWVyZ2VDb25maWcnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuYXhpb3MuVkVSU0lPTiA9IHJlcXVpcmUoJy4vZW52L2RhdGEnKS52ZXJzaW9uO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vbGliL2NvcmUvQXhpb3NFcnJvcicpO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzQXhpb3NFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuXG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgdmFyIGk7XG4gICAgdmFyIGwgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICB9XG4gICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuID0gZnVuY3Rpb24ob25mdWxmaWxsZWQpIHtcbiAgICB2YXIgX3Jlc29sdmU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICovXG5cbkNhbmNlbFRva2VuLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgfVxufTtcblxuLyoqXG4gKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsZWRFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuL2J1aWxkRnVsbFBhdGgnKTtcbnZhciB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3ZhbGlkYXRvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsO1xuXG4gIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gIHZhciByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciBwcm9taXNlO1xuXG4gIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcblxuICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgY2hhaW4gPSBjaGFpbi5jb25jYXQocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcblxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICB2YXIgbmV3Q29uZmlnID0gY29uZmlnO1xuICB3aGlsZSAocmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgdmFyIG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdHJ5IHtcbiAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uUmVqZWN0ZWQoZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0KG5ld0NvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuXG4gIHdoaWxlIChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG52YXIgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG52YXIgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goZnVuY3Rpb24oY29kZSkge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gZnVuY3Rpb24oZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSB7XG4gIHZhciBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkLFxuICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcigpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtZXJnZU1hcCA9IHtcbiAgICAndXJsJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnbWV0aG9kJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnZGF0YSc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2Jhc2VVUkwnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXF1ZXN0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVzcG9uc2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdwYXJhbXNTZXJpYWxpemVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXRNZXNzYWdlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnd2l0aENyZWRlbnRpYWxzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYWRhcHRlcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlVHlwZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZDb29raWVOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkhlYWRlck5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvblVwbG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25Eb3dubG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnZGVjb21wcmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heENvbnRlbnRMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhCb2R5TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYmVmb3JlUmVkaXJlY3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc3BvcnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwc0FnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnY2FuY2VsVG9rZW4nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdzb2NrZXRQYXRoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VFbmNvZGluZyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3ZhbGlkYXRlU3RhdHVzJzogbWVyZ2VEaXJlY3RLZXlzXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhjb25maWcxKS5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIHZhciBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgdmFyIGNvbmZpZ1ZhbHVlID0gbWVyZ2UocHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuL0F4aW9zRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgbm9ybWFsaXplSGVhZGVyTmFtZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4vdHJhbnNpdGlvbmFsJyk7XG52YXIgdG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdG9Gb3JtRGF0YScpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4uL2FkYXB0ZXJzL2h0dHAnKTtcbiAgfVxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0FjY2VwdCcpO1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHZhciBpc09iamVjdFBheWxvYWQgPSB1dGlscy5pc09iamVjdChkYXRhKTtcbiAgICB2YXIgY29udGVudFR5cGUgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuXG4gICAgdmFyIGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCAoaXNPYmplY3RQYXlsb2FkICYmIGNvbnRlbnRUeXBlID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKSB7XG4gICAgICB2YXIgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG4gICAgICByZXR1cm4gdG9Gb3JtRGF0YShpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLCBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpKTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIHZhciB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgdmFyIHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICB2YXIgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIHZhciBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHN0cmljdEpTT05QYXJzaW5nIHx8IChmb3JjZWRKU09OUGFyc2luZyAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiBkYXRhLmxlbmd0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHJlcXVpcmUoJy4vZW52L0Zvcm1EYXRhJylcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4yNy4yXCJcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG5cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgICAgY29va2llLnB1c2gobmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3Rcbm1vZHVsZS5leHBvcnRzID0gbnVsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgdmFyIG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyBGb3JtRGF0YSgpO1xuXG4gIHZhciBzdGFjayA9IFtdO1xuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZChkYXRhLCBwYXJlbnRLZXkpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChkYXRhKSB8fCB1dGlscy5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihkYXRhKSAhPT0gLTEpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGFyZW50S2V5KTtcbiAgICAgIH1cblxuICAgICAgc3RhY2sucHVzaChkYXRhKTtcblxuICAgICAgdXRpbHMuZm9yRWFjaChkYXRhLCBmdW5jdGlvbiBlYWNoKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuICAgICAgICB2YXIgZnVsbEtleSA9IHBhcmVudEtleSA/IHBhcmVudEtleSArICcuJyArIGtleSA6IGtleTtcbiAgICAgICAgdmFyIGFycjtcblxuICAgICAgICBpZiAodmFsdWUgJiYgIXBhcmVudEtleSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh1dGlscy5lbmRzV2l0aChrZXksICdbXScpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgICAhdXRpbHMuaXNVbmRlZmluZWQoZWwpICYmIGZvcm1EYXRhLmFwcGVuZChmdWxsS2V5LCBjb252ZXJ0VmFsdWUoZWwpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkKHZhbHVlLCBmdWxsS2V5KTtcbiAgICAgIH0pO1xuXG4gICAgICBzdGFjay5wb3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKHBhcmVudEtleSwgY29udmVydFZhbHVlKGRhdGEpKTtcbiAgICB9XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zvcm1EYXRhO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2Vudi9kYXRhJykudmVyc2lvbjtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaChmdW5jdGlvbih0eXBlLCBpKSB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG52YXIgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvcHQsIG9wdHMpIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIHZhciBvcHQgPSBrZXlzW2ldO1xuICAgIHZhciB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICB2YXIgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NlcnRPcHRpb25zOiBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG52YXIga2luZE9mID0gKGZ1bmN0aW9uKGNhY2hlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih0aGluZykge1xuICAgIHZhciBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG4gIH07XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuZnVuY3Rpb24ga2luZE9mVGVzdCh0eXBlKSB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBmdW5jdGlvbiBpc0tpbmRPZih0aGluZykge1xuICAgIHJldHVybiBraW5kT2YodGhpbmcpID09PSB0eXBlO1xuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsKSB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodGhpbmcpIHtcbiAgdmFyIHBhdHRlcm4gPSAnW29iamVjdCBGb3JtRGF0YV0nO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHxcbiAgICB0b1N0cmluZy5jYWxsKHRoaW5nKSA9PT0gcGF0dGVybiB8fFxuICAgIChpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSBwYXR0ZXJuKVxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOYXRpdmVTY3JpcHQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOUycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuZnVuY3Rpb24gc3RyaXBCT00oY29udGVudCkge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqL1xuXG5mdW5jdGlvbiBpbmhlcml0cyhjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmaWx0ZXJdXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIHRvRmxhdE9iamVjdChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlcikge1xuICB2YXIgcHJvcHM7XG4gIHZhciBpO1xuICB2YXIgcHJvcDtcbiAgdmFyIG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn1cblxuLypcbiAqIGRldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGVuZHNXaXRoKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIHZhciBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3RcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB0b0FycmF5KHRoaW5nKSB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICB2YXIgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKGlzVW5kZWZpbmVkKGkpKSByZXR1cm4gbnVsbDtcbiAgdmFyIGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xudmFyIGlzVHlwZWRBcnJheSA9IChmdW5jdGlvbihUeXBlZEFycmF5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih0aGluZykge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3Q6IGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdHJpbTogdHJpbSxcbiAgc3RyaXBCT006IHN0cmlwQk9NLFxuICBpbmhlcml0czogaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdDogdG9GbGF0T2JqZWN0LFxuICBraW5kT2Y6IGtpbmRPZixcbiAga2luZE9mVGVzdDoga2luZE9mVGVzdCxcbiAgZW5kc1dpdGg6IGVuZHNXaXRoLFxuICB0b0FycmF5OiB0b0FycmF5LFxuICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdDogaXNGaWxlTGlzdFxufTtcbiIsImZ1bmN0aW9uIHIoZSl7dmFyIHQsZixuPVwiXCI7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlKW4rPWU7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgZSlpZihBcnJheS5pc0FycmF5KGUpKWZvcih0PTA7dDxlLmxlbmd0aDt0KyspZVt0XSYmKGY9cihlW3RdKSkmJihuJiYobis9XCIgXCIpLG4rPWYpO2Vsc2UgZm9yKHQgaW4gZSllW3RdJiYobiYmKG4rPVwiIFwiKSxuKz10KTtyZXR1cm4gbn1leHBvcnQgZnVuY3Rpb24gY2xzeCgpe2Zvcih2YXIgZSx0LGY9MCxuPVwiXCI7Zjxhcmd1bWVudHMubGVuZ3RoOykoZT1hcmd1bWVudHNbZisrXSkmJih0PXIoZSkpJiYobiYmKG4rPVwiIFwiKSxuKz10KTtyZXR1cm4gbn1leHBvcnQgZGVmYXVsdCBjbHN4OyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGM9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxkPWI/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixlPWI/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGY9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsZz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxoPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGs9Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxsPWI/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsbT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsbj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPWI/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLHE9Yj9cblN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLHI9Yj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx0PWI/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsdj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSx3PWI/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHk9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7XG5mdW5jdGlvbiB6KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciB1PWEuJCR0eXBlb2Y7c3dpdGNoKHUpe2Nhc2UgYzpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBsOmNhc2UgbTpjYXNlIGU6Y2FzZSBnOmNhc2UgZjpjYXNlIHA6cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIG46Y2FzZSB0OmNhc2UgcjpjYXNlIGg6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdX19Y2FzZSBkOnJldHVybiB1fX19ZnVuY3Rpb24gQShhKXtyZXR1cm4geihhKT09PW19ZXhwb3J0cy5Bc3luY01vZGU9bDtleHBvcnRzLkNvbmN1cnJlbnRNb2RlPW07ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aztleHBvcnRzLkNvbnRleHRQcm92aWRlcj1oO2V4cG9ydHMuRWxlbWVudD1jO2V4cG9ydHMuRm9yd2FyZFJlZj1uO2V4cG9ydHMuRnJhZ21lbnQ9ZTtleHBvcnRzLkxhenk9dDtleHBvcnRzLk1lbW89cjtleHBvcnRzLlBvcnRhbD1kO1xuZXhwb3J0cy5Qcm9maWxlcj1nO2V4cG9ydHMuU3RyaWN0TW9kZT1mO2V4cG9ydHMuU3VzcGVuc2U9cDtleHBvcnRzLmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBBKGEpfHx6KGEpPT09bH07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPUE7ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWt9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ofTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Y307ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ufTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1lfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXR9O1xuZXhwb3J0cy5pc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1yfTtleHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZH07ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Z307ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1mfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1wfTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1lfHxhPT09bXx8YT09PWd8fGE9PT1mfHxhPT09cHx8YT09PXF8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09dHx8YS4kJHR5cGVvZj09PXJ8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09a3x8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT13fHxhLiQkdHlwZW9mPT09eHx8YS4kJHR5cGVvZj09PXl8fGEuJCR0eXBlb2Y9PT12KX07ZXhwb3J0cy50eXBlT2Y9ejtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbi8qXG4gTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0b20gQnVpbGQpIHwgTUlUXG4qL1xuJ3VzZSBzdHJpY3QnO3ZhciBhYT1yZXF1aXJlKFwicmVhY3RcIiksY2E9cmVxdWlyZShcInNjaGVkdWxlclwiKTtmdW5jdGlvbiBwKGEpe2Zvcih2YXIgYj1cImh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PVwiK2EsYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYis9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbY10pO3JldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2ErXCI7IHZpc2l0IFwiK2IrXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifXZhciBkYT1uZXcgU2V0LGVhPXt9O2Z1bmN0aW9uIGZhKGEsYil7aGEoYSxiKTtoYShhK1wiQ2FwdHVyZVwiLGIpfVxuZnVuY3Rpb24gaGEoYSxiKXtlYVthXT1iO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspZGEuYWRkKGJbYV0pfVxudmFyIGlhPSEoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KSxqYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGthPS9eWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXVs6QS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXSokLyxsYT1cbnt9LG1hPXt9O2Z1bmN0aW9uIG9hKGEpe2lmKGphLmNhbGwobWEsYSkpcmV0dXJuITA7aWYoamEuY2FsbChsYSxhKSlyZXR1cm4hMTtpZihrYS50ZXN0KGEpKXJldHVybiBtYVthXT0hMDtsYVthXT0hMDtyZXR1cm4hMX1mdW5jdGlvbiBwYShhLGIsYyxkKXtpZihudWxsIT09YyYmMD09PWMudHlwZSlyZXR1cm4hMTtzd2l0Y2godHlwZW9mIGIpe2Nhc2UgXCJmdW5jdGlvblwiOmNhc2UgXCJzeW1ib2xcIjpyZXR1cm4hMDtjYXNlIFwiYm9vbGVhblwiOmlmKGQpcmV0dXJuITE7aWYobnVsbCE9PWMpcmV0dXJuIWMuYWNjZXB0c0Jvb2xlYW5zO2E9YS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSk7cmV0dXJuXCJkYXRhLVwiIT09YSYmXCJhcmlhLVwiIT09YTtkZWZhdWx0OnJldHVybiExfX1cbmZ1bmN0aW9uIHFhKGEsYixjLGQpe2lmKG51bGw9PT1ifHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIGJ8fHBhKGEsYixjLGQpKXJldHVybiEwO2lmKGQpcmV0dXJuITE7aWYobnVsbCE9PWMpc3dpdGNoKGMudHlwZSl7Y2FzZSAzOnJldHVybiFiO2Nhc2UgNDpyZXR1cm4hMT09PWI7Y2FzZSA1OnJldHVybiBpc05hTihiKTtjYXNlIDY6cmV0dXJuIGlzTmFOKGIpfHwxPmJ9cmV0dXJuITF9ZnVuY3Rpb24gdihhLGIsYyxkLGUsZixnKXt0aGlzLmFjY2VwdHNCb29sZWFucz0yPT09Ynx8Mz09PWJ8fDQ9PT1iO3RoaXMuYXR0cmlidXRlTmFtZT1kO3RoaXMuYXR0cmlidXRlTmFtZXNwYWNlPWU7dGhpcy5tdXN0VXNlUHJvcGVydHk9Yzt0aGlzLnByb3BlcnR5TmFtZT1hO3RoaXMudHlwZT1iO3RoaXMuc2FuaXRpemVVUkw9Zjt0aGlzLnJlbW92ZUVtcHR5U3RyaW5nPWd9dmFyIHo9e307XG5cImNoaWxkcmVuIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGRlZmF1bHRWYWx1ZSBkZWZhdWx0Q2hlY2tlZCBpbm5lckhUTUwgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyBzdHlsZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pbYV09bmV3IHYoYSwwLCExLGEsbnVsbCwhMSwhMSl9KTtbW1wiYWNjZXB0Q2hhcnNldFwiLFwiYWNjZXB0LWNoYXJzZXRcIl0sW1wiY2xhc3NOYW1lXCIsXCJjbGFzc1wiXSxbXCJodG1sRm9yXCIsXCJmb3JcIl0sW1wiaHR0cEVxdWl2XCIsXCJodHRwLWVxdWl2XCJdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWFbMF07eltiXT1uZXcgdihiLDEsITEsYVsxXSxudWxsLCExLCExKX0pO1tcImNvbnRlbnRFZGl0YWJsZVwiLFwiZHJhZ2dhYmxlXCIsXCJzcGVsbENoZWNrXCIsXCJ2YWx1ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pbYV09bmV3IHYoYSwyLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuW1wiYXV0b1JldmVyc2VcIixcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIixcImZvY3VzYWJsZVwiLFwicHJlc2VydmVBbHBoYVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pbYV09bmV3IHYoYSwyLCExLGEsbnVsbCwhMSwhMSl9KTtcImFsbG93RnVsbFNjcmVlbiBhc3luYyBhdXRvRm9jdXMgYXV0b1BsYXkgY29udHJvbHMgZGVmYXVsdCBkZWZlciBkaXNhYmxlZCBkaXNhYmxlUGljdHVyZUluUGljdHVyZSBkaXNhYmxlUmVtb3RlUGxheWJhY2sgZm9ybU5vVmFsaWRhdGUgaGlkZGVuIGxvb3Agbm9Nb2R1bGUgbm9WYWxpZGF0ZSBvcGVuIHBsYXlzSW5saW5lIHJlYWRPbmx5IHJlcXVpcmVkIHJldmVyc2VkIHNjb3BlZCBzZWFtbGVzcyBpdGVtU2NvcGVcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXt6W2FdPW5ldyB2KGEsMywhMSxhLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtcbltcImNoZWNrZWRcIixcIm11bHRpcGxlXCIsXCJtdXRlZFwiLFwic2VsZWN0ZWRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXt6W2FdPW5ldyB2KGEsMywhMCxhLG51bGwsITEsITEpfSk7W1wiY2FwdHVyZVwiLFwiZG93bmxvYWRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXt6W2FdPW5ldyB2KGEsNCwhMSxhLG51bGwsITEsITEpfSk7W1wiY29sc1wiLFwicm93c1wiLFwic2l6ZVwiLFwic3BhblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pbYV09bmV3IHYoYSw2LCExLGEsbnVsbCwhMSwhMSl9KTtbXCJyb3dTcGFuXCIsXCJzdGFydFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pbYV09bmV3IHYoYSw1LCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO3ZhciByYT0vW1xcLTpdKFthLXpdKS9nO2Z1bmN0aW9uIHNhKGEpe3JldHVybiBhWzFdLnRvVXBwZXJDYXNlKCl9XG5cImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0XCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKHJhLFxuc2EpO3pbYl09bmV3IHYoYiwxLCExLGEsbnVsbCwhMSwhMSl9KTtcInhsaW5rOmFjdHVhdGUgeGxpbms6YXJjcm9sZSB4bGluazpyb2xlIHhsaW5rOnNob3cgeGxpbms6dGl0bGUgeGxpbms6dHlwZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShyYSxzYSk7eltiXT1uZXcgdihiLDEsITEsYSxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiwhMSwhMSl9KTtbXCJ4bWw6YmFzZVwiLFwieG1sOmxhbmdcIixcInhtbDpzcGFjZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShyYSxzYSk7eltiXT1uZXcgdihiLDEsITEsYSxcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLCExLCExKX0pO1tcInRhYkluZGV4XCIsXCJjcm9zc09yaWdpblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pbYV09bmV3IHYoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuei54bGlua0hyZWY9bmV3IHYoXCJ4bGlua0hyZWZcIiwxLCExLFwieGxpbms6aHJlZlwiLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLCEwLCExKTtbXCJzcmNcIixcImhyZWZcIixcImFjdGlvblwiLFwiZm9ybUFjdGlvblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pbYV09bmV3IHYoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCEwLCEwKX0pO1xuZnVuY3Rpb24gdGEoYSxiLGMsZCl7dmFyIGU9ei5oYXNPd25Qcm9wZXJ0eShiKT96W2JdOm51bGw7aWYobnVsbCE9PWU/MCE9PWUudHlwZTpkfHwhKDI8Yi5sZW5ndGgpfHxcIm9cIiE9PWJbMF0mJlwiT1wiIT09YlswXXx8XCJuXCIhPT1iWzFdJiZcIk5cIiE9PWJbMV0pcWEoYixjLGUsZCkmJihjPW51bGwpLGR8fG51bGw9PT1lP29hKGIpJiYobnVsbD09PWM/YS5yZW1vdmVBdHRyaWJ1dGUoYik6YS5zZXRBdHRyaWJ1dGUoYixcIlwiK2MpKTplLm11c3RVc2VQcm9wZXJ0eT9hW2UucHJvcGVydHlOYW1lXT1udWxsPT09Yz8zPT09ZS50eXBlPyExOlwiXCI6YzooYj1lLmF0dHJpYnV0ZU5hbWUsZD1lLmF0dHJpYnV0ZU5hbWVzcGFjZSxudWxsPT09Yz9hLnJlbW92ZUF0dHJpYnV0ZShiKTooZT1lLnR5cGUsYz0zPT09ZXx8ND09PWUmJiEwPT09Yz9cIlwiOlwiXCIrYyxkP2Euc2V0QXR0cmlidXRlTlMoZCxiLGMpOmEuc2V0QXR0cmlidXRlKGIsYykpKX1cbnZhciB1YT1hYS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCx2YT1TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSx3YT1TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLHlhPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSx6YT1TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksQWE9U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLEJhPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSxDYT1TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxEYT1TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksRWE9U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLEZhPVN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLEdhPVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLEhhPVN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpO1N5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTtTeW1ib2wuZm9yKFwicmVhY3QuZGVidWdfdHJhY2VfbW9kZVwiKTtcbnZhciBJYT1TeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpO1N5bWJvbC5mb3IoXCJyZWFjdC5sZWdhY3lfaGlkZGVuXCIpO1N5bWJvbC5mb3IoXCJyZWFjdC5jYWNoZVwiKTtTeW1ib2wuZm9yKFwicmVhY3QudHJhY2luZ19tYXJrZXJcIik7dmFyIEphPVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBLYShhKXtpZihudWxsPT09YXx8XCJvYmplY3RcIiE9PXR5cGVvZiBhKXJldHVybiBudWxsO2E9SmEmJmFbSmFdfHxhW1wiQEBpdGVyYXRvclwiXTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGx9dmFyIEE9T2JqZWN0LmFzc2lnbixMYTtmdW5jdGlvbiBNYShhKXtpZih2b2lkIDA9PT1MYSl0cnl7dGhyb3cgRXJyb3IoKTt9Y2F0Y2goYyl7dmFyIGI9Yy5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtMYT1iJiZiWzFdfHxcIlwifXJldHVyblwiXFxuXCIrTGErYX12YXIgTmE9ITE7XG5mdW5jdGlvbiBPYShhLGIpe2lmKCFhfHxOYSlyZXR1cm5cIlwiO05hPSEwO3ZhciBjPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7aWYoYilpZihiPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKTt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLnByb3RvdHlwZSxcInByb3BzXCIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCk7fX0pLFwib2JqZWN0XCI9PT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5jb25zdHJ1Y3Qpe3RyeXtSZWZsZWN0LmNvbnN0cnVjdChiLFtdKX1jYXRjaChsKXt2YXIgZD1sfVJlZmxlY3QuY29uc3RydWN0KGEsW10sYil9ZWxzZXt0cnl7Yi5jYWxsKCl9Y2F0Y2gobCl7ZD1sfWEuY2FsbChiLnByb3RvdHlwZSl9ZWxzZXt0cnl7dGhyb3cgRXJyb3IoKTt9Y2F0Y2gobCl7ZD1sfWEoKX19Y2F0Y2gobCl7aWYobCYmZCYmXCJzdHJpbmdcIj09PXR5cGVvZiBsLnN0YWNrKXtmb3IodmFyIGU9bC5zdGFjay5zcGxpdChcIlxcblwiKSxcbmY9ZC5zdGFjay5zcGxpdChcIlxcblwiKSxnPWUubGVuZ3RoLTEsaD1mLmxlbmd0aC0xOzE8PWcmJjA8PWgmJmVbZ10hPT1mW2hdOyloLS07Zm9yKDsxPD1nJiYwPD1oO2ctLSxoLS0paWYoZVtnXSE9PWZbaF0pe2lmKDEhPT1nfHwxIT09aCl7ZG8gaWYoZy0tLGgtLSwwPmh8fGVbZ10hPT1mW2hdKXt2YXIgaz1cIlxcblwiK2VbZ10ucmVwbGFjZShcIiBhdCBuZXcgXCIsXCIgYXQgXCIpO2EuZGlzcGxheU5hbWUmJmsuaW5jbHVkZXMoXCI8YW5vbnltb3VzPlwiKSYmKGs9ay5yZXBsYWNlKFwiPGFub255bW91cz5cIixhLmRpc3BsYXlOYW1lKSk7cmV0dXJuIGt9d2hpbGUoMTw9ZyYmMDw9aCl9YnJlYWt9fX1maW5hbGx5e05hPSExLEVycm9yLnByZXBhcmVTdGFja1RyYWNlPWN9cmV0dXJuKGE9YT9hLmRpc3BsYXlOYW1lfHxhLm5hbWU6XCJcIik/TWEoYSk6XCJcIn1cbmZ1bmN0aW9uIFBhKGEpe3N3aXRjaChhLnRhZyl7Y2FzZSA1OnJldHVybiBNYShhLnR5cGUpO2Nhc2UgMTY6cmV0dXJuIE1hKFwiTGF6eVwiKTtjYXNlIDEzOnJldHVybiBNYShcIlN1c3BlbnNlXCIpO2Nhc2UgMTk6cmV0dXJuIE1hKFwiU3VzcGVuc2VMaXN0XCIpO2Nhc2UgMDpjYXNlIDI6Y2FzZSAxNTpyZXR1cm4gYT1PYShhLnR5cGUsITEpLGE7Y2FzZSAxMTpyZXR1cm4gYT1PYShhLnR5cGUucmVuZGVyLCExKSxhO2Nhc2UgMTpyZXR1cm4gYT1PYShhLnR5cGUsITApLGE7ZGVmYXVsdDpyZXR1cm5cIlwifX1cbmZ1bmN0aW9uIFFhKGEpe2lmKG51bGw9PWEpcmV0dXJuIG51bGw7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEpcmV0dXJuIGEuZGlzcGxheU5hbWV8fGEubmFtZXx8bnVsbDtpZihcInN0cmluZ1wiPT09dHlwZW9mIGEpcmV0dXJuIGE7c3dpdGNoKGEpe2Nhc2UgeWE6cmV0dXJuXCJGcmFnbWVudFwiO2Nhc2Ugd2E6cmV0dXJuXCJQb3J0YWxcIjtjYXNlIEFhOnJldHVyblwiUHJvZmlsZXJcIjtjYXNlIHphOnJldHVyblwiU3RyaWN0TW9kZVwiO2Nhc2UgRWE6cmV0dXJuXCJTdXNwZW5zZVwiO2Nhc2UgRmE6cmV0dXJuXCJTdXNwZW5zZUxpc3RcIn1pZihcIm9iamVjdFwiPT09dHlwZW9mIGEpc3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2UgQ2E6cmV0dXJuKGEuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Db25zdW1lclwiO2Nhc2UgQmE6cmV0dXJuKGEuX2NvbnRleHQuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Qcm92aWRlclwiO2Nhc2UgRGE6dmFyIGI9YS5yZW5kZXI7YT1hLmRpc3BsYXlOYW1lO2F8fChhPWIuZGlzcGxheU5hbWV8fFxuYi5uYW1lfHxcIlwiLGE9XCJcIiE9PWE/XCJGb3J3YXJkUmVmKFwiK2ErXCIpXCI6XCJGb3J3YXJkUmVmXCIpO3JldHVybiBhO2Nhc2UgR2E6cmV0dXJuIGI9YS5kaXNwbGF5TmFtZXx8bnVsbCxudWxsIT09Yj9iOlFhKGEudHlwZSl8fFwiTWVtb1wiO2Nhc2UgSGE6Yj1hLl9wYXlsb2FkO2E9YS5faW5pdDt0cnl7cmV0dXJuIFFhKGEoYikpfWNhdGNoKGMpe319cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBSYShhKXt2YXIgYj1hLnR5cGU7c3dpdGNoKGEudGFnKXtjYXNlIDI0OnJldHVyblwiQ2FjaGVcIjtjYXNlIDk6cmV0dXJuKGIuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Db25zdW1lclwiO2Nhc2UgMTA6cmV0dXJuKGIuX2NvbnRleHQuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Qcm92aWRlclwiO2Nhc2UgMTg6cmV0dXJuXCJEZWh5ZHJhdGVkRnJhZ21lbnRcIjtjYXNlIDExOnJldHVybiBhPWIucmVuZGVyLGE9YS5kaXNwbGF5TmFtZXx8YS5uYW1lfHxcIlwiLGIuZGlzcGxheU5hbWV8fChcIlwiIT09YT9cIkZvcndhcmRSZWYoXCIrYStcIilcIjpcIkZvcndhcmRSZWZcIik7Y2FzZSA3OnJldHVyblwiRnJhZ21lbnRcIjtjYXNlIDU6cmV0dXJuIGI7Y2FzZSA0OnJldHVyblwiUG9ydGFsXCI7Y2FzZSAzOnJldHVyblwiUm9vdFwiO2Nhc2UgNjpyZXR1cm5cIlRleHRcIjtjYXNlIDE2OnJldHVybiBRYShiKTtjYXNlIDg6cmV0dXJuIGI9PT16YT9cIlN0cmljdE1vZGVcIjpcIk1vZGVcIjtjYXNlIDIyOnJldHVyblwiT2Zmc2NyZWVuXCI7XG5jYXNlIDEyOnJldHVyblwiUHJvZmlsZXJcIjtjYXNlIDIxOnJldHVyblwiU2NvcGVcIjtjYXNlIDEzOnJldHVyblwiU3VzcGVuc2VcIjtjYXNlIDE5OnJldHVyblwiU3VzcGVuc2VMaXN0XCI7Y2FzZSAyNTpyZXR1cm5cIlRyYWNpbmdNYXJrZXJcIjtjYXNlIDE6Y2FzZSAwOmNhc2UgMTc6Y2FzZSAyOmNhc2UgMTQ6Y2FzZSAxNTppZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYilyZXR1cm4gYi5kaXNwbGF5TmFtZXx8Yi5uYW1lfHxudWxsO2lmKFwic3RyaW5nXCI9PT10eXBlb2YgYilyZXR1cm4gYn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBTYShhKXtzd2l0Y2godHlwZW9mIGEpe2Nhc2UgXCJib29sZWFuXCI6Y2FzZSBcIm51bWJlclwiOmNhc2UgXCJzdHJpbmdcIjpjYXNlIFwidW5kZWZpbmVkXCI6cmV0dXJuIGE7Y2FzZSBcIm9iamVjdFwiOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuXCJcIn19XG5mdW5jdGlvbiBUYShhKXt2YXIgYj1hLnR5cGU7cmV0dXJuKGE9YS5ub2RlTmFtZSkmJlwiaW5wdXRcIj09PWEudG9Mb3dlckNhc2UoKSYmKFwiY2hlY2tib3hcIj09PWJ8fFwicmFkaW9cIj09PWIpfVxuZnVuY3Rpb24gVWEoYSl7dmFyIGI9VGEoYSk/XCJjaGVja2VkXCI6XCJ2YWx1ZVwiLGM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSxiKSxkPVwiXCIrYVtiXTtpZighYS5oYXNPd25Qcm9wZXJ0eShiKSYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBjJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy5nZXQmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBjLnNldCl7dmFyIGU9Yy5nZXQsZj1jLnNldDtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGEpe2Q9XCJcIithO2YuY2FsbCh0aGlzLGEpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse2VudW1lcmFibGU6Yy5lbnVtZXJhYmxlfSk7cmV0dXJue2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGR9LHNldFZhbHVlOmZ1bmN0aW9uKGEpe2Q9XCJcIithfSxzdG9wVHJhY2tpbmc6ZnVuY3Rpb24oKXthLl92YWx1ZVRyYWNrZXI9XG5udWxsO2RlbGV0ZSBhW2JdfX19fWZ1bmN0aW9uIFZhKGEpe2EuX3ZhbHVlVHJhY2tlcnx8KGEuX3ZhbHVlVHJhY2tlcj1VYShhKSl9ZnVuY3Rpb24gV2EoYSl7aWYoIWEpcmV0dXJuITE7dmFyIGI9YS5fdmFsdWVUcmFja2VyO2lmKCFiKXJldHVybiEwO3ZhciBjPWIuZ2V0VmFsdWUoKTt2YXIgZD1cIlwiO2EmJihkPVRhKGEpP2EuY2hlY2tlZD9cInRydWVcIjpcImZhbHNlXCI6YS52YWx1ZSk7YT1kO3JldHVybiBhIT09Yz8oYi5zZXRWYWx1ZShhKSwhMCk6ITF9ZnVuY3Rpb24gWGEoYSl7YT1hfHwoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudDp2b2lkIDApO2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGEuYWN0aXZlRWxlbWVudHx8YS5ib2R5fWNhdGNoKGIpe3JldHVybiBhLmJvZHl9fVxuZnVuY3Rpb24gWWEoYSxiKXt2YXIgYz1iLmNoZWNrZWQ7cmV0dXJuIEEoe30sYix7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bnVsbCE9Yz9jOmEuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZH0pfWZ1bmN0aW9uIFphKGEsYil7dmFyIGM9bnVsbD09Yi5kZWZhdWx0VmFsdWU/XCJcIjpiLmRlZmF1bHRWYWx1ZSxkPW51bGwhPWIuY2hlY2tlZD9iLmNoZWNrZWQ6Yi5kZWZhdWx0Q2hlY2tlZDtjPVNhKG51bGwhPWIudmFsdWU/Yi52YWx1ZTpjKTthLl93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOmQsaW5pdGlhbFZhbHVlOmMsY29udHJvbGxlZDpcImNoZWNrYm94XCI9PT1iLnR5cGV8fFwicmFkaW9cIj09PWIudHlwZT9udWxsIT1iLmNoZWNrZWQ6bnVsbCE9Yi52YWx1ZX19ZnVuY3Rpb24gYWIoYSxiKXtiPWIuY2hlY2tlZDtudWxsIT1iJiZ0YShhLFwiY2hlY2tlZFwiLGIsITEpfVxuZnVuY3Rpb24gYmIoYSxiKXthYihhLGIpO3ZhciBjPVNhKGIudmFsdWUpLGQ9Yi50eXBlO2lmKG51bGwhPWMpaWYoXCJudW1iZXJcIj09PWQpe2lmKDA9PT1jJiZcIlwiPT09YS52YWx1ZXx8YS52YWx1ZSE9YylhLnZhbHVlPVwiXCIrY31lbHNlIGEudmFsdWUhPT1cIlwiK2MmJihhLnZhbHVlPVwiXCIrYyk7ZWxzZSBpZihcInN1Ym1pdFwiPT09ZHx8XCJyZXNldFwiPT09ZCl7YS5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtyZXR1cm59Yi5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpP2NiKGEsYi50eXBlLGMpOmIuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikmJmNiKGEsYi50eXBlLFNhKGIuZGVmYXVsdFZhbHVlKSk7bnVsbD09Yi5jaGVja2VkJiZudWxsIT1iLmRlZmF1bHRDaGVja2VkJiYoYS5kZWZhdWx0Q2hlY2tlZD0hIWIuZGVmYXVsdENoZWNrZWQpfVxuZnVuY3Rpb24gZGIoYSxiLGMpe2lmKGIuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKXx8Yi5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSl7dmFyIGQ9Yi50eXBlO2lmKCEoXCJzdWJtaXRcIiE9PWQmJlwicmVzZXRcIiE9PWR8fHZvaWQgMCE9PWIudmFsdWUmJm51bGwhPT1iLnZhbHVlKSlyZXR1cm47Yj1cIlwiK2EuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWU7Y3x8Yj09PWEudmFsdWV8fChhLnZhbHVlPWIpO2EuZGVmYXVsdFZhbHVlPWJ9Yz1hLm5hbWU7XCJcIiE9PWMmJihhLm5hbWU9XCJcIik7YS5kZWZhdWx0Q2hlY2tlZD0hIWEuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZDtcIlwiIT09YyYmKGEubmFtZT1jKX1cbmZ1bmN0aW9uIGNiKGEsYixjKXtpZihcIm51bWJlclwiIT09Ynx8WGEoYS5vd25lckRvY3VtZW50KSE9PWEpbnVsbD09Yz9hLmRlZmF1bHRWYWx1ZT1cIlwiK2EuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWU6YS5kZWZhdWx0VmFsdWUhPT1cIlwiK2MmJihhLmRlZmF1bHRWYWx1ZT1cIlwiK2MpfXZhciBlYj1BcnJheS5pc0FycmF5O1xuZnVuY3Rpb24gZmIoYSxiLGMsZCl7YT1hLm9wdGlvbnM7aWYoYil7Yj17fTtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyliW1wiJFwiK2NbZV1dPSEwO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspZT1iLmhhc093blByb3BlcnR5KFwiJFwiK2FbY10udmFsdWUpLGFbY10uc2VsZWN0ZWQhPT1lJiYoYVtjXS5zZWxlY3RlZD1lKSxlJiZkJiYoYVtjXS5kZWZhdWx0U2VsZWN0ZWQ9ITApfWVsc2V7Yz1cIlwiK1NhKGMpO2I9bnVsbDtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXtpZihhW2VdLnZhbHVlPT09Yyl7YVtlXS5zZWxlY3RlZD0hMDtkJiYoYVtlXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn1udWxsIT09Ynx8YVtlXS5kaXNhYmxlZHx8KGI9YVtlXSl9bnVsbCE9PWImJihiLnNlbGVjdGVkPSEwKX19XG5mdW5jdGlvbiBnYihhLGIpe2lmKG51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpdGhyb3cgRXJyb3IocCg5MSkpO3JldHVybiBBKHt9LGIse3ZhbHVlOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLGNoaWxkcmVuOlwiXCIrYS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIGhiKGEsYil7dmFyIGM9Yi52YWx1ZTtpZihudWxsPT1jKXtjPWIuY2hpbGRyZW47Yj1iLmRlZmF1bHRWYWx1ZTtpZihudWxsIT1jKXtpZihudWxsIT1iKXRocm93IEVycm9yKHAoOTIpKTtpZihlYihjKSl7aWYoMTxjLmxlbmd0aCl0aHJvdyBFcnJvcihwKDkzKSk7Yz1jWzBdfWI9Y31udWxsPT1iJiYoYj1cIlwiKTtjPWJ9YS5fd3JhcHBlclN0YXRlPXtpbml0aWFsVmFsdWU6U2EoYyl9fVxuZnVuY3Rpb24gaWIoYSxiKXt2YXIgYz1TYShiLnZhbHVlKSxkPVNhKGIuZGVmYXVsdFZhbHVlKTtudWxsIT1jJiYoYz1cIlwiK2MsYyE9PWEudmFsdWUmJihhLnZhbHVlPWMpLG51bGw9PWIuZGVmYXVsdFZhbHVlJiZhLmRlZmF1bHRWYWx1ZSE9PWMmJihhLmRlZmF1bHRWYWx1ZT1jKSk7bnVsbCE9ZCYmKGEuZGVmYXVsdFZhbHVlPVwiXCIrZCl9ZnVuY3Rpb24gamIoYSl7dmFyIGI9YS50ZXh0Q29udGVudDtiPT09YS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSYmXCJcIiE9PWImJm51bGwhPT1iJiYoYS52YWx1ZT1iKX1mdW5jdGlvbiBrYihhKXtzd2l0Y2goYSl7Y2FzZSBcInN2Z1wiOnJldHVyblwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtjYXNlIFwibWF0aFwiOnJldHVyblwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiO2RlZmF1bHQ6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCJ9fVxuZnVuY3Rpb24gbGIoYSxiKXtyZXR1cm4gbnVsbD09YXx8XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI9PT1hP2tiKGIpOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj09PWEmJlwiZm9yZWlnbk9iamVjdFwiPT09Yj9cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjphfVxudmFyIG1iLG5iPWZ1bmN0aW9uKGEpe3JldHVyblwidW5kZWZpbmVkXCIhPT10eXBlb2YgTVNBcHAmJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKGIsYyxkLGUpe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGEoYixjLGQsZSl9KX06YX0oZnVuY3Rpb24oYSxiKXtpZihcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIhPT1hLm5hbWVzcGFjZVVSSXx8XCJpbm5lckhUTUxcImluIGEpYS5pbm5lckhUTUw9YjtlbHNle21iPW1ifHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO21iLmlubmVySFRNTD1cIjxzdmc+XCIrYi52YWx1ZU9mKCkudG9TdHJpbmcoKStcIjwvc3ZnPlwiO2ZvcihiPW1iLmZpcnN0Q2hpbGQ7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7Zm9yKDtiLmZpcnN0Q2hpbGQ7KWEuYXBwZW5kQ2hpbGQoYi5maXJzdENoaWxkKX19KTtcbmZ1bmN0aW9uIG9iKGEsYil7aWYoYil7dmFyIGM9YS5maXJzdENoaWxkO2lmKGMmJmM9PT1hLmxhc3RDaGlsZCYmMz09PWMubm9kZVR5cGUpe2Mubm9kZVZhbHVlPWI7cmV0dXJufX1hLnRleHRDb250ZW50PWJ9XG52YXIgcGI9e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGFzcGVjdFJhdGlvOiEwLGJvcmRlckltYWdlT3V0c2V0OiEwLGJvcmRlckltYWdlU2xpY2U6ITAsYm9yZGVySW1hZ2VXaWR0aDohMCxib3hGbGV4OiEwLGJveEZsZXhHcm91cDohMCxib3hPcmRpbmFsR3JvdXA6ITAsY29sdW1uQ291bnQ6ITAsY29sdW1uczohMCxmbGV4OiEwLGZsZXhHcm93OiEwLGZsZXhQb3NpdGl2ZTohMCxmbGV4U2hyaW5rOiEwLGZsZXhOZWdhdGl2ZTohMCxmbGV4T3JkZXI6ITAsZ3JpZEFyZWE6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTcGFuOiEwLGdyaWRSb3dTdGFydDohMCxncmlkQ29sdW1uOiEwLGdyaWRDb2x1bW5FbmQ6ITAsZ3JpZENvbHVtblNwYW46ITAsZ3JpZENvbHVtblN0YXJ0OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUNsYW1wOiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHRhYlNpemU6ITAsd2lkb3dzOiEwLHpJbmRleDohMCxcbnpvb206ITAsZmlsbE9wYWNpdHk6ITAsZmxvb2RPcGFjaXR5OiEwLHN0b3BPcGFjaXR5OiEwLHN0cm9rZURhc2hhcnJheTohMCxzdHJva2VEYXNob2Zmc2V0OiEwLHN0cm9rZU1pdGVybGltaXQ6ITAsc3Ryb2tlT3BhY2l0eTohMCxzdHJva2VXaWR0aDohMH0scWI9W1wiV2Via2l0XCIsXCJtc1wiLFwiTW96XCIsXCJPXCJdO09iamVjdC5rZXlzKHBiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3FiLmZvckVhY2goZnVuY3Rpb24oYil7Yj1iK2EuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHJpbmcoMSk7cGJbYl09cGJbYV19KX0pO2Z1bmN0aW9uIHJiKGEsYixjKXtyZXR1cm4gbnVsbD09Ynx8XCJib29sZWFuXCI9PT10eXBlb2YgYnx8XCJcIj09PWI/XCJcIjpjfHxcIm51bWJlclwiIT09dHlwZW9mIGJ8fDA9PT1ifHxwYi5oYXNPd25Qcm9wZXJ0eShhKSYmcGJbYV0/KFwiXCIrYikudHJpbSgpOmIrXCJweFwifVxuZnVuY3Rpb24gc2IoYSxiKXthPWEuc3R5bGU7Zm9yKHZhciBjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7dmFyIGQ9MD09PWMuaW5kZXhPZihcIi0tXCIpLGU9cmIoYyxiW2NdLGQpO1wiZmxvYXRcIj09PWMmJihjPVwiY3NzRmxvYXRcIik7ZD9hLnNldFByb3BlcnR5KGMsZSk6YVtjXT1lfX12YXIgdGI9QSh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtcbmZ1bmN0aW9uIHViKGEsYil7aWYoYil7aWYodGJbYV0mJihudWxsIT1iLmNoaWxkcmVufHxudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSl0aHJvdyBFcnJvcihwKDEzNyxhKSk7aWYobnVsbCE9Yi5kYW5nZXJvdXNseVNldElubmVySFRNTCl7aWYobnVsbCE9Yi5jaGlsZHJlbil0aHJvdyBFcnJvcihwKDYwKSk7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBiLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MfHwhKFwiX19odG1sXCJpbiBiLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSl0aHJvdyBFcnJvcihwKDYxKSk7fWlmKG51bGwhPWIuc3R5bGUmJlwib2JqZWN0XCIhPT10eXBlb2YgYi5zdHlsZSl0aHJvdyBFcnJvcihwKDYyKSk7fX1cbmZ1bmN0aW9uIHZiKGEsYil7aWYoLTE9PT1hLmluZGV4T2YoXCItXCIpKXJldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYi5pcztzd2l0Y2goYSl7Y2FzZSBcImFubm90YXRpb24teG1sXCI6Y2FzZSBcImNvbG9yLXByb2ZpbGVcIjpjYXNlIFwiZm9udC1mYWNlXCI6Y2FzZSBcImZvbnQtZmFjZS1zcmNcIjpjYXNlIFwiZm9udC1mYWNlLXVyaVwiOmNhc2UgXCJmb250LWZhY2UtZm9ybWF0XCI6Y2FzZSBcImZvbnQtZmFjZS1uYW1lXCI6Y2FzZSBcIm1pc3NpbmctZ2x5cGhcIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgd2I9bnVsbDtmdW5jdGlvbiB4YihhKXthPWEudGFyZ2V0fHxhLnNyY0VsZW1lbnR8fHdpbmRvdzthLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoYT1hLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KTtyZXR1cm4gMz09PWEubm9kZVR5cGU/YS5wYXJlbnROb2RlOmF9dmFyIHliPW51bGwsemI9bnVsbCxBYj1udWxsO1xuZnVuY3Rpb24gQmIoYSl7aWYoYT1DYihhKSl7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIHliKXRocm93IEVycm9yKHAoMjgwKSk7dmFyIGI9YS5zdGF0ZU5vZGU7YiYmKGI9RGIoYikseWIoYS5zdGF0ZU5vZGUsYS50eXBlLGIpKX19ZnVuY3Rpb24gRWIoYSl7emI/QWI/QWIucHVzaChhKTpBYj1bYV06emI9YX1mdW5jdGlvbiBGYigpe2lmKHpiKXt2YXIgYT16YixiPUFiO0FiPXpiPW51bGw7QmIoYSk7aWYoYilmb3IoYT0wO2E8Yi5sZW5ndGg7YSsrKUJiKGJbYV0pfX1mdW5jdGlvbiBHYihhLGIpe3JldHVybiBhKGIpfWZ1bmN0aW9uIEhiKCl7fXZhciBJYj0hMTtmdW5jdGlvbiBKYihhLGIsYyl7aWYoSWIpcmV0dXJuIGEoYixjKTtJYj0hMDt0cnl7cmV0dXJuIEdiKGEsYixjKX1maW5hbGx5e2lmKEliPSExLG51bGwhPT16Ynx8bnVsbCE9PUFiKUhiKCksRmIoKX19XG5mdW5jdGlvbiBLYihhLGIpe3ZhciBjPWEuc3RhdGVOb2RlO2lmKG51bGw9PT1jKXJldHVybiBudWxsO3ZhciBkPURiKGMpO2lmKG51bGw9PT1kKXJldHVybiBudWxsO2M9ZFtiXTthOnN3aXRjaChiKXtjYXNlIFwib25DbGlja1wiOmNhc2UgXCJvbkNsaWNrQ2FwdHVyZVwiOmNhc2UgXCJvbkRvdWJsZUNsaWNrXCI6Y2FzZSBcIm9uRG91YmxlQ2xpY2tDYXB0dXJlXCI6Y2FzZSBcIm9uTW91c2VEb3duXCI6Y2FzZSBcIm9uTW91c2VEb3duQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlTW92ZVwiOmNhc2UgXCJvbk1vdXNlTW92ZUNhcHR1cmVcIjpjYXNlIFwib25Nb3VzZVVwXCI6Y2FzZSBcIm9uTW91c2VVcENhcHR1cmVcIjpjYXNlIFwib25Nb3VzZUVudGVyXCI6KGQ9IWQuZGlzYWJsZWQpfHwoYT1hLnR5cGUsZD0hKFwiYnV0dG9uXCI9PT1hfHxcImlucHV0XCI9PT1hfHxcInNlbGVjdFwiPT09YXx8XCJ0ZXh0YXJlYVwiPT09YSkpO2E9IWQ7YnJlYWsgYTtkZWZhdWx0OmE9ITF9aWYoYSlyZXR1cm4gbnVsbDtpZihjJiZcImZ1bmN0aW9uXCIhPT1cbnR5cGVvZiBjKXRocm93IEVycm9yKHAoMjMxLGIsdHlwZW9mIGMpKTtyZXR1cm4gY312YXIgTGI9ITE7aWYoaWEpdHJ5e3ZhciBNYj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTWIsXCJwYXNzaXZlXCIse2dldDpmdW5jdGlvbigpe0xiPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLE1iLE1iKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RcIixNYixNYil9Y2F0Y2goYSl7TGI9ITF9ZnVuY3Rpb24gTmIoYSxiLGMsZCxlLGYsZyxoLGspe3ZhciBsPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7Yi5hcHBseShjLGwpfWNhdGNoKG0pe3RoaXMub25FcnJvcihtKX19dmFyIE9iPSExLFBiPW51bGwsUWI9ITEsUmI9bnVsbCxTYj17b25FcnJvcjpmdW5jdGlvbihhKXtPYj0hMDtQYj1hfX07ZnVuY3Rpb24gVGIoYSxiLGMsZCxlLGYsZyxoLGspe09iPSExO1BiPW51bGw7TmIuYXBwbHkoU2IsYXJndW1lbnRzKX1cbmZ1bmN0aW9uIFViKGEsYixjLGQsZSxmLGcsaCxrKXtUYi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoT2Ipe2lmKE9iKXt2YXIgbD1QYjtPYj0hMTtQYj1udWxsfWVsc2UgdGhyb3cgRXJyb3IocCgxOTgpKTtRYnx8KFFiPSEwLFJiPWwpfX1mdW5jdGlvbiBWYihhKXt2YXIgYj1hLGM9YTtpZihhLmFsdGVybmF0ZSlmb3IoO2IucmV0dXJuOyliPWIucmV0dXJuO2Vsc2V7YT1iO2RvIGI9YSwwIT09KGIuZmxhZ3MmNDA5OCkmJihjPWIucmV0dXJuKSxhPWIucmV0dXJuO3doaWxlKGEpfXJldHVybiAzPT09Yi50YWc/YzpudWxsfWZ1bmN0aW9uIFdiKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPWEubWVtb2l6ZWRTdGF0ZTtudWxsPT09YiYmKGE9YS5hbHRlcm5hdGUsbnVsbCE9PWEmJihiPWEubWVtb2l6ZWRTdGF0ZSkpO2lmKG51bGwhPT1iKXJldHVybiBiLmRlaHlkcmF0ZWR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gWGIoYSl7aWYoVmIoYSkhPT1hKXRocm93IEVycm9yKHAoMTg4KSk7fVxuZnVuY3Rpb24gWWIoYSl7dmFyIGI9YS5hbHRlcm5hdGU7aWYoIWIpe2I9VmIoYSk7aWYobnVsbD09PWIpdGhyb3cgRXJyb3IocCgxODgpKTtyZXR1cm4gYiE9PWE/bnVsbDphfWZvcih2YXIgYz1hLGQ9Yjs7KXt2YXIgZT1jLnJldHVybjtpZihudWxsPT09ZSlicmVhazt2YXIgZj1lLmFsdGVybmF0ZTtpZihudWxsPT09Zil7ZD1lLnJldHVybjtpZihudWxsIT09ZCl7Yz1kO2NvbnRpbnVlfWJyZWFrfWlmKGUuY2hpbGQ9PT1mLmNoaWxkKXtmb3IoZj1lLmNoaWxkO2Y7KXtpZihmPT09YylyZXR1cm4gWGIoZSksYTtpZihmPT09ZClyZXR1cm4gWGIoZSksYjtmPWYuc2libGluZ310aHJvdyBFcnJvcihwKDE4OCkpO31pZihjLnJldHVybiE9PWQucmV0dXJuKWM9ZSxkPWY7ZWxzZXtmb3IodmFyIGc9ITEsaD1lLmNoaWxkO2g7KXtpZihoPT09Yyl7Zz0hMDtjPWU7ZD1mO2JyZWFrfWlmKGg9PT1kKXtnPSEwO2Q9ZTtjPWY7YnJlYWt9aD1oLnNpYmxpbmd9aWYoIWcpe2ZvcihoPWYuY2hpbGQ7aDspe2lmKGg9PT1cbmMpe2c9ITA7Yz1mO2Q9ZTticmVha31pZihoPT09ZCl7Zz0hMDtkPWY7Yz1lO2JyZWFrfWg9aC5zaWJsaW5nfWlmKCFnKXRocm93IEVycm9yKHAoMTg5KSk7fX1pZihjLmFsdGVybmF0ZSE9PWQpdGhyb3cgRXJyb3IocCgxOTApKTt9aWYoMyE9PWMudGFnKXRocm93IEVycm9yKHAoMTg4KSk7cmV0dXJuIGMuc3RhdGVOb2RlLmN1cnJlbnQ9PT1jP2E6Yn1mdW5jdGlvbiBaYihhKXthPVliKGEpO3JldHVybiBudWxsIT09YT8kYihhKTpudWxsfWZ1bmN0aW9uICRiKGEpe2lmKDU9PT1hLnRhZ3x8Nj09PWEudGFnKXJldHVybiBhO2ZvcihhPWEuY2hpbGQ7bnVsbCE9PWE7KXt2YXIgYj0kYihhKTtpZihudWxsIT09YilyZXR1cm4gYjthPWEuc2libGluZ31yZXR1cm4gbnVsbH1cbnZhciBhYz1jYS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLGJjPWNhLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLGNjPWNhLnVuc3RhYmxlX3Nob3VsZFlpZWxkLGRjPWNhLnVuc3RhYmxlX3JlcXVlc3RQYWludCxCPWNhLnVuc3RhYmxlX25vdyxlYz1jYS51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxmYz1jYS51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxnYz1jYS51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxoYz1jYS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxpYz1jYS51bnN0YWJsZV9Mb3dQcmlvcml0eSxqYz1jYS51bnN0YWJsZV9JZGxlUHJpb3JpdHksa2M9bnVsbCxsYz1udWxsO2Z1bmN0aW9uIG1jKGEpe2lmKGxjJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgbGMub25Db21taXRGaWJlclJvb3QpdHJ5e2xjLm9uQ29tbWl0RmliZXJSb290KGtjLGEsdm9pZCAwLDEyOD09PShhLmN1cnJlbnQuZmxhZ3MmMTI4KSl9Y2F0Y2goYil7fX1cbnZhciBvYz1NYXRoLmNsejMyP01hdGguY2x6MzI6bmMscGM9TWF0aC5sb2cscWM9TWF0aC5MTjI7ZnVuY3Rpb24gbmMoYSl7YT4+Pj0wO3JldHVybiAwPT09YT8zMjozMS0ocGMoYSkvcWN8MCl8MH12YXIgcmM9NjQsc2M9NDE5NDMwNDtcbmZ1bmN0aW9uIHRjKGEpe3N3aXRjaChhJi1hKXtjYXNlIDE6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDg6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gMTY7Y2FzZSAzMjpyZXR1cm4gMzI7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gYSY0MTk0MjQwO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6cmV0dXJuIGEmMTMwMDIzNDI0O2Nhc2UgMTM0MjE3NzI4OnJldHVybiAxMzQyMTc3Mjg7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4gNTM2ODcwOTEyO2Nhc2UgMTA3Mzc0MTgyNDpyZXR1cm4gMTA3Mzc0MTgyNDtcbmRlZmF1bHQ6cmV0dXJuIGF9fWZ1bmN0aW9uIHVjKGEsYil7dmFyIGM9YS5wZW5kaW5nTGFuZXM7aWYoMD09PWMpcmV0dXJuIDA7dmFyIGQ9MCxlPWEuc3VzcGVuZGVkTGFuZXMsZj1hLnBpbmdlZExhbmVzLGc9YyYyNjg0MzU0NTU7aWYoMCE9PWcpe3ZhciBoPWcmfmU7MCE9PWg/ZD10YyhoKTooZiY9ZywwIT09ZiYmKGQ9dGMoZikpKX1lbHNlIGc9YyZ+ZSwwIT09Zz9kPXRjKGcpOjAhPT1mJiYoZD10YyhmKSk7aWYoMD09PWQpcmV0dXJuIDA7aWYoMCE9PWImJmIhPT1kJiYwPT09KGImZSkmJihlPWQmLWQsZj1iJi1iLGU+PWZ8fDE2PT09ZSYmMCE9PShmJjQxOTQyNDApKSlyZXR1cm4gYjswIT09KGQmNCkmJihkfD1jJjE2KTtiPWEuZW50YW5nbGVkTGFuZXM7aWYoMCE9PWIpZm9yKGE9YS5lbnRhbmdsZW1lbnRzLGImPWQ7MDxiOyljPTMxLW9jKGIpLGU9MTw8YyxkfD1hW2NdLGImPX5lO3JldHVybiBkfVxuZnVuY3Rpb24gdmMoYSxiKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIGIrMjUwO2Nhc2UgODpjYXNlIDE2OmNhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gYis1RTM7Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6Y2FzZSA2NzEwODg2NDpyZXR1cm4tMTtjYXNlIDEzNDIxNzcyODpjYXNlIDI2ODQzNTQ1NjpjYXNlIDUzNjg3MDkxMjpjYXNlIDEwNzM3NDE4MjQ6cmV0dXJuLTE7ZGVmYXVsdDpyZXR1cm4tMX19XG5mdW5jdGlvbiB3YyhhLGIpe2Zvcih2YXIgYz1hLnN1c3BlbmRlZExhbmVzLGQ9YS5waW5nZWRMYW5lcyxlPWEuZXhwaXJhdGlvblRpbWVzLGY9YS5wZW5kaW5nTGFuZXM7MDxmOyl7dmFyIGc9MzEtb2MoZiksaD0xPDxnLGs9ZVtnXTtpZigtMT09PWspe2lmKDA9PT0oaCZjKXx8MCE9PShoJmQpKWVbZ109dmMoaCxiKX1lbHNlIGs8PWImJihhLmV4cGlyZWRMYW5lc3w9aCk7ZiY9fmh9fWZ1bmN0aW9uIHhjKGEpe2E9YS5wZW5kaW5nTGFuZXMmLTEwNzM3NDE4MjU7cmV0dXJuIDAhPT1hP2E6YSYxMDczNzQxODI0PzEwNzM3NDE4MjQ6MH1mdW5jdGlvbiB5Yygpe3ZhciBhPXJjO3JjPDw9MTswPT09KHJjJjQxOTQyNDApJiYocmM9NjQpO3JldHVybiBhfWZ1bmN0aW9uIHpjKGEpe2Zvcih2YXIgYj1bXSxjPTA7MzE+YztjKyspYi5wdXNoKGEpO3JldHVybiBifVxuZnVuY3Rpb24gQWMoYSxiLGMpe2EucGVuZGluZ0xhbmVzfD1iOzUzNjg3MDkxMiE9PWImJihhLnN1c3BlbmRlZExhbmVzPTAsYS5waW5nZWRMYW5lcz0wKTthPWEuZXZlbnRUaW1lcztiPTMxLW9jKGIpO2FbYl09Y31mdW5jdGlvbiBCYyhhLGIpe3ZhciBjPWEucGVuZGluZ0xhbmVzJn5iO2EucGVuZGluZ0xhbmVzPWI7YS5zdXNwZW5kZWRMYW5lcz0wO2EucGluZ2VkTGFuZXM9MDthLmV4cGlyZWRMYW5lcyY9YjthLm11dGFibGVSZWFkTGFuZXMmPWI7YS5lbnRhbmdsZWRMYW5lcyY9YjtiPWEuZW50YW5nbGVtZW50czt2YXIgZD1hLmV2ZW50VGltZXM7Zm9yKGE9YS5leHBpcmF0aW9uVGltZXM7MDxjOyl7dmFyIGU9MzEtb2MoYyksZj0xPDxlO2JbZV09MDtkW2VdPS0xO2FbZV09LTE7YyY9fmZ9fVxuZnVuY3Rpb24gQ2MoYSxiKXt2YXIgYz1hLmVudGFuZ2xlZExhbmVzfD1iO2ZvcihhPWEuZW50YW5nbGVtZW50cztjOyl7dmFyIGQ9MzEtb2MoYyksZT0xPDxkO2UmYnxhW2RdJmImJihhW2RdfD1iKTtjJj1+ZX19dmFyIEM9MDtmdW5jdGlvbiBEYyhhKXthJj0tYTtyZXR1cm4gMTxhPzQ8YT8wIT09KGEmMjY4NDM1NDU1KT8xNjo1MzY4NzA5MTI6NDoxfXZhciBFYyxGYyxHYyxIYyxJYyxKYz0hMSxLYz1bXSxMYz1udWxsLE1jPW51bGwsTmM9bnVsbCxPYz1uZXcgTWFwLFBjPW5ldyBNYXAsUWM9W10sUmM9XCJtb3VzZWRvd24gbW91c2V1cCB0b3VjaGNhbmNlbCB0b3VjaGVuZCB0b3VjaHN0YXJ0IGF1eGNsaWNrIGRibGNsaWNrIHBvaW50ZXJjYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlcnVwIGRyYWdlbmQgZHJhZ3N0YXJ0IGRyb3AgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IHRleHRJbnB1dCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQgc3VibWl0XCIuc3BsaXQoXCIgXCIpO1xuZnVuY3Rpb24gU2MoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImZvY3VzaW5cIjpjYXNlIFwiZm9jdXNvdXRcIjpMYz1udWxsO2JyZWFrO2Nhc2UgXCJkcmFnZW50ZXJcIjpjYXNlIFwiZHJhZ2xlYXZlXCI6TWM9bnVsbDticmVhaztjYXNlIFwibW91c2VvdmVyXCI6Y2FzZSBcIm1vdXNlb3V0XCI6TmM9bnVsbDticmVhaztjYXNlIFwicG9pbnRlcm92ZXJcIjpjYXNlIFwicG9pbnRlcm91dFwiOk9jLmRlbGV0ZShiLnBvaW50ZXJJZCk7YnJlYWs7Y2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6Y2FzZSBcImxvc3Rwb2ludGVyY2FwdHVyZVwiOlBjLmRlbGV0ZShiLnBvaW50ZXJJZCl9fVxuZnVuY3Rpb24gVGMoYSxiLGMsZCxlLGYpe2lmKG51bGw9PT1hfHxhLm5hdGl2ZUV2ZW50IT09ZilyZXR1cm4gYT17YmxvY2tlZE9uOmIsZG9tRXZlbnROYW1lOmMsZXZlbnRTeXN0ZW1GbGFnczpkLG5hdGl2ZUV2ZW50OmYsdGFyZ2V0Q29udGFpbmVyczpbZV19LG51bGwhPT1iJiYoYj1DYihiKSxudWxsIT09YiYmRmMoYikpLGE7YS5ldmVudFN5c3RlbUZsYWdzfD1kO2I9YS50YXJnZXRDb250YWluZXJzO251bGwhPT1lJiYtMT09PWIuaW5kZXhPZihlKSYmYi5wdXNoKGUpO3JldHVybiBhfVxuZnVuY3Rpb24gVWMoYSxiLGMsZCxlKXtzd2l0Y2goYil7Y2FzZSBcImZvY3VzaW5cIjpyZXR1cm4gTGM9VGMoTGMsYSxiLGMsZCxlKSwhMDtjYXNlIFwiZHJhZ2VudGVyXCI6cmV0dXJuIE1jPVRjKE1jLGEsYixjLGQsZSksITA7Y2FzZSBcIm1vdXNlb3ZlclwiOnJldHVybiBOYz1UYyhOYyxhLGIsYyxkLGUpLCEwO2Nhc2UgXCJwb2ludGVyb3ZlclwiOnZhciBmPWUucG9pbnRlcklkO09jLnNldChmLFRjKE9jLmdldChmKXx8bnVsbCxhLGIsYyxkLGUpKTtyZXR1cm4hMDtjYXNlIFwiZ290cG9pbnRlcmNhcHR1cmVcIjpyZXR1cm4gZj1lLnBvaW50ZXJJZCxQYy5zZXQoZixUYyhQYy5nZXQoZil8fG51bGwsYSxiLGMsZCxlKSksITB9cmV0dXJuITF9XG5mdW5jdGlvbiBWYyhhKXt2YXIgYj1XYyhhLnRhcmdldCk7aWYobnVsbCE9PWIpe3ZhciBjPVZiKGIpO2lmKG51bGwhPT1jKWlmKGI9Yy50YWcsMTM9PT1iKXtpZihiPVdiKGMpLG51bGwhPT1iKXthLmJsb2NrZWRPbj1iO0ljKGEucHJpb3JpdHksZnVuY3Rpb24oKXtHYyhjKX0pO3JldHVybn19ZWxzZSBpZigzPT09YiYmYy5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl7YS5ibG9ja2VkT249Mz09PWMudGFnP2Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtyZXR1cm59fWEuYmxvY2tlZE9uPW51bGx9XG5mdW5jdGlvbiBYYyhhKXtpZihudWxsIT09YS5ibG9ja2VkT24pcmV0dXJuITE7Zm9yKHZhciBiPWEudGFyZ2V0Q29udGFpbmVyczswPGIubGVuZ3RoOyl7dmFyIGM9WWMoYS5kb21FdmVudE5hbWUsYS5ldmVudFN5c3RlbUZsYWdzLGJbMF0sYS5uYXRpdmVFdmVudCk7aWYobnVsbD09PWMpe2M9YS5uYXRpdmVFdmVudDt2YXIgZD1uZXcgYy5jb25zdHJ1Y3RvcihjLnR5cGUsYyk7d2I9ZDtjLnRhcmdldC5kaXNwYXRjaEV2ZW50KGQpO3diPW51bGx9ZWxzZSByZXR1cm4gYj1DYihjKSxudWxsIT09YiYmRmMoYiksYS5ibG9ja2VkT249YywhMTtiLnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gWmMoYSxiLGMpe1hjKGEpJiZjLmRlbGV0ZShiKX1mdW5jdGlvbiAkYygpe0pjPSExO251bGwhPT1MYyYmWGMoTGMpJiYoTGM9bnVsbCk7bnVsbCE9PU1jJiZYYyhNYykmJihNYz1udWxsKTtudWxsIT09TmMmJlhjKE5jKSYmKE5jPW51bGwpO09jLmZvckVhY2goWmMpO1BjLmZvckVhY2goWmMpfVxuZnVuY3Rpb24gYWQoYSxiKXthLmJsb2NrZWRPbj09PWImJihhLmJsb2NrZWRPbj1udWxsLEpjfHwoSmM9ITAsY2EudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhjYS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSwkYykpKX1cbmZ1bmN0aW9uIGJkKGEpe2Z1bmN0aW9uIGIoYil7cmV0dXJuIGFkKGIsYSl9aWYoMDxLYy5sZW5ndGgpe2FkKEtjWzBdLGEpO2Zvcih2YXIgYz0xO2M8S2MubGVuZ3RoO2MrKyl7dmFyIGQ9S2NbY107ZC5ibG9ja2VkT249PT1hJiYoZC5ibG9ja2VkT249bnVsbCl9fW51bGwhPT1MYyYmYWQoTGMsYSk7bnVsbCE9PU1jJiZhZChNYyxhKTtudWxsIT09TmMmJmFkKE5jLGEpO09jLmZvckVhY2goYik7UGMuZm9yRWFjaChiKTtmb3IoYz0wO2M8UWMubGVuZ3RoO2MrKylkPVFjW2NdLGQuYmxvY2tlZE9uPT09YSYmKGQuYmxvY2tlZE9uPW51bGwpO2Zvcig7MDxRYy5sZW5ndGgmJihjPVFjWzBdLG51bGw9PT1jLmJsb2NrZWRPbik7KVZjKGMpLG51bGw9PT1jLmJsb2NrZWRPbiYmUWMuc2hpZnQoKX12YXIgY2Q9dWEuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsZGQ9ITA7XG5mdW5jdGlvbiBlZChhLGIsYyxkKXt2YXIgZT1DLGY9Y2QudHJhbnNpdGlvbjtjZC50cmFuc2l0aW9uPW51bGw7dHJ5e0M9MSxmZChhLGIsYyxkKX1maW5hbGx5e0M9ZSxjZC50cmFuc2l0aW9uPWZ9fWZ1bmN0aW9uIGdkKGEsYixjLGQpe3ZhciBlPUMsZj1jZC50cmFuc2l0aW9uO2NkLnRyYW5zaXRpb249bnVsbDt0cnl7Qz00LGZkKGEsYixjLGQpfWZpbmFsbHl7Qz1lLGNkLnRyYW5zaXRpb249Zn19XG5mdW5jdGlvbiBmZChhLGIsYyxkKXtpZihkZCl7dmFyIGU9WWMoYSxiLGMsZCk7aWYobnVsbD09PWUpaGQoYSxiLGQsaWQsYyksU2MoYSxkKTtlbHNlIGlmKFVjKGUsYSxiLGMsZCkpZC5zdG9wUHJvcGFnYXRpb24oKTtlbHNlIGlmKFNjKGEsZCksYiY0JiYtMTxSYy5pbmRleE9mKGEpKXtmb3IoO251bGwhPT1lOyl7dmFyIGY9Q2IoZSk7bnVsbCE9PWYmJkVjKGYpO2Y9WWMoYSxiLGMsZCk7bnVsbD09PWYmJmhkKGEsYixkLGlkLGMpO2lmKGY9PT1lKWJyZWFrO2U9Zn1udWxsIT09ZSYmZC5zdG9wUHJvcGFnYXRpb24oKX1lbHNlIGhkKGEsYixkLG51bGwsYyl9fXZhciBpZD1udWxsO1xuZnVuY3Rpb24gWWMoYSxiLGMsZCl7aWQ9bnVsbDthPXhiKGQpO2E9V2MoYSk7aWYobnVsbCE9PWEpaWYoYj1WYihhKSxudWxsPT09YilhPW51bGw7ZWxzZSBpZihjPWIudGFnLDEzPT09Yyl7YT1XYihiKTtpZihudWxsIT09YSlyZXR1cm4gYTthPW51bGx9ZWxzZSBpZigzPT09Yyl7aWYoYi5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClyZXR1cm4gMz09PWIudGFnP2Iuc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDthPW51bGx9ZWxzZSBiIT09YSYmKGE9bnVsbCk7aWQ9YTtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGpkKGEpe3N3aXRjaChhKXtjYXNlIFwiY2FuY2VsXCI6Y2FzZSBcImNsaWNrXCI6Y2FzZSBcImNsb3NlXCI6Y2FzZSBcImNvbnRleHRtZW51XCI6Y2FzZSBcImNvcHlcIjpjYXNlIFwiY3V0XCI6Y2FzZSBcImF1eGNsaWNrXCI6Y2FzZSBcImRibGNsaWNrXCI6Y2FzZSBcImRyYWdlbmRcIjpjYXNlIFwiZHJhZ3N0YXJ0XCI6Y2FzZSBcImRyb3BcIjpjYXNlIFwiZm9jdXNpblwiOmNhc2UgXCJmb2N1c291dFwiOmNhc2UgXCJpbnB1dFwiOmNhc2UgXCJpbnZhbGlkXCI6Y2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5cHJlc3NcIjpjYXNlIFwia2V5dXBcIjpjYXNlIFwibW91c2Vkb3duXCI6Y2FzZSBcIm1vdXNldXBcIjpjYXNlIFwicGFzdGVcIjpjYXNlIFwicGF1c2VcIjpjYXNlIFwicGxheVwiOmNhc2UgXCJwb2ludGVyY2FuY2VsXCI6Y2FzZSBcInBvaW50ZXJkb3duXCI6Y2FzZSBcInBvaW50ZXJ1cFwiOmNhc2UgXCJyYXRlY2hhbmdlXCI6Y2FzZSBcInJlc2V0XCI6Y2FzZSBcInJlc2l6ZVwiOmNhc2UgXCJzZWVrZWRcIjpjYXNlIFwic3VibWl0XCI6Y2FzZSBcInRvdWNoY2FuY2VsXCI6Y2FzZSBcInRvdWNoZW5kXCI6Y2FzZSBcInRvdWNoc3RhcnRcIjpjYXNlIFwidm9sdW1lY2hhbmdlXCI6Y2FzZSBcImNoYW5nZVwiOmNhc2UgXCJzZWxlY3Rpb25jaGFuZ2VcIjpjYXNlIFwidGV4dElucHV0XCI6Y2FzZSBcImNvbXBvc2l0aW9uc3RhcnRcIjpjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpjYXNlIFwiY29tcG9zaXRpb251cGRhdGVcIjpjYXNlIFwiYmVmb3JlYmx1clwiOmNhc2UgXCJhZnRlcmJsdXJcIjpjYXNlIFwiYmVmb3JlaW5wdXRcIjpjYXNlIFwiYmx1clwiOmNhc2UgXCJmdWxsc2NyZWVuY2hhbmdlXCI6Y2FzZSBcImZvY3VzXCI6Y2FzZSBcImhhc2hjaGFuZ2VcIjpjYXNlIFwicG9wc3RhdGVcIjpjYXNlIFwic2VsZWN0XCI6Y2FzZSBcInNlbGVjdHN0YXJ0XCI6cmV0dXJuIDE7Y2FzZSBcImRyYWdcIjpjYXNlIFwiZHJhZ2VudGVyXCI6Y2FzZSBcImRyYWdleGl0XCI6Y2FzZSBcImRyYWdsZWF2ZVwiOmNhc2UgXCJkcmFnb3ZlclwiOmNhc2UgXCJtb3VzZW1vdmVcIjpjYXNlIFwibW91c2VvdXRcIjpjYXNlIFwibW91c2VvdmVyXCI6Y2FzZSBcInBvaW50ZXJtb3ZlXCI6Y2FzZSBcInBvaW50ZXJvdXRcIjpjYXNlIFwicG9pbnRlcm92ZXJcIjpjYXNlIFwic2Nyb2xsXCI6Y2FzZSBcInRvZ2dsZVwiOmNhc2UgXCJ0b3VjaG1vdmVcIjpjYXNlIFwid2hlZWxcIjpjYXNlIFwibW91c2VlbnRlclwiOmNhc2UgXCJtb3VzZWxlYXZlXCI6Y2FzZSBcInBvaW50ZXJlbnRlclwiOmNhc2UgXCJwb2ludGVybGVhdmVcIjpyZXR1cm4gNDtcbmNhc2UgXCJtZXNzYWdlXCI6c3dpdGNoKGVjKCkpe2Nhc2UgZmM6cmV0dXJuIDE7Y2FzZSBnYzpyZXR1cm4gNDtjYXNlIGhjOmNhc2UgaWM6cmV0dXJuIDE2O2Nhc2UgamM6cmV0dXJuIDUzNjg3MDkxMjtkZWZhdWx0OnJldHVybiAxNn1kZWZhdWx0OnJldHVybiAxNn19dmFyIGtkPW51bGwsbGQ9bnVsbCxtZD1udWxsO2Z1bmN0aW9uIG5kKCl7aWYobWQpcmV0dXJuIG1kO3ZhciBhLGI9bGQsYz1iLmxlbmd0aCxkLGU9XCJ2YWx1ZVwiaW4ga2Q/a2QudmFsdWU6a2QudGV4dENvbnRlbnQsZj1lLmxlbmd0aDtmb3IoYT0wO2E8YyYmYlthXT09PWVbYV07YSsrKTt2YXIgZz1jLWE7Zm9yKGQ9MTtkPD1nJiZiW2MtZF09PT1lW2YtZF07ZCsrKTtyZXR1cm4gbWQ9ZS5zbGljZShhLDE8ZD8xLWQ6dm9pZCAwKX1cbmZ1bmN0aW9uIG9kKGEpe3ZhciBiPWEua2V5Q29kZTtcImNoYXJDb2RlXCJpbiBhPyhhPWEuY2hhckNvZGUsMD09PWEmJjEzPT09YiYmKGE9MTMpKTphPWI7MTA9PT1hJiYoYT0xMyk7cmV0dXJuIDMyPD1hfHwxMz09PWE/YTowfWZ1bmN0aW9uIHBkKCl7cmV0dXJuITB9ZnVuY3Rpb24gcWQoKXtyZXR1cm4hMX1cbmZ1bmN0aW9uIHJkKGEpe2Z1bmN0aW9uIGIoYixkLGUsZixnKXt0aGlzLl9yZWFjdE5hbWU9Yjt0aGlzLl90YXJnZXRJbnN0PWU7dGhpcy50eXBlPWQ7dGhpcy5uYXRpdmVFdmVudD1mO3RoaXMudGFyZ2V0PWc7dGhpcy5jdXJyZW50VGFyZ2V0PW51bGw7Zm9yKHZhciBjIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShjKSYmKGI9YVtjXSx0aGlzW2NdPWI/YihmKTpmW2NdKTt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD0obnVsbCE9Zi5kZWZhdWx0UHJldmVudGVkP2YuZGVmYXVsdFByZXZlbnRlZDohMT09PWYucmV0dXJuVmFsdWUpP3BkOnFkO3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9cWQ7cmV0dXJuIHRoaXN9QShiLnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIGE9dGhpcy5uYXRpdmVFdmVudDthJiYoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6XCJ1bmtub3duXCIhPT10eXBlb2YgYS5yZXR1cm5WYWx1ZSYmXG4oYS5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9cGQpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm5hdGl2ZUV2ZW50O2EmJihhLnN0b3BQcm9wYWdhdGlvbj9hLnN0b3BQcm9wYWdhdGlvbigpOlwidW5rbm93blwiIT09dHlwZW9mIGEuY2FuY2VsQnViYmxlJiYoYS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9cGQpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7fSxpc1BlcnNpc3RlbnQ6cGR9KTtyZXR1cm4gYn1cbnZhciBzZD17ZXZlbnRQaGFzZTowLGJ1YmJsZXM6MCxjYW5jZWxhYmxlOjAsdGltZVN0YW1wOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDowLGlzVHJ1c3RlZDowfSx0ZD1yZChzZCksdWQ9QSh7fSxzZCx7dmlldzowLGRldGFpbDowfSksdmQ9cmQodWQpLHdkLHhkLHlkLEFkPUEoe30sdWQse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6emQsYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWEucmVsYXRlZFRhcmdldD9hLmZyb21FbGVtZW50PT09YS5zcmNFbGVtZW50P2EudG9FbGVtZW50OmEuZnJvbUVsZW1lbnQ6YS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oYSl7aWYoXCJtb3ZlbWVudFhcImluXG5hKXJldHVybiBhLm1vdmVtZW50WDthIT09eWQmJih5ZCYmXCJtb3VzZW1vdmVcIj09PWEudHlwZT8od2Q9YS5zY3JlZW5YLXlkLnNjcmVlblgseGQ9YS5zY3JlZW5ZLXlkLnNjcmVlblkpOnhkPXdkPTAseWQ9YSk7cmV0dXJuIHdkfSxtb3ZlbWVudFk6ZnVuY3Rpb24oYSl7cmV0dXJuXCJtb3ZlbWVudFlcImluIGE/YS5tb3ZlbWVudFk6eGR9fSksQmQ9cmQoQWQpLENkPUEoe30sQWQse2RhdGFUcmFuc2ZlcjowfSksRGQ9cmQoQ2QpLEVkPUEoe30sdWQse3JlbGF0ZWRUYXJnZXQ6MH0pLEZkPXJkKEVkKSxHZD1BKHt9LHNkLHthbmltYXRpb25OYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSxIZD1yZChHZCksSWQ9QSh7fSxzZCx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihhKXtyZXR1cm5cImNsaXBib2FyZERhdGFcImluIGE/YS5jbGlwYm9hcmREYXRhOndpbmRvdy5jbGlwYm9hcmREYXRhfX0pLEpkPXJkKElkKSxLZD1BKHt9LHNkLHtkYXRhOjB9KSxMZD1yZChLZCksTWQ9e0VzYzpcIkVzY2FwZVwiLFxuU3BhY2ViYXI6XCIgXCIsTGVmdDpcIkFycm93TGVmdFwiLFVwOlwiQXJyb3dVcFwiLFJpZ2h0OlwiQXJyb3dSaWdodFwiLERvd246XCJBcnJvd0Rvd25cIixEZWw6XCJEZWxldGVcIixXaW46XCJPU1wiLE1lbnU6XCJDb250ZXh0TWVudVwiLEFwcHM6XCJDb250ZXh0TWVudVwiLFNjcm9sbDpcIlNjcm9sbExvY2tcIixNb3pQcmludGFibGVLZXk6XCJVbmlkZW50aWZpZWRcIn0sTmQ9ezg6XCJCYWNrc3BhY2VcIiw5OlwiVGFiXCIsMTI6XCJDbGVhclwiLDEzOlwiRW50ZXJcIiwxNjpcIlNoaWZ0XCIsMTc6XCJDb250cm9sXCIsMTg6XCJBbHRcIiwxOTpcIlBhdXNlXCIsMjA6XCJDYXBzTG9ja1wiLDI3OlwiRXNjYXBlXCIsMzI6XCIgXCIsMzM6XCJQYWdlVXBcIiwzNDpcIlBhZ2VEb3duXCIsMzU6XCJFbmRcIiwzNjpcIkhvbWVcIiwzNzpcIkFycm93TGVmdFwiLDM4OlwiQXJyb3dVcFwiLDM5OlwiQXJyb3dSaWdodFwiLDQwOlwiQXJyb3dEb3duXCIsNDU6XCJJbnNlcnRcIiw0NjpcIkRlbGV0ZVwiLDExMjpcIkYxXCIsMTEzOlwiRjJcIiwxMTQ6XCJGM1wiLDExNTpcIkY0XCIsMTE2OlwiRjVcIiwxMTc6XCJGNlwiLDExODpcIkY3XCIsXG4xMTk6XCJGOFwiLDEyMDpcIkY5XCIsMTIxOlwiRjEwXCIsMTIyOlwiRjExXCIsMTIzOlwiRjEyXCIsMTQ0OlwiTnVtTG9ja1wiLDE0NTpcIlNjcm9sbExvY2tcIiwyMjQ6XCJNZXRhXCJ9LE9kPXtBbHQ6XCJhbHRLZXlcIixDb250cm9sOlwiY3RybEtleVwiLE1ldGE6XCJtZXRhS2V5XCIsU2hpZnQ6XCJzaGlmdEtleVwifTtmdW5jdGlvbiBQZChhKXt2YXIgYj10aGlzLm5hdGl2ZUV2ZW50O3JldHVybiBiLmdldE1vZGlmaWVyU3RhdGU/Yi5nZXRNb2RpZmllclN0YXRlKGEpOihhPU9kW2FdKT8hIWJbYV06ITF9ZnVuY3Rpb24gemQoKXtyZXR1cm4gUGR9XG52YXIgUWQ9QSh7fSx1ZCx7a2V5OmZ1bmN0aW9uKGEpe2lmKGEua2V5KXt2YXIgYj1NZFthLmtleV18fGEua2V5O2lmKFwiVW5pZGVudGlmaWVkXCIhPT1iKXJldHVybiBifXJldHVyblwia2V5cHJlc3NcIj09PWEudHlwZT8oYT1vZChhKSwxMz09PWE/XCJFbnRlclwiOlN0cmluZy5mcm9tQ2hhckNvZGUoYSkpOlwia2V5ZG93blwiPT09YS50eXBlfHxcImtleXVwXCI9PT1hLnR5cGU/TmRbYS5rZXlDb2RlXXx8XCJVbmlkZW50aWZpZWRcIjpcIlwifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTp6ZCxjaGFyQ29kZTpmdW5jdGlvbihhKXtyZXR1cm5cImtleXByZXNzXCI9PT1hLnR5cGU/b2QoYSk6MH0sa2V5Q29kZTpmdW5jdGlvbihhKXtyZXR1cm5cImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP2Eua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihhKXtyZXR1cm5cImtleXByZXNzXCI9PT1cbmEudHlwZT9vZChhKTpcImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP2Eua2V5Q29kZTowfX0pLFJkPXJkKFFkKSxTZD1BKHt9LEFkLHtwb2ludGVySWQ6MCx3aWR0aDowLGhlaWdodDowLHByZXNzdXJlOjAsdGFuZ2VudGlhbFByZXNzdXJlOjAsdGlsdFg6MCx0aWx0WTowLHR3aXN0OjAscG9pbnRlclR5cGU6MCxpc1ByaW1hcnk6MH0pLFRkPXJkKFNkKSxVZD1BKHt9LHVkLHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6emR9KSxWZD1yZChVZCksV2Q9QSh7fSxzZCx7cHJvcGVydHlOYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSxYZD1yZChXZCksWWQ9QSh7fSxBZCx7ZGVsdGFYOmZ1bmN0aW9uKGEpe3JldHVyblwiZGVsdGFYXCJpbiBhP2EuZGVsdGFYOlwid2hlZWxEZWx0YVhcImluIGE/LWEud2hlZWxEZWx0YVg6MH0sXG5kZWx0YVk6ZnVuY3Rpb24oYSl7cmV0dXJuXCJkZWx0YVlcImluIGE/YS5kZWx0YVk6XCJ3aGVlbERlbHRhWVwiaW4gYT8tYS53aGVlbERlbHRhWTpcIndoZWVsRGVsdGFcImluIGE/LWEud2hlZWxEZWx0YTowfSxkZWx0YVo6MCxkZWx0YU1vZGU6MH0pLFpkPXJkKFlkKSwkZD1bOSwxMywyNywzMl0sYWU9aWEmJlwiQ29tcG9zaXRpb25FdmVudFwiaW4gd2luZG93LGJlPW51bGw7aWEmJlwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCYmKGJlPWRvY3VtZW50LmRvY3VtZW50TW9kZSk7dmFyIGNlPWlhJiZcIlRleHRFdmVudFwiaW4gd2luZG93JiYhYmUsZGU9aWEmJighYWV8fGJlJiY4PGJlJiYxMT49YmUpLGVlPVN0cmluZy5mcm9tQ2hhckNvZGUoMzIpLGZlPSExO1xuZnVuY3Rpb24gZ2UoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImtleXVwXCI6cmV0dXJuLTEhPT0kZC5pbmRleE9mKGIua2V5Q29kZSk7Y2FzZSBcImtleWRvd25cIjpyZXR1cm4gMjI5IT09Yi5rZXlDb2RlO2Nhc2UgXCJrZXlwcmVzc1wiOmNhc2UgXCJtb3VzZWRvd25cIjpjYXNlIFwiZm9jdXNvdXRcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBoZShhKXthPWEuZGV0YWlsO3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmXCJkYXRhXCJpbiBhP2EuZGF0YTpudWxsfXZhciBpZT0hMTtmdW5jdGlvbiBqZShhLGIpe3N3aXRjaChhKXtjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpyZXR1cm4gaGUoYik7Y2FzZSBcImtleXByZXNzXCI6aWYoMzIhPT1iLndoaWNoKXJldHVybiBudWxsO2ZlPSEwO3JldHVybiBlZTtjYXNlIFwidGV4dElucHV0XCI6cmV0dXJuIGE9Yi5kYXRhLGE9PT1lZSYmZmU/bnVsbDphO2RlZmF1bHQ6cmV0dXJuIG51bGx9fVxuZnVuY3Rpb24ga2UoYSxiKXtpZihpZSlyZXR1cm5cImNvbXBvc2l0aW9uZW5kXCI9PT1hfHwhYWUmJmdlKGEsYik/KGE9bmQoKSxtZD1sZD1rZD1udWxsLGllPSExLGEpOm51bGw7c3dpdGNoKGEpe2Nhc2UgXCJwYXN0ZVwiOnJldHVybiBudWxsO2Nhc2UgXCJrZXlwcmVzc1wiOmlmKCEoYi5jdHJsS2V5fHxiLmFsdEtleXx8Yi5tZXRhS2V5KXx8Yi5jdHJsS2V5JiZiLmFsdEtleSl7aWYoYi5jaGFyJiYxPGIuY2hhci5sZW5ndGgpcmV0dXJuIGIuY2hhcjtpZihiLndoaWNoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGIud2hpY2gpfXJldHVybiBudWxsO2Nhc2UgXCJjb21wb3NpdGlvbmVuZFwiOnJldHVybiBkZSYmXCJrb1wiIT09Yi5sb2NhbGU/bnVsbDpiLmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19XG52YXIgbGU9e2NvbG9yOiEwLGRhdGU6ITAsZGF0ZXRpbWU6ITAsXCJkYXRldGltZS1sb2NhbFwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07ZnVuY3Rpb24gbWUoYSl7dmFyIGI9YSYmYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVyblwiaW5wdXRcIj09PWI/ISFsZVthLnR5cGVdOlwidGV4dGFyZWFcIj09PWI/ITA6ITF9ZnVuY3Rpb24gbmUoYSxiLGMsZCl7RWIoZCk7Yj1vZShiLFwib25DaGFuZ2VcIik7MDxiLmxlbmd0aCYmKGM9bmV3IHRkKFwib25DaGFuZ2VcIixcImNoYW5nZVwiLG51bGwsYyxkKSxhLnB1c2goe2V2ZW50OmMsbGlzdGVuZXJzOmJ9KSl9dmFyIHBlPW51bGwscWU9bnVsbDtmdW5jdGlvbiByZShhKXtzZShhLDApfWZ1bmN0aW9uIHRlKGEpe3ZhciBiPXVlKGEpO2lmKFdhKGIpKXJldHVybiBhfVxuZnVuY3Rpb24gdmUoYSxiKXtpZihcImNoYW5nZVwiPT09YSlyZXR1cm4gYn12YXIgd2U9ITE7aWYoaWEpe3ZhciB4ZTtpZihpYSl7dmFyIHllPVwib25pbnB1dFwiaW4gZG9jdW1lbnQ7aWYoIXllKXt2YXIgemU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt6ZS5zZXRBdHRyaWJ1dGUoXCJvbmlucHV0XCIsXCJyZXR1cm47XCIpO3llPVwiZnVuY3Rpb25cIj09PXR5cGVvZiB6ZS5vbmlucHV0fXhlPXllfWVsc2UgeGU9ITE7d2U9eGUmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSl9ZnVuY3Rpb24gQWUoKXtwZSYmKHBlLmRldGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLEJlKSxxZT1wZT1udWxsKX1mdW5jdGlvbiBCZShhKXtpZihcInZhbHVlXCI9PT1hLnByb3BlcnR5TmFtZSYmdGUocWUpKXt2YXIgYj1bXTtuZShiLHFlLGEseGIoYSkpO0piKHJlLGIpfX1cbmZ1bmN0aW9uIENlKGEsYixjKXtcImZvY3VzaW5cIj09PWE/KEFlKCkscGU9YixxZT1jLHBlLmF0dGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLEJlKSk6XCJmb2N1c291dFwiPT09YSYmQWUoKX1mdW5jdGlvbiBEZShhKXtpZihcInNlbGVjdGlvbmNoYW5nZVwiPT09YXx8XCJrZXl1cFwiPT09YXx8XCJrZXlkb3duXCI9PT1hKXJldHVybiB0ZShxZSl9ZnVuY3Rpb24gRWUoYSxiKXtpZihcImNsaWNrXCI9PT1hKXJldHVybiB0ZShiKX1mdW5jdGlvbiBGZShhLGIpe2lmKFwiaW5wdXRcIj09PWF8fFwiY2hhbmdlXCI9PT1hKXJldHVybiB0ZShiKX1mdW5jdGlvbiBHZShhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIEhlPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOkdlO1xuZnVuY3Rpb24gSWUoYSxiKXtpZihIZShhLGIpKXJldHVybiEwO2lmKFwib2JqZWN0XCIhPT10eXBlb2YgYXx8bnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYnx8bnVsbD09PWIpcmV0dXJuITE7dmFyIGM9T2JqZWN0LmtleXMoYSksZD1PYmplY3Qua2V5cyhiKTtpZihjLmxlbmd0aCE9PWQubGVuZ3RoKXJldHVybiExO2ZvcihkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07aWYoIWphLmNhbGwoYixlKXx8IUhlKGFbZV0sYltlXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gSmUoYSl7Zm9yKDthJiZhLmZpcnN0Q2hpbGQ7KWE9YS5maXJzdENoaWxkO3JldHVybiBhfVxuZnVuY3Rpb24gS2UoYSxiKXt2YXIgYz1KZShhKTthPTA7Zm9yKHZhciBkO2M7KXtpZigzPT09Yy5ub2RlVHlwZSl7ZD1hK2MudGV4dENvbnRlbnQubGVuZ3RoO2lmKGE8PWImJmQ+PWIpcmV0dXJue25vZGU6YyxvZmZzZXQ6Yi1hfTthPWR9YTp7Zm9yKDtjOyl7aWYoYy5uZXh0U2libGluZyl7Yz1jLm5leHRTaWJsaW5nO2JyZWFrIGF9Yz1jLnBhcmVudE5vZGV9Yz12b2lkIDB9Yz1KZShjKX19ZnVuY3Rpb24gTGUoYSxiKXtyZXR1cm4gYSYmYj9hPT09Yj8hMDphJiYzPT09YS5ub2RlVHlwZT8hMTpiJiYzPT09Yi5ub2RlVHlwZT9MZShhLGIucGFyZW50Tm9kZSk6XCJjb250YWluc1wiaW4gYT9hLmNvbnRhaW5zKGIpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSYxNik6ITE6ITF9XG5mdW5jdGlvbiBNZSgpe2Zvcih2YXIgYT13aW5kb3csYj1YYSgpO2IgaW5zdGFuY2VvZiBhLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBjPVwic3RyaW5nXCI9PT10eXBlb2YgYi5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWZ9Y2F0Y2goZCl7Yz0hMX1pZihjKWE9Yi5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7Yj1YYShhLmRvY3VtZW50KX1yZXR1cm4gYn1mdW5jdGlvbiBOZShhKXt2YXIgYj1hJiZhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGImJihcImlucHV0XCI9PT1iJiYoXCJ0ZXh0XCI9PT1hLnR5cGV8fFwic2VhcmNoXCI9PT1hLnR5cGV8fFwidGVsXCI9PT1hLnR5cGV8fFwidXJsXCI9PT1hLnR5cGV8fFwicGFzc3dvcmRcIj09PWEudHlwZSl8fFwidGV4dGFyZWFcIj09PWJ8fFwidHJ1ZVwiPT09YS5jb250ZW50RWRpdGFibGUpfVxuZnVuY3Rpb24gT2UoYSl7dmFyIGI9TWUoKSxjPWEuZm9jdXNlZEVsZW0sZD1hLnNlbGVjdGlvblJhbmdlO2lmKGIhPT1jJiZjJiZjLm93bmVyRG9jdW1lbnQmJkxlKGMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYykpe2lmKG51bGwhPT1kJiZOZShjKSlpZihiPWQuc3RhcnQsYT1kLmVuZCx2b2lkIDA9PT1hJiYoYT1iKSxcInNlbGVjdGlvblN0YXJ0XCJpbiBjKWMuc2VsZWN0aW9uU3RhcnQ9YixjLnNlbGVjdGlvbkVuZD1NYXRoLm1pbihhLGMudmFsdWUubGVuZ3RoKTtlbHNlIGlmKGE9KGI9Yy5vd25lckRvY3VtZW50fHxkb2N1bWVudCkmJmIuZGVmYXVsdFZpZXd8fHdpbmRvdyxhLmdldFNlbGVjdGlvbil7YT1hLmdldFNlbGVjdGlvbigpO3ZhciBlPWMudGV4dENvbnRlbnQubGVuZ3RoLGY9TWF0aC5taW4oZC5zdGFydCxlKTtkPXZvaWQgMD09PWQuZW5kP2Y6TWF0aC5taW4oZC5lbmQsZSk7IWEuZXh0ZW5kJiZmPmQmJihlPWQsZD1mLGY9ZSk7ZT1LZShjLGYpO3ZhciBnPUtlKGMsXG5kKTtlJiZnJiYoMSE9PWEucmFuZ2VDb3VudHx8YS5hbmNob3JOb2RlIT09ZS5ub2RlfHxhLmFuY2hvck9mZnNldCE9PWUub2Zmc2V0fHxhLmZvY3VzTm9kZSE9PWcubm9kZXx8YS5mb2N1c09mZnNldCE9PWcub2Zmc2V0KSYmKGI9Yi5jcmVhdGVSYW5nZSgpLGIuc2V0U3RhcnQoZS5ub2RlLGUub2Zmc2V0KSxhLnJlbW92ZUFsbFJhbmdlcygpLGY+ZD8oYS5hZGRSYW5nZShiKSxhLmV4dGVuZChnLm5vZGUsZy5vZmZzZXQpKTooYi5zZXRFbmQoZy5ub2RlLGcub2Zmc2V0KSxhLmFkZFJhbmdlKGIpKSl9Yj1bXTtmb3IoYT1jO2E9YS5wYXJlbnROb2RlOykxPT09YS5ub2RlVHlwZSYmYi5wdXNoKHtlbGVtZW50OmEsbGVmdDphLnNjcm9sbExlZnQsdG9wOmEuc2Nyb2xsVG9wfSk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGMuZm9jdXMmJmMuZm9jdXMoKTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKWE9YltjXSxhLmVsZW1lbnQuc2Nyb2xsTGVmdD1hLmxlZnQsYS5lbGVtZW50LnNjcm9sbFRvcD1hLnRvcH19XG52YXIgUGU9aWEmJlwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxRZT1udWxsLFJlPW51bGwsU2U9bnVsbCxUZT0hMTtcbmZ1bmN0aW9uIFVlKGEsYixjKXt2YXIgZD1jLndpbmRvdz09PWM/Yy5kb2N1bWVudDo5PT09Yy5ub2RlVHlwZT9jOmMub3duZXJEb2N1bWVudDtUZXx8bnVsbD09UWV8fFFlIT09WGEoZCl8fChkPVFlLFwic2VsZWN0aW9uU3RhcnRcImluIGQmJk5lKGQpP2Q9e3N0YXJ0OmQuc2VsZWN0aW9uU3RhcnQsZW5kOmQuc2VsZWN0aW9uRW5kfTooZD0oZC5vd25lckRvY3VtZW50JiZkLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKCksZD17YW5jaG9yTm9kZTpkLmFuY2hvck5vZGUsYW5jaG9yT2Zmc2V0OmQuYW5jaG9yT2Zmc2V0LGZvY3VzTm9kZTpkLmZvY3VzTm9kZSxmb2N1c09mZnNldDpkLmZvY3VzT2Zmc2V0fSksU2UmJkllKFNlLGQpfHwoU2U9ZCxkPW9lKFJlLFwib25TZWxlY3RcIiksMDxkLmxlbmd0aCYmKGI9bmV3IHRkKFwib25TZWxlY3RcIixcInNlbGVjdFwiLG51bGwsYixjKSxhLnB1c2goe2V2ZW50OmIsbGlzdGVuZXJzOmR9KSxiLnRhcmdldD1RZSkpKX1cbmZ1bmN0aW9uIFZlKGEsYil7dmFyIGM9e307Y1thLnRvTG93ZXJDYXNlKCldPWIudG9Mb3dlckNhc2UoKTtjW1wiV2Via2l0XCIrYV09XCJ3ZWJraXRcIitiO2NbXCJNb3pcIithXT1cIm1velwiK2I7cmV0dXJuIGN9dmFyIFdlPXthbmltYXRpb25lbmQ6VmUoXCJBbmltYXRpb25cIixcIkFuaW1hdGlvbkVuZFwiKSxhbmltYXRpb25pdGVyYXRpb246VmUoXCJBbmltYXRpb25cIixcIkFuaW1hdGlvbkl0ZXJhdGlvblwiKSxhbmltYXRpb25zdGFydDpWZShcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uU3RhcnRcIiksdHJhbnNpdGlvbmVuZDpWZShcIlRyYW5zaXRpb25cIixcIlRyYW5zaXRpb25FbmRcIil9LFhlPXt9LFllPXt9O1xuaWEmJihZZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlLFwiQW5pbWF0aW9uRXZlbnRcImluIHdpbmRvd3x8KGRlbGV0ZSBXZS5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBXZS5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBXZS5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLFwiVHJhbnNpdGlvbkV2ZW50XCJpbiB3aW5kb3d8fGRlbGV0ZSBXZS50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pO2Z1bmN0aW9uIFplKGEpe2lmKFhlW2FdKXJldHVybiBYZVthXTtpZighV2VbYV0pcmV0dXJuIGE7dmFyIGI9V2VbYV0sYztmb3IoYyBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoYykmJmMgaW4gWWUpcmV0dXJuIFhlW2FdPWJbY107cmV0dXJuIGF9dmFyICRlPVplKFwiYW5pbWF0aW9uZW5kXCIpLGFmPVplKFwiYW5pbWF0aW9uaXRlcmF0aW9uXCIpLGJmPVplKFwiYW5pbWF0aW9uc3RhcnRcIiksY2Y9WmUoXCJ0cmFuc2l0aW9uZW5kXCIpLGRmPW5ldyBNYXAsZWY9XCJhYm9ydCBhdXhDbGljayBjYW5jZWwgY2FuUGxheSBjYW5QbGF5VGhyb3VnaCBjbGljayBjbG9zZSBjb250ZXh0TWVudSBjb3B5IGN1dCBkcmFnIGRyYWdFbmQgZHJhZ0VudGVyIGRyYWdFeGl0IGRyYWdMZWF2ZSBkcmFnT3ZlciBkcmFnU3RhcnQgZHJvcCBkdXJhdGlvbkNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBnb3RQb2ludGVyQ2FwdHVyZSBpbnB1dCBpbnZhbGlkIGtleURvd24ga2V5UHJlc3Mga2V5VXAgbG9hZCBsb2FkZWREYXRhIGxvYWRlZE1ldGFkYXRhIGxvYWRTdGFydCBsb3N0UG9pbnRlckNhcHR1cmUgbW91c2VEb3duIG1vdXNlTW92ZSBtb3VzZU91dCBtb3VzZU92ZXIgbW91c2VVcCBwYXN0ZSBwYXVzZSBwbGF5IHBsYXlpbmcgcG9pbnRlckNhbmNlbCBwb2ludGVyRG93biBwb2ludGVyTW92ZSBwb2ludGVyT3V0IHBvaW50ZXJPdmVyIHBvaW50ZXJVcCBwcm9ncmVzcyByYXRlQ2hhbmdlIHJlc2V0IHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1Ym1pdCBzdXNwZW5kIHRpbWVVcGRhdGUgdG91Y2hDYW5jZWwgdG91Y2hFbmQgdG91Y2hTdGFydCB2b2x1bWVDaGFuZ2Ugc2Nyb2xsIHRvZ2dsZSB0b3VjaE1vdmUgd2FpdGluZyB3aGVlbFwiLnNwbGl0KFwiIFwiKTtcbmZ1bmN0aW9uIGZmKGEsYil7ZGYuc2V0KGEsYik7ZmEoYixbYV0pfWZvcih2YXIgZ2Y9MDtnZjxlZi5sZW5ndGg7Z2YrKyl7dmFyIGhmPWVmW2dmXSxqZj1oZi50b0xvd2VyQ2FzZSgpLGtmPWhmWzBdLnRvVXBwZXJDYXNlKCkraGYuc2xpY2UoMSk7ZmYoamYsXCJvblwiK2tmKX1mZigkZSxcIm9uQW5pbWF0aW9uRW5kXCIpO2ZmKGFmLFwib25BbmltYXRpb25JdGVyYXRpb25cIik7ZmYoYmYsXCJvbkFuaW1hdGlvblN0YXJ0XCIpO2ZmKFwiZGJsY2xpY2tcIixcIm9uRG91YmxlQ2xpY2tcIik7ZmYoXCJmb2N1c2luXCIsXCJvbkZvY3VzXCIpO2ZmKFwiZm9jdXNvdXRcIixcIm9uQmx1clwiKTtmZihjZixcIm9uVHJhbnNpdGlvbkVuZFwiKTtoYShcIm9uTW91c2VFbnRlclwiLFtcIm1vdXNlb3V0XCIsXCJtb3VzZW92ZXJcIl0pO2hhKFwib25Nb3VzZUxlYXZlXCIsW1wibW91c2VvdXRcIixcIm1vdXNlb3ZlclwiXSk7aGEoXCJvblBvaW50ZXJFbnRlclwiLFtcInBvaW50ZXJvdXRcIixcInBvaW50ZXJvdmVyXCJdKTtcbmhhKFwib25Qb2ludGVyTGVhdmVcIixbXCJwb2ludGVyb3V0XCIsXCJwb2ludGVyb3ZlclwiXSk7ZmEoXCJvbkNoYW5nZVwiLFwiY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcIiBcIikpO2ZhKFwib25TZWxlY3RcIixcImZvY3Vzb3V0IGNvbnRleHRtZW51IGRyYWdlbmQgZm9jdXNpbiBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKSk7ZmEoXCJvbkJlZm9yZUlucHV0XCIsW1wiY29tcG9zaXRpb25lbmRcIixcImtleXByZXNzXCIsXCJ0ZXh0SW5wdXRcIixcInBhc3RlXCJdKTtmYShcIm9uQ29tcG9zaXRpb25FbmRcIixcImNvbXBvc2l0aW9uZW5kIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpKTtmYShcIm9uQ29tcG9zaXRpb25TdGFydFwiLFwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSk7XG5mYShcIm9uQ29tcG9zaXRpb25VcGRhdGVcIixcImNvbXBvc2l0aW9udXBkYXRlIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpKTt2YXIgbGY9XCJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1c3BlbmQgdGltZXVwZGF0ZSB2b2x1bWVjaGFuZ2Ugd2FpdGluZ1wiLnNwbGl0KFwiIFwiKSxtZj1uZXcgU2V0KFwiY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgdG9nZ2xlXCIuc3BsaXQoXCIgXCIpLmNvbmNhdChsZikpO1xuZnVuY3Rpb24gbmYoYSxiLGMpe3ZhciBkPWEudHlwZXx8XCJ1bmtub3duLWV2ZW50XCI7YS5jdXJyZW50VGFyZ2V0PWM7VWIoZCxiLHZvaWQgMCxhKTthLmN1cnJlbnRUYXJnZXQ9bnVsbH1cbmZ1bmN0aW9uIHNlKGEsYil7Yj0wIT09KGImNCk7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWFbY10sZT1kLmV2ZW50O2Q9ZC5saXN0ZW5lcnM7YTp7dmFyIGY9dm9pZCAwO2lmKGIpZm9yKHZhciBnPWQubGVuZ3RoLTE7MDw9ZztnLS0pe3ZhciBoPWRbZ10saz1oLmluc3RhbmNlLGw9aC5jdXJyZW50VGFyZ2V0O2g9aC5saXN0ZW5lcjtpZihrIT09ZiYmZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGE7bmYoZSxoLGwpO2Y9a31lbHNlIGZvcihnPTA7ZzxkLmxlbmd0aDtnKyspe2g9ZFtnXTtrPWguaW5zdGFuY2U7bD1oLmN1cnJlbnRUYXJnZXQ7aD1oLmxpc3RlbmVyO2lmKGshPT1mJiZlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgYTtuZihlLGgsbCk7Zj1rfX19aWYoUWIpdGhyb3cgYT1SYixRYj0hMSxSYj1udWxsLGE7fVxuZnVuY3Rpb24gRChhLGIpe3ZhciBjPWJbb2ZdO3ZvaWQgMD09PWMmJihjPWJbb2ZdPW5ldyBTZXQpO3ZhciBkPWErXCJfX2J1YmJsZVwiO2MuaGFzKGQpfHwocGYoYixhLDIsITEpLGMuYWRkKGQpKX1mdW5jdGlvbiBxZihhLGIsYyl7dmFyIGQ9MDtiJiYoZHw9NCk7cGYoYyxhLGQsYil9dmFyIHJmPVwiX3JlYWN0TGlzdGVuaW5nXCIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7ZnVuY3Rpb24gc2YoYSl7aWYoIWFbcmZdKXthW3JmXT0hMDtkYS5mb3JFYWNoKGZ1bmN0aW9uKGIpe1wic2VsZWN0aW9uY2hhbmdlXCIhPT1iJiYobWYuaGFzKGIpfHxxZihiLCExLGEpLHFmKGIsITAsYSkpfSk7dmFyIGI9OT09PWEubm9kZVR5cGU/YTphLm93bmVyRG9jdW1lbnQ7bnVsbD09PWJ8fGJbcmZdfHwoYltyZl09ITAscWYoXCJzZWxlY3Rpb25jaGFuZ2VcIiwhMSxiKSl9fVxuZnVuY3Rpb24gcGYoYSxiLGMsZCl7c3dpdGNoKGpkKGIpKXtjYXNlIDE6dmFyIGU9ZWQ7YnJlYWs7Y2FzZSA0OmU9Z2Q7YnJlYWs7ZGVmYXVsdDplPWZkfWM9ZS5iaW5kKG51bGwsYixjLGEpO2U9dm9pZCAwOyFMYnx8XCJ0b3VjaHN0YXJ0XCIhPT1iJiZcInRvdWNobW92ZVwiIT09YiYmXCJ3aGVlbFwiIT09Ynx8KGU9ITApO2Q/dm9pZCAwIT09ZT9hLmFkZEV2ZW50TGlzdGVuZXIoYixjLHtjYXB0dXJlOiEwLHBhc3NpdmU6ZX0pOmEuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITApOnZvaWQgMCE9PWU/YS5hZGRFdmVudExpc3RlbmVyKGIsYyx7cGFzc2l2ZTplfSk6YS5hZGRFdmVudExpc3RlbmVyKGIsYywhMSl9XG5mdW5jdGlvbiBoZChhLGIsYyxkLGUpe3ZhciBmPWQ7aWYoMD09PShiJjEpJiYwPT09KGImMikmJm51bGwhPT1kKWE6Zm9yKDs7KXtpZihudWxsPT09ZClyZXR1cm47dmFyIGc9ZC50YWc7aWYoMz09PWd8fDQ9PT1nKXt2YXIgaD1kLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2lmKGg9PT1lfHw4PT09aC5ub2RlVHlwZSYmaC5wYXJlbnROb2RlPT09ZSlicmVhaztpZig0PT09Zylmb3IoZz1kLnJldHVybjtudWxsIT09Zzspe3ZhciBrPWcudGFnO2lmKDM9PT1rfHw0PT09aylpZihrPWcuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8saz09PWV8fDg9PT1rLm5vZGVUeXBlJiZrLnBhcmVudE5vZGU9PT1lKXJldHVybjtnPWcucmV0dXJufWZvcig7bnVsbCE9PWg7KXtnPVdjKGgpO2lmKG51bGw9PT1nKXJldHVybjtrPWcudGFnO2lmKDU9PT1rfHw2PT09ayl7ZD1mPWc7Y29udGludWUgYX1oPWgucGFyZW50Tm9kZX19ZD1kLnJldHVybn1KYihmdW5jdGlvbigpe3ZhciBkPWYsZT14YihjKSxnPVtdO1xuYTp7dmFyIGg9ZGYuZ2V0KGEpO2lmKHZvaWQgMCE9PWgpe3ZhciBrPXRkLG49YTtzd2l0Y2goYSl7Y2FzZSBcImtleXByZXNzXCI6aWYoMD09PW9kKGMpKWJyZWFrIGE7Y2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5dXBcIjprPVJkO2JyZWFrO2Nhc2UgXCJmb2N1c2luXCI6bj1cImZvY3VzXCI7az1GZDticmVhaztjYXNlIFwiZm9jdXNvdXRcIjpuPVwiYmx1clwiO2s9RmQ7YnJlYWs7Y2FzZSBcImJlZm9yZWJsdXJcIjpjYXNlIFwiYWZ0ZXJibHVyXCI6az1GZDticmVhaztjYXNlIFwiY2xpY2tcIjppZigyPT09Yy5idXR0b24pYnJlYWsgYTtjYXNlIFwiYXV4Y2xpY2tcIjpjYXNlIFwiZGJsY2xpY2tcIjpjYXNlIFwibW91c2Vkb3duXCI6Y2FzZSBcIm1vdXNlbW92ZVwiOmNhc2UgXCJtb3VzZXVwXCI6Y2FzZSBcIm1vdXNlb3V0XCI6Y2FzZSBcIm1vdXNlb3ZlclwiOmNhc2UgXCJjb250ZXh0bWVudVwiOms9QmQ7YnJlYWs7Y2FzZSBcImRyYWdcIjpjYXNlIFwiZHJhZ2VuZFwiOmNhc2UgXCJkcmFnZW50ZXJcIjpjYXNlIFwiZHJhZ2V4aXRcIjpjYXNlIFwiZHJhZ2xlYXZlXCI6Y2FzZSBcImRyYWdvdmVyXCI6Y2FzZSBcImRyYWdzdGFydFwiOmNhc2UgXCJkcm9wXCI6az1cbkRkO2JyZWFrO2Nhc2UgXCJ0b3VjaGNhbmNlbFwiOmNhc2UgXCJ0b3VjaGVuZFwiOmNhc2UgXCJ0b3VjaG1vdmVcIjpjYXNlIFwidG91Y2hzdGFydFwiOms9VmQ7YnJlYWs7Y2FzZSAkZTpjYXNlIGFmOmNhc2UgYmY6az1IZDticmVhaztjYXNlIGNmOms9WGQ7YnJlYWs7Y2FzZSBcInNjcm9sbFwiOms9dmQ7YnJlYWs7Y2FzZSBcIndoZWVsXCI6az1aZDticmVhaztjYXNlIFwiY29weVwiOmNhc2UgXCJjdXRcIjpjYXNlIFwicGFzdGVcIjprPUpkO2JyZWFrO2Nhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpjYXNlIFwicG9pbnRlcmNhbmNlbFwiOmNhc2UgXCJwb2ludGVyZG93blwiOmNhc2UgXCJwb2ludGVybW92ZVwiOmNhc2UgXCJwb2ludGVyb3V0XCI6Y2FzZSBcInBvaW50ZXJvdmVyXCI6Y2FzZSBcInBvaW50ZXJ1cFwiOms9VGR9dmFyIHQ9MCE9PShiJjQpLEo9IXQmJlwic2Nyb2xsXCI9PT1hLHg9dD9udWxsIT09aD9oK1wiQ2FwdHVyZVwiOm51bGw6aDt0PVtdO2Zvcih2YXIgdz1kLHU7bnVsbCE9PVxudzspe3U9dzt2YXIgRj11LnN0YXRlTm9kZTs1PT09dS50YWcmJm51bGwhPT1GJiYodT1GLG51bGwhPT14JiYoRj1LYih3LHgpLG51bGwhPUYmJnQucHVzaCh0Zih3LEYsdSkpKSk7aWYoSilicmVhazt3PXcucmV0dXJufTA8dC5sZW5ndGgmJihoPW5ldyBrKGgsbixudWxsLGMsZSksZy5wdXNoKHtldmVudDpoLGxpc3RlbmVyczp0fSkpfX1pZigwPT09KGImNykpe2E6e2g9XCJtb3VzZW92ZXJcIj09PWF8fFwicG9pbnRlcm92ZXJcIj09PWE7az1cIm1vdXNlb3V0XCI9PT1hfHxcInBvaW50ZXJvdXRcIj09PWE7aWYoaCYmYyE9PXdiJiYobj1jLnJlbGF0ZWRUYXJnZXR8fGMuZnJvbUVsZW1lbnQpJiYoV2Mobil8fG5bdWZdKSlicmVhayBhO2lmKGt8fGgpe2g9ZS53aW5kb3c9PT1lP2U6KGg9ZS5vd25lckRvY3VtZW50KT9oLmRlZmF1bHRWaWV3fHxoLnBhcmVudFdpbmRvdzp3aW5kb3c7aWYoayl7aWYobj1jLnJlbGF0ZWRUYXJnZXR8fGMudG9FbGVtZW50LGs9ZCxuPW4/V2Mobik6bnVsbCxudWxsIT09XG5uJiYoSj1WYihuKSxuIT09Snx8NSE9PW4udGFnJiY2IT09bi50YWcpKW49bnVsbH1lbHNlIGs9bnVsbCxuPWQ7aWYoayE9PW4pe3Q9QmQ7Rj1cIm9uTW91c2VMZWF2ZVwiO3g9XCJvbk1vdXNlRW50ZXJcIjt3PVwibW91c2VcIjtpZihcInBvaW50ZXJvdXRcIj09PWF8fFwicG9pbnRlcm92ZXJcIj09PWEpdD1UZCxGPVwib25Qb2ludGVyTGVhdmVcIix4PVwib25Qb2ludGVyRW50ZXJcIix3PVwicG9pbnRlclwiO0o9bnVsbD09az9oOnVlKGspO3U9bnVsbD09bj9oOnVlKG4pO2g9bmV3IHQoRix3K1wibGVhdmVcIixrLGMsZSk7aC50YXJnZXQ9SjtoLnJlbGF0ZWRUYXJnZXQ9dTtGPW51bGw7V2MoZSk9PT1kJiYodD1uZXcgdCh4LHcrXCJlbnRlclwiLG4sYyxlKSx0LnRhcmdldD11LHQucmVsYXRlZFRhcmdldD1KLEY9dCk7Sj1GO2lmKGsmJm4pYjp7dD1rO3g9bjt3PTA7Zm9yKHU9dDt1O3U9dmYodSkpdysrO3U9MDtmb3IoRj14O0Y7Rj12ZihGKSl1Kys7Zm9yKDswPHctdTspdD12Zih0KSx3LS07Zm9yKDswPHUtdzspeD1cbnZmKHgpLHUtLTtmb3IoO3ctLTspe2lmKHQ9PT14fHxudWxsIT09eCYmdD09PXguYWx0ZXJuYXRlKWJyZWFrIGI7dD12Zih0KTt4PXZmKHgpfXQ9bnVsbH1lbHNlIHQ9bnVsbDtudWxsIT09ayYmd2YoZyxoLGssdCwhMSk7bnVsbCE9PW4mJm51bGwhPT1KJiZ3ZihnLEosbix0LCEwKX19fWE6e2g9ZD91ZShkKTp3aW5kb3c7az1oLm5vZGVOYW1lJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoXCJzZWxlY3RcIj09PWt8fFwiaW5wdXRcIj09PWsmJlwiZmlsZVwiPT09aC50eXBlKXZhciBuYT12ZTtlbHNlIGlmKG1lKGgpKWlmKHdlKW5hPUZlO2Vsc2V7bmE9RGU7dmFyIHhhPUNlfWVsc2Uoaz1oLm5vZGVOYW1lKSYmXCJpbnB1dFwiPT09ay50b0xvd2VyQ2FzZSgpJiYoXCJjaGVja2JveFwiPT09aC50eXBlfHxcInJhZGlvXCI9PT1oLnR5cGUpJiYobmE9RWUpO2lmKG5hJiYobmE9bmEoYSxkKSkpe25lKGcsbmEsYyxlKTticmVhayBhfXhhJiZ4YShhLGgsZCk7XCJmb2N1c291dFwiPT09YSYmKHhhPWguX3dyYXBwZXJTdGF0ZSkmJlxueGEuY29udHJvbGxlZCYmXCJudW1iZXJcIj09PWgudHlwZSYmY2IoaCxcIm51bWJlclwiLGgudmFsdWUpfXhhPWQ/dWUoZCk6d2luZG93O3N3aXRjaChhKXtjYXNlIFwiZm9jdXNpblwiOmlmKG1lKHhhKXx8XCJ0cnVlXCI9PT14YS5jb250ZW50RWRpdGFibGUpUWU9eGEsUmU9ZCxTZT1udWxsO2JyZWFrO2Nhc2UgXCJmb2N1c291dFwiOlNlPVJlPVFlPW51bGw7YnJlYWs7Y2FzZSBcIm1vdXNlZG93blwiOlRlPSEwO2JyZWFrO2Nhc2UgXCJjb250ZXh0bWVudVwiOmNhc2UgXCJtb3VzZXVwXCI6Y2FzZSBcImRyYWdlbmRcIjpUZT0hMTtVZShnLGMsZSk7YnJlYWs7Y2FzZSBcInNlbGVjdGlvbmNoYW5nZVwiOmlmKFBlKWJyZWFrO2Nhc2UgXCJrZXlkb3duXCI6Y2FzZSBcImtleXVwXCI6VWUoZyxjLGUpfXZhciAkYTtpZihhZSliOntzd2l0Y2goYSl7Y2FzZSBcImNvbXBvc2l0aW9uc3RhcnRcIjp2YXIgYmE9XCJvbkNvbXBvc2l0aW9uU3RhcnRcIjticmVhayBiO2Nhc2UgXCJjb21wb3NpdGlvbmVuZFwiOmJhPVwib25Db21wb3NpdGlvbkVuZFwiO1xuYnJlYWsgYjtjYXNlIFwiY29tcG9zaXRpb251cGRhdGVcIjpiYT1cIm9uQ29tcG9zaXRpb25VcGRhdGVcIjticmVhayBifWJhPXZvaWQgMH1lbHNlIGllP2dlKGEsYykmJihiYT1cIm9uQ29tcG9zaXRpb25FbmRcIik6XCJrZXlkb3duXCI9PT1hJiYyMjk9PT1jLmtleUNvZGUmJihiYT1cIm9uQ29tcG9zaXRpb25TdGFydFwiKTtiYSYmKGRlJiZcImtvXCIhPT1jLmxvY2FsZSYmKGllfHxcIm9uQ29tcG9zaXRpb25TdGFydFwiIT09YmE/XCJvbkNvbXBvc2l0aW9uRW5kXCI9PT1iYSYmaWUmJigkYT1uZCgpKTooa2Q9ZSxsZD1cInZhbHVlXCJpbiBrZD9rZC52YWx1ZTprZC50ZXh0Q29udGVudCxpZT0hMCkpLHhhPW9lKGQsYmEpLDA8eGEubGVuZ3RoJiYoYmE9bmV3IExkKGJhLGEsbnVsbCxjLGUpLGcucHVzaCh7ZXZlbnQ6YmEsbGlzdGVuZXJzOnhhfSksJGE/YmEuZGF0YT0kYTooJGE9aGUoYyksbnVsbCE9PSRhJiYoYmEuZGF0YT0kYSkpKSk7aWYoJGE9Y2U/amUoYSxjKTprZShhLGMpKWQ9b2UoZCxcIm9uQmVmb3JlSW5wdXRcIiksXG4wPGQubGVuZ3RoJiYoZT1uZXcgTGQoXCJvbkJlZm9yZUlucHV0XCIsXCJiZWZvcmVpbnB1dFwiLG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OmUsbGlzdGVuZXJzOmR9KSxlLmRhdGE9JGEpfXNlKGcsYil9KX1mdW5jdGlvbiB0ZihhLGIsYyl7cmV0dXJue2luc3RhbmNlOmEsbGlzdGVuZXI6YixjdXJyZW50VGFyZ2V0OmN9fWZ1bmN0aW9uIG9lKGEsYil7Zm9yKHZhciBjPWIrXCJDYXB0dXJlXCIsZD1bXTtudWxsIT09YTspe3ZhciBlPWEsZj1lLnN0YXRlTm9kZTs1PT09ZS50YWcmJm51bGwhPT1mJiYoZT1mLGY9S2IoYSxjKSxudWxsIT1mJiZkLnVuc2hpZnQodGYoYSxmLGUpKSxmPUtiKGEsYiksbnVsbCE9ZiYmZC5wdXNoKHRmKGEsZixlKSkpO2E9YS5yZXR1cm59cmV0dXJuIGR9ZnVuY3Rpb24gdmYoYSl7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7ZG8gYT1hLnJldHVybjt3aGlsZShhJiY1IT09YS50YWcpO3JldHVybiBhP2E6bnVsbH1cbmZ1bmN0aW9uIHdmKGEsYixjLGQsZSl7Zm9yKHZhciBmPWIuX3JlYWN0TmFtZSxnPVtdO251bGwhPT1jJiZjIT09ZDspe3ZhciBoPWMsaz1oLmFsdGVybmF0ZSxsPWguc3RhdGVOb2RlO2lmKG51bGwhPT1rJiZrPT09ZClicmVhazs1PT09aC50YWcmJm51bGwhPT1sJiYoaD1sLGU/KGs9S2IoYyxmKSxudWxsIT1rJiZnLnVuc2hpZnQodGYoYyxrLGgpKSk6ZXx8KGs9S2IoYyxmKSxudWxsIT1rJiZnLnB1c2godGYoYyxrLGgpKSkpO2M9Yy5yZXR1cm59MCE9PWcubGVuZ3RoJiZhLnB1c2goe2V2ZW50OmIsbGlzdGVuZXJzOmd9KX12YXIgeGY9L1xcclxcbj8vZyx5Zj0vXFx1MDAwMHxcXHVGRkZEL2c7ZnVuY3Rpb24gemYoYSl7cmV0dXJuKFwic3RyaW5nXCI9PT10eXBlb2YgYT9hOlwiXCIrYSkucmVwbGFjZSh4ZixcIlxcblwiKS5yZXBsYWNlKHlmLFwiXCIpfWZ1bmN0aW9uIEFmKGEsYixjKXtiPXpmKGIpO2lmKHpmKGEpIT09YiYmYyl0aHJvdyBFcnJvcihwKDQyNSkpO31mdW5jdGlvbiBCZigpe31cbnZhciBDZj1udWxsLERmPW51bGw7ZnVuY3Rpb24gRWYoYSxiKXtyZXR1cm5cInRleHRhcmVhXCI9PT1hfHxcIm5vc2NyaXB0XCI9PT1hfHxcInN0cmluZ1wiPT09dHlwZW9mIGIuY2hpbGRyZW58fFwibnVtYmVyXCI9PT10eXBlb2YgYi5jaGlsZHJlbnx8XCJvYmplY3RcIj09PXR5cGVvZiBiLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZudWxsIT09Yi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9Yi5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWx9XG52YXIgRmY9XCJmdW5jdGlvblwiPT09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDp2b2lkIDAsR2Y9XCJmdW5jdGlvblwiPT09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6dm9pZCAwLEhmPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBQcm9taXNlP1Byb21pc2U6dm9pZCAwLEpmPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBxdWV1ZU1pY3JvdGFzaz9xdWV1ZU1pY3JvdGFzazpcInVuZGVmaW5lZFwiIT09dHlwZW9mIEhmP2Z1bmN0aW9uKGEpe3JldHVybiBIZi5yZXNvbHZlKG51bGwpLnRoZW4oYSkuY2F0Y2goSWYpfTpGZjtmdW5jdGlvbiBJZihhKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgYTt9KX1cbmZ1bmN0aW9uIEtmKGEsYil7dmFyIGM9YixkPTA7ZG97dmFyIGU9Yy5uZXh0U2libGluZzthLnJlbW92ZUNoaWxkKGMpO2lmKGUmJjg9PT1lLm5vZGVUeXBlKWlmKGM9ZS5kYXRhLFwiLyRcIj09PWMpe2lmKDA9PT1kKXthLnJlbW92ZUNoaWxkKGUpO2JkKGIpO3JldHVybn1kLS19ZWxzZVwiJFwiIT09YyYmXCIkP1wiIT09YyYmXCIkIVwiIT09Y3x8ZCsrO2M9ZX13aGlsZShjKTtiZChiKX1mdW5jdGlvbiBMZihhKXtmb3IoO251bGwhPWE7YT1hLm5leHRTaWJsaW5nKXt2YXIgYj1hLm5vZGVUeXBlO2lmKDE9PT1ifHwzPT09YilicmVhaztpZig4PT09Yil7Yj1hLmRhdGE7aWYoXCIkXCI9PT1ifHxcIiQhXCI9PT1ifHxcIiQ/XCI9PT1iKWJyZWFrO2lmKFwiLyRcIj09PWIpcmV0dXJuIG51bGx9fXJldHVybiBhfVxuZnVuY3Rpb24gTWYoYSl7YT1hLnByZXZpb3VzU2libGluZztmb3IodmFyIGI9MDthOyl7aWYoOD09PWEubm9kZVR5cGUpe3ZhciBjPWEuZGF0YTtpZihcIiRcIj09PWN8fFwiJCFcIj09PWN8fFwiJD9cIj09PWMpe2lmKDA9PT1iKXJldHVybiBhO2ItLX1lbHNlXCIvJFwiPT09YyYmYisrfWE9YS5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9dmFyIE5mPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLE9mPVwiX19yZWFjdEZpYmVyJFwiK05mLFBmPVwiX19yZWFjdFByb3BzJFwiK05mLHVmPVwiX19yZWFjdENvbnRhaW5lciRcIitOZixvZj1cIl9fcmVhY3RFdmVudHMkXCIrTmYsUWY9XCJfX3JlYWN0TGlzdGVuZXJzJFwiK05mLFJmPVwiX19yZWFjdEhhbmRsZXMkXCIrTmY7XG5mdW5jdGlvbiBXYyhhKXt2YXIgYj1hW09mXTtpZihiKXJldHVybiBiO2Zvcih2YXIgYz1hLnBhcmVudE5vZGU7Yzspe2lmKGI9Y1t1Zl18fGNbT2ZdKXtjPWIuYWx0ZXJuYXRlO2lmKG51bGwhPT1iLmNoaWxkfHxudWxsIT09YyYmbnVsbCE9PWMuY2hpbGQpZm9yKGE9TWYoYSk7bnVsbCE9PWE7KXtpZihjPWFbT2ZdKXJldHVybiBjO2E9TWYoYSl9cmV0dXJuIGJ9YT1jO2M9YS5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIENiKGEpe2E9YVtPZl18fGFbdWZdO3JldHVybiFhfHw1IT09YS50YWcmJjYhPT1hLnRhZyYmMTMhPT1hLnRhZyYmMyE9PWEudGFnP251bGw6YX1mdW5jdGlvbiB1ZShhKXtpZig1PT09YS50YWd8fDY9PT1hLnRhZylyZXR1cm4gYS5zdGF0ZU5vZGU7dGhyb3cgRXJyb3IocCgzMykpO31mdW5jdGlvbiBEYihhKXtyZXR1cm4gYVtQZl18fG51bGx9dmFyIFNmPVtdLFRmPS0xO2Z1bmN0aW9uIFVmKGEpe3JldHVybntjdXJyZW50OmF9fVxuZnVuY3Rpb24gRShhKXswPlRmfHwoYS5jdXJyZW50PVNmW1RmXSxTZltUZl09bnVsbCxUZi0tKX1mdW5jdGlvbiBHKGEsYil7VGYrKztTZltUZl09YS5jdXJyZW50O2EuY3VycmVudD1ifXZhciBWZj17fSxIPVVmKFZmKSxXZj1VZighMSksWGY9VmY7ZnVuY3Rpb24gWWYoYSxiKXt2YXIgYz1hLnR5cGUuY29udGV4dFR5cGVzO2lmKCFjKXJldHVybiBWZjt2YXIgZD1hLnN0YXRlTm9kZTtpZihkJiZkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9PT1iKXJldHVybiBkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O3ZhciBlPXt9LGY7Zm9yKGYgaW4gYyllW2ZdPWJbZl07ZCYmKGE9YS5zdGF0ZU5vZGUsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PWIsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1lKTtyZXR1cm4gZX1cbmZ1bmN0aW9uIFpmKGEpe2E9YS5jaGlsZENvbnRleHRUeXBlcztyZXR1cm4gbnVsbCE9PWEmJnZvaWQgMCE9PWF9ZnVuY3Rpb24gJGYoKXtFKFdmKTtFKEgpfWZ1bmN0aW9uIGFnKGEsYixjKXtpZihILmN1cnJlbnQhPT1WZil0aHJvdyBFcnJvcihwKDE2OCkpO0coSCxiKTtHKFdmLGMpfWZ1bmN0aW9uIGJnKGEsYixjKXt2YXIgZD1hLnN0YXRlTm9kZTtiPWIuY2hpbGRDb250ZXh0VHlwZXM7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGQuZ2V0Q2hpbGRDb250ZXh0KXJldHVybiBjO2Q9ZC5nZXRDaGlsZENvbnRleHQoKTtmb3IodmFyIGUgaW4gZClpZighKGUgaW4gYikpdGhyb3cgRXJyb3IocCgxMDgsUmEoYSl8fFwiVW5rbm93blwiLGUpKTtyZXR1cm4gQSh7fSxjLGQpfVxuZnVuY3Rpb24gY2coYSl7YT0oYT1hLnN0YXRlTm9kZSkmJmEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHR8fFZmO1hmPUguY3VycmVudDtHKEgsYSk7RyhXZixXZi5jdXJyZW50KTtyZXR1cm4hMH1mdW5jdGlvbiBkZyhhLGIsYyl7dmFyIGQ9YS5zdGF0ZU5vZGU7aWYoIWQpdGhyb3cgRXJyb3IocCgxNjkpKTtjPyhhPWJnKGEsYixYZiksZC5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dD1hLEUoV2YpLEUoSCksRyhILGEpKTpFKFdmKTtHKFdmLGMpfXZhciBlZz1udWxsLGZnPSExLGdnPSExO2Z1bmN0aW9uIGhnKGEpe251bGw9PT1lZz9lZz1bYV06ZWcucHVzaChhKX1mdW5jdGlvbiBpZyhhKXtmZz0hMDtoZyhhKX1cbmZ1bmN0aW9uIGpnKCl7aWYoIWdnJiZudWxsIT09ZWcpe2dnPSEwO3ZhciBhPTAsYj1DO3RyeXt2YXIgYz1lZztmb3IoQz0xO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZD1jW2FdO2RvIGQ9ZCghMCk7d2hpbGUobnVsbCE9PWQpfWVnPW51bGw7Zmc9ITF9Y2F0Y2goZSl7dGhyb3cgbnVsbCE9PWVnJiYoZWc9ZWcuc2xpY2UoYSsxKSksYWMoZmMsamcpLGU7fWZpbmFsbHl7Qz1iLGdnPSExfX1yZXR1cm4gbnVsbH12YXIga2c9W10sbGc9MCxtZz1udWxsLG5nPTAsb2c9W10scGc9MCxxZz1udWxsLHJnPTEsc2c9XCJcIjtmdW5jdGlvbiB0ZyhhLGIpe2tnW2xnKytdPW5nO2tnW2xnKytdPW1nO21nPWE7bmc9Yn1cbmZ1bmN0aW9uIHVnKGEsYixjKXtvZ1twZysrXT1yZztvZ1twZysrXT1zZztvZ1twZysrXT1xZztxZz1hO3ZhciBkPXJnO2E9c2c7dmFyIGU9MzItb2MoZCktMTtkJj1+KDE8PGUpO2MrPTE7dmFyIGY9MzItb2MoYikrZTtpZigzMDxmKXt2YXIgZz1lLWUlNTtmPShkJigxPDxnKS0xKS50b1N0cmluZygzMik7ZD4+PWc7ZS09ZztyZz0xPDwzMi1vYyhiKStlfGM8PGV8ZDtzZz1mK2F9ZWxzZSByZz0xPDxmfGM8PGV8ZCxzZz1hfWZ1bmN0aW9uIHZnKGEpe251bGwhPT1hLnJldHVybiYmKHRnKGEsMSksdWcoYSwxLDApKX1mdW5jdGlvbiB3ZyhhKXtmb3IoO2E9PT1tZzspbWc9a2dbLS1sZ10sa2dbbGddPW51bGwsbmc9a2dbLS1sZ10sa2dbbGddPW51bGw7Zm9yKDthPT09cWc7KXFnPW9nWy0tcGddLG9nW3BnXT1udWxsLHNnPW9nWy0tcGddLG9nW3BnXT1udWxsLHJnPW9nWy0tcGddLG9nW3BnXT1udWxsfXZhciB4Zz1udWxsLHlnPW51bGwsST0hMSx6Zz1udWxsO1xuZnVuY3Rpb24gQWcoYSxiKXt2YXIgYz1CZyg1LG51bGwsbnVsbCwwKTtjLmVsZW1lbnRUeXBlPVwiREVMRVRFRFwiO2Muc3RhdGVOb2RlPWI7Yy5yZXR1cm49YTtiPWEuZGVsZXRpb25zO251bGw9PT1iPyhhLmRlbGV0aW9ucz1bY10sYS5mbGFnc3w9MTYpOmIucHVzaChjKX1cbmZ1bmN0aW9uIENnKGEsYil7c3dpdGNoKGEudGFnKXtjYXNlIDU6dmFyIGM9YS50eXBlO2I9MSE9PWIubm9kZVR5cGV8fGMudG9Mb3dlckNhc2UoKSE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9udWxsOmI7cmV0dXJuIG51bGwhPT1iPyhhLnN0YXRlTm9kZT1iLHhnPWEseWc9TGYoYi5maXJzdENoaWxkKSwhMCk6ITE7Y2FzZSA2OnJldHVybiBiPVwiXCI9PT1hLnBlbmRpbmdQcm9wc3x8MyE9PWIubm9kZVR5cGU/bnVsbDpiLG51bGwhPT1iPyhhLnN0YXRlTm9kZT1iLHhnPWEseWc9bnVsbCwhMCk6ITE7Y2FzZSAxMzpyZXR1cm4gYj04IT09Yi5ub2RlVHlwZT9udWxsOmIsbnVsbCE9PWI/KGM9bnVsbCE9PXFnP3tpZDpyZyxvdmVyZmxvdzpzZ306bnVsbCxhLm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6Yix0cmVlQ29udGV4dDpjLHJldHJ5TGFuZToxMDczNzQxODI0fSxjPUJnKDE4LG51bGwsbnVsbCwwKSxjLnN0YXRlTm9kZT1iLGMucmV0dXJuPWEsYS5jaGlsZD1jLHhnPWEseWc9XG5udWxsLCEwKTohMTtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBEZyhhKXtyZXR1cm4gMCE9PShhLm1vZGUmMSkmJjA9PT0oYS5mbGFncyYxMjgpfWZ1bmN0aW9uIEVnKGEpe2lmKEkpe3ZhciBiPXlnO2lmKGIpe3ZhciBjPWI7aWYoIUNnKGEsYikpe2lmKERnKGEpKXRocm93IEVycm9yKHAoNDE4KSk7Yj1MZihjLm5leHRTaWJsaW5nKTt2YXIgZD14ZztiJiZDZyhhLGIpP0FnKGQsYyk6KGEuZmxhZ3M9YS5mbGFncyYtNDA5N3wyLEk9ITEseGc9YSl9fWVsc2V7aWYoRGcoYSkpdGhyb3cgRXJyb3IocCg0MTgpKTthLmZsYWdzPWEuZmxhZ3MmLTQwOTd8MjtJPSExO3hnPWF9fX1mdW5jdGlvbiBGZyhhKXtmb3IoYT1hLnJldHVybjtudWxsIT09YSYmNSE9PWEudGFnJiYzIT09YS50YWcmJjEzIT09YS50YWc7KWE9YS5yZXR1cm47eGc9YX1cbmZ1bmN0aW9uIEdnKGEpe2lmKGEhPT14ZylyZXR1cm4hMTtpZighSSlyZXR1cm4gRmcoYSksST0hMCwhMTt2YXIgYjsoYj0zIT09YS50YWcpJiYhKGI9NSE9PWEudGFnKSYmKGI9YS50eXBlLGI9XCJoZWFkXCIhPT1iJiZcImJvZHlcIiE9PWImJiFFZihhLnR5cGUsYS5tZW1vaXplZFByb3BzKSk7aWYoYiYmKGI9eWcpKXtpZihEZyhhKSl0aHJvdyBIZygpLEVycm9yKHAoNDE4KSk7Zm9yKDtiOylBZyhhLGIpLGI9TGYoYi5uZXh0U2libGluZyl9RmcoYSk7aWYoMTM9PT1hLnRhZyl7YT1hLm1lbW9pemVkU3RhdGU7YT1udWxsIT09YT9hLmRlaHlkcmF0ZWQ6bnVsbDtpZighYSl0aHJvdyBFcnJvcihwKDMxNykpO2E6e2E9YS5uZXh0U2libGluZztmb3IoYj0wO2E7KXtpZig4PT09YS5ub2RlVHlwZSl7dmFyIGM9YS5kYXRhO2lmKFwiLyRcIj09PWMpe2lmKDA9PT1iKXt5Zz1MZihhLm5leHRTaWJsaW5nKTticmVhayBhfWItLX1lbHNlXCIkXCIhPT1jJiZcIiQhXCIhPT1jJiZcIiQ/XCIhPT1jfHxiKyt9YT1hLm5leHRTaWJsaW5nfXlnPVxubnVsbH19ZWxzZSB5Zz14Zz9MZihhLnN0YXRlTm9kZS5uZXh0U2libGluZyk6bnVsbDtyZXR1cm4hMH1mdW5jdGlvbiBIZygpe2Zvcih2YXIgYT15ZzthOylhPUxmKGEubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIElnKCl7eWc9eGc9bnVsbDtJPSExfWZ1bmN0aW9uIEpnKGEpe251bGw9PT16Zz96Zz1bYV06emcucHVzaChhKX12YXIgS2c9dWEuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7ZnVuY3Rpb24gTGcoYSxiKXtpZihhJiZhLmRlZmF1bHRQcm9wcyl7Yj1BKHt9LGIpO2E9YS5kZWZhdWx0UHJvcHM7Zm9yKHZhciBjIGluIGEpdm9pZCAwPT09YltjXSYmKGJbY109YVtjXSk7cmV0dXJuIGJ9cmV0dXJuIGJ9dmFyIE1nPVVmKG51bGwpLE5nPW51bGwsT2c9bnVsbCxQZz1udWxsO2Z1bmN0aW9uIFFnKCl7UGc9T2c9Tmc9bnVsbH1mdW5jdGlvbiBSZyhhKXt2YXIgYj1NZy5jdXJyZW50O0UoTWcpO2EuX2N1cnJlbnRWYWx1ZT1ifVxuZnVuY3Rpb24gU2coYSxiLGMpe2Zvcig7bnVsbCE9PWE7KXt2YXIgZD1hLmFsdGVybmF0ZTsoYS5jaGlsZExhbmVzJmIpIT09Yj8oYS5jaGlsZExhbmVzfD1iLG51bGwhPT1kJiYoZC5jaGlsZExhbmVzfD1iKSk6bnVsbCE9PWQmJihkLmNoaWxkTGFuZXMmYikhPT1iJiYoZC5jaGlsZExhbmVzfD1iKTtpZihhPT09YylicmVhazthPWEucmV0dXJufX1mdW5jdGlvbiBUZyhhLGIpe05nPWE7UGc9T2c9bnVsbDthPWEuZGVwZW5kZW5jaWVzO251bGwhPT1hJiZudWxsIT09YS5maXJzdENvbnRleHQmJigwIT09KGEubGFuZXMmYikmJihVZz0hMCksYS5maXJzdENvbnRleHQ9bnVsbCl9XG5mdW5jdGlvbiBWZyhhKXt2YXIgYj1hLl9jdXJyZW50VmFsdWU7aWYoUGchPT1hKWlmKGE9e2NvbnRleHQ6YSxtZW1vaXplZFZhbHVlOmIsbmV4dDpudWxsfSxudWxsPT09T2cpe2lmKG51bGw9PT1OZyl0aHJvdyBFcnJvcihwKDMwOCkpO09nPWE7TmcuZGVwZW5kZW5jaWVzPXtsYW5lczowLGZpcnN0Q29udGV4dDphfX1lbHNlIE9nPU9nLm5leHQ9YTtyZXR1cm4gYn12YXIgV2c9bnVsbDtmdW5jdGlvbiBYZyhhKXtudWxsPT09V2c/V2c9W2FdOldnLnB1c2goYSl9ZnVuY3Rpb24gWWcoYSxiLGMsZCl7dmFyIGU9Yi5pbnRlcmxlYXZlZDtudWxsPT09ZT8oYy5uZXh0PWMsWGcoYikpOihjLm5leHQ9ZS5uZXh0LGUubmV4dD1jKTtiLmludGVybGVhdmVkPWM7cmV0dXJuIFpnKGEsZCl9XG5mdW5jdGlvbiBaZyhhLGIpe2EubGFuZXN8PWI7dmFyIGM9YS5hbHRlcm5hdGU7bnVsbCE9PWMmJihjLmxhbmVzfD1iKTtjPWE7Zm9yKGE9YS5yZXR1cm47bnVsbCE9PWE7KWEuY2hpbGRMYW5lc3w9YixjPWEuYWx0ZXJuYXRlLG51bGwhPT1jJiYoYy5jaGlsZExhbmVzfD1iKSxjPWEsYT1hLnJldHVybjtyZXR1cm4gMz09PWMudGFnP2Muc3RhdGVOb2RlOm51bGx9dmFyICRnPSExO2Z1bmN0aW9uIGFoKGEpe2EudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTphLm1lbW9pemVkU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm51bGwsbGFzdEJhc2VVcGRhdGU6bnVsbCxzaGFyZWQ6e3BlbmRpbmc6bnVsbCxpbnRlcmxlYXZlZDpudWxsLGxhbmVzOjB9LGVmZmVjdHM6bnVsbH19XG5mdW5jdGlvbiBiaChhLGIpe2E9YS51cGRhdGVRdWV1ZTtiLnVwZGF0ZVF1ZXVlPT09YSYmKGIudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTphLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6YS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6YS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6YS5zaGFyZWQsZWZmZWN0czphLmVmZmVjdHN9KX1mdW5jdGlvbiBjaChhLGIpe3JldHVybntldmVudFRpbWU6YSxsYW5lOmIsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfX1cbmZ1bmN0aW9uIGRoKGEsYixjKXt2YXIgZD1hLnVwZGF0ZVF1ZXVlO2lmKG51bGw9PT1kKXJldHVybiBudWxsO2Q9ZC5zaGFyZWQ7aWYoMCE9PShLJjIpKXt2YXIgZT1kLnBlbmRpbmc7bnVsbD09PWU/Yi5uZXh0PWI6KGIubmV4dD1lLm5leHQsZS5uZXh0PWIpO2QucGVuZGluZz1iO3JldHVybiBaZyhhLGMpfWU9ZC5pbnRlcmxlYXZlZDtudWxsPT09ZT8oYi5uZXh0PWIsWGcoZCkpOihiLm5leHQ9ZS5uZXh0LGUubmV4dD1iKTtkLmludGVybGVhdmVkPWI7cmV0dXJuIFpnKGEsYyl9ZnVuY3Rpb24gZWgoYSxiLGMpe2I9Yi51cGRhdGVRdWV1ZTtpZihudWxsIT09YiYmKGI9Yi5zaGFyZWQsMCE9PShjJjQxOTQyNDApKSl7dmFyIGQ9Yi5sYW5lcztkJj1hLnBlbmRpbmdMYW5lcztjfD1kO2IubGFuZXM9YztDYyhhLGMpfX1cbmZ1bmN0aW9uIGZoKGEsYil7dmFyIGM9YS51cGRhdGVRdWV1ZSxkPWEuYWx0ZXJuYXRlO2lmKG51bGwhPT1kJiYoZD1kLnVwZGF0ZVF1ZXVlLGM9PT1kKSl7dmFyIGU9bnVsbCxmPW51bGw7Yz1jLmZpcnN0QmFzZVVwZGF0ZTtpZihudWxsIT09Yyl7ZG97dmFyIGc9e2V2ZW50VGltZTpjLmV2ZW50VGltZSxsYW5lOmMubGFuZSx0YWc6Yy50YWcscGF5bG9hZDpjLnBheWxvYWQsY2FsbGJhY2s6Yy5jYWxsYmFjayxuZXh0Om51bGx9O251bGw9PT1mP2U9Zj1nOmY9Zi5uZXh0PWc7Yz1jLm5leHR9d2hpbGUobnVsbCE9PWMpO251bGw9PT1mP2U9Zj1iOmY9Zi5uZXh0PWJ9ZWxzZSBlPWY9YjtjPXtiYXNlU3RhdGU6ZC5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmUsbGFzdEJhc2VVcGRhdGU6ZixzaGFyZWQ6ZC5zaGFyZWQsZWZmZWN0czpkLmVmZmVjdHN9O2EudXBkYXRlUXVldWU9YztyZXR1cm59YT1jLmxhc3RCYXNlVXBkYXRlO251bGw9PT1hP2MuZmlyc3RCYXNlVXBkYXRlPWI6YS5uZXh0PVxuYjtjLmxhc3RCYXNlVXBkYXRlPWJ9XG5mdW5jdGlvbiBnaChhLGIsYyxkKXt2YXIgZT1hLnVwZGF0ZVF1ZXVlOyRnPSExO3ZhciBmPWUuZmlyc3RCYXNlVXBkYXRlLGc9ZS5sYXN0QmFzZVVwZGF0ZSxoPWUuc2hhcmVkLnBlbmRpbmc7aWYobnVsbCE9PWgpe2Uuc2hhcmVkLnBlbmRpbmc9bnVsbDt2YXIgaz1oLGw9ay5uZXh0O2submV4dD1udWxsO251bGw9PT1nP2Y9bDpnLm5leHQ9bDtnPWs7dmFyIG09YS5hbHRlcm5hdGU7bnVsbCE9PW0mJihtPW0udXBkYXRlUXVldWUsaD1tLmxhc3RCYXNlVXBkYXRlLGghPT1nJiYobnVsbD09PWg/bS5maXJzdEJhc2VVcGRhdGU9bDpoLm5leHQ9bCxtLmxhc3RCYXNlVXBkYXRlPWspKX1pZihudWxsIT09Zil7dmFyIHE9ZS5iYXNlU3RhdGU7Zz0wO209bD1rPW51bGw7aD1mO2Rve3ZhciByPWgubGFuZSx5PWguZXZlbnRUaW1lO2lmKChkJnIpPT09cil7bnVsbCE9PW0mJihtPW0ubmV4dD17ZXZlbnRUaW1lOnksbGFuZTowLHRhZzpoLnRhZyxwYXlsb2FkOmgucGF5bG9hZCxjYWxsYmFjazpoLmNhbGxiYWNrLFxubmV4dDpudWxsfSk7YTp7dmFyIG49YSx0PWg7cj1iO3k9Yztzd2l0Y2godC50YWcpe2Nhc2UgMTpuPXQucGF5bG9hZDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2Ygbil7cT1uLmNhbGwoeSxxLHIpO2JyZWFrIGF9cT1uO2JyZWFrIGE7Y2FzZSAzOm4uZmxhZ3M9bi5mbGFncyYtNjU1Mzd8MTI4O2Nhc2UgMDpuPXQucGF5bG9hZDtyPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBuP24uY2FsbCh5LHEscik6bjtpZihudWxsPT09cnx8dm9pZCAwPT09cilicmVhayBhO3E9QSh7fSxxLHIpO2JyZWFrIGE7Y2FzZSAyOiRnPSEwfX1udWxsIT09aC5jYWxsYmFjayYmMCE9PWgubGFuZSYmKGEuZmxhZ3N8PTY0LHI9ZS5lZmZlY3RzLG51bGw9PT1yP2UuZWZmZWN0cz1baF06ci5wdXNoKGgpKX1lbHNlIHk9e2V2ZW50VGltZTp5LGxhbmU6cix0YWc6aC50YWcscGF5bG9hZDpoLnBheWxvYWQsY2FsbGJhY2s6aC5jYWxsYmFjayxuZXh0Om51bGx9LG51bGw9PT1tPyhsPW09eSxrPXEpOm09bS5uZXh0PXksZ3w9cjtcbmg9aC5uZXh0O2lmKG51bGw9PT1oKWlmKGg9ZS5zaGFyZWQucGVuZGluZyxudWxsPT09aClicmVhaztlbHNlIHI9aCxoPXIubmV4dCxyLm5leHQ9bnVsbCxlLmxhc3RCYXNlVXBkYXRlPXIsZS5zaGFyZWQucGVuZGluZz1udWxsfXdoaWxlKDEpO251bGw9PT1tJiYoaz1xKTtlLmJhc2VTdGF0ZT1rO2UuZmlyc3RCYXNlVXBkYXRlPWw7ZS5sYXN0QmFzZVVwZGF0ZT1tO2I9ZS5zaGFyZWQuaW50ZXJsZWF2ZWQ7aWYobnVsbCE9PWIpe2U9YjtkbyBnfD1lLmxhbmUsZT1lLm5leHQ7d2hpbGUoZSE9PWIpfWVsc2UgbnVsbD09PWYmJihlLnNoYXJlZC5sYW5lcz0wKTtoaHw9ZzthLmxhbmVzPWc7YS5tZW1vaXplZFN0YXRlPXF9fVxuZnVuY3Rpb24gaWgoYSxiLGMpe2E9Yi5lZmZlY3RzO2IuZWZmZWN0cz1udWxsO2lmKG51bGwhPT1hKWZvcihiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBkPWFbYl0sZT1kLmNhbGxiYWNrO2lmKG51bGwhPT1lKXtkLmNhbGxiYWNrPW51bGw7ZD1jO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlKXRocm93IEVycm9yKHAoMTkxLGUpKTtlLmNhbGwoZCl9fX12YXIgamg9KG5ldyBhYS5Db21wb25lbnQpLnJlZnM7ZnVuY3Rpb24ga2goYSxiLGMsZCl7Yj1hLm1lbW9pemVkU3RhdGU7Yz1jKGQsYik7Yz1udWxsPT09Y3x8dm9pZCAwPT09Yz9iOkEoe30sYixjKTthLm1lbW9pemVkU3RhdGU9YzswPT09YS5sYW5lcyYmKGEudXBkYXRlUXVldWUuYmFzZVN0YXRlPWMpfVxudmFyIG5oPXtpc01vdW50ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9YS5fcmVhY3RJbnRlcm5hbHMpP1ZiKGEpPT09YTohMX0sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKGEsYixjKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBkPUwoKSxlPWxoKGEpLGY9Y2goZCxlKTtmLnBheWxvYWQ9Yjt2b2lkIDAhPT1jJiZudWxsIT09YyYmKGYuY2FsbGJhY2s9Yyk7Yj1kaChhLGYsZSk7bnVsbCE9PWImJihtaChiLGEsZSxkKSxlaChiLGEsZSkpfSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKGEsYixjKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBkPUwoKSxlPWxoKGEpLGY9Y2goZCxlKTtmLnRhZz0xO2YucGF5bG9hZD1iO3ZvaWQgMCE9PWMmJm51bGwhPT1jJiYoZi5jYWxsYmFjaz1jKTtiPWRoKGEsZixlKTtudWxsIT09YiYmKG1oKGIsYSxlLGQpLGVoKGIsYSxlKSl9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihhLGIpe2E9YS5fcmVhY3RJbnRlcm5hbHM7dmFyIGM9TCgpLGQ9XG5saChhKSxlPWNoKGMsZCk7ZS50YWc9Mjt2b2lkIDAhPT1iJiZudWxsIT09YiYmKGUuY2FsbGJhY2s9Yik7Yj1kaChhLGUsZCk7bnVsbCE9PWImJihtaChiLGEsZCxjKSxlaChiLGEsZCkpfX07ZnVuY3Rpb24gb2goYSxiLGMsZCxlLGYsZyl7YT1hLnN0YXRlTm9kZTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYS5zaG91bGRDb21wb25lbnRVcGRhdGU/YS5zaG91bGRDb21wb25lbnRVcGRhdGUoZCxmLGcpOmIucHJvdG90eXBlJiZiLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hSWUoYyxkKXx8IUllKGUsZik6ITB9XG5mdW5jdGlvbiBwaChhLGIsYyl7dmFyIGQ9ITEsZT1WZjt2YXIgZj1iLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY/Zj1WZyhmKTooZT1aZihiKT9YZjpILmN1cnJlbnQsZD1iLmNvbnRleHRUeXBlcyxmPShkPW51bGwhPT1kJiZ2b2lkIDAhPT1kKT9ZZihhLGUpOlZmKTtiPW5ldyBiKGMsZik7YS5tZW1vaXplZFN0YXRlPW51bGwhPT1iLnN0YXRlJiZ2b2lkIDAhPT1iLnN0YXRlP2Iuc3RhdGU6bnVsbDtiLnVwZGF0ZXI9bmg7YS5zdGF0ZU5vZGU9YjtiLl9yZWFjdEludGVybmFscz1hO2QmJihhPWEuc3RhdGVOb2RlLGEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD1lLGEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ9Zik7cmV0dXJuIGJ9XG5mdW5jdGlvbiBxaChhLGIsYyxkKXthPWIuc3RhdGU7XCJmdW5jdGlvblwiPT09dHlwZW9mIGIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmYi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGMsZCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGIuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJmIuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoYyxkKTtiLnN0YXRlIT09YSYmbmguZW5xdWV1ZVJlcGxhY2VTdGF0ZShiLGIuc3RhdGUsbnVsbCl9XG5mdW5jdGlvbiByaChhLGIsYyxkKXt2YXIgZT1hLnN0YXRlTm9kZTtlLnByb3BzPWM7ZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGU7ZS5yZWZzPWpoO2FoKGEpO3ZhciBmPWIuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBmJiZudWxsIT09Zj9lLmNvbnRleHQ9VmcoZik6KGY9WmYoYik/WGY6SC5jdXJyZW50LGUuY29udGV4dD1ZZihhLGYpKTtlLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZTtmPWIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBmJiYoa2goYSxiLGYsYyksZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGUpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc3x8XCJmdW5jdGlvblwiPT09dHlwZW9mIGUuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlLmNvbXBvbmVudFdpbGxNb3VudHx8KGI9ZS5zdGF0ZSxcblwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmNvbXBvbmVudFdpbGxNb3VudCYmZS5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSxiIT09ZS5zdGF0ZSYmbmguZW5xdWV1ZVJlcGxhY2VTdGF0ZShlLGUuc3RhdGUsbnVsbCksZ2goYSxjLGUsZCksZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGUpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmNvbXBvbmVudERpZE1vdW50JiYoYS5mbGFnc3w9NDE5NDMwOCl9XG5mdW5jdGlvbiBzaChhLGIsYyl7YT1jLnJlZjtpZihudWxsIT09YSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGEmJlwib2JqZWN0XCIhPT10eXBlb2YgYSl7aWYoYy5fb3duZXIpe2M9Yy5fb3duZXI7aWYoYyl7aWYoMSE9PWMudGFnKXRocm93IEVycm9yKHAoMzA5KSk7dmFyIGQ9Yy5zdGF0ZU5vZGV9aWYoIWQpdGhyb3cgRXJyb3IocCgxNDcsYSkpO3ZhciBlPWQsZj1cIlwiK2E7aWYobnVsbCE9PWImJm51bGwhPT1iLnJlZiYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGIucmVmJiZiLnJlZi5fc3RyaW5nUmVmPT09ZilyZXR1cm4gYi5yZWY7Yj1mdW5jdGlvbihhKXt2YXIgYj1lLnJlZnM7Yj09PWpoJiYoYj1lLnJlZnM9e30pO251bGw9PT1hP2RlbGV0ZSBiW2ZdOmJbZl09YX07Yi5fc3RyaW5nUmVmPWY7cmV0dXJuIGJ9aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBhKXRocm93IEVycm9yKHAoMjg0KSk7aWYoIWMuX293bmVyKXRocm93IEVycm9yKHAoMjkwLGEpKTt9cmV0dXJuIGF9XG5mdW5jdGlvbiB0aChhLGIpe2E9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGIpO3Rocm93IEVycm9yKHAoMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PWE/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhiKS5qb2luKFwiLCBcIikrXCJ9XCI6YSkpO31mdW5jdGlvbiB1aChhKXt2YXIgYj1hLl9pbml0O3JldHVybiBiKGEuX3BheWxvYWQpfVxuZnVuY3Rpb24gdmgoYSl7ZnVuY3Rpb24gYihiLGMpe2lmKGEpe3ZhciBkPWIuZGVsZXRpb25zO251bGw9PT1kPyhiLmRlbGV0aW9ucz1bY10sYi5mbGFnc3w9MTYpOmQucHVzaChjKX19ZnVuY3Rpb24gYyhjLGQpe2lmKCFhKXJldHVybiBudWxsO2Zvcig7bnVsbCE9PWQ7KWIoYyxkKSxkPWQuc2libGluZztyZXR1cm4gbnVsbH1mdW5jdGlvbiBkKGEsYil7Zm9yKGE9bmV3IE1hcDtudWxsIT09YjspbnVsbCE9PWIua2V5P2Euc2V0KGIua2V5LGIpOmEuc2V0KGIuaW5kZXgsYiksYj1iLnNpYmxpbmc7cmV0dXJuIGF9ZnVuY3Rpb24gZShhLGIpe2E9d2goYSxiKTthLmluZGV4PTA7YS5zaWJsaW5nPW51bGw7cmV0dXJuIGF9ZnVuY3Rpb24gZihiLGMsZCl7Yi5pbmRleD1kO2lmKCFhKXJldHVybiBiLmZsYWdzfD0xMDQ4NTc2LGM7ZD1iLmFsdGVybmF0ZTtpZihudWxsIT09ZClyZXR1cm4gZD1kLmluZGV4LGQ8Yz8oYi5mbGFnc3w9MixjKTpkO2IuZmxhZ3N8PTI7cmV0dXJuIGN9ZnVuY3Rpb24gZyhiKXthJiZcbm51bGw9PT1iLmFsdGVybmF0ZSYmKGIuZmxhZ3N8PTIpO3JldHVybiBifWZ1bmN0aW9uIGgoYSxiLGMsZCl7aWYobnVsbD09PWJ8fDYhPT1iLnRhZylyZXR1cm4gYj14aChjLGEubW9kZSxkKSxiLnJldHVybj1hLGI7Yj1lKGIsYyk7Yi5yZXR1cm49YTtyZXR1cm4gYn1mdW5jdGlvbiBrKGEsYixjLGQpe3ZhciBmPWMudHlwZTtpZihmPT09eWEpcmV0dXJuIG0oYSxiLGMucHJvcHMuY2hpbGRyZW4sZCxjLmtleSk7aWYobnVsbCE9PWImJihiLmVsZW1lbnRUeXBlPT09Znx8XCJvYmplY3RcIj09PXR5cGVvZiBmJiZudWxsIT09ZiYmZi4kJHR5cGVvZj09PUhhJiZ1aChmKT09PWIudHlwZSkpcmV0dXJuIGQ9ZShiLGMucHJvcHMpLGQucmVmPXNoKGEsYixjKSxkLnJldHVybj1hLGQ7ZD15aChjLnR5cGUsYy5rZXksYy5wcm9wcyxudWxsLGEubW9kZSxkKTtkLnJlZj1zaChhLGIsYyk7ZC5yZXR1cm49YTtyZXR1cm4gZH1mdW5jdGlvbiBsKGEsYixjLGQpe2lmKG51bGw9PT1ifHw0IT09Yi50YWd8fFxuYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PWMuY29udGFpbmVySW5mb3x8Yi5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1jLmltcGxlbWVudGF0aW9uKXJldHVybiBiPXpoKGMsYS5tb2RlLGQpLGIucmV0dXJuPWEsYjtiPWUoYixjLmNoaWxkcmVufHxbXSk7Yi5yZXR1cm49YTtyZXR1cm4gYn1mdW5jdGlvbiBtKGEsYixjLGQsZil7aWYobnVsbD09PWJ8fDchPT1iLnRhZylyZXR1cm4gYj1BaChjLGEubW9kZSxkLGYpLGIucmV0dXJuPWEsYjtiPWUoYixjKTtiLnJldHVybj1hO3JldHVybiBifWZ1bmN0aW9uIHEoYSxiLGMpe2lmKFwic3RyaW5nXCI9PT10eXBlb2YgYiYmXCJcIiE9PWJ8fFwibnVtYmVyXCI9PT10eXBlb2YgYilyZXR1cm4gYj14aChcIlwiK2IsYS5tb2RlLGMpLGIucmV0dXJuPWEsYjtpZihcIm9iamVjdFwiPT09dHlwZW9mIGImJm51bGwhPT1iKXtzd2l0Y2goYi4kJHR5cGVvZil7Y2FzZSB2YTpyZXR1cm4gYz15aChiLnR5cGUsYi5rZXksYi5wcm9wcyxudWxsLGEubW9kZSxjKSxcbmMucmVmPXNoKGEsbnVsbCxiKSxjLnJldHVybj1hLGM7Y2FzZSB3YTpyZXR1cm4gYj16aChiLGEubW9kZSxjKSxiLnJldHVybj1hLGI7Y2FzZSBIYTp2YXIgZD1iLl9pbml0O3JldHVybiBxKGEsZChiLl9wYXlsb2FkKSxjKX1pZihlYihiKXx8S2EoYikpcmV0dXJuIGI9QWgoYixhLm1vZGUsYyxudWxsKSxiLnJldHVybj1hLGI7dGgoYSxiKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiByKGEsYixjLGQpe3ZhciBlPW51bGwhPT1iP2Iua2V5Om51bGw7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBjJiZcIlwiIT09Y3x8XCJudW1iZXJcIj09PXR5cGVvZiBjKXJldHVybiBudWxsIT09ZT9udWxsOmgoYSxiLFwiXCIrYyxkKTtpZihcIm9iamVjdFwiPT09dHlwZW9mIGMmJm51bGwhPT1jKXtzd2l0Y2goYy4kJHR5cGVvZil7Y2FzZSB2YTpyZXR1cm4gYy5rZXk9PT1lP2soYSxiLGMsZCk6bnVsbDtjYXNlIHdhOnJldHVybiBjLmtleT09PWU/bChhLGIsYyxkKTpudWxsO2Nhc2UgSGE6cmV0dXJuIGU9Yy5faW5pdCxyKGEsXG5iLGUoYy5fcGF5bG9hZCksZCl9aWYoZWIoYyl8fEthKGMpKXJldHVybiBudWxsIT09ZT9udWxsOm0oYSxiLGMsZCxudWxsKTt0aChhLGMpfXJldHVybiBudWxsfWZ1bmN0aW9uIHkoYSxiLGMsZCxlKXtpZihcInN0cmluZ1wiPT09dHlwZW9mIGQmJlwiXCIhPT1kfHxcIm51bWJlclwiPT09dHlwZW9mIGQpcmV0dXJuIGE9YS5nZXQoYyl8fG51bGwsaChiLGEsXCJcIitkLGUpO2lmKFwib2JqZWN0XCI9PT10eXBlb2YgZCYmbnVsbCE9PWQpe3N3aXRjaChkLiQkdHlwZW9mKXtjYXNlIHZhOnJldHVybiBhPWEuZ2V0KG51bGw9PT1kLmtleT9jOmQua2V5KXx8bnVsbCxrKGIsYSxkLGUpO2Nhc2Ugd2E6cmV0dXJuIGE9YS5nZXQobnVsbD09PWQua2V5P2M6ZC5rZXkpfHxudWxsLGwoYixhLGQsZSk7Y2FzZSBIYTp2YXIgZj1kLl9pbml0O3JldHVybiB5KGEsYixjLGYoZC5fcGF5bG9hZCksZSl9aWYoZWIoZCl8fEthKGQpKXJldHVybiBhPWEuZ2V0KGMpfHxudWxsLG0oYixhLGQsZSxudWxsKTt0aChiLGQpfXJldHVybiBudWxsfVxuZnVuY3Rpb24gbihlLGcsaCxrKXtmb3IodmFyIGw9bnVsbCxtPW51bGwsdT1nLHc9Zz0wLHg9bnVsbDtudWxsIT09dSYmdzxoLmxlbmd0aDt3Kyspe3UuaW5kZXg+dz8oeD11LHU9bnVsbCk6eD11LnNpYmxpbmc7dmFyIG49cihlLHUsaFt3XSxrKTtpZihudWxsPT09bil7bnVsbD09PXUmJih1PXgpO2JyZWFrfWEmJnUmJm51bGw9PT1uLmFsdGVybmF0ZSYmYihlLHUpO2c9ZihuLGcsdyk7bnVsbD09PW0/bD1uOm0uc2libGluZz1uO209bjt1PXh9aWYodz09PWgubGVuZ3RoKXJldHVybiBjKGUsdSksSSYmdGcoZSx3KSxsO2lmKG51bGw9PT11KXtmb3IoO3c8aC5sZW5ndGg7dysrKXU9cShlLGhbd10sayksbnVsbCE9PXUmJihnPWYodSxnLHcpLG51bGw9PT1tP2w9dTptLnNpYmxpbmc9dSxtPXUpO0kmJnRnKGUsdyk7cmV0dXJuIGx9Zm9yKHU9ZChlLHUpO3c8aC5sZW5ndGg7dysrKXg9eSh1LGUsdyxoW3ddLGspLG51bGwhPT14JiYoYSYmbnVsbCE9PXguYWx0ZXJuYXRlJiZ1LmRlbGV0ZShudWxsPT09XG54LmtleT93Ongua2V5KSxnPWYoeCxnLHcpLG51bGw9PT1tP2w9eDptLnNpYmxpbmc9eCxtPXgpO2EmJnUuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYihlLGEpfSk7SSYmdGcoZSx3KTtyZXR1cm4gbH1mdW5jdGlvbiB0KGUsZyxoLGspe3ZhciBsPUthKGgpO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBsKXRocm93IEVycm9yKHAoMTUwKSk7aD1sLmNhbGwoaCk7aWYobnVsbD09aCl0aHJvdyBFcnJvcihwKDE1MSkpO2Zvcih2YXIgdT1sPW51bGwsbT1nLHc9Zz0wLHg9bnVsbCxuPWgubmV4dCgpO251bGwhPT1tJiYhbi5kb25lO3crKyxuPWgubmV4dCgpKXttLmluZGV4Pnc/KHg9bSxtPW51bGwpOng9bS5zaWJsaW5nO3ZhciB0PXIoZSxtLG4udmFsdWUsayk7aWYobnVsbD09PXQpe251bGw9PT1tJiYobT14KTticmVha31hJiZtJiZudWxsPT09dC5hbHRlcm5hdGUmJmIoZSxtKTtnPWYodCxnLHcpO251bGw9PT11P2w9dDp1LnNpYmxpbmc9dDt1PXQ7bT14fWlmKG4uZG9uZSlyZXR1cm4gYyhlLFxubSksSSYmdGcoZSx3KSxsO2lmKG51bGw9PT1tKXtmb3IoOyFuLmRvbmU7dysrLG49aC5uZXh0KCkpbj1xKGUsbi52YWx1ZSxrKSxudWxsIT09biYmKGc9ZihuLGcsdyksbnVsbD09PXU/bD1uOnUuc2libGluZz1uLHU9bik7SSYmdGcoZSx3KTtyZXR1cm4gbH1mb3IobT1kKGUsbSk7IW4uZG9uZTt3Kyssbj1oLm5leHQoKSluPXkobSxlLHcsbi52YWx1ZSxrKSxudWxsIT09biYmKGEmJm51bGwhPT1uLmFsdGVybmF0ZSYmbS5kZWxldGUobnVsbD09PW4ua2V5P3c6bi5rZXkpLGc9ZihuLGcsdyksbnVsbD09PXU/bD1uOnUuc2libGluZz1uLHU9bik7YSYmbS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBiKGUsYSl9KTtJJiZ0ZyhlLHcpO3JldHVybiBsfWZ1bmN0aW9uIEooYSxkLGYsaCl7XCJvYmplY3RcIj09PXR5cGVvZiBmJiZudWxsIT09ZiYmZi50eXBlPT09eWEmJm51bGw9PT1mLmtleSYmKGY9Zi5wcm9wcy5jaGlsZHJlbik7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBmJiZudWxsIT09Zil7c3dpdGNoKGYuJCR0eXBlb2Ype2Nhc2UgdmE6YTp7Zm9yKHZhciBrPVxuZi5rZXksbD1kO251bGwhPT1sOyl7aWYobC5rZXk9PT1rKXtrPWYudHlwZTtpZihrPT09eWEpe2lmKDc9PT1sLnRhZyl7YyhhLGwuc2libGluZyk7ZD1lKGwsZi5wcm9wcy5jaGlsZHJlbik7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX19ZWxzZSBpZihsLmVsZW1lbnRUeXBlPT09a3x8XCJvYmplY3RcIj09PXR5cGVvZiBrJiZudWxsIT09ayYmay4kJHR5cGVvZj09PUhhJiZ1aChrKT09PWwudHlwZSl7YyhhLGwuc2libGluZyk7ZD1lKGwsZi5wcm9wcyk7ZC5yZWY9c2goYSxsLGYpO2QucmV0dXJuPWE7YT1kO2JyZWFrIGF9YyhhLGwpO2JyZWFrfWVsc2UgYihhLGwpO2w9bC5zaWJsaW5nfWYudHlwZT09PXlhPyhkPUFoKGYucHJvcHMuY2hpbGRyZW4sYS5tb2RlLGgsZi5rZXkpLGQucmV0dXJuPWEsYT1kKTooaD15aChmLnR5cGUsZi5rZXksZi5wcm9wcyxudWxsLGEubW9kZSxoKSxoLnJlZj1zaChhLGQsZiksaC5yZXR1cm49YSxhPWgpfXJldHVybiBnKGEpO2Nhc2Ugd2E6YTp7Zm9yKGw9Zi5rZXk7bnVsbCE9PVxuZDspe2lmKGQua2V5PT09bClpZig0PT09ZC50YWcmJmQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT1mLmNvbnRhaW5lckluZm8mJmQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uPT09Zi5pbXBsZW1lbnRhdGlvbil7YyhhLGQuc2libGluZyk7ZD1lKGQsZi5jaGlsZHJlbnx8W10pO2QucmV0dXJuPWE7YT1kO2JyZWFrIGF9ZWxzZXtjKGEsZCk7YnJlYWt9ZWxzZSBiKGEsZCk7ZD1kLnNpYmxpbmd9ZD16aChmLGEubW9kZSxoKTtkLnJldHVybj1hO2E9ZH1yZXR1cm4gZyhhKTtjYXNlIEhhOnJldHVybiBsPWYuX2luaXQsSihhLGQsbChmLl9wYXlsb2FkKSxoKX1pZihlYihmKSlyZXR1cm4gbihhLGQsZixoKTtpZihLYShmKSlyZXR1cm4gdChhLGQsZixoKTt0aChhLGYpfXJldHVyblwic3RyaW5nXCI9PT10eXBlb2YgZiYmXCJcIiE9PWZ8fFwibnVtYmVyXCI9PT10eXBlb2YgZj8oZj1cIlwiK2YsbnVsbCE9PWQmJjY9PT1kLnRhZz8oYyhhLGQuc2libGluZyksZD1lKGQsZiksZC5yZXR1cm49YSxhPWQpOlxuKGMoYSxkKSxkPXhoKGYsYS5tb2RlLGgpLGQucmV0dXJuPWEsYT1kKSxnKGEpKTpjKGEsZCl9cmV0dXJuIEp9dmFyIEJoPXZoKCEwKSxDaD12aCghMSksRGg9e30sRWg9VWYoRGgpLEZoPVVmKERoKSxHaD1VZihEaCk7ZnVuY3Rpb24gSGgoYSl7aWYoYT09PURoKXRocm93IEVycm9yKHAoMTc0KSk7cmV0dXJuIGF9ZnVuY3Rpb24gSWgoYSxiKXtHKEdoLGIpO0coRmgsYSk7RyhFaCxEaCk7YT1iLm5vZGVUeXBlO3N3aXRjaChhKXtjYXNlIDk6Y2FzZSAxMTpiPShiPWIuZG9jdW1lbnRFbGVtZW50KT9iLm5hbWVzcGFjZVVSSTpsYihudWxsLFwiXCIpO2JyZWFrO2RlZmF1bHQ6YT04PT09YT9iLnBhcmVudE5vZGU6YixiPWEubmFtZXNwYWNlVVJJfHxudWxsLGE9YS50YWdOYW1lLGI9bGIoYixhKX1FKEVoKTtHKEVoLGIpfWZ1bmN0aW9uIEpoKCl7RShFaCk7RShGaCk7RShHaCl9XG5mdW5jdGlvbiBLaChhKXtIaChHaC5jdXJyZW50KTt2YXIgYj1IaChFaC5jdXJyZW50KTt2YXIgYz1sYihiLGEudHlwZSk7YiE9PWMmJihHKEZoLGEpLEcoRWgsYykpfWZ1bmN0aW9uIExoKGEpe0ZoLmN1cnJlbnQ9PT1hJiYoRShFaCksRShGaCkpfXZhciBNPVVmKDApO1xuZnVuY3Rpb24gTWgoYSl7Zm9yKHZhciBiPWE7bnVsbCE9PWI7KXtpZigxMz09PWIudGFnKXt2YXIgYz1iLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWMmJihjPWMuZGVoeWRyYXRlZCxudWxsPT09Y3x8XCIkP1wiPT09Yy5kYXRhfHxcIiQhXCI9PT1jLmRhdGEpKXJldHVybiBifWVsc2UgaWYoMTk9PT1iLnRhZyYmdm9pZCAwIT09Yi5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyKXtpZigwIT09KGIuZmxhZ3MmMTI4KSlyZXR1cm4gYn1lbHNlIGlmKG51bGwhPT1iLmNoaWxkKXtiLmNoaWxkLnJldHVybj1iO2I9Yi5jaGlsZDtjb250aW51ZX1pZihiPT09YSlicmVhaztmb3IoO251bGw9PT1iLnNpYmxpbmc7KXtpZihudWxsPT09Yi5yZXR1cm58fGIucmV0dXJuPT09YSlyZXR1cm4gbnVsbDtiPWIucmV0dXJufWIuc2libGluZy5yZXR1cm49Yi5yZXR1cm47Yj1iLnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIE5oPVtdO1xuZnVuY3Rpb24gT2goKXtmb3IodmFyIGE9MDthPE5oLmxlbmd0aDthKyspTmhbYV0uX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk9bnVsbDtOaC5sZW5ndGg9MH12YXIgUGg9dWEuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixRaD11YS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxSaD0wLE49bnVsbCxPPW51bGwsUD1udWxsLFNoPSExLFRoPSExLFVoPTAsVmg9MDtmdW5jdGlvbiBRKCl7dGhyb3cgRXJyb3IocCgzMjEpKTt9ZnVuY3Rpb24gV2goYSxiKXtpZihudWxsPT09YilyZXR1cm4hMTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoJiZjPGEubGVuZ3RoO2MrKylpZighSGUoYVtjXSxiW2NdKSlyZXR1cm4hMTtyZXR1cm4hMH1cbmZ1bmN0aW9uIFhoKGEsYixjLGQsZSxmKXtSaD1mO049YjtiLm1lbW9pemVkU3RhdGU9bnVsbDtiLnVwZGF0ZVF1ZXVlPW51bGw7Yi5sYW5lcz0wO1BoLmN1cnJlbnQ9bnVsbD09PWF8fG51bGw9PT1hLm1lbW9pemVkU3RhdGU/WWg6Wmg7YT1jKGQsZSk7aWYoVGgpe2Y9MDtkb3tUaD0hMTtVaD0wO2lmKDI1PD1mKXRocm93IEVycm9yKHAoMzAxKSk7Zis9MTtQPU89bnVsbDtiLnVwZGF0ZVF1ZXVlPW51bGw7UGguY3VycmVudD0kaDthPWMoZCxlKX13aGlsZShUaCl9UGguY3VycmVudD1haTtiPW51bGwhPT1PJiZudWxsIT09Ty5uZXh0O1JoPTA7UD1PPU49bnVsbDtTaD0hMTtpZihiKXRocm93IEVycm9yKHAoMzAwKSk7cmV0dXJuIGF9ZnVuY3Rpb24gYmkoKXt2YXIgYT0wIT09VWg7VWg9MDtyZXR1cm4gYX1cbmZ1bmN0aW9uIGNpKCl7dmFyIGE9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxiYXNlUXVldWU6bnVsbCxxdWV1ZTpudWxsLG5leHQ6bnVsbH07bnVsbD09PVA/Ti5tZW1vaXplZFN0YXRlPVA9YTpQPVAubmV4dD1hO3JldHVybiBQfWZ1bmN0aW9uIGRpKCl7aWYobnVsbD09PU8pe3ZhciBhPU4uYWx0ZXJuYXRlO2E9bnVsbCE9PWE/YS5tZW1vaXplZFN0YXRlOm51bGx9ZWxzZSBhPU8ubmV4dDt2YXIgYj1udWxsPT09UD9OLm1lbW9pemVkU3RhdGU6UC5uZXh0O2lmKG51bGwhPT1iKVA9YixPPWE7ZWxzZXtpZihudWxsPT09YSl0aHJvdyBFcnJvcihwKDMxMCkpO089YTthPXttZW1vaXplZFN0YXRlOk8ubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6Ty5iYXNlU3RhdGUsYmFzZVF1ZXVlOk8uYmFzZVF1ZXVlLHF1ZXVlOk8ucXVldWUsbmV4dDpudWxsfTtudWxsPT09UD9OLm1lbW9pemVkU3RhdGU9UD1hOlA9UC5uZXh0PWF9cmV0dXJuIFB9XG5mdW5jdGlvbiBlaShhLGIpe3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBiP2IoYSk6Yn1cbmZ1bmN0aW9uIGZpKGEpe3ZhciBiPWRpKCksYz1iLnF1ZXVlO2lmKG51bGw9PT1jKXRocm93IEVycm9yKHAoMzExKSk7Yy5sYXN0UmVuZGVyZWRSZWR1Y2VyPWE7dmFyIGQ9TyxlPWQuYmFzZVF1ZXVlLGY9Yy5wZW5kaW5nO2lmKG51bGwhPT1mKXtpZihudWxsIT09ZSl7dmFyIGc9ZS5uZXh0O2UubmV4dD1mLm5leHQ7Zi5uZXh0PWd9ZC5iYXNlUXVldWU9ZT1mO2MucGVuZGluZz1udWxsfWlmKG51bGwhPT1lKXtmPWUubmV4dDtkPWQuYmFzZVN0YXRlO3ZhciBoPWc9bnVsbCxrPW51bGwsbD1mO2Rve3ZhciBtPWwubGFuZTtpZigoUmgmbSk9PT1tKW51bGwhPT1rJiYoaz1rLm5leHQ9e2xhbmU6MCxhY3Rpb246bC5hY3Rpb24saGFzRWFnZXJTdGF0ZTpsLmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTpsLmVhZ2VyU3RhdGUsbmV4dDpudWxsfSksZD1sLmhhc0VhZ2VyU3RhdGU/bC5lYWdlclN0YXRlOmEoZCxsLmFjdGlvbik7ZWxzZXt2YXIgcT17bGFuZTptLGFjdGlvbjpsLmFjdGlvbixoYXNFYWdlclN0YXRlOmwuaGFzRWFnZXJTdGF0ZSxcbmVhZ2VyU3RhdGU6bC5lYWdlclN0YXRlLG5leHQ6bnVsbH07bnVsbD09PWs/KGg9az1xLGc9ZCk6az1rLm5leHQ9cTtOLmxhbmVzfD1tO2hofD1tfWw9bC5uZXh0fXdoaWxlKG51bGwhPT1sJiZsIT09Zik7bnVsbD09PWs/Zz1kOmsubmV4dD1oO0hlKGQsYi5tZW1vaXplZFN0YXRlKXx8KFVnPSEwKTtiLm1lbW9pemVkU3RhdGU9ZDtiLmJhc2VTdGF0ZT1nO2IuYmFzZVF1ZXVlPWs7Yy5sYXN0UmVuZGVyZWRTdGF0ZT1kfWE9Yy5pbnRlcmxlYXZlZDtpZihudWxsIT09YSl7ZT1hO2RvIGY9ZS5sYW5lLE4ubGFuZXN8PWYsaGh8PWYsZT1lLm5leHQ7d2hpbGUoZSE9PWEpfWVsc2UgbnVsbD09PWUmJihjLmxhbmVzPTApO3JldHVybltiLm1lbW9pemVkU3RhdGUsYy5kaXNwYXRjaF19XG5mdW5jdGlvbiBnaShhKXt2YXIgYj1kaSgpLGM9Yi5xdWV1ZTtpZihudWxsPT09Yyl0aHJvdyBFcnJvcihwKDMxMSkpO2MubGFzdFJlbmRlcmVkUmVkdWNlcj1hO3ZhciBkPWMuZGlzcGF0Y2gsZT1jLnBlbmRpbmcsZj1iLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWUpe2MucGVuZGluZz1udWxsO3ZhciBnPWU9ZS5uZXh0O2RvIGY9YShmLGcuYWN0aW9uKSxnPWcubmV4dDt3aGlsZShnIT09ZSk7SGUoZixiLm1lbW9pemVkU3RhdGUpfHwoVWc9ITApO2IubWVtb2l6ZWRTdGF0ZT1mO251bGw9PT1iLmJhc2VRdWV1ZSYmKGIuYmFzZVN0YXRlPWYpO2MubGFzdFJlbmRlcmVkU3RhdGU9Zn1yZXR1cm5bZixkXX1mdW5jdGlvbiBoaSgpe31cbmZ1bmN0aW9uIGlpKGEsYil7dmFyIGM9TixkPWRpKCksZT1iKCksZj0hSGUoZC5tZW1vaXplZFN0YXRlLGUpO2YmJihkLm1lbW9pemVkU3RhdGU9ZSxVZz0hMCk7ZD1kLnF1ZXVlO2ppKGtpLmJpbmQobnVsbCxjLGQsYSksW2FdKTtpZihkLmdldFNuYXBzaG90IT09Ynx8Znx8bnVsbCE9PVAmJlAubWVtb2l6ZWRTdGF0ZS50YWcmMSl7Yy5mbGFnc3w9MjA0ODtsaSg5LG1pLmJpbmQobnVsbCxjLGQsZSxiKSx2b2lkIDAsbnVsbCk7aWYobnVsbD09PVIpdGhyb3cgRXJyb3IocCgzNDkpKTswIT09KFJoJjMwKXx8bmkoYyxiLGUpfXJldHVybiBlfWZ1bmN0aW9uIG5pKGEsYixjKXthLmZsYWdzfD0xNjM4NDthPXtnZXRTbmFwc2hvdDpiLHZhbHVlOmN9O2I9Ti51cGRhdGVRdWV1ZTtudWxsPT09Yj8oYj17bGFzdEVmZmVjdDpudWxsLHN0b3JlczpudWxsfSxOLnVwZGF0ZVF1ZXVlPWIsYi5zdG9yZXM9W2FdKTooYz1iLnN0b3JlcyxudWxsPT09Yz9iLnN0b3Jlcz1bYV06Yy5wdXNoKGEpKX1cbmZ1bmN0aW9uIG1pKGEsYixjLGQpe2IudmFsdWU9YztiLmdldFNuYXBzaG90PWQ7b2koYikmJnBpKGEpfWZ1bmN0aW9uIGtpKGEsYixjKXtyZXR1cm4gYyhmdW5jdGlvbigpe29pKGIpJiZwaShhKX0pfWZ1bmN0aW9uIG9pKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgYz1iKCk7cmV0dXJuIUhlKGEsYyl9Y2F0Y2goZCl7cmV0dXJuITB9fWZ1bmN0aW9uIHBpKGEpe3ZhciBiPVpnKGEsMSk7bnVsbCE9PWImJm1oKGIsYSwxLC0xKX1cbmZ1bmN0aW9uIHFpKGEpe3ZhciBiPWNpKCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGEmJihhPWEoKSk7Yi5tZW1vaXplZFN0YXRlPWIuYmFzZVN0YXRlPWE7YT17cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6ZWksbGFzdFJlbmRlcmVkU3RhdGU6YX07Yi5xdWV1ZT1hO2E9YS5kaXNwYXRjaD1yaS5iaW5kKG51bGwsTixhKTtyZXR1cm5bYi5tZW1vaXplZFN0YXRlLGFdfVxuZnVuY3Rpb24gbGkoYSxiLGMsZCl7YT17dGFnOmEsY3JlYXRlOmIsZGVzdHJveTpjLGRlcHM6ZCxuZXh0Om51bGx9O2I9Ti51cGRhdGVRdWV1ZTtudWxsPT09Yj8oYj17bGFzdEVmZmVjdDpudWxsLHN0b3JlczpudWxsfSxOLnVwZGF0ZVF1ZXVlPWIsYi5sYXN0RWZmZWN0PWEubmV4dD1hKTooYz1iLmxhc3RFZmZlY3QsbnVsbD09PWM/Yi5sYXN0RWZmZWN0PWEubmV4dD1hOihkPWMubmV4dCxjLm5leHQ9YSxhLm5leHQ9ZCxiLmxhc3RFZmZlY3Q9YSkpO3JldHVybiBhfWZ1bmN0aW9uIHNpKCl7cmV0dXJuIGRpKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiB0aShhLGIsYyxkKXt2YXIgZT1jaSgpO04uZmxhZ3N8PWE7ZS5tZW1vaXplZFN0YXRlPWxpKDF8YixjLHZvaWQgMCx2b2lkIDA9PT1kP251bGw6ZCl9XG5mdW5jdGlvbiB1aShhLGIsYyxkKXt2YXIgZT1kaSgpO2Q9dm9pZCAwPT09ZD9udWxsOmQ7dmFyIGY9dm9pZCAwO2lmKG51bGwhPT1PKXt2YXIgZz1PLm1lbW9pemVkU3RhdGU7Zj1nLmRlc3Ryb3k7aWYobnVsbCE9PWQmJldoKGQsZy5kZXBzKSl7ZS5tZW1vaXplZFN0YXRlPWxpKGIsYyxmLGQpO3JldHVybn19Ti5mbGFnc3w9YTtlLm1lbW9pemVkU3RhdGU9bGkoMXxiLGMsZixkKX1mdW5jdGlvbiB2aShhLGIpe3JldHVybiB0aSg4MzkwNjU2LDgsYSxiKX1mdW5jdGlvbiBqaShhLGIpe3JldHVybiB1aSgyMDQ4LDgsYSxiKX1mdW5jdGlvbiB3aShhLGIpe3JldHVybiB1aSg0LDIsYSxiKX1mdW5jdGlvbiB4aShhLGIpe3JldHVybiB1aSg0LDQsYSxiKX1cbmZ1bmN0aW9uIHlpKGEsYil7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGIpcmV0dXJuIGE9YSgpLGIoYSksZnVuY3Rpb24oKXtiKG51bGwpfTtpZihudWxsIT09YiYmdm9pZCAwIT09YilyZXR1cm4gYT1hKCksYi5jdXJyZW50PWEsZnVuY3Rpb24oKXtiLmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gemkoYSxiLGMpe2M9bnVsbCE9PWMmJnZvaWQgMCE9PWM/Yy5jb25jYXQoW2FdKTpudWxsO3JldHVybiB1aSg0LDQseWkuYmluZChudWxsLGIsYSksYyl9ZnVuY3Rpb24gQWkoKXt9ZnVuY3Rpb24gQmkoYSxiKXt2YXIgYz1kaSgpO2I9dm9pZCAwPT09Yj9udWxsOmI7dmFyIGQ9Yy5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kJiZudWxsIT09YiYmV2goYixkWzFdKSlyZXR1cm4gZFswXTtjLm1lbW9pemVkU3RhdGU9W2EsYl07cmV0dXJuIGF9XG5mdW5jdGlvbiBDaShhLGIpe3ZhciBjPWRpKCk7Yj12b2lkIDA9PT1iP251bGw6Yjt2YXIgZD1jLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWQmJm51bGwhPT1iJiZXaChiLGRbMV0pKXJldHVybiBkWzBdO2E9YSgpO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX1mdW5jdGlvbiBEaShhLGIsYyl7aWYoMD09PShSaCYyMSkpcmV0dXJuIGEuYmFzZVN0YXRlJiYoYS5iYXNlU3RhdGU9ITEsVWc9ITApLGEubWVtb2l6ZWRTdGF0ZT1jO0hlKGMsYil8fChjPXljKCksTi5sYW5lc3w9YyxoaHw9YyxhLmJhc2VTdGF0ZT0hMCk7cmV0dXJuIGJ9ZnVuY3Rpb24gRWkoYSxiKXt2YXIgYz1DO0M9MCE9PWMmJjQ+Yz9jOjQ7YSghMCk7dmFyIGQ9UWgudHJhbnNpdGlvbjtRaC50cmFuc2l0aW9uPXt9O3RyeXthKCExKSxiKCl9ZmluYWxseXtDPWMsUWgudHJhbnNpdGlvbj1kfX1mdW5jdGlvbiBGaSgpe3JldHVybiBkaSgpLm1lbW9pemVkU3RhdGV9XG5mdW5jdGlvbiBHaShhLGIsYyl7dmFyIGQ9bGgoYSk7Yz17bGFuZTpkLGFjdGlvbjpjLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH07aWYoSGkoYSkpSWkoYixjKTtlbHNlIGlmKGM9WWcoYSxiLGMsZCksbnVsbCE9PWMpe3ZhciBlPUwoKTttaChjLGEsZCxlKTtKaShjLGIsZCl9fVxuZnVuY3Rpb24gcmkoYSxiLGMpe3ZhciBkPWxoKGEpLGU9e2xhbmU6ZCxhY3Rpb246YyxoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O2lmKEhpKGEpKUlpKGIsZSk7ZWxzZXt2YXIgZj1hLmFsdGVybmF0ZTtpZigwPT09YS5sYW5lcyYmKG51bGw9PT1mfHwwPT09Zi5sYW5lcykmJihmPWIubGFzdFJlbmRlcmVkUmVkdWNlcixudWxsIT09ZikpdHJ5e3ZhciBnPWIubGFzdFJlbmRlcmVkU3RhdGUsaD1mKGcsYyk7ZS5oYXNFYWdlclN0YXRlPSEwO2UuZWFnZXJTdGF0ZT1oO2lmKEhlKGgsZykpe3ZhciBrPWIuaW50ZXJsZWF2ZWQ7bnVsbD09PWs/KGUubmV4dD1lLFhnKGIpKTooZS5uZXh0PWsubmV4dCxrLm5leHQ9ZSk7Yi5pbnRlcmxlYXZlZD1lO3JldHVybn19Y2F0Y2gobCl7fWZpbmFsbHl7fWM9WWcoYSxiLGUsZCk7bnVsbCE9PWMmJihlPUwoKSxtaChjLGEsZCxlKSxKaShjLGIsZCkpfX1cbmZ1bmN0aW9uIEhpKGEpe3ZhciBiPWEuYWx0ZXJuYXRlO3JldHVybiBhPT09Tnx8bnVsbCE9PWImJmI9PT1OfWZ1bmN0aW9uIElpKGEsYil7VGg9U2g9ITA7dmFyIGM9YS5wZW5kaW5nO251bGw9PT1jP2IubmV4dD1iOihiLm5leHQ9Yy5uZXh0LGMubmV4dD1iKTthLnBlbmRpbmc9Yn1mdW5jdGlvbiBKaShhLGIsYyl7aWYoMCE9PShjJjQxOTQyNDApKXt2YXIgZD1iLmxhbmVzO2QmPWEucGVuZGluZ0xhbmVzO2N8PWQ7Yi5sYW5lcz1jO0NjKGEsYyl9fVxudmFyIGFpPXtyZWFkQ29udGV4dDpWZyx1c2VDYWxsYmFjazpRLHVzZUNvbnRleHQ6USx1c2VFZmZlY3Q6USx1c2VJbXBlcmF0aXZlSGFuZGxlOlEsdXNlSW5zZXJ0aW9uRWZmZWN0OlEsdXNlTGF5b3V0RWZmZWN0OlEsdXNlTWVtbzpRLHVzZVJlZHVjZXI6USx1c2VSZWY6USx1c2VTdGF0ZTpRLHVzZURlYnVnVmFsdWU6USx1c2VEZWZlcnJlZFZhbHVlOlEsdXNlVHJhbnNpdGlvbjpRLHVzZU11dGFibGVTb3VyY2U6USx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpRLHVzZUlkOlEsdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxZaD17cmVhZENvbnRleHQ6VmcsdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oYSxiKXtjaSgpLm1lbW9pemVkU3RhdGU9W2Esdm9pZCAwPT09Yj9udWxsOmJdO3JldHVybiBhfSx1c2VDb250ZXh0OlZnLHVzZUVmZmVjdDp2aSx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGEsYixjKXtjPW51bGwhPT1jJiZ2b2lkIDAhPT1jP2MuY29uY2F0KFthXSk6bnVsbDtyZXR1cm4gdGkoNDE5NDMwOCxcbjQseWkuYmluZChudWxsLGIsYSksYyl9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihhLGIpe3JldHVybiB0aSg0MTk0MzA4LDQsYSxiKX0sdXNlSW5zZXJ0aW9uRWZmZWN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRpKDQsMixhLGIpfSx1c2VNZW1vOmZ1bmN0aW9uKGEsYil7dmFyIGM9Y2koKTtiPXZvaWQgMD09PWI/bnVsbDpiO2E9YSgpO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX0sdXNlUmVkdWNlcjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Y2koKTtiPXZvaWQgMCE9PWM/YyhiKTpiO2QubWVtb2l6ZWRTdGF0ZT1kLmJhc2VTdGF0ZT1iO2E9e3BlbmRpbmc6bnVsbCxpbnRlcmxlYXZlZDpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmEsbGFzdFJlbmRlcmVkU3RhdGU6Yn07ZC5xdWV1ZT1hO2E9YS5kaXNwYXRjaD1HaS5iaW5kKG51bGwsTixhKTtyZXR1cm5bZC5tZW1vaXplZFN0YXRlLGFdfSx1c2VSZWY6ZnVuY3Rpb24oYSl7dmFyIGI9XG5jaSgpO2E9e2N1cnJlbnQ6YX07cmV0dXJuIGIubWVtb2l6ZWRTdGF0ZT1hfSx1c2VTdGF0ZTpxaSx1c2VEZWJ1Z1ZhbHVlOkFpLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGNpKCkubWVtb2l6ZWRTdGF0ZT1hfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9cWkoITEpLGI9YVswXTthPUVpLmJpbmQobnVsbCxhWzFdKTtjaSgpLm1lbW9pemVkU3RhdGU9YTtyZXR1cm5bYixhXX0sdXNlTXV0YWJsZVNvdXJjZTpmdW5jdGlvbigpe30sdXNlU3luY0V4dGVybmFsU3RvcmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU4sZT1jaSgpO2lmKEkpe2lmKHZvaWQgMD09PWMpdGhyb3cgRXJyb3IocCg0MDcpKTtjPWMoKX1lbHNle2M9YigpO2lmKG51bGw9PT1SKXRocm93IEVycm9yKHAoMzQ5KSk7MCE9PShSaCYzMCl8fG5pKGQsYixjKX1lLm1lbW9pemVkU3RhdGU9Yzt2YXIgZj17dmFsdWU6YyxnZXRTbmFwc2hvdDpifTtlLnF1ZXVlPWY7dmkoa2kuYmluZChudWxsLGQsXG5mLGEpLFthXSk7ZC5mbGFnc3w9MjA0ODtsaSg5LG1pLmJpbmQobnVsbCxkLGYsYyxiKSx2b2lkIDAsbnVsbCk7cmV0dXJuIGN9LHVzZUlkOmZ1bmN0aW9uKCl7dmFyIGE9Y2koKSxiPVIuaWRlbnRpZmllclByZWZpeDtpZihJKXt2YXIgYz1zZzt2YXIgZD1yZztjPShkJn4oMTw8MzItb2MoZCktMSkpLnRvU3RyaW5nKDMyKStjO2I9XCI6XCIrYitcIlJcIitjO2M9VWgrKzswPGMmJihiKz1cIkhcIitjLnRvU3RyaW5nKDMyKSk7Yis9XCI6XCJ9ZWxzZSBjPVZoKyssYj1cIjpcIitiK1wiclwiK2MudG9TdHJpbmcoMzIpK1wiOlwiO3JldHVybiBhLm1lbW9pemVkU3RhdGU9Yn0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxaaD17cmVhZENvbnRleHQ6VmcsdXNlQ2FsbGJhY2s6QmksdXNlQ29udGV4dDpWZyx1c2VFZmZlY3Q6amksdXNlSW1wZXJhdGl2ZUhhbmRsZTp6aSx1c2VJbnNlcnRpb25FZmZlY3Q6d2ksdXNlTGF5b3V0RWZmZWN0OnhpLHVzZU1lbW86Q2ksdXNlUmVkdWNlcjpmaSx1c2VSZWY6c2ksdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gZmkoZWkpfSxcbnVzZURlYnVnVmFsdWU6QWksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYj1kaSgpO3JldHVybiBEaShiLE8ubWVtb2l6ZWRTdGF0ZSxhKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPWZpKGVpKVswXSxiPWRpKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bYSxiXX0sdXNlTXV0YWJsZVNvdXJjZTpoaSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTppaSx1c2VJZDpGaSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LCRoPXtyZWFkQ29udGV4dDpWZyx1c2VDYWxsYmFjazpCaSx1c2VDb250ZXh0OlZnLHVzZUVmZmVjdDpqaSx1c2VJbXBlcmF0aXZlSGFuZGxlOnppLHVzZUluc2VydGlvbkVmZmVjdDp3aSx1c2VMYXlvdXRFZmZlY3Q6eGksdXNlTWVtbzpDaSx1c2VSZWR1Y2VyOmdpLHVzZVJlZjpzaSx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBnaShlaSl9LHVzZURlYnVnVmFsdWU6QWksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYj1kaSgpO3JldHVybiBudWxsPT09XG5PP2IubWVtb2l6ZWRTdGF0ZT1hOkRpKGIsTy5tZW1vaXplZFN0YXRlLGEpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9Z2koZWkpWzBdLGI9ZGkoKS5tZW1vaXplZFN0YXRlO3JldHVyblthLGJdfSx1c2VNdXRhYmxlU291cmNlOmhpLHVzZVN5bmNFeHRlcm5hbFN0b3JlOmlpLHVzZUlkOkZpLHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX07ZnVuY3Rpb24gS2koYSxiKXt0cnl7dmFyIGM9XCJcIixkPWI7ZG8gYys9UGEoZCksZD1kLnJldHVybjt3aGlsZShkKTt2YXIgZT1jfWNhdGNoKGYpe2U9XCJcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBcIitmLm1lc3NhZ2UrXCJcXG5cIitmLnN0YWNrfXJldHVybnt2YWx1ZTphLHNvdXJjZTpiLHN0YWNrOmUsZGlnZXN0Om51bGx9fWZ1bmN0aW9uIExpKGEsYixjKXtyZXR1cm57dmFsdWU6YSxzb3VyY2U6bnVsbCxzdGFjazpudWxsIT1jP2M6bnVsbCxkaWdlc3Q6bnVsbCE9Yj9iOm51bGx9fVxuZnVuY3Rpb24gTWkoYSxiKXt0cnl7Y29uc29sZS5lcnJvcihiLnZhbHVlKX1jYXRjaChjKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgYzt9KX19dmFyIE5pPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBXZWFrTWFwP1dlYWtNYXA6TWFwO2Z1bmN0aW9uIE9pKGEsYixjKXtjPWNoKC0xLGMpO2MudGFnPTM7Yy5wYXlsb2FkPXtlbGVtZW50Om51bGx9O3ZhciBkPWIudmFsdWU7Yy5jYWxsYmFjaz1mdW5jdGlvbigpe1BpfHwoUGk9ITAsUWk9ZCk7TWkoYSxiKX07cmV0dXJuIGN9XG5mdW5jdGlvbiBSaShhLGIsYyl7Yz1jaCgtMSxjKTtjLnRhZz0zO3ZhciBkPWEudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGQpe3ZhciBlPWIudmFsdWU7Yy5wYXlsb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIGQoZSl9O2MuY2FsbGJhY2s9ZnVuY3Rpb24oKXtNaShhLGIpfX12YXIgZj1hLnN0YXRlTm9kZTtudWxsIT09ZiYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGYuY29tcG9uZW50RGlkQ2F0Y2gmJihjLmNhbGxiYWNrPWZ1bmN0aW9uKCl7TWkoYSxiKTtcImZ1bmN0aW9uXCIhPT10eXBlb2YgZCYmKG51bGw9PT1TaT9TaT1uZXcgU2V0KFt0aGlzXSk6U2kuYWRkKHRoaXMpKTt2YXIgYz1iLnN0YWNrO3RoaXMuY29tcG9uZW50RGlkQ2F0Y2goYi52YWx1ZSx7Y29tcG9uZW50U3RhY2s6bnVsbCE9PWM/YzpcIlwifSl9KTtyZXR1cm4gY31cbmZ1bmN0aW9uIFRpKGEsYixjKXt2YXIgZD1hLnBpbmdDYWNoZTtpZihudWxsPT09ZCl7ZD1hLnBpbmdDYWNoZT1uZXcgTmk7dmFyIGU9bmV3IFNldDtkLnNldChiLGUpfWVsc2UgZT1kLmdldChiKSx2b2lkIDA9PT1lJiYoZT1uZXcgU2V0LGQuc2V0KGIsZSkpO2UuaGFzKGMpfHwoZS5hZGQoYyksYT1VaS5iaW5kKG51bGwsYSxiLGMpLGIudGhlbihhLGEpKX1mdW5jdGlvbiBWaShhKXtkb3t2YXIgYjtpZihiPTEzPT09YS50YWcpYj1hLm1lbW9pemVkU3RhdGUsYj1udWxsIT09Yj9udWxsIT09Yi5kZWh5ZHJhdGVkPyEwOiExOiEwO2lmKGIpcmV0dXJuIGE7YT1hLnJldHVybn13aGlsZShudWxsIT09YSk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBXaShhLGIsYyxkLGUpe2lmKDA9PT0oYS5tb2RlJjEpKXJldHVybiBhPT09Yj9hLmZsYWdzfD02NTUzNjooYS5mbGFnc3w9MTI4LGMuZmxhZ3N8PTEzMTA3MixjLmZsYWdzJj0tNTI4MDUsMT09PWMudGFnJiYobnVsbD09PWMuYWx0ZXJuYXRlP2MudGFnPTE3OihiPWNoKC0xLDEpLGIudGFnPTIsZGgoYyxiLDEpKSksYy5sYW5lc3w9MSksYTthLmZsYWdzfD02NTUzNjthLmxhbmVzPWU7cmV0dXJuIGF9dmFyIFhpPXVhLlJlYWN0Q3VycmVudE93bmVyLFVnPSExO2Z1bmN0aW9uIFlpKGEsYixjLGQpe2IuY2hpbGQ9bnVsbD09PWE/Q2goYixudWxsLGMsZCk6QmgoYixhLmNoaWxkLGMsZCl9XG5mdW5jdGlvbiBaaShhLGIsYyxkLGUpe2M9Yy5yZW5kZXI7dmFyIGY9Yi5yZWY7VGcoYixlKTtkPVhoKGEsYixjLGQsZixlKTtjPWJpKCk7aWYobnVsbCE9PWEmJiFVZylyZXR1cm4gYi51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlLGIuZmxhZ3MmPS0yMDUzLGEubGFuZXMmPX5lLCRpKGEsYixlKTtJJiZjJiZ2ZyhiKTtiLmZsYWdzfD0xO1lpKGEsYixkLGUpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gYWooYSxiLGMsZCxlKXtpZihudWxsPT09YSl7dmFyIGY9Yy50eXBlO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmJiYhYmooZikmJnZvaWQgMD09PWYuZGVmYXVsdFByb3BzJiZudWxsPT09Yy5jb21wYXJlJiZ2b2lkIDA9PT1jLmRlZmF1bHRQcm9wcylyZXR1cm4gYi50YWc9MTUsYi50eXBlPWYsY2ooYSxiLGYsZCxlKTthPXloKGMudHlwZSxudWxsLGQsYixiLm1vZGUsZSk7YS5yZWY9Yi5yZWY7YS5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1hfWY9YS5jaGlsZDtpZigwPT09KGEubGFuZXMmZSkpe3ZhciBnPWYubWVtb2l6ZWRQcm9wcztjPWMuY29tcGFyZTtjPW51bGwhPT1jP2M6SWU7aWYoYyhnLGQpJiZhLnJlZj09PWIucmVmKXJldHVybiAkaShhLGIsZSl9Yi5mbGFnc3w9MTthPXdoKGYsZCk7YS5yZWY9Yi5yZWY7YS5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1hfVxuZnVuY3Rpb24gY2ooYSxiLGMsZCxlKXtpZihudWxsIT09YSl7dmFyIGY9YS5tZW1vaXplZFByb3BzO2lmKEllKGYsZCkmJmEucmVmPT09Yi5yZWYpaWYoVWc9ITEsYi5wZW5kaW5nUHJvcHM9ZD1mLDAhPT0oYS5sYW5lcyZlKSkwIT09KGEuZmxhZ3MmMTMxMDcyKSYmKFVnPSEwKTtlbHNlIHJldHVybiBiLmxhbmVzPWEubGFuZXMsJGkoYSxiLGUpfXJldHVybiBkaihhLGIsYyxkLGUpfVxuZnVuY3Rpb24gZWooYSxiLGMpe3ZhciBkPWIucGVuZGluZ1Byb3BzLGU9ZC5jaGlsZHJlbixmPW51bGwhPT1hP2EubWVtb2l6ZWRTdGF0ZTpudWxsO2lmKFwiaGlkZGVuXCI9PT1kLm1vZGUpaWYoMD09PShiLm1vZGUmMSkpYi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxHKGZqLGdqKSxnanw9YztlbHNle2lmKDA9PT0oYyYxMDczNzQxODI0KSlyZXR1cm4gYT1udWxsIT09Zj9mLmJhc2VMYW5lc3xjOmMsYi5sYW5lcz1iLmNoaWxkTGFuZXM9MTA3Mzc0MTgyNCxiLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczphLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9LGIudXBkYXRlUXVldWU9bnVsbCxHKGZqLGdqKSxnanw9YSxudWxsO2IubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjAsY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6bnVsbH07ZD1udWxsIT09Zj9mLmJhc2VMYW5lczpjO0coZmosZ2opO2dqfD1kfWVsc2UgbnVsbCE9PVxuZj8oZD1mLmJhc2VMYW5lc3xjLGIubWVtb2l6ZWRTdGF0ZT1udWxsKTpkPWMsRyhmaixnaiksZ2p8PWQ7WWkoYSxiLGUsYyk7cmV0dXJuIGIuY2hpbGR9ZnVuY3Rpb24gaGooYSxiKXt2YXIgYz1iLnJlZjtpZihudWxsPT09YSYmbnVsbCE9PWN8fG51bGwhPT1hJiZhLnJlZiE9PWMpYi5mbGFnc3w9NTEyLGIuZmxhZ3N8PTIwOTcxNTJ9ZnVuY3Rpb24gZGooYSxiLGMsZCxlKXt2YXIgZj1aZihjKT9YZjpILmN1cnJlbnQ7Zj1ZZihiLGYpO1RnKGIsZSk7Yz1YaChhLGIsYyxkLGYsZSk7ZD1iaSgpO2lmKG51bGwhPT1hJiYhVWcpcmV0dXJuIGIudXBkYXRlUXVldWU9YS51cGRhdGVRdWV1ZSxiLmZsYWdzJj0tMjA1MyxhLmxhbmVzJj1+ZSwkaShhLGIsZSk7SSYmZCYmdmcoYik7Yi5mbGFnc3w9MTtZaShhLGIsYyxlKTtyZXR1cm4gYi5jaGlsZH1cbmZ1bmN0aW9uIGlqKGEsYixjLGQsZSl7aWYoWmYoYykpe3ZhciBmPSEwO2NnKGIpfWVsc2UgZj0hMTtUZyhiLGUpO2lmKG51bGw9PT1iLnN0YXRlTm9kZSlqaihhLGIpLHBoKGIsYyxkKSxyaChiLGMsZCxlKSxkPSEwO2Vsc2UgaWYobnVsbD09PWEpe3ZhciBnPWIuc3RhdGVOb2RlLGg9Yi5tZW1vaXplZFByb3BzO2cucHJvcHM9aDt2YXIgaz1nLmNvbnRleHQsbD1jLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgbCYmbnVsbCE9PWw/bD1WZyhsKToobD1aZihjKT9YZjpILmN1cnJlbnQsbD1ZZihiLGwpKTt2YXIgbT1jLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxxPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBtfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtxfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc3x8XG4oaCE9PWR8fGshPT1sKSYmcWgoYixnLGQsbCk7JGc9ITE7dmFyIHI9Yi5tZW1vaXplZFN0YXRlO2cuc3RhdGU9cjtnaChiLGQsZyxlKTtrPWIubWVtb2l6ZWRTdGF0ZTtoIT09ZHx8ciE9PWt8fFdmLmN1cnJlbnR8fCRnPyhcImZ1bmN0aW9uXCI9PT10eXBlb2YgbSYmKGtoKGIsYyxtLGQpLGs9Yi5tZW1vaXplZFN0YXRlKSwoaD0kZ3x8b2goYixjLGgsZCxyLGssbCkpPyhxfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsTW91bnR8fChcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnRXaWxsTW91bnQmJmcuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudERpZE1vdW50JiYoYi5mbGFnc3w9NDE5NDMwOCkpOlxuKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudERpZE1vdW50JiYoYi5mbGFnc3w9NDE5NDMwOCksYi5tZW1vaXplZFByb3BzPWQsYi5tZW1vaXplZFN0YXRlPWspLGcucHJvcHM9ZCxnLnN0YXRlPWssZy5jb250ZXh0PWwsZD1oKTooXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkTW91bnQmJihiLmZsYWdzfD00MTk0MzA4KSxkPSExKX1lbHNle2c9Yi5zdGF0ZU5vZGU7YmgoYSxiKTtoPWIubWVtb2l6ZWRQcm9wcztsPWIudHlwZT09PWIuZWxlbWVudFR5cGU/aDpMZyhiLnR5cGUsaCk7Zy5wcm9wcz1sO3E9Yi5wZW5kaW5nUHJvcHM7cj1nLmNvbnRleHQ7az1jLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgayYmbnVsbCE9PWs/az1WZyhrKTooaz1aZihjKT9YZjpILmN1cnJlbnQsaz1ZZihiLGspKTt2YXIgeT1jLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczsobT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgeXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUpfHxcblwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwoaCE9PXF8fHIhPT1rKSYmcWgoYixnLGQsayk7JGc9ITE7cj1iLm1lbW9pemVkU3RhdGU7Zy5zdGF0ZT1yO2doKGIsZCxnLGUpO3ZhciBuPWIubWVtb2l6ZWRTdGF0ZTtoIT09cXx8ciE9PW58fFdmLmN1cnJlbnR8fCRnPyhcImZ1bmN0aW9uXCI9PT10eXBlb2YgeSYmKGtoKGIsYyx5LGQpLG49Yi5tZW1vaXplZFN0YXRlKSwobD0kZ3x8b2goYixjLGwsZCxyLG4sayl8fCExKT8obXx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxVcGRhdGV8fChcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnRXaWxsVXBkYXRlJiZnLmNvbXBvbmVudFdpbGxVcGRhdGUoZCxuLGspLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiZcbmcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUoZCxuLGspKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGUmJihiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSYmKGIuZmxhZ3N8PTEwMjQpKTooXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50RGlkVXBkYXRlfHxoPT09YS5tZW1vaXplZFByb3BzJiZyPT09YS5tZW1vaXplZFN0YXRlfHwoYi5mbGFnc3w9NCksXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnI9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD0xMDI0KSxiLm1lbW9pemVkUHJvcHM9ZCxiLm1lbW9pemVkU3RhdGU9biksZy5wcm9wcz1kLGcuc3RhdGU9bixnLmNvbnRleHQ9ayxkPWwpOihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnI9PT1cbmEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxoPT09YS5tZW1vaXplZFByb3BzJiZyPT09YS5tZW1vaXplZFN0YXRlfHwoYi5mbGFnc3w9MTAyNCksZD0hMSl9cmV0dXJuIGtqKGEsYixjLGQsZixlKX1cbmZ1bmN0aW9uIGtqKGEsYixjLGQsZSxmKXtoaihhLGIpO3ZhciBnPTAhPT0oYi5mbGFncyYxMjgpO2lmKCFkJiYhZylyZXR1cm4gZSYmZGcoYixjLCExKSwkaShhLGIsZik7ZD1iLnN0YXRlTm9kZTtYaS5jdXJyZW50PWI7dmFyIGg9ZyYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGMuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yP251bGw6ZC5yZW5kZXIoKTtiLmZsYWdzfD0xO251bGwhPT1hJiZnPyhiLmNoaWxkPUJoKGIsYS5jaGlsZCxudWxsLGYpLGIuY2hpbGQ9QmgoYixudWxsLGgsZikpOllpKGEsYixoLGYpO2IubWVtb2l6ZWRTdGF0ZT1kLnN0YXRlO2UmJmRnKGIsYywhMCk7cmV0dXJuIGIuY2hpbGR9ZnVuY3Rpb24gbGooYSl7dmFyIGI9YS5zdGF0ZU5vZGU7Yi5wZW5kaW5nQ29udGV4dD9hZyhhLGIucGVuZGluZ0NvbnRleHQsYi5wZW5kaW5nQ29udGV4dCE9PWIuY29udGV4dCk6Yi5jb250ZXh0JiZhZyhhLGIuY29udGV4dCwhMSk7SWgoYSxiLmNvbnRhaW5lckluZm8pfVxuZnVuY3Rpb24gbWooYSxiLGMsZCxlKXtJZygpO0pnKGUpO2IuZmxhZ3N8PTI1NjtZaShhLGIsYyxkKTtyZXR1cm4gYi5jaGlsZH12YXIgbmo9e2RlaHlkcmF0ZWQ6bnVsbCx0cmVlQ29udGV4dDpudWxsLHJldHJ5TGFuZTowfTtmdW5jdGlvbiBvaihhKXtyZXR1cm57YmFzZUxhbmVzOmEsY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6bnVsbH19XG5mdW5jdGlvbiBwaihhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1NLmN1cnJlbnQsZj0hMSxnPTAhPT0oYi5mbGFncyYxMjgpLGg7KGg9Zyl8fChoPW51bGwhPT1hJiZudWxsPT09YS5tZW1vaXplZFN0YXRlPyExOjAhPT0oZSYyKSk7aWYoaClmPSEwLGIuZmxhZ3MmPS0xMjk7ZWxzZSBpZihudWxsPT09YXx8bnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSllfD0xO0coTSxlJjEpO2lmKG51bGw9PT1hKXtFZyhiKTthPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09YSYmKGE9YS5kZWh5ZHJhdGVkLG51bGwhPT1hKSlyZXR1cm4gMD09PShiLm1vZGUmMSk/Yi5sYW5lcz0xOlwiJCFcIj09PWEuZGF0YT9iLmxhbmVzPTg6Yi5sYW5lcz0xMDczNzQxODI0LG51bGw7Zz1kLmNoaWxkcmVuO2E9ZC5mYWxsYmFjaztyZXR1cm4gZj8oZD1iLm1vZGUsZj1iLmNoaWxkLGc9e21vZGU6XCJoaWRkZW5cIixjaGlsZHJlbjpnfSwwPT09KGQmMSkmJm51bGwhPT1mPyhmLmNoaWxkTGFuZXM9MCxmLnBlbmRpbmdQcm9wcz1cbmcpOmY9cWooZyxkLDAsbnVsbCksYT1BaChhLGQsYyxudWxsKSxmLnJldHVybj1iLGEucmV0dXJuPWIsZi5zaWJsaW5nPWEsYi5jaGlsZD1mLGIuY2hpbGQubWVtb2l6ZWRTdGF0ZT1vaihjKSxiLm1lbW9pemVkU3RhdGU9bmosYSk6cmooYixnKX1lPWEubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09ZSYmKGg9ZS5kZWh5ZHJhdGVkLG51bGwhPT1oKSlyZXR1cm4gc2ooYSxiLGcsZCxoLGUsYyk7aWYoZil7Zj1kLmZhbGxiYWNrO2c9Yi5tb2RlO2U9YS5jaGlsZDtoPWUuc2libGluZzt2YXIgaz17bW9kZTpcImhpZGRlblwiLGNoaWxkcmVuOmQuY2hpbGRyZW59OzA9PT0oZyYxKSYmYi5jaGlsZCE9PWU/KGQ9Yi5jaGlsZCxkLmNoaWxkTGFuZXM9MCxkLnBlbmRpbmdQcm9wcz1rLGIuZGVsZXRpb25zPW51bGwpOihkPXdoKGUsayksZC5zdWJ0cmVlRmxhZ3M9ZS5zdWJ0cmVlRmxhZ3MmMTQ2ODAwNjQpO251bGwhPT1oP2Y9d2goaCxmKTooZj1BaChmLGcsYyxudWxsKSxmLmZsYWdzfD0yKTtmLnJldHVybj1cbmI7ZC5yZXR1cm49YjtkLnNpYmxpbmc9ZjtiLmNoaWxkPWQ7ZD1mO2Y9Yi5jaGlsZDtnPWEuY2hpbGQubWVtb2l6ZWRTdGF0ZTtnPW51bGw9PT1nP29qKGMpOntiYXNlTGFuZXM6Zy5iYXNlTGFuZXN8YyxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpnLnRyYW5zaXRpb25zfTtmLm1lbW9pemVkU3RhdGU9ZztmLmNoaWxkTGFuZXM9YS5jaGlsZExhbmVzJn5jO2IubWVtb2l6ZWRTdGF0ZT1uajtyZXR1cm4gZH1mPWEuY2hpbGQ7YT1mLnNpYmxpbmc7ZD13aChmLHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOmQuY2hpbGRyZW59KTswPT09KGIubW9kZSYxKSYmKGQubGFuZXM9Yyk7ZC5yZXR1cm49YjtkLnNpYmxpbmc9bnVsbDtudWxsIT09YSYmKGM9Yi5kZWxldGlvbnMsbnVsbD09PWM/KGIuZGVsZXRpb25zPVthXSxiLmZsYWdzfD0xNik6Yy5wdXNoKGEpKTtiLmNoaWxkPWQ7Yi5tZW1vaXplZFN0YXRlPW51bGw7cmV0dXJuIGR9XG5mdW5jdGlvbiByaihhLGIpe2I9cWooe21vZGU6XCJ2aXNpYmxlXCIsY2hpbGRyZW46Yn0sYS5tb2RlLDAsbnVsbCk7Yi5yZXR1cm49YTtyZXR1cm4gYS5jaGlsZD1ifWZ1bmN0aW9uIHRqKGEsYixjLGQpe251bGwhPT1kJiZKZyhkKTtCaChiLGEuY2hpbGQsbnVsbCxjKTthPXJqKGIsYi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4pO2EuZmxhZ3N8PTI7Yi5tZW1vaXplZFN0YXRlPW51bGw7cmV0dXJuIGF9XG5mdW5jdGlvbiBzaihhLGIsYyxkLGUsZixnKXtpZihjKXtpZihiLmZsYWdzJjI1NilyZXR1cm4gYi5mbGFncyY9LTI1NyxkPUxpKEVycm9yKHAoNDIyKSkpLHRqKGEsYixnLGQpO2lmKG51bGwhPT1iLm1lbW9pemVkU3RhdGUpcmV0dXJuIGIuY2hpbGQ9YS5jaGlsZCxiLmZsYWdzfD0xMjgsbnVsbDtmPWQuZmFsbGJhY2s7ZT1iLm1vZGU7ZD1xaih7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjpkLmNoaWxkcmVufSxlLDAsbnVsbCk7Zj1BaChmLGUsZyxudWxsKTtmLmZsYWdzfD0yO2QucmV0dXJuPWI7Zi5yZXR1cm49YjtkLnNpYmxpbmc9ZjtiLmNoaWxkPWQ7MCE9PShiLm1vZGUmMSkmJkJoKGIsYS5jaGlsZCxudWxsLGcpO2IuY2hpbGQubWVtb2l6ZWRTdGF0ZT1vaihnKTtiLm1lbW9pemVkU3RhdGU9bmo7cmV0dXJuIGZ9aWYoMD09PShiLm1vZGUmMSkpcmV0dXJuIHRqKGEsYixnLG51bGwpO2lmKFwiJCFcIj09PWUuZGF0YSl7ZD1lLm5leHRTaWJsaW5nJiZlLm5leHRTaWJsaW5nLmRhdGFzZXQ7XG5pZihkKXZhciBoPWQuZGdzdDtkPWg7Zj1FcnJvcihwKDQxOSkpO2Q9TGkoZixkLHZvaWQgMCk7cmV0dXJuIHRqKGEsYixnLGQpfWg9MCE9PShnJmEuY2hpbGRMYW5lcyk7aWYoVWd8fGgpe2Q9UjtpZihudWxsIT09ZCl7c3dpdGNoKGcmLWcpe2Nhc2UgNDplPTI7YnJlYWs7Y2FzZSAxNjplPTg7YnJlYWs7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0OmU9MzI7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6ZT0yNjg0MzU0NTY7YnJlYWs7ZGVmYXVsdDplPTB9ZT0wIT09KGUmKGQuc3VzcGVuZGVkTGFuZXN8ZykpPzA6ZTtcbjAhPT1lJiZlIT09Zi5yZXRyeUxhbmUmJihmLnJldHJ5TGFuZT1lLFpnKGEsZSksbWgoZCxhLGUsLTEpKX11aigpO2Q9TGkoRXJyb3IocCg0MjEpKSk7cmV0dXJuIHRqKGEsYixnLGQpfWlmKFwiJD9cIj09PWUuZGF0YSlyZXR1cm4gYi5mbGFnc3w9MTI4LGIuY2hpbGQ9YS5jaGlsZCxiPXZqLmJpbmQobnVsbCxhKSxlLl9yZWFjdFJldHJ5PWIsbnVsbDthPWYudHJlZUNvbnRleHQ7eWc9TGYoZS5uZXh0U2libGluZyk7eGc9YjtJPSEwO3pnPW51bGw7bnVsbCE9PWEmJihvZ1twZysrXT1yZyxvZ1twZysrXT1zZyxvZ1twZysrXT1xZyxyZz1hLmlkLHNnPWEub3ZlcmZsb3cscWc9Yik7Yj1yaihiLGQuY2hpbGRyZW4pO2IuZmxhZ3N8PTQwOTY7cmV0dXJuIGJ9ZnVuY3Rpb24gd2ooYSxiLGMpe2EubGFuZXN8PWI7dmFyIGQ9YS5hbHRlcm5hdGU7bnVsbCE9PWQmJihkLmxhbmVzfD1iKTtTZyhhLnJldHVybixiLGMpfVxuZnVuY3Rpb24geGooYSxiLGMsZCxlKXt2YXIgZj1hLm1lbW9pemVkU3RhdGU7bnVsbD09PWY/YS5tZW1vaXplZFN0YXRlPXtpc0JhY2t3YXJkczpiLHJlbmRlcmluZzpudWxsLHJlbmRlcmluZ1N0YXJ0VGltZTowLGxhc3Q6ZCx0YWlsOmMsdGFpbE1vZGU6ZX06KGYuaXNCYWNrd2FyZHM9YixmLnJlbmRlcmluZz1udWxsLGYucmVuZGVyaW5nU3RhcnRUaW1lPTAsZi5sYXN0PWQsZi50YWlsPWMsZi50YWlsTW9kZT1lKX1cbmZ1bmN0aW9uIHlqKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcyxlPWQucmV2ZWFsT3JkZXIsZj1kLnRhaWw7WWkoYSxiLGQuY2hpbGRyZW4sYyk7ZD1NLmN1cnJlbnQ7aWYoMCE9PShkJjIpKWQ9ZCYxfDIsYi5mbGFnc3w9MTI4O2Vsc2V7aWYobnVsbCE9PWEmJjAhPT0oYS5mbGFncyYxMjgpKWE6Zm9yKGE9Yi5jaGlsZDtudWxsIT09YTspe2lmKDEzPT09YS50YWcpbnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSYmd2ooYSxjLGIpO2Vsc2UgaWYoMTk9PT1hLnRhZyl3aihhLGMsYik7ZWxzZSBpZihudWxsIT09YS5jaGlsZCl7YS5jaGlsZC5yZXR1cm49YTthPWEuY2hpbGQ7Y29udGludWV9aWYoYT09PWIpYnJlYWsgYTtmb3IoO251bGw9PT1hLnNpYmxpbmc7KXtpZihudWxsPT09YS5yZXR1cm58fGEucmV0dXJuPT09YilicmVhayBhO2E9YS5yZXR1cm59YS5zaWJsaW5nLnJldHVybj1hLnJldHVybjthPWEuc2libGluZ31kJj0xfUcoTSxkKTtpZigwPT09KGIubW9kZSYxKSliLm1lbW9pemVkU3RhdGU9XG5udWxsO2Vsc2Ugc3dpdGNoKGUpe2Nhc2UgXCJmb3J3YXJkc1wiOmM9Yi5jaGlsZDtmb3IoZT1udWxsO251bGwhPT1jOylhPWMuYWx0ZXJuYXRlLG51bGwhPT1hJiZudWxsPT09TWgoYSkmJihlPWMpLGM9Yy5zaWJsaW5nO2M9ZTtudWxsPT09Yz8oZT1iLmNoaWxkLGIuY2hpbGQ9bnVsbCk6KGU9Yy5zaWJsaW5nLGMuc2libGluZz1udWxsKTt4aihiLCExLGUsYyxmKTticmVhaztjYXNlIFwiYmFja3dhcmRzXCI6Yz1udWxsO2U9Yi5jaGlsZDtmb3IoYi5jaGlsZD1udWxsO251bGwhPT1lOyl7YT1lLmFsdGVybmF0ZTtpZihudWxsIT09YSYmbnVsbD09PU1oKGEpKXtiLmNoaWxkPWU7YnJlYWt9YT1lLnNpYmxpbmc7ZS5zaWJsaW5nPWM7Yz1lO2U9YX14aihiLCEwLGMsbnVsbCxmKTticmVhaztjYXNlIFwidG9nZXRoZXJcIjp4aihiLCExLG51bGwsbnVsbCx2b2lkIDApO2JyZWFrO2RlZmF1bHQ6Yi5tZW1vaXplZFN0YXRlPW51bGx9cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBqaihhLGIpezA9PT0oYi5tb2RlJjEpJiZudWxsIT09YSYmKGEuYWx0ZXJuYXRlPW51bGwsYi5hbHRlcm5hdGU9bnVsbCxiLmZsYWdzfD0yKX1mdW5jdGlvbiAkaShhLGIsYyl7bnVsbCE9PWEmJihiLmRlcGVuZGVuY2llcz1hLmRlcGVuZGVuY2llcyk7aGh8PWIubGFuZXM7aWYoMD09PShjJmIuY2hpbGRMYW5lcykpcmV0dXJuIG51bGw7aWYobnVsbCE9PWEmJmIuY2hpbGQhPT1hLmNoaWxkKXRocm93IEVycm9yKHAoMTUzKSk7aWYobnVsbCE9PWIuY2hpbGQpe2E9Yi5jaGlsZDtjPXdoKGEsYS5wZW5kaW5nUHJvcHMpO2IuY2hpbGQ9Yztmb3IoYy5yZXR1cm49YjtudWxsIT09YS5zaWJsaW5nOylhPWEuc2libGluZyxjPWMuc2libGluZz13aChhLGEucGVuZGluZ1Byb3BzKSxjLnJldHVybj1iO2Muc2libGluZz1udWxsfXJldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gemooYSxiLGMpe3N3aXRjaChiLnRhZyl7Y2FzZSAzOmxqKGIpO0lnKCk7YnJlYWs7Y2FzZSA1OktoKGIpO2JyZWFrO2Nhc2UgMTpaZihiLnR5cGUpJiZjZyhiKTticmVhaztjYXNlIDQ6SWgoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDEwOnZhciBkPWIudHlwZS5fY29udGV4dCxlPWIubWVtb2l6ZWRQcm9wcy52YWx1ZTtHKE1nLGQuX2N1cnJlbnRWYWx1ZSk7ZC5fY3VycmVudFZhbHVlPWU7YnJlYWs7Y2FzZSAxMzpkPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09ZCl7aWYobnVsbCE9PWQuZGVoeWRyYXRlZClyZXR1cm4gRyhNLE0uY3VycmVudCYxKSxiLmZsYWdzfD0xMjgsbnVsbDtpZigwIT09KGMmYi5jaGlsZC5jaGlsZExhbmVzKSlyZXR1cm4gcGooYSxiLGMpO0coTSxNLmN1cnJlbnQmMSk7YT0kaShhLGIsYyk7cmV0dXJuIG51bGwhPT1hP2Euc2libGluZzpudWxsfUcoTSxNLmN1cnJlbnQmMSk7YnJlYWs7Y2FzZSAxOTpkPTAhPT0oYyZcbmIuY2hpbGRMYW5lcyk7aWYoMCE9PShhLmZsYWdzJjEyOCkpe2lmKGQpcmV0dXJuIHlqKGEsYixjKTtiLmZsYWdzfD0xMjh9ZT1iLm1lbW9pemVkU3RhdGU7bnVsbCE9PWUmJihlLnJlbmRlcmluZz1udWxsLGUudGFpbD1udWxsLGUubGFzdEVmZmVjdD1udWxsKTtHKE0sTS5jdXJyZW50KTtpZihkKWJyZWFrO2Vsc2UgcmV0dXJuIG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBiLmxhbmVzPTAsZWooYSxiLGMpfXJldHVybiAkaShhLGIsYyl9dmFyIEFqLEJqLENqLERqO1xuQWo9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yi5jaGlsZDtudWxsIT09Yzspe2lmKDU9PT1jLnRhZ3x8Nj09PWMudGFnKWEuYXBwZW5kQ2hpbGQoYy5zdGF0ZU5vZGUpO2Vsc2UgaWYoNCE9PWMudGFnJiZudWxsIT09Yy5jaGlsZCl7Yy5jaGlsZC5yZXR1cm49YztjPWMuY2hpbGQ7Y29udGludWV9aWYoYz09PWIpYnJlYWs7Zm9yKDtudWxsPT09Yy5zaWJsaW5nOyl7aWYobnVsbD09PWMucmV0dXJufHxjLnJldHVybj09PWIpcmV0dXJuO2M9Yy5yZXR1cm59Yy5zaWJsaW5nLnJldHVybj1jLnJldHVybjtjPWMuc2libGluZ319O0JqPWZ1bmN0aW9uKCl7fTtcbkNqPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWEubWVtb2l6ZWRQcm9wcztpZihlIT09ZCl7YT1iLnN0YXRlTm9kZTtIaChFaC5jdXJyZW50KTt2YXIgZj1udWxsO3N3aXRjaChjKXtjYXNlIFwiaW5wdXRcIjplPVlhKGEsZSk7ZD1ZYShhLGQpO2Y9W107YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmU9QSh7fSxlLHt2YWx1ZTp2b2lkIDB9KTtkPUEoe30sZCx7dmFsdWU6dm9pZCAwfSk7Zj1bXTticmVhaztjYXNlIFwidGV4dGFyZWFcIjplPWdiKGEsZSk7ZD1nYihhLGQpO2Y9W107YnJlYWs7ZGVmYXVsdDpcImZ1bmN0aW9uXCIhPT10eXBlb2YgZS5vbkNsaWNrJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5vbkNsaWNrJiYoYS5vbmNsaWNrPUJmKX11YihjLGQpO3ZhciBnO2M9bnVsbDtmb3IobCBpbiBlKWlmKCFkLmhhc093blByb3BlcnR5KGwpJiZlLmhhc093blByb3BlcnR5KGwpJiZudWxsIT1lW2xdKWlmKFwic3R5bGVcIj09PWwpe3ZhciBoPWVbbF07Zm9yKGcgaW4gaCloLmhhc093blByb3BlcnR5KGcpJiZcbihjfHwoYz17fSksY1tnXT1cIlwiKX1lbHNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiIT09bCYmXCJjaGlsZHJlblwiIT09bCYmXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIiE9PWwmJlwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCIhPT1sJiZcImF1dG9Gb2N1c1wiIT09bCYmKGVhLmhhc093blByb3BlcnR5KGwpP2Z8fChmPVtdKTooZj1mfHxbXSkucHVzaChsLG51bGwpKTtmb3IobCBpbiBkKXt2YXIgaz1kW2xdO2g9bnVsbCE9ZT9lW2xdOnZvaWQgMDtpZihkLmhhc093blByb3BlcnR5KGwpJiZrIT09aCYmKG51bGwhPWt8fG51bGwhPWgpKWlmKFwic3R5bGVcIj09PWwpaWYoaCl7Zm9yKGcgaW4gaCkhaC5oYXNPd25Qcm9wZXJ0eShnKXx8ayYmay5oYXNPd25Qcm9wZXJ0eShnKXx8KGN8fChjPXt9KSxjW2ddPVwiXCIpO2ZvcihnIGluIGspay5oYXNPd25Qcm9wZXJ0eShnKSYmaFtnXSE9PWtbZ10mJihjfHwoYz17fSksY1tnXT1rW2ddKX1lbHNlIGN8fChmfHwoZj1bXSksZi5wdXNoKGwsXG5jKSksYz1rO2Vsc2VcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PT1sPyhrPWs/ay5fX2h0bWw6dm9pZCAwLGg9aD9oLl9faHRtbDp2b2lkIDAsbnVsbCE9ayYmaCE9PWsmJihmPWZ8fFtdKS5wdXNoKGwsaykpOlwiY2hpbGRyZW5cIj09PWw/XCJzdHJpbmdcIiE9PXR5cGVvZiBrJiZcIm51bWJlclwiIT09dHlwZW9mIGt8fChmPWZ8fFtdKS5wdXNoKGwsXCJcIitrKTpcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiIT09bCYmXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIiE9PWwmJihlYS5oYXNPd25Qcm9wZXJ0eShsKT8obnVsbCE9ayYmXCJvblNjcm9sbFwiPT09bCYmRChcInNjcm9sbFwiLGEpLGZ8fGg9PT1rfHwoZj1bXSkpOihmPWZ8fFtdKS5wdXNoKGwsaykpfWMmJihmPWZ8fFtdKS5wdXNoKFwic3R5bGVcIixjKTt2YXIgbD1mO2lmKGIudXBkYXRlUXVldWU9bCliLmZsYWdzfD00fX07RGo9ZnVuY3Rpb24oYSxiLGMsZCl7YyE9PWQmJihiLmZsYWdzfD00KX07XG5mdW5jdGlvbiBFaihhLGIpe2lmKCFJKXN3aXRjaChhLnRhaWxNb2RlKXtjYXNlIFwiaGlkZGVuXCI6Yj1hLnRhaWw7Zm9yKHZhciBjPW51bGw7bnVsbCE9PWI7KW51bGwhPT1iLmFsdGVybmF0ZSYmKGM9YiksYj1iLnNpYmxpbmc7bnVsbD09PWM/YS50YWlsPW51bGw6Yy5zaWJsaW5nPW51bGw7YnJlYWs7Y2FzZSBcImNvbGxhcHNlZFwiOmM9YS50YWlsO2Zvcih2YXIgZD1udWxsO251bGwhPT1jOyludWxsIT09Yy5hbHRlcm5hdGUmJihkPWMpLGM9Yy5zaWJsaW5nO251bGw9PT1kP2J8fG51bGw9PT1hLnRhaWw/YS50YWlsPW51bGw6YS50YWlsLnNpYmxpbmc9bnVsbDpkLnNpYmxpbmc9bnVsbH19XG5mdW5jdGlvbiBTKGEpe3ZhciBiPW51bGwhPT1hLmFsdGVybmF0ZSYmYS5hbHRlcm5hdGUuY2hpbGQ9PT1hLmNoaWxkLGM9MCxkPTA7aWYoYilmb3IodmFyIGU9YS5jaGlsZDtudWxsIT09ZTspY3w9ZS5sYW5lc3xlLmNoaWxkTGFuZXMsZHw9ZS5zdWJ0cmVlRmxhZ3MmMTQ2ODAwNjQsZHw9ZS5mbGFncyYxNDY4MDA2NCxlLnJldHVybj1hLGU9ZS5zaWJsaW5nO2Vsc2UgZm9yKGU9YS5jaGlsZDtudWxsIT09ZTspY3w9ZS5sYW5lc3xlLmNoaWxkTGFuZXMsZHw9ZS5zdWJ0cmVlRmxhZ3MsZHw9ZS5mbGFncyxlLnJldHVybj1hLGU9ZS5zaWJsaW5nO2Euc3VidHJlZUZsYWdzfD1kO2EuY2hpbGRMYW5lcz1jO3JldHVybiBifVxuZnVuY3Rpb24gRmooYSxiLGMpe3ZhciBkPWIucGVuZGluZ1Byb3BzO3dnKGIpO3N3aXRjaChiLnRhZyl7Y2FzZSAyOmNhc2UgMTY6Y2FzZSAxNTpjYXNlIDA6Y2FzZSAxMTpjYXNlIDc6Y2FzZSA4OmNhc2UgMTI6Y2FzZSA5OmNhc2UgMTQ6cmV0dXJuIFMoYiksbnVsbDtjYXNlIDE6cmV0dXJuIFpmKGIudHlwZSkmJiRmKCksUyhiKSxudWxsO2Nhc2UgMzpkPWIuc3RhdGVOb2RlO0poKCk7RShXZik7RShIKTtPaCgpO2QucGVuZGluZ0NvbnRleHQmJihkLmNvbnRleHQ9ZC5wZW5kaW5nQ29udGV4dCxkLnBlbmRpbmdDb250ZXh0PW51bGwpO2lmKG51bGw9PT1hfHxudWxsPT09YS5jaGlsZClHZyhiKT9iLmZsYWdzfD00Om51bGw9PT1hfHxhLm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkJiYwPT09KGIuZmxhZ3MmMjU2KXx8KGIuZmxhZ3N8PTEwMjQsbnVsbCE9PXpnJiYoR2ooemcpLHpnPW51bGwpKTtCaihhLGIpO1MoYik7cmV0dXJuIG51bGw7Y2FzZSA1OkxoKGIpO3ZhciBlPUhoKEdoLmN1cnJlbnQpO1xuYz1iLnR5cGU7aWYobnVsbCE9PWEmJm51bGwhPWIuc3RhdGVOb2RlKUNqKGEsYixjLGQsZSksYS5yZWYhPT1iLnJlZiYmKGIuZmxhZ3N8PTUxMixiLmZsYWdzfD0yMDk3MTUyKTtlbHNle2lmKCFkKXtpZihudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IocCgxNjYpKTtTKGIpO3JldHVybiBudWxsfWE9SGgoRWguY3VycmVudCk7aWYoR2coYikpe2Q9Yi5zdGF0ZU5vZGU7Yz1iLnR5cGU7dmFyIGY9Yi5tZW1vaXplZFByb3BzO2RbT2ZdPWI7ZFtQZl09ZjthPTAhPT0oYi5tb2RlJjEpO3N3aXRjaChjKXtjYXNlIFwiZGlhbG9nXCI6RChcImNhbmNlbFwiLGQpO0QoXCJjbG9zZVwiLGQpO2JyZWFrO2Nhc2UgXCJpZnJhbWVcIjpjYXNlIFwib2JqZWN0XCI6Y2FzZSBcImVtYmVkXCI6RChcImxvYWRcIixkKTticmVhaztjYXNlIFwidmlkZW9cIjpjYXNlIFwiYXVkaW9cIjpmb3IoZT0wO2U8bGYubGVuZ3RoO2UrKylEKGxmW2VdLGQpO2JyZWFrO2Nhc2UgXCJzb3VyY2VcIjpEKFwiZXJyb3JcIixkKTticmVhaztjYXNlIFwiaW1nXCI6Y2FzZSBcImltYWdlXCI6Y2FzZSBcImxpbmtcIjpEKFwiZXJyb3JcIixcbmQpO0QoXCJsb2FkXCIsZCk7YnJlYWs7Y2FzZSBcImRldGFpbHNcIjpEKFwidG9nZ2xlXCIsZCk7YnJlYWs7Y2FzZSBcImlucHV0XCI6WmEoZCxmKTtEKFwiaW52YWxpZFwiLGQpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjpkLl93cmFwcGVyU3RhdGU9e3dhc011bHRpcGxlOiEhZi5tdWx0aXBsZX07RChcImludmFsaWRcIixkKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjpoYihkLGYpLEQoXCJpbnZhbGlkXCIsZCl9dWIoYyxmKTtlPW51bGw7Zm9yKHZhciBnIGluIGYpaWYoZi5oYXNPd25Qcm9wZXJ0eShnKSl7dmFyIGg9ZltnXTtcImNoaWxkcmVuXCI9PT1nP1wic3RyaW5nXCI9PT10eXBlb2YgaD9kLnRleHRDb250ZW50IT09aCYmKCEwIT09Zi5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcmJkFmKGQudGV4dENvbnRlbnQsaCxhKSxlPVtcImNoaWxkcmVuXCIsaF0pOlwibnVtYmVyXCI9PT10eXBlb2YgaCYmZC50ZXh0Q29udGVudCE9PVwiXCIraCYmKCEwIT09Zi5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcmJkFmKGQudGV4dENvbnRlbnQsXG5oLGEpLGU9W1wiY2hpbGRyZW5cIixcIlwiK2hdKTplYS5oYXNPd25Qcm9wZXJ0eShnKSYmbnVsbCE9aCYmXCJvblNjcm9sbFwiPT09ZyYmRChcInNjcm9sbFwiLGQpfXN3aXRjaChjKXtjYXNlIFwiaW5wdXRcIjpWYShkKTtkYihkLGYsITApO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOlZhKGQpO2piKGQpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjpjYXNlIFwib3B0aW9uXCI6YnJlYWs7ZGVmYXVsdDpcImZ1bmN0aW9uXCI9PT10eXBlb2YgZi5vbkNsaWNrJiYoZC5vbmNsaWNrPUJmKX1kPWU7Yi51cGRhdGVRdWV1ZT1kO251bGwhPT1kJiYoYi5mbGFnc3w9NCl9ZWxzZXtnPTk9PT1lLm5vZGVUeXBlP2U6ZS5vd25lckRvY3VtZW50O1wiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPT09YSYmKGE9a2IoYykpO1wiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPT09YT9cInNjcmlwdFwiPT09Yz8oYT1nLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksYS5pbm5lckhUTUw9XCI8c2NyaXB0PlxceDNjL3NjcmlwdD5cIixhPWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKSk6XG5cInN0cmluZ1wiPT09dHlwZW9mIGQuaXM/YT1nLmNyZWF0ZUVsZW1lbnQoYyx7aXM6ZC5pc30pOihhPWcuY3JlYXRlRWxlbWVudChjKSxcInNlbGVjdFwiPT09YyYmKGc9YSxkLm11bHRpcGxlP2cubXVsdGlwbGU9ITA6ZC5zaXplJiYoZy5zaXplPWQuc2l6ZSkpKTphPWcuY3JlYXRlRWxlbWVudE5TKGEsYyk7YVtPZl09YjthW1BmXT1kO0FqKGEsYiwhMSwhMSk7Yi5zdGF0ZU5vZGU9YTthOntnPXZiKGMsZCk7c3dpdGNoKGMpe2Nhc2UgXCJkaWFsb2dcIjpEKFwiY2FuY2VsXCIsYSk7RChcImNsb3NlXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJpZnJhbWVcIjpjYXNlIFwib2JqZWN0XCI6Y2FzZSBcImVtYmVkXCI6RChcImxvYWRcIixhKTtlPWQ7YnJlYWs7Y2FzZSBcInZpZGVvXCI6Y2FzZSBcImF1ZGlvXCI6Zm9yKGU9MDtlPGxmLmxlbmd0aDtlKyspRChsZltlXSxhKTtlPWQ7YnJlYWs7Y2FzZSBcInNvdXJjZVwiOkQoXCJlcnJvclwiLGEpO2U9ZDticmVhaztjYXNlIFwiaW1nXCI6Y2FzZSBcImltYWdlXCI6Y2FzZSBcImxpbmtcIjpEKFwiZXJyb3JcIixcbmEpO0QoXCJsb2FkXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJkZXRhaWxzXCI6RChcInRvZ2dsZVwiLGEpO2U9ZDticmVhaztjYXNlIFwiaW5wdXRcIjpaYShhLGQpO2U9WWEoYSxkKTtEKFwiaW52YWxpZFwiLGEpO2JyZWFrO2Nhc2UgXCJvcHRpb25cIjplPWQ7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmEuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFkLm11bHRpcGxlfTtlPUEoe30sZCx7dmFsdWU6dm9pZCAwfSk7RChcImludmFsaWRcIixhKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjpoYihhLGQpO2U9Z2IoYSxkKTtEKFwiaW52YWxpZFwiLGEpO2JyZWFrO2RlZmF1bHQ6ZT1kfXViKGMsZSk7aD1lO2ZvcihmIGluIGgpaWYoaC5oYXNPd25Qcm9wZXJ0eShmKSl7dmFyIGs9aFtmXTtcInN0eWxlXCI9PT1mP3NiKGEsayk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT09Zj8oaz1rP2suX19odG1sOnZvaWQgMCxudWxsIT1rJiZuYihhLGspKTpcImNoaWxkcmVuXCI9PT1mP1wic3RyaW5nXCI9PT10eXBlb2Ygaz8oXCJ0ZXh0YXJlYVwiIT09XG5jfHxcIlwiIT09aykmJm9iKGEsayk6XCJudW1iZXJcIj09PXR5cGVvZiBrJiZvYihhLFwiXCIrayk6XCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIiE9PWYmJlwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCIhPT1mJiZcImF1dG9Gb2N1c1wiIT09ZiYmKGVhLmhhc093blByb3BlcnR5KGYpP251bGwhPWsmJlwib25TY3JvbGxcIj09PWYmJkQoXCJzY3JvbGxcIixhKTpudWxsIT1rJiZ0YShhLGYsayxnKSl9c3dpdGNoKGMpe2Nhc2UgXCJpbnB1dFwiOlZhKGEpO2RiKGEsZCwhMSk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6VmEoYSk7amIoYSk7YnJlYWs7Y2FzZSBcIm9wdGlvblwiOm51bGwhPWQudmFsdWUmJmEuc2V0QXR0cmlidXRlKFwidmFsdWVcIixcIlwiK1NhKGQudmFsdWUpKTticmVhaztjYXNlIFwic2VsZWN0XCI6YS5tdWx0aXBsZT0hIWQubXVsdGlwbGU7Zj1kLnZhbHVlO251bGwhPWY/ZmIoYSwhIWQubXVsdGlwbGUsZiwhMSk6bnVsbCE9ZC5kZWZhdWx0VmFsdWUmJmZiKGEsISFkLm11bHRpcGxlLGQuZGVmYXVsdFZhbHVlLFxuITApO2JyZWFrO2RlZmF1bHQ6XCJmdW5jdGlvblwiPT09dHlwZW9mIGUub25DbGljayYmKGEub25jbGljaz1CZil9c3dpdGNoKGMpe2Nhc2UgXCJidXR0b25cIjpjYXNlIFwiaW5wdXRcIjpjYXNlIFwic2VsZWN0XCI6Y2FzZSBcInRleHRhcmVhXCI6ZD0hIWQuYXV0b0ZvY3VzO2JyZWFrIGE7Y2FzZSBcImltZ1wiOmQ9ITA7YnJlYWsgYTtkZWZhdWx0OmQ9ITF9fWQmJihiLmZsYWdzfD00KX1udWxsIT09Yi5yZWYmJihiLmZsYWdzfD01MTIsYi5mbGFnc3w9MjA5NzE1Mil9UyhiKTtyZXR1cm4gbnVsbDtjYXNlIDY6aWYoYSYmbnVsbCE9Yi5zdGF0ZU5vZGUpRGooYSxiLGEubWVtb2l6ZWRQcm9wcyxkKTtlbHNle2lmKFwic3RyaW5nXCIhPT10eXBlb2YgZCYmbnVsbD09PWIuc3RhdGVOb2RlKXRocm93IEVycm9yKHAoMTY2KSk7Yz1IaChHaC5jdXJyZW50KTtIaChFaC5jdXJyZW50KTtpZihHZyhiKSl7ZD1iLnN0YXRlTm9kZTtjPWIubWVtb2l6ZWRQcm9wcztkW09mXT1iO2lmKGY9ZC5ub2RlVmFsdWUhPT1jKWlmKGE9XG54ZyxudWxsIT09YSlzd2l0Y2goYS50YWcpe2Nhc2UgMzpBZihkLm5vZGVWYWx1ZSxjLDAhPT0oYS5tb2RlJjEpKTticmVhaztjYXNlIDU6ITAhPT1hLm1lbW9pemVkUHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJiZBZihkLm5vZGVWYWx1ZSxjLDAhPT0oYS5tb2RlJjEpKX1mJiYoYi5mbGFnc3w9NCl9ZWxzZSBkPSg5PT09Yy5ub2RlVHlwZT9jOmMub3duZXJEb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUoZCksZFtPZl09YixiLnN0YXRlTm9kZT1kfVMoYik7cmV0dXJuIG51bGw7Y2FzZSAxMzpFKE0pO2Q9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGw9PT1hfHxudWxsIT09YS5tZW1vaXplZFN0YXRlJiZudWxsIT09YS5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQpe2lmKEkmJm51bGwhPT15ZyYmMCE9PShiLm1vZGUmMSkmJjA9PT0oYi5mbGFncyYxMjgpKUhnKCksSWcoKSxiLmZsYWdzfD05ODU2MCxmPSExO2Vsc2UgaWYoZj1HZyhiKSxudWxsIT09ZCYmbnVsbCE9PWQuZGVoeWRyYXRlZCl7aWYobnVsbD09PVxuYSl7aWYoIWYpdGhyb3cgRXJyb3IocCgzMTgpKTtmPWIubWVtb2l6ZWRTdGF0ZTtmPW51bGwhPT1mP2YuZGVoeWRyYXRlZDpudWxsO2lmKCFmKXRocm93IEVycm9yKHAoMzE3KSk7ZltPZl09Yn1lbHNlIElnKCksMD09PShiLmZsYWdzJjEyOCkmJihiLm1lbW9pemVkU3RhdGU9bnVsbCksYi5mbGFnc3w9NDtTKGIpO2Y9ITF9ZWxzZSBudWxsIT09emcmJihHaih6Zyksemc9bnVsbCksZj0hMDtpZighZilyZXR1cm4gYi5mbGFncyY2NTUzNj9iOm51bGx9aWYoMCE9PShiLmZsYWdzJjEyOCkpcmV0dXJuIGIubGFuZXM9YyxiO2Q9bnVsbCE9PWQ7ZCE9PShudWxsIT09YSYmbnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSkmJmQmJihiLmNoaWxkLmZsYWdzfD04MTkyLDAhPT0oYi5tb2RlJjEpJiYobnVsbD09PWF8fDAhPT0oTS5jdXJyZW50JjEpPzA9PT1UJiYoVD0zKTp1aigpKSk7bnVsbCE9PWIudXBkYXRlUXVldWUmJihiLmZsYWdzfD00KTtTKGIpO3JldHVybiBudWxsO2Nhc2UgNDpyZXR1cm4gSmgoKSxcbkJqKGEsYiksbnVsbD09PWEmJnNmKGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFMoYiksbnVsbDtjYXNlIDEwOnJldHVybiBSZyhiLnR5cGUuX2NvbnRleHQpLFMoYiksbnVsbDtjYXNlIDE3OnJldHVybiBaZihiLnR5cGUpJiYkZigpLFMoYiksbnVsbDtjYXNlIDE5OkUoTSk7Zj1iLm1lbW9pemVkU3RhdGU7aWYobnVsbD09PWYpcmV0dXJuIFMoYiksbnVsbDtkPTAhPT0oYi5mbGFncyYxMjgpO2c9Zi5yZW5kZXJpbmc7aWYobnVsbD09PWcpaWYoZClFaihmLCExKTtlbHNle2lmKDAhPT1UfHxudWxsIT09YSYmMCE9PShhLmZsYWdzJjEyOCkpZm9yKGE9Yi5jaGlsZDtudWxsIT09YTspe2c9TWgoYSk7aWYobnVsbCE9PWcpe2IuZmxhZ3N8PTEyODtFaihmLCExKTtkPWcudXBkYXRlUXVldWU7bnVsbCE9PWQmJihiLnVwZGF0ZVF1ZXVlPWQsYi5mbGFnc3w9NCk7Yi5zdWJ0cmVlRmxhZ3M9MDtkPWM7Zm9yKGM9Yi5jaGlsZDtudWxsIT09YzspZj1jLGE9ZCxmLmZsYWdzJj0xNDY4MDA2Nixcbmc9Zi5hbHRlcm5hdGUsbnVsbD09PWc/KGYuY2hpbGRMYW5lcz0wLGYubGFuZXM9YSxmLmNoaWxkPW51bGwsZi5zdWJ0cmVlRmxhZ3M9MCxmLm1lbW9pemVkUHJvcHM9bnVsbCxmLm1lbW9pemVkU3RhdGU9bnVsbCxmLnVwZGF0ZVF1ZXVlPW51bGwsZi5kZXBlbmRlbmNpZXM9bnVsbCxmLnN0YXRlTm9kZT1udWxsKTooZi5jaGlsZExhbmVzPWcuY2hpbGRMYW5lcyxmLmxhbmVzPWcubGFuZXMsZi5jaGlsZD1nLmNoaWxkLGYuc3VidHJlZUZsYWdzPTAsZi5kZWxldGlvbnM9bnVsbCxmLm1lbW9pemVkUHJvcHM9Zy5tZW1vaXplZFByb3BzLGYubWVtb2l6ZWRTdGF0ZT1nLm1lbW9pemVkU3RhdGUsZi51cGRhdGVRdWV1ZT1nLnVwZGF0ZVF1ZXVlLGYudHlwZT1nLnR5cGUsYT1nLmRlcGVuZGVuY2llcyxmLmRlcGVuZGVuY2llcz1udWxsPT09YT9udWxsOntsYW5lczphLmxhbmVzLGZpcnN0Q29udGV4dDphLmZpcnN0Q29udGV4dH0pLGM9Yy5zaWJsaW5nO0coTSxNLmN1cnJlbnQmMXwyKTtyZXR1cm4gYi5jaGlsZH1hPVxuYS5zaWJsaW5nfW51bGwhPT1mLnRhaWwmJkIoKT5IaiYmKGIuZmxhZ3N8PTEyOCxkPSEwLEVqKGYsITEpLGIubGFuZXM9NDE5NDMwNCl9ZWxzZXtpZighZClpZihhPU1oKGcpLG51bGwhPT1hKXtpZihiLmZsYWdzfD0xMjgsZD0hMCxjPWEudXBkYXRlUXVldWUsbnVsbCE9PWMmJihiLnVwZGF0ZVF1ZXVlPWMsYi5mbGFnc3w9NCksRWooZiwhMCksbnVsbD09PWYudGFpbCYmXCJoaWRkZW5cIj09PWYudGFpbE1vZGUmJiFnLmFsdGVybmF0ZSYmIUkpcmV0dXJuIFMoYiksbnVsbH1lbHNlIDIqQigpLWYucmVuZGVyaW5nU3RhcnRUaW1lPkhqJiYxMDczNzQxODI0IT09YyYmKGIuZmxhZ3N8PTEyOCxkPSEwLEVqKGYsITEpLGIubGFuZXM9NDE5NDMwNCk7Zi5pc0JhY2t3YXJkcz8oZy5zaWJsaW5nPWIuY2hpbGQsYi5jaGlsZD1nKTooYz1mLmxhc3QsbnVsbCE9PWM/Yy5zaWJsaW5nPWc6Yi5jaGlsZD1nLGYubGFzdD1nKX1pZihudWxsIT09Zi50YWlsKXJldHVybiBiPWYudGFpbCxmLnJlbmRlcmluZz1cbmIsZi50YWlsPWIuc2libGluZyxmLnJlbmRlcmluZ1N0YXJ0VGltZT1CKCksYi5zaWJsaW5nPW51bGwsYz1NLmN1cnJlbnQsRyhNLGQ/YyYxfDI6YyYxKSxiO1MoYik7cmV0dXJuIG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBJaigpLGQ9bnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSxudWxsIT09YSYmbnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSE9PWQmJihiLmZsYWdzfD04MTkyKSxkJiYwIT09KGIubW9kZSYxKT8wIT09KGdqJjEwNzM3NDE4MjQpJiYoUyhiKSxiLnN1YnRyZWVGbGFncyY2JiYoYi5mbGFnc3w9ODE5MikpOlMoYiksbnVsbDtjYXNlIDI0OnJldHVybiBudWxsO2Nhc2UgMjU6cmV0dXJuIG51bGx9dGhyb3cgRXJyb3IocCgxNTYsYi50YWcpKTt9XG5mdW5jdGlvbiBKaihhLGIpe3dnKGIpO3N3aXRjaChiLnRhZyl7Y2FzZSAxOnJldHVybiBaZihiLnR5cGUpJiYkZigpLGE9Yi5mbGFncyxhJjY1NTM2PyhiLmZsYWdzPWEmLTY1NTM3fDEyOCxiKTpudWxsO2Nhc2UgMzpyZXR1cm4gSmgoKSxFKFdmKSxFKEgpLE9oKCksYT1iLmZsYWdzLDAhPT0oYSY2NTUzNikmJjA9PT0oYSYxMjgpPyhiLmZsYWdzPWEmLTY1NTM3fDEyOCxiKTpudWxsO2Nhc2UgNTpyZXR1cm4gTGgoYiksbnVsbDtjYXNlIDEzOkUoTSk7YT1iLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWEmJm51bGwhPT1hLmRlaHlkcmF0ZWQpe2lmKG51bGw9PT1iLmFsdGVybmF0ZSl0aHJvdyBFcnJvcihwKDM0MCkpO0lnKCl9YT1iLmZsYWdzO3JldHVybiBhJjY1NTM2PyhiLmZsYWdzPWEmLTY1NTM3fDEyOCxiKTpudWxsO2Nhc2UgMTk6cmV0dXJuIEUoTSksbnVsbDtjYXNlIDQ6cmV0dXJuIEpoKCksbnVsbDtjYXNlIDEwOnJldHVybiBSZyhiLnR5cGUuX2NvbnRleHQpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBJaigpLFxubnVsbDtjYXNlIDI0OnJldHVybiBudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciBLaj0hMSxVPSExLExqPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBXZWFrU2V0P1dlYWtTZXQ6U2V0LFY9bnVsbDtmdW5jdGlvbiBNaihhLGIpe3ZhciBjPWEucmVmO2lmKG51bGwhPT1jKWlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBjKXRyeXtjKG51bGwpfWNhdGNoKGQpe1coYSxiLGQpfWVsc2UgYy5jdXJyZW50PW51bGx9ZnVuY3Rpb24gTmooYSxiLGMpe3RyeXtjKCl9Y2F0Y2goZCl7VyhhLGIsZCl9fXZhciBPaj0hMTtcbmZ1bmN0aW9uIFBqKGEsYil7Q2Y9ZGQ7YT1NZSgpO2lmKE5lKGEpKXtpZihcInNlbGVjdGlvblN0YXJ0XCJpbiBhKXZhciBjPXtzdGFydDphLnNlbGVjdGlvblN0YXJ0LGVuZDphLnNlbGVjdGlvbkVuZH07ZWxzZSBhOntjPShjPWEub3duZXJEb2N1bWVudCkmJmMuZGVmYXVsdFZpZXd8fHdpbmRvdzt2YXIgZD1jLmdldFNlbGVjdGlvbiYmYy5nZXRTZWxlY3Rpb24oKTtpZihkJiYwIT09ZC5yYW5nZUNvdW50KXtjPWQuYW5jaG9yTm9kZTt2YXIgZT1kLmFuY2hvck9mZnNldCxmPWQuZm9jdXNOb2RlO2Q9ZC5mb2N1c09mZnNldDt0cnl7Yy5ub2RlVHlwZSxmLm5vZGVUeXBlfWNhdGNoKEYpe2M9bnVsbDticmVhayBhfXZhciBnPTAsaD0tMSxrPS0xLGw9MCxtPTAscT1hLHI9bnVsbDtiOmZvcig7Oyl7Zm9yKHZhciB5Ozspe3EhPT1jfHwwIT09ZSYmMyE9PXEubm9kZVR5cGV8fChoPWcrZSk7cSE9PWZ8fDAhPT1kJiYzIT09cS5ub2RlVHlwZXx8KGs9ZytkKTszPT09cS5ub2RlVHlwZSYmKGcrPVxucS5ub2RlVmFsdWUubGVuZ3RoKTtpZihudWxsPT09KHk9cS5maXJzdENoaWxkKSlicmVhaztyPXE7cT15fWZvcig7Oyl7aWYocT09PWEpYnJlYWsgYjtyPT09YyYmKytsPT09ZSYmKGg9Zyk7cj09PWYmJisrbT09PWQmJihrPWcpO2lmKG51bGwhPT0oeT1xLm5leHRTaWJsaW5nKSlicmVhaztxPXI7cj1xLnBhcmVudE5vZGV9cT15fWM9LTE9PT1ofHwtMT09PWs/bnVsbDp7c3RhcnQ6aCxlbmQ6a319ZWxzZSBjPW51bGx9Yz1jfHx7c3RhcnQ6MCxlbmQ6MH19ZWxzZSBjPW51bGw7RGY9e2ZvY3VzZWRFbGVtOmEsc2VsZWN0aW9uUmFuZ2U6Y307ZGQ9ITE7Zm9yKFY9YjtudWxsIT09VjspaWYoYj1WLGE9Yi5jaGlsZCwwIT09KGIuc3VidHJlZUZsYWdzJjEwMjgpJiZudWxsIT09YSlhLnJldHVybj1iLFY9YTtlbHNlIGZvcig7bnVsbCE9PVY7KXtiPVY7dHJ5e3ZhciBuPWIuYWx0ZXJuYXRlO2lmKDAhPT0oYi5mbGFncyYxMDI0KSlzd2l0Y2goYi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6YnJlYWs7XG5jYXNlIDE6aWYobnVsbCE9PW4pe3ZhciB0PW4ubWVtb2l6ZWRQcm9wcyxKPW4ubWVtb2l6ZWRTdGF0ZSx4PWIuc3RhdGVOb2RlLHc9eC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShiLmVsZW1lbnRUeXBlPT09Yi50eXBlP3Q6TGcoYi50eXBlLHQpLEopO3guX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9d31icmVhaztjYXNlIDM6dmFyIHU9Yi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzsxPT09dS5ub2RlVHlwZT91LnRleHRDb250ZW50PVwiXCI6OT09PXUubm9kZVR5cGUmJnUuZG9jdW1lbnRFbGVtZW50JiZ1LnJlbW92ZUNoaWxkKHUuZG9jdW1lbnRFbGVtZW50KTticmVhaztjYXNlIDU6Y2FzZSA2OmNhc2UgNDpjYXNlIDE3OmJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IocCgxNjMpKTt9fWNhdGNoKEYpe1coYixiLnJldHVybixGKX1hPWIuc2libGluZztpZihudWxsIT09YSl7YS5yZXR1cm49Yi5yZXR1cm47Vj1hO2JyZWFrfVY9Yi5yZXR1cm59bj1PajtPaj0hMTtyZXR1cm4gbn1cbmZ1bmN0aW9uIFFqKGEsYixjKXt2YXIgZD1iLnVwZGF0ZVF1ZXVlO2Q9bnVsbCE9PWQ/ZC5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWQpe3ZhciBlPWQ9ZC5uZXh0O2Rve2lmKChlLnRhZyZhKT09PWEpe3ZhciBmPWUuZGVzdHJveTtlLmRlc3Ryb3k9dm9pZCAwO3ZvaWQgMCE9PWYmJk5qKGIsYyxmKX1lPWUubmV4dH13aGlsZShlIT09ZCl9fWZ1bmN0aW9uIFJqKGEsYil7Yj1iLnVwZGF0ZVF1ZXVlO2I9bnVsbCE9PWI/Yi5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWIpe3ZhciBjPWI9Yi5uZXh0O2Rve2lmKChjLnRhZyZhKT09PWEpe3ZhciBkPWMuY3JlYXRlO2MuZGVzdHJveT1kKCl9Yz1jLm5leHR9d2hpbGUoYyE9PWIpfX1mdW5jdGlvbiBTaihhKXt2YXIgYj1hLnJlZjtpZihudWxsIT09Yil7dmFyIGM9YS5zdGF0ZU5vZGU7c3dpdGNoKGEudGFnKXtjYXNlIDU6YT1jO2JyZWFrO2RlZmF1bHQ6YT1jfVwiZnVuY3Rpb25cIj09PXR5cGVvZiBiP2IoYSk6Yi5jdXJyZW50PWF9fVxuZnVuY3Rpb24gVGooYSl7dmFyIGI9YS5hbHRlcm5hdGU7bnVsbCE9PWImJihhLmFsdGVybmF0ZT1udWxsLFRqKGIpKTthLmNoaWxkPW51bGw7YS5kZWxldGlvbnM9bnVsbDthLnNpYmxpbmc9bnVsbDs1PT09YS50YWcmJihiPWEuc3RhdGVOb2RlLG51bGwhPT1iJiYoZGVsZXRlIGJbT2ZdLGRlbGV0ZSBiW1BmXSxkZWxldGUgYltvZl0sZGVsZXRlIGJbUWZdLGRlbGV0ZSBiW1JmXSkpO2Euc3RhdGVOb2RlPW51bGw7YS5yZXR1cm49bnVsbDthLmRlcGVuZGVuY2llcz1udWxsO2EubWVtb2l6ZWRQcm9wcz1udWxsO2EubWVtb2l6ZWRTdGF0ZT1udWxsO2EucGVuZGluZ1Byb3BzPW51bGw7YS5zdGF0ZU5vZGU9bnVsbDthLnVwZGF0ZVF1ZXVlPW51bGx9ZnVuY3Rpb24gVWooYSl7cmV0dXJuIDU9PT1hLnRhZ3x8Mz09PWEudGFnfHw0PT09YS50YWd9XG5mdW5jdGlvbiBWaihhKXthOmZvcig7Oyl7Zm9yKDtudWxsPT09YS5zaWJsaW5nOyl7aWYobnVsbD09PWEucmV0dXJufHxVaihhLnJldHVybikpcmV0dXJuIG51bGw7YT1hLnJldHVybn1hLnNpYmxpbmcucmV0dXJuPWEucmV0dXJuO2ZvcihhPWEuc2libGluZzs1IT09YS50YWcmJjYhPT1hLnRhZyYmMTghPT1hLnRhZzspe2lmKGEuZmxhZ3MmMiljb250aW51ZSBhO2lmKG51bGw9PT1hLmNoaWxkfHw0PT09YS50YWcpY29udGludWUgYTtlbHNlIGEuY2hpbGQucmV0dXJuPWEsYT1hLmNoaWxkfWlmKCEoYS5mbGFncyYyKSlyZXR1cm4gYS5zdGF0ZU5vZGV9fVxuZnVuY3Rpb24gV2ooYSxiLGMpe3ZhciBkPWEudGFnO2lmKDU9PT1kfHw2PT09ZClhPWEuc3RhdGVOb2RlLGI/OD09PWMubm9kZVR5cGU/Yy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLGIpOmMuaW5zZXJ0QmVmb3JlKGEsYik6KDg9PT1jLm5vZGVUeXBlPyhiPWMucGFyZW50Tm9kZSxiLmluc2VydEJlZm9yZShhLGMpKTooYj1jLGIuYXBwZW5kQ2hpbGQoYSkpLGM9Yy5fcmVhY3RSb290Q29udGFpbmVyLG51bGwhPT1jJiZ2b2lkIDAhPT1jfHxudWxsIT09Yi5vbmNsaWNrfHwoYi5vbmNsaWNrPUJmKSk7ZWxzZSBpZig0IT09ZCYmKGE9YS5jaGlsZCxudWxsIT09YSkpZm9yKFdqKGEsYixjKSxhPWEuc2libGluZztudWxsIT09YTspV2ooYSxiLGMpLGE9YS5zaWJsaW5nfVxuZnVuY3Rpb24gWGooYSxiLGMpe3ZhciBkPWEudGFnO2lmKDU9PT1kfHw2PT09ZClhPWEuc3RhdGVOb2RlLGI/Yy5pbnNlcnRCZWZvcmUoYSxiKTpjLmFwcGVuZENoaWxkKGEpO2Vsc2UgaWYoNCE9PWQmJihhPWEuY2hpbGQsbnVsbCE9PWEpKWZvcihYaihhLGIsYyksYT1hLnNpYmxpbmc7bnVsbCE9PWE7KVhqKGEsYixjKSxhPWEuc2libGluZ312YXIgWD1udWxsLFlqPSExO2Z1bmN0aW9uIFpqKGEsYixjKXtmb3IoYz1jLmNoaWxkO251bGwhPT1jOylhayhhLGIsYyksYz1jLnNpYmxpbmd9XG5mdW5jdGlvbiBhayhhLGIsYyl7aWYobGMmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBsYy5vbkNvbW1pdEZpYmVyVW5tb3VudCl0cnl7bGMub25Db21taXRGaWJlclVubW91bnQoa2MsYyl9Y2F0Y2goaCl7fXN3aXRjaChjLnRhZyl7Y2FzZSA1OlV8fE1qKGMsYik7Y2FzZSA2OnZhciBkPVgsZT1ZajtYPW51bGw7WmooYSxiLGMpO1g9ZDtZaj1lO251bGwhPT1YJiYoWWo/KGE9WCxjPWMuc3RhdGVOb2RlLDg9PT1hLm5vZGVUeXBlP2EucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKTphLnJlbW92ZUNoaWxkKGMpKTpYLnJlbW92ZUNoaWxkKGMuc3RhdGVOb2RlKSk7YnJlYWs7Y2FzZSAxODpudWxsIT09WCYmKFlqPyhhPVgsYz1jLnN0YXRlTm9kZSw4PT09YS5ub2RlVHlwZT9LZihhLnBhcmVudE5vZGUsYyk6MT09PWEubm9kZVR5cGUmJktmKGEsYyksYmQoYSkpOktmKFgsYy5zdGF0ZU5vZGUpKTticmVhaztjYXNlIDQ6ZD1YO2U9WWo7WD1jLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1lqPSEwO1xuWmooYSxiLGMpO1g9ZDtZaj1lO2JyZWFrO2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTppZighVSYmKGQ9Yy51cGRhdGVRdWV1ZSxudWxsIT09ZCYmKGQ9ZC5sYXN0RWZmZWN0LG51bGwhPT1kKSkpe2U9ZD1kLm5leHQ7ZG97dmFyIGY9ZSxnPWYuZGVzdHJveTtmPWYudGFnO3ZvaWQgMCE9PWcmJigwIT09KGYmMik/TmooYyxiLGcpOjAhPT0oZiY0KSYmTmooYyxiLGcpKTtlPWUubmV4dH13aGlsZShlIT09ZCl9WmooYSxiLGMpO2JyZWFrO2Nhc2UgMTppZighVSYmKE1qKGMsYiksZD1jLnN0YXRlTm9kZSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5jb21wb25lbnRXaWxsVW5tb3VudCkpdHJ5e2QucHJvcHM9Yy5tZW1vaXplZFByb3BzLGQuc3RhdGU9Yy5tZW1vaXplZFN0YXRlLGQuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChoKXtXKGMsYixoKX1aaihhLGIsYyk7YnJlYWs7Y2FzZSAyMTpaaihhLGIsYyk7YnJlYWs7Y2FzZSAyMjpjLm1vZGUmMT8oVT0oZD1VKXx8bnVsbCE9PVxuYy5tZW1vaXplZFN0YXRlLFpqKGEsYixjKSxVPWQpOlpqKGEsYixjKTticmVhaztkZWZhdWx0OlpqKGEsYixjKX19ZnVuY3Rpb24gYmsoYSl7dmFyIGI9YS51cGRhdGVRdWV1ZTtpZihudWxsIT09Yil7YS51cGRhdGVRdWV1ZT1udWxsO3ZhciBjPWEuc3RhdGVOb2RlO251bGw9PT1jJiYoYz1hLnN0YXRlTm9kZT1uZXcgTGopO2IuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgZD1jay5iaW5kKG51bGwsYSxiKTtjLmhhcyhiKXx8KGMuYWRkKGIpLGIudGhlbihkLGQpKX0pfX1cbmZ1bmN0aW9uIGRrKGEsYil7dmFyIGM9Yi5kZWxldGlvbnM7aWYobnVsbCE9PWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07dHJ5e3ZhciBmPWEsZz1iLGg9ZzthOmZvcig7bnVsbCE9PWg7KXtzd2l0Y2goaC50YWcpe2Nhc2UgNTpYPWguc3RhdGVOb2RlO1lqPSExO2JyZWFrIGE7Y2FzZSAzOlg9aC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztZaj0hMDticmVhayBhO2Nhc2UgNDpYPWguc3RhdGVOb2RlLmNvbnRhaW5lckluZm87WWo9ITA7YnJlYWsgYX1oPWgucmV0dXJufWlmKG51bGw9PT1YKXRocm93IEVycm9yKHAoMTYwKSk7YWsoZixnLGUpO1g9bnVsbDtZaj0hMTt2YXIgaz1lLmFsdGVybmF0ZTtudWxsIT09ayYmKGsucmV0dXJuPW51bGwpO2UucmV0dXJuPW51bGx9Y2F0Y2gobCl7VyhlLGIsbCl9fWlmKGIuc3VidHJlZUZsYWdzJjEyODU0KWZvcihiPWIuY2hpbGQ7bnVsbCE9PWI7KWVrKGIsYSksYj1iLnNpYmxpbmd9XG5mdW5jdGlvbiBlayhhLGIpe3ZhciBjPWEuYWx0ZXJuYXRlLGQ9YS5mbGFncztzd2l0Y2goYS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpkayhiLGEpO2ZrKGEpO2lmKGQmNCl7dHJ5e1FqKDMsYSxhLnJldHVybiksUmooMyxhKX1jYXRjaCh0KXtXKGEsYS5yZXR1cm4sdCl9dHJ5e1FqKDUsYSxhLnJldHVybil9Y2F0Y2godCl7VyhhLGEucmV0dXJuLHQpfX1icmVhaztjYXNlIDE6ZGsoYixhKTtmayhhKTtkJjUxMiYmbnVsbCE9PWMmJk1qKGMsYy5yZXR1cm4pO2JyZWFrO2Nhc2UgNTpkayhiLGEpO2ZrKGEpO2QmNTEyJiZudWxsIT09YyYmTWooYyxjLnJldHVybik7aWYoYS5mbGFncyYzMil7dmFyIGU9YS5zdGF0ZU5vZGU7dHJ5e29iKGUsXCJcIil9Y2F0Y2godCl7VyhhLGEucmV0dXJuLHQpfX1pZihkJjQmJihlPWEuc3RhdGVOb2RlLG51bGwhPWUpKXt2YXIgZj1hLm1lbW9pemVkUHJvcHMsZz1udWxsIT09Yz9jLm1lbW9pemVkUHJvcHM6ZixoPWEudHlwZSxrPWEudXBkYXRlUXVldWU7XG5hLnVwZGF0ZVF1ZXVlPW51bGw7aWYobnVsbCE9PWspdHJ5e1wiaW5wdXRcIj09PWgmJlwicmFkaW9cIj09PWYudHlwZSYmbnVsbCE9Zi5uYW1lJiZhYihlLGYpO3ZiKGgsZyk7dmFyIGw9dmIoaCxmKTtmb3IoZz0wO2c8ay5sZW5ndGg7Zys9Mil7dmFyIG09a1tnXSxxPWtbZysxXTtcInN0eWxlXCI9PT1tP3NiKGUscSk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT09bT9uYihlLHEpOlwiY2hpbGRyZW5cIj09PW0/b2IoZSxxKTp0YShlLG0scSxsKX1zd2l0Y2goaCl7Y2FzZSBcImlucHV0XCI6YmIoZSxmKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjppYihlLGYpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjp2YXIgcj1lLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7ZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhZi5tdWx0aXBsZTt2YXIgeT1mLnZhbHVlO251bGwhPXk/ZmIoZSwhIWYubXVsdGlwbGUseSwhMSk6ciE9PSEhZi5tdWx0aXBsZSYmKG51bGwhPWYuZGVmYXVsdFZhbHVlP2ZiKGUsISFmLm11bHRpcGxlLFxuZi5kZWZhdWx0VmFsdWUsITApOmZiKGUsISFmLm11bHRpcGxlLGYubXVsdGlwbGU/W106XCJcIiwhMSkpfWVbUGZdPWZ9Y2F0Y2godCl7VyhhLGEucmV0dXJuLHQpfX1icmVhaztjYXNlIDY6ZGsoYixhKTtmayhhKTtpZihkJjQpe2lmKG51bGw9PT1hLnN0YXRlTm9kZSl0aHJvdyBFcnJvcihwKDE2MikpO2U9YS5zdGF0ZU5vZGU7Zj1hLm1lbW9pemVkUHJvcHM7dHJ5e2Uubm9kZVZhbHVlPWZ9Y2F0Y2godCl7VyhhLGEucmV0dXJuLHQpfX1icmVhaztjYXNlIDM6ZGsoYixhKTtmayhhKTtpZihkJjQmJm51bGwhPT1jJiZjLm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXRyeXtiZChiLmNvbnRhaW5lckluZm8pfWNhdGNoKHQpe1coYSxhLnJldHVybix0KX1icmVhaztjYXNlIDQ6ZGsoYixhKTtmayhhKTticmVhaztjYXNlIDEzOmRrKGIsYSk7ZmsoYSk7ZT1hLmNoaWxkO2UuZmxhZ3MmODE5MiYmKGY9bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSxlLnN0YXRlTm9kZS5pc0hpZGRlbj1mLCFmfHxcbm51bGwhPT1lLmFsdGVybmF0ZSYmbnVsbCE9PWUuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGV8fChnaz1CKCkpKTtkJjQmJmJrKGEpO2JyZWFrO2Nhc2UgMjI6bT1udWxsIT09YyYmbnVsbCE9PWMubWVtb2l6ZWRTdGF0ZTthLm1vZGUmMT8oVT0obD1VKXx8bSxkayhiLGEpLFU9bCk6ZGsoYixhKTtmayhhKTtpZihkJjgxOTIpe2w9bnVsbCE9PWEubWVtb2l6ZWRTdGF0ZTtpZigoYS5zdGF0ZU5vZGUuaXNIaWRkZW49bCkmJiFtJiYwIT09KGEubW9kZSYxKSlmb3IoVj1hLG09YS5jaGlsZDtudWxsIT09bTspe2ZvcihxPVY9bTtudWxsIT09Vjspe3I9Vjt5PXIuY2hpbGQ7c3dpdGNoKHIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6UWooNCxyLHIucmV0dXJuKTticmVhaztjYXNlIDE6TWoocixyLnJldHVybik7dmFyIG49ci5zdGF0ZU5vZGU7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIG4uY29tcG9uZW50V2lsbFVubW91bnQpe2Q9cjtjPXIucmV0dXJuO3RyeXtiPWQsbi5wcm9wcz1cbmIubWVtb2l6ZWRQcm9wcyxuLnN0YXRlPWIubWVtb2l6ZWRTdGF0ZSxuLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2godCl7VyhkLGMsdCl9fWJyZWFrO2Nhc2UgNTpNaihyLHIucmV0dXJuKTticmVhaztjYXNlIDIyOmlmKG51bGwhPT1yLm1lbW9pemVkU3RhdGUpe2hrKHEpO2NvbnRpbnVlfX1udWxsIT09eT8oeS5yZXR1cm49cixWPXkpOmhrKHEpfW09bS5zaWJsaW5nfWE6Zm9yKG09bnVsbCxxPWE7Oyl7aWYoNT09PXEudGFnKXtpZihudWxsPT09bSl7bT1xO3RyeXtlPXEuc3RhdGVOb2RlLGw/KGY9ZS5zdHlsZSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZi5zZXRQcm9wZXJ0eT9mLnNldFByb3BlcnR5KFwiZGlzcGxheVwiLFwibm9uZVwiLFwiaW1wb3J0YW50XCIpOmYuZGlzcGxheT1cIm5vbmVcIik6KGg9cS5zdGF0ZU5vZGUsaz1xLm1lbW9pemVkUHJvcHMuc3R5bGUsZz12b2lkIDAhPT1rJiZudWxsIT09ayYmay5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlcIik/ay5kaXNwbGF5Om51bGwsaC5zdHlsZS5kaXNwbGF5PVxucmIoXCJkaXNwbGF5XCIsZykpfWNhdGNoKHQpe1coYSxhLnJldHVybix0KX19fWVsc2UgaWYoNj09PXEudGFnKXtpZihudWxsPT09bSl0cnl7cS5zdGF0ZU5vZGUubm9kZVZhbHVlPWw/XCJcIjpxLm1lbW9pemVkUHJvcHN9Y2F0Y2godCl7VyhhLGEucmV0dXJuLHQpfX1lbHNlIGlmKCgyMiE9PXEudGFnJiYyMyE9PXEudGFnfHxudWxsPT09cS5tZW1vaXplZFN0YXRlfHxxPT09YSkmJm51bGwhPT1xLmNoaWxkKXtxLmNoaWxkLnJldHVybj1xO3E9cS5jaGlsZDtjb250aW51ZX1pZihxPT09YSlicmVhayBhO2Zvcig7bnVsbD09PXEuc2libGluZzspe2lmKG51bGw9PT1xLnJldHVybnx8cS5yZXR1cm49PT1hKWJyZWFrIGE7bT09PXEmJihtPW51bGwpO3E9cS5yZXR1cm59bT09PXEmJihtPW51bGwpO3Euc2libGluZy5yZXR1cm49cS5yZXR1cm47cT1xLnNpYmxpbmd9fWJyZWFrO2Nhc2UgMTk6ZGsoYixhKTtmayhhKTtkJjQmJmJrKGEpO2JyZWFrO2Nhc2UgMjE6YnJlYWs7ZGVmYXVsdDpkayhiLFxuYSksZmsoYSl9fWZ1bmN0aW9uIGZrKGEpe3ZhciBiPWEuZmxhZ3M7aWYoYiYyKXt0cnl7YTp7Zm9yKHZhciBjPWEucmV0dXJuO251bGwhPT1jOyl7aWYoVWooYykpe3ZhciBkPWM7YnJlYWsgYX1jPWMucmV0dXJufXRocm93IEVycm9yKHAoMTYwKSk7fXN3aXRjaChkLnRhZyl7Y2FzZSA1OnZhciBlPWQuc3RhdGVOb2RlO2QuZmxhZ3MmMzImJihvYihlLFwiXCIpLGQuZmxhZ3MmPS0zMyk7dmFyIGY9VmooYSk7WGooYSxmLGUpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dmFyIGc9ZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxoPVZqKGEpO1dqKGEsaCxnKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKHAoMTYxKSk7fX1jYXRjaChrKXtXKGEsYS5yZXR1cm4sayl9YS5mbGFncyY9LTN9YiY0MDk2JiYoYS5mbGFncyY9LTQwOTcpfWZ1bmN0aW9uIGlrKGEsYixjKXtWPWE7amsoYSxiLGMpfVxuZnVuY3Rpb24gamsoYSxiLGMpe2Zvcih2YXIgZD0wIT09KGEubW9kZSYxKTtudWxsIT09Vjspe3ZhciBlPVYsZj1lLmNoaWxkO2lmKDIyPT09ZS50YWcmJmQpe3ZhciBnPW51bGwhPT1lLm1lbW9pemVkU3RhdGV8fEtqO2lmKCFnKXt2YXIgaD1lLmFsdGVybmF0ZSxrPW51bGwhPT1oJiZudWxsIT09aC5tZW1vaXplZFN0YXRlfHxVO2g9S2o7dmFyIGw9VTtLaj1nO2lmKChVPWspJiYhbClmb3IoVj1lO251bGwhPT1WOylnPVYsaz1nLmNoaWxkLDIyPT09Zy50YWcmJm51bGwhPT1nLm1lbW9pemVkU3RhdGU/a2soZSk6bnVsbCE9PWs/KGsucmV0dXJuPWcsVj1rKTprayhlKTtmb3IoO251bGwhPT1mOylWPWYsamsoZixiLGMpLGY9Zi5zaWJsaW5nO1Y9ZTtLaj1oO1U9bH1sayhhLGIsYyl9ZWxzZSAwIT09KGUuc3VidHJlZUZsYWdzJjg3NzIpJiZudWxsIT09Zj8oZi5yZXR1cm49ZSxWPWYpOmxrKGEsYixjKX19XG5mdW5jdGlvbiBsayhhKXtmb3IoO251bGwhPT1WOyl7dmFyIGI9VjtpZigwIT09KGIuZmxhZ3MmODc3Mikpe3ZhciBjPWIuYWx0ZXJuYXRlO3RyeXtpZigwIT09KGIuZmxhZ3MmODc3Mikpc3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OlV8fFJqKDUsYik7YnJlYWs7Y2FzZSAxOnZhciBkPWIuc3RhdGVOb2RlO2lmKGIuZmxhZ3MmNCYmIVUpaWYobnVsbD09PWMpZC5jb21wb25lbnREaWRNb3VudCgpO2Vsc2V7dmFyIGU9Yi5lbGVtZW50VHlwZT09PWIudHlwZT9jLm1lbW9pemVkUHJvcHM6TGcoYi50eXBlLGMubWVtb2l6ZWRQcm9wcyk7ZC5jb21wb25lbnREaWRVcGRhdGUoZSxjLm1lbW9pemVkU3RhdGUsZC5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSl9dmFyIGY9Yi51cGRhdGVRdWV1ZTtudWxsIT09ZiYmaWgoYixmLGQpO2JyZWFrO2Nhc2UgMzp2YXIgZz1iLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1nKXtjPW51bGw7aWYobnVsbCE9PWIuY2hpbGQpc3dpdGNoKGIuY2hpbGQudGFnKXtjYXNlIDU6Yz1cbmIuY2hpbGQuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMTpjPWIuY2hpbGQuc3RhdGVOb2RlfWloKGIsZyxjKX1icmVhaztjYXNlIDU6dmFyIGg9Yi5zdGF0ZU5vZGU7aWYobnVsbD09PWMmJmIuZmxhZ3MmNCl7Yz1oO3ZhciBrPWIubWVtb2l6ZWRQcm9wcztzd2l0Y2goYi50eXBlKXtjYXNlIFwiYnV0dG9uXCI6Y2FzZSBcImlucHV0XCI6Y2FzZSBcInNlbGVjdFwiOmNhc2UgXCJ0ZXh0YXJlYVwiOmsuYXV0b0ZvY3VzJiZjLmZvY3VzKCk7YnJlYWs7Y2FzZSBcImltZ1wiOmsuc3JjJiYoYy5zcmM9ay5zcmMpfX1icmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzppZihudWxsPT09Yi5tZW1vaXplZFN0YXRlKXt2YXIgbD1iLmFsdGVybmF0ZTtpZihudWxsIT09bCl7dmFyIG09bC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1tKXt2YXIgcT1tLmRlaHlkcmF0ZWQ7bnVsbCE9PXEmJmJkKHEpfX19YnJlYWs7Y2FzZSAxOTpjYXNlIDE3OmNhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmNhc2UgMjU6YnJlYWs7XG5kZWZhdWx0OnRocm93IEVycm9yKHAoMTYzKSk7fVV8fGIuZmxhZ3MmNTEyJiZTaihiKX1jYXRjaChyKXtXKGIsYi5yZXR1cm4scil9fWlmKGI9PT1hKXtWPW51bGw7YnJlYWt9Yz1iLnNpYmxpbmc7aWYobnVsbCE9PWMpe2MucmV0dXJuPWIucmV0dXJuO1Y9YzticmVha31WPWIucmV0dXJufX1mdW5jdGlvbiBoayhhKXtmb3IoO251bGwhPT1WOyl7dmFyIGI9VjtpZihiPT09YSl7Vj1udWxsO2JyZWFrfXZhciBjPWIuc2libGluZztpZihudWxsIT09Yyl7Yy5yZXR1cm49Yi5yZXR1cm47Vj1jO2JyZWFrfVY9Yi5yZXR1cm59fVxuZnVuY3Rpb24ga2soYSl7Zm9yKDtudWxsIT09Vjspe3ZhciBiPVY7dHJ5e3N3aXRjaChiLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTp2YXIgYz1iLnJldHVybjt0cnl7UmooNCxiKX1jYXRjaChrKXtXKGIsYyxrKX1icmVhaztjYXNlIDE6dmFyIGQ9Yi5zdGF0ZU5vZGU7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGQuY29tcG9uZW50RGlkTW91bnQpe3ZhciBlPWIucmV0dXJuO3RyeXtkLmNvbXBvbmVudERpZE1vdW50KCl9Y2F0Y2goayl7VyhiLGUsayl9fXZhciBmPWIucmV0dXJuO3RyeXtTaihiKX1jYXRjaChrKXtXKGIsZixrKX1icmVhaztjYXNlIDU6dmFyIGc9Yi5yZXR1cm47dHJ5e1NqKGIpfWNhdGNoKGspe1coYixnLGspfX19Y2F0Y2goayl7VyhiLGIucmV0dXJuLGspfWlmKGI9PT1hKXtWPW51bGw7YnJlYWt9dmFyIGg9Yi5zaWJsaW5nO2lmKG51bGwhPT1oKXtoLnJldHVybj1iLnJldHVybjtWPWg7YnJlYWt9Vj1iLnJldHVybn19XG52YXIgbWs9TWF0aC5jZWlsLG5rPXVhLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsb2s9dWEuUmVhY3RDdXJyZW50T3duZXIscGs9dWEuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsSz0wLFI9bnVsbCxZPW51bGwsWj0wLGdqPTAsZmo9VWYoMCksVD0wLHFrPW51bGwsaGg9MCxyaz0wLHNrPTAsdGs9bnVsbCx1az1udWxsLGdrPTAsSGo9SW5maW5pdHksdms9bnVsbCxQaT0hMSxRaT1udWxsLFNpPW51bGwsd2s9ITEseGs9bnVsbCx5az0wLHprPTAsQWs9bnVsbCxCaz0tMSxDaz0wO2Z1bmN0aW9uIEwoKXtyZXR1cm4gMCE9PShLJjYpP0IoKTotMSE9PUJrP0JrOkJrPUIoKX1cbmZ1bmN0aW9uIGxoKGEpe2lmKDA9PT0oYS5tb2RlJjEpKXJldHVybiAxO2lmKDAhPT0oSyYyKSYmMCE9PVopcmV0dXJuIFomLVo7aWYobnVsbCE9PUtnLnRyYW5zaXRpb24pcmV0dXJuIDA9PT1DayYmKENrPXljKCkpLENrO2E9QztpZigwIT09YSlyZXR1cm4gYTthPXdpbmRvdy5ldmVudDthPXZvaWQgMD09PWE/MTY6amQoYS50eXBlKTtyZXR1cm4gYX1mdW5jdGlvbiBtaChhLGIsYyxkKXtpZig1MDx6ayl0aHJvdyB6az0wLEFrPW51bGwsRXJyb3IocCgxODUpKTtBYyhhLGMsZCk7aWYoMD09PShLJjIpfHxhIT09UilhPT09UiYmKDA9PT0oSyYyKSYmKHJrfD1jKSw0PT09VCYmRGsoYSxaKSksRWsoYSxkKSwxPT09YyYmMD09PUsmJjA9PT0oYi5tb2RlJjEpJiYoSGo9QigpKzUwMCxmZyYmamcoKSl9XG5mdW5jdGlvbiBFayhhLGIpe3ZhciBjPWEuY2FsbGJhY2tOb2RlO3djKGEsYik7dmFyIGQ9dWMoYSxhPT09Uj9aOjApO2lmKDA9PT1kKW51bGwhPT1jJiZiYyhjKSxhLmNhbGxiYWNrTm9kZT1udWxsLGEuY2FsbGJhY2tQcmlvcml0eT0wO2Vsc2UgaWYoYj1kJi1kLGEuY2FsbGJhY2tQcmlvcml0eSE9PWIpe251bGwhPWMmJmJjKGMpO2lmKDE9PT1iKTA9PT1hLnRhZz9pZyhGay5iaW5kKG51bGwsYSkpOmhnKEZrLmJpbmQobnVsbCxhKSksSmYoZnVuY3Rpb24oKXswPT09KEsmNikmJmpnKCl9KSxjPW51bGw7ZWxzZXtzd2l0Y2goRGMoZCkpe2Nhc2UgMTpjPWZjO2JyZWFrO2Nhc2UgNDpjPWdjO2JyZWFrO2Nhc2UgMTY6Yz1oYzticmVhaztjYXNlIDUzNjg3MDkxMjpjPWpjO2JyZWFrO2RlZmF1bHQ6Yz1oY31jPUdrKGMsSGsuYmluZChudWxsLGEpKX1hLmNhbGxiYWNrUHJpb3JpdHk9YjthLmNhbGxiYWNrTm9kZT1jfX1cbmZ1bmN0aW9uIEhrKGEsYil7Qms9LTE7Q2s9MDtpZigwIT09KEsmNikpdGhyb3cgRXJyb3IocCgzMjcpKTt2YXIgYz1hLmNhbGxiYWNrTm9kZTtpZihJaygpJiZhLmNhbGxiYWNrTm9kZSE9PWMpcmV0dXJuIG51bGw7dmFyIGQ9dWMoYSxhPT09Uj9aOjApO2lmKDA9PT1kKXJldHVybiBudWxsO2lmKDAhPT0oZCYzMCl8fDAhPT0oZCZhLmV4cGlyZWRMYW5lcyl8fGIpYj1KayhhLGQpO2Vsc2V7Yj1kO3ZhciBlPUs7S3w9Mjt2YXIgZj1LaygpO2lmKFIhPT1hfHxaIT09Yil2az1udWxsLEhqPUIoKSs1MDAsTGsoYSxiKTtkbyB0cnl7TWsoKTticmVha31jYXRjaChoKXtOayhhLGgpfXdoaWxlKDEpO1FnKCk7bmsuY3VycmVudD1mO0s9ZTtudWxsIT09WT9iPTA6KFI9bnVsbCxaPTAsYj1UKX1pZigwIT09Yil7Mj09PWImJihlPXhjKGEpLDAhPT1lJiYoZD1lLGI9T2soYSxlKSkpO2lmKDE9PT1iKXRocm93IGM9cWssTGsoYSwwKSxEayhhLGQpLEVrKGEsQigpKSxjO2lmKDY9PT1iKURrKGEsZCk7XG5lbHNle2U9YS5jdXJyZW50LmFsdGVybmF0ZTtpZigwPT09KGQmMzApJiYhUGsoZSkmJihiPUprKGEsZCksMj09PWImJihmPXhjKGEpLDAhPT1mJiYoZD1mLGI9T2soYSxmKSkpLDE9PT1iKSl0aHJvdyBjPXFrLExrKGEsMCksRGsoYSxkKSxFayhhLEIoKSksYzthLmZpbmlzaGVkV29yaz1lO2EuZmluaXNoZWRMYW5lcz1kO3N3aXRjaChiKXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKHAoMzQ1KSk7Y2FzZSAyOlFrKGEsdWssdmspO2JyZWFrO2Nhc2UgMzpEayhhLGQpO2lmKChkJjEzMDAyMzQyNCk9PT1kJiYoYj1nays1MDAtQigpLDEwPGIpKXtpZigwIT09dWMoYSwwKSlicmVhaztlPWEuc3VzcGVuZGVkTGFuZXM7aWYoKGUmZCkhPT1kKXtMKCk7YS5waW5nZWRMYW5lc3w9YS5zdXNwZW5kZWRMYW5lcyZlO2JyZWFrfWEudGltZW91dEhhbmRsZT1GZihRay5iaW5kKG51bGwsYSx1ayx2ayksYik7YnJlYWt9UWsoYSx1ayx2ayk7YnJlYWs7Y2FzZSA0OkRrKGEsZCk7aWYoKGQmNDE5NDI0MCk9PT1cbmQpYnJlYWs7Yj1hLmV2ZW50VGltZXM7Zm9yKGU9LTE7MDxkOyl7dmFyIGc9MzEtb2MoZCk7Zj0xPDxnO2c9YltnXTtnPmUmJihlPWcpO2QmPX5mfWQ9ZTtkPUIoKS1kO2Q9KDEyMD5kPzEyMDo0ODA+ZD80ODA6MTA4MD5kPzEwODA6MTkyMD5kPzE5MjA6M0UzPmQ/M0UzOjQzMjA+ZD80MzIwOjE5NjAqbWsoZC8xOTYwKSktZDtpZigxMDxkKXthLnRpbWVvdXRIYW5kbGU9RmYoUWsuYmluZChudWxsLGEsdWssdmspLGQpO2JyZWFrfVFrKGEsdWssdmspO2JyZWFrO2Nhc2UgNTpRayhhLHVrLHZrKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKHAoMzI5KSk7fX19RWsoYSxCKCkpO3JldHVybiBhLmNhbGxiYWNrTm9kZT09PWM/SGsuYmluZChudWxsLGEpOm51bGx9XG5mdW5jdGlvbiBPayhhLGIpe3ZhciBjPXRrO2EuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmKExrKGEsYikuZmxhZ3N8PTI1Nik7YT1KayhhLGIpOzIhPT1hJiYoYj11ayx1az1jLG51bGwhPT1iJiZHaihiKSk7cmV0dXJuIGF9ZnVuY3Rpb24gR2ooYSl7bnVsbD09PXVrP3VrPWE6dWsucHVzaC5hcHBseSh1ayxhKX1cbmZ1bmN0aW9uIFBrKGEpe2Zvcih2YXIgYj1hOzspe2lmKGIuZmxhZ3MmMTYzODQpe3ZhciBjPWIudXBkYXRlUXVldWU7aWYobnVsbCE9PWMmJihjPWMuc3RvcmVzLG51bGwhPT1jKSlmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXSxmPWUuZ2V0U25hcHNob3Q7ZT1lLnZhbHVlO3RyeXtpZighSGUoZigpLGUpKXJldHVybiExfWNhdGNoKGcpe3JldHVybiExfX19Yz1iLmNoaWxkO2lmKGIuc3VidHJlZUZsYWdzJjE2Mzg0JiZudWxsIT09YyljLnJldHVybj1iLGI9YztlbHNle2lmKGI9PT1hKWJyZWFrO2Zvcig7bnVsbD09PWIuc2libGluZzspe2lmKG51bGw9PT1iLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiEwO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ319cmV0dXJuITB9XG5mdW5jdGlvbiBEayhhLGIpe2ImPX5zaztiJj1+cms7YS5zdXNwZW5kZWRMYW5lc3w9YjthLnBpbmdlZExhbmVzJj1+Yjtmb3IoYT1hLmV4cGlyYXRpb25UaW1lczswPGI7KXt2YXIgYz0zMS1vYyhiKSxkPTE8PGM7YVtjXT0tMTtiJj1+ZH19ZnVuY3Rpb24gRmsoYSl7aWYoMCE9PShLJjYpKXRocm93IEVycm9yKHAoMzI3KSk7SWsoKTt2YXIgYj11YyhhLDApO2lmKDA9PT0oYiYxKSlyZXR1cm4gRWsoYSxCKCkpLG51bGw7dmFyIGM9SmsoYSxiKTtpZigwIT09YS50YWcmJjI9PT1jKXt2YXIgZD14YyhhKTswIT09ZCYmKGI9ZCxjPU9rKGEsZCkpfWlmKDE9PT1jKXRocm93IGM9cWssTGsoYSwwKSxEayhhLGIpLEVrKGEsQigpKSxjO2lmKDY9PT1jKXRocm93IEVycm9yKHAoMzQ1KSk7YS5maW5pc2hlZFdvcms9YS5jdXJyZW50LmFsdGVybmF0ZTthLmZpbmlzaGVkTGFuZXM9YjtRayhhLHVrLHZrKTtFayhhLEIoKSk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBSayhhLGIpe3ZhciBjPUs7S3w9MTt0cnl7cmV0dXJuIGEoYil9ZmluYWxseXtLPWMsMD09PUsmJihIaj1CKCkrNTAwLGZnJiZqZygpKX19ZnVuY3Rpb24gU2soYSl7bnVsbCE9PXhrJiYwPT09eGsudGFnJiYwPT09KEsmNikmJklrKCk7dmFyIGI9SztLfD0xO3ZhciBjPXBrLnRyYW5zaXRpb24sZD1DO3RyeXtpZihway50cmFuc2l0aW9uPW51bGwsQz0xLGEpcmV0dXJuIGEoKX1maW5hbGx5e0M9ZCxway50cmFuc2l0aW9uPWMsSz1iLDA9PT0oSyY2KSYmamcoKX19ZnVuY3Rpb24gSWooKXtnaj1mai5jdXJyZW50O0UoZmopfVxuZnVuY3Rpb24gTGsoYSxiKXthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO3ZhciBjPWEudGltZW91dEhhbmRsZTstMSE9PWMmJihhLnRpbWVvdXRIYW5kbGU9LTEsR2YoYykpO2lmKG51bGwhPT1ZKWZvcihjPVkucmV0dXJuO251bGwhPT1jOyl7dmFyIGQ9Yzt3ZyhkKTtzd2l0Y2goZC50YWcpe2Nhc2UgMTpkPWQudHlwZS5jaGlsZENvbnRleHRUeXBlcztudWxsIT09ZCYmdm9pZCAwIT09ZCYmJGYoKTticmVhaztjYXNlIDM6SmgoKTtFKFdmKTtFKEgpO09oKCk7YnJlYWs7Y2FzZSA1OkxoKGQpO2JyZWFrO2Nhc2UgNDpKaCgpO2JyZWFrO2Nhc2UgMTM6RShNKTticmVhaztjYXNlIDE5OkUoTSk7YnJlYWs7Y2FzZSAxMDpSZyhkLnR5cGUuX2NvbnRleHQpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzpJaigpfWM9Yy5yZXR1cm59Uj1hO1k9YT13aChhLmN1cnJlbnQsbnVsbCk7Wj1naj1iO1Q9MDtxaz1udWxsO3NrPXJrPWhoPTA7dWs9dGs9bnVsbDtpZihudWxsIT09V2cpe2ZvcihiPVxuMDtiPFdnLmxlbmd0aDtiKyspaWYoYz1XZ1tiXSxkPWMuaW50ZXJsZWF2ZWQsbnVsbCE9PWQpe2MuaW50ZXJsZWF2ZWQ9bnVsbDt2YXIgZT1kLm5leHQsZj1jLnBlbmRpbmc7aWYobnVsbCE9PWYpe3ZhciBnPWYubmV4dDtmLm5leHQ9ZTtkLm5leHQ9Z31jLnBlbmRpbmc9ZH1XZz1udWxsfXJldHVybiBhfVxuZnVuY3Rpb24gTmsoYSxiKXtkb3t2YXIgYz1ZO3RyeXtRZygpO1BoLmN1cnJlbnQ9YWk7aWYoU2gpe2Zvcih2YXIgZD1OLm1lbW9pemVkU3RhdGU7bnVsbCE9PWQ7KXt2YXIgZT1kLnF1ZXVlO251bGwhPT1lJiYoZS5wZW5kaW5nPW51bGwpO2Q9ZC5uZXh0fVNoPSExfVJoPTA7UD1PPU49bnVsbDtUaD0hMTtVaD0wO29rLmN1cnJlbnQ9bnVsbDtpZihudWxsPT09Y3x8bnVsbD09PWMucmV0dXJuKXtUPTE7cWs9YjtZPW51bGw7YnJlYWt9YTp7dmFyIGY9YSxnPWMucmV0dXJuLGg9YyxrPWI7Yj1aO2guZmxhZ3N8PTMyNzY4O2lmKG51bGwhPT1rJiZcIm9iamVjdFwiPT09dHlwZW9mIGsmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBrLnRoZW4pe3ZhciBsPWssbT1oLHE9bS50YWc7aWYoMD09PShtLm1vZGUmMSkmJigwPT09cXx8MTE9PT1xfHwxNT09PXEpKXt2YXIgcj1tLmFsdGVybmF0ZTtyPyhtLnVwZGF0ZVF1ZXVlPXIudXBkYXRlUXVldWUsbS5tZW1vaXplZFN0YXRlPXIubWVtb2l6ZWRTdGF0ZSxcbm0ubGFuZXM9ci5sYW5lcyk6KG0udXBkYXRlUXVldWU9bnVsbCxtLm1lbW9pemVkU3RhdGU9bnVsbCl9dmFyIHk9VmkoZyk7aWYobnVsbCE9PXkpe3kuZmxhZ3MmPS0yNTc7V2koeSxnLGgsZixiKTt5Lm1vZGUmMSYmVGkoZixsLGIpO2I9eTtrPWw7dmFyIG49Yi51cGRhdGVRdWV1ZTtpZihudWxsPT09bil7dmFyIHQ9bmV3IFNldDt0LmFkZChrKTtiLnVwZGF0ZVF1ZXVlPXR9ZWxzZSBuLmFkZChrKTticmVhayBhfWVsc2V7aWYoMD09PShiJjEpKXtUaShmLGwsYik7dWooKTticmVhayBhfWs9RXJyb3IocCg0MjYpKX19ZWxzZSBpZihJJiZoLm1vZGUmMSl7dmFyIEo9VmkoZyk7aWYobnVsbCE9PUopezA9PT0oSi5mbGFncyY2NTUzNikmJihKLmZsYWdzfD0yNTYpO1dpKEosZyxoLGYsYik7SmcoS2koayxoKSk7YnJlYWsgYX19Zj1rPUtpKGssaCk7NCE9PVQmJihUPTIpO251bGw9PT10az90az1bZl06dGsucHVzaChmKTtmPWc7ZG97c3dpdGNoKGYudGFnKXtjYXNlIDM6Zi5mbGFnc3w9NjU1MzY7XG5iJj0tYjtmLmxhbmVzfD1iO3ZhciB4PU9pKGYsayxiKTtmaChmLHgpO2JyZWFrIGE7Y2FzZSAxOmg9azt2YXIgdz1mLnR5cGUsdT1mLnN0YXRlTm9kZTtpZigwPT09KGYuZmxhZ3MmMTI4KSYmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiB3LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8bnVsbCE9PXUmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiB1LmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PVNpfHwhU2kuaGFzKHUpKSkpe2YuZmxhZ3N8PTY1NTM2O2ImPS1iO2YubGFuZXN8PWI7dmFyIEY9UmkoZixoLGIpO2ZoKGYsRik7YnJlYWsgYX19Zj1mLnJldHVybn13aGlsZShudWxsIT09Zil9VGsoYyl9Y2F0Y2gobmEpe2I9bmE7WT09PWMmJm51bGwhPT1jJiYoWT1jPWMucmV0dXJuKTtjb250aW51ZX1icmVha313aGlsZSgxKX1mdW5jdGlvbiBLaygpe3ZhciBhPW5rLmN1cnJlbnQ7bmsuY3VycmVudD1haTtyZXR1cm4gbnVsbD09PWE/YWk6YX1cbmZ1bmN0aW9uIHVqKCl7aWYoMD09PVR8fDM9PT1UfHwyPT09VClUPTQ7bnVsbD09PVJ8fDA9PT0oaGgmMjY4NDM1NDU1KSYmMD09PShyayYyNjg0MzU0NTUpfHxEayhSLFopfWZ1bmN0aW9uIEprKGEsYil7dmFyIGM9SztLfD0yO3ZhciBkPUtrKCk7aWYoUiE9PWF8fFohPT1iKXZrPW51bGwsTGsoYSxiKTtkbyB0cnl7VWsoKTticmVha31jYXRjaChlKXtOayhhLGUpfXdoaWxlKDEpO1FnKCk7Sz1jO25rLmN1cnJlbnQ9ZDtpZihudWxsIT09WSl0aHJvdyBFcnJvcihwKDI2MSkpO1I9bnVsbDtaPTA7cmV0dXJuIFR9ZnVuY3Rpb24gVWsoKXtmb3IoO251bGwhPT1ZOylWayhZKX1mdW5jdGlvbiBNaygpe2Zvcig7bnVsbCE9PVkmJiFjYygpOylWayhZKX1mdW5jdGlvbiBWayhhKXt2YXIgYj1XayhhLmFsdGVybmF0ZSxhLGdqKTthLm1lbW9pemVkUHJvcHM9YS5wZW5kaW5nUHJvcHM7bnVsbD09PWI/VGsoYSk6WT1iO29rLmN1cnJlbnQ9bnVsbH1cbmZ1bmN0aW9uIFRrKGEpe3ZhciBiPWE7ZG97dmFyIGM9Yi5hbHRlcm5hdGU7YT1iLnJldHVybjtpZigwPT09KGIuZmxhZ3MmMzI3NjgpKXtpZihjPUZqKGMsYixnaiksbnVsbCE9PWMpe1k9YztyZXR1cm59fWVsc2V7Yz1KaihjLGIpO2lmKG51bGwhPT1jKXtjLmZsYWdzJj0zMjc2NztZPWM7cmV0dXJufWlmKG51bGwhPT1hKWEuZmxhZ3N8PTMyNzY4LGEuc3VidHJlZUZsYWdzPTAsYS5kZWxldGlvbnM9bnVsbDtlbHNle1Q9NjtZPW51bGw7cmV0dXJufX1iPWIuc2libGluZztpZihudWxsIT09Yil7WT1iO3JldHVybn1ZPWI9YX13aGlsZShudWxsIT09Yik7MD09PVQmJihUPTUpfWZ1bmN0aW9uIFFrKGEsYixjKXt2YXIgZD1DLGU9cGsudHJhbnNpdGlvbjt0cnl7cGsudHJhbnNpdGlvbj1udWxsLEM9MSxYayhhLGIsYyxkKX1maW5hbGx5e3BrLnRyYW5zaXRpb249ZSxDPWR9cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBYayhhLGIsYyxkKXtkbyBJaygpO3doaWxlKG51bGwhPT14ayk7aWYoMCE9PShLJjYpKXRocm93IEVycm9yKHAoMzI3KSk7Yz1hLmZpbmlzaGVkV29yazt2YXIgZT1hLmZpbmlzaGVkTGFuZXM7aWYobnVsbD09PWMpcmV0dXJuIG51bGw7YS5maW5pc2hlZFdvcms9bnVsbDthLmZpbmlzaGVkTGFuZXM9MDtpZihjPT09YS5jdXJyZW50KXRocm93IEVycm9yKHAoMTc3KSk7YS5jYWxsYmFja05vZGU9bnVsbDthLmNhbGxiYWNrUHJpb3JpdHk9MDt2YXIgZj1jLmxhbmVzfGMuY2hpbGRMYW5lcztCYyhhLGYpO2E9PT1SJiYoWT1SPW51bGwsWj0wKTswPT09KGMuc3VidHJlZUZsYWdzJjIwNjQpJiYwPT09KGMuZmxhZ3MmMjA2NCl8fHdrfHwod2s9ITAsR2soaGMsZnVuY3Rpb24oKXtJaygpO3JldHVybiBudWxsfSkpO2Y9MCE9PShjLmZsYWdzJjE1OTkwKTtpZigwIT09KGMuc3VidHJlZUZsYWdzJjE1OTkwKXx8Zil7Zj1way50cmFuc2l0aW9uO3BrLnRyYW5zaXRpb249bnVsbDtcbnZhciBnPUM7Qz0xO3ZhciBoPUs7S3w9NDtvay5jdXJyZW50PW51bGw7UGooYSxjKTtlayhjLGEpO09lKERmKTtkZD0hIUNmO0RmPUNmPW51bGw7YS5jdXJyZW50PWM7aWsoYyxhLGUpO2RjKCk7Sz1oO0M9Zztway50cmFuc2l0aW9uPWZ9ZWxzZSBhLmN1cnJlbnQ9Yzt3ayYmKHdrPSExLHhrPWEseWs9ZSk7Zj1hLnBlbmRpbmdMYW5lczswPT09ZiYmKFNpPW51bGwpO21jKGMuc3RhdGVOb2RlLGQpO0VrKGEsQigpKTtpZihudWxsIT09Yilmb3IoZD1hLm9uUmVjb3ZlcmFibGVFcnJvcixjPTA7YzxiLmxlbmd0aDtjKyspZT1iW2NdLGQoZS52YWx1ZSx7Y29tcG9uZW50U3RhY2s6ZS5zdGFjayxkaWdlc3Q6ZS5kaWdlc3R9KTtpZihQaSl0aHJvdyBQaT0hMSxhPVFpLFFpPW51bGwsYTswIT09KHlrJjEpJiYwIT09YS50YWcmJklrKCk7Zj1hLnBlbmRpbmdMYW5lczswIT09KGYmMSk/YT09PUFrP3prKys6KHprPTAsQWs9YSk6ems9MDtqZygpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gSWsoKXtpZihudWxsIT09eGspe3ZhciBhPURjKHlrKSxiPXBrLnRyYW5zaXRpb24sYz1DO3RyeXtway50cmFuc2l0aW9uPW51bGw7Qz0xNj5hPzE2OmE7aWYobnVsbD09PXhrKXZhciBkPSExO2Vsc2V7YT14azt4az1udWxsO3lrPTA7aWYoMCE9PShLJjYpKXRocm93IEVycm9yKHAoMzMxKSk7dmFyIGU9SztLfD00O2ZvcihWPWEuY3VycmVudDtudWxsIT09Vjspe3ZhciBmPVYsZz1mLmNoaWxkO2lmKDAhPT0oVi5mbGFncyYxNikpe3ZhciBoPWYuZGVsZXRpb25zO2lmKG51bGwhPT1oKXtmb3IodmFyIGs9MDtrPGgubGVuZ3RoO2srKyl7dmFyIGw9aFtrXTtmb3IoVj1sO251bGwhPT1WOyl7dmFyIG09Vjtzd2l0Y2gobS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6UWooOCxtLGYpfXZhciBxPW0uY2hpbGQ7aWYobnVsbCE9PXEpcS5yZXR1cm49bSxWPXE7ZWxzZSBmb3IoO251bGwhPT1WOyl7bT1WO3ZhciByPW0uc2libGluZyx5PW0ucmV0dXJuO1RqKG0pO2lmKG09PT1cbmwpe1Y9bnVsbDticmVha31pZihudWxsIT09cil7ci5yZXR1cm49eTtWPXI7YnJlYWt9Vj15fX19dmFyIG49Zi5hbHRlcm5hdGU7aWYobnVsbCE9PW4pe3ZhciB0PW4uY2hpbGQ7aWYobnVsbCE9PXQpe24uY2hpbGQ9bnVsbDtkb3t2YXIgSj10LnNpYmxpbmc7dC5zaWJsaW5nPW51bGw7dD1KfXdoaWxlKG51bGwhPT10KX19Vj1mfX1pZigwIT09KGYuc3VidHJlZUZsYWdzJjIwNjQpJiZudWxsIT09ZylnLnJldHVybj1mLFY9ZztlbHNlIGI6Zm9yKDtudWxsIT09Vjspe2Y9VjtpZigwIT09KGYuZmxhZ3MmMjA0OCkpc3dpdGNoKGYudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OlFqKDksZixmLnJldHVybil9dmFyIHg9Zi5zaWJsaW5nO2lmKG51bGwhPT14KXt4LnJldHVybj1mLnJldHVybjtWPXg7YnJlYWsgYn1WPWYucmV0dXJufX12YXIgdz1hLmN1cnJlbnQ7Zm9yKFY9dztudWxsIT09Vjspe2c9Vjt2YXIgdT1nLmNoaWxkO2lmKDAhPT0oZy5zdWJ0cmVlRmxhZ3MmMjA2NCkmJm51bGwhPT1cbnUpdS5yZXR1cm49ZyxWPXU7ZWxzZSBiOmZvcihnPXc7bnVsbCE9PVY7KXtoPVY7aWYoMCE9PShoLmZsYWdzJjIwNDgpKXRyeXtzd2l0Y2goaC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6UmooOSxoKX19Y2F0Y2gobmEpe1coaCxoLnJldHVybixuYSl9aWYoaD09PWcpe1Y9bnVsbDticmVhayBifXZhciBGPWguc2libGluZztpZihudWxsIT09Ril7Ri5yZXR1cm49aC5yZXR1cm47Vj1GO2JyZWFrIGJ9Vj1oLnJldHVybn19Sz1lO2pnKCk7aWYobGMmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBsYy5vblBvc3RDb21taXRGaWJlclJvb3QpdHJ5e2xjLm9uUG9zdENvbW1pdEZpYmVyUm9vdChrYyxhKX1jYXRjaChuYSl7fWQ9ITB9cmV0dXJuIGR9ZmluYWxseXtDPWMscGsudHJhbnNpdGlvbj1ifX1yZXR1cm4hMX1mdW5jdGlvbiBZayhhLGIsYyl7Yj1LaShjLGIpO2I9T2koYSxiLDEpO2E9ZGgoYSxiLDEpO2I9TCgpO251bGwhPT1hJiYoQWMoYSwxLGIpLEVrKGEsYikpfVxuZnVuY3Rpb24gVyhhLGIsYyl7aWYoMz09PWEudGFnKVlrKGEsYSxjKTtlbHNlIGZvcig7bnVsbCE9PWI7KXtpZigzPT09Yi50YWcpe1lrKGIsYSxjKTticmVha31lbHNlIGlmKDE9PT1iLnRhZyl7dmFyIGQ9Yi5zdGF0ZU5vZGU7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGIudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3J8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PVNpfHwhU2kuaGFzKGQpKSl7YT1LaShjLGEpO2E9UmkoYixhLDEpO2I9ZGgoYixhLDEpO2E9TCgpO251bGwhPT1iJiYoQWMoYiwxLGEpLEVrKGIsYSkpO2JyZWFrfX1iPWIucmV0dXJufX1cbmZ1bmN0aW9uIFVpKGEsYixjKXt2YXIgZD1hLnBpbmdDYWNoZTtudWxsIT09ZCYmZC5kZWxldGUoYik7Yj1MKCk7YS5waW5nZWRMYW5lc3w9YS5zdXNwZW5kZWRMYW5lcyZjO1I9PT1hJiYoWiZjKT09PWMmJig0PT09VHx8Mz09PVQmJihaJjEzMDAyMzQyNCk9PT1aJiY1MDA+QigpLWdrP0xrKGEsMCk6c2t8PWMpO0VrKGEsYil9ZnVuY3Rpb24gWmsoYSxiKXswPT09YiYmKDA9PT0oYS5tb2RlJjEpP2I9MTooYj1zYyxzYzw8PTEsMD09PShzYyYxMzAwMjM0MjQpJiYoc2M9NDE5NDMwNCkpKTt2YXIgYz1MKCk7YT1aZyhhLGIpO251bGwhPT1hJiYoQWMoYSxiLGMpLEVrKGEsYykpfWZ1bmN0aW9uIHZqKGEpe3ZhciBiPWEubWVtb2l6ZWRTdGF0ZSxjPTA7bnVsbCE9PWImJihjPWIucmV0cnlMYW5lKTtaayhhLGMpfVxuZnVuY3Rpb24gY2soYSxiKXt2YXIgYz0wO3N3aXRjaChhLnRhZyl7Y2FzZSAxMzp2YXIgZD1hLnN0YXRlTm9kZTt2YXIgZT1hLm1lbW9pemVkU3RhdGU7bnVsbCE9PWUmJihjPWUucmV0cnlMYW5lKTticmVhaztjYXNlIDE5OmQ9YS5zdGF0ZU5vZGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihwKDMxNCkpO31udWxsIT09ZCYmZC5kZWxldGUoYik7WmsoYSxjKX12YXIgV2s7XG5Xaz1mdW5jdGlvbihhLGIsYyl7aWYobnVsbCE9PWEpaWYoYS5tZW1vaXplZFByb3BzIT09Yi5wZW5kaW5nUHJvcHN8fFdmLmN1cnJlbnQpVWc9ITA7ZWxzZXtpZigwPT09KGEubGFuZXMmYykmJjA9PT0oYi5mbGFncyYxMjgpKXJldHVybiBVZz0hMSx6aihhLGIsYyk7VWc9MCE9PShhLmZsYWdzJjEzMTA3Mik/ITA6ITF9ZWxzZSBVZz0hMSxJJiYwIT09KGIuZmxhZ3MmMTA0ODU3NikmJnVnKGIsbmcsYi5pbmRleCk7Yi5sYW5lcz0wO3N3aXRjaChiLnRhZyl7Y2FzZSAyOnZhciBkPWIudHlwZTtqaihhLGIpO2E9Yi5wZW5kaW5nUHJvcHM7dmFyIGU9WWYoYixILmN1cnJlbnQpO1RnKGIsYyk7ZT1YaChudWxsLGIsZCxhLGUsYyk7dmFyIGY9YmkoKTtiLmZsYWdzfD0xO1wib2JqZWN0XCI9PT10eXBlb2YgZSYmbnVsbCE9PWUmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLnJlbmRlciYmdm9pZCAwPT09ZS4kJHR5cGVvZj8oYi50YWc9MSxiLm1lbW9pemVkU3RhdGU9bnVsbCxiLnVwZGF0ZVF1ZXVlPVxubnVsbCxaZihkKT8oZj0hMCxjZyhiKSk6Zj0hMSxiLm1lbW9pemVkU3RhdGU9bnVsbCE9PWUuc3RhdGUmJnZvaWQgMCE9PWUuc3RhdGU/ZS5zdGF0ZTpudWxsLGFoKGIpLGUudXBkYXRlcj1uaCxiLnN0YXRlTm9kZT1lLGUuX3JlYWN0SW50ZXJuYWxzPWIscmgoYixkLGEsYyksYj1raihudWxsLGIsZCwhMCxmLGMpKTooYi50YWc9MCxJJiZmJiZ2ZyhiKSxZaShudWxsLGIsZSxjKSxiPWIuY2hpbGQpO3JldHVybiBiO2Nhc2UgMTY6ZD1iLmVsZW1lbnRUeXBlO2E6e2pqKGEsYik7YT1iLnBlbmRpbmdQcm9wcztlPWQuX2luaXQ7ZD1lKGQuX3BheWxvYWQpO2IudHlwZT1kO2U9Yi50YWc9JGsoZCk7YT1MZyhkLGEpO3N3aXRjaChlKXtjYXNlIDA6Yj1kaihudWxsLGIsZCxhLGMpO2JyZWFrIGE7Y2FzZSAxOmI9aWoobnVsbCxiLGQsYSxjKTticmVhayBhO2Nhc2UgMTE6Yj1aaShudWxsLGIsZCxhLGMpO2JyZWFrIGE7Y2FzZSAxNDpiPWFqKG51bGwsYixkLExnKGQudHlwZSxhKSxjKTticmVhayBhfXRocm93IEVycm9yKHAoMzA2LFxuZCxcIlwiKSk7fXJldHVybiBiO2Nhc2UgMDpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6TGcoZCxlKSxkaihhLGIsZCxlLGMpO2Nhc2UgMTpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6TGcoZCxlKSxpaihhLGIsZCxlLGMpO2Nhc2UgMzphOntsaihiKTtpZihudWxsPT09YSl0aHJvdyBFcnJvcihwKDM4NykpO2Q9Yi5wZW5kaW5nUHJvcHM7Zj1iLm1lbW9pemVkU3RhdGU7ZT1mLmVsZW1lbnQ7YmgoYSxiKTtnaChiLGQsbnVsbCxjKTt2YXIgZz1iLm1lbW9pemVkU3RhdGU7ZD1nLmVsZW1lbnQ7aWYoZi5pc0RlaHlkcmF0ZWQpaWYoZj17ZWxlbWVudDpkLGlzRGVoeWRyYXRlZDohMSxjYWNoZTpnLmNhY2hlLHBlbmRpbmdTdXNwZW5zZUJvdW5kYXJpZXM6Zy5wZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzLHRyYW5zaXRpb25zOmcudHJhbnNpdGlvbnN9LGIudXBkYXRlUXVldWUuYmFzZVN0YXRlPVxuZixiLm1lbW9pemVkU3RhdGU9ZixiLmZsYWdzJjI1Nil7ZT1LaShFcnJvcihwKDQyMykpLGIpO2I9bWooYSxiLGQsYyxlKTticmVhayBhfWVsc2UgaWYoZCE9PWUpe2U9S2koRXJyb3IocCg0MjQpKSxiKTtiPW1qKGEsYixkLGMsZSk7YnJlYWsgYX1lbHNlIGZvcih5Zz1MZihiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLmZpcnN0Q2hpbGQpLHhnPWIsST0hMCx6Zz1udWxsLGM9Q2goYixudWxsLGQsYyksYi5jaGlsZD1jO2M7KWMuZmxhZ3M9Yy5mbGFncyYtM3w0MDk2LGM9Yy5zaWJsaW5nO2Vsc2V7SWcoKTtpZihkPT09ZSl7Yj0kaShhLGIsYyk7YnJlYWsgYX1ZaShhLGIsZCxjKX1iPWIuY2hpbGR9cmV0dXJuIGI7Y2FzZSA1OnJldHVybiBLaChiKSxudWxsPT09YSYmRWcoYiksZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxmPW51bGwhPT1hP2EubWVtb2l6ZWRQcm9wczpudWxsLGc9ZS5jaGlsZHJlbixFZihkLGUpP2c9bnVsbDpudWxsIT09ZiYmRWYoZCxmKSYmKGIuZmxhZ3N8PTMyKSxcbmhqKGEsYiksWWkoYSxiLGcsYyksYi5jaGlsZDtjYXNlIDY6cmV0dXJuIG51bGw9PT1hJiZFZyhiKSxudWxsO2Nhc2UgMTM6cmV0dXJuIHBqKGEsYixjKTtjYXNlIDQ6cmV0dXJuIEloKGIsYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksZD1iLnBlbmRpbmdQcm9wcyxudWxsPT09YT9iLmNoaWxkPUJoKGIsbnVsbCxkLGMpOllpKGEsYixkLGMpLGIuY2hpbGQ7Y2FzZSAxMTpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6TGcoZCxlKSxaaShhLGIsZCxlLGMpO2Nhc2UgNzpyZXR1cm4gWWkoYSxiLGIucGVuZGluZ1Byb3BzLGMpLGIuY2hpbGQ7Y2FzZSA4OnJldHVybiBZaShhLGIsYi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sYyksYi5jaGlsZDtjYXNlIDEyOnJldHVybiBZaShhLGIsYi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sYyksYi5jaGlsZDtjYXNlIDEwOmE6e2Q9Yi50eXBlLl9jb250ZXh0O2U9Yi5wZW5kaW5nUHJvcHM7Zj1iLm1lbW9pemVkUHJvcHM7XG5nPWUudmFsdWU7RyhNZyxkLl9jdXJyZW50VmFsdWUpO2QuX2N1cnJlbnRWYWx1ZT1nO2lmKG51bGwhPT1mKWlmKEhlKGYudmFsdWUsZykpe2lmKGYuY2hpbGRyZW49PT1lLmNoaWxkcmVuJiYhV2YuY3VycmVudCl7Yj0kaShhLGIsYyk7YnJlYWsgYX19ZWxzZSBmb3IoZj1iLmNoaWxkLG51bGwhPT1mJiYoZi5yZXR1cm49Yik7bnVsbCE9PWY7KXt2YXIgaD1mLmRlcGVuZGVuY2llcztpZihudWxsIT09aCl7Zz1mLmNoaWxkO2Zvcih2YXIgaz1oLmZpcnN0Q29udGV4dDtudWxsIT09azspe2lmKGsuY29udGV4dD09PWQpe2lmKDE9PT1mLnRhZyl7az1jaCgtMSxjJi1jKTtrLnRhZz0yO3ZhciBsPWYudXBkYXRlUXVldWU7aWYobnVsbCE9PWwpe2w9bC5zaGFyZWQ7dmFyIG09bC5wZW5kaW5nO251bGw9PT1tP2submV4dD1rOihrLm5leHQ9bS5uZXh0LG0ubmV4dD1rKTtsLnBlbmRpbmc9a319Zi5sYW5lc3w9YztrPWYuYWx0ZXJuYXRlO251bGwhPT1rJiYoay5sYW5lc3w9Yyk7U2coZi5yZXR1cm4sXG5jLGIpO2gubGFuZXN8PWM7YnJlYWt9az1rLm5leHR9fWVsc2UgaWYoMTA9PT1mLnRhZylnPWYudHlwZT09PWIudHlwZT9udWxsOmYuY2hpbGQ7ZWxzZSBpZigxOD09PWYudGFnKXtnPWYucmV0dXJuO2lmKG51bGw9PT1nKXRocm93IEVycm9yKHAoMzQxKSk7Zy5sYW5lc3w9YztoPWcuYWx0ZXJuYXRlO251bGwhPT1oJiYoaC5sYW5lc3w9Yyk7U2coZyxjLGIpO2c9Zi5zaWJsaW5nfWVsc2UgZz1mLmNoaWxkO2lmKG51bGwhPT1nKWcucmV0dXJuPWY7ZWxzZSBmb3IoZz1mO251bGwhPT1nOyl7aWYoZz09PWIpe2c9bnVsbDticmVha31mPWcuc2libGluZztpZihudWxsIT09Zil7Zi5yZXR1cm49Zy5yZXR1cm47Zz1mO2JyZWFrfWc9Zy5yZXR1cm59Zj1nfVlpKGEsYixlLmNoaWxkcmVuLGMpO2I9Yi5jaGlsZH1yZXR1cm4gYjtjYXNlIDk6cmV0dXJuIGU9Yi50eXBlLGQ9Yi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sVGcoYixjKSxlPVZnKGUpLGQ9ZChlKSxiLmZsYWdzfD0xLFlpKGEsYixkLGMpLFxuYi5jaGlsZDtjYXNlIDE0OnJldHVybiBkPWIudHlwZSxlPUxnKGQsYi5wZW5kaW5nUHJvcHMpLGU9TGcoZC50eXBlLGUpLGFqKGEsYixkLGUsYyk7Y2FzZSAxNTpyZXR1cm4gY2ooYSxiLGIudHlwZSxiLnBlbmRpbmdQcm9wcyxjKTtjYXNlIDE3OnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpMZyhkLGUpLGpqKGEsYiksYi50YWc9MSxaZihkKT8oYT0hMCxjZyhiKSk6YT0hMSxUZyhiLGMpLHBoKGIsZCxlKSxyaChiLGQsZSxjKSxraihudWxsLGIsZCwhMCxhLGMpO2Nhc2UgMTk6cmV0dXJuIHlqKGEsYixjKTtjYXNlIDIyOnJldHVybiBlaihhLGIsYyl9dGhyb3cgRXJyb3IocCgxNTYsYi50YWcpKTt9O2Z1bmN0aW9uIEdrKGEsYil7cmV0dXJuIGFjKGEsYil9XG5mdW5jdGlvbiBhbChhLGIsYyxkKXt0aGlzLnRhZz1hO3RoaXMua2V5PWM7dGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPXRoaXMuZWxlbWVudFR5cGU9bnVsbDt0aGlzLmluZGV4PTA7dGhpcy5yZWY9bnVsbDt0aGlzLnBlbmRpbmdQcm9wcz1iO3RoaXMuZGVwZW5kZW5jaWVzPXRoaXMubWVtb2l6ZWRTdGF0ZT10aGlzLnVwZGF0ZVF1ZXVlPXRoaXMubWVtb2l6ZWRQcm9wcz1udWxsO3RoaXMubW9kZT1kO3RoaXMuc3VidHJlZUZsYWdzPXRoaXMuZmxhZ3M9MDt0aGlzLmRlbGV0aW9ucz1udWxsO3RoaXMuY2hpbGRMYW5lcz10aGlzLmxhbmVzPTA7dGhpcy5hbHRlcm5hdGU9bnVsbH1mdW5jdGlvbiBCZyhhLGIsYyxkKXtyZXR1cm4gbmV3IGFsKGEsYixjLGQpfWZ1bmN0aW9uIGJqKGEpe2E9YS5wcm90b3R5cGU7cmV0dXJuISghYXx8IWEuaXNSZWFjdENvbXBvbmVudCl9XG5mdW5jdGlvbiAkayhhKXtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSlyZXR1cm4gYmooYSk/MTowO2lmKHZvaWQgMCE9PWEmJm51bGwhPT1hKXthPWEuJCR0eXBlb2Y7aWYoYT09PURhKXJldHVybiAxMTtpZihhPT09R2EpcmV0dXJuIDE0fXJldHVybiAyfVxuZnVuY3Rpb24gd2goYSxiKXt2YXIgYz1hLmFsdGVybmF0ZTtudWxsPT09Yz8oYz1CZyhhLnRhZyxiLGEua2V5LGEubW9kZSksYy5lbGVtZW50VHlwZT1hLmVsZW1lbnRUeXBlLGMudHlwZT1hLnR5cGUsYy5zdGF0ZU5vZGU9YS5zdGF0ZU5vZGUsYy5hbHRlcm5hdGU9YSxhLmFsdGVybmF0ZT1jKTooYy5wZW5kaW5nUHJvcHM9YixjLnR5cGU9YS50eXBlLGMuZmxhZ3M9MCxjLnN1YnRyZWVGbGFncz0wLGMuZGVsZXRpb25zPW51bGwpO2MuZmxhZ3M9YS5mbGFncyYxNDY4MDA2NDtjLmNoaWxkTGFuZXM9YS5jaGlsZExhbmVzO2MubGFuZXM9YS5sYW5lcztjLmNoaWxkPWEuY2hpbGQ7Yy5tZW1vaXplZFByb3BzPWEubWVtb2l6ZWRQcm9wcztjLm1lbW9pemVkU3RhdGU9YS5tZW1vaXplZFN0YXRlO2MudXBkYXRlUXVldWU9YS51cGRhdGVRdWV1ZTtiPWEuZGVwZW5kZW5jaWVzO2MuZGVwZW5kZW5jaWVzPW51bGw9PT1iP251bGw6e2xhbmVzOmIubGFuZXMsZmlyc3RDb250ZXh0OmIuZmlyc3RDb250ZXh0fTtcbmMuc2libGluZz1hLnNpYmxpbmc7Yy5pbmRleD1hLmluZGV4O2MucmVmPWEucmVmO3JldHVybiBjfVxuZnVuY3Rpb24geWgoYSxiLGMsZCxlLGYpe3ZhciBnPTI7ZD1hO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKWJqKGEpJiYoZz0xKTtlbHNlIGlmKFwic3RyaW5nXCI9PT10eXBlb2YgYSlnPTU7ZWxzZSBhOnN3aXRjaChhKXtjYXNlIHlhOnJldHVybiBBaChjLmNoaWxkcmVuLGUsZixiKTtjYXNlIHphOmc9ODtlfD04O2JyZWFrO2Nhc2UgQWE6cmV0dXJuIGE9QmcoMTIsYyxiLGV8MiksYS5lbGVtZW50VHlwZT1BYSxhLmxhbmVzPWYsYTtjYXNlIEVhOnJldHVybiBhPUJnKDEzLGMsYixlKSxhLmVsZW1lbnRUeXBlPUVhLGEubGFuZXM9ZixhO2Nhc2UgRmE6cmV0dXJuIGE9QmcoMTksYyxiLGUpLGEuZWxlbWVudFR5cGU9RmEsYS5sYW5lcz1mLGE7Y2FzZSBJYTpyZXR1cm4gcWooYyxlLGYsYik7ZGVmYXVsdDppZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXN3aXRjaChhLiQkdHlwZW9mKXtjYXNlIEJhOmc9MTA7YnJlYWsgYTtjYXNlIENhOmc9OTticmVhayBhO2Nhc2UgRGE6Zz0xMTtcbmJyZWFrIGE7Y2FzZSBHYTpnPTE0O2JyZWFrIGE7Y2FzZSBIYTpnPTE2O2Q9bnVsbDticmVhayBhfXRocm93IEVycm9yKHAoMTMwLG51bGw9PWE/YTp0eXBlb2YgYSxcIlwiKSk7fWI9QmcoZyxjLGIsZSk7Yi5lbGVtZW50VHlwZT1hO2IudHlwZT1kO2IubGFuZXM9ZjtyZXR1cm4gYn1mdW5jdGlvbiBBaChhLGIsYyxkKXthPUJnKDcsYSxkLGIpO2EubGFuZXM9YztyZXR1cm4gYX1mdW5jdGlvbiBxaihhLGIsYyxkKXthPUJnKDIyLGEsZCxiKTthLmVsZW1lbnRUeXBlPUlhO2EubGFuZXM9YzthLnN0YXRlTm9kZT17aXNIaWRkZW46ITF9O3JldHVybiBhfWZ1bmN0aW9uIHhoKGEsYixjKXthPUJnKDYsYSxudWxsLGIpO2EubGFuZXM9YztyZXR1cm4gYX1cbmZ1bmN0aW9uIHpoKGEsYixjKXtiPUJnKDQsbnVsbCE9PWEuY2hpbGRyZW4/YS5jaGlsZHJlbjpbXSxhLmtleSxiKTtiLmxhbmVzPWM7Yi5zdGF0ZU5vZGU9e2NvbnRhaW5lckluZm86YS5jb250YWluZXJJbmZvLHBlbmRpbmdDaGlsZHJlbjpudWxsLGltcGxlbWVudGF0aW9uOmEuaW1wbGVtZW50YXRpb259O3JldHVybiBifVxuZnVuY3Rpb24gYmwoYSxiLGMsZCxlKXt0aGlzLnRhZz1iO3RoaXMuY29udGFpbmVySW5mbz1hO3RoaXMuZmluaXNoZWRXb3JrPXRoaXMucGluZ0NhY2hlPXRoaXMuY3VycmVudD10aGlzLnBlbmRpbmdDaGlsZHJlbj1udWxsO3RoaXMudGltZW91dEhhbmRsZT0tMTt0aGlzLmNhbGxiYWNrTm9kZT10aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD1udWxsO3RoaXMuY2FsbGJhY2tQcmlvcml0eT0wO3RoaXMuZXZlbnRUaW1lcz16YygwKTt0aGlzLmV4cGlyYXRpb25UaW1lcz16YygtMSk7dGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLmZpbmlzaGVkTGFuZXM9dGhpcy5tdXRhYmxlUmVhZExhbmVzPXRoaXMuZXhwaXJlZExhbmVzPXRoaXMucGluZ2VkTGFuZXM9dGhpcy5zdXNwZW5kZWRMYW5lcz10aGlzLnBlbmRpbmdMYW5lcz0wO3RoaXMuZW50YW5nbGVtZW50cz16YygwKTt0aGlzLmlkZW50aWZpZXJQcmVmaXg9ZDt0aGlzLm9uUmVjb3ZlcmFibGVFcnJvcj1lO3RoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT1cbm51bGx9ZnVuY3Rpb24gY2woYSxiLGMsZCxlLGYsZyxoLGspe2E9bmV3IGJsKGEsYixjLGgsayk7MT09PWI/KGI9MSwhMD09PWYmJihifD04KSk6Yj0wO2Y9QmcoMyxudWxsLG51bGwsYik7YS5jdXJyZW50PWY7Zi5zdGF0ZU5vZGU9YTtmLm1lbW9pemVkU3RhdGU9e2VsZW1lbnQ6ZCxpc0RlaHlkcmF0ZWQ6YyxjYWNoZTpudWxsLHRyYW5zaXRpb25zOm51bGwscGVuZGluZ1N1c3BlbnNlQm91bmRhcmllczpudWxsfTthaChmKTtyZXR1cm4gYX1mdW5jdGlvbiBkbChhLGIsYyl7dmFyIGQ9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOndhLGtleTpudWxsPT1kP251bGw6XCJcIitkLGNoaWxkcmVuOmEsY29udGFpbmVySW5mbzpiLGltcGxlbWVudGF0aW9uOmN9fVxuZnVuY3Rpb24gZWwoYSl7aWYoIWEpcmV0dXJuIFZmO2E9YS5fcmVhY3RJbnRlcm5hbHM7YTp7aWYoVmIoYSkhPT1hfHwxIT09YS50YWcpdGhyb3cgRXJyb3IocCgxNzApKTt2YXIgYj1hO2Rve3N3aXRjaChiLnRhZyl7Y2FzZSAzOmI9Yi5zdGF0ZU5vZGUuY29udGV4dDticmVhayBhO2Nhc2UgMTppZihaZihiLnR5cGUpKXtiPWIuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O2JyZWFrIGF9fWI9Yi5yZXR1cm59d2hpbGUobnVsbCE9PWIpO3Rocm93IEVycm9yKHAoMTcxKSk7fWlmKDE9PT1hLnRhZyl7dmFyIGM9YS50eXBlO2lmKFpmKGMpKXJldHVybiBiZyhhLGMsYil9cmV0dXJuIGJ9XG5mdW5jdGlvbiBmbChhLGIsYyxkLGUsZixnLGgsayl7YT1jbChjLGQsITAsYSxlLGYsZyxoLGspO2EuY29udGV4dD1lbChudWxsKTtjPWEuY3VycmVudDtkPUwoKTtlPWxoKGMpO2Y9Y2goZCxlKTtmLmNhbGxiYWNrPXZvaWQgMCE9PWImJm51bGwhPT1iP2I6bnVsbDtkaChjLGYsZSk7YS5jdXJyZW50LmxhbmVzPWU7QWMoYSxlLGQpO0VrKGEsZCk7cmV0dXJuIGF9ZnVuY3Rpb24gZ2woYSxiLGMsZCl7dmFyIGU9Yi5jdXJyZW50LGY9TCgpLGc9bGgoZSk7Yz1lbChjKTtudWxsPT09Yi5jb250ZXh0P2IuY29udGV4dD1jOmIucGVuZGluZ0NvbnRleHQ9YztiPWNoKGYsZyk7Yi5wYXlsb2FkPXtlbGVtZW50OmF9O2Q9dm9pZCAwPT09ZD9udWxsOmQ7bnVsbCE9PWQmJihiLmNhbGxiYWNrPWQpO2E9ZGgoZSxiLGcpO251bGwhPT1hJiYobWgoYSxlLGcsZiksZWgoYSxlLGcpKTtyZXR1cm4gZ31cbmZ1bmN0aW9uIGhsKGEpe2E9YS5jdXJyZW50O2lmKCFhLmNoaWxkKXJldHVybiBudWxsO3N3aXRjaChhLmNoaWxkLnRhZyl7Y2FzZSA1OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZTtkZWZhdWx0OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZX19ZnVuY3Rpb24gaWwoYSxiKXthPWEubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09YSYmbnVsbCE9PWEuZGVoeWRyYXRlZCl7dmFyIGM9YS5yZXRyeUxhbmU7YS5yZXRyeUxhbmU9MCE9PWMmJmM8Yj9jOmJ9fWZ1bmN0aW9uIGpsKGEsYil7aWwoYSxiKTsoYT1hLmFsdGVybmF0ZSkmJmlsKGEsYil9ZnVuY3Rpb24ga2woKXtyZXR1cm4gbnVsbH12YXIgbGw9XCJmdW5jdGlvblwiPT09dHlwZW9mIHJlcG9ydEVycm9yP3JlcG9ydEVycm9yOmZ1bmN0aW9uKGEpe2NvbnNvbGUuZXJyb3IoYSl9O2Z1bmN0aW9uIG1sKGEpe3RoaXMuX2ludGVybmFsUm9vdD1hfVxubmwucHJvdG90eXBlLnJlbmRlcj1tbC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2ludGVybmFsUm9vdDtpZihudWxsPT09Yil0aHJvdyBFcnJvcihwKDQwOSkpO2dsKGEsYixudWxsLG51bGwpfTtubC5wcm90b3R5cGUudW5tb3VudD1tbC5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2ludGVybmFsUm9vdDtpZihudWxsIT09YSl7dGhpcy5faW50ZXJuYWxSb290PW51bGw7dmFyIGI9YS5jb250YWluZXJJbmZvO1NrKGZ1bmN0aW9uKCl7Z2wobnVsbCxhLG51bGwsbnVsbCl9KTtiW3VmXT1udWxsfX07ZnVuY3Rpb24gbmwoYSl7dGhpcy5faW50ZXJuYWxSb290PWF9XG5ubC5wcm90b3R5cGUudW5zdGFibGVfc2NoZWR1bGVIeWRyYXRpb249ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI9SGMoKTthPXtibG9ja2VkT246bnVsbCx0YXJnZXQ6YSxwcmlvcml0eTpifTtmb3IodmFyIGM9MDtjPFFjLmxlbmd0aCYmMCE9PWImJmI8UWNbY10ucHJpb3JpdHk7YysrKTtRYy5zcGxpY2UoYywwLGEpOzA9PT1jJiZWYyhhKX19O2Z1bmN0aW9uIG9sKGEpe3JldHVybiEoIWF8fDEhPT1hLm5vZGVUeXBlJiY5IT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlKX1mdW5jdGlvbiBwbChhKXtyZXR1cm4hKCFhfHwxIT09YS5ub2RlVHlwZSYmOSE9PWEubm9kZVR5cGUmJjExIT09YS5ub2RlVHlwZSYmKDghPT1hLm5vZGVUeXBlfHxcIiByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSBcIiE9PWEubm9kZVZhbHVlKSl9ZnVuY3Rpb24gcWwoKXt9XG5mdW5jdGlvbiBybChhLGIsYyxkLGUpe2lmKGUpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXt2YXIgZj1kO2Q9ZnVuY3Rpb24oKXt2YXIgYT1obChnKTtmLmNhbGwoYSl9fXZhciBnPWZsKGIsZCxhLDAsbnVsbCwhMSwhMSxcIlwiLHFsKTthLl9yZWFjdFJvb3RDb250YWluZXI9ZzthW3VmXT1nLmN1cnJlbnQ7c2YoOD09PWEubm9kZVR5cGU/YS5wYXJlbnROb2RlOmEpO1NrKCk7cmV0dXJuIGd9Zm9yKDtlPWEubGFzdENoaWxkOylhLnJlbW92ZUNoaWxkKGUpO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXt2YXIgaD1kO2Q9ZnVuY3Rpb24oKXt2YXIgYT1obChrKTtoLmNhbGwoYSl9fXZhciBrPWNsKGEsMCwhMSxudWxsLG51bGwsITEsITEsXCJcIixxbCk7YS5fcmVhY3RSb290Q29udGFpbmVyPWs7YVt1Zl09ay5jdXJyZW50O3NmKDg9PT1hLm5vZGVUeXBlP2EucGFyZW50Tm9kZTphKTtTayhmdW5jdGlvbigpe2dsKGIsayxjLGQpfSk7cmV0dXJuIGt9XG5mdW5jdGlvbiBzbChhLGIsYyxkLGUpe3ZhciBmPWMuX3JlYWN0Um9vdENvbnRhaW5lcjtpZihmKXt2YXIgZz1mO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlKXt2YXIgaD1lO2U9ZnVuY3Rpb24oKXt2YXIgYT1obChnKTtoLmNhbGwoYSl9fWdsKGIsZyxhLGUpfWVsc2UgZz1ybChjLGIsYSxlLGQpO3JldHVybiBobChnKX1FYz1mdW5jdGlvbihhKXtzd2l0Y2goYS50YWcpe2Nhc2UgMzp2YXIgYj1hLnN0YXRlTm9kZTtpZihiLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe3ZhciBjPXRjKGIucGVuZGluZ0xhbmVzKTswIT09YyYmKENjKGIsY3wxKSxFayhiLEIoKSksMD09PShLJjYpJiYoSGo9QigpKzUwMCxqZygpKSl9YnJlYWs7Y2FzZSAxMzpTayhmdW5jdGlvbigpe3ZhciBiPVpnKGEsMSk7aWYobnVsbCE9PWIpe3ZhciBjPUwoKTttaChiLGEsMSxjKX19KSxqbChhLDEpfX07XG5GYz1mdW5jdGlvbihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1aZyhhLDEzNDIxNzcyOCk7aWYobnVsbCE9PWIpe3ZhciBjPUwoKTttaChiLGEsMTM0MjE3NzI4LGMpfWpsKGEsMTM0MjE3NzI4KX19O0djPWZ1bmN0aW9uKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPWxoKGEpLGM9WmcoYSxiKTtpZihudWxsIT09Yyl7dmFyIGQ9TCgpO21oKGMsYSxiLGQpfWpsKGEsYil9fTtIYz1mdW5jdGlvbigpe3JldHVybiBDfTtJYz1mdW5jdGlvbihhLGIpe3ZhciBjPUM7dHJ5e3JldHVybiBDPWEsYigpfWZpbmFsbHl7Qz1jfX07XG55Yj1mdW5jdGlvbihhLGIsYyl7c3dpdGNoKGIpe2Nhc2UgXCJpbnB1dFwiOmJiKGEsYyk7Yj1jLm5hbWU7aWYoXCJyYWRpb1wiPT09Yy50eXBlJiZudWxsIT1iKXtmb3IoYz1hO2MucGFyZW50Tm9kZTspYz1jLnBhcmVudE5vZGU7Yz1jLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFtuYW1lPVwiK0pTT04uc3RyaW5naWZ5KFwiXCIrYikrJ11bdHlwZT1cInJhZGlvXCJdJyk7Zm9yKGI9MDtiPGMubGVuZ3RoO2IrKyl7dmFyIGQ9Y1tiXTtpZihkIT09YSYmZC5mb3JtPT09YS5mb3JtKXt2YXIgZT1EYihkKTtpZighZSl0aHJvdyBFcnJvcihwKDkwKSk7V2EoZCk7YmIoZCxlKX19fWJyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmliKGEsYyk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmI9Yy52YWx1ZSxudWxsIT1iJiZmYihhLCEhYy5tdWx0aXBsZSxiLCExKX19O0diPVJrO0hiPVNrO1xudmFyIHRsPXt1c2luZ0NsaWVudEVudHJ5UG9pbnQ6ITEsRXZlbnRzOltDYix1ZSxEYixFYixGYixSa119LHVsPXtmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpXYyxidW5kbGVUeXBlOjAsdmVyc2lvbjpcIjE4LjIuMFwiLHJlbmRlcmVyUGFja2FnZU5hbWU6XCJyZWFjdC1kb21cIn07XG52YXIgdmw9e2J1bmRsZVR5cGU6dWwuYnVuZGxlVHlwZSx2ZXJzaW9uOnVsLnZlcnNpb24scmVuZGVyZXJQYWNrYWdlTmFtZTp1bC5yZW5kZXJlclBhY2thZ2VOYW1lLHJlbmRlcmVyQ29uZmlnOnVsLnJlbmRlcmVyQ29uZmlnLG92ZXJyaWRlSG9va1N0YXRlOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wczpudWxsLG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6bnVsbCxzZXRFcnJvckhhbmRsZXI6bnVsbCxzZXRTdXNwZW5zZUhhbmRsZXI6bnVsbCxzY2hlZHVsZVVwZGF0ZTpudWxsLGN1cnJlbnREaXNwYXRjaGVyUmVmOnVhLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6ZnVuY3Rpb24oYSl7YT1aYihhKTtyZXR1cm4gbnVsbD09PWE/bnVsbDphLnN0YXRlTm9kZX0sZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6dWwuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2V8fFxua2wsZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOm51bGwsc2NoZWR1bGVSZWZyZXNoOm51bGwsc2NoZWR1bGVSb290Om51bGwsc2V0UmVmcmVzaEhhbmRsZXI6bnVsbCxnZXRDdXJyZW50RmliZXI6bnVsbCxyZWNvbmNpbGVyVmVyc2lvbjpcIjE4LjIuMC1uZXh0LTllM2I3NzJiOC0yMDIyMDYwOFwifTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyl7dmFyIHdsPV9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztpZighd2wuaXNEaXNhYmxlZCYmd2wuc3VwcG9ydHNGaWJlcil0cnl7a2M9d2wuaW5qZWN0KHZsKSxsYz13bH1jYXRjaChhKXt9fWV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9dGw7XG5leHBvcnRzLmNyZWF0ZVBvcnRhbD1mdW5jdGlvbihhLGIpe3ZhciBjPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO2lmKCFvbChiKSl0aHJvdyBFcnJvcihwKDIwMCkpO3JldHVybiBkbChhLGIsbnVsbCxjKX07ZXhwb3J0cy5jcmVhdGVSb290PWZ1bmN0aW9uKGEsYil7aWYoIW9sKGEpKXRocm93IEVycm9yKHAoMjk5KSk7dmFyIGM9ITEsZD1cIlwiLGU9bGw7bnVsbCE9PWImJnZvaWQgMCE9PWImJighMD09PWIudW5zdGFibGVfc3RyaWN0TW9kZSYmKGM9ITApLHZvaWQgMCE9PWIuaWRlbnRpZmllclByZWZpeCYmKGQ9Yi5pZGVudGlmaWVyUHJlZml4KSx2b2lkIDAhPT1iLm9uUmVjb3ZlcmFibGVFcnJvciYmKGU9Yi5vblJlY292ZXJhYmxlRXJyb3IpKTtiPWNsKGEsMSwhMSxudWxsLG51bGwsYywhMSxkLGUpO2FbdWZdPWIuY3VycmVudDtzZig4PT09YS5ub2RlVHlwZT9hLnBhcmVudE5vZGU6YSk7cmV0dXJuIG5ldyBtbChiKX07XG5leHBvcnRzLmZpbmRET01Ob2RlPWZ1bmN0aW9uKGEpe2lmKG51bGw9PWEpcmV0dXJuIG51bGw7aWYoMT09PWEubm9kZVR5cGUpcmV0dXJuIGE7dmFyIGI9YS5fcmVhY3RJbnRlcm5hbHM7aWYodm9pZCAwPT09Yil7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEucmVuZGVyKXRocm93IEVycm9yKHAoMTg4KSk7YT1PYmplY3Qua2V5cyhhKS5qb2luKFwiLFwiKTt0aHJvdyBFcnJvcihwKDI2OCxhKSk7fWE9WmIoYik7YT1udWxsPT09YT9udWxsOmEuc3RhdGVOb2RlO3JldHVybiBhfTtleHBvcnRzLmZsdXNoU3luYz1mdW5jdGlvbihhKXtyZXR1cm4gU2soYSl9O2V4cG9ydHMuaHlkcmF0ZT1mdW5jdGlvbihhLGIsYyl7aWYoIXBsKGIpKXRocm93IEVycm9yKHAoMjAwKSk7cmV0dXJuIHNsKG51bGwsYSxiLCEwLGMpfTtcbmV4cG9ydHMuaHlkcmF0ZVJvb3Q9ZnVuY3Rpb24oYSxiLGMpe2lmKCFvbChhKSl0aHJvdyBFcnJvcihwKDQwNSkpO3ZhciBkPW51bGwhPWMmJmMuaHlkcmF0ZWRTb3VyY2VzfHxudWxsLGU9ITEsZj1cIlwiLGc9bGw7bnVsbCE9PWMmJnZvaWQgMCE9PWMmJighMD09PWMudW5zdGFibGVfc3RyaWN0TW9kZSYmKGU9ITApLHZvaWQgMCE9PWMuaWRlbnRpZmllclByZWZpeCYmKGY9Yy5pZGVudGlmaWVyUHJlZml4KSx2b2lkIDAhPT1jLm9uUmVjb3ZlcmFibGVFcnJvciYmKGc9Yy5vblJlY292ZXJhYmxlRXJyb3IpKTtiPWZsKGIsbnVsbCxhLDEsbnVsbCE9Yz9jOm51bGwsZSwhMSxmLGcpO2FbdWZdPWIuY3VycmVudDtzZihhKTtpZihkKWZvcihhPTA7YTxkLmxlbmd0aDthKyspYz1kW2FdLGU9Yy5fZ2V0VmVyc2lvbixlPWUoYy5fc291cmNlKSxudWxsPT1iLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE/Yi5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPVtjLGVdOmIubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKGMsXG5lKTtyZXR1cm4gbmV3IG5sKGIpfTtleHBvcnRzLnJlbmRlcj1mdW5jdGlvbihhLGIsYyl7aWYoIXBsKGIpKXRocm93IEVycm9yKHAoMjAwKSk7cmV0dXJuIHNsKG51bGwsYSxiLCExLGMpfTtleHBvcnRzLnVubW91bnRDb21wb25lbnRBdE5vZGU9ZnVuY3Rpb24oYSl7aWYoIXBsKGEpKXRocm93IEVycm9yKHAoNDApKTtyZXR1cm4gYS5fcmVhY3RSb290Q29udGFpbmVyPyhTayhmdW5jdGlvbigpe3NsKG51bGwsbnVsbCxhLCExLGZ1bmN0aW9uKCl7YS5fcmVhY3RSb290Q29udGFpbmVyPW51bGw7YVt1Zl09bnVsbH0pfSksITApOiExfTtleHBvcnRzLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPVJrO1xuZXhwb3J0cy51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcj1mdW5jdGlvbihhLGIsYyxkKXtpZighcGwoYykpdGhyb3cgRXJyb3IocCgyMDApKTtpZihudWxsPT1hfHx2b2lkIDA9PT1hLl9yZWFjdEludGVybmFscyl0aHJvdyBFcnJvcihwKDM4KSk7cmV0dXJuIHNsKGEsYixjLCExLGQpfTtleHBvcnRzLnZlcnNpb249XCIxOC4yLjAtbmV4dC05ZTNiNzcyYjgtMjAyMjA2MDhcIjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIG0gPSByZXF1aXJlKCdyZWFjdC1kb20nKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGV4cG9ydHMuY3JlYXRlUm9vdCA9IG0uY3JlYXRlUm9vdDtcbiAgZXhwb3J0cy5oeWRyYXRlUm9vdCA9IG0uaHlkcmF0ZVJvb3Q7XG59IGVsc2Uge1xuICB2YXIgaSA9IG0uX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG4gIGV4cG9ydHMuY3JlYXRlUm9vdCA9IGZ1bmN0aW9uKGMsIG8pIHtcbiAgICBpLnVzaW5nQ2xpZW50RW50cnlQb2ludCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBtLmNyZWF0ZVJvb3QoYywgbyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGkudXNpbmdDbGllbnRFbnRyeVBvaW50ID0gZmFsc2U7XG4gICAgfVxuICB9O1xuICBleHBvcnRzLmh5ZHJhdGVSb290ID0gZnVuY3Rpb24oYywgaCwgbykge1xuICAgIGkudXNpbmdDbGllbnRFbnRyeVBvaW50ID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG0uaHlkcmF0ZVJvb3QoYywgaCwgbyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGkudXNpbmdDbGllbnRFbnRyeVBvaW50ID0gZmFsc2U7XG4gICAgfVxuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBjaGVja0RDRSgpIHtcbiAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuICBpZiAoXG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZFxuICAgIC8vIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgY29uZGl0aW9uIGlzIHRydWUgb25seSBpbiBkZXZlbG9wbWVudC5cbiAgICAvLyBUaGVyZWZvcmUgaWYgdGhlIGJyYW5jaCBpcyBzdGlsbCBoZXJlLCBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2Fzbid0XG4gICAgLy8gcHJvcGVybHkgYXBwbGllZC5cbiAgICAvLyBEb24ndCBjaGFuZ2UgdGhlIG1lc3NhZ2UuIFJlYWN0IERldlRvb2xzIHJlbGllcyBvbiBpdC4gQWxzbyBtYWtlIHN1cmVcbiAgICAvLyB0aGlzIG1lc3NhZ2UgZG9lc24ndCBvY2N1ciBlbHNld2hlcmUgaW4gdGhpcyBmdW5jdGlvbiwgb3IgaXQgd2lsbCBjYXVzZVxuICAgIC8vIGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdeX14nKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb2RlIGFib3ZlIGhhcyBiZWVuIGRlYWQgY29kZSBlbGltaW5hdGVkIChEQ0UnZCkuXG4gICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGNoZWNrRENFKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRGV2VG9vbHMgc2hvdWxkbid0IGNyYXNoIFJlYWN0LCBubyBtYXR0ZXIgd2hhdC5cbiAgICAvLyBXZSBzaG91bGQgc3RpbGwgcmVwb3J0IGluIGNhc2Ugd2UgYnJlYWsgdGhpcyBjb2RlLlxuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBEQ0UgY2hlY2sgc2hvdWxkIGhhcHBlbiBiZWZvcmUgUmVhY3RET00gYnVuZGxlIGV4ZWN1dGVzIHNvIHRoYXRcbiAgLy8gRGV2VG9vbHMgY2FuIHJlcG9ydCBiYWQgbWluaWZpY2F0aW9uIGR1cmluZyBpbmplY3Rpb24uXG4gIGNoZWNrRENFKCk7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBiPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLGM9U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxkPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxlPVN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxmPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSxnPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSxoPVN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLGs9U3ltYm9sLmZvcihcInJlYWN0LnNlcnZlcl9jb250ZXh0XCIpLGw9U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLG09U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLG49U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIikscD1TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxxPVN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLHQ9U3ltYm9sLmZvcihcInJlYWN0Lm9mZnNjcmVlblwiKSx1O3U9U3ltYm9sLmZvcihcInJlYWN0Lm1vZHVsZS5yZWZlcmVuY2VcIik7XG5mdW5jdGlvbiB2KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciByPWEuJCR0eXBlb2Y7c3dpdGNoKHIpe2Nhc2UgYjpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBkOmNhc2UgZjpjYXNlIGU6Y2FzZSBtOmNhc2UgbjpyZXR1cm4gYTtkZWZhdWx0OnN3aXRjaChhPWEmJmEuJCR0eXBlb2YsYSl7Y2FzZSBrOmNhc2UgaDpjYXNlIGw6Y2FzZSBxOmNhc2UgcDpjYXNlIGc6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gcn19Y2FzZSBjOnJldHVybiByfX19ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aDtleHBvcnRzLkNvbnRleHRQcm92aWRlcj1nO2V4cG9ydHMuRWxlbWVudD1iO2V4cG9ydHMuRm9yd2FyZFJlZj1sO2V4cG9ydHMuRnJhZ21lbnQ9ZDtleHBvcnRzLkxhenk9cTtleHBvcnRzLk1lbW89cDtleHBvcnRzLlBvcnRhbD1jO2V4cG9ydHMuUHJvZmlsZXI9ZjtleHBvcnRzLlN0cmljdE1vZGU9ZTtleHBvcnRzLlN1c3BlbnNlPW07XG5leHBvcnRzLlN1c3BlbnNlTGlzdD1uO2V4cG9ydHMuaXNBc3luY01vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1ofTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Z307ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWJ9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bH07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09ZH07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1xfTtleHBvcnRzLmlzTWVtbz1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PXB9O1xuZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWN9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWZ9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09ZX07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bX07ZXhwb3J0cy5pc1N1c3BlbnNlTGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PW59O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWR8fGE9PT1mfHxhPT09ZXx8YT09PW18fGE9PT1ufHxhPT09dHx8XCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmKGEuJCR0eXBlb2Y9PT1xfHxhLiQkdHlwZW9mPT09cHx8YS4kJHR5cGVvZj09PWd8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09bHx8YS4kJHR5cGVvZj09PXV8fHZvaWQgMCE9PWEuZ2V0TW9kdWxlSWQpPyEwOiExfTtleHBvcnRzLnR5cGVPZj12O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGY9cmVxdWlyZShcInJlYWN0XCIpLGs9U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksbD1TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksbT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LG49Zi5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdEN1cnJlbnRPd25lcixwPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07XG5mdW5jdGlvbiBxKGMsYSxnKXt2YXIgYixkPXt9LGU9bnVsbCxoPW51bGw7dm9pZCAwIT09ZyYmKGU9XCJcIitnKTt2b2lkIDAhPT1hLmtleSYmKGU9XCJcIithLmtleSk7dm9pZCAwIT09YS5yZWYmJihoPWEucmVmKTtmb3IoYiBpbiBhKW0uY2FsbChhLGIpJiYhcC5oYXNPd25Qcm9wZXJ0eShiKSYmKGRbYl09YVtiXSk7aWYoYyYmYy5kZWZhdWx0UHJvcHMpZm9yKGIgaW4gYT1jLmRlZmF1bHRQcm9wcyxhKXZvaWQgMD09PWRbYl0mJihkW2JdPWFbYl0pO3JldHVybnskJHR5cGVvZjprLHR5cGU6YyxrZXk6ZSxyZWY6aCxwcm9wczpkLF9vd25lcjpuLmN1cnJlbnR9fWV4cG9ydHMuRnJhZ21lbnQ9bDtleHBvcnRzLmpzeD1xO2V4cG9ydHMuanN4cz1xO1xuIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBsPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLG49U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxwPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxxPVN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxyPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSx0PVN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSx1PVN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLHY9U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLHc9U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLHg9U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIikseT1TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSx6PVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBBKGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT16JiZhW3pdfHxhW1wiQEBpdGVyYXRvclwiXTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGx9XG52YXIgQj17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0sQz1PYmplY3QuYXNzaWduLEQ9e307ZnVuY3Rpb24gRShhLGIsZSl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1EO3RoaXMudXBkYXRlcj1lfHxCfUUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e307XG5FLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihhLGIpe2lmKFwib2JqZWN0XCIhPT10eXBlb2YgYSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGEmJm51bGwhPWEpdGhyb3cgRXJyb3IoXCJzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy5cIik7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGEsYixcInNldFN0YXRlXCIpfTtFLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsYSxcImZvcmNlVXBkYXRlXCIpfTtmdW5jdGlvbiBGKCl7fUYucHJvdG90eXBlPUUucHJvdG90eXBlO2Z1bmN0aW9uIEcoYSxiLGUpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9RDt0aGlzLnVwZGF0ZXI9ZXx8Qn12YXIgSD1HLnByb3RvdHlwZT1uZXcgRjtcbkguY29uc3RydWN0b3I9RztDKEgsRS5wcm90b3R5cGUpO0guaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEk9QXJyYXkuaXNBcnJheSxKPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksSz17Y3VycmVudDpudWxsfSxMPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07XG5mdW5jdGlvbiBNKGEsYixlKXt2YXIgZCxjPXt9LGs9bnVsbCxoPW51bGw7aWYobnVsbCE9Yilmb3IoZCBpbiB2b2lkIDAhPT1iLnJlZiYmKGg9Yi5yZWYpLHZvaWQgMCE9PWIua2V5JiYoaz1cIlwiK2Iua2V5KSxiKUouY2FsbChiLGQpJiYhTC5oYXNPd25Qcm9wZXJ0eShkKSYmKGNbZF09YltkXSk7dmFyIGc9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1nKWMuY2hpbGRyZW49ZTtlbHNlIGlmKDE8Zyl7Zm9yKHZhciBmPUFycmF5KGcpLG09MDttPGc7bSsrKWZbbV09YXJndW1lbnRzW20rMl07Yy5jaGlsZHJlbj1mfWlmKGEmJmEuZGVmYXVsdFByb3BzKWZvcihkIGluIGc9YS5kZWZhdWx0UHJvcHMsZyl2b2lkIDA9PT1jW2RdJiYoY1tkXT1nW2RdKTtyZXR1cm57JCR0eXBlb2Y6bCx0eXBlOmEsa2V5OmsscmVmOmgscHJvcHM6Yyxfb3duZXI6Sy5jdXJyZW50fX1cbmZ1bmN0aW9uIE4oYSxiKXtyZXR1cm57JCR0eXBlb2Y6bCx0eXBlOmEudHlwZSxrZXk6YixyZWY6YS5yZWYscHJvcHM6YS5wcm9wcyxfb3duZXI6YS5fb3duZXJ9fWZ1bmN0aW9uIE8oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWx9ZnVuY3Rpb24gZXNjYXBlKGEpe3ZhciBiPXtcIj1cIjpcIj0wXCIsXCI6XCI6XCI9MlwifTtyZXR1cm5cIiRcIithLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihhKXtyZXR1cm4gYlthXX0pfXZhciBQPS9cXC8rL2c7ZnVuY3Rpb24gUShhLGIpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJm51bGwhPWEua2V5P2VzY2FwZShcIlwiK2Eua2V5KTpiLnRvU3RyaW5nKDM2KX1cbmZ1bmN0aW9uIFIoYSxiLGUsZCxjKXt2YXIgaz10eXBlb2YgYTtpZihcInVuZGVmaW5lZFwiPT09a3x8XCJib29sZWFuXCI9PT1rKWE9bnVsbDt2YXIgaD0hMTtpZihudWxsPT09YSloPSEwO2Vsc2Ugc3dpdGNoKGspe2Nhc2UgXCJzdHJpbmdcIjpjYXNlIFwibnVtYmVyXCI6aD0hMDticmVhaztjYXNlIFwib2JqZWN0XCI6c3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2UgbDpjYXNlIG46aD0hMH19aWYoaClyZXR1cm4gaD1hLGM9YyhoKSxhPVwiXCI9PT1kP1wiLlwiK1EoaCwwKTpkLEkoYyk/KGU9XCJcIixudWxsIT1hJiYoZT1hLnJlcGxhY2UoUCxcIiQmL1wiKStcIi9cIiksUihjLGIsZSxcIlwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfSkpOm51bGwhPWMmJihPKGMpJiYoYz1OKGMsZSsoIWMua2V5fHxoJiZoLmtleT09PWMua2V5P1wiXCI6KFwiXCIrYy5rZXkpLnJlcGxhY2UoUCxcIiQmL1wiKStcIi9cIikrYSkpLGIucHVzaChjKSksMTtoPTA7ZD1cIlwiPT09ZD9cIi5cIjpkK1wiOlwiO2lmKEkoYSkpZm9yKHZhciBnPTA7ZzxhLmxlbmd0aDtnKyspe2s9XG5hW2ddO3ZhciBmPWQrUShrLGcpO2grPVIoayxiLGUsZixjKX1lbHNlIGlmKGY9QShhKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZilmb3IoYT1mLmNhbGwoYSksZz0wOyEoaz1hLm5leHQoKSkuZG9uZTspaz1rLnZhbHVlLGY9ZCtRKGssZysrKSxoKz1SKGssYixlLGYsYyk7ZWxzZSBpZihcIm9iamVjdFwiPT09ayl0aHJvdyBiPVN0cmluZyhhKSxFcnJvcihcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIrKFwiW29iamVjdCBPYmplY3RdXCI9PT1iP1wib2JqZWN0IHdpdGgga2V5cyB7XCIrT2JqZWN0LmtleXMoYSkuam9pbihcIiwgXCIpK1wifVwiOmIpK1wiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiKTtyZXR1cm4gaH1cbmZ1bmN0aW9uIFMoYSxiLGUpe2lmKG51bGw9PWEpcmV0dXJuIGE7dmFyIGQ9W10sYz0wO1IoYSxkLFwiXCIsXCJcIixmdW5jdGlvbihhKXtyZXR1cm4gYi5jYWxsKGUsYSxjKyspfSk7cmV0dXJuIGR9ZnVuY3Rpb24gVChhKXtpZigtMT09PWEuX3N0YXR1cyl7dmFyIGI9YS5fcmVzdWx0O2I9YigpO2IudGhlbihmdW5jdGlvbihiKXtpZigwPT09YS5fc3RhdHVzfHwtMT09PWEuX3N0YXR1cylhLl9zdGF0dXM9MSxhLl9yZXN1bHQ9Yn0sZnVuY3Rpb24oYil7aWYoMD09PWEuX3N0YXR1c3x8LTE9PT1hLl9zdGF0dXMpYS5fc3RhdHVzPTIsYS5fcmVzdWx0PWJ9KTstMT09PWEuX3N0YXR1cyYmKGEuX3N0YXR1cz0wLGEuX3Jlc3VsdD1iKX1pZigxPT09YS5fc3RhdHVzKXJldHVybiBhLl9yZXN1bHQuZGVmYXVsdDt0aHJvdyBhLl9yZXN1bHQ7fVxudmFyIFU9e2N1cnJlbnQ6bnVsbH0sVj17dHJhbnNpdGlvbjpudWxsfSxXPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOlUsUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6VixSZWFjdEN1cnJlbnRPd25lcjpLfTtleHBvcnRzLkNoaWxkcmVuPXttYXA6Uyxmb3JFYWNoOmZ1bmN0aW9uKGEsYixlKXtTKGEsZnVuY3Rpb24oKXtiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZSl9LGNvdW50OmZ1bmN0aW9uKGEpe3ZhciBiPTA7UyhhLGZ1bmN0aW9uKCl7YisrfSk7cmV0dXJuIGJ9LHRvQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIFMoYSxmdW5jdGlvbihhKXtyZXR1cm4gYX0pfHxbXX0sb25seTpmdW5jdGlvbihhKXtpZighTyhhKSl0aHJvdyBFcnJvcihcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiKTtyZXR1cm4gYX19O2V4cG9ydHMuQ29tcG9uZW50PUU7ZXhwb3J0cy5GcmFnbWVudD1wO1xuZXhwb3J0cy5Qcm9maWxlcj1yO2V4cG9ydHMuUHVyZUNvbXBvbmVudD1HO2V4cG9ydHMuU3RyaWN0TW9kZT1xO2V4cG9ydHMuU3VzcGVuc2U9dztleHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPVc7XG5leHBvcnRzLmNsb25lRWxlbWVudD1mdW5jdGlvbihhLGIsZSl7aWYobnVsbD09PWF8fHZvaWQgMD09PWEpdGhyb3cgRXJyb3IoXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIithK1wiLlwiKTt2YXIgZD1DKHt9LGEucHJvcHMpLGM9YS5rZXksaz1hLnJlZixoPWEuX293bmVyO2lmKG51bGwhPWIpe3ZvaWQgMCE9PWIucmVmJiYoaz1iLnJlZixoPUsuY3VycmVudCk7dm9pZCAwIT09Yi5rZXkmJihjPVwiXCIrYi5rZXkpO2lmKGEudHlwZSYmYS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgZz1hLnR5cGUuZGVmYXVsdFByb3BzO2ZvcihmIGluIGIpSi5jYWxsKGIsZikmJiFMLmhhc093blByb3BlcnR5KGYpJiYoZFtmXT12b2lkIDA9PT1iW2ZdJiZ2b2lkIDAhPT1nP2dbZl06YltmXSl9dmFyIGY9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1mKWQuY2hpbGRyZW49ZTtlbHNlIGlmKDE8Zil7Zz1BcnJheShmKTtcbmZvcih2YXIgbT0wO208ZjttKyspZ1ttXT1hcmd1bWVudHNbbSsyXTtkLmNoaWxkcmVuPWd9cmV0dXJueyQkdHlwZW9mOmwsdHlwZTphLnR5cGUsa2V5OmMscmVmOmsscHJvcHM6ZCxfb3duZXI6aH19O2V4cG9ydHMuY3JlYXRlQ29udGV4dD1mdW5jdGlvbihhKXthPXskJHR5cGVvZjp1LF9jdXJyZW50VmFsdWU6YSxfY3VycmVudFZhbHVlMjphLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbCxfZGVmYXVsdFZhbHVlOm51bGwsX2dsb2JhbE5hbWU6bnVsbH07YS5Qcm92aWRlcj17JCR0eXBlb2Y6dCxfY29udGV4dDphfTtyZXR1cm4gYS5Db25zdW1lcj1hfTtleHBvcnRzLmNyZWF0ZUVsZW1lbnQ9TTtleHBvcnRzLmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oYSl7dmFyIGI9TS5iaW5kKG51bGwsYSk7Yi50eXBlPWE7cmV0dXJuIGJ9O2V4cG9ydHMuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O1xuZXhwb3J0cy5mb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjp2LHJlbmRlcjphfX07ZXhwb3J0cy5pc1ZhbGlkRWxlbWVudD1PO2V4cG9ydHMubGF6eT1mdW5jdGlvbihhKXtyZXR1cm57JCR0eXBlb2Y6eSxfcGF5bG9hZDp7X3N0YXR1czotMSxfcmVzdWx0OmF9LF9pbml0OlR9fTtleHBvcnRzLm1lbW89ZnVuY3Rpb24oYSxiKXtyZXR1cm57JCR0eXBlb2Y6eCx0eXBlOmEsY29tcGFyZTp2b2lkIDA9PT1iP251bGw6Yn19O2V4cG9ydHMuc3RhcnRUcmFuc2l0aW9uPWZ1bmN0aW9uKGEpe3ZhciBiPVYudHJhbnNpdGlvbjtWLnRyYW5zaXRpb249e307dHJ5e2EoKX1maW5hbGx5e1YudHJhbnNpdGlvbj1ifX07ZXhwb3J0cy51bnN0YWJsZV9hY3Q9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihcImFjdCguLi4pIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMgb2YgUmVhY3QuXCIpO307XG5leHBvcnRzLnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFUuY3VycmVudC51c2VDYWxsYmFjayhhLGIpfTtleHBvcnRzLnVzZUNvbnRleHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIFUuY3VycmVudC51c2VDb250ZXh0KGEpfTtleHBvcnRzLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9O2V4cG9ydHMudXNlRGVmZXJyZWRWYWx1ZT1mdW5jdGlvbihhKXtyZXR1cm4gVS5jdXJyZW50LnVzZURlZmVycmVkVmFsdWUoYSl9O2V4cG9ydHMudXNlRWZmZWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIFUuY3VycmVudC51c2VFZmZlY3QoYSxiKX07ZXhwb3J0cy51c2VJZD1mdW5jdGlvbigpe3JldHVybiBVLmN1cnJlbnQudXNlSWQoKX07ZXhwb3J0cy51c2VJbXBlcmF0aXZlSGFuZGxlPWZ1bmN0aW9uKGEsYixlKXtyZXR1cm4gVS5jdXJyZW50LnVzZUltcGVyYXRpdmVIYW5kbGUoYSxiLGUpfTtcbmV4cG9ydHMudXNlSW5zZXJ0aW9uRWZmZWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIFUuY3VycmVudC51c2VJbnNlcnRpb25FZmZlY3QoYSxiKX07ZXhwb3J0cy51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVS5jdXJyZW50LnVzZUxheW91dEVmZmVjdChhLGIpfTtleHBvcnRzLnVzZU1lbW89ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVS5jdXJyZW50LnVzZU1lbW8oYSxiKX07ZXhwb3J0cy51c2VSZWR1Y2VyPWZ1bmN0aW9uKGEsYixlKXtyZXR1cm4gVS5jdXJyZW50LnVzZVJlZHVjZXIoYSxiLGUpfTtleHBvcnRzLnVzZVJlZj1mdW5jdGlvbihhKXtyZXR1cm4gVS5jdXJyZW50LnVzZVJlZihhKX07ZXhwb3J0cy51c2VTdGF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gVS5jdXJyZW50LnVzZVN0YXRlKGEpfTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPWZ1bmN0aW9uKGEsYixlKXtyZXR1cm4gVS5jdXJyZW50LnVzZVN5bmNFeHRlcm5hbFN0b3JlKGEsYixlKX07XG5leHBvcnRzLnVzZVRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gVS5jdXJyZW50LnVzZVRyYW5zaXRpb24oKX07ZXhwb3J0cy52ZXJzaW9uPVwiMTguMi4wXCI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0JztmdW5jdGlvbiBmKGEsYil7dmFyIGM9YS5sZW5ndGg7YS5wdXNoKGIpO2E6Zm9yKDswPGM7KXt2YXIgZD1jLTE+Pj4xLGU9YVtkXTtpZigwPGcoZSxiKSlhW2RdPWIsYVtjXT1lLGM9ZDtlbHNlIGJyZWFrIGF9fWZ1bmN0aW9uIGgoYSl7cmV0dXJuIDA9PT1hLmxlbmd0aD9udWxsOmFbMF19ZnVuY3Rpb24gayhhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIGI9YVswXSxjPWEucG9wKCk7aWYoYyE9PWIpe2FbMF09YzthOmZvcih2YXIgZD0wLGU9YS5sZW5ndGgsdz1lPj4+MTtkPHc7KXt2YXIgbT0yKihkKzEpLTEsQz1hW21dLG49bSsxLHg9YVtuXTtpZigwPmcoQyxjKSluPGUmJjA+Zyh4LEMpPyhhW2RdPXgsYVtuXT1jLGQ9bik6KGFbZF09QyxhW21dPWMsZD1tKTtlbHNlIGlmKG48ZSYmMD5nKHgsYykpYVtkXT14LGFbbl09YyxkPW47ZWxzZSBicmVhayBhfX1yZXR1cm4gYn1cbmZ1bmN0aW9uIGcoYSxiKXt2YXIgYz1hLnNvcnRJbmRleC1iLnNvcnRJbmRleDtyZXR1cm4gMCE9PWM/YzphLmlkLWIuaWR9aWYoXCJvYmplY3RcIj09PXR5cGVvZiBwZXJmb3JtYW5jZSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIHBlcmZvcm1hbmNlLm5vdyl7dmFyIGw9cGVyZm9ybWFuY2U7ZXhwb3J0cy51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gbC5ub3coKX19ZWxzZXt2YXIgcD1EYXRlLHE9cC5ub3coKTtleHBvcnRzLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBwLm5vdygpLXF9fXZhciByPVtdLHQ9W10sdT0xLHY9bnVsbCx5PTMsej0hMSxBPSExLEI9ITEsRD1cImZ1bmN0aW9uXCI9PT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Om51bGwsRT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpudWxsLEY9XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBzZXRJbW1lZGlhdGU/c2V0SW1tZWRpYXRlOm51bGw7XG5cInVuZGVmaW5lZFwiIT09dHlwZW9mIG5hdmlnYXRvciYmdm9pZCAwIT09bmF2aWdhdG9yLnNjaGVkdWxpbmcmJnZvaWQgMCE9PW5hdmlnYXRvci5zY2hlZHVsaW5nLmlzSW5wdXRQZW5kaW5nJiZuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZy5iaW5kKG5hdmlnYXRvci5zY2hlZHVsaW5nKTtmdW5jdGlvbiBHKGEpe2Zvcih2YXIgYj1oKHQpO251bGwhPT1iOyl7aWYobnVsbD09PWIuY2FsbGJhY2spayh0KTtlbHNlIGlmKGIuc3RhcnRUaW1lPD1hKWsodCksYi5zb3J0SW5kZXg9Yi5leHBpcmF0aW9uVGltZSxmKHIsYik7ZWxzZSBicmVhaztiPWgodCl9fWZ1bmN0aW9uIEgoYSl7Qj0hMTtHKGEpO2lmKCFBKWlmKG51bGwhPT1oKHIpKUE9ITAsSShKKTtlbHNle3ZhciBiPWgodCk7bnVsbCE9PWImJksoSCxiLnN0YXJ0VGltZS1hKX19XG5mdW5jdGlvbiBKKGEsYil7QT0hMTtCJiYoQj0hMSxFKEwpLEw9LTEpO3o9ITA7dmFyIGM9eTt0cnl7RyhiKTtmb3Iodj1oKHIpO251bGwhPT12JiYoISh2LmV4cGlyYXRpb25UaW1lPmIpfHxhJiYhTSgpKTspe3ZhciBkPXYuY2FsbGJhY2s7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGQpe3YuY2FsbGJhY2s9bnVsbDt5PXYucHJpb3JpdHlMZXZlbDt2YXIgZT1kKHYuZXhwaXJhdGlvblRpbWU8PWIpO2I9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZT92LmNhbGxiYWNrPWU6dj09PWgocikmJmsocik7RyhiKX1lbHNlIGsocik7dj1oKHIpfWlmKG51bGwhPT12KXZhciB3PSEwO2Vsc2V7dmFyIG09aCh0KTtudWxsIT09bSYmSyhILG0uc3RhcnRUaW1lLWIpO3c9ITF9cmV0dXJuIHd9ZmluYWxseXt2PW51bGwseT1jLHo9ITF9fXZhciBOPSExLE89bnVsbCxMPS0xLFA9NSxRPS0xO1xuZnVuY3Rpb24gTSgpe3JldHVybiBleHBvcnRzLnVuc3RhYmxlX25vdygpLVE8UD8hMTohMH1mdW5jdGlvbiBSKCl7aWYobnVsbCE9PU8pe3ZhciBhPWV4cG9ydHMudW5zdGFibGVfbm93KCk7UT1hO3ZhciBiPSEwO3RyeXtiPU8oITAsYSl9ZmluYWxseXtiP1MoKTooTj0hMSxPPW51bGwpfX1lbHNlIE49ITF9dmFyIFM7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIEYpUz1mdW5jdGlvbigpe0YoUil9O2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCl7dmFyIFQ9bmV3IE1lc3NhZ2VDaGFubmVsLFU9VC5wb3J0MjtULnBvcnQxLm9ubWVzc2FnZT1SO1M9ZnVuY3Rpb24oKXtVLnBvc3RNZXNzYWdlKG51bGwpfX1lbHNlIFM9ZnVuY3Rpb24oKXtEKFIsMCl9O2Z1bmN0aW9uIEkoYSl7Tz1hO058fChOPSEwLFMoKSl9ZnVuY3Rpb24gSyhhLGIpe0w9RChmdW5jdGlvbigpe2EoZXhwb3J0cy51bnN0YWJsZV9ub3coKSl9LGIpfVxuZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHk9NTtleHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTE7ZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eT00O2V4cG9ydHMudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9MztleHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsO2V4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9MjtleHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKGEpe2EuY2FsbGJhY2s9bnVsbH07ZXhwb3J0cy51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe0F8fHp8fChBPSEwLEkoSikpfTtcbmV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oYSl7MD5hfHwxMjU8YT9jb25zb2xlLmVycm9yKFwiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkXCIpOlA9MDxhP01hdGguZmxvb3IoMUUzL2EpOjV9O2V4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4geX07ZXhwb3J0cy51bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZT1mdW5jdGlvbigpe3JldHVybiBoKHIpfTtleHBvcnRzLnVuc3RhYmxlX25leHQ9ZnVuY3Rpb24oYSl7c3dpdGNoKHkpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciBiPTM7YnJlYWs7ZGVmYXVsdDpiPXl9dmFyIGM9eTt5PWI7dHJ5e3JldHVybiBhKCl9ZmluYWxseXt5PWN9fTtleHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7fTtcbmV4cG9ydHMudW5zdGFibGVfcmVxdWVzdFBhaW50PWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1mdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6YT0zfXZhciBjPXk7eT1hO3RyeXtyZXR1cm4gYigpfWZpbmFsbHl7eT1jfX07XG5leHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWV4cG9ydHMudW5zdGFibGVfbm93KCk7XCJvYmplY3RcIj09PXR5cGVvZiBjJiZudWxsIT09Yz8oYz1jLmRlbGF5LGM9XCJudW1iZXJcIj09PXR5cGVvZiBjJiYwPGM/ZCtjOmQpOmM9ZDtzd2l0Y2goYSl7Y2FzZSAxOnZhciBlPS0xO2JyZWFrO2Nhc2UgMjplPTI1MDticmVhaztjYXNlIDU6ZT0xMDczNzQxODIzO2JyZWFrO2Nhc2UgNDplPTFFNDticmVhaztkZWZhdWx0OmU9NUUzfWU9YytlO2E9e2lkOnUrKyxjYWxsYmFjazpiLHByaW9yaXR5TGV2ZWw6YSxzdGFydFRpbWU6YyxleHBpcmF0aW9uVGltZTplLHNvcnRJbmRleDotMX07Yz5kPyhhLnNvcnRJbmRleD1jLGYodCxhKSxudWxsPT09aChyKSYmYT09PWgodCkmJihCPyhFKEwpLEw9LTEpOkI9ITAsSyhILGMtZCkpKTooYS5zb3J0SW5kZXg9ZSxmKHIsYSksQXx8enx8KEE9ITAsSShKKSkpO3JldHVybiBhfTtcbmV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQ9TTtleHBvcnRzLnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihhKXt2YXIgYj15O3JldHVybiBmdW5jdGlvbigpe3ZhciBjPXk7eT1iO3RyeXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXt5PWN9fX07XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGU9cmVxdWlyZShcInJlYWN0XCIpO2Z1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYT09PWImJigwIT09YXx8MS9hPT09MS9iKXx8YSE9PWEmJmIhPT1ifXZhciBrPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmgsbD1lLnVzZVN0YXRlLG09ZS51c2VFZmZlY3Qsbj1lLnVzZUxheW91dEVmZmVjdCxwPWUudXNlRGVidWdWYWx1ZTtmdW5jdGlvbiBxKGEsYil7dmFyIGQ9YigpLGY9bCh7aW5zdDp7dmFsdWU6ZCxnZXRTbmFwc2hvdDpifX0pLGM9ZlswXS5pbnN0LGc9ZlsxXTtuKGZ1bmN0aW9uKCl7Yy52YWx1ZT1kO2MuZ2V0U25hcHNob3Q9YjtyKGMpJiZnKHtpbnN0OmN9KX0sW2EsZCxiXSk7bShmdW5jdGlvbigpe3IoYykmJmcoe2luc3Q6Y30pO3JldHVybiBhKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSl9KX0sW2FdKTtwKGQpO3JldHVybiBkfVxuZnVuY3Rpb24gcihhKXt2YXIgYj1hLmdldFNuYXBzaG90O2E9YS52YWx1ZTt0cnl7dmFyIGQ9YigpO3JldHVybiFrKGEsZCl9Y2F0Y2goZil7cmV0dXJuITB9fWZ1bmN0aW9uIHQoYSxiKXtyZXR1cm4gYigpfXZhciB1PVwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudHx8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudD90OnE7ZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZT12b2lkIDAhPT1lLnVzZVN5bmNFeHRlcm5hbFN0b3JlP2UudXNlU3luY0V4dGVybmFsU3RvcmU6dTtcbiIsIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGg9cmVxdWlyZShcInJlYWN0XCIpLG49cmVxdWlyZShcInVzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW1cIik7ZnVuY3Rpb24gcChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIHE9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6cCxyPW4udXNlU3luY0V4dGVybmFsU3RvcmUsdD1oLnVzZVJlZix1PWgudXNlRWZmZWN0LHY9aC51c2VNZW1vLHc9aC51c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3Rvcj1mdW5jdGlvbihhLGIsZSxsLGcpe3ZhciBjPXQobnVsbCk7aWYobnVsbD09PWMuY3VycmVudCl7dmFyIGY9e2hhc1ZhbHVlOiExLHZhbHVlOm51bGx9O2MuY3VycmVudD1mfWVsc2UgZj1jLmN1cnJlbnQ7Yz12KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtpZighYyl7Yz0hMDtkPWE7YT1sKGEpO2lmKHZvaWQgMCE9PWcmJmYuaGFzVmFsdWUpe3ZhciBiPWYudmFsdWU7aWYoZyhiLGEpKXJldHVybiBrPWJ9cmV0dXJuIGs9YX1iPWs7aWYocShkLGEpKXJldHVybiBiO3ZhciBlPWwoYSk7aWYodm9pZCAwIT09ZyYmZyhiLGUpKXJldHVybiBiO2Q9YTtyZXR1cm4gaz1lfXZhciBjPSExLGQsayxtPXZvaWQgMD09PWU/bnVsbDplO3JldHVybltmdW5jdGlvbigpe3JldHVybiBhKGIoKSl9LG51bGw9PT1tP3ZvaWQgMDpmdW5jdGlvbigpe3JldHVybiBhKG0oKSl9XX0sW2IsZSxsLGddKTt2YXIgZD1yKGEsY1swXSxjWzFdKTtcbnUoZnVuY3Rpb24oKXtmLmhhc1ZhbHVlPSEwO2YudmFsdWU9ZH0sW2RdKTt3KGQpO3JldHVybiBkfTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBcImRlZmF1bHRcIjogb2JqXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBobGpzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgneG1sJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMveG1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdiYXNoJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYmFzaCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NwcCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NwcCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY3NoYXJwJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY3NoYXJwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjc3MnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jc3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21hcmtkb3duJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWFya2Rvd24nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2RpZmYnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kaWZmJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdydWJ5JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcnVieScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZ28nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9nbycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZ3JhcGhxbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2dyYXBocWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2luaScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2luaScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnamF2YScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2phdmEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2phdmFzY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9qYXZhc2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdqc29uJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvanNvbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgna290bGluJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMva290bGluJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsZXNzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbGVzcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbHVhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbHVhJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtYWtlZmlsZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21ha2VmaWxlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwZXJsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcGVybCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnb2JqZWN0aXZlYycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL29iamVjdGl2ZWMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3BocCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3BocCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncGhwLXRlbXBsYXRlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcGhwLXRlbXBsYXRlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwbGFpbnRleHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wbGFpbnRleHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3B5dGhvbicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3B5dGhvbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHl0aG9uLXJlcGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9weXRob24tcmVwbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3InKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3J1c3QnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ydXN0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzY3NzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc2NzcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc2hlbGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zaGVsbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3FsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3FsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzd2lmdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3N3aWZ0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd5YW1sJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMveWFtbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndHlwZXNjcmlwdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3R5cGVzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3ZibmV0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdmJuZXQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3dhc20nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy93YXNtJykpO1xuXG5obGpzLkhpZ2hsaWdodEpTID0gaGxqc1xuaGxqcy5kZWZhdWx0ID0gaGxqc1xubW9kdWxlLmV4cG9ydHMgPSBobGpzOyIsInZhciBkZWVwRnJlZXplRXM2ID0ge2V4cG9ydHM6IHt9fTtcblxuZnVuY3Rpb24gZGVlcEZyZWV6ZShvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIG9iai5jbGVhciA9IG9iai5kZWxldGUgPSBvYmouc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXAgaXMgcmVhZC1vbmx5Jyk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgb2JqLmFkZCA9IG9iai5jbGVhciA9IG9iai5kZWxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldCBpcyByZWFkLW9ubHknKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBGcmVlemUgc2VsZlxuICAgIE9iamVjdC5mcmVlemUob2JqKTtcblxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgcHJvcCA9IG9ialtuYW1lXTtcblxuICAgICAgICAvLyBGcmVlemUgcHJvcCBpZiBpdCBpcyBhbiBvYmplY3RcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09ICdvYmplY3QnICYmICFPYmplY3QuaXNGcm96ZW4ocHJvcCkpIHtcbiAgICAgICAgICAgIGRlZXBGcmVlemUocHJvcCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG59XG5cbmRlZXBGcmVlemVFczYuZXhwb3J0cyA9IGRlZXBGcmVlemU7XG5kZWVwRnJlZXplRXM2LmV4cG9ydHMuZGVmYXVsdCA9IGRlZXBGcmVlemU7XG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5DYWxsYmFja1Jlc3BvbnNlfSBDYWxsYmFja1Jlc3BvbnNlICovXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuQ29tcGlsZWRNb2RlfSBDb21waWxlZE1vZGUgKi9cbi8qKiBAaW1wbGVtZW50cyBDYWxsYmFja1Jlc3BvbnNlICovXG5cbmNsYXNzIFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29tcGlsZWRNb2RlfSBtb2RlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihtb2RlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmaW5lZFxuICAgIGlmIChtb2RlLmRhdGEgPT09IHVuZGVmaW5lZCkgbW9kZS5kYXRhID0ge307XG5cbiAgICB0aGlzLmRhdGEgPSBtb2RlLmRhdGE7XG4gICAgdGhpcy5pc01hdGNoSWdub3JlZCA9IGZhbHNlO1xuICB9XG5cbiAgaWdub3JlTWF0Y2goKSB7XG4gICAgdGhpcy5pc01hdGNoSWdub3JlZCA9IHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUhUTUwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZSgvJy9nLCAnJiN4Mjc7Jyk7XG59XG5cbi8qKlxuICogcGVyZm9ybXMgYSBzaGFsbG93IG1lcmdlIG9mIG11bHRpcGxlIG9iamVjdHMgaW50byBvbmVcbiAqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtUfSBvcmlnaW5hbFxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLGFueT5bXX0gb2JqZWN0c1xuICogQHJldHVybnMge1R9IGEgc2luZ2xlIG5ldyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaW5oZXJpdCQxKG9yaWdpbmFsLCAuLi5vYmplY3RzKSB7XG4gIC8qKiBAdHlwZSBSZWNvcmQ8c3RyaW5nLGFueT4gKi9cbiAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBvcmlnaW5hbCkge1xuICAgIHJlc3VsdFtrZXldID0gb3JpZ2luYWxba2V5XTtcbiAgfVxuICBvYmplY3RzLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG9ialtrZXldO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiAvKiogQHR5cGUge1R9ICovIChyZXN1bHQpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJlbmRlcmVyXG4gKiBAcHJvcGVydHkgeyh0ZXh0OiBzdHJpbmcpID0+IHZvaWR9IGFkZFRleHRcbiAqIEBwcm9wZXJ0eSB7KG5vZGU6IE5vZGUpID0+IHZvaWR9IG9wZW5Ob2RlXG4gKiBAcHJvcGVydHkgeyhub2RlOiBOb2RlKSA9PiB2b2lkfSBjbG9zZU5vZGVcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gc3RyaW5nfSB2YWx1ZVxuICovXG5cbi8qKiBAdHlwZWRlZiB7e3Njb3BlPzogc3RyaW5nLCBsYW5ndWFnZT86IHN0cmluZywgc3VibGFuZ3VhZ2U/OiBib29sZWFufX0gTm9kZSAqL1xuLyoqIEB0eXBlZGVmIHt7d2FsazogKHI6IFJlbmRlcmVyKSA9PiB2b2lkfX0gVHJlZSAqL1xuLyoqICovXG5cbmNvbnN0IFNQQU5fQ0xPU0UgPSAnPC9zcGFuPic7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIG5vZGUgbmVlZHMgdG8gYmUgd3JhcHBlZCBpbiA8c3Bhbj5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgKi9cbmNvbnN0IGVtaXRzV3JhcHBpbmdUYWdzID0gKG5vZGUpID0+IHtcbiAgLy8gcmFyZWx5IHdlIGNhbiBoYXZlIGEgc3VibGFuZ3VhZ2Ugd2hlcmUgbGFuZ3VhZ2UgaXMgdW5kZWZpbmVkXG4gIC8vIFRPRE86IHRyYWNrIGRvd24gd2h5XG4gIHJldHVybiAhIW5vZGUuc2NvcGUgfHwgKG5vZGUuc3VibGFuZ3VhZ2UgJiYgbm9kZS5sYW5ndWFnZSk7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7cHJlZml4OnN0cmluZ319IG9wdGlvbnNcbiAqL1xuY29uc3Qgc2NvcGVUb0NTU0NsYXNzID0gKG5hbWUsIHsgcHJlZml4IH0pID0+IHtcbiAgaWYgKG5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgY29uc3QgcGllY2VzID0gbmFtZS5zcGxpdChcIi5cIik7XG4gICAgcmV0dXJuIFtcbiAgICAgIGAke3ByZWZpeH0ke3BpZWNlcy5zaGlmdCgpfWAsXG4gICAgICAuLi4ocGllY2VzLm1hcCgoeCwgaSkgPT4gYCR7eH0ke1wiX1wiLnJlcGVhdChpICsgMSl9YCkpXG4gICAgXS5qb2luKFwiIFwiKTtcbiAgfVxuICByZXR1cm4gYCR7cHJlZml4fSR7bmFtZX1gO1xufTtcblxuLyoqIEB0eXBlIHtSZW5kZXJlcn0gKi9cbmNsYXNzIEhUTUxSZW5kZXJlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEhUTUxSZW5kZXJlclxuICAgKlxuICAgKiBAcGFyYW0ge1RyZWV9IHBhcnNlVHJlZSAtIHRoZSBwYXJzZSB0cmVlIChtdXN0IHN1cHBvcnQgYHdhbGtgIEFQSSlcbiAgICogQHBhcmFtIHt7Y2xhc3NQcmVmaXg6IHN0cmluZ319IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcnNlVHJlZSwgb3B0aW9ucykge1xuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcbiAgICB0aGlzLmNsYXNzUHJlZml4ID0gb3B0aW9ucy5jbGFzc1ByZWZpeDtcbiAgICBwYXJzZVRyZWUud2Fsayh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRleHRzIHRvIHRoZSBvdXRwdXQgc3RyZWFtXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICovXG4gIGFkZFRleHQodGV4dCkge1xuICAgIHRoaXMuYnVmZmVyICs9IGVzY2FwZUhUTUwodGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5vZGUgb3BlbiB0byB0aGUgb3V0cHV0IHN0cmVhbSAoaWYgbmVlZGVkKVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgKi9cbiAgb3Blbk5vZGUobm9kZSkge1xuICAgIGlmICghZW1pdHNXcmFwcGluZ1RhZ3Mobm9kZSkpIHJldHVybjtcblxuICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuICAgIGlmIChub2RlLnN1Ymxhbmd1YWdlKSB7XG4gICAgICBjbGFzc05hbWUgPSBgbGFuZ3VhZ2UtJHtub2RlLmxhbmd1YWdlfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsYXNzTmFtZSA9IHNjb3BlVG9DU1NDbGFzcyhub2RlLnNjb3BlLCB7IHByZWZpeDogdGhpcy5jbGFzc1ByZWZpeCB9KTtcbiAgICB9XG4gICAgdGhpcy5zcGFuKGNsYXNzTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5vZGUgY2xvc2UgdG8gdGhlIG91dHB1dCBzdHJlYW0gKGlmIG5lZWRlZClcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlICovXG4gIGNsb3NlTm9kZShub2RlKSB7XG4gICAgaWYgKCFlbWl0c1dyYXBwaW5nVGFncyhub2RlKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5idWZmZXIgKz0gU1BBTl9DTE9TRTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCBidWZmZXJcbiAgKi9cbiAgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyO1xuICB9XG5cbiAgLy8gaGVscGVyc1xuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBzcGFuIGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSAqL1xuICBzcGFuKGNsYXNzTmFtZSkge1xuICAgIHRoaXMuYnVmZmVyICs9IGA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPmA7XG4gIH1cbn1cblxuLyoqIEB0eXBlZGVmIHt7c2NvcGU/OiBzdHJpbmcsIGxhbmd1YWdlPzogc3RyaW5nLCBzdWJsYW5ndWFnZT86IGJvb2xlYW4sIGNoaWxkcmVuOiBOb2RlW119IHwgc3RyaW5nfSBOb2RlICovXG4vKiogQHR5cGVkZWYge3tzY29wZT86IHN0cmluZywgbGFuZ3VhZ2U/OiBzdHJpbmcsIHN1Ymxhbmd1YWdlPzogYm9vbGVhbiwgY2hpbGRyZW46IE5vZGVbXX0gfSBEYXRhTm9kZSAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkVtaXR0ZXJ9IEVtaXR0ZXIgKi9cbi8qKiAgKi9cblxuLyoqIEByZXR1cm5zIHtEYXRhTm9kZX0gKi9cbmNvbnN0IG5ld05vZGUgPSAob3B0cyA9IHt9KSA9PiB7XG4gIC8qKiBAdHlwZSBEYXRhTm9kZSAqL1xuICBjb25zdCByZXN1bHQgPSB7IGNoaWxkcmVuOiBbXSB9O1xuICBPYmplY3QuYXNzaWduKHJlc3VsdCwgb3B0cyk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jbGFzcyBUb2tlblRyZWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKiogQHR5cGUgRGF0YU5vZGUgKi9cbiAgICB0aGlzLnJvb3ROb2RlID0gbmV3Tm9kZSgpO1xuICAgIHRoaXMuc3RhY2sgPSBbdGhpcy5yb290Tm9kZV07XG4gIH1cblxuICBnZXQgdG9wKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gIH1cblxuICBnZXQgcm9vdCgpIHsgcmV0dXJuIHRoaXMucm9vdE5vZGU7IH1cblxuICAvKiogQHBhcmFtIHtOb2RlfSBub2RlICovXG4gIGFkZChub2RlKSB7XG4gICAgdGhpcy50b3AuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKi9cbiAgb3Blbk5vZGUoc2NvcGUpIHtcbiAgICAvKiogQHR5cGUgTm9kZSAqL1xuICAgIGNvbnN0IG5vZGUgPSBuZXdOb2RlKHsgc2NvcGUgfSk7XG4gICAgdGhpcy5hZGQobm9kZSk7XG4gICAgdGhpcy5zdGFjay5wdXNoKG5vZGUpO1xuICB9XG5cbiAgY2xvc2VOb2RlKCkge1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YWNrLnBvcCgpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNsb3NlQWxsTm9kZXMoKSB7XG4gICAgd2hpbGUgKHRoaXMuY2xvc2VOb2RlKCkpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnJvb3ROb2RlLCBudWxsLCA0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vaHRtbF9yZW5kZXJlclwiKS5SZW5kZXJlciB9IFJlbmRlcmVyXG4gICAqIEBwYXJhbSB7UmVuZGVyZXJ9IGJ1aWxkZXJcbiAgICovXG4gIHdhbGsoYnVpbGRlcikge1xuICAgIC8vIHRoaXMgZG9lcyBub3RcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5fd2FsayhidWlsZGVyLCB0aGlzLnJvb3ROb2RlKTtcbiAgICAvLyB0aGlzIHdvcmtzXG4gICAgLy8gcmV0dXJuIFRva2VuVHJlZS5fd2FsayhidWlsZGVyLCB0aGlzLnJvb3ROb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlbmRlcmVyfSBidWlsZGVyXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKi9cbiAgc3RhdGljIF93YWxrKGJ1aWxkZXIsIG5vZGUpIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGJ1aWxkZXIuYWRkVGV4dChub2RlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGJ1aWxkZXIub3Blbk5vZGUobm9kZSk7XG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB0aGlzLl93YWxrKGJ1aWxkZXIsIGNoaWxkKSk7XG4gICAgICBidWlsZGVyLmNsb3NlTm9kZShub2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqL1xuICBzdGF0aWMgX2NvbGxhcHNlKG5vZGUpIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgPT09IFwic3RyaW5nXCIpIHJldHVybjtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4pIHJldHVybjtcblxuICAgIGlmIChub2RlLmNoaWxkcmVuLmV2ZXJ5KGVsID0+IHR5cGVvZiBlbCA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICAgIC8vIG5vZGUudGV4dCA9IG5vZGUuY2hpbGRyZW4uam9pbihcIlwiKTtcbiAgICAgIC8vIGRlbGV0ZSBub2RlLmNoaWxkcmVuO1xuICAgICAgbm9kZS5jaGlsZHJlbiA9IFtub2RlLmNoaWxkcmVuLmpvaW4oXCJcIildO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgIFRva2VuVHJlZS5fY29sbGFwc2UoY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICBDdXJyZW50bHkgdGhpcyBpcyBhbGwgcHJpdmF0ZSBBUEksIGJ1dCB0aGlzIGlzIHRoZSBtaW5pbWFsIEFQSSBuZWNlc3NhcnlcbiAgdGhhdCBhbiBFbWl0dGVyIG11c3QgaW1wbGVtZW50IHRvIGZ1bGx5IHN1cHBvcnQgdGhlIHBhcnNlci5cblxuICBNaW5pbWFsIGludGVyZmFjZTpcblxuICAtIGFkZEtleXdvcmQodGV4dCwgc2NvcGUpXG4gIC0gYWRkVGV4dCh0ZXh0KVxuICAtIGFkZFN1Ymxhbmd1YWdlKGVtaXR0ZXIsIHN1Ykxhbmd1YWdlTmFtZSlcbiAgLSBmaW5hbGl6ZSgpXG4gIC0gb3Blbk5vZGUoc2NvcGUpXG4gIC0gY2xvc2VOb2RlKClcbiAgLSBjbG9zZUFsbE5vZGVzKClcbiAgLSB0b0hUTUwoKVxuXG4qL1xuXG4vKipcbiAqIEBpbXBsZW1lbnRzIHtFbWl0dGVyfVxuICovXG5jbGFzcyBUb2tlblRyZWVFbWl0dGVyIGV4dGVuZHMgVG9rZW5UcmVlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGVcbiAgICovXG4gIGFkZEtleXdvcmQodGV4dCwgc2NvcGUpIHtcbiAgICBpZiAodGV4dCA9PT0gXCJcIikgeyByZXR1cm47IH1cblxuICAgIHRoaXMub3Blbk5vZGUoc2NvcGUpO1xuICAgIHRoaXMuYWRkVGV4dCh0ZXh0KTtcbiAgICB0aGlzLmNsb3NlTm9kZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqL1xuICBhZGRUZXh0KHRleHQpIHtcbiAgICBpZiAodGV4dCA9PT0gXCJcIikgeyByZXR1cm47IH1cblxuICAgIHRoaXMuYWRkKHRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RW1pdHRlciAmIHtyb290OiBEYXRhTm9kZX19IGVtaXR0ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIGFkZFN1Ymxhbmd1YWdlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgICAvKiogQHR5cGUgRGF0YU5vZGUgKi9cbiAgICBjb25zdCBub2RlID0gZW1pdHRlci5yb290O1xuICAgIG5vZGUuc3VibGFuZ3VhZ2UgPSB0cnVlO1xuICAgIG5vZGUubGFuZ3VhZ2UgPSBuYW1lO1xuICAgIHRoaXMuYWRkKG5vZGUpO1xuICB9XG5cbiAgdG9IVE1MKCkge1xuICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IEhUTUxSZW5kZXJlcih0aGlzLCB0aGlzLm9wdGlvbnMpO1xuICAgIHJldHVybiByZW5kZXJlci52YWx1ZSgpO1xuICB9XG5cbiAgZmluYWxpemUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNvdXJjZShyZSkge1xuICBpZiAoIXJlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiByZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlO1xuXG4gIHJldHVybiByZS5zb3VyY2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbG9va2FoZWFkKHJlKSB7XG4gIHJldHVybiBjb25jYXQoJyg/PScsIHJlLCAnKScpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGFueU51bWJlck9mVGltZXMocmUpIHtcbiAgcmV0dXJuIGNvbmNhdCgnKD86JywgcmUsICcpKicpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nIH0gcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIG9wdGlvbmFsKHJlKSB7XG4gIHJldHVybiBjb25jYXQoJyg/OicsIHJlLCAnKT8nKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLihSZWdFeHAgfCBzdHJpbmcpIH0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uY2F0KC4uLmFyZ3MpIHtcbiAgY29uc3Qgam9pbmVkID0gYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyBBcnJheTxzdHJpbmcgfCBSZWdFeHAgfCBPYmplY3Q+IH0gYXJnc1xuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gc3RyaXBPcHRpb25zRnJvbUFyZ3MoYXJncykge1xuICBjb25zdCBvcHRzID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgb3B0cy5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gICAgYXJncy5zcGxpY2UoYXJncy5sZW5ndGggLSAxLCAxKTtcbiAgICByZXR1cm4gb3B0cztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuLyoqIEB0eXBlZGVmIHsge2NhcHR1cmU/OiBib29sZWFufSB9IFJlZ2V4RWl0aGVyT3B0aW9ucyAqL1xuXG4vKipcbiAqIEFueSBvZiB0aGUgcGFzc2VkIGV4cHJlc3NzaW9ucyBtYXkgbWF0Y2hcbiAqXG4gKiBDcmVhdGVzIGEgaHVnZSB0aGlzIHwgdGhpcyB8IHRoYXQgfCB0aGF0IG1hdGNoXG4gKiBAcGFyYW0geyhSZWdFeHAgfCBzdHJpbmcpW10gfCBbLi4uKFJlZ0V4cCB8IHN0cmluZylbXSwgUmVnZXhFaXRoZXJPcHRpb25zXX0gYXJnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZWl0aGVyKC4uLmFyZ3MpIHtcbiAgLyoqIEB0eXBlIHsgb2JqZWN0ICYge2NhcHR1cmU/OiBib29sZWFufSB9ICAqL1xuICBjb25zdCBvcHRzID0gc3RyaXBPcHRpb25zRnJvbUFyZ3MoYXJncyk7XG4gIGNvbnN0IGpvaW5lZCA9ICcoJ1xuICAgICsgKG9wdHMuY2FwdHVyZSA/IFwiXCIgOiBcIj86XCIpXG4gICAgKyBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwifFwiKSArIFwiKVwiO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nfSByZVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gY291bnRNYXRjaEdyb3VwcyhyZSkge1xuICByZXR1cm4gKG5ldyBSZWdFeHAocmUudG9TdHJpbmcoKSArICd8JykpLmV4ZWMoJycpLmxlbmd0aCAtIDE7XG59XG5cbi8qKlxuICogRG9lcyBsZXhlbWUgc3RhcnQgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBsZXhlbWVcbiAqL1xuZnVuY3Rpb24gc3RhcnRzV2l0aChyZSwgbGV4ZW1lKSB7XG4gIGNvbnN0IG1hdGNoID0gcmUgJiYgcmUuZXhlYyhsZXhlbWUpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2guaW5kZXggPT09IDA7XG59XG5cbi8vIEJBQ0tSRUZfUkUgbWF0Y2hlcyBhbiBvcGVuIHBhcmVudGhlc2lzIG9yIGJhY2tyZWZlcmVuY2UuIFRvIGF2b2lkXG4vLyBhbiBpbmNvcnJlY3QgcGFyc2UsIGl0IGFkZGl0aW9uYWxseSBtYXRjaGVzIHRoZSBmb2xsb3dpbmc6XG4vLyAtIFsuLi5dIGVsZW1lbnRzLCB3aGVyZSB0aGUgbWVhbmluZyBvZiBwYXJlbnRoZXNlcyBhbmQgZXNjYXBlcyBjaGFuZ2Vcbi8vIC0gb3RoZXIgZXNjYXBlIHNlcXVlbmNlcywgc28gd2UgZG8gbm90IG1pc3BhcnNlIGVzY2FwZSBzZXF1ZW5jZXMgYXNcbi8vICAgaW50ZXJlc3RpbmcgZWxlbWVudHNcbi8vIC0gbm9uLW1hdGNoaW5nIG9yIGxvb2thaGVhZCBwYXJlbnRoZXNlcywgd2hpY2ggZG8gbm90IGNhcHR1cmUuIFRoZXNlXG4vLyAgIGZvbGxvdyB0aGUgJygnIHdpdGggYSAnPycuXG5jb25zdCBCQUNLUkVGX1JFID0gL1xcWyg/OlteXFxcXFxcXV18XFxcXC4pKlxcXXxcXChcXD8/fFxcXFwoWzEtOV1bMC05XSopfFxcXFwuLztcblxuLy8gKipJTlRFUk5BTCoqIE5vdCBpbnRlbmRlZCBmb3Igb3V0c2lkZSB1c2FnZVxuLy8gam9pbiBsb2dpY2FsbHkgY29tcHV0ZXMgcmVnZXhwcy5qb2luKHNlcGFyYXRvciksIGJ1dCBmaXhlcyB0aGVcbi8vIGJhY2tyZWZlcmVuY2VzIHNvIHRoZXkgY29udGludWUgdG8gbWF0Y2guXG4vLyBpdCBhbHNvIHBsYWNlcyBlYWNoIGluZGl2aWR1YWwgcmVndWxhciBleHByZXNzaW9uIGludG8gaXQncyBvd25cbi8vIG1hdGNoIGdyb3VwLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBzZXF1ZW5jaW5nIG9mIHRob3NlIG1hdGNoIGdyb3Vwc1xuLy8gaXMgY3VycmVudGx5IGFuIGV4ZXJjaXNlIGZvciB0aGUgY2FsbGVyLiA6LSlcbi8qKlxuICogQHBhcmFtIHsoc3RyaW5nIHwgUmVnRXhwKVtdfSByZWdleHBzXG4gKiBAcGFyYW0ge3tqb2luV2l0aDogc3RyaW5nfX0gb3B0c1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gX3Jld3JpdGVCYWNrcmVmZXJlbmNlcyhyZWdleHBzLCB7IGpvaW5XaXRoIH0pIHtcbiAgbGV0IG51bUNhcHR1cmVzID0gMDtcblxuICByZXR1cm4gcmVnZXhwcy5tYXAoKHJlZ2V4KSA9PiB7XG4gICAgbnVtQ2FwdHVyZXMgKz0gMTtcbiAgICBjb25zdCBvZmZzZXQgPSBudW1DYXB0dXJlcztcbiAgICBsZXQgcmUgPSBzb3VyY2UocmVnZXgpO1xuICAgIGxldCBvdXQgPSAnJztcblxuICAgIHdoaWxlIChyZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IEJBQ0tSRUZfUkUuZXhlYyhyZSk7XG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIG91dCArPSByZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBvdXQgKz0gcmUuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4KTtcbiAgICAgIHJlID0gcmUuc3Vic3RyaW5nKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgIGlmIChtYXRjaFswXVswXSA9PT0gJ1xcXFwnICYmIG1hdGNoWzFdKSB7XG4gICAgICAgIC8vIEFkanVzdCB0aGUgYmFja3JlZmVyZW5jZS5cbiAgICAgICAgb3V0ICs9ICdcXFxcJyArIFN0cmluZyhOdW1iZXIobWF0Y2hbMV0pICsgb2Zmc2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSBtYXRjaFswXTtcbiAgICAgICAgaWYgKG1hdGNoWzBdID09PSAnKCcpIHtcbiAgICAgICAgICBudW1DYXB0dXJlcysrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH0pLm1hcChyZSA9PiBgKCR7cmV9KWApLmpvaW4oam9pbldpdGgpO1xufVxuXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuTW9kZX0gTW9kZSAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLk1vZGVDYWxsYmFja30gTW9kZUNhbGxiYWNrICovXG5cbi8vIENvbW1vbiByZWdleHBzXG5jb25zdCBNQVRDSF9OT1RISU5HX1JFID0gL1xcYlxcQi87XG5jb25zdCBJREVOVF9SRSA9ICdbYS16QS1aXVxcXFx3Kic7XG5jb25zdCBVTkRFUlNDT1JFX0lERU5UX1JFID0gJ1thLXpBLVpfXVxcXFx3Kic7XG5jb25zdCBOVU1CRVJfUkUgPSAnXFxcXGJcXFxcZCsoXFxcXC5cXFxcZCspPyc7XG5jb25zdCBDX05VTUJFUl9SRSA9ICcoLT8pKFxcXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcXFxiXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspKFtlRV1bLStdP1xcXFxkKyk/KSc7IC8vIDB4Li4uLCAwLi4uLCBkZWNpbWFsLCBmbG9hdFxuY29uc3QgQklOQVJZX05VTUJFUl9SRSA9ICdcXFxcYigwYlswMV0rKSc7IC8vIDBiLi4uXG5jb25zdCBSRV9TVEFSVEVSU19SRSA9ICchfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFxcXCp8XFxcXCo9fFxcXFwrfFxcXFwrPXwsfC18LT18Lz18L3w6fDt8PDx8PDw9fDw9fDx8PT09fD09fD18Pj4+PXw+Pj18Pj18Pj4+fD4+fD58XFxcXD98XFxcXFt8XFxcXHt8XFxcXCh8XFxcXF58XFxcXF49fFxcXFx8fFxcXFx8PXxcXFxcfFxcXFx8fH4nO1xuXG4vKipcbiogQHBhcmFtIHsgUGFydGlhbDxNb2RlPiAmIHtiaW5hcnk/OiBzdHJpbmcgfCBSZWdFeHB9IH0gb3B0c1xuKi9cbmNvbnN0IFNIRUJBTkcgPSAob3B0cyA9IHt9KSA9PiB7XG4gIGNvbnN0IGJlZ2luU2hlYmFuZyA9IC9eIyFbIF0qXFwvLztcbiAgaWYgKG9wdHMuYmluYXJ5KSB7XG4gICAgb3B0cy5iZWdpbiA9IGNvbmNhdChcbiAgICAgIGJlZ2luU2hlYmFuZyxcbiAgICAgIC8uKlxcYi8sXG4gICAgICBvcHRzLmJpbmFyeSxcbiAgICAgIC9cXGIuKi8pO1xuICB9XG4gIHJldHVybiBpbmhlcml0JDEoe1xuICAgIHNjb3BlOiAnbWV0YScsXG4gICAgYmVnaW46IGJlZ2luU2hlYmFuZyxcbiAgICBlbmQ6IC8kLyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgLyoqIEB0eXBlIHtNb2RlQ2FsbGJhY2t9ICovXG4gICAgXCJvbjpiZWdpblwiOiAobSwgcmVzcCkgPT4ge1xuICAgICAgaWYgKG0uaW5kZXggIT09IDApIHJlc3AuaWdub3JlTWF0Y2goKTtcbiAgICB9XG4gIH0sIG9wdHMpO1xufTtcblxuLy8gQ29tbW9uIG1vZGVzXG5jb25zdCBCQUNLU0xBU0hfRVNDQVBFID0ge1xuICBiZWdpbjogJ1xcXFxcXFxcW1xcXFxzXFxcXFNdJywgcmVsZXZhbmNlOiAwXG59O1xuY29uc3QgQVBPU19TVFJJTkdfTU9ERSA9IHtcbiAgc2NvcGU6ICdzdHJpbmcnLFxuICBiZWdpbjogJ1xcJycsXG4gIGVuZDogJ1xcJycsXG4gIGlsbGVnYWw6ICdcXFxcbicsXG4gIGNvbnRhaW5zOiBbQkFDS1NMQVNIX0VTQ0FQRV1cbn07XG5jb25zdCBRVU9URV9TVFJJTkdfTU9ERSA9IHtcbiAgc2NvcGU6ICdzdHJpbmcnLFxuICBiZWdpbjogJ1wiJyxcbiAgZW5kOiAnXCInLFxuICBpbGxlZ2FsOiAnXFxcXG4nLFxuICBjb250YWluczogW0JBQ0tTTEFTSF9FU0NBUEVdXG59O1xuY29uc3QgUEhSQVNBTF9XT1JEU19NT0RFID0ge1xuICBiZWdpbjogL1xcYihhfGFufHRoZXxhcmV8SSdtfGlzbid0fGRvbid0fGRvZXNuJ3R8d29uJ3R8YnV0fGp1c3R8c2hvdWxkfHByZXR0eXxzaW1wbHl8ZW5vdWdofGdvbm5hfGdvaW5nfHd0Znxzb3xzdWNofHdpbGx8eW91fHlvdXJ8dGhleXxsaWtlfG1vcmUpXFxiL1xufTtcbi8qKlxuICogQ3JlYXRlcyBhIGNvbW1lbnQgbW9kZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgUmVnRXhwfSBiZWdpblxuICogQHBhcmFtIHtzdHJpbmcgfCBSZWdFeHB9IGVuZFxuICogQHBhcmFtIHtNb2RlIHwge319IFttb2RlT3B0aW9uc11cbiAqIEByZXR1cm5zIHtQYXJ0aWFsPE1vZGU+fVxuICovXG5jb25zdCBDT01NRU5UID0gZnVuY3Rpb24oYmVnaW4sIGVuZCwgbW9kZU9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBtb2RlID0gaW5oZXJpdCQxKFxuICAgIHtcbiAgICAgIHNjb3BlOiAnY29tbWVudCcsXG4gICAgICBiZWdpbixcbiAgICAgIGVuZCxcbiAgICAgIGNvbnRhaW5zOiBbXVxuICAgIH0sXG4gICAgbW9kZU9wdGlvbnNcbiAgKTtcbiAgbW9kZS5jb250YWlucy5wdXNoKHtcbiAgICBzY29wZTogJ2RvY3RhZycsXG4gICAgLy8gaGFjayB0byBhdm9pZCB0aGUgc3BhY2UgZnJvbSBiZWluZyBpbmNsdWRlZC4gdGhlIHNwYWNlIGlzIG5lY2Vzc2FyeSB0b1xuICAgIC8vIG1hdGNoIGhlcmUgdG8gcHJldmVudCB0aGUgcGxhaW4gdGV4dCBydWxlIGJlbG93IGZyb20gZ29iYmxpbmcgdXAgZG9jdGFnc1xuICAgIGJlZ2luOiAnWyBdKig/PShUT0RPfEZJWE1FfE5PVEV8QlVHfE9QVElNSVpFfEhBQ0t8WFhYKTopJyxcbiAgICBlbmQ6IC8oVE9ET3xGSVhNRXxOT1RFfEJVR3xPUFRJTUlaRXxIQUNLfFhYWCk6LyxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH0pO1xuICBjb25zdCBFTkdMSVNIX1dPUkQgPSBlaXRoZXIoXG4gICAgLy8gbGlzdCBvZiBjb21tb24gMSBhbmQgMiBsZXR0ZXIgd29yZHMgaW4gRW5nbGlzaFxuICAgIFwiSVwiLFxuICAgIFwiYVwiLFxuICAgIFwiaXNcIixcbiAgICBcInNvXCIsXG4gICAgXCJ1c1wiLFxuICAgIFwidG9cIixcbiAgICBcImF0XCIsXG4gICAgXCJpZlwiLFxuICAgIFwiaW5cIixcbiAgICBcIml0XCIsXG4gICAgXCJvblwiLFxuICAgIC8vIG5vdGU6IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCBvZiBjb250cmFjdGlvbnMsIGp1c3QgcG9wdWxhciBvbmVzXG4gICAgL1tBLVphLXpdK1snXShkfHZlfHJlfGxsfHR8c3xuKS8sIC8vIGNvbnRyYWN0aW9ucyAtIGNhbid0IHdlJ2QgdGhleSdyZSBsZXQncywgZXRjXG4gICAgL1tBLVphLXpdK1stXVthLXpdKy8sIC8vIGBuby13YXlgLCBldGMuXG4gICAgL1tBLVphLXpdW2Etel17Mix9LyAvLyBhbGxvdyBjYXBpdGFsaXplZCB3b3JkcyBhdCBiZWdpbm5pbmcgb2Ygc2VudGVuY2VzXG4gICk7XG4gIC8vIGxvb2tpbmcgbGlrZSBwbGFpbiB0ZXh0LCBtb3JlIGxpa2VseSB0byBiZSBhIGNvbW1lbnRcbiAgbW9kZS5jb250YWlucy5wdXNoKFxuICAgIHtcbiAgICAgIC8vIFRPRE86IGhvdyB0byBpbmNsdWRlIFwiLCAoLCApIHdpdGhvdXQgYnJlYWtpbmcgZ3JhbW1hcnMgdGhhdCB1c2UgdGhlc2UgZm9yXG4gICAgICAvLyBjb21tZW50IGRlbGltaXRlcnM/XG4gICAgICAvLyBiZWdpbjogL1sgXSsoWygpXCJdPyhbQS1aYS16Jy1dezMsfXxpc3xhfEl8c298dXN8W3RUXVtvT118YXR8aWZ8aW58aXR8b24pWy5dP1soKVwiOl0/KFsuXVsgXXxbIF18XFwpKSl7M30vXG4gICAgICAvLyAtLS1cblxuICAgICAgLy8gdGhpcyB0cmllcyB0byBmaW5kIHNlcXVlbmNlcyBvZiAzIGVuZ2xpc2ggd29yZHMgaW4gYSByb3cgKHdpdGhvdXQgYW55XG4gICAgICAvLyBcInByb2dyYW1taW5nXCIgdHlwZSBzeW50YXgpIHRoaXMgZ2l2ZXMgdXMgYSBzdHJvbmcgc2lnbmFsIHRoYXQgd2UndmVcbiAgICAgIC8vIFRSVUxZIGZvdW5kIGEgY29tbWVudCAtIHZzIHBlcmhhcHMgc2Nhbm5pbmcgd2l0aCB0aGUgd3JvbmcgbGFuZ3VhZ2UuXG4gICAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIGZpbmQgc29tZXRoaW5nIHRoYXQgTE9PS1MgbGlrZSB0aGUgc3RhcnQgb2YgdGhlXG4gICAgICAvLyBjb21tZW50IC0gYnV0IHRoZW4gaWYgdGhlcmUgaXMgbm8gcmVhZGFibGUgdGV4dCAtIGdvb2QgY2hhbmNlIGl0IGlzIGFcbiAgICAgIC8vIGZhbHNlIG1hdGNoIGFuZCBub3QgYSBjb21tZW50LlxuICAgICAgLy9cbiAgICAgIC8vIGZvciBhIHZpc3VhbCBleGFtcGxlIHBsZWFzZSBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL2lzc3Vlcy8yODI3XG5cbiAgICAgIGJlZ2luOiBjb25jYXQoXG4gICAgICAgIC9bIF0rLywgLy8gbmVjZXNzYXJ5IHRvIHByZXZlbnQgdXMgZ29iYmxpbmcgdXAgZG9jdGFncyBsaWtlIC8qIEBhdXRob3IgQm9iIE1jZ2lsbCAqL1xuICAgICAgICAnKCcsXG4gICAgICAgIEVOR0xJU0hfV09SRCxcbiAgICAgICAgL1suXT9bOl0/KFsuXVsgXXxbIF0pLyxcbiAgICAgICAgJyl7M30nKSAvLyBsb29rIGZvciAzIHdvcmRzIGluIGEgcm93XG4gICAgfVxuICApO1xuICByZXR1cm4gbW9kZTtcbn07XG5jb25zdCBDX0xJTkVfQ09NTUVOVF9NT0RFID0gQ09NTUVOVCgnLy8nLCAnJCcpO1xuY29uc3QgQ19CTE9DS19DT01NRU5UX01PREUgPSBDT01NRU5UKCcvXFxcXConLCAnXFxcXCovJyk7XG5jb25zdCBIQVNIX0NPTU1FTlRfTU9ERSA9IENPTU1FTlQoJyMnLCAnJCcpO1xuY29uc3QgTlVNQkVSX01PREUgPSB7XG4gIHNjb3BlOiAnbnVtYmVyJyxcbiAgYmVnaW46IE5VTUJFUl9SRSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuY29uc3QgQ19OVU1CRVJfTU9ERSA9IHtcbiAgc2NvcGU6ICdudW1iZXInLFxuICBiZWdpbjogQ19OVU1CRVJfUkUsXG4gIHJlbGV2YW5jZTogMFxufTtcbmNvbnN0IEJJTkFSWV9OVU1CRVJfTU9ERSA9IHtcbiAgc2NvcGU6ICdudW1iZXInLFxuICBiZWdpbjogQklOQVJZX05VTUJFUl9SRSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuY29uc3QgUkVHRVhQX01PREUgPSB7XG4gIC8vIHRoaXMgb3V0ZXIgcnVsZSBtYWtlcyBzdXJlIHdlIGFjdHVhbGx5IGhhdmUgYSBXSE9MRSByZWdleCBhbmQgbm90IHNpbXBseVxuICAvLyBhbiBleHByZXNzaW9uIHN1Y2ggYXM6XG4gIC8vXG4gIC8vICAgICAzIC8gc29tZXRoaW5nXG4gIC8vXG4gIC8vICh3aGljaCB3aWxsIHRoZW4gYmxvdyB1cCB3aGVuIHJlZ2V4J3MgYGlsbGVnYWxgIHNlZXMgdGhlIG5ld2xpbmUpXG4gIGJlZ2luOiAvKD89XFwvW14vXFxuXSpcXC8pLyxcbiAgY29udGFpbnM6IFt7XG4gICAgc2NvcGU6ICdyZWdleHAnLFxuICAgIGJlZ2luOiAvXFwvLyxcbiAgICBlbmQ6IC9cXC9bZ2ltdXldKi8sXG4gICAgaWxsZWdhbDogL1xcbi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgICAgZW5kOiAvXFxdLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW0JBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9XG4gICAgXVxuICB9XVxufTtcbmNvbnN0IFRJVExFX01PREUgPSB7XG4gIHNjb3BlOiAndGl0bGUnLFxuICBiZWdpbjogSURFTlRfUkUsXG4gIHJlbGV2YW5jZTogMFxufTtcbmNvbnN0IFVOREVSU0NPUkVfVElUTEVfTU9ERSA9IHtcbiAgc2NvcGU6ICd0aXRsZScsXG4gIGJlZ2luOiBVTkRFUlNDT1JFX0lERU5UX1JFLFxuICByZWxldmFuY2U6IDBcbn07XG5jb25zdCBNRVRIT0RfR1VBUkQgPSB7XG4gIC8vIGV4Y2x1ZGVzIG1ldGhvZCBuYW1lcyBmcm9tIGtleXdvcmQgcHJvY2Vzc2luZ1xuICBiZWdpbjogJ1xcXFwuXFxcXHMqJyArIFVOREVSU0NPUkVfSURFTlRfUkUsXG4gIHJlbGV2YW5jZTogMFxufTtcblxuLyoqXG4gKiBBZGRzIGVuZCBzYW1lIGFzIGJlZ2luIG1lY2hhbmljcyB0byBhIG1vZGVcbiAqXG4gKiBZb3VyIG1vZGUgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IGEgc2luZ2xlICgpIG1hdGNoIGdyb3VwIGFzIHRoYXQgZmlyc3QgbWF0Y2hcbiAqIGdyb3VwIGlzIHdoYXQgaXMgdXNlZCBmb3IgY29tcGFyaXNvblxuICogQHBhcmFtIHtQYXJ0aWFsPE1vZGU+fSBtb2RlXG4gKi9cbmNvbnN0IEVORF9TQU1FX0FTX0JFR0lOID0gZnVuY3Rpb24obW9kZSkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihtb2RlLFxuICAgIHtcbiAgICAgIC8qKiBAdHlwZSB7TW9kZUNhbGxiYWNrfSAqL1xuICAgICAgJ29uOmJlZ2luJzogKG0sIHJlc3ApID0+IHsgcmVzcC5kYXRhLl9iZWdpbk1hdGNoID0gbVsxXTsgfSxcbiAgICAgIC8qKiBAdHlwZSB7TW9kZUNhbGxiYWNrfSAqL1xuICAgICAgJ29uOmVuZCc6IChtLCByZXNwKSA9PiB7IGlmIChyZXNwLmRhdGEuX2JlZ2luTWF0Y2ggIT09IG1bMV0pIHJlc3AuaWdub3JlTWF0Y2goKTsgfVxuICAgIH0pO1xufTtcblxudmFyIE1PREVTID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBNQVRDSF9OT1RISU5HX1JFOiBNQVRDSF9OT1RISU5HX1JFLFxuICAgIElERU5UX1JFOiBJREVOVF9SRSxcbiAgICBVTkRFUlNDT1JFX0lERU5UX1JFOiBVTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIE5VTUJFUl9SRTogTlVNQkVSX1JFLFxuICAgIENfTlVNQkVSX1JFOiBDX05VTUJFUl9SRSxcbiAgICBCSU5BUllfTlVNQkVSX1JFOiBCSU5BUllfTlVNQkVSX1JFLFxuICAgIFJFX1NUQVJURVJTX1JFOiBSRV9TVEFSVEVSU19SRSxcbiAgICBTSEVCQU5HOiBTSEVCQU5HLFxuICAgIEJBQ0tTTEFTSF9FU0NBUEU6IEJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgQVBPU19TVFJJTkdfTU9ERTogQVBPU19TVFJJTkdfTU9ERSxcbiAgICBRVU9URV9TVFJJTkdfTU9ERTogUVVPVEVfU1RSSU5HX01PREUsXG4gICAgUEhSQVNBTF9XT1JEU19NT0RFOiBQSFJBU0FMX1dPUkRTX01PREUsXG4gICAgQ09NTUVOVDogQ09NTUVOVCxcbiAgICBDX0xJTkVfQ09NTUVOVF9NT0RFOiBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIENfQkxPQ0tfQ09NTUVOVF9NT0RFOiBDX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBIQVNIX0NPTU1FTlRfTU9ERTogSEFTSF9DT01NRU5UX01PREUsXG4gICAgTlVNQkVSX01PREU6IE5VTUJFUl9NT0RFLFxuICAgIENfTlVNQkVSX01PREU6IENfTlVNQkVSX01PREUsXG4gICAgQklOQVJZX05VTUJFUl9NT0RFOiBCSU5BUllfTlVNQkVSX01PREUsXG4gICAgUkVHRVhQX01PREU6IFJFR0VYUF9NT0RFLFxuICAgIFRJVExFX01PREU6IFRJVExFX01PREUsXG4gICAgVU5ERVJTQ09SRV9USVRMRV9NT0RFOiBVTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgTUVUSE9EX0dVQVJEOiBNRVRIT0RfR1VBUkQsXG4gICAgRU5EX1NBTUVfQVNfQkVHSU46IEVORF9TQU1FX0FTX0JFR0lOXG59KTtcblxuLyoqXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5DYWxsYmFja1Jlc3BvbnNlfSBDYWxsYmFja1Jlc3BvbnNlXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Db21waWxlckV4dH0gQ29tcGlsZXJFeHRcbiovXG5cbi8vIEdyYW1tYXIgZXh0ZW5zaW9ucyAvIHBsdWdpbnNcbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjgzM1xuXG4vLyBHcmFtbWFyIGV4dGVuc2lvbnMgYWxsb3cgXCJzeW50YWN0aWMgc3VnYXJcIiB0byBiZSBhZGRlZCB0byB0aGUgZ3JhbW1hciBtb2Rlc1xuLy8gd2l0aG91dCByZXF1aXJpbmcgYW55IHVuZGVybHlpbmcgY2hhbmdlcyB0byB0aGUgY29tcGlsZXIgaW50ZXJuYWxzLlxuXG4vLyBgY29tcGlsZU1hdGNoYCBiZWluZyB0aGUgcGVyZmVjdCBzbWFsbCBleGFtcGxlIG9mIG5vdyBhbGxvd2luZyBhIGdyYW1tYXJcbi8vIGF1dGhvciB0byB3cml0ZSBgbWF0Y2hgIHdoZW4gdGhleSBkZXNpcmUgdG8gbWF0Y2ggYSBzaW5nbGUgZXhwcmVzc2lvbiByYXRoZXJcbi8vIHRoYW4gYmVpbmcgZm9yY2VkIHRvIHVzZSBgYmVnaW5gLiAgVGhlIGV4dGVuc2lvbiB0aGVuIGp1c3QgbW92ZXMgYG1hdGNoYCBpbnRvXG4vLyBgYmVnaW5gIHdoZW4gaXQgcnVucy4gIEllLCBubyBmZWF0dXJlcyBoYXZlIGJlZW4gYWRkZWQsIGJ1dCB3ZSd2ZSBqdXN0IG1hZGVcbi8vIHRoZSBleHBlcmllbmNlIG9mIHdyaXRpbmcgKGFuZCByZWFkaW5nIGdyYW1tYXJzKSBhIGxpdHRsZSBiaXQgbmljZXIuXG5cbi8vIC0tLS0tLVxuXG4vLyBUT0RPOiBXZSBuZWVkIG5lZ2F0aXZlIGxvb2stYmVoaW5kIHN1cHBvcnQgdG8gZG8gdGhpcyBwcm9wZXJseVxuLyoqXG4gKiBTa2lwIGEgbWF0Y2ggaWYgaXQgaGFzIGEgcHJlY2VkaW5nIGRvdFxuICpcbiAqIFRoaXMgaXMgdXNlZCBmb3IgYGJlZ2luS2V5d29yZHNgIHRvIHByZXZlbnQgbWF0Y2hpbmcgZXhwcmVzc2lvbnMgc3VjaCBhc1xuICogYGJvYi5rZXl3b3JkLmRvKClgLiBUaGUgbW9kZSBjb21waWxlciBhdXRvbWF0aWNhbGx5IHdpcmVzIHRoaXMgdXAgYXMgYVxuICogc3BlY2lhbCBfaW50ZXJuYWxfICdvbjpiZWdpbicgY2FsbGJhY2sgZm9yIG1vZGVzIHdpdGggYGJlZ2luS2V5d29yZHNgXG4gKiBAcGFyYW0ge1JlZ0V4cE1hdGNoQXJyYXl9IG1hdGNoXG4gKiBAcGFyYW0ge0NhbGxiYWNrUmVzcG9uc2V9IHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIHNraXBJZkhhc1ByZWNlZGluZ0RvdChtYXRjaCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgYmVmb3JlID0gbWF0Y2guaW5wdXRbbWF0Y2guaW5kZXggLSAxXTtcbiAgaWYgKGJlZm9yZSA9PT0gXCIuXCIpIHtcbiAgICByZXNwb25zZS5pZ25vcmVNYXRjaCgpO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEB0eXBlIHtDb21waWxlckV4dH1cbiAqL1xuZnVuY3Rpb24gc2NvcGVDbGFzc05hbWUobW9kZSwgX3BhcmVudCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gIGlmIChtb2RlLmNsYXNzTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbW9kZS5zY29wZSA9IG1vZGUuY2xhc3NOYW1lO1xuICAgIGRlbGV0ZSBtb2RlLmNsYXNzTmFtZTtcbiAgfVxufVxuXG4vKipcbiAqIGBiZWdpbktleXdvcmRzYCBzeW50YWN0aWMgc3VnYXJcbiAqIEB0eXBlIHtDb21waWxlckV4dH1cbiAqL1xuZnVuY3Rpb24gYmVnaW5LZXl3b3Jkcyhtb2RlLCBwYXJlbnQpIHtcbiAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgaWYgKCFtb2RlLmJlZ2luS2V5d29yZHMpIHJldHVybjtcblxuICAvLyBmb3IgbGFuZ3VhZ2VzIHdpdGgga2V5d29yZHMgdGhhdCBpbmNsdWRlIG5vbi13b3JkIGNoYXJhY3RlcnMgY2hlY2tpbmcgZm9yXG4gIC8vIGEgd29yZCBib3VuZGFyeSBpcyBub3Qgc3VmZmljaWVudCwgc28gaW5zdGVhZCB3ZSBjaGVjayBmb3IgYSB3b3JkIGJvdW5kYXJ5XG4gIC8vIG9yIHdoaXRlc3BhY2UgLSB0aGlzIGRvZXMgbm8gaGFybSBpbiBhbnkgY2FzZSBzaW5jZSBvdXIga2V5d29yZCBlbmdpbmVcbiAgLy8gZG9lc24ndCBhbGxvdyBzcGFjZXMgaW4ga2V5d29yZHMgYW55d2F5cyBhbmQgd2Ugc3RpbGwgY2hlY2sgZm9yIHRoZSBib3VuZGFyeVxuICAvLyBmaXJzdFxuICBtb2RlLmJlZ2luID0gJ1xcXFxiKCcgKyBtb2RlLmJlZ2luS2V5d29yZHMuc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKSg/IVxcXFwuKSg/PVxcXFxifFxcXFxzKSc7XG4gIG1vZGUuX19iZWZvcmVCZWdpbiA9IHNraXBJZkhhc1ByZWNlZGluZ0RvdDtcbiAgbW9kZS5rZXl3b3JkcyA9IG1vZGUua2V5d29yZHMgfHwgbW9kZS5iZWdpbktleXdvcmRzO1xuICBkZWxldGUgbW9kZS5iZWdpbktleXdvcmRzO1xuXG4gIC8vIHByZXZlbnRzIGRvdWJsZSByZWxldmFuY2UsIHRoZSBrZXl3b3JkcyB0aGVtc2VsdmVzIHByb3ZpZGVcbiAgLy8gcmVsZXZhbmNlLCB0aGUgbW9kZSBkb2Vzbid0IG5lZWQgdG8gZG91YmxlIGl0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgaWYgKG1vZGUucmVsZXZhbmNlID09PSB1bmRlZmluZWQpIG1vZGUucmVsZXZhbmNlID0gMDtcbn1cblxuLyoqXG4gKiBBbGxvdyBgaWxsZWdhbGAgdG8gY29udGFpbiBhbiBhcnJheSBvZiBpbGxlZ2FsIHZhbHVlc1xuICogQHR5cGUge0NvbXBpbGVyRXh0fVxuICovXG5mdW5jdGlvbiBjb21waWxlSWxsZWdhbChtb2RlLCBfcGFyZW50KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShtb2RlLmlsbGVnYWwpKSByZXR1cm47XG5cbiAgbW9kZS5pbGxlZ2FsID0gZWl0aGVyKC4uLm1vZGUuaWxsZWdhbCk7XG59XG5cbi8qKlxuICogYG1hdGNoYCB0byBtYXRjaCBhIHNpbmdsZSBleHByZXNzaW9uIGZvciByZWFkYWJpbGl0eVxuICogQHR5cGUge0NvbXBpbGVyRXh0fVxuICovXG5mdW5jdGlvbiBjb21waWxlTWF0Y2gobW9kZSwgX3BhcmVudCkge1xuICBpZiAoIW1vZGUubWF0Y2gpIHJldHVybjtcbiAgaWYgKG1vZGUuYmVnaW4gfHwgbW9kZS5lbmQpIHRocm93IG5ldyBFcnJvcihcImJlZ2luICYgZW5kIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggbWF0Y2hcIik7XG5cbiAgbW9kZS5iZWdpbiA9IG1vZGUubWF0Y2g7XG4gIGRlbGV0ZSBtb2RlLm1hdGNoO1xufVxuXG4vKipcbiAqIHByb3ZpZGVzIHRoZSBkZWZhdWx0IDEgcmVsZXZhbmNlIHRvIGFsbCBtb2Rlc1xuICogQHR5cGUge0NvbXBpbGVyRXh0fVxuICovXG5mdW5jdGlvbiBjb21waWxlUmVsZXZhbmNlKG1vZGUsIF9wYXJlbnQpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmaW5lZFxuICBpZiAobW9kZS5yZWxldmFuY2UgPT09IHVuZGVmaW5lZCkgbW9kZS5yZWxldmFuY2UgPSAxO1xufVxuXG4vLyBhbGxvdyBiZWZvcmVNYXRjaCB0byBhY3QgYXMgYSBcInF1YWxpZmllclwiIGZvciB0aGUgbWF0Y2hcbi8vIHRoZSBmdWxsIG1hdGNoIGJlZ2luIG11c3QgYmUgW2JlZm9yZU1hdGNoXVtiZWdpbl1cbmNvbnN0IGJlZm9yZU1hdGNoRXh0ID0gKG1vZGUsIHBhcmVudCkgPT4ge1xuICBpZiAoIW1vZGUuYmVmb3JlTWF0Y2gpIHJldHVybjtcbiAgLy8gc3RhcnRzIGNvbmZsaWN0cyB3aXRoIGVuZHNQYXJlbnQgd2hpY2ggd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNoaWxkXG4gIC8vIHJ1bGUgaXMgbm90IG1hdGNoZWQgbXVsdGlwbGUgdGltZXNcbiAgaWYgKG1vZGUuc3RhcnRzKSB0aHJvdyBuZXcgRXJyb3IoXCJiZWZvcmVNYXRjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIHN0YXJ0c1wiKTtcblxuICBjb25zdCBvcmlnaW5hbE1vZGUgPSBPYmplY3QuYXNzaWduKHt9LCBtb2RlKTtcbiAgT2JqZWN0LmtleXMobW9kZSkuZm9yRWFjaCgoa2V5KSA9PiB7IGRlbGV0ZSBtb2RlW2tleV07IH0pO1xuXG4gIG1vZGUua2V5d29yZHMgPSBvcmlnaW5hbE1vZGUua2V5d29yZHM7XG4gIG1vZGUuYmVnaW4gPSBjb25jYXQob3JpZ2luYWxNb2RlLmJlZm9yZU1hdGNoLCBsb29rYWhlYWQob3JpZ2luYWxNb2RlLmJlZ2luKSk7XG4gIG1vZGUuc3RhcnRzID0ge1xuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAgT2JqZWN0LmFzc2lnbihvcmlnaW5hbE1vZGUsIHsgZW5kc1BhcmVudDogdHJ1ZSB9KVxuICAgIF1cbiAgfTtcbiAgbW9kZS5yZWxldmFuY2UgPSAwO1xuXG4gIGRlbGV0ZSBvcmlnaW5hbE1vZGUuYmVmb3JlTWF0Y2g7XG59O1xuXG4vLyBrZXl3b3JkcyB0aGF0IHNob3VsZCBoYXZlIG5vIGRlZmF1bHQgcmVsZXZhbmNlIHZhbHVlXG5jb25zdCBDT01NT05fS0VZV09SRFMgPSBbXG4gICdvZicsXG4gICdhbmQnLFxuICAnZm9yJyxcbiAgJ2luJyxcbiAgJ25vdCcsXG4gICdvcicsXG4gICdpZicsXG4gICd0aGVuJyxcbiAgJ3BhcmVudCcsIC8vIGNvbW1vbiB2YXJpYWJsZSBuYW1lXG4gICdsaXN0JywgLy8gY29tbW9uIHZhcmlhYmxlIG5hbWVcbiAgJ3ZhbHVlJyAvLyBjb21tb24gdmFyaWFibGUgbmFtZVxuXTtcblxuY29uc3QgREVGQVVMVF9LRVlXT1JEX1NDT1BFID0gXCJrZXl3b3JkXCI7XG5cbi8qKlxuICogR2l2ZW4gcmF3IGtleXdvcmRzIGZyb20gYSBsYW5ndWFnZSBkZWZpbml0aW9uLCBjb21waWxlIHRoZW0uXG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xzdHJpbmdbXT4gfCBBcnJheTxzdHJpbmc+fSByYXdLZXl3b3Jkc1xuICogQHBhcmFtIHtib29sZWFufSBjYXNlSW5zZW5zaXRpdmVcbiAqL1xuZnVuY3Rpb24gY29tcGlsZUtleXdvcmRzKHJhd0tleXdvcmRzLCBjYXNlSW5zZW5zaXRpdmUsIHNjb3BlTmFtZSA9IERFRkFVTFRfS0VZV09SRF9TQ09QRSkge1xuICAvKiogQHR5cGUgS2V5d29yZERpY3QgKi9cbiAgY29uc3QgY29tcGlsZWRLZXl3b3JkcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy8gaW5wdXQgY2FuIGJlIGEgc3RyaW5nIG9mIGtleXdvcmRzLCBhbiBhcnJheSBvZiBrZXl3b3Jkcywgb3IgYSBvYmplY3Qgd2l0aFxuICAvLyBuYW1lZCBrZXlzIHJlcHJlc2VudGluZyBzY29wZU5hbWUgKHdoaWNoIGNhbiB0aGVuIHBvaW50IHRvIGEgc3RyaW5nIG9yIGFycmF5KVxuICBpZiAodHlwZW9mIHJhd0tleXdvcmRzID09PSAnc3RyaW5nJykge1xuICAgIGNvbXBpbGVMaXN0KHNjb3BlTmFtZSwgcmF3S2V5d29yZHMuc3BsaXQoXCIgXCIpKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJhd0tleXdvcmRzKSkge1xuICAgIGNvbXBpbGVMaXN0KHNjb3BlTmFtZSwgcmF3S2V5d29yZHMpO1xuICB9IGVsc2Uge1xuICAgIE9iamVjdC5rZXlzKHJhd0tleXdvcmRzKS5mb3JFYWNoKGZ1bmN0aW9uKHNjb3BlTmFtZSkge1xuICAgICAgLy8gY29sbGFwc2UgYWxsIG91ciBvYmplY3RzIGJhY2sgaW50byB0aGUgcGFyZW50IG9iamVjdFxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgY29tcGlsZWRLZXl3b3JkcyxcbiAgICAgICAgY29tcGlsZUtleXdvcmRzKHJhd0tleXdvcmRzW3Njb3BlTmFtZV0sIGNhc2VJbnNlbnNpdGl2ZSwgc2NvcGVOYW1lKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29tcGlsZWRLZXl3b3JkcztcblxuICAvLyAtLS1cblxuICAvKipcbiAgICogQ29tcGlsZXMgYW4gaW5kaXZpZHVhbCBsaXN0IG9mIGtleXdvcmRzXG4gICAqXG4gICAqIEV4OiBcImZvciBpZiB3aGVuIHdoaWxlfDVcIlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGVOYW1lXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0ga2V5d29yZExpc3RcbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBpbGVMaXN0KHNjb3BlTmFtZSwga2V5d29yZExpc3QpIHtcbiAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgICBrZXl3b3JkTGlzdCA9IGtleXdvcmRMaXN0Lm1hcCh4ID0+IHgudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICAgIGtleXdvcmRMaXN0LmZvckVhY2goZnVuY3Rpb24oa2V5d29yZCkge1xuICAgICAgY29uc3QgcGFpciA9IGtleXdvcmQuc3BsaXQoJ3wnKTtcbiAgICAgIGNvbXBpbGVkS2V5d29yZHNbcGFpclswXV0gPSBbc2NvcGVOYW1lLCBzY29yZUZvcktleXdvcmQocGFpclswXSwgcGFpclsxXSldO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJvcGVyIHNjb3JlIGZvciBhIGdpdmVuIGtleXdvcmRcbiAqXG4gKiBBbHNvIHRha2VzIGludG8gYWNjb3VudCBjb21tZW50IGtleXdvcmRzLCB3aGljaCB3aWxsIGJlIHNjb3JlZCAwIFVOTEVTU1xuICogYW5vdGhlciBzY29yZSBoYXMgYmVlbiBtYW51YWxseSBhc3NpZ25lZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXl3b3JkXG4gKiBAcGFyYW0ge3N0cmluZ30gW3Byb3ZpZGVkU2NvcmVdXG4gKi9cbmZ1bmN0aW9uIHNjb3JlRm9yS2V5d29yZChrZXl3b3JkLCBwcm92aWRlZFNjb3JlKSB7XG4gIC8vIG1hbnVhbCBzY29yZXMgYWx3YXlzIHdpbiBvdmVyIGNvbW1vbiBrZXl3b3Jkc1xuICAvLyBzbyB5b3UgY2FuIGZvcmNlIGEgc2NvcmUgb2YgMSBpZiB5b3UgcmVhbGx5IGluc2lzdFxuICBpZiAocHJvdmlkZWRTY29yZSkge1xuICAgIHJldHVybiBOdW1iZXIocHJvdmlkZWRTY29yZSk7XG4gIH1cblxuICByZXR1cm4gY29tbW9uS2V5d29yZChrZXl3b3JkKSA/IDAgOiAxO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBnaXZlbiBrZXl3b3JkIGlzIGNvbW1vbiBvciBub3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5d29yZCAqL1xuZnVuY3Rpb24gY29tbW9uS2V5d29yZChrZXl3b3JkKSB7XG4gIHJldHVybiBDT01NT05fS0VZV09SRFMuaW5jbHVkZXMoa2V5d29yZC50b0xvd2VyQ2FzZSgpKTtcbn1cblxuLypcblxuRm9yIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgcGxlYXNlIHNlZTpcbmh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzI4ODAjaXNzdWVjb21tZW50LTc0NzI3NTQxOVxuXG4qL1xuXG4vKipcbiAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBib29sZWFuPn1cbiAqL1xuY29uc3Qgc2VlbkRlcHJlY2F0aW9ucyA9IHt9O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKi9cbmNvbnN0IGVycm9yID0gKG1lc3NhZ2UpID0+IHtcbiAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7YW55fSBhcmdzXG4gKi9cbmNvbnN0IHdhcm4gPSAobWVzc2FnZSwgLi4uYXJncykgPT4ge1xuICBjb25zb2xlLmxvZyhgV0FSTjogJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqL1xuY29uc3QgZGVwcmVjYXRlZCA9ICh2ZXJzaW9uLCBtZXNzYWdlKSA9PiB7XG4gIGlmIChzZWVuRGVwcmVjYXRpb25zW2Ake3ZlcnNpb259LyR7bWVzc2FnZX1gXSkgcmV0dXJuO1xuXG4gIGNvbnNvbGUubG9nKGBEZXByZWNhdGVkIGFzIG9mICR7dmVyc2lvbn0uICR7bWVzc2FnZX1gKTtcbiAgc2VlbkRlcHJlY2F0aW9uc1tgJHt2ZXJzaW9ufS8ke21lc3NhZ2V9YF0gPSB0cnVlO1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdGhyb3ctbGl0ZXJhbCAqL1xuXG4vKipcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkNvbXBpbGVkTW9kZX0gQ29tcGlsZWRNb2RlXG4qL1xuXG5jb25zdCBNdWx0aUNsYXNzRXJyb3IgPSBuZXcgRXJyb3IoKTtcblxuLyoqXG4gKiBSZW51bWJlcnMgbGFiZWxlZCBzY29wZSBuYW1lcyB0byBhY2NvdW50IGZvciBhZGRpdGlvbmFsIGlubmVyIG1hdGNoXG4gKiBncm91cHMgdGhhdCBvdGhlcndpc2Ugd291bGQgYnJlYWsgZXZlcnl0aGluZy5cbiAqXG4gKiBMZXRzIHNheSB3ZSAzIG1hdGNoIHNjb3BlczpcbiAqXG4gKiAgIHsgMSA9PiAuLi4sIDIgPT4gLi4uLCAzID0+IC4uLiB9XG4gKlxuICogU28gd2hhdCB3ZSBuZWVkIGlzIGEgY2xlYW4gbWF0Y2ggbGlrZSB0aGlzOlxuICpcbiAqICAgKGEpKGIpKGMpID0+IFsgXCJhXCIsIFwiYlwiLCBcImNcIiBdXG4gKlxuICogQnV0IHRoaXMgZmFsbHMgYXBhcnQgd2l0aCBpbm5lciBtYXRjaCBncm91cHM6XG4gKlxuICogKGEpKCgoYikpKShjKSA9PiBbXCJhXCIsIFwiYlwiLCBcImJcIiwgXCJiXCIsIFwiY1wiIF1cbiAqXG4gKiBPdXIgc2NvcGVzIGFyZSBub3cgXCJvdXQgb2YgYWxpZ25tZW50XCIgYW5kIHdlJ3JlIHJlcGVhdGluZyBgYmAgMyB0aW1lcy5cbiAqIFdoYXQgbmVlZHMgdG8gaGFwcGVuIGlzIHRoZSBudW1iZXJzIGFyZSByZW1hcHBlZDpcbiAqXG4gKiAgIHsgMSA9PiAuLi4sIDIgPT4gLi4uLCA1ID0+IC4uLiB9XG4gKlxuICogV2UgYWxzbyBuZWVkIHRvIGtub3cgdGhhdCB0aGUgT05MWSBncm91cHMgdGhhdCBzaG91bGQgYmUgb3V0cHV0XG4gKiBhcmUgMSwgMiwgYW5kIDUuICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhpcyBiZWhhdmlvci5cbiAqXG4gKiBAcGFyYW0ge0NvbXBpbGVkTW9kZX0gbW9kZVxuICogQHBhcmFtIHtBcnJheTxSZWdFeHAgfCBzdHJpbmc+fSByZWdleGVzXG4gKiBAcGFyYW0ge3trZXk6IFwiYmVnaW5TY29wZVwifFwiZW5kU2NvcGVcIn19IG9wdHNcbiAqL1xuZnVuY3Rpb24gcmVtYXBTY29wZU5hbWVzKG1vZGUsIHJlZ2V4ZXMsIHsga2V5IH0pIHtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGNvbnN0IHNjb3BlTmFtZXMgPSBtb2RlW2tleV07XG4gIC8qKiBAdHlwZSBSZWNvcmQ8bnVtYmVyLGJvb2xlYW4+ICovXG4gIGNvbnN0IGVtaXQgPSB7fTtcbiAgLyoqIEB0eXBlIFJlY29yZDxudW1iZXIsc3RyaW5nPiAqL1xuICBjb25zdCBwb3NpdGlvbnMgPSB7fTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8PSByZWdleGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgcG9zaXRpb25zW2kgKyBvZmZzZXRdID0gc2NvcGVOYW1lc1tpXTtcbiAgICBlbWl0W2kgKyBvZmZzZXRdID0gdHJ1ZTtcbiAgICBvZmZzZXQgKz0gY291bnRNYXRjaEdyb3VwcyhyZWdleGVzW2kgLSAxXSk7XG4gIH1cbiAgLy8gd2UgdXNlIF9lbWl0IHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggbWF0Y2ggZ3JvdXBzIGFyZSBcInRvcC1sZXZlbFwiIHRvIGF2b2lkIGRvdWJsZVxuICAvLyBvdXRwdXQgZnJvbSBpbnNpZGUgbWF0Y2ggZ3JvdXBzXG4gIG1vZGVba2V5XSA9IHBvc2l0aW9ucztcbiAgbW9kZVtrZXldLl9lbWl0ID0gZW1pdDtcbiAgbW9kZVtrZXldLl9tdWx0aSA9IHRydWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtDb21waWxlZE1vZGV9IG1vZGVcbiAqL1xuZnVuY3Rpb24gYmVnaW5NdWx0aUNsYXNzKG1vZGUpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG1vZGUuYmVnaW4pKSByZXR1cm47XG5cbiAgaWYgKG1vZGUuc2tpcCB8fCBtb2RlLmV4Y2x1ZGVCZWdpbiB8fCBtb2RlLnJldHVybkJlZ2luKSB7XG4gICAgZXJyb3IoXCJza2lwLCBleGNsdWRlQmVnaW4sIHJldHVybkJlZ2luIG5vdCBjb21wYXRpYmxlIHdpdGggYmVnaW5TY29wZToge31cIik7XG4gICAgdGhyb3cgTXVsdGlDbGFzc0Vycm9yO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBtb2RlLmJlZ2luU2NvcGUgIT09IFwib2JqZWN0XCIgfHwgbW9kZS5iZWdpblNjb3BlID09PSBudWxsKSB7XG4gICAgZXJyb3IoXCJiZWdpblNjb3BlIG11c3QgYmUgb2JqZWN0XCIpO1xuICAgIHRocm93IE11bHRpQ2xhc3NFcnJvcjtcbiAgfVxuXG4gIHJlbWFwU2NvcGVOYW1lcyhtb2RlLCBtb2RlLmJlZ2luLCB7IGtleTogXCJiZWdpblNjb3BlXCIgfSk7XG4gIG1vZGUuYmVnaW4gPSBfcmV3cml0ZUJhY2tyZWZlcmVuY2VzKG1vZGUuYmVnaW4sIHsgam9pbldpdGg6IFwiXCIgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtDb21waWxlZE1vZGV9IG1vZGVcbiAqL1xuZnVuY3Rpb24gZW5kTXVsdGlDbGFzcyhtb2RlKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShtb2RlLmVuZCkpIHJldHVybjtcblxuICBpZiAobW9kZS5za2lwIHx8IG1vZGUuZXhjbHVkZUVuZCB8fCBtb2RlLnJldHVybkVuZCkge1xuICAgIGVycm9yKFwic2tpcCwgZXhjbHVkZUVuZCwgcmV0dXJuRW5kIG5vdCBjb21wYXRpYmxlIHdpdGggZW5kU2NvcGU6IHt9XCIpO1xuICAgIHRocm93IE11bHRpQ2xhc3NFcnJvcjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbW9kZS5lbmRTY29wZSAhPT0gXCJvYmplY3RcIiB8fCBtb2RlLmVuZFNjb3BlID09PSBudWxsKSB7XG4gICAgZXJyb3IoXCJlbmRTY29wZSBtdXN0IGJlIG9iamVjdFwiKTtcbiAgICB0aHJvdyBNdWx0aUNsYXNzRXJyb3I7XG4gIH1cblxuICByZW1hcFNjb3BlTmFtZXMobW9kZSwgbW9kZS5lbmQsIHsga2V5OiBcImVuZFNjb3BlXCIgfSk7XG4gIG1vZGUuZW5kID0gX3Jld3JpdGVCYWNrcmVmZXJlbmNlcyhtb2RlLmVuZCwgeyBqb2luV2l0aDogXCJcIiB9KTtcbn1cblxuLyoqXG4gKiB0aGlzIGV4aXN0cyBvbmx5IHRvIGFsbG93IGBzY29wZToge31gIHRvIGJlIHVzZWQgYmVzaWRlIGBtYXRjaDpgXG4gKiBPdGhlcndpc2UgYGJlZ2luU2NvcGVgIHdvdWxkIG5lY2Vzc2FyeSBhbmQgdGhhdCB3b3VsZCBsb29rIHdlaXJkXG5cbiAge1xuICAgIG1hdGNoOiBbIC9kZWYvLCAvXFx3Ky8gXVxuICAgIHNjb3BlOiB7IDE6IFwia2V5d29yZFwiICwgMjogXCJ0aXRsZVwiIH1cbiAgfVxuXG4gKiBAcGFyYW0ge0NvbXBpbGVkTW9kZX0gbW9kZVxuICovXG5mdW5jdGlvbiBzY29wZVN1Z2FyKG1vZGUpIHtcbiAgaWYgKG1vZGUuc2NvcGUgJiYgdHlwZW9mIG1vZGUuc2NvcGUgPT09IFwib2JqZWN0XCIgJiYgbW9kZS5zY29wZSAhPT0gbnVsbCkge1xuICAgIG1vZGUuYmVnaW5TY29wZSA9IG1vZGUuc2NvcGU7XG4gICAgZGVsZXRlIG1vZGUuc2NvcGU7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0NvbXBpbGVkTW9kZX0gbW9kZVxuICovXG5mdW5jdGlvbiBNdWx0aUNsYXNzKG1vZGUpIHtcbiAgc2NvcGVTdWdhcihtb2RlKTtcblxuICBpZiAodHlwZW9mIG1vZGUuYmVnaW5TY29wZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIG1vZGUuYmVnaW5TY29wZSA9IHsgX3dyYXA6IG1vZGUuYmVnaW5TY29wZSB9O1xuICB9XG4gIGlmICh0eXBlb2YgbW9kZS5lbmRTY29wZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIG1vZGUuZW5kU2NvcGUgPSB7IF93cmFwOiBtb2RlLmVuZFNjb3BlIH07XG4gIH1cblxuICBiZWdpbk11bHRpQ2xhc3MobW9kZSk7XG4gIGVuZE11bHRpQ2xhc3MobW9kZSk7XG59XG5cbi8qKlxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuTW9kZX0gTW9kZVxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuQ29tcGlsZWRNb2RlfSBDb21waWxlZE1vZGVcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkxhbmd1YWdlfSBMYW5ndWFnZVxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuSExKU1BsdWdpbn0gSExKU1BsdWdpblxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuQ29tcGlsZWRMYW5ndWFnZX0gQ29tcGlsZWRMYW5ndWFnZVxuKi9cblxuLy8gY29tcGlsYXRpb25cblxuLyoqXG4gKiBDb21waWxlcyBhIGxhbmd1YWdlIGRlZmluaXRpb24gcmVzdWx0XG4gKlxuICogR2l2ZW4gdGhlIHJhdyByZXN1bHQgb2YgYSBsYW5ndWFnZSBkZWZpbml0aW9uIChMYW5ndWFnZSksIGNvbXBpbGVzIHRoaXMgc29cbiAqIHRoYXQgaXQgaXMgcmVhZHkgZm9yIGhpZ2hsaWdodGluZyBjb2RlLlxuICogQHBhcmFtIHtMYW5ndWFnZX0gbGFuZ3VhZ2VcbiAqIEByZXR1cm5zIHtDb21waWxlZExhbmd1YWdlfVxuICovXG5mdW5jdGlvbiBjb21waWxlTGFuZ3VhZ2UobGFuZ3VhZ2UpIHtcbiAgLyoqXG4gICAqIEJ1aWxkcyBhIHJlZ2V4IHdpdGggdGhlIGNhc2Ugc2Vuc2l0aXZpdHkgb2YgdGhlIGN1cnJlbnQgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmd9IHZhbHVlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2dsb2JhbF1cbiAgICovXG4gIGZ1bmN0aW9uIGxhbmdSZSh2YWx1ZSwgZ2xvYmFsKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXG4gICAgICBzb3VyY2UodmFsdWUpLFxuICAgICAgJ20nXG4gICAgICArIChsYW5ndWFnZS5jYXNlX2luc2Vuc2l0aXZlID8gJ2knIDogJycpXG4gICAgICArIChsYW5ndWFnZS51bmljb2RlUmVnZXggPyAndScgOiAnJylcbiAgICAgICsgKGdsb2JhbCA/ICdnJyA6ICcnKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICBTdG9yZXMgbXVsdGlwbGUgcmVndWxhciBleHByZXNzaW9ucyBhbmQgYWxsb3dzIHlvdSB0byBxdWlja2x5IHNlYXJjaCBmb3JcbiAgICB0aGVtIGFsbCBpbiBhIHN0cmluZyBzaW11bHRhbmVvdXNseSAtIHJldHVybmluZyB0aGUgZmlyc3QgbWF0Y2guICBJdCBkb2VzXG4gICAgdGhpcyBieSBjcmVhdGluZyBhIGh1Z2UgKGF8YnxjKSByZWdleCAtIGVhY2ggaW5kaXZpZHVhbCBpdGVtIHdyYXBwZWQgd2l0aCAoKVxuICAgIGFuZCBqb2luZWQgYnkgYHxgIC0gdXNpbmcgbWF0Y2ggZ3JvdXBzIHRvIHRyYWNrIHBvc2l0aW9uLiAgV2hlbiBhIG1hdGNoIGlzXG4gICAgZm91bmQgY2hlY2tpbmcgd2hpY2ggcG9zaXRpb24gaW4gdGhlIGFycmF5IGhhcyBjb250ZW50IGFsbG93cyB1cyB0byBmaWd1cmVcbiAgICBvdXQgd2hpY2ggb2YgdGhlIG9yaWdpbmFsIHJlZ2V4ZXMgLyBtYXRjaCBncm91cHMgdHJpZ2dlcmVkIHRoZSBtYXRjaC5cblxuICAgIFRoZSBtYXRjaCBvYmplY3QgaXRzZWxmICh0aGUgcmVzdWx0IG9mIGBSZWdleC5leGVjYCkgaXMgcmV0dXJuZWQgYnV0IGFsc29cbiAgICBlbmhhbmNlZCBieSBtZXJnaW5nIGluIGFueSBtZXRhLWRhdGEgdGhhdCB3YXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSByZWdleC5cbiAgICBUaGlzIGlzIGhvdyB3ZSBrZWVwIHRyYWNrIG9mIHdoaWNoIG1vZGUgbWF0Y2hlZCwgYW5kIHdoYXQgdHlwZSBvZiBydWxlXG4gICAgKGBpbGxlZ2FsYCwgYGJlZ2luYCwgZW5kLCBldGMpLlxuICAqL1xuICBjbGFzcyBNdWx0aVJlZ2V4IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHRoaXMubWF0Y2hJbmRleGVzID0ge307XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLnJlZ2V4ZXMgPSBbXTtcbiAgICAgIHRoaXMubWF0Y2hBdCA9IDE7XG4gICAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgYWRkUnVsZShyZSwgb3B0cykge1xuICAgICAgb3B0cy5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb24rKztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMubWF0Y2hJbmRleGVzW3RoaXMubWF0Y2hBdF0gPSBvcHRzO1xuICAgICAgdGhpcy5yZWdleGVzLnB1c2goW29wdHMsIHJlXSk7XG4gICAgICB0aGlzLm1hdGNoQXQgKz0gY291bnRNYXRjaEdyb3VwcyhyZSkgKyAxO1xuICAgIH1cblxuICAgIGNvbXBpbGUoKSB7XG4gICAgICBpZiAodGhpcy5yZWdleGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBhdm9pZHMgdGhlIG5lZWQgdG8gY2hlY2sgbGVuZ3RoIGV2ZXJ5IHRpbWUgZXhlYyBpcyBjYWxsZWRcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLmV4ZWMgPSAoKSA9PiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgdGVybWluYXRvcnMgPSB0aGlzLnJlZ2V4ZXMubWFwKGVsID0+IGVsWzFdKTtcbiAgICAgIHRoaXMubWF0Y2hlclJlID0gbGFuZ1JlKF9yZXdyaXRlQmFja3JlZmVyZW5jZXModGVybWluYXRvcnMsIHsgam9pbldpdGg6ICd8JyB9KSwgdHJ1ZSk7XG4gICAgICB0aGlzLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgLyoqIEBwYXJhbSB7c3RyaW5nfSBzICovXG4gICAgZXhlYyhzKSB7XG4gICAgICB0aGlzLm1hdGNoZXJSZS5sYXN0SW5kZXggPSB0aGlzLmxhc3RJbmRleDtcbiAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaGVyUmUuZXhlYyhzKTtcbiAgICAgIGlmICghbWF0Y2gpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmaW5lZFxuICAgICAgY29uc3QgaSA9IG1hdGNoLmZpbmRJbmRleCgoZWwsIGkpID0+IGkgPiAwICYmIGVsICE9PSB1bmRlZmluZWQpO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbWF0Y2hEYXRhID0gdGhpcy5tYXRjaEluZGV4ZXNbaV07XG4gICAgICAvLyB0cmltIG9mZiBhbnkgZWFybGllciBub24tcmVsZXZhbnQgbWF0Y2ggZ3JvdXBzIChpZSwgdGhlIG90aGVyIHJlZ2V4XG4gICAgICAvLyBtYXRjaCBncm91cHMgdGhhdCBtYWtlIHVwIHRoZSBtdWx0aS1tYXRjaGVyKVxuICAgICAgbWF0Y2guc3BsaWNlKDAsIGkpO1xuXG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtYXRjaCwgbWF0Y2hEYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgIENyZWF0ZWQgdG8gc29sdmUgdGhlIGtleSBkZWZpY2llbnRseSB3aXRoIE11bHRpUmVnZXggLSB0aGVyZSBpcyBubyB3YXkgdG9cbiAgICB0ZXN0IGZvciBtdWx0aXBsZSBtYXRjaGVzIGF0IGEgc2luZ2xlIGxvY2F0aW9uLiAgV2h5IHdvdWxkIHdlIG5lZWQgdG8gZG9cbiAgICB0aGF0PyAgSW4gdGhlIGZ1dHVyZSBhIG1vcmUgZHluYW1pYyBlbmdpbmUgd2lsbCBhbGxvdyBjZXJ0YWluIG1hdGNoZXMgdG8gYmVcbiAgICBpZ25vcmVkLiAgQW4gZXhhbXBsZTogaWYgd2UgbWF0Y2hlZCBzYXkgdGhlIDNyZCByZWdleCBpbiBhIGxhcmdlIGdyb3VwIGJ1dFxuICAgIGRlY2lkZWQgdG8gaWdub3JlIGl0IC0gd2UnZCBuZWVkIHRvIHN0YXJ0ZWQgdGVzdGluZyBhZ2FpbiBhdCB0aGUgNHRoXG4gICAgcmVnZXguLi4gYnV0IE11bHRpUmVnZXggaXRzZWxmIGdpdmVzIHVzIG5vIHJlYWwgd2F5IHRvIGRvIHRoYXQuXG5cbiAgICBTbyB3aGF0IHRoaXMgY2xhc3MgY3JlYXRlcyBNdWx0aVJlZ2V4cyBvbiB0aGUgZmx5IGZvciB3aGF0ZXZlciBzZWFyY2hcbiAgICBwb3NpdGlvbiB0aGV5IGFyZSBuZWVkZWQuXG5cbiAgICBOT1RFOiBUaGVzZSBhZGRpdGlvbmFsIE11bHRpUmVnZXggb2JqZWN0cyBhcmUgY3JlYXRlZCBkeW5hbWljYWxseS4gIEZvciBtb3N0XG4gICAgZ3JhbW1hcnMgbW9zdCBvZiB0aGUgdGltZSB3ZSB3aWxsIG5ldmVyIGFjdHVhbGx5IG5lZWQgYW55dGhpbmcgbW9yZSB0aGFuIHRoZVxuICAgIGZpcnN0IE11bHRpUmVnZXggLSBzbyB0aGlzIHNob3VsZG4ndCBoYXZlIHRvbyBtdWNoIG92ZXJoZWFkLlxuXG4gICAgU2F5IHRoaXMgaXMgb3VyIHNlYXJjaCBncm91cCwgYW5kIHdlIG1hdGNoIHJlZ2V4MywgYnV0IHdpc2ggdG8gaWdub3JlIGl0LlxuXG4gICAgICByZWdleDEgfCByZWdleDIgfCByZWdleDMgfCByZWdleDQgfCByZWdleDUgICAgJyBpZSwgc3RhcnRBdCA9IDBcblxuICAgIFdoYXQgd2UgbmVlZCBpcyBhIG5ldyBNdWx0aVJlZ2V4IHRoYXQgb25seSBpbmNsdWRlcyB0aGUgcmVtYWluaW5nXG4gICAgcG9zc2liaWxpdGllczpcblxuICAgICAgcmVnZXg0IHwgcmVnZXg1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgaWUsIHN0YXJ0QXQgPSAzXG5cbiAgICBUaGlzIGNsYXNzIHdyYXBzIGFsbCB0aGF0IGNvbXBsZXhpdHkgdXAgaW4gYSBzaW1wbGUgQVBJLi4uIGBzdGFydEF0YCBkZWNpZGVzXG4gICAgd2hlcmUgaW4gdGhlIGFycmF5IG9mIGV4cHJlc3Npb25zIHRvIHN0YXJ0IGRvaW5nIHRoZSBtYXRjaGluZy4gSXRcbiAgICBhdXRvLWluY3JlbWVudHMsIHNvIGlmIGEgbWF0Y2ggaXMgZm91bmQgYXQgcG9zaXRpb24gMiwgdGhlbiBzdGFydEF0IHdpbGwgYmVcbiAgICBzZXQgdG8gMy4gIElmIHRoZSBlbmQgaXMgcmVhY2hlZCBzdGFydEF0IHdpbGwgcmV0dXJuIHRvIDAuXG5cbiAgICBNT1NUIG9mIHRoZSB0aW1lIHRoZSBwYXJzZXIgd2lsbCBiZSBzZXR0aW5nIHN0YXJ0QXQgbWFudWFsbHkgdG8gMC5cbiAgKi9cbiAgY2xhc3MgUmVzdW1hYmxlTXVsdGlSZWdleCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLnJ1bGVzID0gW107XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLm11bHRpUmVnZXhlcyA9IFtdO1xuICAgICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICAgIHRoaXMubGFzdEluZGV4ID0gMDtcbiAgICAgIHRoaXMucmVnZXhJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGdldE1hdGNoZXIoaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpUmVnZXhlc1tpbmRleF0pIHJldHVybiB0aGlzLm11bHRpUmVnZXhlc1tpbmRleF07XG5cbiAgICAgIGNvbnN0IG1hdGNoZXIgPSBuZXcgTXVsdGlSZWdleCgpO1xuICAgICAgdGhpcy5ydWxlcy5zbGljZShpbmRleCkuZm9yRWFjaCgoW3JlLCBvcHRzXSkgPT4gbWF0Y2hlci5hZGRSdWxlKHJlLCBvcHRzKSk7XG4gICAgICBtYXRjaGVyLmNvbXBpbGUoKTtcbiAgICAgIHRoaXMubXVsdGlSZWdleGVzW2luZGV4XSA9IG1hdGNoZXI7XG4gICAgICByZXR1cm4gbWF0Y2hlcjtcbiAgICB9XG5cbiAgICByZXN1bWluZ1NjYW5BdFNhbWVQb3NpdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlZ2V4SW5kZXggIT09IDA7XG4gICAgfVxuXG4gICAgY29uc2lkZXJBbGwoKSB7XG4gICAgICB0aGlzLnJlZ2V4SW5kZXggPSAwO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBhZGRSdWxlKHJlLCBvcHRzKSB7XG4gICAgICB0aGlzLnJ1bGVzLnB1c2goW3JlLCBvcHRzXSk7XG4gICAgICBpZiAob3B0cy50eXBlID09PSBcImJlZ2luXCIpIHRoaXMuY291bnQrKztcbiAgICB9XG5cbiAgICAvKiogQHBhcmFtIHtzdHJpbmd9IHMgKi9cbiAgICBleGVjKHMpIHtcbiAgICAgIGNvbnN0IG0gPSB0aGlzLmdldE1hdGNoZXIodGhpcy5yZWdleEluZGV4KTtcbiAgICAgIG0ubGFzdEluZGV4ID0gdGhpcy5sYXN0SW5kZXg7XG4gICAgICBsZXQgcmVzdWx0ID0gbS5leGVjKHMpO1xuXG4gICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJlY2F1c2Ugd2UgaGF2ZSBubyBlYXN5IHdheSB0byBzYXkgXCJyZXN1bWUgc2Nhbm5pbmcgYXQgdGhlXG4gICAgICAvLyBleGlzdGluZyBwb3NpdGlvbiBidXQgYWxzbyBza2lwIHRoZSBjdXJyZW50IHJ1bGUgT05MWVwiLiBXaGF0IGhhcHBlbnMgaXNcbiAgICAgIC8vIGFsbCBwcmlvciBydWxlcyBhcmUgYWxzbyBza2lwcGVkIHdoaWNoIGNhbiByZXN1bHQgaW4gbWF0Y2hpbmcgdGhlIHdyb25nXG4gICAgICAvLyB0aGluZy4gRXhhbXBsZSBvZiBtYXRjaGluZyBcImJvb2dlclwiOlxuXG4gICAgICAvLyBvdXIgbWF0Y2hlciBpcyBbc3RyaW5nLCBcImJvb2dlclwiLCBudW1iZXJdXG4gICAgICAvL1xuICAgICAgLy8gLi4uLmJvb2dlci4uLi5cblxuICAgICAgLy8gaWYgXCJib29nZXJcIiBpcyBpZ25vcmVkIHRoZW4gd2UnZCByZWFsbHkgbmVlZCBhIHJlZ2V4IHRvIHNjYW4gZnJvbSB0aGVcbiAgICAgIC8vIFNBTUUgcG9zaXRpb24gZm9yIG9ubHk6IFtzdHJpbmcsIG51bWJlcl0gYnV0IGlnbm9yaW5nIFwiYm9vZ2VyXCIgKGlmIGl0XG4gICAgICAvLyB3YXMgdGhlIGZpcnN0IG1hdGNoKSwgYSBzaW1wbGUgcmVzdW1lIHdvdWxkIHNjYW4gYWhlYWQgd2hvIGtub3dzIGhvd1xuICAgICAgLy8gZmFyIGxvb2tpbmcgb25seSBmb3IgXCJudW1iZXJcIiwgaWdub3JpbmcgcG90ZW50aWFsIHN0cmluZyBtYXRjaGVzIChvclxuICAgICAgLy8gZnV0dXJlIFwiYm9vZ2VyXCIgbWF0Y2hlcyB0aGF0IG1pZ2h0IGJlIHZhbGlkLilcblxuICAgICAgLy8gU28gd2hhdCB3ZSBkbzogV2UgZXhlY3V0ZSB0d28gbWF0Y2hlcnMsIG9uZSByZXN1bWluZyBhdCB0aGUgc2FtZVxuICAgICAgLy8gcG9zaXRpb24sIGJ1dCB0aGUgc2Vjb25kIGZ1bGwgbWF0Y2hlciBzdGFydGluZyBhdCB0aGUgcG9zaXRpb24gYWZ0ZXI6XG5cbiAgICAgIC8vICAgICAvLS0tIHJlc3VtZSBmaXJzdCByZWdleCBtYXRjaCBoZXJlIChmb3IgW251bWJlcl0pXG4gICAgICAvLyAgICAgfC8tLS0tIGZ1bGwgbWF0Y2ggaGVyZSBmb3IgW3N0cmluZywgXCJib29nZXJcIiwgbnVtYmVyXVxuICAgICAgLy8gICAgIHZ2XG4gICAgICAvLyAuLi4uYm9vZ2VyLi4uLlxuXG4gICAgICAvLyBXaGljaCBldmVyIHJlc3VsdHMgaW4gYSBtYXRjaCBmaXJzdCBpcyB0aGVuIHVzZWQuIFNvIHRoaXMgMy00IHN0ZXBcbiAgICAgIC8vIHByb2Nlc3MgZXNzZW50aWFsbHkgYWxsb3dzIHVzIHRvIHNheSBcIm1hdGNoIGF0IHRoaXMgcG9zaXRpb24sIGV4Y2x1ZGluZ1xuICAgICAgLy8gYSBwcmlvciBydWxlIHRoYXQgd2FzIGlnbm9yZWRcIi5cbiAgICAgIC8vXG4gICAgICAvLyAxLiBNYXRjaCBcImJvb2dlclwiIGZpcnN0LCBpZ25vcmUuIEFsc28gcHJvdmVzIHRoYXQgW3N0cmluZ10gZG9lcyBub24gbWF0Y2guXG4gICAgICAvLyAyLiBSZXN1bWUgbWF0Y2hpbmcgZm9yIFtudW1iZXJdXG4gICAgICAvLyAzLiBNYXRjaCBhdCBpbmRleCArIDEgZm9yIFtzdHJpbmcsIFwiYm9vZ2VyXCIsIG51bWJlcl1cbiAgICAgIC8vIDQuIElmICMyIGFuZCAjMyByZXN1bHQgaW4gbWF0Y2hlcywgd2hpY2ggY2FtZSBmaXJzdD9cbiAgICAgIGlmICh0aGlzLnJlc3VtaW5nU2NhbkF0U2FtZVBvc2l0aW9uKCkpIHtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuaW5kZXggPT09IHRoaXMubGFzdEluZGV4KSA7IGVsc2UgeyAvLyB1c2UgdGhlIHNlY29uZCBtYXRjaGVyIHJlc3VsdFxuICAgICAgICAgIGNvbnN0IG0yID0gdGhpcy5nZXRNYXRjaGVyKDApO1xuICAgICAgICAgIG0yLmxhc3RJbmRleCA9IHRoaXMubGFzdEluZGV4ICsgMTtcbiAgICAgICAgICByZXN1bHQgPSBtMi5leGVjKHMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5yZWdleEluZGV4ICs9IHJlc3VsdC5wb3NpdGlvbiArIDE7XG4gICAgICAgIGlmICh0aGlzLnJlZ2V4SW5kZXggPT09IHRoaXMuY291bnQpIHtcbiAgICAgICAgICAvLyB3cmFwLWFyb3VuZCB0byBjb25zaWRlcmluZyBhbGwgbWF0Y2hlcyBhZ2FpblxuICAgICAgICAgIHRoaXMuY29uc2lkZXJBbGwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIG1vZGUsIGJ1aWxkcyBhIGh1Z2UgUmVzdW1hYmxlTXVsdGlSZWdleCB0aGF0IGNhbiBiZSB1c2VkIHRvIHdhbGtcbiAgICogdGhlIGNvbnRlbnQgYW5kIGZpbmQgbWF0Y2hlcy5cbiAgICpcbiAgICogQHBhcmFtIHtDb21waWxlZE1vZGV9IG1vZGVcbiAgICogQHJldHVybnMge1Jlc3VtYWJsZU11bHRpUmVnZXh9XG4gICAqL1xuICBmdW5jdGlvbiBidWlsZE1vZGVSZWdleChtb2RlKSB7XG4gICAgY29uc3QgbW0gPSBuZXcgUmVzdW1hYmxlTXVsdGlSZWdleCgpO1xuXG4gICAgbW9kZS5jb250YWlucy5mb3JFYWNoKHRlcm0gPT4gbW0uYWRkUnVsZSh0ZXJtLmJlZ2luLCB7IHJ1bGU6IHRlcm0sIHR5cGU6IFwiYmVnaW5cIiB9KSk7XG5cbiAgICBpZiAobW9kZS50ZXJtaW5hdG9yRW5kKSB7XG4gICAgICBtbS5hZGRSdWxlKG1vZGUudGVybWluYXRvckVuZCwgeyB0eXBlOiBcImVuZFwiIH0pO1xuICAgIH1cbiAgICBpZiAobW9kZS5pbGxlZ2FsKSB7XG4gICAgICBtbS5hZGRSdWxlKG1vZGUuaWxsZWdhbCwgeyB0eXBlOiBcImlsbGVnYWxcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW07XG4gIH1cblxuICAvKiogc2tpcCB2cyBhYm9ydCB2cyBpZ25vcmVcbiAgICpcbiAgICogQHNraXAgICAtIFRoZSBtb2RlIGlzIHN0aWxsIGVudGVyZWQgYW5kIGV4aXRlZCBub3JtYWxseSAoYW5kIGNvbnRhaW5zIHJ1bGVzIGFwcGx5KSxcbiAgICogICAgICAgICAgIGJ1dCBhbGwgY29udGVudCBpcyBoZWxkIGFuZCBhZGRlZCB0byB0aGUgcGFyZW50IGJ1ZmZlciByYXRoZXIgdGhhbiBiZWluZ1xuICAgKiAgICAgICAgICAgb3V0cHV0IHdoZW4gdGhlIG1vZGUgZW5kcy4gIE1vc3RseSB1c2VkIHdpdGggYHN1Ymxhbmd1YWdlYCB0byBidWlsZCB1cFxuICAgKiAgICAgICAgICAgYSBzaW5nbGUgbGFyZ2UgYnVmZmVyIHRoYW4gY2FuIGJlIHBhcnNlZCBieSBzdWJsYW5ndWFnZS5cbiAgICpcbiAgICogICAgICAgICAgICAgLSBUaGUgbW9kZSBiZWdpbiBhbmRzIGVuZHMgbm9ybWFsbHkuXG4gICAqICAgICAgICAgICAgIC0gQ29udGVudCBtYXRjaGVkIGlzIGFkZGVkIHRvIHRoZSBwYXJlbnQgbW9kZSBidWZmZXIuXG4gICAqICAgICAgICAgICAgIC0gVGhlIHBhcnNlciBjdXJzb3IgaXMgbW92ZWQgZm9yd2FyZCBub3JtYWxseS5cbiAgICpcbiAgICogQGFib3J0ICAtIEEgaGFjayBwbGFjZWhvbGRlciB1bnRpbCB3ZSBoYXZlIGlnbm9yZS4gIEFib3J0cyB0aGUgbW9kZSAoYXMgaWYgaXRcbiAgICogICAgICAgICAgIG5ldmVyIG1hdGNoZWQpIGJ1dCBET0VTIE5PVCBjb250aW51ZSB0byBtYXRjaCBzdWJzZXF1ZW50IGBjb250YWluc2BcbiAgICogICAgICAgICAgIG1vZGVzLiAgQWJvcnQgaXMgYmFkL3N1Ym9wdGltYWwgYmVjYXVzZSBpdCBjYW4gcmVzdWx0IGluIG1vZGVzXG4gICAqICAgICAgICAgICBmYXJ0aGVyIGRvd24gbm90IGdldHRpbmcgYXBwbGllZCBiZWNhdXNlIGFuIGVhcmxpZXIgcnVsZSBlYXRzIHRoZVxuICAgKiAgICAgICAgICAgY29udGVudCBidXQgdGhlbiBhYm9ydHMuXG4gICAqXG4gICAqICAgICAgICAgICAgIC0gVGhlIG1vZGUgZG9lcyBub3QgYmVnaW4uXG4gICAqICAgICAgICAgICAgIC0gQ29udGVudCBtYXRjaGVkIGJ5IGBiZWdpbmAgaXMgYWRkZWQgdG8gdGhlIG1vZGUgYnVmZmVyLlxuICAgKiAgICAgICAgICAgICAtIFRoZSBwYXJzZXIgY3Vyc29yIGlzIG1vdmVkIGZvcndhcmQgYWNjb3JkaW5nbHkuXG4gICAqXG4gICAqIEBpZ25vcmUgLSBJZ25vcmVzIHRoZSBtb2RlIChhcyBpZiBpdCBuZXZlciBtYXRjaGVkKSBhbmQgY29udGludWVzIHRvIG1hdGNoIGFueVxuICAgKiAgICAgICAgICAgc3Vic2VxdWVudCBgY29udGFpbnNgIG1vZGVzLiAgSWdub3JlIGlzbid0IHRlY2huaWNhbGx5IHBvc3NpYmxlIHdpdGhcbiAgICogICAgICAgICAgIHRoZSBjdXJyZW50IHBhcnNlciBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogICAgICAgICAgICAgLSBUaGUgbW9kZSBkb2VzIG5vdCBiZWdpbi5cbiAgICogICAgICAgICAgICAgLSBDb250ZW50IG1hdGNoZWQgYnkgYGJlZ2luYCBpcyBpZ25vcmVkLlxuICAgKiAgICAgICAgICAgICAtIFRoZSBwYXJzZXIgY3Vyc29yIGlzIG5vdCBtb3ZlZCBmb3J3YXJkLlxuICAgKi9cblxuICAvKipcbiAgICogQ29tcGlsZXMgYW4gaW5kaXZpZHVhbCBtb2RlXG4gICAqXG4gICAqIFRoaXMgY2FuIHJhaXNlIGFuIGVycm9yIGlmIHRoZSBtb2RlIGNvbnRhaW5zIGNlcnRhaW4gZGV0ZWN0YWJsZSBrbm93biBsb2dpY1xuICAgKiBpc3N1ZXMuXG4gICAqIEBwYXJhbSB7TW9kZX0gbW9kZVxuICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZSB8IG51bGx9IFtwYXJlbnRdXG4gICAqIEByZXR1cm5zIHtDb21waWxlZE1vZGUgfCBuZXZlcn1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBpbGVNb2RlKG1vZGUsIHBhcmVudCkge1xuICAgIGNvbnN0IGNtb2RlID0gLyoqIEB0eXBlIENvbXBpbGVkTW9kZSAqLyAobW9kZSk7XG4gICAgaWYgKG1vZGUuaXNDb21waWxlZCkgcmV0dXJuIGNtb2RlO1xuXG4gICAgW1xuICAgICAgc2NvcGVDbGFzc05hbWUsXG4gICAgICAvLyBkbyB0aGlzIGVhcmx5IHNvIGNvbXBpbGVyIGV4dGVuc2lvbnMgZ2VuZXJhbGx5IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXRcbiAgICAgIC8vIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIG1hdGNoL2JlZ2luXG4gICAgICBjb21waWxlTWF0Y2gsXG4gICAgICBNdWx0aUNsYXNzLFxuICAgICAgYmVmb3JlTWF0Y2hFeHRcbiAgICBdLmZvckVhY2goZXh0ID0+IGV4dChtb2RlLCBwYXJlbnQpKTtcblxuICAgIGxhbmd1YWdlLmNvbXBpbGVyRXh0ZW5zaW9ucy5mb3JFYWNoKGV4dCA9PiBleHQobW9kZSwgcGFyZW50KSk7XG5cbiAgICAvLyBfX2JlZm9yZUJlZ2luIGlzIGNvbnNpZGVyZWQgcHJpdmF0ZSBBUEksIGludGVybmFsIHVzZSBvbmx5XG4gICAgbW9kZS5fX2JlZm9yZUJlZ2luID0gbnVsbDtcblxuICAgIFtcbiAgICAgIGJlZ2luS2V5d29yZHMsXG4gICAgICAvLyBkbyB0aGlzIGxhdGVyIHNvIGNvbXBpbGVyIGV4dGVuc2lvbnMgdGhhdCBjb21lIGVhcmxpZXIgaGF2ZSBhY2Nlc3MgdG8gdGhlXG4gICAgICAvLyByYXcgYXJyYXkgaWYgdGhleSB3YW50ZWQgdG8gcGVyaGFwcyBtYW5pcHVsYXRlIGl0LCBldGMuXG4gICAgICBjb21waWxlSWxsZWdhbCxcbiAgICAgIC8vIGRlZmF1bHQgdG8gMSByZWxldmFuY2UgaWYgbm90IHNwZWNpZmllZFxuICAgICAgY29tcGlsZVJlbGV2YW5jZVxuICAgIF0uZm9yRWFjaChleHQgPT4gZXh0KG1vZGUsIHBhcmVudCkpO1xuXG4gICAgbW9kZS5pc0NvbXBpbGVkID0gdHJ1ZTtcblxuICAgIGxldCBrZXl3b3JkUGF0dGVybiA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBtb2RlLmtleXdvcmRzID09PSBcIm9iamVjdFwiICYmIG1vZGUua2V5d29yZHMuJHBhdHRlcm4pIHtcbiAgICAgIC8vIHdlIG5lZWQgYSBjb3B5IGJlY2F1c2Uga2V5d29yZHMgbWlnaHQgYmUgY29tcGlsZWQgbXVsdGlwbGUgdGltZXNcbiAgICAgIC8vIHNvIHdlIGNhbid0IGdvIGRlbGV0aW5nICRwYXR0ZXJuIGZyb20gdGhlIG9yaWdpbmFsIG9uIHRoZSBmaXJzdFxuICAgICAgLy8gcGFzc1xuICAgICAgbW9kZS5rZXl3b3JkcyA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGUua2V5d29yZHMpO1xuICAgICAga2V5d29yZFBhdHRlcm4gPSBtb2RlLmtleXdvcmRzLiRwYXR0ZXJuO1xuICAgICAgZGVsZXRlIG1vZGUua2V5d29yZHMuJHBhdHRlcm47XG4gICAgfVxuICAgIGtleXdvcmRQYXR0ZXJuID0ga2V5d29yZFBhdHRlcm4gfHwgL1xcdysvO1xuXG4gICAgaWYgKG1vZGUua2V5d29yZHMpIHtcbiAgICAgIG1vZGUua2V5d29yZHMgPSBjb21waWxlS2V5d29yZHMobW9kZS5rZXl3b3JkcywgbGFuZ3VhZ2UuY2FzZV9pbnNlbnNpdGl2ZSk7XG4gICAgfVxuXG4gICAgY21vZGUua2V5d29yZFBhdHRlcm5SZSA9IGxhbmdSZShrZXl3b3JkUGF0dGVybiwgdHJ1ZSk7XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBpZiAoIW1vZGUuYmVnaW4pIG1vZGUuYmVnaW4gPSAvXFxCfFxcYi87XG4gICAgICBjbW9kZS5iZWdpblJlID0gbGFuZ1JlKGNtb2RlLmJlZ2luKTtcbiAgICAgIGlmICghbW9kZS5lbmQgJiYgIW1vZGUuZW5kc1dpdGhQYXJlbnQpIG1vZGUuZW5kID0gL1xcQnxcXGIvO1xuICAgICAgaWYgKG1vZGUuZW5kKSBjbW9kZS5lbmRSZSA9IGxhbmdSZShjbW9kZS5lbmQpO1xuICAgICAgY21vZGUudGVybWluYXRvckVuZCA9IHNvdXJjZShjbW9kZS5lbmQpIHx8ICcnO1xuICAgICAgaWYgKG1vZGUuZW5kc1dpdGhQYXJlbnQgJiYgcGFyZW50LnRlcm1pbmF0b3JFbmQpIHtcbiAgICAgICAgY21vZGUudGVybWluYXRvckVuZCArPSAobW9kZS5lbmQgPyAnfCcgOiAnJykgKyBwYXJlbnQudGVybWluYXRvckVuZDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1vZGUuaWxsZWdhbCkgY21vZGUuaWxsZWdhbFJlID0gbGFuZ1JlKC8qKiBAdHlwZSB7UmVnRXhwIHwgc3RyaW5nfSAqLyAobW9kZS5pbGxlZ2FsKSk7XG4gICAgaWYgKCFtb2RlLmNvbnRhaW5zKSBtb2RlLmNvbnRhaW5zID0gW107XG5cbiAgICBtb2RlLmNvbnRhaW5zID0gW10uY29uY2F0KC4uLm1vZGUuY29udGFpbnMubWFwKGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBleHBhbmRPckNsb25lTW9kZShjID09PSAnc2VsZicgPyBtb2RlIDogYyk7XG4gICAgfSkpO1xuICAgIG1vZGUuY29udGFpbnMuZm9yRWFjaChmdW5jdGlvbihjKSB7IGNvbXBpbGVNb2RlKC8qKiBAdHlwZSBNb2RlICovIChjKSwgY21vZGUpOyB9KTtcblxuICAgIGlmIChtb2RlLnN0YXJ0cykge1xuICAgICAgY29tcGlsZU1vZGUobW9kZS5zdGFydHMsIHBhcmVudCk7XG4gICAgfVxuXG4gICAgY21vZGUubWF0Y2hlciA9IGJ1aWxkTW9kZVJlZ2V4KGNtb2RlKTtcbiAgICByZXR1cm4gY21vZGU7XG4gIH1cblxuICBpZiAoIWxhbmd1YWdlLmNvbXBpbGVyRXh0ZW5zaW9ucykgbGFuZ3VhZ2UuY29tcGlsZXJFeHRlbnNpb25zID0gW107XG5cbiAgLy8gc2VsZiBpcyBub3QgdmFsaWQgYXQgdGhlIHRvcC1sZXZlbFxuICBpZiAobGFuZ3VhZ2UuY29udGFpbnMgJiYgbGFuZ3VhZ2UuY29udGFpbnMuaW5jbHVkZXMoJ3NlbGYnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkVSUjogY29udGFpbnMgYHNlbGZgIGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGxhbmd1YWdlLiAgU2VlIGRvY3VtZW50YXRpb24uXCIpO1xuICB9XG5cbiAgLy8gd2UgbmVlZCBhIG51bGwgb2JqZWN0LCB3aGljaCBpbmhlcml0IHdpbGwgZ3VhcmFudGVlXG4gIGxhbmd1YWdlLmNsYXNzTmFtZUFsaWFzZXMgPSBpbmhlcml0JDEobGFuZ3VhZ2UuY2xhc3NOYW1lQWxpYXNlcyB8fCB7fSk7XG5cbiAgcmV0dXJuIGNvbXBpbGVNb2RlKC8qKiBAdHlwZSBNb2RlICovIChsYW5ndWFnZSkpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBtb2RlIGhhcyBhIGRlcGVuZGVuY3kgb24gaXQncyBwYXJlbnQgb3Igbm90XG4gKlxuICogSWYgYSBtb2RlIGRvZXMgaGF2ZSBhIHBhcmVudCBkZXBlbmRlbmN5IHRoZW4gb2Z0ZW4gd2UgbmVlZCB0byBjbG9uZSBpdCBpZlxuICogaXQncyB1c2VkIGluIG11bHRpcGxlIHBsYWNlcyBzbyB0aGF0IGVhY2ggY29weSBwb2ludHMgdG8gdGhlIGNvcnJlY3QgcGFyZW50LFxuICogd2hlcmUtYXMgbW9kZXMgd2l0aG91dCBhIHBhcmVudCBjYW4gb2Z0ZW4gc2FmZWx5IGJlIHJlLXVzZWQgYXQgdGhlIGJvdHRvbSBvZlxuICogYSBtb2RlIGNoYWluLlxuICpcbiAqIEBwYXJhbSB7TW9kZSB8IG51bGx9IG1vZGVcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIGlzIHRoZXJlIGEgZGVwZW5kZW5jeSBvbiB0aGUgcGFyZW50P1xuICogKi9cbmZ1bmN0aW9uIGRlcGVuZGVuY3lPblBhcmVudChtb2RlKSB7XG4gIGlmICghbW9kZSkgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiBtb2RlLmVuZHNXaXRoUGFyZW50IHx8IGRlcGVuZGVuY3lPblBhcmVudChtb2RlLnN0YXJ0cyk7XG59XG5cbi8qKlxuICogRXhwYW5kcyBhIG1vZGUgb3IgY2xvbmVzIGl0IGlmIG5lY2Vzc2FyeVxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBtb2RlcyB3aXRoIHBhcmVudGFsIGRlcGVuZGVuY2VpcyAoc2VlIG5vdGVzIG9uXG4gKiBgZGVwZW5kZW5jeU9uUGFyZW50YCkgYW5kIGZvciBub2RlcyB0aGF0IGhhdmUgYHZhcmlhbnRzYCAtIHdoaWNoIG11c3QgdGhlbiBiZVxuICogZXhwbG9kZWQgaW50byB0aGVpciBvd24gaW5kaXZpZHVhbCBtb2RlcyBhdCBjb21waWxlIHRpbWUuXG4gKlxuICogQHBhcmFtIHtNb2RlfSBtb2RlXG4gKiBAcmV0dXJucyB7TW9kZSB8IE1vZGVbXX1cbiAqICovXG5mdW5jdGlvbiBleHBhbmRPckNsb25lTW9kZShtb2RlKSB7XG4gIGlmIChtb2RlLnZhcmlhbnRzICYmICFtb2RlLmNhY2hlZFZhcmlhbnRzKSB7XG4gICAgbW9kZS5jYWNoZWRWYXJpYW50cyA9IG1vZGUudmFyaWFudHMubWFwKGZ1bmN0aW9uKHZhcmlhbnQpIHtcbiAgICAgIHJldHVybiBpbmhlcml0JDEobW9kZSwgeyB2YXJpYW50czogbnVsbCB9LCB2YXJpYW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEVYUEFORFxuICAvLyBpZiB3ZSBoYXZlIHZhcmlhbnRzIHRoZW4gZXNzZW50aWFsbHkgXCJyZXBsYWNlXCIgdGhlIG1vZGUgd2l0aCB0aGUgdmFyaWFudHNcbiAgLy8gdGhpcyBoYXBwZW5zIGluIGNvbXBpbGVNb2RlLCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tXG4gIGlmIChtb2RlLmNhY2hlZFZhcmlhbnRzKSB7XG4gICAgcmV0dXJuIG1vZGUuY2FjaGVkVmFyaWFudHM7XG4gIH1cblxuICAvLyBDTE9ORVxuICAvLyBpZiB3ZSBoYXZlIGRlcGVuZGVuY2llcyBvbiBwYXJlbnRzIHRoZW4gd2UgbmVlZCBhIHVuaXF1ZVxuICAvLyBpbnN0YW5jZSBvZiBvdXJzZWx2ZXMsIHNvIHdlIGNhbiBiZSByZXVzZWQgd2l0aCBtYW55XG4gIC8vIGRpZmZlcmVudCBwYXJlbnRzIHdpdGhvdXQgaXNzdWVcbiAgaWYgKGRlcGVuZGVuY3lPblBhcmVudChtb2RlKSkge1xuICAgIHJldHVybiBpbmhlcml0JDEobW9kZSwgeyBzdGFydHM6IG1vZGUuc3RhcnRzID8gaW5oZXJpdCQxKG1vZGUuc3RhcnRzKSA6IG51bGwgfSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmlzRnJvemVuKG1vZGUpKSB7XG4gICAgcmV0dXJuIGluaGVyaXQkMShtb2RlKTtcbiAgfVxuXG4gIC8vIG5vIHNwZWNpYWwgZGVwZW5kZW5jeSBpc3N1ZXMsIGp1c3QgcmV0dXJuIG91cnNlbHZlc1xuICByZXR1cm4gbW9kZTtcbn1cblxudmFyIHZlcnNpb24gPSBcIjExLjYuMFwiO1xuXG5jbGFzcyBIVE1MSW5qZWN0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlYXNvbiwgaHRtbCkge1xuICAgIHN1cGVyKHJlYXNvbik7XG4gICAgdGhpcy5uYW1lID0gXCJIVE1MSW5qZWN0aW9uRXJyb3JcIjtcbiAgICB0aGlzLmh0bWwgPSBodG1sO1xuICB9XG59XG5cbi8qXG5TeW50YXggaGlnaGxpZ2h0aW5nIHdpdGggbGFuZ3VhZ2UgYXV0b2RldGVjdGlvbi5cbmh0dHBzOi8vaGlnaGxpZ2h0anMub3JnL1xuKi9cblxuLyoqXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Nb2RlfSBNb2RlXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Db21waWxlZE1vZGV9IENvbXBpbGVkTW9kZVxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuQ29tcGlsZWRTY29wZX0gQ29tcGlsZWRTY29wZVxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuTGFuZ3VhZ2V9IExhbmd1YWdlXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5ITEpTQXBpfSBITEpTQXBpXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5ITEpTUGx1Z2lufSBITEpTUGx1Z2luXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5QbHVnaW5FdmVudH0gUGx1Z2luRXZlbnRcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkhMSlNPcHRpb25zfSBITEpTT3B0aW9uc1xuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuTGFuZ3VhZ2VGbn0gTGFuZ3VhZ2VGblxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuSGlnaGxpZ2h0ZWRIVE1MRWxlbWVudH0gSGlnaGxpZ2h0ZWRIVE1MRWxlbWVudFxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuQmVmb3JlSGlnaGxpZ2h0Q29udGV4dH0gQmVmb3JlSGlnaGxpZ2h0Q29udGV4dFxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzL3ByaXZhdGUnKS5NYXRjaFR5cGV9IE1hdGNoVHlwZVxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzL3ByaXZhdGUnKS5LZXl3b3JkRGF0YX0gS2V5d29yZERhdGFcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcy9wcml2YXRlJykuRW5oYW5jZWRNYXRjaH0gRW5oYW5jZWRNYXRjaFxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzL3ByaXZhdGUnKS5Bbm5vdGF0ZWRFcnJvcn0gQW5ub3RhdGVkRXJyb3JcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkF1dG9IaWdobGlnaHRSZXN1bHR9IEF1dG9IaWdobGlnaHRSZXN1bHRcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkhpZ2hsaWdodE9wdGlvbnN9IEhpZ2hsaWdodE9wdGlvbnNcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkhpZ2hsaWdodFJlc3VsdH0gSGlnaGxpZ2h0UmVzdWx0XG4qL1xuXG5cbmNvbnN0IGVzY2FwZSA9IGVzY2FwZUhUTUw7XG5jb25zdCBpbmhlcml0ID0gaW5oZXJpdCQxO1xuY29uc3QgTk9fTUFUQ0ggPSBTeW1ib2woXCJub21hdGNoXCIpO1xuY29uc3QgTUFYX0tFWVdPUkRfSElUUyA9IDc7XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IGhsanMgLSBvYmplY3QgdGhhdCBpcyBleHRlbmRlZCAobGVnYWN5KVxuICogQHJldHVybnMge0hMSlNBcGl9XG4gKi9cbmNvbnN0IEhMSlMgPSBmdW5jdGlvbihobGpzKSB7XG4gIC8vIEdsb2JhbCBpbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCB3aXRoaW4gdGhlIGhpZ2hsaWdodC5qcyBsaWJyYXJ5LlxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIExhbmd1YWdlPn0gKi9cbiAgY29uc3QgbGFuZ3VhZ2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBhbGlhc2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLyoqIEB0eXBlIHtITEpTUGx1Z2luW119ICovXG4gIGNvbnN0IHBsdWdpbnMgPSBbXTtcblxuICAvLyBzYWZlL3Byb2R1Y3Rpb24gbW9kZSAtIHN3YWxsb3dzIG1vcmUgZXJyb3JzLCB0cmllcyB0byBrZWVwIHJ1bm5pbmdcbiAgLy8gZXZlbiBpZiBhIHNpbmdsZSBzeW50YXggb3IgcGFyc2UgaGl0cyBhIGZhdGFsIGVycm9yXG4gIGxldCBTQUZFX01PREUgPSB0cnVlO1xuICBjb25zdCBMQU5HVUFHRV9OT1RfRk9VTkQgPSBcIkNvdWxkIG5vdCBmaW5kIHRoZSBsYW5ndWFnZSAne30nLCBkaWQgeW91IGZvcmdldCB0byBsb2FkL2luY2x1ZGUgYSBsYW5ndWFnZSBtb2R1bGU/XCI7XG4gIC8qKiBAdHlwZSB7TGFuZ3VhZ2V9ICovXG4gIGNvbnN0IFBMQUlOVEVYVF9MQU5HVUFHRSA9IHsgZGlzYWJsZUF1dG9kZXRlY3Q6IHRydWUsIG5hbWU6ICdQbGFpbiB0ZXh0JywgY29udGFpbnM6IFtdIH07XG5cbiAgLy8gR2xvYmFsIG9wdGlvbnMgdXNlZCB3aGVuIHdpdGhpbiBleHRlcm5hbCBBUElzLiBUaGlzIGlzIG1vZGlmaWVkIHdoZW5cbiAgLy8gY2FsbGluZyB0aGUgYGhsanMuY29uZmlndXJlYCBmdW5jdGlvbi5cbiAgLyoqIEB0eXBlIEhMSlNPcHRpb25zICovXG4gIGxldCBvcHRpb25zID0ge1xuICAgIGlnbm9yZVVuZXNjYXBlZEhUTUw6IGZhbHNlLFxuICAgIHRocm93VW5lc2NhcGVkSFRNTDogZmFsc2UsXG4gICAgbm9IaWdobGlnaHRSZTogL14obm8tP2hpZ2hsaWdodCkkL2ksXG4gICAgbGFuZ3VhZ2VEZXRlY3RSZTogL1xcYmxhbmcoPzp1YWdlKT8tKFtcXHctXSspXFxiL2ksXG4gICAgY2xhc3NQcmVmaXg6ICdobGpzLScsXG4gICAgY3NzU2VsZWN0b3I6ICdwcmUgY29kZScsXG4gICAgbGFuZ3VhZ2VzOiBudWxsLFxuICAgIC8vIGJldGEgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzdWJqZWN0IHRvIGNoYW5nZSwgd2VsY29tZSB0byBkaXNjdXNzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMTA4NlxuICAgIF9fZW1pdHRlcjogVG9rZW5UcmVlRW1pdHRlclxuICB9O1xuXG4gIC8qIFV0aWxpdHkgZnVuY3Rpb25zICovXG5cbiAgLyoqXG4gICAqIFRlc3RzIGEgbGFuZ3VhZ2UgbmFtZSB0byBzZWUgaWYgaGlnaGxpZ2h0aW5nIHNob3VsZCBiZSBza2lwcGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZU5hbWVcbiAgICovXG4gIGZ1bmN0aW9uIHNob3VsZE5vdEhpZ2hsaWdodChsYW5ndWFnZU5hbWUpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5ub0hpZ2hsaWdodFJlLnRlc3QobGFuZ3VhZ2VOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hpZ2hsaWdodGVkSFRNTEVsZW1lbnR9IGJsb2NrIC0gdGhlIEhUTUwgZWxlbWVudCB0byBkZXRlcm1pbmUgbGFuZ3VhZ2UgZm9yXG4gICAqL1xuICBmdW5jdGlvbiBibG9ja0xhbmd1YWdlKGJsb2NrKSB7XG4gICAgbGV0IGNsYXNzZXMgPSBibG9jay5jbGFzc05hbWUgKyAnICc7XG5cbiAgICBjbGFzc2VzICs9IGJsb2NrLnBhcmVudE5vZGUgPyBibG9jay5wYXJlbnROb2RlLmNsYXNzTmFtZSA6ICcnO1xuXG4gICAgLy8gbGFuZ3VhZ2UtKiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgbm9uLXByZWZpeGVkIGNsYXNzIG5hbWVzLlxuICAgIGNvbnN0IG1hdGNoID0gb3B0aW9ucy5sYW5ndWFnZURldGVjdFJlLmV4ZWMoY2xhc3Nlcyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKG1hdGNoWzFdKTtcbiAgICAgIGlmICghbGFuZ3VhZ2UpIHtcbiAgICAgICAgd2FybihMQU5HVUFHRV9OT1RfRk9VTkQucmVwbGFjZShcInt9XCIsIG1hdGNoWzFdKSk7XG4gICAgICAgIHdhcm4oXCJGYWxsaW5nIGJhY2sgdG8gbm8taGlnaGxpZ2h0IG1vZGUgZm9yIHRoaXMgYmxvY2suXCIsIGJsb2NrKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsYW5ndWFnZSA/IG1hdGNoWzFdIDogJ25vLWhpZ2hsaWdodCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXNcbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAuZmluZCgoX2NsYXNzKSA9PiBzaG91bGROb3RIaWdobGlnaHQoX2NsYXNzKSB8fCBnZXRMYW5ndWFnZShfY2xhc3MpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3JlIGhpZ2hsaWdodGluZyBmdW5jdGlvbi5cbiAgICpcbiAgICogT0xEIEFQSVxuICAgKiBoaWdobGlnaHQobGFuZywgY29kZSwgaWdub3JlSWxsZWdhbHMsIGNvbnRpbnVhdGlvbilcbiAgICpcbiAgICogTkVXIEFQSVxuICAgKiBoaWdobGlnaHQoY29kZSwge2xhbmcsIGlnbm9yZUlsbGVnYWxzfSlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGVPckxhbmd1YWdlTmFtZSAtIHRoZSBsYW5ndWFnZSB0byB1c2UgZm9yIGhpZ2hsaWdodGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZyB8IEhpZ2hsaWdodE9wdGlvbnN9IG9wdGlvbnNPckNvZGUgLSB0aGUgY29kZSB0byBoaWdobGlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBbaWdub3JlSWxsZWdhbHNdIC0gd2hldGhlciB0byBpZ25vcmUgaWxsZWdhbCBtYXRjaGVzLCBkZWZhdWx0IGlzIHRvIGJhaWxcbiAgICpcbiAgICogQHJldHVybnMge0hpZ2hsaWdodFJlc3VsdH0gUmVzdWx0IC0gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgcmVzdWx0XG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYW5ndWFnZSAtIHRoZSBsYW5ndWFnZSBuYW1lXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByZWxldmFuY2UgLSB0aGUgcmVsZXZhbmNlIHNjb3JlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZSAtIHRoZSBoaWdobGlnaHRlZCBIVE1MIGNvZGVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGNvZGUgLSB0aGUgb3JpZ2luYWwgcmF3IGNvZGVcbiAgICogQHByb3BlcnR5IHtDb21waWxlZE1vZGV9IHRvcCAtIHRvcCBvZiB0aGUgY3VycmVudCBtb2RlIHN0YWNrXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaWxsZWdhbCAtIGluZGljYXRlcyB3aGV0aGVyIGFueSBpbGxlZ2FsIG1hdGNoZXMgd2VyZSBmb3VuZFxuICAqL1xuICBmdW5jdGlvbiBoaWdobGlnaHQoY29kZU9yTGFuZ3VhZ2VOYW1lLCBvcHRpb25zT3JDb2RlLCBpZ25vcmVJbGxlZ2Fscykge1xuICAgIGxldCBjb2RlID0gXCJcIjtcbiAgICBsZXQgbGFuZ3VhZ2VOYW1lID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNPckNvZGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvZGUgPSBjb2RlT3JMYW5ndWFnZU5hbWU7XG4gICAgICBpZ25vcmVJbGxlZ2FscyA9IG9wdGlvbnNPckNvZGUuaWdub3JlSWxsZWdhbHM7XG4gICAgICBsYW5ndWFnZU5hbWUgPSBvcHRpb25zT3JDb2RlLmxhbmd1YWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBvbGQgQVBJXG4gICAgICBkZXByZWNhdGVkKFwiMTAuNy4wXCIsIFwiaGlnaGxpZ2h0KGxhbmcsIGNvZGUsIC4uLmFyZ3MpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuXCIpO1xuICAgICAgZGVwcmVjYXRlZChcIjEwLjcuMFwiLCBcIlBsZWFzZSB1c2UgaGlnaGxpZ2h0KGNvZGUsIG9wdGlvbnMpIGluc3RlYWQuXFxuaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjI3N1wiKTtcbiAgICAgIGxhbmd1YWdlTmFtZSA9IGNvZGVPckxhbmd1YWdlTmFtZTtcbiAgICAgIGNvZGUgPSBvcHRpb25zT3JDb2RlO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzMxNDlcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gICAgaWYgKGlnbm9yZUlsbGVnYWxzID09PSB1bmRlZmluZWQpIHsgaWdub3JlSWxsZWdhbHMgPSB0cnVlOyB9XG5cbiAgICAvKiogQHR5cGUge0JlZm9yZUhpZ2hsaWdodENvbnRleHR9ICovXG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgIGNvZGUsXG4gICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VOYW1lXG4gICAgfTtcbiAgICAvLyB0aGUgcGx1Z2luIGNhbiBjaGFuZ2UgdGhlIGRlc2lyZWQgbGFuZ3VhZ2Ugb3IgdGhlIGNvZGUgdG8gYmUgaGlnaGxpZ2h0ZWRcbiAgICAvLyBqdXN0IGJlIGNoYW5naW5nIHRoZSBvYmplY3QgaXQgd2FzIHBhc3NlZFxuICAgIGZpcmUoXCJiZWZvcmU6aGlnaGxpZ2h0XCIsIGNvbnRleHQpO1xuXG4gICAgLy8gYSBiZWZvcmUgcGx1Z2luIGNhbiB1c3VycCB0aGUgcmVzdWx0IGNvbXBsZXRlbHkgYnkgcHJvdmlkaW5nIGl0J3Mgb3duXG4gICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBldmVuIG5lZWQgdG8gY2FsbCBoaWdobGlnaHRcbiAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LnJlc3VsdFxuICAgICAgPyBjb250ZXh0LnJlc3VsdFxuICAgICAgOiBfaGlnaGxpZ2h0KGNvbnRleHQubGFuZ3VhZ2UsIGNvbnRleHQuY29kZSwgaWdub3JlSWxsZWdhbHMpO1xuXG4gICAgcmVzdWx0LmNvZGUgPSBjb250ZXh0LmNvZGU7XG4gICAgLy8gdGhlIHBsdWdpbiBjYW4gY2hhbmdlIGFueXRoaW5nIGluIHJlc3VsdCB0byBzdWl0ZSBpdFxuICAgIGZpcmUoXCJhZnRlcjpoaWdobGlnaHRcIiwgcmVzdWx0KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogcHJpdmF0ZSBoaWdobGlnaHQgdGhhdCdzIHVzZWQgaW50ZXJuYWxseSBhbmQgZG9lcyBub3QgZmlyZSBjYWxsYmFja3NcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlTmFtZSAtIHRoZSBsYW5ndWFnZSB0byB1c2UgZm9yIGhpZ2hsaWdodGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZVRvSGlnaGxpZ2h0IC0gdGhlIGNvZGUgdG8gaGlnaGxpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbj99IFtpZ25vcmVJbGxlZ2Fsc10gLSB3aGV0aGVyIHRvIGlnbm9yZSBpbGxlZ2FsIG1hdGNoZXMsIGRlZmF1bHQgaXMgdG8gYmFpbFxuICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZT99IFtjb250aW51YXRpb25dIC0gY3VycmVudCBjb250aW51YXRpb24gbW9kZSwgaWYgYW55XG4gICAqIEByZXR1cm5zIHtIaWdobGlnaHRSZXN1bHR9IC0gcmVzdWx0IG9mIHRoZSBoaWdobGlnaHQgb3BlcmF0aW9uXG4gICovXG4gIGZ1bmN0aW9uIF9oaWdobGlnaHQobGFuZ3VhZ2VOYW1lLCBjb2RlVG9IaWdobGlnaHQsIGlnbm9yZUlsbGVnYWxzLCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBrZXl3b3JkSGl0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4ga2V5d29yZCBkYXRhIGlmIGEgbWF0Y2ggaXMgYSBrZXl3b3JkXG4gICAgICogQHBhcmFtIHtDb21waWxlZE1vZGV9IG1vZGUgLSBjdXJyZW50IG1vZGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWF0Y2hUZXh0IC0gdGhlIHRleHR1YWwgbWF0Y2hcbiAgICAgKiBAcmV0dXJucyB7S2V5d29yZERhdGEgfCBmYWxzZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBrZXl3b3JkRGF0YShtb2RlLCBtYXRjaFRleHQpIHtcbiAgICAgIHJldHVybiBtb2RlLmtleXdvcmRzW21hdGNoVGV4dF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0tleXdvcmRzKCkge1xuICAgICAgaWYgKCF0b3Aua2V5d29yZHMpIHtcbiAgICAgICAgZW1pdHRlci5hZGRUZXh0KG1vZGVCdWZmZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBsYXN0SW5kZXggPSAwO1xuICAgICAgdG9wLmtleXdvcmRQYXR0ZXJuUmUubGFzdEluZGV4ID0gMDtcbiAgICAgIGxldCBtYXRjaCA9IHRvcC5rZXl3b3JkUGF0dGVyblJlLmV4ZWMobW9kZUJ1ZmZlcik7XG4gICAgICBsZXQgYnVmID0gXCJcIjtcblxuICAgICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGJ1ZiArPSBtb2RlQnVmZmVyLnN1YnN0cmluZyhsYXN0SW5kZXgsIG1hdGNoLmluZGV4KTtcbiAgICAgICAgY29uc3Qgd29yZCA9IGxhbmd1YWdlLmNhc2VfaW5zZW5zaXRpdmUgPyBtYXRjaFswXS50b0xvd2VyQ2FzZSgpIDogbWF0Y2hbMF07XG4gICAgICAgIGNvbnN0IGRhdGEgPSBrZXl3b3JkRGF0YSh0b3AsIHdvcmQpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGNvbnN0IFtraW5kLCBrZXl3b3JkUmVsZXZhbmNlXSA9IGRhdGE7XG4gICAgICAgICAgZW1pdHRlci5hZGRUZXh0KGJ1Zik7XG4gICAgICAgICAgYnVmID0gXCJcIjtcblxuICAgICAgICAgIGtleXdvcmRIaXRzW3dvcmRdID0gKGtleXdvcmRIaXRzW3dvcmRdIHx8IDApICsgMTtcbiAgICAgICAgICBpZiAoa2V5d29yZEhpdHNbd29yZF0gPD0gTUFYX0tFWVdPUkRfSElUUykgcmVsZXZhbmNlICs9IGtleXdvcmRSZWxldmFuY2U7XG4gICAgICAgICAgaWYgKGtpbmQuc3RhcnRzV2l0aChcIl9cIikpIHtcbiAgICAgICAgICAgIC8vIF8gaW1wbGllZCBmb3IgcmVsZXZhbmNlIG9ubHksIGRvIG5vdCBoaWdobGlnaHRcbiAgICAgICAgICAgIC8vIGJ5IGFwcGx5aW5nIGEgY2xhc3MgbmFtZVxuICAgICAgICAgICAgYnVmICs9IG1hdGNoWzBdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjc3NDbGFzcyA9IGxhbmd1YWdlLmNsYXNzTmFtZUFsaWFzZXNba2luZF0gfHwga2luZDtcbiAgICAgICAgICAgIGVtaXR0ZXIuYWRkS2V5d29yZChtYXRjaFswXSwgY3NzQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWYgKz0gbWF0Y2hbMF07XG4gICAgICAgIH1cbiAgICAgICAgbGFzdEluZGV4ID0gdG9wLmtleXdvcmRQYXR0ZXJuUmUubGFzdEluZGV4O1xuICAgICAgICBtYXRjaCA9IHRvcC5rZXl3b3JkUGF0dGVyblJlLmV4ZWMobW9kZUJ1ZmZlcik7XG4gICAgICB9XG4gICAgICBidWYgKz0gbW9kZUJ1ZmZlci5zdWJzdHJpbmcobGFzdEluZGV4KTtcbiAgICAgIGVtaXR0ZXIuYWRkVGV4dChidWYpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NTdWJMYW5ndWFnZSgpIHtcbiAgICAgIGlmIChtb2RlQnVmZmVyID09PSBcIlwiKSByZXR1cm47XG4gICAgICAvKiogQHR5cGUgSGlnaGxpZ2h0UmVzdWx0ICovXG4gICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgICAgaWYgKHR5cGVvZiB0b3Auc3ViTGFuZ3VhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghbGFuZ3VhZ2VzW3RvcC5zdWJMYW5ndWFnZV0pIHtcbiAgICAgICAgICBlbWl0dGVyLmFkZFRleHQobW9kZUJ1ZmZlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IF9oaWdobGlnaHQodG9wLnN1Ykxhbmd1YWdlLCBtb2RlQnVmZmVyLCB0cnVlLCBjb250aW51YXRpb25zW3RvcC5zdWJMYW5ndWFnZV0pO1xuICAgICAgICBjb250aW51YXRpb25zW3RvcC5zdWJMYW5ndWFnZV0gPSAvKiogQHR5cGUge0NvbXBpbGVkTW9kZX0gKi8gKHJlc3VsdC5fdG9wKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGhpZ2hsaWdodEF1dG8obW9kZUJ1ZmZlciwgdG9wLnN1Ykxhbmd1YWdlLmxlbmd0aCA/IHRvcC5zdWJMYW5ndWFnZSA6IG51bGwpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb3VudGluZyBlbWJlZGRlZCBsYW5ndWFnZSBzY29yZSB0b3dhcmRzIHRoZSBob3N0IGxhbmd1YWdlIG1heSBiZSBkaXNhYmxlZFxuICAgICAgLy8gd2l0aCB6ZXJvaW5nIHRoZSBjb250YWluaW5nIG1vZGUgcmVsZXZhbmNlLiBVc2UgY2FzZSBpbiBwb2ludCBpcyBNYXJrZG93biB0aGF0XG4gICAgICAvLyBhbGxvd3MgWE1MIGV2ZXJ5d2hlcmUgYW5kIG1ha2VzIGV2ZXJ5IFhNTCBzbmlwcGV0IHRvIGhhdmUgYSBtdWNoIGxhcmdlciBNYXJrZG93blxuICAgICAgLy8gc2NvcmUuXG4gICAgICBpZiAodG9wLnJlbGV2YW5jZSA+IDApIHtcbiAgICAgICAgcmVsZXZhbmNlICs9IHJlc3VsdC5yZWxldmFuY2U7XG4gICAgICB9XG4gICAgICBlbWl0dGVyLmFkZFN1Ymxhbmd1YWdlKHJlc3VsdC5fZW1pdHRlciwgcmVzdWx0Lmxhbmd1YWdlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzQnVmZmVyKCkge1xuICAgICAgaWYgKHRvcC5zdWJMYW5ndWFnZSAhPSBudWxsKSB7XG4gICAgICAgIHByb2Nlc3NTdWJMYW5ndWFnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvY2Vzc0tleXdvcmRzKCk7XG4gICAgICB9XG4gICAgICBtb2RlQnVmZmVyID0gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDb21waWxlZFNjb3BlfSBzY29wZVxuICAgICAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2hcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlbWl0TXVsdGlDbGFzcyhzY29wZSwgbWF0Y2gpIHtcbiAgICAgIGxldCBpID0gMTtcbiAgICAgIGNvbnN0IG1heCA9IG1hdGNoLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaSA8PSBtYXgpIHtcbiAgICAgICAgaWYgKCFzY29wZS5fZW1pdFtpXSkgeyBpKys7IGNvbnRpbnVlOyB9XG4gICAgICAgIGNvbnN0IGtsYXNzID0gbGFuZ3VhZ2UuY2xhc3NOYW1lQWxpYXNlc1tzY29wZVtpXV0gfHwgc2NvcGVbaV07XG4gICAgICAgIGNvbnN0IHRleHQgPSBtYXRjaFtpXTtcbiAgICAgICAgaWYgKGtsYXNzKSB7XG4gICAgICAgICAgZW1pdHRlci5hZGRLZXl3b3JkKHRleHQsIGtsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtb2RlQnVmZmVyID0gdGV4dDtcbiAgICAgICAgICBwcm9jZXNzS2V5d29yZHMoKTtcbiAgICAgICAgICBtb2RlQnVmZmVyID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDb21waWxlZE1vZGV9IG1vZGUgLSBuZXcgbW9kZSB0byBzdGFydFxuICAgICAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2hcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFydE5ld01vZGUobW9kZSwgbWF0Y2gpIHtcbiAgICAgIGlmIChtb2RlLnNjb3BlICYmIHR5cGVvZiBtb2RlLnNjb3BlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGVtaXR0ZXIub3Blbk5vZGUobGFuZ3VhZ2UuY2xhc3NOYW1lQWxpYXNlc1ttb2RlLnNjb3BlXSB8fCBtb2RlLnNjb3BlKTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RlLmJlZ2luU2NvcGUpIHtcbiAgICAgICAgLy8gYmVnaW5TY29wZSBqdXN0IHdyYXBzIHRoZSBiZWdpbiBtYXRjaCBpdHNlbGYgaW4gYSBzY29wZVxuICAgICAgICBpZiAobW9kZS5iZWdpblNjb3BlLl93cmFwKSB7XG4gICAgICAgICAgZW1pdHRlci5hZGRLZXl3b3JkKG1vZGVCdWZmZXIsIGxhbmd1YWdlLmNsYXNzTmFtZUFsaWFzZXNbbW9kZS5iZWdpblNjb3BlLl93cmFwXSB8fCBtb2RlLmJlZ2luU2NvcGUuX3dyYXApO1xuICAgICAgICAgIG1vZGVCdWZmZXIgPSBcIlwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGUuYmVnaW5TY29wZS5fbXVsdGkpIHtcbiAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50IG1vZGVCdWZmZXIgc2hvdWxkIGp1c3QgYmUgdGhlIG1hdGNoXG4gICAgICAgICAgZW1pdE11bHRpQ2xhc3MobW9kZS5iZWdpblNjb3BlLCBtYXRjaCk7XG4gICAgICAgICAgbW9kZUJ1ZmZlciA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdG9wID0gT2JqZWN0LmNyZWF0ZShtb2RlLCB7IHBhcmVudDogeyB2YWx1ZTogdG9wIH0gfSk7XG4gICAgICByZXR1cm4gdG9wO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q29tcGlsZWRNb2RlIH0gbW9kZSAtIHRoZSBtb2RlIHRvIHBvdGVudGlhbGx5IGVuZFxuICAgICAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2ggLSB0aGUgbGF0ZXN0IG1hdGNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1hdGNoUGx1c1JlbWFpbmRlciAtIG1hdGNoIHBsdXMgcmVtYWluZGVyIG9mIGNvbnRlbnRcbiAgICAgKiBAcmV0dXJucyB7Q29tcGlsZWRNb2RlIHwgdm9pZH0gLSB0aGUgbmV4dCBtb2RlLCBvciBpZiB2b2lkIGNvbnRpbnVlIG9uIGluIGN1cnJlbnQgbW9kZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVuZE9mTW9kZShtb2RlLCBtYXRjaCwgbWF0Y2hQbHVzUmVtYWluZGVyKSB7XG4gICAgICBsZXQgbWF0Y2hlZCA9IHN0YXJ0c1dpdGgobW9kZS5lbmRSZSwgbWF0Y2hQbHVzUmVtYWluZGVyKTtcblxuICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgaWYgKG1vZGVbXCJvbjplbmRcIl0pIHtcbiAgICAgICAgICBjb25zdCByZXNwID0gbmV3IFJlc3BvbnNlKG1vZGUpO1xuICAgICAgICAgIG1vZGVbXCJvbjplbmRcIl0obWF0Y2gsIHJlc3ApO1xuICAgICAgICAgIGlmIChyZXNwLmlzTWF0Y2hJZ25vcmVkKSBtYXRjaGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgIHdoaWxlIChtb2RlLmVuZHNQYXJlbnQgJiYgbW9kZS5wYXJlbnQpIHtcbiAgICAgICAgICAgIG1vZGUgPSBtb2RlLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGV2ZW4gaWYgb246ZW5kIGZpcmVzIGFuIGBpZ25vcmVgIGl0J3Mgc3RpbGwgcG9zc2libGVcbiAgICAgIC8vIHRoYXQgd2UgbWlnaHQgdHJpZ2dlciB0aGUgZW5kIG5vZGUgYmVjYXVzZSBvZiBhIHBhcmVudCBtb2RlXG4gICAgICBpZiAobW9kZS5lbmRzV2l0aFBhcmVudCkge1xuICAgICAgICByZXR1cm4gZW5kT2ZNb2RlKG1vZGUucGFyZW50LCBtYXRjaCwgbWF0Y2hQbHVzUmVtYWluZGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgbWF0Y2hpbmcgYnV0IHRoZW4gaWdub3JpbmcgYSBzZXF1ZW5jZSBvZiB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGV4ZW1lIC0gc3RyaW5nIGNvbnRhaW5pbmcgZnVsbCBtYXRjaCB0ZXh0XG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9JZ25vcmUobGV4ZW1lKSB7XG4gICAgICBpZiAodG9wLm1hdGNoZXIucmVnZXhJbmRleCA9PT0gMCkge1xuICAgICAgICAvLyBubyBtb3JlIHJlZ2V4ZXMgdG8gcG90ZW50aWFsbHkgbWF0Y2ggaGVyZSwgc28gd2UgbW92ZSB0aGUgY3Vyc29yIGZvcndhcmQgb25lXG4gICAgICAgIC8vIHNwYWNlXG4gICAgICAgIG1vZGVCdWZmZXIgKz0gbGV4ZW1lWzBdO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5vIG5lZWQgdG8gbW92ZSB0aGUgY3Vyc29yLCB3ZSBzdGlsbCBoYXZlIGFkZGl0aW9uYWwgcmVnZXhlcyB0byB0cnkgYW5kXG4gICAgICAgIC8vIG1hdGNoIGF0IHRoaXMgdmVyeSBzcG90XG4gICAgICAgIHJlc3VtZVNjYW5BdFNhbWVQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSB0aGUgc3RhcnQgb2YgYSBuZXcgcG90ZW50aWFsIG1vZGUgbWF0Y2hcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RW5oYW5jZWRNYXRjaH0gbWF0Y2ggLSB0aGUgY3VycmVudCBtYXRjaFxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IGhvdyBmYXIgdG8gYWR2YW5jZSB0aGUgcGFyc2UgY3Vyc29yXG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9CZWdpbk1hdGNoKG1hdGNoKSB7XG4gICAgICBjb25zdCBsZXhlbWUgPSBtYXRjaFswXTtcbiAgICAgIGNvbnN0IG5ld01vZGUgPSBtYXRjaC5ydWxlO1xuXG4gICAgICBjb25zdCByZXNwID0gbmV3IFJlc3BvbnNlKG5ld01vZGUpO1xuICAgICAgLy8gZmlyc3QgaW50ZXJuYWwgYmVmb3JlIGNhbGxiYWNrcywgdGhlbiB0aGUgcHVibGljIG9uZXNcbiAgICAgIGNvbnN0IGJlZm9yZUNhbGxiYWNrcyA9IFtuZXdNb2RlLl9fYmVmb3JlQmVnaW4sIG5ld01vZGVbXCJvbjpiZWdpblwiXV07XG4gICAgICBmb3IgKGNvbnN0IGNiIG9mIGJlZm9yZUNhbGxiYWNrcykge1xuICAgICAgICBpZiAoIWNiKSBjb250aW51ZTtcbiAgICAgICAgY2IobWF0Y2gsIHJlc3ApO1xuICAgICAgICBpZiAocmVzcC5pc01hdGNoSWdub3JlZCkgcmV0dXJuIGRvSWdub3JlKGxleGVtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdNb2RlLnNraXApIHtcbiAgICAgICAgbW9kZUJ1ZmZlciArPSBsZXhlbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV3TW9kZS5leGNsdWRlQmVnaW4pIHtcbiAgICAgICAgICBtb2RlQnVmZmVyICs9IGxleGVtZTtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzQnVmZmVyKCk7XG4gICAgICAgIGlmICghbmV3TW9kZS5yZXR1cm5CZWdpbiAmJiAhbmV3TW9kZS5leGNsdWRlQmVnaW4pIHtcbiAgICAgICAgICBtb2RlQnVmZmVyID0gbGV4ZW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFydE5ld01vZGUobmV3TW9kZSwgbWF0Y2gpO1xuICAgICAgcmV0dXJuIG5ld01vZGUucmV0dXJuQmVnaW4gPyAwIDogbGV4ZW1lLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgdGhlIHBvdGVudGlhbCBlbmQgb2YgbW9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWdFeHBNYXRjaEFycmF5fSBtYXRjaCAtIHRoZSBjdXJyZW50IG1hdGNoXG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9FbmRNYXRjaChtYXRjaCkge1xuICAgICAgY29uc3QgbGV4ZW1lID0gbWF0Y2hbMF07XG4gICAgICBjb25zdCBtYXRjaFBsdXNSZW1haW5kZXIgPSBjb2RlVG9IaWdobGlnaHQuc3Vic3RyaW5nKG1hdGNoLmluZGV4KTtcblxuICAgICAgY29uc3QgZW5kTW9kZSA9IGVuZE9mTW9kZSh0b3AsIG1hdGNoLCBtYXRjaFBsdXNSZW1haW5kZXIpO1xuICAgICAgaWYgKCFlbmRNb2RlKSB7IHJldHVybiBOT19NQVRDSDsgfVxuXG4gICAgICBjb25zdCBvcmlnaW4gPSB0b3A7XG4gICAgICBpZiAodG9wLmVuZFNjb3BlICYmIHRvcC5lbmRTY29wZS5fd3JhcCkge1xuICAgICAgICBwcm9jZXNzQnVmZmVyKCk7XG4gICAgICAgIGVtaXR0ZXIuYWRkS2V5d29yZChsZXhlbWUsIHRvcC5lbmRTY29wZS5fd3JhcCk7XG4gICAgICB9IGVsc2UgaWYgKHRvcC5lbmRTY29wZSAmJiB0b3AuZW5kU2NvcGUuX211bHRpKSB7XG4gICAgICAgIHByb2Nlc3NCdWZmZXIoKTtcbiAgICAgICAgZW1pdE11bHRpQ2xhc3ModG9wLmVuZFNjb3BlLCBtYXRjaCk7XG4gICAgICB9IGVsc2UgaWYgKG9yaWdpbi5za2lwKSB7XG4gICAgICAgIG1vZGVCdWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCEob3JpZ2luLnJldHVybkVuZCB8fCBvcmlnaW4uZXhjbHVkZUVuZCkpIHtcbiAgICAgICAgICBtb2RlQnVmZmVyICs9IGxleGVtZTtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzQnVmZmVyKCk7XG4gICAgICAgIGlmIChvcmlnaW4uZXhjbHVkZUVuZCkge1xuICAgICAgICAgIG1vZGVCdWZmZXIgPSBsZXhlbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRvcC5zY29wZSkge1xuICAgICAgICAgIGVtaXR0ZXIuY2xvc2VOb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0b3Auc2tpcCAmJiAhdG9wLnN1Ykxhbmd1YWdlKSB7XG4gICAgICAgICAgcmVsZXZhbmNlICs9IHRvcC5yZWxldmFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgdG9wID0gdG9wLnBhcmVudDtcbiAgICAgIH0gd2hpbGUgKHRvcCAhPT0gZW5kTW9kZS5wYXJlbnQpO1xuICAgICAgaWYgKGVuZE1vZGUuc3RhcnRzKSB7XG4gICAgICAgIHN0YXJ0TmV3TW9kZShlbmRNb2RlLnN0YXJ0cywgbWF0Y2gpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9yaWdpbi5yZXR1cm5FbmQgPyAwIDogbGV4ZW1lLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzQ29udGludWF0aW9ucygpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXTtcbiAgICAgIGZvciAobGV0IGN1cnJlbnQgPSB0b3A7IGN1cnJlbnQgIT09IGxhbmd1YWdlOyBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQuc2NvcGUpIHtcbiAgICAgICAgICBsaXN0LnVuc2hpZnQoY3VycmVudC5zY29wZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IGVtaXR0ZXIub3Blbk5vZGUoaXRlbSkpO1xuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7e3R5cGU/OiBNYXRjaFR5cGUsIGluZGV4PzogbnVtYmVyLCBydWxlPzogTW9kZX19fSAqL1xuICAgIGxldCBsYXN0TWF0Y2ggPSB7fTtcblxuICAgIC8qKlxuICAgICAqICBQcm9jZXNzIGFuIGluZGl2aWR1YWwgbWF0Y2hcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0QmVmb3JlTWF0Y2ggLSB0ZXh0IHByZWNlZGluZyB0aGUgbWF0Y2ggKHNpbmNlIHRoZSBsYXN0IG1hdGNoKVxuICAgICAqIEBwYXJhbSB7RW5oYW5jZWRNYXRjaH0gW21hdGNoXSAtIHRoZSBtYXRjaCBpdHNlbGZcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwcm9jZXNzTGV4ZW1lKHRleHRCZWZvcmVNYXRjaCwgbWF0Y2gpIHtcbiAgICAgIGNvbnN0IGxleGVtZSA9IG1hdGNoICYmIG1hdGNoWzBdO1xuXG4gICAgICAvLyBhZGQgbm9uLW1hdGNoZWQgdGV4dCB0byB0aGUgY3VycmVudCBtb2RlIGJ1ZmZlclxuICAgICAgbW9kZUJ1ZmZlciArPSB0ZXh0QmVmb3JlTWF0Y2g7XG5cbiAgICAgIGlmIChsZXhlbWUgPT0gbnVsbCkge1xuICAgICAgICBwcm9jZXNzQnVmZmVyKCk7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICAvLyB3ZSd2ZSBmb3VuZCBhIDAgd2lkdGggbWF0Y2ggYW5kIHdlJ3JlIHN0dWNrLCBzbyB3ZSBuZWVkIHRvIGFkdmFuY2VcbiAgICAgIC8vIHRoaXMgaGFwcGVucyB3aGVuIHdlIGhhdmUgYmFkbHkgYmVoYXZlZCBydWxlcyB0aGF0IGhhdmUgb3B0aW9uYWwgbWF0Y2hlcnMgdG8gdGhlIGRlZ3JlZSB0aGF0XG4gICAgICAvLyBzb21ldGltZXMgdGhleSBjYW4gZW5kIHVwIG1hdGNoaW5nIG5vdGhpbmcgYXQgYWxsXG4gICAgICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzIxNDBcbiAgICAgIGlmIChsYXN0TWF0Y2gudHlwZSA9PT0gXCJiZWdpblwiICYmIG1hdGNoLnR5cGUgPT09IFwiZW5kXCIgJiYgbGFzdE1hdGNoLmluZGV4ID09PSBtYXRjaC5pbmRleCAmJiBsZXhlbWUgPT09IFwiXCIpIHtcbiAgICAgICAgLy8gc3BpdCB0aGUgXCJza2lwcGVkXCIgY2hhcmFjdGVyIHRoYXQgb3VyIHJlZ2V4IGNob2tlZCBvbiBiYWNrIGludG8gdGhlIG91dHB1dCBzZXF1ZW5jZVxuICAgICAgICBtb2RlQnVmZmVyICs9IGNvZGVUb0hpZ2hsaWdodC5zbGljZShtYXRjaC5pbmRleCwgbWF0Y2guaW5kZXggKyAxKTtcbiAgICAgICAgaWYgKCFTQUZFX01PREUpIHtcbiAgICAgICAgICAvKiogQHR5cGUge0Fubm90YXRlZEVycm9yfSAqL1xuICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgMCB3aWR0aCBtYXRjaCByZWdleCAoJHtsYW5ndWFnZU5hbWV9KWApO1xuICAgICAgICAgIGVyci5sYW5ndWFnZU5hbWUgPSBsYW5ndWFnZU5hbWU7XG4gICAgICAgICAgZXJyLmJhZFJ1bGUgPSBsYXN0TWF0Y2gucnVsZTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBsYXN0TWF0Y2ggPSBtYXRjaDtcblxuICAgICAgaWYgKG1hdGNoLnR5cGUgPT09IFwiYmVnaW5cIikge1xuICAgICAgICByZXR1cm4gZG9CZWdpbk1hdGNoKG1hdGNoKTtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2gudHlwZSA9PT0gXCJpbGxlZ2FsXCIgJiYgIWlnbm9yZUlsbGVnYWxzKSB7XG4gICAgICAgIC8vIGlsbGVnYWwgbWF0Y2gsIHdlIGRvIG5vdCBjb250aW51ZSBwcm9jZXNzaW5nXG4gICAgICAgIC8qKiBAdHlwZSB7QW5ub3RhdGVkRXJyb3J9ICovXG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignSWxsZWdhbCBsZXhlbWUgXCInICsgbGV4ZW1lICsgJ1wiIGZvciBtb2RlIFwiJyArICh0b3Auc2NvcGUgfHwgJzx1bm5hbWVkPicpICsgJ1wiJyk7XG4gICAgICAgIGVyci5tb2RlID0gdG9wO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoLnR5cGUgPT09IFwiZW5kXCIpIHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkID0gZG9FbmRNYXRjaChtYXRjaCk7XG4gICAgICAgIGlmIChwcm9jZXNzZWQgIT09IE5PX01BVENIKSB7XG4gICAgICAgICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBlZGdlIGNhc2UgZm9yIHdoZW4gaWxsZWdhbCBtYXRjaGVzICQgKGVuZCBvZiBsaW5lKSB3aGljaCBpcyB0ZWNobmljYWxseVxuICAgICAgLy8gYSAwIHdpZHRoIG1hdGNoIGJ1dCBub3QgYSBiZWdpbi9lbmQgbWF0Y2ggc28gaXQncyBub3QgY2F1Z2h0IGJ5IHRoZVxuICAgICAgLy8gZmlyc3QgaGFuZGxlciAod2hlbiBpZ25vcmVJbGxlZ2FscyBpcyB0cnVlKVxuICAgICAgaWYgKG1hdGNoLnR5cGUgPT09IFwiaWxsZWdhbFwiICYmIGxleGVtZSA9PT0gXCJcIikge1xuICAgICAgICAvLyBhZHZhbmNlIHNvIHdlIGFyZW4ndCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICAvLyBpbmZpbml0ZSBsb29wcyBhcmUgQkFELCB0aGlzIGlzIGEgbGFzdCBkaXRjaCBjYXRjaCBhbGwuIGlmIHdlIGhhdmUgYVxuICAgICAgLy8gZGVjZW50IG51bWJlciBvZiBpdGVyYXRpb25zIHlldCBvdXIgaW5kZXggKGN1cnNvciBwb3NpdGlvbiBpbiBvdXJcbiAgICAgIC8vIHBhcnNpbmcpIHN0aWxsIDN4IGJlaGluZCBvdXIgaW5kZXggdGhlbiBzb21ldGhpbmcgaXMgdmVyeSB3cm9uZ1xuICAgICAgLy8gc28gd2UgYmFpbFxuICAgICAgaWYgKGl0ZXJhdGlvbnMgPiAxMDAwMDAgJiYgaXRlcmF0aW9ucyA+IG1hdGNoLmluZGV4ICogMykge1xuICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ3BvdGVudGlhbCBpbmZpbml0ZSBsb29wLCB3YXkgbW9yZSBpdGVyYXRpb25zIHRoYW4gbWF0Y2hlcycpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICBXaHkgbWlnaHQgYmUgZmluZCBvdXJzZWx2ZXMgaGVyZT8gIEFuIHBvdGVudGlhbCBlbmQgbWF0Y2ggdGhhdCB3YXNcbiAgICAgIHRyaWdnZXJlZCBidXQgY291bGQgbm90IGJlIGNvbXBsZXRlZC4gIElFLCBgZG9FbmRNYXRjaGAgcmV0dXJuZWQgTk9fTUFUQ0guXG4gICAgICAodGhpcyBjb3VsZCBiZSBiZWNhdXNlIGEgY2FsbGJhY2sgcmVxdWVzdHMgdGhlIG1hdGNoIGJlIGlnbm9yZWQsIGV0YylcblxuICAgICAgVGhpcyBjYXVzZXMgbm8gcmVhbCBoYXJtIG90aGVyIHRoYW4gc3RvcHBpbmcgYSBmZXcgdGltZXMgdG9vIG1hbnkuXG4gICAgICAqL1xuXG4gICAgICBtb2RlQnVmZmVyICs9IGxleGVtZTtcbiAgICAgIHJldHVybiBsZXhlbWUubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UobGFuZ3VhZ2VOYW1lKTtcbiAgICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgICBlcnJvcihMQU5HVUFHRV9OT1RfRk9VTkQucmVwbGFjZShcInt9XCIsIGxhbmd1YWdlTmFtZSkpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiBcIicgKyBsYW5ndWFnZU5hbWUgKyAnXCInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZCA9IGNvbXBpbGVMYW5ndWFnZShsYW5ndWFnZSk7XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIC8qKiBAdHlwZSB7Q29tcGlsZWRNb2RlfSAqL1xuICAgIGxldCB0b3AgPSBjb250aW51YXRpb24gfHwgbWQ7XG4gICAgLyoqIEB0eXBlIFJlY29yZDxzdHJpbmcsQ29tcGlsZWRNb2RlPiAqL1xuICAgIGNvbnN0IGNvbnRpbnVhdGlvbnMgPSB7fTsgLy8ga2VlcCBjb250aW51YXRpb25zIGZvciBzdWItbGFuZ3VhZ2VzXG4gICAgY29uc3QgZW1pdHRlciA9IG5ldyBvcHRpb25zLl9fZW1pdHRlcihvcHRpb25zKTtcbiAgICBwcm9jZXNzQ29udGludWF0aW9ucygpO1xuICAgIGxldCBtb2RlQnVmZmVyID0gJyc7XG4gICAgbGV0IHJlbGV2YW5jZSA9IDA7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBsZXQgaXRlcmF0aW9ucyA9IDA7XG4gICAgbGV0IHJlc3VtZVNjYW5BdFNhbWVQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRvcC5tYXRjaGVyLmNvbnNpZGVyQWxsKCk7XG5cbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgaXRlcmF0aW9ucysrO1xuICAgICAgICBpZiAocmVzdW1lU2NhbkF0U2FtZVBvc2l0aW9uKSB7XG4gICAgICAgICAgLy8gb25seSByZWdleGVzIG5vdCBtYXRjaGVkIHByZXZpb3VzbHkgd2lsbCBub3cgYmVcbiAgICAgICAgICAvLyBjb25zaWRlcmVkIGZvciBhIHBvdGVudGlhbCBtYXRjaFxuICAgICAgICAgIHJlc3VtZVNjYW5BdFNhbWVQb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvcC5tYXRjaGVyLmNvbnNpZGVyQWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdG9wLm1hdGNoZXIubGFzdEluZGV4ID0gaW5kZXg7XG5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0b3AubWF0Y2hlci5leGVjKGNvZGVUb0hpZ2hsaWdodCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwibWF0Y2hcIiwgbWF0Y2hbMF0sIG1hdGNoLnJ1bGUgJiYgbWF0Y2gucnVsZS5iZWdpbilcblxuICAgICAgICBpZiAoIW1hdGNoKSBicmVhaztcblxuICAgICAgICBjb25zdCBiZWZvcmVNYXRjaCA9IGNvZGVUb0hpZ2hsaWdodC5zdWJzdHJpbmcoaW5kZXgsIG1hdGNoLmluZGV4KTtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkQ291bnQgPSBwcm9jZXNzTGV4ZW1lKGJlZm9yZU1hdGNoLCBtYXRjaCk7XG4gICAgICAgIGluZGV4ID0gbWF0Y2guaW5kZXggKyBwcm9jZXNzZWRDb3VudDtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3NMZXhlbWUoY29kZVRvSGlnaGxpZ2h0LnN1YnN0cmluZyhpbmRleCkpO1xuICAgICAgZW1pdHRlci5jbG9zZUFsbE5vZGVzKCk7XG4gICAgICBlbWl0dGVyLmZpbmFsaXplKCk7XG4gICAgICByZXN1bHQgPSBlbWl0dGVyLnRvSFRNTCgpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VOYW1lLFxuICAgICAgICB2YWx1ZTogcmVzdWx0LFxuICAgICAgICByZWxldmFuY2U6IHJlbGV2YW5jZSxcbiAgICAgICAgaWxsZWdhbDogZmFsc2UsXG4gICAgICAgIF9lbWl0dGVyOiBlbWl0dGVyLFxuICAgICAgICBfdG9wOiB0b3BcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0lsbGVnYWwnKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZU5hbWUsXG4gICAgICAgICAgdmFsdWU6IGVzY2FwZShjb2RlVG9IaWdobGlnaHQpLFxuICAgICAgICAgIGlsbGVnYWw6IHRydWUsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIF9pbGxlZ2FsQnk6IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgY29udGV4dDogY29kZVRvSGlnaGxpZ2h0LnNsaWNlKGluZGV4IC0gMTAwLCBpbmRleCArIDEwMCksXG4gICAgICAgICAgICBtb2RlOiBlcnIubW9kZSxcbiAgICAgICAgICAgIHJlc3VsdFNvRmFyOiByZXN1bHRcbiAgICAgICAgICB9LFxuICAgICAgICAgIF9lbWl0dGVyOiBlbWl0dGVyXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKFNBRkVfTU9ERSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZU5hbWUsXG4gICAgICAgICAgdmFsdWU6IGVzY2FwZShjb2RlVG9IaWdobGlnaHQpLFxuICAgICAgICAgIGlsbGVnYWw6IGZhbHNlLFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBlcnJvclJhaXNlZDogZXJyLFxuICAgICAgICAgIF9lbWl0dGVyOiBlbWl0dGVyLFxuICAgICAgICAgIF90b3A6IHRvcFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgdmFsaWQgaGlnaGxpZ2h0IHJlc3VsdCwgd2l0aG91dCBhY3R1YWxseSBkb2luZyBhbnkgYWN0dWFsIHdvcmssXG4gICAqIGF1dG8gaGlnaGxpZ2h0IHN0YXJ0cyB3aXRoIHRoaXMgYW5kIGl0J3MgcG9zc2libGUgZm9yIHNtYWxsIHNuaXBwZXRzIHRoYXRcbiAgICogYXV0by1kZXRlY3Rpb24gbWF5IG5vdCBmaW5kIGEgYmV0dGVyIG1hdGNoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlXG4gICAqIEByZXR1cm5zIHtIaWdobGlnaHRSZXN1bHR9XG4gICAqL1xuICBmdW5jdGlvbiBqdXN0VGV4dEhpZ2hsaWdodFJlc3VsdChjb2RlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgdmFsdWU6IGVzY2FwZShjb2RlKSxcbiAgICAgIGlsbGVnYWw6IGZhbHNlLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgX3RvcDogUExBSU5URVhUX0xBTkdVQUdFLFxuICAgICAgX2VtaXR0ZXI6IG5ldyBvcHRpb25zLl9fZW1pdHRlcihvcHRpb25zKVxuICAgIH07XG4gICAgcmVzdWx0Ll9lbWl0dGVyLmFkZFRleHQoY29kZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICBIaWdobGlnaHRpbmcgd2l0aCBsYW5ndWFnZSBkZXRlY3Rpb24uIEFjY2VwdHMgYSBzdHJpbmcgd2l0aCB0aGUgY29kZSB0b1xuICBoaWdobGlnaHQuIFJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuXG4gIC0gbGFuZ3VhZ2UgKGRldGVjdGVkIGxhbmd1YWdlKVxuICAtIHJlbGV2YW5jZSAoaW50KVxuICAtIHZhbHVlIChhbiBIVE1MIHN0cmluZyB3aXRoIGhpZ2hsaWdodGluZyBtYXJrdXApXG4gIC0gc2Vjb25kQmVzdCAob2JqZWN0IHdpdGggdGhlIHNhbWUgc3RydWN0dXJlIGZvciBzZWNvbmQtYmVzdCBoZXVyaXN0aWNhbGx5XG4gICAgZGV0ZWN0ZWQgbGFuZ3VhZ2UsIG1heSBiZSBhYnNlbnQpXG5cbiAgICBAcGFyYW0ge3N0cmluZ30gY29kZVxuICAgIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gW2xhbmd1YWdlU3Vic2V0XVxuICAgIEByZXR1cm5zIHtBdXRvSGlnaGxpZ2h0UmVzdWx0fVxuICAqL1xuICBmdW5jdGlvbiBoaWdobGlnaHRBdXRvKGNvZGUsIGxhbmd1YWdlU3Vic2V0KSB7XG4gICAgbGFuZ3VhZ2VTdWJzZXQgPSBsYW5ndWFnZVN1YnNldCB8fCBvcHRpb25zLmxhbmd1YWdlcyB8fCBPYmplY3Qua2V5cyhsYW5ndWFnZXMpO1xuICAgIGNvbnN0IHBsYWludGV4dCA9IGp1c3RUZXh0SGlnaGxpZ2h0UmVzdWx0KGNvZGUpO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGxhbmd1YWdlU3Vic2V0LmZpbHRlcihnZXRMYW5ndWFnZSkuZmlsdGVyKGF1dG9EZXRlY3Rpb24pLm1hcChuYW1lID0+XG4gICAgICBfaGlnaGxpZ2h0KG5hbWUsIGNvZGUsIGZhbHNlKVxuICAgICk7XG4gICAgcmVzdWx0cy51bnNoaWZ0KHBsYWludGV4dCk7IC8vIHBsYWludGV4dCBpcyBhbHdheXMgYW4gb3B0aW9uXG5cbiAgICBjb25zdCBzb3J0ZWQgPSByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIC8vIHNvcnQgYmFzZSBvbiByZWxldmFuY2VcbiAgICAgIGlmIChhLnJlbGV2YW5jZSAhPT0gYi5yZWxldmFuY2UpIHJldHVybiBiLnJlbGV2YW5jZSAtIGEucmVsZXZhbmNlO1xuXG4gICAgICAvLyBhbHdheXMgYXdhcmQgdGhlIHRpZSB0byB0aGUgYmFzZSBsYW5ndWFnZVxuICAgICAgLy8gaWUgaWYgQysrIGFuZCBBcmR1aW5vIGFyZSB0aWVkLCBpdCdzIG1vcmUgbGlrZWx5IHRvIGJlIEMrK1xuICAgICAgaWYgKGEubGFuZ3VhZ2UgJiYgYi5sYW5ndWFnZSkge1xuICAgICAgICBpZiAoZ2V0TGFuZ3VhZ2UoYS5sYW5ndWFnZSkuc3VwZXJzZXRPZiA9PT0gYi5sYW5ndWFnZSkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2UgaWYgKGdldExhbmd1YWdlKGIubGFuZ3VhZ2UpLnN1cGVyc2V0T2YgPT09IGEubGFuZ3VhZ2UpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gb3RoZXJ3aXNlIHNheSB0aGV5IGFyZSBlcXVhbCwgd2hpY2ggaGFzIHRoZSBlZmZlY3Qgb2Ygc29ydGluZyBvblxuICAgICAgLy8gcmVsZXZhbmNlIHdoaWxlIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsIG9yZGVyaW5nIC0gd2hpY2ggaXMgaG93IHRpZXNcbiAgICAgIC8vIGhhdmUgaGlzdG9yaWNhbGx5IGJlZW4gc2V0dGxlZCwgaWUgdGhlIGxhbmd1YWdlIHRoYXQgY29tZXMgZmlyc3QgYWx3YXlzXG4gICAgICAvLyB3aW5zIGluIHRoZSBjYXNlIG9mIGEgdGllXG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcblxuICAgIGNvbnN0IFtiZXN0LCBzZWNvbmRCZXN0XSA9IHNvcnRlZDtcblxuICAgIC8qKiBAdHlwZSB7QXV0b0hpZ2hsaWdodFJlc3VsdH0gKi9cbiAgICBjb25zdCByZXN1bHQgPSBiZXN0O1xuICAgIHJlc3VsdC5zZWNvbmRCZXN0ID0gc2Vjb25kQmVzdDtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIG5ldyBjbGFzcyBuYW1lIGZvciBibG9jayBnaXZlbiB0aGUgbGFuZ3VhZ2UgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY3VycmVudExhbmddXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVzdWx0TGFuZ11cbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZUNsYXNzTmFtZShlbGVtZW50LCBjdXJyZW50TGFuZywgcmVzdWx0TGFuZykge1xuICAgIGNvbnN0IGxhbmd1YWdlID0gKGN1cnJlbnRMYW5nICYmIGFsaWFzZXNbY3VycmVudExhbmddKSB8fCByZXN1bHRMYW5nO1xuXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaGxqc1wiKTtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoYGxhbmd1YWdlLSR7bGFuZ3VhZ2V9YCk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBoaWdobGlnaHRpbmcgdG8gYSBET00gbm9kZSBjb250YWluaW5nIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7SGlnaGxpZ2h0ZWRIVE1MRWxlbWVudH0gZWxlbWVudCAtIHRoZSBIVE1MIGVsZW1lbnQgdG8gaGlnaGxpZ2h0XG4gICovXG4gIGZ1bmN0aW9uIGhpZ2hsaWdodEVsZW1lbnQoZWxlbWVudCkge1xuICAgIC8qKiBAdHlwZSBIVE1MRWxlbWVudCAqL1xuICAgIGxldCBub2RlID0gbnVsbDtcbiAgICBjb25zdCBsYW5ndWFnZSA9IGJsb2NrTGFuZ3VhZ2UoZWxlbWVudCk7XG5cbiAgICBpZiAoc2hvdWxkTm90SGlnaGxpZ2h0KGxhbmd1YWdlKSkgcmV0dXJuO1xuXG4gICAgZmlyZShcImJlZm9yZTpoaWdobGlnaHRFbGVtZW50XCIsXG4gICAgICB7IGVsOiBlbGVtZW50LCBsYW5ndWFnZTogbGFuZ3VhZ2UgfSk7XG5cbiAgICAvLyB3ZSBzaG91bGQgYmUgYWxsIHRleHQsIG5vIGNoaWxkIG5vZGVzICh1bmVzY2FwZWQgSFRNTCkgLSB0aGlzIGlzIHBvc3NpYmx5XG4gICAgLy8gYW4gSFRNTCBpbmplY3Rpb24gYXR0YWNrIC0gaXQncyBsaWtlbHkgdG9vIGxhdGUgaWYgdGhpcyBpcyBhbHJlYWR5IGluXG4gICAgLy8gcHJvZHVjdGlvbiAodGhlIGNvZGUgaGFzIGxpa2VseSBhbHJlYWR5IGRvbmUgaXRzIGRhbWFnZSBieSB0aGUgdGltZVxuICAgIC8vIHdlJ3JlIHNlZWluZyBpdCkuLi4gYnV0IHdlIHllbGwgbG91ZGx5IGFib3V0IHRoaXMgc28gdGhhdCBob3BlZnVsbHkgaXQnc1xuICAgIC8vIG1vcmUgbGlrZWx5IHRvIGJlIGNhdWdodCBpbiBkZXZlbG9wbWVudCBiZWZvcmUgbWFraW5nIGl0IHRvIHByb2R1Y3Rpb25cbiAgICBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIW9wdGlvbnMuaWdub3JlVW5lc2NhcGVkSFRNTCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJPbmUgb2YgeW91ciBjb2RlIGJsb2NrcyBpbmNsdWRlcyB1bmVzY2FwZWQgSFRNTC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IHNlcmlvdXMgc2VjdXJpdHkgcmlzay5cIik7XG4gICAgICAgIGNvbnNvbGUud2FybihcImh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvd2lraS9zZWN1cml0eVwiKTtcbiAgICAgICAgY29uc29sZS53YXJuKFwiVGhlIGVsZW1lbnQgd2l0aCB1bmVzY2FwZWQgSFRNTDpcIik7XG4gICAgICAgIGNvbnNvbGUud2FybihlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnRocm93VW5lc2NhcGVkSFRNTCkge1xuICAgICAgICBjb25zdCBlcnIgPSBuZXcgSFRNTEluamVjdGlvbkVycm9yKFxuICAgICAgICAgIFwiT25lIG9mIHlvdXIgY29kZSBibG9ja3MgaW5jbHVkZXMgdW5lc2NhcGVkIEhUTUwuXCIsXG4gICAgICAgICAgZWxlbWVudC5pbm5lckhUTUxcbiAgICAgICAgKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBlbGVtZW50O1xuICAgIGNvbnN0IHRleHQgPSBub2RlLnRleHRDb250ZW50O1xuICAgIGNvbnN0IHJlc3VsdCA9IGxhbmd1YWdlID8gaGlnaGxpZ2h0KHRleHQsIHsgbGFuZ3VhZ2UsIGlnbm9yZUlsbGVnYWxzOiB0cnVlIH0pIDogaGlnaGxpZ2h0QXV0byh0ZXh0KTtcblxuICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gcmVzdWx0LnZhbHVlO1xuICAgIHVwZGF0ZUNsYXNzTmFtZShlbGVtZW50LCBsYW5ndWFnZSwgcmVzdWx0Lmxhbmd1YWdlKTtcbiAgICBlbGVtZW50LnJlc3VsdCA9IHtcbiAgICAgIGxhbmd1YWdlOiByZXN1bHQubGFuZ3VhZ2UsXG4gICAgICAvLyBUT0RPOiByZW1vdmUgd2l0aCB2ZXJzaW9uIDExLjBcbiAgICAgIHJlOiByZXN1bHQucmVsZXZhbmNlLFxuICAgICAgcmVsZXZhbmNlOiByZXN1bHQucmVsZXZhbmNlXG4gICAgfTtcbiAgICBpZiAocmVzdWx0LnNlY29uZEJlc3QpIHtcbiAgICAgIGVsZW1lbnQuc2Vjb25kQmVzdCA9IHtcbiAgICAgICAgbGFuZ3VhZ2U6IHJlc3VsdC5zZWNvbmRCZXN0Lmxhbmd1YWdlLFxuICAgICAgICByZWxldmFuY2U6IHJlc3VsdC5zZWNvbmRCZXN0LnJlbGV2YW5jZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmaXJlKFwiYWZ0ZXI6aGlnaGxpZ2h0RWxlbWVudFwiLCB7IGVsOiBlbGVtZW50LCByZXN1bHQsIHRleHQgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBoaWdobGlnaHQuanMgZ2xvYmFsIG9wdGlvbnMgd2l0aCB0aGUgcGFzc2VkIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWFsPEhMSlNPcHRpb25zPn0gdXNlck9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIGNvbmZpZ3VyZSh1c2VyT3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBpbmhlcml0KG9wdGlvbnMsIHVzZXJPcHRpb25zKTtcbiAgfVxuXG4gIC8vIFRPRE86IHJlbW92ZSB2MTIsIGRlcHJlY2F0ZWRcbiAgY29uc3QgaW5pdEhpZ2hsaWdodGluZyA9ICgpID0+IHtcbiAgICBoaWdobGlnaHRBbGwoKTtcbiAgICBkZXByZWNhdGVkKFwiMTAuNi4wXCIsIFwiaW5pdEhpZ2hsaWdodGluZygpIGRlcHJlY2F0ZWQuICBVc2UgaGlnaGxpZ2h0QWxsKCkgbm93LlwiKTtcbiAgfTtcblxuICAvLyBUT0RPOiByZW1vdmUgdjEyLCBkZXByZWNhdGVkXG4gIGZ1bmN0aW9uIGluaXRIaWdobGlnaHRpbmdPbkxvYWQoKSB7XG4gICAgaGlnaGxpZ2h0QWxsKCk7XG4gICAgZGVwcmVjYXRlZChcIjEwLjYuMFwiLCBcImluaXRIaWdobGlnaHRpbmdPbkxvYWQoKSBkZXByZWNhdGVkLiAgVXNlIGhpZ2hsaWdodEFsbCgpIG5vdy5cIik7XG4gIH1cblxuICBsZXQgd2FudHNIaWdobGlnaHQgPSBmYWxzZTtcblxuICAvKipcbiAgICogYXV0by1oaWdobGlnaHRzIGFsbCBwcmU+Y29kZSBlbGVtZW50cyBvbiB0aGUgcGFnZVxuICAgKi9cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0QWxsKCkge1xuICAgIC8vIGlmIHdlIGFyZSBjYWxsZWQgdG9vIGVhcmx5IGluIHRoZSBsb2FkaW5nIHByb2Nlc3NcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgIHdhbnRzSGlnaGxpZ2h0ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBibG9ja3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKG9wdGlvbnMuY3NzU2VsZWN0b3IpO1xuICAgIGJsb2Nrcy5mb3JFYWNoKGhpZ2hsaWdodEVsZW1lbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gYm9vdCgpIHtcbiAgICAvLyBpZiBhIGhpZ2hsaWdodCB3YXMgcmVxdWVzdGVkIGJlZm9yZSBET00gd2FzIGxvYWRlZCwgZG8gbm93XG4gICAgaWYgKHdhbnRzSGlnaGxpZ2h0KSBoaWdobGlnaHRBbGwoKTtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gdGhlIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBib290LCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBsYW5ndWFnZSBncmFtbWFyIG1vZHVsZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VOYW1lXG4gICAqIEBwYXJhbSB7TGFuZ3VhZ2VGbn0gbGFuZ3VhZ2VEZWZpbml0aW9uXG4gICAqL1xuICBmdW5jdGlvbiByZWdpc3Rlckxhbmd1YWdlKGxhbmd1YWdlTmFtZSwgbGFuZ3VhZ2VEZWZpbml0aW9uKSB7XG4gICAgbGV0IGxhbmcgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBsYW5nID0gbGFuZ3VhZ2VEZWZpbml0aW9uKGhsanMpO1xuICAgIH0gY2F0Y2ggKGVycm9yJDEpIHtcbiAgICAgIGVycm9yKFwiTGFuZ3VhZ2UgZGVmaW5pdGlvbiBmb3IgJ3t9JyBjb3VsZCBub3QgYmUgcmVnaXN0ZXJlZC5cIi5yZXBsYWNlKFwie31cIiwgbGFuZ3VhZ2VOYW1lKSk7XG4gICAgICAvLyBoYXJkIG9yIHNvZnQgZXJyb3JcbiAgICAgIGlmICghU0FGRV9NT0RFKSB7IHRocm93IGVycm9yJDE7IH0gZWxzZSB7IGVycm9yKGVycm9yJDEpOyB9XG4gICAgICAvLyBsYW5ndWFnZXMgdGhhdCBoYXZlIHNlcmlvdXMgZXJyb3JzIGFyZSByZXBsYWNlZCB3aXRoIGVzc2VudGlhbGx5IGFcbiAgICAgIC8vIFwicGxhaW50ZXh0XCIgc3RhbmQtaW4gc28gdGhhdCB0aGUgY29kZSBibG9ja3Mgd2lsbCBzdGlsbCBnZXQgbm9ybWFsXG4gICAgICAvLyBjc3MgY2xhc3NlcyBhcHBsaWVkIHRvIHRoZW0gLSBhbmQgb25lIGJhZCBsYW5ndWFnZSB3b24ndCBicmVhayB0aGVcbiAgICAgIC8vIGVudGlyZSBoaWdobGlnaHRlclxuICAgICAgbGFuZyA9IFBMQUlOVEVYVF9MQU5HVUFHRTtcbiAgICB9XG4gICAgLy8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBuYW1lIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgaW4gdGhlIG1ldGEtZGF0YVxuICAgIGlmICghbGFuZy5uYW1lKSBsYW5nLm5hbWUgPSBsYW5ndWFnZU5hbWU7XG4gICAgbGFuZ3VhZ2VzW2xhbmd1YWdlTmFtZV0gPSBsYW5nO1xuICAgIGxhbmcucmF3RGVmaW5pdGlvbiA9IGxhbmd1YWdlRGVmaW5pdGlvbi5iaW5kKG51bGwsIGhsanMpO1xuXG4gICAgaWYgKGxhbmcuYWxpYXNlcykge1xuICAgICAgcmVnaXN0ZXJBbGlhc2VzKGxhbmcuYWxpYXNlcywgeyBsYW5ndWFnZU5hbWUgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGxhbmd1YWdlIGdyYW1tYXIgbW9kdWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZU5hbWVcbiAgICovXG4gIGZ1bmN0aW9uIHVucmVnaXN0ZXJMYW5ndWFnZShsYW5ndWFnZU5hbWUpIHtcbiAgICBkZWxldGUgbGFuZ3VhZ2VzW2xhbmd1YWdlTmFtZV07XG4gICAgZm9yIChjb25zdCBhbGlhcyBvZiBPYmplY3Qua2V5cyhhbGlhc2VzKSkge1xuICAgICAgaWYgKGFsaWFzZXNbYWxpYXNdID09PSBsYW5ndWFnZU5hbWUpIHtcbiAgICAgICAgZGVsZXRlIGFsaWFzZXNbYWxpYXNdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IExpc3Qgb2YgbGFuZ3VhZ2UgaW50ZXJuYWwgbmFtZXNcbiAgICovXG4gIGZ1bmN0aW9uIGxpc3RMYW5ndWFnZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxhbmd1YWdlcyk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJucyB7TGFuZ3VhZ2UgfCB1bmRlZmluZWR9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRMYW5ndWFnZShuYW1lKSB7XG4gICAgbmFtZSA9IChuYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBsYW5ndWFnZXNbbmFtZV0gfHwgbGFuZ3VhZ2VzW2FsaWFzZXNbbmFtZV1dO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBhbGlhc0xpc3QgLSBzaW5nbGUgYWxpYXMgb3IgbGlzdCBvZiBhbGlhc2VzXG4gICAqIEBwYXJhbSB7e2xhbmd1YWdlTmFtZTogc3RyaW5nfX0gb3B0c1xuICAgKi9cbiAgZnVuY3Rpb24gcmVnaXN0ZXJBbGlhc2VzKGFsaWFzTGlzdCwgeyBsYW5ndWFnZU5hbWUgfSkge1xuICAgIGlmICh0eXBlb2YgYWxpYXNMaXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgYWxpYXNMaXN0ID0gW2FsaWFzTGlzdF07XG4gICAgfVxuICAgIGFsaWFzTGlzdC5mb3JFYWNoKGFsaWFzID0+IHsgYWxpYXNlc1thbGlhcy50b0xvd2VyQ2FzZSgpXSA9IGxhbmd1YWdlTmFtZTsgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIGxhbmd1YWdlIGhhcyBhdXRvLWRldGVjdGlvbiBlbmFibGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2VcbiAgICovXG4gIGZ1bmN0aW9uIGF1dG9EZXRlY3Rpb24obmFtZSkge1xuICAgIGNvbnN0IGxhbmcgPSBnZXRMYW5ndWFnZShuYW1lKTtcbiAgICByZXR1cm4gbGFuZyAmJiAhbGFuZy5kaXNhYmxlQXV0b2RldGVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGdyYWRlcyB0aGUgb2xkIGhpZ2hsaWdodEJsb2NrIHBsdWdpbnMgdG8gdGhlIG5ld1xuICAgKiBoaWdobGlnaHRFbGVtZW50IEFQSVxuICAgKiBAcGFyYW0ge0hMSlNQbHVnaW59IHBsdWdpblxuICAgKi9cbiAgZnVuY3Rpb24gdXBncmFkZVBsdWdpbkFQSShwbHVnaW4pIHtcbiAgICAvLyBUT0RPOiByZW1vdmUgd2l0aCB2MTJcbiAgICBpZiAocGx1Z2luW1wiYmVmb3JlOmhpZ2hsaWdodEJsb2NrXCJdICYmICFwbHVnaW5bXCJiZWZvcmU6aGlnaGxpZ2h0RWxlbWVudFwiXSkge1xuICAgICAgcGx1Z2luW1wiYmVmb3JlOmhpZ2hsaWdodEVsZW1lbnRcIl0gPSAoZGF0YSkgPT4ge1xuICAgICAgICBwbHVnaW5bXCJiZWZvcmU6aGlnaGxpZ2h0QmxvY2tcIl0oXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7IGJsb2NrOiBkYXRhLmVsIH0sIGRhdGEpXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAocGx1Z2luW1wiYWZ0ZXI6aGlnaGxpZ2h0QmxvY2tcIl0gJiYgIXBsdWdpbltcImFmdGVyOmhpZ2hsaWdodEVsZW1lbnRcIl0pIHtcbiAgICAgIHBsdWdpbltcImFmdGVyOmhpZ2hsaWdodEVsZW1lbnRcIl0gPSAoZGF0YSkgPT4ge1xuICAgICAgICBwbHVnaW5bXCJhZnRlcjpoaWdobGlnaHRCbG9ja1wiXShcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHsgYmxvY2s6IGRhdGEuZWwgfSwgZGF0YSlcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SExKU1BsdWdpbn0gcGx1Z2luXG4gICAqL1xuICBmdW5jdGlvbiBhZGRQbHVnaW4ocGx1Z2luKSB7XG4gICAgdXBncmFkZVBsdWdpbkFQSShwbHVnaW4pO1xuICAgIHBsdWdpbnMucHVzaChwbHVnaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7UGx1Z2luRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7YW55fSBhcmdzXG4gICAqL1xuICBmdW5jdGlvbiBmaXJlKGV2ZW50LCBhcmdzKSB7XG4gICAgY29uc3QgY2IgPSBldmVudDtcbiAgICBwbHVnaW5zLmZvckVhY2goZnVuY3Rpb24ocGx1Z2luKSB7XG4gICAgICBpZiAocGx1Z2luW2NiXSkge1xuICAgICAgICBwbHVnaW5bY2JdKGFyZ3MpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERFUFJFQ0FURURcbiAgICogQHBhcmFtIHtIaWdobGlnaHRlZEhUTUxFbGVtZW50fSBlbFxuICAgKi9cbiAgZnVuY3Rpb24gZGVwcmVjYXRlSGlnaGxpZ2h0QmxvY2soZWwpIHtcbiAgICBkZXByZWNhdGVkKFwiMTAuNy4wXCIsIFwiaGlnaGxpZ2h0QmxvY2sgd2lsbCBiZSByZW1vdmVkIGVudGlyZWx5IGluIHYxMi4wXCIpO1xuICAgIGRlcHJlY2F0ZWQoXCIxMC43LjBcIiwgXCJQbGVhc2UgdXNlIGhpZ2hsaWdodEVsZW1lbnQgbm93LlwiKTtcblxuICAgIHJldHVybiBoaWdobGlnaHRFbGVtZW50KGVsKTtcbiAgfVxuXG4gIC8qIEludGVyZmFjZSBkZWZpbml0aW9uICovXG4gIE9iamVjdC5hc3NpZ24oaGxqcywge1xuICAgIGhpZ2hsaWdodCxcbiAgICBoaWdobGlnaHRBdXRvLFxuICAgIGhpZ2hsaWdodEFsbCxcbiAgICBoaWdobGlnaHRFbGVtZW50LFxuICAgIC8vIFRPRE86IFJlbW92ZSB3aXRoIHYxMiBBUElcbiAgICBoaWdobGlnaHRCbG9jazogZGVwcmVjYXRlSGlnaGxpZ2h0QmxvY2ssXG4gICAgY29uZmlndXJlLFxuICAgIGluaXRIaWdobGlnaHRpbmcsXG4gICAgaW5pdEhpZ2hsaWdodGluZ09uTG9hZCxcbiAgICByZWdpc3Rlckxhbmd1YWdlLFxuICAgIHVucmVnaXN0ZXJMYW5ndWFnZSxcbiAgICBsaXN0TGFuZ3VhZ2VzLFxuICAgIGdldExhbmd1YWdlLFxuICAgIHJlZ2lzdGVyQWxpYXNlcyxcbiAgICBhdXRvRGV0ZWN0aW9uLFxuICAgIGluaGVyaXQsXG4gICAgYWRkUGx1Z2luXG4gIH0pO1xuXG4gIGhsanMuZGVidWdNb2RlID0gZnVuY3Rpb24oKSB7IFNBRkVfTU9ERSA9IGZhbHNlOyB9O1xuICBobGpzLnNhZmVNb2RlID0gZnVuY3Rpb24oKSB7IFNBRkVfTU9ERSA9IHRydWU7IH07XG4gIGhsanMudmVyc2lvblN0cmluZyA9IHZlcnNpb247XG5cbiAgaGxqcy5yZWdleCA9IHtcbiAgICBjb25jYXQ6IGNvbmNhdCxcbiAgICBsb29rYWhlYWQ6IGxvb2thaGVhZCxcbiAgICBlaXRoZXI6IGVpdGhlcixcbiAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgYW55TnVtYmVyT2ZUaW1lczogYW55TnVtYmVyT2ZUaW1lc1xuICB9O1xuXG4gIGZvciAoY29uc3Qga2V5IGluIE1PREVTKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgTU9ERVNba2V5XSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZGVlcEZyZWV6ZUVzNi5leHBvcnRzKE1PREVTW2tleV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlIGFsbCB0aGUgbW9kZXMvcmVnZXhlcyBpbnRvIG91ciBtYWluIG9iamVjdFxuICBPYmplY3QuYXNzaWduKGhsanMsIE1PREVTKTtcblxuICByZXR1cm4gaGxqcztcbn07XG5cbi8vIGV4cG9ydCBhbiBcImluc3RhbmNlXCIgb2YgdGhlIGhpZ2hsaWdodGVyXG52YXIgaGlnaGxpZ2h0ID0gSExKUyh7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gaGlnaGxpZ2h0O1xuaGlnaGxpZ2h0LkhpZ2hsaWdodEpTID0gaGlnaGxpZ2h0O1xuaGlnaGxpZ2h0LmRlZmF1bHQgPSBoaWdobGlnaHQ7XG4iLCIvKlxuTGFuZ3VhZ2U6IEJhc2hcbkF1dGhvcjogdmFoIDx2YWh0ZW5iZXJnQGdtYWlsLmNvbT5cbkNvbnRyaWJ1dHJvcnM6IEJlbmphbWluIFBhbm5lbGwgPGNvbnRhY3RAc2llcnJhc29mdHdvcmtzLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9cbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBiYXNoKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICBjb25zdCBWQVIgPSB7fTtcbiAgY29uc3QgQlJBQ0VEX1ZBUiA9IHtcbiAgICBiZWdpbjogL1xcJFxcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBjb250YWluczogW1xuICAgICAgXCJzZWxmXCIsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvOi0vLFxuICAgICAgICBjb250YWluczogWyBWQVIgXVxuICAgICAgfSAvLyBkZWZhdWx0IHZhbHVlc1xuICAgIF1cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihWQVIsIHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IHJlZ2V4LmNvbmNhdCgvXFwkW1xcd1xcZCNAXVtcXHdcXGRfXSovLFxuICAgICAgICAvLyBuZWdhdGl2ZSBsb29rLWFoZWFkIHRyaWVzIHRvIGF2b2lkIG1hdGNoaW5nIHBhdHRlcm5zIHRoYXQgYXJlIG5vdFxuICAgICAgICAvLyBQZXJsIGF0IGFsbCBsaWtlICRpZGVudCQsIEBpZGVudEAsIGV0Yy5cbiAgICAgICAgYCg/IVtcXFxcd1xcXFxkXSkoPyFbJF0pYCkgfSxcbiAgICAgIEJSQUNFRF9WQVJcbiAgICBdXG4gIH0pO1xuXG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcJFxcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICB9O1xuICBjb25zdCBIRVJFX0RPQyA9IHtcbiAgICBiZWdpbjogLzw8LT9cXHMqKD89XFx3KykvLFxuICAgIHN0YXJ0czogeyBjb250YWluczogW1xuICAgICAgaGxqcy5FTkRfU0FNRV9BU19CRUdJTih7XG4gICAgICAgIGJlZ2luOiAvKFxcdyspLyxcbiAgICAgICAgZW5kOiAvKFxcdyspLyxcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJ1xuICAgICAgfSlcbiAgICBdIH1cbiAgfTtcbiAgY29uc3QgUVVPVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cIi8sXG4gICAgZW5kOiAvXCIvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBWQVIsXG4gICAgICBTVUJTVFxuICAgIF1cbiAgfTtcbiAgU1VCU1QuY29udGFpbnMucHVzaChRVU9URV9TVFJJTkcpO1xuICBjb25zdCBFU0NBUEVEX1FVT1RFID0ge1xuICAgIGNsYXNzTmFtZTogJycsXG4gICAgYmVnaW46IC9cXFxcXCIvXG5cbiAgfTtcbiAgY29uc3QgQVBPU19TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogLycvLFxuICAgIGVuZDogLycvXG4gIH07XG4gIGNvbnN0IEFSSVRITUVUSUMgPSB7XG4gICAgYmVnaW46IC9cXCRcXChcXCgvLFxuICAgIGVuZDogL1xcKVxcKS8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXGQrI1swLTlhLWZdKy8sXG4gICAgICAgIGNsYXNzTmFtZTogXCJudW1iZXJcIlxuICAgICAgfSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICBWQVJcbiAgICBdXG4gIH07XG4gIGNvbnN0IFNIX0xJS0VfU0hFTExTID0gW1xuICAgIFwiZmlzaFwiLFxuICAgIFwiYmFzaFwiLFxuICAgIFwienNoXCIsXG4gICAgXCJzaFwiLFxuICAgIFwiY3NoXCIsXG4gICAgXCJrc2hcIixcbiAgICBcInRjc2hcIixcbiAgICBcImRhc2hcIixcbiAgICBcInNjc2hcIixcbiAgXTtcbiAgY29uc3QgS05PV05fU0hFQkFORyA9IGhsanMuU0hFQkFORyh7XG4gICAgYmluYXJ5OiBgKCR7U0hfTElLRV9TSEVMTFMuam9pbihcInxcIil9KWAsXG4gICAgcmVsZXZhbmNlOiAxMFxuICB9KTtcbiAgY29uc3QgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luOiAvXFx3W1xcd1xcZF9dKlxccypcXChcXHMqXFwpXFxzKlxcey8sXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFsgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBiZWdpbjogL1xcd1tcXHdcXGRfXSovIH0pIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgS0VZV09SRFMgPSBbXG4gICAgXCJpZlwiLFxuICAgIFwidGhlblwiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwiZWxpZlwiLFxuICAgIFwiZmlcIixcbiAgICBcImZvclwiLFxuICAgIFwid2hpbGVcIixcbiAgICBcImluXCIsXG4gICAgXCJkb1wiLFxuICAgIFwiZG9uZVwiLFxuICAgIFwiY2FzZVwiLFxuICAgIFwiZXNhY1wiLFxuICAgIFwiZnVuY3Rpb25cIlxuICBdO1xuXG4gIGNvbnN0IExJVEVSQUxTID0gW1xuICAgIFwidHJ1ZVwiLFxuICAgIFwiZmFsc2VcIlxuICBdO1xuXG4gIC8vIHRvIGNvbnN1bWUgcGF0aHMgdG8gcHJldmVudCBrZXl3b3JkIG1hdGNoZXMgaW5zaWRlIHRoZW1cbiAgY29uc3QgUEFUSF9NT0RFID0geyBtYXRjaDogLyhcXC9bYS16Ll8tXSspKy8gfTtcblxuICAvLyBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9tYW51YWwvaHRtbF9ub2RlL1NoZWxsLUJ1aWx0aW4tQ29tbWFuZHMuaHRtbFxuICBjb25zdCBTSEVMTF9CVUlMVF9JTlMgPSBbXG4gICAgXCJicmVha1wiLFxuICAgIFwiY2RcIixcbiAgICBcImNvbnRpbnVlXCIsXG4gICAgXCJldmFsXCIsXG4gICAgXCJleGVjXCIsXG4gICAgXCJleGl0XCIsXG4gICAgXCJleHBvcnRcIixcbiAgICBcImdldG9wdHNcIixcbiAgICBcImhhc2hcIixcbiAgICBcInB3ZFwiLFxuICAgIFwicmVhZG9ubHlcIixcbiAgICBcInJldHVyblwiLFxuICAgIFwic2hpZnRcIixcbiAgICBcInRlc3RcIixcbiAgICBcInRpbWVzXCIsXG4gICAgXCJ0cmFwXCIsXG4gICAgXCJ1bWFza1wiLFxuICAgIFwidW5zZXRcIlxuICBdO1xuXG4gIGNvbnN0IEJBU0hfQlVJTFRfSU5TID0gW1xuICAgIFwiYWxpYXNcIixcbiAgICBcImJpbmRcIixcbiAgICBcImJ1aWx0aW5cIixcbiAgICBcImNhbGxlclwiLFxuICAgIFwiY29tbWFuZFwiLFxuICAgIFwiZGVjbGFyZVwiLFxuICAgIFwiZWNob1wiLFxuICAgIFwiZW5hYmxlXCIsXG4gICAgXCJoZWxwXCIsXG4gICAgXCJsZXRcIixcbiAgICBcImxvY2FsXCIsXG4gICAgXCJsb2dvdXRcIixcbiAgICBcIm1hcGZpbGVcIixcbiAgICBcInByaW50ZlwiLFxuICAgIFwicmVhZFwiLFxuICAgIFwicmVhZGFycmF5XCIsXG4gICAgXCJzb3VyY2VcIixcbiAgICBcInR5cGVcIixcbiAgICBcInR5cGVzZXRcIixcbiAgICBcInVsaW1pdFwiLFxuICAgIFwidW5hbGlhc1wiXG4gIF07XG5cbiAgY29uc3QgWlNIX0JVSUxUX0lOUyA9IFtcbiAgICBcImF1dG9sb2FkXCIsXG4gICAgXCJiZ1wiLFxuICAgIFwiYmluZGtleVwiLFxuICAgIFwiYnllXCIsXG4gICAgXCJjYXBcIixcbiAgICBcImNoZGlyXCIsXG4gICAgXCJjbG9uZVwiLFxuICAgIFwiY29tcGFyZ3VtZW50c1wiLFxuICAgIFwiY29tcGNhbGxcIixcbiAgICBcImNvbXBjdGxcIixcbiAgICBcImNvbXBkZXNjcmliZVwiLFxuICAgIFwiY29tcGZpbGVzXCIsXG4gICAgXCJjb21wZ3JvdXBzXCIsXG4gICAgXCJjb21wcXVvdGVcIixcbiAgICBcImNvbXB0YWdzXCIsXG4gICAgXCJjb21wdHJ5XCIsXG4gICAgXCJjb21wdmFsdWVzXCIsXG4gICAgXCJkaXJzXCIsXG4gICAgXCJkaXNhYmxlXCIsXG4gICAgXCJkaXNvd25cIixcbiAgICBcImVjaG90Y1wiLFxuICAgIFwiZWNob3RpXCIsXG4gICAgXCJlbXVsYXRlXCIsXG4gICAgXCJmY1wiLFxuICAgIFwiZmdcIixcbiAgICBcImZsb2F0XCIsXG4gICAgXCJmdW5jdGlvbnNcIixcbiAgICBcImdldGNhcFwiLFxuICAgIFwiZ2V0bG5cIixcbiAgICBcImhpc3RvcnlcIixcbiAgICBcImludGVnZXJcIixcbiAgICBcImpvYnNcIixcbiAgICBcImtpbGxcIixcbiAgICBcImxpbWl0XCIsXG4gICAgXCJsb2dcIixcbiAgICBcIm5vZ2xvYlwiLFxuICAgIFwicG9wZFwiLFxuICAgIFwicHJpbnRcIixcbiAgICBcInB1c2hkXCIsXG4gICAgXCJwdXNobG5cIixcbiAgICBcInJlaGFzaFwiLFxuICAgIFwic2NoZWRcIixcbiAgICBcInNldGNhcFwiLFxuICAgIFwic2V0b3B0XCIsXG4gICAgXCJzdGF0XCIsXG4gICAgXCJzdXNwZW5kXCIsXG4gICAgXCJ0dHljdGxcIixcbiAgICBcInVuZnVuY3Rpb25cIixcbiAgICBcInVuaGFzaFwiLFxuICAgIFwidW5saW1pdFwiLFxuICAgIFwidW5zZXRvcHRcIixcbiAgICBcInZhcmVkXCIsXG4gICAgXCJ3YWl0XCIsXG4gICAgXCJ3aGVuY2VcIixcbiAgICBcIndoZXJlXCIsXG4gICAgXCJ3aGljaFwiLFxuICAgIFwiemNvbXBpbGVcIixcbiAgICBcInpmb3JtYXRcIixcbiAgICBcInpmdHBcIixcbiAgICBcInpsZVwiLFxuICAgIFwiem1vZGxvYWRcIixcbiAgICBcInpwYXJzZW9wdHNcIixcbiAgICBcInpwcm9mXCIsXG4gICAgXCJ6cHR5XCIsXG4gICAgXCJ6cmVnZXhwYXJzZVwiLFxuICAgIFwienNvY2tldFwiLFxuICAgIFwienN0eWxlXCIsXG4gICAgXCJ6dGNwXCJcbiAgXTtcblxuICBjb25zdCBHTlVfQ09SRV9VVElMUyA9IFtcbiAgICBcImNoY29uXCIsXG4gICAgXCJjaGdycFwiLFxuICAgIFwiY2hvd25cIixcbiAgICBcImNobW9kXCIsXG4gICAgXCJjcFwiLFxuICAgIFwiZGRcIixcbiAgICBcImRmXCIsXG4gICAgXCJkaXJcIixcbiAgICBcImRpcmNvbG9yc1wiLFxuICAgIFwibG5cIixcbiAgICBcImxzXCIsXG4gICAgXCJta2RpclwiLFxuICAgIFwibWtmaWZvXCIsXG4gICAgXCJta25vZFwiLFxuICAgIFwibWt0ZW1wXCIsXG4gICAgXCJtdlwiLFxuICAgIFwicmVhbHBhdGhcIixcbiAgICBcInJtXCIsXG4gICAgXCJybWRpclwiLFxuICAgIFwic2hyZWRcIixcbiAgICBcInN5bmNcIixcbiAgICBcInRvdWNoXCIsXG4gICAgXCJ0cnVuY2F0ZVwiLFxuICAgIFwidmRpclwiLFxuICAgIFwiYjJzdW1cIixcbiAgICBcImJhc2UzMlwiLFxuICAgIFwiYmFzZTY0XCIsXG4gICAgXCJjYXRcIixcbiAgICBcImNrc3VtXCIsXG4gICAgXCJjb21tXCIsXG4gICAgXCJjc3BsaXRcIixcbiAgICBcImN1dFwiLFxuICAgIFwiZXhwYW5kXCIsXG4gICAgXCJmbXRcIixcbiAgICBcImZvbGRcIixcbiAgICBcImhlYWRcIixcbiAgICBcImpvaW5cIixcbiAgICBcIm1kNXN1bVwiLFxuICAgIFwibmxcIixcbiAgICBcIm51bWZtdFwiLFxuICAgIFwib2RcIixcbiAgICBcInBhc3RlXCIsXG4gICAgXCJwdHhcIixcbiAgICBcInByXCIsXG4gICAgXCJzaGExc3VtXCIsXG4gICAgXCJzaGEyMjRzdW1cIixcbiAgICBcInNoYTI1NnN1bVwiLFxuICAgIFwic2hhMzg0c3VtXCIsXG4gICAgXCJzaGE1MTJzdW1cIixcbiAgICBcInNodWZcIixcbiAgICBcInNvcnRcIixcbiAgICBcInNwbGl0XCIsXG4gICAgXCJzdW1cIixcbiAgICBcInRhY1wiLFxuICAgIFwidGFpbFwiLFxuICAgIFwidHJcIixcbiAgICBcInRzb3J0XCIsXG4gICAgXCJ1bmV4cGFuZFwiLFxuICAgIFwidW5pcVwiLFxuICAgIFwid2NcIixcbiAgICBcImFyY2hcIixcbiAgICBcImJhc2VuYW1lXCIsXG4gICAgXCJjaHJvb3RcIixcbiAgICBcImRhdGVcIixcbiAgICBcImRpcm5hbWVcIixcbiAgICBcImR1XCIsXG4gICAgXCJlY2hvXCIsXG4gICAgXCJlbnZcIixcbiAgICBcImV4cHJcIixcbiAgICBcImZhY3RvclwiLFxuICAgIC8vIFwiZmFsc2VcIiwgLy8ga2V5d29yZCBsaXRlcmFsIGFscmVhZHlcbiAgICBcImdyb3Vwc1wiLFxuICAgIFwiaG9zdGlkXCIsXG4gICAgXCJpZFwiLFxuICAgIFwibGlua1wiLFxuICAgIFwibG9nbmFtZVwiLFxuICAgIFwibmljZVwiLFxuICAgIFwibm9odXBcIixcbiAgICBcIm5wcm9jXCIsXG4gICAgXCJwYXRoY2hrXCIsXG4gICAgXCJwaW5reVwiLFxuICAgIFwicHJpbnRlbnZcIixcbiAgICBcInByaW50ZlwiLFxuICAgIFwicHdkXCIsXG4gICAgXCJyZWFkbGlua1wiLFxuICAgIFwicnVuY29uXCIsXG4gICAgXCJzZXFcIixcbiAgICBcInNsZWVwXCIsXG4gICAgXCJzdGF0XCIsXG4gICAgXCJzdGRidWZcIixcbiAgICBcInN0dHlcIixcbiAgICBcInRlZVwiLFxuICAgIFwidGVzdFwiLFxuICAgIFwidGltZW91dFwiLFxuICAgIC8vIFwidHJ1ZVwiLCAvLyBrZXl3b3JkIGxpdGVyYWwgYWxyZWFkeVxuICAgIFwidHR5XCIsXG4gICAgXCJ1bmFtZVwiLFxuICAgIFwidW5saW5rXCIsXG4gICAgXCJ1cHRpbWVcIixcbiAgICBcInVzZXJzXCIsXG4gICAgXCJ3aG9cIixcbiAgICBcIndob2FtaVwiLFxuICAgIFwieWVzXCJcbiAgXTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdCYXNoJyxcbiAgICBhbGlhc2VzOiBbICdzaCcgXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IC9cXGJbYS16XVthLXowLTkuXy1dK1xcYi8sXG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgICAgYnVpbHRfaW46IFtcbiAgICAgICAgLi4uU0hFTExfQlVJTFRfSU5TLFxuICAgICAgICAuLi5CQVNIX0JVSUxUX0lOUyxcbiAgICAgICAgLy8gU2hlbGwgbW9kaWZpZXJzXG4gICAgICAgIFwic2V0XCIsXG4gICAgICAgIFwic2hvcHRcIixcbiAgICAgICAgLi4uWlNIX0JVSUxUX0lOUyxcbiAgICAgICAgLi4uR05VX0NPUkVfVVRJTFNcbiAgICAgIF1cbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBLTk9XTl9TSEVCQU5HLCAvLyB0byBjYXRjaCBrbm93biBzaGVsbHMgYW5kIGJvb3N0IHJlbGV2YW5jeVxuICAgICAgaGxqcy5TSEVCQU5HKCksIC8vIHRvIGNhdGNoIHVua25vd24gc2hlbGxzIGJ1dCBzdGlsbCBoaWdobGlnaHQgdGhlIHNoZWJhbmdcbiAgICAgIEZVTkNUSU9OLFxuICAgICAgQVJJVEhNRVRJQyxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBIRVJFX0RPQyxcbiAgICAgIFBBVEhfTU9ERSxcbiAgICAgIFFVT1RFX1NUUklORyxcbiAgICAgIEVTQ0FQRURfUVVPVEUsXG4gICAgICBBUE9TX1NUUklORyxcbiAgICAgIFZBUlxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNoO1xuIiwiLypcbkxhbmd1YWdlOiBDXG5DYXRlZ29yeTogY29tbW9uLCBzeXN0ZW1cbldlYnNpdGU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NfKHByb2dyYW1taW5nX2xhbmd1YWdlKVxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGMoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIC8vIGFkZGVkIGZvciBoaXN0b3JpYyByZWFzb25zIGJlY2F1c2UgYGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERWAgZG9lc1xuICAvLyBub3QgaW5jbHVkZSBzdWNoIHN1cHBvcnQgbm9yIGNhbiB3ZSBiZSBzdXJlIGFsbCB0aGUgZ3JhbW1hcnMgZGVwZW5kaW5nXG4gIC8vIG9uIGl0IHdvdWxkIGRlc2lyZSB0aGlzIGJlaGF2aW9yXG4gIGNvbnN0IENfTElORV9DT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoJy8vJywgJyQnLCB7IGNvbnRhaW5zOiBbIHsgYmVnaW46IC9cXFxcXFxuLyB9IF0gfSk7XG4gIGNvbnN0IERFQ0xUWVBFX0FVVE9fUkUgPSAnZGVjbHR5cGVcXFxcKGF1dG9cXFxcKSc7XG4gIGNvbnN0IE5BTUVTUEFDRV9SRSA9ICdbYS16QS1aX11cXFxcdyo6Oic7XG4gIGNvbnN0IFRFTVBMQVRFX0FSR1VNRU5UX1JFID0gJzxbXjw+XSs+JztcbiAgY29uc3QgRlVOQ1RJT05fVFlQRV9SRSA9ICcoJ1xuICAgICsgREVDTFRZUEVfQVVUT19SRSArICd8J1xuICAgICsgcmVnZXgub3B0aW9uYWwoTkFNRVNQQUNFX1JFKVxuICAgICsgJ1thLXpBLVpfXVxcXFx3KicgKyByZWdleC5vcHRpb25hbChURU1QTEFURV9BUkdVTUVOVF9SRSlcbiAgKyAnKSc7XG5cblxuICBjb25zdCBUWVBFUyA9IHtcbiAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFxiW2EtelxcXFxkX10qX3RcXFxcYicgfSxcbiAgICAgIHsgbWF0Y2g6IC9cXGJhdG9taWNfW2Etel17Myw2fVxcYi8gfVxuICAgIF1cblxuICB9O1xuXG4gIC8vIGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9sYW5ndWFnZS9lc2NhcGVcbiAgLy8gXFxcXCBcXHggXFx4RkYgXFx1MjgzNyBcXHUwMDMyMzc0NyBcXDM3NFxuICBjb25zdCBDSEFSQUNURVJfRVNDQVBFUyA9ICdcXFxcXFxcXCh4WzAtOUEtRmEtZl17Mn18dVswLTlBLUZhLWZdezQsOH18WzAtN117M318XFxcXFMpJztcbiAgY29uc3QgU1RSSU5HUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKHU4P3xVfEwpP1wiJyxcbiAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFV8TCk/XFwnKCcgKyBDSEFSQUNURVJfRVNDQVBFUyArIFwifC4pXCIsXG4gICAgICAgIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6ICcuJ1xuICAgICAgfSxcbiAgICAgIGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgICAgICBiZWdpbjogLyg/OnU4P3xVfEwpP1JcIihbXigpXFxcXCBdezAsMTZ9KVxcKC8sXG4gICAgICAgIGVuZDogL1xcKShbXigpXFxcXCBdezAsMTZ9KVwiL1xuICAgICAgfSlcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnXFxcXGIoMGJbMDFcXCddKyknIH0sXG4gICAgICB7IGJlZ2luOiAnKC0/KVxcXFxiKFtcXFxcZFxcJ10rKFxcXFwuW1xcXFxkXFwnXSopP3xcXFxcLltcXFxcZFxcJ10rKSgobGx8TEx8bHxMKSh1fFUpP3wodXxVKShsbHxMTHxsfEwpP3xmfEZ8YnxCKScgfSxcbiAgICAgIHsgYmVnaW46ICcoLT8pKFxcXFxiMFt4WF1bYS1mQS1GMC05XFwnXSt8KFxcXFxiW1xcXFxkXFwnXSsoXFxcXC5bXFxcXGRcXCddKik/fFxcXFwuW1xcXFxkXFwnXSspKFtlRV1bLStdP1tcXFxcZFxcJ10rKT8pJyB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBQUkVQUk9DRVNTT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46IC8jXFxzKlthLXpdK1xcYi8sXG4gICAgZW5kOiAvJC8sXG4gICAga2V5d29yZHM6IHsga2V5d29yZDpcbiAgICAgICAgJ2lmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lICdcbiAgICAgICAgKyAncHJhZ21hIF9QcmFnbWEgaWZkZWYgaWZuZGVmIGluY2x1ZGUnIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFxcXFxuLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KFNUUklOR1MsIHsgY2xhc3NOYW1lOiAnc3RyaW5nJyB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IC88Lio/Pi9cbiAgICAgIH0sXG4gICAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBUSVRMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICBiZWdpbjogcmVnZXgub3B0aW9uYWwoTkFNRVNQQUNFX1JFKSArIGhsanMuSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT05fVElUTEUgPSByZWdleC5vcHRpb25hbChOQU1FU1BBQ0VfUkUpICsgaGxqcy5JREVOVF9SRSArICdcXFxccypcXFxcKCc7XG5cbiAgY29uc3QgQ19LRVlXT1JEUyA9IFtcbiAgICBcImFzbVwiLFxuICAgIFwiYXV0b1wiLFxuICAgIFwiYnJlYWtcIixcbiAgICBcImNhc2VcIixcbiAgICBcImNvbnRpbnVlXCIsXG4gICAgXCJkZWZhdWx0XCIsXG4gICAgXCJkb1wiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZXh0ZXJuXCIsXG4gICAgXCJmb3JcIixcbiAgICBcImZvcnRyYW5cIixcbiAgICBcImdvdG9cIixcbiAgICBcImlmXCIsXG4gICAgXCJpbmxpbmVcIixcbiAgICBcInJlZ2lzdGVyXCIsXG4gICAgXCJyZXN0cmljdFwiLFxuICAgIFwicmV0dXJuXCIsXG4gICAgXCJzaXplb2ZcIixcbiAgICBcInN0cnVjdFwiLFxuICAgIFwic3dpdGNoXCIsXG4gICAgXCJ0eXBlZGVmXCIsXG4gICAgXCJ1bmlvblwiLFxuICAgIFwidm9sYXRpbGVcIixcbiAgICBcIndoaWxlXCIsXG4gICAgXCJfQWxpZ25hc1wiLFxuICAgIFwiX0FsaWdub2ZcIixcbiAgICBcIl9BdG9taWNcIixcbiAgICBcIl9HZW5lcmljXCIsXG4gICAgXCJfTm9yZXR1cm5cIixcbiAgICBcIl9TdGF0aWNfYXNzZXJ0XCIsXG4gICAgXCJfVGhyZWFkX2xvY2FsXCIsXG4gICAgLy8gYWxpYXNlc1xuICAgIFwiYWxpZ25hc1wiLFxuICAgIFwiYWxpZ25vZlwiLFxuICAgIFwibm9yZXR1cm5cIixcbiAgICBcInN0YXRpY19hc3NlcnRcIixcbiAgICBcInRocmVhZF9sb2NhbFwiLFxuICAgIC8vIG5vdCBhIEMga2V5d29yZCBidXQgaXMsIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMsIHRyZWF0ZWQgZXhhY3RseSBsaWtlIG9uZS5cbiAgICBcIl9QcmFnbWFcIlxuICBdO1xuXG4gIGNvbnN0IENfVFlQRVMgPSBbXG4gICAgXCJmbG9hdFwiLFxuICAgIFwiZG91YmxlXCIsXG4gICAgXCJzaWduZWRcIixcbiAgICBcInVuc2lnbmVkXCIsXG4gICAgXCJpbnRcIixcbiAgICBcInNob3J0XCIsXG4gICAgXCJsb25nXCIsXG4gICAgXCJjaGFyXCIsXG4gICAgXCJ2b2lkXCIsXG4gICAgXCJfQm9vbFwiLFxuICAgIFwiX0NvbXBsZXhcIixcbiAgICBcIl9JbWFnaW5hcnlcIixcbiAgICBcIl9EZWNpbWFsMzJcIixcbiAgICBcIl9EZWNpbWFsNjRcIixcbiAgICBcIl9EZWNpbWFsMTI4XCIsXG4gICAgLy8gbW9kaWZpZXJzXG4gICAgXCJjb25zdFwiLFxuICAgIFwic3RhdGljXCIsXG4gICAgLy8gYWxpYXNlc1xuICAgIFwiY29tcGxleFwiLFxuICAgIFwiYm9vbFwiLFxuICAgIFwiaW1hZ2luYXJ5XCJcbiAgXTtcblxuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOiBDX0tFWVdPUkRTLFxuICAgIHR5cGU6IENfVFlQRVMsXG4gICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UgTlVMTCcsXG4gICAgLy8gVE9ETzogYXBwbHkgaGludGluZyB3b3JrIHNpbWlsYXIgdG8gd2hhdCB3YXMgZG9uZSBpbiBjcHAuanNcbiAgICBidWlsdF9pbjogJ3N0ZCBzdHJpbmcgd3N0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RkaW4gc3Rkb3V0IHN0ZGVyciBzdHJpbmdzdHJlYW0gaXN0cmluZ3N0cmVhbSBvc3RyaW5nc3RyZWFtICdcbiAgICAgICsgJ2F1dG9fcHRyIGRlcXVlIGxpc3QgcXVldWUgc3RhY2sgdmVjdG9yIG1hcCBzZXQgcGFpciBiaXRzZXQgbXVsdGlzZXQgbXVsdGltYXAgdW5vcmRlcmVkX3NldCAnXG4gICAgICArICd1bm9yZGVyZWRfbWFwIHVub3JkZXJlZF9tdWx0aXNldCB1bm9yZGVyZWRfbXVsdGltYXAgcHJpb3JpdHlfcXVldWUgbWFrZV9wYWlyIGFycmF5IHNoYXJlZF9wdHIgYWJvcnQgdGVybWluYXRlIGFicyBhY29zICdcbiAgICAgICsgJ2FzaW4gYXRhbjIgYXRhbiBjYWxsb2MgY2VpbCBjb3NoIGNvcyBleGl0IGV4cCBmYWJzIGZsb29yIGZtb2QgZnByaW50ZiBmcHV0cyBmcmVlIGZyZXhwICdcbiAgICAgICsgJ2ZzY2FuZiBmdXR1cmUgaXNhbG51bSBpc2FscGhhIGlzY250cmwgaXNkaWdpdCBpc2dyYXBoIGlzbG93ZXIgaXNwcmludCBpc3B1bmN0IGlzc3BhY2UgaXN1cHBlciAnXG4gICAgICArICdpc3hkaWdpdCB0b2xvd2VyIHRvdXBwZXIgbGFicyBsZGV4cCBsb2cxMCBsb2cgbWFsbG9jIHJlYWxsb2MgbWVtY2hyIG1lbWNtcCBtZW1jcHkgbWVtc2V0IG1vZGYgcG93ICdcbiAgICAgICsgJ3ByaW50ZiBwdXRjaGFyIHB1dHMgc2NhbmYgc2luaCBzaW4gc25wcmludGYgc3ByaW50ZiBzcXJ0IHNzY2FuZiBzdHJjYXQgc3RyY2hyIHN0cmNtcCAnXG4gICAgICArICdzdHJjcHkgc3RyY3NwbiBzdHJsZW4gc3RybmNhdCBzdHJuY21wIHN0cm5jcHkgc3RycGJyayBzdHJyY2hyIHN0cnNwbiBzdHJzdHIgdGFuaCB0YW4gJ1xuICAgICAgKyAndmZwcmludGYgdnByaW50ZiB2c3ByaW50ZiBlbmRsIGluaXRpYWxpemVyX2xpc3QgdW5pcXVlX3B0cicsXG4gIH07XG5cbiAgY29uc3QgRVhQUkVTU0lPTl9DT05UQUlOUyA9IFtcbiAgICBQUkVQUk9DRVNTT1IsXG4gICAgVFlQRVMsXG4gICAgQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIE5VTUJFUlMsXG4gICAgU1RSSU5HU1xuICBdO1xuXG4gIGNvbnN0IEVYUFJFU1NJT05fQ09OVEVYVCA9IHtcbiAgICAvLyBUaGlzIG1vZGUgY292ZXJzIGV4cHJlc3Npb24gY29udGV4dCB3aGVyZSB3ZSBjYW4ndCBleHBlY3QgYSBmdW5jdGlvblxuICAgIC8vIGRlZmluaXRpb24gYW5kIHNob3VsZG4ndCBoaWdobGlnaHQgYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlIG9uZTpcbiAgICAvLyBgcmV0dXJuIHNvbWUoKWAsIGBlbHNlIGlmKClgLCBgKHgqc3VtKDEsIDIpKWBcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLz0vLFxuICAgICAgICBlbmQ6IC87L1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbmV3IHRocm93IHJldHVybiBlbHNlJyxcbiAgICAgICAgZW5kOiAvOy9cbiAgICAgIH1cbiAgICBdLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogRVhQUkVTU0lPTl9DT05UQUlOUy5jb25jYXQoW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IEVYUFJFU1NJT05fQ09OVEFJTlMuY29uY2F0KFsgJ3NlbGYnIF0pLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdKSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9ERUNMQVJBVElPTiA9IHtcbiAgICBiZWdpbjogJygnICsgRlVOQ1RJT05fVFlQRV9SRSArICdbXFxcXComXFxcXHNdKykrJyArIEZVTkNUSU9OX1RJVExFLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGVuZDogL1t7Oz1dLyxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvW15cXHdcXHNcXComOjw+Ll0vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IC8vIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjb25mdXNlZCBhcyB0aGUgZnVuY3Rpb24gdGl0bGVcbiAgICAgICAgYmVnaW46IERFQ0xUWVBFX0FVVE9fUkUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogRlVOQ1RJT05fVElUTEUsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogWyBobGpzLmluaGVyaXQoVElUTEVfTU9ERSwgeyBjbGFzc05hbWU6IFwidGl0bGUuZnVuY3Rpb25cIiB9KSBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBhbGxvdyBmb3IgbXVsdGlwbGUgZGVjbGFyYXRpb25zLCBlLmcuOlxuICAgICAgLy8gZXh0ZXJuIHZvaWQgZihpbnQpLCBnKGNoYXIpO1xuICAgICAge1xuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIG1hdGNoOiAvLC9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIFNUUklOR1MsXG4gICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICBUWVBFUyxcbiAgICAgICAgICAvLyBDb3VudCBtYXRjaGluZyBwYXJlbnRoZXNlcy5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgICAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgICAgICBOVU1CRVJTLFxuICAgICAgICAgICAgICBUWVBFU1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFRZUEVTLFxuICAgICAgQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBQUkVQUk9DRVNTT1JcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcIkNcIixcbiAgICBhbGlhc2VzOiBbICdoJyBdLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAvLyBVbnRpbCBkaWZmZXJlbnRpYXRpb25zIGFyZSBhZGRlZCBiZXR3ZWVuIGBjYCBhbmQgYGNwcGAsIGBjYCB3aWxsXG4gICAgLy8gbm90IGJlIGF1dG8tZGV0ZWN0ZWQgdG8gYXZvaWQgYXV0by1kZXRlY3QgY29uZmxpY3RzIGJldHdlZW4gQyBhbmQgQysrXG4gICAgZGlzYWJsZUF1dG9kZXRlY3Q6IHRydWUsXG4gICAgaWxsZWdhbDogJzwvJyxcbiAgICBjb250YWluczogW10uY29uY2F0KFxuICAgICAgRVhQUkVTU0lPTl9DT05URVhULFxuICAgICAgRlVOQ1RJT05fREVDTEFSQVRJT04sXG4gICAgICBFWFBSRVNTSU9OX0NPTlRBSU5TLFxuICAgICAgW1xuICAgICAgICBQUkVQUk9DRVNTT1IsXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICc6OicsXG4gICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2VudW0gY2xhc3Mgc3RydWN0IHVuaW9uJyxcbiAgICAgICAgICBlbmQ6IC9bezs6PD49XS8sXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHsgYmVnaW5LZXl3b3JkczogXCJmaW5hbCBjbGFzcyBzdHJ1Y3RcIiB9LFxuICAgICAgICAgICAgaGxqcy5USVRMRV9NT0RFXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdKSxcbiAgICBleHBvcnRzOiB7XG4gICAgICBwcmVwcm9jZXNzb3I6IFBSRVBST0NFU1NPUixcbiAgICAgIHN0cmluZ3M6IFNUUklOR1MsXG4gICAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYztcbiIsIi8qXG5MYW5ndWFnZTogQysrXG5DYXRlZ29yeTogY29tbW9uLCBzeXN0ZW1cbldlYnNpdGU6IGh0dHBzOi8vaXNvY3BwLm9yZ1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGNwcChobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgLy8gYWRkZWQgZm9yIGhpc3RvcmljIHJlYXNvbnMgYmVjYXVzZSBgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFYCBkb2VzXG4gIC8vIG5vdCBpbmNsdWRlIHN1Y2ggc3VwcG9ydCBub3IgY2FuIHdlIGJlIHN1cmUgYWxsIHRoZSBncmFtbWFycyBkZXBlbmRpbmdcbiAgLy8gb24gaXQgd291bGQgZGVzaXJlIHRoaXMgYmVoYXZpb3JcbiAgY29uc3QgQ19MSU5FX0NPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnLy8nLCAnJCcsIHsgY29udGFpbnM6IFsgeyBiZWdpbjogL1xcXFxcXG4vIH0gXSB9KTtcbiAgY29uc3QgREVDTFRZUEVfQVVUT19SRSA9ICdkZWNsdHlwZVxcXFwoYXV0b1xcXFwpJztcbiAgY29uc3QgTkFNRVNQQUNFX1JFID0gJ1thLXpBLVpfXVxcXFx3Kjo6JztcbiAgY29uc3QgVEVNUExBVEVfQVJHVU1FTlRfUkUgPSAnPFtePD5dKz4nO1xuICBjb25zdCBGVU5DVElPTl9UWVBFX1JFID0gJyg/IXN0cnVjdCkoJ1xuICAgICsgREVDTFRZUEVfQVVUT19SRSArICd8J1xuICAgICsgcmVnZXgub3B0aW9uYWwoTkFNRVNQQUNFX1JFKVxuICAgICsgJ1thLXpBLVpfXVxcXFx3KicgKyByZWdleC5vcHRpb25hbChURU1QTEFURV9BUkdVTUVOVF9SRSlcbiAgKyAnKSc7XG5cbiAgY29uc3QgQ1BQX1BSSU1JVElWRV9UWVBFUyA9IHtcbiAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICBiZWdpbjogJ1xcXFxiW2EtelxcXFxkX10qX3RcXFxcYidcbiAgfTtcblxuICAvLyBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvbGFuZ3VhZ2UvZXNjYXBlXG4gIC8vIFxcXFwgXFx4IFxceEZGIFxcdTI4MzcgXFx1MDAzMjM3NDcgXFwzNzRcbiAgY29uc3QgQ0hBUkFDVEVSX0VTQ0FQRVMgPSAnXFxcXFxcXFwoeFswLTlBLUZhLWZdezJ9fHVbMC05QS1GYS1mXXs0LDh9fFswLTddezN9fFxcXFxTKSc7XG4gIGNvbnN0IFNUUklOR1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJyh1OD98VXxMKT9cIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKHU4P3xVfEwpP1xcJygnICsgQ0hBUkFDVEVSX0VTQ0FQRVMgKyAnfC4pJyxcbiAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJy4nXG4gICAgICB9LFxuICAgICAgaGxqcy5FTkRfU0FNRV9BU19CRUdJTih7XG4gICAgICAgIGJlZ2luOiAvKD86dTg/fFV8TCk/UlwiKFteKClcXFxcIF17MCwxNn0pXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpKFteKClcXFxcIF17MCwxNn0pXCIvXG4gICAgICB9KVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBOVU1CRVJTID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46ICdcXFxcYigwYlswMVxcJ10rKScgfSxcbiAgICAgIHsgYmVnaW46ICcoLT8pXFxcXGIoW1xcXFxkXFwnXSsoXFxcXC5bXFxcXGRcXCddKik/fFxcXFwuW1xcXFxkXFwnXSspKChsbHxMTHxsfEwpKHV8VSk/fCh1fFUpKGxsfExMfGx8TCk/fGZ8RnxifEIpJyB9LFxuICAgICAgeyBiZWdpbjogJygtPykoXFxcXGIwW3hYXVthLWZBLUYwLTlcXCddK3woXFxcXGJbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykoW2VFXVstK10/W1xcXFxkXFwnXSspPyknIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IFBSRVBST0NFU1NPUiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogLyNcXHMqW2Etel0rXFxiLyxcbiAgICBlbmQ6IC8kLyxcbiAgICBrZXl3b3JkczogeyBrZXl3b3JkOlxuICAgICAgICAnaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgJ1xuICAgICAgICArICdwcmFnbWEgX1ByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZScgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcXFxcXG4vLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLmluaGVyaXQoU1RSSU5HUywgeyBjbGFzc05hbWU6ICdzdHJpbmcnIH0pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogLzwuKj8+L1xuICAgICAgfSxcbiAgICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFRJVExFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgIGJlZ2luOiByZWdleC5vcHRpb25hbChOQU1FU1BBQ0VfUkUpICsgaGxqcy5JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9USVRMRSA9IHJlZ2V4Lm9wdGlvbmFsKE5BTUVTUEFDRV9SRSkgKyBobGpzLklERU5UX1JFICsgJ1xcXFxzKlxcXFwoJztcblxuICAvLyBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAva2V5d29yZFxuICBjb25zdCBSRVNFUlZFRF9LRVlXT1JEUyA9IFtcbiAgICAnYWxpZ25hcycsXG4gICAgJ2FsaWdub2YnLFxuICAgICdhbmQnLFxuICAgICdhbmRfZXEnLFxuICAgICdhc20nLFxuICAgICdhdG9taWNfY2FuY2VsJyxcbiAgICAnYXRvbWljX2NvbW1pdCcsXG4gICAgJ2F0b21pY19ub2V4Y2VwdCcsXG4gICAgJ2F1dG8nLFxuICAgICdiaXRhbmQnLFxuICAgICdiaXRvcicsXG4gICAgJ2JyZWFrJyxcbiAgICAnY2FzZScsXG4gICAgJ2NhdGNoJyxcbiAgICAnY2xhc3MnLFxuICAgICdjb19hd2FpdCcsXG4gICAgJ2NvX3JldHVybicsXG4gICAgJ2NvX3lpZWxkJyxcbiAgICAnY29tcGwnLFxuICAgICdjb25jZXB0JyxcbiAgICAnY29uc3RfY2FzdHwxMCcsXG4gICAgJ2NvbnN0ZXZhbCcsXG4gICAgJ2NvbnN0ZXhwcicsXG4gICAgJ2NvbnN0aW5pdCcsXG4gICAgJ2NvbnRpbnVlJyxcbiAgICAnZGVjbHR5cGUnLFxuICAgICdkZWZhdWx0JyxcbiAgICAnZGVsZXRlJyxcbiAgICAnZG8nLFxuICAgICdkeW5hbWljX2Nhc3R8MTAnLFxuICAgICdlbHNlJyxcbiAgICAnZW51bScsXG4gICAgJ2V4cGxpY2l0JyxcbiAgICAnZXhwb3J0JyxcbiAgICAnZXh0ZXJuJyxcbiAgICAnZmFsc2UnLFxuICAgICdmaW5hbCcsXG4gICAgJ2ZvcicsXG4gICAgJ2ZyaWVuZCcsXG4gICAgJ2dvdG8nLFxuICAgICdpZicsXG4gICAgJ2ltcG9ydCcsXG4gICAgJ2lubGluZScsXG4gICAgJ21vZHVsZScsXG4gICAgJ211dGFibGUnLFxuICAgICduYW1lc3BhY2UnLFxuICAgICduZXcnLFxuICAgICdub2V4Y2VwdCcsXG4gICAgJ25vdCcsXG4gICAgJ25vdF9lcScsXG4gICAgJ251bGxwdHInLFxuICAgICdvcGVyYXRvcicsXG4gICAgJ29yJyxcbiAgICAnb3JfZXEnLFxuICAgICdvdmVycmlkZScsXG4gICAgJ3ByaXZhdGUnLFxuICAgICdwcm90ZWN0ZWQnLFxuICAgICdwdWJsaWMnLFxuICAgICdyZWZsZXhwcicsXG4gICAgJ3JlZ2lzdGVyJyxcbiAgICAncmVpbnRlcnByZXRfY2FzdHwxMCcsXG4gICAgJ3JlcXVpcmVzJyxcbiAgICAncmV0dXJuJyxcbiAgICAnc2l6ZW9mJyxcbiAgICAnc3RhdGljX2Fzc2VydCcsXG4gICAgJ3N0YXRpY19jYXN0fDEwJyxcbiAgICAnc3RydWN0JyxcbiAgICAnc3dpdGNoJyxcbiAgICAnc3luY2hyb25pemVkJyxcbiAgICAndGVtcGxhdGUnLFxuICAgICd0aGlzJyxcbiAgICAndGhyZWFkX2xvY2FsJyxcbiAgICAndGhyb3cnLFxuICAgICd0cmFuc2FjdGlvbl9zYWZlJyxcbiAgICAndHJhbnNhY3Rpb25fc2FmZV9keW5hbWljJyxcbiAgICAndHJ1ZScsXG4gICAgJ3RyeScsXG4gICAgJ3R5cGVkZWYnLFxuICAgICd0eXBlaWQnLFxuICAgICd0eXBlbmFtZScsXG4gICAgJ3VuaW9uJyxcbiAgICAndXNpbmcnLFxuICAgICd2aXJ0dWFsJyxcbiAgICAndm9sYXRpbGUnLFxuICAgICd3aGlsZScsXG4gICAgJ3hvcicsXG4gICAgJ3hvcl9lcSdcbiAgXTtcblxuICAvLyBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAva2V5d29yZFxuICBjb25zdCBSRVNFUlZFRF9UWVBFUyA9IFtcbiAgICAnYm9vbCcsXG4gICAgJ2NoYXInLFxuICAgICdjaGFyMTZfdCcsXG4gICAgJ2NoYXIzMl90JyxcbiAgICAnY2hhcjhfdCcsXG4gICAgJ2RvdWJsZScsXG4gICAgJ2Zsb2F0JyxcbiAgICAnaW50JyxcbiAgICAnbG9uZycsXG4gICAgJ3Nob3J0JyxcbiAgICAndm9pZCcsXG4gICAgJ3djaGFyX3QnLFxuICAgICd1bnNpZ25lZCcsXG4gICAgJ3NpZ25lZCcsXG4gICAgJ2NvbnN0JyxcbiAgICAnc3RhdGljJ1xuICBdO1xuXG4gIGNvbnN0IFRZUEVfSElOVFMgPSBbXG4gICAgJ2FueScsXG4gICAgJ2F1dG9fcHRyJyxcbiAgICAnYmFycmllcicsXG4gICAgJ2JpbmFyeV9zZW1hcGhvcmUnLFxuICAgICdiaXRzZXQnLFxuICAgICdjb21wbGV4JyxcbiAgICAnY29uZGl0aW9uX3ZhcmlhYmxlJyxcbiAgICAnY29uZGl0aW9uX3ZhcmlhYmxlX2FueScsXG4gICAgJ2NvdW50aW5nX3NlbWFwaG9yZScsXG4gICAgJ2RlcXVlJyxcbiAgICAnZmFsc2VfdHlwZScsXG4gICAgJ2Z1dHVyZScsXG4gICAgJ2ltYWdpbmFyeScsXG4gICAgJ2luaXRpYWxpemVyX2xpc3QnLFxuICAgICdpc3RyaW5nc3RyZWFtJyxcbiAgICAnanRocmVhZCcsXG4gICAgJ2xhdGNoJyxcbiAgICAnbG9ja19ndWFyZCcsXG4gICAgJ211bHRpbWFwJyxcbiAgICAnbXVsdGlzZXQnLFxuICAgICdtdXRleCcsXG4gICAgJ29wdGlvbmFsJyxcbiAgICAnb3N0cmluZ3N0cmVhbScsXG4gICAgJ3BhY2thZ2VkX3Rhc2snLFxuICAgICdwYWlyJyxcbiAgICAncHJvbWlzZScsXG4gICAgJ3ByaW9yaXR5X3F1ZXVlJyxcbiAgICAncXVldWUnLFxuICAgICdyZWN1cnNpdmVfbXV0ZXgnLFxuICAgICdyZWN1cnNpdmVfdGltZWRfbXV0ZXgnLFxuICAgICdzY29wZWRfbG9jaycsXG4gICAgJ3NldCcsXG4gICAgJ3NoYXJlZF9mdXR1cmUnLFxuICAgICdzaGFyZWRfbG9jaycsXG4gICAgJ3NoYXJlZF9tdXRleCcsXG4gICAgJ3NoYXJlZF90aW1lZF9tdXRleCcsXG4gICAgJ3NoYXJlZF9wdHInLFxuICAgICdzdGFjaycsXG4gICAgJ3N0cmluZ192aWV3JyxcbiAgICAnc3RyaW5nc3RyZWFtJyxcbiAgICAndGltZWRfbXV0ZXgnLFxuICAgICd0aHJlYWQnLFxuICAgICd0cnVlX3R5cGUnLFxuICAgICd0dXBsZScsXG4gICAgJ3VuaXF1ZV9sb2NrJyxcbiAgICAndW5pcXVlX3B0cicsXG4gICAgJ3Vub3JkZXJlZF9tYXAnLFxuICAgICd1bm9yZGVyZWRfbXVsdGltYXAnLFxuICAgICd1bm9yZGVyZWRfbXVsdGlzZXQnLFxuICAgICd1bm9yZGVyZWRfc2V0JyxcbiAgICAndmFyaWFudCcsXG4gICAgJ3ZlY3RvcicsXG4gICAgJ3dlYWtfcHRyJyxcbiAgICAnd3N0cmluZycsXG4gICAgJ3dzdHJpbmdfdmlldydcbiAgXTtcblxuICBjb25zdCBGVU5DVElPTl9ISU5UUyA9IFtcbiAgICAnYWJvcnQnLFxuICAgICdhYnMnLFxuICAgICdhY29zJyxcbiAgICAnYXBwbHknLFxuICAgICdhc19jb25zdCcsXG4gICAgJ2FzaW4nLFxuICAgICdhdGFuJyxcbiAgICAnYXRhbjInLFxuICAgICdjYWxsb2MnLFxuICAgICdjZWlsJyxcbiAgICAnY2VycicsXG4gICAgJ2NpbicsXG4gICAgJ2Nsb2cnLFxuICAgICdjb3MnLFxuICAgICdjb3NoJyxcbiAgICAnY291dCcsXG4gICAgJ2RlY2x2YWwnLFxuICAgICdlbmRsJyxcbiAgICAnZXhjaGFuZ2UnLFxuICAgICdleGl0JyxcbiAgICAnZXhwJyxcbiAgICAnZmFicycsXG4gICAgJ2Zsb29yJyxcbiAgICAnZm1vZCcsXG4gICAgJ2ZvcndhcmQnLFxuICAgICdmcHJpbnRmJyxcbiAgICAnZnB1dHMnLFxuICAgICdmcmVlJyxcbiAgICAnZnJleHAnLFxuICAgICdmc2NhbmYnLFxuICAgICdmdXR1cmUnLFxuICAgICdpbnZva2UnLFxuICAgICdpc2FsbnVtJyxcbiAgICAnaXNhbHBoYScsXG4gICAgJ2lzY250cmwnLFxuICAgICdpc2RpZ2l0JyxcbiAgICAnaXNncmFwaCcsXG4gICAgJ2lzbG93ZXInLFxuICAgICdpc3ByaW50JyxcbiAgICAnaXNwdW5jdCcsXG4gICAgJ2lzc3BhY2UnLFxuICAgICdpc3VwcGVyJyxcbiAgICAnaXN4ZGlnaXQnLFxuICAgICdsYWJzJyxcbiAgICAnbGF1bmRlcicsXG4gICAgJ2xkZXhwJyxcbiAgICAnbG9nJyxcbiAgICAnbG9nMTAnLFxuICAgICdtYWtlX3BhaXInLFxuICAgICdtYWtlX3NoYXJlZCcsXG4gICAgJ21ha2Vfc2hhcmVkX2Zvcl9vdmVyd3JpdGUnLFxuICAgICdtYWtlX3R1cGxlJyxcbiAgICAnbWFrZV91bmlxdWUnLFxuICAgICdtYWxsb2MnLFxuICAgICdtZW1jaHInLFxuICAgICdtZW1jbXAnLFxuICAgICdtZW1jcHknLFxuICAgICdtZW1zZXQnLFxuICAgICdtb2RmJyxcbiAgICAnbW92ZScsXG4gICAgJ3BvdycsXG4gICAgJ3ByaW50ZicsXG4gICAgJ3B1dGNoYXInLFxuICAgICdwdXRzJyxcbiAgICAncmVhbGxvYycsXG4gICAgJ3NjYW5mJyxcbiAgICAnc2luJyxcbiAgICAnc2luaCcsXG4gICAgJ3NucHJpbnRmJyxcbiAgICAnc3ByaW50ZicsXG4gICAgJ3NxcnQnLFxuICAgICdzc2NhbmYnLFxuICAgICdzdGQnLFxuICAgICdzdGRlcnInLFxuICAgICdzdGRpbicsXG4gICAgJ3N0ZG91dCcsXG4gICAgJ3N0cmNhdCcsXG4gICAgJ3N0cmNocicsXG4gICAgJ3N0cmNtcCcsXG4gICAgJ3N0cmNweScsXG4gICAgJ3N0cmNzcG4nLFxuICAgICdzdHJsZW4nLFxuICAgICdzdHJuY2F0JyxcbiAgICAnc3RybmNtcCcsXG4gICAgJ3N0cm5jcHknLFxuICAgICdzdHJwYnJrJyxcbiAgICAnc3RycmNocicsXG4gICAgJ3N0cnNwbicsXG4gICAgJ3N0cnN0cicsXG4gICAgJ3N3YXAnLFxuICAgICd0YW4nLFxuICAgICd0YW5oJyxcbiAgICAndGVybWluYXRlJyxcbiAgICAndG9fdW5kZXJseWluZycsXG4gICAgJ3RvbG93ZXInLFxuICAgICd0b3VwcGVyJyxcbiAgICAndmZwcmludGYnLFxuICAgICd2aXNpdCcsXG4gICAgJ3ZwcmludGYnLFxuICAgICd2c3ByaW50ZidcbiAgXTtcblxuICBjb25zdCBMSVRFUkFMUyA9IFtcbiAgICAnTlVMTCcsXG4gICAgJ2ZhbHNlJyxcbiAgICAnbnVsbG9wdCcsXG4gICAgJ251bGxwdHInLFxuICAgICd0cnVlJ1xuICBdO1xuXG4gIC8vIGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9rZXl3b3JkXG4gIGNvbnN0IEJVSUxUX0lOID0gWyAnX1ByYWdtYScgXTtcblxuICBjb25zdCBDUFBfS0VZV09SRFMgPSB7XG4gICAgdHlwZTogUkVTRVJWRURfVFlQRVMsXG4gICAga2V5d29yZDogUkVTRVJWRURfS0VZV09SRFMsXG4gICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOLFxuICAgIF90eXBlX2hpbnRzOiBUWVBFX0hJTlRTXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT05fRElTUEFUQ0ggPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24uZGlzcGF0Y2gnLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgLy8gT25seSBmb3IgcmVsZXZhbmNlLCBub3QgaGlnaGxpZ2h0aW5nLlxuICAgICAgX2hpbnQ6IEZVTkNUSU9OX0hJTlRTIH0sXG4gICAgYmVnaW46IHJlZ2V4LmNvbmNhdChcbiAgICAgIC9cXGIvLFxuICAgICAgLyg/IWRlY2x0eXBlKS8sXG4gICAgICAvKD8haWYpLyxcbiAgICAgIC8oPyFmb3IpLyxcbiAgICAgIC8oPyFzd2l0Y2gpLyxcbiAgICAgIC8oPyF3aGlsZSkvLFxuICAgICAgaGxqcy5JREVOVF9SRSxcbiAgICAgIHJlZ2V4Lmxvb2thaGVhZCgvKDxbXjw+XSs+fClcXHMqXFwoLykpXG4gIH07XG5cbiAgY29uc3QgRVhQUkVTU0lPTl9DT05UQUlOUyA9IFtcbiAgICBGVU5DVElPTl9ESVNQQVRDSCxcbiAgICBQUkVQUk9DRVNTT1IsXG4gICAgQ1BQX1BSSU1JVElWRV9UWVBFUyxcbiAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgTlVNQkVSUyxcbiAgICBTVFJJTkdTXG4gIF07XG5cbiAgY29uc3QgRVhQUkVTU0lPTl9DT05URVhUID0ge1xuICAgIC8vIFRoaXMgbW9kZSBjb3ZlcnMgZXhwcmVzc2lvbiBjb250ZXh0IHdoZXJlIHdlIGNhbid0IGV4cGVjdCBhIGZ1bmN0aW9uXG4gICAgLy8gZGVmaW5pdGlvbiBhbmQgc2hvdWxkbid0IGhpZ2hsaWdodCBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2Ugb25lOlxuICAgIC8vIGByZXR1cm4gc29tZSgpYCwgYGVsc2UgaWYoKWAsIGAoeCpzdW0oMSwgMikpYFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvPS8sXG4gICAgICAgIGVuZDogLzsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICduZXcgdGhyb3cgcmV0dXJuIGVsc2UnLFxuICAgICAgICBlbmQ6IC87L1xuICAgICAgfVxuICAgIF0sXG4gICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICBjb250YWluczogRVhQUkVTU0lPTl9DT05UQUlOUy5jb25jYXQoW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OX0NPTlRBSU5TLmNvbmNhdChbICdzZWxmJyBdKSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSksXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT05fREVDTEFSQVRJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luOiAnKCcgKyBGVU5DVElPTl9UWVBFX1JFICsgJ1tcXFxcKiZcXFxcc10rKSsnICsgRlVOQ1RJT05fVElUTEUsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgZW5kOiAvW3s7PV0vLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvW15cXHdcXHNcXComOjw+Ll0vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IC8vIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjb25mdXNlZCBhcyB0aGUgZnVuY3Rpb24gdGl0bGVcbiAgICAgICAgYmVnaW46IERFQ0xUWVBFX0FVVE9fUkUsXG4gICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IEZVTkNUSU9OX1RJVExFLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFsgVElUTEVfTU9ERSBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBuZWVkZWQgYmVjYXVzZSB3ZSBkbyBub3QgaGF2ZSBsb29rLWJlaGluZCBvbiB0aGUgYmVsb3cgcnVsZVxuICAgICAgLy8gdG8gcHJldmVudCBpdCBmcm9tIGdyYWJiaW5nIHRoZSBmaW5hbCA6IGluIGEgOjogcGFpclxuICAgICAge1xuICAgICAgICBiZWdpbjogLzo6LyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gaW5pdGlhbGl6ZXJzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvOi8sXG4gICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFNUUklOR1MsXG4gICAgICAgICAgTlVNQkVSU1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gYWxsb3cgZm9yIG11bHRpcGxlIGRlY2xhcmF0aW9ucywgZS5nLjpcbiAgICAgIC8vIGV4dGVybiB2b2lkIGYoaW50KSwgZyhjaGFyKTtcbiAgICAgIHtcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBtYXRjaDogLywvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgU1RSSU5HUyxcbiAgICAgICAgICBOVU1CRVJTLFxuICAgICAgICAgIENQUF9QUklNSVRJVkVfVFlQRVMsXG4gICAgICAgICAgLy8gQ291bnQgbWF0Y2hpbmcgcGFyZW50aGVzZXMuXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgIENfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIFNUUklOR1MsXG4gICAgICAgICAgICAgIE5VTUJFUlMsXG4gICAgICAgICAgICAgIENQUF9QUklNSVRJVkVfVFlQRVNcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBDUFBfUFJJTUlUSVZFX1RZUEVTLFxuICAgICAgQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBQUkVQUk9DRVNTT1JcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnQysrJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnY2MnLFxuICAgICAgJ2MrKycsXG4gICAgICAnaCsrJyxcbiAgICAgICdocHAnLFxuICAgICAgJ2hoJyxcbiAgICAgICdoeHgnLFxuICAgICAgJ2N4eCdcbiAgICBdLFxuICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgaWxsZWdhbDogJzwvJyxcbiAgICBjbGFzc05hbWVBbGlhc2VzOiB7ICdmdW5jdGlvbi5kaXNwYXRjaCc6ICdidWlsdF9pbicgfSxcbiAgICBjb250YWluczogW10uY29uY2F0KFxuICAgICAgRVhQUkVTU0lPTl9DT05URVhULFxuICAgICAgRlVOQ1RJT05fREVDTEFSQVRJT04sXG4gICAgICBGVU5DVElPTl9ESVNQQVRDSCxcbiAgICAgIEVYUFJFU1NJT05fQ09OVEFJTlMsXG4gICAgICBbXG4gICAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgICAgeyAvLyBjb250YWluZXJzOiBpZSwgYHZlY3RvciA8aW50PiByb29tcyAoOSk7YFxuICAgICAgICAgIGJlZ2luOiAnXFxcXGIoZGVxdWV8bGlzdHxxdWV1ZXxwcmlvcml0eV9xdWV1ZXxwYWlyfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheXx0dXBsZXxvcHRpb25hbHx2YXJpYW50fGZ1bmN0aW9uKVxcXFxzKjwoPyE8KScsXG4gICAgICAgICAgZW5kOiAnPicsXG4gICAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgICAgQ1BQX1BSSU1JVElWRV9UWVBFU1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJzo6JyxcbiAgICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtYXRjaDogW1xuICAgICAgICAgICAgLy8gZXh0cmEgY29tcGxleGl0eSB0byBkZWFsIHdpdGggYGVudW0gY2xhc3NgIGFuZCBgZW51bSBzdHJ1Y3RgXG4gICAgICAgICAgICAvXFxiKD86ZW51bSg/OlxccysoPzpjbGFzc3xzdHJ1Y3QpKT98Y2xhc3N8c3RydWN0fHVuaW9uKS8sXG4gICAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgICAvXFx3Ky9cbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzTmFtZToge1xuICAgICAgICAgICAgMTogJ2tleXdvcmQnLFxuICAgICAgICAgICAgMzogJ3RpdGxlLmNsYXNzJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXSlcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcHA7XG4iLCIvKlxuTGFuZ3VhZ2U6IEMjXG5BdXRob3I6IEphc29uIERpYW1vbmQgPGphc29uQGRpYW1vbmQubmFtZT5cbkNvbnRyaWJ1dG9yOiBOaWNvbGFzIExMT0JFUkEgPG5sbG9iZXJhQGdtYWlsLmNvbT4sIFBpZXRlciBWYW50b3JyZSA8cGlldGVydmFudG9ycmVAZ21haWwuY29tPiwgRGF2aWQgUGluZSA8ZGF2aWQucGluZUBtaWNyb3NvZnQuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZG90bmV0L2NzaGFycC9cbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBjc2hhcnAoaGxqcykge1xuICBjb25zdCBCVUlMVF9JTl9LRVlXT1JEUyA9IFtcbiAgICAnYm9vbCcsXG4gICAgJ2J5dGUnLFxuICAgICdjaGFyJyxcbiAgICAnZGVjaW1hbCcsXG4gICAgJ2RlbGVnYXRlJyxcbiAgICAnZG91YmxlJyxcbiAgICAnZHluYW1pYycsXG4gICAgJ2VudW0nLFxuICAgICdmbG9hdCcsXG4gICAgJ2ludCcsXG4gICAgJ2xvbmcnLFxuICAgICduaW50JyxcbiAgICAnbnVpbnQnLFxuICAgICdvYmplY3QnLFxuICAgICdzYnl0ZScsXG4gICAgJ3Nob3J0JyxcbiAgICAnc3RyaW5nJyxcbiAgICAndWxvbmcnLFxuICAgICd1aW50JyxcbiAgICAndXNob3J0J1xuICBdO1xuICBjb25zdCBGVU5DVElPTl9NT0RJRklFUlMgPSBbXG4gICAgJ3B1YmxpYycsXG4gICAgJ3ByaXZhdGUnLFxuICAgICdwcm90ZWN0ZWQnLFxuICAgICdzdGF0aWMnLFxuICAgICdpbnRlcm5hbCcsXG4gICAgJ3Byb3RlY3RlZCcsXG4gICAgJ2Fic3RyYWN0JyxcbiAgICAnYXN5bmMnLFxuICAgICdleHRlcm4nLFxuICAgICdvdmVycmlkZScsXG4gICAgJ3Vuc2FmZScsXG4gICAgJ3ZpcnR1YWwnLFxuICAgICduZXcnLFxuICAgICdzZWFsZWQnLFxuICAgICdwYXJ0aWFsJ1xuICBdO1xuICBjb25zdCBMSVRFUkFMX0tFWVdPUkRTID0gW1xuICAgICdkZWZhdWx0JyxcbiAgICAnZmFsc2UnLFxuICAgICdudWxsJyxcbiAgICAndHJ1ZSdcbiAgXTtcbiAgY29uc3QgTk9STUFMX0tFWVdPUkRTID0gW1xuICAgICdhYnN0cmFjdCcsXG4gICAgJ2FzJyxcbiAgICAnYmFzZScsXG4gICAgJ2JyZWFrJyxcbiAgICAnY2FzZScsXG4gICAgJ2NhdGNoJyxcbiAgICAnY2xhc3MnLFxuICAgICdjb25zdCcsXG4gICAgJ2NvbnRpbnVlJyxcbiAgICAnZG8nLFxuICAgICdlbHNlJyxcbiAgICAnZXZlbnQnLFxuICAgICdleHBsaWNpdCcsXG4gICAgJ2V4dGVybicsXG4gICAgJ2ZpbmFsbHknLFxuICAgICdmaXhlZCcsXG4gICAgJ2ZvcicsXG4gICAgJ2ZvcmVhY2gnLFxuICAgICdnb3RvJyxcbiAgICAnaWYnLFxuICAgICdpbXBsaWNpdCcsXG4gICAgJ2luJyxcbiAgICAnaW50ZXJmYWNlJyxcbiAgICAnaW50ZXJuYWwnLFxuICAgICdpcycsXG4gICAgJ2xvY2snLFxuICAgICduYW1lc3BhY2UnLFxuICAgICduZXcnLFxuICAgICdvcGVyYXRvcicsXG4gICAgJ291dCcsXG4gICAgJ292ZXJyaWRlJyxcbiAgICAncGFyYW1zJyxcbiAgICAncHJpdmF0ZScsXG4gICAgJ3Byb3RlY3RlZCcsXG4gICAgJ3B1YmxpYycsXG4gICAgJ3JlYWRvbmx5JyxcbiAgICAncmVjb3JkJyxcbiAgICAncmVmJyxcbiAgICAncmV0dXJuJyxcbiAgICAnc2NvcGVkJyxcbiAgICAnc2VhbGVkJyxcbiAgICAnc2l6ZW9mJyxcbiAgICAnc3RhY2thbGxvYycsXG4gICAgJ3N0YXRpYycsXG4gICAgJ3N0cnVjdCcsXG4gICAgJ3N3aXRjaCcsXG4gICAgJ3RoaXMnLFxuICAgICd0aHJvdycsXG4gICAgJ3RyeScsXG4gICAgJ3R5cGVvZicsXG4gICAgJ3VuY2hlY2tlZCcsXG4gICAgJ3Vuc2FmZScsXG4gICAgJ3VzaW5nJyxcbiAgICAndmlydHVhbCcsXG4gICAgJ3ZvaWQnLFxuICAgICd2b2xhdGlsZScsXG4gICAgJ3doaWxlJ1xuICBdO1xuICBjb25zdCBDT05URVhUVUFMX0tFWVdPUkRTID0gW1xuICAgICdhZGQnLFxuICAgICdhbGlhcycsXG4gICAgJ2FuZCcsXG4gICAgJ2FzY2VuZGluZycsXG4gICAgJ2FzeW5jJyxcbiAgICAnYXdhaXQnLFxuICAgICdieScsXG4gICAgJ2Rlc2NlbmRpbmcnLFxuICAgICdlcXVhbHMnLFxuICAgICdmcm9tJyxcbiAgICAnZ2V0JyxcbiAgICAnZ2xvYmFsJyxcbiAgICAnZ3JvdXAnLFxuICAgICdpbml0JyxcbiAgICAnaW50bycsXG4gICAgJ2pvaW4nLFxuICAgICdsZXQnLFxuICAgICduYW1lb2YnLFxuICAgICdub3QnLFxuICAgICdub3RudWxsJyxcbiAgICAnb24nLFxuICAgICdvcicsXG4gICAgJ29yZGVyYnknLFxuICAgICdwYXJ0aWFsJyxcbiAgICAncmVtb3ZlJyxcbiAgICAnc2VsZWN0JyxcbiAgICAnc2V0JyxcbiAgICAndW5tYW5hZ2VkJyxcbiAgICAndmFsdWV8MCcsXG4gICAgJ3ZhcicsXG4gICAgJ3doZW4nLFxuICAgICd3aGVyZScsXG4gICAgJ3dpdGgnLFxuICAgICd5aWVsZCdcbiAgXTtcblxuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOiBOT1JNQUxfS0VZV09SRFMuY29uY2F0KENPTlRFWFRVQUxfS0VZV09SRFMpLFxuICAgIGJ1aWx0X2luOiBCVUlMVF9JTl9LRVlXT1JEUyxcbiAgICBsaXRlcmFsOiBMSVRFUkFMX0tFWVdPUkRTXG4gIH07XG4gIGNvbnN0IFRJVExFX01PREUgPSBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7IGJlZ2luOiAnW2EtekEtWl0oXFxcXC4/XFxcXHcpKicgfSk7XG4gIGNvbnN0IE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFxiKDBiWzAxXFwnXSspJyB9LFxuICAgICAgeyBiZWdpbjogJygtPylcXFxcYihbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykodXxVfGx8THx1bHxVTHxmfEZ8YnxCKScgfSxcbiAgICAgIHsgYmVnaW46ICcoLT8pKFxcXFxiMFt4WF1bYS1mQS1GMC05XFwnXSt8KFxcXFxiW1xcXFxkXFwnXSsoXFxcXC5bXFxcXGRcXCddKik/fFxcXFwuW1xcXFxkXFwnXSspKFtlRV1bLStdP1tcXFxcZFxcJ10rKT8pJyB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgVkVSQkFUSU1fU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdAXCInLFxuICAgIGVuZDogJ1wiJyxcbiAgICBjb250YWluczogWyB7IGJlZ2luOiAnXCJcIicgfSBdXG4gIH07XG4gIGNvbnN0IFZFUkJBVElNX1NUUklOR19OT19MRiA9IGhsanMuaW5oZXJpdChWRVJCQVRJTV9TVFJJTkcsIHsgaWxsZWdhbDogL1xcbi8gfSk7XG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgfTtcbiAgY29uc3QgU1VCU1RfTk9fTEYgPSBobGpzLmluaGVyaXQoU1VCU1QsIHsgaWxsZWdhbDogL1xcbi8gfSk7XG4gIGNvbnN0IElOVEVSUE9MQVRFRF9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1xcJFwiLyxcbiAgICBlbmQ6ICdcIicsXG4gICAgaWxsZWdhbDogL1xcbi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgYmVnaW46IC9cXHtcXHsvIH0sXG4gICAgICB7IGJlZ2luOiAvXFx9XFx9LyB9LFxuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgU1VCU1RfTk9fTEZcbiAgICBdXG4gIH07XG4gIGNvbnN0IElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1xcJEBcIi8sXG4gICAgZW5kOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGJlZ2luOiAvXFx7XFx7LyB9LFxuICAgICAgeyBiZWdpbjogL1xcfVxcfS8gfSxcbiAgICAgIHsgYmVnaW46ICdcIlwiJyB9LFxuICAgICAgU1VCU1RcbiAgICBdXG4gIH07XG4gIGNvbnN0IElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkdfTk9fTEYgPSBobGpzLmluaGVyaXQoSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklORywge1xuICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGJlZ2luOiAvXFx7XFx7LyB9LFxuICAgICAgeyBiZWdpbjogL1xcfVxcfS8gfSxcbiAgICAgIHsgYmVnaW46ICdcIlwiJyB9LFxuICAgICAgU1VCU1RfTk9fTEZcbiAgICBdXG4gIH0pO1xuICBTVUJTVC5jb250YWlucyA9IFtcbiAgICBJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HLFxuICAgIElOVEVSUE9MQVRFRF9TVFJJTkcsXG4gICAgVkVSQkFUSU1fU1RSSU5HLFxuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIE5VTUJFUlMsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICBdO1xuICBTVUJTVF9OT19MRi5jb250YWlucyA9IFtcbiAgICBJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HX05PX0xGLFxuICAgIElOVEVSUE9MQVRFRF9TVFJJTkcsXG4gICAgVkVSQkFUSU1fU1RSSU5HX05PX0xGLFxuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIE5VTUJFUlMsXG4gICAgaGxqcy5pbmhlcml0KGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsIHsgaWxsZWdhbDogL1xcbi8gfSlcbiAgXTtcbiAgY29uc3QgU1RSSU5HID0geyB2YXJpYW50czogW1xuICAgIElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkcsXG4gICAgSU5URVJQT0xBVEVEX1NUUklORyxcbiAgICBWRVJCQVRJTV9TVFJJTkcsXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgXSB9O1xuXG4gIGNvbnN0IEdFTkVSSUNfTU9ESUZJRVIgPSB7XG4gICAgYmVnaW46IFwiPFwiLFxuICAgIGVuZDogXCI+XCIsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgYmVnaW5LZXl3b3JkczogXCJpbiBvdXRcIiB9LFxuICAgICAgVElUTEVfTU9ERVxuICAgIF1cbiAgfTtcbiAgY29uc3QgVFlQRV9JREVOVF9SRSA9IGhsanMuSURFTlRfUkUgKyAnKDwnICsgaGxqcy5JREVOVF9SRSArICcoXFxcXHMqLFxcXFxzKicgKyBobGpzLklERU5UX1JFICsgJykqPik/KFxcXFxbXFxcXF0pPyc7XG4gIGNvbnN0IEFUX0lERU5USUZJRVIgPSB7XG4gICAgLy8gcHJldmVudHMgZXhwcmVzc2lvbnMgbGlrZSBgQGNsYXNzYCBmcm9tIGluY29ycmVjdCBmbGFnZ2luZ1xuICAgIC8vIGBjbGFzc2AgYXMgYSBrZXl3b3JkXG4gICAgYmVnaW46IFwiQFwiICsgaGxqcy5JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdDIycsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ2NzJyxcbiAgICAgICdjIydcbiAgICBdLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvOjovLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvLy8nLFxuICAgICAgICAnJCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGJlZ2luOiAnLy8vJyxcbiAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyBiZWdpbjogJzwhLS18LS0+JyB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGJlZ2luOiAnPC8/JyxcbiAgICAgICAgICAgICAgICAgIGVuZDogJz4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnIycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogeyBrZXl3b3JkOiAnaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgcmVnaW9uIGVuZHJlZ2lvbiBwcmFnbWEgY2hlY2tzdW0nIH1cbiAgICAgIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICBOVU1CRVJTLFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBlbmQ6IC9bezs9XS8sXG4gICAgICAgIGlsbGVnYWw6IC9bXlxcczosXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBiZWdpbktleXdvcmRzOiBcIndoZXJlIGNsYXNzXCIgfSxcbiAgICAgICAgICBUSVRMRV9NT0RFLFxuICAgICAgICAgIEdFTkVSSUNfTU9ESUZJRVIsXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25hbWVzcGFjZScsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgZW5kOiAvW3s7PV0vLFxuICAgICAgICBpbGxlZ2FsOiAvW15cXHM6XS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVElUTEVfTU9ERSxcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAncmVjb3JkJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBlbmQ6IC9bezs9XS8sXG4gICAgICAgIGlsbGVnYWw6IC9bXlxcczpdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBUSVRMRV9NT0RFLFxuICAgICAgICAgIEdFTkVSSUNfTU9ESUZJRVIsXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gW0F0dHJpYnV0ZXMoXCJcIildXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15cXFxccypcXFxcWyg/PVtcXFxcd10pJyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBlbmQ6ICdcXFxcXScsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICAgICAgZW5kOiAvXCIvXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBFeHByZXNzaW9uIGtleXdvcmRzIHByZXZlbnQgJ2tleXdvcmQgTmFtZSguLi4pJyBmcm9tIGJlaW5nXG4gICAgICAgIC8vIHJlY29nbml6ZWQgYXMgYSBmdW5jdGlvbiBkZWZpbml0aW9uXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICduZXcgcmV0dXJuIHRocm93IGF3YWl0IGVsc2UnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46ICcoJyArIFRZUEVfSURFTlRfUkUgKyAnXFxcXHMrKSsnICsgaGxqcy5JREVOVF9SRSArICdcXFxccyooPFtePV0rPlxcXFxzKik/XFxcXCgnLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgZW5kOiAvXFxzKlt7Oz1dLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIC8vIHByZXZlbnRzIHRoZXNlIGZyb20gYmVpbmcgaGlnaGxpZ2h0ZWQgYHRpdGxlYFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6IEZVTkNUSU9OX01PRElGSUVSUy5qb2luKFwiIFwiKSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnXFxcXHMqKDxbXj1dKz5cXFxccyopP1xcXFwoJyxcbiAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgaGxqcy5USVRMRV9NT0RFLFxuICAgICAgICAgICAgICBHRU5FUklDX01PRElGSUVSXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IG1hdGNoOiAvXFwoXFwpLyB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIEFUX0lERU5USUZJRVJcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3NoYXJwO1xuIiwiY29uc3QgTU9ERVMgPSAoaGxqcykgPT4ge1xuICByZXR1cm4ge1xuICAgIElNUE9SVEFOVDoge1xuICAgICAgc2NvcGU6ICdtZXRhJyxcbiAgICAgIGJlZ2luOiAnIWltcG9ydGFudCdcbiAgICB9LFxuICAgIEJMT0NLX0NPTU1FTlQ6IGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgSEVYQ09MT1I6IHtcbiAgICAgIHNjb3BlOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAvIygoWzAtOWEtZkEtRl17Myw0fSl8KChbMC05YS1mQS1GXXsyfSl7Myw0fSkpXFxiL1xuICAgIH0sXG4gICAgRlVOQ1RJT05fRElTUEFUQ0g6IHtcbiAgICAgIGNsYXNzTmFtZTogXCJidWlsdF9pblwiLFxuICAgICAgYmVnaW46IC9bXFx3LV0rKD89XFwoKS9cbiAgICB9LFxuICAgIEFUVFJJQlVURV9TRUxFQ1RPUl9NT0RFOiB7XG4gICAgICBzY29wZTogJ3NlbGVjdG9yLWF0dHInLFxuICAgICAgYmVnaW46IC9cXFsvLFxuICAgICAgZW5kOiAvXFxdLyxcbiAgICAgIGlsbGVnYWw6ICckJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgXVxuICAgIH0sXG4gICAgQ1NTX05VTUJFUl9NT0RFOiB7XG4gICAgICBzY29wZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogaGxqcy5OVU1CRVJfUkUgKyAnKCcgK1xuICAgICAgICAnJXxlbXxleHxjaHxyZW0nICtcbiAgICAgICAgJ3x2d3x2aHx2bWlufHZtYXgnICtcbiAgICAgICAgJ3xjbXxtbXxpbnxwdHxwY3xweCcgK1xuICAgICAgICAnfGRlZ3xncmFkfHJhZHx0dXJuJyArXG4gICAgICAgICd8c3xtcycgK1xuICAgICAgICAnfEh6fGtIeicgK1xuICAgICAgICAnfGRwaXxkcGNtfGRwcHgnICtcbiAgICAgICAgJyk/JyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAgQ1NTX1ZBUklBQkxFOiB7XG4gICAgICBjbGFzc05hbWU6IFwiYXR0clwiLFxuICAgICAgYmVnaW46IC8tLVtBLVphLXpdW0EtWmEtejAtOV8tXSovXG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgVEFHUyA9IFtcbiAgJ2EnLFxuICAnYWJicicsXG4gICdhZGRyZXNzJyxcbiAgJ2FydGljbGUnLFxuICAnYXNpZGUnLFxuICAnYXVkaW8nLFxuICAnYicsXG4gICdibG9ja3F1b3RlJyxcbiAgJ2JvZHknLFxuICAnYnV0dG9uJyxcbiAgJ2NhbnZhcycsXG4gICdjYXB0aW9uJyxcbiAgJ2NpdGUnLFxuICAnY29kZScsXG4gICdkZCcsXG4gICdkZWwnLFxuICAnZGV0YWlscycsXG4gICdkZm4nLFxuICAnZGl2JyxcbiAgJ2RsJyxcbiAgJ2R0JyxcbiAgJ2VtJyxcbiAgJ2ZpZWxkc2V0JyxcbiAgJ2ZpZ2NhcHRpb24nLFxuICAnZmlndXJlJyxcbiAgJ2Zvb3RlcicsXG4gICdmb3JtJyxcbiAgJ2gxJyxcbiAgJ2gyJyxcbiAgJ2gzJyxcbiAgJ2g0JyxcbiAgJ2g1JyxcbiAgJ2g2JyxcbiAgJ2hlYWRlcicsXG4gICdoZ3JvdXAnLFxuICAnaHRtbCcsXG4gICdpJyxcbiAgJ2lmcmFtZScsXG4gICdpbWcnLFxuICAnaW5wdXQnLFxuICAnaW5zJyxcbiAgJ2tiZCcsXG4gICdsYWJlbCcsXG4gICdsZWdlbmQnLFxuICAnbGknLFxuICAnbWFpbicsXG4gICdtYXJrJyxcbiAgJ21lbnUnLFxuICAnbmF2JyxcbiAgJ29iamVjdCcsXG4gICdvbCcsXG4gICdwJyxcbiAgJ3EnLFxuICAncXVvdGUnLFxuICAnc2FtcCcsXG4gICdzZWN0aW9uJyxcbiAgJ3NwYW4nLFxuICAnc3Ryb25nJyxcbiAgJ3N1bW1hcnknLFxuICAnc3VwJyxcbiAgJ3RhYmxlJyxcbiAgJ3Rib2R5JyxcbiAgJ3RkJyxcbiAgJ3RleHRhcmVhJyxcbiAgJ3Rmb290JyxcbiAgJ3RoJyxcbiAgJ3RoZWFkJyxcbiAgJ3RpbWUnLFxuICAndHInLFxuICAndWwnLFxuICAndmFyJyxcbiAgJ3ZpZGVvJ1xuXTtcblxuY29uc3QgTUVESUFfRkVBVFVSRVMgPSBbXG4gICdhbnktaG92ZXInLFxuICAnYW55LXBvaW50ZXInLFxuICAnYXNwZWN0LXJhdGlvJyxcbiAgJ2NvbG9yJyxcbiAgJ2NvbG9yLWdhbXV0JyxcbiAgJ2NvbG9yLWluZGV4JyxcbiAgJ2RldmljZS1hc3BlY3QtcmF0aW8nLFxuICAnZGV2aWNlLWhlaWdodCcsXG4gICdkZXZpY2Utd2lkdGgnLFxuICAnZGlzcGxheS1tb2RlJyxcbiAgJ2ZvcmNlZC1jb2xvcnMnLFxuICAnZ3JpZCcsXG4gICdoZWlnaHQnLFxuICAnaG92ZXInLFxuICAnaW52ZXJ0ZWQtY29sb3JzJyxcbiAgJ21vbm9jaHJvbWUnLFxuICAnb3JpZW50YXRpb24nLFxuICAnb3ZlcmZsb3ctYmxvY2snLFxuICAnb3ZlcmZsb3ctaW5saW5lJyxcbiAgJ3BvaW50ZXInLFxuICAncHJlZmVycy1jb2xvci1zY2hlbWUnLFxuICAncHJlZmVycy1jb250cmFzdCcsXG4gICdwcmVmZXJzLXJlZHVjZWQtbW90aW9uJyxcbiAgJ3ByZWZlcnMtcmVkdWNlZC10cmFuc3BhcmVuY3knLFxuICAncmVzb2x1dGlvbicsXG4gICdzY2FuJyxcbiAgJ3NjcmlwdGluZycsXG4gICd1cGRhdGUnLFxuICAnd2lkdGgnLFxuICAvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIHNvbHV0aW9uP1xuICAnbWluLXdpZHRoJyxcbiAgJ21heC13aWR0aCcsXG4gICdtaW4taGVpZ2h0JyxcbiAgJ21heC1oZWlnaHQnXG5dO1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvUHNldWRvLWNsYXNzZXNcbmNvbnN0IFBTRVVET19DTEFTU0VTID0gW1xuICAnYWN0aXZlJyxcbiAgJ2FueS1saW5rJyxcbiAgJ2JsYW5rJyxcbiAgJ2NoZWNrZWQnLFxuICAnY3VycmVudCcsXG4gICdkZWZhdWx0JyxcbiAgJ2RlZmluZWQnLFxuICAnZGlyJywgLy8gZGlyKClcbiAgJ2Rpc2FibGVkJyxcbiAgJ2Ryb3AnLFxuICAnZW1wdHknLFxuICAnZW5hYmxlZCcsXG4gICdmaXJzdCcsXG4gICdmaXJzdC1jaGlsZCcsXG4gICdmaXJzdC1vZi10eXBlJyxcbiAgJ2Z1bGxzY3JlZW4nLFxuICAnZnV0dXJlJyxcbiAgJ2ZvY3VzJyxcbiAgJ2ZvY3VzLXZpc2libGUnLFxuICAnZm9jdXMtd2l0aGluJyxcbiAgJ2hhcycsIC8vIGhhcygpXG4gICdob3N0JywgLy8gaG9zdCBvciBob3N0KClcbiAgJ2hvc3QtY29udGV4dCcsIC8vIGhvc3QtY29udGV4dCgpXG4gICdob3ZlcicsXG4gICdpbmRldGVybWluYXRlJyxcbiAgJ2luLXJhbmdlJyxcbiAgJ2ludmFsaWQnLFxuICAnaXMnLCAvLyBpcygpXG4gICdsYW5nJywgLy8gbGFuZygpXG4gICdsYXN0LWNoaWxkJyxcbiAgJ2xhc3Qtb2YtdHlwZScsXG4gICdsZWZ0JyxcbiAgJ2xpbmsnLFxuICAnbG9jYWwtbGluaycsXG4gICdub3QnLCAvLyBub3QoKVxuICAnbnRoLWNoaWxkJywgLy8gbnRoLWNoaWxkKClcbiAgJ250aC1jb2wnLCAvLyBudGgtY29sKClcbiAgJ250aC1sYXN0LWNoaWxkJywgLy8gbnRoLWxhc3QtY2hpbGQoKVxuICAnbnRoLWxhc3QtY29sJywgLy8gbnRoLWxhc3QtY29sKClcbiAgJ250aC1sYXN0LW9mLXR5cGUnLCAvL250aC1sYXN0LW9mLXR5cGUoKVxuICAnbnRoLW9mLXR5cGUnLCAvL250aC1vZi10eXBlKClcbiAgJ29ubHktY2hpbGQnLFxuICAnb25seS1vZi10eXBlJyxcbiAgJ29wdGlvbmFsJyxcbiAgJ291dC1vZi1yYW5nZScsXG4gICdwYXN0JyxcbiAgJ3BsYWNlaG9sZGVyLXNob3duJyxcbiAgJ3JlYWQtb25seScsXG4gICdyZWFkLXdyaXRlJyxcbiAgJ3JlcXVpcmVkJyxcbiAgJ3JpZ2h0JyxcbiAgJ3Jvb3QnLFxuICAnc2NvcGUnLFxuICAndGFyZ2V0JyxcbiAgJ3RhcmdldC13aXRoaW4nLFxuICAndXNlci1pbnZhbGlkJyxcbiAgJ3ZhbGlkJyxcbiAgJ3Zpc2l0ZWQnLFxuICAnd2hlcmUnIC8vIHdoZXJlKClcbl07XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Qc2V1ZG8tZWxlbWVudHNcbmNvbnN0IFBTRVVET19FTEVNRU5UUyA9IFtcbiAgJ2FmdGVyJyxcbiAgJ2JhY2tkcm9wJyxcbiAgJ2JlZm9yZScsXG4gICdjdWUnLFxuICAnY3VlLXJlZ2lvbicsXG4gICdmaXJzdC1sZXR0ZXInLFxuICAnZmlyc3QtbGluZScsXG4gICdncmFtbWFyLWVycm9yJyxcbiAgJ21hcmtlcicsXG4gICdwYXJ0JyxcbiAgJ3BsYWNlaG9sZGVyJyxcbiAgJ3NlbGVjdGlvbicsXG4gICdzbG90dGVkJyxcbiAgJ3NwZWxsaW5nLWVycm9yJ1xuXTtcblxuY29uc3QgQVRUUklCVVRFUyA9IFtcbiAgJ2FsaWduLWNvbnRlbnQnLFxuICAnYWxpZ24taXRlbXMnLFxuICAnYWxpZ24tc2VsZicsXG4gICdhbGwnLFxuICAnYW5pbWF0aW9uJyxcbiAgJ2FuaW1hdGlvbi1kZWxheScsXG4gICdhbmltYXRpb24tZGlyZWN0aW9uJyxcbiAgJ2FuaW1hdGlvbi1kdXJhdGlvbicsXG4gICdhbmltYXRpb24tZmlsbC1tb2RlJyxcbiAgJ2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQnLFxuICAnYW5pbWF0aW9uLW5hbWUnLFxuICAnYW5pbWF0aW9uLXBsYXktc3RhdGUnLFxuICAnYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbicsXG4gICdiYWNrZmFjZS12aXNpYmlsaXR5JyxcbiAgJ2JhY2tncm91bmQnLFxuICAnYmFja2dyb3VuZC1hdHRhY2htZW50JyxcbiAgJ2JhY2tncm91bmQtYmxlbmQtbW9kZScsXG4gICdiYWNrZ3JvdW5kLWNsaXAnLFxuICAnYmFja2dyb3VuZC1jb2xvcicsXG4gICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgJ2JhY2tncm91bmQtb3JpZ2luJyxcbiAgJ2JhY2tncm91bmQtcG9zaXRpb24nLFxuICAnYmFja2dyb3VuZC1yZXBlYXQnLFxuICAnYmFja2dyb3VuZC1zaXplJyxcbiAgJ2Jsb2NrLXNpemUnLFxuICAnYm9yZGVyJyxcbiAgJ2JvcmRlci1ibG9jaycsXG4gICdib3JkZXItYmxvY2stY29sb3InLFxuICAnYm9yZGVyLWJsb2NrLWVuZCcsXG4gICdib3JkZXItYmxvY2stZW5kLWNvbG9yJyxcbiAgJ2JvcmRlci1ibG9jay1lbmQtc3R5bGUnLFxuICAnYm9yZGVyLWJsb2NrLWVuZC13aWR0aCcsXG4gICdib3JkZXItYmxvY2stc3RhcnQnLFxuICAnYm9yZGVyLWJsb2NrLXN0YXJ0LWNvbG9yJyxcbiAgJ2JvcmRlci1ibG9jay1zdGFydC1zdHlsZScsXG4gICdib3JkZXItYmxvY2stc3RhcnQtd2lkdGgnLFxuICAnYm9yZGVyLWJsb2NrLXN0eWxlJyxcbiAgJ2JvcmRlci1ibG9jay13aWR0aCcsXG4gICdib3JkZXItYm90dG9tJyxcbiAgJ2JvcmRlci1ib3R0b20tY29sb3InLFxuICAnYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLXN0eWxlJyxcbiAgJ2JvcmRlci1ib3R0b20td2lkdGgnLFxuICAnYm9yZGVyLWNvbGxhcHNlJyxcbiAgJ2JvcmRlci1jb2xvcicsXG4gICdib3JkZXItaW1hZ2UnLFxuICAnYm9yZGVyLWltYWdlLW91dHNldCcsXG4gICdib3JkZXItaW1hZ2UtcmVwZWF0JyxcbiAgJ2JvcmRlci1pbWFnZS1zbGljZScsXG4gICdib3JkZXItaW1hZ2Utc291cmNlJyxcbiAgJ2JvcmRlci1pbWFnZS13aWR0aCcsXG4gICdib3JkZXItaW5saW5lJyxcbiAgJ2JvcmRlci1pbmxpbmUtY29sb3InLFxuICAnYm9yZGVyLWlubGluZS1lbmQnLFxuICAnYm9yZGVyLWlubGluZS1lbmQtY29sb3InLFxuICAnYm9yZGVyLWlubGluZS1lbmQtc3R5bGUnLFxuICAnYm9yZGVyLWlubGluZS1lbmQtd2lkdGgnLFxuICAnYm9yZGVyLWlubGluZS1zdGFydCcsXG4gICdib3JkZXItaW5saW5lLXN0YXJ0LWNvbG9yJyxcbiAgJ2JvcmRlci1pbmxpbmUtc3RhcnQtc3R5bGUnLFxuICAnYm9yZGVyLWlubGluZS1zdGFydC13aWR0aCcsXG4gICdib3JkZXItaW5saW5lLXN0eWxlJyxcbiAgJ2JvcmRlci1pbmxpbmUtd2lkdGgnLFxuICAnYm9yZGVyLWxlZnQnLFxuICAnYm9yZGVyLWxlZnQtY29sb3InLFxuICAnYm9yZGVyLWxlZnQtc3R5bGUnLFxuICAnYm9yZGVyLWxlZnQtd2lkdGgnLFxuICAnYm9yZGVyLXJhZGl1cycsXG4gICdib3JkZXItcmlnaHQnLFxuICAnYm9yZGVyLXJpZ2h0LWNvbG9yJyxcbiAgJ2JvcmRlci1yaWdodC1zdHlsZScsXG4gICdib3JkZXItcmlnaHQtd2lkdGgnLFxuICAnYm9yZGVyLXNwYWNpbmcnLFxuICAnYm9yZGVyLXN0eWxlJyxcbiAgJ2JvcmRlci10b3AnLFxuICAnYm9yZGVyLXRvcC1jb2xvcicsXG4gICdib3JkZXItdG9wLWxlZnQtcmFkaXVzJyxcbiAgJ2JvcmRlci10b3AtcmlnaHQtcmFkaXVzJyxcbiAgJ2JvcmRlci10b3Atc3R5bGUnLFxuICAnYm9yZGVyLXRvcC13aWR0aCcsXG4gICdib3JkZXItd2lkdGgnLFxuICAnYm90dG9tJyxcbiAgJ2JveC1kZWNvcmF0aW9uLWJyZWFrJyxcbiAgJ2JveC1zaGFkb3cnLFxuICAnYm94LXNpemluZycsXG4gICdicmVhay1hZnRlcicsXG4gICdicmVhay1iZWZvcmUnLFxuICAnYnJlYWstaW5zaWRlJyxcbiAgJ2NhcHRpb24tc2lkZScsXG4gICdjYXJldC1jb2xvcicsXG4gICdjbGVhcicsXG4gICdjbGlwJyxcbiAgJ2NsaXAtcGF0aCcsXG4gICdjbGlwLXJ1bGUnLFxuICAnY29sb3InLFxuICAnY29sdW1uLWNvdW50JyxcbiAgJ2NvbHVtbi1maWxsJyxcbiAgJ2NvbHVtbi1nYXAnLFxuICAnY29sdW1uLXJ1bGUnLFxuICAnY29sdW1uLXJ1bGUtY29sb3InLFxuICAnY29sdW1uLXJ1bGUtc3R5bGUnLFxuICAnY29sdW1uLXJ1bGUtd2lkdGgnLFxuICAnY29sdW1uLXNwYW4nLFxuICAnY29sdW1uLXdpZHRoJyxcbiAgJ2NvbHVtbnMnLFxuICAnY29udGFpbicsXG4gICdjb250ZW50JyxcbiAgJ2NvbnRlbnQtdmlzaWJpbGl0eScsXG4gICdjb3VudGVyLWluY3JlbWVudCcsXG4gICdjb3VudGVyLXJlc2V0JyxcbiAgJ2N1ZScsXG4gICdjdWUtYWZ0ZXInLFxuICAnY3VlLWJlZm9yZScsXG4gICdjdXJzb3InLFxuICAnZGlyZWN0aW9uJyxcbiAgJ2Rpc3BsYXknLFxuICAnZW1wdHktY2VsbHMnLFxuICAnZmlsdGVyJyxcbiAgJ2ZsZXgnLFxuICAnZmxleC1iYXNpcycsXG4gICdmbGV4LWRpcmVjdGlvbicsXG4gICdmbGV4LWZsb3cnLFxuICAnZmxleC1ncm93JyxcbiAgJ2ZsZXgtc2hyaW5rJyxcbiAgJ2ZsZXgtd3JhcCcsXG4gICdmbG9hdCcsXG4gICdmbG93JyxcbiAgJ2ZvbnQnLFxuICAnZm9udC1kaXNwbGF5JyxcbiAgJ2ZvbnQtZmFtaWx5JyxcbiAgJ2ZvbnQtZmVhdHVyZS1zZXR0aW5ncycsXG4gICdmb250LWtlcm5pbmcnLFxuICAnZm9udC1sYW5ndWFnZS1vdmVycmlkZScsXG4gICdmb250LXNpemUnLFxuICAnZm9udC1zaXplLWFkanVzdCcsXG4gICdmb250LXNtb290aGluZycsXG4gICdmb250LXN0cmV0Y2gnLFxuICAnZm9udC1zdHlsZScsXG4gICdmb250LXN5bnRoZXNpcycsXG4gICdmb250LXZhcmlhbnQnLFxuICAnZm9udC12YXJpYW50LWNhcHMnLFxuICAnZm9udC12YXJpYW50LWVhc3QtYXNpYW4nLFxuICAnZm9udC12YXJpYW50LWxpZ2F0dXJlcycsXG4gICdmb250LXZhcmlhbnQtbnVtZXJpYycsXG4gICdmb250LXZhcmlhbnQtcG9zaXRpb24nLFxuICAnZm9udC12YXJpYXRpb24tc2V0dGluZ3MnLFxuICAnZm9udC13ZWlnaHQnLFxuICAnZ2FwJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJyxcbiAgJ2dyaWQnLFxuICAnZ3JpZC1hcmVhJyxcbiAgJ2dyaWQtYXV0by1jb2x1bW5zJyxcbiAgJ2dyaWQtYXV0by1mbG93JyxcbiAgJ2dyaWQtYXV0by1yb3dzJyxcbiAgJ2dyaWQtY29sdW1uJyxcbiAgJ2dyaWQtY29sdW1uLWVuZCcsXG4gICdncmlkLWNvbHVtbi1zdGFydCcsXG4gICdncmlkLWdhcCcsXG4gICdncmlkLXJvdycsXG4gICdncmlkLXJvdy1lbmQnLFxuICAnZ3JpZC1yb3ctc3RhcnQnLFxuICAnZ3JpZC10ZW1wbGF0ZScsXG4gICdncmlkLXRlbXBsYXRlLWFyZWFzJyxcbiAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucycsXG4gICdncmlkLXRlbXBsYXRlLXJvd3MnLFxuICAnaGFuZ2luZy1wdW5jdHVhdGlvbicsXG4gICdoZWlnaHQnLFxuICAnaHlwaGVucycsXG4gICdpY29uJyxcbiAgJ2ltYWdlLW9yaWVudGF0aW9uJyxcbiAgJ2ltYWdlLXJlbmRlcmluZycsXG4gICdpbWFnZS1yZXNvbHV0aW9uJyxcbiAgJ2ltZS1tb2RlJyxcbiAgJ2lubGluZS1zaXplJyxcbiAgJ2lzb2xhdGlvbicsXG4gICdqdXN0aWZ5LWNvbnRlbnQnLFxuICAnbGVmdCcsXG4gICdsZXR0ZXItc3BhY2luZycsXG4gICdsaW5lLWJyZWFrJyxcbiAgJ2xpbmUtaGVpZ2h0JyxcbiAgJ2xpc3Qtc3R5bGUnLFxuICAnbGlzdC1zdHlsZS1pbWFnZScsXG4gICdsaXN0LXN0eWxlLXBvc2l0aW9uJyxcbiAgJ2xpc3Qtc3R5bGUtdHlwZScsXG4gICdtYXJnaW4nLFxuICAnbWFyZ2luLWJsb2NrJyxcbiAgJ21hcmdpbi1ibG9jay1lbmQnLFxuICAnbWFyZ2luLWJsb2NrLXN0YXJ0JyxcbiAgJ21hcmdpbi1ib3R0b20nLFxuICAnbWFyZ2luLWlubGluZScsXG4gICdtYXJnaW4taW5saW5lLWVuZCcsXG4gICdtYXJnaW4taW5saW5lLXN0YXJ0JyxcbiAgJ21hcmdpbi1sZWZ0JyxcbiAgJ21hcmdpbi1yaWdodCcsXG4gICdtYXJnaW4tdG9wJyxcbiAgJ21hcmtzJyxcbiAgJ21hc2snLFxuICAnbWFzay1ib3JkZXInLFxuICAnbWFzay1ib3JkZXItbW9kZScsXG4gICdtYXNrLWJvcmRlci1vdXRzZXQnLFxuICAnbWFzay1ib3JkZXItcmVwZWF0JyxcbiAgJ21hc2stYm9yZGVyLXNsaWNlJyxcbiAgJ21hc2stYm9yZGVyLXNvdXJjZScsXG4gICdtYXNrLWJvcmRlci13aWR0aCcsXG4gICdtYXNrLWNsaXAnLFxuICAnbWFzay1jb21wb3NpdGUnLFxuICAnbWFzay1pbWFnZScsXG4gICdtYXNrLW1vZGUnLFxuICAnbWFzay1vcmlnaW4nLFxuICAnbWFzay1wb3NpdGlvbicsXG4gICdtYXNrLXJlcGVhdCcsXG4gICdtYXNrLXNpemUnLFxuICAnbWFzay10eXBlJyxcbiAgJ21heC1ibG9jay1zaXplJyxcbiAgJ21heC1oZWlnaHQnLFxuICAnbWF4LWlubGluZS1zaXplJyxcbiAgJ21heC13aWR0aCcsXG4gICdtaW4tYmxvY2stc2l6ZScsXG4gICdtaW4taGVpZ2h0JyxcbiAgJ21pbi1pbmxpbmUtc2l6ZScsXG4gICdtaW4td2lkdGgnLFxuICAnbWl4LWJsZW5kLW1vZGUnLFxuICAnbmF2LWRvd24nLFxuICAnbmF2LWluZGV4JyxcbiAgJ25hdi1sZWZ0JyxcbiAgJ25hdi1yaWdodCcsXG4gICduYXYtdXAnLFxuICAnbm9uZScsXG4gICdub3JtYWwnLFxuICAnb2JqZWN0LWZpdCcsXG4gICdvYmplY3QtcG9zaXRpb24nLFxuICAnb3BhY2l0eScsXG4gICdvcmRlcicsXG4gICdvcnBoYW5zJyxcbiAgJ291dGxpbmUnLFxuICAnb3V0bGluZS1jb2xvcicsXG4gICdvdXRsaW5lLW9mZnNldCcsXG4gICdvdXRsaW5lLXN0eWxlJyxcbiAgJ291dGxpbmUtd2lkdGgnLFxuICAnb3ZlcmZsb3cnLFxuICAnb3ZlcmZsb3ctd3JhcCcsXG4gICdvdmVyZmxvdy14JyxcbiAgJ292ZXJmbG93LXknLFxuICAncGFkZGluZycsXG4gICdwYWRkaW5nLWJsb2NrJyxcbiAgJ3BhZGRpbmctYmxvY2stZW5kJyxcbiAgJ3BhZGRpbmctYmxvY2stc3RhcnQnLFxuICAncGFkZGluZy1ib3R0b20nLFxuICAncGFkZGluZy1pbmxpbmUnLFxuICAncGFkZGluZy1pbmxpbmUtZW5kJyxcbiAgJ3BhZGRpbmctaW5saW5lLXN0YXJ0JyxcbiAgJ3BhZGRpbmctbGVmdCcsXG4gICdwYWRkaW5nLXJpZ2h0JyxcbiAgJ3BhZGRpbmctdG9wJyxcbiAgJ3BhZ2UtYnJlYWstYWZ0ZXInLFxuICAncGFnZS1icmVhay1iZWZvcmUnLFxuICAncGFnZS1icmVhay1pbnNpZGUnLFxuICAncGF1c2UnLFxuICAncGF1c2UtYWZ0ZXInLFxuICAncGF1c2UtYmVmb3JlJyxcbiAgJ3BlcnNwZWN0aXZlJyxcbiAgJ3BlcnNwZWN0aXZlLW9yaWdpbicsXG4gICdwb2ludGVyLWV2ZW50cycsXG4gICdwb3NpdGlvbicsXG4gICdxdW90ZXMnLFxuICAncmVzaXplJyxcbiAgJ3Jlc3QnLFxuICAncmVzdC1hZnRlcicsXG4gICdyZXN0LWJlZm9yZScsXG4gICdyaWdodCcsXG4gICdyb3ctZ2FwJyxcbiAgJ3Njcm9sbC1tYXJnaW4nLFxuICAnc2Nyb2xsLW1hcmdpbi1ibG9jaycsXG4gICdzY3JvbGwtbWFyZ2luLWJsb2NrLWVuZCcsXG4gICdzY3JvbGwtbWFyZ2luLWJsb2NrLXN0YXJ0JyxcbiAgJ3Njcm9sbC1tYXJnaW4tYm90dG9tJyxcbiAgJ3Njcm9sbC1tYXJnaW4taW5saW5lJyxcbiAgJ3Njcm9sbC1tYXJnaW4taW5saW5lLWVuZCcsXG4gICdzY3JvbGwtbWFyZ2luLWlubGluZS1zdGFydCcsXG4gICdzY3JvbGwtbWFyZ2luLWxlZnQnLFxuICAnc2Nyb2xsLW1hcmdpbi1yaWdodCcsXG4gICdzY3JvbGwtbWFyZ2luLXRvcCcsXG4gICdzY3JvbGwtcGFkZGluZycsXG4gICdzY3JvbGwtcGFkZGluZy1ibG9jaycsXG4gICdzY3JvbGwtcGFkZGluZy1ibG9jay1lbmQnLFxuICAnc2Nyb2xsLXBhZGRpbmctYmxvY2stc3RhcnQnLFxuICAnc2Nyb2xsLXBhZGRpbmctYm90dG9tJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWlubGluZScsXG4gICdzY3JvbGwtcGFkZGluZy1pbmxpbmUtZW5kJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWlubGluZS1zdGFydCcsXG4gICdzY3JvbGwtcGFkZGluZy1sZWZ0JyxcbiAgJ3Njcm9sbC1wYWRkaW5nLXJpZ2h0JyxcbiAgJ3Njcm9sbC1wYWRkaW5nLXRvcCcsXG4gICdzY3JvbGwtc25hcC1hbGlnbicsXG4gICdzY3JvbGwtc25hcC1zdG9wJyxcbiAgJ3Njcm9sbC1zbmFwLXR5cGUnLFxuICAnc2Nyb2xsYmFyLWNvbG9yJyxcbiAgJ3Njcm9sbGJhci1ndXR0ZXInLFxuICAnc2Nyb2xsYmFyLXdpZHRoJyxcbiAgJ3NoYXBlLWltYWdlLXRocmVzaG9sZCcsXG4gICdzaGFwZS1tYXJnaW4nLFxuICAnc2hhcGUtb3V0c2lkZScsXG4gICdzcGVhaycsXG4gICdzcGVhay1hcycsXG4gICdzcmMnLCAvLyBAZm9udC1mYWNlXG4gICd0YWItc2l6ZScsXG4gICd0YWJsZS1sYXlvdXQnLFxuICAndGV4dC1hbGlnbicsXG4gICd0ZXh0LWFsaWduLWFsbCcsXG4gICd0ZXh0LWFsaWduLWxhc3QnLFxuICAndGV4dC1jb21iaW5lLXVwcmlnaHQnLFxuICAndGV4dC1kZWNvcmF0aW9uJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi1jb2xvcicsXG4gICd0ZXh0LWRlY29yYXRpb24tbGluZScsXG4gICd0ZXh0LWRlY29yYXRpb24tc3R5bGUnLFxuICAndGV4dC1lbXBoYXNpcycsXG4gICd0ZXh0LWVtcGhhc2lzLWNvbG9yJyxcbiAgJ3RleHQtZW1waGFzaXMtcG9zaXRpb24nLFxuICAndGV4dC1lbXBoYXNpcy1zdHlsZScsXG4gICd0ZXh0LWluZGVudCcsXG4gICd0ZXh0LWp1c3RpZnknLFxuICAndGV4dC1vcmllbnRhdGlvbicsXG4gICd0ZXh0LW92ZXJmbG93JyxcbiAgJ3RleHQtcmVuZGVyaW5nJyxcbiAgJ3RleHQtc2hhZG93JyxcbiAgJ3RleHQtdHJhbnNmb3JtJyxcbiAgJ3RleHQtdW5kZXJsaW5lLXBvc2l0aW9uJyxcbiAgJ3RvcCcsXG4gICd0cmFuc2Zvcm0nLFxuICAndHJhbnNmb3JtLWJveCcsXG4gICd0cmFuc2Zvcm0tb3JpZ2luJyxcbiAgJ3RyYW5zZm9ybS1zdHlsZScsXG4gICd0cmFuc2l0aW9uJyxcbiAgJ3RyYW5zaXRpb24tZGVsYXknLFxuICAndHJhbnNpdGlvbi1kdXJhdGlvbicsXG4gICd0cmFuc2l0aW9uLXByb3BlcnR5JyxcbiAgJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJyxcbiAgJ3VuaWNvZGUtYmlkaScsXG4gICd2ZXJ0aWNhbC1hbGlnbicsXG4gICd2aXNpYmlsaXR5JyxcbiAgJ3ZvaWNlLWJhbGFuY2UnLFxuICAndm9pY2UtZHVyYXRpb24nLFxuICAndm9pY2UtZmFtaWx5JyxcbiAgJ3ZvaWNlLXBpdGNoJyxcbiAgJ3ZvaWNlLXJhbmdlJyxcbiAgJ3ZvaWNlLXJhdGUnLFxuICAndm9pY2Utc3RyZXNzJyxcbiAgJ3ZvaWNlLXZvbHVtZScsXG4gICd3aGl0ZS1zcGFjZScsXG4gICd3aWRvd3MnLFxuICAnd2lkdGgnLFxuICAnd2lsbC1jaGFuZ2UnLFxuICAnd29yZC1icmVhaycsXG4gICd3b3JkLXNwYWNpbmcnLFxuICAnd29yZC13cmFwJyxcbiAgJ3dyaXRpbmctbW9kZScsXG4gICd6LWluZGV4J1xuICAvLyByZXZlcnNlIG1ha2VzIHN1cmUgbG9uZ2VyIGF0dHJpYnV0ZXMgYGZvbnQtd2VpZ2h0YCBhcmUgbWF0Y2hlZCBmdWxseVxuICAvLyBpbnN0ZWFkIG9mIGdldHRpbmcgZmFsc2UgcG9zaXRpdmVzIG9uIHNheSBgZm9udGBcbl0ucmV2ZXJzZSgpO1xuXG4vKlxuTGFuZ3VhZ2U6IENTU1xuQ2F0ZWdvcnk6IGNvbW1vbiwgY3NzLCB3ZWJcbldlYnNpdGU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTU1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGNzcyhobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgbW9kZXMgPSBNT0RFUyhobGpzKTtcbiAgY29uc3QgVkVORE9SX1BSRUZJWCA9IHsgYmVnaW46IC8tKHdlYmtpdHxtb3p8bXN8byktKD89W2Etel0pLyB9O1xuICBjb25zdCBBVF9NT0RJRklFUlMgPSBcImFuZCBvciBub3Qgb25seVwiO1xuICBjb25zdCBBVF9QUk9QRVJUWV9SRSA9IC9ALT9cXHdbXFx3XSooLVxcdyspKi87IC8vIEAtd2Via2l0LWtleWZyYW1lc1xuICBjb25zdCBJREVOVF9SRSA9ICdbYS16QS1aLV1bYS16QS1aMC05Xy1dKic7XG4gIGNvbnN0IFNUUklOR1MgPSBbXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgXTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdDU1MnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogL1s9fCdcXCRdLyxcbiAgICBrZXl3b3JkczogeyBrZXlmcmFtZVBvc2l0aW9uOiBcImZyb20gdG9cIiB9LFxuICAgIGNsYXNzTmFtZUFsaWFzZXM6IHtcbiAgICAgIC8vIGZvciB2aXN1YWwgY29udGludWl0eSB3aXRoIGB0YWcge31gIGFuZCBiZWNhdXNlIHdlXG4gICAgICAvLyBkb24ndCBoYXZlIGEgZ3JlYXQgY2xhc3MgZm9yIHRoaXM/XG4gICAgICBrZXlmcmFtZVBvc2l0aW9uOiBcInNlbGVjdG9yLXRhZ1wiIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIG1vZGVzLkJMT0NLX0NPTU1FTlQsXG4gICAgICBWRU5ET1JfUFJFRklYLFxuICAgICAgLy8gdG8gcmVjb2duaXplIGtleWZyYW1lIDQwJSBldGMgd2hpY2ggYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIG91clxuICAgICAgLy8gYXR0cmlidXRlIHZhbHVlIG1vZGVcbiAgICAgIG1vZGVzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItaWQnLFxuICAgICAgICBiZWdpbjogLyNbQS1aYS16MC05Xy1dKy8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItY2xhc3MnLFxuICAgICAgICBiZWdpbjogJ1xcXFwuJyArIElERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBtb2Rlcy5BVFRSSUJVVEVfU0VMRUNUT1JfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItcHNldWRvJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAnOignICsgUFNFVURPX0NMQVNTRVMuam9pbignfCcpICsgJyknIH0sXG4gICAgICAgICAgeyBiZWdpbjogJzooOik/KCcgKyBQU0VVRE9fRUxFTUVOVFMuam9pbignfCcpICsgJyknIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIHdlIG1heSBhY3R1YWxseSBuZWVkIHRoaXMgKDEyLzIwMjApXG4gICAgICAvLyB7IC8vIHBzZXVkby1zZWxlY3RvciBwYXJhbXNcbiAgICAgIC8vICAgYmVnaW46IC9cXCgvLFxuICAgICAgLy8gICBlbmQ6IC9cXCkvLFxuICAgICAgLy8gICBjb250YWluczogWyBobGpzLkNTU19OVU1CRVJfTU9ERSBdXG4gICAgICAvLyB9LFxuICAgICAgbW9kZXMuQ1NTX1ZBUklBQkxFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBBVFRSSUJVVEVTLmpvaW4oJ3wnKSArICcpXFxcXGInXG4gICAgICB9LFxuICAgICAgLy8gYXR0cmlidXRlIHZhbHVlc1xuICAgICAge1xuICAgICAgICBiZWdpbjogLzovLFxuICAgICAgICBlbmQ6IC9bO317XS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgbW9kZXMuQkxPQ0tfQ09NTUVOVCxcbiAgICAgICAgICBtb2Rlcy5IRVhDT0xPUixcbiAgICAgICAgICBtb2Rlcy5JTVBPUlRBTlQsXG4gICAgICAgICAgbW9kZXMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAgICAgIC4uLlNUUklOR1MsXG4gICAgICAgICAgLy8gbmVlZGVkIHRvIGhpZ2hsaWdodCB0aGVzZSBhcyBzdHJpbmdzIGFuZCB0byBhdm9pZCBpc3N1ZXMgd2l0aFxuICAgICAgICAgIC8vIGlsbGVnYWwgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGJlIGluc2lkZSB1cmxzIHRoYXQgd291bGQgdGlnZ2VyIHRoZVxuICAgICAgICAgIC8vIGxhbmd1YWdlcyBpbGxlZ2FsIHN0YWNrXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC8odXJsfGRhdGEtdXJpKVxcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLCAvLyBmcm9tIGtleXdvcmRzXG4gICAgICAgICAgICBrZXl3b3JkczogeyBidWlsdF9pbjogXCJ1cmwgZGF0YS11cmlcIiB9LFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgLi4uU1RSSU5HUyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAvLyBhbnkgY2hhcmFjdGVyIG90aGVyIHRoYW4gYClgIGFzIGluIGB1cmwoKWAgd2lsbCBiZSB0aGUgc3RhcnRcbiAgICAgICAgICAgICAgICAvLyBvZiBhIHN0cmluZywgd2hpY2ggZW5kcyB3aXRoIGApYCAoZnJvbSB0aGUgcGFyZW50IG1vZGUpXG4gICAgICAgICAgICAgICAgYmVnaW46IC9bXildLyxcbiAgICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG1vZGVzLkZVTkNUSU9OX0RJU1BBVENIXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiByZWdleC5sb29rYWhlYWQoL0AvKSxcbiAgICAgICAgZW5kOiAnW3s7XScsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgaWxsZWdhbDogLzovLCAvLyBicmVhayBvbiBMZXNzIHZhcmlhYmxlcyBAdmFyOiAuLi5cbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgIGJlZ2luOiBBVF9QUk9QRVJUWV9SRVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXHMvLFxuICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAgICAgJHBhdHRlcm46IC9bYS16LV0rLyxcbiAgICAgICAgICAgICAga2V5d29yZDogQVRfTU9ESUZJRVJTLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGU6IE1FRElBX0ZFQVRVUkVTLmpvaW4oXCIgXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvW2Etei1dKyg/PTopLyxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLi4uU1RSSU5HUyxcbiAgICAgICAgICAgICAgbW9kZXMuQ1NTX05VTUJFUl9NT0RFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci10YWcnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBUQUdTLmpvaW4oJ3wnKSArICcpXFxcXGInXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNzcztcbiIsIi8qXG5MYW5ndWFnZTogRGlmZlxuRGVzY3JpcHRpb246IFVuaWZpZWQgYW5kIGNvbnRleHQgZGlmZlxuQXV0aG9yOiBWYXNpbHkgUG9sb3ZueW92IDx2YXN0QHdoaXRlYW50cy5uZXQ+XG5XZWJzaXRlOiBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2RpZmZ1dGlscy9cbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBkaWZmKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdEaWZmJyxcbiAgICBhbGlhc2VzOiBbICdwYXRjaCcgXSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgbWF0Y2g6IHJlZ2V4LmVpdGhlcihcbiAgICAgICAgICAvXkBAICstXFxkKyxcXGQrICtcXCtcXGQrLFxcZCsgK0BALyxcbiAgICAgICAgICAvXlxcKlxcKlxcKiArXFxkKyxcXGQrICtcXCpcXCpcXCpcXCokLyxcbiAgICAgICAgICAvXi0tLSArXFxkKyxcXGQrICstLS0tJC9cbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IHJlZ2V4LmVpdGhlcihcbiAgICAgICAgICAgICAgL0luZGV4OiAvLFxuICAgICAgICAgICAgICAvXmluZGV4LyxcbiAgICAgICAgICAgICAgLz17Myx9LyxcbiAgICAgICAgICAgICAgL14tezN9LyxcbiAgICAgICAgICAgICAgL15cXCp7M30gLyxcbiAgICAgICAgICAgICAgL15cXCt7M30vLFxuICAgICAgICAgICAgICAvXmRpZmYgLS1naXQvXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZW5kOiAvJC9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgbWF0Y2g6IC9eXFwqezE1fSQvIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYWRkaXRpb24nLFxuICAgICAgICBiZWdpbjogL15cXCsvLFxuICAgICAgICBlbmQ6IC8kL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZGVsZXRpb24nLFxuICAgICAgICBiZWdpbjogL14tLyxcbiAgICAgICAgZW5kOiAvJC9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2FkZGl0aW9uJyxcbiAgICAgICAgYmVnaW46IC9eIS8sXG4gICAgICAgIGVuZDogLyQvXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRpZmY7XG4iLCIvKlxuTGFuZ3VhZ2U6IEdvXG5BdXRob3I6IFN0ZXBoYW4gS291bnRzbyBha2EgU3RlcExnIDxzdGVwbGdAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBFdmdlbnkgU3RlcGFuaXNjaGV2IDxpbWJvbGtAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IEdvb2dsZSBnbyBsYW5ndWFnZSAoZ29sYW5nKS4gRm9yIGluZm8gYWJvdXQgbGFuZ3VhZ2VcbldlYnNpdGU6IGh0dHA6Ly9nb2xhbmcub3JnL1xuQ2F0ZWdvcnk6IGNvbW1vbiwgc3lzdGVtXG4qL1xuXG5mdW5jdGlvbiBnbyhobGpzKSB7XG4gIGNvbnN0IExJVEVSQUxTID0gW1xuICAgIFwidHJ1ZVwiLFxuICAgIFwiZmFsc2VcIixcbiAgICBcImlvdGFcIixcbiAgICBcIm5pbFwiXG4gIF07XG4gIGNvbnN0IEJVSUxUX0lOUyA9IFtcbiAgICBcImFwcGVuZFwiLFxuICAgIFwiY2FwXCIsXG4gICAgXCJjbG9zZVwiLFxuICAgIFwiY29tcGxleFwiLFxuICAgIFwiY29weVwiLFxuICAgIFwiaW1hZ1wiLFxuICAgIFwibGVuXCIsXG4gICAgXCJtYWtlXCIsXG4gICAgXCJuZXdcIixcbiAgICBcInBhbmljXCIsXG4gICAgXCJwcmludFwiLFxuICAgIFwicHJpbnRsblwiLFxuICAgIFwicmVhbFwiLFxuICAgIFwicmVjb3ZlclwiLFxuICAgIFwiZGVsZXRlXCJcbiAgXTtcbiAgY29uc3QgVFlQRVMgPSBbXG4gICAgXCJib29sXCIsXG4gICAgXCJieXRlXCIsXG4gICAgXCJjb21wbGV4NjRcIixcbiAgICBcImNvbXBsZXgxMjhcIixcbiAgICBcImVycm9yXCIsXG4gICAgXCJmbG9hdDMyXCIsXG4gICAgXCJmbG9hdDY0XCIsXG4gICAgXCJpbnQ4XCIsXG4gICAgXCJpbnQxNlwiLFxuICAgIFwiaW50MzJcIixcbiAgICBcImludDY0XCIsXG4gICAgXCJzdHJpbmdcIixcbiAgICBcInVpbnQ4XCIsXG4gICAgXCJ1aW50MTZcIixcbiAgICBcInVpbnQzMlwiLFxuICAgIFwidWludDY0XCIsXG4gICAgXCJpbnRcIixcbiAgICBcInVpbnRcIixcbiAgICBcInVpbnRwdHJcIixcbiAgICBcInJ1bmVcIlxuICBdO1xuICBjb25zdCBLV1MgPSBbXG4gICAgXCJicmVha1wiLFxuICAgIFwiY2FzZVwiLFxuICAgIFwiY2hhblwiLFxuICAgIFwiY29uc3RcIixcbiAgICBcImNvbnRpbnVlXCIsXG4gICAgXCJkZWZhdWx0XCIsXG4gICAgXCJkZWZlclwiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwiZmFsbHRocm91Z2hcIixcbiAgICBcImZvclwiLFxuICAgIFwiZnVuY1wiLFxuICAgIFwiZ29cIixcbiAgICBcImdvdG9cIixcbiAgICBcImlmXCIsXG4gICAgXCJpbXBvcnRcIixcbiAgICBcImludGVyZmFjZVwiLFxuICAgIFwibWFwXCIsXG4gICAgXCJwYWNrYWdlXCIsXG4gICAgXCJyYW5nZVwiLFxuICAgIFwicmV0dXJuXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN0cnVjdFwiLFxuICAgIFwic3dpdGNoXCIsXG4gICAgXCJ0eXBlXCIsXG4gICAgXCJ2YXJcIixcbiAgXTtcbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDogS1dTLFxuICAgIHR5cGU6IFRZUEVTLFxuICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgIGJ1aWx0X2luOiBCVUlMVF9JTlNcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnR28nLFxuICAgIGFsaWFzZXM6IFsgJ2dvbGFuZycgXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogJzwvJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ2AnLFxuICAgICAgICAgICAgZW5kOiAnYCdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IGhsanMuQ19OVU1CRVJfUkUgKyAnW2ldJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IGJlZ2luOiAvOj0vIC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jJyxcbiAgICAgICAgZW5kOiAnXFxcXHMqKFxcXFx7fCQpJyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgaWxsZWdhbDogL1tcIiddL1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnbztcbiIsIi8qXG4gTGFuZ3VhZ2U6IEdyYXBoUUxcbiBBdXRob3I6IEpvaG4gRm9zdGVyIChHSCBqZjk5MCksIGFuZCBvdGhlcnNcbiBEZXNjcmlwdGlvbjogR3JhcGhRTCBpcyBhIHF1ZXJ5IGxhbmd1YWdlIGZvciBBUElzXG4gQ2F0ZWdvcnk6IHdlYiwgY29tbW9uXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gZ3JhcGhxbChobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgR1FMX05BTUUgPSAvW19BLVphLXpdW18wLTlBLVphLXpdKi87XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJHcmFwaFFMXCIsXG4gICAgYWxpYXNlczogWyBcImdxbFwiIF0sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBkaXNhYmxlQXV0b2RldGVjdDogZmFsc2UsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IFtcbiAgICAgICAgXCJxdWVyeVwiLFxuICAgICAgICBcIm11dGF0aW9uXCIsXG4gICAgICAgIFwic3Vic2NyaXB0aW9uXCIsXG4gICAgICAgIFwidHlwZVwiLFxuICAgICAgICBcImlucHV0XCIsXG4gICAgICAgIFwic2NoZW1hXCIsXG4gICAgICAgIFwiZGlyZWN0aXZlXCIsXG4gICAgICAgIFwiaW50ZXJmYWNlXCIsXG4gICAgICAgIFwidW5pb25cIixcbiAgICAgICAgXCJzY2FsYXJcIixcbiAgICAgICAgXCJmcmFnbWVudFwiLFxuICAgICAgICBcImVudW1cIixcbiAgICAgICAgXCJvblwiXG4gICAgICBdLFxuICAgICAgbGl0ZXJhbDogW1xuICAgICAgICBcInRydWVcIixcbiAgICAgICAgXCJmYWxzZVwiLFxuICAgICAgICBcIm51bGxcIlxuICAgICAgXVxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6IFwicHVuY3R1YXRpb25cIixcbiAgICAgICAgbWF0Y2g6IC9bLl17M30vLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNjb3BlOiBcInB1bmN0dWF0aW9uXCIsXG4gICAgICAgIGJlZ2luOiAvW1xcIVxcKFxcKVxcOlxcPVxcW1xcXVxce1xcfFxcfV17MX0vLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNjb3BlOiBcInZhcmlhYmxlXCIsXG4gICAgICAgIGJlZ2luOiAvXFwkLyxcbiAgICAgICAgZW5kOiAvXFxXLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzY29wZTogXCJtZXRhXCIsXG4gICAgICAgIG1hdGNoOiAvQFxcdysvLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzY29wZTogXCJzeW1ib2xcIixcbiAgICAgICAgYmVnaW46IHJlZ2V4LmNvbmNhdChHUUxfTkFNRSwgcmVnZXgubG9va2FoZWFkKC9cXHMqOi8pKSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiBbXG4gICAgICAvWzs8J10vLFxuICAgICAgL0JFR0lOL1xuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBncmFwaHFsO1xuIiwiLypcbkxhbmd1YWdlOiBUT01MLCBhbHNvIElOSVxuRGVzY3JpcHRpb246IFRPTUwgYWltcyB0byBiZSBhIG1pbmltYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdCB0aGF0J3MgZWFzeSB0byByZWFkIGR1ZSB0byBvYnZpb3VzIHNlbWFudGljcy5cbkNvbnRyaWJ1dG9yczogR3VpbGxhdW1lIEdvbWV6IDxndWlsbGF1bWUxLmdvbWV6QGdtYWlsLmNvbT5cbkNhdGVnb3J5OiBjb21tb24sIGNvbmZpZ1xuV2Vic2l0ZTogaHR0cHM6Ly9naXRodWIuY29tL3RvbWwtbGFuZy90b21sXG4qL1xuXG5mdW5jdGlvbiBpbmkoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIGNvbnN0IE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC8oWystXSspP1tcXGRdK19bXFxkX10rLyB9LFxuICAgICAgeyBiZWdpbjogaGxqcy5OVU1CRVJfUkUgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgQ09NTUVOVFMgPSBobGpzLkNPTU1FTlQoKTtcbiAgQ09NTUVOVFMudmFyaWFudHMgPSBbXG4gICAge1xuICAgICAgYmVnaW46IC87LyxcbiAgICAgIGVuZDogLyQvXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogLyMvLFxuICAgICAgZW5kOiAvJC9cbiAgICB9XG4gIF07XG4gIGNvbnN0IFZBUklBQkxFUyA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC9cXCRbXFx3XFxkXCJdW1xcd1xcZF9dKi8gfSxcbiAgICAgIHsgYmVnaW46IC9cXCRcXHsoLio/KVxcfS8gfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgTElURVJBTFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgYmVnaW46IC9cXGJvbnxvZmZ8dHJ1ZXxmYWxzZXx5ZXN8bm9cXGIvXG4gIH07XG4gIGNvbnN0IFNUUklOR1MgPSB7XG4gICAgY2xhc3NOYW1lOiBcInN0cmluZ1wiLFxuICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcIicnJ1wiLFxuICAgICAgICBlbmQ6IFwiJycnXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJyxcbiAgICAgICAgZW5kOiAnXCJcIlwiJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgIGVuZDogJ1wiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiJ1wiLFxuICAgICAgICBlbmQ6IFwiJ1wiXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBBUlJBWSA9IHtcbiAgICBiZWdpbjogL1xcWy8sXG4gICAgZW5kOiAvXFxdLyxcbiAgICBjb250YWluczogW1xuICAgICAgQ09NTUVOVFMsXG4gICAgICBMSVRFUkFMUyxcbiAgICAgIFZBUklBQkxFUyxcbiAgICAgIFNUUklOR1MsXG4gICAgICBOVU1CRVJTLFxuICAgICAgJ3NlbGYnXG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBCQVJFX0tFWSA9IC9bQS1aYS16MC05Xy1dKy87XG4gIGNvbnN0IFFVT1RFRF9LRVlfRE9VQkxFX1FVT1RFID0gL1wiKFxcXFxcInxbXlwiXSkqXCIvO1xuICBjb25zdCBRVU9URURfS0VZX1NJTkdMRV9RVU9URSA9IC8nW14nXSonLztcbiAgY29uc3QgQU5ZX0tFWSA9IHJlZ2V4LmVpdGhlcihcbiAgICBCQVJFX0tFWSwgUVVPVEVEX0tFWV9ET1VCTEVfUVVPVEUsIFFVT1RFRF9LRVlfU0lOR0xFX1FVT1RFXG4gICk7XG4gIGNvbnN0IERPVFRFRF9LRVkgPSByZWdleC5jb25jYXQoXG4gICAgQU5ZX0tFWSwgJyhcXFxccypcXFxcLlxcXFxzKicsIEFOWV9LRVksICcpKicsXG4gICAgcmVnZXgubG9va2FoZWFkKC9cXHMqPVxccypbXiNcXHNdLylcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdUT01MLCBhbHNvIElOSScsXG4gICAgYWxpYXNlczogWyAndG9tbCcgXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGlsbGVnYWw6IC9cXFMvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDT01NRU5UUyxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgIGJlZ2luOiAvXFxbKy8sXG4gICAgICAgIGVuZDogL1xcXSsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogRE9UVEVEX0tFWSxcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogLyQvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBDT01NRU5UUyxcbiAgICAgICAgICAgIEFSUkFZLFxuICAgICAgICAgICAgTElURVJBTFMsXG4gICAgICAgICAgICBWQVJJQUJMRVMsXG4gICAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgICAgTlVNQkVSU1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbmk7XG4iLCIvLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2Uvc3BlY3MvamxzL3NlMTUvaHRtbC9qbHMtMy5odG1sI2pscy0zLjEwXG52YXIgZGVjaW1hbERpZ2l0cyA9ICdbMC05XShfKlswLTldKSonO1xudmFyIGZyYWMgPSBgXFxcXC4oJHtkZWNpbWFsRGlnaXRzfSlgO1xudmFyIGhleERpZ2l0cyA9ICdbMC05YS1mQS1GXShfKlswLTlhLWZBLUZdKSonO1xudmFyIE5VTUVSSUMgPSB7XG4gIGNsYXNzTmFtZTogJ251bWJlcicsXG4gIHZhcmlhbnRzOiBbXG4gICAgLy8gRGVjaW1hbEZsb2F0aW5nUG9pbnRMaXRlcmFsXG4gICAgLy8gaW5jbHVkaW5nIEV4cG9uZW50UGFydFxuICAgIHsgYmVnaW46IGAoXFxcXGIoJHtkZWNpbWFsRGlnaXRzfSkoKCR7ZnJhY30pfFxcXFwuKT98KCR7ZnJhY30pKWAgK1xuICAgICAgYFtlRV1bKy1dPygke2RlY2ltYWxEaWdpdHN9KVtmRmREXT9cXFxcYmAgfSxcbiAgICAvLyBleGNsdWRpbmcgRXhwb25lbnRQYXJ0XG4gICAgeyBiZWdpbjogYFxcXFxiKCR7ZGVjaW1hbERpZ2l0c30pKCgke2ZyYWN9KVtmRmREXT9cXFxcYnxcXFxcLihbZkZkRF1cXFxcYik/KWAgfSxcbiAgICB7IGJlZ2luOiBgKCR7ZnJhY30pW2ZGZERdP1xcXFxiYCB9LFxuICAgIHsgYmVnaW46IGBcXFxcYigke2RlY2ltYWxEaWdpdHN9KVtmRmREXVxcXFxiYCB9LFxuXG4gICAgLy8gSGV4YWRlY2ltYWxGbG9hdGluZ1BvaW50TGl0ZXJhbFxuICAgIHsgYmVnaW46IGBcXFxcYjBbeFhdKCgke2hleERpZ2l0c30pXFxcXC4/fCgke2hleERpZ2l0c30pP1xcXFwuKCR7aGV4RGlnaXRzfSkpYCArXG4gICAgICBgW3BQXVsrLV0/KCR7ZGVjaW1hbERpZ2l0c30pW2ZGZERdP1xcXFxiYCB9LFxuXG4gICAgLy8gRGVjaW1hbEludGVnZXJMaXRlcmFsXG4gICAgeyBiZWdpbjogJ1xcXFxiKDB8WzEtOV0oXypbMC05XSkqKVtsTF0/XFxcXGInIH0sXG5cbiAgICAvLyBIZXhJbnRlZ2VyTGl0ZXJhbFxuICAgIHsgYmVnaW46IGBcXFxcYjBbeFhdKCR7aGV4RGlnaXRzfSlbbExdP1xcXFxiYCB9LFxuXG4gICAgLy8gT2N0YWxJbnRlZ2VyTGl0ZXJhbFxuICAgIHsgYmVnaW46ICdcXFxcYjAoXypbMC03XSkqW2xMXT9cXFxcYicgfSxcblxuICAgIC8vIEJpbmFyeUludGVnZXJMaXRlcmFsXG4gICAgeyBiZWdpbjogJ1xcXFxiMFtiQl1bMDFdKF8qWzAxXSkqW2xMXT9cXFxcYicgfSxcbiAgXSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuXG4vKlxuTGFuZ3VhZ2U6IEphdmFcbkF1dGhvcjogVnNldm9sb2QgU29sb3Z5b3YgPHZzZXZvbG9kLnNvbG92eW92QGdtYWlsLmNvbT5cbkNhdGVnb3J5OiBjb21tb24sIGVudGVycHJpc2VcbldlYnNpdGU6IGh0dHBzOi8vd3d3LmphdmEuY29tL1xuKi9cblxuLyoqXG4gKiBBbGxvd3MgcmVjdXJzaXZlIHJlZ2V4IGV4cHJlc3Npb25zIHRvIGEgZ2l2ZW4gZGVwdGhcbiAqXG4gKiBpZTogcmVjdXJSZWdleChcIihhYmN+fn4pXCIsIC9+fn4vZywgMikgYmVjb21lczpcbiAqIChhYmMoYWJjKGFiYykpKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZVxuICogQHBhcmFtIHtSZWdFeHB9IHN1YnN0aXR1dGlvbiAoc2hvdWxkIGJlIGEgZyBtb2RlIHJlZ2V4KVxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfWBgXG4gKi9cbmZ1bmN0aW9uIHJlY3VyUmVnZXgocmUsIHN1YnN0aXR1dGlvbiwgZGVwdGgpIHtcbiAgaWYgKGRlcHRoID09PSAtMSkgcmV0dXJuIFwiXCI7XG5cbiAgcmV0dXJuIHJlLnJlcGxhY2Uoc3Vic3RpdHV0aW9uLCBfID0+IHtcbiAgICByZXR1cm4gcmVjdXJSZWdleChyZSwgc3Vic3RpdHV0aW9uLCBkZXB0aCAtIDEpO1xuICB9KTtcbn1cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGphdmEoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIGNvbnN0IEpBVkFfSURFTlRfUkUgPSAnW1xcdTAwQzAtXFx1MDJCOGEtekEtWl8kXVtcXHUwMEMwLVxcdTAyQjhhLXpBLVpfJDAtOV0qJztcbiAgY29uc3QgR0VORVJJQ19JREVOVF9SRSA9IEpBVkFfSURFTlRfUkVcbiAgICArIHJlY3VyUmVnZXgoJyg/OjwnICsgSkFWQV9JREVOVF9SRSArICd+fn4oPzpcXFxccyosXFxcXHMqJyArIEpBVkFfSURFTlRfUkUgKyAnfn5+KSo+KT8nLCAvfn5+L2csIDIpO1xuICBjb25zdCBNQUlOX0tFWVdPUkRTID0gW1xuICAgICdzeW5jaHJvbml6ZWQnLFxuICAgICdhYnN0cmFjdCcsXG4gICAgJ3ByaXZhdGUnLFxuICAgICd2YXInLFxuICAgICdzdGF0aWMnLFxuICAgICdpZicsXG4gICAgJ2NvbnN0ICcsXG4gICAgJ2ZvcicsXG4gICAgJ3doaWxlJyxcbiAgICAnc3RyaWN0ZnAnLFxuICAgICdmaW5hbGx5JyxcbiAgICAncHJvdGVjdGVkJyxcbiAgICAnaW1wb3J0JyxcbiAgICAnbmF0aXZlJyxcbiAgICAnZmluYWwnLFxuICAgICd2b2lkJyxcbiAgICAnZW51bScsXG4gICAgJ2Vsc2UnLFxuICAgICdicmVhaycsXG4gICAgJ3RyYW5zaWVudCcsXG4gICAgJ2NhdGNoJyxcbiAgICAnaW5zdGFuY2VvZicsXG4gICAgJ3ZvbGF0aWxlJyxcbiAgICAnY2FzZScsXG4gICAgJ2Fzc2VydCcsXG4gICAgJ3BhY2thZ2UnLFxuICAgICdkZWZhdWx0JyxcbiAgICAncHVibGljJyxcbiAgICAndHJ5JyxcbiAgICAnc3dpdGNoJyxcbiAgICAnY29udGludWUnLFxuICAgICd0aHJvd3MnLFxuICAgICdwcm90ZWN0ZWQnLFxuICAgICdwdWJsaWMnLFxuICAgICdwcml2YXRlJyxcbiAgICAnbW9kdWxlJyxcbiAgICAncmVxdWlyZXMnLFxuICAgICdleHBvcnRzJyxcbiAgICAnZG8nLFxuICAgICdzZWFsZWQnXG4gIF07XG5cbiAgY29uc3QgQlVJTFRfSU5TID0gW1xuICAgICdzdXBlcicsXG4gICAgJ3RoaXMnXG4gIF07XG5cbiAgY29uc3QgTElURVJBTFMgPSBbXG4gICAgJ2ZhbHNlJyxcbiAgICAndHJ1ZScsXG4gICAgJ251bGwnXG4gIF07XG5cbiAgY29uc3QgVFlQRVMgPSBbXG4gICAgJ2NoYXInLFxuICAgICdib29sZWFuJyxcbiAgICAnbG9uZycsXG4gICAgJ2Zsb2F0JyxcbiAgICAnaW50JyxcbiAgICAnYnl0ZScsXG4gICAgJ3Nob3J0JyxcbiAgICAnZG91YmxlJ1xuICBdO1xuXG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6IE1BSU5fS0VZV09SRFMsXG4gICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgdHlwZTogVFlQRVMsXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOU1xuICB9O1xuXG4gIGNvbnN0IEFOTk9UQVRJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdAJyArIEpBVkFfSURFTlRfUkUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBjb250YWluczogWyBcInNlbGZcIiBdIC8vIGFsbG93IG5lc3RlZCAoKSBpbnNpZGUgb3VyIGFubm90YXRpb25cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFsgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSBdLFxuICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdKYXZhJyxcbiAgICBhbGlhc2VzOiBbICdqc3AnIF0sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC88XFwvfCMvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXCpcXFxcKicsXG4gICAgICAgICdcXFxcKi8nLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIGVhdCB1cCBAJ3MgaW4gZW1haWxzIHRvIHByZXZlbnQgdGhlbSB0byBiZSByZWNvZ25pemVkIGFzIGRvY3RhZ3NcbiAgICAgICAgICAgICAgYmVnaW46IC9cXHcrQC8sXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8vIHJlbGV2YW5jZSBib29zdFxuICAgICAge1xuICAgICAgICBiZWdpbjogL2ltcG9ydCBqYXZhXFwuW2Etel0rXFwuLyxcbiAgICAgICAga2V5d29yZHM6IFwiaW1wb3J0XCIsXG4gICAgICAgIHJlbGV2YW5jZTogMlxuICAgICAgfSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXCJcIlwiLyxcbiAgICAgICAgZW5kOiAvXCJcIlwiLyxcbiAgICAgICAgY2xhc3NOYW1lOiBcInN0cmluZ1wiLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL1xcYig/OmNsYXNzfGludGVyZmFjZXxlbnVtfGV4dGVuZHN8aW1wbGVtZW50c3xuZXcpLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgSkFWQV9JREVOVF9SRVxuICAgICAgICBdLFxuICAgICAgICBjbGFzc05hbWU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInRpdGxlLmNsYXNzXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gRXhjZXB0aW9ucyBmb3IgaHlwaGVuYXRlZCBrZXl3b3Jkc1xuICAgICAgICBtYXRjaDogL25vbi1zZWFsZWQvLFxuICAgICAgICBzY29wZTogXCJrZXl3b3JkXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBbXG4gICAgICAgICAgcmVnZXguY29uY2F0KC8oPyFlbHNlKS8sIEpBVkFfSURFTlRfUkUpLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICBKQVZBX0lERU5UX1JFLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICAvPSg/IT0pL1xuICAgICAgICBdLFxuICAgICAgICBjbGFzc05hbWU6IHtcbiAgICAgICAgICAxOiBcInR5cGVcIixcbiAgICAgICAgICAzOiBcInZhcmlhYmxlXCIsXG4gICAgICAgICAgNTogXCJvcGVyYXRvclwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBbXG4gICAgICAgICAgL3JlY29yZC8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIEpBVkFfSURFTlRfUkVcbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3NOYW1lOiB7XG4gICAgICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAgICAgMzogXCJ0aXRsZS5jbGFzc1wiXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgUEFSQU1TLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEV4cHJlc3Npb24ga2V5d29yZHMgcHJldmVudCAna2V5d29yZCBOYW1lKC4uLiknIGZyb20gYmVpbmdcbiAgICAgICAgLy8gcmVjb2duaXplZCBhcyBhIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyB0aHJvdyByZXR1cm4gZWxzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFtcbiAgICAgICAgICAnKD86JyArIEdFTkVSSUNfSURFTlRfUkUgKyAnXFxcXHMrKScsXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICAgIC9cXHMqKD89XFwoKS9cbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3NOYW1lOiB7IDI6IFwidGl0bGUuZnVuY3Rpb25cIiB9LFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBBTk5PVEFUSU9OLFxuICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgIE5VTUVSSUMsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBOVU1FUklDLFxuICAgICAgQU5OT1RBVElPTlxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBqYXZhO1xuIiwiY29uc3QgSURFTlRfUkUgPSAnW0EtWmEteiRfXVswLTlBLVphLXokX10qJztcbmNvbnN0IEtFWVdPUkRTID0gW1xuICBcImFzXCIsIC8vIGZvciBleHBvcnRzXG4gIFwiaW5cIixcbiAgXCJvZlwiLFxuICBcImlmXCIsXG4gIFwiZm9yXCIsXG4gIFwid2hpbGVcIixcbiAgXCJmaW5hbGx5XCIsXG4gIFwidmFyXCIsXG4gIFwibmV3XCIsXG4gIFwiZnVuY3Rpb25cIixcbiAgXCJkb1wiLFxuICBcInJldHVyblwiLFxuICBcInZvaWRcIixcbiAgXCJlbHNlXCIsXG4gIFwiYnJlYWtcIixcbiAgXCJjYXRjaFwiLFxuICBcImluc3RhbmNlb2ZcIixcbiAgXCJ3aXRoXCIsXG4gIFwidGhyb3dcIixcbiAgXCJjYXNlXCIsXG4gIFwiZGVmYXVsdFwiLFxuICBcInRyeVwiLFxuICBcInN3aXRjaFwiLFxuICBcImNvbnRpbnVlXCIsXG4gIFwidHlwZW9mXCIsXG4gIFwiZGVsZXRlXCIsXG4gIFwibGV0XCIsXG4gIFwieWllbGRcIixcbiAgXCJjb25zdFwiLFxuICBcImNsYXNzXCIsXG4gIC8vIEpTIGhhbmRsZXMgdGhlc2Ugd2l0aCBhIHNwZWNpYWwgcnVsZVxuICAvLyBcImdldFwiLFxuICAvLyBcInNldFwiLFxuICBcImRlYnVnZ2VyXCIsXG4gIFwiYXN5bmNcIixcbiAgXCJhd2FpdFwiLFxuICBcInN0YXRpY1wiLFxuICBcImltcG9ydFwiLFxuICBcImZyb21cIixcbiAgXCJleHBvcnRcIixcbiAgXCJleHRlbmRzXCJcbl07XG5jb25zdCBMSVRFUkFMUyA9IFtcbiAgXCJ0cnVlXCIsXG4gIFwiZmFsc2VcIixcbiAgXCJudWxsXCIsXG4gIFwidW5kZWZpbmVkXCIsXG4gIFwiTmFOXCIsXG4gIFwiSW5maW5pdHlcIlxuXTtcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHNcbmNvbnN0IFRZUEVTID0gW1xuICAvLyBGdW5kYW1lbnRhbCBvYmplY3RzXG4gIFwiT2JqZWN0XCIsXG4gIFwiRnVuY3Rpb25cIixcbiAgXCJCb29sZWFuXCIsXG4gIFwiU3ltYm9sXCIsXG4gIC8vIG51bWJlcnMgYW5kIGRhdGVzXG4gIFwiTWF0aFwiLFxuICBcIkRhdGVcIixcbiAgXCJOdW1iZXJcIixcbiAgXCJCaWdJbnRcIixcbiAgLy8gdGV4dFxuICBcIlN0cmluZ1wiLFxuICBcIlJlZ0V4cFwiLFxuICAvLyBJbmRleGVkIGNvbGxlY3Rpb25zXG4gIFwiQXJyYXlcIixcbiAgXCJGbG9hdDMyQXJyYXlcIixcbiAgXCJGbG9hdDY0QXJyYXlcIixcbiAgXCJJbnQ4QXJyYXlcIixcbiAgXCJVaW50OEFycmF5XCIsXG4gIFwiVWludDhDbGFtcGVkQXJyYXlcIixcbiAgXCJJbnQxNkFycmF5XCIsXG4gIFwiSW50MzJBcnJheVwiLFxuICBcIlVpbnQxNkFycmF5XCIsXG4gIFwiVWludDMyQXJyYXlcIixcbiAgXCJCaWdJbnQ2NEFycmF5XCIsXG4gIFwiQmlnVWludDY0QXJyYXlcIixcbiAgLy8gS2V5ZWQgY29sbGVjdGlvbnNcbiAgXCJTZXRcIixcbiAgXCJNYXBcIixcbiAgXCJXZWFrU2V0XCIsXG4gIFwiV2Vha01hcFwiLFxuICAvLyBTdHJ1Y3R1cmVkIGRhdGFcbiAgXCJBcnJheUJ1ZmZlclwiLFxuICBcIlNoYXJlZEFycmF5QnVmZmVyXCIsXG4gIFwiQXRvbWljc1wiLFxuICBcIkRhdGFWaWV3XCIsXG4gIFwiSlNPTlwiLFxuICAvLyBDb250cm9sIGFic3RyYWN0aW9uIG9iamVjdHNcbiAgXCJQcm9taXNlXCIsXG4gIFwiR2VuZXJhdG9yXCIsXG4gIFwiR2VuZXJhdG9yRnVuY3Rpb25cIixcbiAgXCJBc3luY0Z1bmN0aW9uXCIsXG4gIC8vIFJlZmxlY3Rpb25cbiAgXCJSZWZsZWN0XCIsXG4gIFwiUHJveHlcIixcbiAgLy8gSW50ZXJuYXRpb25hbGl6YXRpb25cbiAgXCJJbnRsXCIsXG4gIC8vIFdlYkFzc2VtYmx5XG4gIFwiV2ViQXNzZW1ibHlcIlxuXTtcblxuY29uc3QgRVJST1JfVFlQRVMgPSBbXG4gIFwiRXJyb3JcIixcbiAgXCJFdmFsRXJyb3JcIixcbiAgXCJJbnRlcm5hbEVycm9yXCIsXG4gIFwiUmFuZ2VFcnJvclwiLFxuICBcIlJlZmVyZW5jZUVycm9yXCIsXG4gIFwiU3ludGF4RXJyb3JcIixcbiAgXCJUeXBlRXJyb3JcIixcbiAgXCJVUklFcnJvclwiXG5dO1xuXG5jb25zdCBCVUlMVF9JTl9HTE9CQUxTID0gW1xuICBcInNldEludGVydmFsXCIsXG4gIFwic2V0VGltZW91dFwiLFxuICBcImNsZWFySW50ZXJ2YWxcIixcbiAgXCJjbGVhclRpbWVvdXRcIixcblxuICBcInJlcXVpcmVcIixcbiAgXCJleHBvcnRzXCIsXG5cbiAgXCJldmFsXCIsXG4gIFwiaXNGaW5pdGVcIixcbiAgXCJpc05hTlwiLFxuICBcInBhcnNlRmxvYXRcIixcbiAgXCJwYXJzZUludFwiLFxuICBcImRlY29kZVVSSVwiLFxuICBcImRlY29kZVVSSUNvbXBvbmVudFwiLFxuICBcImVuY29kZVVSSVwiLFxuICBcImVuY29kZVVSSUNvbXBvbmVudFwiLFxuICBcImVzY2FwZVwiLFxuICBcInVuZXNjYXBlXCJcbl07XG5cbmNvbnN0IEJVSUxUX0lOX1ZBUklBQkxFUyA9IFtcbiAgXCJhcmd1bWVudHNcIixcbiAgXCJ0aGlzXCIsXG4gIFwic3VwZXJcIixcbiAgXCJjb25zb2xlXCIsXG4gIFwid2luZG93XCIsXG4gIFwiZG9jdW1lbnRcIixcbiAgXCJsb2NhbFN0b3JhZ2VcIixcbiAgXCJtb2R1bGVcIixcbiAgXCJnbG9iYWxcIiAvLyBOb2RlLmpzXG5dO1xuXG5jb25zdCBCVUlMVF9JTlMgPSBbXS5jb25jYXQoXG4gIEJVSUxUX0lOX0dMT0JBTFMsXG4gIFRZUEVTLFxuICBFUlJPUl9UWVBFU1xuKTtcblxuLypcbkxhbmd1YWdlOiBKYXZhU2NyaXB0XG5EZXNjcmlwdGlvbjogSmF2YVNjcmlwdCAoSlMpIGlzIGEgbGlnaHR3ZWlnaHQsIGludGVycHJldGVkLCBvciBqdXN0LWluLXRpbWUgY29tcGlsZWQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugd2l0aCBmaXJzdC1jbGFzcyBmdW5jdGlvbnMuXG5DYXRlZ29yeTogY29tbW9uLCBzY3JpcHRpbmcsIHdlYlxuV2Vic2l0ZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdFxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGphdmFzY3JpcHQoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIC8qKlxuICAgKiBUYWtlcyBhIHN0cmluZyBsaWtlIFwiPEJvb2dlclwiIGFuZCBjaGVja3MgdG8gc2VlXG4gICAqIGlmIHdlIGNhbiBmaW5kIGEgbWF0Y2hpbmcgXCI8L0Jvb2dlclwiIGxhdGVyIGluIHRoZVxuICAgKiBjb250ZW50LlxuICAgKiBAcGFyYW0ge1JlZ0V4cE1hdGNoQXJyYXl9IG1hdGNoXG4gICAqIEBwYXJhbSB7e2FmdGVyOm51bWJlcn19IHBhcmFtMVxuICAgKi9cbiAgY29uc3QgaGFzQ2xvc2luZ1RhZyA9IChtYXRjaCwgeyBhZnRlciB9KSA9PiB7XG4gICAgY29uc3QgdGFnID0gXCI8L1wiICsgbWF0Y2hbMF0uc2xpY2UoMSk7XG4gICAgY29uc3QgcG9zID0gbWF0Y2guaW5wdXQuaW5kZXhPZih0YWcsIGFmdGVyKTtcbiAgICByZXR1cm4gcG9zICE9PSAtMTtcbiAgfTtcblxuICBjb25zdCBJREVOVF9SRSQxID0gSURFTlRfUkU7XG4gIGNvbnN0IEZSQUdNRU5UID0ge1xuICAgIGJlZ2luOiAnPD4nLFxuICAgIGVuZDogJzwvPidcbiAgfTtcbiAgLy8gdG8gYXZvaWQgc29tZSBzcGVjaWFsIGNhc2VzIGluc2lkZSBpc1RydWx5T3BlbmluZ1RhZ1xuICBjb25zdCBYTUxfU0VMRl9DTE9TSU5HID0gLzxbQS1aYS16MC05XFxcXC5fOi1dK1xccypcXC8+LztcbiAgY29uc3QgWE1MX1RBRyA9IHtcbiAgICBiZWdpbjogLzxbQS1aYS16MC05XFxcXC5fOi1dKy8sXG4gICAgZW5kOiAvXFwvW0EtWmEtejAtOVxcXFwuXzotXSs+fFxcLz4vLFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2hcbiAgICAgKiBAcGFyYW0ge0NhbGxiYWNrUmVzcG9uc2V9IHJlc3BvbnNlXG4gICAgICovXG4gICAgaXNUcnVseU9wZW5pbmdUYWc6IChtYXRjaCwgcmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGFmdGVyTWF0Y2hJbmRleCA9IG1hdGNoWzBdLmxlbmd0aCArIG1hdGNoLmluZGV4O1xuICAgICAgY29uc3QgbmV4dENoYXIgPSBtYXRjaC5pbnB1dFthZnRlck1hdGNoSW5kZXhdO1xuICAgICAgaWYgKFxuICAgICAgICAvLyBIVE1MIHNob3VsZCBub3QgaW5jbHVkZSBhbm90aGVyIHJhdyBgPGAgaW5zaWRlIGEgdGFnXG4gICAgICAgIC8vIG5lc3RlZCB0eXBlP1xuICAgICAgICAvLyBgPEFycmF5PEFycmF5PG51bWJlcj4+YCwgZXRjLlxuICAgICAgICBuZXh0Q2hhciA9PT0gXCI8XCIgfHxcbiAgICAgICAgLy8gdGhlICwgZ2l2ZXMgYXdheSB0aGF0IHRoaXMgaXMgbm90IEhUTUxcbiAgICAgICAgLy8gYDxULCBBIGV4dGVuZHMga2V5b2YgVCwgVj5gXG4gICAgICAgIG5leHRDaGFyID09PSBcIixcIikge1xuICAgICAgICByZXNwb25zZS5pZ25vcmVNYXRjaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGA8c29tZXRoaW5nPmBcbiAgICAgIC8vIFF1aXRlIHBvc3NpYmx5IGEgdGFnLCBsZXRzIGxvb2sgZm9yIGEgbWF0Y2hpbmcgY2xvc2luZyB0YWcuLi5cbiAgICAgIGlmIChuZXh0Q2hhciA9PT0gXCI+XCIpIHtcbiAgICAgICAgLy8gaWYgd2UgY2Fubm90IGZpbmQgYSBtYXRjaGluZyBjbG9zaW5nIHRhZywgdGhlbiB3ZVxuICAgICAgICAvLyB3aWxsIGlnbm9yZSBpdFxuICAgICAgICBpZiAoIWhhc0Nsb3NpbmdUYWcobWF0Y2gsIHsgYWZ0ZXI6IGFmdGVyTWF0Y2hJbmRleCB9KSkge1xuICAgICAgICAgIHJlc3BvbnNlLmlnbm9yZU1hdGNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gYDxibGFoIC8+YCAoc2VsZi1jbG9zaW5nKVxuICAgICAgLy8gaGFuZGxlZCBieSBzaW1wbGVTZWxmQ2xvc2luZyBydWxlXG5cbiAgICAgIC8vIGA8RnJvbSBleHRlbmRzIHN0cmluZz5gXG4gICAgICAvLyB0ZWNobmljYWxseSB0aGlzIGNvdWxkIGJlIEhUTUwsIGJ1dCBpdCBzbWVsbHMgbGlrZSBhIHR5cGVcbiAgICAgIGxldCBtO1xuICAgICAgY29uc3QgYWZ0ZXJNYXRjaCA9IG1hdGNoLmlucHV0LnN1YnN0cmluZyhhZnRlck1hdGNoSW5kZXgpO1xuICAgICAgLy8gTk9URTogVGhpcyBpcyB1Z2gsIGJ1dCBhZGRlZCBzcGVjaWZpY2FsbHkgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzMyNzZcbiAgICAgIGlmICgobSA9IGFmdGVyTWF0Y2gubWF0Y2goL15cXHMrZXh0ZW5kc1xccysvKSkpIHtcbiAgICAgICAgaWYgKG0uaW5kZXggPT09IDApIHtcbiAgICAgICAgICByZXNwb25zZS5pZ25vcmVNYXRjaCgpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLXJldHVyblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgS0VZV09SRFMkMSA9IHtcbiAgICAkcGF0dGVybjogSURFTlRfUkUsXG4gICAga2V5d29yZDogS0VZV09SRFMsXG4gICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOUyxcbiAgICBcInZhcmlhYmxlLmxhbmd1YWdlXCI6IEJVSUxUX0lOX1ZBUklBQkxFU1xuICB9O1xuXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGl0ZXJhbHMtbnVtZXJpYy1saXRlcmFsc1xuICBjb25zdCBkZWNpbWFsRGlnaXRzID0gJ1swLTldKF8/WzAtOV0pKic7XG4gIGNvbnN0IGZyYWMgPSBgXFxcXC4oJHtkZWNpbWFsRGlnaXRzfSlgO1xuICAvLyBEZWNpbWFsSW50ZWdlckxpdGVyYWwsIGluY2x1ZGluZyBBbm5leCBCIE5vbk9jdGFsRGVjaW1hbEludGVnZXJMaXRlcmFsXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWRkaXRpb25hbC1zeW50YXgtbnVtZXJpYy1saXRlcmFsc1xuICBjb25zdCBkZWNpbWFsSW50ZWdlciA9IGAwfFsxLTldKF8/WzAtOV0pKnwwWzAtN10qWzg5XVswLTldKmA7XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBEZWNpbWFsTGl0ZXJhbFxuICAgICAgeyBiZWdpbjogYChcXFxcYigke2RlY2ltYWxJbnRlZ2VyfSkoKCR7ZnJhY30pfFxcXFwuKT98KCR7ZnJhY30pKWAgK1xuICAgICAgICBgW2VFXVsrLV0/KCR7ZGVjaW1hbERpZ2l0c30pXFxcXGJgIH0sXG4gICAgICB7IGJlZ2luOiBgXFxcXGIoJHtkZWNpbWFsSW50ZWdlcn0pXFxcXGIoKCR7ZnJhY30pXFxcXGJ8XFxcXC4pP3woJHtmcmFjfSlcXFxcYmAgfSxcblxuICAgICAgLy8gRGVjaW1hbEJpZ0ludGVnZXJMaXRlcmFsXG4gICAgICB7IGJlZ2luOiBgXFxcXGIoMHxbMS05XShfP1swLTldKSopblxcXFxiYCB9LFxuXG4gICAgICAvLyBOb25EZWNpbWFsSW50ZWdlckxpdGVyYWxcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwW3hYXVswLTlhLWZBLUZdKF8/WzAtOWEtZkEtRl0pKm4/XFxcXGJcIiB9LFxuICAgICAgeyBiZWdpbjogXCJcXFxcYjBbYkJdWzAtMV0oXz9bMC0xXSkqbj9cXFxcYlwiIH0sXG4gICAgICB7IGJlZ2luOiBcIlxcXFxiMFtvT11bMC03XShfP1swLTddKSpuP1xcXFxiXCIgfSxcblxuICAgICAgLy8gTGVnYWN5T2N0YWxJbnRlZ2VyTGl0ZXJhbCAoZG9lcyBub3QgaW5jbHVkZSB1bmRlcnNjb3JlIHNlcGFyYXRvcnMpXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkZGl0aW9uYWwtc3ludGF4LW51bWVyaWMtbGl0ZXJhbHNcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwWzAtN10rbj9cXFxcYlwiIH0sXG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdcXFxcJFxcXFx7JyxcbiAgICBlbmQ6ICdcXFxcfScsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgY29udGFpbnM6IFtdIC8vIGRlZmluZWQgbGF0ZXJcbiAgfTtcbiAgY29uc3QgSFRNTF9URU1QTEFURSA9IHtcbiAgICBiZWdpbjogJ2h0bWxgJyxcbiAgICBlbmQ6ICcnLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnYCcsXG4gICAgICByZXR1cm5FbmQ6IGZhbHNlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICBTVUJTVFxuICAgICAgXSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAneG1sJ1xuICAgIH1cbiAgfTtcbiAgY29uc3QgQ1NTX1RFTVBMQVRFID0ge1xuICAgIGJlZ2luOiAnY3NzYCcsXG4gICAgZW5kOiAnJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJ2AnLFxuICAgICAgcmV0dXJuRW5kOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgU1VCU1RcbiAgICAgIF0sXG4gICAgICBzdWJMYW5ndWFnZTogJ2NzcydcbiAgICB9XG4gIH07XG4gIGNvbnN0IFRFTVBMQVRFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnYCcsXG4gICAgZW5kOiAnYCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFNVQlNUXG4gICAgXVxuICB9O1xuICBjb25zdCBKU0RPQ19DT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgIC9cXC9cXCpcXCooPyFcXC8pLyxcbiAgICAnXFxcXCovJyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICcoPz1AW0EtWmEtel0rKScsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx7JyxcbiAgICAgICAgICAgICAgZW5kOiAnXFxcXH0nLFxuICAgICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICBiZWdpbjogSURFTlRfUkUkMSArICcoPz1cXFxccyooLSl8JCknLFxuICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBlYXQgc3BhY2VzIChub3QgbmV3bGluZXMpIHNvIHdlIGNhbiBmaW5kXG4gICAgICAgICAgICAvLyB0eXBlcyBvciB2YXJpYWJsZXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmVnaW46IC8oPz1bXlxcbl0pXFxzLyxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICApO1xuICBjb25zdCBDT01NRU5UID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCIsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIEpTRE9DX0NPTU1FTlQsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xuICBjb25zdCBTVUJTVF9JTlRFUk5BTFMgPSBbXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgSFRNTF9URU1QTEFURSxcbiAgICBDU1NfVEVNUExBVEUsXG4gICAgVEVNUExBVEVfU1RSSU5HLFxuICAgIE5VTUJFUixcbiAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsOlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL2lzc3Vlcy8zMjg4XG4gICAgLy8gaGxqcy5SRUdFWFBfTU9ERVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IFNVQlNUX0lOVEVSTkFMU1xuICAgIC5jb25jYXQoe1xuICAgICAgLy8gd2UgbmVlZCB0byBwYWlyIHVwIHt9IGluc2lkZSBvdXIgc3Vic3QgdG8gcHJldmVudFxuICAgICAgLy8gaXQgZnJvbSBlbmRpbmcgdG9vIGVhcmx5IGJ5IG1hdGNoaW5nIGFub3RoZXIgfVxuICAgICAgYmVnaW46IC9cXHsvLFxuICAgICAgZW5kOiAvXFx9LyxcbiAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgXCJzZWxmXCJcbiAgICAgIF0uY29uY2F0KFNVQlNUX0lOVEVSTkFMUylcbiAgICB9KTtcbiAgY29uc3QgU1VCU1RfQU5EX0NPTU1FTlRTID0gW10uY29uY2F0KENPTU1FTlQsIFNVQlNULmNvbnRhaW5zKTtcbiAgY29uc3QgUEFSQU1TX0NPTlRBSU5TID0gU1VCU1RfQU5EX0NPTU1FTlRTLmNvbmNhdChbXG4gICAgLy8gZWF0IHJlY3Vyc2l2ZSBwYXJlbnMgaW4gc3ViIGV4cHJlc3Npb25zXG4gICAge1xuICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgZW5kOiAvXFwpLyxcbiAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgICAgY29udGFpbnM6IFtcInNlbGZcIl0uY29uY2F0KFNVQlNUX0FORF9DT01NRU5UUylcbiAgICB9XG4gIF0pO1xuICBjb25zdCBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICBjb250YWluczogUEFSQU1TX0NPTlRBSU5TXG4gIH07XG5cbiAgLy8gRVM2IGNsYXNzZXNcbiAgY29uc3QgQ0xBU1NfT1JfRVhURU5EUyA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gY2xhc3MgQ2FyIGV4dGVuZHMgdmVoaWNsZVxuICAgICAge1xuICAgICAgICBtYXRjaDogW1xuICAgICAgICAgIC9jbGFzcy8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIElERU5UX1JFJDEsXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIC9leHRlbmRzLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgcmVnZXguY29uY2F0KElERU5UX1JFJDEsIFwiKFwiLCByZWdleC5jb25jYXQoL1xcLi8sIElERU5UX1JFJDEpLCBcIikqXCIpXG4gICAgICAgIF0sXG4gICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAgICAgMzogXCJ0aXRsZS5jbGFzc1wiLFxuICAgICAgICAgIDU6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDc6IFwidGl0bGUuY2xhc3MuaW5oZXJpdGVkXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGNsYXNzIENhclxuICAgICAge1xuICAgICAgICBtYXRjaDogW1xuICAgICAgICAgIC9jbGFzcy8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIElERU5UX1JFJDFcbiAgICAgICAgXSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInRpdGxlLmNsYXNzXCJcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgIF1cbiAgfTtcblxuICBjb25zdCBDTEFTU19SRUZFUkVOQ0UgPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIG1hdGNoOlxuICAgIHJlZ2V4LmVpdGhlcihcbiAgICAgIC8vIEhhcmQgY29kZWQgZXhjZXB0aW9uc1xuICAgICAgL1xcYkpTT04vLFxuICAgICAgLy8gRmxvYXQzMkFycmF5LCBPdXRUXG4gICAgICAvXFxiW0EtWl1bYS16XSsoW0EtWl1bYS16XSp8XFxkKSovLFxuICAgICAgLy8gQ1NTRmFjdG9yeSwgQ1NTRmFjdG9yeVRcbiAgICAgIC9cXGJbQS1aXXsyLH0oW0EtWl1bYS16XSt8XFxkKSsoW0EtWl1bYS16XSopKi8sXG4gICAgICAvLyBGUHMsIEZQc1RcbiAgICAgIC9cXGJbQS1aXXsyLH1bYS16XSsoW0EtWl1bYS16XSt8XFxkKSooW0EtWl1bYS16XSopKi8sXG4gICAgICAvLyBQXG4gICAgICAvLyBzaW5nbGUgbGV0dGVycyBhcmUgbm90IGhpZ2hsaWdodGVkXG4gICAgICAvLyBCTEFIXG4gICAgICAvLyB0aGlzIHdpbGwgYmUgZmxhZ2dlZCBhcyBhIFVQUEVSX0NBU0VfQ09OU1RBTlQgaW5zdGVhZFxuICAgICksXG4gICAgY2xhc3NOYW1lOiBcInRpdGxlLmNsYXNzXCIsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIF86IFtcbiAgICAgICAgLy8gc2Ugd2Ugc3RpbGwgZ2V0IHJlbGV2YW5jZSBjcmVkaXQgZm9yIEpTIGxpYnJhcnkgY2xhc3Nlc1xuICAgICAgICAuLi5UWVBFUyxcbiAgICAgICAgLi4uRVJST1JfVFlQRVNcbiAgICAgIF1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgVVNFX1NUUklDVCA9IHtcbiAgICBsYWJlbDogXCJ1c2Vfc3RyaWN0XCIsXG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgcmVsZXZhbmNlOiAxMCxcbiAgICBiZWdpbjogL15cXHMqWydcIl11c2UgKHN0cmljdHxhc20pWydcIl0vXG4gIH07XG5cbiAgY29uc3QgRlVOQ1RJT05fREVGSU5JVElPTiA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBtYXRjaDogW1xuICAgICAgICAgIC9mdW5jdGlvbi8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIElERU5UX1JFJDEsXG4gICAgICAgICAgLyg/PVxccypcXCgpL1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gYW5vbnltb3VzIGZ1bmN0aW9uXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL2Z1bmN0aW9uLyxcbiAgICAgICAgICAvXFxzKig/PVxcKCkvXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdLFxuICAgIGNsYXNzTmFtZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInRpdGxlLmZ1bmN0aW9uXCJcbiAgICB9LFxuICAgIGxhYmVsOiBcImZ1bmMuZGVmXCIsXG4gICAgY29udGFpbnM6IFsgUEFSQU1TIF0sXG4gICAgaWxsZWdhbDogLyUvXG4gIH07XG5cbiAgY29uc3QgVVBQRVJfQ0FTRV9DT05TVEFOVCA9IHtcbiAgICByZWxldmFuY2U6IDAsXG4gICAgbWF0Y2g6IC9cXGJbQS1aXVtBLVpfMC05XStcXGIvLFxuICAgIGNsYXNzTmFtZTogXCJ2YXJpYWJsZS5jb25zdGFudFwiXG4gIH07XG5cbiAgZnVuY3Rpb24gbm9uZU9mKGxpc3QpIHtcbiAgICByZXR1cm4gcmVnZXguY29uY2F0KFwiKD8hXCIsIGxpc3Quam9pbihcInxcIiksIFwiKVwiKTtcbiAgfVxuXG4gIGNvbnN0IEZVTkNUSU9OX0NBTEwgPSB7XG4gICAgbWF0Y2g6IHJlZ2V4LmNvbmNhdChcbiAgICAgIC9cXGIvLFxuICAgICAgbm9uZU9mKFtcbiAgICAgICAgLi4uQlVJTFRfSU5fR0xPQkFMUyxcbiAgICAgICAgXCJzdXBlclwiXG4gICAgICBdKSxcbiAgICAgIElERU5UX1JFJDEsIHJlZ2V4Lmxvb2thaGVhZCgvXFwoLykpLFxuICAgIGNsYXNzTmFtZTogXCJ0aXRsZS5mdW5jdGlvblwiLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IFBST1BFUlRZX0FDQ0VTUyA9IHtcbiAgICBiZWdpbjogcmVnZXguY29uY2F0KC9cXC4vLCByZWdleC5sb29rYWhlYWQoXG4gICAgICByZWdleC5jb25jYXQoSURFTlRfUkUkMSwgLyg/IVswLTlBLVphLXokXyhdKS8pXG4gICAgKSksXG4gICAgZW5kOiBJREVOVF9SRSQxLFxuICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICBrZXl3b3JkczogXCJwcm90b3R5cGVcIixcbiAgICBjbGFzc05hbWU6IFwicHJvcGVydHlcIixcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBHRVRURVJfT1JfU0VUVEVSID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvZ2V0fHNldC8sXG4gICAgICAvXFxzKy8sXG4gICAgICBJREVOVF9SRSQxLFxuICAgICAgLyg/PVxcKCkvXG4gICAgXSxcbiAgICBjbGFzc05hbWU6IHtcbiAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgMzogXCJ0aXRsZS5mdW5jdGlvblwiXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgeyAvLyBlYXQgdG8gYXZvaWQgZW1wdHkgcGFyYW1zXG4gICAgICAgIGJlZ2luOiAvXFwoXFwpL1xuICAgICAgfSxcbiAgICAgIFBBUkFNU1xuICAgIF1cbiAgfTtcblxuICBjb25zdCBGVU5DX0xFQURfSU5fUkUgPSAnKFxcXFwoJyArXG4gICAgJ1teKCldKihcXFxcKCcgK1xuICAgICdbXigpXSooXFxcXCgnICtcbiAgICAnW14oKV0qJyArXG4gICAgJ1xcXFwpW14oKV0qKSonICtcbiAgICAnXFxcXClbXigpXSopKicgK1xuICAgICdcXFxcKXwnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJylcXFxccyo9Pic7XG5cbiAgY29uc3QgRlVOQ1RJT05fVkFSSUFCTEUgPSB7XG4gICAgbWF0Y2g6IFtcbiAgICAgIC9jb25zdHx2YXJ8bGV0LywgL1xccysvLFxuICAgICAgSURFTlRfUkUkMSwgL1xccyovLFxuICAgICAgLz1cXHMqLyxcbiAgICAgIC8oYXN5bmNcXHMqKT8vLCAvLyBhc3luYyBpcyBvcHRpb25hbFxuICAgICAgcmVnZXgubG9va2FoZWFkKEZVTkNfTEVBRF9JTl9SRSlcbiAgICBdLFxuICAgIGtleXdvcmRzOiBcImFzeW5jXCIsXG4gICAgY2xhc3NOYW1lOiB7XG4gICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgIDM6IFwidGl0bGUuZnVuY3Rpb25cIlxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFBBUkFNU1xuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdKYXZhc2NyaXB0JyxcbiAgICBhbGlhc2VzOiBbJ2pzJywgJ2pzeCcsICdtanMnLCAnY2pzJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgLy8gdGhpcyB3aWxsIGJlIGV4dGVuZGVkIGJ5IFR5cGVTY3JpcHRcbiAgICBleHBvcnRzOiB7IFBBUkFNU19DT05UQUlOUywgQ0xBU1NfUkVGRVJFTkNFIH0sXG4gICAgaWxsZWdhbDogLyMoPyFbJF9BLXpdKS8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuU0hFQkFORyh7XG4gICAgICAgIGxhYmVsOiBcInNoZWJhbmdcIixcbiAgICAgICAgYmluYXJ5OiBcIm5vZGVcIixcbiAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICB9KSxcbiAgICAgIFVTRV9TVFJJQ1QsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgSFRNTF9URU1QTEFURSxcbiAgICAgIENTU19URU1QTEFURSxcbiAgICAgIFRFTVBMQVRFX1NUUklORyxcbiAgICAgIENPTU1FTlQsXG4gICAgICBOVU1CRVIsXG4gICAgICBDTEFTU19SRUZFUkVOQ0UsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICBiZWdpbjogSURFTlRfUkUkMSArIHJlZ2V4Lmxvb2thaGVhZCgnOicpLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBGVU5DVElPTl9WQVJJQUJMRSxcbiAgICAgIHsgLy8gXCJ2YWx1ZVwiIGNvbnRhaW5lclxuICAgICAgICBiZWdpbjogJygnICsgaGxqcy5SRV9TVEFSVEVSU19SRSArICd8XFxcXGIoY2FzZXxyZXR1cm58dGhyb3cpXFxcXGIpXFxcXHMqJyxcbiAgICAgICAga2V5d29yZHM6ICdyZXR1cm4gdGhyb3cgY2FzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBDT01NRU5ULFxuICAgICAgICAgIGhsanMuUkVHRVhQX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjb3VudCB0aGUgcGFyZW5zIHRvIG1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYXZlIHRoZVxuICAgICAgICAgICAgLy8gY29ycmVjdCBib3VuZGluZyAoICkgYmVmb3JlIHRoZSA9Pi4gIFRoZXJlIGNvdWxkIGJlIGFueSBudW1iZXIgb2ZcbiAgICAgICAgICAgIC8vIHN1Yi1leHByZXNzaW9ucyBpbnNpZGUgYWxzbyBzdXJyb3VuZGVkIGJ5IHBhcmVucy5cbiAgICAgICAgICAgIGJlZ2luOiBGVU5DX0xFQURfSU5fUkUsXG4gICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxzKj0+JyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcKFxccypcXCkvLFxuICAgICAgICAgICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBQQVJBTVNfQ09OVEFJTlNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLy8gY291bGQgYmUgYSBjb21tYSBkZWxpbWl0ZWQgbGlzdCBvZiBwYXJhbXMgdG8gYSBmdW5jdGlvbiBjYWxsXG4gICAgICAgICAgICBiZWdpbjogLywvLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYXRjaDogL1xccysvLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IC8vIEpTWFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgeyBiZWdpbjogRlJBR01FTlQuYmVnaW4sIGVuZDogRlJBR01FTlQuZW5kIH0sXG4gICAgICAgICAgICAgIHsgbWF0Y2g6IFhNTF9TRUxGX0NMT1NJTkcgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiBYTUxfVEFHLmJlZ2luLFxuICAgICAgICAgICAgICAgIC8vIHdlIGNhcmVmdWxseSBjaGVjayB0aGUgb3BlbmluZyB0YWcgdG8gc2VlIGlmIGl0IHRydWx5XG4gICAgICAgICAgICAgICAgLy8gaXMgYSB0YWcgYW5kIG5vdCBhIGZhbHNlIHBvc2l0aXZlXG4gICAgICAgICAgICAgICAgJ29uOmJlZ2luJzogWE1MX1RBRy5pc1RydWx5T3BlbmluZ1RhZyxcbiAgICAgICAgICAgICAgICBlbmQ6IFhNTF9UQUcuZW5kXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IFhNTF9UQUcuYmVnaW4sXG4gICAgICAgICAgICAgICAgZW5kOiBYTUxfVEFHLmVuZCxcbiAgICAgICAgICAgICAgICBza2lwOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIEZVTkNUSU9OX0RFRklOSVRJT04sXG4gICAgICB7XG4gICAgICAgIC8vIHByZXZlbnQgdGhpcyBmcm9tIGdldHRpbmcgc3dhbGxvd2VkIHVwIGJ5IGZ1bmN0aW9uXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYXBwZWFyIFwiZnVuY3Rpb24gbGlrZVwiXG4gICAgICAgIGJlZ2luS2V5d29yZHM6IFwid2hpbGUgaWYgc3dpdGNoIGNhdGNoIGZvclwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyB3ZSBoYXZlIHRvIGNvdW50IHRoZSBwYXJlbnMgdG8gbWFrZSBzdXJlIHdlIGFjdHVhbGx5IGhhdmUgdGhlIGNvcnJlY3RcbiAgICAgICAgLy8gYm91bmRpbmcgKCApLiAgVGhlcmUgY291bGQgYmUgYW55IG51bWJlciBvZiBzdWItZXhwcmVzc2lvbnMgaW5zaWRlXG4gICAgICAgIC8vIGFsc28gc3Vycm91bmRlZCBieSBwYXJlbnMuXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoPyFmdW5jdGlvbiknICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICtcbiAgICAgICAgICAnXFxcXCgnICsgLy8gZmlyc3QgcGFyZW5zXG4gICAgICAgICAgJ1teKCldKihcXFxcKCcgK1xuICAgICAgICAgICAgJ1teKCldKihcXFxcKCcgK1xuICAgICAgICAgICAgICAnW14oKV0qJyArXG4gICAgICAgICAgICAnXFxcXClbXigpXSopKicgK1xuICAgICAgICAgICdcXFxcKVteKCldKikqJyArXG4gICAgICAgICAgJ1xcXFwpXFxcXHMqXFxcXHsnLCAvLyBlbmQgcGFyZW5zXG4gICAgICAgIHJldHVybkJlZ2luOnRydWUsXG4gICAgICAgIGxhYmVsOiBcImZ1bmMuZGVmXCIsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgUEFSQU1TLFxuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHsgYmVnaW46IElERU5UX1JFJDEsIGNsYXNzTmFtZTogXCJ0aXRsZS5mdW5jdGlvblwiIH0pXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBjYXRjaCAuLi4gc28gaXQgd29uJ3QgdHJpZ2dlciB0aGUgcHJvcGVydHkgcnVsZSBiZWxvd1xuICAgICAge1xuICAgICAgICBtYXRjaDogL1xcLlxcLlxcLi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIFBST1BFUlRZX0FDQ0VTUyxcbiAgICAgIC8vIGhhY2s6IHByZXZlbnRzIGRldGVjdGlvbiBvZiBrZXl3b3JkcyBpbiBzb21lIGNpcmN1bXN0YW5jZXNcbiAgICAgIC8vIC5rZXl3b3JkKClcbiAgICAgIC8vICRrZXl3b3JkID0geFxuICAgICAge1xuICAgICAgICBtYXRjaDogJ1xcXFwkJyArIElERU5UX1JFJDEsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IFsgL1xcYmNvbnN0cnVjdG9yKD89XFxzKlxcKCkvIF0sXG4gICAgICAgIGNsYXNzTmFtZTogeyAxOiBcInRpdGxlLmZ1bmN0aW9uXCIgfSxcbiAgICAgICAgY29udGFpbnM6IFsgUEFSQU1TIF1cbiAgICAgIH0sXG4gICAgICBGVU5DVElPTl9DQUxMLFxuICAgICAgVVBQRVJfQ0FTRV9DT05TVEFOVCxcbiAgICAgIENMQVNTX09SX0VYVEVORFMsXG4gICAgICBHRVRURVJfT1JfU0VUVEVSLFxuICAgICAge1xuICAgICAgICBtYXRjaDogL1xcJFsoLl0vIC8vIHJlbGV2YW5jZSBib29zdGVyIGZvciBhIHBhdHRlcm4gY29tbW9uIHRvIEpTIGxpYnM6IGAkKHNvbWV0aGluZylgIGFuZCBgJC5zb21ldGhpbmdgXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGphdmFzY3JpcHQ7XG4iLCIvKlxuTGFuZ3VhZ2U6IEpTT05cbkRlc2NyaXB0aW9uOiBKU09OIChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbikgaXMgYSBsaWdodHdlaWdodCBkYXRhLWludGVyY2hhbmdlIGZvcm1hdC5cbkF1dGhvcjogSXZhbiBTYWdhbGFldiA8bWFuaWFjQHNvZnR3YXJlbWFuaWFjcy5vcmc+XG5XZWJzaXRlOiBodHRwOi8vd3d3Lmpzb24ub3JnXG5DYXRlZ29yeTogY29tbW9uLCBwcm90b2NvbHMsIHdlYlxuKi9cblxuZnVuY3Rpb24ganNvbihobGpzKSB7XG4gIGNvbnN0IEFUVFJJQlVURSA9IHtcbiAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICBiZWdpbjogL1wiKFxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIoPz1cXHMqOikvLFxuICAgIHJlbGV2YW5jZTogMS4wMVxuICB9O1xuICBjb25zdCBQVU5DVFVBVElPTiA9IHtcbiAgICBtYXRjaDogL1t7fVtcXF0sOl0vLFxuICAgIGNsYXNzTmFtZTogXCJwdW5jdHVhdGlvblwiLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBMSVRFUkFMUyA9IFtcbiAgICBcInRydWVcIixcbiAgICBcImZhbHNlXCIsXG4gICAgXCJudWxsXCJcbiAgXTtcbiAgLy8gTk9URTogbm9ybWFsbHkgd2Ugd291bGQgcmVseSBvbiBga2V5d29yZHNgIGZvciB0aGlzIGJ1dCB1c2luZyBhIG1vZGUgaGVyZSBhbGxvd3MgdXNcbiAgLy8gLSB0byB1c2UgdGhlIHZlcnkgdGlnaHQgYGlsbGVnYWw6IFxcU2AgcnVsZSBsYXRlciB0byBmbGFnIGFueSBvdGhlciBjaGFyYWN0ZXJcbiAgLy8gLSBhcyBpbGxlZ2FsIGluZGljYXRpbmcgdGhhdCBkZXNwaXRlIGxvb2tpbmcgbGlrZSBKU09OIHdlIGRvIG5vdCB0cnVseSBoYXZlXG4gIC8vIC0gSlNPTiBhbmQgdGh1cyBpbXByb3ZlIGZhbHNlLXBvc2l0aXZlbHkgZ3JlYXRseSBzaW5jZSBKU09OIHdpbGwgdHJ5IGFuZCBjbGFpbVxuICAvLyAtIGFsbCBzb3J0cyBvZiBKU09OIGxvb2tpbmcgc3R1ZmZcbiAgY29uc3QgTElURVJBTFNfTU9ERSA9IHtcbiAgICBzY29wZTogXCJsaXRlcmFsXCIsXG4gICAgYmVnaW5LZXl3b3JkczogTElURVJBTFMuam9pbihcIiBcIiksXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnSlNPTicsXG4gICAga2V5d29yZHM6e1xuICAgICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgQVRUUklCVVRFLFxuICAgICAgUFVOQ1RVQVRJT04sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgTElURVJBTFNfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICBdLFxuICAgIGlsbGVnYWw6ICdcXFxcUydcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBqc29uO1xuIiwiLy8gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlL3NwZWNzL2pscy9zZTE1L2h0bWwvamxzLTMuaHRtbCNqbHMtMy4xMFxudmFyIGRlY2ltYWxEaWdpdHMgPSAnWzAtOV0oXypbMC05XSkqJztcbnZhciBmcmFjID0gYFxcXFwuKCR7ZGVjaW1hbERpZ2l0c30pYDtcbnZhciBoZXhEaWdpdHMgPSAnWzAtOWEtZkEtRl0oXypbMC05YS1mQS1GXSkqJztcbnZhciBOVU1FUklDID0ge1xuICBjbGFzc05hbWU6ICdudW1iZXInLFxuICB2YXJpYW50czogW1xuICAgIC8vIERlY2ltYWxGbG9hdGluZ1BvaW50TGl0ZXJhbFxuICAgIC8vIGluY2x1ZGluZyBFeHBvbmVudFBhcnRcbiAgICB7IGJlZ2luOiBgKFxcXFxiKCR7ZGVjaW1hbERpZ2l0c30pKCgke2ZyYWN9KXxcXFxcLik/fCgke2ZyYWN9KSlgICtcbiAgICAgIGBbZUVdWystXT8oJHtkZWNpbWFsRGlnaXRzfSlbZkZkRF0/XFxcXGJgIH0sXG4gICAgLy8gZXhjbHVkaW5nIEV4cG9uZW50UGFydFxuICAgIHsgYmVnaW46IGBcXFxcYigke2RlY2ltYWxEaWdpdHN9KSgoJHtmcmFjfSlbZkZkRF0/XFxcXGJ8XFxcXC4oW2ZGZERdXFxcXGIpPylgIH0sXG4gICAgeyBiZWdpbjogYCgke2ZyYWN9KVtmRmREXT9cXFxcYmAgfSxcbiAgICB7IGJlZ2luOiBgXFxcXGIoJHtkZWNpbWFsRGlnaXRzfSlbZkZkRF1cXFxcYmAgfSxcblxuICAgIC8vIEhleGFkZWNpbWFsRmxvYXRpbmdQb2ludExpdGVyYWxcbiAgICB7IGJlZ2luOiBgXFxcXGIwW3hYXSgoJHtoZXhEaWdpdHN9KVxcXFwuP3woJHtoZXhEaWdpdHN9KT9cXFxcLigke2hleERpZ2l0c30pKWAgK1xuICAgICAgYFtwUF1bKy1dPygke2RlY2ltYWxEaWdpdHN9KVtmRmREXT9cXFxcYmAgfSxcblxuICAgIC8vIERlY2ltYWxJbnRlZ2VyTGl0ZXJhbFxuICAgIHsgYmVnaW46ICdcXFxcYigwfFsxLTldKF8qWzAtOV0pKilbbExdP1xcXFxiJyB9LFxuXG4gICAgLy8gSGV4SW50ZWdlckxpdGVyYWxcbiAgICB7IGJlZ2luOiBgXFxcXGIwW3hYXSgke2hleERpZ2l0c30pW2xMXT9cXFxcYmAgfSxcblxuICAgIC8vIE9jdGFsSW50ZWdlckxpdGVyYWxcbiAgICB7IGJlZ2luOiAnXFxcXGIwKF8qWzAtN10pKltsTF0/XFxcXGInIH0sXG5cbiAgICAvLyBCaW5hcnlJbnRlZ2VyTGl0ZXJhbFxuICAgIHsgYmVnaW46ICdcXFxcYjBbYkJdWzAxXShfKlswMV0pKltsTF0/XFxcXGInIH0sXG4gIF0sXG4gIHJlbGV2YW5jZTogMFxufTtcblxuLypcbiBMYW5ndWFnZTogS290bGluXG4gRGVzY3JpcHRpb246IEtvdGxpbiBpcyBhbiBPU1Mgc3RhdGljYWxseSB0eXBlZCBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0IHRhcmdldHMgdGhlIEpWTSwgQW5kcm9pZCwgSmF2YVNjcmlwdCBhbmQgTmF0aXZlLlxuIEF1dGhvcjogU2VyZ2V5IE1hc2hrb3YgPGN5NmVyR24wbUBnbWFpbC5jb20+XG4gV2Vic2l0ZTogaHR0cHM6Ly9rb3RsaW5sYW5nLm9yZ1xuIENhdGVnb3J5OiBjb21tb25cbiAqL1xuXG5mdW5jdGlvbiBrb3RsaW4oaGxqcykge1xuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2Fic3RyYWN0IGFzIHZhbCB2YXIgdmFyYXJnIGdldCBzZXQgY2xhc3Mgb2JqZWN0IG9wZW4gcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIG5vaW5saW5lICdcbiAgICAgICsgJ2Nyb3NzaW5saW5lIGR5bmFtaWMgZmluYWwgZW51bSBpZiBlbHNlIGRvIHdoaWxlIGZvciB3aGVuIHRocm93IHRyeSBjYXRjaCBmaW5hbGx5ICdcbiAgICAgICsgJ2ltcG9ydCBwYWNrYWdlIGlzIGluIGZ1biBvdmVycmlkZSBjb21wYW5pb24gcmVpZmllZCBpbmxpbmUgbGF0ZWluaXQgaW5pdCAnXG4gICAgICArICdpbnRlcmZhY2UgYW5ub3RhdGlvbiBkYXRhIHNlYWxlZCBpbnRlcm5hbCBpbmZpeCBvcGVyYXRvciBvdXQgYnkgY29uc3RydWN0b3Igc3VwZXIgJ1xuICAgICAgKyAndGFpbHJlYyB3aGVyZSBjb25zdCBpbm5lciBzdXNwZW5kIHR5cGVhbGlhcyBleHRlcm5hbCBleHBlY3QgYWN0dWFsJyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdCeXRlIFNob3J0IENoYXIgSW50IExvbmcgQm9vbGVhbiBGbG9hdCBEb3VibGUgVm9pZCBVbml0IE5vdGhpbmcnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBudWxsJ1xuICB9O1xuICBjb25zdCBLRVlXT1JEU19XSVRIX0xBQkVMID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAvXFxiKGJyZWFrfGNvbnRpbnVlfHJldHVybnx0aGlzKVxcYi8sXG4gICAgc3RhcnRzOiB7IGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAvQFxcdysvXG4gICAgICB9XG4gICAgXSB9XG4gIH07XG4gIGNvbnN0IExBQkVMID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdAJ1xuICB9O1xuXG4gIC8vIGZvciBzdHJpbmcgdGVtcGxhdGVzXG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcJFxcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBjb250YWluczogWyBobGpzLkNfTlVNQkVSX01PREUgXVxuICB9O1xuICBjb25zdCBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46ICdcXFxcJCcgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkVcbiAgfTtcbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIlwiXCInLFxuICAgICAgICBlbmQ6ICdcIlwiXCIoPz1bXlwiXSknLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIFNVQlNUXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBDYW4ndCB1c2UgYnVpbHQtaW4gbW9kZXMgZWFzaWx5LCBhcyB3ZSB3YW50IHRvIHVzZSBTVFJJTkcgaW4gdGhlIG1ldGFcbiAgICAgIC8vIGNvbnRleHQgYXMgJ21ldGEtc3RyaW5nJyBhbmQgdGhlcmUncyBubyBzeW50YXggdG8gcmVtb3ZlIGV4cGxpY2l0bHkgc2V0XG4gICAgICAvLyBjbGFzc05hbWVzIGluIGJ1aWx0LWluIG1vZGVzLlxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIFNVQlNUXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zLnB1c2goU1RSSU5HKTtcblxuICBjb25zdCBBTk5PVEFUSU9OX1VTRV9TSVRFID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnQCg/OmZpbGV8cHJvcGVydHl8ZmllbGR8Z2V0fHNldHxyZWNlaXZlcnxwYXJhbXxzZXRwYXJhbXxkZWxlZ2F0ZSlcXFxccyo6KD86XFxcXHMqJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcpPydcbiAgfTtcbiAgY29uc3QgQU5OT1RBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0AnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoU1RSSU5HLCB7IGNsYXNzTmFtZTogJ3N0cmluZycgfSksXG4gICAgICAgICAgXCJzZWxmXCJcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICAvLyBodHRwczovL2tvdGxpbmxhbmcub3JnL2RvY3MvcmVmZXJlbmNlL3doYXRzbmV3MTEuaHRtbCN1bmRlcnNjb3Jlcy1pbi1udW1lcmljLWxpdGVyYWxzXG4gIC8vIEFjY29yZGluZyB0byB0aGUgZG9jIGFib3ZlLCB0aGUgbnVtYmVyIG1vZGUgb2Yga290bGluIGlzIHRoZSBzYW1lIGFzIGphdmEgOCxcbiAgLy8gc28gdGhlIGNvZGUgYmVsb3cgaXMgY29waWVkIGZyb20gamF2YS5qc1xuICBjb25zdCBLT1RMSU5fTlVNQkVSX01PREUgPSBOVU1FUklDO1xuICBjb25zdCBLT1RMSU5fTkVTVEVEX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJy9cXFxcKicsICdcXFxcKi8nLFxuICAgIHsgY29udGFpbnM6IFsgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSBdIH1cbiAgKTtcbiAgY29uc3QgS09UTElOX1BBUkVOX1RZUEUgPSB7IHZhcmlhbnRzOiBbXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogL1xcKC8sXG4gICAgICBlbmQ6IC9cXCkvLFxuICAgICAgY29udGFpbnM6IFtdIC8vIGRlZmluZWQgbGF0ZXJcbiAgICB9XG4gIF0gfTtcbiAgY29uc3QgS09UTElOX1BBUkVOX1RZUEUyID0gS09UTElOX1BBUkVOX1RZUEU7XG4gIEtPVExJTl9QQVJFTl9UWVBFMi52YXJpYW50c1sxXS5jb250YWlucyA9IFsgS09UTElOX1BBUkVOX1RZUEUgXTtcbiAgS09UTElOX1BBUkVOX1RZUEUudmFyaWFudHNbMV0uY29udGFpbnMgPSBbIEtPVExJTl9QQVJFTl9UWVBFMiBdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0tvdGxpbicsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ2t0JyxcbiAgICAgICdrdHMnXG4gICAgXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJy9cXFxcKlxcXFwqJyxcbiAgICAgICAgJ1xcXFwqLycsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIEtPVExJTl9ORVNURURfQ09NTUVOVCxcbiAgICAgIEtFWVdPUkRTX1dJVEhfTEFCRUwsXG4gICAgICBMQUJFTCxcbiAgICAgIEFOTk9UQVRJT05fVVNFX1NJVEUsXG4gICAgICBBTk5PVEFUSU9OLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW4nLFxuICAgICAgICBlbmQ6ICdbKF18JCcsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIHJlbGV2YW5jZTogNSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzKlxcXFwoJyxcbiAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFsgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICBiZWdpbjogLzwvLFxuICAgICAgICAgICAgZW5kOiAvPi8sXG4gICAgICAgICAgICBrZXl3b3JkczogJ3JlaWZpZWQnLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IC86LyxcbiAgICAgICAgICAgICAgICBlbmQ6IC9bPSxcXC9dLyxcbiAgICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgICAgS09UTElOX1BBUkVOX1RZUEUsXG4gICAgICAgICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgICAgICBLT1RMSU5fTkVTVEVEX0NPTU1FTlRcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIEtPVExJTl9ORVNURURfQ09NTUVOVCxcbiAgICAgICAgICAgICAgQU5OT1RBVElPTl9VU0VfU0lURSxcbiAgICAgICAgICAgICAgQU5OT1RBVElPTixcbiAgICAgICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIEtPVExJTl9ORVNURURfQ09NTUVOVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogW1xuICAgICAgICAgIC9jbGFzc3xpbnRlcmZhY2V8dHJhaXQvLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfSURFTlRfUkVcbiAgICAgICAgXSxcbiAgICAgICAgYmVnaW5TY29wZToge1xuICAgICAgICAgIDM6IFwidGl0bGUuY2xhc3NcIlxuICAgICAgICB9LFxuICAgICAgICBrZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZSB0cmFpdCcsXG4gICAgICAgIGVuZDogL1s6XFx7KF18JC8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICdleHRlbmRzIGltcGxlbWVudHMnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgYmVnaW5LZXl3b3JkczogJ3B1YmxpYyBwcm90ZWN0ZWQgaW50ZXJuYWwgcHJpdmF0ZSBjb25zdHJ1Y3RvcicgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgIGJlZ2luOiAvPC8sXG4gICAgICAgICAgICBlbmQ6IC8+LyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46IC9bLDpdXFxzKi8sXG4gICAgICAgICAgICBlbmQ6IC9bPFxcKCwpe1xcc118JC8sXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICByZXR1cm5FbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIEFOTk9UQVRJT05fVVNFX1NJVEUsXG4gICAgICAgICAgQU5OT1RBVElPTlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgU1RSSU5HLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IFwiXiMhL3Vzci9iaW4vZW52XCIsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxuJ1xuICAgICAgfSxcbiAgICAgIEtPVExJTl9OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrb3RsaW47XG4iLCJjb25zdCBNT0RFUyA9IChobGpzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgSU1QT1JUQU5UOiB7XG4gICAgICBzY29wZTogJ21ldGEnLFxuICAgICAgYmVnaW46ICchaW1wb3J0YW50J1xuICAgIH0sXG4gICAgQkxPQ0tfQ09NTUVOVDogaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBIRVhDT0xPUjoge1xuICAgICAgc2NvcGU6ICdudW1iZXInLFxuICAgICAgYmVnaW46IC8jKChbMC05YS1mQS1GXXszLDR9KXwoKFswLTlhLWZBLUZdezJ9KXszLDR9KSlcXGIvXG4gICAgfSxcbiAgICBGVU5DVElPTl9ESVNQQVRDSDoge1xuICAgICAgY2xhc3NOYW1lOiBcImJ1aWx0X2luXCIsXG4gICAgICBiZWdpbjogL1tcXHctXSsoPz1cXCgpL1xuICAgIH0sXG4gICAgQVRUUklCVVRFX1NFTEVDVE9SX01PREU6IHtcbiAgICAgIHNjb3BlOiAnc2VsZWN0b3ItYXR0cicsXG4gICAgICBiZWdpbjogL1xcWy8sXG4gICAgICBlbmQ6IC9cXF0vLFxuICAgICAgaWxsZWdhbDogJyQnLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICBdXG4gICAgfSxcbiAgICBDU1NfTlVNQkVSX01PREU6IHtcbiAgICAgIHNjb3BlOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRSArICcoJyArXG4gICAgICAgICclfGVtfGV4fGNofHJlbScgK1xuICAgICAgICAnfHZ3fHZofHZtaW58dm1heCcgK1xuICAgICAgICAnfGNtfG1tfGlufHB0fHBjfHB4JyArXG4gICAgICAgICd8ZGVnfGdyYWR8cmFkfHR1cm4nICtcbiAgICAgICAgJ3xzfG1zJyArXG4gICAgICAgICd8SHp8a0h6JyArXG4gICAgICAgICd8ZHBpfGRwY218ZHBweCcgK1xuICAgICAgICAnKT8nLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICBDU1NfVkFSSUFCTEU6IHtcbiAgICAgIGNsYXNzTmFtZTogXCJhdHRyXCIsXG4gICAgICBiZWdpbjogLy0tW0EtWmEtel1bQS1aYS16MC05Xy1dKi9cbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBUQUdTID0gW1xuICAnYScsXG4gICdhYmJyJyxcbiAgJ2FkZHJlc3MnLFxuICAnYXJ0aWNsZScsXG4gICdhc2lkZScsXG4gICdhdWRpbycsXG4gICdiJyxcbiAgJ2Jsb2NrcXVvdGUnLFxuICAnYm9keScsXG4gICdidXR0b24nLFxuICAnY2FudmFzJyxcbiAgJ2NhcHRpb24nLFxuICAnY2l0ZScsXG4gICdjb2RlJyxcbiAgJ2RkJyxcbiAgJ2RlbCcsXG4gICdkZXRhaWxzJyxcbiAgJ2RmbicsXG4gICdkaXYnLFxuICAnZGwnLFxuICAnZHQnLFxuICAnZW0nLFxuICAnZmllbGRzZXQnLFxuICAnZmlnY2FwdGlvbicsXG4gICdmaWd1cmUnLFxuICAnZm9vdGVyJyxcbiAgJ2Zvcm0nLFxuICAnaDEnLFxuICAnaDInLFxuICAnaDMnLFxuICAnaDQnLFxuICAnaDUnLFxuICAnaDYnLFxuICAnaGVhZGVyJyxcbiAgJ2hncm91cCcsXG4gICdodG1sJyxcbiAgJ2knLFxuICAnaWZyYW1lJyxcbiAgJ2ltZycsXG4gICdpbnB1dCcsXG4gICdpbnMnLFxuICAna2JkJyxcbiAgJ2xhYmVsJyxcbiAgJ2xlZ2VuZCcsXG4gICdsaScsXG4gICdtYWluJyxcbiAgJ21hcmsnLFxuICAnbWVudScsXG4gICduYXYnLFxuICAnb2JqZWN0JyxcbiAgJ29sJyxcbiAgJ3AnLFxuICAncScsXG4gICdxdW90ZScsXG4gICdzYW1wJyxcbiAgJ3NlY3Rpb24nLFxuICAnc3BhbicsXG4gICdzdHJvbmcnLFxuICAnc3VtbWFyeScsXG4gICdzdXAnLFxuICAndGFibGUnLFxuICAndGJvZHknLFxuICAndGQnLFxuICAndGV4dGFyZWEnLFxuICAndGZvb3QnLFxuICAndGgnLFxuICAndGhlYWQnLFxuICAndGltZScsXG4gICd0cicsXG4gICd1bCcsXG4gICd2YXInLFxuICAndmlkZW8nXG5dO1xuXG5jb25zdCBNRURJQV9GRUFUVVJFUyA9IFtcbiAgJ2FueS1ob3ZlcicsXG4gICdhbnktcG9pbnRlcicsXG4gICdhc3BlY3QtcmF0aW8nLFxuICAnY29sb3InLFxuICAnY29sb3ItZ2FtdXQnLFxuICAnY29sb3ItaW5kZXgnLFxuICAnZGV2aWNlLWFzcGVjdC1yYXRpbycsXG4gICdkZXZpY2UtaGVpZ2h0JyxcbiAgJ2RldmljZS13aWR0aCcsXG4gICdkaXNwbGF5LW1vZGUnLFxuICAnZm9yY2VkLWNvbG9ycycsXG4gICdncmlkJyxcbiAgJ2hlaWdodCcsXG4gICdob3ZlcicsXG4gICdpbnZlcnRlZC1jb2xvcnMnLFxuICAnbW9ub2Nocm9tZScsXG4gICdvcmllbnRhdGlvbicsXG4gICdvdmVyZmxvdy1ibG9jaycsXG4gICdvdmVyZmxvdy1pbmxpbmUnLFxuICAncG9pbnRlcicsXG4gICdwcmVmZXJzLWNvbG9yLXNjaGVtZScsXG4gICdwcmVmZXJzLWNvbnRyYXN0JyxcbiAgJ3ByZWZlcnMtcmVkdWNlZC1tb3Rpb24nLFxuICAncHJlZmVycy1yZWR1Y2VkLXRyYW5zcGFyZW5jeScsXG4gICdyZXNvbHV0aW9uJyxcbiAgJ3NjYW4nLFxuICAnc2NyaXB0aW5nJyxcbiAgJ3VwZGF0ZScsXG4gICd3aWR0aCcsXG4gIC8vIFRPRE86IGZpbmQgYSBiZXR0ZXIgc29sdXRpb24/XG4gICdtaW4td2lkdGgnLFxuICAnbWF4LXdpZHRoJyxcbiAgJ21pbi1oZWlnaHQnLFxuICAnbWF4LWhlaWdodCdcbl07XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Qc2V1ZG8tY2xhc3Nlc1xuY29uc3QgUFNFVURPX0NMQVNTRVMgPSBbXG4gICdhY3RpdmUnLFxuICAnYW55LWxpbmsnLFxuICAnYmxhbmsnLFxuICAnY2hlY2tlZCcsXG4gICdjdXJyZW50JyxcbiAgJ2RlZmF1bHQnLFxuICAnZGVmaW5lZCcsXG4gICdkaXInLCAvLyBkaXIoKVxuICAnZGlzYWJsZWQnLFxuICAnZHJvcCcsXG4gICdlbXB0eScsXG4gICdlbmFibGVkJyxcbiAgJ2ZpcnN0JyxcbiAgJ2ZpcnN0LWNoaWxkJyxcbiAgJ2ZpcnN0LW9mLXR5cGUnLFxuICAnZnVsbHNjcmVlbicsXG4gICdmdXR1cmUnLFxuICAnZm9jdXMnLFxuICAnZm9jdXMtdmlzaWJsZScsXG4gICdmb2N1cy13aXRoaW4nLFxuICAnaGFzJywgLy8gaGFzKClcbiAgJ2hvc3QnLCAvLyBob3N0IG9yIGhvc3QoKVxuICAnaG9zdC1jb250ZXh0JywgLy8gaG9zdC1jb250ZXh0KClcbiAgJ2hvdmVyJyxcbiAgJ2luZGV0ZXJtaW5hdGUnLFxuICAnaW4tcmFuZ2UnLFxuICAnaW52YWxpZCcsXG4gICdpcycsIC8vIGlzKClcbiAgJ2xhbmcnLCAvLyBsYW5nKClcbiAgJ2xhc3QtY2hpbGQnLFxuICAnbGFzdC1vZi10eXBlJyxcbiAgJ2xlZnQnLFxuICAnbGluaycsXG4gICdsb2NhbC1saW5rJyxcbiAgJ25vdCcsIC8vIG5vdCgpXG4gICdudGgtY2hpbGQnLCAvLyBudGgtY2hpbGQoKVxuICAnbnRoLWNvbCcsIC8vIG50aC1jb2woKVxuICAnbnRoLWxhc3QtY2hpbGQnLCAvLyBudGgtbGFzdC1jaGlsZCgpXG4gICdudGgtbGFzdC1jb2wnLCAvLyBudGgtbGFzdC1jb2woKVxuICAnbnRoLWxhc3Qtb2YtdHlwZScsIC8vbnRoLWxhc3Qtb2YtdHlwZSgpXG4gICdudGgtb2YtdHlwZScsIC8vbnRoLW9mLXR5cGUoKVxuICAnb25seS1jaGlsZCcsXG4gICdvbmx5LW9mLXR5cGUnLFxuICAnb3B0aW9uYWwnLFxuICAnb3V0LW9mLXJhbmdlJyxcbiAgJ3Bhc3QnLFxuICAncGxhY2Vob2xkZXItc2hvd24nLFxuICAncmVhZC1vbmx5JyxcbiAgJ3JlYWQtd3JpdGUnLFxuICAncmVxdWlyZWQnLFxuICAncmlnaHQnLFxuICAncm9vdCcsXG4gICdzY29wZScsXG4gICd0YXJnZXQnLFxuICAndGFyZ2V0LXdpdGhpbicsXG4gICd1c2VyLWludmFsaWQnLFxuICAndmFsaWQnLFxuICAndmlzaXRlZCcsXG4gICd3aGVyZScgLy8gd2hlcmUoKVxuXTtcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL1BzZXVkby1lbGVtZW50c1xuY29uc3QgUFNFVURPX0VMRU1FTlRTID0gW1xuICAnYWZ0ZXInLFxuICAnYmFja2Ryb3AnLFxuICAnYmVmb3JlJyxcbiAgJ2N1ZScsXG4gICdjdWUtcmVnaW9uJyxcbiAgJ2ZpcnN0LWxldHRlcicsXG4gICdmaXJzdC1saW5lJyxcbiAgJ2dyYW1tYXItZXJyb3InLFxuICAnbWFya2VyJyxcbiAgJ3BhcnQnLFxuICAncGxhY2Vob2xkZXInLFxuICAnc2VsZWN0aW9uJyxcbiAgJ3Nsb3R0ZWQnLFxuICAnc3BlbGxpbmctZXJyb3InXG5dO1xuXG5jb25zdCBBVFRSSUJVVEVTID0gW1xuICAnYWxpZ24tY29udGVudCcsXG4gICdhbGlnbi1pdGVtcycsXG4gICdhbGlnbi1zZWxmJyxcbiAgJ2FsbCcsXG4gICdhbmltYXRpb24nLFxuICAnYW5pbWF0aW9uLWRlbGF5JyxcbiAgJ2FuaW1hdGlvbi1kaXJlY3Rpb24nLFxuICAnYW5pbWF0aW9uLWR1cmF0aW9uJyxcbiAgJ2FuaW1hdGlvbi1maWxsLW1vZGUnLFxuICAnYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCcsXG4gICdhbmltYXRpb24tbmFtZScsXG4gICdhbmltYXRpb24tcGxheS1zdGF0ZScsXG4gICdhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uJyxcbiAgJ2JhY2tmYWNlLXZpc2liaWxpdHknLFxuICAnYmFja2dyb3VuZCcsXG4gICdiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnLFxuICAnYmFja2dyb3VuZC1ibGVuZC1tb2RlJyxcbiAgJ2JhY2tncm91bmQtY2xpcCcsXG4gICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgJ2JhY2tncm91bmQtaW1hZ2UnLFxuICAnYmFja2dyb3VuZC1vcmlnaW4nLFxuICAnYmFja2dyb3VuZC1wb3NpdGlvbicsXG4gICdiYWNrZ3JvdW5kLXJlcGVhdCcsXG4gICdiYWNrZ3JvdW5kLXNpemUnLFxuICAnYmxvY2stc2l6ZScsXG4gICdib3JkZXInLFxuICAnYm9yZGVyLWJsb2NrJyxcbiAgJ2JvcmRlci1ibG9jay1jb2xvcicsXG4gICdib3JkZXItYmxvY2stZW5kJyxcbiAgJ2JvcmRlci1ibG9jay1lbmQtY29sb3InLFxuICAnYm9yZGVyLWJsb2NrLWVuZC1zdHlsZScsXG4gICdib3JkZXItYmxvY2stZW5kLXdpZHRoJyxcbiAgJ2JvcmRlci1ibG9jay1zdGFydCcsXG4gICdib3JkZXItYmxvY2stc3RhcnQtY29sb3InLFxuICAnYm9yZGVyLWJsb2NrLXN0YXJ0LXN0eWxlJyxcbiAgJ2JvcmRlci1ibG9jay1zdGFydC13aWR0aCcsXG4gICdib3JkZXItYmxvY2stc3R5bGUnLFxuICAnYm9yZGVyLWJsb2NrLXdpZHRoJyxcbiAgJ2JvcmRlci1ib3R0b20nLFxuICAnYm9yZGVyLWJvdHRvbS1jb2xvcicsXG4gICdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJyxcbiAgJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJyxcbiAgJ2JvcmRlci1ib3R0b20tc3R5bGUnLFxuICAnYm9yZGVyLWJvdHRvbS13aWR0aCcsXG4gICdib3JkZXItY29sbGFwc2UnLFxuICAnYm9yZGVyLWNvbG9yJyxcbiAgJ2JvcmRlci1pbWFnZScsXG4gICdib3JkZXItaW1hZ2Utb3V0c2V0JyxcbiAgJ2JvcmRlci1pbWFnZS1yZXBlYXQnLFxuICAnYm9yZGVyLWltYWdlLXNsaWNlJyxcbiAgJ2JvcmRlci1pbWFnZS1zb3VyY2UnLFxuICAnYm9yZGVyLWltYWdlLXdpZHRoJyxcbiAgJ2JvcmRlci1pbmxpbmUnLFxuICAnYm9yZGVyLWlubGluZS1jb2xvcicsXG4gICdib3JkZXItaW5saW5lLWVuZCcsXG4gICdib3JkZXItaW5saW5lLWVuZC1jb2xvcicsXG4gICdib3JkZXItaW5saW5lLWVuZC1zdHlsZScsXG4gICdib3JkZXItaW5saW5lLWVuZC13aWR0aCcsXG4gICdib3JkZXItaW5saW5lLXN0YXJ0JyxcbiAgJ2JvcmRlci1pbmxpbmUtc3RhcnQtY29sb3InLFxuICAnYm9yZGVyLWlubGluZS1zdGFydC1zdHlsZScsXG4gICdib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoJyxcbiAgJ2JvcmRlci1pbmxpbmUtc3R5bGUnLFxuICAnYm9yZGVyLWlubGluZS13aWR0aCcsXG4gICdib3JkZXItbGVmdCcsXG4gICdib3JkZXItbGVmdC1jb2xvcicsXG4gICdib3JkZXItbGVmdC1zdHlsZScsXG4gICdib3JkZXItbGVmdC13aWR0aCcsXG4gICdib3JkZXItcmFkaXVzJyxcbiAgJ2JvcmRlci1yaWdodCcsXG4gICdib3JkZXItcmlnaHQtY29sb3InLFxuICAnYm9yZGVyLXJpZ2h0LXN0eWxlJyxcbiAgJ2JvcmRlci1yaWdodC13aWR0aCcsXG4gICdib3JkZXItc3BhY2luZycsXG4gICdib3JkZXItc3R5bGUnLFxuICAnYm9yZGVyLXRvcCcsXG4gICdib3JkZXItdG9wLWNvbG9yJyxcbiAgJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnLFxuICAnYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnLFxuICAnYm9yZGVyLXRvcC1zdHlsZScsXG4gICdib3JkZXItdG9wLXdpZHRoJyxcbiAgJ2JvcmRlci13aWR0aCcsXG4gICdib3R0b20nLFxuICAnYm94LWRlY29yYXRpb24tYnJlYWsnLFxuICAnYm94LXNoYWRvdycsXG4gICdib3gtc2l6aW5nJyxcbiAgJ2JyZWFrLWFmdGVyJyxcbiAgJ2JyZWFrLWJlZm9yZScsXG4gICdicmVhay1pbnNpZGUnLFxuICAnY2FwdGlvbi1zaWRlJyxcbiAgJ2NhcmV0LWNvbG9yJyxcbiAgJ2NsZWFyJyxcbiAgJ2NsaXAnLFxuICAnY2xpcC1wYXRoJyxcbiAgJ2NsaXAtcnVsZScsXG4gICdjb2xvcicsXG4gICdjb2x1bW4tY291bnQnLFxuICAnY29sdW1uLWZpbGwnLFxuICAnY29sdW1uLWdhcCcsXG4gICdjb2x1bW4tcnVsZScsXG4gICdjb2x1bW4tcnVsZS1jb2xvcicsXG4gICdjb2x1bW4tcnVsZS1zdHlsZScsXG4gICdjb2x1bW4tcnVsZS13aWR0aCcsXG4gICdjb2x1bW4tc3BhbicsXG4gICdjb2x1bW4td2lkdGgnLFxuICAnY29sdW1ucycsXG4gICdjb250YWluJyxcbiAgJ2NvbnRlbnQnLFxuICAnY29udGVudC12aXNpYmlsaXR5JyxcbiAgJ2NvdW50ZXItaW5jcmVtZW50JyxcbiAgJ2NvdW50ZXItcmVzZXQnLFxuICAnY3VlJyxcbiAgJ2N1ZS1hZnRlcicsXG4gICdjdWUtYmVmb3JlJyxcbiAgJ2N1cnNvcicsXG4gICdkaXJlY3Rpb24nLFxuICAnZGlzcGxheScsXG4gICdlbXB0eS1jZWxscycsXG4gICdmaWx0ZXInLFxuICAnZmxleCcsXG4gICdmbGV4LWJhc2lzJyxcbiAgJ2ZsZXgtZGlyZWN0aW9uJyxcbiAgJ2ZsZXgtZmxvdycsXG4gICdmbGV4LWdyb3cnLFxuICAnZmxleC1zaHJpbmsnLFxuICAnZmxleC13cmFwJyxcbiAgJ2Zsb2F0JyxcbiAgJ2Zsb3cnLFxuICAnZm9udCcsXG4gICdmb250LWRpc3BsYXknLFxuICAnZm9udC1mYW1pbHknLFxuICAnZm9udC1mZWF0dXJlLXNldHRpbmdzJyxcbiAgJ2ZvbnQta2VybmluZycsXG4gICdmb250LWxhbmd1YWdlLW92ZXJyaWRlJyxcbiAgJ2ZvbnQtc2l6ZScsXG4gICdmb250LXNpemUtYWRqdXN0JyxcbiAgJ2ZvbnQtc21vb3RoaW5nJyxcbiAgJ2ZvbnQtc3RyZXRjaCcsXG4gICdmb250LXN0eWxlJyxcbiAgJ2ZvbnQtc3ludGhlc2lzJyxcbiAgJ2ZvbnQtdmFyaWFudCcsXG4gICdmb250LXZhcmlhbnQtY2FwcycsXG4gICdmb250LXZhcmlhbnQtZWFzdC1hc2lhbicsXG4gICdmb250LXZhcmlhbnQtbGlnYXR1cmVzJyxcbiAgJ2ZvbnQtdmFyaWFudC1udW1lcmljJyxcbiAgJ2ZvbnQtdmFyaWFudC1wb3NpdGlvbicsXG4gICdmb250LXZhcmlhdGlvbi1zZXR0aW5ncycsXG4gICdmb250LXdlaWdodCcsXG4gICdnYXAnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnLFxuICAnZ3JpZCcsXG4gICdncmlkLWFyZWEnLFxuICAnZ3JpZC1hdXRvLWNvbHVtbnMnLFxuICAnZ3JpZC1hdXRvLWZsb3cnLFxuICAnZ3JpZC1hdXRvLXJvd3MnLFxuICAnZ3JpZC1jb2x1bW4nLFxuICAnZ3JpZC1jb2x1bW4tZW5kJyxcbiAgJ2dyaWQtY29sdW1uLXN0YXJ0JyxcbiAgJ2dyaWQtZ2FwJyxcbiAgJ2dyaWQtcm93JyxcbiAgJ2dyaWQtcm93LWVuZCcsXG4gICdncmlkLXJvdy1zdGFydCcsXG4gICdncmlkLXRlbXBsYXRlJyxcbiAgJ2dyaWQtdGVtcGxhdGUtYXJlYXMnLFxuICAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJyxcbiAgJ2dyaWQtdGVtcGxhdGUtcm93cycsXG4gICdoYW5naW5nLXB1bmN0dWF0aW9uJyxcbiAgJ2hlaWdodCcsXG4gICdoeXBoZW5zJyxcbiAgJ2ljb24nLFxuICAnaW1hZ2Utb3JpZW50YXRpb24nLFxuICAnaW1hZ2UtcmVuZGVyaW5nJyxcbiAgJ2ltYWdlLXJlc29sdXRpb24nLFxuICAnaW1lLW1vZGUnLFxuICAnaW5saW5lLXNpemUnLFxuICAnaXNvbGF0aW9uJyxcbiAgJ2p1c3RpZnktY29udGVudCcsXG4gICdsZWZ0JyxcbiAgJ2xldHRlci1zcGFjaW5nJyxcbiAgJ2xpbmUtYnJlYWsnLFxuICAnbGluZS1oZWlnaHQnLFxuICAnbGlzdC1zdHlsZScsXG4gICdsaXN0LXN0eWxlLWltYWdlJyxcbiAgJ2xpc3Qtc3R5bGUtcG9zaXRpb24nLFxuICAnbGlzdC1zdHlsZS10eXBlJyxcbiAgJ21hcmdpbicsXG4gICdtYXJnaW4tYmxvY2snLFxuICAnbWFyZ2luLWJsb2NrLWVuZCcsXG4gICdtYXJnaW4tYmxvY2stc3RhcnQnLFxuICAnbWFyZ2luLWJvdHRvbScsXG4gICdtYXJnaW4taW5saW5lJyxcbiAgJ21hcmdpbi1pbmxpbmUtZW5kJyxcbiAgJ21hcmdpbi1pbmxpbmUtc3RhcnQnLFxuICAnbWFyZ2luLWxlZnQnLFxuICAnbWFyZ2luLXJpZ2h0JyxcbiAgJ21hcmdpbi10b3AnLFxuICAnbWFya3MnLFxuICAnbWFzaycsXG4gICdtYXNrLWJvcmRlcicsXG4gICdtYXNrLWJvcmRlci1tb2RlJyxcbiAgJ21hc2stYm9yZGVyLW91dHNldCcsXG4gICdtYXNrLWJvcmRlci1yZXBlYXQnLFxuICAnbWFzay1ib3JkZXItc2xpY2UnLFxuICAnbWFzay1ib3JkZXItc291cmNlJyxcbiAgJ21hc2stYm9yZGVyLXdpZHRoJyxcbiAgJ21hc2stY2xpcCcsXG4gICdtYXNrLWNvbXBvc2l0ZScsXG4gICdtYXNrLWltYWdlJyxcbiAgJ21hc2stbW9kZScsXG4gICdtYXNrLW9yaWdpbicsXG4gICdtYXNrLXBvc2l0aW9uJyxcbiAgJ21hc2stcmVwZWF0JyxcbiAgJ21hc2stc2l6ZScsXG4gICdtYXNrLXR5cGUnLFxuICAnbWF4LWJsb2NrLXNpemUnLFxuICAnbWF4LWhlaWdodCcsXG4gICdtYXgtaW5saW5lLXNpemUnLFxuICAnbWF4LXdpZHRoJyxcbiAgJ21pbi1ibG9jay1zaXplJyxcbiAgJ21pbi1oZWlnaHQnLFxuICAnbWluLWlubGluZS1zaXplJyxcbiAgJ21pbi13aWR0aCcsXG4gICdtaXgtYmxlbmQtbW9kZScsXG4gICduYXYtZG93bicsXG4gICduYXYtaW5kZXgnLFxuICAnbmF2LWxlZnQnLFxuICAnbmF2LXJpZ2h0JyxcbiAgJ25hdi11cCcsXG4gICdub25lJyxcbiAgJ25vcm1hbCcsXG4gICdvYmplY3QtZml0JyxcbiAgJ29iamVjdC1wb3NpdGlvbicsXG4gICdvcGFjaXR5JyxcbiAgJ29yZGVyJyxcbiAgJ29ycGhhbnMnLFxuICAnb3V0bGluZScsXG4gICdvdXRsaW5lLWNvbG9yJyxcbiAgJ291dGxpbmUtb2Zmc2V0JyxcbiAgJ291dGxpbmUtc3R5bGUnLFxuICAnb3V0bGluZS13aWR0aCcsXG4gICdvdmVyZmxvdycsXG4gICdvdmVyZmxvdy13cmFwJyxcbiAgJ292ZXJmbG93LXgnLFxuICAnb3ZlcmZsb3cteScsXG4gICdwYWRkaW5nJyxcbiAgJ3BhZGRpbmctYmxvY2snLFxuICAncGFkZGluZy1ibG9jay1lbmQnLFxuICAncGFkZGluZy1ibG9jay1zdGFydCcsXG4gICdwYWRkaW5nLWJvdHRvbScsXG4gICdwYWRkaW5nLWlubGluZScsXG4gICdwYWRkaW5nLWlubGluZS1lbmQnLFxuICAncGFkZGluZy1pbmxpbmUtc3RhcnQnLFxuICAncGFkZGluZy1sZWZ0JyxcbiAgJ3BhZGRpbmctcmlnaHQnLFxuICAncGFkZGluZy10b3AnLFxuICAncGFnZS1icmVhay1hZnRlcicsXG4gICdwYWdlLWJyZWFrLWJlZm9yZScsXG4gICdwYWdlLWJyZWFrLWluc2lkZScsXG4gICdwYXVzZScsXG4gICdwYXVzZS1hZnRlcicsXG4gICdwYXVzZS1iZWZvcmUnLFxuICAncGVyc3BlY3RpdmUnLFxuICAncGVyc3BlY3RpdmUtb3JpZ2luJyxcbiAgJ3BvaW50ZXItZXZlbnRzJyxcbiAgJ3Bvc2l0aW9uJyxcbiAgJ3F1b3RlcycsXG4gICdyZXNpemUnLFxuICAncmVzdCcsXG4gICdyZXN0LWFmdGVyJyxcbiAgJ3Jlc3QtYmVmb3JlJyxcbiAgJ3JpZ2h0JyxcbiAgJ3Jvdy1nYXAnLFxuICAnc2Nyb2xsLW1hcmdpbicsXG4gICdzY3JvbGwtbWFyZ2luLWJsb2NrJyxcbiAgJ3Njcm9sbC1tYXJnaW4tYmxvY2stZW5kJyxcbiAgJ3Njcm9sbC1tYXJnaW4tYmxvY2stc3RhcnQnLFxuICAnc2Nyb2xsLW1hcmdpbi1ib3R0b20nLFxuICAnc2Nyb2xsLW1hcmdpbi1pbmxpbmUnLFxuICAnc2Nyb2xsLW1hcmdpbi1pbmxpbmUtZW5kJyxcbiAgJ3Njcm9sbC1tYXJnaW4taW5saW5lLXN0YXJ0JyxcbiAgJ3Njcm9sbC1tYXJnaW4tbGVmdCcsXG4gICdzY3JvbGwtbWFyZ2luLXJpZ2h0JyxcbiAgJ3Njcm9sbC1tYXJnaW4tdG9wJyxcbiAgJ3Njcm9sbC1wYWRkaW5nJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWJsb2NrJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWJsb2NrLWVuZCcsXG4gICdzY3JvbGwtcGFkZGluZy1ibG9jay1zdGFydCcsXG4gICdzY3JvbGwtcGFkZGluZy1ib3R0b20nLFxuICAnc2Nyb2xsLXBhZGRpbmctaW5saW5lJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWlubGluZS1lbmQnLFxuICAnc2Nyb2xsLXBhZGRpbmctaW5saW5lLXN0YXJ0JyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWxlZnQnLFxuICAnc2Nyb2xsLXBhZGRpbmctcmlnaHQnLFxuICAnc2Nyb2xsLXBhZGRpbmctdG9wJyxcbiAgJ3Njcm9sbC1zbmFwLWFsaWduJyxcbiAgJ3Njcm9sbC1zbmFwLXN0b3AnLFxuICAnc2Nyb2xsLXNuYXAtdHlwZScsXG4gICdzY3JvbGxiYXItY29sb3InLFxuICAnc2Nyb2xsYmFyLWd1dHRlcicsXG4gICdzY3JvbGxiYXItd2lkdGgnLFxuICAnc2hhcGUtaW1hZ2UtdGhyZXNob2xkJyxcbiAgJ3NoYXBlLW1hcmdpbicsXG4gICdzaGFwZS1vdXRzaWRlJyxcbiAgJ3NwZWFrJyxcbiAgJ3NwZWFrLWFzJyxcbiAgJ3NyYycsIC8vIEBmb250LWZhY2VcbiAgJ3RhYi1zaXplJyxcbiAgJ3RhYmxlLWxheW91dCcsXG4gICd0ZXh0LWFsaWduJyxcbiAgJ3RleHQtYWxpZ24tYWxsJyxcbiAgJ3RleHQtYWxpZ24tbGFzdCcsXG4gICd0ZXh0LWNvbWJpbmUtdXByaWdodCcsXG4gICd0ZXh0LWRlY29yYXRpb24nLFxuICAndGV4dC1kZWNvcmF0aW9uLWNvbG9yJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi1saW5lJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi1zdHlsZScsXG4gICd0ZXh0LWVtcGhhc2lzJyxcbiAgJ3RleHQtZW1waGFzaXMtY29sb3InLFxuICAndGV4dC1lbXBoYXNpcy1wb3NpdGlvbicsXG4gICd0ZXh0LWVtcGhhc2lzLXN0eWxlJyxcbiAgJ3RleHQtaW5kZW50JyxcbiAgJ3RleHQtanVzdGlmeScsXG4gICd0ZXh0LW9yaWVudGF0aW9uJyxcbiAgJ3RleHQtb3ZlcmZsb3cnLFxuICAndGV4dC1yZW5kZXJpbmcnLFxuICAndGV4dC1zaGFkb3cnLFxuICAndGV4dC10cmFuc2Zvcm0nLFxuICAndGV4dC11bmRlcmxpbmUtcG9zaXRpb24nLFxuICAndG9wJyxcbiAgJ3RyYW5zZm9ybScsXG4gICd0cmFuc2Zvcm0tYm94JyxcbiAgJ3RyYW5zZm9ybS1vcmlnaW4nLFxuICAndHJhbnNmb3JtLXN0eWxlJyxcbiAgJ3RyYW5zaXRpb24nLFxuICAndHJhbnNpdGlvbi1kZWxheScsXG4gICd0cmFuc2l0aW9uLWR1cmF0aW9uJyxcbiAgJ3RyYW5zaXRpb24tcHJvcGVydHknLFxuICAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nLFxuICAndW5pY29kZS1iaWRpJyxcbiAgJ3ZlcnRpY2FsLWFsaWduJyxcbiAgJ3Zpc2liaWxpdHknLFxuICAndm9pY2UtYmFsYW5jZScsXG4gICd2b2ljZS1kdXJhdGlvbicsXG4gICd2b2ljZS1mYW1pbHknLFxuICAndm9pY2UtcGl0Y2gnLFxuICAndm9pY2UtcmFuZ2UnLFxuICAndm9pY2UtcmF0ZScsXG4gICd2b2ljZS1zdHJlc3MnLFxuICAndm9pY2Utdm9sdW1lJyxcbiAgJ3doaXRlLXNwYWNlJyxcbiAgJ3dpZG93cycsXG4gICd3aWR0aCcsXG4gICd3aWxsLWNoYW5nZScsXG4gICd3b3JkLWJyZWFrJyxcbiAgJ3dvcmQtc3BhY2luZycsXG4gICd3b3JkLXdyYXAnLFxuICAnd3JpdGluZy1tb2RlJyxcbiAgJ3otaW5kZXgnXG4gIC8vIHJldmVyc2UgbWFrZXMgc3VyZSBsb25nZXIgYXR0cmlidXRlcyBgZm9udC13ZWlnaHRgIGFyZSBtYXRjaGVkIGZ1bGx5XG4gIC8vIGluc3RlYWQgb2YgZ2V0dGluZyBmYWxzZSBwb3NpdGl2ZXMgb24gc2F5IGBmb250YFxuXS5yZXZlcnNlKCk7XG5cbi8vIHNvbWUgZ3JhbW1hcnMgdXNlIHRoZW0gYWxsIGFzIGEgc2luZ2xlIGdyb3VwXG5jb25zdCBQU0VVRE9fU0VMRUNUT1JTID0gUFNFVURPX0NMQVNTRVMuY29uY2F0KFBTRVVET19FTEVNRU5UUyk7XG5cbi8qXG5MYW5ndWFnZTogTGVzc1xuRGVzY3JpcHRpb246IEl0J3MgQ1NTLCB3aXRoIGp1c3QgYSBsaXR0bGUgbW9yZS5cbkF1dGhvcjogICBNYXggTWlraGFpbG92IDxzZXZlbi5waGFzZXMubWF4QGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHA6Ly9sZXNzY3NzLm9yZ1xuQ2F0ZWdvcnk6IGNvbW1vbiwgY3NzLCB3ZWJcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBsZXNzKGhsanMpIHtcbiAgY29uc3QgbW9kZXMgPSBNT0RFUyhobGpzKTtcbiAgY29uc3QgUFNFVURPX1NFTEVDVE9SUyQxID0gUFNFVURPX1NFTEVDVE9SUztcblxuICBjb25zdCBBVF9NT0RJRklFUlMgPSBcImFuZCBvciBub3Qgb25seVwiO1xuICBjb25zdCBJREVOVF9SRSA9ICdbXFxcXHctXSsnOyAvLyB5ZXMsIExlc3MgaWRlbnRpZmllcnMgbWF5IGJlZ2luIHdpdGggYSBkaWdpdFxuICBjb25zdCBJTlRFUlBfSURFTlRfUkUgPSAnKCcgKyBJREVOVF9SRSArICd8QFxcXFx7JyArIElERU5UX1JFICsgJ1xcXFx9KSc7XG5cbiAgLyogR2VuZXJpYyBNb2RlcyAqL1xuXG4gIGNvbnN0IFJVTEVTID0gW107IGNvbnN0IFZBTFVFX01PREVTID0gW107IC8vIGZvcndhcmQgZGVmLiBmb3IgcmVjdXJzaXZlIG1vZGVzXG5cbiAgY29uc3QgU1RSSU5HX01PREUgPSBmdW5jdGlvbihjKSB7XG4gICAgcmV0dXJuIHtcbiAgICAvLyBMZXNzIHN0cmluZ3MgYXJlIG5vdCBtdWx0aWxpbmUgKGFsc28gaW5jbHVkZSAnficgZm9yIG1vcmUgY29uc2lzdGVudCBjb2xvcmluZyBvZiBcImVzY2FwZWRcIiBzdHJpbmdzKVxuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGJlZ2luOiAnfj8nICsgYyArICcuKj8nICsgY1xuICAgIH07XG4gIH07XG5cbiAgY29uc3QgSURFTlRfTU9ERSA9IGZ1bmN0aW9uKG5hbWUsIGJlZ2luLCByZWxldmFuY2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2xhc3NOYW1lOiBuYW1lLFxuICAgICAgYmVnaW46IGJlZ2luLFxuICAgICAgcmVsZXZhbmNlOiByZWxldmFuY2VcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IEFUX0tFWVdPUkRTID0ge1xuICAgICRwYXR0ZXJuOiAvW2Etei1dKy8sXG4gICAga2V5d29yZDogQVRfTU9ESUZJRVJTLFxuICAgIGF0dHJpYnV0ZTogTUVESUFfRkVBVFVSRVMuam9pbihcIiBcIilcbiAgfTtcblxuICBjb25zdCBQQVJFTlNfTU9ERSA9IHtcbiAgICAvLyB1c2VkIG9ubHkgdG8gcHJvcGVybHkgYmFsYW5jZSBuZXN0ZWQgcGFyZW5zIGluc2lkZSBtaXhpbiBjYWxsLCBkZWYuIGFyZyBsaXN0XG4gICAgYmVnaW46ICdcXFxcKCcsXG4gICAgZW5kOiAnXFxcXCknLFxuICAgIGNvbnRhaW5zOiBWQUxVRV9NT0RFUyxcbiAgICBrZXl3b3JkczogQVRfS0VZV09SRFMsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgLy8gZ2VuZXJpYyBMZXNzIGhpZ2hsaWdodGVyICh1c2VkIGFsbW9zdCBldmVyeXdoZXJlIGV4Y2VwdCBzZWxlY3RvcnMpOlxuICBWQUxVRV9NT0RFUy5wdXNoKFxuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIFNUUklOR19NT0RFKFwiJ1wiKSxcbiAgICBTVFJJTkdfTU9ERSgnXCInKSxcbiAgICBtb2Rlcy5DU1NfTlVNQkVSX01PREUsIC8vIGZpeG1lOiBpdCBkb2VzIG5vdCBpbmNsdWRlIGRvdCBmb3IgbnVtYmVycyBsaWtlIC41ZW0gOihcbiAgICB7XG4gICAgICBiZWdpbjogJyh1cmx8ZGF0YS11cmkpXFxcXCgnLFxuICAgICAgc3RhcnRzOiB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGVuZDogJ1tcXFxcKVxcXFxuXScsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIG1vZGVzLkhFWENPTE9SLFxuICAgIFBBUkVOU19NT0RFLFxuICAgIElERU5UX01PREUoJ3ZhcmlhYmxlJywgJ0BAPycgKyBJREVOVF9SRSwgMTApLFxuICAgIElERU5UX01PREUoJ3ZhcmlhYmxlJywgJ0BcXFxceycgKyBJREVOVF9SRSArICdcXFxcfScpLFxuICAgIElERU5UX01PREUoJ2J1aWx0X2luJywgJ34/YFteYF0qP2AnKSwgLy8gaW5saW5lIGphdmFzY3JpcHQgKG9yIHdoYXRldmVyIGhvc3QgbGFuZ3VhZ2UpICptdWx0aWxpbmUqIHN0cmluZ1xuICAgIHsgLy8gQG1lZGlhIGZlYXR1cmVzIChpdOKAmXMgaGVyZSB0byBub3QgZHVwbGljYXRlIHRoaW5ncyBpbiBBVF9SVUxFX01PREUgd2l0aCBleHRyYSBQQVJFTlNfTU9ERSBvdmVycmlkaW5nKTpcbiAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICBiZWdpbjogSURFTlRfUkUgKyAnXFxcXHMqOicsXG4gICAgICBlbmQ6ICc6JyxcbiAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgIH0sXG4gICAgbW9kZXMuSU1QT1JUQU5ULFxuICAgIHsgYmVnaW5LZXl3b3JkczogJ2FuZCBub3QnIH0sXG4gICAgbW9kZXMuRlVOQ1RJT05fRElTUEFUQ0hcbiAgKTtcblxuICBjb25zdCBWQUxVRV9XSVRIX1JVTEVTRVRTID0gVkFMVUVfTU9ERVMuY29uY2F0KHtcbiAgICBiZWdpbjogL1xcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBjb250YWluczogUlVMRVNcbiAgfSk7XG5cbiAgY29uc3QgTUlYSU5fR1VBUkRfTU9ERSA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAnd2hlbicsXG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgY29udGFpbnM6IFsgeyBiZWdpbktleXdvcmRzOiAnYW5kIG5vdCcgfSBdLmNvbmNhdChWQUxVRV9NT0RFUykgLy8gdXNpbmcgdGhpcyBmb3JtIHRvIG92ZXJyaWRlIFZBTFVF4oCZcyAnZnVuY3Rpb24nIG1hdGNoXG4gIH07XG5cbiAgLyogUnVsZS1MZXZlbCBNb2RlcyAqL1xuXG4gIGNvbnN0IFJVTEVfTU9ERSA9IHtcbiAgICBiZWdpbjogSU5URVJQX0lERU5UX1JFICsgJ1xcXFxzKjonLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGVuZDogL1s7fV0vLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAgeyBiZWdpbjogLy0od2Via2l0fG1venxtc3xvKS0vIH0sXG4gICAgICBtb2Rlcy5DU1NfVkFSSUFCTEUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIEFUVFJJQlVURVMuam9pbignfCcpICsgJylcXFxcYicsXG4gICAgICAgIGVuZDogLyg/PTopLyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgaWxsZWdhbDogJ1s8PSRdJyxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgY29udGFpbnM6IFZBTFVFX01PREVTXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgQVRfUlVMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAnQChpbXBvcnR8bWVkaWF8Y2hhcnNldHxmb250LWZhY2V8KC1bYS16XSstKT9rZXlmcmFtZXN8c3VwcG9ydHN8ZG9jdW1lbnR8bmFtZXNwYWNlfHBhZ2V8dmlld3BvcnR8aG9zdClcXFxcYicsXG4gICAgc3RhcnRzOiB7XG4gICAgICBlbmQ6ICdbO3t9XScsXG4gICAgICBrZXl3b3JkczogQVRfS0VZV09SRFMsXG4gICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICBjb250YWluczogVkFMVUVfTU9ERVMsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gIH07XG5cbiAgLy8gdmFyaWFibGUgZGVmaW5pdGlvbnMgYW5kIGNhbGxzXG4gIGNvbnN0IFZBUl9SVUxFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyB1c2luZyBtb3JlIHN0cmljdCBwYXR0ZXJuIGZvciBoaWdoZXIgcmVsZXZhbmNlIHRvIGluY3JlYXNlIGNoYW5jZXMgb2YgTGVzcyBkZXRlY3Rpb24uXG4gICAgICAvLyB0aGlzIGlzICp0aGUgb25seSogTGVzcyBzcGVjaWZpYyBzdGF0ZW1lbnQgdXNlZCBpbiBtb3N0IG9mIHRoZSBzb3VyY2VzLCBzby4uLlxuICAgICAgLy8gKHdl4oCZbGwgc3RpbGwgb2Z0ZW4gbG9vc2UgdG8gdGhlIGNzcy1wYXJzZXIgdW5sZXNzIHRoZXJlJ3MgJy8vJyBjb21tZW50LFxuICAgICAgLy8gc2ltcGx5IGJlY2F1c2UgMSB2YXJpYWJsZSBqdXN0IGNhbid0IGJlYXQgOTkgcHJvcGVydGllcyA6KVxuICAgICAge1xuICAgICAgICBiZWdpbjogJ0AnICsgSURFTlRfUkUgKyAnXFxcXHMqOicsXG4gICAgICAgIHJlbGV2YW5jZTogMTVcbiAgICAgIH0sXG4gICAgICB7IGJlZ2luOiAnQCcgKyBJREVOVF9SRSB9XG4gICAgXSxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJ1s7fV0nLFxuICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgY29udGFpbnM6IFZBTFVFX1dJVEhfUlVMRVNFVFNcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgU0VMRUNUT1JfTU9ERSA9IHtcbiAgICAvLyBmaXJzdCBwYXJzZSB1bmFtYmlndW91cyBzZWxlY3RvcnMgKGkuZS4gdGhvc2Ugbm90IHN0YXJ0aW5nIHdpdGggdGFnKVxuICAgIC8vIHRoZW4gZmFsbCBpbnRvIHRoZSBzY2FyeSBsb29rYWhlYWQtZGlzY3JpbWluYXRvciB2YXJpYW50LlxuICAgIC8vIHRoaXMgbW9kZSBhbHNvIGhhbmRsZXMgbWl4aW4gZGVmaW5pdGlvbnMgYW5kIGNhbGxzXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdbXFxcXC4jOiZcXFxcWz5dJyxcbiAgICAgICAgZW5kOiAnWzt7fV0nIC8vIG1peGluIGNhbGxzIGVuZCB3aXRoICc7J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IElOVEVSUF9JREVOVF9SRSxcbiAgICAgICAgZW5kOiAvXFx7L1xuICAgICAgfVxuICAgIF0sXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgIGlsbGVnYWw6ICdbPD1cXCckXCJdJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBNSVhJTl9HVUFSRF9NT0RFLFxuICAgICAgSURFTlRfTU9ERSgna2V5d29yZCcsICdhbGxcXFxcYicpLFxuICAgICAgSURFTlRfTU9ERSgndmFyaWFibGUnLCAnQFxcXFx7JyArIElERU5UX1JFICsgJ1xcXFx9JyksIC8vIG90aGVyd2lzZSBpdOKAmXMgaWRlbnRpZmllZCBhcyB0YWdcbiAgICAgIFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBUQUdTLmpvaW4oJ3wnKSArICcpXFxcXGInLFxuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci10YWcnXG4gICAgICB9LFxuICAgICAgbW9kZXMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAgSURFTlRfTU9ERSgnc2VsZWN0b3ItdGFnJywgSU5URVJQX0lERU5UX1JFLCAwKSxcbiAgICAgIElERU5UX01PREUoJ3NlbGVjdG9yLWlkJywgJyMnICsgSU5URVJQX0lERU5UX1JFKSxcbiAgICAgIElERU5UX01PREUoJ3NlbGVjdG9yLWNsYXNzJywgJ1xcXFwuJyArIElOVEVSUF9JREVOVF9SRSwgMCksXG4gICAgICBJREVOVF9NT0RFKCdzZWxlY3Rvci10YWcnLCAnJicsIDApLFxuICAgICAgbW9kZXMuQVRUUklCVVRFX1NFTEVDVE9SX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXBzZXVkbycsXG4gICAgICAgIGJlZ2luOiAnOignICsgUFNFVURPX0NMQVNTRVMuam9pbignfCcpICsgJyknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1wc2V1ZG8nLFxuICAgICAgICBiZWdpbjogJzooOik/KCcgKyBQU0VVRE9fRUxFTUVOVFMuam9pbignfCcpICsgJyknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFZBTFVFX1dJVEhfUlVMRVNFVFNcbiAgICAgIH0sIC8vIGFyZ3VtZW50IGxpc3Qgb2YgcGFyYW1ldHJpYyBtaXhpbnNcbiAgICAgIHsgYmVnaW46ICchaW1wb3J0YW50JyB9LCAvLyBlYXQgIWltcG9ydGFudCBhZnRlciBtaXhpbiBjYWxsIG9yIGl0IHdpbGwgYmUgY29sb3JlZCBhcyB0YWdcbiAgICAgIG1vZGVzLkZVTkNUSU9OX0RJU1BBVENIXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFBTRVVET19TRUxFQ1RPUl9NT0RFID0ge1xuICAgIGJlZ2luOiBJREVOVF9SRSArICc6KDopPycgKyBgKCR7UFNFVURPX1NFTEVDVE9SUyQxLmpvaW4oJ3wnKX0pYCxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogWyBTRUxFQ1RPUl9NT0RFIF1cbiAgfTtcblxuICBSVUxFUy5wdXNoKFxuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIEFUX1JVTEVfTU9ERSxcbiAgICBWQVJfUlVMRV9NT0RFLFxuICAgIFBTRVVET19TRUxFQ1RPUl9NT0RFLFxuICAgIFJVTEVfTU9ERSxcbiAgICBTRUxFQ1RPUl9NT0RFLFxuICAgIE1JWElOX0dVQVJEX01PREUsXG4gICAgbW9kZXMuRlVOQ1RJT05fRElTUEFUQ0hcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdMZXNzJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGlsbGVnYWw6ICdbPT5cXCcvPCgkXCJdJyxcbiAgICBjb250YWluczogUlVMRVNcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsZXNzO1xuIiwiLypcbkxhbmd1YWdlOiBMdWFcbkRlc2NyaXB0aW9uOiBMdWEgaXMgYSBwb3dlcmZ1bCwgZWZmaWNpZW50LCBsaWdodHdlaWdodCwgZW1iZWRkYWJsZSBzY3JpcHRpbmcgbGFuZ3VhZ2UuXG5BdXRob3I6IEFuZHJldyBGZWRvcm92IDxkbW1kcnNAbWFpbC5ydT5cbkNhdGVnb3J5OiBjb21tb24sIHNjcmlwdGluZ1xuV2Vic2l0ZTogaHR0cHM6Ly93d3cubHVhLm9yZ1xuKi9cblxuZnVuY3Rpb24gbHVhKGhsanMpIHtcbiAgY29uc3QgT1BFTklOR19MT05HX0JSQUNLRVQgPSAnXFxcXFs9KlxcXFxbJztcbiAgY29uc3QgQ0xPU0lOR19MT05HX0JSQUNLRVQgPSAnXFxcXF09KlxcXFxdJztcbiAgY29uc3QgTE9OR19CUkFDS0VUUyA9IHtcbiAgICBiZWdpbjogT1BFTklOR19MT05HX0JSQUNLRVQsXG4gICAgZW5kOiBDTE9TSU5HX0xPTkdfQlJBQ0tFVCxcbiAgICBjb250YWluczogWyAnc2VsZicgXVxuICB9O1xuICBjb25zdCBDT01NRU5UUyA9IFtcbiAgICBobGpzLkNPTU1FTlQoJy0tKD8hJyArIE9QRU5JTkdfTE9OR19CUkFDS0VUICsgJyknLCAnJCcpLFxuICAgIGhsanMuQ09NTUVOVChcbiAgICAgICctLScgKyBPUEVOSU5HX0xPTkdfQlJBQ0tFVCxcbiAgICAgIENMT1NJTkdfTE9OR19CUkFDS0VULFxuICAgICAge1xuICAgICAgICBjb250YWluczogWyBMT05HX0JSQUNLRVRTIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH1cbiAgICApXG4gIF07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0x1YScsXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICBsaXRlcmFsOiBcInRydWUgZmFsc2UgbmlsXCIsXG4gICAgICBrZXl3b3JkOiBcImFuZCBicmVhayBkbyBlbHNlIGVsc2VpZiBlbmQgZm9yIGdvdG8gaWYgaW4gbG9jYWwgbm90IG9yIHJlcGVhdCByZXR1cm4gdGhlbiB1bnRpbCB3aGlsZVwiLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgIC8vIE1ldGF0YWdzIGFuZCBnbG9iYWxzOlxuICAgICAgICAnX0cgX0VOViBfVkVSU0lPTiBfX2luZGV4IF9fbmV3aW5kZXggX19tb2RlIF9fY2FsbCBfX21ldGF0YWJsZSBfX3Rvc3RyaW5nIF9fbGVuICdcbiAgICAgICAgKyAnX19nYyBfX2FkZCBfX3N1YiBfX211bCBfX2RpdiBfX21vZCBfX3BvdyBfX2NvbmNhdCBfX3VubSBfX2VxIF9fbHQgX19sZSBhc3NlcnQgJ1xuICAgICAgICAvLyBTdGFuZGFyZCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzOlxuICAgICAgICArICdjb2xsZWN0Z2FyYmFnZSBkb2ZpbGUgZXJyb3IgZ2V0ZmVudiBnZXRtZXRhdGFibGUgaXBhaXJzIGxvYWQgbG9hZGZpbGUgbG9hZHN0cmluZyAnXG4gICAgICAgICsgJ21vZHVsZSBuZXh0IHBhaXJzIHBjYWxsIHByaW50IHJhd2VxdWFsIHJhd2dldCByYXdzZXQgcmVxdWlyZSBzZWxlY3Qgc2V0ZmVudiAnXG4gICAgICAgICsgJ3NldG1ldGF0YWJsZSB0b251bWJlciB0b3N0cmluZyB0eXBlIHVucGFjayB4cGNhbGwgYXJnIHNlbGYgJ1xuICAgICAgICAvLyBMaWJyYXJ5IG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgKG9uZSBsaW5lIHBlciBsaWJyYXJ5KTpcbiAgICAgICAgKyAnY29yb3V0aW5lIHJlc3VtZSB5aWVsZCBzdGF0dXMgd3JhcCBjcmVhdGUgcnVubmluZyBkZWJ1ZyBnZXR1cHZhbHVlICdcbiAgICAgICAgKyAnZGVidWcgc2V0aG9vayBnZXRtZXRhdGFibGUgZ2V0aG9vayBzZXRtZXRhdGFibGUgc2V0bG9jYWwgdHJhY2ViYWNrIHNldGZlbnYgZ2V0aW5mbyBzZXR1cHZhbHVlIGdldGxvY2FsIGdldHJlZ2lzdHJ5IGdldGZlbnYgJ1xuICAgICAgICArICdpbyBsaW5lcyB3cml0ZSBjbG9zZSBmbHVzaCBvcGVuIG91dHB1dCB0eXBlIHJlYWQgc3RkZXJyIHN0ZGluIGlucHV0IHN0ZG91dCBwb3BlbiB0bXBmaWxlICdcbiAgICAgICAgKyAnbWF0aCBsb2cgbWF4IGFjb3MgaHVnZSBsZGV4cCBwaSBjb3MgdGFuaCBwb3cgZGVnIHRhbiBjb3NoIHNpbmggcmFuZG9tIHJhbmRvbXNlZWQgZnJleHAgY2VpbCBmbG9vciByYWQgYWJzIHNxcnQgbW9kZiBhc2luIG1pbiBtb2QgZm1vZCBsb2cxMCBhdGFuMiBleHAgc2luIGF0YW4gJ1xuICAgICAgICArICdvcyBleGl0IHNldGxvY2FsZSBkYXRlIGdldGVudiBkaWZmdGltZSByZW1vdmUgdGltZSBjbG9jayB0bXBuYW1lIHJlbmFtZSBleGVjdXRlIHBhY2thZ2UgcHJlbG9hZCBsb2FkbGliIGxvYWRlZCBsb2FkZXJzIGNwYXRoIGNvbmZpZyBwYXRoIHNlZWFsbCAnXG4gICAgICAgICsgJ3N0cmluZyBzdWIgdXBwZXIgbGVuIGdmaW5kIHJlcCBmaW5kIG1hdGNoIGNoYXIgZHVtcCBnbWF0Y2ggcmV2ZXJzZSBieXRlIGZvcm1hdCBnc3ViIGxvd2VyICdcbiAgICAgICAgKyAndGFibGUgc2V0biBpbnNlcnQgZ2V0biBmb3JlYWNoaSBtYXhuIGZvcmVhY2ggY29uY2F0IHNvcnQgcmVtb3ZlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IENPTU1FTlRTLmNvbmNhdChbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJyxcbiAgICAgICAgZW5kOiAnXFxcXCknLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHsgYmVnaW46ICcoW19hLXpBLVpdXFxcXHcqXFxcXC4pKihbX2EtekEtWl1cXFxcdyo6KT9bX2EtekEtWl1cXFxcdyonIH0pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IENPTU1FTlRTXG4gICAgICAgICAgfVxuICAgICAgICBdLmNvbmNhdChDT01NRU5UUylcbiAgICAgIH0sXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogT1BFTklOR19MT05HX0JSQUNLRVQsXG4gICAgICAgIGVuZDogQ0xPU0lOR19MT05HX0JSQUNLRVQsXG4gICAgICAgIGNvbnRhaW5zOiBbIExPTkdfQlJBQ0tFVFMgXSxcbiAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICB9XG4gICAgXSlcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsdWE7XG4iLCIvKlxuTGFuZ3VhZ2U6IE1ha2VmaWxlXG5BdXRob3I6IEl2YW4gU2FnYWxhZXYgPG1hbmlhY0Bzb2Z0d2FyZW1hbmlhY3Mub3JnPlxuQ29udHJpYnV0b3JzOiBKb8OrbCBQb3JxdWV0IDxqb2VsQHBvcnF1ZXQub3JnPlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9tYWtlL21hbnVhbC9odG1sX25vZGUvSW50cm9kdWN0aW9uLmh0bWxcbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbmZ1bmN0aW9uIG1ha2VmaWxlKGhsanMpIHtcbiAgLyogVmFyaWFibGVzOiBzaW1wbGUgKGVnICQodmFyKSkgYW5kIHNwZWNpYWwgKGVnICRAKSAqL1xuICBjb25zdCBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcJFxcXFwoJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxcKScsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gICAgICB9LFxuICAgICAgeyBiZWdpbjogL1xcJFtAJTw/XFxeXFwrXFwqXS8gfVxuICAgIF1cbiAgfTtcbiAgLyogUXVvdGVkIHN0cmluZyB3aXRoIHZhcmlhYmxlcyBpbnNpZGUgKi9cbiAgY29uc3QgUVVPVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cIi8sXG4gICAgZW5kOiAvXCIvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBWQVJJQUJMRVxuICAgIF1cbiAgfTtcbiAgLyogRnVuY3Rpb246ICQoZnVuYyBhcmcsLi4uKSAqL1xuICBjb25zdCBGVU5DID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogL1xcJFxcKFtcXHctXStcXHMvLFxuICAgIGVuZDogL1xcKS8sXG4gICAga2V5d29yZHM6IHsgYnVpbHRfaW46XG4gICAgICAgICdzdWJzdCBwYXRzdWJzdCBzdHJpcCBmaW5kc3RyaW5nIGZpbHRlciBmaWx0ZXItb3V0IHNvcnQgJ1xuICAgICAgICArICd3b3JkIHdvcmRsaXN0IGZpcnN0d29yZCBsYXN0d29yZCBkaXIgbm90ZGlyIHN1ZmZpeCBiYXNlbmFtZSAnXG4gICAgICAgICsgJ2FkZHN1ZmZpeCBhZGRwcmVmaXggam9pbiB3aWxkY2FyZCByZWFscGF0aCBhYnNwYXRoIGVycm9yIHdhcm5pbmcgJ1xuICAgICAgICArICdzaGVsbCBvcmlnaW4gZmxhdm9yIGZvcmVhY2ggaWYgb3IgYW5kIGNhbGwgZXZhbCBmaWxlIHZhbHVlJyB9LFxuICAgIGNvbnRhaW5zOiBbIFZBUklBQkxFIF1cbiAgfTtcbiAgLyogVmFyaWFibGUgYXNzaWdubWVudCAqL1xuICBjb25zdCBBU1NJR05NRU5UID0geyBiZWdpbjogJ14nICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzKig/PVs6Kz9dPz0pJyB9O1xuICAvKiBNZXRhIHRhcmdldHMgKC5QSE9OWSkgKi9cbiAgY29uc3QgTUVUQSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogL15cXC5QSE9OWTovLFxuICAgIGVuZDogLyQvLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogL1tcXC5cXHddKy8sXG4gICAgICBrZXl3b3JkOiAnLlBIT05ZJ1xuICAgIH1cbiAgfTtcbiAgLyogVGFyZ2V0cyAqL1xuICBjb25zdCBUQVJHRVQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgYmVnaW46IC9eW15cXHNdKzovLFxuICAgIGVuZDogLyQvLFxuICAgIGNvbnRhaW5zOiBbIFZBUklBQkxFIF1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnTWFrZWZpbGUnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdtaycsXG4gICAgICAnbWFrJyxcbiAgICAgICdtYWtlJyxcbiAgICBdLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogL1tcXHctXSsvLFxuICAgICAga2V5d29yZDogJ2RlZmluZSBlbmRlZiB1bmRlZmluZSBpZmRlZiBpZm5kZWYgaWZlcSBpZm5lcSBlbHNlIGVuZGlmICdcbiAgICAgICsgJ2luY2x1ZGUgLWluY2x1ZGUgc2luY2x1ZGUgb3ZlcnJpZGUgZXhwb3J0IHVuZXhwb3J0IHByaXZhdGUgdnBhdGgnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIFZBUklBQkxFLFxuICAgICAgUVVPVEVfU1RSSU5HLFxuICAgICAgRlVOQyxcbiAgICAgIEFTU0lHTk1FTlQsXG4gICAgICBNRVRBLFxuICAgICAgVEFSR0VUXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1ha2VmaWxlO1xuIiwiLypcbkxhbmd1YWdlOiBNYXJrZG93blxuUmVxdWlyZXM6IHhtbC5qc1xuQXV0aG9yOiBKb2huIENyZXBlenppIDxqb2huLmNyZXBlenppQGdtYWlsLmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vZGFyaW5nZmlyZWJhbGwubmV0L3Byb2plY3RzL21hcmtkb3duL1xuQ2F0ZWdvcnk6IGNvbW1vbiwgbWFya3VwXG4qL1xuXG5mdW5jdGlvbiBtYXJrZG93bihobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgSU5MSU5FX0hUTUwgPSB7XG4gICAgYmVnaW46IC88XFwvP1tBLVphLXpfXS8sXG4gICAgZW5kOiAnPicsXG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBIT1JJWk9OVEFMX1JVTEUgPSB7XG4gICAgYmVnaW46ICdeWy1cXFxcKl17Myx9JyxcbiAgICBlbmQ6ICckJ1xuICB9O1xuICBjb25zdCBDT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvZGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBUT0RPOiBmaXggdG8gYWxsb3cgdGhlc2UgdG8gd29yayB3aXRoIHN1Ymxhbmd1YWdlIGFsc29cbiAgICAgIHsgYmVnaW46ICcoYHszLH0pW15gXSgufFxcXFxuKSo/XFxcXDFgKlsgXSonIH0sXG4gICAgICB7IGJlZ2luOiAnKH57Myx9KVtefl0oLnxcXFxcbikqP1xcXFwxfipbIF0qJyB9LFxuICAgICAgLy8gbmVlZGVkIHRvIGFsbG93IG1hcmtkb3duIGFzIGEgc3VibGFuZ3VhZ2UgdG8gd29ya1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ2BgYCcsXG4gICAgICAgIGVuZDogJ2BgYCtbIF0qJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnfn5+JyxcbiAgICAgICAgZW5kOiAnfn5+K1sgXSokJ1xuICAgICAgfSxcbiAgICAgIHsgYmVnaW46ICdgLis/YCcgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcoPz1eKCB7NH18XFxcXHQpKScsXG4gICAgICAgIC8vIHVzZSBjb250YWlucyB0byBnb2JibGUgdXAgbXVsdGlwbGUgbGluZXMgdG8gYWxsb3cgdGhlIGJsb2NrIHRvIGJlIHdoYXRldmVyIHNpemVcbiAgICAgICAgLy8gYnV0IG9ubHkgaGF2ZSBhIHNpbmdsZSBvcGVuL2Nsb3NlIHRhZyB2cyBvbmUgcGVyIGxpbmVcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ14oIHs0fXxcXFxcdCknLFxuICAgICAgICAgICAgZW5kOiAnKFxcXFxuKSQnXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IExJU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVsbGV0JyxcbiAgICBiZWdpbjogJ15bIFxcdF0qKFsqKy1dfChcXFxcZCtcXFxcLikpKD89XFxcXHMrKScsXG4gICAgZW5kOiAnXFxcXHMrJyxcbiAgICBleGNsdWRlRW5kOiB0cnVlXG4gIH07XG4gIGNvbnN0IExJTktfUkVGRVJFTkNFID0ge1xuICAgIGJlZ2luOiAvXlxcW1teXFxuXStcXF06LyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogL1xcWy8sXG4gICAgICAgIGVuZDogL1xcXS8sXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGluaycsXG4gICAgICAgIGJlZ2luOiAvOlxccyovLFxuICAgICAgICBlbmQ6IC8kLyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBVUkxfU0NIRU1FID0gL1tBLVphLXpdW0EtWmEtejAtOSsuLV0qLztcbiAgY29uc3QgTElOSyA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gdG9vIG11Y2ggbGlrZSBuZXN0ZWQgYXJyYXkgYWNjZXNzIGluIHNvIG1hbnkgbGFuZ3VhZ2VzXG4gICAgICAvLyB0byBoYXZlIGFueSByZWFsIHJlbGV2YW5jZVxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcWy4rP1xcXVxcWy4qP1xcXS8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIHBvcHVsYXIgaW50ZXJuZXQgVVJMc1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcWy4rP1xcXVxcKCgoZGF0YXxqYXZhc2NyaXB0fG1haWx0byk6fCg/Omh0dHB8ZnRwKXM/OlxcL1xcLykuKj9cXCkvLFxuICAgICAgICByZWxldmFuY2U6IDJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiByZWdleC5jb25jYXQoL1xcWy4rP1xcXVxcKC8sIFVSTF9TQ0hFTUUsIC86XFwvXFwvLio/XFwpLyksXG4gICAgICAgIHJlbGV2YW5jZTogMlxuICAgICAgfSxcbiAgICAgIC8vIHJlbGF0aXZlIHVybHNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFsuKz9cXF1cXChbLi8/JiNdLio/XFwpLyxcbiAgICAgICAgcmVsZXZhbmNlOiAxXG4gICAgICB9LFxuICAgICAgLy8gd2hhdGV2ZXIgZWxzZSwgbG93ZXIgcmVsZXZhbmNlIChtaWdodCBub3QgYmUgYSBsaW5rIGF0IGFsbClcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFsuKj9cXF1cXCguKj9cXCkvLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIC8vIGVtcHR5IHN0cmluZ3MgZm9yIGFsdCBvciBsaW5rIHRleHRcbiAgICAgICAgbWF0Y2g6IC9cXFsoPz1cXF0pLyB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGJlZ2luOiAnXFxcXFsnLFxuICAgICAgICBlbmQ6ICdcXFxcXScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgcmV0dXJuRW5kOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaW5rJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBiZWdpbjogJ1xcXFxdXFxcXCgnLFxuICAgICAgICBlbmQ6ICdcXFxcKScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBiZWdpbjogJ1xcXFxdXFxcXFsnLFxuICAgICAgICBlbmQ6ICdcXFxcXScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgQk9MRCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJvbmcnLFxuICAgIGNvbnRhaW5zOiBbXSwgLy8gZGVmaW5lZCBsYXRlclxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvX3syfS8sXG4gICAgICAgIGVuZDogL197Mn0vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKnsyfS8sXG4gICAgICAgIGVuZDogL1xcKnsyfS9cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IElUQUxJQyA9IHtcbiAgICBjbGFzc05hbWU6ICdlbXBoYXNpcycsXG4gICAgY29udGFpbnM6IFtdLCAvLyBkZWZpbmVkIGxhdGVyXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCooPyFcXCopLyxcbiAgICAgICAgZW5kOiAvXFwqL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9fKD8hXykvLFxuICAgICAgICBlbmQ6IC9fLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIC8vIDMgbGV2ZWwgZGVlcCBuZXN0aW5nIGlzIG5vdCBhbGxvd2VkIGJlY2F1c2UgaXQgd291bGQgY3JlYXRlIGNvbmZ1c2lvblxuICAvLyBpbiBjYXNlcyBsaWtlIGAqKip0ZXN0aW5nKioqYCBiZWNhdXNlIHdoZXJlIHdlIGRvbid0IGtub3cgaWYgdGhlIGxhc3RcbiAgLy8gYCoqKmAgaXMgc3RhcnRpbmcgYSBuZXcgYm9sZC9pdGFsaWMgb3IgZmluaXNoaW5nIHRoZSBsYXN0IG9uZVxuICBjb25zdCBCT0xEX1dJVEhPVVRfSVRBTElDID0gaGxqcy5pbmhlcml0KEJPTEQsIHsgY29udGFpbnM6IFtdIH0pO1xuICBjb25zdCBJVEFMSUNfV0lUSE9VVF9CT0xEID0gaGxqcy5pbmhlcml0KElUQUxJQywgeyBjb250YWluczogW10gfSk7XG4gIEJPTEQuY29udGFpbnMucHVzaChJVEFMSUNfV0lUSE9VVF9CT0xEKTtcbiAgSVRBTElDLmNvbnRhaW5zLnB1c2goQk9MRF9XSVRIT1VUX0lUQUxJQyk7XG5cbiAgbGV0IENPTlRBSU5BQkxFID0gW1xuICAgIElOTElORV9IVE1MLFxuICAgIExJTktcbiAgXTtcblxuICBbXG4gICAgQk9MRCxcbiAgICBJVEFMSUMsXG4gICAgQk9MRF9XSVRIT1VUX0lUQUxJQyxcbiAgICBJVEFMSUNfV0lUSE9VVF9CT0xEXG4gIF0uZm9yRWFjaChtID0+IHtcbiAgICBtLmNvbnRhaW5zID0gbS5jb250YWlucy5jb25jYXQoQ09OVEFJTkFCTEUpO1xuICB9KTtcblxuICBDT05UQUlOQUJMRSA9IENPTlRBSU5BQkxFLmNvbmNhdChCT0xELCBJVEFMSUMpO1xuXG4gIGNvbnN0IEhFQURFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ14jezEsNn0nLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IENPTlRBSU5BQkxFXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyg/PV4uKz9cXFxcbls9LV17Mix9JCknLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgYmVnaW46ICdeWz0tXSokJyB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXicsXG4gICAgICAgICAgICBlbmQ6IFwiXFxcXG5cIixcbiAgICAgICAgICAgIGNvbnRhaW5zOiBDT05UQUlOQUJMRVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBCTE9DS1FVT1RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3F1b3RlJyxcbiAgICBiZWdpbjogJ14+XFxcXHMrJyxcbiAgICBjb250YWluczogQ09OVEFJTkFCTEUsXG4gICAgZW5kOiAnJCdcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNYXJrZG93bicsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ21kJyxcbiAgICAgICdta2Rvd24nLFxuICAgICAgJ21rZCdcbiAgICBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBIRUFERVIsXG4gICAgICBJTkxJTkVfSFRNTCxcbiAgICAgIExJU1QsXG4gICAgICBCT0xELFxuICAgICAgSVRBTElDLFxuICAgICAgQkxPQ0tRVU9URSxcbiAgICAgIENPREUsXG4gICAgICBIT1JJWk9OVEFMX1JVTEUsXG4gICAgICBMSU5LLFxuICAgICAgTElOS19SRUZFUkVOQ0VcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFya2Rvd247XG4iLCIvKlxuTGFuZ3VhZ2U6IE9iamVjdGl2ZS1DXG5BdXRob3I6IFZhbGVyaWkgSGlvcmEgPHZhbGVyaWkuaGlvcmFAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBBbmdlbCBHLiBPbGxvcXVpIDxhbmdlbGdhcmNpYS5tYWlsQGdtYWlsLmNvbT4sIE1hdHQgRGllcGhvdXNlIDxtYXR0QGRpZXBob3VzZS5jb20+LCBBbmRyZXcgRmFybWVyIDxhaGZhcm1lckBnbWFpbC5jb20+LCBNaW5oIE5ndXnhu4VuIDxteG5AMWVjNS5vcmc+XG5XZWJzaXRlOiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9vYmplY3RpdmVjXG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG5mdW5jdGlvbiBvYmplY3RpdmVjKGhsanMpIHtcbiAgY29uc3QgQVBJX0NMQVNTID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICBiZWdpbjogJ1xcXFxiKEFWfENBfENGfENHfENJfENMfENNfENOfENUfE1LfE1QfE1US3xNVEx8TlN8U0NOfFNLfFVJfFdLfFhDKVxcXFx3KydcbiAgfTtcbiAgY29uc3QgSURFTlRJRklFUl9SRSA9IC9bYS16QS1aQF1bYS16QS1aMC05X10qLztcbiAgY29uc3QgVFlQRVMgPSBbXG4gICAgXCJpbnRcIixcbiAgICBcImZsb2F0XCIsXG4gICAgXCJjaGFyXCIsXG4gICAgXCJ1bnNpZ25lZFwiLFxuICAgIFwic2lnbmVkXCIsXG4gICAgXCJzaG9ydFwiLFxuICAgIFwibG9uZ1wiLFxuICAgIFwiZG91YmxlXCIsXG4gICAgXCJ3Y2hhcl90XCIsXG4gICAgXCJ1bmljaGFyXCIsXG4gICAgXCJ2b2lkXCIsXG4gICAgXCJib29sXCIsXG4gICAgXCJCT09MXCIsXG4gICAgXCJpZHwwXCIsXG4gICAgXCJfQm9vbFwiXG4gIF07XG4gIGNvbnN0IEtXUyA9IFtcbiAgICBcIndoaWxlXCIsXG4gICAgXCJleHBvcnRcIixcbiAgICBcInNpemVvZlwiLFxuICAgIFwidHlwZWRlZlwiLFxuICAgIFwiY29uc3RcIixcbiAgICBcInN0cnVjdFwiLFxuICAgIFwiZm9yXCIsXG4gICAgXCJ1bmlvblwiLFxuICAgIFwidm9sYXRpbGVcIixcbiAgICBcInN0YXRpY1wiLFxuICAgIFwibXV0YWJsZVwiLFxuICAgIFwiaWZcIixcbiAgICBcImRvXCIsXG4gICAgXCJyZXR1cm5cIixcbiAgICBcImdvdG9cIixcbiAgICBcImVudW1cIixcbiAgICBcImVsc2VcIixcbiAgICBcImJyZWFrXCIsXG4gICAgXCJleHRlcm5cIixcbiAgICBcImFzbVwiLFxuICAgIFwiY2FzZVwiLFxuICAgIFwiZGVmYXVsdFwiLFxuICAgIFwicmVnaXN0ZXJcIixcbiAgICBcImV4cGxpY2l0XCIsXG4gICAgXCJ0eXBlbmFtZVwiLFxuICAgIFwic3dpdGNoXCIsXG4gICAgXCJjb250aW51ZVwiLFxuICAgIFwiaW5saW5lXCIsXG4gICAgXCJyZWFkb25seVwiLFxuICAgIFwiYXNzaWduXCIsXG4gICAgXCJyZWFkd3JpdGVcIixcbiAgICBcInNlbGZcIixcbiAgICBcIkBzeW5jaHJvbml6ZWRcIixcbiAgICBcImlkXCIsXG4gICAgXCJ0eXBlb2ZcIixcbiAgICBcIm5vbmF0b21pY1wiLFxuICAgIFwiSUJPdXRsZXRcIixcbiAgICBcIklCQWN0aW9uXCIsXG4gICAgXCJzdHJvbmdcIixcbiAgICBcIndlYWtcIixcbiAgICBcImNvcHlcIixcbiAgICBcImluXCIsXG4gICAgXCJvdXRcIixcbiAgICBcImlub3V0XCIsXG4gICAgXCJieWNvcHlcIixcbiAgICBcImJ5cmVmXCIsXG4gICAgXCJvbmV3YXlcIixcbiAgICBcIl9fc3Ryb25nXCIsXG4gICAgXCJfX3dlYWtcIixcbiAgICBcIl9fYmxvY2tcIixcbiAgICBcIl9fYXV0b3JlbGVhc2luZ1wiLFxuICAgIFwiQHByaXZhdGVcIixcbiAgICBcIkBwcm90ZWN0ZWRcIixcbiAgICBcIkBwdWJsaWNcIixcbiAgICBcIkB0cnlcIixcbiAgICBcIkBwcm9wZXJ0eVwiLFxuICAgIFwiQGVuZFwiLFxuICAgIFwiQHRocm93XCIsXG4gICAgXCJAY2F0Y2hcIixcbiAgICBcIkBmaW5hbGx5XCIsXG4gICAgXCJAYXV0b3JlbGVhc2Vwb29sXCIsXG4gICAgXCJAc3ludGhlc2l6ZVwiLFxuICAgIFwiQGR5bmFtaWNcIixcbiAgICBcIkBzZWxlY3RvclwiLFxuICAgIFwiQG9wdGlvbmFsXCIsXG4gICAgXCJAcmVxdWlyZWRcIixcbiAgICBcIkBlbmNvZGVcIixcbiAgICBcIkBwYWNrYWdlXCIsXG4gICAgXCJAaW1wb3J0XCIsXG4gICAgXCJAZGVmc1wiLFxuICAgIFwiQGNvbXBhdGliaWxpdHlfYWxpYXNcIixcbiAgICBcIl9fYnJpZGdlXCIsXG4gICAgXCJfX2JyaWRnZV90cmFuc2ZlclwiLFxuICAgIFwiX19icmlkZ2VfcmV0YWluZWRcIixcbiAgICBcIl9fYnJpZGdlX3JldGFpblwiLFxuICAgIFwiX19jb3ZhcmlhbnRcIixcbiAgICBcIl9fY29udHJhdmFyaWFudFwiLFxuICAgIFwiX19raW5kb2ZcIixcbiAgICBcIl9Ob25udWxsXCIsXG4gICAgXCJfTnVsbGFibGVcIixcbiAgICBcIl9OdWxsX3Vuc3BlY2lmaWVkXCIsXG4gICAgXCJfX0ZVTkNUSU9OX19cIixcbiAgICBcIl9fUFJFVFRZX0ZVTkNUSU9OX19cIixcbiAgICBcIl9fYXR0cmlidXRlX19cIixcbiAgICBcImdldHRlclwiLFxuICAgIFwic2V0dGVyXCIsXG4gICAgXCJyZXRhaW5cIixcbiAgICBcInVuc2FmZV91bnJldGFpbmVkXCIsXG4gICAgXCJub25udWxsXCIsXG4gICAgXCJudWxsYWJsZVwiLFxuICAgIFwibnVsbF91bnNwZWNpZmllZFwiLFxuICAgIFwibnVsbF9yZXNldHRhYmxlXCIsXG4gICAgXCJjbGFzc1wiLFxuICAgIFwiaW5zdGFuY2V0eXBlXCIsXG4gICAgXCJOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSXCIsXG4gICAgXCJOU19VTkFWQUlMQUJMRVwiLFxuICAgIFwiTlNfUkVRVUlSRVNfU1VQRVJcIixcbiAgICBcIk5TX1JFVFVSTlNfSU5ORVJfUE9JTlRFUlwiLFxuICAgIFwiTlNfSU5MSU5FXCIsXG4gICAgXCJOU19BVkFJTEFCTEVcIixcbiAgICBcIk5TX0RFUFJFQ0FURURcIixcbiAgICBcIk5TX0VOVU1cIixcbiAgICBcIk5TX09QVElPTlNcIixcbiAgICBcIk5TX1NXSUZUX1VOQVZBSUxBQkxFXCIsXG4gICAgXCJOU19BU1NVTUVfTk9OTlVMTF9CRUdJTlwiLFxuICAgIFwiTlNfQVNTVU1FX05PTk5VTExfRU5EXCIsXG4gICAgXCJOU19SRUZJTkVEX0ZPUl9TV0lGVFwiLFxuICAgIFwiTlNfU1dJRlRfTkFNRVwiLFxuICAgIFwiTlNfU1dJRlRfTk9USFJPV1wiLFxuICAgIFwiTlNfRFVSSU5HXCIsXG4gICAgXCJOU19IQU5ETEVSXCIsXG4gICAgXCJOU19FTkRIQU5ETEVSXCIsXG4gICAgXCJOU19WQUxVRVJFVFVSTlwiLFxuICAgIFwiTlNfVk9JRFJFVFVSTlwiXG4gIF07XG4gIGNvbnN0IExJVEVSQUxTID0gW1xuICAgIFwiZmFsc2VcIixcbiAgICBcInRydWVcIixcbiAgICBcIkZBTFNFXCIsXG4gICAgXCJUUlVFXCIsXG4gICAgXCJuaWxcIixcbiAgICBcIllFU1wiLFxuICAgIFwiTk9cIixcbiAgICBcIk5VTExcIlxuICBdO1xuICBjb25zdCBCVUlMVF9JTlMgPSBbXG4gICAgXCJkaXNwYXRjaF9vbmNlX3RcIixcbiAgICBcImRpc3BhdGNoX3F1ZXVlX3RcIixcbiAgICBcImRpc3BhdGNoX3N5bmNcIixcbiAgICBcImRpc3BhdGNoX2FzeW5jXCIsXG4gICAgXCJkaXNwYXRjaF9vbmNlXCJcbiAgXTtcbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAgXCJ2YXJpYWJsZS5sYW5ndWFnZVwiOiBbXG4gICAgICBcInRoaXNcIixcbiAgICAgIFwic3VwZXJcIlxuICAgIF0sXG4gICAgJHBhdHRlcm46IElERU5USUZJRVJfUkUsXG4gICAga2V5d29yZDogS1dTLFxuICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgIGJ1aWx0X2luOiBCVUlMVF9JTlMsXG4gICAgdHlwZTogVFlQRVNcbiAgfTtcbiAgY29uc3QgQ0xBU1NfS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IElERU5USUZJRVJfUkUsXG4gICAga2V5d29yZDogW1xuICAgICAgXCJAaW50ZXJmYWNlXCIsXG4gICAgICBcIkBjbGFzc1wiLFxuICAgICAgXCJAcHJvdG9jb2xcIixcbiAgICAgIFwiQGltcGxlbWVudGF0aW9uXCJcbiAgICBdXG4gIH07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ09iamVjdGl2ZS1DJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAnbW0nLFxuICAgICAgJ29iamMnLFxuICAgICAgJ29iai1jJyxcbiAgICAgICdvYmotYysrJyxcbiAgICAgICdvYmplY3RpdmUtYysrJ1xuICAgIF0sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6ICc8LycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEFQSV9DTEFTUyxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnQFwiJyxcbiAgICAgICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvI1xccypbYS16XStcXGIvLFxuICAgICAgICBlbmQ6IC8kLyxcbiAgICAgICAga2V5d29yZHM6IHsga2V5d29yZDpcbiAgICAgICAgICAgICdpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSAnXG4gICAgICAgICAgICArICdwcmFnbWEgaWZkZWYgaWZuZGVmIGluY2x1ZGUnIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXFxcXFxuLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHsgY2xhc3NOYW1lOiAnc3RyaW5nJyB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46IC88Lio/Pi8sXG4gICAgICAgICAgICBlbmQ6IC8kLyxcbiAgICAgICAgICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW46ICcoJyArIENMQVNTX0tFWVdPUkRTLmtleXdvcmQuam9pbignfCcpICsgJylcXFxcYicsXG4gICAgICAgIGVuZDogLyhcXHt8JCkvLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogQ0xBU1NfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXC4nICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0aXZlYztcbiIsIi8qXG5MYW5ndWFnZTogUGVybFxuQXV0aG9yOiBQZXRlciBMZW9ub3YgPGdvanBlZ0B5YW5kZXgucnU+XG5XZWJzaXRlOiBodHRwczovL3d3dy5wZXJsLm9yZ1xuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIHBlcmwoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIGNvbnN0IEtFWVdPUkRTID0gW1xuICAgICdhYnMnLFxuICAgICdhY2NlcHQnLFxuICAgICdhbGFybScsXG4gICAgJ2FuZCcsXG4gICAgJ2F0YW4yJyxcbiAgICAnYmluZCcsXG4gICAgJ2Jpbm1vZGUnLFxuICAgICdibGVzcycsXG4gICAgJ2JyZWFrJyxcbiAgICAnY2FsbGVyJyxcbiAgICAnY2hkaXInLFxuICAgICdjaG1vZCcsXG4gICAgJ2Nob21wJyxcbiAgICAnY2hvcCcsXG4gICAgJ2Nob3duJyxcbiAgICAnY2hyJyxcbiAgICAnY2hyb290JyxcbiAgICAnY2xvc2UnLFxuICAgICdjbG9zZWRpcicsXG4gICAgJ2Nvbm5lY3QnLFxuICAgICdjb250aW51ZScsXG4gICAgJ2NvcycsXG4gICAgJ2NyeXB0JyxcbiAgICAnZGJtY2xvc2UnLFxuICAgICdkYm1vcGVuJyxcbiAgICAnZGVmaW5lZCcsXG4gICAgJ2RlbGV0ZScsXG4gICAgJ2RpZScsXG4gICAgJ2RvJyxcbiAgICAnZHVtcCcsXG4gICAgJ2VhY2gnLFxuICAgICdlbHNlJyxcbiAgICAnZWxzaWYnLFxuICAgICdlbmRncmVudCcsXG4gICAgJ2VuZGhvc3RlbnQnLFxuICAgICdlbmRuZXRlbnQnLFxuICAgICdlbmRwcm90b2VudCcsXG4gICAgJ2VuZHB3ZW50JyxcbiAgICAnZW5kc2VydmVudCcsXG4gICAgJ2VvZicsXG4gICAgJ2V2YWwnLFxuICAgICdleGVjJyxcbiAgICAnZXhpc3RzJyxcbiAgICAnZXhpdCcsXG4gICAgJ2V4cCcsXG4gICAgJ2ZjbnRsJyxcbiAgICAnZmlsZW5vJyxcbiAgICAnZmxvY2snLFxuICAgICdmb3InLFxuICAgICdmb3JlYWNoJyxcbiAgICAnZm9yaycsXG4gICAgJ2Zvcm1hdCcsXG4gICAgJ2Zvcm1saW5lJyxcbiAgICAnZ2V0YycsXG4gICAgJ2dldGdyZW50JyxcbiAgICAnZ2V0Z3JnaWQnLFxuICAgICdnZXRncm5hbScsXG4gICAgJ2dldGhvc3RieWFkZHInLFxuICAgICdnZXRob3N0YnluYW1lJyxcbiAgICAnZ2V0aG9zdGVudCcsXG4gICAgJ2dldGxvZ2luJyxcbiAgICAnZ2V0bmV0YnlhZGRyJyxcbiAgICAnZ2V0bmV0YnluYW1lJyxcbiAgICAnZ2V0bmV0ZW50JyxcbiAgICAnZ2V0cGVlcm5hbWUnLFxuICAgICdnZXRwZ3JwJyxcbiAgICAnZ2V0cHJpb3JpdHknLFxuICAgICdnZXRwcm90b2J5bmFtZScsXG4gICAgJ2dldHByb3RvYnludW1iZXInLFxuICAgICdnZXRwcm90b2VudCcsXG4gICAgJ2dldHB3ZW50JyxcbiAgICAnZ2V0cHduYW0nLFxuICAgICdnZXRwd3VpZCcsXG4gICAgJ2dldHNlcnZieW5hbWUnLFxuICAgICdnZXRzZXJ2Ynlwb3J0JyxcbiAgICAnZ2V0c2VydmVudCcsXG4gICAgJ2dldHNvY2tuYW1lJyxcbiAgICAnZ2V0c29ja29wdCcsXG4gICAgJ2dpdmVuJyxcbiAgICAnZ2xvYicsXG4gICAgJ2dtdGltZScsXG4gICAgJ2dvdG8nLFxuICAgICdncmVwJyxcbiAgICAnZ3QnLFxuICAgICdoZXgnLFxuICAgICdpZicsXG4gICAgJ2luZGV4JyxcbiAgICAnaW50JyxcbiAgICAnaW9jdGwnLFxuICAgICdqb2luJyxcbiAgICAna2V5cycsXG4gICAgJ2tpbGwnLFxuICAgICdsYXN0JyxcbiAgICAnbGMnLFxuICAgICdsY2ZpcnN0JyxcbiAgICAnbGVuZ3RoJyxcbiAgICAnbGluaycsXG4gICAgJ2xpc3RlbicsXG4gICAgJ2xvY2FsJyxcbiAgICAnbG9jYWx0aW1lJyxcbiAgICAnbG9nJyxcbiAgICAnbHN0YXQnLFxuICAgICdsdCcsXG4gICAgJ21hJyxcbiAgICAnbWFwJyxcbiAgICAnbWtkaXInLFxuICAgICdtc2djdGwnLFxuICAgICdtc2dnZXQnLFxuICAgICdtc2dyY3YnLFxuICAgICdtc2dzbmQnLFxuICAgICdteScsXG4gICAgJ25lJyxcbiAgICAnbmV4dCcsXG4gICAgJ25vJyxcbiAgICAnbm90JyxcbiAgICAnb2N0JyxcbiAgICAnb3BlbicsXG4gICAgJ29wZW5kaXInLFxuICAgICdvcicsXG4gICAgJ29yZCcsXG4gICAgJ291cicsXG4gICAgJ3BhY2snLFxuICAgICdwYWNrYWdlJyxcbiAgICAncGlwZScsXG4gICAgJ3BvcCcsXG4gICAgJ3BvcycsXG4gICAgJ3ByaW50JyxcbiAgICAncHJpbnRmJyxcbiAgICAncHJvdG90eXBlJyxcbiAgICAncHVzaCcsXG4gICAgJ3F8MCcsXG4gICAgJ3FxJyxcbiAgICAncXVvdGVtZXRhJyxcbiAgICAncXcnLFxuICAgICdxeCcsXG4gICAgJ3JhbmQnLFxuICAgICdyZWFkJyxcbiAgICAncmVhZGRpcicsXG4gICAgJ3JlYWRsaW5lJyxcbiAgICAncmVhZGxpbmsnLFxuICAgICdyZWFkcGlwZScsXG4gICAgJ3JlY3YnLFxuICAgICdyZWRvJyxcbiAgICAncmVmJyxcbiAgICAncmVuYW1lJyxcbiAgICAncmVxdWlyZScsXG4gICAgJ3Jlc2V0JyxcbiAgICAncmV0dXJuJyxcbiAgICAncmV2ZXJzZScsXG4gICAgJ3Jld2luZGRpcicsXG4gICAgJ3JpbmRleCcsXG4gICAgJ3JtZGlyJyxcbiAgICAnc2F5JyxcbiAgICAnc2NhbGFyJyxcbiAgICAnc2VlaycsXG4gICAgJ3NlZWtkaXInLFxuICAgICdzZWxlY3QnLFxuICAgICdzZW1jdGwnLFxuICAgICdzZW1nZXQnLFxuICAgICdzZW1vcCcsXG4gICAgJ3NlbmQnLFxuICAgICdzZXRncmVudCcsXG4gICAgJ3NldGhvc3RlbnQnLFxuICAgICdzZXRuZXRlbnQnLFxuICAgICdzZXRwZ3JwJyxcbiAgICAnc2V0cHJpb3JpdHknLFxuICAgICdzZXRwcm90b2VudCcsXG4gICAgJ3NldHB3ZW50JyxcbiAgICAnc2V0c2VydmVudCcsXG4gICAgJ3NldHNvY2tvcHQnLFxuICAgICdzaGlmdCcsXG4gICAgJ3NobWN0bCcsXG4gICAgJ3NobWdldCcsXG4gICAgJ3NobXJlYWQnLFxuICAgICdzaG13cml0ZScsXG4gICAgJ3NodXRkb3duJyxcbiAgICAnc2luJyxcbiAgICAnc2xlZXAnLFxuICAgICdzb2NrZXQnLFxuICAgICdzb2NrZXRwYWlyJyxcbiAgICAnc29ydCcsXG4gICAgJ3NwbGljZScsXG4gICAgJ3NwbGl0JyxcbiAgICAnc3ByaW50ZicsXG4gICAgJ3NxcnQnLFxuICAgICdzcmFuZCcsXG4gICAgJ3N0YXQnLFxuICAgICdzdGF0ZScsXG4gICAgJ3N0dWR5JyxcbiAgICAnc3ViJyxcbiAgICAnc3Vic3RyJyxcbiAgICAnc3ltbGluaycsXG4gICAgJ3N5c2NhbGwnLFxuICAgICdzeXNvcGVuJyxcbiAgICAnc3lzcmVhZCcsXG4gICAgJ3N5c3NlZWsnLFxuICAgICdzeXN0ZW0nLFxuICAgICdzeXN3cml0ZScsXG4gICAgJ3RlbGwnLFxuICAgICd0ZWxsZGlyJyxcbiAgICAndGllJyxcbiAgICAndGllZCcsXG4gICAgJ3RpbWUnLFxuICAgICd0aW1lcycsXG4gICAgJ3RyJyxcbiAgICAndHJ1bmNhdGUnLFxuICAgICd1YycsXG4gICAgJ3VjZmlyc3QnLFxuICAgICd1bWFzaycsXG4gICAgJ3VuZGVmJyxcbiAgICAndW5sZXNzJyxcbiAgICAndW5saW5rJyxcbiAgICAndW5wYWNrJyxcbiAgICAndW5zaGlmdCcsXG4gICAgJ3VudGllJyxcbiAgICAndW50aWwnLFxuICAgICd1c2UnLFxuICAgICd1dGltZScsXG4gICAgJ3ZhbHVlcycsXG4gICAgJ3ZlYycsXG4gICAgJ3dhaXQnLFxuICAgICd3YWl0cGlkJyxcbiAgICAnd2FudGFycmF5JyxcbiAgICAnd2FybicsXG4gICAgJ3doZW4nLFxuICAgICd3aGlsZScsXG4gICAgJ3dyaXRlJyxcbiAgICAneHwwJyxcbiAgICAneG9yJyxcbiAgICAneXwwJ1xuICBdO1xuXG4gIC8vIGh0dHBzOi8vcGVybGRvYy5wZXJsLm9yZy9wZXJscmUjTW9kaWZpZXJzXG4gIGNvbnN0IFJFR0VYX01PRElGSUVSUyA9IC9bZHVhbHhtc2lwbmdyXXswLDEyfS87IC8vIGFhIGFuZCB4eCBhcmUgdmFsaWQsIG1ha2luZyBtYXggbGVuZ3RoIDEyXG4gIGNvbnN0IFBFUkxfS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IC9bXFx3Ll0rLyxcbiAgICBrZXl3b3JkOiBLRVlXT1JEUy5qb2luKFwiIFwiKVxuICB9O1xuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdbJEBdXFxcXHsnLFxuICAgIGVuZDogJ1xcXFx9JyxcbiAgICBrZXl3b3JkczogUEVSTF9LRVlXT1JEU1xuICB9O1xuICBjb25zdCBNRVRIT0QgPSB7XG4gICAgYmVnaW46IC8tPlxcey8sXG4gICAgZW5kOiAvXFx9L1xuICAgIC8vIGNvbnRhaW5zIGRlZmluZWQgbGF0ZXJcbiAgfTtcbiAgY29uc3QgVkFSID0geyB2YXJpYW50czogW1xuICAgIHsgYmVnaW46IC9cXCRcXGQvIH0sXG4gICAgeyBiZWdpbjogcmVnZXguY29uY2F0KFxuICAgICAgL1skJUBdKFxcXlxcd1xcYnwjXFx3Kyg6OlxcdyspKnxcXHtcXHcrXFx9fFxcdysoOjpcXHcqKSopLyxcbiAgICAgIC8vIG5lZ2F0aXZlIGxvb2stYWhlYWQgdHJpZXMgdG8gYXZvaWQgbWF0Y2hpbmcgcGF0dGVybnMgdGhhdCBhcmUgbm90XG4gICAgICAvLyBQZXJsIGF0IGFsbCBsaWtlICRpZGVudCQsIEBpZGVudEAsIGV0Yy5cbiAgICAgIGAoPyFbQS1aYS16XSkoPyFbQCQlXSlgXG4gICAgKSB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAvWyQlQF1bXlxcc1xcd3tdLyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgXSB9O1xuICBjb25zdCBTVFJJTkdfQ09OVEFJTlMgPSBbXG4gICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgIFNVQlNULFxuICAgIFZBUlxuICBdO1xuICBjb25zdCBSRUdFWF9ERUxJTVMgPSBbXG4gICAgLyEvLFxuICAgIC9cXC8vLFxuICAgIC9cXHwvLFxuICAgIC9cXD8vLFxuICAgIC8nLyxcbiAgICAvXCIvLCAvLyB2YWxpZCBidXQgaW5mcmVxdWVudCBhbmQgd2VpcmRcbiAgICAvIy8gLy8gdmFsaWQgYnV0IGluZnJlcXVlbnQgYW5kIHdlaXJkXG4gIF07XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHByZWZpeFxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IG9wZW5cbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSBjbG9zZVxuICAgKi9cbiAgY29uc3QgUEFJUkVEX0RPVUJMRV9SRSA9IChwcmVmaXgsIG9wZW4sIGNsb3NlID0gJ1xcXFwxJykgPT4ge1xuICAgIGNvbnN0IG1pZGRsZSA9IChjbG9zZSA9PT0gJ1xcXFwxJylcbiAgICAgID8gY2xvc2VcbiAgICAgIDogcmVnZXguY29uY2F0KGNsb3NlLCBvcGVuKTtcbiAgICByZXR1cm4gcmVnZXguY29uY2F0KFxuICAgICAgcmVnZXguY29uY2F0KFwiKD86XCIsIHByZWZpeCwgXCIpXCIpLFxuICAgICAgb3BlbixcbiAgICAgIC8oPzpcXFxcLnxbXlxcXFxcXC9dKSo/LyxcbiAgICAgIG1pZGRsZSxcbiAgICAgIC8oPzpcXFxcLnxbXlxcXFxcXC9dKSo/LyxcbiAgICAgIGNsb3NlLFxuICAgICAgUkVHRVhfTU9ESUZJRVJTXG4gICAgKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gb3BlblxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IGNsb3NlXG4gICAqL1xuICBjb25zdCBQQUlSRURfUkUgPSAocHJlZml4LCBvcGVuLCBjbG9zZSkgPT4ge1xuICAgIHJldHVybiByZWdleC5jb25jYXQoXG4gICAgICByZWdleC5jb25jYXQoXCIoPzpcIiwgcHJlZml4LCBcIilcIiksXG4gICAgICBvcGVuLFxuICAgICAgLyg/OlxcXFwufFteXFxcXFxcL10pKj8vLFxuICAgICAgY2xvc2UsXG4gICAgICBSRUdFWF9NT0RJRklFUlNcbiAgICApO1xuICB9O1xuICBjb25zdCBQRVJMX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgVkFSLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgL149XFx3LyxcbiAgICAgIC89Y3V0LyxcbiAgICAgIHsgZW5kc1dpdGhQYXJlbnQ6IHRydWUgfVxuICAgICksXG4gICAgTUVUSE9ELFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBjb250YWluczogU1RSSU5HX0NPTlRBSU5TLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAncVtxd3hyXT9cXFxccypcXFxcKCcsXG4gICAgICAgICAgZW5kOiAnXFxcXCknLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFxbJyxcbiAgICAgICAgICBlbmQ6ICdcXFxcXScsXG4gICAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ3FbcXd4cl0/XFxcXHMqXFxcXHsnLFxuICAgICAgICAgIGVuZDogJ1xcXFx9JyxcbiAgICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAncVtxd3hyXT9cXFxccypcXFxcfCcsXG4gICAgICAgICAgZW5kOiAnXFxcXHwnLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKjwnLFxuICAgICAgICAgIGVuZDogJz4nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxd1xcXFxzK3EnLFxuICAgICAgICAgIGVuZDogJ3EnLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICAgIGVuZDogJ1xcJycsXG4gICAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICAgIGVuZDogJ1wiJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdgJyxcbiAgICAgICAgICBlbmQ6ICdgJyxcbiAgICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC9cXHtcXHcrXFx9LyxcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnLT9cXFxcdytcXFxccyo9PicsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogJyhcXFxcYjBbMC03X10rKXwoXFxcXGIweFswLTlhLWZBLUZfXSspfChcXFxcYlsxLTldWzAtOV9dKihcXFxcLlswLTlfXSspPyl8WzBfXVxcXFxiJyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAgeyAvLyByZWdleHAgY29udGFpbmVyXG4gICAgICBiZWdpbjogJyhcXFxcL1xcXFwvfCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3xcXFxcYihzcGxpdHxyZXR1cm58cHJpbnR8cmV2ZXJzZXxncmVwKVxcXFxiKVxcXFxzKicsXG4gICAgICBrZXl3b3JkczogJ3NwbGl0IHJldHVybiBwcmludCByZXZlcnNlIGdyZXAnLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIC8vIGFsbG93IG1hdGNoaW5nIGNvbW1vbiBkZWxpbWl0ZXJzXG4gICAgICAgICAgICB7IGJlZ2luOiBQQUlSRURfRE9VQkxFX1JFKFwic3x0cnx5XCIsIHJlZ2V4LmVpdGhlciguLi5SRUdFWF9ERUxJTVMsIHsgY2FwdHVyZTogdHJ1ZSB9KSkgfSxcbiAgICAgICAgICAgIC8vIGFuZCB0aGVuIHBhaXJlZCBkZWxtaXNcbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9ET1VCTEVfUkUoXCJzfHRyfHlcIiwgXCJcXFxcKFwiLCBcIlxcXFwpXCIpIH0sXG4gICAgICAgICAgICB7IGJlZ2luOiBQQUlSRURfRE9VQkxFX1JFKFwic3x0cnx5XCIsIFwiXFxcXFtcIiwgXCJcXFxcXVwiKSB9LFxuICAgICAgICAgICAgeyBiZWdpbjogUEFJUkVEX0RPVUJMRV9SRShcInN8dHJ8eVwiLCBcIlxcXFx7XCIsIFwiXFxcXH1cIikgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVsZXZhbmNlOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIGNvdWxkIGJlIGEgY29tbWVudCBpbiBtYW55IGxhbmd1YWdlcyBzbyBkbyBub3QgY291bnRcbiAgICAgICAgICAgICAgLy8gYXMgcmVsZXZhbnRcbiAgICAgICAgICAgICAgYmVnaW46IC8obXxxcilcXC9cXC8vLFxuICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBwcmVmaXggaXMgb3B0aW9uYWwgd2l0aCAvcmVnZXgvXG4gICAgICAgICAgICB7IGJlZ2luOiBQQUlSRURfUkUoXCIoPzptfHFyKT9cIiwgL1xcLy8sIC9cXC8vKSB9LFxuICAgICAgICAgICAgLy8gYWxsb3cgbWF0Y2hpbmcgY29tbW9uIGRlbGltaXRlcnNcbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9SRShcIm18cXJcIiwgcmVnZXguZWl0aGVyKC4uLlJFR0VYX0RFTElNUywgeyBjYXB0dXJlOiB0cnVlIH0pLCAvXFwxLykgfSxcbiAgICAgICAgICAgIC8vIGFsbG93IGNvbW1vbiBwYWlyZWQgZGVsbWluc1xuICAgICAgICAgICAgeyBiZWdpbjogUEFJUkVEX1JFKFwibXxxclwiLCAvXFwoLywgL1xcKS8pIH0sXG4gICAgICAgICAgICB7IGJlZ2luOiBQQUlSRURfUkUoXCJtfHFyXCIsIC9cXFsvLCAvXFxdLykgfSxcbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9SRShcIm18cXJcIiwgL1xcey8sIC9cXH0vKSB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICBiZWdpbktleXdvcmRzOiAnc3ViJyxcbiAgICAgIGVuZDogJyhcXFxccypcXFxcKC4qP1xcXFwpKT9bO3tdJyxcbiAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICByZWxldmFuY2U6IDUsXG4gICAgICBjb250YWluczogWyBobGpzLlRJVExFX01PREUgXVxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46ICctXFxcXHdcXFxcYicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiBcIl5fX0RBVEFfXyRcIixcbiAgICAgIGVuZDogXCJeX19FTkRfXyRcIixcbiAgICAgIHN1Ykxhbmd1YWdlOiAnbW9qb2xpY2lvdXMnLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiBcIl5AQC4qXCIsXG4gICAgICAgICAgZW5kOiBcIiRcIixcbiAgICAgICAgICBjbGFzc05hbWU6IFwiY29tbWVudFwiXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gUEVSTF9ERUZBVUxUX0NPTlRBSU5TO1xuICBNRVRIT0QuY29udGFpbnMgPSBQRVJMX0RFRkFVTFRfQ09OVEFJTlM7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUGVybCcsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ3BsJyxcbiAgICAgICdwbSdcbiAgICBdLFxuICAgIGtleXdvcmRzOiBQRVJMX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBQRVJMX0RFRkFVTFRfQ09OVEFJTlNcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwZXJsO1xuIiwiLypcbkxhbmd1YWdlOiBQSFAgVGVtcGxhdGVcblJlcXVpcmVzOiB4bWwuanMsIHBocC5qc1xuQXV0aG9yOiBKb3NoIEdvZWJlbCA8aGVsbG9Aam9zaGdvZWJlbC5jb20+XG5XZWJzaXRlOiBodHRwczovL3d3dy5waHAubmV0XG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG5mdW5jdGlvbiBwaHBUZW1wbGF0ZShobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJQSFAgdGVtcGxhdGVcIixcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC88XFw/KHBocHw9KT8vLFxuICAgICAgICBlbmQ6IC9cXD8+LyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdwaHAnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIHBocCBjbG9zaW5nIHRhZyA/PiB0byBjbG9zZSB0aGUgUEhQIGJsb2NrIHdoZW5cbiAgICAgICAgICAvLyBpbnNpZGUgYW55IG9mIHRoZSBmb2xsb3dpbmcgYmxvY2tzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnL1xcXFwqJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFwqLycsXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ2JcIicsXG4gICAgICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ2JcXCcnLFxuICAgICAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgICAgIHNraXA6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtcbiAgICAgICAgICAgIGlsbGVnYWw6IG51bGwsXG4gICAgICAgICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgICAgICAgICBjb250YWluczogbnVsbCxcbiAgICAgICAgICAgIHNraXA6IHRydWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge1xuICAgICAgICAgICAgaWxsZWdhbDogbnVsbCxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBudWxsLFxuICAgICAgICAgICAgc2tpcDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGhwVGVtcGxhdGU7XG4iLCIvKlxuTGFuZ3VhZ2U6IFBIUFxuQXV0aG9yOiBWaWN0b3IgS2FyYW16aW4gPFZpY3Rvci5LYXJhbXppbkBlbnRlcnJhLWluYy5jb20+XG5Db250cmlidXRvcnM6IEV2Z2VueSBTdGVwYW5pc2NoZXYgPGltYm9sa0BnbWFpbC5jb20+LCBJdmFuIFNhZ2FsYWV2IDxtYW5pYWNAc29mdHdhcmVtYW5pYWNzLm9yZz5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnBocC5uZXRcbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbi8qKlxuICogQHBhcmFtIHtITEpTQXBpfSBobGpzXG4gKiBAcmV0dXJucyB7TGFuZ3VhZ2VEZXRhaWx9XG4gKiAqL1xuZnVuY3Rpb24gcGhwKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICAvLyBuZWdhdGl2ZSBsb29rLWFoZWFkIHRyaWVzIHRvIGF2b2lkIG1hdGNoaW5nIHBhdHRlcm5zIHRoYXQgYXJlIG5vdFxuICAvLyBQZXJsIGF0IGFsbCBsaWtlICRpZGVudCQsIEBpZGVudEAsIGV0Yy5cbiAgY29uc3QgTk9UX1BFUkxfRVRDID0gLyg/IVtBLVphLXowLTldKSg/IVskXSkvO1xuICBjb25zdCBJREVOVF9SRSA9IHJlZ2V4LmNvbmNhdChcbiAgICAvW2EtekEtWl9cXHg3Zi1cXHhmZl1bYS16QS1aMC05X1xceDdmLVxceGZmXSovLFxuICAgIE5PVF9QRVJMX0VUQyk7XG4gIC8vIFdpbGwgbm90IGRldGVjdCBjYW1lbENhc2UgY2xhc3Nlc1xuICBjb25zdCBQQVNDQUxfQ0FTRV9DTEFTU19OQU1FX1JFID0gcmVnZXguY29uY2F0KFxuICAgIC8oXFxcXD9bQS1aXVthLXowLTlfXFx4N2YtXFx4ZmZdK3xcXFxcP1tBLVpdKyg/PVtBLVpdW2EtejAtOV9cXHg3Zi1cXHhmZl0pKXsxLH0vLFxuICAgIE5PVF9QRVJMX0VUQyk7XG4gIGNvbnN0IFZBUklBQkxFID0ge1xuICAgIHNjb3BlOiAndmFyaWFibGUnLFxuICAgIG1hdGNoOiAnXFxcXCQrJyArIElERU5UX1JFLFxuICB9O1xuICBjb25zdCBQUkVQUk9DRVNTT1IgPSB7XG4gICAgc2NvcGU6ICdtZXRhJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogLzxcXD9waHAvLCByZWxldmFuY2U6IDEwIH0sIC8vIGJvb3N0IGZvciBvYnZpb3VzIFBIUFxuICAgICAgeyBiZWdpbjogLzxcXD89LyB9LFxuICAgICAgLy8gbGVzcyByZWxldmFudCBwZXIgUFNSLTEgd2hpY2ggc2F5cyBub3QgdG8gdXNlIHNob3J0LXRhZ3NcbiAgICAgIHsgYmVnaW46IC88XFw/LywgcmVsZXZhbmNlOiAwLjEgfSxcbiAgICAgIHsgYmVnaW46IC9cXD8+LyB9IC8vIGVuZCBwaHAgdGFnXG4gICAgXVxuICB9O1xuICBjb25zdCBTVUJTVCA9IHtcbiAgICBzY29wZTogJ3N1YnN0JyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogL1xcJFxcdysvIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFx7XFwkLyxcbiAgICAgICAgZW5kOiAvXFx9L1xuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgU0lOR0xFX1FVT1RFRCA9IGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHsgaWxsZWdhbDogbnVsbCwgfSk7XG4gIGNvbnN0IERPVUJMRV9RVU9URUQgPSBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge1xuICAgIGlsbGVnYWw6IG51bGwsXG4gICAgY29udGFpbnM6IGhsanMuUVVPVEVfU1RSSU5HX01PREUuY29udGFpbnMuY29uY2F0KFNVQlNUKSxcbiAgfSk7XG4gIGNvbnN0IEhFUkVET0MgPSBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHtcbiAgICBiZWdpbjogLzw8PFsgXFx0XSooXFx3KylcXG4vLFxuICAgIGVuZDogL1sgXFx0XSooXFx3KylcXGIvLFxuICAgIGNvbnRhaW5zOiBobGpzLlFVT1RFX1NUUklOR19NT0RFLmNvbnRhaW5zLmNvbmNhdChTVUJTVCksXG4gIH0pO1xuICAvLyBsaXN0IG9mIHZhbGlkIHdoaXRlc3BhY2VzIGJlY2F1c2Ugbm9uLWJyZWFraW5nIHNwYWNlIG1pZ2h0IGJlIHBhcnQgb2YgYSBJREVOVF9SRVxuICBjb25zdCBXSElURVNQQUNFID0gJ1sgXFx0XFxuXSc7XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBzY29wZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIERPVUJMRV9RVU9URUQsXG4gICAgICBTSU5HTEVfUVVPVEVELFxuICAgICAgSEVSRURPQ1xuICAgIF1cbiAgfTtcbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIHNjb3BlOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogYFxcXFxiMFtiQl1bMDFdKyg/Ol9bMDFdKykqXFxcXGJgIH0sIC8vIEJpbmFyeSB3LyB1bmRlcnNjb3JlIHN1cHBvcnRcbiAgICAgIHsgYmVnaW46IGBcXFxcYjBbb09dWzAtN10rKD86X1swLTddKykqXFxcXGJgIH0sIC8vIE9jdGFscyB3LyB1bmRlcnNjb3JlIHN1cHBvcnRcbiAgICAgIHsgYmVnaW46IGBcXFxcYjBbeFhdW1xcXFxkYS1mQS1GXSsoPzpfW1xcXFxkYS1mQS1GXSspKlxcXFxiYCB9LCAvLyBIZXggdy8gdW5kZXJzY29yZSBzdXBwb3J0XG4gICAgICAvLyBEZWNpbWFscyB3LyB1bmRlcnNjb3JlIHN1cHBvcnQsIHdpdGggb3B0aW9uYWwgZnJhZ21lbnRzIGFuZCBzY2llbnRpZmljIGV4cG9uZW50IChlKSBzdWZmaXguXG4gICAgICB7IGJlZ2luOiBgKD86XFxcXGJcXFxcZCsoPzpfXFxcXGQrKSooXFxcXC4oPzpcXFxcZCsoPzpfXFxcXGQrKSopKT98XFxcXEJcXFxcLlxcXFxkKykoPzpbZUVdWystXT9cXFxcZCspP2AgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IExJVEVSQUxTID0gW1xuICAgIFwiZmFsc2VcIixcbiAgICBcIm51bGxcIixcbiAgICBcInRydWVcIlxuICBdO1xuICBjb25zdCBLV1MgPSBbXG4gICAgLy8gTWFnaWMgY29uc3RhbnRzOlxuICAgIC8vIDxodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS5jb25zdGFudHMucHJlZGVmaW5lZC5waHA+XG4gICAgXCJfX0NMQVNTX19cIixcbiAgICBcIl9fRElSX19cIixcbiAgICBcIl9fRklMRV9fXCIsXG4gICAgXCJfX0ZVTkNUSU9OX19cIixcbiAgICBcIl9fQ09NUElMRVJfSEFMVF9PRkZTRVRfX1wiLFxuICAgIFwiX19MSU5FX19cIixcbiAgICBcIl9fTUVUSE9EX19cIixcbiAgICBcIl9fTkFNRVNQQUNFX19cIixcbiAgICBcIl9fVFJBSVRfX1wiLFxuICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9vayBsaWtlIGxhbmd1YWdlIGNvbnN0cnVjdCBvciBsYW5ndWFnZSBjb25zdHJ1Y3QgdGhhdCBsb29rIGxpa2UgZnVuY3Rpb246XG4gICAgLy8gTGlzdCBvZiBrZXl3b3JkcyB0aGF0IG1heSBub3QgcmVxdWlyZSBwYXJlbnRoZXNpc1xuICAgIFwiZGllXCIsXG4gICAgXCJlY2hvXCIsXG4gICAgXCJleGl0XCIsXG4gICAgXCJpbmNsdWRlXCIsXG4gICAgXCJpbmNsdWRlX29uY2VcIixcbiAgICBcInByaW50XCIsXG4gICAgXCJyZXF1aXJlXCIsXG4gICAgXCJyZXF1aXJlX29uY2VcIixcbiAgICAvLyBUaGVzZSBhcmUgbm90IGxhbmd1YWdlIGNvbnN0cnVjdCAoZnVuY3Rpb24pIGJ1dCBvcGVyYXRlIG9uIHRoZSBjdXJyZW50bHktZXhlY3V0aW5nIGZ1bmN0aW9uIGFuZCBjYW4gYWNjZXNzIHRoZSBjdXJyZW50IHN5bWJvbCB0YWJsZVxuICAgIC8vICdjb21wYWN0IGV4dHJhY3QgZnVuY19nZXRfYXJnIGZ1bmNfZ2V0X2FyZ3MgZnVuY19udW1fYXJncyBnZXRfY2FsbGVkX2NsYXNzIGdldF9wYXJlbnRfY2xhc3MgJyArXG4gICAgLy8gT3RoZXIga2V5d29yZHM6XG4gICAgLy8gPGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLnBocD5cbiAgICAvLyA8aHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMudHlwZS1qdWdnbGluZy5waHA+XG4gICAgXCJhcnJheVwiLFxuICAgIFwiYWJzdHJhY3RcIixcbiAgICBcImFuZFwiLFxuICAgIFwiYXNcIixcbiAgICBcImJpbmFyeVwiLFxuICAgIFwiYm9vbFwiLFxuICAgIFwiYm9vbGVhblwiLFxuICAgIFwiYnJlYWtcIixcbiAgICBcImNhbGxhYmxlXCIsXG4gICAgXCJjYXNlXCIsXG4gICAgXCJjYXRjaFwiLFxuICAgIFwiY2xhc3NcIixcbiAgICBcImNsb25lXCIsXG4gICAgXCJjb25zdFwiLFxuICAgIFwiY29udGludWVcIixcbiAgICBcImRlY2xhcmVcIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImRvXCIsXG4gICAgXCJkb3VibGVcIixcbiAgICBcImVsc2VcIixcbiAgICBcImVsc2VpZlwiLFxuICAgIFwiZW1wdHlcIixcbiAgICBcImVuZGRlY2xhcmVcIixcbiAgICBcImVuZGZvclwiLFxuICAgIFwiZW5kZm9yZWFjaFwiLFxuICAgIFwiZW5kaWZcIixcbiAgICBcImVuZHN3aXRjaFwiLFxuICAgIFwiZW5kd2hpbGVcIixcbiAgICBcImVudW1cIixcbiAgICBcImV2YWxcIixcbiAgICBcImV4dGVuZHNcIixcbiAgICBcImZpbmFsXCIsXG4gICAgXCJmaW5hbGx5XCIsXG4gICAgXCJmbG9hdFwiLFxuICAgIFwiZm9yXCIsXG4gICAgXCJmb3JlYWNoXCIsXG4gICAgXCJmcm9tXCIsXG4gICAgXCJnbG9iYWxcIixcbiAgICBcImdvdG9cIixcbiAgICBcImlmXCIsXG4gICAgXCJpbXBsZW1lbnRzXCIsXG4gICAgXCJpbnN0YW5jZW9mXCIsXG4gICAgXCJpbnN0ZWFkb2ZcIixcbiAgICBcImludFwiLFxuICAgIFwiaW50ZWdlclwiLFxuICAgIFwiaW50ZXJmYWNlXCIsXG4gICAgXCJpc3NldFwiLFxuICAgIFwiaXRlcmFibGVcIixcbiAgICBcImxpc3RcIixcbiAgICBcIm1hdGNofDBcIixcbiAgICBcIm1peGVkXCIsXG4gICAgXCJuZXdcIixcbiAgICBcIm5ldmVyXCIsXG4gICAgXCJvYmplY3RcIixcbiAgICBcIm9yXCIsXG4gICAgXCJwcml2YXRlXCIsXG4gICAgXCJwcm90ZWN0ZWRcIixcbiAgICBcInB1YmxpY1wiLFxuICAgIFwicmVhZG9ubHlcIixcbiAgICBcInJlYWxcIixcbiAgICBcInJldHVyblwiLFxuICAgIFwic3RyaW5nXCIsXG4gICAgXCJzd2l0Y2hcIixcbiAgICBcInRocm93XCIsXG4gICAgXCJ0cmFpdFwiLFxuICAgIFwidHJ5XCIsXG4gICAgXCJ1bnNldFwiLFxuICAgIFwidXNlXCIsXG4gICAgXCJ2YXJcIixcbiAgICBcInZvaWRcIixcbiAgICBcIndoaWxlXCIsXG4gICAgXCJ4b3JcIixcbiAgICBcInlpZWxkXCJcbiAgXTtcblxuICBjb25zdCBCVUlMVF9JTlMgPSBbXG4gICAgLy8gU3RhbmRhcmQgUEhQIGxpYnJhcnk6XG4gICAgLy8gPGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Jvb2suc3BsLnBocD5cbiAgICBcIkVycm9yfDBcIixcbiAgICBcIkFwcGVuZEl0ZXJhdG9yXCIsXG4gICAgXCJBcmd1bWVudENvdW50RXJyb3JcIixcbiAgICBcIkFyaXRobWV0aWNFcnJvclwiLFxuICAgIFwiQXJyYXlJdGVyYXRvclwiLFxuICAgIFwiQXJyYXlPYmplY3RcIixcbiAgICBcIkFzc2VydGlvbkVycm9yXCIsXG4gICAgXCJCYWRGdW5jdGlvbkNhbGxFeGNlcHRpb25cIixcbiAgICBcIkJhZE1ldGhvZENhbGxFeGNlcHRpb25cIixcbiAgICBcIkNhY2hpbmdJdGVyYXRvclwiLFxuICAgIFwiQ2FsbGJhY2tGaWx0ZXJJdGVyYXRvclwiLFxuICAgIFwiQ29tcGlsZUVycm9yXCIsXG4gICAgXCJDb3VudGFibGVcIixcbiAgICBcIkRpcmVjdG9yeUl0ZXJhdG9yXCIsXG4gICAgXCJEaXZpc2lvbkJ5WmVyb0Vycm9yXCIsXG4gICAgXCJEb21haW5FeGNlcHRpb25cIixcbiAgICBcIkVtcHR5SXRlcmF0b3JcIixcbiAgICBcIkVycm9yRXhjZXB0aW9uXCIsXG4gICAgXCJFeGNlcHRpb25cIixcbiAgICBcIkZpbGVzeXN0ZW1JdGVyYXRvclwiLFxuICAgIFwiRmlsdGVySXRlcmF0b3JcIixcbiAgICBcIkdsb2JJdGVyYXRvclwiLFxuICAgIFwiSW5maW5pdGVJdGVyYXRvclwiLFxuICAgIFwiSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uXCIsXG4gICAgXCJJdGVyYXRvckl0ZXJhdG9yXCIsXG4gICAgXCJMZW5ndGhFeGNlcHRpb25cIixcbiAgICBcIkxpbWl0SXRlcmF0b3JcIixcbiAgICBcIkxvZ2ljRXhjZXB0aW9uXCIsXG4gICAgXCJNdWx0aXBsZUl0ZXJhdG9yXCIsXG4gICAgXCJOb1Jld2luZEl0ZXJhdG9yXCIsXG4gICAgXCJPdXRPZkJvdW5kc0V4Y2VwdGlvblwiLFxuICAgIFwiT3V0T2ZSYW5nZUV4Y2VwdGlvblwiLFxuICAgIFwiT3V0ZXJJdGVyYXRvclwiLFxuICAgIFwiT3ZlcmZsb3dFeGNlcHRpb25cIixcbiAgICBcIlBhcmVudEl0ZXJhdG9yXCIsXG4gICAgXCJQYXJzZUVycm9yXCIsXG4gICAgXCJSYW5nZUV4Y2VwdGlvblwiLFxuICAgIFwiUmVjdXJzaXZlQXJyYXlJdGVyYXRvclwiLFxuICAgIFwiUmVjdXJzaXZlQ2FjaGluZ0l0ZXJhdG9yXCIsXG4gICAgXCJSZWN1cnNpdmVDYWxsYmFja0ZpbHRlckl0ZXJhdG9yXCIsXG4gICAgXCJSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvclwiLFxuICAgIFwiUmVjdXJzaXZlRmlsdGVySXRlcmF0b3JcIixcbiAgICBcIlJlY3Vyc2l2ZUl0ZXJhdG9yXCIsXG4gICAgXCJSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yXCIsXG4gICAgXCJSZWN1cnNpdmVSZWdleEl0ZXJhdG9yXCIsXG4gICAgXCJSZWN1cnNpdmVUcmVlSXRlcmF0b3JcIixcbiAgICBcIlJlZ2V4SXRlcmF0b3JcIixcbiAgICBcIlJ1bnRpbWVFeGNlcHRpb25cIixcbiAgICBcIlNlZWthYmxlSXRlcmF0b3JcIixcbiAgICBcIlNwbERvdWJseUxpbmtlZExpc3RcIixcbiAgICBcIlNwbEZpbGVJbmZvXCIsXG4gICAgXCJTcGxGaWxlT2JqZWN0XCIsXG4gICAgXCJTcGxGaXhlZEFycmF5XCIsXG4gICAgXCJTcGxIZWFwXCIsXG4gICAgXCJTcGxNYXhIZWFwXCIsXG4gICAgXCJTcGxNaW5IZWFwXCIsXG4gICAgXCJTcGxPYmplY3RTdG9yYWdlXCIsXG4gICAgXCJTcGxPYnNlcnZlclwiLFxuICAgIFwiU3BsUHJpb3JpdHlRdWV1ZVwiLFxuICAgIFwiU3BsUXVldWVcIixcbiAgICBcIlNwbFN0YWNrXCIsXG4gICAgXCJTcGxTdWJqZWN0XCIsXG4gICAgXCJTcGxUZW1wRmlsZU9iamVjdFwiLFxuICAgIFwiVHlwZUVycm9yXCIsXG4gICAgXCJVbmRlcmZsb3dFeGNlcHRpb25cIixcbiAgICBcIlVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvblwiLFxuICAgIFwiVW5oYW5kbGVkTWF0Y2hFcnJvclwiLFxuICAgIC8vIFJlc2VydmVkIGludGVyZmFjZXM6XG4gICAgLy8gPGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLmludGVyZmFjZXMucGhwPlxuICAgIFwiQXJyYXlBY2Nlc3NcIixcbiAgICBcIkJhY2tlZEVudW1cIixcbiAgICBcIkNsb3N1cmVcIixcbiAgICBcIkZpYmVyXCIsXG4gICAgXCJHZW5lcmF0b3JcIixcbiAgICBcIkl0ZXJhdG9yXCIsXG4gICAgXCJJdGVyYXRvckFnZ3JlZ2F0ZVwiLFxuICAgIFwiU2VyaWFsaXphYmxlXCIsXG4gICAgXCJTdHJpbmdhYmxlXCIsXG4gICAgXCJUaHJvd2FibGVcIixcbiAgICBcIlRyYXZlcnNhYmxlXCIsXG4gICAgXCJVbml0RW51bVwiLFxuICAgIFwiV2Vha1JlZmVyZW5jZVwiLFxuICAgIFwiV2Vha01hcFwiLFxuICAgIC8vIFJlc2VydmVkIGNsYXNzZXM6XG4gICAgLy8gPGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLmNsYXNzZXMucGhwPlxuICAgIFwiRGlyZWN0b3J5XCIsXG4gICAgXCJfX1BIUF9JbmNvbXBsZXRlX0NsYXNzXCIsXG4gICAgXCJwYXJlbnRcIixcbiAgICBcInBocF91c2VyX2ZpbHRlclwiLFxuICAgIFwic2VsZlwiLFxuICAgIFwic3RhdGljXCIsXG4gICAgXCJzdGRDbGFzc1wiXG4gIF07XG5cbiAgLyoqIER1YWwtY2FzZSBrZXl3b3Jkc1xuICAgKlxuICAgKiBbXCJ0aGVuXCIsXCJGSUxFXCJdID0+XG4gICAqICAgICBbXCJ0aGVuXCIsIFwiVEhFTlwiLCBcIkZJTEVcIiwgXCJmaWxlXCJdXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGl0ZW1zICovXG4gIGNvbnN0IGR1YWxDYXNlID0gKGl0ZW1zKSA9PiB7XG4gICAgLyoqIEB0eXBlIHN0cmluZ1tdICovXG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgaWYgKGl0ZW0udG9Mb3dlckNhc2UoKSA9PT0gaXRlbSkge1xuICAgICAgICByZXN1bHQucHVzaChpdGVtLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXRlbS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6IEtXUyxcbiAgICBsaXRlcmFsOiBkdWFsQ2FzZShMSVRFUkFMUyksXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOUyxcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gaXRlbXMgKi9cbiAgY29uc3Qgbm9ybWFsaXplS2V5d29yZHMgPSAoaXRlbXMpID0+IHtcbiAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIGl0ZW0ucmVwbGFjZSgvXFx8XFxkKyQvLCBcIlwiKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBDT05TVFJVQ1RPUl9DQUxMID0geyB2YXJpYW50czogW1xuICAgIHtcbiAgICAgIG1hdGNoOiBbXG4gICAgICAgIC9uZXcvLFxuICAgICAgICByZWdleC5jb25jYXQoV0hJVEVTUEFDRSwgXCIrXCIpLFxuICAgICAgICAvLyB0byBwcmV2ZW50IGJ1aWx0IGlucyBmcm9tIGJlaW5nIGNvbmZ1c2VkIGFzIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBjYWxsXG4gICAgICAgIHJlZ2V4LmNvbmNhdChcIig/IVwiLCBub3JtYWxpemVLZXl3b3JkcyhCVUlMVF9JTlMpLmpvaW4oXCJcXFxcYnxcIiksIFwiXFxcXGIpXCIpLFxuICAgICAgICBQQVNDQUxfQ0FTRV9DTEFTU19OQU1FX1JFLFxuICAgICAgXSxcbiAgICAgIHNjb3BlOiB7XG4gICAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgICA0OiBcInRpdGxlLmNsYXNzXCIsXG4gICAgICB9LFxuICAgIH1cbiAgXSB9O1xuXG4gIGNvbnN0IENPTlNUQU5UX1JFRkVSRU5DRSA9IHJlZ2V4LmNvbmNhdChJREVOVF9SRSwgXCJcXFxcYig/IVxcXFwoKVwiKTtcblxuICBjb25zdCBMRUZUX0FORF9SSUdIVF9TSURFX09GX0RPVUJMRV9DT0xPTiA9IHsgdmFyaWFudHM6IFtcbiAgICB7XG4gICAgICBtYXRjaDogW1xuICAgICAgICByZWdleC5jb25jYXQoXG4gICAgICAgICAgLzo6LyxcbiAgICAgICAgICByZWdleC5sb29rYWhlYWQoLyg/IWNsYXNzXFxiKS8pXG4gICAgICAgICksXG4gICAgICAgIENPTlNUQU5UX1JFRkVSRU5DRSxcbiAgICAgIF0sXG4gICAgICBzY29wZTogeyAyOiBcInZhcmlhYmxlLmNvbnN0YW50XCIsIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBtYXRjaDogW1xuICAgICAgICAvOjovLFxuICAgICAgICAvY2xhc3MvLFxuICAgICAgXSxcbiAgICAgIHNjb3BlOiB7IDI6IFwidmFyaWFibGUubGFuZ3VhZ2VcIiwgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG1hdGNoOiBbXG4gICAgICAgIFBBU0NBTF9DQVNFX0NMQVNTX05BTUVfUkUsXG4gICAgICAgIHJlZ2V4LmNvbmNhdChcbiAgICAgICAgICAvOjovLFxuICAgICAgICAgIHJlZ2V4Lmxvb2thaGVhZCgvKD8hY2xhc3NcXGIpLylcbiAgICAgICAgKSxcbiAgICAgICAgQ09OU1RBTlRfUkVGRVJFTkNFLFxuICAgICAgXSxcbiAgICAgIHNjb3BlOiB7XG4gICAgICAgIDE6IFwidGl0bGUuY2xhc3NcIixcbiAgICAgICAgMzogXCJ2YXJpYWJsZS5jb25zdGFudFwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG1hdGNoOiBbXG4gICAgICAgIFBBU0NBTF9DQVNFX0NMQVNTX05BTUVfUkUsXG4gICAgICAgIHJlZ2V4LmNvbmNhdChcbiAgICAgICAgICBcIjo6XCIsXG4gICAgICAgICAgcmVnZXgubG9va2FoZWFkKC8oPyFjbGFzc1xcYikvKVxuICAgICAgICApLFxuICAgICAgXSxcbiAgICAgIHNjb3BlOiB7IDE6IFwidGl0bGUuY2xhc3NcIiwgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG1hdGNoOiBbXG4gICAgICAgIFBBU0NBTF9DQVNFX0NMQVNTX05BTUVfUkUsXG4gICAgICAgIC86Oi8sXG4gICAgICAgIC9jbGFzcy8sXG4gICAgICBdLFxuICAgICAgc2NvcGU6IHtcbiAgICAgICAgMTogXCJ0aXRsZS5jbGFzc1wiLFxuICAgICAgICAzOiBcInZhcmlhYmxlLmxhbmd1YWdlXCIsXG4gICAgICB9LFxuICAgIH1cbiAgXSB9O1xuXG4gIGNvbnN0IE5BTUVEX0FSR1VNRU5UID0ge1xuICAgIHNjb3BlOiAnYXR0cicsXG4gICAgbWF0Y2g6IHJlZ2V4LmNvbmNhdChJREVOVF9SRSwgcmVnZXgubG9va2FoZWFkKCc6JyksIHJlZ2V4Lmxvb2thaGVhZCgvKD8hOjopLykpLFxuICB9O1xuICBjb25zdCBQQVJBTVNfTU9ERSA9IHtcbiAgICByZWxldmFuY2U6IDAsXG4gICAgYmVnaW46IC9cXCgvLFxuICAgIGVuZDogL1xcKS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBOQU1FRF9BUkdVTUVOVCxcbiAgICAgIFZBUklBQkxFLFxuICAgICAgTEVGVF9BTkRfUklHSFRfU0lERV9PRl9ET1VCTEVfQ09MT04sXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgU1RSSU5HLFxuICAgICAgTlVNQkVSLFxuICAgICAgQ09OU1RSVUNUT1JfQ0FMTCxcbiAgICBdLFxuICB9O1xuICBjb25zdCBGVU5DVElPTl9JTlZPS0UgPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIG1hdGNoOiBbXG4gICAgICAvXFxiLyxcbiAgICAgIC8vIHRvIHByZXZlbnQga2V5d29yZHMgZnJvbSBiZWluZyBjb25mdXNlZCBhcyB0aGUgZnVuY3Rpb24gdGl0bGVcbiAgICAgIHJlZ2V4LmNvbmNhdChcIig/IWZuXFxcXGJ8ZnVuY3Rpb25cXFxcYnxcIiwgbm9ybWFsaXplS2V5d29yZHMoS1dTKS5qb2luKFwiXFxcXGJ8XCIpLCBcInxcIiwgbm9ybWFsaXplS2V5d29yZHMoQlVJTFRfSU5TKS5qb2luKFwiXFxcXGJ8XCIpLCBcIlxcXFxiKVwiKSxcbiAgICAgIElERU5UX1JFLFxuICAgICAgcmVnZXguY29uY2F0KFdISVRFU1BBQ0UsIFwiKlwiKSxcbiAgICAgIHJlZ2V4Lmxvb2thaGVhZCgvKD89XFwoKS8pXG4gICAgXSxcbiAgICBzY29wZTogeyAzOiBcInRpdGxlLmZ1bmN0aW9uLmludm9rZVwiLCB9LFxuICAgIGNvbnRhaW5zOiBbIFBBUkFNU19NT0RFIF1cbiAgfTtcbiAgUEFSQU1TX01PREUuY29udGFpbnMucHVzaChGVU5DVElPTl9JTlZPS0UpO1xuXG4gIGNvbnN0IEFUVFJJQlVURV9DT05UQUlOUyA9IFtcbiAgICBOQU1FRF9BUkdVTUVOVCxcbiAgICBMRUZUX0FORF9SSUdIVF9TSURFX09GX0RPVUJMRV9DT0xPTixcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIFNUUklORyxcbiAgICBOVU1CRVIsXG4gICAgQ09OU1RSVUNUT1JfQ0FMTCxcbiAgXTtcblxuICBjb25zdCBBVFRSSUJVVEVTID0ge1xuICAgIGJlZ2luOiByZWdleC5jb25jYXQoLyNcXFtcXHMqLywgUEFTQ0FMX0NBU0VfQ0xBU1NfTkFNRV9SRSksXG4gICAgYmVnaW5TY29wZTogXCJtZXRhXCIsXG4gICAgZW5kOiAvXS8sXG4gICAgZW5kU2NvcGU6IFwibWV0YVwiLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICAgIGtleXdvcmQ6IFtcbiAgICAgICAgJ25ldycsXG4gICAgICAgICdhcnJheScsXG4gICAgICBdXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcWy8sXG4gICAgICAgIGVuZDogL10vLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgICAgICAgIGtleXdvcmQ6IFtcbiAgICAgICAgICAgICduZXcnLFxuICAgICAgICAgICAgJ2FycmF5JyxcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgIC4uLkFUVFJJQlVURV9DT05UQUlOUyxcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC4uLkFUVFJJQlVURV9DT05UQUlOUyxcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6ICdtZXRhJyxcbiAgICAgICAgbWF0Y2g6IFBBU0NBTF9DQVNFX0NMQVNTX05BTUVfUkVcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiBmYWxzZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEFUVFJJQlVURVMsXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCcvLycsICckJyksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAgeyBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiAnZG9jdGFnJyxcbiAgICAgICAgICAgIG1hdGNoOiAnQFtBLVphLXpdKydcbiAgICAgICAgICB9XG4gICAgICAgIF0gfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IC9fX2hhbHRfY29tcGlsZXJcXChcXCk7LyxcbiAgICAgICAga2V5d29yZHM6ICdfX2hhbHRfY29tcGlsZXInLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBzY29wZTogXCJjb21tZW50XCIsXG4gICAgICAgICAgZW5kOiBobGpzLk1BVENIX05PVEhJTkdfUkUsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWF0Y2g6IC9cXD8+LyxcbiAgICAgICAgICAgICAgc2NvcGU6IFwibWV0YVwiLFxuICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAge1xuICAgICAgICBzY29wZTogJ3ZhcmlhYmxlLmxhbmd1YWdlJyxcbiAgICAgICAgbWF0Y2g6IC9cXCR0aGlzXFxiL1xuICAgICAgfSxcbiAgICAgIFZBUklBQkxFLFxuICAgICAgRlVOQ1RJT05fSU5WT0tFLFxuICAgICAgTEVGVF9BTkRfUklHSFRfU0lERV9PRl9ET1VCTEVfQ09MT04sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL2NvbnN0LyxcbiAgICAgICAgICAvXFxzLyxcbiAgICAgICAgICBJREVOVF9SRSxcbiAgICAgICAgXSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInZhcmlhYmxlLmNvbnN0YW50XCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgQ09OU1RSVUNUT1JfQ0FMTCxcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6ICdmdW5jdGlvbicsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ZuIGZ1bmN0aW9uJyxcbiAgICAgICAgZW5kOiAvWzt7XS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICdbJCVcXFxcW10nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgYmVnaW5LZXl3b3JkczogJ3VzZScsIH0sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICc9PicsIC8vIE5vIG1hcmt1cCwganVzdCBhIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY29wZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgICAgICBMRUZUX0FORF9SSUdIVF9TSURFX09GX0RPVUJMRV9DT0xPTixcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgICAgICBOVU1CRVJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzY29wZTogJ2NsYXNzJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiBcImVudW1cIixcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bKCRcIl0vXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiBcImNsYXNzIGludGVyZmFjZSB0cmFpdFwiLFxuICAgICAgICAgICAgaWxsZWdhbDogL1s6KCRcIl0vXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGVuZDogL1xcey8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJyB9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBib3RoIHVzZSBhbmQgbmFtZXNwYWNlIHN0aWxsIHVzZSBcIm9sZCBzdHlsZVwiIHJ1bGVzICh2cyBtdWx0aS1tYXRjaClcbiAgICAgIC8vIGJlY2F1c2UgdGhlIG5hbWVzcGFjZSBuYW1lIGNhbiBpbmNsdWRlIGBcXGAgYW5kIHdlIHN0aWxsIHdhbnQgZWFjaFxuICAgICAgLy8gZWxlbWVudCB0byBiZSB0cmVhdGVkIGFzIGl0cyBvd24gKmluZGl2aWR1YWwqIHRpdGxlXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICduYW1lc3BhY2UnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGVuZDogJzsnLFxuICAgICAgICBpbGxlZ2FsOiAvWy4nXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuaW5oZXJpdChobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSwgeyBzY29wZTogXCJ0aXRsZS5jbGFzc1wiIH0pIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICd1c2UnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGVuZDogJzsnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIC8vIFRPRE86IHRpdGxlLmZ1bmN0aW9uIHZzIHRpdGxlLmNsYXNzXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF0Y2g6IC9cXGIoYXN8Y29uc3R8ZnVuY3Rpb24pXFxiLyxcbiAgICAgICAgICAgIHNjb3BlOiBcImtleXdvcmRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gVE9ETzogY291bGQgYmUgdGl0bGUuY2xhc3Mgb3IgdGl0bGUuZnVuY3Rpb25cbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgU1RSSU5HLFxuICAgICAgTlVNQkVSLFxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwaHA7XG4iLCIvKlxuTGFuZ3VhZ2U6IFBsYWluIHRleHRcbkF1dGhvcjogRWdvciBSb2dvdiAoZS5yb2dvdkBwb3N0Z3Jlc3Byby5ydSlcbkRlc2NyaXB0aW9uOiBQbGFpbiB0ZXh0IHdpdGhvdXQgYW55IGhpZ2hsaWdodGluZy5cbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbmZ1bmN0aW9uIHBsYWludGV4dChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1BsYWluIHRleHQnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICd0ZXh0JyxcbiAgICAgICd0eHQnXG4gICAgXSxcbiAgICBkaXNhYmxlQXV0b2RldGVjdDogdHJ1ZVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBsYWludGV4dDtcbiIsIi8qXG5MYW5ndWFnZTogUHl0aG9uIFJFUExcblJlcXVpcmVzOiBweXRob24uanNcbkF1dGhvcjogSm9zaCBHb2ViZWwgPGhlbGxvQGpvc2hnb2ViZWwuY29tPlxuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuZnVuY3Rpb24gcHl0aG9uUmVwbChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyAncHljb24nIF0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS5wcm9tcHQnLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAvLyBhIHNwYWNlIHNlcGFyYXRlcyB0aGUgUkVQTCBwcmVmaXggZnJvbSB0aGUgYWN0dWFsIGNvZGVcbiAgICAgICAgICAvLyB0aGlzIGlzIHB1cmVseSBmb3IgY2xlYW5lciBIVE1MIG91dHB1dFxuICAgICAgICAgIGVuZDogLyB8JC8sXG4gICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgICAgIHN1Ykxhbmd1YWdlOiAncHl0aG9uJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAvXj4+Pig/PVsgXXwkKS8gfSxcbiAgICAgICAgICB7IGJlZ2luOiAvXlxcLlxcLlxcLig/PVsgXXwkKS8gfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHB5dGhvblJlcGw7XG4iLCIvKlxuTGFuZ3VhZ2U6IFB5dGhvblxuRGVzY3JpcHRpb246IFB5dGhvbiBpcyBhbiBpbnRlcnByZXRlZCwgb2JqZWN0LW9yaWVudGVkLCBoaWdoLWxldmVsIHByb2dyYW1taW5nIGxhbmd1YWdlIHdpdGggZHluYW1pYyBzZW1hbnRpY3MuXG5XZWJzaXRlOiBodHRwczovL3d3dy5weXRob24ub3JnXG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG5mdW5jdGlvbiBweXRob24oaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIGNvbnN0IElERU5UX1JFID0gL1tcXHB7WElEX1N0YXJ0fV9dXFxwe1hJRF9Db250aW51ZX0qL3U7XG4gIGNvbnN0IFJFU0VSVkVEX1dPUkRTID0gW1xuICAgICdhbmQnLFxuICAgICdhcycsXG4gICAgJ2Fzc2VydCcsXG4gICAgJ2FzeW5jJyxcbiAgICAnYXdhaXQnLFxuICAgICdicmVhaycsXG4gICAgJ2Nhc2UnLFxuICAgICdjbGFzcycsXG4gICAgJ2NvbnRpbnVlJyxcbiAgICAnZGVmJyxcbiAgICAnZGVsJyxcbiAgICAnZWxpZicsXG4gICAgJ2Vsc2UnLFxuICAgICdleGNlcHQnLFxuICAgICdmaW5hbGx5JyxcbiAgICAnZm9yJyxcbiAgICAnZnJvbScsXG4gICAgJ2dsb2JhbCcsXG4gICAgJ2lmJyxcbiAgICAnaW1wb3J0JyxcbiAgICAnaW4nLFxuICAgICdpcycsXG4gICAgJ2xhbWJkYScsXG4gICAgJ21hdGNoJyxcbiAgICAnbm9ubG9jYWx8MTAnLFxuICAgICdub3QnLFxuICAgICdvcicsXG4gICAgJ3Bhc3MnLFxuICAgICdyYWlzZScsXG4gICAgJ3JldHVybicsXG4gICAgJ3RyeScsXG4gICAgJ3doaWxlJyxcbiAgICAnd2l0aCcsXG4gICAgJ3lpZWxkJ1xuICBdO1xuXG4gIGNvbnN0IEJVSUxUX0lOUyA9IFtcbiAgICAnX19pbXBvcnRfXycsXG4gICAgJ2FicycsXG4gICAgJ2FsbCcsXG4gICAgJ2FueScsXG4gICAgJ2FzY2lpJyxcbiAgICAnYmluJyxcbiAgICAnYm9vbCcsXG4gICAgJ2JyZWFrcG9pbnQnLFxuICAgICdieXRlYXJyYXknLFxuICAgICdieXRlcycsXG4gICAgJ2NhbGxhYmxlJyxcbiAgICAnY2hyJyxcbiAgICAnY2xhc3NtZXRob2QnLFxuICAgICdjb21waWxlJyxcbiAgICAnY29tcGxleCcsXG4gICAgJ2RlbGF0dHInLFxuICAgICdkaWN0JyxcbiAgICAnZGlyJyxcbiAgICAnZGl2bW9kJyxcbiAgICAnZW51bWVyYXRlJyxcbiAgICAnZXZhbCcsXG4gICAgJ2V4ZWMnLFxuICAgICdmaWx0ZXInLFxuICAgICdmbG9hdCcsXG4gICAgJ2Zvcm1hdCcsXG4gICAgJ2Zyb3plbnNldCcsXG4gICAgJ2dldGF0dHInLFxuICAgICdnbG9iYWxzJyxcbiAgICAnaGFzYXR0cicsXG4gICAgJ2hhc2gnLFxuICAgICdoZWxwJyxcbiAgICAnaGV4JyxcbiAgICAnaWQnLFxuICAgICdpbnB1dCcsXG4gICAgJ2ludCcsXG4gICAgJ2lzaW5zdGFuY2UnLFxuICAgICdpc3N1YmNsYXNzJyxcbiAgICAnaXRlcicsXG4gICAgJ2xlbicsXG4gICAgJ2xpc3QnLFxuICAgICdsb2NhbHMnLFxuICAgICdtYXAnLFxuICAgICdtYXgnLFxuICAgICdtZW1vcnl2aWV3JyxcbiAgICAnbWluJyxcbiAgICAnbmV4dCcsXG4gICAgJ29iamVjdCcsXG4gICAgJ29jdCcsXG4gICAgJ29wZW4nLFxuICAgICdvcmQnLFxuICAgICdwb3cnLFxuICAgICdwcmludCcsXG4gICAgJ3Byb3BlcnR5JyxcbiAgICAncmFuZ2UnLFxuICAgICdyZXByJyxcbiAgICAncmV2ZXJzZWQnLFxuICAgICdyb3VuZCcsXG4gICAgJ3NldCcsXG4gICAgJ3NldGF0dHInLFxuICAgICdzbGljZScsXG4gICAgJ3NvcnRlZCcsXG4gICAgJ3N0YXRpY21ldGhvZCcsXG4gICAgJ3N0cicsXG4gICAgJ3N1bScsXG4gICAgJ3N1cGVyJyxcbiAgICAndHVwbGUnLFxuICAgICd0eXBlJyxcbiAgICAndmFycycsXG4gICAgJ3ppcCdcbiAgXTtcblxuICBjb25zdCBMSVRFUkFMUyA9IFtcbiAgICAnX19kZWJ1Z19fJyxcbiAgICAnRWxsaXBzaXMnLFxuICAgICdGYWxzZScsXG4gICAgJ05vbmUnLFxuICAgICdOb3RJbXBsZW1lbnRlZCcsXG4gICAgJ1RydWUnXG4gIF07XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sXG4gIC8vIFRPRE86IENvdWxkIHRoZXNlIGJlIHN1cHBsZW1lbnRlZCBieSBhIENhbWVsQ2FzZSBtYXRjaGVyIGluIGNlcnRhaW5cbiAgLy8gY29udGV4dHMsIGxlYXZpbmcgdGhlc2UgcmVtYWluaW5nIG9ubHkgZm9yIHJlbGV2YW5jZSBoaW50aW5nP1xuICBjb25zdCBUWVBFUyA9IFtcbiAgICBcIkFueVwiLFxuICAgIFwiQ2FsbGFibGVcIixcbiAgICBcIkNvcm91dGluZVwiLFxuICAgIFwiRGljdFwiLFxuICAgIFwiTGlzdFwiLFxuICAgIFwiTGl0ZXJhbFwiLFxuICAgIFwiR2VuZXJpY1wiLFxuICAgIFwiT3B0aW9uYWxcIixcbiAgICBcIlNlcXVlbmNlXCIsXG4gICAgXCJTZXRcIixcbiAgICBcIlR1cGxlXCIsXG4gICAgXCJUeXBlXCIsXG4gICAgXCJVbmlvblwiXG4gIF07XG5cbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IC9bQS1aYS16XVxcdyt8X19cXHcrX18vLFxuICAgIGtleXdvcmQ6IFJFU0VSVkVEX1dPUkRTLFxuICAgIGJ1aWx0X2luOiBCVUlMVF9JTlMsXG4gICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgdHlwZTogVFlQRVNcbiAgfTtcblxuICBjb25zdCBQUk9NUFQgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46IC9eKD4+PnxcXC5cXC5cXC4pIC9cbiAgfTtcblxuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC9cXHsvLFxuICAgIGVuZDogL1xcfS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC8jL1xuICB9O1xuXG4gIGNvbnN0IExJVEVSQUxfQlJBQ0tFVCA9IHtcbiAgICBiZWdpbjogL1xce1xcey8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oW3VVXXxbYkJdfFtyUl18W2JCXVtyUl18W3JSXVtiQl0pPycnJy8sXG4gICAgICAgIGVuZDogLycnJy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIFBST01QVFxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbdVVdfFtiQl18W3JSXXxbYkJdW3JSXXxbclJdW2JCXSk/XCJcIlwiLyxcbiAgICAgICAgZW5kOiAvXCJcIlwiLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgUFJPTVBUXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFtmRl1bclJdfFtyUl1bZkZdfFtmRl0pJycnLyxcbiAgICAgICAgZW5kOiAvJycnLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgUFJPTVBULFxuICAgICAgICAgIExJVEVSQUxfQlJBQ0tFVCxcbiAgICAgICAgICBTVUJTVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbZkZdW3JSXXxbclJdW2ZGXXxbZkZdKVwiXCJcIi8sXG4gICAgICAgIGVuZDogL1wiXCJcIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIFBST01QVCxcbiAgICAgICAgICBMSVRFUkFMX0JSQUNLRVQsXG4gICAgICAgICAgU1VCU1RcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oW3VVXXxbclJdKScvLFxuICAgICAgICBlbmQ6IC8nLyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oW3VVXXxbclJdKVwiLyxcbiAgICAgICAgZW5kOiAvXCIvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbYkJdfFtiQl1bclJdfFtyUl1bYkJdKScvLFxuICAgICAgICBlbmQ6IC8nL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oW2JCXXxbYkJdW3JSXXxbclJdW2JCXSlcIi8sXG4gICAgICAgIGVuZDogL1wiL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oW2ZGXVtyUl18W3JSXVtmRl18W2ZGXSknLyxcbiAgICAgICAgZW5kOiAvJy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIExJVEVSQUxfQlJBQ0tFVCxcbiAgICAgICAgICBTVUJTVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbZkZdW3JSXXxbclJdW2ZGXXxbZkZdKVwiLyxcbiAgICAgICAgZW5kOiAvXCIvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICBMSVRFUkFMX0JSQUNLRVQsXG4gICAgICAgICAgU1VCU1RcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICBdXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy45L3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjbnVtZXJpYy1saXRlcmFsc1xuICBjb25zdCBkaWdpdHBhcnQgPSAnWzAtOV0oXz9bMC05XSkqJztcbiAgY29uc3QgcG9pbnRmbG9hdCA9IGAoXFxcXGIoJHtkaWdpdHBhcnR9KSk/XFxcXC4oJHtkaWdpdHBhcnR9KXxcXFxcYigke2RpZ2l0cGFydH0pXFxcXC5gO1xuICAvLyBXaGl0ZXNwYWNlIGFmdGVyIGEgbnVtYmVyIChvciBhbnkgbGV4aWNhbCB0b2tlbikgaXMgbmVlZGVkIG9ubHkgaWYgaXRzIGFic2VuY2VcbiAgLy8gd291bGQgY2hhbmdlIHRoZSB0b2tlbml6YXRpb25cbiAgLy8gaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy45L3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjd2hpdGVzcGFjZS1iZXR3ZWVuLXRva2Vuc1xuICAvLyBXZSBkZXZpYXRlIHNsaWdodGx5LCByZXF1aXJpbmcgYSB3b3JkIGJvdW5kYXJ5IG9yIGEga2V5d29yZFxuICAvLyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcmVjb2duaXppbmcgKnByZWZpeGVzKiAoZS5nLiwgYDBgIGluIGAweDQxYCBvciBgMDhgIG9yIGAwX18xYClcbiAgY29uc3QgbG9va2FoZWFkID0gYFxcXFxifCR7UkVTRVJWRURfV09SRFMuam9pbignfCcpfWA7XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gZXhwb25lbnRmbG9hdCwgcG9pbnRmbG9hdFxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy45L3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZmxvYXRpbmctcG9pbnQtbGl0ZXJhbHNcbiAgICAgIC8vIG9wdGlvbmFsbHkgaW1hZ2luYXJ5XG4gICAgICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpbWFnaW5hcnktbGl0ZXJhbHNcbiAgICAgIC8vIE5vdGU6IG5vIGxlYWRpbmcgXFxiIGJlY2F1c2UgZmxvYXRzIGNhbiBzdGFydCB3aXRoIGEgZGVjaW1hbCBwb2ludFxuICAgICAgLy8gYW5kIHdlIGRvbid0IHdhbnQgdG8gbWlzaGFuZGxlIGUuZy4gYGZuKC41KWAsXG4gICAgICAvLyBubyB0cmFpbGluZyBcXGIgZm9yIHBvaW50ZmxvYXQgYmVjYXVzZSBpdCBjYW4gZW5kIHdpdGggYSBkZWNpbWFsIHBvaW50XG4gICAgICAvLyBhbmQgd2UgZG9uJ3Qgd2FudCB0byBtaXNoYW5kbGUgZS5nLiBgMC4uaGV4KClgOyB0aGlzIHNob3VsZCBiZSBzYWZlXG4gICAgICAvLyBiZWNhdXNlIGJvdGggTVVTVCBjb250YWluIGEgZGVjaW1hbCBwb2ludCBhbmQgc28gY2Fubm90IGJlIGNvbmZ1c2VkIHdpdGhcbiAgICAgIC8vIHRoZSBpbnRlcmlvciBwYXJ0IG9mIGFuIGlkZW50aWZpZXJcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGAoXFxcXGIoJHtkaWdpdHBhcnR9KXwoJHtwb2ludGZsb2F0fSkpW2VFXVsrLV0/KCR7ZGlnaXRwYXJ0fSlbakpdPyg/PSR7bG9va2FoZWFkfSlgXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogYCgke3BvaW50ZmxvYXR9KVtqSl0/YFxuICAgICAgfSxcblxuICAgICAgLy8gZGVjaW50ZWdlciwgYmluaW50ZWdlciwgb2N0aW50ZWdlciwgaGV4aW50ZWdlclxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy45L3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaW50ZWdlci1saXRlcmFsc1xuICAgICAgLy8gb3B0aW9uYWxseSBcImxvbmdcIiBpbiBQeXRob24gMlxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi43L3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaW50ZWdlci1hbmQtbG9uZy1pbnRlZ2VyLWxpdGVyYWxzXG4gICAgICAvLyBkZWNpbnRlZ2VyIGlzIG9wdGlvbmFsbHkgaW1hZ2luYXJ5XG4gICAgICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpbWFnaW5hcnktbGl0ZXJhbHNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGBcXFxcYihbMS05XShfP1swLTldKSp8MCsoXz8wKSopW2xMakpdPyg/PSR7bG9va2FoZWFkfSlgXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogYFxcXFxiMFtiQl0oXz9bMDFdKStbbExdPyg/PSR7bG9va2FoZWFkfSlgXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogYFxcXFxiMFtvT10oXz9bMC03XSkrW2xMXT8oPz0ke2xvb2thaGVhZH0pYFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGBcXFxcYjBbeFhdKF8/WzAtOWEtZkEtRl0pK1tsTF0/KD89JHtsb29rYWhlYWR9KWBcbiAgICAgIH0sXG5cbiAgICAgIC8vIGltYWdudW1iZXIgKGRpZ2l0cGFydC1iYXNlZClcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMuOS9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2ltYWdpbmFyeS1saXRlcmFsc1xuICAgICAge1xuICAgICAgICBiZWdpbjogYFxcXFxiKCR7ZGlnaXRwYXJ0fSlbakpdKD89JHtsb29rYWhlYWR9KWBcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IENPTU1FTlRfVFlQRSA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29tbWVudFwiLFxuICAgIGJlZ2luOiByZWdleC5sb29rYWhlYWQoLyMgdHlwZTovKSxcbiAgICBlbmQ6IC8kLyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgLy8gcHJldmVudCBrZXl3b3JkcyBmcm9tIGNvbG9yaW5nIGB0eXBlYFxuICAgICAgICBiZWdpbjogLyMgdHlwZTovXG4gICAgICB9LFxuICAgICAgLy8gY29tbWVudCB3aXRoaW4gYSBkYXRhdHlwZSBjb21tZW50IGluY2x1ZGVzIG5vIGtleXdvcmRzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvIy8sXG4gICAgICAgIGVuZDogL1xcYlxcQi8sXG4gICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gRXhjbHVkZSBwYXJhbXMgaW4gZnVuY3Rpb25zIHdpdGhvdXQgcGFyYW1zXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJcIixcbiAgICAgICAgYmVnaW46IC9cXChcXHMqXFwpLyxcbiAgICAgICAgc2tpcDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgUFJPTVBULFxuICAgICAgICAgIE5VTUJFUixcbiAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBTVUJTVC5jb250YWlucyA9IFtcbiAgICBTVFJJTkcsXG4gICAgTlVNQkVSLFxuICAgIFBST01QVFxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1B5dGhvbicsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ3B5JyxcbiAgICAgICdneXAnLFxuICAgICAgJ2lweXRob24nXG4gICAgXSxcbiAgICB1bmljb2RlUmVnZXg6IHRydWUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC8oPFxcL3wtPnxcXD8pfD0+LyxcbiAgICBjb250YWluczogW1xuICAgICAgUFJPTVBULFxuICAgICAgTlVNQkVSLFxuICAgICAge1xuICAgICAgICAvLyB2ZXJ5IGNvbW1vbiBjb252ZW50aW9uXG4gICAgICAgIGJlZ2luOiAvXFxic2VsZlxcYi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGVhdCBcImlmXCIgcHJpb3IgdG8gc3RyaW5nIHNvIHRoYXQgaXQgd29uJ3QgYWNjaWRlbnRhbGx5IGJlXG4gICAgICAgIC8vIGxhYmVsZWQgYXMgYW4gZi1zdHJpbmdcbiAgICAgICAgYmVnaW5LZXl3b3JkczogXCJpZlwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICBDT01NRU5UX1RZUEUsXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBtYXRjaDogW1xuICAgICAgICAgIC9cXGJkZWYvLCAvXFxzKy8sXG4gICAgICAgICAgSURFTlRfUkUsXG4gICAgICAgIF0sXG4gICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAgICAgMzogXCJ0aXRsZS5mdW5jdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbIFBBUkFNUyBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgICAgIC9cXGJjbGFzcy8sIC9cXHMrLyxcbiAgICAgICAgICAgICAgSURFTlRfUkUsIC9cXHMqLyxcbiAgICAgICAgICAgICAgL1xcKFxccyovLCBJREVOVF9SRSwvXFxzKlxcKS9cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYXRjaDogW1xuICAgICAgICAgICAgICAvXFxiY2xhc3MvLCAvXFxzKy8sXG4gICAgICAgICAgICAgIElERU5UX1JFXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInRpdGxlLmNsYXNzXCIsXG4gICAgICAgICAgNjogXCJ0aXRsZS5jbGFzcy5pbmhlcml0ZWRcIixcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvXltcXHQgXSpALyxcbiAgICAgICAgZW5kOiAvKD89Iyl8JC8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgTlVNQkVSLFxuICAgICAgICAgIFBBUkFNUyxcbiAgICAgICAgICBTVFJJTkdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBweXRob247XG4iLCIvKlxuTGFuZ3VhZ2U6IFJcbkRlc2NyaXB0aW9uOiBSIGlzIGEgZnJlZSBzb2Z0d2FyZSBlbnZpcm9ubWVudCBmb3Igc3RhdGlzdGljYWwgY29tcHV0aW5nIGFuZCBncmFwaGljcy5cbkF1dGhvcjogSm9lIENoZW5nIDxqb2VAcnN0dWRpby5vcmc+XG5Db250cmlidXRvcnM6IEtvbnJhZCBSdWRvbHBoIDxrb25yYWQucnVkb2xwaEBnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL3d3dy5yLXByb2plY3Qub3JnXG5DYXRlZ29yeTogY29tbW9uLHNjaWVudGlmaWNcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiByKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICAvLyBJZGVudGlmaWVycyBpbiBSIGNhbm5vdCBzdGFydCB3aXRoIGBfYCwgYnV0IHRoZXkgY2FuIHN0YXJ0IHdpdGggYC5gIGlmIGl0XG4gIC8vIGlzIG5vdCBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGRpZ2l0LlxuICAvLyBSIGFsc28gc3VwcG9ydHMgcXVvdGVkIGlkZW50aWZpZXJzLCB3aGljaCBhcmUgbmVhci1hcmJpdHJhcnkgc2VxdWVuY2VzXG4gIC8vIGRlbGltaXRlZCBieSBiYWNrdGlja3MgKGDigKZgKSwgd2hpY2ggbWF5IGNvbnRhaW4gZXNjYXBlIHNlcXVlbmNlcy4gVGhlc2UgYXJlXG4gIC8vIGhhbmRsZWQgaW4gYSBzZXBhcmF0ZSBtb2RlLiBTZWUgYHRlc3QvbWFya3VwL3IvbmFtZXMudHh0YCBmb3IgZXhhbXBsZXMuXG4gIC8vIEZJWE1FOiBTdXBwb3J0IFVuaWNvZGUgaWRlbnRpZmllcnMuXG4gIGNvbnN0IElERU5UX1JFID0gLyg/Oig/OlthLXpBLVpdfFxcLlsuX2EtekEtWl0pWy5fYS16QS1aMC05XSopfFxcLig/IVxcZCkvO1xuICBjb25zdCBOVU1CRVJfVFlQRVNfUkUgPSByZWdleC5laXRoZXIoXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBvbmx5IGhleGFkZWNpbWFsIGJpbmFyeSBwb3dlcnMgY2FuIGNvbnRhaW4gZnJhY3Rpb25zXG4gICAgLzBbeFhdWzAtOWEtZkEtRl0rXFwuWzAtOWEtZkEtRl0qW3BQXVsrLV0/XFxkK2k/LyxcbiAgICAvLyBIZXhhZGVjaW1hbCBudW1iZXJzIHdpdGhvdXQgZnJhY3Rpb24gYW5kIG9wdGlvbmFsIGJpbmFyeSBwb3dlclxuICAgIC8wW3hYXVswLTlhLWZBLUZdKyg/OltwUF1bKy1dP1xcZCspP1tMaV0/LyxcbiAgICAvLyBEZWNpbWFsIG51bWJlcnNcbiAgICAvKD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OltlRV1bKy1dP1xcZCspP1tMaV0/L1xuICApO1xuICBjb25zdCBPUEVSQVRPUlNfUkUgPSAvWz0hPD46XT18XFx8XFx8fCYmfDo6Oj98PC18PDwtfC0+PnwtPnxcXHw+fFstKypcXC8/ISQmfDo8PT5AXn5dfFxcKlxcKi87XG4gIGNvbnN0IFBVTkNUVUFUSU9OX1JFID0gcmVnZXguZWl0aGVyKFxuICAgIC9bKCldLyxcbiAgICAvW3t9XS8sXG4gICAgL1xcW1xcWy8sXG4gICAgL1tbXFxdXS8sXG4gICAgL1xcXFwvLFxuICAgIC8sL1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1InLFxuXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiBJREVOVF9SRSxcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdmdW5jdGlvbiBpZiBpbiBicmVhayBuZXh0IHJlcGVhdCBlbHNlIGZvciB3aGlsZScsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnTlVMTCBOQSBUUlVFIEZBTFNFIEluZiBOYU4gTkFfaW50ZWdlcl98MTAgTkFfcmVhbF98MTAgJ1xuICAgICAgICArICdOQV9jaGFyYWN0ZXJffDEwIE5BX2NvbXBsZXhffDEwJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAvLyBCdWlsdGluIGNvbnN0YW50c1xuICAgICAgICAnTEVUVEVSUyBsZXR0ZXJzIG1vbnRoLmFiYiBtb250aC5uYW1lIHBpIFQgRiAnXG4gICAgICAgIC8vIFByaW1pdGl2ZSBmdW5jdGlvbnNcbiAgICAgICAgLy8gVGhlc2UgYXJlIGFsbCB0aGUgZnVuY3Rpb25zIGluIGBiYXNlYCB0aGF0IGFyZSBpbXBsZW1lbnRlZCBhcyBhXG4gICAgICAgIC8vIGAuUHJpbWl0aXZlYCwgbWludXMgdGhvc2UgZnVuY3Rpb25zIHRoYXQgYXJlIGFsc28ga2V5d29yZHMuXG4gICAgICAgICsgJ2FicyBhY29zIGFjb3NoIGFsbCBhbnkgYW55TkEgQXJnIGFzLmNhbGwgYXMuY2hhcmFjdGVyICdcbiAgICAgICAgKyAnYXMuY29tcGxleCBhcy5kb3VibGUgYXMuZW52aXJvbm1lbnQgYXMuaW50ZWdlciBhcy5sb2dpY2FsICdcbiAgICAgICAgKyAnYXMubnVsbC5kZWZhdWx0IGFzLm51bWVyaWMgYXMucmF3IGFzaW4gYXNpbmggYXRhbiBhdGFuaCBhdHRyICdcbiAgICAgICAgKyAnYXR0cmlidXRlcyBiYXNlZW52IGJyb3dzZXIgYyBjYWxsIGNlaWxpbmcgY2xhc3MgQ29uaiBjb3MgY29zaCAnXG4gICAgICAgICsgJ2Nvc3BpIGN1bW1heCBjdW1taW4gY3VtcHJvZCBjdW1zdW0gZGlnYW1tYSBkaW0gZGltbmFtZXMgJ1xuICAgICAgICArICdlbXB0eWVudiBleHAgZXhwcmVzc2lvbiBmbG9vciBmb3JjZUFuZENhbGwgZ2FtbWEgZ2MudGltZSAnXG4gICAgICAgICsgJ2dsb2JhbGVudiBJbSBpbnRlcmFjdGl2ZSBpbnZpc2libGUgaXMuYXJyYXkgaXMuYXRvbWljIGlzLmNhbGwgJ1xuICAgICAgICArICdpcy5jaGFyYWN0ZXIgaXMuY29tcGxleCBpcy5kb3VibGUgaXMuZW52aXJvbm1lbnQgaXMuZXhwcmVzc2lvbiAnXG4gICAgICAgICsgJ2lzLmZpbml0ZSBpcy5mdW5jdGlvbiBpcy5pbmZpbml0ZSBpcy5pbnRlZ2VyIGlzLmxhbmd1YWdlICdcbiAgICAgICAgKyAnaXMubGlzdCBpcy5sb2dpY2FsIGlzLm1hdHJpeCBpcy5uYSBpcy5uYW1lIGlzLm5hbiBpcy5udWxsICdcbiAgICAgICAgKyAnaXMubnVtZXJpYyBpcy5vYmplY3QgaXMucGFpcmxpc3QgaXMucmF3IGlzLnJlY3Vyc2l2ZSBpcy5zaW5nbGUgJ1xuICAgICAgICArICdpcy5zeW1ib2wgbGF6eUxvYWREQmZldGNoIGxlbmd0aCBsZ2FtbWEgbGlzdCBsb2cgbWF4IG1pbiAnXG4gICAgICAgICsgJ21pc3NpbmcgTW9kIG5hbWVzIG5hcmdzIG56Y2hhciBvbGRDbGFzcyBvbi5leGl0IHBvcy50by5lbnYgJ1xuICAgICAgICArICdwcm9jLnRpbWUgcHJvZCBxdW90ZSByYW5nZSBSZSByZXAgcmV0cmFjZW1lbSByZXR1cm4gcm91bmQgJ1xuICAgICAgICArICdzZXFfYWxvbmcgc2VxX2xlbiBzZXEuaW50IHNpZ24gc2lnbmlmIHNpbiBzaW5oIHNpbnBpIHNxcnQgJ1xuICAgICAgICArICdzdGFuZGFyZEdlbmVyaWMgc3Vic3RpdHV0ZSBzdW0gc3dpdGNoIHRhbiB0YW5oIHRhbnBpIHRyYWNlbWVtICdcbiAgICAgICAgKyAndHJpZ2FtbWEgdHJ1bmMgdW5jbGFzcyB1bnRyYWNlbWVtIFVzZU1ldGhvZCB4dGZybScsXG4gICAgfSxcblxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAvLyBSb3h5Z2VuIGNvbW1lbnRzXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgIC8jJy8sXG4gICAgICAgIC8kLyxcbiAgICAgICAgeyBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBgQGV4YW1wbGVzYCBzZXBhcmF0ZWx5IHRvIGNhdXNlIGFsbCBzdWJzZXF1ZW50IGNvZGVcbiAgICAgICAgICAgIC8vIHVudGlsIHRoZSBuZXh0IGBAYC10YWcgb24gaXRzIG93biBsaW5lIHRvIGJlIGtlcHQgYXMtaXMsXG4gICAgICAgICAgICAvLyBwcmV2ZW50aW5nIGhpZ2hsaWdodGluZy4gVGhpcyBjb2RlIGlzIGV4YW1wbGUgUiBjb2RlLCBzbyBuZXN0ZWRcbiAgICAgICAgICAgIC8vIGRvY3RhZ3Mgc2hvdWxkbuKAmXQgYmUgdHJlYXRlZCBhcyBzdWNoLiBTZWVcbiAgICAgICAgICAgIC8vIGB0ZXN0L21hcmt1cC9yL3JveHlnZW4udHh0YCBmb3IgYW4gZXhhbXBsZS5cbiAgICAgICAgICAgIHNjb3BlOiAnZG9jdGFnJyxcbiAgICAgICAgICAgIG1hdGNoOiAvQGV4YW1wbGVzLyxcbiAgICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgICBlbmQ6IHJlZ2V4Lmxvb2thaGVhZChyZWdleC5laXRoZXIoXG4gICAgICAgICAgICAgICAgLy8gZW5kIGlmIGFub3RoZXIgZG9jIGNvbW1lbnRcbiAgICAgICAgICAgICAgICAvXFxuXiMnXFxzKig/PUBbYS16QS1aXSspLyxcbiAgICAgICAgICAgICAgICAvLyBvciBhIGxpbmUgd2l0aCBubyBjb21tZW50XG4gICAgICAgICAgICAgICAgL1xcbl4oPyEjJykvXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgYEBwYXJhbWAgdG8gaGlnaGxpZ2h0IHRoZSBwYXJhbWV0ZXIgbmFtZSBmb2xsb3dpbmdcbiAgICAgICAgICAgIC8vIGFmdGVyLlxuICAgICAgICAgICAgc2NvcGU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgYmVnaW46ICdAcGFyYW0nLFxuICAgICAgICAgICAgZW5kOiAvJC8sXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2NvcGU6ICd2YXJpYWJsZScsXG4gICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgIHsgbWF0Y2g6IElERU5UX1JFIH0sXG4gICAgICAgICAgICAgICAgICB7IG1hdGNoOiAvYCg/OlxcXFwufFteYFxcXFxdKStgLyB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiAnZG9jdGFnJyxcbiAgICAgICAgICAgIG1hdGNoOiAvQFthLXpBLVpdKy9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiAna2V5d29yZCcsXG4gICAgICAgICAgICBtYXRjaDogL1xcXFxbYS16QS1aXSsvXG4gICAgICAgICAgfVxuICAgICAgICBdIH1cbiAgICAgICksXG5cbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG5cbiAgICAgIHtcbiAgICAgICAgc2NvcGU6ICdzdHJpbmcnLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHtcbiAgICAgICAgICAgIGJlZ2luOiAvW3JSXVwiKC0qKVxcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkoLSopXCIvXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGxqcy5FTkRfU0FNRV9BU19CRUdJTih7XG4gICAgICAgICAgICBiZWdpbjogL1tyUl1cIigtKilcXHsvLFxuICAgICAgICAgICAgZW5kOiAvXFx9KC0qKVwiL1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgICAgICAgICAgYmVnaW46IC9bclJdXCIoLSopXFxbLyxcbiAgICAgICAgICAgIGVuZDogL1xcXSgtKilcIi9cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHtcbiAgICAgICAgICAgIGJlZ2luOiAvW3JSXScoLSopXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKSgtKiknL1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgICAgICAgICAgYmVnaW46IC9bclJdJygtKilcXHsvLFxuICAgICAgICAgICAgZW5kOiAvXFx9KC0qKScvXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGxqcy5FTkRfU0FNRV9BU19CRUdJTih7XG4gICAgICAgICAgICBiZWdpbjogL1tyUl0nKC0qKVxcWy8sXG4gICAgICAgICAgICBlbmQ6IC9cXF0oLSopJy9cbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IFwiJ1wiLFxuICAgICAgICAgICAgZW5kOiBcIidcIixcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgIH0sXG5cbiAgICAgIC8vIE1hdGNoaW5nIG51bWJlcnMgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHB1bmN0dWF0aW9uIGFuZCBvcGVyYXRvcnMgaXNcbiAgICAgIC8vIHRyaWNreSBzaW5jZSB3ZSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNoYXJhY3RlciBhaGVhZCBvZiBhIG51bWJlciB0b1xuICAgICAgLy8gZW5zdXJlIHRoZSBudW1iZXIgaXMgbm90IHBhcnQgb2YgYW4gaWRlbnRpZmllciwgYW5kIHdlIGNhbm5vdCB1c2VcbiAgICAgIC8vIG5lZ2F0aXZlIGxvb2stYmVoaW5kIGFzc2VydGlvbnMuIFNvIGluc3RlYWQgd2UgZXhwbGljaXRseSBoYW5kbGUgYWxsXG4gICAgICAvLyBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgKG9wZXJhdG9yfHB1bmN0dWF0aW9uKSwgbnVtYmVyLlxuICAgICAgLy8gVE9ETzogcmVwbGFjZSB3aXRoIG5lZ2F0aXZlIGxvb2stYmVoaW5kIHdoZW4gYXZhaWxhYmxlXG4gICAgICAvLyB7IGJlZ2luOiAvKD88IVthLXpBLVowLTkuX10pMFt4WF1bMC05YS1mQS1GXStcXC5bMC05YS1mQS1GXSpbcFBdWystXT9cXGQraT8vIH0sXG4gICAgICAvLyB7IGJlZ2luOiAvKD88IVthLXpBLVowLTkuX10pMFt4WF1bMC05YS1mQS1GXSsoW3BQXVsrLV0/XFxkKyk/W0xpXT8vIH0sXG4gICAgICAvLyB7IGJlZ2luOiAvKD88IVthLXpBLVowLTkuX10pKFxcZCsoXFwuXFxkKik/fFxcLlxcZCspKFtlRV1bKy1dP1xcZCspP1tMaV0/LyB9XG4gICAgICB7XG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgICAxOiAnb3BlcmF0b3InLFxuICAgICAgICAgICAgICAyOiAnbnVtYmVyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgICAgIE9QRVJBVE9SU19SRSxcbiAgICAgICAgICAgICAgTlVNQkVSX1RZUEVTX1JFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgICAxOiAnb3BlcmF0b3InLFxuICAgICAgICAgICAgICAyOiAnbnVtYmVyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgICAgIC8lW14lXSolLyxcbiAgICAgICAgICAgICAgTlVNQkVSX1RZUEVTX1JFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgICAxOiAncHVuY3R1YXRpb24nLFxuICAgICAgICAgICAgICAyOiAnbnVtYmVyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgICAgIFBVTkNUVUFUSU9OX1JFLFxuICAgICAgICAgICAgICBOVU1CRVJfVFlQRVNfUkVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiB7IDI6ICdudW1iZXInIH0sXG4gICAgICAgICAgICBtYXRjaDogW1xuICAgICAgICAgICAgICAvW15hLXpBLVowLTkuX118Xi8sIC8vIG5vdCBwYXJ0IG9mIGFuIGlkZW50aWZpZXIsIG9yIHN0YXJ0IG9mIGRvY3VtZW50XG4gICAgICAgICAgICAgIE5VTUJFUl9UWVBFU19SRVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAgLy8gT3BlcmF0b3JzL3B1bmN0dWF0aW9uIHdoZW4gdGhleSdyZSBub3QgZGlyZWN0bHkgZm9sbG93ZWQgYnkgbnVtYmVyc1xuICAgICAge1xuICAgICAgICAvLyBSZWxldmFuY2UgYm9vc3QgZm9yIHRoZSBtb3N0IGNvbW1vbiBhc3NpZ25tZW50IGZvcm0uXG4gICAgICAgIHNjb3BlOiB7IDM6ICdvcGVyYXRvcicgfSxcbiAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICBJREVOVF9SRSxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgLzwtLyxcbiAgICAgICAgICAvXFxzKy9cbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAge1xuICAgICAgICBzY29wZTogJ29wZXJhdG9yJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgbWF0Y2g6IE9QRVJBVE9SU19SRSB9LFxuICAgICAgICAgIHsgbWF0Y2g6IC8lW14lXSolLyB9XG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgc2NvcGU6ICdwdW5jdHVhdGlvbicsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgbWF0Y2g6IFBVTkNUVUFUSU9OX1JFXG4gICAgICB9LFxuXG4gICAgICB7XG4gICAgICAgIC8vIEVzY2FwZWQgaWRlbnRpZmllclxuICAgICAgICBiZWdpbjogJ2AnLFxuICAgICAgICBlbmQ6ICdgJyxcbiAgICAgICAgY29udGFpbnM6IFsgeyBiZWdpbjogL1xcXFwuLyB9IF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcjtcbiIsIi8qXG5MYW5ndWFnZTogUnVieVxuRGVzY3JpcHRpb246IFJ1YnkgaXMgYSBkeW5hbWljLCBvcGVuIHNvdXJjZSBwcm9ncmFtbWluZyBsYW5ndWFnZSB3aXRoIGEgZm9jdXMgb24gc2ltcGxpY2l0eSBhbmQgcHJvZHVjdGl2aXR5LlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cucnVieS1sYW5nLm9yZy9cbkF1dGhvcjogQW50b24gS292YWx5b3YgPGFudG9uQGtvdmFseW92Lm5ldD5cbkNvbnRyaWJ1dG9yczogUGV0ZXIgTGVvbm92IDxnb2pwZWdAeWFuZGV4LnJ1PiwgVmFzaWx5IFBvbG92bnlvdiA8dmFzdEB3aGl0ZWFudHMubmV0PiwgTG9yZW4gU2VnYWwgPGxzZWdhbEBzb2VuLmNhPiwgUGFzY2FsIEh1cm5pIDxwaGlAcnVieS1yZWFjdGl2ZS5vcmc+LCBDZWRyaWMgU29ocmF1ZXIgPHNvaHJhdWVyQGdvb2dsZW1haWwuY29tPlxuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuZnVuY3Rpb24gcnVieShobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgUlVCWV9NRVRIT0RfUkUgPSAnKFthLXpBLVpfXVxcXFx3KlshPz1dP3xbLSt+XUB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcXFwqXFxcXCp8Wy0vKyVeJip+YHxdfFxcXFxbXFxcXF09PyknO1xuICAvLyBUT0RPOiBtb3ZlIGNvbmNlcHRzIGxpa2UgQ0FNRUxfQ0FTRSBpbnRvIGBtb2Rlcy5qc2BcbiAgY29uc3QgQ0xBU1NfTkFNRV9SRSA9IHJlZ2V4LmVpdGhlcihcbiAgICAvXFxiKFtBLVpdK1thLXowLTldKykrLyxcbiAgICAvLyBlbmRzIGluIGNhcHNcbiAgICAvXFxiKFtBLVpdK1thLXowLTldKykrW0EtWl0rLyxcbiAgKVxuICA7XG4gIGNvbnN0IENMQVNTX05BTUVfV0lUSF9OQU1FU1BBQ0VfUkUgPSByZWdleC5jb25jYXQoQ0xBU1NfTkFNRV9SRSwgLyg6OlxcdyspKi8pO1xuICBjb25zdCBSVUJZX0tFWVdPUkRTID0ge1xuICAgIFwidmFyaWFibGUuY29uc3RhbnRcIjogW1xuICAgICAgXCJfX0ZJTEVfX1wiLFxuICAgICAgXCJfX0xJTkVfX1wiXG4gICAgXSxcbiAgICBcInZhcmlhYmxlLmxhbmd1YWdlXCI6IFtcbiAgICAgIFwic2VsZlwiLFxuICAgICAgXCJzdXBlclwiLFxuICAgIF0sXG4gICAga2V5d29yZDogW1xuICAgICAgXCJhbGlhc1wiLFxuICAgICAgXCJhbmRcIixcbiAgICAgIFwiYXR0cl9hY2Nlc3NvclwiLFxuICAgICAgXCJhdHRyX3JlYWRlclwiLFxuICAgICAgXCJhdHRyX3dyaXRlclwiLFxuICAgICAgXCJiZWdpblwiLFxuICAgICAgXCJCRUdJTlwiLFxuICAgICAgXCJicmVha1wiLFxuICAgICAgXCJjYXNlXCIsXG4gICAgICBcImNsYXNzXCIsXG4gICAgICBcImRlZmluZWRcIixcbiAgICAgIFwiZG9cIixcbiAgICAgIFwiZWxzZVwiLFxuICAgICAgXCJlbHNpZlwiLFxuICAgICAgXCJlbmRcIixcbiAgICAgIFwiRU5EXCIsXG4gICAgICBcImVuc3VyZVwiLFxuICAgICAgXCJmb3JcIixcbiAgICAgIFwiaWZcIixcbiAgICAgIFwiaW5cIixcbiAgICAgIFwiaW5jbHVkZVwiLFxuICAgICAgXCJtb2R1bGVcIixcbiAgICAgIFwibmV4dFwiLFxuICAgICAgXCJub3RcIixcbiAgICAgIFwib3JcIixcbiAgICAgIFwicmVkb1wiLFxuICAgICAgXCJyZXF1aXJlXCIsXG4gICAgICBcInJlc2N1ZVwiLFxuICAgICAgXCJyZXRyeVwiLFxuICAgICAgXCJyZXR1cm5cIixcbiAgICAgIFwidGhlblwiLFxuICAgICAgXCJ1bmRlZlwiLFxuICAgICAgXCJ1bmxlc3NcIixcbiAgICAgIFwidW50aWxcIixcbiAgICAgIFwid2hlblwiLFxuICAgICAgXCJ3aGlsZVwiLFxuICAgICAgXCJ5aWVsZFwiLFxuICAgIF0sXG4gICAgYnVpbHRfaW46IFtcbiAgICAgIFwicHJvY1wiLFxuICAgICAgXCJsYW1iZGFcIlxuICAgIF0sXG4gICAgbGl0ZXJhbDogW1xuICAgICAgXCJ0cnVlXCIsXG4gICAgICBcImZhbHNlXCIsXG4gICAgICBcIm5pbFwiXG4gICAgXVxuICB9O1xuICBjb25zdCBZQVJET0NUQUcgPSB7XG4gICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICBiZWdpbjogJ0BbQS1aYS16XSsnXG4gIH07XG4gIGNvbnN0IElSQl9PQkpFQ1QgPSB7XG4gICAgYmVnaW46ICcjPCcsXG4gICAgZW5kOiAnPidcbiAgfTtcbiAgY29uc3QgQ09NTUVOVF9NT0RFUyA9IFtcbiAgICBobGpzLkNPTU1FTlQoXG4gICAgICAnIycsXG4gICAgICAnJCcsXG4gICAgICB7IGNvbnRhaW5zOiBbIFlBUkRPQ1RBRyBdIH1cbiAgICApLFxuICAgIGhsanMuQ09NTUVOVChcbiAgICAgICdePWJlZ2luJyxcbiAgICAgICdePWVuZCcsXG4gICAgICB7XG4gICAgICAgIGNvbnRhaW5zOiBbIFlBUkRPQ1RBRyBdLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9XG4gICAgKSxcbiAgICBobGpzLkNPTU1FTlQoJ15fX0VORF9fJywgaGxqcy5NQVRDSF9OT1RISU5HX1JFKVxuICBdO1xuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC8jXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIGtleXdvcmRzOiBSVUJZX0tFWVdPUkRTXG4gIH07XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBTVUJTVFxuICAgIF0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgZW5kOiAvJy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICBlbmQ6IC9cIi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvYC8sXG4gICAgICAgIGVuZDogL2AvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyVbcVF3V3hdP1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJVtxUXdXeF0/XFxbLyxcbiAgICAgICAgZW5kOiAvXFxdL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8lW3FRd1d4XT9cXHsvLFxuICAgICAgICBlbmQ6IC9cXH0vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyVbcVF3V3hdPzwvLFxuICAgICAgICBlbmQ6IC8+L1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8lW3FRd1d4XT9cXC8vLFxuICAgICAgICBlbmQ6IC9cXC8vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyVbcVF3V3hdPyUvLFxuICAgICAgICBlbmQ6IC8lL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8lW3FRd1d4XT8tLyxcbiAgICAgICAgZW5kOiAvLS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJVtxUXdXeF0/XFx8LyxcbiAgICAgICAgZW5kOiAvXFx8L1xuICAgICAgfSxcbiAgICAgIC8vIGluIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnMsIFxcQiBpbiB0aGUgYmVnaW5uaW5nIHN1cHByZXNzZXMgcmVjb2duaXRpb24gb2YgPy1zZXF1ZW5jZXNcbiAgICAgIC8vIHdoZXJlID8gaXMgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIGEgcHJlY2VkaW5nIGlkZW50aWZpZXIsIGFzIGluOiBgZnVuYz80YFxuICAgICAgeyBiZWdpbjogL1xcQlxcPyhcXFxcXFxkezEsM30pLyB9LFxuICAgICAgeyBiZWdpbjogL1xcQlxcPyhcXFxceFtBLUZhLWYwLTldezEsMn0pLyB9LFxuICAgICAgeyBiZWdpbjogL1xcQlxcPyhcXFxcdVxcez9bQS1GYS1mMC05XXsxLDZ9XFx9PykvIH0sXG4gICAgICB7IGJlZ2luOiAvXFxCXFw/KFxcXFxNLVxcXFxDLXxcXFxcTS1cXFxcY3xcXFxcY1xcXFxNLXxcXFxcTS18XFxcXEMtXFxcXE0tKVtcXHgyMC1cXHg3ZV0vIH0sXG4gICAgICB7IGJlZ2luOiAvXFxCXFw/XFxcXChjfEMtKVtcXHgyMC1cXHg3ZV0vIH0sXG4gICAgICB7IGJlZ2luOiAvXFxCXFw/XFxcXD9cXFMvIH0sXG4gICAgICAvLyBoZXJlZG9jc1xuICAgICAge1xuICAgICAgICAvLyB0aGlzIGd1YXJkIG1ha2VzIHN1cmUgdGhhdCB3ZSBoYXZlIGFuIGVudGlyZSBoZXJlZG9jIGFuZCBub3QgYSBmYWxzZVxuICAgICAgICAvLyBwb3NpdGl2ZSAoYXV0by1kZXRlY3QsIGV0Yy4pXG4gICAgICAgIGJlZ2luOiByZWdleC5jb25jYXQoXG4gICAgICAgICAgLzw8Wy1+XT8nPy8sXG4gICAgICAgICAgcmVnZXgubG9va2FoZWFkKC8oXFx3KykoPz1cXFcpW15cXG5dKlxcbig/OlteXFxuXSpcXG4pKj9cXHMqXFwxXFxiLylcbiAgICAgICAgKSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkVORF9TQU1FX0FTX0JFR0lOKHtcbiAgICAgICAgICAgIGJlZ2luOiAvKFxcdyspLyxcbiAgICAgICAgICAgIGVuZDogLyhcXHcrKS8sXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgICAgIFNVQlNUXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICAvLyBSdWJ5IHN5bnRheCBpcyB1bmRlcmRvY3VtZW50ZWQsIGJ1dCB0aGlzIGdyYW1tYXIgc2VlbXMgdG8gYmUgYWNjdXJhdGVcbiAgLy8gYXMgb2YgdmVyc2lvbiAyLjcuMiAoY29uZmlybWVkIHdpdGggKGlyYiBhbmQgYFJpcHBlci5zZXhwKC4uLilgKVxuICAvLyBodHRwczovL2RvY3MucnVieS1sYW5nLm9yZy9lbi8yLjcuMC9kb2Mvc3ludGF4L2xpdGVyYWxzX3Jkb2MuaHRtbCNsYWJlbC1OdW1iZXJzXG4gIGNvbnN0IGRlY2ltYWwgPSAnWzEtOV0oXz9bMC05XSkqfDAnO1xuICBjb25zdCBkaWdpdHMgPSAnWzAtOV0oXz9bMC05XSkqJztcbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBkZWNpbWFsIGludGVnZXIvZmxvYXQsIG9wdGlvbmFsbHkgZXhwb25lbnRpYWwgb3IgcmF0aW9uYWwsIG9wdGlvbmFsbHkgaW1hZ2luYXJ5XG4gICAgICB7IGJlZ2luOiBgXFxcXGIoJHtkZWNpbWFsfSkoXFxcXC4oJHtkaWdpdHN9KSk/KFtlRV1bKy1dPygke2RpZ2l0c30pfHIpP2k/XFxcXGJgIH0sXG5cbiAgICAgIC8vIGV4cGxpY2l0IGRlY2ltYWwvYmluYXJ5L29jdGFsL2hleGFkZWNpbWFsIGludGVnZXIsXG4gICAgICAvLyBvcHRpb25hbGx5IHJhdGlvbmFsIGFuZC9vciBpbWFnaW5hcnlcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwW2REXVswLTldKF8/WzAtOV0pKnI/aT9cXFxcYlwiIH0sXG4gICAgICB7IGJlZ2luOiBcIlxcXFxiMFtiQl1bMC0xXShfP1swLTFdKSpyP2k/XFxcXGJcIiB9LFxuICAgICAgeyBiZWdpbjogXCJcXFxcYjBbb09dWzAtN10oXz9bMC03XSkqcj9pP1xcXFxiXCIgfSxcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwW3hYXVswLTlhLWZBLUZdKF8/WzAtOWEtZkEtRl0pKnI/aT9cXFxcYlwiIH0sXG5cbiAgICAgIC8vIDAtcHJlZml4ZWQgaW1wbGljaXQgb2N0YWwgaW50ZWdlciwgb3B0aW9uYWxseSByYXRpb25hbCBhbmQvb3IgaW1hZ2luYXJ5XG4gICAgICB7IGJlZ2luOiBcIlxcXFxiMChfP1swLTddKStyP2k/XFxcXGJcIiB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBtYXRjaDogL1xcKFxcKS8sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogLyg/PVxcKSkvLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBSVUJZX0tFWVdPUkRTLFxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBDTEFTU19ERUZJTklUSU9OID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL2NsYXNzXFxzKy8sXG4gICAgICAgICAgQ0xBU1NfTkFNRV9XSVRIX05BTUVTUEFDRV9SRSxcbiAgICAgICAgICAvXFxzKzxcXHMrLyxcbiAgICAgICAgICBDTEFTU19OQU1FX1dJVEhfTkFNRVNQQUNFX1JFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL2NsYXNzXFxzKy8sXG4gICAgICAgICAgQ0xBU1NfTkFNRV9XSVRIX05BTUVTUEFDRV9SRVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICBzY29wZToge1xuICAgICAgMjogXCJ0aXRsZS5jbGFzc1wiLFxuICAgICAgNDogXCJ0aXRsZS5jbGFzcy5pbmhlcml0ZWRcIlxuICAgIH0sXG4gICAga2V5d29yZHM6IFJVQllfS0VZV09SRFNcbiAgfTtcblxuICBjb25zdCBVUFBFUl9DQVNFX0NPTlNUQU5UID0ge1xuICAgIHJlbGV2YW5jZTogMCxcbiAgICBtYXRjaDogL1xcYltBLVpdW0EtWl8wLTldK1xcYi8sXG4gICAgY2xhc3NOYW1lOiBcInZhcmlhYmxlLmNvbnN0YW50XCJcbiAgfTtcblxuICBjb25zdCBNRVRIT0RfREVGSU5JVElPTiA9IHtcbiAgICBtYXRjaDogW1xuICAgICAgL2RlZi8sIC9cXHMrLyxcbiAgICAgIFJVQllfTUVUSE9EX1JFXG4gICAgXSxcbiAgICBzY29wZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInRpdGxlLmZ1bmN0aW9uXCJcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBQQVJBTVNcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgT0JKRUNUX0NSRUFUSU9OID0ge1xuICAgIHJlbGV2YW5jZTogMCxcbiAgICBtYXRjaDogW1xuICAgICAgQ0xBU1NfTkFNRV9XSVRIX05BTUVTUEFDRV9SRSxcbiAgICAgIC9cXC5uZXdbIChdL1xuICAgIF0sXG4gICAgc2NvcGU6IHtcbiAgICAgIDE6IFwidGl0bGUuY2xhc3NcIlxuICAgIH1cbiAgfTtcblxuICBjb25zdCBSVUJZX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgU1RSSU5HLFxuICAgIENMQVNTX0RFRklOSVRJT04sXG4gICAgT0JKRUNUX0NSRUFUSU9OLFxuICAgIFVQUEVSX0NBU0VfQ09OU1RBTlQsXG4gICAgTUVUSE9EX0RFRklOSVRJT04sXG4gICAge1xuICAgICAgLy8gc3dhbGxvdyBuYW1lc3BhY2UgcXVhbGlmaWVycyBiZWZvcmUgc3ltYm9sc1xuICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnOjonIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnKCF8XFxcXD8pPzonLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46ICc6KD8hXFxcXHMpJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIFNUUklORyxcbiAgICAgICAgeyBiZWdpbjogUlVCWV9NRVRIT0RfUkUgfVxuICAgICAgXSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAgTlVNQkVSLFxuICAgIHtcbiAgICAgIC8vIG5lZ2F0aXZlLWxvb2sgZm9yd2FyZCBhdHRlbXB0cyB0byBwcmV2ZW50IGZhbHNlIG1hdGNoZXMgbGlrZTpcbiAgICAgIC8vIEBpZGVudEAgb3IgJGlkZW50JCB0aGF0IG1pZ2h0IGluZGljYXRlIHRoaXMgaXMgbm90IHJ1YnkgYXQgYWxsXG4gICAgICBjbGFzc05hbWU6IFwidmFyaWFibGVcIixcbiAgICAgIGJlZ2luOiAnKFxcXFwkXFxcXFcpfCgoXFxcXCR8QEA/KShcXFxcdyspKSg/PVteQCQ/XSknICsgYCg/IVtBLVphLXpdKSg/IVtAJD8nXSlgXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgYmVnaW46IC9cXHwvLFxuICAgICAgZW5kOiAvXFx8LyxcbiAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICByZWxldmFuY2U6IDAsIC8vIHRoaXMgY291bGQgYmUgYSBsb3Qgb2YgdGhpbmdzIChpbiBvdGhlciBsYW5ndWFnZXMpIG90aGVyIHRoYW4gcGFyYW1zXG4gICAgICBrZXl3b3JkczogUlVCWV9LRVlXT1JEU1xuICAgIH0sXG4gICAgeyAvLyByZWdleHAgY29udGFpbmVyXG4gICAgICBiZWdpbjogJygnICsgaGxqcy5SRV9TVEFSVEVSU19SRSArICd8dW5sZXNzKVxcXFxzKicsXG4gICAgICBrZXl3b3JkczogJ3VubGVzcycsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAncmVnZXhwJyxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgICAgU1VCU1RcbiAgICAgICAgICBdLFxuICAgICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAnLycsXG4gICAgICAgICAgICAgIGVuZDogJy9bYS16XSonXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbjogLyVyXFx7LyxcbiAgICAgICAgICAgICAgZW5kOiAvXFx9W2Etel0qL1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmVnaW46ICclclxcXFwoJyxcbiAgICAgICAgICAgICAgZW5kOiAnXFxcXClbYS16XSonXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbjogJyVyIScsXG4gICAgICAgICAgICAgIGVuZDogJyFbYS16XSonXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbjogJyVyXFxcXFsnLFxuICAgICAgICAgICAgICBlbmQ6ICdcXFxcXVthLXpdKidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0uY29uY2F0KElSQl9PQkpFQ1QsIENPTU1FTlRfTU9ERVMpLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfVxuICBdLmNvbmNhdChJUkJfT0JKRUNULCBDT01NRU5UX01PREVTKTtcblxuICBTVUJTVC5jb250YWlucyA9IFJVQllfREVGQVVMVF9DT05UQUlOUztcbiAgUEFSQU1TLmNvbnRhaW5zID0gUlVCWV9ERUZBVUxUX0NPTlRBSU5TO1xuXG4gIC8vID4+XG4gIC8vID8+XG4gIGNvbnN0IFNJTVBMRV9QUk9NUFQgPSBcIls+P10+XCI7XG4gIC8vIGlyYihtYWluKTowMDE6MD5cbiAgY29uc3QgREVGQVVMVF9QUk9NUFQgPSBcIltcXFxcdyNdK1xcXFwoXFxcXHcrXFxcXCk6XFxcXGQrOlxcXFxkK1s+Kl1cIjtcbiAgY29uc3QgUlZNX1BST01QVCA9IFwiKFxcXFx3Ky0pP1xcXFxkK1xcXFwuXFxcXGQrXFxcXC5cXFxcZCsocFxcXFxkKyk/W15cXFxcZF1bXj5dKz5cIjtcblxuICBjb25zdCBJUkJfREVGQVVMVCA9IFtcbiAgICB7XG4gICAgICBiZWdpbjogL15cXHMqPT4vLFxuICAgICAgc3RhcnRzOiB7XG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogUlVCWV9ERUZBVUxUX0NPTlRBSU5TXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdtZXRhLnByb21wdCcsXG4gICAgICBiZWdpbjogJ14oJyArIFNJTVBMRV9QUk9NUFQgKyBcInxcIiArIERFRkFVTFRfUFJPTVBUICsgJ3wnICsgUlZNX1BST01QVCArICcpKD89WyBdKScsXG4gICAgICBzdGFydHM6IHtcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiBSVUJZX0tFWVdPUkRTLFxuICAgICAgICBjb250YWluczogUlVCWV9ERUZBVUxUX0NPTlRBSU5TXG4gICAgICB9XG4gICAgfVxuICBdO1xuXG4gIENPTU1FTlRfTU9ERVMudW5zaGlmdChJUkJfT0JKRUNUKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdSdWJ5JyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAncmInLFxuICAgICAgJ2dlbXNwZWMnLFxuICAgICAgJ3BvZHNwZWMnLFxuICAgICAgJ3Rob3InLFxuICAgICAgJ2lyYidcbiAgICBdLFxuICAgIGtleXdvcmRzOiBSVUJZX0tFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGNvbnRhaW5zOiBbIGhsanMuU0hFQkFORyh7IGJpbmFyeTogXCJydWJ5XCIgfSkgXVxuICAgICAgLmNvbmNhdChJUkJfREVGQVVMVClcbiAgICAgIC5jb25jYXQoQ09NTUVOVF9NT0RFUylcbiAgICAgIC5jb25jYXQoUlVCWV9ERUZBVUxUX0NPTlRBSU5TKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJ1Ynk7XG4iLCIvKlxuTGFuZ3VhZ2U6IFJ1c3RcbkF1dGhvcjogQW5kcmV5IFZsYXNvdnNraWtoIDxhbmRyZXkudmxhc292c2tpa2hAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBSb21hbiBTaG1hdG92IDxyb21hbnNobWF0b3ZAZ21haWwuY29tPiwgS2FzcGVyIEFuZGVyc2VuIDxrbWFfdW50cnVzdGVkQHByb3Rvbm1haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cucnVzdC1sYW5nLm9yZ1xuQ2F0ZWdvcnk6IGNvbW1vbiwgc3lzdGVtXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gcnVzdChobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgRlVOQ1RJT05fSU5WT0tFID0ge1xuICAgIGNsYXNzTmFtZTogXCJ0aXRsZS5mdW5jdGlvbi5pbnZva2VcIixcbiAgICByZWxldmFuY2U6IDAsXG4gICAgYmVnaW46IHJlZ2V4LmNvbmNhdChcbiAgICAgIC9cXGIvLFxuICAgICAgLyg/IWxldFxcYikvLFxuICAgICAgaGxqcy5JREVOVF9SRSxcbiAgICAgIHJlZ2V4Lmxvb2thaGVhZCgvXFxzKlxcKC8pKVxuICB9O1xuICBjb25zdCBOVU1CRVJfU1VGRklYID0gJyhbdWldKDh8MTZ8MzJ8NjR8MTI4fHNpemUpfGYoMzJ8NjQpKVxcPyc7XG4gIGNvbnN0IEtFWVdPUkRTID0gW1xuICAgIFwiYWJzdHJhY3RcIixcbiAgICBcImFzXCIsXG4gICAgXCJhc3luY1wiLFxuICAgIFwiYXdhaXRcIixcbiAgICBcImJlY29tZVwiLFxuICAgIFwiYm94XCIsXG4gICAgXCJicmVha1wiLFxuICAgIFwiY29uc3RcIixcbiAgICBcImNvbnRpbnVlXCIsXG4gICAgXCJjcmF0ZVwiLFxuICAgIFwiZG9cIixcbiAgICBcImR5blwiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZXh0ZXJuXCIsXG4gICAgXCJmYWxzZVwiLFxuICAgIFwiZmluYWxcIixcbiAgICBcImZuXCIsXG4gICAgXCJmb3JcIixcbiAgICBcImlmXCIsXG4gICAgXCJpbXBsXCIsXG4gICAgXCJpblwiLFxuICAgIFwibGV0XCIsXG4gICAgXCJsb29wXCIsXG4gICAgXCJtYWNyb1wiLFxuICAgIFwibWF0Y2hcIixcbiAgICBcIm1vZFwiLFxuICAgIFwibW92ZVwiLFxuICAgIFwibXV0XCIsXG4gICAgXCJvdmVycmlkZVwiLFxuICAgIFwicHJpdlwiLFxuICAgIFwicHViXCIsXG4gICAgXCJyZWZcIixcbiAgICBcInJldHVyblwiLFxuICAgIFwic2VsZlwiLFxuICAgIFwiU2VsZlwiLFxuICAgIFwic3RhdGljXCIsXG4gICAgXCJzdHJ1Y3RcIixcbiAgICBcInN1cGVyXCIsXG4gICAgXCJ0cmFpdFwiLFxuICAgIFwidHJ1ZVwiLFxuICAgIFwidHJ5XCIsXG4gICAgXCJ0eXBlXCIsXG4gICAgXCJ0eXBlb2ZcIixcbiAgICBcInVuc2FmZVwiLFxuICAgIFwidW5zaXplZFwiLFxuICAgIFwidXNlXCIsXG4gICAgXCJ2aXJ0dWFsXCIsXG4gICAgXCJ3aGVyZVwiLFxuICAgIFwid2hpbGVcIixcbiAgICBcInlpZWxkXCJcbiAgXTtcbiAgY29uc3QgTElURVJBTFMgPSBbXG4gICAgXCJ0cnVlXCIsXG4gICAgXCJmYWxzZVwiLFxuICAgIFwiU29tZVwiLFxuICAgIFwiTm9uZVwiLFxuICAgIFwiT2tcIixcbiAgICBcIkVyclwiXG4gIF07XG4gIGNvbnN0IEJVSUxUSU5TID0gW1xuICAgIC8vIGZ1bmN0aW9uc1xuICAgICdkcm9wICcsXG4gICAgLy8gdHJhaXRzXG4gICAgXCJDb3B5XCIsXG4gICAgXCJTZW5kXCIsXG4gICAgXCJTaXplZFwiLFxuICAgIFwiU3luY1wiLFxuICAgIFwiRHJvcFwiLFxuICAgIFwiRm5cIixcbiAgICBcIkZuTXV0XCIsXG4gICAgXCJGbk9uY2VcIixcbiAgICBcIlRvT3duZWRcIixcbiAgICBcIkNsb25lXCIsXG4gICAgXCJEZWJ1Z1wiLFxuICAgIFwiUGFydGlhbEVxXCIsXG4gICAgXCJQYXJ0aWFsT3JkXCIsXG4gICAgXCJFcVwiLFxuICAgIFwiT3JkXCIsXG4gICAgXCJBc1JlZlwiLFxuICAgIFwiQXNNdXRcIixcbiAgICBcIkludG9cIixcbiAgICBcIkZyb21cIixcbiAgICBcIkRlZmF1bHRcIixcbiAgICBcIkl0ZXJhdG9yXCIsXG4gICAgXCJFeHRlbmRcIixcbiAgICBcIkludG9JdGVyYXRvclwiLFxuICAgIFwiRG91YmxlRW5kZWRJdGVyYXRvclwiLFxuICAgIFwiRXhhY3RTaXplSXRlcmF0b3JcIixcbiAgICBcIlNsaWNlQ29uY2F0RXh0XCIsXG4gICAgXCJUb1N0cmluZ1wiLFxuICAgIC8vIG1hY3Jvc1xuICAgIFwiYXNzZXJ0IVwiLFxuICAgIFwiYXNzZXJ0X2VxIVwiLFxuICAgIFwiYml0ZmxhZ3MhXCIsXG4gICAgXCJieXRlcyFcIixcbiAgICBcImNmZyFcIixcbiAgICBcImNvbCFcIixcbiAgICBcImNvbmNhdCFcIixcbiAgICBcImNvbmNhdF9pZGVudHMhXCIsXG4gICAgXCJkZWJ1Z19hc3NlcnQhXCIsXG4gICAgXCJkZWJ1Z19hc3NlcnRfZXEhXCIsXG4gICAgXCJlbnYhXCIsXG4gICAgXCJwYW5pYyFcIixcbiAgICBcImZpbGUhXCIsXG4gICAgXCJmb3JtYXQhXCIsXG4gICAgXCJmb3JtYXRfYXJncyFcIixcbiAgICBcImluY2x1ZGVfYnl0ZXMhXCIsXG4gICAgXCJpbmNsdWRlX3N0ciFcIixcbiAgICBcImxpbmUhXCIsXG4gICAgXCJsb2NhbF9kYXRhX2tleSFcIixcbiAgICBcIm1vZHVsZV9wYXRoIVwiLFxuICAgIFwib3B0aW9uX2VudiFcIixcbiAgICBcInByaW50IVwiLFxuICAgIFwicHJpbnRsbiFcIixcbiAgICBcInNlbGVjdCFcIixcbiAgICBcInN0cmluZ2lmeSFcIixcbiAgICBcInRyeSFcIixcbiAgICBcInVuaW1wbGVtZW50ZWQhXCIsXG4gICAgXCJ1bnJlYWNoYWJsZSFcIixcbiAgICBcInZlYyFcIixcbiAgICBcIndyaXRlIVwiLFxuICAgIFwid3JpdGVsbiFcIixcbiAgICBcIm1hY3JvX3J1bGVzIVwiLFxuICAgIFwiYXNzZXJ0X25lIVwiLFxuICAgIFwiZGVidWdfYXNzZXJ0X25lIVwiXG4gIF07XG4gIGNvbnN0IFRZUEVTID0gW1xuICAgIFwiaThcIixcbiAgICBcImkxNlwiLFxuICAgIFwiaTMyXCIsXG4gICAgXCJpNjRcIixcbiAgICBcImkxMjhcIixcbiAgICBcImlzaXplXCIsXG4gICAgXCJ1OFwiLFxuICAgIFwidTE2XCIsXG4gICAgXCJ1MzJcIixcbiAgICBcInU2NFwiLFxuICAgIFwidTEyOFwiLFxuICAgIFwidXNpemVcIixcbiAgICBcImYzMlwiLFxuICAgIFwiZjY0XCIsXG4gICAgXCJzdHJcIixcbiAgICBcImNoYXJcIixcbiAgICBcImJvb2xcIixcbiAgICBcIkJveFwiLFxuICAgIFwiT3B0aW9uXCIsXG4gICAgXCJSZXN1bHRcIixcbiAgICBcIlN0cmluZ1wiLFxuICAgIFwiVmVjXCJcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUnVzdCcsXG4gICAgYWxpYXNlczogWyAncnMnIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiBobGpzLklERU5UX1JFICsgJyE/JyxcbiAgICAgIHR5cGU6IFRZUEVTLFxuICAgICAga2V5d29yZDogS0VZV09SRFMsXG4gICAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICAgIGJ1aWx0X2luOiBCVUlMVElOU1xuICAgIH0sXG4gICAgaWxsZWdhbDogJzwvJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCcvXFxcXConLCAnXFxcXCovJywgeyBjb250YWluczogWyAnc2VsZicgXSB9KSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7XG4gICAgICAgIGJlZ2luOiAvYj9cIi8sXG4gICAgICAgIGlsbGVnYWw6IG51bGxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW46IC9iP3IoIyopXCIoLnxcXG4pKj9cIlxcMSg/ISMpLyB9LFxuICAgICAgICAgIHsgYmVnaW46IC9iPydcXFxcPyh4XFx3ezJ9fHVcXHd7NH18VVxcd3s4fXwuKScvIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC8nW2EtekEtWl9dW2EtekEtWjAtOV9dKi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFxiMGIoWzAxX10rKScgKyBOVU1CRVJfU1VGRklYIH0sXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFxiMG8oWzAtN19dKyknICsgTlVNQkVSX1NVRkZJWCB9LFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYjB4KFtBLUZhLWYwLTlfXSspJyArIE5VTUJFUl9TVUZGSVggfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIoXFxcXGRbXFxcXGRfXSooXFxcXC5bMC05X10rKT8oW2VFXVsrLV0/WzAtOV9dKyk/KSdcbiAgICAgICAgICAgICAgICAgICArIE5VTUJFUl9TVUZGSVggfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBbXG4gICAgICAgICAgL2ZuLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzTmFtZToge1xuICAgICAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDM6IFwidGl0bGUuZnVuY3Rpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjIT9cXFxcWycsXG4gICAgICAgIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46IC9cIi8sXG4gICAgICAgICAgICBlbmQ6IC9cIi9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBbXG4gICAgICAgICAgL2xldC8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIC8oPzptdXRcXHMrKT8vLFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICAgICAgICBdLFxuICAgICAgICBjbGFzc05hbWU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcImtleXdvcmRcIixcbiAgICAgICAgICA0OiBcInZhcmlhYmxlXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIG11c3QgY29tZSBiZWZvcmUgaW1wbC9mb3IgcnVsZSBsYXRlclxuICAgICAge1xuICAgICAgICBiZWdpbjogW1xuICAgICAgICAgIC9mb3IvLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIC9pbi9cbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3NOYW1lOiB7XG4gICAgICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAgICAgMzogXCJ2YXJpYWJsZVwiLFxuICAgICAgICAgIDU6IFwia2V5d29yZFwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBbXG4gICAgICAgICAgL3R5cGUvLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfSURFTlRfUkVcbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3NOYW1lOiB7XG4gICAgICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAgICAgMzogXCJ0aXRsZS5jbGFzc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBbXG4gICAgICAgICAgLyg/OnRyYWl0fGVudW18c3RydWN0fHVuaW9ufGltcGx8Zm9yKS8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICAgICAgICBdLFxuICAgICAgICBjbGFzc05hbWU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInRpdGxlLmNsYXNzXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnOjonLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgIGtleXdvcmQ6IFwiU2VsZlwiLFxuICAgICAgICAgIGJ1aWx0X2luOiBCVUlMVElOUyxcbiAgICAgICAgICB0eXBlOiBUWVBFU1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6IFwicHVuY3R1YXRpb25cIixcbiAgICAgICAgYmVnaW46ICctPidcbiAgICAgIH0sXG4gICAgICBGVU5DVElPTl9JTlZPS0VcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcnVzdDtcbiIsImNvbnN0IE1PREVTID0gKGhsanMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBJTVBPUlRBTlQ6IHtcbiAgICAgIHNjb3BlOiAnbWV0YScsXG4gICAgICBiZWdpbjogJyFpbXBvcnRhbnQnXG4gICAgfSxcbiAgICBCTE9DS19DT01NRU5UOiBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIEhFWENPTE9SOiB7XG4gICAgICBzY29wZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogLyMoKFswLTlhLWZBLUZdezMsNH0pfCgoWzAtOWEtZkEtRl17Mn0pezMsNH0pKVxcYi9cbiAgICB9LFxuICAgIEZVTkNUSU9OX0RJU1BBVENIOiB7XG4gICAgICBjbGFzc05hbWU6IFwiYnVpbHRfaW5cIixcbiAgICAgIGJlZ2luOiAvW1xcdy1dKyg/PVxcKCkvXG4gICAgfSxcbiAgICBBVFRSSUJVVEVfU0VMRUNUT1JfTU9ERToge1xuICAgICAgc2NvcGU6ICdzZWxlY3Rvci1hdHRyJyxcbiAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgIGVuZDogL1xcXS8sXG4gICAgICBpbGxlZ2FsOiAnJCcsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgIF1cbiAgICB9LFxuICAgIENTU19OVU1CRVJfTU9ERToge1xuICAgICAgc2NvcGU6ICdudW1iZXInLFxuICAgICAgYmVnaW46IGhsanMuTlVNQkVSX1JFICsgJygnICtcbiAgICAgICAgJyV8ZW18ZXh8Y2h8cmVtJyArXG4gICAgICAgICd8dnd8dmh8dm1pbnx2bWF4JyArXG4gICAgICAgICd8Y218bW18aW58cHR8cGN8cHgnICtcbiAgICAgICAgJ3xkZWd8Z3JhZHxyYWR8dHVybicgK1xuICAgICAgICAnfHN8bXMnICtcbiAgICAgICAgJ3xIenxrSHonICtcbiAgICAgICAgJ3xkcGl8ZHBjbXxkcHB4JyArXG4gICAgICAgICcpPycsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIENTU19WQVJJQUJMRToge1xuICAgICAgY2xhc3NOYW1lOiBcImF0dHJcIixcbiAgICAgIGJlZ2luOiAvLS1bQS1aYS16XVtBLVphLXowLTlfLV0qL1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFRBR1MgPSBbXG4gICdhJyxcbiAgJ2FiYnInLFxuICAnYWRkcmVzcycsXG4gICdhcnRpY2xlJyxcbiAgJ2FzaWRlJyxcbiAgJ2F1ZGlvJyxcbiAgJ2InLFxuICAnYmxvY2txdW90ZScsXG4gICdib2R5JyxcbiAgJ2J1dHRvbicsXG4gICdjYW52YXMnLFxuICAnY2FwdGlvbicsXG4gICdjaXRlJyxcbiAgJ2NvZGUnLFxuICAnZGQnLFxuICAnZGVsJyxcbiAgJ2RldGFpbHMnLFxuICAnZGZuJyxcbiAgJ2RpdicsXG4gICdkbCcsXG4gICdkdCcsXG4gICdlbScsXG4gICdmaWVsZHNldCcsXG4gICdmaWdjYXB0aW9uJyxcbiAgJ2ZpZ3VyZScsXG4gICdmb290ZXInLFxuICAnZm9ybScsXG4gICdoMScsXG4gICdoMicsXG4gICdoMycsXG4gICdoNCcsXG4gICdoNScsXG4gICdoNicsXG4gICdoZWFkZXInLFxuICAnaGdyb3VwJyxcbiAgJ2h0bWwnLFxuICAnaScsXG4gICdpZnJhbWUnLFxuICAnaW1nJyxcbiAgJ2lucHV0JyxcbiAgJ2lucycsXG4gICdrYmQnLFxuICAnbGFiZWwnLFxuICAnbGVnZW5kJyxcbiAgJ2xpJyxcbiAgJ21haW4nLFxuICAnbWFyaycsXG4gICdtZW51JyxcbiAgJ25hdicsXG4gICdvYmplY3QnLFxuICAnb2wnLFxuICAncCcsXG4gICdxJyxcbiAgJ3F1b3RlJyxcbiAgJ3NhbXAnLFxuICAnc2VjdGlvbicsXG4gICdzcGFuJyxcbiAgJ3N0cm9uZycsXG4gICdzdW1tYXJ5JyxcbiAgJ3N1cCcsXG4gICd0YWJsZScsXG4gICd0Ym9keScsXG4gICd0ZCcsXG4gICd0ZXh0YXJlYScsXG4gICd0Zm9vdCcsXG4gICd0aCcsXG4gICd0aGVhZCcsXG4gICd0aW1lJyxcbiAgJ3RyJyxcbiAgJ3VsJyxcbiAgJ3ZhcicsXG4gICd2aWRlbydcbl07XG5cbmNvbnN0IE1FRElBX0ZFQVRVUkVTID0gW1xuICAnYW55LWhvdmVyJyxcbiAgJ2FueS1wb2ludGVyJyxcbiAgJ2FzcGVjdC1yYXRpbycsXG4gICdjb2xvcicsXG4gICdjb2xvci1nYW11dCcsXG4gICdjb2xvci1pbmRleCcsXG4gICdkZXZpY2UtYXNwZWN0LXJhdGlvJyxcbiAgJ2RldmljZS1oZWlnaHQnLFxuICAnZGV2aWNlLXdpZHRoJyxcbiAgJ2Rpc3BsYXktbW9kZScsXG4gICdmb3JjZWQtY29sb3JzJyxcbiAgJ2dyaWQnLFxuICAnaGVpZ2h0JyxcbiAgJ2hvdmVyJyxcbiAgJ2ludmVydGVkLWNvbG9ycycsXG4gICdtb25vY2hyb21lJyxcbiAgJ29yaWVudGF0aW9uJyxcbiAgJ292ZXJmbG93LWJsb2NrJyxcbiAgJ292ZXJmbG93LWlubGluZScsXG4gICdwb2ludGVyJyxcbiAgJ3ByZWZlcnMtY29sb3Itc2NoZW1lJyxcbiAgJ3ByZWZlcnMtY29udHJhc3QnLFxuICAncHJlZmVycy1yZWR1Y2VkLW1vdGlvbicsXG4gICdwcmVmZXJzLXJlZHVjZWQtdHJhbnNwYXJlbmN5JyxcbiAgJ3Jlc29sdXRpb24nLFxuICAnc2NhbicsXG4gICdzY3JpcHRpbmcnLFxuICAndXBkYXRlJyxcbiAgJ3dpZHRoJyxcbiAgLy8gVE9ETzogZmluZCBhIGJldHRlciBzb2x1dGlvbj9cbiAgJ21pbi13aWR0aCcsXG4gICdtYXgtd2lkdGgnLFxuICAnbWluLWhlaWdodCcsXG4gICdtYXgtaGVpZ2h0J1xuXTtcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL1BzZXVkby1jbGFzc2VzXG5jb25zdCBQU0VVRE9fQ0xBU1NFUyA9IFtcbiAgJ2FjdGl2ZScsXG4gICdhbnktbGluaycsXG4gICdibGFuaycsXG4gICdjaGVja2VkJyxcbiAgJ2N1cnJlbnQnLFxuICAnZGVmYXVsdCcsXG4gICdkZWZpbmVkJyxcbiAgJ2RpcicsIC8vIGRpcigpXG4gICdkaXNhYmxlZCcsXG4gICdkcm9wJyxcbiAgJ2VtcHR5JyxcbiAgJ2VuYWJsZWQnLFxuICAnZmlyc3QnLFxuICAnZmlyc3QtY2hpbGQnLFxuICAnZmlyc3Qtb2YtdHlwZScsXG4gICdmdWxsc2NyZWVuJyxcbiAgJ2Z1dHVyZScsXG4gICdmb2N1cycsXG4gICdmb2N1cy12aXNpYmxlJyxcbiAgJ2ZvY3VzLXdpdGhpbicsXG4gICdoYXMnLCAvLyBoYXMoKVxuICAnaG9zdCcsIC8vIGhvc3Qgb3IgaG9zdCgpXG4gICdob3N0LWNvbnRleHQnLCAvLyBob3N0LWNvbnRleHQoKVxuICAnaG92ZXInLFxuICAnaW5kZXRlcm1pbmF0ZScsXG4gICdpbi1yYW5nZScsXG4gICdpbnZhbGlkJyxcbiAgJ2lzJywgLy8gaXMoKVxuICAnbGFuZycsIC8vIGxhbmcoKVxuICAnbGFzdC1jaGlsZCcsXG4gICdsYXN0LW9mLXR5cGUnLFxuICAnbGVmdCcsXG4gICdsaW5rJyxcbiAgJ2xvY2FsLWxpbmsnLFxuICAnbm90JywgLy8gbm90KClcbiAgJ250aC1jaGlsZCcsIC8vIG50aC1jaGlsZCgpXG4gICdudGgtY29sJywgLy8gbnRoLWNvbCgpXG4gICdudGgtbGFzdC1jaGlsZCcsIC8vIG50aC1sYXN0LWNoaWxkKClcbiAgJ250aC1sYXN0LWNvbCcsIC8vIG50aC1sYXN0LWNvbCgpXG4gICdudGgtbGFzdC1vZi10eXBlJywgLy9udGgtbGFzdC1vZi10eXBlKClcbiAgJ250aC1vZi10eXBlJywgLy9udGgtb2YtdHlwZSgpXG4gICdvbmx5LWNoaWxkJyxcbiAgJ29ubHktb2YtdHlwZScsXG4gICdvcHRpb25hbCcsXG4gICdvdXQtb2YtcmFuZ2UnLFxuICAncGFzdCcsXG4gICdwbGFjZWhvbGRlci1zaG93bicsXG4gICdyZWFkLW9ubHknLFxuICAncmVhZC13cml0ZScsXG4gICdyZXF1aXJlZCcsXG4gICdyaWdodCcsXG4gICdyb290JyxcbiAgJ3Njb3BlJyxcbiAgJ3RhcmdldCcsXG4gICd0YXJnZXQtd2l0aGluJyxcbiAgJ3VzZXItaW52YWxpZCcsXG4gICd2YWxpZCcsXG4gICd2aXNpdGVkJyxcbiAgJ3doZXJlJyAvLyB3aGVyZSgpXG5dO1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvUHNldWRvLWVsZW1lbnRzXG5jb25zdCBQU0VVRE9fRUxFTUVOVFMgPSBbXG4gICdhZnRlcicsXG4gICdiYWNrZHJvcCcsXG4gICdiZWZvcmUnLFxuICAnY3VlJyxcbiAgJ2N1ZS1yZWdpb24nLFxuICAnZmlyc3QtbGV0dGVyJyxcbiAgJ2ZpcnN0LWxpbmUnLFxuICAnZ3JhbW1hci1lcnJvcicsXG4gICdtYXJrZXInLFxuICAncGFydCcsXG4gICdwbGFjZWhvbGRlcicsXG4gICdzZWxlY3Rpb24nLFxuICAnc2xvdHRlZCcsXG4gICdzcGVsbGluZy1lcnJvcidcbl07XG5cbmNvbnN0IEFUVFJJQlVURVMgPSBbXG4gICdhbGlnbi1jb250ZW50JyxcbiAgJ2FsaWduLWl0ZW1zJyxcbiAgJ2FsaWduLXNlbGYnLFxuICAnYWxsJyxcbiAgJ2FuaW1hdGlvbicsXG4gICdhbmltYXRpb24tZGVsYXknLFxuICAnYW5pbWF0aW9uLWRpcmVjdGlvbicsXG4gICdhbmltYXRpb24tZHVyYXRpb24nLFxuICAnYW5pbWF0aW9uLWZpbGwtbW9kZScsXG4gICdhbmltYXRpb24taXRlcmF0aW9uLWNvdW50JyxcbiAgJ2FuaW1hdGlvbi1uYW1lJyxcbiAgJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJyxcbiAgJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLFxuICAnYmFja2ZhY2UtdmlzaWJpbGl0eScsXG4gICdiYWNrZ3JvdW5kJyxcbiAgJ2JhY2tncm91bmQtYXR0YWNobWVudCcsXG4gICdiYWNrZ3JvdW5kLWJsZW5kLW1vZGUnLFxuICAnYmFja2dyb3VuZC1jbGlwJyxcbiAgJ2JhY2tncm91bmQtY29sb3InLFxuICAnYmFja2dyb3VuZC1pbWFnZScsXG4gICdiYWNrZ3JvdW5kLW9yaWdpbicsXG4gICdiYWNrZ3JvdW5kLXBvc2l0aW9uJyxcbiAgJ2JhY2tncm91bmQtcmVwZWF0JyxcbiAgJ2JhY2tncm91bmQtc2l6ZScsXG4gICdibG9jay1zaXplJyxcbiAgJ2JvcmRlcicsXG4gICdib3JkZXItYmxvY2snLFxuICAnYm9yZGVyLWJsb2NrLWNvbG9yJyxcbiAgJ2JvcmRlci1ibG9jay1lbmQnLFxuICAnYm9yZGVyLWJsb2NrLWVuZC1jb2xvcicsXG4gICdib3JkZXItYmxvY2stZW5kLXN0eWxlJyxcbiAgJ2JvcmRlci1ibG9jay1lbmQtd2lkdGgnLFxuICAnYm9yZGVyLWJsb2NrLXN0YXJ0JyxcbiAgJ2JvcmRlci1ibG9jay1zdGFydC1jb2xvcicsXG4gICdib3JkZXItYmxvY2stc3RhcnQtc3R5bGUnLFxuICAnYm9yZGVyLWJsb2NrLXN0YXJ0LXdpZHRoJyxcbiAgJ2JvcmRlci1ibG9jay1zdHlsZScsXG4gICdib3JkZXItYmxvY2std2lkdGgnLFxuICAnYm9yZGVyLWJvdHRvbScsXG4gICdib3JkZXItYm90dG9tLWNvbG9yJyxcbiAgJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnLFxuICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnLFxuICAnYm9yZGVyLWJvdHRvbS1zdHlsZScsXG4gICdib3JkZXItYm90dG9tLXdpZHRoJyxcbiAgJ2JvcmRlci1jb2xsYXBzZScsXG4gICdib3JkZXItY29sb3InLFxuICAnYm9yZGVyLWltYWdlJyxcbiAgJ2JvcmRlci1pbWFnZS1vdXRzZXQnLFxuICAnYm9yZGVyLWltYWdlLXJlcGVhdCcsXG4gICdib3JkZXItaW1hZ2Utc2xpY2UnLFxuICAnYm9yZGVyLWltYWdlLXNvdXJjZScsXG4gICdib3JkZXItaW1hZ2Utd2lkdGgnLFxuICAnYm9yZGVyLWlubGluZScsXG4gICdib3JkZXItaW5saW5lLWNvbG9yJyxcbiAgJ2JvcmRlci1pbmxpbmUtZW5kJyxcbiAgJ2JvcmRlci1pbmxpbmUtZW5kLWNvbG9yJyxcbiAgJ2JvcmRlci1pbmxpbmUtZW5kLXN0eWxlJyxcbiAgJ2JvcmRlci1pbmxpbmUtZW5kLXdpZHRoJyxcbiAgJ2JvcmRlci1pbmxpbmUtc3RhcnQnLFxuICAnYm9yZGVyLWlubGluZS1zdGFydC1jb2xvcicsXG4gICdib3JkZXItaW5saW5lLXN0YXJ0LXN0eWxlJyxcbiAgJ2JvcmRlci1pbmxpbmUtc3RhcnQtd2lkdGgnLFxuICAnYm9yZGVyLWlubGluZS1zdHlsZScsXG4gICdib3JkZXItaW5saW5lLXdpZHRoJyxcbiAgJ2JvcmRlci1sZWZ0JyxcbiAgJ2JvcmRlci1sZWZ0LWNvbG9yJyxcbiAgJ2JvcmRlci1sZWZ0LXN0eWxlJyxcbiAgJ2JvcmRlci1sZWZ0LXdpZHRoJyxcbiAgJ2JvcmRlci1yYWRpdXMnLFxuICAnYm9yZGVyLXJpZ2h0JyxcbiAgJ2JvcmRlci1yaWdodC1jb2xvcicsXG4gICdib3JkZXItcmlnaHQtc3R5bGUnLFxuICAnYm9yZGVyLXJpZ2h0LXdpZHRoJyxcbiAgJ2JvcmRlci1zcGFjaW5nJyxcbiAgJ2JvcmRlci1zdHlsZScsXG4gICdib3JkZXItdG9wJyxcbiAgJ2JvcmRlci10b3AtY29sb3InLFxuICAnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cycsXG4gICdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cycsXG4gICdib3JkZXItdG9wLXN0eWxlJyxcbiAgJ2JvcmRlci10b3Atd2lkdGgnLFxuICAnYm9yZGVyLXdpZHRoJyxcbiAgJ2JvdHRvbScsXG4gICdib3gtZGVjb3JhdGlvbi1icmVhaycsXG4gICdib3gtc2hhZG93JyxcbiAgJ2JveC1zaXppbmcnLFxuICAnYnJlYWstYWZ0ZXInLFxuICAnYnJlYWstYmVmb3JlJyxcbiAgJ2JyZWFrLWluc2lkZScsXG4gICdjYXB0aW9uLXNpZGUnLFxuICAnY2FyZXQtY29sb3InLFxuICAnY2xlYXInLFxuICAnY2xpcCcsXG4gICdjbGlwLXBhdGgnLFxuICAnY2xpcC1ydWxlJyxcbiAgJ2NvbG9yJyxcbiAgJ2NvbHVtbi1jb3VudCcsXG4gICdjb2x1bW4tZmlsbCcsXG4gICdjb2x1bW4tZ2FwJyxcbiAgJ2NvbHVtbi1ydWxlJyxcbiAgJ2NvbHVtbi1ydWxlLWNvbG9yJyxcbiAgJ2NvbHVtbi1ydWxlLXN0eWxlJyxcbiAgJ2NvbHVtbi1ydWxlLXdpZHRoJyxcbiAgJ2NvbHVtbi1zcGFuJyxcbiAgJ2NvbHVtbi13aWR0aCcsXG4gICdjb2x1bW5zJyxcbiAgJ2NvbnRhaW4nLFxuICAnY29udGVudCcsXG4gICdjb250ZW50LXZpc2liaWxpdHknLFxuICAnY291bnRlci1pbmNyZW1lbnQnLFxuICAnY291bnRlci1yZXNldCcsXG4gICdjdWUnLFxuICAnY3VlLWFmdGVyJyxcbiAgJ2N1ZS1iZWZvcmUnLFxuICAnY3Vyc29yJyxcbiAgJ2RpcmVjdGlvbicsXG4gICdkaXNwbGF5JyxcbiAgJ2VtcHR5LWNlbGxzJyxcbiAgJ2ZpbHRlcicsXG4gICdmbGV4JyxcbiAgJ2ZsZXgtYmFzaXMnLFxuICAnZmxleC1kaXJlY3Rpb24nLFxuICAnZmxleC1mbG93JyxcbiAgJ2ZsZXgtZ3JvdycsXG4gICdmbGV4LXNocmluaycsXG4gICdmbGV4LXdyYXAnLFxuICAnZmxvYXQnLFxuICAnZmxvdycsXG4gICdmb250JyxcbiAgJ2ZvbnQtZGlzcGxheScsXG4gICdmb250LWZhbWlseScsXG4gICdmb250LWZlYXR1cmUtc2V0dGluZ3MnLFxuICAnZm9udC1rZXJuaW5nJyxcbiAgJ2ZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGUnLFxuICAnZm9udC1zaXplJyxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnLFxuICAnZm9udC1zbW9vdGhpbmcnLFxuICAnZm9udC1zdHJldGNoJyxcbiAgJ2ZvbnQtc3R5bGUnLFxuICAnZm9udC1zeW50aGVzaXMnLFxuICAnZm9udC12YXJpYW50JyxcbiAgJ2ZvbnQtdmFyaWFudC1jYXBzJyxcbiAgJ2ZvbnQtdmFyaWFudC1lYXN0LWFzaWFuJyxcbiAgJ2ZvbnQtdmFyaWFudC1saWdhdHVyZXMnLFxuICAnZm9udC12YXJpYW50LW51bWVyaWMnLFxuICAnZm9udC12YXJpYW50LXBvc2l0aW9uJyxcbiAgJ2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzJyxcbiAgJ2ZvbnQtd2VpZ2h0JyxcbiAgJ2dhcCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcsXG4gICdncmlkJyxcbiAgJ2dyaWQtYXJlYScsXG4gICdncmlkLWF1dG8tY29sdW1ucycsXG4gICdncmlkLWF1dG8tZmxvdycsXG4gICdncmlkLWF1dG8tcm93cycsXG4gICdncmlkLWNvbHVtbicsXG4gICdncmlkLWNvbHVtbi1lbmQnLFxuICAnZ3JpZC1jb2x1bW4tc3RhcnQnLFxuICAnZ3JpZC1nYXAnLFxuICAnZ3JpZC1yb3cnLFxuICAnZ3JpZC1yb3ctZW5kJyxcbiAgJ2dyaWQtcm93LXN0YXJ0JyxcbiAgJ2dyaWQtdGVtcGxhdGUnLFxuICAnZ3JpZC10ZW1wbGF0ZS1hcmVhcycsXG4gICdncmlkLXRlbXBsYXRlLWNvbHVtbnMnLFxuICAnZ3JpZC10ZW1wbGF0ZS1yb3dzJyxcbiAgJ2hhbmdpbmctcHVuY3R1YXRpb24nLFxuICAnaGVpZ2h0JyxcbiAgJ2h5cGhlbnMnLFxuICAnaWNvbicsXG4gICdpbWFnZS1vcmllbnRhdGlvbicsXG4gICdpbWFnZS1yZW5kZXJpbmcnLFxuICAnaW1hZ2UtcmVzb2x1dGlvbicsXG4gICdpbWUtbW9kZScsXG4gICdpbmxpbmUtc2l6ZScsXG4gICdpc29sYXRpb24nLFxuICAnanVzdGlmeS1jb250ZW50JyxcbiAgJ2xlZnQnLFxuICAnbGV0dGVyLXNwYWNpbmcnLFxuICAnbGluZS1icmVhaycsXG4gICdsaW5lLWhlaWdodCcsXG4gICdsaXN0LXN0eWxlJyxcbiAgJ2xpc3Qtc3R5bGUtaW1hZ2UnLFxuICAnbGlzdC1zdHlsZS1wb3NpdGlvbicsXG4gICdsaXN0LXN0eWxlLXR5cGUnLFxuICAnbWFyZ2luJyxcbiAgJ21hcmdpbi1ibG9jaycsXG4gICdtYXJnaW4tYmxvY2stZW5kJyxcbiAgJ21hcmdpbi1ibG9jay1zdGFydCcsXG4gICdtYXJnaW4tYm90dG9tJyxcbiAgJ21hcmdpbi1pbmxpbmUnLFxuICAnbWFyZ2luLWlubGluZS1lbmQnLFxuICAnbWFyZ2luLWlubGluZS1zdGFydCcsXG4gICdtYXJnaW4tbGVmdCcsXG4gICdtYXJnaW4tcmlnaHQnLFxuICAnbWFyZ2luLXRvcCcsXG4gICdtYXJrcycsXG4gICdtYXNrJyxcbiAgJ21hc2stYm9yZGVyJyxcbiAgJ21hc2stYm9yZGVyLW1vZGUnLFxuICAnbWFzay1ib3JkZXItb3V0c2V0JyxcbiAgJ21hc2stYm9yZGVyLXJlcGVhdCcsXG4gICdtYXNrLWJvcmRlci1zbGljZScsXG4gICdtYXNrLWJvcmRlci1zb3VyY2UnLFxuICAnbWFzay1ib3JkZXItd2lkdGgnLFxuICAnbWFzay1jbGlwJyxcbiAgJ21hc2stY29tcG9zaXRlJyxcbiAgJ21hc2staW1hZ2UnLFxuICAnbWFzay1tb2RlJyxcbiAgJ21hc2stb3JpZ2luJyxcbiAgJ21hc2stcG9zaXRpb24nLFxuICAnbWFzay1yZXBlYXQnLFxuICAnbWFzay1zaXplJyxcbiAgJ21hc2stdHlwZScsXG4gICdtYXgtYmxvY2stc2l6ZScsXG4gICdtYXgtaGVpZ2h0JyxcbiAgJ21heC1pbmxpbmUtc2l6ZScsXG4gICdtYXgtd2lkdGgnLFxuICAnbWluLWJsb2NrLXNpemUnLFxuICAnbWluLWhlaWdodCcsXG4gICdtaW4taW5saW5lLXNpemUnLFxuICAnbWluLXdpZHRoJyxcbiAgJ21peC1ibGVuZC1tb2RlJyxcbiAgJ25hdi1kb3duJyxcbiAgJ25hdi1pbmRleCcsXG4gICduYXYtbGVmdCcsXG4gICduYXYtcmlnaHQnLFxuICAnbmF2LXVwJyxcbiAgJ25vbmUnLFxuICAnbm9ybWFsJyxcbiAgJ29iamVjdC1maXQnLFxuICAnb2JqZWN0LXBvc2l0aW9uJyxcbiAgJ29wYWNpdHknLFxuICAnb3JkZXInLFxuICAnb3JwaGFucycsXG4gICdvdXRsaW5lJyxcbiAgJ291dGxpbmUtY29sb3InLFxuICAnb3V0bGluZS1vZmZzZXQnLFxuICAnb3V0bGluZS1zdHlsZScsXG4gICdvdXRsaW5lLXdpZHRoJyxcbiAgJ292ZXJmbG93JyxcbiAgJ292ZXJmbG93LXdyYXAnLFxuICAnb3ZlcmZsb3cteCcsXG4gICdvdmVyZmxvdy15JyxcbiAgJ3BhZGRpbmcnLFxuICAncGFkZGluZy1ibG9jaycsXG4gICdwYWRkaW5nLWJsb2NrLWVuZCcsXG4gICdwYWRkaW5nLWJsb2NrLXN0YXJ0JyxcbiAgJ3BhZGRpbmctYm90dG9tJyxcbiAgJ3BhZGRpbmctaW5saW5lJyxcbiAgJ3BhZGRpbmctaW5saW5lLWVuZCcsXG4gICdwYWRkaW5nLWlubGluZS1zdGFydCcsXG4gICdwYWRkaW5nLWxlZnQnLFxuICAncGFkZGluZy1yaWdodCcsXG4gICdwYWRkaW5nLXRvcCcsXG4gICdwYWdlLWJyZWFrLWFmdGVyJyxcbiAgJ3BhZ2UtYnJlYWstYmVmb3JlJyxcbiAgJ3BhZ2UtYnJlYWstaW5zaWRlJyxcbiAgJ3BhdXNlJyxcbiAgJ3BhdXNlLWFmdGVyJyxcbiAgJ3BhdXNlLWJlZm9yZScsXG4gICdwZXJzcGVjdGl2ZScsXG4gICdwZXJzcGVjdGl2ZS1vcmlnaW4nLFxuICAncG9pbnRlci1ldmVudHMnLFxuICAncG9zaXRpb24nLFxuICAncXVvdGVzJyxcbiAgJ3Jlc2l6ZScsXG4gICdyZXN0JyxcbiAgJ3Jlc3QtYWZ0ZXInLFxuICAncmVzdC1iZWZvcmUnLFxuICAncmlnaHQnLFxuICAncm93LWdhcCcsXG4gICdzY3JvbGwtbWFyZ2luJyxcbiAgJ3Njcm9sbC1tYXJnaW4tYmxvY2snLFxuICAnc2Nyb2xsLW1hcmdpbi1ibG9jay1lbmQnLFxuICAnc2Nyb2xsLW1hcmdpbi1ibG9jay1zdGFydCcsXG4gICdzY3JvbGwtbWFyZ2luLWJvdHRvbScsXG4gICdzY3JvbGwtbWFyZ2luLWlubGluZScsXG4gICdzY3JvbGwtbWFyZ2luLWlubGluZS1lbmQnLFxuICAnc2Nyb2xsLW1hcmdpbi1pbmxpbmUtc3RhcnQnLFxuICAnc2Nyb2xsLW1hcmdpbi1sZWZ0JyxcbiAgJ3Njcm9sbC1tYXJnaW4tcmlnaHQnLFxuICAnc2Nyb2xsLW1hcmdpbi10b3AnLFxuICAnc2Nyb2xsLXBhZGRpbmcnLFxuICAnc2Nyb2xsLXBhZGRpbmctYmxvY2snLFxuICAnc2Nyb2xsLXBhZGRpbmctYmxvY2stZW5kJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWJsb2NrLXN0YXJ0JyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWJvdHRvbScsXG4gICdzY3JvbGwtcGFkZGluZy1pbmxpbmUnLFxuICAnc2Nyb2xsLXBhZGRpbmctaW5saW5lLWVuZCcsXG4gICdzY3JvbGwtcGFkZGluZy1pbmxpbmUtc3RhcnQnLFxuICAnc2Nyb2xsLXBhZGRpbmctbGVmdCcsXG4gICdzY3JvbGwtcGFkZGluZy1yaWdodCcsXG4gICdzY3JvbGwtcGFkZGluZy10b3AnLFxuICAnc2Nyb2xsLXNuYXAtYWxpZ24nLFxuICAnc2Nyb2xsLXNuYXAtc3RvcCcsXG4gICdzY3JvbGwtc25hcC10eXBlJyxcbiAgJ3Njcm9sbGJhci1jb2xvcicsXG4gICdzY3JvbGxiYXItZ3V0dGVyJyxcbiAgJ3Njcm9sbGJhci13aWR0aCcsXG4gICdzaGFwZS1pbWFnZS10aHJlc2hvbGQnLFxuICAnc2hhcGUtbWFyZ2luJyxcbiAgJ3NoYXBlLW91dHNpZGUnLFxuICAnc3BlYWsnLFxuICAnc3BlYWstYXMnLFxuICAnc3JjJywgLy8gQGZvbnQtZmFjZVxuICAndGFiLXNpemUnLFxuICAndGFibGUtbGF5b3V0JyxcbiAgJ3RleHQtYWxpZ24nLFxuICAndGV4dC1hbGlnbi1hbGwnLFxuICAndGV4dC1hbGlnbi1sYXN0JyxcbiAgJ3RleHQtY29tYmluZS11cHJpZ2h0JyxcbiAgJ3RleHQtZGVjb3JhdGlvbicsXG4gICd0ZXh0LWRlY29yYXRpb24tY29sb3InLFxuICAndGV4dC1kZWNvcmF0aW9uLWxpbmUnLFxuICAndGV4dC1kZWNvcmF0aW9uLXN0eWxlJyxcbiAgJ3RleHQtZW1waGFzaXMnLFxuICAndGV4dC1lbXBoYXNpcy1jb2xvcicsXG4gICd0ZXh0LWVtcGhhc2lzLXBvc2l0aW9uJyxcbiAgJ3RleHQtZW1waGFzaXMtc3R5bGUnLFxuICAndGV4dC1pbmRlbnQnLFxuICAndGV4dC1qdXN0aWZ5JyxcbiAgJ3RleHQtb3JpZW50YXRpb24nLFxuICAndGV4dC1vdmVyZmxvdycsXG4gICd0ZXh0LXJlbmRlcmluZycsXG4gICd0ZXh0LXNoYWRvdycsXG4gICd0ZXh0LXRyYW5zZm9ybScsXG4gICd0ZXh0LXVuZGVybGluZS1wb3NpdGlvbicsXG4gICd0b3AnLFxuICAndHJhbnNmb3JtJyxcbiAgJ3RyYW5zZm9ybS1ib3gnLFxuICAndHJhbnNmb3JtLW9yaWdpbicsXG4gICd0cmFuc2Zvcm0tc3R5bGUnLFxuICAndHJhbnNpdGlvbicsXG4gICd0cmFuc2l0aW9uLWRlbGF5JyxcbiAgJ3RyYW5zaXRpb24tZHVyYXRpb24nLFxuICAndHJhbnNpdGlvbi1wcm9wZXJ0eScsXG4gICd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsXG4gICd1bmljb2RlLWJpZGknLFxuICAndmVydGljYWwtYWxpZ24nLFxuICAndmlzaWJpbGl0eScsXG4gICd2b2ljZS1iYWxhbmNlJyxcbiAgJ3ZvaWNlLWR1cmF0aW9uJyxcbiAgJ3ZvaWNlLWZhbWlseScsXG4gICd2b2ljZS1waXRjaCcsXG4gICd2b2ljZS1yYW5nZScsXG4gICd2b2ljZS1yYXRlJyxcbiAgJ3ZvaWNlLXN0cmVzcycsXG4gICd2b2ljZS12b2x1bWUnLFxuICAnd2hpdGUtc3BhY2UnLFxuICAnd2lkb3dzJyxcbiAgJ3dpZHRoJyxcbiAgJ3dpbGwtY2hhbmdlJyxcbiAgJ3dvcmQtYnJlYWsnLFxuICAnd29yZC1zcGFjaW5nJyxcbiAgJ3dvcmQtd3JhcCcsXG4gICd3cml0aW5nLW1vZGUnLFxuICAnei1pbmRleCdcbiAgLy8gcmV2ZXJzZSBtYWtlcyBzdXJlIGxvbmdlciBhdHRyaWJ1dGVzIGBmb250LXdlaWdodGAgYXJlIG1hdGNoZWQgZnVsbHlcbiAgLy8gaW5zdGVhZCBvZiBnZXR0aW5nIGZhbHNlIHBvc2l0aXZlcyBvbiBzYXkgYGZvbnRgXG5dLnJldmVyc2UoKTtcblxuLypcbkxhbmd1YWdlOiBTQ1NTXG5EZXNjcmlwdGlvbjogU2NzcyBpcyBhbiBleHRlbnNpb24gb2YgdGhlIHN5bnRheCBvZiBDU1MuXG5BdXRob3I6IEt1cnQgRW1jaCA8a3VydEBrdXJ0ZW1jaC5jb20+XG5XZWJzaXRlOiBodHRwczovL3Nhc3MtbGFuZy5jb21cbkNhdGVnb3J5OiBjb21tb24sIGNzcywgd2ViXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gc2NzcyhobGpzKSB7XG4gIGNvbnN0IG1vZGVzID0gTU9ERVMoaGxqcyk7XG4gIGNvbnN0IFBTRVVET19FTEVNRU5UUyQxID0gUFNFVURPX0VMRU1FTlRTO1xuICBjb25zdCBQU0VVRE9fQ0xBU1NFUyQxID0gUFNFVURPX0NMQVNTRVM7XG5cbiAgY29uc3QgQVRfSURFTlRJRklFUiA9ICdAW2Etei1dKyc7IC8vIEBmb250LWZhY2VcbiAgY29uc3QgQVRfTU9ESUZJRVJTID0gXCJhbmQgb3Igbm90IG9ubHlcIjtcbiAgY29uc3QgSURFTlRfUkUgPSAnW2EtekEtWi1dW2EtekEtWjAtOV8tXSonO1xuICBjb25zdCBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46ICcoXFxcXCQnICsgSURFTlRfUkUgKyAnKVxcXFxiJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdTQ1NTJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGlsbGVnYWw6ICdbPS98XFwnXScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAvLyB0byByZWNvZ25pemUga2V5ZnJhbWUgNDAlIGV0YyB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2Ygb3VyXG4gICAgICAvLyBhdHRyaWJ1dGUgdmFsdWUgbW9kZVxuICAgICAgbW9kZXMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1pZCcsXG4gICAgICAgIGJlZ2luOiAnI1tBLVphLXowLTlfLV0rJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1jbGFzcycsXG4gICAgICAgIGJlZ2luOiAnXFxcXC5bQS1aYS16MC05Xy1dKycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIG1vZGVzLkFUVFJJQlVURV9TRUxFQ1RPUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci10YWcnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBUQUdTLmpvaW4oJ3wnKSArICcpXFxcXGInLFxuICAgICAgICAvLyB3YXMgdGhlcmUsIGJlZm9yZSwgYnV0IHdoeT9cbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1wc2V1ZG8nLFxuICAgICAgICBiZWdpbjogJzooJyArIFBTRVVET19DTEFTU0VTJDEuam9pbignfCcpICsgJyknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1wc2V1ZG8nLFxuICAgICAgICBiZWdpbjogJzooOik/KCcgKyBQU0VVRE9fRUxFTUVOVFMkMS5qb2luKCd8JykgKyAnKSdcbiAgICAgIH0sXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIHsgLy8gcHNldWRvLXNlbGVjdG9yIHBhcmFtc1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGNvbnRhaW5zOiBbIG1vZGVzLkNTU19OVU1CRVJfTU9ERSBdXG4gICAgICB9LFxuICAgICAgbW9kZXMuQ1NTX1ZBUklBQkxFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBBVFRSSUJVVEVTLmpvaW4oJ3wnKSArICcpXFxcXGInXG4gICAgICB9LFxuICAgICAgeyBiZWdpbjogJ1xcXFxiKHdoaXRlc3BhY2V8d2FpdHx3LXJlc2l6ZXx2aXNpYmxlfHZlcnRpY2FsLXRleHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dXBwZXJjYXNlfHVwcGVyLXJvbWFufHVwcGVyLWFscGhhfHVuZGVybGluZXx0cmFuc3BhcmVudHx0b3B8dGhpbnx0aGlja3x0ZXh0fHRleHQtdG9wfHRleHQtYm90dG9tfHRiLXJsfHRhYmxlLWhlYWRlci1ncm91cHx0YWJsZS1mb290ZXItZ3JvdXB8c3ctcmVzaXplfHN1cGVyfHN0cmljdHxzdGF0aWN8c3F1YXJlfHNvbGlkfHNtYWxsLWNhcHN8c2VwYXJhdGV8c2UtcmVzaXplfHNjcm9sbHxzLXJlc2l6ZXxydGx8cm93LXJlc2l6ZXxyaWRnZXxyaWdodHxyZXBlYXR8cmVwZWF0LXl8cmVwZWF0LXh8cmVsYXRpdmV8cHJvZ3Jlc3N8cG9pbnRlcnxvdmVybGluZXxvdXRzaWRlfG91dHNldHxvYmxpcXVlfG5vd3JhcHxub3QtYWxsb3dlZHxub3JtYWx8bm9uZXxudy1yZXNpemV8bm8tcmVwZWF0fG5vLWRyb3B8bmV3c3BhcGVyfG5lLXJlc2l6ZXxuLXJlc2l6ZXxtb3ZlfG1pZGRsZXxtZWRpdW18bHRyfGxyLXRifGxvd2VyY2FzZXxsb3dlci1yb21hbnxsb3dlci1hbHBoYXxsb29zZXxsaXN0LWl0ZW18bGluZXxsaW5lLXRocm91Z2h8bGluZS1lZGdlfGxpZ2h0ZXJ8bGVmdHxrZWVwLWFsbHxqdXN0aWZ5fGl0YWxpY3xpbnRlci13b3JkfGludGVyLWlkZW9ncmFwaHxpbnNpZGV8aW5zZXR8aW5saW5lfGlubGluZS1ibG9ja3xpbmhlcml0fGluYWN0aXZlfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLWFscGhhfGhvcml6b250YWx8aGlkZGVufGhlbHB8aGFuZHxncm9vdmV8Zml4ZWR8ZWxsaXBzaXN8ZS1yZXNpemV8ZG91YmxlfGRvdHRlZHxkaXN0cmlidXRlfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZS1sZXR0ZXJ8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzY3xkaXNhYmxlZHxkZWZhdWx0fGRlY2ltYWx8ZGFzaGVkfGNyb3NzaGFpcnxjb2xsYXBzZXxjb2wtcmVzaXplfGNpcmNsZXxjaGFyfGNlbnRlcnxjYXBpdGFsaXplfGJyZWFrLXdvcmR8YnJlYWstYWxsfGJvdHRvbXxib3RofGJvbGRlcnxib2xkfGJsb2NrfGJpZGktb3ZlcnJpZGV8YmVsb3d8YmFzZWxpbmV8YXV0b3xhbHdheXN8YWxsLXNjcm9sbHxhYnNvbHV0ZXx0YWJsZXx0YWJsZS1jZWxsKVxcXFxiJyB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLzovLFxuICAgICAgICBlbmQ6IC9bO317XS8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBtb2Rlcy5CTE9DS19DT01NRU5ULFxuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIG1vZGVzLkhFWENPTE9SLFxuICAgICAgICAgIG1vZGVzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBtb2Rlcy5JTVBPUlRBTlQsXG4gICAgICAgICAgbW9kZXMuRlVOQ1RJT05fRElTUEFUQ0hcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIG1hdGNoaW5nIHRoZXNlIGhlcmUgYWxsb3dzIHVzIHRvIHRyZWF0IHRoZW0gbW9yZSBsaWtlIHJlZ3VsYXIgQ1NTXG4gICAgICAvLyBydWxlcyBzbyBldmVyeXRoaW5nIGJldHdlZW4gdGhlIHt9IGdldHMgcmVndWxhciBydWxlIGhpZ2hsaWdodGluZyxcbiAgICAgIC8vIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCBmb3IgcGFnZSBhbmQgZm9udC1mYWNlXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnQChwYWdlfGZvbnQtZmFjZSknLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICRwYXR0ZXJuOiBBVF9JREVOVElGSUVSLFxuICAgICAgICAgIGtleXdvcmQ6ICdAcGFnZSBAZm9udC1mYWNlJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ0AnLFxuICAgICAgICBlbmQ6ICdbeztdJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgJHBhdHRlcm46IC9bYS16LV0rLyxcbiAgICAgICAgICBrZXl3b3JkOiBBVF9NT0RJRklFUlMsXG4gICAgICAgICAgYXR0cmlidXRlOiBNRURJQV9GRUFUVVJFUy5qb2luKFwiIFwiKVxuICAgICAgICB9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBBVF9JREVOVElGSUVSLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImtleXdvcmRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9bYS16LV0rKD89OikvLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImF0dHJpYnV0ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBtb2Rlcy5IRVhDT0xPUixcbiAgICAgICAgICBtb2Rlcy5DU1NfTlVNQkVSX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIG1vZGVzLkZVTkNUSU9OX0RJU1BBVENIXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNjc3M7XG4iLCIvKlxuTGFuZ3VhZ2U6IFNoZWxsIFNlc3Npb25cblJlcXVpcmVzOiBiYXNoLmpzXG5BdXRob3I6IFRTVVlVU0FUTyBLaXRzdW5lIDxtYWtlLmp1c3Qub25AZ21haWwuY29tPlxuQ2F0ZWdvcnk6IGNvbW1vblxuQXVkaXQ6IDIwMjBcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBzaGVsbChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1NoZWxsIFNlc3Npb24nLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdjb25zb2xlJyxcbiAgICAgICdzaGVsbHNlc3Npb24nXG4gICAgXSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhLnByb21wdCcsXG4gICAgICAgIC8vIFdlIGNhbm5vdCBhZGQgXFxzIChzcGFjZXMpIGluIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gb3RoZXJ3aXNlIGl0IHdpbGwgYmUgdG9vIGJyb2FkIGFuZCBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0LlxuICAgICAgICAvLyBGb3IgaW5zdGFuY2UsIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgaXQgd291bGQgbWF0Y2ggXCJlY2hvIC9wYXRoL3RvL2hvbWUgPlwiIGFzIGEgcHJvbXB0OlxuICAgICAgICAvLyBlY2hvIC9wYXRoL3RvL2hvbWUgPiB0LmV4ZVxuICAgICAgICBiZWdpbjogL15cXHN7MCwzfVsvflxcd1xcZFtcXF0oKUAtXSpbPiUkI11bIF0/LyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAvW15cXFxcXSg/PVxccyokKS8sXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdiYXNoJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNoZWxsO1xuIiwiLypcbiBMYW5ndWFnZTogU1FMXG4gV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1FMXG4gQ2F0ZWdvcnk6IGNvbW1vbiwgZGF0YWJhc2VcbiAqL1xuXG4vKlxuXG5Hb2FsczpcblxuU1FMIGlzIGludGVuZGVkIHRvIGhpZ2hsaWdodCBiYXNpYy9jb21tb24gU1FMIGtleXdvcmRzIGFuZCBleHByZXNzaW9uc1xuXG4tIElmIHByZXR0eSBtdWNoIGV2ZXJ5IHNpbmdsZSBTUUwgc2VydmVyIGluY2x1ZGVzIHN1cHBvcnRzLCB0aGVuIGl0J3MgYSBjYW5pZGF0ZS5cbi0gSXQgaXMgTk9UIGludGVuZGVkIHRvIGluY2x1ZGUgdG9ucyBvZiB2ZW5kb3Igc3BlY2lmaWMga2V5d29yZHMgKE9yYWNsZSwgTXlTUUwsXG4gIFBvc3RncmVTUUwpIGFsdGhvdWdoIHRoZSBsaXN0IG9mIGRhdGEgdHlwZXMgaXMgcHVycG9zZWx5IGEgYml0IG1vcmUgZXhwYW5zaXZlLlxuLSBGb3IgbW9yZSBzcGVjaWZpYyBTUUwgZ3JhbW1hcnMgcGxlYXNlIHNlZTpcbiAgLSBQb3N0Z3JlU1FMIGFuZCBQTC9wZ1NRTCAtIGNvcmVcbiAgLSBULVNRTCAtIGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHRqcy10c3FsXG4gIC0gc3FsX21vcmUgKGNvcmUpXG5cbiAqL1xuXG5mdW5jdGlvbiBzcWwoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIGNvbnN0IENPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpO1xuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICBlbmQ6IC8nLyxcbiAgICAgICAgY29udGFpbnM6IFsgeyBiZWdpbjogLycnLyB9IF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFFVT1RFRF9JREVOVElGSUVSID0ge1xuICAgIGJlZ2luOiAvXCIvLFxuICAgIGVuZDogL1wiLyxcbiAgICBjb250YWluczogWyB7IGJlZ2luOiAvXCJcIi8gfSBdXG4gIH07XG5cbiAgY29uc3QgTElURVJBTFMgPSBbXG4gICAgXCJ0cnVlXCIsXG4gICAgXCJmYWxzZVwiLFxuICAgIC8vIE5vdCBzdXJlIGl0J3MgY29ycmVjdCB0byBjYWxsIE5VTEwgbGl0ZXJhbCwgYW5kIGNsYXVzZXMgbGlrZSBJUyBbTk9UXSBOVUxMIGxvb2sgc3RyYW5nZSB0aGF0IHdheS5cbiAgICAvLyBcIm51bGxcIixcbiAgICBcInVua25vd25cIlxuICBdO1xuXG4gIGNvbnN0IE1VTFRJX1dPUkRfVFlQRVMgPSBbXG4gICAgXCJkb3VibGUgcHJlY2lzaW9uXCIsXG4gICAgXCJsYXJnZSBvYmplY3RcIixcbiAgICBcIndpdGggdGltZXpvbmVcIixcbiAgICBcIndpdGhvdXQgdGltZXpvbmVcIlxuICBdO1xuXG4gIGNvbnN0IFRZUEVTID0gW1xuICAgICdiaWdpbnQnLFxuICAgICdiaW5hcnknLFxuICAgICdibG9iJyxcbiAgICAnYm9vbGVhbicsXG4gICAgJ2NoYXInLFxuICAgICdjaGFyYWN0ZXInLFxuICAgICdjbG9iJyxcbiAgICAnZGF0ZScsXG4gICAgJ2RlYycsXG4gICAgJ2RlY2Zsb2F0JyxcbiAgICAnZGVjaW1hbCcsXG4gICAgJ2Zsb2F0JyxcbiAgICAnaW50JyxcbiAgICAnaW50ZWdlcicsXG4gICAgJ2ludGVydmFsJyxcbiAgICAnbmNoYXInLFxuICAgICduY2xvYicsXG4gICAgJ25hdGlvbmFsJyxcbiAgICAnbnVtZXJpYycsXG4gICAgJ3JlYWwnLFxuICAgICdyb3cnLFxuICAgICdzbWFsbGludCcsXG4gICAgJ3RpbWUnLFxuICAgICd0aW1lc3RhbXAnLFxuICAgICd2YXJjaGFyJyxcbiAgICAndmFyeWluZycsIC8vIG1vZGlmaWVyIChjaGFyYWN0ZXIgdmFyeWluZylcbiAgICAndmFyYmluYXJ5J1xuICBdO1xuXG4gIGNvbnN0IE5PTl9SRVNFUlZFRF9XT1JEUyA9IFtcbiAgICBcImFkZFwiLFxuICAgIFwiYXNjXCIsXG4gICAgXCJjb2xsYXRpb25cIixcbiAgICBcImRlc2NcIixcbiAgICBcImZpbmFsXCIsXG4gICAgXCJmaXJzdFwiLFxuICAgIFwibGFzdFwiLFxuICAgIFwidmlld1wiXG4gIF07XG5cbiAgLy8gaHR0cHM6Ly9qYWtld2hlYXQuZ2l0aHViLmlvL3NxbC1vdmVydmlldy9zcWwtMjAxNi1mb3VuZGF0aW9uLWdyYW1tYXIuaHRtbCNyZXNlcnZlZC13b3JkXG4gIGNvbnN0IFJFU0VSVkVEX1dPUkRTID0gW1xuICAgIFwiYWJzXCIsXG4gICAgXCJhY29zXCIsXG4gICAgXCJhbGxcIixcbiAgICBcImFsbG9jYXRlXCIsXG4gICAgXCJhbHRlclwiLFxuICAgIFwiYW5kXCIsXG4gICAgXCJhbnlcIixcbiAgICBcImFyZVwiLFxuICAgIFwiYXJyYXlcIixcbiAgICBcImFycmF5X2FnZ1wiLFxuICAgIFwiYXJyYXlfbWF4X2NhcmRpbmFsaXR5XCIsXG4gICAgXCJhc1wiLFxuICAgIFwiYXNlbnNpdGl2ZVwiLFxuICAgIFwiYXNpblwiLFxuICAgIFwiYXN5bW1ldHJpY1wiLFxuICAgIFwiYXRcIixcbiAgICBcImF0YW5cIixcbiAgICBcImF0b21pY1wiLFxuICAgIFwiYXV0aG9yaXphdGlvblwiLFxuICAgIFwiYXZnXCIsXG4gICAgXCJiZWdpblwiLFxuICAgIFwiYmVnaW5fZnJhbWVcIixcbiAgICBcImJlZ2luX3BhcnRpdGlvblwiLFxuICAgIFwiYmV0d2VlblwiLFxuICAgIFwiYmlnaW50XCIsXG4gICAgXCJiaW5hcnlcIixcbiAgICBcImJsb2JcIixcbiAgICBcImJvb2xlYW5cIixcbiAgICBcImJvdGhcIixcbiAgICBcImJ5XCIsXG4gICAgXCJjYWxsXCIsXG4gICAgXCJjYWxsZWRcIixcbiAgICBcImNhcmRpbmFsaXR5XCIsXG4gICAgXCJjYXNjYWRlZFwiLFxuICAgIFwiY2FzZVwiLFxuICAgIFwiY2FzdFwiLFxuICAgIFwiY2VpbFwiLFxuICAgIFwiY2VpbGluZ1wiLFxuICAgIFwiY2hhclwiLFxuICAgIFwiY2hhcl9sZW5ndGhcIixcbiAgICBcImNoYXJhY3RlclwiLFxuICAgIFwiY2hhcmFjdGVyX2xlbmd0aFwiLFxuICAgIFwiY2hlY2tcIixcbiAgICBcImNsYXNzaWZpZXJcIixcbiAgICBcImNsb2JcIixcbiAgICBcImNsb3NlXCIsXG4gICAgXCJjb2FsZXNjZVwiLFxuICAgIFwiY29sbGF0ZVwiLFxuICAgIFwiY29sbGVjdFwiLFxuICAgIFwiY29sdW1uXCIsXG4gICAgXCJjb21taXRcIixcbiAgICBcImNvbmRpdGlvblwiLFxuICAgIFwiY29ubmVjdFwiLFxuICAgIFwiY29uc3RyYWludFwiLFxuICAgIFwiY29udGFpbnNcIixcbiAgICBcImNvbnZlcnRcIixcbiAgICBcImNvcHlcIixcbiAgICBcImNvcnJcIixcbiAgICBcImNvcnJlc3BvbmRpbmdcIixcbiAgICBcImNvc1wiLFxuICAgIFwiY29zaFwiLFxuICAgIFwiY291bnRcIixcbiAgICBcImNvdmFyX3BvcFwiLFxuICAgIFwiY292YXJfc2FtcFwiLFxuICAgIFwiY3JlYXRlXCIsXG4gICAgXCJjcm9zc1wiLFxuICAgIFwiY3ViZVwiLFxuICAgIFwiY3VtZV9kaXN0XCIsXG4gICAgXCJjdXJyZW50XCIsXG4gICAgXCJjdXJyZW50X2NhdGFsb2dcIixcbiAgICBcImN1cnJlbnRfZGF0ZVwiLFxuICAgIFwiY3VycmVudF9kZWZhdWx0X3RyYW5zZm9ybV9ncm91cFwiLFxuICAgIFwiY3VycmVudF9wYXRoXCIsXG4gICAgXCJjdXJyZW50X3JvbGVcIixcbiAgICBcImN1cnJlbnRfcm93XCIsXG4gICAgXCJjdXJyZW50X3NjaGVtYVwiLFxuICAgIFwiY3VycmVudF90aW1lXCIsXG4gICAgXCJjdXJyZW50X3RpbWVzdGFtcFwiLFxuICAgIFwiY3VycmVudF9wYXRoXCIsXG4gICAgXCJjdXJyZW50X3JvbGVcIixcbiAgICBcImN1cnJlbnRfdHJhbnNmb3JtX2dyb3VwX2Zvcl90eXBlXCIsXG4gICAgXCJjdXJyZW50X3VzZXJcIixcbiAgICBcImN1cnNvclwiLFxuICAgIFwiY3ljbGVcIixcbiAgICBcImRhdGVcIixcbiAgICBcImRheVwiLFxuICAgIFwiZGVhbGxvY2F0ZVwiLFxuICAgIFwiZGVjXCIsXG4gICAgXCJkZWNpbWFsXCIsXG4gICAgXCJkZWNmbG9hdFwiLFxuICAgIFwiZGVjbGFyZVwiLFxuICAgIFwiZGVmYXVsdFwiLFxuICAgIFwiZGVmaW5lXCIsXG4gICAgXCJkZWxldGVcIixcbiAgICBcImRlbnNlX3JhbmtcIixcbiAgICBcImRlcmVmXCIsXG4gICAgXCJkZXNjcmliZVwiLFxuICAgIFwiZGV0ZXJtaW5pc3RpY1wiLFxuICAgIFwiZGlzY29ubmVjdFwiLFxuICAgIFwiZGlzdGluY3RcIixcbiAgICBcImRvdWJsZVwiLFxuICAgIFwiZHJvcFwiLFxuICAgIFwiZHluYW1pY1wiLFxuICAgIFwiZWFjaFwiLFxuICAgIFwiZWxlbWVudFwiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwiZW1wdHlcIixcbiAgICBcImVuZFwiLFxuICAgIFwiZW5kX2ZyYW1lXCIsXG4gICAgXCJlbmRfcGFydGl0aW9uXCIsXG4gICAgXCJlbmQtZXhlY1wiLFxuICAgIFwiZXF1YWxzXCIsXG4gICAgXCJlc2NhcGVcIixcbiAgICBcImV2ZXJ5XCIsXG4gICAgXCJleGNlcHRcIixcbiAgICBcImV4ZWNcIixcbiAgICBcImV4ZWN1dGVcIixcbiAgICBcImV4aXN0c1wiLFxuICAgIFwiZXhwXCIsXG4gICAgXCJleHRlcm5hbFwiLFxuICAgIFwiZXh0cmFjdFwiLFxuICAgIFwiZmFsc2VcIixcbiAgICBcImZldGNoXCIsXG4gICAgXCJmaWx0ZXJcIixcbiAgICBcImZpcnN0X3ZhbHVlXCIsXG4gICAgXCJmbG9hdFwiLFxuICAgIFwiZmxvb3JcIixcbiAgICBcImZvclwiLFxuICAgIFwiZm9yZWlnblwiLFxuICAgIFwiZnJhbWVfcm93XCIsXG4gICAgXCJmcmVlXCIsXG4gICAgXCJmcm9tXCIsXG4gICAgXCJmdWxsXCIsXG4gICAgXCJmdW5jdGlvblwiLFxuICAgIFwiZnVzaW9uXCIsXG4gICAgXCJnZXRcIixcbiAgICBcImdsb2JhbFwiLFxuICAgIFwiZ3JhbnRcIixcbiAgICBcImdyb3VwXCIsXG4gICAgXCJncm91cGluZ1wiLFxuICAgIFwiZ3JvdXBzXCIsXG4gICAgXCJoYXZpbmdcIixcbiAgICBcImhvbGRcIixcbiAgICBcImhvdXJcIixcbiAgICBcImlkZW50aXR5XCIsXG4gICAgXCJpblwiLFxuICAgIFwiaW5kaWNhdG9yXCIsXG4gICAgXCJpbml0aWFsXCIsXG4gICAgXCJpbm5lclwiLFxuICAgIFwiaW5vdXRcIixcbiAgICBcImluc2Vuc2l0aXZlXCIsXG4gICAgXCJpbnNlcnRcIixcbiAgICBcImludFwiLFxuICAgIFwiaW50ZWdlclwiLFxuICAgIFwiaW50ZXJzZWN0XCIsXG4gICAgXCJpbnRlcnNlY3Rpb25cIixcbiAgICBcImludGVydmFsXCIsXG4gICAgXCJpbnRvXCIsXG4gICAgXCJpc1wiLFxuICAgIFwiam9pblwiLFxuICAgIFwianNvbl9hcnJheVwiLFxuICAgIFwianNvbl9hcnJheWFnZ1wiLFxuICAgIFwianNvbl9leGlzdHNcIixcbiAgICBcImpzb25fb2JqZWN0XCIsXG4gICAgXCJqc29uX29iamVjdGFnZ1wiLFxuICAgIFwianNvbl9xdWVyeVwiLFxuICAgIFwianNvbl90YWJsZVwiLFxuICAgIFwianNvbl90YWJsZV9wcmltaXRpdmVcIixcbiAgICBcImpzb25fdmFsdWVcIixcbiAgICBcImxhZ1wiLFxuICAgIFwibGFuZ3VhZ2VcIixcbiAgICBcImxhcmdlXCIsXG4gICAgXCJsYXN0X3ZhbHVlXCIsXG4gICAgXCJsYXRlcmFsXCIsXG4gICAgXCJsZWFkXCIsXG4gICAgXCJsZWFkaW5nXCIsXG4gICAgXCJsZWZ0XCIsXG4gICAgXCJsaWtlXCIsXG4gICAgXCJsaWtlX3JlZ2V4XCIsXG4gICAgXCJsaXN0YWdnXCIsXG4gICAgXCJsblwiLFxuICAgIFwibG9jYWxcIixcbiAgICBcImxvY2FsdGltZVwiLFxuICAgIFwibG9jYWx0aW1lc3RhbXBcIixcbiAgICBcImxvZ1wiLFxuICAgIFwibG9nMTBcIixcbiAgICBcImxvd2VyXCIsXG4gICAgXCJtYXRjaFwiLFxuICAgIFwibWF0Y2hfbnVtYmVyXCIsXG4gICAgXCJtYXRjaF9yZWNvZ25pemVcIixcbiAgICBcIm1hdGNoZXNcIixcbiAgICBcIm1heFwiLFxuICAgIFwibWVtYmVyXCIsXG4gICAgXCJtZXJnZVwiLFxuICAgIFwibWV0aG9kXCIsXG4gICAgXCJtaW5cIixcbiAgICBcIm1pbnV0ZVwiLFxuICAgIFwibW9kXCIsXG4gICAgXCJtb2RpZmllc1wiLFxuICAgIFwibW9kdWxlXCIsXG4gICAgXCJtb250aFwiLFxuICAgIFwibXVsdGlzZXRcIixcbiAgICBcIm5hdGlvbmFsXCIsXG4gICAgXCJuYXR1cmFsXCIsXG4gICAgXCJuY2hhclwiLFxuICAgIFwibmNsb2JcIixcbiAgICBcIm5ld1wiLFxuICAgIFwibm9cIixcbiAgICBcIm5vbmVcIixcbiAgICBcIm5vcm1hbGl6ZVwiLFxuICAgIFwibm90XCIsXG4gICAgXCJudGhfdmFsdWVcIixcbiAgICBcIm50aWxlXCIsXG4gICAgXCJudWxsXCIsXG4gICAgXCJudWxsaWZcIixcbiAgICBcIm51bWVyaWNcIixcbiAgICBcIm9jdGV0X2xlbmd0aFwiLFxuICAgIFwib2NjdXJyZW5jZXNfcmVnZXhcIixcbiAgICBcIm9mXCIsXG4gICAgXCJvZmZzZXRcIixcbiAgICBcIm9sZFwiLFxuICAgIFwib21pdFwiLFxuICAgIFwib25cIixcbiAgICBcIm9uZVwiLFxuICAgIFwib25seVwiLFxuICAgIFwib3BlblwiLFxuICAgIFwib3JcIixcbiAgICBcIm9yZGVyXCIsXG4gICAgXCJvdXRcIixcbiAgICBcIm91dGVyXCIsXG4gICAgXCJvdmVyXCIsXG4gICAgXCJvdmVybGFwc1wiLFxuICAgIFwib3ZlcmxheVwiLFxuICAgIFwicGFyYW1ldGVyXCIsXG4gICAgXCJwYXJ0aXRpb25cIixcbiAgICBcInBhdHRlcm5cIixcbiAgICBcInBlclwiLFxuICAgIFwicGVyY2VudFwiLFxuICAgIFwicGVyY2VudF9yYW5rXCIsXG4gICAgXCJwZXJjZW50aWxlX2NvbnRcIixcbiAgICBcInBlcmNlbnRpbGVfZGlzY1wiLFxuICAgIFwicGVyaW9kXCIsXG4gICAgXCJwb3J0aW9uXCIsXG4gICAgXCJwb3NpdGlvblwiLFxuICAgIFwicG9zaXRpb25fcmVnZXhcIixcbiAgICBcInBvd2VyXCIsXG4gICAgXCJwcmVjZWRlc1wiLFxuICAgIFwicHJlY2lzaW9uXCIsXG4gICAgXCJwcmVwYXJlXCIsXG4gICAgXCJwcmltYXJ5XCIsXG4gICAgXCJwcm9jZWR1cmVcIixcbiAgICBcInB0ZlwiLFxuICAgIFwicmFuZ2VcIixcbiAgICBcInJhbmtcIixcbiAgICBcInJlYWRzXCIsXG4gICAgXCJyZWFsXCIsXG4gICAgXCJyZWN1cnNpdmVcIixcbiAgICBcInJlZlwiLFxuICAgIFwicmVmZXJlbmNlc1wiLFxuICAgIFwicmVmZXJlbmNpbmdcIixcbiAgICBcInJlZ3JfYXZneFwiLFxuICAgIFwicmVncl9hdmd5XCIsXG4gICAgXCJyZWdyX2NvdW50XCIsXG4gICAgXCJyZWdyX2ludGVyY2VwdFwiLFxuICAgIFwicmVncl9yMlwiLFxuICAgIFwicmVncl9zbG9wZVwiLFxuICAgIFwicmVncl9zeHhcIixcbiAgICBcInJlZ3Jfc3h5XCIsXG4gICAgXCJyZWdyX3N5eVwiLFxuICAgIFwicmVsZWFzZVwiLFxuICAgIFwicmVzdWx0XCIsXG4gICAgXCJyZXR1cm5cIixcbiAgICBcInJldHVybnNcIixcbiAgICBcInJldm9rZVwiLFxuICAgIFwicmlnaHRcIixcbiAgICBcInJvbGxiYWNrXCIsXG4gICAgXCJyb2xsdXBcIixcbiAgICBcInJvd1wiLFxuICAgIFwicm93X251bWJlclwiLFxuICAgIFwicm93c1wiLFxuICAgIFwicnVubmluZ1wiLFxuICAgIFwic2F2ZXBvaW50XCIsXG4gICAgXCJzY29wZVwiLFxuICAgIFwic2Nyb2xsXCIsXG4gICAgXCJzZWFyY2hcIixcbiAgICBcInNlY29uZFwiLFxuICAgIFwic2Vla1wiLFxuICAgIFwic2VsZWN0XCIsXG4gICAgXCJzZW5zaXRpdmVcIixcbiAgICBcInNlc3Npb25fdXNlclwiLFxuICAgIFwic2V0XCIsXG4gICAgXCJzaG93XCIsXG4gICAgXCJzaW1pbGFyXCIsXG4gICAgXCJzaW5cIixcbiAgICBcInNpbmhcIixcbiAgICBcInNraXBcIixcbiAgICBcInNtYWxsaW50XCIsXG4gICAgXCJzb21lXCIsXG4gICAgXCJzcGVjaWZpY1wiLFxuICAgIFwic3BlY2lmaWN0eXBlXCIsXG4gICAgXCJzcWxcIixcbiAgICBcInNxbGV4Y2VwdGlvblwiLFxuICAgIFwic3Fsc3RhdGVcIixcbiAgICBcInNxbHdhcm5pbmdcIixcbiAgICBcInNxcnRcIixcbiAgICBcInN0YXJ0XCIsXG4gICAgXCJzdGF0aWNcIixcbiAgICBcInN0ZGRldl9wb3BcIixcbiAgICBcInN0ZGRldl9zYW1wXCIsXG4gICAgXCJzdWJtdWx0aXNldFwiLFxuICAgIFwic3Vic2V0XCIsXG4gICAgXCJzdWJzdHJpbmdcIixcbiAgICBcInN1YnN0cmluZ19yZWdleFwiLFxuICAgIFwic3VjY2VlZHNcIixcbiAgICBcInN1bVwiLFxuICAgIFwic3ltbWV0cmljXCIsXG4gICAgXCJzeXN0ZW1cIixcbiAgICBcInN5c3RlbV90aW1lXCIsXG4gICAgXCJzeXN0ZW1fdXNlclwiLFxuICAgIFwidGFibGVcIixcbiAgICBcInRhYmxlc2FtcGxlXCIsXG4gICAgXCJ0YW5cIixcbiAgICBcInRhbmhcIixcbiAgICBcInRoZW5cIixcbiAgICBcInRpbWVcIixcbiAgICBcInRpbWVzdGFtcFwiLFxuICAgIFwidGltZXpvbmVfaG91clwiLFxuICAgIFwidGltZXpvbmVfbWludXRlXCIsXG4gICAgXCJ0b1wiLFxuICAgIFwidHJhaWxpbmdcIixcbiAgICBcInRyYW5zbGF0ZVwiLFxuICAgIFwidHJhbnNsYXRlX3JlZ2V4XCIsXG4gICAgXCJ0cmFuc2xhdGlvblwiLFxuICAgIFwidHJlYXRcIixcbiAgICBcInRyaWdnZXJcIixcbiAgICBcInRyaW1cIixcbiAgICBcInRyaW1fYXJyYXlcIixcbiAgICBcInRydWVcIixcbiAgICBcInRydW5jYXRlXCIsXG4gICAgXCJ1ZXNjYXBlXCIsXG4gICAgXCJ1bmlvblwiLFxuICAgIFwidW5pcXVlXCIsXG4gICAgXCJ1bmtub3duXCIsXG4gICAgXCJ1bm5lc3RcIixcbiAgICBcInVwZGF0ZVwiLFxuICAgIFwidXBwZXJcIixcbiAgICBcInVzZXJcIixcbiAgICBcInVzaW5nXCIsXG4gICAgXCJ2YWx1ZVwiLFxuICAgIFwidmFsdWVzXCIsXG4gICAgXCJ2YWx1ZV9vZlwiLFxuICAgIFwidmFyX3BvcFwiLFxuICAgIFwidmFyX3NhbXBcIixcbiAgICBcInZhcmJpbmFyeVwiLFxuICAgIFwidmFyY2hhclwiLFxuICAgIFwidmFyeWluZ1wiLFxuICAgIFwidmVyc2lvbmluZ1wiLFxuICAgIFwid2hlblwiLFxuICAgIFwid2hlbmV2ZXJcIixcbiAgICBcIndoZXJlXCIsXG4gICAgXCJ3aWR0aF9idWNrZXRcIixcbiAgICBcIndpbmRvd1wiLFxuICAgIFwid2l0aFwiLFxuICAgIFwid2l0aGluXCIsXG4gICAgXCJ3aXRob3V0XCIsXG4gICAgXCJ5ZWFyXCIsXG4gIF07XG5cbiAgLy8gdGhlc2UgYXJlIHJlc2VydmVkIHdvcmRzIHdlIGhhdmUgaWRlbnRpZmllZCB0byBiZSBmdW5jdGlvbnNcbiAgLy8gYW5kIHNob3VsZCBvbmx5IGJlIGhpZ2hsaWdodGVkIGluIGEgZGlzcGF0Y2gtbGlrZSBjb250ZXh0XG4gIC8vIGllLCBhcnJheV9hZ2coLi4uKSwgZXRjLlxuICBjb25zdCBSRVNFUlZFRF9GVU5DVElPTlMgPSBbXG4gICAgXCJhYnNcIixcbiAgICBcImFjb3NcIixcbiAgICBcImFycmF5X2FnZ1wiLFxuICAgIFwiYXNpblwiLFxuICAgIFwiYXRhblwiLFxuICAgIFwiYXZnXCIsXG4gICAgXCJjYXN0XCIsXG4gICAgXCJjZWlsXCIsXG4gICAgXCJjZWlsaW5nXCIsXG4gICAgXCJjb2FsZXNjZVwiLFxuICAgIFwiY29yclwiLFxuICAgIFwiY29zXCIsXG4gICAgXCJjb3NoXCIsXG4gICAgXCJjb3VudFwiLFxuICAgIFwiY292YXJfcG9wXCIsXG4gICAgXCJjb3Zhcl9zYW1wXCIsXG4gICAgXCJjdW1lX2Rpc3RcIixcbiAgICBcImRlbnNlX3JhbmtcIixcbiAgICBcImRlcmVmXCIsXG4gICAgXCJlbGVtZW50XCIsXG4gICAgXCJleHBcIixcbiAgICBcImV4dHJhY3RcIixcbiAgICBcImZpcnN0X3ZhbHVlXCIsXG4gICAgXCJmbG9vclwiLFxuICAgIFwianNvbl9hcnJheVwiLFxuICAgIFwianNvbl9hcnJheWFnZ1wiLFxuICAgIFwianNvbl9leGlzdHNcIixcbiAgICBcImpzb25fb2JqZWN0XCIsXG4gICAgXCJqc29uX29iamVjdGFnZ1wiLFxuICAgIFwianNvbl9xdWVyeVwiLFxuICAgIFwianNvbl90YWJsZVwiLFxuICAgIFwianNvbl90YWJsZV9wcmltaXRpdmVcIixcbiAgICBcImpzb25fdmFsdWVcIixcbiAgICBcImxhZ1wiLFxuICAgIFwibGFzdF92YWx1ZVwiLFxuICAgIFwibGVhZFwiLFxuICAgIFwibGlzdGFnZ1wiLFxuICAgIFwibG5cIixcbiAgICBcImxvZ1wiLFxuICAgIFwibG9nMTBcIixcbiAgICBcImxvd2VyXCIsXG4gICAgXCJtYXhcIixcbiAgICBcIm1pblwiLFxuICAgIFwibW9kXCIsXG4gICAgXCJudGhfdmFsdWVcIixcbiAgICBcIm50aWxlXCIsXG4gICAgXCJudWxsaWZcIixcbiAgICBcInBlcmNlbnRfcmFua1wiLFxuICAgIFwicGVyY2VudGlsZV9jb250XCIsXG4gICAgXCJwZXJjZW50aWxlX2Rpc2NcIixcbiAgICBcInBvc2l0aW9uXCIsXG4gICAgXCJwb3NpdGlvbl9yZWdleFwiLFxuICAgIFwicG93ZXJcIixcbiAgICBcInJhbmtcIixcbiAgICBcInJlZ3JfYXZneFwiLFxuICAgIFwicmVncl9hdmd5XCIsXG4gICAgXCJyZWdyX2NvdW50XCIsXG4gICAgXCJyZWdyX2ludGVyY2VwdFwiLFxuICAgIFwicmVncl9yMlwiLFxuICAgIFwicmVncl9zbG9wZVwiLFxuICAgIFwicmVncl9zeHhcIixcbiAgICBcInJlZ3Jfc3h5XCIsXG4gICAgXCJyZWdyX3N5eVwiLFxuICAgIFwicm93X251bWJlclwiLFxuICAgIFwic2luXCIsXG4gICAgXCJzaW5oXCIsXG4gICAgXCJzcXJ0XCIsXG4gICAgXCJzdGRkZXZfcG9wXCIsXG4gICAgXCJzdGRkZXZfc2FtcFwiLFxuICAgIFwic3Vic3RyaW5nXCIsXG4gICAgXCJzdWJzdHJpbmdfcmVnZXhcIixcbiAgICBcInN1bVwiLFxuICAgIFwidGFuXCIsXG4gICAgXCJ0YW5oXCIsXG4gICAgXCJ0cmFuc2xhdGVcIixcbiAgICBcInRyYW5zbGF0ZV9yZWdleFwiLFxuICAgIFwidHJlYXRcIixcbiAgICBcInRyaW1cIixcbiAgICBcInRyaW1fYXJyYXlcIixcbiAgICBcInVubmVzdFwiLFxuICAgIFwidXBwZXJcIixcbiAgICBcInZhbHVlX29mXCIsXG4gICAgXCJ2YXJfcG9wXCIsXG4gICAgXCJ2YXJfc2FtcFwiLFxuICAgIFwid2lkdGhfYnVja2V0XCIsXG4gIF07XG5cbiAgLy8gdGhlc2UgZnVuY3Rpb25zIGNhblxuICBjb25zdCBQT1NTSUJMRV9XSVRIT1VUX1BBUkVOUyA9IFtcbiAgICBcImN1cnJlbnRfY2F0YWxvZ1wiLFxuICAgIFwiY3VycmVudF9kYXRlXCIsXG4gICAgXCJjdXJyZW50X2RlZmF1bHRfdHJhbnNmb3JtX2dyb3VwXCIsXG4gICAgXCJjdXJyZW50X3BhdGhcIixcbiAgICBcImN1cnJlbnRfcm9sZVwiLFxuICAgIFwiY3VycmVudF9zY2hlbWFcIixcbiAgICBcImN1cnJlbnRfdHJhbnNmb3JtX2dyb3VwX2Zvcl90eXBlXCIsXG4gICAgXCJjdXJyZW50X3VzZXJcIixcbiAgICBcInNlc3Npb25fdXNlclwiLFxuICAgIFwic3lzdGVtX3RpbWVcIixcbiAgICBcInN5c3RlbV91c2VyXCIsXG4gICAgXCJjdXJyZW50X3RpbWVcIixcbiAgICBcImxvY2FsdGltZVwiLFxuICAgIFwiY3VycmVudF90aW1lc3RhbXBcIixcbiAgICBcImxvY2FsdGltZXN0YW1wXCJcbiAgXTtcblxuICAvLyB0aG9zZSBleGlzdCB0byBib29zdCByZWxldmFuY2UgbWFraW5nIHRoZXNlIHZlcnlcbiAgLy8gXCJTUUwgbGlrZVwiIGtleXdvcmQgY29tYm9zIHdvcnRoICsxIGV4dHJhIHJlbGV2YW5jZVxuICBjb25zdCBDT01CT1MgPSBbXG4gICAgXCJjcmVhdGUgdGFibGVcIixcbiAgICBcImluc2VydCBpbnRvXCIsXG4gICAgXCJwcmltYXJ5IGtleVwiLFxuICAgIFwiZm9yZWlnbiBrZXlcIixcbiAgICBcIm5vdCBudWxsXCIsXG4gICAgXCJhbHRlciB0YWJsZVwiLFxuICAgIFwiYWRkIGNvbnN0cmFpbnRcIixcbiAgICBcImdyb3VwaW5nIHNldHNcIixcbiAgICBcIm9uIG92ZXJmbG93XCIsXG4gICAgXCJjaGFyYWN0ZXIgc2V0XCIsXG4gICAgXCJyZXNwZWN0IG51bGxzXCIsXG4gICAgXCJpZ25vcmUgbnVsbHNcIixcbiAgICBcIm51bGxzIGZpcnN0XCIsXG4gICAgXCJudWxscyBsYXN0XCIsXG4gICAgXCJkZXB0aCBmaXJzdFwiLFxuICAgIFwiYnJlYWR0aCBmaXJzdFwiXG4gIF07XG5cbiAgY29uc3QgRlVOQ1RJT05TID0gUkVTRVJWRURfRlVOQ1RJT05TO1xuXG4gIGNvbnN0IEtFWVdPUkRTID0gW1xuICAgIC4uLlJFU0VSVkVEX1dPUkRTLFxuICAgIC4uLk5PTl9SRVNFUlZFRF9XT1JEU1xuICBdLmZpbHRlcigoa2V5d29yZCkgPT4ge1xuICAgIHJldHVybiAhUkVTRVJWRURfRlVOQ1RJT05TLmluY2x1ZGVzKGtleXdvcmQpO1xuICB9KTtcblxuICBjb25zdCBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6IFwidmFyaWFibGVcIixcbiAgICBiZWdpbjogL0BbYS16MC05XSsvLFxuICB9O1xuXG4gIGNvbnN0IE9QRVJBVE9SID0ge1xuICAgIGNsYXNzTmFtZTogXCJvcGVyYXRvclwiLFxuICAgIGJlZ2luOiAvWy0rKi89JV5+XXwmJj98XFx8XFx8P3whPT98PCg/Oj0+P3w8fD4pP3w+Wz49XT8vLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9DQUxMID0ge1xuICAgIGJlZ2luOiByZWdleC5jb25jYXQoL1xcYi8sIHJlZ2V4LmVpdGhlciguLi5GVU5DVElPTlMpLCAvXFxzKlxcKC8pLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBrZXl3b3JkczogeyBidWlsdF9pbjogRlVOQ1RJT05TIH1cbiAgfTtcblxuICAvLyBrZXl3b3JkcyB3aXRoIGxlc3MgdGhhbiAzIGxldHRlcnMgYXJlIHJlZHVjZWQgaW4gcmVsZXZhbmN5XG4gIGZ1bmN0aW9uIHJlZHVjZVJlbGV2YW5jeShsaXN0LCB7XG4gICAgZXhjZXB0aW9ucywgd2hlblxuICB9ID0ge30pIHtcbiAgICBjb25zdCBxdWFsaWZ5Rm4gPSB3aGVuO1xuICAgIGV4Y2VwdGlvbnMgPSBleGNlcHRpb25zIHx8IFtdO1xuICAgIHJldHVybiBsaXN0Lm1hcCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0ubWF0Y2goL1xcfFxcZCskLykgfHwgZXhjZXB0aW9ucy5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0gZWxzZSBpZiAocXVhbGlmeUZuKGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiBgJHtpdGVtfXwwYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU1FMJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIC8vIGRvZXMgbm90IGluY2x1ZGUge30gb3IgSFRNTCB0YWdzIGA8L2BcbiAgICBpbGxlZ2FsOiAvW3t9XXw8XFwvLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IC9cXGJbXFx3XFwuXSsvLFxuICAgICAga2V5d29yZDpcbiAgICAgICAgcmVkdWNlUmVsZXZhbmN5KEtFWVdPUkRTLCB7IHdoZW46ICh4KSA9PiB4Lmxlbmd0aCA8IDMgfSksXG4gICAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICAgIHR5cGU6IFRZUEVTLFxuICAgICAgYnVpbHRfaW46IFBPU1NJQkxFX1dJVEhPVVRfUEFSRU5TXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogcmVnZXguZWl0aGVyKC4uLkNPTUJPUyksXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAkcGF0dGVybjogL1tcXHdcXC5dKy8sXG4gICAgICAgICAga2V5d29yZDogS0VZV09SRFMuY29uY2F0KENPTUJPUyksXG4gICAgICAgICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgICAgICAgdHlwZTogVFlQRVNcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJ0eXBlXCIsXG4gICAgICAgIGJlZ2luOiByZWdleC5laXRoZXIoLi4uTVVMVElfV09SRF9UWVBFUylcbiAgICAgIH0sXG4gICAgICBGVU5DVElPTl9DQUxMLFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBTVFJJTkcsXG4gICAgICBRVU9URURfSURFTlRJRklFUixcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBDT01NRU5UX01PREUsXG4gICAgICBPUEVSQVRPUlxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzcWw7XG4iLCIvKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBsb29rYWhlYWQocmUpIHtcbiAgcmV0dXJuIGNvbmNhdCgnKD89JywgcmUsICcpJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsuLi4oUmVnRXhwIHwgc3RyaW5nKSB9IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIGNvbnN0IGpvaW5lZCA9IGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHsgQXJyYXk8c3RyaW5nIHwgUmVnRXhwIHwgT2JqZWN0PiB9IGFyZ3NcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHN0cmlwT3B0aW9uc0Zyb21BcmdzKGFyZ3MpIHtcbiAgY29uc3Qgb3B0cyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcblxuICBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmIG9wdHMuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICAgIGFyZ3Muc3BsaWNlKGFyZ3MubGVuZ3RoIC0gMSwgMSk7XG4gICAgcmV0dXJuIG9wdHM7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKiBAdHlwZWRlZiB7IHtjYXB0dXJlPzogYm9vbGVhbn0gfSBSZWdleEVpdGhlck9wdGlvbnMgKi9cblxuLyoqXG4gKiBBbnkgb2YgdGhlIHBhc3NlZCBleHByZXNzc2lvbnMgbWF5IG1hdGNoXG4gKlxuICogQ3JlYXRlcyBhIGh1Z2UgdGhpcyB8IHRoaXMgfCB0aGF0IHwgdGhhdCBtYXRjaFxuICogQHBhcmFtIHsoUmVnRXhwIHwgc3RyaW5nKVtdIHwgWy4uLihSZWdFeHAgfCBzdHJpbmcpW10sIFJlZ2V4RWl0aGVyT3B0aW9uc119IGFyZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVpdGhlciguLi5hcmdzKSB7XG4gIC8qKiBAdHlwZSB7IG9iamVjdCAmIHtjYXB0dXJlPzogYm9vbGVhbn0gfSAgKi9cbiAgY29uc3Qgb3B0cyA9IHN0cmlwT3B0aW9uc0Zyb21BcmdzKGFyZ3MpO1xuICBjb25zdCBqb2luZWQgPSAnKCdcbiAgICArIChvcHRzLmNhcHR1cmUgPyBcIlwiIDogXCI/OlwiKVxuICAgICsgYXJncy5tYXAoKHgpID0+IHNvdXJjZSh4KSkuam9pbihcInxcIikgKyBcIilcIjtcbiAgcmV0dXJuIGpvaW5lZDtcbn1cblxuY29uc3Qga2V5d29yZFdyYXBwZXIgPSBrZXl3b3JkID0+IGNvbmNhdChcbiAgL1xcYi8sXG4gIGtleXdvcmQsXG4gIC9cXHckLy50ZXN0KGtleXdvcmQpID8gL1xcYi8gOiAvXFxCL1xuKTtcblxuLy8gS2V5d29yZHMgdGhhdCByZXF1aXJlIGEgbGVhZGluZyBkb3QuXG5jb25zdCBkb3RLZXl3b3JkcyA9IFtcbiAgJ1Byb3RvY29sJywgLy8gY29udGV4dHVhbFxuICAnVHlwZScgLy8gY29udGV4dHVhbFxuXS5tYXAoa2V5d29yZFdyYXBwZXIpO1xuXG4vLyBLZXl3b3JkcyB0aGF0IG1heSBoYXZlIGEgbGVhZGluZyBkb3QuXG5jb25zdCBvcHRpb25hbERvdEtleXdvcmRzID0gW1xuICAnaW5pdCcsXG4gICdzZWxmJ1xuXS5tYXAoa2V5d29yZFdyYXBwZXIpO1xuXG4vLyBzaG91bGQgcmVnaXN0ZXIgYXMga2V5d29yZCwgbm90IHR5cGVcbmNvbnN0IGtleXdvcmRUeXBlcyA9IFtcbiAgJ0FueScsXG4gICdTZWxmJ1xuXTtcblxuLy8gUmVndWxhciBrZXl3b3JkcyBhbmQgbGl0ZXJhbHMuXG5jb25zdCBrZXl3b3JkcyA9IFtcbiAgLy8gc3RyaW5ncyBiZWxvdyB3aWxsIGJlIGZlZCBpbnRvIHRoZSByZWd1bGFyIGBrZXl3b3Jkc2AgZW5naW5lIHdoaWxlIHJlZ2V4XG4gIC8vIHdpbGwgcmVzdWx0IGluIGFkZGl0aW9uYWwgbW9kZXMgYmVpbmcgY3JlYXRlZCB0byBzY2FuIGZvciB0aG9zZSBrZXl3b3JkcyB0b1xuICAvLyBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBydWxlc1xuICAnYWN0b3InLFxuICAnYW55JywgLy8gY29udGV4dHVhbFxuICAnYXNzb2NpYXRlZHR5cGUnLFxuICAnYXN5bmMnLFxuICAnYXdhaXQnLFxuICAvYXNcXD8vLCAvLyBvcGVyYXRvclxuICAvYXMhLywgLy8gb3BlcmF0b3JcbiAgJ2FzJywgLy8gb3BlcmF0b3JcbiAgJ2JyZWFrJyxcbiAgJ2Nhc2UnLFxuICAnY2F0Y2gnLFxuICAnY2xhc3MnLFxuICAnY29udGludWUnLFxuICAnY29udmVuaWVuY2UnLCAvLyBjb250ZXh0dWFsXG4gICdkZWZhdWx0JyxcbiAgJ2RlZmVyJyxcbiAgJ2RlaW5pdCcsXG4gICdkaWRTZXQnLCAvLyBjb250ZXh0dWFsXG4gICdkaXN0cmlidXRlZCcsXG4gICdkbycsXG4gICdkeW5hbWljJywgLy8gY29udGV4dHVhbFxuICAnZWxzZScsXG4gICdlbnVtJyxcbiAgJ2V4dGVuc2lvbicsXG4gICdmYWxsdGhyb3VnaCcsXG4gIC9maWxlcHJpdmF0ZVxcKHNldFxcKS8sXG4gICdmaWxlcHJpdmF0ZScsXG4gICdmaW5hbCcsIC8vIGNvbnRleHR1YWxcbiAgJ2ZvcicsXG4gICdmdW5jJyxcbiAgJ2dldCcsIC8vIGNvbnRleHR1YWxcbiAgJ2d1YXJkJyxcbiAgJ2lmJyxcbiAgJ2ltcG9ydCcsXG4gICdpbmRpcmVjdCcsIC8vIGNvbnRleHR1YWxcbiAgJ2luZml4JywgLy8gY29udGV4dHVhbFxuICAvaW5pdFxcPy8sXG4gIC9pbml0IS8sXG4gICdpbm91dCcsXG4gIC9pbnRlcm5hbFxcKHNldFxcKS8sXG4gICdpbnRlcm5hbCcsXG4gICdpbicsXG4gICdpcycsIC8vIG9wZXJhdG9yXG4gICdpc29sYXRlZCcsIC8vIGNvbnRleHR1YWxcbiAgJ25vbmlzb2xhdGVkJywgLy8gY29udGV4dHVhbFxuICAnbGF6eScsIC8vIGNvbnRleHR1YWxcbiAgJ2xldCcsXG4gICdtdXRhdGluZycsIC8vIGNvbnRleHR1YWxcbiAgJ25vbm11dGF0aW5nJywgLy8gY29udGV4dHVhbFxuICAvb3BlblxcKHNldFxcKS8sIC8vIGNvbnRleHR1YWxcbiAgJ29wZW4nLCAvLyBjb250ZXh0dWFsXG4gICdvcGVyYXRvcicsXG4gICdvcHRpb25hbCcsIC8vIGNvbnRleHR1YWxcbiAgJ292ZXJyaWRlJywgLy8gY29udGV4dHVhbFxuICAncG9zdGZpeCcsIC8vIGNvbnRleHR1YWxcbiAgJ3ByZWNlZGVuY2Vncm91cCcsXG4gICdwcmVmaXgnLCAvLyBjb250ZXh0dWFsXG4gIC9wcml2YXRlXFwoc2V0XFwpLyxcbiAgJ3ByaXZhdGUnLFxuICAncHJvdG9jb2wnLFxuICAvcHVibGljXFwoc2V0XFwpLyxcbiAgJ3B1YmxpYycsXG4gICdyZXBlYXQnLFxuICAncmVxdWlyZWQnLCAvLyBjb250ZXh0dWFsXG4gICdyZXRocm93cycsXG4gICdyZXR1cm4nLFxuICAnc2V0JywgLy8gY29udGV4dHVhbFxuICAnc29tZScsIC8vIGNvbnRleHR1YWxcbiAgJ3N0YXRpYycsXG4gICdzdHJ1Y3QnLFxuICAnc3Vic2NyaXB0JyxcbiAgJ3N1cGVyJyxcbiAgJ3N3aXRjaCcsXG4gICd0aHJvd3MnLFxuICAndGhyb3cnLFxuICAvdHJ5XFw/LywgLy8gb3BlcmF0b3JcbiAgL3RyeSEvLCAvLyBvcGVyYXRvclxuICAndHJ5JywgLy8gb3BlcmF0b3JcbiAgJ3R5cGVhbGlhcycsXG4gIC91bm93bmVkXFwoc2FmZVxcKS8sIC8vIGNvbnRleHR1YWxcbiAgL3Vub3duZWRcXCh1bnNhZmVcXCkvLCAvLyBjb250ZXh0dWFsXG4gICd1bm93bmVkJywgLy8gY29udGV4dHVhbFxuICAndmFyJyxcbiAgJ3dlYWsnLCAvLyBjb250ZXh0dWFsXG4gICd3aGVyZScsXG4gICd3aGlsZScsXG4gICd3aWxsU2V0JyAvLyBjb250ZXh0dWFsXG5dO1xuXG4vLyBOT1RFOiBDb250ZXh0dWFsIGtleXdvcmRzIGFyZSByZXNlcnZlZCBvbmx5IGluIHNwZWNpZmljIGNvbnRleHRzLlxuLy8gSWRlYWxseSwgdGhlc2Ugc2hvdWxkIGJlIG1hdGNoZWQgdXNpbmcgbW9kZXMgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzLlxuXG4vLyBMaXRlcmFscy5cbmNvbnN0IGxpdGVyYWxzID0gW1xuICAnZmFsc2UnLFxuICAnbmlsJyxcbiAgJ3RydWUnXG5dO1xuXG4vLyBLZXl3b3JkcyB1c2VkIGluIHByZWNlZGVuY2UgZ3JvdXBzLlxuY29uc3QgcHJlY2VkZW5jZWdyb3VwS2V5d29yZHMgPSBbXG4gICdhc3NpZ25tZW50JyxcbiAgJ2Fzc29jaWF0aXZpdHknLFxuICAnaGlnaGVyVGhhbicsXG4gICdsZWZ0JyxcbiAgJ2xvd2VyVGhhbicsXG4gICdub25lJyxcbiAgJ3JpZ2h0J1xuXTtcblxuLy8gS2V5d29yZHMgdGhhdCBzdGFydCB3aXRoIGEgbnVtYmVyIHNpZ24gKCMpLlxuLy8gIyh1bilhdmFpbGFibGUgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LlxuY29uc3QgbnVtYmVyU2lnbktleXdvcmRzID0gW1xuICAnI2NvbG9yTGl0ZXJhbCcsXG4gICcjY29sdW1uJyxcbiAgJyNkc29oYW5kbGUnLFxuICAnI2Vsc2UnLFxuICAnI2Vsc2VpZicsXG4gICcjZW5kaWYnLFxuICAnI2Vycm9yJyxcbiAgJyNmaWxlJyxcbiAgJyNmaWxlSUQnLFxuICAnI2ZpbGVMaXRlcmFsJyxcbiAgJyNmaWxlUGF0aCcsXG4gICcjZnVuY3Rpb24nLFxuICAnI2lmJyxcbiAgJyNpbWFnZUxpdGVyYWwnLFxuICAnI2tleVBhdGgnLFxuICAnI2xpbmUnLFxuICAnI3NlbGVjdG9yJyxcbiAgJyNzb3VyY2VMb2NhdGlvbicsXG4gICcjd2Fybl91bnF1YWxpZmllZF9hY2Nlc3MnLFxuICAnI3dhcm5pbmcnXG5dO1xuXG4vLyBHbG9iYWwgZnVuY3Rpb25zIGluIHRoZSBTdGFuZGFyZCBMaWJyYXJ5LlxuY29uc3QgYnVpbHRJbnMgPSBbXG4gICdhYnMnLFxuICAnYWxsJyxcbiAgJ2FueScsXG4gICdhc3NlcnQnLFxuICAnYXNzZXJ0aW9uRmFpbHVyZScsXG4gICdkZWJ1Z1ByaW50JyxcbiAgJ2R1bXAnLFxuICAnZmF0YWxFcnJvcicsXG4gICdnZXRWYUxpc3QnLFxuICAnaXNLbm93blVuaXF1ZWx5UmVmZXJlbmNlZCcsXG4gICdtYXgnLFxuICAnbWluJyxcbiAgJ251bWVyaWNDYXN0JyxcbiAgJ3BvaW50d2lzZU1heCcsXG4gICdwb2ludHdpc2VNaW4nLFxuICAncHJlY29uZGl0aW9uJyxcbiAgJ3ByZWNvbmRpdGlvbkZhaWx1cmUnLFxuICAncHJpbnQnLFxuICAncmVhZExpbmUnLFxuICAncmVwZWF0RWxlbWVudCcsXG4gICdzZXF1ZW5jZScsXG4gICdzdHJpZGUnLFxuICAnc3dhcCcsXG4gICdzd2lmdF91bmJveEZyb21Td2lmdFZhbHVlV2l0aFR5cGUnLFxuICAndHJhbnNjb2RlJyxcbiAgJ3R5cGUnLFxuICAndW5zYWZlQml0Q2FzdCcsXG4gICd1bnNhZmVEb3duY2FzdCcsXG4gICd3aXRoRXh0ZW5kZWRMaWZldGltZScsXG4gICd3aXRoVW5zYWZlTXV0YWJsZVBvaW50ZXInLFxuICAnd2l0aFVuc2FmZVBvaW50ZXInLFxuICAnd2l0aFZhTGlzdCcsXG4gICd3aXRob3V0QWN0dWFsbHlFc2NhcGluZycsXG4gICd6aXAnXG5dO1xuXG4vLyBWYWxpZCBmaXJzdCBjaGFyYWN0ZXJzIGZvciBvcGVyYXRvcnMuXG5jb25zdCBvcGVyYXRvckhlYWQgPSBlaXRoZXIoXG4gIC9bLz1cXC0rISolPD4mfF5+P10vLFxuICAvW1xcdTAwQTEtXFx1MDBBN10vLFxuICAvW1xcdTAwQTlcXHUwMEFCXS8sXG4gIC9bXFx1MDBBQ1xcdTAwQUVdLyxcbiAgL1tcXHUwMEIwXFx1MDBCMV0vLFxuICAvW1xcdTAwQjZcXHUwMEJCXFx1MDBCRlxcdTAwRDdcXHUwMEY3XS8sXG4gIC9bXFx1MjAxNi1cXHUyMDE3XS8sXG4gIC9bXFx1MjAyMC1cXHUyMDI3XS8sXG4gIC9bXFx1MjAzMC1cXHUyMDNFXS8sXG4gIC9bXFx1MjA0MS1cXHUyMDUzXS8sXG4gIC9bXFx1MjA1NS1cXHUyMDVFXS8sXG4gIC9bXFx1MjE5MC1cXHUyM0ZGXS8sXG4gIC9bXFx1MjUwMC1cXHUyNzc1XS8sXG4gIC9bXFx1Mjc5NC1cXHUyQkZGXS8sXG4gIC9bXFx1MkUwMC1cXHUyRTdGXS8sXG4gIC9bXFx1MzAwMS1cXHUzMDAzXS8sXG4gIC9bXFx1MzAwOC1cXHUzMDIwXS8sXG4gIC9bXFx1MzAzMF0vXG4pO1xuXG4vLyBWYWxpZCBjaGFyYWN0ZXJzIGZvciBvcGVyYXRvcnMuXG5jb25zdCBvcGVyYXRvckNoYXJhY3RlciA9IGVpdGhlcihcbiAgb3BlcmF0b3JIZWFkLFxuICAvW1xcdTAzMDAtXFx1MDM2Rl0vLFxuICAvW1xcdTFEQzAtXFx1MURGRl0vLFxuICAvW1xcdTIwRDAtXFx1MjBGRl0vLFxuICAvW1xcdUZFMDAtXFx1RkUwRl0vLFxuICAvW1xcdUZFMjAtXFx1RkUyRl0vXG4gIC8vIFRPRE86IFRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBhcmUgYWxzbyBhbGxvd2VkLCBidXQgdGhlIHJlZ2V4IGlzbid0IHN1cHBvcnRlZCB5ZXQuXG4gIC8vIC9bXFx1e0UwMTAwfS1cXHV7RTAxRUZ9XS91XG4pO1xuXG4vLyBWYWxpZCBvcGVyYXRvci5cbmNvbnN0IG9wZXJhdG9yID0gY29uY2F0KG9wZXJhdG9ySGVhZCwgb3BlcmF0b3JDaGFyYWN0ZXIsICcqJyk7XG5cbi8vIFZhbGlkIGZpcnN0IGNoYXJhY3RlcnMgZm9yIGlkZW50aWZpZXJzLlxuY29uc3QgaWRlbnRpZmllckhlYWQgPSBlaXRoZXIoXG4gIC9bYS16QS1aX10vLFxuICAvW1xcdTAwQThcXHUwMEFBXFx1MDBBRFxcdTAwQUZcXHUwMEIyLVxcdTAwQjVcXHUwMEI3LVxcdTAwQkFdLyxcbiAgL1tcXHUwMEJDLVxcdTAwQkVcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAwRkZdLyxcbiAgL1tcXHUwMTAwLVxcdTAyRkZcXHUwMzcwLVxcdTE2N0ZcXHUxNjgxLVxcdTE4MERcXHUxODBGLVxcdTFEQkZdLyxcbiAgL1tcXHUxRTAwLVxcdTFGRkZdLyxcbiAgL1tcXHUyMDBCLVxcdTIwMERcXHUyMDJBLVxcdTIwMkVcXHUyMDNGLVxcdTIwNDBcXHUyMDU0XFx1MjA2MC1cXHUyMDZGXS8sXG4gIC9bXFx1MjA3MC1cXHUyMENGXFx1MjEwMC1cXHUyMThGXFx1MjQ2MC1cXHUyNEZGXFx1Mjc3Ni1cXHUyNzkzXS8sXG4gIC9bXFx1MkMwMC1cXHUyREZGXFx1MkU4MC1cXHUyRkZGXS8sXG4gIC9bXFx1MzAwNC1cXHUzMDA3XFx1MzAyMS1cXHUzMDJGXFx1MzAzMS1cXHUzMDNGXFx1MzA0MC1cXHVEN0ZGXS8sXG4gIC9bXFx1RjkwMC1cXHVGRDNEXFx1RkQ0MC1cXHVGRENGXFx1RkRGMC1cXHVGRTFGXFx1RkUzMC1cXHVGRTQ0XS8sXG4gIC9bXFx1RkU0Ny1cXHVGRUZFXFx1RkYwMC1cXHVGRkZEXS8gLy8gU2hvdWxkIGJlIC9bXFx1RkU0Ny1cXHVGRkZEXS8sIGJ1dCB3ZSBoYXZlIHRvIGV4Y2x1ZGUgRkVGRi5cbiAgLy8gVGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGFyZSBhbHNvIGFsbG93ZWQsIGJ1dCB0aGUgcmVnZXhlcyBhcmVuJ3Qgc3VwcG9ydGVkIHlldC5cbiAgLy8gL1tcXHV7MTAwMDB9LVxcdXsxRkZGRH1cXHV7MjAwMDAtXFx1ezJGRkZEfVxcdXszMDAwMH0tXFx1ezNGRkZEfVxcdXs0MDAwMH0tXFx1ezRGRkZEfV0vdSxcbiAgLy8gL1tcXHV7NTAwMDB9LVxcdXs1RkZGRH1cXHV7NjAwMDAtXFx1ezZGRkZEfVxcdXs3MDAwMH0tXFx1ezdGRkZEfVxcdXs4MDAwMH0tXFx1ezhGRkZEfV0vdSxcbiAgLy8gL1tcXHV7OTAwMDB9LVxcdXs5RkZGRH1cXHV7QTAwMDAtXFx1e0FGRkZEfVxcdXtCMDAwMH0tXFx1e0JGRkZEfVxcdXtDMDAwMH0tXFx1e0NGRkZEfV0vdSxcbiAgLy8gL1tcXHV7RDAwMDB9LVxcdXtERkZGRH1cXHV7RTAwMDAtXFx1e0VGRkZEfV0vdVxuKTtcblxuLy8gVmFsaWQgY2hhcmFjdGVycyBmb3IgaWRlbnRpZmllcnMuXG5jb25zdCBpZGVudGlmaWVyQ2hhcmFjdGVyID0gZWl0aGVyKFxuICBpZGVudGlmaWVySGVhZCxcbiAgL1xcZC8sXG4gIC9bXFx1MDMwMC1cXHUwMzZGXFx1MURDMC1cXHUxREZGXFx1MjBEMC1cXHUyMEZGXFx1RkUyMC1cXHVGRTJGXS9cbik7XG5cbi8vIFZhbGlkIGlkZW50aWZpZXIuXG5jb25zdCBpZGVudGlmaWVyID0gY29uY2F0KGlkZW50aWZpZXJIZWFkLCBpZGVudGlmaWVyQ2hhcmFjdGVyLCAnKicpO1xuXG4vLyBWYWxpZCB0eXBlIGlkZW50aWZpZXIuXG5jb25zdCB0eXBlSWRlbnRpZmllciA9IGNvbmNhdCgvW0EtWl0vLCBpZGVudGlmaWVyQ2hhcmFjdGVyLCAnKicpO1xuXG4vLyBCdWlsdC1pbiBhdHRyaWJ1dGVzLCB3aGljaCBhcmUgaGlnaGxpZ2h0ZWQgYXMga2V5d29yZHMuXG4vLyBAYXZhaWxhYmxlIGlzIGhhbmRsZWQgc2VwYXJhdGVseS5cbmNvbnN0IGtleXdvcmRBdHRyaWJ1dGVzID0gW1xuICAnYXV0b2Nsb3N1cmUnLFxuICBjb25jYXQoL2NvbnZlbnRpb25cXCgvLCBlaXRoZXIoJ3N3aWZ0JywgJ2Jsb2NrJywgJ2MnKSwgL1xcKS8pLFxuICAnZGlzY2FyZGFibGVSZXN1bHQnLFxuICAnZHluYW1pY0NhbGxhYmxlJyxcbiAgJ2R5bmFtaWNNZW1iZXJMb29rdXAnLFxuICAnZXNjYXBpbmcnLFxuICAnZnJvemVuJyxcbiAgJ0dLSW5zcGVjdGFibGUnLFxuICAnSUJBY3Rpb24nLFxuICAnSUJEZXNpZ25hYmxlJyxcbiAgJ0lCSW5zcGVjdGFibGUnLFxuICAnSUJPdXRsZXQnLFxuICAnSUJTZWd1ZUFjdGlvbicsXG4gICdpbmxpbmFibGUnLFxuICAnbWFpbicsXG4gICdub25vYmpjJyxcbiAgJ05TQXBwbGljYXRpb25NYWluJyxcbiAgJ05TQ29weWluZycsXG4gICdOU01hbmFnZWQnLFxuICBjb25jYXQoL29iamNcXCgvLCBpZGVudGlmaWVyLCAvXFwpLyksXG4gICdvYmpjJyxcbiAgJ29iamNNZW1iZXJzJyxcbiAgJ3Byb3BlcnR5V3JhcHBlcicsXG4gICdyZXF1aXJlc19zdG9yZWRfcHJvcGVydHlfaW5pdHMnLFxuICAncmVzdWx0QnVpbGRlcicsXG4gICd0ZXN0YWJsZScsXG4gICdVSUFwcGxpY2F0aW9uTWFpbicsXG4gICd1bmtub3duJyxcbiAgJ3VzYWJsZUZyb21JbmxpbmUnXG5dO1xuXG4vLyBDb250ZXh0dWFsIGtleXdvcmRzIHVzZWQgaW4gQGF2YWlsYWJsZSBhbmQgIyh1bilhdmFpbGFibGUuXG5jb25zdCBhdmFpbGFiaWxpdHlLZXl3b3JkcyA9IFtcbiAgJ2lPUycsXG4gICdpT1NBcHBsaWNhdGlvbkV4dGVuc2lvbicsXG4gICdtYWNPUycsXG4gICdtYWNPU0FwcGxpY2F0aW9uRXh0ZW5zaW9uJyxcbiAgJ21hY0NhdGFseXN0JyxcbiAgJ21hY0NhdGFseXN0QXBwbGljYXRpb25FeHRlbnNpb24nLFxuICAnd2F0Y2hPUycsXG4gICd3YXRjaE9TQXBwbGljYXRpb25FeHRlbnNpb24nLFxuICAndHZPUycsXG4gICd0dk9TQXBwbGljYXRpb25FeHRlbnNpb24nLFxuICAnc3dpZnQnXG5dO1xuXG4vKlxuTGFuZ3VhZ2U6IFN3aWZ0XG5EZXNjcmlwdGlvbjogU3dpZnQgaXMgYSBnZW5lcmFsLXB1cnBvc2UgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgYnVpbHQgdXNpbmcgYSBtb2Rlcm4gYXBwcm9hY2ggdG8gc2FmZXR5LCBwZXJmb3JtYW5jZSwgYW5kIHNvZnR3YXJlIGRlc2lnbiBwYXR0ZXJucy5cbkF1dGhvcjogU3RldmVuIFZhbiBJbXBlIDxzdGV2ZW4udmFuaW1wZUBpY2xvdWQuY29tPlxuQ29udHJpYnV0b3JzOiBDaHJpcyBFaWRob2YgPGNocmlzQGVpZGhvZi5ubD4sIE5hdGUgQ29vayA8bmF0ZWNvb2tAZ21haWwuY29tPiwgQWxleGFuZGVyIExpY2h0ZXIgPG1hbm5pTEBnbXgubmV0PiwgUmljaGFyZCBHaWJzb24gPGdpYnNvbjA0MkBnaXRodWI+XG5XZWJzaXRlOiBodHRwczovL3N3aWZ0Lm9yZ1xuQ2F0ZWdvcnk6IGNvbW1vbiwgc3lzdGVtXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gc3dpZnQoaGxqcykge1xuICBjb25zdCBXSElURVNQQUNFID0ge1xuICAgIG1hdGNoOiAvXFxzKy8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvTGV4aWNhbFN0cnVjdHVyZS5odG1sI0lENDExXG4gIGNvbnN0IEJMT0NLX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJy9cXFxcKicsXG4gICAgJ1xcXFwqLycsXG4gICAgeyBjb250YWluczogWyAnc2VsZicgXSB9XG4gICk7XG4gIGNvbnN0IENPTU1FTlRTID0gW1xuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBCTE9DS19DT01NRU5UXG4gIF07XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9MZXhpY2FsU3RydWN0dXJlLmh0bWwjSUQ0MTNcbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC96elN1bW1hcnlPZlRoZUdyYW1tYXIuaHRtbFxuICBjb25zdCBET1RfS0VZV09SRCA9IHtcbiAgICBtYXRjaDogW1xuICAgICAgL1xcLi8sXG4gICAgICBlaXRoZXIoLi4uZG90S2V5d29yZHMsIC4uLm9wdGlvbmFsRG90S2V5d29yZHMpXG4gICAgXSxcbiAgICBjbGFzc05hbWU6IHsgMjogXCJrZXl3b3JkXCIgfVxuICB9O1xuICBjb25zdCBLRVlXT1JEX0dVQVJEID0ge1xuICAgIC8vIENvbnN1bWUgLmtleXdvcmQgdG8gcHJldmVudCBoaWdobGlnaHRpbmcgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBhcyBrZXl3b3Jkcy5cbiAgICBtYXRjaDogY29uY2F0KC9cXC4vLCBlaXRoZXIoLi4ua2V5d29yZHMpKSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgUExBSU5fS0VZV09SRFMgPSBrZXl3b3Jkc1xuICAgIC5maWx0ZXIoa3cgPT4gdHlwZW9mIGt3ID09PSAnc3RyaW5nJylcbiAgICAuY29uY2F0KFsgXCJffDBcIiBdKTsgLy8gc2VlbXMgY29tbW9uLCBzbyAwIHJlbGV2YW5jZVxuICBjb25zdCBSRUdFWF9LRVlXT1JEUyA9IGtleXdvcmRzXG4gICAgLmZpbHRlcihrdyA9PiB0eXBlb2Yga3cgIT09ICdzdHJpbmcnKSAvLyBmaW5kIHJlZ2V4XG4gICAgLmNvbmNhdChrZXl3b3JkVHlwZXMpXG4gICAgLm1hcChrZXl3b3JkV3JhcHBlcik7XG4gIGNvbnN0IEtFWVdPUkQgPSB7IHZhcmlhbnRzOiBbXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICBtYXRjaDogZWl0aGVyKC4uLlJFR0VYX0tFWVdPUkRTLCAuLi5vcHRpb25hbERvdEtleXdvcmRzKVxuICAgIH1cbiAgXSB9O1xuICAvLyBmaW5kIGFsbCB0aGUgcmVndWxhciBrZXl3b3Jkc1xuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICAkcGF0dGVybjogZWl0aGVyKFxuICAgICAgL1xcYlxcdysvLCAvLyByZWd1bGFyIGtleXdvcmRzXG4gICAgICAvI1xcdysvIC8vIG51bWJlciBrZXl3b3Jkc1xuICAgICksXG4gICAga2V5d29yZDogUExBSU5fS0VZV09SRFNcbiAgICAgIC5jb25jYXQobnVtYmVyU2lnbktleXdvcmRzKSxcbiAgICBsaXRlcmFsOiBsaXRlcmFsc1xuICB9O1xuICBjb25zdCBLRVlXT1JEX01PREVTID0gW1xuICAgIERPVF9LRVlXT1JELFxuICAgIEtFWVdPUkRfR1VBUkQsXG4gICAgS0VZV09SRFxuICBdO1xuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBsZS9zd2lmdC90cmVlL21haW4vc3RkbGliL3B1YmxpYy9jb3JlXG4gIGNvbnN0IEJVSUxUX0lOX0dVQVJEID0ge1xuICAgIC8vIENvbnN1bWUgLmJ1aWx0X2luIHRvIHByZXZlbnQgaGlnaGxpZ2h0aW5nIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuXG4gICAgbWF0Y2g6IGNvbmNhdCgvXFwuLywgZWl0aGVyKC4uLmJ1aWx0SW5zKSksXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IEJVSUxUX0lOID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICBtYXRjaDogY29uY2F0KC9cXGIvLCBlaXRoZXIoLi4uYnVpbHRJbnMpLCAvKD89XFwoKS8pXG4gIH07XG4gIGNvbnN0IEJVSUxUX0lOUyA9IFtcbiAgICBCVUlMVF9JTl9HVUFSRCxcbiAgICBCVUlMVF9JTlxuICBdO1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvTGV4aWNhbFN0cnVjdHVyZS5odG1sI0lENDE4XG4gIGNvbnN0IE9QRVJBVE9SX0dVQVJEID0ge1xuICAgIC8vIFByZXZlbnQgLT4gZnJvbSBiZWluZyBoaWdobGlnaHRpbmcgYXMgYW4gb3BlcmF0b3IuXG4gICAgbWF0Y2g6IC8tPi8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IE9QRVJBVE9SID0ge1xuICAgIGNsYXNzTmFtZTogJ29wZXJhdG9yJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgbWF0Y2g6IG9wZXJhdG9yIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGRvdC1vcGVyYXRvcjogb25seSBvcGVyYXRvcnMgdGhhdCBzdGFydCB3aXRoIGEgZG90IGFyZSBhbGxvd2VkIHRvIHVzZSBkb3RzIGFzXG4gICAgICAgIC8vIGNoYXJhY3RlcnMgKC4uLiwgLi4uPCwgLiosIGV0YykuIFNvIHRoZXJlIHJ1bGUgaGVyZSBpczogYSBkb3QgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmVcbiAgICAgICAgLy8gY2hhcmFjdGVycyB0aGF0IG1heSBhbHNvIGluY2x1ZGUgZG90cy5cbiAgICAgICAgbWF0Y2g6IGBcXFxcLihcXFxcLnwke29wZXJhdG9yQ2hhcmFjdGVyfSkrYCB9XG4gICAgXVxuICB9O1xuICBjb25zdCBPUEVSQVRPUlMgPSBbXG4gICAgT1BFUkFUT1JfR1VBUkQsXG4gICAgT1BFUkFUT1JcbiAgXTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0xleGljYWxTdHJ1Y3R1cmUuaHRtbCNncmFtbWFyX251bWVyaWMtbGl0ZXJhbFxuICAvLyBUT0RPOiBVcGRhdGUgZm9yIGxlYWRpbmcgYC1gIGFmdGVyIGxvb2tiZWhpbmQgaXMgc3VwcG9ydGVkIGV2ZXJ5d2hlcmVcbiAgY29uc3QgZGVjaW1hbERpZ2l0cyA9ICcoWzAtOV1fKikrJztcbiAgY29uc3QgaGV4RGlnaXRzID0gJyhbMC05YS1mQS1GXV8qKSsnO1xuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIC8vIGRlY2ltYWwgZmxvYXRpbmctcG9pbnQtbGl0ZXJhbCAoc3Vic3VtZXMgZGVjaW1hbC1saXRlcmFsKVxuICAgICAgeyBtYXRjaDogYFxcXFxiKCR7ZGVjaW1hbERpZ2l0c30pKFxcXFwuKCR7ZGVjaW1hbERpZ2l0c30pKT9gICsgYChbZUVdWystXT8oJHtkZWNpbWFsRGlnaXRzfSkpP1xcXFxiYCB9LFxuICAgICAgLy8gaGV4YWRlY2ltYWwgZmxvYXRpbmctcG9pbnQtbGl0ZXJhbCAoc3Vic3VtZXMgaGV4YWRlY2ltYWwtbGl0ZXJhbClcbiAgICAgIHsgbWF0Y2g6IGBcXFxcYjB4KCR7aGV4RGlnaXRzfSkoXFxcXC4oJHtoZXhEaWdpdHN9KSk/YCArIGAoW3BQXVsrLV0/KCR7ZGVjaW1hbERpZ2l0c30pKT9cXFxcYmAgfSxcbiAgICAgIC8vIG9jdGFsLWxpdGVyYWxcbiAgICAgIHsgbWF0Y2g6IC9cXGIwbyhbMC03XV8qKStcXGIvIH0sXG4gICAgICAvLyBiaW5hcnktbGl0ZXJhbFxuICAgICAgeyBtYXRjaDogL1xcYjBiKFswMV1fKikrXFxiLyB9XG4gICAgXVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvTGV4aWNhbFN0cnVjdHVyZS5odG1sI2dyYW1tYXJfc3RyaW5nLWxpdGVyYWxcbiAgY29uc3QgRVNDQVBFRF9DSEFSQUNURVIgPSAocmF3RGVsaW1pdGVyID0gXCJcIikgPT4gKHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgbWF0Y2g6IGNvbmNhdCgvXFxcXC8sIHJhd0RlbGltaXRlciwgL1swXFxcXHRuclwiJ10vKSB9LFxuICAgICAgeyBtYXRjaDogY29uY2F0KC9cXFxcLywgcmF3RGVsaW1pdGVyLCAvdVxce1swLTlhLWZBLUZdezEsOH1cXH0vKSB9XG4gICAgXVxuICB9KTtcbiAgY29uc3QgRVNDQVBFRF9ORVdMSU5FID0gKHJhd0RlbGltaXRlciA9IFwiXCIpID0+ICh7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIG1hdGNoOiBjb25jYXQoL1xcXFwvLCByYXdEZWxpbWl0ZXIsIC9bXFx0IF0qKD86W1xcclxcbl18XFxyXFxuKS8pXG4gIH0pO1xuICBjb25zdCBJTlRFUlBPTEFUSU9OID0gKHJhd0RlbGltaXRlciA9IFwiXCIpID0+ICh7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGxhYmVsOiBcImludGVycG9sXCIsXG4gICAgYmVnaW46IGNvbmNhdCgvXFxcXC8sIHJhd0RlbGltaXRlciwgL1xcKC8pLFxuICAgIGVuZDogL1xcKS9cbiAgfSk7XG4gIGNvbnN0IE1VTFRJTElORV9TVFJJTkcgPSAocmF3RGVsaW1pdGVyID0gXCJcIikgPT4gKHtcbiAgICBiZWdpbjogY29uY2F0KHJhd0RlbGltaXRlciwgL1wiXCJcIi8pLFxuICAgIGVuZDogY29uY2F0KC9cIlwiXCIvLCByYXdEZWxpbWl0ZXIpLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBFU0NBUEVEX0NIQVJBQ1RFUihyYXdEZWxpbWl0ZXIpLFxuICAgICAgRVNDQVBFRF9ORVdMSU5FKHJhd0RlbGltaXRlciksXG4gICAgICBJTlRFUlBPTEFUSU9OKHJhd0RlbGltaXRlcilcbiAgICBdXG4gIH0pO1xuICBjb25zdCBTSU5HTEVfTElORV9TVFJJTkcgPSAocmF3RGVsaW1pdGVyID0gXCJcIikgPT4gKHtcbiAgICBiZWdpbjogY29uY2F0KHJhd0RlbGltaXRlciwgL1wiLyksXG4gICAgZW5kOiBjb25jYXQoL1wiLywgcmF3RGVsaW1pdGVyKSxcbiAgICBjb250YWluczogW1xuICAgICAgRVNDQVBFRF9DSEFSQUNURVIocmF3RGVsaW1pdGVyKSxcbiAgICAgIElOVEVSUE9MQVRJT04ocmF3RGVsaW1pdGVyKVxuICAgIF1cbiAgfSk7XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICBNVUxUSUxJTkVfU1RSSU5HKCksXG4gICAgICBNVUxUSUxJTkVfU1RSSU5HKFwiI1wiKSxcbiAgICAgIE1VTFRJTElORV9TVFJJTkcoXCIjI1wiKSxcbiAgICAgIE1VTFRJTElORV9TVFJJTkcoXCIjIyNcIiksXG4gICAgICBTSU5HTEVfTElORV9TVFJJTkcoKSxcbiAgICAgIFNJTkdMRV9MSU5FX1NUUklORyhcIiNcIiksXG4gICAgICBTSU5HTEVfTElORV9TVFJJTkcoXCIjI1wiKSxcbiAgICAgIFNJTkdMRV9MSU5FX1NUUklORyhcIiMjI1wiKVxuICAgIF1cbiAgfTtcblxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0xleGljYWxTdHJ1Y3R1cmUuaHRtbCNJRDQxMlxuICBjb25zdCBRVU9URURfSURFTlRJRklFUiA9IHsgbWF0Y2g6IGNvbmNhdCgvYC8sIGlkZW50aWZpZXIsIC9gLykgfTtcbiAgY29uc3QgSU1QTElDSVRfUEFSQU1FVEVSID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBtYXRjaDogL1xcJFxcZCsvXG4gIH07XG4gIGNvbnN0IFBST1BFUlRZX1dSQVBQRVJfUFJPSkVDVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgbWF0Y2g6IGBcXFxcJCR7aWRlbnRpZmllckNoYXJhY3Rlcn0rYFxuICB9O1xuICBjb25zdCBJREVOVElGSUVSUyA9IFtcbiAgICBRVU9URURfSURFTlRJRklFUixcbiAgICBJTVBMSUNJVF9QQVJBTUVURVIsXG4gICAgUFJPUEVSVFlfV1JBUFBFUl9QUk9KRUNUSU9OXG4gIF07XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9BdHRyaWJ1dGVzLmh0bWxcbiAgY29uc3QgQVZBSUxBQkxFX0FUVFJJQlVURSA9IHtcbiAgICBtYXRjaDogLyhAfCModW4pPylhdmFpbGFibGUvLFxuICAgIGNsYXNzTmFtZTogXCJrZXl3b3JkXCIsXG4gICAgc3RhcnRzOiB7IGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAga2V5d29yZHM6IGF2YWlsYWJpbGl0eUtleXdvcmRzLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIC4uLk9QRVJBVE9SUyxcbiAgICAgICAgICBOVU1CRVIsXG4gICAgICAgICAgU1RSSU5HXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdIH1cbiAgfTtcbiAgY29uc3QgS0VZV09SRF9BVFRSSUJVVEUgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgbWF0Y2g6IGNvbmNhdCgvQC8sIGVpdGhlciguLi5rZXl3b3JkQXR0cmlidXRlcykpXG4gIH07XG4gIGNvbnN0IFVTRVJfREVGSU5FRF9BVFRSSUJVVEUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgbWF0Y2g6IGNvbmNhdCgvQC8sIGlkZW50aWZpZXIpXG4gIH07XG4gIGNvbnN0IEFUVFJJQlVURVMgPSBbXG4gICAgQVZBSUxBQkxFX0FUVFJJQlVURSxcbiAgICBLRVlXT1JEX0FUVFJJQlVURSxcbiAgICBVU0VSX0RFRklORURfQVRUUklCVVRFXG4gIF07XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9UeXBlcy5odG1sXG4gIGNvbnN0IFRZUEUgPSB7XG4gICAgbWF0Y2g6IGxvb2thaGVhZCgvXFxiW0EtWl0vKSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgLy8gQ29tbW9uIEFwcGxlIGZyYW1ld29ya3MsIGZvciByZWxldmFuY2UgYm9vc3RcbiAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgIG1hdGNoOiBjb25jYXQoLyhBVnxDQXxDRnxDR3xDSXxDTHxDTXxDTnxDVHxNS3xNUHxNVEt8TVRMfE5TfFNDTnxTS3xVSXxXS3xYQykvLCBpZGVudGlmaWVyQ2hhcmFjdGVyLCAnKycpXG4gICAgICB9LFxuICAgICAgeyAvLyBUeXBlIGlkZW50aWZpZXJcbiAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgIG1hdGNoOiB0eXBlSWRlbnRpZmllcixcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgeyAvLyBPcHRpb25hbCB0eXBlXG4gICAgICAgIG1hdGNoOiAvWz8hXSsvLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8vIFZhcmlhZGljIHBhcmFtZXRlclxuICAgICAgICBtYXRjaDogL1xcLlxcLlxcLi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHsgLy8gUHJvdG9jb2wgY29tcG9zaXRpb25cbiAgICAgICAgbWF0Y2g6IGNvbmNhdCgvXFxzKyZcXHMrLywgbG9va2FoZWFkKHR5cGVJZGVudGlmaWVyKSksXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgR0VORVJJQ19BUkdVTUVOVFMgPSB7XG4gICAgYmVnaW46IC88LyxcbiAgICBlbmQ6IC8+LyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIC4uLkNPTU1FTlRTLFxuICAgICAgLi4uS0VZV09SRF9NT0RFUyxcbiAgICAgIC4uLkFUVFJJQlVURVMsXG4gICAgICBPUEVSQVRPUl9HVUFSRCxcbiAgICAgIFRZUEVcbiAgICBdXG4gIH07XG4gIFRZUEUuY29udGFpbnMucHVzaChHRU5FUklDX0FSR1VNRU5UUyk7XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9FeHByZXNzaW9ucy5odG1sI0lENTUyXG4gIC8vIFByZXZlbnRzIGVsZW1lbnQgbmFtZXMgZnJvbSBiZWluZyBoaWdobGlnaHRlZCBhcyBrZXl3b3Jkcy5cbiAgY29uc3QgVFVQTEVfRUxFTUVOVF9OQU1FID0ge1xuICAgIG1hdGNoOiBjb25jYXQoaWRlbnRpZmllciwgL1xccyo6LyksXG4gICAga2V5d29yZHM6IFwiX3wwXCIsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIC8vIE1hdGNoZXMgdHVwbGVzIGFzIHdlbGwgYXMgdGhlIHBhcmFtZXRlciBsaXN0IG9mIGEgZnVuY3Rpb24gdHlwZS5cbiAgY29uc3QgVFVQTEUgPSB7XG4gICAgYmVnaW46IC9cXCgvLFxuICAgIGVuZDogL1xcKS8sXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgJ3NlbGYnLFxuICAgICAgVFVQTEVfRUxFTUVOVF9OQU1FLFxuICAgICAgLi4uQ09NTUVOVFMsXG4gICAgICAuLi5LRVlXT1JEX01PREVTLFxuICAgICAgLi4uQlVJTFRfSU5TLFxuICAgICAgLi4uT1BFUkFUT1JTLFxuICAgICAgTlVNQkVSLFxuICAgICAgU1RSSU5HLFxuICAgICAgLi4uSURFTlRJRklFUlMsXG4gICAgICAuLi5BVFRSSUJVVEVTLFxuICAgICAgVFlQRVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBHRU5FUklDX1BBUkFNRVRFUlMgPSB7XG4gICAgYmVnaW46IC88LyxcbiAgICBlbmQ6IC8+LyxcbiAgICBjb250YWluczogW1xuICAgICAgLi4uQ09NTUVOVFMsXG4gICAgICBUWVBFXG4gICAgXVxuICB9O1xuICBjb25zdCBGVU5DVElPTl9QQVJBTUVURVJfTkFNRSA9IHtcbiAgICBiZWdpbjogZWl0aGVyKFxuICAgICAgbG9va2FoZWFkKGNvbmNhdChpZGVudGlmaWVyLCAvXFxzKjovKSksXG4gICAgICBsb29rYWhlYWQoY29uY2F0KGlkZW50aWZpZXIsIC9cXHMrLywgaWRlbnRpZmllciwgL1xccyo6LykpXG4gICAgKSxcbiAgICBlbmQ6IC86LyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIG1hdGNoOiAvXFxiX1xcYi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgIG1hdGNoOiBpZGVudGlmaWVyXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBjb25zdCBGVU5DVElPTl9QQVJBTUVURVJTID0ge1xuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgRlVOQ1RJT05fUEFSQU1FVEVSX05BTUUsXG4gICAgICAuLi5DT01NRU5UUyxcbiAgICAgIC4uLktFWVdPUkRfTU9ERVMsXG4gICAgICAuLi5PUEVSQVRPUlMsXG4gICAgICBOVU1CRVIsXG4gICAgICBTVFJJTkcsXG4gICAgICAuLi5BVFRSSUJVVEVTLFxuICAgICAgVFlQRSxcbiAgICAgIFRVUExFXG4gICAgXSxcbiAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgIGlsbGVnYWw6IC9bXCInXS9cbiAgfTtcbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9EZWNsYXJhdGlvbnMuaHRtbCNJRDM2MlxuICBjb25zdCBGVU5DVElPTiA9IHtcbiAgICBtYXRjaDogW1xuICAgICAgL2Z1bmMvLFxuICAgICAgL1xccysvLFxuICAgICAgZWl0aGVyKFFVT1RFRF9JREVOVElGSUVSLm1hdGNoLCBpZGVudGlmaWVyLCBvcGVyYXRvcilcbiAgICBdLFxuICAgIGNsYXNzTmFtZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInRpdGxlLmZ1bmN0aW9uXCJcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBHRU5FUklDX1BBUkFNRVRFUlMsXG4gICAgICBGVU5DVElPTl9QQVJBTUVURVJTLFxuICAgICAgV0hJVEVTUEFDRVxuICAgIF0sXG4gICAgaWxsZWdhbDogW1xuICAgICAgL1xcWy8sXG4gICAgICAvJS9cbiAgICBdXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9EZWNsYXJhdGlvbnMuaHRtbCNJRDM3NVxuICAvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL0RlY2xhcmF0aW9ucy5odG1sI0lEMzc5XG4gIGNvbnN0IElOSVRfU1VCU0NSSVBUID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvXFxiKD86c3Vic2NyaXB0fGluaXRbPyFdPykvLFxuICAgICAgL1xccyooPz1bPChdKS8sXG4gICAgXSxcbiAgICBjbGFzc05hbWU6IHsgMTogXCJrZXl3b3JkXCIgfSxcbiAgICBjb250YWluczogW1xuICAgICAgR0VORVJJQ19QQVJBTUVURVJTLFxuICAgICAgRlVOQ1RJT05fUEFSQU1FVEVSUyxcbiAgICAgIFdISVRFU1BBQ0VcbiAgICBdLFxuICAgIGlsbGVnYWw6IC9cXFt8JS9cbiAgfTtcbiAgLy8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL1JlZmVyZW5jZU1hbnVhbC9EZWNsYXJhdGlvbnMuaHRtbCNJRDM4MFxuICBjb25zdCBPUEVSQVRPUl9ERUNMQVJBVElPTiA9IHtcbiAgICBtYXRjaDogW1xuICAgICAgL29wZXJhdG9yLyxcbiAgICAgIC9cXHMrLyxcbiAgICAgIG9wZXJhdG9yXG4gICAgXSxcbiAgICBjbGFzc05hbWU6IHtcbiAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgMzogXCJ0aXRsZVwiXG4gICAgfVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvRGVjbGFyYXRpb25zLmh0bWwjSUQ1NTBcbiAgY29uc3QgUFJFQ0VERU5DRUdST1VQID0ge1xuICAgIGJlZ2luOiBbXG4gICAgICAvcHJlY2VkZW5jZWdyb3VwLyxcbiAgICAgIC9cXHMrLyxcbiAgICAgIHR5cGVJZGVudGlmaWVyXG4gICAgXSxcbiAgICBjbGFzc05hbWU6IHtcbiAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgMzogXCJ0aXRsZVwiXG4gICAgfSxcbiAgICBjb250YWluczogWyBUWVBFIF0sXG4gICAga2V5d29yZHM6IFtcbiAgICAgIC4uLnByZWNlZGVuY2Vncm91cEtleXdvcmRzLFxuICAgICAgLi4ubGl0ZXJhbHNcbiAgICBdLFxuICAgIGVuZDogL30vXG4gIH07XG5cbiAgLy8gQWRkIHN1cHBvcnRlZCBzdWJtb2RlcyB0byBzdHJpbmcgaW50ZXJwb2xhdGlvbi5cbiAgZm9yIChjb25zdCB2YXJpYW50IG9mIFNUUklORy52YXJpYW50cykge1xuICAgIGNvbnN0IGludGVycG9sYXRpb24gPSB2YXJpYW50LmNvbnRhaW5zLmZpbmQobW9kZSA9PiBtb2RlLmxhYmVsID09PSBcImludGVycG9sXCIpO1xuICAgIC8vIFRPRE86IEludGVycG9sYXRpb24gY2FuIGNvbnRhaW4gYW55IGV4cHJlc3Npb24sIHNvIHRoZXJlJ3Mgcm9vbSBmb3IgaW1wcm92ZW1lbnQgaGVyZS5cbiAgICBpbnRlcnBvbGF0aW9uLmtleXdvcmRzID0gS0VZV09SRFM7XG4gICAgY29uc3Qgc3VibW9kZXMgPSBbXG4gICAgICAuLi5LRVlXT1JEX01PREVTLFxuICAgICAgLi4uQlVJTFRfSU5TLFxuICAgICAgLi4uT1BFUkFUT1JTLFxuICAgICAgTlVNQkVSLFxuICAgICAgU1RSSU5HLFxuICAgICAgLi4uSURFTlRJRklFUlNcbiAgICBdO1xuICAgIGludGVycG9sYXRpb24uY29udGFpbnMgPSBbXG4gICAgICAuLi5zdWJtb2RlcyxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAuLi5zdWJtb2Rlc1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1N3aWZ0JyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIC4uLkNPTU1FTlRTLFxuICAgICAgRlVOQ1RJT04sXG4gICAgICBJTklUX1NVQlNDUklQVCxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3N0cnVjdCBwcm90b2NvbCBjbGFzcyBleHRlbnNpb24gZW51bSBhY3RvcicsXG4gICAgICAgIGVuZDogJ1xcXFx7JyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ0aXRsZS5jbGFzc1wiLFxuICAgICAgICAgICAgYmVnaW46IC9bQS1aYS16JF9dW1xcdTAwQzAtXFx1MDJCODAtOUEtWmEteiRfXSovXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uS0VZV09SRF9NT0RFU1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgT1BFUkFUT1JfREVDTEFSQVRJT04sXG4gICAgICBQUkVDRURFTkNFR1JPVVAsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdpbXBvcnQnLFxuICAgICAgICBlbmQ6IC8kLyxcbiAgICAgICAgY29udGFpbnM6IFsgLi4uQ09NTUVOVFMgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLi4uS0VZV09SRF9NT0RFUyxcbiAgICAgIC4uLkJVSUxUX0lOUyxcbiAgICAgIC4uLk9QRVJBVE9SUyxcbiAgICAgIE5VTUJFUixcbiAgICAgIFNUUklORyxcbiAgICAgIC4uLklERU5USUZJRVJTLFxuICAgICAgLi4uQVRUUklCVVRFUyxcbiAgICAgIFRZUEUsXG4gICAgICBUVVBMRVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzd2lmdDtcbiIsImNvbnN0IElERU5UX1JFID0gJ1tBLVphLXokX11bMC05QS1aYS16JF9dKic7XG5jb25zdCBLRVlXT1JEUyA9IFtcbiAgXCJhc1wiLCAvLyBmb3IgZXhwb3J0c1xuICBcImluXCIsXG4gIFwib2ZcIixcbiAgXCJpZlwiLFxuICBcImZvclwiLFxuICBcIndoaWxlXCIsXG4gIFwiZmluYWxseVwiLFxuICBcInZhclwiLFxuICBcIm5ld1wiLFxuICBcImZ1bmN0aW9uXCIsXG4gIFwiZG9cIixcbiAgXCJyZXR1cm5cIixcbiAgXCJ2b2lkXCIsXG4gIFwiZWxzZVwiLFxuICBcImJyZWFrXCIsXG4gIFwiY2F0Y2hcIixcbiAgXCJpbnN0YW5jZW9mXCIsXG4gIFwid2l0aFwiLFxuICBcInRocm93XCIsXG4gIFwiY2FzZVwiLFxuICBcImRlZmF1bHRcIixcbiAgXCJ0cnlcIixcbiAgXCJzd2l0Y2hcIixcbiAgXCJjb250aW51ZVwiLFxuICBcInR5cGVvZlwiLFxuICBcImRlbGV0ZVwiLFxuICBcImxldFwiLFxuICBcInlpZWxkXCIsXG4gIFwiY29uc3RcIixcbiAgXCJjbGFzc1wiLFxuICAvLyBKUyBoYW5kbGVzIHRoZXNlIHdpdGggYSBzcGVjaWFsIHJ1bGVcbiAgLy8gXCJnZXRcIixcbiAgLy8gXCJzZXRcIixcbiAgXCJkZWJ1Z2dlclwiLFxuICBcImFzeW5jXCIsXG4gIFwiYXdhaXRcIixcbiAgXCJzdGF0aWNcIixcbiAgXCJpbXBvcnRcIixcbiAgXCJmcm9tXCIsXG4gIFwiZXhwb3J0XCIsXG4gIFwiZXh0ZW5kc1wiXG5dO1xuY29uc3QgTElURVJBTFMgPSBbXG4gIFwidHJ1ZVwiLFxuICBcImZhbHNlXCIsXG4gIFwibnVsbFwiLFxuICBcInVuZGVmaW5lZFwiLFxuICBcIk5hTlwiLFxuICBcIkluZmluaXR5XCJcbl07XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzXG5jb25zdCBUWVBFUyA9IFtcbiAgLy8gRnVuZGFtZW50YWwgb2JqZWN0c1xuICBcIk9iamVjdFwiLFxuICBcIkZ1bmN0aW9uXCIsXG4gIFwiQm9vbGVhblwiLFxuICBcIlN5bWJvbFwiLFxuICAvLyBudW1iZXJzIGFuZCBkYXRlc1xuICBcIk1hdGhcIixcbiAgXCJEYXRlXCIsXG4gIFwiTnVtYmVyXCIsXG4gIFwiQmlnSW50XCIsXG4gIC8vIHRleHRcbiAgXCJTdHJpbmdcIixcbiAgXCJSZWdFeHBcIixcbiAgLy8gSW5kZXhlZCBjb2xsZWN0aW9uc1xuICBcIkFycmF5XCIsXG4gIFwiRmxvYXQzMkFycmF5XCIsXG4gIFwiRmxvYXQ2NEFycmF5XCIsXG4gIFwiSW50OEFycmF5XCIsXG4gIFwiVWludDhBcnJheVwiLFxuICBcIlVpbnQ4Q2xhbXBlZEFycmF5XCIsXG4gIFwiSW50MTZBcnJheVwiLFxuICBcIkludDMyQXJyYXlcIixcbiAgXCJVaW50MTZBcnJheVwiLFxuICBcIlVpbnQzMkFycmF5XCIsXG4gIFwiQmlnSW50NjRBcnJheVwiLFxuICBcIkJpZ1VpbnQ2NEFycmF5XCIsXG4gIC8vIEtleWVkIGNvbGxlY3Rpb25zXG4gIFwiU2V0XCIsXG4gIFwiTWFwXCIsXG4gIFwiV2Vha1NldFwiLFxuICBcIldlYWtNYXBcIixcbiAgLy8gU3RydWN0dXJlZCBkYXRhXG4gIFwiQXJyYXlCdWZmZXJcIixcbiAgXCJTaGFyZWRBcnJheUJ1ZmZlclwiLFxuICBcIkF0b21pY3NcIixcbiAgXCJEYXRhVmlld1wiLFxuICBcIkpTT05cIixcbiAgLy8gQ29udHJvbCBhYnN0cmFjdGlvbiBvYmplY3RzXG4gIFwiUHJvbWlzZVwiLFxuICBcIkdlbmVyYXRvclwiLFxuICBcIkdlbmVyYXRvckZ1bmN0aW9uXCIsXG4gIFwiQXN5bmNGdW5jdGlvblwiLFxuICAvLyBSZWZsZWN0aW9uXG4gIFwiUmVmbGVjdFwiLFxuICBcIlByb3h5XCIsXG4gIC8vIEludGVybmF0aW9uYWxpemF0aW9uXG4gIFwiSW50bFwiLFxuICAvLyBXZWJBc3NlbWJseVxuICBcIldlYkFzc2VtYmx5XCJcbl07XG5cbmNvbnN0IEVSUk9SX1RZUEVTID0gW1xuICBcIkVycm9yXCIsXG4gIFwiRXZhbEVycm9yXCIsXG4gIFwiSW50ZXJuYWxFcnJvclwiLFxuICBcIlJhbmdlRXJyb3JcIixcbiAgXCJSZWZlcmVuY2VFcnJvclwiLFxuICBcIlN5bnRheEVycm9yXCIsXG4gIFwiVHlwZUVycm9yXCIsXG4gIFwiVVJJRXJyb3JcIlxuXTtcblxuY29uc3QgQlVJTFRfSU5fR0xPQkFMUyA9IFtcbiAgXCJzZXRJbnRlcnZhbFwiLFxuICBcInNldFRpbWVvdXRcIixcbiAgXCJjbGVhckludGVydmFsXCIsXG4gIFwiY2xlYXJUaW1lb3V0XCIsXG5cbiAgXCJyZXF1aXJlXCIsXG4gIFwiZXhwb3J0c1wiLFxuXG4gIFwiZXZhbFwiLFxuICBcImlzRmluaXRlXCIsXG4gIFwiaXNOYU5cIixcbiAgXCJwYXJzZUZsb2F0XCIsXG4gIFwicGFyc2VJbnRcIixcbiAgXCJkZWNvZGVVUklcIixcbiAgXCJkZWNvZGVVUklDb21wb25lbnRcIixcbiAgXCJlbmNvZGVVUklcIixcbiAgXCJlbmNvZGVVUklDb21wb25lbnRcIixcbiAgXCJlc2NhcGVcIixcbiAgXCJ1bmVzY2FwZVwiXG5dO1xuXG5jb25zdCBCVUlMVF9JTl9WQVJJQUJMRVMgPSBbXG4gIFwiYXJndW1lbnRzXCIsXG4gIFwidGhpc1wiLFxuICBcInN1cGVyXCIsXG4gIFwiY29uc29sZVwiLFxuICBcIndpbmRvd1wiLFxuICBcImRvY3VtZW50XCIsXG4gIFwibG9jYWxTdG9yYWdlXCIsXG4gIFwibW9kdWxlXCIsXG4gIFwiZ2xvYmFsXCIgLy8gTm9kZS5qc1xuXTtcblxuY29uc3QgQlVJTFRfSU5TID0gW10uY29uY2F0KFxuICBCVUlMVF9JTl9HTE9CQUxTLFxuICBUWVBFUyxcbiAgRVJST1JfVFlQRVNcbik7XG5cbi8qXG5MYW5ndWFnZTogSmF2YVNjcmlwdFxuRGVzY3JpcHRpb246IEphdmFTY3JpcHQgKEpTKSBpcyBhIGxpZ2h0d2VpZ2h0LCBpbnRlcnByZXRlZCwgb3IganVzdC1pbi10aW1lIGNvbXBpbGVkIHByb2dyYW1taW5nIGxhbmd1YWdlIHdpdGggZmlyc3QtY2xhc3MgZnVuY3Rpb25zLlxuQ2F0ZWdvcnk6IGNvbW1vbiwgc2NyaXB0aW5nLCB3ZWJcbldlYnNpdGU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHRcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBqYXZhc2NyaXB0KGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICAvKipcbiAgICogVGFrZXMgYSBzdHJpbmcgbGlrZSBcIjxCb29nZXJcIiBhbmQgY2hlY2tzIHRvIHNlZVxuICAgKiBpZiB3ZSBjYW4gZmluZCBhIG1hdGNoaW5nIFwiPC9Cb29nZXJcIiBsYXRlciBpbiB0aGVcbiAgICogY29udGVudC5cbiAgICogQHBhcmFtIHtSZWdFeHBNYXRjaEFycmF5fSBtYXRjaFxuICAgKiBAcGFyYW0ge3thZnRlcjpudW1iZXJ9fSBwYXJhbTFcbiAgICovXG4gIGNvbnN0IGhhc0Nsb3NpbmdUYWcgPSAobWF0Y2gsIHsgYWZ0ZXIgfSkgPT4ge1xuICAgIGNvbnN0IHRhZyA9IFwiPC9cIiArIG1hdGNoWzBdLnNsaWNlKDEpO1xuICAgIGNvbnN0IHBvcyA9IG1hdGNoLmlucHV0LmluZGV4T2YodGFnLCBhZnRlcik7XG4gICAgcmV0dXJuIHBvcyAhPT0gLTE7XG4gIH07XG5cbiAgY29uc3QgSURFTlRfUkUkMSA9IElERU5UX1JFO1xuICBjb25zdCBGUkFHTUVOVCA9IHtcbiAgICBiZWdpbjogJzw+JyxcbiAgICBlbmQ6ICc8Lz4nXG4gIH07XG4gIC8vIHRvIGF2b2lkIHNvbWUgc3BlY2lhbCBjYXNlcyBpbnNpZGUgaXNUcnVseU9wZW5pbmdUYWdcbiAgY29uc3QgWE1MX1NFTEZfQ0xPU0lORyA9IC88W0EtWmEtejAtOVxcXFwuXzotXStcXHMqXFwvPi87XG4gIGNvbnN0IFhNTF9UQUcgPSB7XG4gICAgYmVnaW46IC88W0EtWmEtejAtOVxcXFwuXzotXSsvLFxuICAgIGVuZDogL1xcL1tBLVphLXowLTlcXFxcLl86LV0rPnxcXC8+LyxcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cE1hdGNoQXJyYXl9IG1hdGNoXG4gICAgICogQHBhcmFtIHtDYWxsYmFja1Jlc3BvbnNlfSByZXNwb25zZVxuICAgICAqL1xuICAgIGlzVHJ1bHlPcGVuaW5nVGFnOiAobWF0Y2gsIHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBhZnRlck1hdGNoSW5kZXggPSBtYXRjaFswXS5sZW5ndGggKyBtYXRjaC5pbmRleDtcbiAgICAgIGNvbnN0IG5leHRDaGFyID0gbWF0Y2guaW5wdXRbYWZ0ZXJNYXRjaEluZGV4XTtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gSFRNTCBzaG91bGQgbm90IGluY2x1ZGUgYW5vdGhlciByYXcgYDxgIGluc2lkZSBhIHRhZ1xuICAgICAgICAvLyBuZXN0ZWQgdHlwZT9cbiAgICAgICAgLy8gYDxBcnJheTxBcnJheTxudW1iZXI+PmAsIGV0Yy5cbiAgICAgICAgbmV4dENoYXIgPT09IFwiPFwiIHx8XG4gICAgICAgIC8vIHRoZSAsIGdpdmVzIGF3YXkgdGhhdCB0aGlzIGlzIG5vdCBIVE1MXG4gICAgICAgIC8vIGA8VCwgQSBleHRlbmRzIGtleW9mIFQsIFY+YFxuICAgICAgICBuZXh0Q2hhciA9PT0gXCIsXCIpIHtcbiAgICAgICAgcmVzcG9uc2UuaWdub3JlTWF0Y2goKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBgPHNvbWV0aGluZz5gXG4gICAgICAvLyBRdWl0ZSBwb3NzaWJseSBhIHRhZywgbGV0cyBsb29rIGZvciBhIG1hdGNoaW5nIGNsb3NpbmcgdGFnLi4uXG4gICAgICBpZiAobmV4dENoYXIgPT09IFwiPlwiKSB7XG4gICAgICAgIC8vIGlmIHdlIGNhbm5vdCBmaW5kIGEgbWF0Y2hpbmcgY2xvc2luZyB0YWcsIHRoZW4gd2VcbiAgICAgICAgLy8gd2lsbCBpZ25vcmUgaXRcbiAgICAgICAgaWYgKCFoYXNDbG9zaW5nVGFnKG1hdGNoLCB7IGFmdGVyOiBhZnRlck1hdGNoSW5kZXggfSkpIHtcbiAgICAgICAgICByZXNwb25zZS5pZ25vcmVNYXRjaCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGA8YmxhaCAvPmAgKHNlbGYtY2xvc2luZylcbiAgICAgIC8vIGhhbmRsZWQgYnkgc2ltcGxlU2VsZkNsb3NpbmcgcnVsZVxuXG4gICAgICAvLyBgPEZyb20gZXh0ZW5kcyBzdHJpbmc+YFxuICAgICAgLy8gdGVjaG5pY2FsbHkgdGhpcyBjb3VsZCBiZSBIVE1MLCBidXQgaXQgc21lbGxzIGxpa2UgYSB0eXBlXG4gICAgICBsZXQgbTtcbiAgICAgIGNvbnN0IGFmdGVyTWF0Y2ggPSBtYXRjaC5pbnB1dC5zdWJzdHJpbmcoYWZ0ZXJNYXRjaEluZGV4KTtcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgdWdoLCBidXQgYWRkZWQgc3BlY2lmaWNhbGx5IGZvciBodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL2lzc3Vlcy8zMjc2XG4gICAgICBpZiAoKG0gPSBhZnRlck1hdGNoLm1hdGNoKC9eXFxzK2V4dGVuZHNcXHMrLykpKSB7XG4gICAgICAgIGlmIChtLmluZGV4ID09PSAwKSB7XG4gICAgICAgICAgcmVzcG9uc2UuaWdub3JlTWF0Y2goKTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1yZXR1cm5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IEtFWVdPUkRTJDEgPSB7XG4gICAgJHBhdHRlcm46IElERU5UX1JFLFxuICAgIGtleXdvcmQ6IEtFWVdPUkRTLFxuICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgIGJ1aWx0X2luOiBCVUlMVF9JTlMsXG4gICAgXCJ2YXJpYWJsZS5sYW5ndWFnZVwiOiBCVUlMVF9JTl9WQVJJQUJMRVNcbiAgfTtcblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxpdGVyYWxzLW51bWVyaWMtbGl0ZXJhbHNcbiAgY29uc3QgZGVjaW1hbERpZ2l0cyA9ICdbMC05XShfP1swLTldKSonO1xuICBjb25zdCBmcmFjID0gYFxcXFwuKCR7ZGVjaW1hbERpZ2l0c30pYDtcbiAgLy8gRGVjaW1hbEludGVnZXJMaXRlcmFsLCBpbmNsdWRpbmcgQW5uZXggQiBOb25PY3RhbERlY2ltYWxJbnRlZ2VyTGl0ZXJhbFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkZGl0aW9uYWwtc3ludGF4LW51bWVyaWMtbGl0ZXJhbHNcbiAgY29uc3QgZGVjaW1hbEludGVnZXIgPSBgMHxbMS05XShfP1swLTldKSp8MFswLTddKls4OV1bMC05XSpgO1xuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gRGVjaW1hbExpdGVyYWxcbiAgICAgIHsgYmVnaW46IGAoXFxcXGIoJHtkZWNpbWFsSW50ZWdlcn0pKCgke2ZyYWN9KXxcXFxcLik/fCgke2ZyYWN9KSlgICtcbiAgICAgICAgYFtlRV1bKy1dPygke2RlY2ltYWxEaWdpdHN9KVxcXFxiYCB9LFxuICAgICAgeyBiZWdpbjogYFxcXFxiKCR7ZGVjaW1hbEludGVnZXJ9KVxcXFxiKCgke2ZyYWN9KVxcXFxifFxcXFwuKT98KCR7ZnJhY30pXFxcXGJgIH0sXG5cbiAgICAgIC8vIERlY2ltYWxCaWdJbnRlZ2VyTGl0ZXJhbFxuICAgICAgeyBiZWdpbjogYFxcXFxiKDB8WzEtOV0oXz9bMC05XSkqKW5cXFxcYmAgfSxcblxuICAgICAgLy8gTm9uRGVjaW1hbEludGVnZXJMaXRlcmFsXG4gICAgICB7IGJlZ2luOiBcIlxcXFxiMFt4WF1bMC05YS1mQS1GXShfP1swLTlhLWZBLUZdKSpuP1xcXFxiXCIgfSxcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwW2JCXVswLTFdKF8/WzAtMV0pKm4/XFxcXGJcIiB9LFxuICAgICAgeyBiZWdpbjogXCJcXFxcYjBbb09dWzAtN10oXz9bMC03XSkqbj9cXFxcYlwiIH0sXG5cbiAgICAgIC8vIExlZ2FjeU9jdGFsSW50ZWdlckxpdGVyYWwgKGRvZXMgbm90IGluY2x1ZGUgdW5kZXJzY29yZSBzZXBhcmF0b3JzKVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZGRpdGlvbmFsLXN5bnRheC1udW1lcmljLWxpdGVyYWxzXG4gICAgICB7IGJlZ2luOiBcIlxcXFxiMFswLTddK24/XFxcXGJcIiB9LFxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAnXFxcXCRcXFxceycsXG4gICAgZW5kOiAnXFxcXH0nLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgIGNvbnRhaW5zOiBbXSAvLyBkZWZpbmVkIGxhdGVyXG4gIH07XG4gIGNvbnN0IEhUTUxfVEVNUExBVEUgPSB7XG4gICAgYmVnaW46ICdodG1sYCcsXG4gICAgZW5kOiAnJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJ2AnLFxuICAgICAgcmV0dXJuRW5kOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgU1VCU1RcbiAgICAgIF0sXG4gICAgICBzdWJMYW5ndWFnZTogJ3htbCdcbiAgICB9XG4gIH07XG4gIGNvbnN0IENTU19URU1QTEFURSA9IHtcbiAgICBiZWdpbjogJ2Nzc2AnLFxuICAgIGVuZDogJycsXG4gICAgc3RhcnRzOiB7XG4gICAgICBlbmQ6ICdgJyxcbiAgICAgIHJldHVybkVuZDogZmFsc2UsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgIFNVQlNUXG4gICAgICBdLFxuICAgICAgc3ViTGFuZ3VhZ2U6ICdjc3MnXG4gICAgfVxuICB9O1xuICBjb25zdCBURU1QTEFURV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ2AnLFxuICAgIGVuZDogJ2AnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBTVUJTVFxuICAgIF1cbiAgfTtcbiAgY29uc3QgSlNET0NfQ09NTUVOVCA9IGhsanMuQ09NTUVOVChcbiAgICAvXFwvXFwqXFwqKD8hXFwvKS8sXG4gICAgJ1xcXFwqLycsXG4gICAge1xuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnKD89QFtBLVphLXpdKyknLFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICBiZWdpbjogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgYmVnaW46ICdcXFxceycsXG4gICAgICAgICAgICAgIGVuZDogJ1xcXFx9JyxcbiAgICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgICAgICAgYmVnaW46IElERU5UX1JFJDEgKyAnKD89XFxcXHMqKC0pfCQpJyxcbiAgICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZWF0IHNwYWNlcyAobm90IG5ld2xpbmVzKSBzbyB3ZSBjYW4gZmluZFxuICAgICAgICAgICAgLy8gdHlwZXMgb3IgdmFyaWFibGVzXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAvKD89W15cXG5dKVxccy8sXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgKTtcbiAgY29uc3QgQ09NTUVOVCA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29tbWVudFwiLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICBKU0RPQ19DT01NRU5ULFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbiAgY29uc3QgU1VCU1RfSU5URVJOQUxTID0gW1xuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIEhUTUxfVEVNUExBVEUsXG4gICAgQ1NTX1RFTVBMQVRFLFxuICAgIFRFTVBMQVRFX1NUUklORyxcbiAgICBOVU1CRVIsXG4gICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbDpcbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMzI4OFxuICAgIC8vIGhsanMuUkVHRVhQX01PREVcbiAgXTtcbiAgU1VCU1QuY29udGFpbnMgPSBTVUJTVF9JTlRFUk5BTFNcbiAgICAuY29uY2F0KHtcbiAgICAgIC8vIHdlIG5lZWQgdG8gcGFpciB1cCB7fSBpbnNpZGUgb3VyIHN1YnN0IHRvIHByZXZlbnRcbiAgICAgIC8vIGl0IGZyb20gZW5kaW5nIHRvbyBlYXJseSBieSBtYXRjaGluZyBhbm90aGVyIH1cbiAgICAgIGJlZ2luOiAvXFx7LyxcbiAgICAgIGVuZDogL1xcfS8sXG4gICAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIFwic2VsZlwiXG4gICAgICBdLmNvbmNhdChTVUJTVF9JTlRFUk5BTFMpXG4gICAgfSk7XG4gIGNvbnN0IFNVQlNUX0FORF9DT01NRU5UUyA9IFtdLmNvbmNhdChDT01NRU5ULCBTVUJTVC5jb250YWlucyk7XG4gIGNvbnN0IFBBUkFNU19DT05UQUlOUyA9IFNVQlNUX0FORF9DT01NRU5UUy5jb25jYXQoW1xuICAgIC8vIGVhdCByZWN1cnNpdmUgcGFyZW5zIGluIHN1YiBleHByZXNzaW9uc1xuICAgIHtcbiAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgIGVuZDogL1xcKS8sXG4gICAgICBrZXl3b3JkczogS0VZV09SRFMkMSxcbiAgICAgIGNvbnRhaW5zOiBbXCJzZWxmXCJdLmNvbmNhdChTVUJTVF9BTkRfQ09NTUVOVFMpXG4gICAgfVxuICBdKTtcbiAgY29uc3QgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46IC9cXCgvLFxuICAgIGVuZDogL1xcKS8sXG4gICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgY29udGFpbnM6IFBBUkFNU19DT05UQUlOU1xuICB9O1xuXG4gIC8vIEVTNiBjbGFzc2VzXG4gIGNvbnN0IENMQVNTX09SX0VYVEVORFMgPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIC8vIGNsYXNzIENhciBleHRlbmRzIHZlaGljbGVcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAvY2xhc3MvLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICBJREVOVF9SRSQxLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICAvZXh0ZW5kcy8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIHJlZ2V4LmNvbmNhdChJREVOVF9SRSQxLCBcIihcIiwgcmVnZXguY29uY2F0KC9cXC4vLCBJREVOVF9SRSQxKSwgXCIpKlwiKVxuICAgICAgICBdLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDM6IFwidGl0bGUuY2xhc3NcIixcbiAgICAgICAgICA1OiBcImtleXdvcmRcIixcbiAgICAgICAgICA3OiBcInRpdGxlLmNsYXNzLmluaGVyaXRlZFwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBjbGFzcyBDYXJcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAvY2xhc3MvLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICBJREVOVF9SRSQxXG4gICAgICAgIF0sXG4gICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAgICAgMzogXCJ0aXRsZS5jbGFzc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgQ0xBU1NfUkVGRVJFTkNFID0ge1xuICAgIHJlbGV2YW5jZTogMCxcbiAgICBtYXRjaDpcbiAgICByZWdleC5laXRoZXIoXG4gICAgICAvLyBIYXJkIGNvZGVkIGV4Y2VwdGlvbnNcbiAgICAgIC9cXGJKU09OLyxcbiAgICAgIC8vIEZsb2F0MzJBcnJheSwgT3V0VFxuICAgICAgL1xcYltBLVpdW2Etel0rKFtBLVpdW2Etel0qfFxcZCkqLyxcbiAgICAgIC8vIENTU0ZhY3RvcnksIENTU0ZhY3RvcnlUXG4gICAgICAvXFxiW0EtWl17Mix9KFtBLVpdW2Etel0rfFxcZCkrKFtBLVpdW2Etel0qKSovLFxuICAgICAgLy8gRlBzLCBGUHNUXG4gICAgICAvXFxiW0EtWl17Mix9W2Etel0rKFtBLVpdW2Etel0rfFxcZCkqKFtBLVpdW2Etel0qKSovLFxuICAgICAgLy8gUFxuICAgICAgLy8gc2luZ2xlIGxldHRlcnMgYXJlIG5vdCBoaWdobGlnaHRlZFxuICAgICAgLy8gQkxBSFxuICAgICAgLy8gdGhpcyB3aWxsIGJlIGZsYWdnZWQgYXMgYSBVUFBFUl9DQVNFX0NPTlNUQU5UIGluc3RlYWRcbiAgICApLFxuICAgIGNsYXNzTmFtZTogXCJ0aXRsZS5jbGFzc1wiLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBfOiBbXG4gICAgICAgIC8vIHNlIHdlIHN0aWxsIGdldCByZWxldmFuY2UgY3JlZGl0IGZvciBKUyBsaWJyYXJ5IGNsYXNzZXNcbiAgICAgICAgLi4uVFlQRVMsXG4gICAgICAgIC4uLkVSUk9SX1RZUEVTXG4gICAgICBdXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IFVTRV9TVFJJQ1QgPSB7XG4gICAgbGFiZWw6IFwidXNlX3N0cmljdFwiLFxuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIHJlbGV2YW5jZTogMTAsXG4gICAgYmVnaW46IC9eXFxzKlsnXCJddXNlIChzdHJpY3R8YXNtKVsnXCJdL1xuICB9O1xuXG4gIGNvbnN0IEZVTkNUSU9OX0RFRklOSVRJT04gPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAvZnVuY3Rpb24vLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICBJREVOVF9SRSQxLFxuICAgICAgICAgIC8oPz1cXHMqXFwoKS9cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGFub255bW91cyBmdW5jdGlvblxuICAgICAge1xuICAgICAgICBtYXRjaDogW1xuICAgICAgICAgIC9mdW5jdGlvbi8sXG4gICAgICAgICAgL1xccyooPz1cXCgpL1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICBjbGFzc05hbWU6IHtcbiAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgMzogXCJ0aXRsZS5mdW5jdGlvblwiXG4gICAgfSxcbiAgICBsYWJlbDogXCJmdW5jLmRlZlwiLFxuICAgIGNvbnRhaW5zOiBbIFBBUkFNUyBdLFxuICAgIGlsbGVnYWw6IC8lL1xuICB9O1xuXG4gIGNvbnN0IFVQUEVSX0NBU0VfQ09OU1RBTlQgPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIG1hdGNoOiAvXFxiW0EtWl1bQS1aXzAtOV0rXFxiLyxcbiAgICBjbGFzc05hbWU6IFwidmFyaWFibGUuY29uc3RhbnRcIlxuICB9O1xuXG4gIGZ1bmN0aW9uIG5vbmVPZihsaXN0KSB7XG4gICAgcmV0dXJuIHJlZ2V4LmNvbmNhdChcIig/IVwiLCBsaXN0LmpvaW4oXCJ8XCIpLCBcIilcIik7XG4gIH1cblxuICBjb25zdCBGVU5DVElPTl9DQUxMID0ge1xuICAgIG1hdGNoOiByZWdleC5jb25jYXQoXG4gICAgICAvXFxiLyxcbiAgICAgIG5vbmVPZihbXG4gICAgICAgIC4uLkJVSUxUX0lOX0dMT0JBTFMsXG4gICAgICAgIFwic3VwZXJcIlxuICAgICAgXSksXG4gICAgICBJREVOVF9SRSQxLCByZWdleC5sb29rYWhlYWQoL1xcKC8pKSxcbiAgICBjbGFzc05hbWU6IFwidGl0bGUuZnVuY3Rpb25cIixcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBQUk9QRVJUWV9BQ0NFU1MgPSB7XG4gICAgYmVnaW46IHJlZ2V4LmNvbmNhdCgvXFwuLywgcmVnZXgubG9va2FoZWFkKFxuICAgICAgcmVnZXguY29uY2F0KElERU5UX1JFJDEsIC8oPyFbMC05QS1aYS16JF8oXSkvKVxuICAgICkpLFxuICAgIGVuZDogSURFTlRfUkUkMSxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAga2V5d29yZHM6IFwicHJvdG90eXBlXCIsXG4gICAgY2xhc3NOYW1lOiBcInByb3BlcnR5XCIsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgR0VUVEVSX09SX1NFVFRFUiA9IHtcbiAgICBtYXRjaDogW1xuICAgICAgL2dldHxzZXQvLFxuICAgICAgL1xccysvLFxuICAgICAgSURFTlRfUkUkMSxcbiAgICAgIC8oPz1cXCgpL1xuICAgIF0sXG4gICAgY2xhc3NOYW1lOiB7XG4gICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgIDM6IFwidGl0bGUuZnVuY3Rpb25cIlxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgLy8gZWF0IHRvIGF2b2lkIGVtcHR5IHBhcmFtc1xuICAgICAgICBiZWdpbjogL1xcKFxcKS9cbiAgICAgIH0sXG4gICAgICBQQVJBTVNcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgRlVOQ19MRUFEX0lOX1JFID0gJyhcXFxcKCcgK1xuICAgICdbXigpXSooXFxcXCgnICtcbiAgICAnW14oKV0qKFxcXFwoJyArXG4gICAgJ1teKCldKicgK1xuICAgICdcXFxcKVteKCldKikqJyArXG4gICAgJ1xcXFwpW14oKV0qKSonICtcbiAgICAnXFxcXCl8JyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcpXFxcXHMqPT4nO1xuXG4gIGNvbnN0IEZVTkNUSU9OX1ZBUklBQkxFID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvY29uc3R8dmFyfGxldC8sIC9cXHMrLyxcbiAgICAgIElERU5UX1JFJDEsIC9cXHMqLyxcbiAgICAgIC89XFxzKi8sXG4gICAgICAvKGFzeW5jXFxzKik/LywgLy8gYXN5bmMgaXMgb3B0aW9uYWxcbiAgICAgIHJlZ2V4Lmxvb2thaGVhZChGVU5DX0xFQURfSU5fUkUpXG4gICAgXSxcbiAgICBrZXl3b3JkczogXCJhc3luY1wiLFxuICAgIGNsYXNzTmFtZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInRpdGxlLmZ1bmN0aW9uXCJcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBQQVJBTVNcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnSmF2YXNjcmlwdCcsXG4gICAgYWxpYXNlczogWydqcycsICdqc3gnLCAnbWpzJywgJ2NqcyddLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgIC8vIHRoaXMgd2lsbCBiZSBleHRlbmRlZCBieSBUeXBlU2NyaXB0XG4gICAgZXhwb3J0czogeyBQQVJBTVNfQ09OVEFJTlMsIENMQVNTX1JFRkVSRU5DRSB9LFxuICAgIGlsbGVnYWw6IC8jKD8hWyRfQS16XSkvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlNIRUJBTkcoe1xuICAgICAgICBsYWJlbDogXCJzaGViYW5nXCIsXG4gICAgICAgIGJpbmFyeTogXCJub2RlXCIsXG4gICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgfSksXG4gICAgICBVU0VfU1RSSUNULFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIEhUTUxfVEVNUExBVEUsXG4gICAgICBDU1NfVEVNUExBVEUsXG4gICAgICBURU1QTEFURV9TVFJJTkcsXG4gICAgICBDT01NRU5ULFxuICAgICAgTlVNQkVSLFxuICAgICAgQ0xBU1NfUkVGRVJFTkNFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgYmVnaW46IElERU5UX1JFJDEgKyByZWdleC5sb29rYWhlYWQoJzonKSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgRlVOQ1RJT05fVkFSSUFCTEUsXG4gICAgICB7IC8vIFwidmFsdWVcIiBjb250YWluZXJcbiAgICAgICAgYmVnaW46ICcoJyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKGNhc2V8cmV0dXJufHRocm93KVxcXFxiKVxcXFxzKicsXG4gICAgICAgIGtleXdvcmRzOiAncmV0dXJuIHRocm93IGNhc2UnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgQ09NTUVOVCxcbiAgICAgICAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8gY291bnQgdGhlIHBhcmVucyB0byBtYWtlIHN1cmUgd2UgYWN0dWFsbHkgaGF2ZSB0aGVcbiAgICAgICAgICAgIC8vIGNvcnJlY3QgYm91bmRpbmcgKCApIGJlZm9yZSB0aGUgPT4uICBUaGVyZSBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mXG4gICAgICAgICAgICAvLyBzdWItZXhwcmVzc2lvbnMgaW5zaWRlIGFsc28gc3Vycm91bmRlZCBieSBwYXJlbnMuXG4gICAgICAgICAgICBiZWdpbjogRlVOQ19MRUFEX0lOX1JFLFxuICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccyo9PicsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cXChcXHMqXFwpLyxcbiAgICAgICAgICAgICAgICAgICAgc2tpcDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluczogUEFSQU1TX0NPTlRBSU5TXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IC8vIGNvdWxkIGJlIGEgY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgcGFyYW1zIHRvIGEgZnVuY3Rpb24gY2FsbFxuICAgICAgICAgICAgYmVnaW46IC8sLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF0Y2g6IC9cXHMrLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyAvLyBKU1hcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHsgYmVnaW46IEZSQUdNRU5ULmJlZ2luLCBlbmQ6IEZSQUdNRU5ULmVuZCB9LFxuICAgICAgICAgICAgICB7IG1hdGNoOiBYTUxfU0VMRl9DTE9TSU5HIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogWE1MX1RBRy5iZWdpbixcbiAgICAgICAgICAgICAgICAvLyB3ZSBjYXJlZnVsbHkgY2hlY2sgdGhlIG9wZW5pbmcgdGFnIHRvIHNlZSBpZiBpdCB0cnVseVxuICAgICAgICAgICAgICAgIC8vIGlzIGEgdGFnIGFuZCBub3QgYSBmYWxzZSBwb3NpdGl2ZVxuICAgICAgICAgICAgICAgICdvbjpiZWdpbic6IFhNTF9UQUcuaXNUcnVseU9wZW5pbmdUYWcsXG4gICAgICAgICAgICAgICAgZW5kOiBYTUxfVEFHLmVuZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiBYTUxfVEFHLmJlZ2luLFxuICAgICAgICAgICAgICAgIGVuZDogWE1MX1RBRy5lbmQsXG4gICAgICAgICAgICAgICAgc2tpcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBGVU5DVElPTl9ERUZJTklUSU9OLFxuICAgICAge1xuICAgICAgICAvLyBwcmV2ZW50IHRoaXMgZnJvbSBnZXR0aW5nIHN3YWxsb3dlZCB1cCBieSBmdW5jdGlvblxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFwcGVhciBcImZ1bmN0aW9uIGxpa2VcIlxuICAgICAgICBiZWdpbktleXdvcmRzOiBcIndoaWxlIGlmIHN3aXRjaCBjYXRjaCBmb3JcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gd2UgaGF2ZSB0byBjb3VudCB0aGUgcGFyZW5zIHRvIG1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYXZlIHRoZSBjb3JyZWN0XG4gICAgICAgIC8vIGJvdW5kaW5nICggKS4gIFRoZXJlIGNvdWxkIGJlIGFueSBudW1iZXIgb2Ygc3ViLWV4cHJlc3Npb25zIGluc2lkZVxuICAgICAgICAvLyBhbHNvIHN1cnJvdW5kZWQgYnkgcGFyZW5zLlxuICAgICAgICBiZWdpbjogJ1xcXFxiKD8hZnVuY3Rpb24pJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArXG4gICAgICAgICAgJ1xcXFwoJyArIC8vIGZpcnN0IHBhcmVuc1xuICAgICAgICAgICdbXigpXSooXFxcXCgnICtcbiAgICAgICAgICAgICdbXigpXSooXFxcXCgnICtcbiAgICAgICAgICAgICAgJ1teKCldKicgK1xuICAgICAgICAgICAgJ1xcXFwpW14oKV0qKSonICtcbiAgICAgICAgICAnXFxcXClbXigpXSopKicgK1xuICAgICAgICAgICdcXFxcKVxcXFxzKlxcXFx7JywgLy8gZW5kIHBhcmVuc1xuICAgICAgICByZXR1cm5CZWdpbjp0cnVlLFxuICAgICAgICBsYWJlbDogXCJmdW5jLmRlZlwiLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFBBUkFNUyxcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7IGJlZ2luOiBJREVOVF9SRSQxLCBjbGFzc05hbWU6IFwidGl0bGUuZnVuY3Rpb25cIiB9KVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gY2F0Y2ggLi4uIHNvIGl0IHdvbid0IHRyaWdnZXIgdGhlIHByb3BlcnR5IHJ1bGUgYmVsb3dcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IC9cXC5cXC5cXC4vLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBQUk9QRVJUWV9BQ0NFU1MsXG4gICAgICAvLyBoYWNrOiBwcmV2ZW50cyBkZXRlY3Rpb24gb2Yga2V5d29yZHMgaW4gc29tZSBjaXJjdW1zdGFuY2VzXG4gICAgICAvLyAua2V5d29yZCgpXG4gICAgICAvLyAka2V5d29yZCA9IHhcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6ICdcXFxcJCcgKyBJREVOVF9SRSQxLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbIC9cXGJjb25zdHJ1Y3Rvcig/PVxccypcXCgpLyBdLFxuICAgICAgICBjbGFzc05hbWU6IHsgMTogXCJ0aXRsZS5mdW5jdGlvblwiIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbIFBBUkFNUyBdXG4gICAgICB9LFxuICAgICAgRlVOQ1RJT05fQ0FMTCxcbiAgICAgIFVQUEVSX0NBU0VfQ09OU1RBTlQsXG4gICAgICBDTEFTU19PUl9FWFRFTkRTLFxuICAgICAgR0VUVEVSX09SX1NFVFRFUixcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IC9cXCRbKC5dLyAvLyByZWxldmFuY2UgYm9vc3RlciBmb3IgYSBwYXR0ZXJuIGNvbW1vbiB0byBKUyBsaWJzOiBgJChzb21ldGhpbmcpYCBhbmQgYCQuc29tZXRoaW5nYFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxuLypcbkxhbmd1YWdlOiBUeXBlU2NyaXB0XG5BdXRob3I6IFBhbnUgSG9yc21hbGFodGkgPHBhbnUuaG9yc21hbGFodGlAaWtpLmZpPlxuQ29udHJpYnV0b3JzOiBJa2UgS3UgPGRlbXBmaUB5YWhvby5jb20+XG5EZXNjcmlwdGlvbjogVHlwZVNjcmlwdCBpcyBhIHN0cmljdCBzdXBlcnNldCBvZiBKYXZhU2NyaXB0XG5XZWJzaXRlOiBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmdcbkNhdGVnb3J5OiBjb21tb24sIHNjcmlwdGluZ1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIHR5cGVzY3JpcHQoaGxqcykge1xuICBjb25zdCB0c0xhbmd1YWdlID0gamF2YXNjcmlwdChobGpzKTtcblxuICBjb25zdCBJREVOVF9SRSQxID0gSURFTlRfUkU7XG4gIGNvbnN0IFRZUEVTID0gW1xuICAgIFwiYW55XCIsXG4gICAgXCJ2b2lkXCIsXG4gICAgXCJudW1iZXJcIixcbiAgICBcImJvb2xlYW5cIixcbiAgICBcInN0cmluZ1wiLFxuICAgIFwib2JqZWN0XCIsXG4gICAgXCJuZXZlclwiLFxuICAgIFwic3ltYm9sXCIsXG4gICAgXCJiaWdpbnRcIixcbiAgICBcInVua25vd25cIlxuICBdO1xuICBjb25zdCBOQU1FU1BBQ0UgPSB7XG4gICAgYmVnaW5LZXl3b3JkczogJ25hbWVzcGFjZScsXG4gICAgZW5kOiAvXFx7LyxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbIHRzTGFuZ3VhZ2UuZXhwb3J0cy5DTEFTU19SRUZFUkVOQ0UgXVxuICB9O1xuICBjb25zdCBJTlRFUkZBQ0UgPSB7XG4gICAgYmVnaW5LZXl3b3JkczogJ2ludGVyZmFjZScsXG4gICAgZW5kOiAvXFx7LyxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiAnaW50ZXJmYWNlIGV4dGVuZHMnLFxuICAgICAgYnVpbHRfaW46IFRZUEVTXG4gICAgfSxcbiAgICBjb250YWluczogWyB0c0xhbmd1YWdlLmV4cG9ydHMuQ0xBU1NfUkVGRVJFTkNFIF1cbiAgfTtcbiAgY29uc3QgVVNFX1NUUklDVCA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICByZWxldmFuY2U6IDEwLFxuICAgIGJlZ2luOiAvXlxccypbJ1wiXXVzZSBzdHJpY3RbJ1wiXS9cbiAgfTtcbiAgY29uc3QgVFNfU1BFQ0lGSUNfS0VZV09SRFMgPSBbXG4gICAgXCJ0eXBlXCIsXG4gICAgXCJuYW1lc3BhY2VcIixcbiAgICBcImludGVyZmFjZVwiLFxuICAgIFwicHVibGljXCIsXG4gICAgXCJwcml2YXRlXCIsXG4gICAgXCJwcm90ZWN0ZWRcIixcbiAgICBcImltcGxlbWVudHNcIixcbiAgICBcImRlY2xhcmVcIixcbiAgICBcImFic3RyYWN0XCIsXG4gICAgXCJyZWFkb25seVwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwib3ZlcnJpZGVcIlxuICBdO1xuICBjb25zdCBLRVlXT1JEUyQxID0ge1xuICAgICRwYXR0ZXJuOiBJREVOVF9SRSxcbiAgICBrZXl3b3JkOiBLRVlXT1JEUy5jb25jYXQoVFNfU1BFQ0lGSUNfS0VZV09SRFMpLFxuICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgIGJ1aWx0X2luOiBCVUlMVF9JTlMuY29uY2F0KFRZUEVTKSxcbiAgICBcInZhcmlhYmxlLmxhbmd1YWdlXCI6IEJVSUxUX0lOX1ZBUklBQkxFU1xuICB9O1xuICBjb25zdCBERUNPUkFUT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdAJyArIElERU5UX1JFJDEsXG4gIH07XG5cbiAgY29uc3Qgc3dhcE1vZGUgPSAobW9kZSwgbGFiZWwsIHJlcGxhY2VtZW50KSA9PiB7XG4gICAgY29uc3QgaW5keCA9IG1vZGUuY29udGFpbnMuZmluZEluZGV4KG0gPT4gbS5sYWJlbCA9PT0gbGFiZWwpO1xuICAgIGlmIChpbmR4ID09PSAtMSkgeyB0aHJvdyBuZXcgRXJyb3IoXCJjYW4gbm90IGZpbmQgbW9kZSB0byByZXBsYWNlXCIpOyB9XG5cbiAgICBtb2RlLmNvbnRhaW5zLnNwbGljZShpbmR4LCAxLCByZXBsYWNlbWVudCk7XG4gIH07XG5cblxuICAvLyB0aGlzIHNob3VsZCB1cGRhdGUgYW55d2hlcmUga2V5d29yZHMgaXMgdXNlZCBzaW5jZVxuICAvLyBpdCB3aWxsIGJlIHRoZSBzYW1lIGFjdHVhbCBKUyBvYmplY3RcbiAgT2JqZWN0LmFzc2lnbih0c0xhbmd1YWdlLmtleXdvcmRzLCBLRVlXT1JEUyQxKTtcblxuICB0c0xhbmd1YWdlLmV4cG9ydHMuUEFSQU1TX0NPTlRBSU5TLnB1c2goREVDT1JBVE9SKTtcbiAgdHNMYW5ndWFnZS5jb250YWlucyA9IHRzTGFuZ3VhZ2UuY29udGFpbnMuY29uY2F0KFtcbiAgICBERUNPUkFUT1IsXG4gICAgTkFNRVNQQUNFLFxuICAgIElOVEVSRkFDRSxcbiAgXSk7XG5cbiAgLy8gVFMgZ2V0cyBhIHNpbXBsZXIgc2hlYmFuZyBydWxlIHRoYW4gSlNcbiAgc3dhcE1vZGUodHNMYW5ndWFnZSwgXCJzaGViYW5nXCIsIGhsanMuU0hFQkFORygpKTtcbiAgLy8gSlMgdXNlIHN0cmljdCBydWxlIHB1cnBvc2VseSBleGNsdWRlcyBgYXNtYCB3aGljaCBtYWtlcyBubyBzZW5zZVxuICBzd2FwTW9kZSh0c0xhbmd1YWdlLCBcInVzZV9zdHJpY3RcIiwgVVNFX1NUUklDVCk7XG5cbiAgY29uc3QgZnVuY3Rpb25EZWNsYXJhdGlvbiA9IHRzTGFuZ3VhZ2UuY29udGFpbnMuZmluZChtID0+IG0ubGFiZWwgPT09IFwiZnVuYy5kZWZcIik7XG4gIGZ1bmN0aW9uRGVjbGFyYXRpb24ucmVsZXZhbmNlID0gMDsgLy8gKCkgPT4ge30gaXMgbW9yZSB0eXBpY2FsIGluIFR5cGVTY3JpcHRcblxuICBPYmplY3QuYXNzaWduKHRzTGFuZ3VhZ2UsIHtcbiAgICBuYW1lOiAnVHlwZVNjcmlwdCcsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ3RzJyxcbiAgICAgICd0c3gnXG4gICAgXVxuICB9KTtcblxuICByZXR1cm4gdHNMYW5ndWFnZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlc2NyaXB0O1xuIiwiLypcbkxhbmd1YWdlOiBWaXN1YWwgQmFzaWMgLk5FVFxuRGVzY3JpcHRpb246IFZpc3VhbCBCYXNpYyAuTkVUIChWQi5ORVQpIGlzIGEgbXVsdGktcGFyYWRpZ20sIG9iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZyBsYW5ndWFnZSwgaW1wbGVtZW50ZWQgb24gdGhlIC5ORVQgRnJhbWV3b3JrLlxuQXV0aG9yczogUG9yZW4gQ2hpYW5nIDxyZW4uY2hpYW5nQGdtYWlsLmNvbT4sIEphbiBQaWx6ZXJcbldlYnNpdGU6IGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2RvdG5ldC92aXN1YWwtYmFzaWMvZ2V0dGluZy1zdGFydGVkXG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gdmJuZXQoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIC8qKlxuICAgKiBDaGFyYWN0ZXIgTGl0ZXJhbFxuICAgKiBFaXRoZXIgYSBzaW5nbGUgY2hhcmFjdGVyIChcImFcIkMpIG9yIGFuIGVzY2FwZWQgZG91YmxlIHF1b3RlIChcIlwiXCJcIkMpLlxuICAgKi9cbiAgY29uc3QgQ0hBUkFDVEVSID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cIihcIlwifFteL25dKVwiQ1xcYi9cbiAgfTtcblxuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1wiLyxcbiAgICBlbmQ6IC9cIi8sXG4gICAgaWxsZWdhbDogL1xcbi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgLy8gZG91YmxlIHF1b3RlIGVzY2FwZVxuICAgICAgICBiZWdpbjogL1wiXCIvIH1cbiAgICBdXG4gIH07XG5cbiAgLyoqIERhdGUgTGl0ZXJhbHMgY29uc2lzdCBvZiBhIGRhdGUsIGEgdGltZSwgb3IgYm90aCBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSwgc3Vycm91bmRlZCBieSAjICovXG4gIGNvbnN0IE1NX0REX1lZWVkgPSAvXFxkezEsMn1cXC9cXGR7MSwyfVxcL1xcZHs0fS87XG4gIGNvbnN0IFlZWVlfTU1fREQgPSAvXFxkezR9LVxcZHsxLDJ9LVxcZHsxLDJ9LztcbiAgY29uc3QgVElNRV8xMkggPSAvKFxcZHwxWzAxMl0pKDpcXGQrKXswLDJ9ICooQU18UE0pLztcbiAgY29uc3QgVElNRV8yNEggPSAvXFxkezEsMn0oOlxcZHsxLDJ9KXsxLDJ9LztcbiAgY29uc3QgREFURSA9IHtcbiAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICAvLyAjWVlZWS1NTS1ERCMgKElTTy1EYXRlKSBvciAjTS9EL1lZWVkjIChVUy1EYXRlKVxuICAgICAgICBiZWdpbjogcmVnZXguY29uY2F0KC8jICovLCByZWdleC5laXRoZXIoWVlZWV9NTV9ERCwgTU1fRERfWVlZWSksIC8gKiMvKSB9LFxuICAgICAge1xuICAgICAgICAvLyAjSDptbVs6c3NdIyAoMjRoIFRpbWUpXG4gICAgICAgIGJlZ2luOiByZWdleC5jb25jYXQoLyMgKi8sIFRJTUVfMjRILCAvICojLykgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gI2hbOm1tWzpzc11dIEEjICgxMmggVGltZSlcbiAgICAgICAgYmVnaW46IHJlZ2V4LmNvbmNhdCgvIyAqLywgVElNRV8xMkgsIC8gKiMvKSB9LFxuICAgICAge1xuICAgICAgICAvLyBkYXRlIHBsdXMgdGltZVxuICAgICAgICBiZWdpbjogcmVnZXguY29uY2F0KFxuICAgICAgICAgIC8jICovLFxuICAgICAgICAgIHJlZ2V4LmVpdGhlcihZWVlZX01NX0RELCBNTV9ERF9ZWVlZKSxcbiAgICAgICAgICAvICsvLFxuICAgICAgICAgIHJlZ2V4LmVpdGhlcihUSU1FXzEySCwgVElNRV8yNEgpLFxuICAgICAgICAgIC8gKiMvXG4gICAgICAgICkgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgLy8gRmxvYXRcbiAgICAgICAgYmVnaW46IC9cXGJcXGRbXFxkX10qKChcXC5bXFxkX10rKEVbKy1dP1tcXGRfXSspPyl8KEVbKy1dP1tcXGRfXSspKVtSRkRAISNdPy8gfSxcbiAgICAgIHtcbiAgICAgICAgLy8gSW50ZWdlciAoYmFzZSAxMClcbiAgICAgICAgYmVnaW46IC9cXGJcXGRbXFxkX10qKChVP1tTSUxdKXxbJSZdKT8vIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEludGVnZXIgKGJhc2UgMTYpXG4gICAgICAgIGJlZ2luOiAvJkhbXFxkQS1GX10rKChVP1tTSUxdKXxbJSZdKT8vIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEludGVnZXIgKGJhc2UgOClcbiAgICAgICAgYmVnaW46IC8mT1swLTdfXSsoKFU/W1NJTF0pfFslJl0pPy8gfSxcbiAgICAgIHtcbiAgICAgICAgLy8gSW50ZWdlciAoYmFzZSAyKVxuICAgICAgICBiZWdpbjogLyZCWzAxX10rKChVP1tTSUxdKXxbJSZdKT8vIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgTEFCRUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGFiZWwnLFxuICAgIGJlZ2luOiAvXlxcdys6L1xuICB9O1xuXG4gIGNvbnN0IERPQ19DT01NRU5UID0gaGxqcy5DT01NRU5UKC8nJycvLCAvJC8sIHsgY29udGFpbnM6IFtcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgYmVnaW46IC88XFwvPy8sXG4gICAgICBlbmQ6IC8+L1xuICAgIH1cbiAgXSB9KTtcblxuICBjb25zdCBDT01NRU5UID0gaGxqcy5DT01NRU5UKG51bGwsIC8kLywgeyB2YXJpYW50czogW1xuICAgIHsgYmVnaW46IC8nLyB9LFxuICAgIHtcbiAgICAgIC8vIFRPRE86IFVzZSBtdWx0aS1jbGFzcyBmb3IgbGVhZGluZyBzcGFjZXNcbiAgICAgIGJlZ2luOiAvKFtcXHQgXXxeKVJFTSg/PVxccykvIH1cbiAgXSB9KTtcblxuICBjb25zdCBESVJFQ1RJVkVTID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIC8vIFRPRE86IFVzZSBtdWx0aS1jbGFzcyBmb3IgaW5kZW50YXRpb24gb25jZSBhdmFpbGFibGVcbiAgICBiZWdpbjogL1tcXHQgXSojKGNvbnN0fGRpc2FibGV8ZWxzZXxlbHNlaWZ8ZW5hYmxlfGVuZHxleHRlcm5hbHNvdXJjZXxpZnxyZWdpb24pXFxiLyxcbiAgICBlbmQ6IC8kLyxcbiAgICBrZXl3b3JkczogeyBrZXl3b3JkOlxuICAgICAgICAnY29uc3QgZGlzYWJsZSBlbHNlIGVsc2VpZiBlbmFibGUgZW5kIGV4dGVybmFsc291cmNlIGlmIHJlZ2lvbiB0aGVuJyB9LFxuICAgIGNvbnRhaW5zOiBbIENPTU1FTlQgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1Zpc3VhbCBCYXNpYyAuTkVUJyxcbiAgICBhbGlhc2VzOiBbICd2YicgXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGNsYXNzTmFtZUFsaWFzZXM6IHsgbGFiZWw6ICdzeW1ib2wnIH0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdhZGRoYW5kbGVyIGFsaWFzIGFnZ3JlZ2F0ZSBhbnNpIGFzIGFzeW5jIGFzc2VtYmx5IGF1dG8gYmluYXJ5IGJ5IGJ5cmVmIGJ5dmFsICcgLyogYS1iICovXG4gICAgICAgICsgJ2NhbGwgY2FzZSBjYXRjaCBjbGFzcyBjb21wYXJlIGNvbnN0IGNvbnRpbnVlIGN1c3RvbSBkZWNsYXJlIGRlZmF1bHQgZGVsZWdhdGUgZGltIGRpc3RpbmN0IGRvICcgLyogYy1kICovXG4gICAgICAgICsgJ2VhY2ggZXF1YWxzIGVsc2UgZWxzZWlmIGVuZCBlbnVtIGVyYXNlIGVycm9yIGV2ZW50IGV4aXQgZXhwbGljaXQgZmluYWxseSBmb3IgZnJpZW5kIGZyb20gZnVuY3Rpb24gJyAvKiBlLWYgKi9cbiAgICAgICAgKyAnZ2V0IGdsb2JhbCBnb3RvIGdyb3VwIGhhbmRsZXMgaWYgaW1wbGVtZW50cyBpbXBvcnRzIGluIGluaGVyaXRzIGludGVyZmFjZSBpbnRvIGl0ZXJhdG9yICcgLyogZy1pICovXG4gICAgICAgICsgJ2pvaW4ga2V5IGxldCBsaWIgbG9vcCBtZSBtaWQgbW9kdWxlIG11c3Rpbmhlcml0IG11c3RvdmVycmlkZSBteWJhc2UgbXljbGFzcyAnIC8qIGotbSAqL1xuICAgICAgICArICduYW1lc3BhY2UgbmFycm93aW5nIG5ldyBuZXh0IG5vdGluaGVyaXRhYmxlIG5vdG92ZXJyaWRhYmxlICcgLyogbiAqL1xuICAgICAgICArICdvZiBvZmYgb24gb3BlcmF0b3Igb3B0aW9uIG9wdGlvbmFsIG9yZGVyIG92ZXJsb2FkcyBvdmVycmlkYWJsZSBvdmVycmlkZXMgJyAvKiBvICovXG4gICAgICAgICsgJ3BhcmFtYXJyYXkgcGFydGlhbCBwcmVzZXJ2ZSBwcml2YXRlIHByb3BlcnR5IHByb3RlY3RlZCBwdWJsaWMgJyAvKiBwICovXG4gICAgICAgICsgJ3JhaXNlZXZlbnQgcmVhZG9ubHkgcmVkaW0gcmVtb3ZlaGFuZGxlciByZXN1bWUgcmV0dXJuICcgLyogciAqL1xuICAgICAgICArICdzZWxlY3Qgc2V0IHNoYWRvd3Mgc2hhcmVkIHNraXAgc3RhdGljIHN0ZXAgc3RvcCBzdHJ1Y3R1cmUgc3RyaWN0IHN1YiBzeW5jbG9jayAnIC8qIHMgKi9cbiAgICAgICAgKyAndGFrZSB0ZXh0IHRoZW4gdGhyb3cgdG8gdHJ5IHVuaWNvZGUgdW50aWwgdXNpbmcgd2hlbiB3aGVyZSB3aGlsZSB3aWRlbmluZyB3aXRoIHdpdGhldmVudHMgd3JpdGVvbmx5IHlpZWxkJyAvKiB0LXkgKi8sXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLy8gT3BlcmF0b3JzIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2RvdG5ldC92aXN1YWwtYmFzaWMvbGFuZ3VhZ2UtcmVmZXJlbmNlL29wZXJhdG9yc1xuICAgICAgICAnYWRkcmVzc29mIGFuZCBhbmRhbHNvIGF3YWl0IGRpcmVjdGNhc3QgZ2V0dHlwZSBnZXR4bWxuYW1lc3BhY2UgaXMgaXNmYWxzZSBpc25vdCBpc3RydWUgbGlrZSBtb2QgbmFtZW9mIG5ldyBub3Qgb3Igb3JlbHNlIHRyeWNhc3QgdHlwZW9mIHhvciAnXG4gICAgICAgIC8vIFR5cGUgQ29udmVyc2lvbiBGdW5jdGlvbnMgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZG90bmV0L3Zpc3VhbC1iYXNpYy9sYW5ndWFnZS1yZWZlcmVuY2UvZnVuY3Rpb25zL3R5cGUtY29udmVyc2lvbi1mdW5jdGlvbnNcbiAgICAgICAgKyAnY2Jvb2wgY2J5dGUgY2NoYXIgY2RhdGUgY2RibCBjZGVjIGNpbnQgY2xuZyBjb2JqIGNzYnl0ZSBjc2hvcnQgY3NuZyBjc3RyIGN1aW50IGN1bG5nIGN1c2hvcnQnLFxuICAgICAgdHlwZTpcbiAgICAgICAgLy8gRGF0YSB0eXBlcyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9kb3RuZXQvdmlzdWFsLWJhc2ljL2xhbmd1YWdlLXJlZmVyZW5jZS9kYXRhLXR5cGVzXG4gICAgICAgICdib29sZWFuIGJ5dGUgY2hhciBkYXRlIGRlY2ltYWwgZG91YmxlIGludGVnZXIgbG9uZyBvYmplY3Qgc2J5dGUgc2hvcnQgc2luZ2xlIHN0cmluZyB1aW50ZWdlciB1bG9uZyB1c2hvcnQnLFxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2Ugbm90aGluZydcbiAgICB9LFxuICAgIGlsbGVnYWw6XG4gICAgICAnLy98XFxcXHt8XFxcXH18ZW5kaWZ8Z29zdWJ8dmFyaWFudHx3ZW5kfF5cXFxcJCAnIC8qIHJlc2VydmVkIGRlcHJlY2F0ZWQga2V5d29yZHMgKi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIENIQVJBQ1RFUixcbiAgICAgIFNUUklORyxcbiAgICAgIERBVEUsXG4gICAgICBOVU1CRVIsXG4gICAgICBMQUJFTCxcbiAgICAgIERPQ19DT01NRU5ULFxuICAgICAgQ09NTUVOVCxcbiAgICAgIERJUkVDVElWRVNcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmJuZXQ7XG4iLCIvKlxuTGFuZ3VhZ2U6IFdlYkFzc2VtYmx5XG5XZWJzaXRlOiBodHRwczovL3dlYmFzc2VtYmx5Lm9yZ1xuRGVzY3JpcHRpb246ICBXYXNtIGlzIGRlc2lnbmVkIGFzIGEgcG9ydGFibGUgY29tcGlsYXRpb24gdGFyZ2V0IGZvciBwcm9ncmFtbWluZyBsYW5ndWFnZXMsIGVuYWJsaW5nIGRlcGxveW1lbnQgb24gdGhlIHdlYiBmb3IgY2xpZW50IGFuZCBzZXJ2ZXIgYXBwbGljYXRpb25zLlxuQ2F0ZWdvcnk6IHdlYiwgY29tbW9uXG5BdWRpdDogMjAyMFxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIHdhc20oaGxqcykge1xuICBobGpzLnJlZ2V4O1xuICBjb25zdCBCTE9DS19DT01NRU5UID0gaGxqcy5DT01NRU5UKC9cXCg7LywgLztcXCkvKTtcbiAgQkxPQ0tfQ09NTUVOVC5jb250YWlucy5wdXNoKFwic2VsZlwiKTtcbiAgY29uc3QgTElORV9DT01NRU5UID0gaGxqcy5DT01NRU5UKC87Oy8sIC8kLyk7XG5cbiAgY29uc3QgS1dTID0gW1xuICAgIFwiYW55ZnVuY1wiLFxuICAgIFwiYmxvY2tcIixcbiAgICBcImJyXCIsXG4gICAgXCJicl9pZlwiLFxuICAgIFwiYnJfdGFibGVcIixcbiAgICBcImNhbGxcIixcbiAgICBcImNhbGxfaW5kaXJlY3RcIixcbiAgICBcImRhdGFcIixcbiAgICBcImRyb3BcIixcbiAgICBcImVsZW1cIixcbiAgICBcImVsc2VcIixcbiAgICBcImVuZFwiLFxuICAgIFwiZXhwb3J0XCIsXG4gICAgXCJmdW5jXCIsXG4gICAgXCJnbG9iYWwuZ2V0XCIsXG4gICAgXCJnbG9iYWwuc2V0XCIsXG4gICAgXCJsb2NhbC5nZXRcIixcbiAgICBcImxvY2FsLnNldFwiLFxuICAgIFwibG9jYWwudGVlXCIsXG4gICAgXCJnZXRfZ2xvYmFsXCIsXG4gICAgXCJnZXRfbG9jYWxcIixcbiAgICBcImdsb2JhbFwiLFxuICAgIFwiaWZcIixcbiAgICBcImltcG9ydFwiLFxuICAgIFwibG9jYWxcIixcbiAgICBcImxvb3BcIixcbiAgICBcIm1lbW9yeVwiLFxuICAgIFwibWVtb3J5Lmdyb3dcIixcbiAgICBcIm1lbW9yeS5zaXplXCIsXG4gICAgXCJtb2R1bGVcIixcbiAgICBcIm11dFwiLFxuICAgIFwibm9wXCIsXG4gICAgXCJvZmZzZXRcIixcbiAgICBcInBhcmFtXCIsXG4gICAgXCJyZXN1bHRcIixcbiAgICBcInJldHVyblwiLFxuICAgIFwic2VsZWN0XCIsXG4gICAgXCJzZXRfZ2xvYmFsXCIsXG4gICAgXCJzZXRfbG9jYWxcIixcbiAgICBcInN0YXJ0XCIsXG4gICAgXCJ0YWJsZVwiLFxuICAgIFwidGVlX2xvY2FsXCIsXG4gICAgXCJ0aGVuXCIsXG4gICAgXCJ0eXBlXCIsXG4gICAgXCJ1bnJlYWNoYWJsZVwiXG4gIF07XG5cbiAgY29uc3QgRlVOQ1RJT05fUkVGRVJFTkNFID0ge1xuICAgIGJlZ2luOiBbXG4gICAgICAvKD86ZnVuY3xjYWxsfGNhbGxfaW5kaXJlY3QpLyxcbiAgICAgIC9cXHMrLyxcbiAgICAgIC9cXCRbXlxccyldKy9cbiAgICBdLFxuICAgIGNsYXNzTmFtZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInRpdGxlLmZ1bmN0aW9uXCJcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgQVJHVU1FTlQgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZhcmlhYmxlXCIsXG4gICAgYmVnaW46IC9cXCRbXFx3X10rL1xuICB9O1xuXG4gIGNvbnN0IFBBUkVOUyA9IHtcbiAgICBtYXRjaDogLyhcXCgoPyE7KXxcXCkpKy8sXG4gICAgY2xhc3NOYW1lOiBcInB1bmN0dWF0aW9uXCIsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogXCJudW1iZXJcIixcbiAgICByZWxldmFuY2U6IDAsXG4gICAgLy8gYm9ycm93ZWQgZnJvbSBQcmlzbSwgVE9ETzogc3BsaXQgb3V0IGludG8gdmFyaWFudHNcbiAgICBtYXRjaDogL1srLV0/XFxiKD86XFxkKD86Xz9cXGQpKig/OlxcLlxcZCg/Ol8/XFxkKSopPyg/OltlRV1bKy1dP1xcZCg/Ol8/XFxkKSopP3wweFtcXGRhLWZBLUZdKD86Xz9bXFxkYS1mQS1GXSkqKD86XFwuW1xcZGEtZkEtRl0oPzpfP1tcXGRhLWZBLURdKSopPyg/OltwUF1bKy1dP1xcZCg/Ol8/XFxkKSopPylcXGJ8XFxiaW5mXFxifFxcYm5hbig/OjoweFtcXGRhLWZBLUZdKD86Xz9bXFxkYS1mQS1EXSkqKT9cXGIvXG4gIH07XG5cbiAgY29uc3QgVFlQRSA9IHtcbiAgICAvLyBsb29rLWFoZWFkIHByZXZlbnRzIHVzIGZyb20gZ29iYmxpbmcgdXAgb3Bjb2Rlc1xuICAgIG1hdGNoOiAvKGkzMnxpNjR8ZjMyfGY2NCkoPyFcXC4pLyxcbiAgICBjbGFzc05hbWU6IFwidHlwZVwiXG4gIH07XG5cbiAgY29uc3QgTUFUSF9PUEVSQVRJT05TID0ge1xuICAgIGNsYXNzTmFtZTogXCJrZXl3b3JkXCIsXG4gICAgLy8gYm9ycm93ZWQgZnJvbSBQcmlzbSwgVE9ETzogc3BsaXQgb3V0IGludG8gdmFyaWFudHNcbiAgICBtYXRjaDogL1xcYihmMzJ8ZjY0fGkzMnxpNjQpKD86XFwuKD86YWJzfGFkZHxhbmR8Y2VpbHxjbHp8Y29uc3R8Y29udmVydF9bc3VdXFwvaSg/OjMyfDY0KXxjb3B5c2lnbnxjdHp8ZGVtb3RlXFwvZjY0fGRpdig/Ol9bc3VdKT98ZXF6P3xleHRlbmRfW3N1XVxcL2kzMnxmbG9vcnxnZSg/Ol9bc3VdKT98Z3QoPzpfW3N1XSk/fGxlKD86X1tzdV0pP3xsb2FkKD86KD86OHwxNnwzMilfW3N1XSk/fGx0KD86X1tzdV0pP3xtYXh8bWlufG11bHxuZWFyZXN0fG5lZz98b3J8cG9wY250fHByb21vdGVcXC9mMzJ8cmVpbnRlcnByZXRcXC9bZmldKD86MzJ8NjQpfHJlbV9bc3VdfHJvdFtscl18c2hsfHNocl9bc3VdfHN0b3JlKD86OHwxNnwzMik/fHNxcnR8c3VifHRydW5jKD86X1tzdV1cXC9mKD86MzJ8NjQpKT98d3JhcFxcL2k2NHx4b3IpKVxcYi9cbiAgfTtcblxuICBjb25zdCBPRkZTRVRfQUxJR04gPSB7XG4gICAgbWF0Y2g6IFtcbiAgICAgIC8oPzpvZmZzZXR8YWxpZ24pLyxcbiAgICAgIC9cXHMqLyxcbiAgICAgIC89L1xuICAgIF0sXG4gICAgY2xhc3NOYW1lOiB7XG4gICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgIDM6IFwib3BlcmF0b3JcIlxuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdXZWJBc3NlbWJseScsXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAvW1xcdy5dKy8sXG4gICAgICBrZXl3b3JkOiBLV1NcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBMSU5FX0NPTU1FTlQsXG4gICAgICBCTE9DS19DT01NRU5ULFxuICAgICAgT0ZGU0VUX0FMSUdOLFxuICAgICAgQVJHVU1FTlQsXG4gICAgICBQQVJFTlMsXG4gICAgICBGVU5DVElPTl9SRUZFUkVOQ0UsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgVFlQRSxcbiAgICAgIE1BVEhfT1BFUkFUSU9OUyxcbiAgICAgIE5VTUJFUlxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3YXNtO1xuIiwiLypcbkxhbmd1YWdlOiBIVE1MLCBYTUxcbldlYnNpdGU6IGh0dHBzOi8vd3d3LnczLm9yZy9YTUwvXG5DYXRlZ29yeTogY29tbW9uLCB3ZWJcbkF1ZGl0OiAyMDIwXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24geG1sKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICAvLyBYTUwgbmFtZXMgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGxldHRlcnM6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi94bWwvI05ULU5hbWVDaGFyXG4gIC8vIE9USEVSX05BTUVfQ0hBUlMgPSAvWzpcXC0uMC05XFx1MDBCN1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MF0vO1xuICAvLyBFbGVtZW50IG5hbWVzIHN0YXJ0IHdpdGggTkFNRV9TVEFSVF9DSEFSIGZvbGxvd2VkIGJ5IG9wdGlvbmFsIG90aGVyIFVuaWNvZGUgbGV0dGVycywgQVNDSUkgZGlnaXRzLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgYW5kIHBlcmlvZHNcbiAgLy8gY29uc3QgVEFHX05BTUVfUkUgPSByZWdleC5jb25jYXQoL1tBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXS8sIHJlZ2V4Lm9wdGlvbmFsKC9bQS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXSo6LyksIC9bQS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXSovKTs7XG4gIC8vIGNvbnN0IFhNTF9JREVOVF9SRSA9IC9bQS1aX2EtejpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRcXC0uMC05XFx1MDBCN1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MF0rLztcbiAgLy8gY29uc3QgVEFHX05BTUVfUkUgPSByZWdleC5jb25jYXQoL1tBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXS8sIHJlZ2V4Lm9wdGlvbmFsKC9bQS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXSo6LyksIC9bQS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXSovKTtcbiAgLy8gaG93ZXZlciwgdG8gY2F0ZXIgZm9yIHBlcmZvcm1hbmNlIGFuZCBtb3JlIFVuaWNvZGUgc3VwcG9ydCByZWx5IHNpbXBseSBvbiB0aGUgVW5pY29kZSBsZXR0ZXIgY2xhc3NcbiAgY29uc3QgVEFHX05BTUVfUkUgPSByZWdleC5jb25jYXQoL1tcXHB7TH1fXS91LCByZWdleC5vcHRpb25hbCgvW1xccHtMfTAtOV8uLV0qOi91KSwgL1tcXHB7TH0wLTlfLi1dKi91KTtcbiAgY29uc3QgWE1MX0lERU5UX1JFID0gL1tcXHB7TH0wLTkuXzotXSsvdTtcbiAgY29uc3QgWE1MX0VOVElUSUVTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46IC8mW2Etel0rO3wmI1swLTldKzt8JiN4W2EtZjAtOV0rOy9cbiAgfTtcbiAgY29uc3QgWE1MX01FVEFfS0VZV09SRFMgPSB7XG4gICAgYmVnaW46IC9cXHMvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogLyM/W2Etel9dW2EtejEtOV8tXSsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuL1xuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgWE1MX01FVEFfUEFSX0tFWVdPUkRTID0gaGxqcy5pbmhlcml0KFhNTF9NRVRBX0tFWVdPUkRTLCB7XG4gICAgYmVnaW46IC9cXCgvLFxuICAgIGVuZDogL1xcKS9cbiAgfSk7XG4gIGNvbnN0IEFQT1NfTUVUQV9TVFJJTkdfTU9ERSA9IGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHsgY2xhc3NOYW1lOiAnc3RyaW5nJyB9KTtcbiAgY29uc3QgUVVPVEVfTUVUQV9TVFJJTkdfTU9ERSA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7IGNsYXNzTmFtZTogJ3N0cmluZycgfSk7XG4gIGNvbnN0IFRBR19JTlRFUk5BTFMgPSB7XG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgaWxsZWdhbDogLzwvLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgYmVnaW46IFhNTF9JREVOVF9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLz1cXHMqLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICAgICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgICAgICAgICBjb250YWluczogWyBYTUxfRU5USVRJRVMgXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgICAgICAgICBlbmQ6IC8nLyxcbiAgICAgICAgICAgICAgICBjb250YWluczogWyBYTUxfRU5USVRJRVMgXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvW15cXHNcIic9PD5gXSsvIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0hUTUwsIFhNTCcsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ2h0bWwnLFxuICAgICAgJ3hodG1sJyxcbiAgICAgICdyc3MnLFxuICAgICAgJ2F0b20nLFxuICAgICAgJ3hqYicsXG4gICAgICAneHNkJyxcbiAgICAgICd4c2wnLFxuICAgICAgJ3BsaXN0JyxcbiAgICAgICd3c2YnLFxuICAgICAgJ3N2ZydcbiAgICBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgdW5pY29kZVJlZ2V4OiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogLzwhW2Etel0vLFxuICAgICAgICBlbmQ6IC8+LyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBYTUxfTUVUQV9LRVlXT1JEUyxcbiAgICAgICAgICBRVU9URV9NRVRBX1NUUklOR19NT0RFLFxuICAgICAgICAgIEFQT1NfTUVUQV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBYTUxfTUVUQV9QQVJfS0VZV09SRFMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXFsvLFxuICAgICAgICAgICAgZW5kOiAvXFxdLyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogLzwhW2Etel0vLFxuICAgICAgICAgICAgICAgIGVuZDogLz4vLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICBYTUxfTUVUQV9LRVlXT1JEUyxcbiAgICAgICAgICAgICAgICAgIFhNTF9NRVRBX1BBUl9LRVlXT1JEUyxcbiAgICAgICAgICAgICAgICAgIFFVT1RFX01FVEFfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgICAgICBBUE9TX01FVEFfU1RSSU5HX01PREVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgIC88IS0tLyxcbiAgICAgICAgLy0tPi8sXG4gICAgICAgIHsgcmVsZXZhbmNlOiAxMCB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBiZWdpbjogLzwhXFxbQ0RBVEFcXFsvLFxuICAgICAgICBlbmQ6IC9cXF1cXF0+LyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIFhNTF9FTlRJVElFUyxcbiAgICAgIC8vIHhtbCBwcm9jZXNzaW5nIGluc3RydWN0aW9uc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgZW5kOiAvXFw/Pi8sXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC88XFw/eG1sLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMTAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBRVU9URV9NRVRBX1NUUklOR19NT0RFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogLzxcXD9bYS16XVthLXowLTldKy8sXG4gICAgICAgICAgfVxuICAgICAgICBdXG5cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RhZycsXG4gICAgICAgIC8qXG4gICAgICAgIFRoZSBsb29rYWhlYWQgcGF0dGVybiAoPz0uLi4pIGVuc3VyZXMgdGhhdCAnYmVnaW4nIG9ubHkgbWF0Y2hlc1xuICAgICAgICAnPHN0eWxlJyBhcyBhIHNpbmdsZSB3b3JkLCBmb2xsb3dlZCBieSBhIHdoaXRlc3BhY2Ugb3IgYW5cbiAgICAgICAgZW5kaW5nIGJyYWNrZXQuXG4gICAgICAgICovXG4gICAgICAgIGJlZ2luOiAvPHN0eWxlKD89XFxzfD4pLyxcbiAgICAgICAgZW5kOiAvPi8sXG4gICAgICAgIGtleXdvcmRzOiB7IG5hbWU6ICdzdHlsZScgfSxcbiAgICAgICAgY29udGFpbnM6IFsgVEFHX0lOVEVSTkFMUyBdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6IC88XFwvc3R5bGU+LyxcbiAgICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6IFtcbiAgICAgICAgICAgICdjc3MnLFxuICAgICAgICAgICAgJ3htbCdcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RhZycsXG4gICAgICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiB0aGUgPHN0eWxlIHRhZyBhYm91dCB0aGUgbG9va2FoZWFkIHBhdHRlcm5cbiAgICAgICAgYmVnaW46IC88c2NyaXB0KD89XFxzfD4pLyxcbiAgICAgICAgZW5kOiAvPi8sXG4gICAgICAgIGtleXdvcmRzOiB7IG5hbWU6ICdzY3JpcHQnIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbIFRBR19JTlRFUk5BTFMgXSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAvPFxcL3NjcmlwdD4vLFxuICAgICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogW1xuICAgICAgICAgICAgJ2phdmFzY3JpcHQnLFxuICAgICAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAgICAgJ3htbCdcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyB3ZSBuZWVkIHRoaXMgZm9yIG5vdyBmb3IgalNYXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RhZycsXG4gICAgICAgIGJlZ2luOiAvPD58PFxcLz4vXG4gICAgICB9LFxuICAgICAgLy8gb3BlbiB0YWdcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgYmVnaW46IHJlZ2V4LmNvbmNhdChcbiAgICAgICAgICAvPC8sXG4gICAgICAgICAgcmVnZXgubG9va2FoZWFkKHJlZ2V4LmNvbmNhdChcbiAgICAgICAgICAgIFRBR19OQU1FX1JFLFxuICAgICAgICAgICAgLy8gPHRhZy8+XG4gICAgICAgICAgICAvLyA8dGFnPlxuICAgICAgICAgICAgLy8gPHRhZyAuLi5cbiAgICAgICAgICAgIHJlZ2V4LmVpdGhlcigvXFwvPi8sIC8+LywgL1xccy8pXG4gICAgICAgICAgKSlcbiAgICAgICAgKSxcbiAgICAgICAgZW5kOiAvXFwvPz4vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgYmVnaW46IFRBR19OQU1FX1JFLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgc3RhcnRzOiBUQUdfSU5URVJOQUxTXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gY2xvc2UgdGFnXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RhZycsXG4gICAgICAgIGJlZ2luOiByZWdleC5jb25jYXQoXG4gICAgICAgICAgLzxcXC8vLFxuICAgICAgICAgIHJlZ2V4Lmxvb2thaGVhZChyZWdleC5jb25jYXQoXG4gICAgICAgICAgICBUQUdfTkFNRV9SRSwgLz4vXG4gICAgICAgICAgKSlcbiAgICAgICAgKSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiBUQUdfTkFNRV9SRSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC8+LyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0geG1sO1xuIiwiLypcbkxhbmd1YWdlOiBZQU1MXG5EZXNjcmlwdGlvbjogWWV0IEFub3RoZXIgTWFya2Rvd24gTGFuZ3VhZ2VcbkF1dGhvcjogU3RlZmFuIFdpZW5lcnQgPHN0d2llbmVydEBnbWFpbC5jb20+XG5Db250cmlidXRvcnM6IENhcmwgQmF4dGVyIDxjYXJsQGNiYXgudGVjaD5cblJlcXVpcmVzOiBydWJ5LmpzXG5XZWJzaXRlOiBodHRwczovL3lhbWwub3JnXG5DYXRlZ29yeTogY29tbW9uLCBjb25maWdcbiovXG5mdW5jdGlvbiB5YW1sKGhsanMpIHtcbiAgY29uc3QgTElURVJBTFMgPSAndHJ1ZSBmYWxzZSB5ZXMgbm8gbnVsbCc7XG5cbiAgLy8gWUFNTCBzcGVjIGFsbG93cyBub24tcmVzZXJ2ZWQgVVJJIGNoYXJhY3RlcnMgaW4gdGFncy5cbiAgY29uc3QgVVJJX0NIQVJBQ1RFUlMgPSAnW1xcXFx3IzsvPzpAJj0rJCwufipcXCcoKVtcXFxcXV0rJztcblxuICAvLyBEZWZpbmUga2V5cyBhcyBzdGFydGluZyB3aXRoIGEgd29yZCBjaGFyYWN0ZXJcbiAgLy8gLi4uY29udGFpbmluZyB3b3JkIGNoYXJzLCBzcGFjZXMsIGNvbG9ucywgZm9yd2FyZC1zbGFzaGVzLCBoeXBoZW5zIGFuZCBwZXJpb2RzXG4gIC8vIC4uLmFuZCBlbmRpbmcgd2l0aCBhIGNvbG9uIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IGEgc3BhY2UsIHRhYiBvciBuZXdsaW5lLlxuICAvLyBUaGUgWUFNTCBzcGVjIGFsbG93cyBmb3IgbXVjaCBtb3JlIHRoYW4gdGhpcywgYnV0IHRoaXMgY292ZXJzIG1vc3QgdXNlLWNhc2VzLlxuICBjb25zdCBLRVkgPSB7XG4gICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46ICdcXFxcd1tcXFxcdyA6XFxcXC8uLV0qOig/PVsgXFx0XXwkKScgfSxcbiAgICAgIHsgLy8gZG91YmxlIHF1b3RlZCBrZXlzXG4gICAgICAgIGJlZ2luOiAnXCJcXFxcd1tcXFxcdyA6XFxcXC8uLV0qXCI6KD89WyBcXHRdfCQpJyB9LFxuICAgICAgeyAvLyBzaW5nbGUgcXVvdGVkIGtleXNcbiAgICAgICAgYmVnaW46ICdcXCdcXFxcd1tcXFxcdyA6XFxcXC8uLV0qXFwnOig/PVsgXFx0XXwkKScgfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBURU1QTEFURV9WQVJJQUJMRVMgPSB7XG4gICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IC8vIGppbmphIHRlbXBsYXRlcyBBbnNpYmxlXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7LyxcbiAgICAgICAgZW5kOiAvXFx9XFx9L1xuICAgICAgfSxcbiAgICAgIHsgLy8gUnVieSBpMThuXG4gICAgICAgIGJlZ2luOiAvJVxcey8sXG4gICAgICAgIGVuZDogL1xcfS9cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICBlbmQ6IC8nL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cIi8sXG4gICAgICAgIGVuZDogL1wiL1xuICAgICAgfSxcbiAgICAgIHsgYmVnaW46IC9cXFMrLyB9XG4gICAgXSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgVEVNUExBVEVfVkFSSUFCTEVTXG4gICAgXVxuICB9O1xuXG4gIC8vIFN0cmluZ3MgaW5zaWRlIG9mIHZhbHVlIGNvbnRhaW5lcnMgKG9iamVjdHMpIGNhbid0IGNvbnRhaW4gYnJhY2VzLFxuICAvLyBicmFja2V0cywgb3IgY29tbWFzXG4gIGNvbnN0IENPTlRBSU5FUl9TVFJJTkcgPSBobGpzLmluaGVyaXQoU1RSSU5HLCB7IHZhcmlhbnRzOiBbXG4gICAge1xuICAgICAgYmVnaW46IC8nLyxcbiAgICAgIGVuZDogLycvXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogL1wiLyxcbiAgICAgIGVuZDogL1wiL1xuICAgIH0sXG4gICAgeyBiZWdpbjogL1teXFxzLHt9W1xcXV0rLyB9XG4gIF0gfSk7XG5cbiAgY29uc3QgREFURV9SRSA9ICdbMC05XXs0fSgtWzAtOV1bMC05XSl7MCwyfSc7XG4gIGNvbnN0IFRJTUVfUkUgPSAnKFtUdCBcXFxcdF1bMC05XVswLTldPyg6WzAtOV1bMC05XSl7Mn0pPyc7XG4gIGNvbnN0IEZSQUNUSU9OX1JFID0gJyhcXFxcLlswLTldKik/JztcbiAgY29uc3QgWk9ORV9SRSA9ICcoWyBcXFxcdF0pKihafFstK11bMC05XVswLTldPyg6WzAtOV1bMC05XSk/KT8nO1xuICBjb25zdCBUSU1FU1RBTVAgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogJ1xcXFxiJyArIERBVEVfUkUgKyBUSU1FX1JFICsgRlJBQ1RJT05fUkUgKyBaT05FX1JFICsgJ1xcXFxiJ1xuICB9O1xuXG4gIGNvbnN0IFZBTFVFX0NPTlRBSU5FUiA9IHtcbiAgICBlbmQ6ICcsJyxcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGtleXdvcmRzOiBMSVRFUkFMUyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgT0JKRUNUID0ge1xuICAgIGJlZ2luOiAvXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIGNvbnRhaW5zOiBbIFZBTFVFX0NPTlRBSU5FUiBdLFxuICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IEFSUkFZID0ge1xuICAgIGJlZ2luOiAnXFxcXFsnLFxuICAgIGVuZDogJ1xcXFxdJyxcbiAgICBjb250YWluczogWyBWQUxVRV9DT05UQUlORVIgXSxcbiAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IE1PREVTID0gW1xuICAgIEtFWSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgIGJlZ2luOiAnXi0tLVxcXFxzKiQnLFxuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH0sXG4gICAgeyAvLyBtdWx0aSBsaW5lIHN0cmluZ1xuICAgICAgLy8gQmxvY2tzIHN0YXJ0IHdpdGggYSB8IG9yID4gZm9sbG93ZWQgYnkgYSBuZXdsaW5lXG4gICAgICAvL1xuICAgICAgLy8gSW5kZW50YXRpb24gb2Ygc3Vic2VxdWVudCBsaW5lcyBtdXN0IGJlIHRoZSBzYW1lIHRvXG4gICAgICAvLyBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGJsb2NrXG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgYmVnaW46ICdbXFxcXHw+XShbMS05XT9bKy1dKT9bIF0qXFxcXG4oICspW14gXVteXFxcXG5dKlxcXFxuKFxcXFwyW15cXFxcbl0rXFxcXG4/KSonXG4gICAgfSxcbiAgICB7IC8vIFJ1YnkvUmFpbHMgZXJiXG4gICAgICBiZWdpbjogJzwlWyU9LV0/JyxcbiAgICAgIGVuZDogJ1slLV0/JT4nLFxuICAgICAgc3ViTGFuZ3VhZ2U6ICdydWJ5JyxcbiAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHsgLy8gbmFtZWQgdGFnc1xuICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICBiZWdpbjogJyFcXFxcdyshJyArIFVSSV9DSEFSQUNURVJTXG4gICAgfSxcbiAgICAvLyBodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI3ODQwNjRcbiAgICB7IC8vIHZlcmJhdGltIHRhZ3NcbiAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgYmVnaW46ICchPCcgKyBVUklfQ0hBUkFDVEVSUyArIFwiPlwiXG4gICAgfSxcbiAgICB7IC8vIHByaW1hcnkgdGFnc1xuICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICBiZWdpbjogJyEnICsgVVJJX0NIQVJBQ1RFUlNcbiAgICB9LFxuICAgIHsgLy8gc2Vjb25kYXJ5IHRhZ3NcbiAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgYmVnaW46ICchIScgKyBVUklfQ0hBUkFDVEVSU1xuICAgIH0sXG4gICAgeyAvLyBmcmFnbWVudCBpZCAmcmVmXG4gICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgIGJlZ2luOiAnJicgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnJCdcbiAgICB9LFxuICAgIHsgLy8gZnJhZ21lbnQgcmVmZXJlbmNlICpyZWZcbiAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgYmVnaW46ICdcXFxcKicgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnJCdcbiAgICB9LFxuICAgIHsgLy8gYXJyYXkgbGlzdGluZ1xuICAgICAgY2xhc3NOYW1lOiAnYnVsbGV0JyxcbiAgICAgIC8vIFRPRE86IHJlbW92ZSB8JCBoYWNrIHdoZW4gd2UgaGF2ZSBwcm9wZXIgbG9vay1haGVhZCBzdXBwb3J0XG4gICAgICBiZWdpbjogJy0oPz1bIF18JCknLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgIHtcbiAgICAgIGJlZ2luS2V5d29yZHM6IExJVEVSQUxTLFxuICAgICAga2V5d29yZHM6IHsgbGl0ZXJhbDogTElURVJBTFMgfVxuICAgIH0sXG4gICAgVElNRVNUQU1QLFxuICAgIC8vIG51bWJlcnMgYXJlIGFueSB2YWxpZCBDLXN0eWxlIG51bWJlciB0aGF0XG4gICAgLy8gc2l0IGlzb2xhdGVkIGZyb20gb3RoZXIgd29yZHNcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgYmVnaW46IGhsanMuQ19OVU1CRVJfUkUgKyAnXFxcXGInLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICBPQkpFQ1QsXG4gICAgQVJSQVksXG4gICAgU1RSSU5HXG4gIF07XG5cbiAgY29uc3QgVkFMVUVfTU9ERVMgPSBbIC4uLk1PREVTIF07XG4gIFZBTFVFX01PREVTLnBvcCgpO1xuICBWQUxVRV9NT0RFUy5wdXNoKENPTlRBSU5FUl9TVFJJTkcpO1xuICBWQUxVRV9DT05UQUlORVIuY29udGFpbnMgPSBWQUxVRV9NT0RFUztcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdZQU1MJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGFsaWFzZXM6IFsgJ3ltbCcgXSxcbiAgICBjb250YWluczogTU9ERVNcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB5YW1sO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBEZWZhdWx0IHRvIGEgZHVtbXkgXCJiYXRjaFwiIGltcGxlbWVudGF0aW9uIHRoYXQganVzdCBydW5zIHRoZSBjYWxsYmFja1xuZnVuY3Rpb24gZGVmYXVsdE5vb3BCYXRjaChjYWxsYmFjaykge1xuICBjYWxsYmFjaygpO1xufVxuXG5sZXQgYmF0Y2ggPSBkZWZhdWx0Tm9vcEJhdGNoOyAvLyBBbGxvdyBpbmplY3RpbmcgYW5vdGhlciBiYXRjaGluZyBmdW5jdGlvbiBsYXRlclxuXG5leHBvcnQgY29uc3Qgc2V0QmF0Y2ggPSBuZXdCYXRjaCA9PiBiYXRjaCA9IG5ld0JhdGNoOyAvLyBTdXBwbHkgYSBnZXR0ZXIganVzdCB0byBza2lwIGRlYWxpbmcgd2l0aCBFU00gYmluZGluZ3NcblxuZXhwb3J0IGNvbnN0IGdldEJhdGNoID0gKCkgPT4gYmF0Y2g7IiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBSZWFjdFJlZHV4Q29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBSZWFjdFJlZHV4Q29udGV4dC5kaXNwbGF5TmFtZSA9ICdSZWFjdFJlZHV4Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVhY3RSZWR1eENvbnRleHQ7IiwiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcblxuLyoqXHJcbiAqIEEgaG9vayB0byBhY2Nlc3MgdGhlIHZhbHVlIG9mIHRoZSBgUmVhY3RSZWR1eENvbnRleHRgLiBUaGlzIGlzIGEgbG93LWxldmVsXHJcbiAqIGhvb2sgdGhhdCB5b3Ugc2hvdWxkIHVzdWFsbHkgbm90IG5lZWQgdG8gY2FsbCBkaXJlY3RseS5cclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHZhbHVlIG9mIHRoZSBgUmVhY3RSZWR1eENvbnRleHRgXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlUmVkdXhDb250ZXh0IH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKCkgPT4ge1xyXG4gKiAgIGNvbnN0IHsgc3RvcmUgfSA9IHVzZVJlZHV4Q29udGV4dCgpXHJcbiAqICAgcmV0dXJuIDxkaXY+e3N0b3JlLmdldFN0YXRlKCl9PC9kaXY+XHJcbiAqIH1cclxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVkdXhDb250ZXh0KCkge1xuICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VDb250ZXh0KFJlYWN0UmVkdXhDb250ZXh0KTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29udGV4dFZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCByZWFjdC1yZWR1eCBjb250ZXh0IHZhbHVlOyBwbGVhc2UgZW5zdXJlIHRoZSBjb21wb25lbnQgaXMgd3JhcHBlZCBpbiBhIDxQcm92aWRlcj4nKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0VmFsdWU7XG59IiwiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRGVidWdWYWx1ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVJlZHV4Q29udGV4dCBhcyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi91c2VSZWR1eENvbnRleHQnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgbm90SW5pdGlhbGl6ZWQgfSBmcm9tICcuLi91dGlscy91c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG5sZXQgdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IgPSBub3RJbml0aWFsaXplZDtcbmV4cG9ydCBjb25zdCBpbml0aWFsaXplVXNlU2VsZWN0b3IgPSBmbiA9PiB7XG4gIHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yID0gZm47XG59O1xuXG5jb25zdCByZWZFcXVhbGl0eSA9IChhLCBiKSA9PiBhID09PSBiO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VTZWxlY3RvcmAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVNlbGVjdG9yYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9ySG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgY29uc3QgdXNlUmVkdXhDb250ZXh0ID0gY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IDogKCkgPT4gdXNlQ29udGV4dChjb250ZXh0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVNlbGVjdG9yKHNlbGVjdG9yLCBlcXVhbGl0eUZuID0gcmVmRXF1YWxpdHkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBtdXN0IHBhc3MgYSBzZWxlY3RvciB0byB1c2VTZWxlY3RvcmApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHNlbGVjdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIGZ1bmN0aW9uIGFzIGEgc2VsZWN0b3IgdG8gdXNlU2VsZWN0b3JgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBlcXVhbGl0eUZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIGZ1bmN0aW9uIGFzIGFuIGVxdWFsaXR5IGZ1bmN0aW9uIHRvIHVzZVNlbGVjdG9yYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgc3RvcmUsXG4gICAgICBzdWJzY3JpcHRpb24sXG4gICAgICBnZXRTZXJ2ZXJTdGF0ZVxuICAgIH0gPSB1c2VSZWR1eENvbnRleHQoKTtcbiAgICBjb25zdCBzZWxlY3RlZFN0YXRlID0gdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3Ioc3Vic2NyaXB0aW9uLmFkZE5lc3RlZFN1Yiwgc3RvcmUuZ2V0U3RhdGUsIGdldFNlcnZlclN0YXRlIHx8IHN0b3JlLmdldFN0YXRlLCBzZWxlY3RvciwgZXF1YWxpdHlGbik7XG4gICAgdXNlRGVidWdWYWx1ZShzZWxlY3RlZFN0YXRlKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRTdGF0ZTtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBzdG9yZSdzIHN0YXRlLiBUaGlzIGhvb2sgdGFrZXMgYSBzZWxlY3RvciBmdW5jdGlvblxyXG4gKiBhcyBhbiBhcmd1bWVudC4gVGhlIHNlbGVjdG9yIGlzIGNhbGxlZCB3aXRoIHRoZSBzdG9yZSBzdGF0ZS5cclxuICpcclxuICogVGhpcyBob29rIHRha2VzIGFuIG9wdGlvbmFsIGVxdWFsaXR5IGNvbXBhcmlzb24gZnVuY3Rpb24gYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXJcclxuICogdGhhdCBhbGxvd3MgeW91IHRvIGN1c3RvbWl6ZSB0aGUgd2F5IHRoZSBzZWxlY3RlZCBzdGF0ZSBpcyBjb21wYXJlZCB0byBkZXRlcm1pbmVcclxuICogd2hldGhlciB0aGUgY29tcG9uZW50IG5lZWRzIHRvIGJlIHJlLXJlbmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZWxlY3RvciB0aGUgc2VsZWN0b3IgZnVuY3Rpb25cclxuICogQHBhcmFtIHtGdW5jdGlvbj19IGVxdWFsaXR5Rm4gdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBlcXVhbGl0eVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fSB0aGUgc2VsZWN0ZWQgc3RhdGVcclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xyXG4gKiBpbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4J1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgQ291bnRlckNvbXBvbmVudCA9ICgpID0+IHtcclxuICogICBjb25zdCBjb3VudGVyID0gdXNlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUuY291bnRlcilcclxuICogICByZXR1cm4gPGRpdj57Y291bnRlcn08L2Rpdj5cclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZVNlbGVjdG9yID0gLyojX19QVVJFX18qL2NyZWF0ZVNlbGVjdG9ySG9vaygpOyIsImV4cG9ydCBjb25zdCBub3RJbml0aWFsaXplZCA9ICgpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKCd1U0VTIG5vdCBpbml0aWFsaXplZCEnKTtcbn07IiwiaW1wb3J0IHsgZ2V0QmF0Y2ggfSBmcm9tICcuL2JhdGNoJzsgLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xuLy8gd2VsbCBhcyBuZXN0aW5nIHN1YnNjcmlwdGlvbnMgb2YgZGVzY2VuZGFudCBjb21wb25lbnRzLCBzbyB0aGF0IHdlIGNhbiBlbnN1cmUgdGhlXG4vLyBhbmNlc3RvciBjb21wb25lbnRzIHJlLXJlbmRlciBiZWZvcmUgZGVzY2VuZGFudHNcblxuZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCkge1xuICBjb25zdCBiYXRjaCA9IGdldEJhdGNoKCk7XG4gIGxldCBmaXJzdCA9IG51bGw7XG4gIGxldCBsYXN0ID0gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBjbGVhcigpIHtcbiAgICAgIGZpcnN0ID0gbnVsbDtcbiAgICAgIGxhc3QgPSBudWxsO1xuICAgIH0sXG5cbiAgICBub3RpZnkoKSB7XG4gICAgICBiYXRjaCgoKSA9PiB7XG4gICAgICAgIGxldCBsaXN0ZW5lciA9IGZpcnN0O1xuXG4gICAgICAgIHdoaWxlIChsaXN0ZW5lcikge1xuICAgICAgICAgIGxpc3RlbmVyLmNhbGxiYWNrKCk7XG4gICAgICAgICAgbGlzdGVuZXIgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgZ2V0KCkge1xuICAgICAgbGV0IGxpc3RlbmVycyA9IFtdO1xuICAgICAgbGV0IGxpc3RlbmVyID0gZmlyc3Q7XG5cbiAgICAgIHdoaWxlIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3RlbmVycztcbiAgICB9LFxuXG4gICAgc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICBsZXQgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICAgIGxldCBsaXN0ZW5lciA9IGxhc3QgPSB7XG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICBwcmV2OiBsYXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAobGlzdGVuZXIucHJldikge1xuICAgICAgICBsaXN0ZW5lci5wcmV2Lm5leHQgPSBsaXN0ZW5lcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpcnN0ID0gbGlzdGVuZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgZmlyc3QgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyLm5leHQpIHtcbiAgICAgICAgICBsaXN0ZW5lci5uZXh0LnByZXYgPSBsaXN0ZW5lci5wcmV2O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3QgPSBsaXN0ZW5lci5wcmV2O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyLnByZXYpIHtcbiAgICAgICAgICBsaXN0ZW5lci5wcmV2Lm5leHQgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpcnN0ID0gbGlzdGVuZXIubmV4dDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgfTtcbn1cblxuY29uc3QgbnVsbExpc3RlbmVycyA9IHtcbiAgbm90aWZ5KCkge30sXG5cbiAgZ2V0OiAoKSA9PiBbXVxufTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yikge1xuICBsZXQgdW5zdWJzY3JpYmU7XG4gIGxldCBsaXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xuXG4gIGZ1bmN0aW9uIGFkZE5lc3RlZFN1YihsaXN0ZW5lcikge1xuICAgIHRyeVN1YnNjcmliZSgpO1xuICAgIHJldHVybiBsaXN0ZW5lcnMuc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XG4gICAgbGlzdGVuZXJzLm5vdGlmeSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlV3JhcHBlcigpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xuICAgIHJldHVybiBCb29sZWFuKHVuc3Vic2NyaWJlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXVuc3Vic2NyaWJlKSB7XG4gICAgICB1bnN1YnNjcmliZSA9IHBhcmVudFN1YiA/IHBhcmVudFN1Yi5hZGROZXN0ZWRTdWIoaGFuZGxlQ2hhbmdlV3JhcHBlcikgOiBzdG9yZS5zdWJzY3JpYmUoaGFuZGxlQ2hhbmdlV3JhcHBlcik7XG4gICAgICBsaXN0ZW5lcnMgPSBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cnlVbnN1YnNjcmliZSgpIHtcbiAgICBpZiAodW5zdWJzY3JpYmUpIHtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICB1bnN1YnNjcmliZSA9IHVuZGVmaW5lZDtcbiAgICAgIGxpc3RlbmVycy5jbGVhcigpO1xuICAgICAgbGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdWJzY3JpcHRpb24gPSB7XG4gICAgYWRkTmVzdGVkU3ViLFxuICAgIG5vdGlmeU5lc3RlZFN1YnMsXG4gICAgaGFuZGxlQ2hhbmdlV3JhcHBlcixcbiAgICBpc1N1YnNjcmliZWQsXG4gICAgdHJ5U3Vic2NyaWJlLFxuICAgIHRyeVVuc3Vic2NyaWJlLFxuICAgIGdldExpc3RlbmVyczogKCkgPT4gbGlzdGVuZXJzXG4gIH07XG4gIHJldHVybiBzdWJzY3JpcHRpb247XG59IiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7IC8vIFJlYWN0IGN1cnJlbnRseSB0aHJvd3MgYSB3YXJuaW5nIHdoZW4gdXNpbmcgdXNlTGF5b3V0RWZmZWN0IG9uIHRoZSBzZXJ2ZXIuXG4vLyBUbyBnZXQgYXJvdW5kIGl0LCB3ZSBjYW4gY29uZGl0aW9uYWxseSB1c2VFZmZlY3Qgb24gdGhlIHNlcnZlciAobm8tb3ApIGFuZFxuLy8gdXNlTGF5b3V0RWZmZWN0IGluIHRoZSBicm93c2VyLiBXZSBuZWVkIHVzZUxheW91dEVmZmVjdCB0byBlbnN1cmUgdGhlIHN0b3JlXG4vLyBzdWJzY3JpcHRpb24gY2FsbGJhY2sgYWx3YXlzIGhhcyB0aGUgc2VsZWN0b3IgZnJvbSB0aGUgbGF0ZXN0IHJlbmRlciBjb21taXRcbi8vIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGEgc3RvcmUgdXBkYXRlIG1heSBoYXBwZW4gYmV0d2VlbiByZW5kZXIgYW5kIHRoZSBlZmZlY3QsXG4vLyB3aGljaCBtYXkgY2F1c2UgbWlzc2VkIHVwZGF0ZXM7IHdlIGFsc28gbXVzdCBlbnN1cmUgdGhlIHN0b3JlIHN1YnNjcmlwdGlvblxuLy8gaXMgY3JlYXRlZCBzeW5jaHJvbm91c2x5LCBvdGhlcndpc2UgYSBzdG9yZSB1cGRhdGUgbWF5IG9jY3VyIGJlZm9yZSB0aGVcbi8vIHN1YnNjcmlwdGlvbiBpcyBjcmVhdGVkIGFuZCBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgbWF5IGJlIG9ic2VydmVkXG4vLyBNYXRjaGVzIGxvZ2ljIGluIFJlYWN0J3MgYHNoYXJlZC9FeGVjdXRpb25FbnZpcm9ubWVudGAgZmlsZVxuXG5leHBvcnQgY29uc3QgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSAndW5kZWZpbmVkJyk7XG5leHBvcnQgY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IGNhblVzZURPTSA/IHVzZUxheW91dEVmZmVjdCA6IHVzZUVmZmVjdDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wicmVhY3RSZWR1eEZvcndhcmRlZFJlZlwiXTtcblxuLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IGhvaXN0U3RhdGljcyBmcm9tICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNWYWxpZEVsZW1lbnRUeXBlLCBpc0NvbnRleHRDb25zdW1lciB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBkZWZhdWx0U2VsZWN0b3JGYWN0b3J5IGZyb20gJy4uL2Nvbm5lY3Qvc2VsZWN0b3JGYWN0b3J5JztcbmltcG9ydCB7IG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcnkgfSBmcm9tICcuLi9jb25uZWN0L21hcERpc3BhdGNoVG9Qcm9wcyc7XG5pbXBvcnQgeyBtYXBTdGF0ZVRvUHJvcHNGYWN0b3J5IH0gZnJvbSAnLi4vY29ubmVjdC9tYXBTdGF0ZVRvUHJvcHMnO1xuaW1wb3J0IHsgbWVyZ2VQcm9wc0ZhY3RvcnkgfSBmcm9tICcuLi9jb25uZWN0L21lcmdlUHJvcHMnO1xuaW1wb3J0IHsgY3JlYXRlU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vdXRpbHMvU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgfSBmcm9tICcuLi91dGlscy91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0JztcbmltcG9ydCBzaGFsbG93RXF1YWwgZnJvbSAnLi4vdXRpbHMvc2hhbGxvd0VxdWFsJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJy4uL3V0aWxzL3dhcm5pbmcnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuL0NvbnRleHQnO1xuaW1wb3J0IHsgbm90SW5pdGlhbGl6ZWQgfSBmcm9tICcuLi91dGlscy91c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG5sZXQgdXNlU3luY0V4dGVybmFsU3RvcmUgPSBub3RJbml0aWFsaXplZDtcbmV4cG9ydCBjb25zdCBpbml0aWFsaXplQ29ubmVjdCA9IGZuID0+IHtcbiAgdXNlU3luY0V4dGVybmFsU3RvcmUgPSBmbjtcbn07IC8vIERlZmluZSBzb21lIGNvbnN0YW50IGFycmF5cyBqdXN0IHRvIGF2b2lkIHJlLWNyZWF0aW5nIHRoZXNlXG5cbmNvbnN0IEVNUFRZX0FSUkFZID0gW251bGwsIDBdO1xuY29uc3QgTk9fU1VCU0NSSVBUSU9OX0FSUkFZID0gW251bGwsIG51bGxdOyAvLyBBdHRlbXB0cyB0byBzdHJpbmdpZnkgd2hhdGV2ZXIgbm90LXJlYWxseS1hLWNvbXBvbmVudCB2YWx1ZSB3ZSB3ZXJlIGdpdmVuXG4vLyBmb3IgbG9nZ2luZyBpbiBhbiBlcnJvciBtZXNzYWdlXG5cbmNvbnN0IHN0cmluZ2lmeUNvbXBvbmVudCA9IENvbXAgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShDb21wKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIFN0cmluZyhDb21wKTtcbiAgfVxufTtcblxuLy8gVGhpcyBpcyBcImp1c3RcIiBhIGB1c2VMYXlvdXRFZmZlY3RgLCBidXQgd2l0aCB0d28gbW9kaWZpY2F0aW9uczpcbi8vIC0gd2UgbmVlZCB0byBmYWxsIGJhY2sgdG8gYHVzZUVmZmVjdGAgaW4gU1NSIHRvIGF2b2lkIGFubm95aW5nIHdhcm5pbmdzXG4vLyAtIHdlIGV4dHJhY3QgdGhpcyB0byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGF2b2lkIGNsb3Npbmcgb3ZlciB2YWx1ZXNcbi8vICAgYW5kIGNhdXNpbmcgbWVtb3J5IGxlYWtzXG5mdW5jdGlvbiB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0V2l0aEFyZ3MoZWZmZWN0RnVuYywgZWZmZWN0QXJncywgZGVwZW5kZW5jaWVzKSB7XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4gZWZmZWN0RnVuYyguLi5lZmZlY3RBcmdzKSwgZGVwZW5kZW5jaWVzKTtcbn0gLy8gRWZmZWN0IGNhbGxiYWNrLCBleHRyYWN0ZWQ6IGFzc2lnbiB0aGUgbGF0ZXN0IHByb3BzIHZhbHVlcyB0byByZWZzIGZvciBsYXRlciB1c2FnZVxuXG5cbmZ1bmN0aW9uIGNhcHR1cmVXcmFwcGVyUHJvcHMobGFzdFdyYXBwZXJQcm9wcywgbGFzdENoaWxkUHJvcHMsIHJlbmRlcklzU2NoZWR1bGVkLCB3cmFwcGVyUHJvcHMsIC8vIGFjdHVhbENoaWxkUHJvcHM6IHVua25vd24sXG5jaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLCBub3RpZnlOZXN0ZWRTdWJzKSB7XG4gIC8vIFdlIHdhbnQgdG8gY2FwdHVyZSB0aGUgd3JhcHBlciBwcm9wcyBhbmQgY2hpbGQgcHJvcHMgd2UgdXNlZCBmb3IgbGF0ZXIgY29tcGFyaXNvbnNcbiAgbGFzdFdyYXBwZXJQcm9wcy5jdXJyZW50ID0gd3JhcHBlclByb3BzO1xuICByZW5kZXJJc1NjaGVkdWxlZC5jdXJyZW50ID0gZmFsc2U7IC8vIElmIHRoZSByZW5kZXIgd2FzIGZyb20gYSBzdG9yZSB1cGRhdGUsIGNsZWFyIG91dCB0aGF0IHJlZmVyZW5jZSBhbmQgY2FzY2FkZSB0aGUgc3Vic2NyaWJlciB1cGRhdGVcblxuICBpZiAoY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50KSB7XG4gICAgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ID0gbnVsbDtcbiAgICBub3RpZnlOZXN0ZWRTdWJzKCk7XG4gIH1cbn0gLy8gRWZmZWN0IGNhbGxiYWNrLCBleHRyYWN0ZWQ6IHN1YnNjcmliZSB0byB0aGUgUmVkdXggc3RvcmUgb3IgbmVhcmVzdCBjb25uZWN0ZWQgYW5jZXN0b3IsXG4vLyBjaGVjayBmb3IgdXBkYXRlcyBhZnRlciBkaXNwYXRjaGVkIGFjdGlvbnMsIGFuZCB0cmlnZ2VyIHJlLXJlbmRlcnMuXG5cblxuZnVuY3Rpb24gc3Vic2NyaWJlVXBkYXRlcyhzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMsIHN0b3JlLCBzdWJzY3JpcHRpb24sIGNoaWxkUHJvcHNTZWxlY3RvciwgbGFzdFdyYXBwZXJQcm9wcywgbGFzdENoaWxkUHJvcHMsIHJlbmRlcklzU2NoZWR1bGVkLCBpc01vdW50ZWQsIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnMsIC8vIGZvcmNlQ29tcG9uZW50VXBkYXRlRGlzcGF0Y2g6IFJlYWN0LkRpc3BhdGNoPGFueT4sXG5hZGRpdGlvbmFsU3Vic2NyaWJlTGlzdGVuZXIpIHtcbiAgLy8gSWYgd2UncmUgbm90IHN1YnNjcmliZWQgdG8gdGhlIHN0b3JlLCBub3RoaW5nIHRvIGRvIGhlcmVcbiAgaWYgKCFzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHJldHVybiAoKSA9PiB7fTsgLy8gQ2FwdHVyZSB2YWx1ZXMgZm9yIGNoZWNraW5nIGlmIGFuZCB3aGVuIHRoaXMgY29tcG9uZW50IHVubW91bnRzXG5cbiAgbGV0IGRpZFVuc3Vic2NyaWJlID0gZmFsc2U7XG4gIGxldCBsYXN0VGhyb3duRXJyb3IgPSBudWxsOyAvLyBXZSdsbCBydW4gdGhpcyBjYWxsYmFjayBldmVyeSB0aW1lIGEgc3RvcmUgc3Vic2NyaXB0aW9uIHVwZGF0ZSBwcm9wYWdhdGVzIHRvIHRoaXMgY29tcG9uZW50XG5cbiAgY29uc3QgY2hlY2tGb3JVcGRhdGVzID0gKCkgPT4ge1xuICAgIGlmIChkaWRVbnN1YnNjcmliZSB8fCAhaXNNb3VudGVkLmN1cnJlbnQpIHtcbiAgICAgIC8vIERvbid0IHJ1biBzdGFsZSBsaXN0ZW5lcnMuXG4gICAgICAvLyBSZWR1eCBkb2Vzbid0IGd1YXJhbnRlZSB1bnN1YnNjcmlwdGlvbnMgaGFwcGVuIHVudGlsIG5leHQgZGlzcGF0Y2guXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUT0RPIFdlJ3JlIGN1cnJlbnRseSBjYWxsaW5nIGdldFN0YXRlIG91cnNlbHZlcyBoZXJlLCByYXRoZXIgdGhhbiBsZXR0aW5nIGB1U0VTYCBkbyBpdFxuXG5cbiAgICBjb25zdCBsYXRlc3RTdG9yZVN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBsZXQgbmV3Q2hpbGRQcm9wcywgZXJyb3I7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQWN0dWFsbHkgcnVuIHRoZSBzZWxlY3RvciB3aXRoIHRoZSBtb3N0IHJlY2VudCBzdG9yZSBzdGF0ZSBhbmQgd3JhcHBlciBwcm9wc1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNoaWxkIHByb3BzIHNob3VsZCBiZVxuICAgICAgbmV3Q2hpbGRQcm9wcyA9IGNoaWxkUHJvcHNTZWxlY3RvcihsYXRlc3RTdG9yZVN0YXRlLCBsYXN0V3JhcHBlclByb3BzLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yID0gZTtcbiAgICAgIGxhc3RUaHJvd25FcnJvciA9IGU7XG4gICAgfVxuXG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgbGFzdFRocm93bkVycm9yID0gbnVsbDtcbiAgICB9IC8vIElmIHRoZSBjaGlsZCBwcm9wcyBoYXZlbid0IGNoYW5nZWQsIG5vdGhpbmcgdG8gZG8gaGVyZSAtIGNhc2NhZGUgdGhlIHN1YnNjcmlwdGlvbiB1cGRhdGVcblxuXG4gICAgaWYgKG5ld0NoaWxkUHJvcHMgPT09IGxhc3RDaGlsZFByb3BzLmN1cnJlbnQpIHtcbiAgICAgIGlmICghcmVuZGVySXNTY2hlZHVsZWQuY3VycmVudCkge1xuICAgICAgICBub3RpZnlOZXN0ZWRTdWJzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNhdmUgcmVmZXJlbmNlcyB0byB0aGUgbmV3IGNoaWxkIHByb3BzLiAgTm90ZSB0aGF0IHdlIHRyYWNrIHRoZSBcImNoaWxkIHByb3BzIGZyb20gc3RvcmUgdXBkYXRlXCJcbiAgICAgIC8vIGFzIGEgcmVmIGluc3RlYWQgb2YgYSB1c2VTdGF0ZS91c2VSZWR1Y2VyIGJlY2F1c2Ugd2UgbmVlZCBhIHdheSB0byBkZXRlcm1pbmUgaWYgdGhhdCB2YWx1ZSBoYXNcbiAgICAgIC8vIGJlZW4gcHJvY2Vzc2VkLiAgSWYgdGhpcyB3ZW50IGludG8gdXNlU3RhdGUvdXNlUmVkdWNlciwgd2UgY291bGRuJ3QgY2xlYXIgb3V0IHRoZSB2YWx1ZSB3aXRob3V0XG4gICAgICAvLyBmb3JjaW5nIGFub3RoZXIgcmUtcmVuZGVyLCB3aGljaCB3ZSBkb24ndCB3YW50LlxuICAgICAgbGFzdENoaWxkUHJvcHMuY3VycmVudCA9IG5ld0NoaWxkUHJvcHM7XG4gICAgICBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgPSBuZXdDaGlsZFByb3BzO1xuICAgICAgcmVuZGVySXNTY2hlZHVsZWQuY3VycmVudCA9IHRydWU7IC8vIFRPRE8gVGhpcyBpcyBoYWNreSBhbmQgbm90IGhvdyBgdVNFU2AgaXMgbWVhbnQgdG8gYmUgdXNlZFxuICAgICAgLy8gVHJpZ2dlciB0aGUgUmVhY3QgYHVzZVN5bmNFeHRlcm5hbFN0b3JlYCBzdWJzY3JpYmVyXG5cbiAgICAgIGFkZGl0aW9uYWxTdWJzY3JpYmVMaXN0ZW5lcigpO1xuICAgIH1cbiAgfTsgLy8gQWN0dWFsbHkgc3Vic2NyaWJlIHRvIHRoZSBuZWFyZXN0IGNvbm5lY3RlZCBhbmNlc3RvciAob3Igc3RvcmUpXG5cblxuICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IGNoZWNrRm9yVXBkYXRlcztcbiAgc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpOyAvLyBQdWxsIGRhdGEgZnJvbSB0aGUgc3RvcmUgYWZ0ZXIgZmlyc3QgcmVuZGVyIGluIGNhc2UgdGhlIHN0b3JlIGhhc1xuICAvLyBjaGFuZ2VkIHNpbmNlIHdlIGJlZ2FuLlxuXG4gIGNoZWNrRm9yVXBkYXRlcygpO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlV3JhcHBlciA9ICgpID0+IHtcbiAgICBkaWRVbnN1YnNjcmliZSA9IHRydWU7XG4gICAgc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XG4gICAgc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UgPSBudWxsO1xuXG4gICAgaWYgKGxhc3RUaHJvd25FcnJvcikge1xuICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdlIGNhdWdodCBhbiBlcnJvciBkdWUgdG8gYSBiYWQgbWFwU3RhdGUgZnVuY3Rpb24sIGJ1dCB0aGVcbiAgICAgIC8vIHBhcmVudCByZS1yZW5kZXJlZCB3aXRob3V0IHRoaXMgY29tcG9uZW50IGFuZCB3ZSdyZSBhYm91dCB0byB1bm1vdW50LlxuICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGFzIGxvbmcgYXMgd2UgZG8gdG9wLWRvd24gc3Vic2NyaXB0aW9ucyBjb3JyZWN0bHksIGJ1dFxuICAgICAgLy8gaWYgd2UgZXZlciBkbyB0aG9zZSB3cm9uZywgdGhpcyB0aHJvdyB3aWxsIHN1cmZhY2UgdGhlIGVycm9yIGluIG91ciB0ZXN0cy5cbiAgICAgIC8vIEluIHRoYXQgY2FzZSwgdGhyb3cgdGhlIGVycm9yIGZyb20gaGVyZSBzbyBpdCBkb2Vzbid0IGdldCBsb3N0LlxuICAgICAgdGhyb3cgbGFzdFRocm93bkVycm9yO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdW5zdWJzY3JpYmVXcmFwcGVyO1xufSAvLyBSZWR1Y2VyIGluaXRpYWwgc3RhdGUgY3JlYXRpb24gZm9yIG91ciB1cGRhdGUgcmVkdWNlclxuXG5cbmNvbnN0IGluaXRTdGF0ZVVwZGF0ZXMgPSAoKSA9PiBFTVBUWV9BUlJBWTtcblxuZnVuY3Rpb24gc3RyaWN0RXF1YWwoYSwgYikge1xuICByZXR1cm4gYSA9PT0gYjtcbn1cbi8qKlxyXG4gKiBJbmZlcnMgdGhlIHR5cGUgb2YgcHJvcHMgdGhhdCBhIGNvbm5lY3RvciB3aWxsIGluamVjdCBpbnRvIGEgY29tcG9uZW50LlxyXG4gKi9cblxuXG5sZXQgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkUHVyZU9wdGlvbiA9IGZhbHNlO1xuLyoqXHJcbiAqIENvbm5lY3RzIGEgUmVhY3QgY29tcG9uZW50IHRvIGEgUmVkdXggc3RvcmUuXHJcbiAqXHJcbiAqIC0gV2l0aG91dCBhcmd1bWVudHMsIGp1c3Qgd3JhcHMgdGhlIGNvbXBvbmVudCwgd2l0aG91dCBjaGFuZ2luZyB0aGUgYmVoYXZpb3IgLyBwcm9wc1xyXG4gKlxyXG4gKiAtIElmIDIgcGFyYW1zIGFyZSBwYXNzZWQgKDNyZCBwYXJhbSwgbWVyZ2VQcm9wcywgaXMgc2tpcHBlZCksIGRlZmF1bHQgYmVoYXZpb3JcclxuICogaXMgdG8gb3ZlcnJpZGUgb3duUHJvcHMgKGFzIHN0YXRlZCBpbiB0aGUgZG9jcyksIHNvIHdoYXQgcmVtYWlucyBpcyBldmVyeXRoaW5nIHRoYXQnc1xyXG4gKiBub3QgYSBzdGF0ZSBvciBkaXNwYXRjaCBwcm9wXHJcbiAqXHJcbiAqIC0gV2hlbiAzcmQgcGFyYW0gaXMgcGFzc2VkLCB3ZSBkb24ndCBrbm93IGlmIG93blByb3BzIHByb3BhZ2F0ZSBhbmQgd2hldGhlciB0aGV5XHJcbiAqIHNob3VsZCBiZSB2YWxpZCBjb21wb25lbnQgcHJvcHMsIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBtZXJnZVByb3BzIGltcGxlbWVudGF0aW9uLlxyXG4gKiBBcyBzdWNoLCBpdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGV4dGVuZCBvd25Qcm9wcyBpbnRlcmZhY2UgZnJvbSBzdGF0ZSBvclxyXG4gKiBkaXNwYXRjaCBwcm9wcyBvciBib3RoIHdoZW4gYXBwbGljYWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0gbWFwU3RhdGVUb1Byb3BzIEEgZnVuY3Rpb24gdGhhdCBleHRyYWN0cyB2YWx1ZXMgZnJvbSBzdGF0ZVxyXG4gKiBAcGFyYW0gbWFwRGlzcGF0Y2hUb1Byb3BzIFNldHVwIGZvciBkaXNwYXRjaGluZyBhY3Rpb25zXHJcbiAqIEBwYXJhbSBtZXJnZVByb3BzIE9wdGlvbmFsIGNhbGxiYWNrIHRvIG1lcmdlIHN0YXRlIGFuZCBkaXNwYXRjaCBwcm9wcyB0b2dldGhlclxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgY29ubmVjdGlvblxyXG4gKlxyXG4gKi9cblxuZnVuY3Rpb24gY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywge1xuICAvLyBUaGUgYHB1cmVgIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLCBzbyBUUyBkb2Vzbid0IGxpa2UgdXMgZGVzdHJ1Y3R1cmluZyB0aGlzIHRvIGNoZWNrIGl0cyBleGlzdGVuY2UuXG4gIC8vIEB0cy1pZ25vcmVcbiAgcHVyZSxcbiAgYXJlU3RhdGVzRXF1YWwgPSBzdHJpY3RFcXVhbCxcbiAgYXJlT3duUHJvcHNFcXVhbCA9IHNoYWxsb3dFcXVhbCxcbiAgYXJlU3RhdGVQcm9wc0VxdWFsID0gc2hhbGxvd0VxdWFsLFxuICBhcmVNZXJnZWRQcm9wc0VxdWFsID0gc2hhbGxvd0VxdWFsLFxuICAvLyB1c2UgUmVhY3QncyBmb3J3YXJkUmVmIHRvIGV4cG9zZSBhIHJlZiBvZiB0aGUgd3JhcHBlZCBjb21wb25lbnRcbiAgZm9yd2FyZFJlZiA9IGZhbHNlLFxuICAvLyB0aGUgY29udGV4dCBjb25zdW1lciB0byB1c2VcbiAgY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0XG59ID0ge30pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAocHVyZSAhPT0gdW5kZWZpbmVkICYmICFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRQdXJlT3B0aW9uKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRQdXJlT3B0aW9uID0gdHJ1ZTtcbiAgICAgIHdhcm5pbmcoJ1RoZSBgcHVyZWAgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQuIGBjb25uZWN0YCBpcyBub3cgYWx3YXlzIGEgXCJwdXJlL21lbW9pemVkXCIgY29tcG9uZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgQ29udGV4dCA9IGNvbnRleHQ7XG4gIGNvbnN0IGluaXRNYXBTdGF0ZVRvUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHNGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcyk7XG4gIGNvbnN0IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3J5KG1hcERpc3BhdGNoVG9Qcm9wcyk7XG4gIGNvbnN0IGluaXRNZXJnZVByb3BzID0gbWVyZ2VQcm9wc0ZhY3RvcnkobWVyZ2VQcm9wcyk7XG4gIGNvbnN0IHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyA9IEJvb2xlYW4obWFwU3RhdGVUb1Byb3BzKTtcblxuICBjb25zdCB3cmFwV2l0aENvbm5lY3QgPSBXcmFwcGVkQ29tcG9uZW50ID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNWYWxpZEVsZW1lbnRUeXBlKFdyYXBwZWRDb21wb25lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBtdXN0IHBhc3MgYSBjb21wb25lbnQgdG8gdGhlIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGNvbm5lY3QuIEluc3RlYWQgcmVjZWl2ZWQgJHtzdHJpbmdpZnlDb21wb25lbnQoV3JhcHBlZENvbXBvbmVudCl9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgd3JhcHBlZENvbXBvbmVudE5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGBDb25uZWN0KCR7d3JhcHBlZENvbXBvbmVudE5hbWV9KWA7XG4gICAgY29uc3Qgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IHtcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyxcbiAgICAgIGRpc3BsYXlOYW1lLFxuICAgICAgd3JhcHBlZENvbXBvbmVudE5hbWUsXG4gICAgICBXcmFwcGVkQ29tcG9uZW50LFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaW5pdE1hcFN0YXRlVG9Qcm9wcyxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGluaXRNYXBEaXNwYXRjaFRvUHJvcHMsXG4gICAgICBpbml0TWVyZ2VQcm9wcyxcbiAgICAgIGFyZVN0YXRlc0VxdWFsLFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsLFxuICAgICAgYXJlT3duUHJvcHNFcXVhbCxcbiAgICAgIGFyZU1lcmdlZFByb3BzRXF1YWxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gQ29ubmVjdEZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICBjb25zdCBbcHJvcHNDb250ZXh0LCByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmLCB3cmFwcGVyUHJvcHNdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIC8vIERpc3Rpbmd1aXNoIGJldHdlZW4gYWN0dWFsIFwiZGF0YVwiIHByb3BzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhlIHdyYXBwZXIgY29tcG9uZW50LFxuICAgICAgICAvLyBhbmQgdmFsdWVzIG5lZWRlZCB0byBjb250cm9sIGJlaGF2aW9yIChmb3J3YXJkZWQgcmVmcywgYWx0ZXJuYXRlIGNvbnRleHQgaW5zdGFuY2VzKS5cbiAgICAgICAgLy8gVG8gbWFpbnRhaW4gdGhlIHdyYXBwZXJQcm9wcyBvYmplY3QgcmVmZXJlbmNlLCBtZW1vaXplIHRoaXMgZGVzdHJ1Y3R1cmluZy5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHJlYWN0UmVkdXhGb3J3YXJkZWRSZWZcbiAgICAgICAgfSA9IHByb3BzLFxuICAgICAgICAgICAgICB3cmFwcGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgICByZXR1cm4gW3Byb3BzLmNvbnRleHQsIHJlYWN0UmVkdXhGb3J3YXJkZWRSZWYsIHdyYXBwZXJQcm9wc107XG4gICAgICB9LCBbcHJvcHNdKTtcbiAgICAgIGNvbnN0IENvbnRleHRUb1VzZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICAvLyBVc2VycyBtYXkgb3B0aW9uYWxseSBwYXNzIGluIGEgY3VzdG9tIGNvbnRleHQgaW5zdGFuY2UgdG8gdXNlIGluc3RlYWQgb2Ygb3VyIFJlYWN0UmVkdXhDb250ZXh0LlxuICAgICAgICAvLyBNZW1vaXplIHRoZSBjaGVjayB0aGF0IGRldGVybWluZXMgd2hpY2ggY29udGV4dCBpbnN0YW5jZSB3ZSBzaG91bGQgdXNlLlxuICAgICAgICByZXR1cm4gcHJvcHNDb250ZXh0ICYmIHByb3BzQ29udGV4dC5Db25zdW1lciAmJiAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlzQ29udGV4dENvbnN1bWVyKCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChwcm9wc0NvbnRleHQuQ29uc3VtZXIsIG51bGwpKSA/IHByb3BzQ29udGV4dCA6IENvbnRleHQ7XG4gICAgICB9LCBbcHJvcHNDb250ZXh0LCBDb250ZXh0XSk7IC8vIFJldHJpZXZlIHRoZSBzdG9yZSBhbmQgYW5jZXN0b3Igc3Vic2NyaXB0aW9uIHZpYSBjb250ZXh0LCBpZiBhdmFpbGFibGVcblxuICAgICAgY29uc3QgY29udGV4dFZhbHVlID0gdXNlQ29udGV4dChDb250ZXh0VG9Vc2UpOyAvLyBUaGUgc3RvcmUgX211c3RfIGV4aXN0IGFzIGVpdGhlciBhIHByb3Agb3IgaW4gY29udGV4dC5cbiAgICAgIC8vIFdlJ2xsIGNoZWNrIHRvIHNlZSBpZiBpdCBfbG9va3NfIGxpa2UgYSBSZWR1eCBzdG9yZSBmaXJzdC5cbiAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHBhc3MgdGhyb3VnaCBhIGBzdG9yZWAgcHJvcCB0aGF0IGlzIGp1c3QgYSBwbGFpbiB2YWx1ZS5cblxuICAgICAgY29uc3QgZGlkU3RvcmVDb21lRnJvbVByb3BzID0gQm9vbGVhbihwcm9wcy5zdG9yZSkgJiYgQm9vbGVhbihwcm9wcy5zdG9yZS5nZXRTdGF0ZSkgJiYgQm9vbGVhbihwcm9wcy5zdG9yZS5kaXNwYXRjaCk7XG4gICAgICBjb25zdCBkaWRTdG9yZUNvbWVGcm9tQ29udGV4dCA9IEJvb2xlYW4oY29udGV4dFZhbHVlKSAmJiBCb29sZWFuKGNvbnRleHRWYWx1ZS5zdG9yZSk7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFkaWRTdG9yZUNvbWVGcm9tUHJvcHMgJiYgIWRpZFN0b3JlQ29tZUZyb21Db250ZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgXCJzdG9yZVwiIGluIHRoZSBjb250ZXh0IG9mIGAgKyBgXCIke2Rpc3BsYXlOYW1lfVwiLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCBgICsgYG9yIHBhc3MgYSBjdXN0b20gUmVhY3QgY29udGV4dCBwcm92aWRlciB0byA8UHJvdmlkZXI+IGFuZCB0aGUgY29ycmVzcG9uZGluZyBgICsgYFJlYWN0IGNvbnRleHQgY29uc3VtZXIgdG8gJHtkaXNwbGF5TmFtZX0gaW4gY29ubmVjdCBvcHRpb25zLmApO1xuICAgICAgfSAvLyBCYXNlZCBvbiB0aGUgcHJldmlvdXMgY2hlY2ssIG9uZSBvZiB0aGVzZSBtdXN0IGJlIHRydWVcblxuXG4gICAgICBjb25zdCBzdG9yZSA9IGRpZFN0b3JlQ29tZUZyb21Qcm9wcyA/IHByb3BzLnN0b3JlIDogY29udGV4dFZhbHVlLnN0b3JlO1xuICAgICAgY29uc3QgZ2V0U2VydmVyU3RhdGUgPSBkaWRTdG9yZUNvbWVGcm9tQ29udGV4dCA/IGNvbnRleHRWYWx1ZS5nZXRTZXJ2ZXJTdGF0ZSA6IHN0b3JlLmdldFN0YXRlO1xuICAgICAgY29uc3QgY2hpbGRQcm9wc1NlbGVjdG9yID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIC8vIFRoZSBjaGlsZCBwcm9wcyBzZWxlY3RvciBuZWVkcyB0aGUgc3RvcmUgcmVmZXJlbmNlIGFzIGFuIGlucHV0LlxuICAgICAgICAvLyBSZS1jcmVhdGUgdGhpcyBzZWxlY3RvciB3aGVuZXZlciB0aGUgc3RvcmUgY2hhbmdlcy5cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRTZWxlY3RvckZhY3Rvcnkoc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMpO1xuICAgICAgfSwgW3N0b3JlXSk7XG4gICAgICBjb25zdCBbc3Vic2NyaXB0aW9uLCBub3RpZnlOZXN0ZWRTdWJzXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuIE5PX1NVQlNDUklQVElPTl9BUlJBWTsgLy8gVGhpcyBTdWJzY3JpcHRpb24ncyBzb3VyY2Ugc2hvdWxkIG1hdGNoIHdoZXJlIHN0b3JlIGNhbWUgZnJvbTogcHJvcHMgdnMuIGNvbnRleHQuIEEgY29tcG9uZW50XG4gICAgICAgIC8vIGNvbm5lY3RlZCB0byB0aGUgc3RvcmUgdmlhIHByb3BzIHNob3VsZG4ndCB1c2Ugc3Vic2NyaXB0aW9uIGZyb20gY29udGV4dCwgb3IgdmljZSB2ZXJzYS5cblxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjcmVhdGVTdWJzY3JpcHRpb24oc3RvcmUsIGRpZFN0b3JlQ29tZUZyb21Qcm9wcyA/IHVuZGVmaW5lZCA6IGNvbnRleHRWYWx1ZS5zdWJzY3JpcHRpb24pOyAvLyBgbm90aWZ5TmVzdGVkU3Vic2AgaXMgZHVwbGljYXRlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGNvbXBvbmVudCBpcyB1bm1vdW50ZWQgaW5cbiAgICAgICAgLy8gdGhlIG1pZGRsZSBvZiB0aGUgbm90aWZpY2F0aW9uIGxvb3AsIHdoZXJlIGBzdWJzY3JpcHRpb25gIHdpbGwgdGhlbiBiZSBudWxsLiBUaGlzIGNhblxuICAgICAgICAvLyBwcm9iYWJseSBiZSBhdm9pZGVkIGlmIFN1YnNjcmlwdGlvbidzIGxpc3RlbmVycyBsb2dpYyBpcyBjaGFuZ2VkIHRvIG5vdCBjYWxsIGxpc3RlbmVyc1xuICAgICAgICAvLyB0aGF0IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQgaW4gdGhlICBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLlxuXG4gICAgICAgIGNvbnN0IG5vdGlmeU5lc3RlZFN1YnMgPSBzdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5kKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIHJldHVybiBbc3Vic2NyaXB0aW9uLCBub3RpZnlOZXN0ZWRTdWJzXTtcbiAgICAgIH0sIFtzdG9yZSwgZGlkU3RvcmVDb21lRnJvbVByb3BzLCBjb250ZXh0VmFsdWVdKTsgLy8gRGV0ZXJtaW5lIHdoYXQge3N0b3JlLCBzdWJzY3JpcHRpb259IHZhbHVlIHNob3VsZCBiZSBwdXQgaW50byBuZXN0ZWQgY29udGV4dCwgaWYgbmVjZXNzYXJ5LFxuICAgICAgLy8gYW5kIG1lbW9pemUgdGhhdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb250ZXh0IHVwZGF0ZXMuXG5cbiAgICAgIGNvbnN0IG92ZXJyaWRkZW5Db250ZXh0VmFsdWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGRpZFN0b3JlQ29tZUZyb21Qcm9wcykge1xuICAgICAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGRpcmVjdGx5IHN1YnNjcmliZWQgdG8gYSBzdG9yZSBmcm9tIHByb3BzLlxuICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgZGVzY2VuZGFudHMgcmVhZGluZyBmcm9tIHRoaXMgc3RvcmUgLSBwYXNzIGRvd24gd2hhdGV2ZXJcbiAgICAgICAgICAvLyB0aGUgZXhpc3RpbmcgY29udGV4dCB2YWx1ZSBpcyBmcm9tIHRoZSBuZWFyZXN0IGNvbm5lY3RlZCBhbmNlc3Rvci5cbiAgICAgICAgICByZXR1cm4gY29udGV4dFZhbHVlO1xuICAgICAgICB9IC8vIE90aGVyd2lzZSwgcHV0IHRoaXMgY29tcG9uZW50J3Mgc3Vic2NyaXB0aW9uIGluc3RhbmNlIGludG8gY29udGV4dCwgc28gdGhhdFxuICAgICAgICAvLyBjb25uZWN0ZWQgZGVzY2VuZGFudHMgd29uJ3QgdXBkYXRlIHVudGlsIGFmdGVyIHRoaXMgY29tcG9uZW50IGlzIGRvbmVcblxuXG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgY29udGV4dFZhbHVlLCB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uXG4gICAgICAgIH0pO1xuICAgICAgfSwgW2RpZFN0b3JlQ29tZUZyb21Qcm9wcywgY29udGV4dFZhbHVlLCBzdWJzY3JpcHRpb25dKTsgLy8gU2V0IHVwIHJlZnMgdG8gY29vcmRpbmF0ZSB2YWx1ZXMgYmV0d2VlbiB0aGUgc3Vic2NyaXB0aW9uIGVmZmVjdCBhbmQgdGhlIHJlbmRlciBsb2dpY1xuXG4gICAgICBjb25zdCBsYXN0Q2hpbGRQcm9wcyA9IHVzZVJlZigpO1xuICAgICAgY29uc3QgbGFzdFdyYXBwZXJQcm9wcyA9IHVzZVJlZih3cmFwcGVyUHJvcHMpO1xuICAgICAgY29uc3QgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSA9IHVzZVJlZigpO1xuICAgICAgY29uc3QgcmVuZGVySXNTY2hlZHVsZWQgPSB1c2VSZWYoZmFsc2UpO1xuICAgICAgY29uc3QgaXNQcm9jZXNzaW5nRGlzcGF0Y2ggPSB1c2VSZWYoZmFsc2UpO1xuICAgICAgY29uc3QgaXNNb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICAgIGNvbnN0IGxhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IgPSB1c2VSZWYoKTtcbiAgICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpc01vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgaXNNb3VudGVkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgIH0sIFtdKTtcbiAgICAgIGNvbnN0IGFjdHVhbENoaWxkUHJvcHNTZWxlY3RvciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9ICgpID0+IHtcbiAgICAgICAgICAvLyBUcmlja3kgbG9naWMgaGVyZTpcbiAgICAgICAgICAvLyAtIFRoaXMgcmVuZGVyIG1heSBoYXZlIGJlZW4gdHJpZ2dlcmVkIGJ5IGEgUmVkdXggc3RvcmUgdXBkYXRlIHRoYXQgcHJvZHVjZWQgbmV3IGNoaWxkIHByb3BzXG4gICAgICAgICAgLy8gLSBIb3dldmVyLCB3ZSBtYXkgaGF2ZSBnb3R0ZW4gbmV3IHdyYXBwZXIgcHJvcHMgYWZ0ZXIgdGhhdFxuICAgICAgICAgIC8vIElmIHdlIGhhdmUgbmV3IGNoaWxkIHByb3BzLCBhbmQgdGhlIHNhbWUgd3JhcHBlciBwcm9wcywgd2Uga25vdyB3ZSBzaG91bGQgdXNlIHRoZSBuZXcgY2hpbGQgcHJvcHMgYXMtaXMuXG4gICAgICAgICAgLy8gQnV0LCBpZiB3ZSBoYXZlIG5ldyB3cmFwcGVyIHByb3BzLCB0aG9zZSBtaWdodCBjaGFuZ2UgdGhlIGNoaWxkIHByb3BzLCBzbyB3ZSBoYXZlIHRvIHJlY2FsY3VsYXRlIHRoaW5ncy5cbiAgICAgICAgICAvLyBTbywgd2UnbGwgdXNlIHRoZSBjaGlsZCBwcm9wcyBmcm9tIHN0b3JlIHVwZGF0ZSBvbmx5IGlmIHRoZSB3cmFwcGVyIHByb3BzIGFyZSB0aGUgc2FtZSBhcyBsYXN0IHRpbWUuXG4gICAgICAgICAgaWYgKGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCAmJiB3cmFwcGVyUHJvcHMgPT09IGxhc3RXcmFwcGVyUHJvcHMuY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudDtcbiAgICAgICAgICB9IC8vIFRPRE8gV2UncmUgcmVhZGluZyB0aGUgc3RvcmUgZGlyZWN0bHkgaW4gcmVuZGVyKCkgaGVyZS4gQmFkIGlkZWE/XG4gICAgICAgICAgLy8gVGhpcyB3aWxsIGxpa2VseSBjYXVzZSBCYWQgVGhpbmdzIChUTSkgdG8gaGFwcGVuIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG8gdGhpcyBiZWNhdXNlIG9uIHJlbmRlcnMgX25vdF8gY2F1c2VkIGJ5IHN0b3JlIHVwZGF0ZXMsIHdlIG5lZWQgdGhlIGxhdGVzdCBzdG9yZSBzdGF0ZVxuICAgICAgICAgIC8vIHRvIGRldGVybWluZSB3aGF0IHRoZSBjaGlsZCBwcm9wcyBzaG91bGQgYmUuXG5cblxuICAgICAgICAgIHJldHVybiBjaGlsZFByb3BzU2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSwgd3JhcHBlclByb3BzKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgICB9LCBbc3RvcmUsIHdyYXBwZXJQcm9wc10pOyAvLyBXZSBuZWVkIHRoaXMgdG8gZXhlY3V0ZSBzeW5jaHJvbm91c2x5IGV2ZXJ5IHRpbWUgd2UgcmUtcmVuZGVyLiBIb3dldmVyLCBSZWFjdCB3YXJuc1xuICAgICAgLy8gYWJvdXQgdXNlTGF5b3V0RWZmZWN0IGluIFNTUiwgc28gd2UgdHJ5IHRvIGRldGVjdCBlbnZpcm9ubWVudCBhbmQgZmFsbCBiYWNrIHRvXG4gICAgICAvLyBqdXN0IHVzZUVmZmVjdCBpbnN0ZWFkIHRvIGF2b2lkIHRoZSB3YXJuaW5nLCBzaW5jZSBuZWl0aGVyIHdpbGwgcnVuIGFueXdheS5cblxuICAgICAgY29uc3Qgc3Vic2NyaWJlRm9yUmVhY3QgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlID0gcmVhY3RMaXN0ZW5lciA9PiB7XG4gICAgICAgICAgaWYgKCFzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3Vic2NyaWJlVXBkYXRlcyhzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMsIHN0b3JlLCBzdWJzY3JpcHRpb24sIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBjaGlsZFByb3BzU2VsZWN0b3IsIGxhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgaXNNb3VudGVkLCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLCBub3RpZnlOZXN0ZWRTdWJzLCByZWFjdExpc3RlbmVyKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc3Vic2NyaWJlO1xuICAgICAgfSwgW3N1YnNjcmlwdGlvbl0pO1xuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdFdpdGhBcmdzKGNhcHR1cmVXcmFwcGVyUHJvcHMsIFtsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIHdyYXBwZXJQcm9wcywgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3Vic10pO1xuICAgICAgbGV0IGFjdHVhbENoaWxkUHJvcHM7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGFjdHVhbENoaWxkUHJvcHMgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZSggLy8gVE9ETyBXZSdyZSBwYXNzaW5nIHRocm91Z2ggYSBiaWcgd3JhcHBlciB0aGF0IGRvZXMgYSBidW5jaCBvZiBleHRyYSBzaWRlIGVmZmVjdHMgYmVzaWRlcyBzdWJzY3JpYmluZ1xuICAgICAgICBzdWJzY3JpYmVGb3JSZWFjdCwgLy8gVE9ETyBUaGlzIGlzIGluY3JlZGlibHkgaGFja3kuIFdlJ3ZlIGFscmVhZHkgcHJvY2Vzc2VkIHRoZSBzdG9yZSB1cGRhdGUgYW5kIGNhbGN1bGF0ZWQgbmV3IGNoaWxkIHByb3BzLFxuICAgICAgICAvLyBUT0RPIGFuZCB3ZSdyZSBqdXN0IHBhc3NpbmcgdGhhdCB0aHJvdWdoIHNvIGl0IHRyaWdnZXJzIGEgcmUtcmVuZGVyIGZvciB1cyByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGB1U0VTYC5cbiAgICAgICAgYWN0dWFsQ2hpbGRQcm9wc1NlbGVjdG9yLCBnZXRTZXJ2ZXJTdGF0ZSA/ICgpID0+IGNoaWxkUHJvcHNTZWxlY3RvcihnZXRTZXJ2ZXJTdGF0ZSgpLCB3cmFwcGVyUHJvcHMpIDogYWN0dWFsQ2hpbGRQcm9wc1NlbGVjdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAobGF0ZXN0U3Vic2NyaXB0aW9uQ2FsbGJhY2tFcnJvci5jdXJyZW50KSB7XG4gICAgICAgICAgO1xuICAgICAgICAgIGVyci5tZXNzYWdlICs9IGBcXG5UaGUgZXJyb3IgbWF5IGJlIGNvcnJlbGF0ZWQgd2l0aCB0aGlzIHByZXZpb3VzIGVycm9yOlxcbiR7bGF0ZXN0U3Vic2NyaXB0aW9uQ2FsbGJhY2tFcnJvci5jdXJyZW50LnN0YWNrfVxcblxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICBsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGFzdENoaWxkUHJvcHMuY3VycmVudCA9IGFjdHVhbENoaWxkUHJvcHM7XG4gICAgICB9KTsgLy8gTm93IHRoYXQgYWxsIHRoYXQncyBkb25lLCB3ZSBjYW4gZmluYWxseSB0cnkgdG8gYWN0dWFsbHkgcmVuZGVyIHRoZSBjaGlsZCBjb21wb25lbnQuXG4gICAgICAvLyBXZSBtZW1vaXplIHRoZSBlbGVtZW50cyBmb3IgdGhlIHJlbmRlcmVkIGNoaWxkIGNvbXBvbmVudCBhcyBhbiBvcHRpbWl6YXRpb24uXG5cbiAgICAgIGNvbnN0IHJlbmRlcmVkV3JhcHBlZENvbXBvbmVudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgYWN0dWFsQ2hpbGRQcm9wcywge1xuICAgICAgICAgICAgcmVmOiByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICB9LCBbcmVhY3RSZWR1eEZvcndhcmRlZFJlZiwgV3JhcHBlZENvbXBvbmVudCwgYWN0dWFsQ2hpbGRQcm9wc10pOyAvLyBJZiBSZWFjdCBzZWVzIHRoZSBleGFjdCBzYW1lIGVsZW1lbnQgcmVmZXJlbmNlIGFzIGxhc3QgdGltZSwgaXQgYmFpbHMgb3V0IG9mIHJlLXJlbmRlcmluZ1xuICAgICAgLy8gdGhhdCBjaGlsZCwgc2FtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBSZWFjdC5tZW1vKCkgb3IgcmV0dXJuZWQgZmFsc2UgZnJvbSBzaG91bGRDb21wb25lbnRVcGRhdGUuXG5cbiAgICAgIGNvbnN0IHJlbmRlcmVkQ2hpbGQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykge1xuICAgICAgICAgIC8vIElmIHRoaXMgY29tcG9uZW50IGlzIHN1YnNjcmliZWQgdG8gc3RvcmUgdXBkYXRlcywgd2UgbmVlZCB0byBwYXNzIGl0cyBvd25cbiAgICAgICAgICAvLyBzdWJzY3JpcHRpb24gaW5zdGFuY2UgZG93biB0byBvdXIgZGVzY2VuZGFudHMuIFRoYXQgbWVhbnMgcmVuZGVyaW5nIHRoZSBzYW1lXG4gICAgICAgICAgLy8gQ29udGV4dCBpbnN0YW5jZSwgYW5kIHB1dHRpbmcgYSBkaWZmZXJlbnQgdmFsdWUgaW50byB0aGUgY29udGV4dC5cbiAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dFRvVXNlLlByb3ZpZGVyLCB7XG4gICAgICAgICAgICB2YWx1ZTogb3ZlcnJpZGRlbkNvbnRleHRWYWx1ZVxuICAgICAgICAgIH0sIHJlbmRlcmVkV3JhcHBlZENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50O1xuICAgICAgfSwgW0NvbnRleHRUb1VzZSwgcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50LCBvdmVycmlkZGVuQ29udGV4dFZhbHVlXSk7XG4gICAgICByZXR1cm4gcmVuZGVyZWRDaGlsZDtcbiAgICB9XG5cbiAgICBjb25zdCBfQ29ubmVjdCA9IFJlYWN0Lm1lbW8oQ29ubmVjdEZ1bmN0aW9uKTtcblxuICAgIC8vIEFkZCBhIGhhY2t5IGNhc3QgdG8gZ2V0IHRoZSByaWdodCBvdXRwdXQgdHlwZVxuICAgIGNvbnN0IENvbm5lY3QgPSBfQ29ubmVjdDtcbiAgICBDb25uZWN0LldyYXBwZWRDb21wb25lbnQgPSBXcmFwcGVkQ29tcG9uZW50O1xuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBDb25uZWN0RnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcblxuICAgIGlmIChmb3J3YXJkUmVmKSB7XG4gICAgICBjb25zdCBfZm9yd2FyZGVkID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBmb3J3YXJkQ29ubmVjdFJlZihwcm9wcywgcmVmKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbm5lY3QsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICAgIHJlYWN0UmVkdXhGb3J3YXJkZWRSZWY6IHJlZlxuICAgICAgICB9KSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZm9yd2FyZGVkID0gX2ZvcndhcmRlZDtcbiAgICAgIGZvcndhcmRlZC5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgICAgZm9yd2FyZGVkLldyYXBwZWRDb21wb25lbnQgPSBXcmFwcGVkQ29tcG9uZW50O1xuICAgICAgcmV0dXJuIGhvaXN0U3RhdGljcyhmb3J3YXJkZWQsIFdyYXBwZWRDb21wb25lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBob2lzdFN0YXRpY3MoQ29ubmVjdCwgV3JhcHBlZENvbXBvbmVudCk7XG4gIH07XG5cbiAgcmV0dXJuIHdyYXBXaXRoQ29ubmVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdDsiLCJpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi9Db250ZXh0JztcbmltcG9ydCB7IGNyZWF0ZVN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL3V0aWxzL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IH0gZnJvbSAnLi4vdXRpbHMvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCc7XG5cbmZ1bmN0aW9uIFByb3ZpZGVyKHtcbiAgc3RvcmUsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICBzZXJ2ZXJTdGF0ZVxufSkge1xuICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjcmVhdGVTdWJzY3JpcHRpb24oc3RvcmUpO1xuICAgIHJldHVybiB7XG4gICAgICBzdG9yZSxcbiAgICAgIHN1YnNjcmlwdGlvbixcbiAgICAgIGdldFNlcnZlclN0YXRlOiBzZXJ2ZXJTdGF0ZSA/ICgpID0+IHNlcnZlclN0YXRlIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfSwgW3N0b3JlLCBzZXJ2ZXJTdGF0ZV0pO1xuICBjb25zdCBwcmV2aW91c1N0YXRlID0gdXNlTWVtbygoKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLCBbc3RvcmVdKTtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc3Vic2NyaXB0aW9uXG4gICAgfSA9IGNvbnRleHRWYWx1ZTtcbiAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IHN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzO1xuICAgIHN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKTtcblxuICAgIGlmIChwcmV2aW91c1N0YXRlICE9PSBzdG9yZS5nZXRTdGF0ZSgpKSB7XG4gICAgICBzdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3VicygpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gIH0sIFtjb250ZXh0VmFsdWUsIHByZXZpb3VzU3RhdGVdKTtcbiAgY29uc3QgQ29udGV4dCA9IGNvbnRleHQgfHwgUmVhY3RSZWR1eENvbnRleHQ7IC8vIEB0cy1pZ25vcmUgJ0FueUFjdGlvbicgaXMgYXNzaWduYWJsZSB0byB0aGUgY29uc3RyYWludCBvZiB0eXBlICdBJywgYnV0ICdBJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlXG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gIH0sIGNoaWxkcmVuKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJvdmlkZXI7IiwiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcbmltcG9ydCB7IHVzZVJlZHV4Q29udGV4dCBhcyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi91c2VSZWR1eENvbnRleHQnO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VTdG9yZWAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVN0b3JlYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdG9yZUhvb2soY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0KSB7XG4gIGNvbnN0IHVzZVJlZHV4Q29udGV4dCA9IC8vIEB0cy1pZ25vcmVcbiAgY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IDogKCkgPT4gdXNlQ29udGV4dChjb250ZXh0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVN0b3JlKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHN0b3JlXG4gICAgfSA9IHVzZVJlZHV4Q29udGV4dCgpOyAvLyBAdHMtaWdub3JlXG5cbiAgICByZXR1cm4gc3RvcmU7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgcmVkdXggc3RvcmUuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHthbnl9IHRoZSByZWR1eCBzdG9yZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiBpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXHJcbiAqIGltcG9ydCB7IHVzZVN0b3JlIH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBFeGFtcGxlQ29tcG9uZW50ID0gKCkgPT4ge1xyXG4gKiAgIGNvbnN0IHN0b3JlID0gdXNlU3RvcmUoKVxyXG4gKiAgIHJldHVybiA8ZGl2PntzdG9yZS5nZXRTdGF0ZSgpfTwvZGl2PlxyXG4gKiB9XHJcbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlU3RvcmUgPSAvKiNfX1BVUkVfXyovY3JlYXRlU3RvcmVIb29rKCk7IiwiaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgdXNlU3RvcmUgYXMgdXNlRGVmYXVsdFN0b3JlLCBjcmVhdGVTdG9yZUhvb2sgfSBmcm9tICcuL3VzZVN0b3JlJztcbi8qKlxyXG4gKiBIb29rIGZhY3RvcnksIHdoaWNoIGNyZWF0ZXMgYSBgdXNlRGlzcGF0Y2hgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VEaXNwYXRjaGAgaG9vayBib3VuZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICBjb25zdCB1c2VTdG9yZSA9IC8vIEB0cy1pZ25vcmVcbiAgY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0U3RvcmUgOiBjcmVhdGVTdG9yZUhvb2soY29udGV4dCk7XG4gIHJldHVybiBmdW5jdGlvbiB1c2VEaXNwYXRjaCgpIHtcbiAgICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKCk7IC8vIEB0cy1pZ25vcmVcblxuICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaDtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBgZGlzcGF0Y2hgIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fGZ1bmN0aW9ufSByZWR1eCBzdG9yZSdzIGBkaXNwYXRjaGAgZnVuY3Rpb25cclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXHJcbiAqIGltcG9ydCB7IHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKHsgdmFsdWUgfSkgPT4ge1xyXG4gKiAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKVxyXG4gKiAgIGNvbnN0IGluY3JlYXNlQ291bnRlciA9IHVzZUNhbGxiYWNrKCgpID0+IGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlYXNlLWNvdW50ZXInIH0pLCBbXSlcclxuICogICByZXR1cm4gKFxyXG4gKiAgICAgPGRpdj5cclxuICogICAgICAgPHNwYW4+e3ZhbHVlfTwvc3Bhbj5cclxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtpbmNyZWFzZUNvdW50ZXJ9PkluY3JlYXNlIGNvdW50ZXI8L2J1dHRvbj5cclxuICogICAgIDwvZGl2PlxyXG4gKiAgIClcclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZURpc3BhdGNoID0gLyojX19QVVJFX18qL2NyZWF0ZURpc3BhdGNoSG9vaygpOyIsIi8qKlxuICogQHJlbWl4LXJ1bi9yb3V0ZXIgdjEuMC4xXG4gKlxuICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vI3JlZ2lvbiBUeXBlcyBhbmQgQ29uc3RhbnRzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEFjdGlvbnMgcmVwcmVzZW50IHRoZSB0eXBlIG9mIGNoYW5nZSB0byBhIGxvY2F0aW9uIHZhbHVlLlxuICovXG52YXIgQWN0aW9uO1xuXG4oZnVuY3Rpb24gKEFjdGlvbikge1xuICAvKipcbiAgICogQSBQT1AgaW5kaWNhdGVzIGEgY2hhbmdlIHRvIGFuIGFyYml0cmFyeSBpbmRleCBpbiB0aGUgaGlzdG9yeSBzdGFjaywgc3VjaFxuICAgKiBhcyBhIGJhY2sgb3IgZm9yd2FyZCBuYXZpZ2F0aW9uLiBJdCBkb2VzIG5vdCBkZXNjcmliZSB0aGUgZGlyZWN0aW9uIG9mIHRoZVxuICAgKiBuYXZpZ2F0aW9uLCBvbmx5IHRoYXQgdGhlIGN1cnJlbnQgaW5kZXggY2hhbmdlZC5cbiAgICpcbiAgICogTm90ZTogVGhpcyBpcyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIG5ld2x5IGNyZWF0ZWQgaGlzdG9yeSBvYmplY3RzLlxuICAgKi9cbiAgQWN0aW9uW1wiUG9wXCJdID0gXCJQT1BcIjtcbiAgLyoqXG4gICAqIEEgUFVTSCBpbmRpY2F0ZXMgYSBuZXcgZW50cnkgYmVpbmcgYWRkZWQgdG8gdGhlIGhpc3Rvcnkgc3RhY2ssIHN1Y2ggYXMgd2hlblxuICAgKiBhIGxpbmsgaXMgY2xpY2tlZCBhbmQgYSBuZXcgcGFnZSBsb2Fkcy4gV2hlbiB0aGlzIGhhcHBlbnMsIGFsbCBzdWJzZXF1ZW50XG4gICAqIGVudHJpZXMgaW4gdGhlIHN0YWNrIGFyZSBsb3N0LlxuICAgKi9cblxuICBBY3Rpb25bXCJQdXNoXCJdID0gXCJQVVNIXCI7XG4gIC8qKlxuICAgKiBBIFJFUExBQ0UgaW5kaWNhdGVzIHRoZSBlbnRyeSBhdCB0aGUgY3VycmVudCBpbmRleCBpbiB0aGUgaGlzdG9yeSBzdGFja1xuICAgKiBiZWluZyByZXBsYWNlZCBieSBhIG5ldyBvbmUuXG4gICAqL1xuXG4gIEFjdGlvbltcIlJlcGxhY2VcIl0gPSBcIlJFUExBQ0VcIjtcbn0pKEFjdGlvbiB8fCAoQWN0aW9uID0ge30pKTtcblxuY29uc3QgUG9wU3RhdGVFdmVudFR5cGUgPSBcInBvcHN0YXRlXCI7XG4vKipcbiAqIE1lbW9yeSBoaXN0b3J5IHN0b3JlcyB0aGUgY3VycmVudCBsb2NhdGlvbiBpbiBtZW1vcnkuIEl0IGlzIGRlc2lnbmVkIGZvciB1c2VcbiAqIGluIHN0YXRlZnVsIG5vbi1icm93c2VyIGVudmlyb25tZW50cyBsaWtlIHRlc3RzIGFuZCBSZWFjdCBOYXRpdmUuXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlTWVtb3J5SGlzdG9yeShvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBsZXQge1xuICAgIGluaXRpYWxFbnRyaWVzID0gW1wiL1wiXSxcbiAgICBpbml0aWFsSW5kZXgsXG4gICAgdjVDb21wYXQgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgbGV0IGVudHJpZXM7IC8vIERlY2xhcmUgc28gd2UgY2FuIGFjY2VzcyBmcm9tIGNyZWF0ZU1lbW9yeUxvY2F0aW9uXG5cbiAgZW50cmllcyA9IGluaXRpYWxFbnRyaWVzLm1hcCgoZW50cnksIGluZGV4KSA9PiBjcmVhdGVNZW1vcnlMb2NhdGlvbihlbnRyeSwgdHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiID8gbnVsbCA6IGVudHJ5LnN0YXRlLCBpbmRleCA9PT0gMCA/IFwiZGVmYXVsdFwiIDogdW5kZWZpbmVkKSk7XG4gIGxldCBpbmRleCA9IGNsYW1wSW5kZXgoaW5pdGlhbEluZGV4ID09IG51bGwgPyBlbnRyaWVzLmxlbmd0aCAtIDEgOiBpbml0aWFsSW5kZXgpO1xuICBsZXQgYWN0aW9uID0gQWN0aW9uLlBvcDtcbiAgbGV0IGxpc3RlbmVyID0gbnVsbDtcblxuICBmdW5jdGlvbiBjbGFtcEluZGV4KG4pIHtcbiAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobiwgMCksIGVudHJpZXMubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24oKSB7XG4gICAgcmV0dXJuIGVudHJpZXNbaW5kZXhdO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTWVtb3J5TG9jYXRpb24odG8sIHN0YXRlLCBrZXkpIHtcbiAgICBpZiAoc3RhdGUgPT09IHZvaWQgMCkge1xuICAgICAgc3RhdGUgPSBudWxsO1xuICAgIH1cblxuICAgIGxldCBsb2NhdGlvbiA9IGNyZWF0ZUxvY2F0aW9uKGVudHJpZXMgPyBnZXRDdXJyZW50TG9jYXRpb24oKS5wYXRobmFtZSA6IFwiL1wiLCB0bywgc3RhdGUsIGtleSk7XG4gICAgd2FybmluZyQxKGxvY2F0aW9uLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gXCIvXCIsIFwicmVsYXRpdmUgcGF0aG5hbWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG1lbW9yeSBoaXN0b3J5OiBcIiArIEpTT04uc3RyaW5naWZ5KHRvKSk7XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xuICB9XG5cbiAgbGV0IGhpc3RvcnkgPSB7XG4gICAgZ2V0IGluZGV4KCkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH0sXG5cbiAgICBnZXQgYWN0aW9uKCkge1xuICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9LFxuXG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgcmV0dXJuIGdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgIH0sXG5cbiAgICBjcmVhdGVIcmVmKHRvKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHRvID09PSBcInN0cmluZ1wiID8gdG8gOiBjcmVhdGVQYXRoKHRvKTtcbiAgICB9LFxuXG4gICAgcHVzaCh0bywgc3RhdGUpIHtcbiAgICAgIGFjdGlvbiA9IEFjdGlvbi5QdXNoO1xuICAgICAgbGV0IG5leHRMb2NhdGlvbiA9IGNyZWF0ZU1lbW9yeUxvY2F0aW9uKHRvLCBzdGF0ZSk7XG4gICAgICBpbmRleCArPSAxO1xuICAgICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIGVudHJpZXMubGVuZ3RoLCBuZXh0TG9jYXRpb24pO1xuXG4gICAgICBpZiAodjVDb21wYXQgJiYgbGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogbmV4dExvY2F0aW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBsYWNlKHRvLCBzdGF0ZSkge1xuICAgICAgYWN0aW9uID0gQWN0aW9uLlJlcGxhY2U7XG4gICAgICBsZXQgbmV4dExvY2F0aW9uID0gY3JlYXRlTWVtb3J5TG9jYXRpb24odG8sIHN0YXRlKTtcbiAgICAgIGVudHJpZXNbaW5kZXhdID0gbmV4dExvY2F0aW9uO1xuXG4gICAgICBpZiAodjVDb21wYXQgJiYgbGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogbmV4dExvY2F0aW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBnbyhkZWx0YSkge1xuICAgICAgYWN0aW9uID0gQWN0aW9uLlBvcDtcbiAgICAgIGluZGV4ID0gY2xhbXBJbmRleChpbmRleCArIGRlbHRhKTtcblxuICAgICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgbG9jYXRpb246IGdldEN1cnJlbnRMb2NhdGlvbigpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsaXN0ZW4oZm4pIHtcbiAgICAgIGxpc3RlbmVyID0gZm47XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBsaXN0ZW5lciA9IG51bGw7XG4gICAgICB9O1xuICAgIH1cblxuICB9O1xuICByZXR1cm4gaGlzdG9yeTtcbn1cbi8qKlxuICogQnJvd3NlciBoaXN0b3J5IHN0b3JlcyB0aGUgbG9jYXRpb24gaW4gcmVndWxhciBVUkxzLiBUaGlzIGlzIHRoZSBzdGFuZGFyZCBmb3JcbiAqIG1vc3Qgd2ViIGFwcHMsIGJ1dCBpdCByZXF1aXJlcyBzb21lIGNvbmZpZ3VyYXRpb24gb24gdGhlIHNlcnZlciB0byBlbnN1cmUgeW91XG4gKiBzZXJ2ZSB0aGUgc2FtZSBhcHAgYXQgbXVsdGlwbGUgVVJMcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZW1peC1ydW4vaGlzdG9yeS90cmVlL21haW4vZG9jcy9hcGktcmVmZXJlbmNlLm1kI2NyZWF0ZWJyb3dzZXJoaXN0b3J5XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlQnJvd3Nlckhpc3Rvcnkob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQnJvd3NlckxvY2F0aW9uKHdpbmRvdywgZ2xvYmFsSGlzdG9yeSkge1xuICAgIGxldCB7XG4gICAgICBwYXRobmFtZSxcbiAgICAgIHNlYXJjaCxcbiAgICAgIGhhc2hcbiAgICB9ID0gd2luZG93LmxvY2F0aW9uO1xuICAgIHJldHVybiBjcmVhdGVMb2NhdGlvbihcIlwiLCB7XG4gICAgICBwYXRobmFtZSxcbiAgICAgIHNlYXJjaCxcbiAgICAgIGhhc2hcbiAgICB9LCAvLyBzdGF0ZSBkZWZhdWx0cyB0byBgbnVsbGAgYmVjYXVzZSBgd2luZG93Lmhpc3Rvcnkuc3RhdGVgIGRvZXNcbiAgICBnbG9iYWxIaXN0b3J5LnN0YXRlICYmIGdsb2JhbEhpc3Rvcnkuc3RhdGUudXNyIHx8IG51bGwsIGdsb2JhbEhpc3Rvcnkuc3RhdGUgJiYgZ2xvYmFsSGlzdG9yeS5zdGF0ZS5rZXkgfHwgXCJkZWZhdWx0XCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQnJvd3NlckhyZWYod2luZG93LCB0bykge1xuICAgIHJldHVybiB0eXBlb2YgdG8gPT09IFwic3RyaW5nXCIgPyB0byA6IGNyZWF0ZVBhdGgodG8pO1xuICB9XG5cbiAgcmV0dXJuIGdldFVybEJhc2VkSGlzdG9yeShjcmVhdGVCcm93c2VyTG9jYXRpb24sIGNyZWF0ZUJyb3dzZXJIcmVmLCBudWxsLCBvcHRpb25zKTtcbn1cbi8qKlxuICogSGFzaCBoaXN0b3J5IHN0b3JlcyB0aGUgbG9jYXRpb24gaW4gd2luZG93LmxvY2F0aW9uLmhhc2guIFRoaXMgbWFrZXMgaXQgaWRlYWxcbiAqIGZvciBzaXR1YXRpb25zIHdoZXJlIHlvdSBkb24ndCB3YW50IHRvIHNlbmQgdGhlIGxvY2F0aW9uIHRvIHRoZSBzZXJ2ZXIgZm9yXG4gKiBzb21lIHJlYXNvbiwgZWl0aGVyIGJlY2F1c2UgeW91IGRvIGNhbm5vdCBjb25maWd1cmUgaXQgb3IgdGhlIFVSTCBzcGFjZSBpc1xuICogcmVzZXJ2ZWQgZm9yIHNvbWV0aGluZyBlbHNlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlbWl4LXJ1bi9oaXN0b3J5L3RyZWUvbWFpbi9kb2NzL2FwaS1yZWZlcmVuY2UubWQjY3JlYXRlaGFzaGhpc3RvcnlcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVIYXNoSGlzdG9yeShvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVIYXNoTG9jYXRpb24od2luZG93LCBnbG9iYWxIaXN0b3J5KSB7XG4gICAgbGV0IHtcbiAgICAgIHBhdGhuYW1lID0gXCIvXCIsXG4gICAgICBzZWFyY2ggPSBcIlwiLFxuICAgICAgaGFzaCA9IFwiXCJcbiAgICB9ID0gcGFyc2VQYXRoKHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cigxKSk7XG4gICAgcmV0dXJuIGNyZWF0ZUxvY2F0aW9uKFwiXCIsIHtcbiAgICAgIHBhdGhuYW1lLFxuICAgICAgc2VhcmNoLFxuICAgICAgaGFzaFxuICAgIH0sIC8vIHN0YXRlIGRlZmF1bHRzIHRvIGBudWxsYCBiZWNhdXNlIGB3aW5kb3cuaGlzdG9yeS5zdGF0ZWAgZG9lc1xuICAgIGdsb2JhbEhpc3Rvcnkuc3RhdGUgJiYgZ2xvYmFsSGlzdG9yeS5zdGF0ZS51c3IgfHwgbnVsbCwgZ2xvYmFsSGlzdG9yeS5zdGF0ZSAmJiBnbG9iYWxIaXN0b3J5LnN0YXRlLmtleSB8fCBcImRlZmF1bHRcIik7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVIYXNoSHJlZih3aW5kb3csIHRvKSB7XG4gICAgbGV0IGJhc2UgPSB3aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJhc2VcIik7XG4gICAgbGV0IGhyZWYgPSBcIlwiO1xuXG4gICAgaWYgKGJhc2UgJiYgYmFzZS5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpKSB7XG4gICAgICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBsZXQgaGFzaEluZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuICAgICAgaHJlZiA9IGhhc2hJbmRleCA9PT0gLTEgPyB1cmwgOiB1cmwuc2xpY2UoMCwgaGFzaEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaHJlZiArIFwiI1wiICsgKHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIiA/IHRvIDogY3JlYXRlUGF0aCh0bykpO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVIYXNoTG9jYXRpb24obG9jYXRpb24sIHRvKSB7XG4gICAgd2FybmluZyQxKGxvY2F0aW9uLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gXCIvXCIsIFwicmVsYXRpdmUgcGF0aG5hbWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGhhc2ggaGlzdG9yeS5wdXNoKFwiICsgSlNPTi5zdHJpbmdpZnkodG8pICsgXCIpXCIpO1xuICB9XG5cbiAgcmV0dXJuIGdldFVybEJhc2VkSGlzdG9yeShjcmVhdGVIYXNoTG9jYXRpb24sIGNyZWF0ZUhhc2hIcmVmLCB2YWxpZGF0ZUhhc2hMb2NhdGlvbiwgb3B0aW9ucyk7XG59IC8vI2VuZHJlZ2lvblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vI3JlZ2lvbiBVVElMU1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gd2FybmluZyQxKGNvbmQsIG1lc3NhZ2UpIHtcbiAgaWYgKCFjb25kKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIpIGNvbnNvbGUud2FybihtZXNzYWdlKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBXZWxjb21lIHRvIGRlYnVnZ2luZyBoaXN0b3J5IVxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgZXJyb3IgaXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28geW91IGNhbiBtb3JlIGVhc2lseVxuICAgICAgLy8gZmluZCB0aGUgc291cmNlIGZvciBhIHdhcm5pbmcgdGhhdCBhcHBlYXJzIGluIHRoZSBjb25zb2xlIGJ5XG4gICAgICAvLyBlbmFibGluZyBcInBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIEphdmFTY3JpcHQgZGVidWdnZXIuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5KCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDgpO1xufVxuLyoqXG4gKiBGb3IgYnJvd3Nlci1iYXNlZCBoaXN0b3JpZXMsIHdlIGNvbWJpbmUgdGhlIHN0YXRlIGFuZCBrZXkgaW50byBhbiBvYmplY3RcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhpc3RvcnlTdGF0ZShsb2NhdGlvbikge1xuICByZXR1cm4ge1xuICAgIHVzcjogbG9jYXRpb24uc3RhdGUsXG4gICAga2V5OiBsb2NhdGlvbi5rZXlcbiAgfTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIExvY2F0aW9uIG9iamVjdCB3aXRoIGEgdW5pcXVlIGtleSBmcm9tIHRoZSBnaXZlbiBQYXRoXG4gKi9cblxuXG5mdW5jdGlvbiBjcmVhdGVMb2NhdGlvbihjdXJyZW50LCB0bywgc3RhdGUsIGtleSkge1xuICBpZiAoc3RhdGUgPT09IHZvaWQgMCkge1xuICAgIHN0YXRlID0gbnVsbDtcbiAgfVxuXG4gIGxldCBsb2NhdGlvbiA9IF9leHRlbmRzKHtcbiAgICBwYXRobmFtZTogdHlwZW9mIGN1cnJlbnQgPT09IFwic3RyaW5nXCIgPyBjdXJyZW50IDogY3VycmVudC5wYXRobmFtZSxcbiAgICBzZWFyY2g6IFwiXCIsXG4gICAgaGFzaDogXCJcIlxuICB9LCB0eXBlb2YgdG8gPT09IFwic3RyaW5nXCIgPyBwYXJzZVBhdGgodG8pIDogdG8sIHtcbiAgICBzdGF0ZSxcbiAgICAvLyBUT0RPOiBUaGlzIGNvdWxkIGJlIGNsZWFuZWQgdXAuICBwdXNoL3JlcGxhY2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgdGFrZVxuICAgIC8vIGZ1bGwgTG9jYXRpb25zIG5vdyBhbmQgYXZvaWQgdGhlIG5lZWQgdG8gcnVuIHRocm91Z2ggdGhpcyBmbG93IGF0IGFsbFxuICAgIC8vIEJ1dCB0aGF0J3MgYSBwcmV0dHkgYmlnIHJlZmFjdG9yIHRvIHRoZSBjdXJyZW50IHRlc3Qgc3VpdGUgc28gZ29pbmcgdG9cbiAgICAvLyBrZWVwIGFzIGlzIGZvciB0aGUgdGltZSBiZWluZyBhbmQganVzdCBsZXQgYW55IGluY29taW5nIGtleXMgdGFrZSBwcmVjZWRlbmNlXG4gICAga2V5OiB0byAmJiB0by5rZXkgfHwga2V5IHx8IGNyZWF0ZUtleSgpXG4gIH0pO1xuXG4gIHJldHVybiBsb2NhdGlvbjtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyBVUkwgcGF0aCBmcm9tIHRoZSBnaXZlbiBwYXRobmFtZSwgc2VhcmNoLCBhbmQgaGFzaCBjb21wb25lbnRzLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVBhdGgoX3JlZikge1xuICBsZXQge1xuICAgIHBhdGhuYW1lID0gXCIvXCIsXG4gICAgc2VhcmNoID0gXCJcIixcbiAgICBoYXNoID0gXCJcIlxuICB9ID0gX3JlZjtcbiAgaWYgKHNlYXJjaCAmJiBzZWFyY2ggIT09IFwiP1wiKSBwYXRobmFtZSArPSBzZWFyY2guY2hhckF0KDApID09PSBcIj9cIiA/IHNlYXJjaCA6IFwiP1wiICsgc2VhcmNoO1xuICBpZiAoaGFzaCAmJiBoYXNoICE9PSBcIiNcIikgcGF0aG5hbWUgKz0gaGFzaC5jaGFyQXQoMCkgPT09IFwiI1wiID8gaGFzaCA6IFwiI1wiICsgaGFzaDtcbiAgcmV0dXJuIHBhdGhuYW1lO1xufVxuLyoqXG4gKiBQYXJzZXMgYSBzdHJpbmcgVVJMIHBhdGggaW50byBpdHMgc2VwYXJhdGUgcGF0aG5hbWUsIHNlYXJjaCwgYW5kIGhhc2ggY29tcG9uZW50cy5cbiAqL1xuXG5mdW5jdGlvbiBwYXJzZVBhdGgocGF0aCkge1xuICBsZXQgcGFyc2VkUGF0aCA9IHt9O1xuXG4gIGlmIChwYXRoKSB7XG4gICAgbGV0IGhhc2hJbmRleCA9IHBhdGguaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaEluZGV4ID49IDApIHtcbiAgICAgIHBhcnNlZFBhdGguaGFzaCA9IHBhdGguc3Vic3RyKGhhc2hJbmRleCk7XG4gICAgICBwYXRoID0gcGF0aC5zdWJzdHIoMCwgaGFzaEluZGV4KTtcbiAgICB9XG5cbiAgICBsZXQgc2VhcmNoSW5kZXggPSBwYXRoLmluZGV4T2YoXCI/XCIpO1xuXG4gICAgaWYgKHNlYXJjaEluZGV4ID49IDApIHtcbiAgICAgIHBhcnNlZFBhdGguc2VhcmNoID0gcGF0aC5zdWJzdHIoc2VhcmNoSW5kZXgpO1xuICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDAsIHNlYXJjaEluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAocGF0aCkge1xuICAgICAgcGFyc2VkUGF0aC5wYXRobmFtZSA9IHBhdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZFBhdGg7XG59XG5cbmZ1bmN0aW9uIGdldFVybEJhc2VkSGlzdG9yeShnZXRMb2NhdGlvbiwgY3JlYXRlSHJlZiwgdmFsaWRhdGVMb2NhdGlvbiwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgbGV0IHtcbiAgICB3aW5kb3cgPSBkb2N1bWVudC5kZWZhdWx0VmlldyxcbiAgICB2NUNvbXBhdCA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBsZXQgZ2xvYmFsSGlzdG9yeSA9IHdpbmRvdy5oaXN0b3J5O1xuICBsZXQgYWN0aW9uID0gQWN0aW9uLlBvcDtcbiAgbGV0IGxpc3RlbmVyID0gbnVsbDtcblxuICBmdW5jdGlvbiBoYW5kbGVQb3AoKSB7XG4gICAgYWN0aW9uID0gQWN0aW9uLlBvcDtcblxuICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGxvY2F0aW9uOiBoaXN0b3J5LmxvY2F0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwdXNoKHRvLCBzdGF0ZSkge1xuICAgIGFjdGlvbiA9IEFjdGlvbi5QdXNoO1xuICAgIGxldCBsb2NhdGlvbiA9IGNyZWF0ZUxvY2F0aW9uKGhpc3RvcnkubG9jYXRpb24sIHRvLCBzdGF0ZSk7XG4gICAgaWYgKHZhbGlkYXRlTG9jYXRpb24pIHZhbGlkYXRlTG9jYXRpb24obG9jYXRpb24sIHRvKTtcbiAgICBsZXQgaGlzdG9yeVN0YXRlID0gZ2V0SGlzdG9yeVN0YXRlKGxvY2F0aW9uKTtcbiAgICBsZXQgdXJsID0gaGlzdG9yeS5jcmVhdGVIcmVmKGxvY2F0aW9uKTsgLy8gdHJ5Li4uY2F0Y2ggYmVjYXVzZSBpT1MgbGltaXRzIHVzIHRvIDEwMCBwdXNoU3RhdGUgY2FsbHMgOi9cblxuICAgIHRyeSB7XG4gICAgICBnbG9iYWxIaXN0b3J5LnB1c2hTdGF0ZShoaXN0b3J5U3RhdGUsIFwiXCIsIHVybCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFRoZXkgYXJlIGdvaW5nIHRvIGxvc2Ugc3RhdGUgaGVyZSwgYnV0IHRoZXJlIGlzIG5vIHJlYWxcbiAgICAgIC8vIHdheSB0byB3YXJuIHRoZW0gYWJvdXQgaXQgc2luY2UgdGhlIHBhZ2Ugd2lsbCByZWZyZXNoLi4uXG4gICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybCk7XG4gICAgfVxuXG4gICAgaWYgKHY1Q29tcGF0ICYmIGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGxhY2UodG8sIHN0YXRlKSB7XG4gICAgYWN0aW9uID0gQWN0aW9uLlJlcGxhY2U7XG4gICAgbGV0IGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24oaGlzdG9yeS5sb2NhdGlvbiwgdG8sIHN0YXRlKTtcbiAgICBpZiAodmFsaWRhdGVMb2NhdGlvbikgdmFsaWRhdGVMb2NhdGlvbihsb2NhdGlvbiwgdG8pO1xuICAgIGxldCBoaXN0b3J5U3RhdGUgPSBnZXRIaXN0b3J5U3RhdGUobG9jYXRpb24pO1xuICAgIGxldCB1cmwgPSBoaXN0b3J5LmNyZWF0ZUhyZWYobG9jYXRpb24pO1xuICAgIGdsb2JhbEhpc3RvcnkucmVwbGFjZVN0YXRlKGhpc3RvcnlTdGF0ZSwgXCJcIiwgdXJsKTtcblxuICAgIGlmICh2NUNvbXBhdCAmJiBsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IGhpc3RvcnkgPSB7XG4gICAgZ2V0IGFjdGlvbigpIHtcbiAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfSxcblxuICAgIGdldCBsb2NhdGlvbigpIHtcbiAgICAgIHJldHVybiBnZXRMb2NhdGlvbih3aW5kb3csIGdsb2JhbEhpc3RvcnkpO1xuICAgIH0sXG5cbiAgICBsaXN0ZW4oZm4pIHtcbiAgICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGhpc3Rvcnkgb25seSBhY2NlcHRzIG9uZSBhY3RpdmUgbGlzdGVuZXJcIik7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFBvcFN0YXRlRXZlbnRUeXBlLCBoYW5kbGVQb3ApO1xuICAgICAgbGlzdGVuZXIgPSBmbjtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFBvcFN0YXRlRXZlbnRUeXBlLCBoYW5kbGVQb3ApO1xuICAgICAgICBsaXN0ZW5lciA9IG51bGw7XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVIcmVmKHRvKSB7XG4gICAgICByZXR1cm4gY3JlYXRlSHJlZih3aW5kb3csIHRvKTtcbiAgICB9LFxuXG4gICAgcHVzaCxcbiAgICByZXBsYWNlLFxuXG4gICAgZ28obikge1xuICAgICAgcmV0dXJuIGdsb2JhbEhpc3RvcnkuZ28obik7XG4gICAgfVxuXG4gIH07XG4gIHJldHVybiBoaXN0b3J5O1xufSAvLyNlbmRyZWdpb25cblxudmFyIFJlc3VsdFR5cGU7XG5cbihmdW5jdGlvbiAoUmVzdWx0VHlwZSkge1xuICBSZXN1bHRUeXBlW1wiZGF0YVwiXSA9IFwiZGF0YVwiO1xuICBSZXN1bHRUeXBlW1wiZGVmZXJyZWRcIl0gPSBcImRlZmVycmVkXCI7XG4gIFJlc3VsdFR5cGVbXCJyZWRpcmVjdFwiXSA9IFwicmVkaXJlY3RcIjtcbiAgUmVzdWx0VHlwZVtcImVycm9yXCJdID0gXCJlcnJvclwiO1xufSkoUmVzdWx0VHlwZSB8fCAoUmVzdWx0VHlwZSA9IHt9KSk7IC8vIFdhbGsgdGhlIHJvdXRlIHRyZWUgZ2VuZXJhdGluZyB1bmlxdWUgSURzIHdoZXJlIG5lY2Vzc2FyeSBzbyB3ZSBhcmUgd29ya2luZ1xuLy8gc29sZWx5IHdpdGggQWdub3N0aWNEYXRhUm91dGVPYmplY3QncyB3aXRoaW4gdGhlIFJvdXRlclxuXG5cbmZ1bmN0aW9uIGNvbnZlcnRSb3V0ZXNUb0RhdGFSb3V0ZXMocm91dGVzLCBwYXJlbnRQYXRoLCBhbGxJZHMpIHtcbiAgaWYgKHBhcmVudFBhdGggPT09IHZvaWQgMCkge1xuICAgIHBhcmVudFBhdGggPSBbXTtcbiAgfVxuXG4gIGlmIChhbGxJZHMgPT09IHZvaWQgMCkge1xuICAgIGFsbElkcyA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIHJldHVybiByb3V0ZXMubWFwKChyb3V0ZSwgaW5kZXgpID0+IHtcbiAgICBsZXQgdHJlZVBhdGggPSBbLi4ucGFyZW50UGF0aCwgaW5kZXhdO1xuICAgIGxldCBpZCA9IHR5cGVvZiByb3V0ZS5pZCA9PT0gXCJzdHJpbmdcIiA/IHJvdXRlLmlkIDogdHJlZVBhdGguam9pbihcIi1cIik7XG4gICAgaW52YXJpYW50KCFhbGxJZHMuaGFzKGlkKSwgXCJGb3VuZCBhIHJvdXRlIGlkIGNvbGxpc2lvbiBvbiBpZCBcXFwiXCIgKyBpZCArIFwiXFxcIi4gIFJvdXRlIFwiICsgXCJpZCdzIG11c3QgYmUgZ2xvYmFsbHkgdW5pcXVlIHdpdGhpbiBEYXRhIFJvdXRlciB1c2FnZXNcIik7XG4gICAgYWxsSWRzLmFkZChpZCk7XG5cbiAgICBsZXQgZGF0YVJvdXRlID0gX2V4dGVuZHMoe30sIHJvdXRlLCB7XG4gICAgICBpZCxcbiAgICAgIGNoaWxkcmVuOiByb3V0ZS5jaGlsZHJlbiA/IGNvbnZlcnRSb3V0ZXNUb0RhdGFSb3V0ZXMocm91dGUuY2hpbGRyZW4sIHRyZWVQYXRoLCBhbGxJZHMpIDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YVJvdXRlO1xuICB9KTtcbn1cbi8qKlxuICogTWF0Y2hlcyB0aGUgZ2l2ZW4gcm91dGVzIHRvIGEgbG9jYXRpb24gYW5kIHJldHVybnMgdGhlIG1hdGNoIGRhdGEuXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L3V0aWxzL21hdGNoLXJvdXRlc1xuICovXG5cbmZ1bmN0aW9uIG1hdGNoUm91dGVzKHJvdXRlcywgbG9jYXRpb25BcmcsIGJhc2VuYW1lKSB7XG4gIGlmIChiYXNlbmFtZSA9PT0gdm9pZCAwKSB7XG4gICAgYmFzZW5hbWUgPSBcIi9cIjtcbiAgfVxuXG4gIGxldCBsb2NhdGlvbiA9IHR5cGVvZiBsb2NhdGlvbkFyZyA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlUGF0aChsb2NhdGlvbkFyZykgOiBsb2NhdGlvbkFyZztcbiAgbGV0IHBhdGhuYW1lID0gc3RyaXBCYXNlbmFtZShsb2NhdGlvbi5wYXRobmFtZSB8fCBcIi9cIiwgYmFzZW5hbWUpO1xuXG4gIGlmIChwYXRobmFtZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgYnJhbmNoZXMgPSBmbGF0dGVuUm91dGVzKHJvdXRlcyk7XG4gIHJhbmtSb3V0ZUJyYW5jaGVzKGJyYW5jaGVzKTtcbiAgbGV0IG1hdGNoZXMgPSBudWxsO1xuXG4gIGZvciAobGV0IGkgPSAwOyBtYXRjaGVzID09IG51bGwgJiYgaSA8IGJyYW5jaGVzLmxlbmd0aDsgKytpKSB7XG4gICAgbWF0Y2hlcyA9IG1hdGNoUm91dGVCcmFuY2goYnJhbmNoZXNbaV0sIHBhdGhuYW1lKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBmbGF0dGVuUm91dGVzKHJvdXRlcywgYnJhbmNoZXMsIHBhcmVudHNNZXRhLCBwYXJlbnRQYXRoKSB7XG4gIGlmIChicmFuY2hlcyA9PT0gdm9pZCAwKSB7XG4gICAgYnJhbmNoZXMgPSBbXTtcbiAgfVxuXG4gIGlmIChwYXJlbnRzTWV0YSA9PT0gdm9pZCAwKSB7XG4gICAgcGFyZW50c01ldGEgPSBbXTtcbiAgfVxuXG4gIGlmIChwYXJlbnRQYXRoID09PSB2b2lkIDApIHtcbiAgICBwYXJlbnRQYXRoID0gXCJcIjtcbiAgfVxuXG4gIHJvdXRlcy5mb3JFYWNoKChyb3V0ZSwgaW5kZXgpID0+IHtcbiAgICBsZXQgbWV0YSA9IHtcbiAgICAgIHJlbGF0aXZlUGF0aDogcm91dGUucGF0aCB8fCBcIlwiLFxuICAgICAgY2FzZVNlbnNpdGl2ZTogcm91dGUuY2FzZVNlbnNpdGl2ZSA9PT0gdHJ1ZSxcbiAgICAgIGNoaWxkcmVuSW5kZXg6IGluZGV4LFxuICAgICAgcm91dGVcbiAgICB9O1xuXG4gICAgaWYgKG1ldGEucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICBpbnZhcmlhbnQobWV0YS5yZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChwYXJlbnRQYXRoKSwgXCJBYnNvbHV0ZSByb3V0ZSBwYXRoIFxcXCJcIiArIG1ldGEucmVsYXRpdmVQYXRoICsgXCJcXFwiIG5lc3RlZCB1bmRlciBwYXRoIFwiICsgKFwiXFxcIlwiICsgcGFyZW50UGF0aCArIFwiXFxcIiBpcyBub3QgdmFsaWQuIEFuIGFic29sdXRlIGNoaWxkIHJvdXRlIHBhdGggXCIpICsgXCJtdXN0IHN0YXJ0IHdpdGggdGhlIGNvbWJpbmVkIHBhdGggb2YgYWxsIGl0cyBwYXJlbnQgcm91dGVzLlwiKTtcbiAgICAgIG1ldGEucmVsYXRpdmVQYXRoID0gbWV0YS5yZWxhdGl2ZVBhdGguc2xpY2UocGFyZW50UGF0aC5sZW5ndGgpO1xuICAgIH1cblxuICAgIGxldCBwYXRoID0gam9pblBhdGhzKFtwYXJlbnRQYXRoLCBtZXRhLnJlbGF0aXZlUGF0aF0pO1xuICAgIGxldCByb3V0ZXNNZXRhID0gcGFyZW50c01ldGEuY29uY2F0KG1ldGEpOyAvLyBBZGQgdGhlIGNoaWxkcmVuIGJlZm9yZSBhZGRpbmcgdGhpcyByb3V0ZSB0byB0aGUgYXJyYXkgc28gd2UgdHJhdmVyc2UgdGhlXG4gICAgLy8gcm91dGUgdHJlZSBkZXB0aC1maXJzdCBhbmQgY2hpbGQgcm91dGVzIGFwcGVhciBiZWZvcmUgdGhlaXIgcGFyZW50cyBpblxuICAgIC8vIHRoZSBcImZsYXR0ZW5lZFwiIHZlcnNpb24uXG5cbiAgICBpZiAocm91dGUuY2hpbGRyZW4gJiYgcm91dGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgaW52YXJpYW50KHJvdXRlLmluZGV4ICE9PSB0cnVlLCBcIkluZGV4IHJvdXRlcyBtdXN0IG5vdCBoYXZlIGNoaWxkIHJvdXRlcy4gUGxlYXNlIHJlbW92ZSBcIiArIChcImFsbCBjaGlsZCByb3V0ZXMgZnJvbSByb3V0ZSBwYXRoIFxcXCJcIiArIHBhdGggKyBcIlxcXCIuXCIpKTtcbiAgICAgIGZsYXR0ZW5Sb3V0ZXMocm91dGUuY2hpbGRyZW4sIGJyYW5jaGVzLCByb3V0ZXNNZXRhLCBwYXRoKTtcbiAgICB9IC8vIFJvdXRlcyB3aXRob3V0IGEgcGF0aCBzaG91bGRuJ3QgZXZlciBtYXRjaCBieSB0aGVtc2VsdmVzIHVubGVzcyB0aGV5IGFyZVxuICAgIC8vIGluZGV4IHJvdXRlcywgc28gZG9uJ3QgYWRkIHRoZW0gdG8gdGhlIGxpc3Qgb2YgcG9zc2libGUgYnJhbmNoZXMuXG5cblxuICAgIGlmIChyb3V0ZS5wYXRoID09IG51bGwgJiYgIXJvdXRlLmluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYnJhbmNoZXMucHVzaCh7XG4gICAgICBwYXRoLFxuICAgICAgc2NvcmU6IGNvbXB1dGVTY29yZShwYXRoLCByb3V0ZS5pbmRleCksXG4gICAgICByb3V0ZXNNZXRhXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gYnJhbmNoZXM7XG59XG5cbmZ1bmN0aW9uIHJhbmtSb3V0ZUJyYW5jaGVzKGJyYW5jaGVzKSB7XG4gIGJyYW5jaGVzLnNvcnQoKGEsIGIpID0+IGEuc2NvcmUgIT09IGIuc2NvcmUgPyBiLnNjb3JlIC0gYS5zY29yZSAvLyBIaWdoZXIgc2NvcmUgZmlyc3RcbiAgOiBjb21wYXJlSW5kZXhlcyhhLnJvdXRlc01ldGEubWFwKG1ldGEgPT4gbWV0YS5jaGlsZHJlbkluZGV4KSwgYi5yb3V0ZXNNZXRhLm1hcChtZXRhID0+IG1ldGEuY2hpbGRyZW5JbmRleCkpKTtcbn1cblxuY29uc3QgcGFyYW1SZSA9IC9eOlxcdyskLztcbmNvbnN0IGR5bmFtaWNTZWdtZW50VmFsdWUgPSAzO1xuY29uc3QgaW5kZXhSb3V0ZVZhbHVlID0gMjtcbmNvbnN0IGVtcHR5U2VnbWVudFZhbHVlID0gMTtcbmNvbnN0IHN0YXRpY1NlZ21lbnRWYWx1ZSA9IDEwO1xuY29uc3Qgc3BsYXRQZW5hbHR5ID0gLTI7XG5cbmNvbnN0IGlzU3BsYXQgPSBzID0+IHMgPT09IFwiKlwiO1xuXG5mdW5jdGlvbiBjb21wdXRlU2NvcmUocGF0aCwgaW5kZXgpIHtcbiAgbGV0IHNlZ21lbnRzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gIGxldCBpbml0aWFsU2NvcmUgPSBzZWdtZW50cy5sZW5ndGg7XG5cbiAgaWYgKHNlZ21lbnRzLnNvbWUoaXNTcGxhdCkpIHtcbiAgICBpbml0aWFsU2NvcmUgKz0gc3BsYXRQZW5hbHR5O1xuICB9XG5cbiAgaWYgKGluZGV4KSB7XG4gICAgaW5pdGlhbFNjb3JlICs9IGluZGV4Um91dGVWYWx1ZTtcbiAgfVxuXG4gIHJldHVybiBzZWdtZW50cy5maWx0ZXIocyA9PiAhaXNTcGxhdChzKSkucmVkdWNlKChzY29yZSwgc2VnbWVudCkgPT4gc2NvcmUgKyAocGFyYW1SZS50ZXN0KHNlZ21lbnQpID8gZHluYW1pY1NlZ21lbnRWYWx1ZSA6IHNlZ21lbnQgPT09IFwiXCIgPyBlbXB0eVNlZ21lbnRWYWx1ZSA6IHN0YXRpY1NlZ21lbnRWYWx1ZSksIGluaXRpYWxTY29yZSk7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVJbmRleGVzKGEsIGIpIHtcbiAgbGV0IHNpYmxpbmdzID0gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuc2xpY2UoMCwgLTEpLmV2ZXJ5KChuLCBpKSA9PiBuID09PSBiW2ldKTtcbiAgcmV0dXJuIHNpYmxpbmdzID8gLy8gSWYgdHdvIHJvdXRlcyBhcmUgc2libGluZ3MsIHdlIHNob3VsZCB0cnkgdG8gbWF0Y2ggdGhlIGVhcmxpZXIgc2libGluZ1xuICAvLyBmaXJzdC4gVGhpcyBhbGxvd3MgcGVvcGxlIHRvIGhhdmUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgbWF0Y2hpbmdcbiAgLy8gYmVoYXZpb3IgYnkgc2ltcGx5IHB1dHRpbmcgcm91dGVzIHdpdGggaWRlbnRpY2FsIHBhdGhzIGluIHRoZSBvcmRlciB0aGV5XG4gIC8vIHdhbnQgdGhlbSB0cmllZC5cbiAgYVthLmxlbmd0aCAtIDFdIC0gYltiLmxlbmd0aCAtIDFdIDogLy8gT3RoZXJ3aXNlLCBpdCBkb2Vzbid0IHJlYWxseSBtYWtlIHNlbnNlIHRvIHJhbmsgbm9uLXNpYmxpbmdzIGJ5IGluZGV4LFxuICAvLyBzbyB0aGV5IHNvcnQgZXF1YWxseS5cbiAgMDtcbn1cblxuZnVuY3Rpb24gbWF0Y2hSb3V0ZUJyYW5jaChicmFuY2gsIHBhdGhuYW1lKSB7XG4gIGxldCB7XG4gICAgcm91dGVzTWV0YVxuICB9ID0gYnJhbmNoO1xuICBsZXQgbWF0Y2hlZFBhcmFtcyA9IHt9O1xuICBsZXQgbWF0Y2hlZFBhdGhuYW1lID0gXCIvXCI7XG4gIGxldCBtYXRjaGVzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3V0ZXNNZXRhLmxlbmd0aDsgKytpKSB7XG4gICAgbGV0IG1ldGEgPSByb3V0ZXNNZXRhW2ldO1xuICAgIGxldCBlbmQgPSBpID09PSByb3V0ZXNNZXRhLmxlbmd0aCAtIDE7XG4gICAgbGV0IHJlbWFpbmluZ1BhdGhuYW1lID0gbWF0Y2hlZFBhdGhuYW1lID09PSBcIi9cIiA/IHBhdGhuYW1lIDogcGF0aG5hbWUuc2xpY2UobWF0Y2hlZFBhdGhuYW1lLmxlbmd0aCkgfHwgXCIvXCI7XG4gICAgbGV0IG1hdGNoID0gbWF0Y2hQYXRoKHtcbiAgICAgIHBhdGg6IG1ldGEucmVsYXRpdmVQYXRoLFxuICAgICAgY2FzZVNlbnNpdGl2ZTogbWV0YS5jYXNlU2Vuc2l0aXZlLFxuICAgICAgZW5kXG4gICAgfSwgcmVtYWluaW5nUGF0aG5hbWUpO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuICAgIE9iamVjdC5hc3NpZ24obWF0Y2hlZFBhcmFtcywgbWF0Y2gucGFyYW1zKTtcbiAgICBsZXQgcm91dGUgPSBtZXRhLnJvdXRlO1xuICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAvLyBUT0RPOiBDYW4gdGhpcyBhcyBiZSBhdm9pZGVkP1xuICAgICAgcGFyYW1zOiBtYXRjaGVkUGFyYW1zLFxuICAgICAgcGF0aG5hbWU6IGpvaW5QYXRocyhbbWF0Y2hlZFBhdGhuYW1lLCBtYXRjaC5wYXRobmFtZV0pLFxuICAgICAgcGF0aG5hbWVCYXNlOiBub3JtYWxpemVQYXRobmFtZShqb2luUGF0aHMoW21hdGNoZWRQYXRobmFtZSwgbWF0Y2gucGF0aG5hbWVCYXNlXSkpLFxuICAgICAgcm91dGVcbiAgICB9KTtcblxuICAgIGlmIChtYXRjaC5wYXRobmFtZUJhc2UgIT09IFwiL1wiKSB7XG4gICAgICBtYXRjaGVkUGF0aG5hbWUgPSBqb2luUGF0aHMoW21hdGNoZWRQYXRobmFtZSwgbWF0Y2gucGF0aG5hbWVCYXNlXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFJldHVybnMgYSBwYXRoIHdpdGggcGFyYW1zIGludGVycG9sYXRlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvdXRpbHMvZ2VuZXJhdGUtcGF0aFxuICovXG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVQYXRoKHBhdGgsIHBhcmFtcykge1xuICBpZiAocGFyYW1zID09PSB2b2lkIDApIHtcbiAgICBwYXJhbXMgPSB7fTtcbiAgfVxuXG4gIHJldHVybiBwYXRoLnJlcGxhY2UoLzooXFx3KykvZywgKF8sIGtleSkgPT4ge1xuICAgIGludmFyaWFudChwYXJhbXNba2V5XSAhPSBudWxsLCBcIk1pc3NpbmcgXFxcIjpcIiArIGtleSArIFwiXFxcIiBwYXJhbVwiKTtcbiAgICByZXR1cm4gcGFyYW1zW2tleV07XG4gIH0pLnJlcGxhY2UoLyhcXC8/KVxcKi8sIChfLCBwcmVmaXgsIF9fLCBzdHIpID0+IHtcbiAgICBjb25zdCBzdGFyID0gXCIqXCI7XG5cbiAgICBpZiAocGFyYW1zW3N0YXJdID09IG51bGwpIHtcbiAgICAgIC8vIElmIG5vIHNwbGF0IHdhcyBwcm92aWRlZCwgdHJpbSB0aGUgdHJhaWxpbmcgc2xhc2ggX3VubGVzc18gaXQnc1xuICAgICAgLy8gdGhlIGVudGlyZSBwYXRoXG4gICAgICByZXR1cm4gc3RyID09PSBcIi8qXCIgPyBcIi9cIiA6IFwiXCI7XG4gICAgfSAvLyBBcHBseSB0aGUgc3BsYXRcblxuXG4gICAgcmV0dXJuIFwiXCIgKyBwcmVmaXggKyBwYXJhbXNbc3Rhcl07XG4gIH0pO1xufVxuLyoqXG4gKiBQZXJmb3JtcyBwYXR0ZXJuIG1hdGNoaW5nIG9uIGEgVVJMIHBhdGhuYW1lIGFuZCByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0XG4gKiB0aGUgbWF0Y2guXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L3V0aWxzL21hdGNoLXBhdGhcbiAqL1xuXG5mdW5jdGlvbiBtYXRjaFBhdGgocGF0dGVybiwgcGF0aG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSBcInN0cmluZ1wiKSB7XG4gICAgcGF0dGVybiA9IHtcbiAgICAgIHBhdGg6IHBhdHRlcm4sXG4gICAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICAgIGVuZDogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBsZXQgW21hdGNoZXIsIHBhcmFtTmFtZXNdID0gY29tcGlsZVBhdGgocGF0dGVybi5wYXRoLCBwYXR0ZXJuLmNhc2VTZW5zaXRpdmUsIHBhdHRlcm4uZW5kKTtcbiAgbGV0IG1hdGNoID0gcGF0aG5hbWUubWF0Y2gobWF0Y2hlcik7XG4gIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuICBsZXQgbWF0Y2hlZFBhdGhuYW1lID0gbWF0Y2hbMF07XG4gIGxldCBwYXRobmFtZUJhc2UgPSBtYXRjaGVkUGF0aG5hbWUucmVwbGFjZSgvKC4pXFwvKyQvLCBcIiQxXCIpO1xuICBsZXQgY2FwdHVyZUdyb3VwcyA9IG1hdGNoLnNsaWNlKDEpO1xuICBsZXQgcGFyYW1zID0gcGFyYW1OYW1lcy5yZWR1Y2UoKG1lbW8sIHBhcmFtTmFtZSwgaW5kZXgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGNvbXB1dGUgdGhlIHBhdGhuYW1lQmFzZSBoZXJlIHVzaW5nIHRoZSByYXcgc3BsYXQgdmFsdWVcbiAgICAvLyBpbnN0ZWFkIG9mIHVzaW5nIHBhcmFtc1tcIipcIl0gbGF0ZXIgYmVjYXVzZSBpdCB3aWxsIGJlIGRlY29kZWQgdGhlblxuICAgIGlmIChwYXJhbU5hbWUgPT09IFwiKlwiKSB7XG4gICAgICBsZXQgc3BsYXRWYWx1ZSA9IGNhcHR1cmVHcm91cHNbaW5kZXhdIHx8IFwiXCI7XG4gICAgICBwYXRobmFtZUJhc2UgPSBtYXRjaGVkUGF0aG5hbWUuc2xpY2UoMCwgbWF0Y2hlZFBhdGhuYW1lLmxlbmd0aCAtIHNwbGF0VmFsdWUubGVuZ3RoKS5yZXBsYWNlKC8oLilcXC8rJC8sIFwiJDFcIik7XG4gICAgfVxuXG4gICAgbWVtb1twYXJhbU5hbWVdID0gc2FmZWx5RGVjb2RlVVJJQ29tcG9uZW50KGNhcHR1cmVHcm91cHNbaW5kZXhdIHx8IFwiXCIsIHBhcmFtTmFtZSk7XG4gICAgcmV0dXJuIG1lbW87XG4gIH0sIHt9KTtcbiAgcmV0dXJuIHtcbiAgICBwYXJhbXMsXG4gICAgcGF0aG5hbWU6IG1hdGNoZWRQYXRobmFtZSxcbiAgICBwYXRobmFtZUJhc2UsXG4gICAgcGF0dGVyblxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21waWxlUGF0aChwYXRoLCBjYXNlU2Vuc2l0aXZlLCBlbmQpIHtcbiAgaWYgKGNhc2VTZW5zaXRpdmUgPT09IHZvaWQgMCkge1xuICAgIGNhc2VTZW5zaXRpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChlbmQgPT09IHZvaWQgMCkge1xuICAgIGVuZCA9IHRydWU7XG4gIH1cblxuICB3YXJuaW5nKHBhdGggPT09IFwiKlwiIHx8ICFwYXRoLmVuZHNXaXRoKFwiKlwiKSB8fCBwYXRoLmVuZHNXaXRoKFwiLypcIiksIFwiUm91dGUgcGF0aCBcXFwiXCIgKyBwYXRoICsgXCJcXFwiIHdpbGwgYmUgdHJlYXRlZCBhcyBpZiBpdCB3ZXJlIFwiICsgKFwiXFxcIlwiICsgcGF0aC5yZXBsYWNlKC9cXCokLywgXCIvKlwiKSArIFwiXFxcIiBiZWNhdXNlIHRoZSBgKmAgY2hhcmFjdGVyIG11c3QgXCIpICsgXCJhbHdheXMgZm9sbG93IGEgYC9gIGluIHRoZSBwYXR0ZXJuLiBUbyBnZXQgcmlkIG9mIHRoaXMgd2FybmluZywgXCIgKyAoXCJwbGVhc2UgY2hhbmdlIHRoZSByb3V0ZSBwYXRoIHRvIFxcXCJcIiArIHBhdGgucmVwbGFjZSgvXFwqJC8sIFwiLypcIikgKyBcIlxcXCIuXCIpKTtcbiAgbGV0IHBhcmFtTmFtZXMgPSBbXTtcbiAgbGV0IHJlZ2V4cFNvdXJjZSA9IFwiXlwiICsgcGF0aC5yZXBsYWNlKC9cXC8qXFwqPyQvLCBcIlwiKSAvLyBJZ25vcmUgdHJhaWxpbmcgLyBhbmQgLyosIHdlJ2xsIGhhbmRsZSBpdCBiZWxvd1xuICAucmVwbGFjZSgvXlxcLyovLCBcIi9cIikgLy8gTWFrZSBzdXJlIGl0IGhhcyBhIGxlYWRpbmcgL1xuICAucmVwbGFjZSgvW1xcXFwuKiteJD97fXwoKVtcXF1dL2csIFwiXFxcXCQmXCIpIC8vIEVzY2FwZSBzcGVjaWFsIHJlZ2V4IGNoYXJzXG4gIC5yZXBsYWNlKC86KFxcdyspL2csIChfLCBwYXJhbU5hbWUpID0+IHtcbiAgICBwYXJhbU5hbWVzLnB1c2gocGFyYW1OYW1lKTtcbiAgICByZXR1cm4gXCIoW15cXFxcL10rKVwiO1xuICB9KTtcblxuICBpZiAocGF0aC5lbmRzV2l0aChcIipcIikpIHtcbiAgICBwYXJhbU5hbWVzLnB1c2goXCIqXCIpO1xuICAgIHJlZ2V4cFNvdXJjZSArPSBwYXRoID09PSBcIipcIiB8fCBwYXRoID09PSBcIi8qXCIgPyBcIiguKikkXCIgLy8gQWxyZWFkeSBtYXRjaGVkIHRoZSBpbml0aWFsIC8sIGp1c3QgbWF0Y2ggdGhlIHJlc3RcbiAgICA6IFwiKD86XFxcXC8oLispfFxcXFwvKikkXCI7IC8vIERvbid0IGluY2x1ZGUgdGhlIC8gaW4gcGFyYW1zW1wiKlwiXVxuICB9IGVsc2Uge1xuICAgIHJlZ2V4cFNvdXJjZSArPSBlbmQgPyBcIlxcXFwvKiRcIiAvLyBXaGVuIG1hdGNoaW5nIHRvIHRoZSBlbmQsIGlnbm9yZSB0cmFpbGluZyBzbGFzaGVzXG4gICAgOiAvLyBPdGhlcndpc2UsIG1hdGNoIGEgd29yZCBib3VuZGFyeSBvciBhIHByb2NlZWRpbmcgLy4gVGhlIHdvcmQgYm91bmRhcnkgcmVzdHJpY3RzXG4gICAgLy8gcGFyZW50IHJvdXRlcyB0byBtYXRjaGluZyBvbmx5IHRoZWlyIG93biB3b3JkcyBhbmQgbm90aGluZyBtb3JlLCBlLmcuIHBhcmVudFxuICAgIC8vIHJvdXRlIFwiL2hvbWVcIiBzaG91bGQgbm90IG1hdGNoIFwiL2hvbWUyXCIuXG4gICAgLy8gQWRkaXRpb25hbGx5LCBhbGxvdyBwYXRocyBzdGFydGluZyB3aXRoIGAuYCwgYC1gLCBgfmAsIGFuZCB1cmwtZW5jb2RlZCBlbnRpdGllcyxcbiAgICAvLyBidXQgZG8gbm90IGNvbnN1bWUgdGhlIGNoYXJhY3RlciBpbiB0aGUgbWF0Y2hlZCBwYXRoIHNvIHRoZXkgY2FuIG1hdGNoIGFnYWluc3RcbiAgICAvLyBuZXN0ZWQgcGF0aHMuXG4gICAgXCIoPzooPz1bQC5+LV18JVswLTlBLUZdezJ9KXxcXFxcYnxcXFxcL3wkKVwiO1xuICB9XG5cbiAgbGV0IG1hdGNoZXIgPSBuZXcgUmVnRXhwKHJlZ2V4cFNvdXJjZSwgY2FzZVNlbnNpdGl2ZSA/IHVuZGVmaW5lZCA6IFwiaVwiKTtcbiAgcmV0dXJuIFttYXRjaGVyLCBwYXJhbU5hbWVzXTtcbn1cblxuZnVuY3Rpb24gc2FmZWx5RGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlLCBwYXJhbU5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB3YXJuaW5nKGZhbHNlLCBcIlRoZSB2YWx1ZSBmb3IgdGhlIFVSTCBwYXJhbSBcXFwiXCIgKyBwYXJhbU5hbWUgKyBcIlxcXCIgd2lsbCBub3QgYmUgZGVjb2RlZCBiZWNhdXNlXCIgKyAoXCIgdGhlIHN0cmluZyBcXFwiXCIgKyB2YWx1ZSArIFwiXFxcIiBpcyBhIG1hbGZvcm1lZCBVUkwgc2VnbWVudC4gVGhpcyBpcyBwcm9iYWJseVwiKSArIChcIiBkdWUgdG8gYSBiYWQgcGVyY2VudCBlbmNvZGluZyAoXCIgKyBlcnJvciArIFwiKS5cIikpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gc3RyaXBCYXNlbmFtZShwYXRobmFtZSwgYmFzZW5hbWUpIHtcbiAgaWYgKGJhc2VuYW1lID09PSBcIi9cIikgcmV0dXJuIHBhdGhuYW1lO1xuXG4gIGlmICghcGF0aG5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGJhc2VuYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gV2Ugd2FudCB0byBsZWF2ZSB0cmFpbGluZyBzbGFzaCBiZWhhdmlvciBpbiB0aGUgdXNlcidzIGNvbnRyb2wsIHNvIGlmIHRoZXlcbiAgLy8gc3BlY2lmeSBhIGJhc2VuYW1lIHdpdGggYSB0cmFpbGluZyBzbGFzaCwgd2Ugc2hvdWxkIHN1cHBvcnQgaXRcblxuXG4gIGxldCBzdGFydEluZGV4ID0gYmFzZW5hbWUuZW5kc1dpdGgoXCIvXCIpID8gYmFzZW5hbWUubGVuZ3RoIC0gMSA6IGJhc2VuYW1lLmxlbmd0aDtcbiAgbGV0IG5leHRDaGFyID0gcGF0aG5hbWUuY2hhckF0KHN0YXJ0SW5kZXgpO1xuXG4gIGlmIChuZXh0Q2hhciAmJiBuZXh0Q2hhciAhPT0gXCIvXCIpIHtcbiAgICAvLyBwYXRobmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIGJhc2VuYW1lL1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHBhdGhuYW1lLnNsaWNlKHN0YXJ0SW5kZXgpIHx8IFwiL1wiO1xufVxuZnVuY3Rpb24gaW52YXJpYW50KHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gd2FybmluZyhjb25kLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiKSBjb25zb2xlLndhcm4obWVzc2FnZSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgUm91dGVyIVxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgZXJyb3IgaXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28geW91IGNhbiBtb3JlIGVhc2lseVxuICAgICAgLy8gZmluZCB0aGUgc291cmNlIGZvciBhIHdhcm5pbmcgdGhhdCBhcHBlYXJzIGluIHRoZSBjb25zb2xlIGJ5XG4gICAgICAvLyBlbmFibGluZyBcInBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIEphdmFTY3JpcHQgZGVidWdnZXIuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbn1cbi8qKlxuICogUmV0dXJucyBhIHJlc29sdmVkIHBhdGggb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBwYXRobmFtZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvdXRpbHMvcmVzb2x2ZS1wYXRoXG4gKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVBhdGgodG8sIGZyb21QYXRobmFtZSkge1xuICBpZiAoZnJvbVBhdGhuYW1lID09PSB2b2lkIDApIHtcbiAgICBmcm9tUGF0aG5hbWUgPSBcIi9cIjtcbiAgfVxuXG4gIGxldCB7XG4gICAgcGF0aG5hbWU6IHRvUGF0aG5hbWUsXG4gICAgc2VhcmNoID0gXCJcIixcbiAgICBoYXNoID0gXCJcIlxuICB9ID0gdHlwZW9mIHRvID09PSBcInN0cmluZ1wiID8gcGFyc2VQYXRoKHRvKSA6IHRvO1xuICBsZXQgcGF0aG5hbWUgPSB0b1BhdGhuYW1lID8gdG9QYXRobmFtZS5zdGFydHNXaXRoKFwiL1wiKSA/IHRvUGF0aG5hbWUgOiByZXNvbHZlUGF0aG5hbWUodG9QYXRobmFtZSwgZnJvbVBhdGhuYW1lKSA6IGZyb21QYXRobmFtZTtcbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZSxcbiAgICBzZWFyY2g6IG5vcm1hbGl6ZVNlYXJjaChzZWFyY2gpLFxuICAgIGhhc2g6IG5vcm1hbGl6ZUhhc2goaGFzaClcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVBhdGhuYW1lKHJlbGF0aXZlUGF0aCwgZnJvbVBhdGhuYW1lKSB7XG4gIGxldCBzZWdtZW50cyA9IGZyb21QYXRobmFtZS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpLnNwbGl0KFwiL1wiKTtcbiAgbGV0IHJlbGF0aXZlU2VnbWVudHMgPSByZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpO1xuICByZWxhdGl2ZVNlZ21lbnRzLmZvckVhY2goc2VnbWVudCA9PiB7XG4gICAgaWYgKHNlZ21lbnQgPT09IFwiLi5cIikge1xuICAgICAgLy8gS2VlcCB0aGUgcm9vdCBcIlwiIHNlZ21lbnQgc28gdGhlIHBhdGhuYW1lIHN0YXJ0cyBhdCAvXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID4gMSkgc2VnbWVudHMucG9wKCk7XG4gICAgfSBlbHNlIGlmIChzZWdtZW50ICE9PSBcIi5cIikge1xuICAgICAgc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID4gMSA/IHNlZ21lbnRzLmpvaW4oXCIvXCIpIDogXCIvXCI7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiByZXNvbHZlVG8odG9BcmcsIHJvdXRlUGF0aG5hbWVzLCBsb2NhdGlvblBhdGhuYW1lLCBpc1BhdGhSZWxhdGl2ZSkge1xuICBpZiAoaXNQYXRoUmVsYXRpdmUgPT09IHZvaWQgMCkge1xuICAgIGlzUGF0aFJlbGF0aXZlID0gZmFsc2U7XG4gIH1cblxuICBsZXQgdG8gPSB0eXBlb2YgdG9BcmcgPT09IFwic3RyaW5nXCIgPyBwYXJzZVBhdGgodG9BcmcpIDogX2V4dGVuZHMoe30sIHRvQXJnKTtcbiAgbGV0IGlzRW1wdHlQYXRoID0gdG9BcmcgPT09IFwiXCIgfHwgdG8ucGF0aG5hbWUgPT09IFwiXCI7XG4gIGxldCB0b1BhdGhuYW1lID0gaXNFbXB0eVBhdGggPyBcIi9cIiA6IHRvLnBhdGhuYW1lO1xuICBsZXQgZnJvbTsgLy8gUm91dGluZyBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwYXRobmFtZSBpZiBleHBsaWNpdGx5IHJlcXVlc3RlZC5cbiAgLy9cbiAgLy8gSWYgYSBwYXRobmFtZSBpcyBleHBsaWNpdGx5IHByb3ZpZGVkIGluIGB0b2AsIGl0IHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGVcbiAgLy8gcm91dGUgY29udGV4dC4gVGhpcyBpcyBleHBsYWluZWQgaW4gYE5vdGUgb24gYDxMaW5rIHRvPmAgdmFsdWVzYCBpbiBvdXJcbiAgLy8gbWlncmF0aW9uIGd1aWRlIGZyb20gdjUgYXMgYSBtZWFucyBvZiBkaXNhbWJpZ3VhdGlvbiBiZXR3ZWVuIGB0b2AgdmFsdWVzXG4gIC8vIHRoYXQgYmVnaW4gd2l0aCBgL2AgYW5kIHRob3NlIHRoYXQgZG8gbm90LiBIb3dldmVyLCB0aGlzIGlzIHByb2JsZW1hdGljIGZvclxuICAvLyBgdG9gIHZhbHVlcyB0aGF0IGRvIG5vdCBwcm92aWRlIGEgcGF0aG5hbWUuIGB0b2AgY2FuIHNpbXBseSBiZSBhIHNlYXJjaCBvclxuICAvLyBoYXNoIHN0cmluZywgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgYXNzdW1lIHRoYXQgdGhlIG5hdmlnYXRpb24gaXMgcmVsYXRpdmVcbiAgLy8gdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24ncyBwYXRobmFtZSBhbmQgKm5vdCogdGhlIHJvdXRlIHBhdGhuYW1lLlxuXG4gIGlmIChpc1BhdGhSZWxhdGl2ZSB8fCB0b1BhdGhuYW1lID09IG51bGwpIHtcbiAgICBmcm9tID0gbG9jYXRpb25QYXRobmFtZTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgcm91dGVQYXRobmFtZUluZGV4ID0gcm91dGVQYXRobmFtZXMubGVuZ3RoIC0gMTtcblxuICAgIGlmICh0b1BhdGhuYW1lLnN0YXJ0c1dpdGgoXCIuLlwiKSkge1xuICAgICAgbGV0IHRvU2VnbWVudHMgPSB0b1BhdGhuYW1lLnNwbGl0KFwiL1wiKTsgLy8gRWFjaCBsZWFkaW5nIC4uIHNlZ21lbnQgbWVhbnMgXCJnbyB1cCBvbmUgcm91dGVcIiBpbnN0ZWFkIG9mIFwiZ28gdXAgb25lXG4gICAgICAvLyBVUkwgc2VnbWVudFwiLiAgVGhpcyBpcyBhIGtleSBkaWZmZXJlbmNlIGZyb20gaG93IDxhIGhyZWY+IHdvcmtzIGFuZCBhXG4gICAgICAvLyBtYWpvciByZWFzb24gd2UgY2FsbCB0aGlzIGEgXCJ0b1wiIHZhbHVlIGluc3RlYWQgb2YgYSBcImhyZWZcIi5cblxuICAgICAgd2hpbGUgKHRvU2VnbWVudHNbMF0gPT09IFwiLi5cIikge1xuICAgICAgICB0b1NlZ21lbnRzLnNoaWZ0KCk7XG4gICAgICAgIHJvdXRlUGF0aG5hbWVJbmRleCAtPSAxO1xuICAgICAgfVxuXG4gICAgICB0by5wYXRobmFtZSA9IHRvU2VnbWVudHMuam9pbihcIi9cIik7XG4gICAgfSAvLyBJZiB0aGVyZSBhcmUgbW9yZSBcIi4uXCIgc2VnbWVudHMgdGhhbiBwYXJlbnQgcm91dGVzLCByZXNvbHZlIHJlbGF0aXZlIHRvXG4gICAgLy8gdGhlIHJvb3QgLyBVUkwuXG5cblxuICAgIGZyb20gPSByb3V0ZVBhdGhuYW1lSW5kZXggPj0gMCA/IHJvdXRlUGF0aG5hbWVzW3JvdXRlUGF0aG5hbWVJbmRleF0gOiBcIi9cIjtcbiAgfVxuXG4gIGxldCBwYXRoID0gcmVzb2x2ZVBhdGgodG8sIGZyb20pOyAvLyBFbnN1cmUgdGhlIHBhdGhuYW1lIGhhcyBhIHRyYWlsaW5nIHNsYXNoIGlmIHRoZSBvcmlnaW5hbCBcInRvXCIgaGFkIG9uZVxuXG4gIGxldCBoYXNFeHBsaWNpdFRyYWlsaW5nU2xhc2ggPSB0b1BhdGhuYW1lICYmIHRvUGF0aG5hbWUgIT09IFwiL1wiICYmIHRvUGF0aG5hbWUuZW5kc1dpdGgoXCIvXCIpOyAvLyBPciBpZiB0aGlzIHdhcyBhIGxpbmsgdG8gdGhlIGN1cnJlbnQgcGF0aCB3aGljaCBoYXMgYSB0cmFpbGluZyBzbGFzaFxuXG4gIGxldCBoYXNDdXJyZW50VHJhaWxpbmdTbGFzaCA9IChpc0VtcHR5UGF0aCB8fCB0b1BhdGhuYW1lID09PSBcIi5cIikgJiYgbG9jYXRpb25QYXRobmFtZS5lbmRzV2l0aChcIi9cIik7XG5cbiAgaWYgKCFwYXRoLnBhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKSAmJiAoaGFzRXhwbGljaXRUcmFpbGluZ1NsYXNoIHx8IGhhc0N1cnJlbnRUcmFpbGluZ1NsYXNoKSkge1xuICAgIHBhdGgucGF0aG5hbWUgKz0gXCIvXCI7XG4gIH1cblxuICByZXR1cm4gcGF0aDtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRUb1BhdGhuYW1lKHRvKSB7XG4gIC8vIEVtcHR5IHN0cmluZ3Mgc2hvdWxkIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgLyBwYXRoc1xuICByZXR1cm4gdG8gPT09IFwiXCIgfHwgdG8ucGF0aG5hbWUgPT09IFwiXCIgPyBcIi9cIiA6IHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlUGF0aCh0bykucGF0aG5hbWUgOiB0by5wYXRobmFtZTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jb25zdCBqb2luUGF0aHMgPSBwYXRocyA9PiBwYXRocy5qb2luKFwiL1wiKS5yZXBsYWNlKC9cXC9cXC8rL2csIFwiL1wiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jb25zdCBub3JtYWxpemVQYXRobmFtZSA9IHBhdGhuYW1lID0+IHBhdGhuYW1lLnJlcGxhY2UoL1xcLyskLywgXCJcIikucmVwbGFjZSgvXlxcLyovLCBcIi9cIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY29uc3Qgbm9ybWFsaXplU2VhcmNoID0gc2VhcmNoID0+ICFzZWFyY2ggfHwgc2VhcmNoID09PSBcIj9cIiA/IFwiXCIgOiBzZWFyY2guc3RhcnRzV2l0aChcIj9cIikgPyBzZWFyY2ggOiBcIj9cIiArIHNlYXJjaDtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jb25zdCBub3JtYWxpemVIYXNoID0gaGFzaCA9PiAhaGFzaCB8fCBoYXNoID09PSBcIiNcIiA/IFwiXCIgOiBoYXNoLnN0YXJ0c1dpdGgoXCIjXCIpID8gaGFzaCA6IFwiI1wiICsgaGFzaDtcbi8qKlxuICogVGhpcyBpcyBhIHNob3J0Y3V0IGZvciBjcmVhdGluZyBgYXBwbGljYXRpb24vanNvbmAgcmVzcG9uc2VzLiBDb252ZXJ0cyBgZGF0YWBcbiAqIHRvIEpTT04gYW5kIHNldHMgdGhlIGBDb250ZW50LVR5cGVgIGhlYWRlci5cbiAqL1xuXG5jb25zdCBqc29uID0gZnVuY3Rpb24ganNvbihkYXRhLCBpbml0KSB7XG4gIGlmIChpbml0ID09PSB2b2lkIDApIHtcbiAgICBpbml0ID0ge307XG4gIH1cblxuICBsZXQgcmVzcG9uc2VJbml0ID0gdHlwZW9mIGluaXQgPT09IFwibnVtYmVyXCIgPyB7XG4gICAgc3RhdHVzOiBpbml0XG4gIH0gOiBpbml0O1xuICBsZXQgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlc3BvbnNlSW5pdC5oZWFkZXJzKTtcblxuICBpZiAoIWhlYWRlcnMuaGFzKFwiQ29udGVudC1UeXBlXCIpKSB7XG4gICAgaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShkYXRhKSwgX2V4dGVuZHMoe30sIHJlc3BvbnNlSW5pdCwge1xuICAgIGhlYWRlcnNcbiAgfSkpO1xufTtcbmNsYXNzIEFib3J0ZWREZWZlcnJlZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cbmNsYXNzIERlZmVycmVkRGF0YSB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICB0aGlzLnBlbmRpbmdLZXlzID0gbmV3IFNldCgpO1xuICAgIHRoaXMuc3Vic2NyaWJlciA9IHVuZGVmaW5lZDtcbiAgICBpbnZhcmlhbnQoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSwgXCJkZWZlcigpIG9ubHkgYWNjZXB0cyBwbGFpbiBvYmplY3RzXCIpOyAvLyBTZXQgdXAgYW4gQWJvcnRDb250cm9sbGVyICsgUHJvbWlzZSB3ZSBjYW4gcmFjZSBhZ2FpbnN0IHRvIGV4aXQgZWFybHlcbiAgICAvLyBjYW5jZWxsYXRpb25cblxuICAgIGxldCByZWplY3Q7XG4gICAgdGhpcy5hYm9ydFByb21pc2UgPSBuZXcgUHJvbWlzZSgoXywgcikgPT4gcmVqZWN0ID0gcik7XG4gICAgdGhpcy5jb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgbGV0IG9uQWJvcnQgPSAoKSA9PiByZWplY3QobmV3IEFib3J0ZWREZWZlcnJlZEVycm9yKFwiRGVmZXJyZWQgZGF0YSBhYm9ydGVkXCIpKTtcblxuICAgIHRoaXMudW5saXN0ZW5BYm9ydFNpZ25hbCA9ICgpID0+IHRoaXMuY29udHJvbGxlci5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuXG4gICAgdGhpcy5jb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgdGhpcy5kYXRhID0gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChhY2MsIF9yZWYpID0+IHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBfcmVmO1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWNjLCB7XG4gICAgICAgIFtrZXldOiB0aGlzLnRyYWNrUHJvbWlzZShrZXksIHZhbHVlKVxuICAgICAgfSk7XG4gICAgfSwge30pO1xuICB9XG5cbiAgdHJhY2tQcm9taXNlKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nS2V5cy5hZGQoa2V5KTsgLy8gV2Ugc3RvcmUgYSBsaXR0bGUgd3JhcHBlciBwcm9taXNlIHRoYXQgd2lsbCBiZSBleHRlbmRlZCB3aXRoXG4gICAgLy8gX2RhdGEvX2Vycm9yIHByb3BzIHVwb24gcmVzb2x2ZS9yZWplY3RcblxuICAgIGxldCBwcm9taXNlID0gUHJvbWlzZS5yYWNlKFt2YWx1ZSwgdGhpcy5hYm9ydFByb21pc2VdKS50aGVuKGRhdGEgPT4gdGhpcy5vblNldHRsZShwcm9taXNlLCBrZXksIG51bGwsIGRhdGEpLCBlcnJvciA9PiB0aGlzLm9uU2V0dGxlKHByb21pc2UsIGtleSwgZXJyb3IpKTsgLy8gUmVnaXN0ZXIgcmVqZWN0aW9uIGxpc3RlbmVycyB0byBhdm9pZCB1bmNhdWdodCBwcm9taXNlIHJlamVjdGlvbnMgb25cbiAgICAvLyBlcnJvcnMgb3IgYWJvcnRlZCBkZWZlcnJlZCB2YWx1ZXNcblxuICAgIHByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl90cmFja2VkXCIsIHtcbiAgICAgIGdldDogKCkgPT4gdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgb25TZXR0bGUocHJvbWlzZSwga2V5LCBlcnJvciwgZGF0YSkge1xuICAgIGlmICh0aGlzLmNvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQgJiYgZXJyb3IgaW5zdGFuY2VvZiBBYm9ydGVkRGVmZXJyZWRFcnJvcikge1xuICAgICAgdGhpcy51bmxpc3RlbkFib3J0U2lnbmFsKCk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgXCJfZXJyb3JcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IGVycm9yXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nS2V5cy5kZWxldGUoa2V5KTtcblxuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIC8vIE5vdGhpbmcgbGVmdCB0byBhYm9ydCFcbiAgICAgIHRoaXMudW5saXN0ZW5BYm9ydFNpZ25hbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNjcmliZXIgPSB0aGlzLnN1YnNjcmliZXI7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl9lcnJvclwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gZXJyb3JcbiAgICAgIH0pO1xuICAgICAgc3Vic2NyaWJlciAmJiBzdWJzY3JpYmVyKGZhbHNlKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsIFwiX2RhdGFcIiwge1xuICAgICAgZ2V0OiAoKSA9PiBkYXRhXG4gICAgfSk7XG4gICAgc3Vic2NyaWJlciAmJiBzdWJzY3JpYmVyKGZhbHNlKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHN1YnNjcmliZShmbikge1xuICAgIHRoaXMuc3Vic2NyaWJlciA9IGZuO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuY29udHJvbGxlci5hYm9ydCgpO1xuICAgIHRoaXMucGVuZGluZ0tleXMuZm9yRWFjaCgodiwgaykgPT4gdGhpcy5wZW5kaW5nS2V5cy5kZWxldGUoaykpO1xuICAgIGxldCBzdWJzY3JpYmVyID0gdGhpcy5zdWJzY3JpYmVyO1xuICAgIHN1YnNjcmliZXIgJiYgc3Vic2NyaWJlcih0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIHJlc29sdmVEYXRhKHNpZ25hbCkge1xuICAgIGxldCBhYm9ydGVkID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgbGV0IG9uQWJvcnQgPSAoKSA9PiB0aGlzLmNhbmNlbCgpO1xuXG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgYWJvcnRlZCA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhYm9ydGVkID0+IHtcbiAgICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuXG4gICAgICAgICAgaWYgKGFib3J0ZWQgfHwgdGhpcy5kb25lKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFib3J0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWJvcnRlZDtcbiAgfVxuXG4gIGdldCBkb25lKCkge1xuICAgIHJldHVybiB0aGlzLnBlbmRpbmdLZXlzLnNpemUgPT09IDA7XG4gIH1cblxuICBnZXQgdW53cmFwcGVkRGF0YSgpIHtcbiAgICBpbnZhcmlhbnQodGhpcy5kYXRhICE9PSBudWxsICYmIHRoaXMuZG9uZSwgXCJDYW4gb25seSB1bndyYXAgZGF0YSBvbiBpbml0aWFsaXplZCBhbmQgc2V0dGxlZCBkZWZlcnJlZHNcIik7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YSkucmVkdWNlKChhY2MsIF9yZWYyKSA9PiB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gX3JlZjI7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHtcbiAgICAgICAgW2tleV06IHVud3JhcFRyYWNrZWRQcm9taXNlKHZhbHVlKVxuICAgICAgfSk7XG4gICAgfSwge30pO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gaXNUcmFja2VkUHJvbWlzZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlICYmIHZhbHVlLl90cmFja2VkID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiB1bndyYXBUcmFja2VkUHJvbWlzZSh2YWx1ZSkge1xuICBpZiAoIWlzVHJhY2tlZFByb21pc2UodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKHZhbHVlLl9lcnJvcikge1xuICAgIHRocm93IHZhbHVlLl9lcnJvcjtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZS5fZGF0YTtcbn1cblxuZnVuY3Rpb24gZGVmZXIoZGF0YSkge1xuICByZXR1cm4gbmV3IERlZmVycmVkRGF0YShkYXRhKTtcbn1cbi8qKlxuICogQSByZWRpcmVjdCByZXNwb25zZS4gU2V0cyB0aGUgc3RhdHVzIGNvZGUgYW5kIHRoZSBgTG9jYXRpb25gIGhlYWRlci5cbiAqIERlZmF1bHRzIHRvIFwiMzAyIEZvdW5kXCIuXG4gKi9cblxuY29uc3QgcmVkaXJlY3QgPSBmdW5jdGlvbiByZWRpcmVjdCh1cmwsIGluaXQpIHtcbiAgaWYgKGluaXQgPT09IHZvaWQgMCkge1xuICAgIGluaXQgPSAzMDI7XG4gIH1cblxuICBsZXQgcmVzcG9uc2VJbml0ID0gaW5pdDtcblxuICBpZiAodHlwZW9mIHJlc3BvbnNlSW5pdCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2VJbml0XG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcmVzcG9uc2VJbml0LnN0YXR1cyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlSW5pdC5zdGF0dXMgPSAzMDI7XG4gIH1cblxuICBsZXQgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlc3BvbnNlSW5pdC5oZWFkZXJzKTtcbiAgaGVhZGVycy5zZXQoXCJMb2NhdGlvblwiLCB1cmwpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIF9leHRlbmRzKHt9LCByZXNwb25zZUluaXQsIHtcbiAgICBoZWFkZXJzXG4gIH0pKTtcbn07XG4vKipcbiAqIEBwcml2YXRlXG4gKiBVdGlsaXR5IGNsYXNzIHdlIHVzZSB0byBob2xkIGF1dG8tdW53cmFwcGVkIDR4eC81eHggUmVzcG9uc2UgYm9kaWVzXG4gKi9cblxuY2xhc3MgRXJyb3JSZXNwb25zZSB7XG4gIGNvbnN0cnVjdG9yKHN0YXR1cywgc3RhdHVzVGV4dCwgZGF0YSkge1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQgfHwgXCJcIjtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbn1cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIGVycm9yIGlzIGFuIEVycm9yUmVzcG9uc2UgZ2VuZXJhdGVkIGZyb20gYSA0eHgvNXh4XG4gKiBSZXNwb25zZSB0aHJvdyBmcm9tIGFuIGFjdGlvbi9sb2FkZXJcbiAqL1xuXG5mdW5jdGlvbiBpc1JvdXRlRXJyb3JSZXNwb25zZShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZTtcbn1cblxuY29uc3QgSURMRV9OQVZJR0FUSU9OID0ge1xuICBzdGF0ZTogXCJpZGxlXCIsXG4gIGxvY2F0aW9uOiB1bmRlZmluZWQsXG4gIGZvcm1NZXRob2Q6IHVuZGVmaW5lZCxcbiAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICBmb3JtRGF0YTogdW5kZWZpbmVkXG59O1xuY29uc3QgSURMRV9GRVRDSEVSID0ge1xuICBzdGF0ZTogXCJpZGxlXCIsXG4gIGRhdGE6IHVuZGVmaW5lZCxcbiAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gIGZvcm1EYXRhOiB1bmRlZmluZWRcbn07IC8vI2VuZHJlZ2lvblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vI3JlZ2lvbiBjcmVhdGVSb3V0ZXJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ3JlYXRlIGEgcm91dGVyIGFuZCBsaXN0ZW4gdG8gaGlzdG9yeSBQT1AgbmF2aWdhdGlvbnNcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVSb3V0ZXIoaW5pdCkge1xuICBpbnZhcmlhbnQoaW5pdC5yb3V0ZXMubGVuZ3RoID4gMCwgXCJZb3UgbXVzdCBwcm92aWRlIGEgbm9uLWVtcHR5IHJvdXRlcyBhcnJheSB0byBjcmVhdGVSb3V0ZXJcIik7XG4gIGxldCBkYXRhUm91dGVzID0gY29udmVydFJvdXRlc1RvRGF0YVJvdXRlcyhpbml0LnJvdXRlcyk7IC8vIENsZWFudXAgZnVuY3Rpb24gZm9yIGhpc3RvcnlcblxuICBsZXQgdW5saXN0ZW5IaXN0b3J5ID0gbnVsbDsgLy8gRXh0ZXJuYWxseS1wcm92aWRlZCBmdW5jdGlvbnMgdG8gY2FsbCBvbiBhbGwgc3RhdGUgY2hhbmdlc1xuXG4gIGxldCBzdWJzY3JpYmVycyA9IG5ldyBTZXQoKTsgLy8gRXh0ZXJuYWxseS1wcm92aWRlZCBvYmplY3QgdG8gaG9sZCBzY3JvbGwgcmVzdG9yYXRpb24gbG9jYXRpb25zIGR1cmluZyByb3V0aW5nXG5cbiAgbGV0IHNhdmVkU2Nyb2xsUG9zaXRpb25zID0gbnVsbDsgLy8gRXh0ZXJuYWxseS1wcm92aWRlZCBmdW5jdGlvbiB0byBnZXQgc2Nyb2xsIHJlc3RvcmF0aW9uIGtleXNcblxuICBsZXQgZ2V0U2Nyb2xsUmVzdG9yYXRpb25LZXkgPSBudWxsOyAvLyBFeHRlcm5hbGx5LXByb3ZpZGVkIGZ1bmN0aW9uIHRvIGdldCBjdXJyZW50IHNjcm9sbCBwb3NpdGlvblxuXG4gIGxldCBnZXRTY3JvbGxQb3NpdGlvbiA9IG51bGw7IC8vIE9uZS10aW1lIGZsYWcgdG8gY29udHJvbCB0aGUgaW5pdGlhbCBoeWRyYXRpb24gc2Nyb2xsIHJlc3RvcmF0aW9uLiAgQmVjYXVzZVxuICAvLyB3ZSBkb24ndCBnZXQgdGhlIHNhdmVkIHBvc2l0aW9ucyBmcm9tIDxTY3JvbGxSZXN0b3JhdGlvbiAvPiB1bnRpbCBfYWZ0ZXJfXG4gIC8vIHRoZSBpbml0aWFsIHJlbmRlciwgd2UgbmVlZCB0byBtYW51YWxseSB0cmlnZ2VyIGEgc2VwYXJhdGUgdXBkYXRlU3RhdGUgdG9cbiAgLy8gc2VuZCBhbG9uZyB0aGUgcmVzdG9yZVNjcm9sbFBvc2l0aW9uXG5cbiAgbGV0IGluaXRpYWxTY3JvbGxSZXN0b3JlZCA9IGZhbHNlO1xuICBsZXQgaW5pdGlhbE1hdGNoZXMgPSBtYXRjaFJvdXRlcyhkYXRhUm91dGVzLCBpbml0Lmhpc3RvcnkubG9jYXRpb24sIGluaXQuYmFzZW5hbWUpO1xuICBsZXQgaW5pdGlhbEVycm9ycyA9IG51bGw7XG5cbiAgaWYgKGluaXRpYWxNYXRjaGVzID09IG51bGwpIHtcbiAgICAvLyBJZiB3ZSBkbyBub3QgbWF0Y2ggYSB1c2VyLXByb3ZpZGVkLXJvdXRlLCBmYWxsIGJhY2sgdG8gdGhlIHJvb3RcbiAgICAvLyB0byBhbGxvdyB0aGUgZXJyb3IgYm91bmRhcnkgdG8gdGFrZSBvdmVyXG4gICAgbGV0IHtcbiAgICAgIG1hdGNoZXMsXG4gICAgICByb3V0ZSxcbiAgICAgIGVycm9yXG4gICAgfSA9IGdldE5vdEZvdW5kTWF0Y2hlcyhkYXRhUm91dGVzKTtcbiAgICBpbml0aWFsTWF0Y2hlcyA9IG1hdGNoZXM7XG4gICAgaW5pdGlhbEVycm9ycyA9IHtcbiAgICAgIFtyb3V0ZS5pZF06IGVycm9yXG4gICAgfTtcbiAgfVxuXG4gIGxldCBpbml0aWFsaXplZCA9ICFpbml0aWFsTWF0Y2hlcy5zb21lKG0gPT4gbS5yb3V0ZS5sb2FkZXIpIHx8IGluaXQuaHlkcmF0aW9uRGF0YSAhPSBudWxsO1xuICBsZXQgcm91dGVyO1xuICBsZXQgc3RhdGUgPSB7XG4gICAgaGlzdG9yeUFjdGlvbjogaW5pdC5oaXN0b3J5LmFjdGlvbixcbiAgICBsb2NhdGlvbjogaW5pdC5oaXN0b3J5LmxvY2F0aW9uLFxuICAgIG1hdGNoZXM6IGluaXRpYWxNYXRjaGVzLFxuICAgIGluaXRpYWxpemVkLFxuICAgIG5hdmlnYXRpb246IElETEVfTkFWSUdBVElPTixcbiAgICByZXN0b3JlU2Nyb2xsUG9zaXRpb246IG51bGwsXG4gICAgcHJldmVudFNjcm9sbFJlc2V0OiBmYWxzZSxcbiAgICByZXZhbGlkYXRpb246IFwiaWRsZVwiLFxuICAgIGxvYWRlckRhdGE6IGluaXQuaHlkcmF0aW9uRGF0YSAmJiBpbml0Lmh5ZHJhdGlvbkRhdGEubG9hZGVyRGF0YSB8fCB7fSxcbiAgICBhY3Rpb25EYXRhOiBpbml0Lmh5ZHJhdGlvbkRhdGEgJiYgaW5pdC5oeWRyYXRpb25EYXRhLmFjdGlvbkRhdGEgfHwgbnVsbCxcbiAgICBlcnJvcnM6IGluaXQuaHlkcmF0aW9uRGF0YSAmJiBpbml0Lmh5ZHJhdGlvbkRhdGEuZXJyb3JzIHx8IGluaXRpYWxFcnJvcnMsXG4gICAgZmV0Y2hlcnM6IG5ldyBNYXAoKVxuICB9OyAvLyAtLSBTdGF0ZWZ1bCBpbnRlcm5hbCB2YXJpYWJsZXMgdG8gbWFuYWdlIG5hdmlnYXRpb25zIC0tXG4gIC8vIEN1cnJlbnQgbmF2aWdhdGlvbiBpbiBwcm9ncmVzcyAodG8gYmUgY29tbWl0dGVkIGluIGNvbXBsZXRlTmF2aWdhdGlvbilcblxuICBsZXQgcGVuZGluZ0FjdGlvbiA9IEFjdGlvbi5Qb3A7IC8vIFNob3VsZCB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIHByZXZlbnQgdGhlIHNjcm9sbCByZXNldCBpZiBzY3JvbGwgY2Fubm90XG4gIC8vIGJlIHJlc3RvcmVkP1xuXG4gIGxldCBwZW5kaW5nUHJldmVudFNjcm9sbFJlc2V0ID0gZmFsc2U7IC8vIEFib3J0Q29udHJvbGxlciBmb3IgdGhlIGFjdGl2ZSBuYXZpZ2F0aW9uXG5cbiAgbGV0IHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlcjsgLy8gV2UgdXNlIHRoaXMgdG8gYXZvaWQgdG91Y2hpbmcgaGlzdG9yeSBpbiBjb21wbGV0ZU5hdmlnYXRpb24gaWYgYVxuICAvLyByZXZhbGlkYXRpb24gaXMgZW50aXJlbHkgdW5pbnRlcnJ1cHRlZFxuXG4gIGxldCBpc1VuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb24gPSBmYWxzZTsgLy8gVXNlIHRoaXMgaW50ZXJuYWwgZmxhZyB0byBmb3JjZSByZXZhbGlkYXRpb24gb2YgYWxsIGxvYWRlcnM6XG4gIC8vICAtIHN1Ym1pc3Npb25zIChjb21wbGV0ZWQgb3IgaW50ZXJydXB0ZWQpXG4gIC8vICAtIHVzZVJldmFsaWRhdGUoKVxuICAvLyAgLSBYLVJlbWl4LVJldmFsaWRhdGUgKGZyb20gcmVkaXJlY3QpXG5cbiAgbGV0IGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQgPSBmYWxzZTsgLy8gVXNlIHRoaXMgaW50ZXJuYWwgYXJyYXkgdG8gY2FwdHVyZSByb3V0ZXMgdGhhdCByZXF1aXJlIHJldmFsaWRhdGlvbiBkdWVcbiAgLy8gdG8gYSBjYW5jZWxsZWQgZGVmZXJyZWQgb24gYWN0aW9uIHN1Ym1pc3Npb25cblxuICBsZXQgY2FuY2VsbGVkRGVmZXJyZWRSb3V0ZXMgPSBbXTsgLy8gVXNlIHRoaXMgaW50ZXJuYWwgYXJyYXkgdG8gY2FwdHVyZSBmZXRjaGVyIGxvYWRzIHRoYXQgd2VyZSBjYW5jZWxsZWQgYnkgYW5cbiAgLy8gYWN0aW9uIG5hdmlnYXRpb24gYW5kIHJlcXVpcmUgcmV2YWxpZGF0aW9uXG5cbiAgbGV0IGNhbmNlbGxlZEZldGNoZXJMb2FkcyA9IFtdOyAvLyBBYm9ydENvbnRyb2xsZXJzIGZvciBhbnkgaW4tZmxpZ2h0IGZldGNoZXJzXG5cbiAgbGV0IGZldGNoQ29udHJvbGxlcnMgPSBuZXcgTWFwKCk7IC8vIFRyYWNrIGxvYWRzIGJhc2VkIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHN0YXJ0ZWRcblxuICBsZXQgaW5jcmVtZW50aW5nTG9hZElkID0gMDsgLy8gVHJhY2sgdGhlIG91dHN0YW5kaW5nIHBlbmRpbmcgbmF2aWdhdGlvbiBkYXRhIGxvYWQgdG8gYmUgY29tcGFyZWQgYWdhaW5zdFxuICAvLyB0aGUgZ2xvYmFsbHkgaW5jcmVtZW50aW5nIGxvYWQgd2hlbiBhIGZldGNoZXIgbG9hZCBsYW5kcyBhZnRlciBhIGNvbXBsZXRlZFxuICAvLyBuYXZpZ2F0aW9uXG5cbiAgbGV0IHBlbmRpbmdOYXZpZ2F0aW9uTG9hZElkID0gLTE7IC8vIEZldGNoZXJzIHRoYXQgdHJpZ2dlcmVkIGRhdGEgcmVsb2FkcyBhcyBhIHJlc3VsdCBvZiB0aGVpciBhY3Rpb25zXG5cbiAgbGV0IGZldGNoUmVsb2FkSWRzID0gbmV3IE1hcCgpOyAvLyBGZXRjaGVycyB0aGF0IHRyaWdnZXJlZCByZWRpcmVjdCBuYXZpZ2F0aW9ucyBmcm9tIHRoZWlyIGFjdGlvbnNcblxuICBsZXQgZmV0Y2hSZWRpcmVjdElkcyA9IG5ldyBTZXQoKTsgLy8gTW9zdCByZWNlbnQgaHJlZi9tYXRjaCBmb3IgZmV0Y2hlci5sb2FkIGNhbGxzIGZvciBmZXRjaGVyc1xuXG4gIGxldCBmZXRjaExvYWRNYXRjaGVzID0gbmV3IE1hcCgpOyAvLyBTdG9yZSBEZWZlcnJlZERhdGEgaW5zdGFuY2VzIGZvciBhY3RpdmUgcm91dGUgbWF0Y2hlcy4gIFdoZW4gYVxuICAvLyByb3V0ZSBsb2FkZXIgcmV0dXJucyBkZWZlcigpIHdlIHN0aWNrIG9uZSBpbiBoZXJlLiAgVGhlbiwgd2hlbiBhIG5lc3RlZFxuICAvLyBwcm9taXNlIHJlc29sdmVzIHdlIHVwZGF0ZSBsb2FkZXJEYXRhLiAgSWYgYSBuZXcgbmF2aWdhdGlvbiBzdGFydHMgd2VcbiAgLy8gY2FuY2VsIGFjdGl2ZSBkZWZlcnJlZHMgZm9yIGVsaW1pbmF0ZWQgcm91dGVzLlxuXG4gIGxldCBhY3RpdmVEZWZlcnJlZHMgPSBuZXcgTWFwKCk7IC8vIEluaXRpYWxpemUgdGhlIHJvdXRlciwgYWxsIHNpZGUgZWZmZWN0cyBzaG91bGQgYmUga2lja2VkIG9mZiBmcm9tIGhlcmUuXG4gIC8vIEltcGxlbWVudGVkIGFzIGEgRmx1ZW50IEFQSSBmb3IgZWFzZSBvZjpcbiAgLy8gICBsZXQgcm91dGVyID0gY3JlYXRlUm91dGVyKGluaXQpLmluaXRpYWxpemUoKTtcblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIC8vIElmIGhpc3RvcnkgaW5mb3JtcyB1cyBvZiBhIFBPUCBuYXZpZ2F0aW9uLCBzdGFydCB0aGUgbmF2aWdhdGlvbiBidXQgZG8gbm90IHVwZGF0ZVxuICAgIC8vIHN0YXRlLiAgV2UnbGwgdXBkYXRlIG91ciBvd24gc3RhdGUgb25jZSB0aGUgbmF2aWdhdGlvbiBjb21wbGV0ZXNcbiAgICB1bmxpc3Rlbkhpc3RvcnkgPSBpbml0Lmhpc3RvcnkubGlzdGVuKF9yZWYgPT4ge1xuICAgICAgbGV0IHtcbiAgICAgICAgYWN0aW9uOiBoaXN0b3J5QWN0aW9uLFxuICAgICAgICBsb2NhdGlvblxuICAgICAgfSA9IF9yZWY7XG4gICAgICByZXR1cm4gc3RhcnROYXZpZ2F0aW9uKGhpc3RvcnlBY3Rpb24sIGxvY2F0aW9uKTtcbiAgICB9KTsgLy8gS2ljayBvZmYgaW5pdGlhbCBkYXRhIGxvYWQgaWYgbmVlZGVkLiAgVXNlIFBvcCB0byBhdm9pZCBtb2RpZnlpbmcgaGlzdG9yeVxuXG4gICAgaWYgKCFzdGF0ZS5pbml0aWFsaXplZCkge1xuICAgICAgc3RhcnROYXZpZ2F0aW9uKEFjdGlvbi5Qb3AsIHN0YXRlLmxvY2F0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm91dGVyO1xuICB9IC8vIENsZWFuIHVwIGEgcm91dGVyIGFuZCBpdCdzIHNpZGUgZWZmZWN0c1xuXG5cbiAgZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICBpZiAodW5saXN0ZW5IaXN0b3J5KSB7XG4gICAgICB1bmxpc3Rlbkhpc3RvcnkoKTtcbiAgICB9XG5cbiAgICBzdWJzY3JpYmVycy5jbGVhcigpO1xuICAgIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciAmJiBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBzdGF0ZS5mZXRjaGVycy5mb3JFYWNoKChfLCBrZXkpID0+IGRlbGV0ZUZldGNoZXIoa2V5KSk7XG4gIH0gLy8gU3Vic2NyaWJlIHRvIHN0YXRlIHVwZGF0ZXMgZm9yIHRoZSByb3V0ZXJcblxuXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShmbikge1xuICAgIHN1YnNjcmliZXJzLmFkZChmbik7XG4gICAgcmV0dXJuICgpID0+IHN1YnNjcmliZXJzLmRlbGV0ZShmbik7XG4gIH0gLy8gVXBkYXRlIG91ciBzdGF0ZSBhbmQgbm90aWZ5IHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgdGhlIGNoYW5nZVxuXG5cbiAgZnVuY3Rpb24gdXBkYXRlU3RhdGUobmV3U3RhdGUpIHtcbiAgICBzdGF0ZSA9IF9leHRlbmRzKHt9LCBzdGF0ZSwgbmV3U3RhdGUpO1xuICAgIHN1YnNjcmliZXJzLmZvckVhY2goc3Vic2NyaWJlciA9PiBzdWJzY3JpYmVyKHN0YXRlKSk7XG4gIH0gLy8gQ29tcGxldGUgYSBuYXZpZ2F0aW9uIHJldHVybmluZyB0aGUgc3RhdGUubmF2aWdhdGlvbiBiYWNrIHRvIHRoZSBJRExFX05BVklHQVRJT05cbiAgLy8gYW5kIHNldHRpbmcgc3RhdGUuW2hpc3RvcnlBY3Rpb24vbG9jYXRpb24vbWF0Y2hlc10gdG8gdGhlIG5ldyByb3V0ZS5cbiAgLy8gLSBMb2NhdGlvbiBpcyBhIHJlcXVpcmVkIHBhcmFtXG4gIC8vIC0gTmF2aWdhdGlvbiB3aWxsIGFsd2F5cyBiZSBzZXQgdG8gSURMRV9OQVZJR0FUSU9OXG4gIC8vIC0gQ2FuIHBhc3MgYW55IG90aGVyIHN0YXRlIGluIG5ld1N0YXRlXG5cblxuICBmdW5jdGlvbiBjb21wbGV0ZU5hdmlnYXRpb24obG9jYXRpb24sIG5ld1N0YXRlKSB7XG4gICAgLy8gRGVkdWNlIGlmIHdlJ3JlIGluIGEgbG9hZGluZy9hY3Rpb25SZWxvYWQgc3RhdGU6XG4gICAgLy8gLSBXZSBoYXZlIGNvbW1pdHRlZCBhY3Rpb25EYXRhIGluIHRoZSBzdG9yZVxuICAgIC8vIC0gVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiB3YXMgYSBzdWJtaXNzaW9uXG4gICAgLy8gLSBXZSdyZSBwYXN0IHRoZSBzdWJtaXR0aW5nIHN0YXRlIGFuZCBpbnRvIHRoZSBsb2FkaW5nIHN0YXRlXG4gICAgLy8gLSBUaGlzIHNob3VsZCBub3QgYmUgc3VzY2VwdGlibGUgdG8gZmFsc2UgcG9zaXRpdmVzIGZvclxuICAgIC8vICAgbG9hZGluZy9zdWJtaXNzaW9uUmVkaXJlY3Qgc2luY2UgdGhlcmUgd291bGQgbm90IGJlIGFjdGlvbkRhdGEgaW4gdGhlXG4gICAgLy8gICBzdGF0ZSBzaW5jZSB0aGUgcHJpb3IgYWN0aW9uIHdvdWxkIGhhdmUgcmV0dXJuZWQgYSByZWRpcmVjdCByZXNwb25zZVxuICAgIC8vICAgYW5kIHNob3J0IGNpcmN1aXRlZFxuICAgIGxldCBpc0FjdGlvblJlbG9hZCA9IHN0YXRlLmFjdGlvbkRhdGEgIT0gbnVsbCAmJiBzdGF0ZS5uYXZpZ2F0aW9uLmZvcm1NZXRob2QgIT0gbnVsbCAmJiBzdGF0ZS5uYXZpZ2F0aW9uLnN0YXRlID09PSBcImxvYWRpbmdcIjsgLy8gQWx3YXlzIHByZXNlcnZlIGFueSBleGlzdGluZyBsb2FkZXJEYXRhIGZyb20gcmUtdXNlZCByb3V0ZXNcblxuICAgIGxldCBuZXdMb2FkZXJEYXRhID0gbmV3U3RhdGUubG9hZGVyRGF0YSA/IHtcbiAgICAgIGxvYWRlckRhdGE6IG1lcmdlTG9hZGVyRGF0YShzdGF0ZS5sb2FkZXJEYXRhLCBuZXdTdGF0ZS5sb2FkZXJEYXRhLCBuZXdTdGF0ZS5tYXRjaGVzIHx8IFtdKVxuICAgIH0gOiB7fTtcbiAgICB1cGRhdGVTdGF0ZShfZXh0ZW5kcyh7fSwgaXNBY3Rpb25SZWxvYWQgPyB7fSA6IHtcbiAgICAgIGFjdGlvbkRhdGE6IG51bGxcbiAgICB9LCBuZXdTdGF0ZSwgbmV3TG9hZGVyRGF0YSwge1xuICAgICAgaGlzdG9yeUFjdGlvbjogcGVuZGluZ0FjdGlvbixcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgaW5pdGlhbGl6ZWQ6IHRydWUsXG4gICAgICBuYXZpZ2F0aW9uOiBJRExFX05BVklHQVRJT04sXG4gICAgICByZXZhbGlkYXRpb246IFwiaWRsZVwiLFxuICAgICAgLy8gRG9uJ3QgcmVzdG9yZSBvbiBzdWJtaXNzaW9uIG5hdmlnYXRpb25zXG4gICAgICByZXN0b3JlU2Nyb2xsUG9zaXRpb246IHN0YXRlLm5hdmlnYXRpb24uZm9ybURhdGEgPyBmYWxzZSA6IGdldFNhdmVkU2Nyb2xsUG9zaXRpb24obG9jYXRpb24sIG5ld1N0YXRlLm1hdGNoZXMgfHwgc3RhdGUubWF0Y2hlcyksXG4gICAgICBwcmV2ZW50U2Nyb2xsUmVzZXQ6IHBlbmRpbmdQcmV2ZW50U2Nyb2xsUmVzZXRcbiAgICB9KSk7XG5cbiAgICBpZiAoaXNVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uKSA7IGVsc2UgaWYgKHBlbmRpbmdBY3Rpb24gPT09IEFjdGlvbi5Qb3ApIDsgZWxzZSBpZiAocGVuZGluZ0FjdGlvbiA9PT0gQWN0aW9uLlB1c2gpIHtcbiAgICAgIGluaXQuaGlzdG9yeS5wdXNoKGxvY2F0aW9uLCBsb2NhdGlvbi5zdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChwZW5kaW5nQWN0aW9uID09PSBBY3Rpb24uUmVwbGFjZSkge1xuICAgICAgaW5pdC5oaXN0b3J5LnJlcGxhY2UobG9jYXRpb24sIGxvY2F0aW9uLnN0YXRlKTtcbiAgICB9IC8vIFJlc2V0IHN0YXRlZnVsIG5hdmlnYXRpb24gdmFyc1xuXG5cbiAgICBwZW5kaW5nQWN0aW9uID0gQWN0aW9uLlBvcDtcbiAgICBwZW5kaW5nUHJldmVudFNjcm9sbFJlc2V0ID0gZmFsc2U7XG4gICAgaXNVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCA9IGZhbHNlO1xuICAgIGNhbmNlbGxlZERlZmVycmVkUm91dGVzID0gW107XG4gICAgY2FuY2VsbGVkRmV0Y2hlckxvYWRzID0gW107XG4gIH0gLy8gVHJpZ2dlciBhIG5hdmlnYXRpb24gZXZlbnQsIHdoaWNoIGNhbiBlaXRoZXIgYmUgYSBudW1lcmljYWwgUE9QIG9yIGEgUFVTSFxuICAvLyByZXBsYWNlIHdpdGggYW4gb3B0aW9uYWwgc3VibWlzc2lvblxuXG5cbiAgYXN5bmMgZnVuY3Rpb24gbmF2aWdhdGUodG8sIG9wdHMpIHtcbiAgICBpZiAodHlwZW9mIHRvID09PSBcIm51bWJlclwiKSB7XG4gICAgICBpbml0Lmhpc3RvcnkuZ28odG8pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB7XG4gICAgICBwYXRoLFxuICAgICAgc3VibWlzc2lvbixcbiAgICAgIGVycm9yXG4gICAgfSA9IG5vcm1hbGl6ZU5hdmlnYXRlT3B0aW9ucyh0bywgb3B0cyk7XG4gICAgbGV0IGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24oc3RhdGUubG9jYXRpb24sIHBhdGgsIG9wdHMgJiYgb3B0cy5zdGF0ZSk7XG4gICAgbGV0IGhpc3RvcnlBY3Rpb24gPSAob3B0cyAmJiBvcHRzLnJlcGxhY2UpID09PSB0cnVlIHx8IHN1Ym1pc3Npb24gIT0gbnVsbCA/IEFjdGlvbi5SZXBsYWNlIDogQWN0aW9uLlB1c2g7XG4gICAgbGV0IHByZXZlbnRTY3JvbGxSZXNldCA9IG9wdHMgJiYgXCJwcmV2ZW50U2Nyb2xsUmVzZXRcIiBpbiBvcHRzID8gb3B0cy5wcmV2ZW50U2Nyb2xsUmVzZXQgPT09IHRydWUgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGF3YWl0IHN0YXJ0TmF2aWdhdGlvbihoaXN0b3J5QWN0aW9uLCBsb2NhdGlvbiwge1xuICAgICAgc3VibWlzc2lvbixcbiAgICAgIC8vIFNlbmQgdGhyb3VnaCB0aGUgZm9ybURhdGEgc2VyaWFsaXphdGlvbiBlcnJvciBpZiB3ZSBoYXZlIG9uZSBzbyB3ZSBjYW5cbiAgICAgIC8vIHJlbmRlciBhdCB0aGUgcmlnaHQgZXJyb3IgYm91bmRhcnkgYWZ0ZXIgd2UgbWF0Y2ggcm91dGVzXG4gICAgICBwZW5kaW5nRXJyb3I6IGVycm9yLFxuICAgICAgcHJldmVudFNjcm9sbFJlc2V0LFxuICAgICAgcmVwbGFjZTogb3B0cyAmJiBvcHRzLnJlcGxhY2VcbiAgICB9KTtcbiAgfSAvLyBSZXZhbGlkYXRlIGFsbCBjdXJyZW50IGxvYWRlcnMuICBJZiBhIG5hdmlnYXRpb24gaXMgaW4gcHJvZ3Jlc3Mgb3IgaWYgdGhpc1xuICAvLyBpcyBpbnRlcnJ1cHRlZCBieSBhIG5hdmlnYXRpb24sIGFsbG93IHRoaXMgdG8gXCJzdWNjZWVkXCIgYnkgY2FsbGluZyBhbGxcbiAgLy8gbG9hZGVycyBkdXJpbmcgdGhlIG5leHQgbG9hZGVyIHJvdW5kXG5cblxuICBmdW5jdGlvbiByZXZhbGlkYXRlKCkge1xuICAgIGludGVycnVwdEFjdGl2ZUxvYWRzKCk7XG4gICAgdXBkYXRlU3RhdGUoe1xuICAgICAgcmV2YWxpZGF0aW9uOiBcImxvYWRpbmdcIlxuICAgIH0pOyAvLyBJZiB3ZSdyZSBjdXJyZW50bHkgc3VibWl0dGluZyBhbiBhY3Rpb24sIHdlIGRvbid0IG5lZWQgdG8gc3RhcnQgYSBuZXdcbiAgICAvLyBuYXZpZ2F0aW9uLCB3ZSdsbCBqdXN0IGxldCB0aGUgZm9sbG93IHVwIGxvYWRlciBleGVjdXRpb24gY2FsbCBhbGwgbG9hZGVyc1xuXG4gICAgaWYgKHN0YXRlLm5hdmlnYXRpb24uc3RhdGUgPT09IFwic3VibWl0dGluZ1wiKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSdyZSBjdXJyZW50bHkgaW4gYW4gaWRsZSBzdGF0ZSwgc3RhcnQgYSBuZXcgbmF2aWdhdGlvbiBmb3IgdGhlIGN1cnJlbnRcbiAgICAvLyBhY3Rpb24vbG9jYXRpb24gYW5kIG1hcmsgaXQgYXMgdW5pbnRlcnJ1cHRlZCwgd2hpY2ggd2lsbCBza2lwIHRoZSBoaXN0b3J5XG4gICAgLy8gdXBkYXRlIGluIGNvbXBsZXRlTmF2aWdhdGlvblxuXG5cbiAgICBpZiAoc3RhdGUubmF2aWdhdGlvbi5zdGF0ZSA9PT0gXCJpZGxlXCIpIHtcbiAgICAgIHN0YXJ0TmF2aWdhdGlvbihzdGF0ZS5oaXN0b3J5QWN0aW9uLCBzdGF0ZS5sb2NhdGlvbiwge1xuICAgICAgICBzdGFydFVuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb246IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gT3RoZXJ3aXNlLCBpZiB3ZSdyZSBjdXJyZW50bHkgaW4gYSBsb2FkaW5nIHN0YXRlLCBqdXN0IHN0YXJ0IGEgbmV3XG4gICAgLy8gbmF2aWdhdGlvbiB0byB0aGUgbmF2aWdhdGlvbi5sb2NhdGlvbiBidXQgZG8gbm90IHRyaWdnZXIgYW4gdW5pbnRlcnJ1cHRlZFxuICAgIC8vIHJldmFsaWRhdGlvbiBzbyB0aGF0IGhpc3RvcnkgY29ycmVjdGx5IHVwZGF0ZXMgb25jZSB0aGUgbmF2aWdhdGlvbiBjb21wbGV0ZXNcblxuXG4gICAgc3RhcnROYXZpZ2F0aW9uKHBlbmRpbmdBY3Rpb24gfHwgc3RhdGUuaGlzdG9yeUFjdGlvbiwgc3RhdGUubmF2aWdhdGlvbi5sb2NhdGlvbiwge1xuICAgICAgb3ZlcnJpZGVOYXZpZ2F0aW9uOiBzdGF0ZS5uYXZpZ2F0aW9uXG4gICAgfSk7XG4gIH0gLy8gU3RhcnQgYSBuYXZpZ2F0aW9uIHRvIHRoZSBnaXZlbiBhY3Rpb24vbG9jYXRpb24uICBDYW4gb3B0aW9uYWxseSBwcm92aWRlIGFcbiAgLy8gb3ZlcnJpZGVOYXZpZ2F0aW9uIHdoaWNoIHdpbGwgb3ZlcnJpZGUgdGhlIG5vcm1hbExvYWQgaW4gdGhlIGNhc2Ugb2YgYSByZWRpcmVjdFxuICAvLyBuYXZpZ2F0aW9uXG5cblxuICBhc3luYyBmdW5jdGlvbiBzdGFydE5hdmlnYXRpb24oaGlzdG9yeUFjdGlvbiwgbG9jYXRpb24sIG9wdHMpIHtcbiAgICAvLyBBYm9ydCBhbnkgaW4tcHJvZ3Jlc3MgbmF2aWdhdGlvbnMgYW5kIHN0YXJ0IGEgbmV3IG9uZS4gVW5zZXQgYW55IG9uZ29pbmdcbiAgICAvLyB1bmludGVycnVwdGVkIHJldmFsaWRhdGlvbnMgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLCBzaW5jZSB3ZSB3YW50IHRoaXNcbiAgICAvLyBuZXcgbmF2aWdhdGlvbiB0byB1cGRhdGUgaGlzdG9yeSBub3JtYWxseVxuICAgIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciAmJiBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBudWxsO1xuICAgIHBlbmRpbmdBY3Rpb24gPSBoaXN0b3J5QWN0aW9uO1xuICAgIGlzVW5pbnRlcnJ1cHRlZFJldmFsaWRhdGlvbiA9IChvcHRzICYmIG9wdHMuc3RhcnRVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uKSA9PT0gdHJ1ZTsgLy8gU2F2ZSB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gZXZlcnkgdGltZSB3ZSBzdGFydCBhIG5ldyBuYXZpZ2F0aW9uLFxuICAgIC8vIGFuZCB0cmFjayB3aGV0aGVyIHdlIHNob3VsZCByZXNldCBzY3JvbGwgb24gY29tcGxldGlvblxuXG4gICAgc2F2ZVNjcm9sbFBvc2l0aW9uKHN0YXRlLmxvY2F0aW9uLCBzdGF0ZS5tYXRjaGVzKTtcbiAgICBwZW5kaW5nUHJldmVudFNjcm9sbFJlc2V0ID0gKG9wdHMgJiYgb3B0cy5wcmV2ZW50U2Nyb2xsUmVzZXQpID09PSB0cnVlO1xuICAgIGxldCBsb2FkaW5nTmF2aWdhdGlvbiA9IG9wdHMgJiYgb3B0cy5vdmVycmlkZU5hdmlnYXRpb247XG4gICAgbGV0IG1hdGNoZXMgPSBtYXRjaFJvdXRlcyhkYXRhUm91dGVzLCBsb2NhdGlvbiwgaW5pdC5iYXNlbmFtZSk7IC8vIFNob3J0IGNpcmN1aXQgd2l0aCBhIDQwNCBvbiB0aGUgcm9vdCBlcnJvciBib3VuZGFyeSBpZiB3ZSBtYXRjaCBub3RoaW5nXG5cbiAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgIGxldCB7XG4gICAgICAgIG1hdGNoZXM6IG5vdEZvdW5kTWF0Y2hlcyxcbiAgICAgICAgcm91dGUsXG4gICAgICAgIGVycm9yXG4gICAgICB9ID0gZ2V0Tm90Rm91bmRNYXRjaGVzKGRhdGFSb3V0ZXMpOyAvLyBDYW5jZWwgYWxsIHBlbmRpbmcgZGVmZXJyZWQgb24gNDA0cyBzaW5jZSB3ZSBkb24ndCBrZWVwIGFueSByb3V0ZXNcblxuICAgICAgY2FuY2VsQWN0aXZlRGVmZXJyZWRzKCk7XG4gICAgICBjb21wbGV0ZU5hdmlnYXRpb24obG9jYXRpb24sIHtcbiAgICAgICAgbWF0Y2hlczogbm90Rm91bmRNYXRjaGVzLFxuICAgICAgICBsb2FkZXJEYXRhOiB7fSxcbiAgICAgICAgZXJyb3JzOiB7XG4gICAgICAgICAgW3JvdXRlLmlkXTogZXJyb3JcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBTaG9ydCBjaXJjdWl0IGlmIGl0J3Mgb25seSBhIGhhc2ggY2hhbmdlXG5cblxuICAgIGlmIChpc0hhc2hDaGFuZ2VPbmx5KHN0YXRlLmxvY2F0aW9uLCBsb2NhdGlvbikpIHtcbiAgICAgIGNvbXBsZXRlTmF2aWdhdGlvbihsb2NhdGlvbiwge1xuICAgICAgICBtYXRjaGVzXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIENyZWF0ZSBhIGNvbnRyb2xsZXIvUmVxdWVzdCBmb3IgdGhpcyBuYXZpZ2F0aW9uXG5cblxuICAgIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBsZXQgcmVxdWVzdCA9IGNyZWF0ZVJlcXVlc3QobG9jYXRpb24sIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlci5zaWduYWwsIG9wdHMgJiYgb3B0cy5zdWJtaXNzaW9uKTtcbiAgICBsZXQgcGVuZGluZ0FjdGlvbkRhdGE7XG4gICAgbGV0IHBlbmRpbmdFcnJvcjtcblxuICAgIGlmIChvcHRzICYmIG9wdHMucGVuZGluZ0Vycm9yKSB7XG4gICAgICAvLyBJZiB3ZSBoYXZlIGEgcGVuZGluZ0Vycm9yLCBpdCBtZWFucyB0aGUgdXNlciBhdHRlbXB0ZWQgYSBHRVQgc3VibWlzc2lvblxuICAgICAgLy8gd2l0aCBiaW5hcnkgRm9ybURhdGEgc28gYXNzaWduIGhlcmUgYW5kIHNraXAgdG8gaGFuZGxlTG9hZGVycy4gIFRoYXRcbiAgICAgIC8vIHdheSB3ZSBoYW5kbGUgY2FsbGluZyBsb2FkZXJzIGFib3ZlIHRoZSBib3VuZGFyeSBldGMuICBJdCdzIG5vdCByZWFsbHlcbiAgICAgIC8vIGRpZmZlcmVudCBmcm9tIGFuIGFjdGlvbkVycm9yIGluIHRoYXQgc2Vuc2UuXG4gICAgICBwZW5kaW5nRXJyb3IgPSB7XG4gICAgICAgIFtmaW5kTmVhcmVzdEJvdW5kYXJ5KG1hdGNoZXMpLnJvdXRlLmlkXTogb3B0cy5wZW5kaW5nRXJyb3JcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChvcHRzICYmIG9wdHMuc3VibWlzc2lvbikge1xuICAgICAgLy8gQ2FsbCBhY3Rpb24gaWYgd2UgcmVjZWl2ZWQgYW4gYWN0aW9uIHN1Ym1pc3Npb25cbiAgICAgIGxldCBhY3Rpb25PdXRwdXQgPSBhd2FpdCBoYW5kbGVBY3Rpb24ocmVxdWVzdCwgbG9jYXRpb24sIG9wdHMuc3VibWlzc2lvbiwgbWF0Y2hlcywge1xuICAgICAgICByZXBsYWNlOiBvcHRzLnJlcGxhY2VcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYWN0aW9uT3V0cHV0LnNob3J0Q2lyY3VpdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcGVuZGluZ0FjdGlvbkRhdGEgPSBhY3Rpb25PdXRwdXQucGVuZGluZ0FjdGlvbkRhdGE7XG4gICAgICBwZW5kaW5nRXJyb3IgPSBhY3Rpb25PdXRwdXQucGVuZGluZ0FjdGlvbkVycm9yO1xuXG4gICAgICBsZXQgbmF2aWdhdGlvbiA9IF9leHRlbmRzKHtcbiAgICAgICAgc3RhdGU6IFwibG9hZGluZ1wiLFxuICAgICAgICBsb2NhdGlvblxuICAgICAgfSwgb3B0cy5zdWJtaXNzaW9uKTtcblxuICAgICAgbG9hZGluZ05hdmlnYXRpb24gPSBuYXZpZ2F0aW9uO1xuICAgIH0gLy8gQ2FsbCBsb2FkZXJzXG5cblxuICAgIGxldCB7XG4gICAgICBzaG9ydENpcmN1aXRlZCxcbiAgICAgIGxvYWRlckRhdGEsXG4gICAgICBlcnJvcnNcbiAgICB9ID0gYXdhaXQgaGFuZGxlTG9hZGVycyhyZXF1ZXN0LCBsb2NhdGlvbiwgbWF0Y2hlcywgbG9hZGluZ05hdmlnYXRpb24sIG9wdHMgJiYgb3B0cy5zdWJtaXNzaW9uLCBvcHRzICYmIG9wdHMucmVwbGFjZSwgcGVuZGluZ0FjdGlvbkRhdGEsIHBlbmRpbmdFcnJvcik7XG5cbiAgICBpZiAoc2hvcnRDaXJjdWl0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIENsZWFuIHVwIG5vdyB0aGF0IHRoZSBhY3Rpb24vbG9hZGVycyBoYXZlIGNvbXBsZXRlZC4gIERvbid0IGNsZWFuIHVwIGlmXG4gICAgLy8gd2Ugc2hvcnQgY2lyY3VpdGVkIGJlY2F1c2UgcGVuZGluZ05hdmlnYXRpb25Db250cm9sbGVyIHdpbGwgaGF2ZSBhbHJlYWR5XG4gICAgLy8gYmVlbiBhc3NpZ25lZCB0byBhIG5ldyBjb250cm9sbGVyIGZvciB0aGUgbmV4dCBuYXZpZ2F0aW9uXG5cblxuICAgIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciA9IG51bGw7XG4gICAgY29tcGxldGVOYXZpZ2F0aW9uKGxvY2F0aW9uLCB7XG4gICAgICBtYXRjaGVzLFxuICAgICAgbG9hZGVyRGF0YSxcbiAgICAgIGVycm9yc1xuICAgIH0pO1xuICB9IC8vIENhbGwgdGhlIGFjdGlvbiBtYXRjaGVkIGJ5IHRoZSBsZWFmIHJvdXRlIGZvciB0aGlzIG5hdmlnYXRpb24gYW5kIGhhbmRsZVxuICAvLyByZWRpcmVjdHMvZXJyb3JzXG5cblxuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVBY3Rpb24ocmVxdWVzdCwgbG9jYXRpb24sIHN1Ym1pc3Npb24sIG1hdGNoZXMsIG9wdHMpIHtcbiAgICBpbnRlcnJ1cHRBY3RpdmVMb2FkcygpOyAvLyBQdXQgdXMgaW4gYSBzdWJtaXR0aW5nIHN0YXRlXG5cbiAgICBsZXQgbmF2aWdhdGlvbiA9IF9leHRlbmRzKHtcbiAgICAgIHN0YXRlOiBcInN1Ym1pdHRpbmdcIixcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwgc3VibWlzc2lvbik7XG5cbiAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICBuYXZpZ2F0aW9uXG4gICAgfSk7IC8vIENhbGwgb3VyIGFjdGlvbiBhbmQgZ2V0IHRoZSByZXN1bHRcblxuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGFjdGlvbk1hdGNoID0gZ2V0VGFyZ2V0TWF0Y2gobWF0Y2hlcywgbG9jYXRpb24pO1xuXG4gICAgaWYgKCFhY3Rpb25NYXRjaC5yb3V0ZS5hY3Rpb24pIHtcbiAgICAgIHJlc3VsdCA9IGdldE1ldGhvZE5vdEFsbG93ZWRSZXN1bHQobG9jYXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBjYWxsTG9hZGVyT3JBY3Rpb24oXCJhY3Rpb25cIiwgcmVxdWVzdCwgYWN0aW9uTWF0Y2gpO1xuXG4gICAgICBpZiAocmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNob3J0Q2lyY3VpdGVkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzUmVkaXJlY3RSZXN1bHQocmVzdWx0KSkge1xuICAgICAgbGV0IHJlZGlyZWN0TmF2aWdhdGlvbiA9IF9leHRlbmRzKHtcbiAgICAgICAgc3RhdGU6IFwibG9hZGluZ1wiLFxuICAgICAgICBsb2NhdGlvbjogY3JlYXRlTG9jYXRpb24oc3RhdGUubG9jYXRpb24sIHJlc3VsdC5sb2NhdGlvbilcbiAgICAgIH0sIHN1Ym1pc3Npb24pO1xuXG4gICAgICBhd2FpdCBzdGFydFJlZGlyZWN0TmF2aWdhdGlvbihyZXN1bHQsIHJlZGlyZWN0TmF2aWdhdGlvbiwgb3B0cyAmJiBvcHRzLnJlcGxhY2UpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2hvcnRDaXJjdWl0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRXJyb3JSZXN1bHQocmVzdWx0KSkge1xuICAgICAgLy8gU3RvcmUgb2ZmIHRoZSBwZW5kaW5nIGVycm9yIC0gd2UgdXNlIGl0IHRvIGRldGVybWluZSB3aGljaCBsb2FkZXJzXG4gICAgICAvLyB0byBjYWxsIGFuZCB3aWxsIGNvbW1pdCBpdCB3aGVuIHdlIGNvbXBsZXRlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICBsZXQgYm91bmRhcnlNYXRjaCA9IGZpbmROZWFyZXN0Qm91bmRhcnkobWF0Y2hlcywgYWN0aW9uTWF0Y2gucm91dGUuaWQpOyAvLyBCeSBkZWZhdWx0LCBhbGwgc3VibWlzc2lvbnMgYXJlIFJFUExBQ0UgbmF2aWdhdGlvbnMsIGJ1dCBpZiB0aGVcbiAgICAgIC8vIGFjdGlvbiB0aHJldyBhbiBlcnJvciB0aGF0J2xsIGJlIHJlbmRlcmVkIGluIGFuIGVycm9yRWxlbWVudCwgd2UgZmFsbFxuICAgICAgLy8gYmFjayB0byBQVVNIIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHVzZSB0aGUgYmFjayBidXR0b24gdG8gZ2V0IGJhY2sgdG9cbiAgICAgIC8vIHRoZSBwcmUtc3VibWlzc2lvbiBmb3JtIGxvY2F0aW9uIHRvIHRyeSBhZ2FpblxuXG4gICAgICBpZiAoKG9wdHMgJiYgb3B0cy5yZXBsYWNlKSAhPT0gdHJ1ZSkge1xuICAgICAgICBwZW5kaW5nQWN0aW9uID0gQWN0aW9uLlB1c2g7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBlbmRpbmdBY3Rpb25FcnJvcjoge1xuICAgICAgICAgIFtib3VuZGFyeU1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmVycm9yXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRGVmZXJyZWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGVmZXIoKSBpcyBub3Qgc3VwcG9ydGVkIGluIGFjdGlvbnNcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBlbmRpbmdBY3Rpb25EYXRhOiB7XG4gICAgICAgIFthY3Rpb25NYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgfSAvLyBDYWxsIGFsbCBhcHBsaWNhYmxlIGxvYWRlcnMgZm9yIHRoZSBnaXZlbiBtYXRjaGVzLCBoYW5kbGluZyByZWRpcmVjdHMsXG4gIC8vIGVycm9ycywgZXRjLlxuXG5cbiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlTG9hZGVycyhyZXF1ZXN0LCBsb2NhdGlvbiwgbWF0Y2hlcywgb3ZlcnJpZGVOYXZpZ2F0aW9uLCBzdWJtaXNzaW9uLCByZXBsYWNlLCBwZW5kaW5nQWN0aW9uRGF0YSwgcGVuZGluZ0Vycm9yKSB7XG4gICAgLy8gRmlndXJlIG91dCB0aGUgcmlnaHQgbmF2aWdhdGlvbiB3ZSB3YW50IHRvIHVzZSBmb3IgZGF0YSBsb2FkaW5nXG4gICAgbGV0IGxvYWRpbmdOYXZpZ2F0aW9uID0gb3ZlcnJpZGVOYXZpZ2F0aW9uO1xuXG4gICAgaWYgKCFsb2FkaW5nTmF2aWdhdGlvbikge1xuICAgICAgbGV0IG5hdmlnYXRpb24gPSB7XG4gICAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIGZvcm1NZXRob2Q6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtRGF0YTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgbG9hZGluZ05hdmlnYXRpb24gPSBuYXZpZ2F0aW9uO1xuICAgIH1cblxuICAgIGxldCBbbWF0Y2hlc1RvTG9hZCwgcmV2YWxpZGF0aW5nRmV0Y2hlcnNdID0gZ2V0TWF0Y2hlc1RvTG9hZChzdGF0ZSwgbWF0Y2hlcywgc3VibWlzc2lvbiwgbG9jYXRpb24sIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQsIGNhbmNlbGxlZERlZmVycmVkUm91dGVzLCBjYW5jZWxsZWRGZXRjaGVyTG9hZHMsIHBlbmRpbmdBY3Rpb25EYXRhLCBwZW5kaW5nRXJyb3IsIGZldGNoTG9hZE1hdGNoZXMpOyAvLyBDYW5jZWwgcGVuZGluZyBkZWZlcnJlZHMgZm9yIG5vLWxvbmdlci1tYXRjaGVkIHJvdXRlcyBvciByb3V0ZXMgd2UncmVcbiAgICAvLyBhYm91dCB0byByZWxvYWQuICBOb3RlIHRoYXQgaWYgdGhpcyBpcyBhbiBhY3Rpb24gcmVsb2FkIHdlIHdvdWxkIGhhdmVcbiAgICAvLyBhbHJlYWR5IGNhbmNlbGxlZCBhbGwgcGVuZGluZyBkZWZlcnJlZHMgc28gdGhpcyB3b3VsZCBiZSBhIG5vLW9wXG5cbiAgICBjYW5jZWxBY3RpdmVEZWZlcnJlZHMocm91dGVJZCA9PiAhKG1hdGNoZXMgJiYgbWF0Y2hlcy5zb21lKG0gPT4gbS5yb3V0ZS5pZCA9PT0gcm91dGVJZCkpIHx8IG1hdGNoZXNUb0xvYWQgJiYgbWF0Y2hlc1RvTG9hZC5zb21lKG0gPT4gbS5yb3V0ZS5pZCA9PT0gcm91dGVJZCkpOyAvLyBTaG9ydCBjaXJjdWl0IGlmIHdlIGhhdmUgbm8gbG9hZGVycyB0byBydW5cblxuICAgIGlmIChtYXRjaGVzVG9Mb2FkLmxlbmd0aCA9PT0gMCAmJiByZXZhbGlkYXRpbmdGZXRjaGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbXBsZXRlTmF2aWdhdGlvbihsb2NhdGlvbiwge1xuICAgICAgICBtYXRjaGVzLFxuICAgICAgICBsb2FkZXJEYXRhOiBtZXJnZUxvYWRlckRhdGEoc3RhdGUubG9hZGVyRGF0YSwge30sIG1hdGNoZXMpLFxuICAgICAgICAvLyBDb21taXQgcGVuZGluZyBlcnJvciBpZiB3ZSdyZSBzaG9ydCBjaXJjdWl0aW5nXG4gICAgICAgIGVycm9yczogcGVuZGluZ0Vycm9yIHx8IG51bGwsXG4gICAgICAgIGFjdGlvbkRhdGE6IHBlbmRpbmdBY3Rpb25EYXRhIHx8IG51bGxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2hvcnRDaXJjdWl0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfSAvLyBJZiB0aGlzIGlzIGFuIHVuaW50ZXJydXB0ZWQgcmV2YWxpZGF0aW9uLCB3ZSByZW1haW4gaW4gb3VyIGN1cnJlbnQgaWRsZVxuICAgIC8vIHN0YXRlLiAgSWYgbm90LCB3ZSBuZWVkIHRvIHN3aXRjaCB0byBvdXIgbG9hZGluZyBzdGF0ZSBhbmQgbG9hZCBkYXRhLFxuICAgIC8vIHByZXNlcnZpbmcgYW55IG5ldyBhY3Rpb24gZGF0YSBvciBleGlzdGluZyBhY3Rpb24gZGF0YSAoaW4gdGhlIGNhc2Ugb2ZcbiAgICAvLyBhIHJldmFsaWRhdGlvbiBpbnRlcnJ1cHRpbmcgYW4gYWN0aW9uUmVsb2FkKVxuXG5cbiAgICBpZiAoIWlzVW5pbnRlcnJ1cHRlZFJldmFsaWRhdGlvbikge1xuICAgICAgcmV2YWxpZGF0aW5nRmV0Y2hlcnMuZm9yRWFjaChfcmVmMiA9PiB7XG4gICAgICAgIGxldCBba2V5XSA9IF9yZWYyO1xuICAgICAgICBjb25zdCBmZXRjaGVyID0gc3RhdGUuZmV0Y2hlcnMuZ2V0KGtleSk7XG4gICAgICAgIGxldCByZXZhbGlkYXRpbmdGZXRjaGVyID0ge1xuICAgICAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgICAgICBkYXRhOiBmZXRjaGVyICYmIGZldGNoZXIuZGF0YSxcbiAgICAgICAgICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICAgICAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgZm9ybURhdGE6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCByZXZhbGlkYXRpbmdGZXRjaGVyKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlU3RhdGUoX2V4dGVuZHMoe1xuICAgICAgICBuYXZpZ2F0aW9uOiBsb2FkaW5nTmF2aWdhdGlvbixcbiAgICAgICAgYWN0aW9uRGF0YTogcGVuZGluZ0FjdGlvbkRhdGEgfHwgc3RhdGUuYWN0aW9uRGF0YSB8fCBudWxsXG4gICAgICB9LCByZXZhbGlkYXRpbmdGZXRjaGVycy5sZW5ndGggPiAwID8ge1xuICAgICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICAgIH0gOiB7fSkpO1xuICAgIH1cblxuICAgIHBlbmRpbmdOYXZpZ2F0aW9uTG9hZElkID0gKytpbmNyZW1lbnRpbmdMb2FkSWQ7XG4gICAgcmV2YWxpZGF0aW5nRmV0Y2hlcnMuZm9yRWFjaChfcmVmMyA9PiB7XG4gICAgICBsZXQgW2tleV0gPSBfcmVmMztcbiAgICAgIHJldHVybiBmZXRjaENvbnRyb2xsZXJzLnNldChrZXksIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlcik7XG4gICAgfSk7XG4gICAgbGV0IHtcbiAgICAgIHJlc3VsdHMsXG4gICAgICBsb2FkZXJSZXN1bHRzLFxuICAgICAgZmV0Y2hlclJlc3VsdHNcbiAgICB9ID0gYXdhaXQgY2FsbExvYWRlcnNBbmRNYXliZVJlc29sdmVEYXRhKHN0YXRlLm1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIHJldmFsaWRhdGluZ0ZldGNoZXJzLCByZXF1ZXN0KTtcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzaG9ydENpcmN1aXRlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9IC8vIENsZWFuIHVwIF9hZnRlcl8gbG9hZGVycyBoYXZlIGNvbXBsZXRlZC4gIERvbid0IGNsZWFuIHVwIGlmIHdlIHNob3J0XG4gICAgLy8gY2lyY3VpdGVkIGJlY2F1c2UgZmV0Y2hDb250cm9sbGVycyB3b3VsZCBoYXZlIGJlZW4gYWJvcnRlZCBhbmRcbiAgICAvLyByZWFzc2lnbmVkIHRvIG5ldyBjb250cm9sbGVycyBmb3IgdGhlIG5leHQgbmF2aWdhdGlvblxuXG5cbiAgICByZXZhbGlkYXRpbmdGZXRjaGVycy5mb3JFYWNoKF9yZWY0ID0+IHtcbiAgICAgIGxldCBba2V5XSA9IF9yZWY0O1xuICAgICAgcmV0dXJuIGZldGNoQ29udHJvbGxlcnMuZGVsZXRlKGtleSk7XG4gICAgfSk7IC8vIElmIGFueSBsb2FkZXJzIHJldHVybmVkIGEgcmVkaXJlY3QgUmVzcG9uc2UsIHN0YXJ0IGEgbmV3IFJFUExBQ0UgbmF2aWdhdGlvblxuXG4gICAgbGV0IHJlZGlyZWN0ID0gZmluZFJlZGlyZWN0KHJlc3VsdHMpO1xuXG4gICAgaWYgKHJlZGlyZWN0KSB7XG4gICAgICBsZXQgcmVkaXJlY3ROYXZpZ2F0aW9uID0gZ2V0TG9hZGVyUmVkaXJlY3Qoc3RhdGUsIHJlZGlyZWN0KTtcbiAgICAgIGF3YWl0IHN0YXJ0UmVkaXJlY3ROYXZpZ2F0aW9uKHJlZGlyZWN0LCByZWRpcmVjdE5hdmlnYXRpb24sIHJlcGxhY2UpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2hvcnRDaXJjdWl0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfSAvLyBQcm9jZXNzIGFuZCBjb21taXQgb3V0cHV0IGZyb20gbG9hZGVyc1xuXG5cbiAgICBsZXQge1xuICAgICAgbG9hZGVyRGF0YSxcbiAgICAgIGVycm9yc1xuICAgIH0gPSBwcm9jZXNzTG9hZGVyRGF0YShzdGF0ZSwgbWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgbG9hZGVyUmVzdWx0cywgcGVuZGluZ0Vycm9yLCByZXZhbGlkYXRpbmdGZXRjaGVycywgZmV0Y2hlclJlc3VsdHMsIGFjdGl2ZURlZmVycmVkcyk7IC8vIFdpcmUgdXAgc3Vic2NyaWJlcnMgdG8gdXBkYXRlIGxvYWRlckRhdGEgYXMgcHJvbWlzZXMgc2V0dGxlXG5cbiAgICBhY3RpdmVEZWZlcnJlZHMuZm9yRWFjaCgoZGVmZXJyZWREYXRhLCByb3V0ZUlkKSA9PiB7XG4gICAgICBkZWZlcnJlZERhdGEuc3Vic2NyaWJlKGFib3J0ZWQgPT4ge1xuICAgICAgICAvLyBOb3RlOiBObyBuZWVkIHRvIHVwZGF0ZVN0YXRlIGhlcmUgc2luY2UgdGhlIFRyYWNrZWRQcm9taXNlIG9uXG4gICAgICAgIC8vIGxvYWRlckRhdGEgaXMgc3RhYmxlIGFjcm9zcyByZXNvbHZlL3JlamVjdFxuICAgICAgICAvLyBSZW1vdmUgdGhpcyBpbnN0YW5jZSBpZiB3ZSB3ZXJlIGFib3J0ZWQgb3IgaWYgcHJvbWlzZXMgaGF2ZSBzZXR0bGVkXG4gICAgICAgIGlmIChhYm9ydGVkIHx8IGRlZmVycmVkRGF0YS5kb25lKSB7XG4gICAgICAgICAgYWN0aXZlRGVmZXJyZWRzLmRlbGV0ZShyb3V0ZUlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgbWFya0ZldGNoUmVkaXJlY3RzRG9uZSgpO1xuICAgIGxldCBkaWRBYm9ydEZldGNoTG9hZHMgPSBhYm9ydFN0YWxlRmV0Y2hMb2FkcyhwZW5kaW5nTmF2aWdhdGlvbkxvYWRJZCk7XG4gICAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICAgIGxvYWRlckRhdGEsXG4gICAgICBlcnJvcnNcbiAgICB9LCBkaWRBYm9ydEZldGNoTG9hZHMgfHwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMubGVuZ3RoID4gMCA/IHtcbiAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgIH0gOiB7fSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGZXRjaGVyKGtleSkge1xuICAgIHJldHVybiBzdGF0ZS5mZXRjaGVycy5nZXQoa2V5KSB8fCBJRExFX0ZFVENIRVI7XG4gIH0gLy8gVHJpZ2dlciBhIGZldGNoZXIgbG9hZC9zdWJtaXQgZm9yIHRoZSBnaXZlbiBmZXRjaGVyIGtleVxuXG5cbiAgZnVuY3Rpb24gZmV0Y2goa2V5LCByb3V0ZUlkLCBocmVmLCBvcHRzKSB7XG4gICAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInJvdXRlci5mZXRjaCgpIHdhcyBjYWxsZWQgZHVyaW5nIHRoZSBzZXJ2ZXIgcmVuZGVyLCBidXQgaXQgc2hvdWxkbid0IGJlLiBcIiArIFwiWW91IGFyZSBsaWtlbHkgY2FsbGluZyBhIHVzZUZldGNoZXIoKSBtZXRob2QgaW4gdGhlIGJvZHkgb2YgeW91ciBjb21wb25lbnQuIFwiICsgXCJUcnkgbW92aW5nIGl0IHRvIGEgdXNlRWZmZWN0IG9yIGEgY2FsbGJhY2suXCIpO1xuICAgIH1cblxuICAgIGlmIChmZXRjaENvbnRyb2xsZXJzLmhhcyhrZXkpKSBhYm9ydEZldGNoZXIoa2V5KTtcbiAgICBsZXQgbWF0Y2hlcyA9IG1hdGNoUm91dGVzKGRhdGFSb3V0ZXMsIGhyZWYsIGluaXQuYmFzZW5hbWUpO1xuXG4gICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICBzZXRGZXRjaGVyRXJyb3Ioa2V5LCByb3V0ZUlkLCBuZXcgRXJyb3JSZXNwb25zZSg0MDQsIFwiTm90IEZvdW5kXCIsIG51bGwpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQge1xuICAgICAgcGF0aCxcbiAgICAgIHN1Ym1pc3Npb25cbiAgICB9ID0gbm9ybWFsaXplTmF2aWdhdGVPcHRpb25zKGhyZWYsIG9wdHMsIHRydWUpO1xuICAgIGxldCBtYXRjaCA9IGdldFRhcmdldE1hdGNoKG1hdGNoZXMsIHBhdGgpO1xuXG4gICAgaWYgKHN1Ym1pc3Npb24pIHtcbiAgICAgIGhhbmRsZUZldGNoZXJBY3Rpb24oa2V5LCByb3V0ZUlkLCBwYXRoLCBtYXRjaCwgc3VibWlzc2lvbik7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBTdG9yZSBvZmYgdGhlIG1hdGNoIHNvIHdlIGNhbiBjYWxsIGl0J3Mgc2hvdWxkUmV2YWxpZGF0ZSBvbiBzdWJzZXF1ZW50XG4gICAgLy8gcmV2YWxpZGF0aW9uc1xuXG5cbiAgICBmZXRjaExvYWRNYXRjaGVzLnNldChrZXksIFtwYXRoLCBtYXRjaF0pO1xuICAgIGhhbmRsZUZldGNoZXJMb2FkZXIoa2V5LCByb3V0ZUlkLCBwYXRoLCBtYXRjaCk7XG4gIH0gLy8gQ2FsbCB0aGUgYWN0aW9uIGZvciB0aGUgbWF0Y2hlZCBmZXRjaGVyLnN1Ym1pdCgpLCBhbmQgdGhlbiBoYW5kbGUgcmVkaXJlY3RzLFxuICAvLyBlcnJvcnMsIGFuZCByZXZhbGlkYXRpb25cblxuXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUZldGNoZXJBY3Rpb24oa2V5LCByb3V0ZUlkLCBwYXRoLCBtYXRjaCwgc3VibWlzc2lvbikge1xuICAgIGludGVycnVwdEFjdGl2ZUxvYWRzKCk7XG4gICAgZmV0Y2hMb2FkTWF0Y2hlcy5kZWxldGUoa2V5KTtcblxuICAgIGlmICghbWF0Y2gucm91dGUuYWN0aW9uKSB7XG4gICAgICBsZXQge1xuICAgICAgICBlcnJvclxuICAgICAgfSA9IGdldE1ldGhvZE5vdEFsbG93ZWRSZXN1bHQocGF0aCk7XG4gICAgICBzZXRGZXRjaGVyRXJyb3Ioa2V5LCByb3V0ZUlkLCBlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBQdXQgdGhpcyBmZXRjaGVyIGludG8gaXQncyBzdWJtaXR0aW5nIHN0YXRlXG5cblxuICAgIGxldCBleGlzdGluZ0ZldGNoZXIgPSBzdGF0ZS5mZXRjaGVycy5nZXQoa2V5KTtcblxuICAgIGxldCBmZXRjaGVyID0gX2V4dGVuZHMoe1xuICAgICAgc3RhdGU6IFwic3VibWl0dGluZ1wiXG4gICAgfSwgc3VibWlzc2lvbiwge1xuICAgICAgZGF0YTogZXhpc3RpbmdGZXRjaGVyICYmIGV4aXN0aW5nRmV0Y2hlci5kYXRhXG4gICAgfSk7XG5cbiAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCBmZXRjaGVyKTtcbiAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICB9KTsgLy8gQ2FsbCB0aGUgYWN0aW9uIGZvciB0aGUgZmV0Y2hlclxuXG4gICAgbGV0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBsZXQgZmV0Y2hSZXF1ZXN0ID0gY3JlYXRlUmVxdWVzdChwYXRoLCBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLCBzdWJtaXNzaW9uKTtcbiAgICBmZXRjaENvbnRyb2xsZXJzLnNldChrZXksIGFib3J0Q29udHJvbGxlcik7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IGF3YWl0IGNhbGxMb2FkZXJPckFjdGlvbihcImFjdGlvblwiLCBmZXRjaFJlcXVlc3QsIG1hdGNoKTtcblxuICAgIGlmIChmZXRjaFJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIC8vIFdlIGNhbiBkZWxldGUgdGhpcyBzbyBsb25nIGFzIHdlIHdlcmVuJ3QgYWJvcnRlZCBieSBvdSBvdXIgb3duIGZldGNoZXJcbiAgICAgIC8vIHJlLXN1Ym1pdCB3aGljaCB3b3VsZCBoYXZlIHB1dCBfbmV3XyBjb250cm9sbGVyIGlzIGluIGZldGNoQ29udHJvbGxlcnNcbiAgICAgIGlmIChmZXRjaENvbnRyb2xsZXJzLmdldChrZXkpID09PSBhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgICAgZmV0Y2hDb250cm9sbGVycy5kZWxldGUoa2V5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc1JlZGlyZWN0UmVzdWx0KGFjdGlvblJlc3VsdCkpIHtcbiAgICAgIGZldGNoQ29udHJvbGxlcnMuZGVsZXRlKGtleSk7XG4gICAgICBmZXRjaFJlZGlyZWN0SWRzLmFkZChrZXkpO1xuXG4gICAgICBsZXQgbG9hZGluZ0ZldGNoZXIgPSBfZXh0ZW5kcyh7XG4gICAgICAgIHN0YXRlOiBcImxvYWRpbmdcIlxuICAgICAgfSwgc3VibWlzc2lvbiwge1xuICAgICAgICBkYXRhOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuXG4gICAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCBsb2FkaW5nRmV0Y2hlcik7XG4gICAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgICAgfSk7XG5cbiAgICAgIGxldCByZWRpcmVjdE5hdmlnYXRpb24gPSBfZXh0ZW5kcyh7XG4gICAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgICAgbG9jYXRpb246IGNyZWF0ZUxvY2F0aW9uKHN0YXRlLmxvY2F0aW9uLCBhY3Rpb25SZXN1bHQubG9jYXRpb24pXG4gICAgICB9LCBzdWJtaXNzaW9uKTtcblxuICAgICAgYXdhaXQgc3RhcnRSZWRpcmVjdE5hdmlnYXRpb24oYWN0aW9uUmVzdWx0LCByZWRpcmVjdE5hdmlnYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gUHJvY2VzcyBhbnkgbm9uLXJlZGlyZWN0IGVycm9ycyB0aHJvd25cblxuXG4gICAgaWYgKGlzRXJyb3JSZXN1bHQoYWN0aW9uUmVzdWx0KSkge1xuICAgICAgc2V0RmV0Y2hlckVycm9yKGtleSwgcm91dGVJZCwgYWN0aW9uUmVzdWx0LmVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNEZWZlcnJlZFJlc3VsdChhY3Rpb25SZXN1bHQpKSB7XG4gICAgICBpbnZhcmlhbnQoZmFsc2UsIFwiZGVmZXIoKSBpcyBub3Qgc3VwcG9ydGVkIGluIGFjdGlvbnNcIik7XG4gICAgfSAvLyBTdGFydCB0aGUgZGF0YSBsb2FkIGZvciBjdXJyZW50IG1hdGNoZXMsIG9yIHRoZSBuZXh0IGxvY2F0aW9uIGlmIHdlJ3JlXG4gICAgLy8gaW4gdGhlIG1pZGRsZSBvZiBhIG5hdmlnYXRpb25cblxuXG4gICAgbGV0IG5leHRMb2NhdGlvbiA9IHN0YXRlLm5hdmlnYXRpb24ubG9jYXRpb24gfHwgc3RhdGUubG9jYXRpb247XG4gICAgbGV0IHJldmFsaWRhdGlvblJlcXVlc3QgPSBjcmVhdGVSZXF1ZXN0KG5leHRMb2NhdGlvbiwgYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgbGV0IG1hdGNoZXMgPSBzdGF0ZS5uYXZpZ2F0aW9uLnN0YXRlICE9PSBcImlkbGVcIiA/IG1hdGNoUm91dGVzKGRhdGFSb3V0ZXMsIHN0YXRlLm5hdmlnYXRpb24ubG9jYXRpb24sIGluaXQuYmFzZW5hbWUpIDogc3RhdGUubWF0Y2hlcztcbiAgICBpbnZhcmlhbnQobWF0Y2hlcywgXCJEaWRuJ3QgZmluZCBhbnkgbWF0Y2hlcyBhZnRlciBmZXRjaGVyIGFjdGlvblwiKTtcbiAgICBsZXQgbG9hZElkID0gKytpbmNyZW1lbnRpbmdMb2FkSWQ7XG4gICAgZmV0Y2hSZWxvYWRJZHMuc2V0KGtleSwgbG9hZElkKTtcblxuICAgIGxldCBsb2FkRmV0Y2hlciA9IF9leHRlbmRzKHtcbiAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgIGRhdGE6IGFjdGlvblJlc3VsdC5kYXRhXG4gICAgfSwgc3VibWlzc2lvbik7XG5cbiAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCBsb2FkRmV0Y2hlcik7XG4gICAgbGV0IFttYXRjaGVzVG9Mb2FkLCByZXZhbGlkYXRpbmdGZXRjaGVyc10gPSBnZXRNYXRjaGVzVG9Mb2FkKHN0YXRlLCBtYXRjaGVzLCBzdWJtaXNzaW9uLCBuZXh0TG9jYXRpb24sIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQsIGNhbmNlbGxlZERlZmVycmVkUm91dGVzLCBjYW5jZWxsZWRGZXRjaGVyTG9hZHMsIHtcbiAgICAgIFttYXRjaC5yb3V0ZS5pZF06IGFjdGlvblJlc3VsdC5kYXRhXG4gICAgfSwgdW5kZWZpbmVkLCAvLyBObyBuZWVkIHRvIHNlbmQgdGhyb3VnaCBlcnJvcnMgc2luY2Ugd2Ugc2hvcnQgY2lyY3VpdCBhYm92ZVxuICAgIGZldGNoTG9hZE1hdGNoZXMpOyAvLyBQdXQgYWxsIHJldmFsaWRhdGluZyBmZXRjaGVycyBpbnRvIHRoZSBsb2FkaW5nIHN0YXRlLCBleGNlcHQgZm9yIHRoZVxuICAgIC8vIGN1cnJlbnQgZmV0Y2hlciB3aGljaCB3ZSB3YW50IHRvIGtlZXAgaW4gaXQncyBjdXJyZW50IGxvYWRpbmcgc3RhdGUgd2hpY2hcbiAgICAvLyBjb250YWlucyBpdCdzIGFjdGlvbiBzdWJtaXNzaW9uIGluZm8gKyBhY3Rpb24gZGF0YVxuXG4gICAgcmV2YWxpZGF0aW5nRmV0Y2hlcnMuZmlsdGVyKF9yZWY1ID0+IHtcbiAgICAgIGxldCBbc3RhbGVLZXldID0gX3JlZjU7XG4gICAgICByZXR1cm4gc3RhbGVLZXkgIT09IGtleTtcbiAgICB9KS5mb3JFYWNoKF9yZWY2ID0+IHtcbiAgICAgIGxldCBbc3RhbGVLZXldID0gX3JlZjY7XG4gICAgICBsZXQgZXhpc3RpbmdGZXRjaGVyID0gc3RhdGUuZmV0Y2hlcnMuZ2V0KHN0YWxlS2V5KTtcbiAgICAgIGxldCByZXZhbGlkYXRpbmdGZXRjaGVyID0ge1xuICAgICAgICBzdGF0ZTogXCJsb2FkaW5nXCIsXG4gICAgICAgIGRhdGE6IGV4aXN0aW5nRmV0Y2hlciAmJiBleGlzdGluZ0ZldGNoZXIuZGF0YSxcbiAgICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICBzdGF0ZS5mZXRjaGVycy5zZXQoc3RhbGVLZXksIHJldmFsaWRhdGluZ0ZldGNoZXIpO1xuICAgICAgZmV0Y2hDb250cm9sbGVycy5zZXQoc3RhbGVLZXksIGFib3J0Q29udHJvbGxlcik7XG4gICAgfSk7XG4gICAgdXBkYXRlU3RhdGUoe1xuICAgICAgZmV0Y2hlcnM6IG5ldyBNYXAoc3RhdGUuZmV0Y2hlcnMpXG4gICAgfSk7XG4gICAgbGV0IHtcbiAgICAgIHJlc3VsdHMsXG4gICAgICBsb2FkZXJSZXN1bHRzLFxuICAgICAgZmV0Y2hlclJlc3VsdHNcbiAgICB9ID0gYXdhaXQgY2FsbExvYWRlcnNBbmRNYXliZVJlc29sdmVEYXRhKHN0YXRlLm1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIHJldmFsaWRhdGluZ0ZldGNoZXJzLCByZXZhbGlkYXRpb25SZXF1ZXN0KTtcblxuICAgIGlmIChhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmZXRjaFJlbG9hZElkcy5kZWxldGUoa2V5KTtcbiAgICBmZXRjaENvbnRyb2xsZXJzLmRlbGV0ZShrZXkpO1xuICAgIHJldmFsaWRhdGluZ0ZldGNoZXJzLmZvckVhY2goX3JlZjcgPT4ge1xuICAgICAgbGV0IFtzdGFsZUtleV0gPSBfcmVmNztcbiAgICAgIHJldHVybiBmZXRjaENvbnRyb2xsZXJzLmRlbGV0ZShzdGFsZUtleSk7XG4gICAgfSk7XG4gICAgbGV0IHJlZGlyZWN0ID0gZmluZFJlZGlyZWN0KHJlc3VsdHMpO1xuXG4gICAgaWYgKHJlZGlyZWN0KSB7XG4gICAgICBsZXQgcmVkaXJlY3ROYXZpZ2F0aW9uID0gZ2V0TG9hZGVyUmVkaXJlY3Qoc3RhdGUsIHJlZGlyZWN0KTtcbiAgICAgIGF3YWl0IHN0YXJ0UmVkaXJlY3ROYXZpZ2F0aW9uKHJlZGlyZWN0LCByZWRpcmVjdE5hdmlnYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gUHJvY2VzcyBhbmQgY29tbWl0IG91dHB1dCBmcm9tIGxvYWRlcnNcblxuXG4gICAgbGV0IHtcbiAgICAgIGxvYWRlckRhdGEsXG4gICAgICBlcnJvcnNcbiAgICB9ID0gcHJvY2Vzc0xvYWRlckRhdGEoc3RhdGUsIHN0YXRlLm1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIGxvYWRlclJlc3VsdHMsIHVuZGVmaW5lZCwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMsIGZldGNoZXJSZXN1bHRzLCBhY3RpdmVEZWZlcnJlZHMpO1xuICAgIGxldCBkb25lRmV0Y2hlciA9IHtcbiAgICAgIHN0YXRlOiBcImlkbGVcIixcbiAgICAgIGRhdGE6IGFjdGlvblJlc3VsdC5kYXRhLFxuICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICAgICAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIHN0YXRlLmZldGNoZXJzLnNldChrZXksIGRvbmVGZXRjaGVyKTtcbiAgICBsZXQgZGlkQWJvcnRGZXRjaExvYWRzID0gYWJvcnRTdGFsZUZldGNoTG9hZHMobG9hZElkKTsgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbiBhIG5hdmlnYXRpb24gbG9hZGluZyBzdGF0ZSBhbmQgdGhpcyBmZXRjaGVyIGlzXG4gICAgLy8gbW9yZSByZWNlbnQgdGhhbiB0aGUgbmF2aWdhdGlvbiwgd2Ugd2FudCB0aGUgbmV3ZXIgZGF0YSBzbyBhYm9ydCB0aGVcbiAgICAvLyBuYXZpZ2F0aW9uIGFuZCBjb21wbGV0ZSBpdCB3aXRoIHRoZSBmZXRjaGVyIGRhdGFcblxuICAgIGlmIChzdGF0ZS5uYXZpZ2F0aW9uLnN0YXRlID09PSBcImxvYWRpbmdcIiAmJiBsb2FkSWQgPiBwZW5kaW5nTmF2aWdhdGlvbkxvYWRJZCkge1xuICAgICAgaW52YXJpYW50KHBlbmRpbmdBY3Rpb24sIFwiRXhwZWN0ZWQgcGVuZGluZyBhY3Rpb25cIik7XG4gICAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgJiYgcGVuZGluZ05hdmlnYXRpb25Db250cm9sbGVyLmFib3J0KCk7XG4gICAgICBjb21wbGV0ZU5hdmlnYXRpb24oc3RhdGUubmF2aWdhdGlvbi5sb2NhdGlvbiwge1xuICAgICAgICBtYXRjaGVzLFxuICAgICAgICBsb2FkZXJEYXRhLFxuICAgICAgICBlcnJvcnMsXG4gICAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHVwZGF0ZSB3aXRoIHRoZSBmZXRjaGVyIGRhdGEsIHByZXNlcnZpbmcgYW55IGV4aXN0aW5nXG4gICAgICAvLyBsb2FkZXJEYXRhIGZvciBsb2FkZXJzIHRoYXQgZGlkIG5vdCBuZWVkIHRvIHJlbG9hZC4gIFdlIGhhdmUgdG9cbiAgICAgIC8vIG1hbnVhbGx5IG1lcmdlIGhlcmUgc2luY2Ugd2UgYXJlbid0IGdvaW5nIHRocm91Z2ggY29tcGxldGVOYXZpZ2F0aW9uXG4gICAgICB1cGRhdGVTdGF0ZShfZXh0ZW5kcyh7XG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgbG9hZGVyRGF0YTogbWVyZ2VMb2FkZXJEYXRhKHN0YXRlLmxvYWRlckRhdGEsIGxvYWRlckRhdGEsIG1hdGNoZXMpXG4gICAgICB9LCBkaWRBYm9ydEZldGNoTG9hZHMgPyB7XG4gICAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgICAgfSA6IHt9KSk7XG4gICAgICBpc1JldmFsaWRhdGlvblJlcXVpcmVkID0gZmFsc2U7XG4gICAgfVxuICB9IC8vIENhbGwgdGhlIG1hdGNoZWQgbG9hZGVyIGZvciBmZXRjaGVyLmxvYWQoKSwgaGFuZGxpbmcgcmVkaXJlY3RzLCBlcnJvcnMsIGV0Yy5cblxuXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUZldGNoZXJMb2FkZXIoa2V5LCByb3V0ZUlkLCBwYXRoLCBtYXRjaCkge1xuICAgIGxldCBleGlzdGluZ0ZldGNoZXIgPSBzdGF0ZS5mZXRjaGVycy5nZXQoa2V5KTsgLy8gUHV0IHRoaXMgZmV0Y2hlciBpbnRvIGl0J3MgbG9hZGluZyBzdGF0ZVxuXG4gICAgbGV0IGxvYWRpbmdGZXRjaGVyID0ge1xuICAgICAgc3RhdGU6IFwibG9hZGluZ1wiLFxuICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICAgICAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWQsXG4gICAgICBkYXRhOiBleGlzdGluZ0ZldGNoZXIgJiYgZXhpc3RpbmdGZXRjaGVyLmRhdGFcbiAgICB9O1xuICAgIHN0YXRlLmZldGNoZXJzLnNldChrZXksIGxvYWRpbmdGZXRjaGVyKTtcbiAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICB9KTsgLy8gQ2FsbCB0aGUgbG9hZGVyIGZvciB0aGlzIGZldGNoZXIgcm91dGUgbWF0Y2hcblxuICAgIGxldCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgbGV0IGZldGNoUmVxdWVzdCA9IGNyZWF0ZVJlcXVlc3QocGF0aCwgYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgZmV0Y2hDb250cm9sbGVycy5zZXQoa2V5LCBhYm9ydENvbnRyb2xsZXIpO1xuICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsTG9hZGVyT3JBY3Rpb24oXCJsb2FkZXJcIiwgZmV0Y2hSZXF1ZXN0LCBtYXRjaCk7IC8vIERlZmVycmVkIGlzbid0IHN1cHBvcnRlZCBvciBmZXRjaGVyIGxvYWRzLCBhd2FpdCBldmVyeXRoaW5nIGFuZCB0cmVhdCBpdFxuICAgIC8vIGFzIGEgbm9ybWFsIGxvYWQuICByZXNvbHZlRGVmZXJyZWREYXRhIHdpbGwgcmV0dXJuIHVuZGVmaW5lZCBpZiB0aGlzXG4gICAgLy8gZmV0Y2hlciBnZXRzIGFib3J0ZWQsIHNvIHdlIGp1c3QgbGVhdmUgcmVzdWx0IHVudG91Y2hlZCBhbmQgc2hvcnQgY2lyY3VpdFxuICAgIC8vIGJlbG93IGlmIHRoYXQgaGFwcGVuc1xuXG4gICAgaWYgKGlzRGVmZXJyZWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgcmVzdWx0ID0gKGF3YWl0IHJlc29sdmVEZWZlcnJlZERhdGEocmVzdWx0LCBmZXRjaFJlcXVlc3Quc2lnbmFsLCB0cnVlKSkgfHwgcmVzdWx0O1xuICAgIH0gLy8gV2UgY2FuIGRlbGV0ZSB0aGlzIHNvIGxvbmcgYXMgd2Ugd2VyZW4ndCBhYm9ydGVkIGJ5IG91IG91ciBvd24gZmV0Y2hlclxuICAgIC8vIHJlLWxvYWQgd2hpY2ggd291bGQgaGF2ZSBwdXQgX25ld18gY29udHJvbGxlciBpcyBpbiBmZXRjaENvbnRyb2xsZXJzXG5cblxuICAgIGlmIChmZXRjaENvbnRyb2xsZXJzLmdldChrZXkpID09PSBhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgIGZldGNoQ29udHJvbGxlcnMuZGVsZXRlKGtleSk7XG4gICAgfVxuXG4gICAgaWYgKGZldGNoUmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgdGhlIGxvYWRlciB0aHJldyBhIHJlZGlyZWN0IFJlc3BvbnNlLCBzdGFydCBhIG5ldyBSRVBMQUNFIG5hdmlnYXRpb25cblxuXG4gICAgaWYgKGlzUmVkaXJlY3RSZXN1bHQocmVzdWx0KSkge1xuICAgICAgbGV0IHJlZGlyZWN0TmF2aWdhdGlvbiA9IGdldExvYWRlclJlZGlyZWN0KHN0YXRlLCByZXN1bHQpO1xuICAgICAgYXdhaXQgc3RhcnRSZWRpcmVjdE5hdmlnYXRpb24ocmVzdWx0LCByZWRpcmVjdE5hdmlnYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gUHJvY2VzcyBhbnkgbm9uLXJlZGlyZWN0IGVycm9ycyB0aHJvd25cblxuXG4gICAgaWYgKGlzRXJyb3JSZXN1bHQocmVzdWx0KSkge1xuICAgICAgbGV0IGJvdW5kYXJ5TWF0Y2ggPSBmaW5kTmVhcmVzdEJvdW5kYXJ5KHN0YXRlLm1hdGNoZXMsIHJvdXRlSWQpO1xuICAgICAgc3RhdGUuZmV0Y2hlcnMuZGVsZXRlKGtleSk7IC8vIFRPRE86IEluIHJlbWl4LCB0aGlzIHdvdWxkIHJlc2V0IHRvIElETEVfTkFWSUdBVElPTiBpZiBpdCB3YXMgYSBjYXRjaCAtXG4gICAgICAvLyBkbyB3ZSBuZWVkIHRvIGJlaGF2ZSBhbnkgZGlmZmVyZW50bHkgd2l0aCBvdXIgbm9uLXJlZGlyZWN0IGVycm9ycz9cbiAgICAgIC8vIFdoYXQgaWYgaXQgd2FzIGEgbm9uLXJlZGlyZWN0IFJlc3BvbnNlP1xuXG4gICAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKSxcbiAgICAgICAgZXJyb3JzOiB7XG4gICAgICAgICAgW2JvdW5kYXJ5TWF0Y2gucm91dGUuaWRdOiByZXN1bHQuZXJyb3JcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW52YXJpYW50KCFpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCksIFwiVW5oYW5kbGVkIGZldGNoZXIgZGVmZXJyZWQgZGF0YVwiKTsgLy8gUHV0IHRoZSBmZXRjaGVyIGJhY2sgaW50byBhbiBpZGxlIHN0YXRlXG5cbiAgICBsZXQgZG9uZUZldGNoZXIgPSB7XG4gICAgICBzdGF0ZTogXCJpZGxlXCIsXG4gICAgICBkYXRhOiByZXN1bHQuZGF0YSxcbiAgICAgIGZvcm1NZXRob2Q6IHVuZGVmaW5lZCxcbiAgICAgIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gICAgICBmb3JtRGF0YTogdW5kZWZpbmVkXG4gICAgfTtcbiAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCBkb25lRmV0Y2hlcik7XG4gICAgdXBkYXRlU3RhdGUoe1xuICAgICAgZmV0Y2hlcnM6IG5ldyBNYXAoc3RhdGUuZmV0Y2hlcnMpXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gaGFuZGxlIHJlZGlyZWN0cyByZXR1cm5lZCBmcm9tIGFuIGFjdGlvbiBvciBsb2FkZXIuXG4gICAqIE5vcm1hbGx5LCBhIHJlZGlyZWN0IFwicmVwbGFjZXNcIiB0aGUgbmF2aWdhdGlvbiB0aGF0IHRyaWdnZXJlZCBpdC4gIFNvLCBmb3JcbiAgICogZXhhbXBsZTpcbiAgICpcbiAgICogIC0gdXNlciBpcyBvbiAvYVxuICAgKiAgLSB1c2VyIGNsaWNrcyBhIGxpbmsgdG8gL2JcbiAgICogIC0gbG9hZGVyIGZvciAvYiByZWRpcmVjdHMgdG8gL2NcbiAgICpcbiAgICogSW4gYSBub24tSlMgYXBwIHRoZSBicm93c2VyIHdvdWxkIHRyYWNrIHRoZSBpbi1mbGlnaHQgbmF2aWdhdGlvbiB0byAvYiBhbmRcbiAgICogdGhlbiByZXBsYWNlIGl0IHdpdGggL2Mgd2hlbiBpdCBlbmNvdW50ZXJlZCB0aGUgcmVkaXJlY3QgcmVzcG9uc2UuICBJblxuICAgKiB0aGUgZW5kIGl0IHdvdWxkIG9ubHkgZXZlciB1cGRhdGUgdGhlIFVSTCBiYXIgd2l0aCAvYy5cbiAgICpcbiAgICogSW4gY2xpZW50LXNpZGUgcm91dGluZyB1c2luZyBwdXNoU3RhdGUvcmVwbGFjZVN0YXRlLCB3ZSBhaW0gdG8gZW11bGF0ZVxuICAgKiB0aGlzIGJlaGF2aW9yIGFuZCB3ZSBhbHNvIGRvIG5vdCB1cGRhdGUgaGlzdG9yeSB1bnRpbCB0aGUgZW5kIG9mIHRoZVxuICAgKiBuYXZpZ2F0aW9uIChpbmNsdWRpbmcgcHJvY2Vzc2VkIHJlZGlyZWN0cykuICBUaGlzIG1lYW5zIHRoYXQgd2UgbmV2ZXJcbiAgICogYWN0dWFsbHkgdG91Y2ggaGlzdG9yeSB1bnRpbCB3ZSd2ZSBwcm9jZXNzZWQgcmVkaXJlY3RzLCBzbyB3ZSBqdXN0IHVzZVxuICAgKiB0aGUgaGlzdG9yeSBhY3Rpb24gZnJvbSB0aGUgb3JpZ2luYWwgbmF2aWdhdGlvbiAoUFVTSCBvciBSRVBMQUNFKS5cbiAgICovXG5cblxuICBhc3luYyBmdW5jdGlvbiBzdGFydFJlZGlyZWN0TmF2aWdhdGlvbihyZWRpcmVjdCwgbmF2aWdhdGlvbiwgcmVwbGFjZSkge1xuICAgIGlmIChyZWRpcmVjdC5yZXZhbGlkYXRlKSB7XG4gICAgICBpc1JldmFsaWRhdGlvblJlcXVpcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpbnZhcmlhbnQobmF2aWdhdGlvbi5sb2NhdGlvbiwgXCJFeHBlY3RlZCBhIGxvY2F0aW9uIG9uIHRoZSByZWRpcmVjdCBuYXZpZ2F0aW9uXCIpOyAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gYWJvcnQgb24gcmVkaXJlY3RzLCBzaW5jZSB3ZSBkb24ndCBkZXRlY3QgdGhlXG4gICAgLy8gcmVkaXJlY3QgdW50aWwgdGhlIGFjdGlvbi9sb2FkZXJzIGhhdmUgc2V0dGxlZFxuXG4gICAgcGVuZGluZ05hdmlnYXRpb25Db250cm9sbGVyID0gbnVsbDtcbiAgICBsZXQgcmVkaXJlY3RIaXN0b3J5QWN0aW9uID0gcmVwbGFjZSA9PT0gdHJ1ZSA/IEFjdGlvbi5SZXBsYWNlIDogQWN0aW9uLlB1c2g7XG4gICAgYXdhaXQgc3RhcnROYXZpZ2F0aW9uKHJlZGlyZWN0SGlzdG9yeUFjdGlvbiwgbmF2aWdhdGlvbi5sb2NhdGlvbiwge1xuICAgICAgb3ZlcnJpZGVOYXZpZ2F0aW9uOiBuYXZpZ2F0aW9uXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBjYWxsTG9hZGVyc0FuZE1heWJlUmVzb2x2ZURhdGEoY3VycmVudE1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIGZldGNoZXJzVG9Mb2FkLCByZXF1ZXN0KSB7XG4gICAgLy8gQ2FsbCBhbGwgbmF2aWdhdGlvbiBsb2FkZXJzIGFuZCByZXZhbGlkYXRpbmcgZmV0Y2hlciBsb2FkZXJzIGluIHBhcmFsbGVsLFxuICAgIC8vIHRoZW4gc2xpY2Ugb2ZmIHRoZSByZXN1bHRzIGludG8gc2VwYXJhdGUgYXJyYXlzIHNvIHdlIGNhbiBoYW5kbGUgdGhlbVxuICAgIC8vIGFjY29yZGluZ2x5XG4gICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbLi4ubWF0Y2hlc1RvTG9hZC5tYXAobSA9PiBjYWxsTG9hZGVyT3JBY3Rpb24oXCJsb2FkZXJcIiwgcmVxdWVzdCwgbSkpLCAuLi5mZXRjaGVyc1RvTG9hZC5tYXAoX3JlZjggPT4ge1xuICAgICAgbGV0IFssIGhyZWYsIG1hdGNoXSA9IF9yZWY4O1xuICAgICAgcmV0dXJuIGNhbGxMb2FkZXJPckFjdGlvbihcImxvYWRlclwiLCBjcmVhdGVSZXF1ZXN0KGhyZWYsIHJlcXVlc3Quc2lnbmFsKSwgbWF0Y2gpO1xuICAgIH0pXSk7XG4gICAgbGV0IGxvYWRlclJlc3VsdHMgPSByZXN1bHRzLnNsaWNlKDAsIG1hdGNoZXNUb0xvYWQubGVuZ3RoKTtcbiAgICBsZXQgZmV0Y2hlclJlc3VsdHMgPSByZXN1bHRzLnNsaWNlKG1hdGNoZXNUb0xvYWQubGVuZ3RoKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbcmVzb2x2ZURlZmVycmVkUmVzdWx0cyhjdXJyZW50TWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgbG9hZGVyUmVzdWx0cywgcmVxdWVzdC5zaWduYWwsIGZhbHNlLCBzdGF0ZS5sb2FkZXJEYXRhKSwgcmVzb2x2ZURlZmVycmVkUmVzdWx0cyhjdXJyZW50TWF0Y2hlcywgZmV0Y2hlcnNUb0xvYWQubWFwKF9yZWY5ID0+IHtcbiAgICAgIGxldCBbLCwgbWF0Y2hdID0gX3JlZjk7XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSksIGZldGNoZXJSZXN1bHRzLCByZXF1ZXN0LnNpZ25hbCwgdHJ1ZSldKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0cyxcbiAgICAgIGxvYWRlclJlc3VsdHMsXG4gICAgICBmZXRjaGVyUmVzdWx0c1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcnJ1cHRBY3RpdmVMb2FkcygpIHtcbiAgICAvLyBFdmVyeSBpbnRlcnJ1cHRpb24gdHJpZ2dlcnMgYSByZXZhbGlkYXRpb25cbiAgICBpc1JldmFsaWRhdGlvblJlcXVpcmVkID0gdHJ1ZTsgLy8gQ2FuY2VsIHBlbmRpbmcgcm91dGUtbGV2ZWwgZGVmZXJyZWRzIGFuZCBtYXJrIGNhbmNlbGxlZCByb3V0ZXMgZm9yXG4gICAgLy8gcmV2YWxpZGF0aW9uXG5cbiAgICBjYW5jZWxsZWREZWZlcnJlZFJvdXRlcy5wdXNoKC4uLmNhbmNlbEFjdGl2ZURlZmVycmVkcygpKTsgLy8gQWJvcnQgaW4tZmxpZ2h0IGZldGNoZXIgbG9hZHNcblxuICAgIGZldGNoTG9hZE1hdGNoZXMuZm9yRWFjaCgoXywga2V5KSA9PiB7XG4gICAgICBpZiAoZmV0Y2hDb250cm9sbGVycy5oYXMoa2V5KSkge1xuICAgICAgICBjYW5jZWxsZWRGZXRjaGVyTG9hZHMucHVzaChrZXkpO1xuICAgICAgICBhYm9ydEZldGNoZXIoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEZldGNoZXJFcnJvcihrZXksIHJvdXRlSWQsIGVycm9yKSB7XG4gICAgbGV0IGJvdW5kYXJ5TWF0Y2ggPSBmaW5kTmVhcmVzdEJvdW5kYXJ5KHN0YXRlLm1hdGNoZXMsIHJvdXRlSWQpO1xuICAgIGRlbGV0ZUZldGNoZXIoa2V5KTtcbiAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICBlcnJvcnM6IHtcbiAgICAgICAgW2JvdW5kYXJ5TWF0Y2gucm91dGUuaWRdOiBlcnJvclxuICAgICAgfSxcbiAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVsZXRlRmV0Y2hlcihrZXkpIHtcbiAgICBpZiAoZmV0Y2hDb250cm9sbGVycy5oYXMoa2V5KSkgYWJvcnRGZXRjaGVyKGtleSk7XG4gICAgZmV0Y2hMb2FkTWF0Y2hlcy5kZWxldGUoa2V5KTtcbiAgICBmZXRjaFJlbG9hZElkcy5kZWxldGUoa2V5KTtcbiAgICBmZXRjaFJlZGlyZWN0SWRzLmRlbGV0ZShrZXkpO1xuICAgIHN0YXRlLmZldGNoZXJzLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWJvcnRGZXRjaGVyKGtleSkge1xuICAgIGxldCBjb250cm9sbGVyID0gZmV0Y2hDb250cm9sbGVycy5nZXQoa2V5KTtcbiAgICBpbnZhcmlhbnQoY29udHJvbGxlciwgXCJFeHBlY3RlZCBmZXRjaCBjb250cm9sbGVyOiBcIiArIGtleSk7XG4gICAgY29udHJvbGxlci5hYm9ydCgpO1xuICAgIGZldGNoQ29udHJvbGxlcnMuZGVsZXRlKGtleSk7XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrRmV0Y2hlcnNEb25lKGtleXMpIHtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgICAgbGV0IGZldGNoZXIgPSBnZXRGZXRjaGVyKGtleSk7XG4gICAgICBsZXQgZG9uZUZldGNoZXIgPSB7XG4gICAgICAgIHN0YXRlOiBcImlkbGVcIixcbiAgICAgICAgZGF0YTogZmV0Y2hlci5kYXRhLFxuICAgICAgICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybURhdGE6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIHN0YXRlLmZldGNoZXJzLnNldChrZXksIGRvbmVGZXRjaGVyKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrRmV0Y2hSZWRpcmVjdHNEb25lKCkge1xuICAgIGxldCBkb25lS2V5cyA9IFtdO1xuXG4gICAgZm9yIChsZXQga2V5IG9mIGZldGNoUmVkaXJlY3RJZHMpIHtcbiAgICAgIGxldCBmZXRjaGVyID0gc3RhdGUuZmV0Y2hlcnMuZ2V0KGtleSk7XG4gICAgICBpbnZhcmlhbnQoZmV0Y2hlciwgXCJFeHBlY3RlZCBmZXRjaGVyOiBcIiArIGtleSk7XG5cbiAgICAgIGlmIChmZXRjaGVyLnN0YXRlID09PSBcImxvYWRpbmdcIikge1xuICAgICAgICBmZXRjaFJlZGlyZWN0SWRzLmRlbGV0ZShrZXkpO1xuICAgICAgICBkb25lS2V5cy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWFya0ZldGNoZXJzRG9uZShkb25lS2V5cyk7XG4gIH1cblxuICBmdW5jdGlvbiBhYm9ydFN0YWxlRmV0Y2hMb2FkcyhsYW5kZWRJZCkge1xuICAgIGxldCB5ZWV0ZWRLZXlzID0gW107XG5cbiAgICBmb3IgKGxldCBba2V5LCBpZF0gb2YgZmV0Y2hSZWxvYWRJZHMpIHtcbiAgICAgIGlmIChpZCA8IGxhbmRlZElkKSB7XG4gICAgICAgIGxldCBmZXRjaGVyID0gc3RhdGUuZmV0Y2hlcnMuZ2V0KGtleSk7XG4gICAgICAgIGludmFyaWFudChmZXRjaGVyLCBcIkV4cGVjdGVkIGZldGNoZXI6IFwiICsga2V5KTtcblxuICAgICAgICBpZiAoZmV0Y2hlci5zdGF0ZSA9PT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgICAgICBhYm9ydEZldGNoZXIoa2V5KTtcbiAgICAgICAgICBmZXRjaFJlbG9hZElkcy5kZWxldGUoa2V5KTtcbiAgICAgICAgICB5ZWV0ZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG1hcmtGZXRjaGVyc0RvbmUoeWVldGVkS2V5cyk7XG4gICAgcmV0dXJuIHllZXRlZEtleXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbEFjdGl2ZURlZmVycmVkcyhwcmVkaWNhdGUpIHtcbiAgICBsZXQgY2FuY2VsbGVkUm91dGVJZHMgPSBbXTtcbiAgICBhY3RpdmVEZWZlcnJlZHMuZm9yRWFjaCgoZGZkLCByb3V0ZUlkKSA9PiB7XG4gICAgICBpZiAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUocm91dGVJZCkpIHtcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBkZWZlcnJlZCAtIGJ1dCBkbyBub3QgcmVtb3ZlIGZyb20gYWN0aXZlRGVmZXJyZWRzIGhlcmUgLVxuICAgICAgICAvLyB3ZSByZWx5IG9uIHRoZSBzdWJzY3JpYmVycyB0byBkbyB0aGF0IHNvIG91ciB0ZXN0cyBjYW4gYXNzZXJ0IHByb3BlclxuICAgICAgICAvLyBjbGVhbnVwIHZpYSBfaW50ZXJuYWxBY3RpdmVEZWZlcnJlZHNcbiAgICAgICAgZGZkLmNhbmNlbCgpO1xuICAgICAgICBjYW5jZWxsZWRSb3V0ZUlkcy5wdXNoKHJvdXRlSWQpO1xuICAgICAgICBhY3RpdmVEZWZlcnJlZHMuZGVsZXRlKHJvdXRlSWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjYW5jZWxsZWRSb3V0ZUlkcztcbiAgfSAvLyBPcHQgaW4gdG8gY2FwdHVyaW5nIGFuZCByZXBvcnRpbmcgc2Nyb2xsIHBvc2l0aW9ucyBkdXJpbmcgbmF2aWdhdGlvbnMsXG4gIC8vIHVzZWQgYnkgdGhlIDxTY3JvbGxSZXN0b3JhdGlvbj4gY29tcG9uZW50XG5cblxuICBmdW5jdGlvbiBlbmFibGVTY3JvbGxSZXN0b3JhdGlvbihwb3NpdGlvbnMsIGdldFBvc2l0aW9uLCBnZXRLZXkpIHtcbiAgICBzYXZlZFNjcm9sbFBvc2l0aW9ucyA9IHBvc2l0aW9ucztcbiAgICBnZXRTY3JvbGxQb3NpdGlvbiA9IGdldFBvc2l0aW9uO1xuXG4gICAgZ2V0U2Nyb2xsUmVzdG9yYXRpb25LZXkgPSBnZXRLZXkgfHwgKGxvY2F0aW9uID0+IGxvY2F0aW9uLmtleSk7IC8vIFBlcmZvcm0gaW5pdGlhbCBoeWRyYXRpb24gc2Nyb2xsIHJlc3RvcmF0aW9uLCBzaW5jZSB3ZSBtaXNzIHRoZSBib2F0IG9uXG4gICAgLy8gdGhlIGluaXRpYWwgdXBkYXRlU3RhdGUoKSBiZWNhdXNlIHdlJ3ZlIG5vdCB5ZXQgcmVuZGVyZWQgPFNjcm9sbFJlc3RvcmF0aW9uLz5cbiAgICAvLyBhbmQgdGhlcmVmb3JlIGhhdmUgbm8gc2F2ZWRTY3JvbGxQb3NpdGlvbnMgYXZhaWxhYmxlXG5cblxuICAgIGlmICghaW5pdGlhbFNjcm9sbFJlc3RvcmVkICYmIHN0YXRlLm5hdmlnYXRpb24gPT09IElETEVfTkFWSUdBVElPTikge1xuICAgICAgaW5pdGlhbFNjcm9sbFJlc3RvcmVkID0gdHJ1ZTtcbiAgICAgIGxldCB5ID0gZ2V0U2F2ZWRTY3JvbGxQb3NpdGlvbihzdGF0ZS5sb2NhdGlvbiwgc3RhdGUubWF0Y2hlcyk7XG5cbiAgICAgIGlmICh5ICE9IG51bGwpIHtcbiAgICAgICAgdXBkYXRlU3RhdGUoe1xuICAgICAgICAgIHJlc3RvcmVTY3JvbGxQb3NpdGlvbjogeVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc2F2ZWRTY3JvbGxQb3NpdGlvbnMgPSBudWxsO1xuICAgICAgZ2V0U2Nyb2xsUG9zaXRpb24gPSBudWxsO1xuICAgICAgZ2V0U2Nyb2xsUmVzdG9yYXRpb25LZXkgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzYXZlU2Nyb2xsUG9zaXRpb24obG9jYXRpb24sIG1hdGNoZXMpIHtcbiAgICBpZiAoc2F2ZWRTY3JvbGxQb3NpdGlvbnMgJiYgZ2V0U2Nyb2xsUmVzdG9yYXRpb25LZXkgJiYgZ2V0U2Nyb2xsUG9zaXRpb24pIHtcbiAgICAgIGxldCB1c2VyTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gY3JlYXRlVXNlTWF0Y2hlc01hdGNoKG0sIHN0YXRlLmxvYWRlckRhdGEpKTtcbiAgICAgIGxldCBrZXkgPSBnZXRTY3JvbGxSZXN0b3JhdGlvbktleShsb2NhdGlvbiwgdXNlck1hdGNoZXMpIHx8IGxvY2F0aW9uLmtleTtcbiAgICAgIHNhdmVkU2Nyb2xsUG9zaXRpb25zW2tleV0gPSBnZXRTY3JvbGxQb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNhdmVkU2Nyb2xsUG9zaXRpb24obG9jYXRpb24sIG1hdGNoZXMpIHtcbiAgICBpZiAoc2F2ZWRTY3JvbGxQb3NpdGlvbnMgJiYgZ2V0U2Nyb2xsUmVzdG9yYXRpb25LZXkgJiYgZ2V0U2Nyb2xsUG9zaXRpb24pIHtcbiAgICAgIGxldCB1c2VyTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gY3JlYXRlVXNlTWF0Y2hlc01hdGNoKG0sIHN0YXRlLmxvYWRlckRhdGEpKTtcbiAgICAgIGxldCBrZXkgPSBnZXRTY3JvbGxSZXN0b3JhdGlvbktleShsb2NhdGlvbiwgdXNlck1hdGNoZXMpIHx8IGxvY2F0aW9uLmtleTtcbiAgICAgIGxldCB5ID0gc2F2ZWRTY3JvbGxQb3NpdGlvbnNba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiB5O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcm91dGVyID0ge1xuICAgIGdldCBiYXNlbmFtZSgpIHtcbiAgICAgIHJldHVybiBpbml0LmJhc2VuYW1lO1xuICAgIH0sXG5cbiAgICBnZXQgc3RhdGUoKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSxcblxuICAgIGdldCByb3V0ZXMoKSB7XG4gICAgICByZXR1cm4gZGF0YVJvdXRlcztcbiAgICB9LFxuXG4gICAgaW5pdGlhbGl6ZSxcbiAgICBzdWJzY3JpYmUsXG4gICAgZW5hYmxlU2Nyb2xsUmVzdG9yYXRpb24sXG4gICAgbmF2aWdhdGUsXG4gICAgZmV0Y2gsXG4gICAgcmV2YWxpZGF0ZSxcbiAgICBjcmVhdGVIcmVmLFxuICAgIGdldEZldGNoZXIsXG4gICAgZGVsZXRlRmV0Y2hlcixcbiAgICBkaXNwb3NlLFxuICAgIF9pbnRlcm5hbEZldGNoQ29udHJvbGxlcnM6IGZldGNoQ29udHJvbGxlcnMsXG4gICAgX2ludGVybmFsQWN0aXZlRGVmZXJyZWRzOiBhY3RpdmVEZWZlcnJlZHNcbiAgfTtcbiAgcmV0dXJuIHJvdXRlcjtcbn0gLy8jZW5kcmVnaW9uXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8jcmVnaW9uIGNyZWF0ZVN0YXRpY0hhbmRsZXJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVN0YXRpY0hhbmRsZXIocm91dGVzKSB7XG4gIGludmFyaWFudChyb3V0ZXMubGVuZ3RoID4gMCwgXCJZb3UgbXVzdCBwcm92aWRlIGEgbm9uLWVtcHR5IHJvdXRlcyBhcnJheSB0byB1bnN0YWJsZV9jcmVhdGVTdGF0aWNIYW5kbGVyXCIpO1xuICBsZXQgZGF0YVJvdXRlcyA9IGNvbnZlcnRSb3V0ZXNUb0RhdGFSb3V0ZXMocm91dGVzKTtcblxuICBhc3luYyBmdW5jdGlvbiBxdWVyeShyZXF1ZXN0KSB7XG4gICAgbGV0IHtcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVzdWx0XG4gICAgfSA9IGF3YWl0IHF1ZXJ5SW1wbChyZXF1ZXN0KTtcblxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IC8vIFdoZW4gcmV0dXJuaW5nIFN0YXRpY0hhbmRsZXJDb250ZXh0LCB3ZSBwYXRjaCBiYWNrIGluIHRoZSBsb2NhdGlvbiBoZXJlXG4gICAgLy8gc2luY2Ugd2UgbmVlZCBpdCBmb3IgUmVhY3QgQ29udGV4dC4gIEJ1dCB0aGlzIGhlbHBzIGtlZXAgb3VyIHN1Ym1pdCBhbmRcbiAgICAvLyBsb2FkUm91dGVEYXRhIG9wZXJhdGluZyBvbiBhIFJlcXVlc3QgaW5zdGVhZCBvZiBhIExvY2F0aW9uXG5cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBsb2NhdGlvblxuICAgIH0sIHJlc3VsdCk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBxdWVyeVJvdXRlKHJlcXVlc3QsIHJvdXRlSWQpIHtcbiAgICBsZXQge1xuICAgICAgcmVzdWx0XG4gICAgfSA9IGF3YWl0IHF1ZXJ5SW1wbChyZXF1ZXN0LCByb3V0ZUlkKTtcblxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IC8vIFBpY2sgb2ZmIHRoZSByaWdodCBzdGF0ZSB2YWx1ZSB0byByZXR1cm5cblxuXG4gICAgbGV0IHJvdXRlRGF0YSA9IFtyZXN1bHQuZXJyb3JzLCByZXN1bHQuYWN0aW9uRGF0YSwgcmVzdWx0LmxvYWRlckRhdGFdLmZpbmQodiA9PiB2KTtcbiAgICBsZXQgdmFsdWUgPSBPYmplY3QudmFsdWVzKHJvdXRlRGF0YSB8fCB7fSlbMF07XG5cbiAgICBpZiAoaXNSb3V0ZUVycm9yUmVzcG9uc2UodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHZhbHVlLmRhdGEsIHtcbiAgICAgICAgc3RhdHVzOiB2YWx1ZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHZhbHVlLnN0YXR1c1RleHRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5SW1wbChyZXF1ZXN0LCByb3V0ZUlkKSB7XG4gICAgaW52YXJpYW50KHJlcXVlc3QubWV0aG9kICE9PSBcIkhFQURcIiwgXCJxdWVyeSgpL3F1ZXJ5Um91dGUoKSBkbyBub3Qgc3VwcG9ydCBIRUFEIHJlcXVlc3RzXCIpO1xuICAgIGludmFyaWFudChyZXF1ZXN0LnNpZ25hbCwgXCJxdWVyeSgpL3F1ZXJ5Um91dGUoKSByZXF1ZXN0cyBtdXN0IGNvbnRhaW4gYW4gQWJvcnRDb250cm9sbGVyIHNpZ25hbFwiKTtcbiAgICBsZXQge1xuICAgICAgbG9jYXRpb24sXG4gICAgICBtYXRjaGVzLFxuICAgICAgc2hvcnRDaXJjdWl0U3RhdGVcbiAgICB9ID0gbWF0Y2hSZXF1ZXN0KHJlcXVlc3QsIHJvdXRlSWQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChzaG9ydENpcmN1aXRTdGF0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHJlc3VsdDogc2hvcnRDaXJjdWl0U3RhdGVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSBcIkdFVFwiKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBzdWJtaXQocmVxdWVzdCwgbWF0Y2hlcywgZ2V0VGFyZ2V0TWF0Y2gobWF0Y2hlcywgbG9jYXRpb24pLCByb3V0ZUlkICE9IG51bGwpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHJlc3VsdFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgbG9hZFJvdXRlRGF0YShyZXF1ZXN0LCBtYXRjaGVzLCByb3V0ZUlkICE9IG51bGwpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlc3VsdDogX2V4dGVuZHMoe30sIHJlc3VsdCwge1xuICAgICAgICAgIGFjdGlvbkRhdGE6IG51bGwsXG4gICAgICAgICAgYWN0aW9uSGVhZGVyczoge31cbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBSZXNwb25zZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHJlc3VsdDogZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdChyZXF1ZXN0LCBtYXRjaGVzLCBhY3Rpb25NYXRjaCwgaXNSb3V0ZVJlcXVlc3QpIHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgaWYgKCFhY3Rpb25NYXRjaC5yb3V0ZS5hY3Rpb24pIHtcbiAgICAgIGxldCBocmVmID0gY3JlYXRlSHJlZihuZXcgVVJMKHJlcXVlc3QudXJsKSk7XG4gICAgICByZXN1bHQgPSBnZXRNZXRob2ROb3RBbGxvd2VkUmVzdWx0KGhyZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBjYWxsTG9hZGVyT3JBY3Rpb24oXCJhY3Rpb25cIiwgcmVxdWVzdCwgYWN0aW9uTWF0Y2gsIHRydWUsIGlzUm91dGVSZXF1ZXN0KTtcblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgbGV0IG1ldGhvZCA9IGlzUm91dGVSZXF1ZXN0ID8gXCJxdWVyeVJvdXRlXCIgOiBcInF1ZXJ5XCI7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXRob2QgKyBcIigpIGNhbGwgYWJvcnRlZFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNSZWRpcmVjdFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICAvLyBVaGhoaCAtIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgd2Ugc2hvdWxkIGFsd2F5cyB0aHJvdyB0aGVzZSBmcm9tXG4gICAgICAvLyBjYWxMb2FkZXJPckFjdGlvbiwgYnV0IHRoZSB0eXBlIG5hcnJvd2luZyBoZXJlIGtlZXBzIFRTIGhhcHB5IGFuZCB3ZVxuICAgICAgLy8gY2FuIGdldCBiYWNrIG9uIHRoZSBcInRocm93IGFsbCByZWRpcmVjdCByZXNwb25zZXNcIiB0cmFpbiBoZXJlIHNob3VsZFxuICAgICAgLy8gdGhpcyBldmVyIGhhcHBlbiA6L1xuICAgICAgdGhyb3cgbmV3IFJlc3BvbnNlKG51bGwsIHtcbiAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgTG9jYXRpb246IHJlc3VsdC5sb2NhdGlvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNEZWZlcnJlZFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkZWZlcigpIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYWN0aW9uc1wiKTtcbiAgICB9XG5cbiAgICBpZiAoaXNSb3V0ZVJlcXVlc3QpIHtcbiAgICAgIGlmIChpc0Vycm9yUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgICAgbGV0IGJvdW5kYXJ5TWF0Y2ggPSBmaW5kTmVhcmVzdEJvdW5kYXJ5KG1hdGNoZXMsIGFjdGlvbk1hdGNoLnJvdXRlLmlkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXRjaGVzOiBbYWN0aW9uTWF0Y2hdLFxuICAgICAgICAgIGxvYWRlckRhdGE6IHt9LFxuICAgICAgICAgIGFjdGlvbkRhdGE6IG51bGwsXG4gICAgICAgICAgZXJyb3JzOiB7XG4gICAgICAgICAgICBbYm91bmRhcnlNYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5lcnJvclxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gTm90ZTogc3RhdHVzQ29kZSArIGhlYWRlcnMgYXJlIHVudXNlZCBoZXJlIHNpbmNlIHF1ZXJ5Um91dGUgd2lsbFxuICAgICAgICAgIC8vIHJldHVybiB0aGUgcmF3IFJlc3BvbnNlIG9yIHZhbHVlXG4gICAgICAgICAgc3RhdHVzQ29kZTogNTAwLFxuICAgICAgICAgIGxvYWRlckhlYWRlcnM6IHt9LFxuICAgICAgICAgIGFjdGlvbkhlYWRlcnM6IHt9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hdGNoZXM6IFthY3Rpb25NYXRjaF0sXG4gICAgICAgIGxvYWRlckRhdGE6IHt9LFxuICAgICAgICBhY3Rpb25EYXRhOiB7XG4gICAgICAgICAgW2FjdGlvbk1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmRhdGFcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3JzOiBudWxsLFxuICAgICAgICAvLyBOb3RlOiBzdGF0dXNDb2RlICsgaGVhZGVycyBhcmUgdW51c2VkIGhlcmUgc2luY2UgcXVlcnlSb3V0ZSB3aWxsXG4gICAgICAgIC8vIHJldHVybiB0aGUgcmF3IFJlc3BvbnNlIG9yIHZhbHVlXG4gICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgbG9hZGVySGVhZGVyczoge30sXG4gICAgICAgIGFjdGlvbkhlYWRlcnM6IHt9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpc0Vycm9yUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIC8vIFN0b3JlIG9mZiB0aGUgcGVuZGluZyBlcnJvciAtIHdlIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hpY2ggbG9hZGVyc1xuICAgICAgLy8gdG8gY2FsbCBhbmQgd2lsbCBjb21taXQgaXQgd2hlbiB3ZSBjb21wbGV0ZSB0aGUgbmF2aWdhdGlvblxuICAgICAgbGV0IGJvdW5kYXJ5TWF0Y2ggPSBmaW5kTmVhcmVzdEJvdW5kYXJ5KG1hdGNoZXMsIGFjdGlvbk1hdGNoLnJvdXRlLmlkKTtcbiAgICAgIGxldCBjb250ZXh0ID0gYXdhaXQgbG9hZFJvdXRlRGF0YShyZXF1ZXN0LCBtYXRjaGVzLCBpc1JvdXRlUmVxdWVzdCwge1xuICAgICAgICBbYm91bmRhcnlNYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5lcnJvclxuICAgICAgfSk7IC8vIGFjdGlvbiBzdGF0dXMgY29kZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgbG9hZGVyIHN0YXR1cyBjb2Rlc1xuXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIGNvbnRleHQsIHtcbiAgICAgICAgc3RhdHVzQ29kZTogaXNSb3V0ZUVycm9yUmVzcG9uc2UocmVzdWx0LmVycm9yKSA/IHJlc3VsdC5lcnJvci5zdGF0dXMgOiA1MDAsXG4gICAgICAgIGFjdGlvbkRhdGE6IG51bGwsXG4gICAgICAgIGFjdGlvbkhlYWRlcnM6IF9leHRlbmRzKHt9LCByZXN1bHQuaGVhZGVycyA/IHtcbiAgICAgICAgICBbYWN0aW9uTWF0Y2gucm91dGUuaWRdOiByZXN1bHQuaGVhZGVyc1xuICAgICAgICB9IDoge30pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgY29udGV4dCA9IGF3YWl0IGxvYWRSb3V0ZURhdGEocmVxdWVzdCwgbWF0Y2hlcywgaXNSb3V0ZVJlcXVlc3QpO1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgY29udGV4dCwgcmVzdWx0LnN0YXR1c0NvZGUgPyB7XG4gICAgICBzdGF0dXNDb2RlOiByZXN1bHQuc3RhdHVzQ29kZVxuICAgIH0gOiB7fSwge1xuICAgICAgYWN0aW9uRGF0YToge1xuICAgICAgICBbYWN0aW9uTWF0Y2gucm91dGUuaWRdOiByZXN1bHQuZGF0YVxuICAgICAgfSxcbiAgICAgIGFjdGlvbkhlYWRlcnM6IF9leHRlbmRzKHt9LCByZXN1bHQuaGVhZGVycyA/IHtcbiAgICAgICAgW2FjdGlvbk1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmhlYWRlcnNcbiAgICAgIH0gOiB7fSlcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGxvYWRSb3V0ZURhdGEocmVxdWVzdCwgbWF0Y2hlcywgaXNSb3V0ZVJlcXVlc3QsIHBlbmRpbmdBY3Rpb25FcnJvcikge1xuICAgIGxldCBtYXRjaGVzVG9Mb2FkID0gZ2V0TG9hZGVyTWF0Y2hlc1VudGlsQm91bmRhcnkobWF0Y2hlcywgT2JqZWN0LmtleXMocGVuZGluZ0FjdGlvbkVycm9yIHx8IHt9KVswXSkuZmlsdGVyKG0gPT4gbS5yb3V0ZS5sb2FkZXIpOyAvLyBTaG9ydCBjaXJjdWl0IGlmIHdlIGhhdmUgbm8gbG9hZGVycyB0byBydW5cblxuICAgIGlmIChtYXRjaGVzVG9Mb2FkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF0Y2hlcyxcbiAgICAgICAgbG9hZGVyRGF0YToge30sXG4gICAgICAgIGVycm9yczogcGVuZGluZ0FjdGlvbkVycm9yIHx8IG51bGwsXG4gICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgbG9hZGVySGVhZGVyczoge31cbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbLi4ubWF0Y2hlc1RvTG9hZC5tYXAobSA9PiBjYWxsTG9hZGVyT3JBY3Rpb24oXCJsb2FkZXJcIiwgcmVxdWVzdCwgbSwgdHJ1ZSwgaXNSb3V0ZVJlcXVlc3QpKV0pO1xuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGxldCBtZXRob2QgPSBpc1JvdXRlUmVxdWVzdCA/IFwicXVlcnlSb3V0ZVwiIDogXCJxdWVyeVwiO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1ldGhvZCArIFwiKCkgY2FsbCBhYm9ydGVkXCIpO1xuICAgIH0gLy8gQ2FuJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGVzZSB3aXRob3V0IHRoZSBSZW1peCBzaWRlIG9mIHRoaW5ncywgc28ganVzdFxuICAgIC8vIGNhbmNlbCB0aGVtIGZvciBub3dcblxuXG4gICAgcmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB7XG4gICAgICBpZiAoaXNEZWZlcnJlZFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICAgIHJlc3VsdC5kZWZlcnJlZERhdGEuY2FuY2VsKCk7XG4gICAgICB9XG4gICAgfSk7IC8vIFByb2Nlc3MgYW5kIGNvbW1pdCBvdXRwdXQgZnJvbSBsb2FkZXJzXG5cbiAgICBsZXQgY29udGV4dCA9IHByb2Nlc3NSb3V0ZUxvYWRlckRhdGEobWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgcmVzdWx0cywgcGVuZGluZ0FjdGlvbkVycm9yKTtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGNvbnRleHQsIHtcbiAgICAgIG1hdGNoZXNcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hdGNoUmVxdWVzdChyZXEsIHJvdXRlSWQpIHtcbiAgICBsZXQgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBsZXQgbG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihcIlwiLCBjcmVhdGVQYXRoKHVybCksIG51bGwsIFwiZGVmYXVsdFwiKTtcbiAgICBsZXQgbWF0Y2hlcyA9IG1hdGNoUm91dGVzKGRhdGFSb3V0ZXMsIGxvY2F0aW9uKTtcblxuICAgIGlmIChtYXRjaGVzICYmIHJvdXRlSWQpIHtcbiAgICAgIG1hdGNoZXMgPSBtYXRjaGVzLmZpbHRlcihtID0+IG0ucm91dGUuaWQgPT09IHJvdXRlSWQpO1xuICAgIH0gLy8gU2hvcnQgY2lyY3VpdCB3aXRoIGEgNDA0IGlmIHdlIG1hdGNoIG5vdGhpbmdcblxuXG4gICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICBsZXQge1xuICAgICAgICBtYXRjaGVzOiBub3RGb3VuZE1hdGNoZXMsXG4gICAgICAgIHJvdXRlLFxuICAgICAgICBlcnJvclxuICAgICAgfSA9IGdldE5vdEZvdW5kTWF0Y2hlcyhkYXRhUm91dGVzKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICBtYXRjaGVzOiBub3RGb3VuZE1hdGNoZXMsXG4gICAgICAgIHNob3J0Q2lyY3VpdFN0YXRlOiB7XG4gICAgICAgICAgbWF0Y2hlczogbm90Rm91bmRNYXRjaGVzLFxuICAgICAgICAgIGxvYWRlckRhdGE6IHt9LFxuICAgICAgICAgIGFjdGlvbkRhdGE6IG51bGwsXG4gICAgICAgICAgZXJyb3JzOiB7XG4gICAgICAgICAgICBbcm91dGUuaWRdOiBlcnJvclxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzQ29kZTogNDA0LFxuICAgICAgICAgIGxvYWRlckhlYWRlcnM6IHt9LFxuICAgICAgICAgIGFjdGlvbkhlYWRlcnM6IHt9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbWF0Y2hlc1xuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRhdGFSb3V0ZXMsXG4gICAgcXVlcnksXG4gICAgcXVlcnlSb3V0ZVxuICB9O1xufSAvLyNlbmRyZWdpb25cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyNyZWdpb24gSGVscGVyc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBHaXZlbiBhbiBleGlzdGluZyBTdGF0aWNIYW5kbGVyQ29udGV4dCBhbmQgYW4gZXJyb3IgdGhyb3duIGF0IHJlbmRlciB0aW1lLFxuICogcHJvdmlkZSBhbiB1cGRhdGVkIFN0YXRpY0hhbmRsZXJDb250ZXh0IHN1aXRhYmxlIGZvciBhIHNlY29uZCBTU1IgcmVuZGVyXG4gKi9cblxuZnVuY3Rpb24gZ2V0U3RhdGljQ29udGV4dEZyb21FcnJvcihyb3V0ZXMsIGNvbnRleHQsIGVycm9yKSB7XG4gIGxldCBuZXdDb250ZXh0ID0gX2V4dGVuZHMoe30sIGNvbnRleHQsIHtcbiAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgZXJyb3JzOiB7XG4gICAgICBbY29udGV4dC5fZGVlcGVzdFJlbmRlcmVkQm91bmRhcnlJZCB8fCByb3V0ZXNbMF0uaWRdOiBlcnJvclxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG5ld0NvbnRleHQ7XG59IC8vIE5vcm1hbGl6ZSBuYXZpZ2F0aW9uIG9wdGlvbnMgYnkgY29udmVydGluZyBmb3JtTWV0aG9kPUdFVCBmb3JtRGF0YSBvYmplY3RzIHRvXG4vLyBVUkxTZWFyY2hQYXJhbXMgc28gdGhleSBiZWhhdmUgaWRlbnRpY2FsbHkgdG8gbGlua3Mgd2l0aCBxdWVyeSBwYXJhbXNcblxuZnVuY3Rpb24gbm9ybWFsaXplTmF2aWdhdGVPcHRpb25zKHRvLCBvcHRzLCBpc0ZldGNoZXIpIHtcbiAgaWYgKGlzRmV0Y2hlciA9PT0gdm9pZCAwKSB7XG4gICAgaXNGZXRjaGVyID0gZmFsc2U7XG4gIH1cblxuICBsZXQgcGF0aCA9IHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIiA/IHRvIDogY3JlYXRlUGF0aCh0byk7IC8vIFJldHVybiBsb2NhdGlvbiB2ZXJiYXRpbSBvbiBub24tc3VibWlzc2lvbiBuYXZpZ2F0aW9uc1xuXG4gIGlmICghb3B0cyB8fCAhKFwiZm9ybU1ldGhvZFwiIGluIG9wdHMpICYmICEoXCJmb3JtRGF0YVwiIGluIG9wdHMpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhcbiAgICB9O1xuICB9IC8vIENyZWF0ZSBhIFN1Ym1pc3Npb24gb24gbm9uLUdFVCBuYXZpZ2F0aW9uc1xuXG5cbiAgaWYgKG9wdHMuZm9ybU1ldGhvZCAhPSBudWxsICYmIG9wdHMuZm9ybU1ldGhvZCAhPT0gXCJnZXRcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoLFxuICAgICAgc3VibWlzc2lvbjoge1xuICAgICAgICBmb3JtTWV0aG9kOiBvcHRzLmZvcm1NZXRob2QsXG4gICAgICAgIGZvcm1BY3Rpb246IGNyZWF0ZUhyZWYocGFyc2VQYXRoKHBhdGgpKSxcbiAgICAgICAgZm9ybUVuY1R5cGU6IG9wdHMgJiYgb3B0cy5mb3JtRW5jVHlwZSB8fCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLFxuICAgICAgICBmb3JtRGF0YTogb3B0cy5mb3JtRGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gLy8gTm8gZm9ybURhdGEgdG8gZmxhdHRlbiBmb3IgR0VUIHN1Ym1pc3Npb25cblxuXG4gIGlmICghb3B0cy5mb3JtRGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoXG4gICAgfTtcbiAgfSAvLyBGbGF0dGVuIHN1Ym1pc3Npb24gb250byBVUkxTZWFyY2hQYXJhbXMgZm9yIEdFVCBzdWJtaXNzaW9uc1xuXG5cbiAgbGV0IHBhcnNlZFBhdGggPSBwYXJzZVBhdGgocGF0aCk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgc2VhcmNoUGFyYW1zID0gY29udmVydEZvcm1EYXRhVG9TZWFyY2hQYXJhbXMob3B0cy5mb3JtRGF0YSk7IC8vIFNpbmNlIGZldGNoZXIgR0VUIHN1Ym1pc3Npb25zIG9ubHkgcnVuIGEgc2luZ2xlIGxvYWRlciAoYXMgb3Bwb3NlZCB0b1xuICAgIC8vIG5hdmlnYXRpb24gR0VUIHN1Ym1pc3Npb25zIHdoaWNoIHJ1biBhbGwgbG9hZGVycyksIHdlIG5lZWQgdG8gcHJlc2VydmVcbiAgICAvLyBhbnkgaW5jb21pbmcgP2luZGV4IHBhcmFtc1xuXG4gICAgaWYgKGlzRmV0Y2hlciAmJiBwYXJzZWRQYXRoLnNlYXJjaCAmJiBoYXNOYWtlZEluZGV4UXVlcnkocGFyc2VkUGF0aC5zZWFyY2gpKSB7XG4gICAgICBzZWFyY2hQYXJhbXMuYXBwZW5kKFwiaW5kZXhcIiwgXCJcIik7XG4gICAgfVxuXG4gICAgcGFyc2VkUGF0aC5zZWFyY2ggPSBcIj9cIiArIHNlYXJjaFBhcmFtcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoLFxuICAgICAgZXJyb3I6IG5ldyBFcnJvclJlc3BvbnNlKDQwMCwgXCJCYWQgUmVxdWVzdFwiLCBcIkNhbm5vdCBzdWJtaXQgYmluYXJ5IGZvcm0gZGF0YSB1c2luZyBHRVRcIilcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBjcmVhdGVQYXRoKHBhcnNlZFBhdGgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldExvYWRlclJlZGlyZWN0KHN0YXRlLCByZWRpcmVjdCkge1xuICBsZXQge1xuICAgIGZvcm1NZXRob2QsXG4gICAgZm9ybUFjdGlvbixcbiAgICBmb3JtRW5jVHlwZSxcbiAgICBmb3JtRGF0YVxuICB9ID0gc3RhdGUubmF2aWdhdGlvbjtcbiAgbGV0IG5hdmlnYXRpb24gPSB7XG4gICAgc3RhdGU6IFwibG9hZGluZ1wiLFxuICAgIGxvY2F0aW9uOiBjcmVhdGVMb2NhdGlvbihzdGF0ZS5sb2NhdGlvbiwgcmVkaXJlY3QubG9jYXRpb24pLFxuICAgIGZvcm1NZXRob2Q6IGZvcm1NZXRob2QgfHwgdW5kZWZpbmVkLFxuICAgIGZvcm1BY3Rpb246IGZvcm1BY3Rpb24gfHwgdW5kZWZpbmVkLFxuICAgIGZvcm1FbmNUeXBlOiBmb3JtRW5jVHlwZSB8fCB1bmRlZmluZWQsXG4gICAgZm9ybURhdGE6IGZvcm1EYXRhIHx8IHVuZGVmaW5lZFxuICB9O1xuICByZXR1cm4gbmF2aWdhdGlvbjtcbn0gLy8gRmlsdGVyIG91dCBhbGwgcm91dGVzIGJlbG93IGFueSBjYXVnaHQgZXJyb3IgYXMgdGhleSBhcmVuJ3QgZ29pbmcgdG9cbi8vIHJlbmRlciBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvYWQgdGhlbVxuXG5cbmZ1bmN0aW9uIGdldExvYWRlck1hdGNoZXNVbnRpbEJvdW5kYXJ5KG1hdGNoZXMsIGJvdW5kYXJ5SWQpIHtcbiAgbGV0IGJvdW5kYXJ5TWF0Y2hlcyA9IG1hdGNoZXM7XG5cbiAgaWYgKGJvdW5kYXJ5SWQpIHtcbiAgICBsZXQgaW5kZXggPSBtYXRjaGVzLmZpbmRJbmRleChtID0+IG0ucm91dGUuaWQgPT09IGJvdW5kYXJ5SWQpO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIGJvdW5kYXJ5TWF0Y2hlcyA9IG1hdGNoZXMuc2xpY2UoMCwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBib3VuZGFyeU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIGdldE1hdGNoZXNUb0xvYWQoc3RhdGUsIG1hdGNoZXMsIHN1Ym1pc3Npb24sIGxvY2F0aW9uLCBpc1JldmFsaWRhdGlvblJlcXVpcmVkLCBjYW5jZWxsZWREZWZlcnJlZFJvdXRlcywgY2FuY2VsbGVkRmV0Y2hlckxvYWRzLCBwZW5kaW5nQWN0aW9uRGF0YSwgcGVuZGluZ0Vycm9yLCBmZXRjaExvYWRNYXRjaGVzKSB7XG4gIGxldCBhY3Rpb25SZXN1bHQgPSBwZW5kaW5nRXJyb3IgPyBPYmplY3QudmFsdWVzKHBlbmRpbmdFcnJvcilbMF0gOiBwZW5kaW5nQWN0aW9uRGF0YSA/IE9iamVjdC52YWx1ZXMocGVuZGluZ0FjdGlvbkRhdGEpWzBdIDogbnVsbDsgLy8gUGljayBuYXZpZ2F0aW9uIG1hdGNoZXMgdGhhdCBhcmUgbmV0LW5ldyBvciBxdWFsaWZ5IGZvciByZXZhbGlkYXRpb25cblxuICBsZXQgYm91bmRhcnlJZCA9IHBlbmRpbmdFcnJvciA/IE9iamVjdC5rZXlzKHBlbmRpbmdFcnJvcilbMF0gOiB1bmRlZmluZWQ7XG4gIGxldCBib3VuZGFyeU1hdGNoZXMgPSBnZXRMb2FkZXJNYXRjaGVzVW50aWxCb3VuZGFyeShtYXRjaGVzLCBib3VuZGFyeUlkKTtcbiAgbGV0IG5hdmlnYXRpb25NYXRjaGVzID0gYm91bmRhcnlNYXRjaGVzLmZpbHRlcigobWF0Y2gsIGluZGV4KSA9PiBtYXRjaC5yb3V0ZS5sb2FkZXIgIT0gbnVsbCAmJiAoaXNOZXdMb2FkZXIoc3RhdGUubG9hZGVyRGF0YSwgc3RhdGUubWF0Y2hlc1tpbmRleF0sIG1hdGNoKSB8fCAvLyBJZiB0aGlzIHJvdXRlIGhhZCBhIHBlbmRpbmcgZGVmZXJyZWQgY2FuY2VsbGVkIGl0IG11c3QgYmUgcmV2YWxpZGF0ZWRcbiAgY2FuY2VsbGVkRGVmZXJyZWRSb3V0ZXMuc29tZShpZCA9PiBpZCA9PT0gbWF0Y2gucm91dGUuaWQpIHx8IHNob3VsZFJldmFsaWRhdGVMb2FkZXIoc3RhdGUubG9jYXRpb24sIHN0YXRlLm1hdGNoZXNbaW5kZXhdLCBzdWJtaXNzaW9uLCBsb2NhdGlvbiwgbWF0Y2gsIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQsIGFjdGlvblJlc3VsdCkpKTsgLy8gUGljayBmZXRjaGVyLmxvYWRzIHRoYXQgbmVlZCB0byBiZSByZXZhbGlkYXRlZFxuXG4gIGxldCByZXZhbGlkYXRpbmdGZXRjaGVycyA9IFtdO1xuICBmZXRjaExvYWRNYXRjaGVzICYmIGZldGNoTG9hZE1hdGNoZXMuZm9yRWFjaCgoX3JlZjEwLCBrZXkpID0+IHtcbiAgICBsZXQgW2hyZWYsIG1hdGNoXSA9IF9yZWYxMDtcblxuICAgIC8vIFRoaXMgZmV0Y2hlciB3YXMgY2FuY2VsbGVkIGZyb20gYSBwcmlvciBhY3Rpb24gc3VibWlzc2lvbiAtIGZvcmNlIHJlbG9hZFxuICAgIGlmIChjYW5jZWxsZWRGZXRjaGVyTG9hZHMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV2YWxpZGF0aW5nRmV0Y2hlcnMucHVzaChba2V5LCBocmVmLCBtYXRjaF0pO1xuICAgIH0gZWxzZSBpZiAoaXNSZXZhbGlkYXRpb25SZXF1aXJlZCkge1xuICAgICAgbGV0IHNob3VsZFJldmFsaWRhdGUgPSBzaG91bGRSZXZhbGlkYXRlTG9hZGVyKGhyZWYsIG1hdGNoLCBzdWJtaXNzaW9uLCBocmVmLCBtYXRjaCwgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCwgYWN0aW9uUmVzdWx0KTtcblxuICAgICAgaWYgKHNob3VsZFJldmFsaWRhdGUpIHtcbiAgICAgICAgcmV2YWxpZGF0aW5nRmV0Y2hlcnMucHVzaChba2V5LCBocmVmLCBtYXRjaF0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBbbmF2aWdhdGlvbk1hdGNoZXMsIHJldmFsaWRhdGluZ0ZldGNoZXJzXTtcbn1cblxuZnVuY3Rpb24gaXNOZXdMb2FkZXIoY3VycmVudExvYWRlckRhdGEsIGN1cnJlbnRNYXRjaCwgbWF0Y2gpIHtcbiAgbGV0IGlzTmV3ID0gLy8gW2FdIC0+IFthLCBiXVxuICAhY3VycmVudE1hdGNoIHx8IC8vIFthLCBiXSAtPiBbYSwgY11cbiAgbWF0Y2gucm91dGUuaWQgIT09IGN1cnJlbnRNYXRjaC5yb3V0ZS5pZDsgLy8gSGFuZGxlIHRoZSBjYXNlIHRoYXQgd2UgZG9uJ3QgaGF2ZSBkYXRhIGZvciBhIHJlLXVzZWQgcm91dGUsIHBvdGVudGlhbGx5XG4gIC8vIGZyb20gYSBwcmlvciBlcnJvciBvciBmcm9tIGEgY2FuY2VsbGVkIHBlbmRpbmcgZGVmZXJyZWRcblxuICBsZXQgaXNNaXNzaW5nRGF0YSA9IGN1cnJlbnRMb2FkZXJEYXRhW21hdGNoLnJvdXRlLmlkXSA9PT0gdW5kZWZpbmVkOyAvLyBBbHdheXMgbG9hZCBpZiB0aGlzIGlzIGEgbmV0LW5ldyByb3V0ZSBvciB3ZSBkb24ndCB5ZXQgaGF2ZSBkYXRhXG5cbiAgcmV0dXJuIGlzTmV3IHx8IGlzTWlzc2luZ0RhdGE7XG59XG5cbmZ1bmN0aW9uIGlzTmV3Um91dGVJbnN0YW5jZShjdXJyZW50TWF0Y2gsIG1hdGNoKSB7XG4gIGxldCBjdXJyZW50UGF0aCA9IGN1cnJlbnRNYXRjaC5yb3V0ZS5wYXRoO1xuICByZXR1cm4gKC8vIHBhcmFtIGNoYW5nZSBmb3IgdGhpcyBtYXRjaCwgL3VzZXJzLzEyMyAtPiAvdXNlcnMvNDU2XG4gICAgY3VycmVudE1hdGNoLnBhdGhuYW1lICE9PSBtYXRjaC5wYXRobmFtZSB8fCAvLyBzcGxhdCBwYXJhbSBjaGFuZ2VkLCB3aGljaCBpcyBub3QgcHJlc2VudCBpbiBtYXRjaC5wYXRoXG4gICAgLy8gZS5nLiAvZmlsZXMvaW1hZ2VzL2F2YXRhci5qcGcgLT4gZmlsZXMvZmluYW5jZXMueGxzXG4gICAgY3VycmVudFBhdGggJiYgY3VycmVudFBhdGguZW5kc1dpdGgoXCIqXCIpICYmIGN1cnJlbnRNYXRjaC5wYXJhbXNbXCIqXCJdICE9PSBtYXRjaC5wYXJhbXNbXCIqXCJdXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFJldmFsaWRhdGVMb2FkZXIoY3VycmVudExvY2F0aW9uLCBjdXJyZW50TWF0Y2gsIHN1Ym1pc3Npb24sIGxvY2F0aW9uLCBtYXRjaCwgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCwgYWN0aW9uUmVzdWx0KSB7XG4gIGxldCBjdXJyZW50VXJsID0gY3JlYXRlVVJMKGN1cnJlbnRMb2NhdGlvbik7XG4gIGxldCBjdXJyZW50UGFyYW1zID0gY3VycmVudE1hdGNoLnBhcmFtcztcbiAgbGV0IG5leHRVcmwgPSBjcmVhdGVVUkwobG9jYXRpb24pO1xuICBsZXQgbmV4dFBhcmFtcyA9IG1hdGNoLnBhcmFtczsgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhcyB0byB3aGVuIHdlIHJldmFsaWRhdGUuICBJZiB0aGUgcm91dGVcbiAgLy8gcHJvdmlkZXMgaXQncyBvd24gaW1wbGVtZW50YXRpb24sIHRoZW4gd2UgZ2l2ZSB0aGVtIGZ1bGwgY29udHJvbCBidXRcbiAgLy8gcHJvdmlkZSB0aGlzIHZhbHVlIHNvIHRoZXkgY2FuIGxldmVyYWdlIGl0IGlmIG5lZWRlZCBhZnRlciB0aGV5IGNoZWNrXG4gIC8vIHRoZWlyIG93biBzcGVjaWZpYyB1c2UgY2FzZXNcbiAgLy8gTm90ZSB0aGF0IGZldGNoZXJzIGFsd2F5cyBwcm92aWRlIHRoZSBzYW1lIGN1cnJlbnQvbmV4dCBsb2NhdGlvbnMgc28gdGhlXG4gIC8vIFVSTC1iYXNlZCBjaGVja3MgaGVyZSBkb24ndCBhcHBseSB0byBmZXRjaGVyIHNob3VsZFJldmFsaWRhdGUgY2FsbHNcblxuICBsZXQgZGVmYXVsdFNob3VsZFJldmFsaWRhdGUgPSBpc05ld1JvdXRlSW5zdGFuY2UoY3VycmVudE1hdGNoLCBtYXRjaCkgfHwgLy8gQ2xpY2tlZCB0aGUgc2FtZSBsaW5rLCByZXN1Ym1pdHRlZCBhIEdFVCBmb3JtXG4gIGN1cnJlbnRVcmwudG9TdHJpbmcoKSA9PT0gbmV4dFVybC50b1N0cmluZygpIHx8IC8vIFNlYXJjaCBwYXJhbXMgYWZmZWN0IGFsbCBsb2FkZXJzXG4gIGN1cnJlbnRVcmwuc2VhcmNoICE9PSBuZXh0VXJsLnNlYXJjaCB8fCAvLyBGb3JjZWQgcmV2YWxpZGF0aW9uIGR1ZSB0byBzdWJtaXNzaW9uLCB1c2VSZXZhbGlkYXRlLCBvciBYLVJlbWl4LVJldmFsaWRhdGVcbiAgaXNSZXZhbGlkYXRpb25SZXF1aXJlZDtcblxuICBpZiAobWF0Y2gucm91dGUuc2hvdWxkUmV2YWxpZGF0ZSkge1xuICAgIGxldCByb3V0ZUNob2ljZSA9IG1hdGNoLnJvdXRlLnNob3VsZFJldmFsaWRhdGUoX2V4dGVuZHMoe1xuICAgICAgY3VycmVudFVybCxcbiAgICAgIGN1cnJlbnRQYXJhbXMsXG4gICAgICBuZXh0VXJsLFxuICAgICAgbmV4dFBhcmFtc1xuICAgIH0sIHN1Ym1pc3Npb24sIHtcbiAgICAgIGFjdGlvblJlc3VsdCxcbiAgICAgIGRlZmF1bHRTaG91bGRSZXZhbGlkYXRlXG4gICAgfSkpO1xuXG4gICAgaWYgKHR5cGVvZiByb3V0ZUNob2ljZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiByb3V0ZUNob2ljZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFNob3VsZFJldmFsaWRhdGU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGxMb2FkZXJPckFjdGlvbih0eXBlLCByZXF1ZXN0LCBtYXRjaCwgc2tpcFJlZGlyZWN0cywgaXNSb3V0ZVJlcXVlc3QpIHtcbiAgaWYgKHNraXBSZWRpcmVjdHMgPT09IHZvaWQgMCkge1xuICAgIHNraXBSZWRpcmVjdHMgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc1JvdXRlUmVxdWVzdCA9PT0gdm9pZCAwKSB7XG4gICAgaXNSb3V0ZVJlcXVlc3QgPSBmYWxzZTtcbiAgfVxuXG4gIGxldCByZXN1bHRUeXBlO1xuICBsZXQgcmVzdWx0OyAvLyBTZXR1cCBhIHByb21pc2Ugd2UgY2FuIHJhY2UgYWdhaW5zdCBzbyB0aGF0IGFib3J0IHNpZ25hbHMgc2hvcnQgY2lyY3VpdFxuXG4gIGxldCByZWplY3Q7XG4gIGxldCBhYm9ydFByb21pc2UgPSBuZXcgUHJvbWlzZSgoXywgcikgPT4gcmVqZWN0ID0gcik7XG5cbiAgbGV0IG9uUmVqZWN0ID0gKCkgPT4gcmVqZWN0KCk7XG5cbiAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uUmVqZWN0KTtcblxuICB0cnkge1xuICAgIGxldCBoYW5kbGVyID0gbWF0Y2gucm91dGVbdHlwZV07XG4gICAgaW52YXJpYW50KGhhbmRsZXIsIFwiQ291bGQgbm90IGZpbmQgdGhlIFwiICsgdHlwZSArIFwiIHRvIHJ1biBvbiB0aGUgXFxcIlwiICsgbWF0Y2gucm91dGUuaWQgKyBcIlxcXCIgcm91dGVcIik7XG4gICAgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtoYW5kbGVyKHtcbiAgICAgIHJlcXVlc3QsXG4gICAgICBwYXJhbXM6IG1hdGNoLnBhcmFtc1xuICAgIH0pLCBhYm9ydFByb21pc2VdKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLmVycm9yO1xuICAgIHJlc3VsdCA9IGU7XG4gIH0gZmluYWxseSB7XG4gICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uUmVqZWN0KTtcbiAgfVxuXG4gIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZXNwb25zZSkge1xuICAgIC8vIFByb2Nlc3MgcmVkaXJlY3RzXG4gICAgbGV0IHN0YXR1cyA9IHJlc3VsdC5zdGF0dXM7XG4gICAgbGV0IGxvY2F0aW9uID0gcmVzdWx0LmhlYWRlcnMuZ2V0KFwiTG9jYXRpb25cIik7IC8vIEZvciBTU1Igc2luZ2xlLXJvdXRlIHJlcXVlc3RzLCB3ZSB3YW50IHRvIGhhbmQgUmVzcG9uc2VzIGJhY2sgZGlyZWN0bHlcbiAgICAvLyB3aXRob3V0IHVud3JhcHBpbmdcblxuICAgIGlmIChpc1JvdXRlUmVxdWVzdCkge1xuICAgICAgdGhyb3cgcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPj0gMzAwICYmIHN0YXR1cyA8PSAzOTkgJiYgbG9jYXRpb24gIT0gbnVsbCkge1xuICAgICAgLy8gRG9uJ3QgcHJvY2VzcyByZWRpcmVjdHMgaW4gdGhlIHJvdXRlciBkdXJpbmcgU1NSIGRvY3VtZW50IHJlcXVlc3RzLlxuICAgICAgLy8gSW5zdGVhZCwgdGhyb3cgdGhlIFJlc3BvbnNlIGFuZCBsZXQgdGhlIHNlcnZlciBoYW5kbGUgaXQgd2l0aCBhbiBIVFRQXG4gICAgICAvLyByZWRpcmVjdFxuICAgICAgaWYgKHNraXBSZWRpcmVjdHMpIHtcbiAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBSZXN1bHRUeXBlLnJlZGlyZWN0LFxuICAgICAgICBzdGF0dXMsXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByZXZhbGlkYXRlOiByZXN1bHQuaGVhZGVycy5nZXQoXCJYLVJlbWl4LVJldmFsaWRhdGVcIikgIT09IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGRhdGE7XG4gICAgbGV0IGNvbnRlbnRUeXBlID0gcmVzdWx0LmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuXG4gICAgaWYgKGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSB7XG4gICAgICBkYXRhID0gYXdhaXQgcmVzdWx0Lmpzb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IGF3YWl0IHJlc3VsdC50ZXh0KCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHJlc3VsdFR5cGUsXG4gICAgICAgIGVycm9yOiBuZXcgRXJyb3JSZXNwb25zZShzdGF0dXMsIHJlc3VsdC5zdGF0dXNUZXh0LCBkYXRhKSxcbiAgICAgICAgaGVhZGVyczogcmVzdWx0LmhlYWRlcnNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFJlc3VsdFR5cGUuZGF0YSxcbiAgICAgIGRhdGEsXG4gICAgICBzdGF0dXNDb2RlOiByZXN1bHQuc3RhdHVzLFxuICAgICAgaGVhZGVyczogcmVzdWx0LmhlYWRlcnNcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogcmVzdWx0VHlwZSxcbiAgICAgIGVycm9yOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIERlZmVycmVkRGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBSZXN1bHRUeXBlLmRlZmVycmVkLFxuICAgICAgZGVmZXJyZWREYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBSZXN1bHRUeXBlLmRhdGEsXG4gICAgZGF0YTogcmVzdWx0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3QobG9jYXRpb24sIHNpZ25hbCwgc3VibWlzc2lvbikge1xuICBsZXQgdXJsID0gY3JlYXRlVVJMKGxvY2F0aW9uKS50b1N0cmluZygpO1xuICBsZXQgaW5pdCA9IHtcbiAgICBzaWduYWxcbiAgfTtcblxuICBpZiAoc3VibWlzc2lvbikge1xuICAgIGxldCB7XG4gICAgICBmb3JtTWV0aG9kLFxuICAgICAgZm9ybUVuY1R5cGUsXG4gICAgICBmb3JtRGF0YVxuICAgIH0gPSBzdWJtaXNzaW9uO1xuICAgIGluaXQubWV0aG9kID0gZm9ybU1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIGluaXQuYm9keSA9IGZvcm1FbmNUeXBlID09PSBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiID8gY29udmVydEZvcm1EYXRhVG9TZWFyY2hQYXJhbXMoZm9ybURhdGEpIDogZm9ybURhdGE7XG4gIH0gLy8gQ29udGVudC1UeXBlIGlzIGluZmVycmVkIChodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlcXVlc3QpXG5cblxuICByZXR1cm4gbmV3IFJlcXVlc3QodXJsLCBpbml0KTtcbn1cblxuZnVuY3Rpb24gY29udmVydEZvcm1EYXRhVG9TZWFyY2hQYXJhbXMoZm9ybURhdGEpIHtcbiAgbGV0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgZm9ybURhdGEuZW50cmllcygpKSB7XG4gICAgaW52YXJpYW50KHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiwgJ0ZpbGUgaW5wdXRzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggZW5jVHlwZSBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLCAnICsgJ3BsZWFzZSB1c2UgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgaW5zdGVhZC4nKTtcbiAgICBzZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHNlYXJjaFBhcmFtcztcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1JvdXRlTG9hZGVyRGF0YShtYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCByZXN1bHRzLCBwZW5kaW5nRXJyb3IsIGFjdGl2ZURlZmVycmVkcykge1xuICAvLyBGaWxsIGluIGxvYWRlckRhdGEvZXJyb3JzIGZyb20gb3VyIGxvYWRlcnNcbiAgbGV0IGxvYWRlckRhdGEgPSB7fTtcbiAgbGV0IGVycm9ycyA9IG51bGw7XG4gIGxldCBzdGF0dXNDb2RlO1xuICBsZXQgZm91bmRFcnJvciA9IGZhbHNlO1xuICBsZXQgbG9hZGVySGVhZGVycyA9IHt9OyAvLyBQcm9jZXNzIGxvYWRlciByZXN1bHRzIGludG8gc3RhdGUubG9hZGVyRGF0YS9zdGF0ZS5lcnJvcnNcblxuICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCwgaW5kZXgpID0+IHtcbiAgICBsZXQgaWQgPSBtYXRjaGVzVG9Mb2FkW2luZGV4XS5yb3V0ZS5pZDtcbiAgICBpbnZhcmlhbnQoIWlzUmVkaXJlY3RSZXN1bHQocmVzdWx0KSwgXCJDYW5ub3QgaGFuZGxlIHJlZGlyZWN0IHJlc3VsdHMgaW4gcHJvY2Vzc0xvYWRlckRhdGFcIik7XG5cbiAgICBpZiAoaXNFcnJvclJlc3VsdChyZXN1bHQpKSB7XG4gICAgICAvLyBMb29rIHVwd2FyZHMgZnJvbSB0aGUgbWF0Y2hlZCByb3V0ZSBmb3IgdGhlIGNsb3Nlc3QgYW5jZXN0b3JcbiAgICAgIC8vIGVycm9yIGJvdW5kYXJ5LCBkZWZhdWx0aW5nIHRvIHRoZSByb290IG1hdGNoXG4gICAgICBsZXQgYm91bmRhcnlNYXRjaCA9IGZpbmROZWFyZXN0Qm91bmRhcnkobWF0Y2hlcywgaWQpO1xuICAgICAgbGV0IGVycm9yID0gcmVzdWx0LmVycm9yOyAvLyBJZiB3ZSBoYXZlIGEgcGVuZGluZyBhY3Rpb24gZXJyb3IsIHdlIHJlcG9ydCBpdCBhdCB0aGUgaGlnaGVzdC1yb3V0ZVxuICAgICAgLy8gdGhhdCB0aHJvd3MgYSBsb2FkZXIgZXJyb3IsIGFuZCB0aGVuIGNsZWFyIGl0IG91dCB0byBpbmRpY2F0ZSB0aGF0XG4gICAgICAvLyBpdCB3YXMgY29uc3VtZWRcblxuICAgICAgaWYgKHBlbmRpbmdFcnJvcikge1xuICAgICAgICBlcnJvciA9IE9iamVjdC52YWx1ZXMocGVuZGluZ0Vycm9yKVswXTtcbiAgICAgICAgcGVuZGluZ0Vycm9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBlcnJvcnMgPSBPYmplY3QuYXNzaWduKGVycm9ycyB8fCB7fSwge1xuICAgICAgICBbYm91bmRhcnlNYXRjaC5yb3V0ZS5pZF06IGVycm9yXG4gICAgICB9KTsgLy8gT25jZSB3ZSBmaW5kIG91ciBmaXJzdCAoaGlnaGVzdCkgZXJyb3IsIHdlIHNldCB0aGUgc3RhdHVzIGNvZGUgYW5kXG4gICAgICAvLyBwcmV2ZW50IGRlZXBlciBzdGF0dXMgY29kZXMgZnJvbSBvdmVycmlkaW5nXG5cbiAgICAgIGlmICghZm91bmRFcnJvcikge1xuICAgICAgICBmb3VuZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgc3RhdHVzQ29kZSA9IGlzUm91dGVFcnJvclJlc3BvbnNlKHJlc3VsdC5lcnJvcikgPyByZXN1bHQuZXJyb3Iuc3RhdHVzIDogNTAwO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0LmhlYWRlcnMpIHtcbiAgICAgICAgbG9hZGVySGVhZGVyc1tpZF0gPSByZXN1bHQuaGVhZGVycztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzRGVmZXJyZWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgYWN0aXZlRGVmZXJyZWRzICYmIGFjdGl2ZURlZmVycmVkcy5zZXQoaWQsIHJlc3VsdC5kZWZlcnJlZERhdGEpO1xuICAgICAgbG9hZGVyRGF0YVtpZF0gPSByZXN1bHQuZGVmZXJyZWREYXRhLmRhdGE7IC8vIFRPRE86IEFkZCBzdGF0dXNDb2RlL2hlYWRlcnMgb25jZSB3ZSB3aXJlIHVwIHN0cmVhbWluZyBpbiBSZW1peFxuICAgIH0gZWxzZSB7XG4gICAgICBsb2FkZXJEYXRhW2lkXSA9IHJlc3VsdC5kYXRhOyAvLyBFcnJvciBzdGF0dXMgY29kZXMgYWx3YXlzIG92ZXJyaWRlIHN1Y2Nlc3Mgc3RhdHVzIGNvZGVzLCBidXQgaWYgYWxsXG4gICAgICAvLyBsb2FkZXJzIGFyZSBzdWNjZXNzZnVsIHdlIHRha2UgdGhlIGRlZXBlc3Qgc3RhdHVzIGNvZGUuXG5cbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzQ29kZSAhPT0gMjAwICYmICFmb3VuZEVycm9yKSB7XG4gICAgICAgIHN0YXR1c0NvZGUgPSByZXN1bHQuc3RhdHVzQ29kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgIGxvYWRlckhlYWRlcnNbaWRdID0gcmVzdWx0LmhlYWRlcnM7XG4gICAgICB9XG4gICAgfVxuICB9KTsgLy8gSWYgd2UgZGlkbid0IGNvbnN1bWUgdGhlIHBlbmRpbmcgYWN0aW9uIGVycm9yIChpLmUuLCBhbGwgbG9hZGVyc1xuICAvLyByZXNvbHZlZCksIHRoZW4gY29uc3VtZSBpdCBoZXJlXG5cbiAgaWYgKHBlbmRpbmdFcnJvcikge1xuICAgIGVycm9ycyA9IHBlbmRpbmdFcnJvcjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9hZGVyRGF0YSxcbiAgICBlcnJvcnMsXG4gICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZSB8fCAyMDAsXG4gICAgbG9hZGVySGVhZGVyc1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzTG9hZGVyRGF0YShzdGF0ZSwgbWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgcmVzdWx0cywgcGVuZGluZ0Vycm9yLCByZXZhbGlkYXRpbmdGZXRjaGVycywgZmV0Y2hlclJlc3VsdHMsIGFjdGl2ZURlZmVycmVkcykge1xuICBsZXQge1xuICAgIGxvYWRlckRhdGEsXG4gICAgZXJyb3JzXG4gIH0gPSBwcm9jZXNzUm91dGVMb2FkZXJEYXRhKG1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIHJlc3VsdHMsIHBlbmRpbmdFcnJvciwgYWN0aXZlRGVmZXJyZWRzKTsgLy8gUHJvY2VzcyByZXN1bHRzIGZyb20gb3VyIHJldmFsaWRhdGluZyBmZXRjaGVyc1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByZXZhbGlkYXRpbmdGZXRjaGVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBsZXQgW2tleSwsIG1hdGNoXSA9IHJldmFsaWRhdGluZ0ZldGNoZXJzW2luZGV4XTtcbiAgICBpbnZhcmlhbnQoZmV0Y2hlclJlc3VsdHMgIT09IHVuZGVmaW5lZCAmJiBmZXRjaGVyUmVzdWx0c1tpbmRleF0gIT09IHVuZGVmaW5lZCwgXCJEaWQgbm90IGZpbmQgY29ycmVzcG9uZGluZyBmZXRjaGVyIHJlc3VsdFwiKTtcbiAgICBsZXQgcmVzdWx0ID0gZmV0Y2hlclJlc3VsdHNbaW5kZXhdOyAvLyBQcm9jZXNzIGZldGNoZXIgbm9uLXJlZGlyZWN0IGVycm9yc1xuXG4gICAgaWYgKGlzRXJyb3JSZXN1bHQocmVzdWx0KSkge1xuICAgICAgbGV0IGJvdW5kYXJ5TWF0Y2ggPSBmaW5kTmVhcmVzdEJvdW5kYXJ5KHN0YXRlLm1hdGNoZXMsIG1hdGNoLnJvdXRlLmlkKTtcblxuICAgICAgaWYgKCEoZXJyb3JzICYmIGVycm9yc1tib3VuZGFyeU1hdGNoLnJvdXRlLmlkXSkpIHtcbiAgICAgICAgZXJyb3JzID0gX2V4dGVuZHMoe30sIGVycm9ycywge1xuICAgICAgICAgIFtib3VuZGFyeU1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmVycm9yXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5mZXRjaGVycy5kZWxldGUoa2V5KTtcbiAgICB9IGVsc2UgaWYgKGlzUmVkaXJlY3RSZXN1bHQocmVzdWx0KSkge1xuICAgICAgLy8gU2hvdWxkIG5ldmVyIGdldCBoZXJlLCByZWRpcmVjdHMgc2hvdWxkIGdldCBwcm9jZXNzZWQgYWJvdmUsIGJ1dCB3ZVxuICAgICAgLy8ga2VlcCB0aGlzIHRvIHR5cGUgbmFycm93IHRvIGEgc3VjY2VzcyByZXN1bHQgaW4gdGhlIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBmZXRjaGVyIHJldmFsaWRhdGlvbiByZWRpcmVjdFwiKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVmZXJyZWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgLy8gU2hvdWxkIG5ldmVyIGdldCBoZXJlLCBkZWZlcnJlZCBkYXRhIHNob3VsZCBiZSBhd2FpdGVkIGZvciBmZXRjaGVyc1xuICAgICAgLy8gaW4gcmVzb2x2ZURlZmVycmVkUmVzdWx0c1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIGZldGNoZXIgZGVmZXJyZWQgZGF0YVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGRvbmVGZXRjaGVyID0ge1xuICAgICAgICBzdGF0ZTogXCJpZGxlXCIsXG4gICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLFxuICAgICAgICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybURhdGE6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIHN0YXRlLmZldGNoZXJzLnNldChrZXksIGRvbmVGZXRjaGVyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvYWRlckRhdGEsXG4gICAgZXJyb3JzXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlTG9hZGVyRGF0YShsb2FkZXJEYXRhLCBuZXdMb2FkZXJEYXRhLCBtYXRjaGVzKSB7XG4gIGxldCBtZXJnZWRMb2FkZXJEYXRhID0gX2V4dGVuZHMoe30sIG5ld0xvYWRlckRhdGEpO1xuXG4gIG1hdGNoZXMuZm9yRWFjaChtYXRjaCA9PiB7XG4gICAgbGV0IGlkID0gbWF0Y2gucm91dGUuaWQ7XG5cbiAgICBpZiAobmV3TG9hZGVyRGF0YVtpZF0gPT09IHVuZGVmaW5lZCAmJiBsb2FkZXJEYXRhW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtZXJnZWRMb2FkZXJEYXRhW2lkXSA9IGxvYWRlckRhdGFbaWRdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtZXJnZWRMb2FkZXJEYXRhO1xufSAvLyBGaW5kIHRoZSBuZWFyZXN0IGVycm9yIGJvdW5kYXJ5LCBsb29raW5nIHVwd2FyZHMgZnJvbSB0aGUgbGVhZiByb3V0ZSAob3IgdGhlXG4vLyByb3V0ZSBzcGVjaWZpZWQgYnkgcm91dGVJZCkgZm9yIHRoZSBjbG9zZXN0IGFuY2VzdG9yIGVycm9yIGJvdW5kYXJ5LFxuLy8gZGVmYXVsdGluZyB0byB0aGUgcm9vdCBtYXRjaFxuXG5cbmZ1bmN0aW9uIGZpbmROZWFyZXN0Qm91bmRhcnkobWF0Y2hlcywgcm91dGVJZCkge1xuICBsZXQgZWxpZ2libGVNYXRjaGVzID0gcm91dGVJZCA/IG1hdGNoZXMuc2xpY2UoMCwgbWF0Y2hlcy5maW5kSW5kZXgobSA9PiBtLnJvdXRlLmlkID09PSByb3V0ZUlkKSArIDEpIDogWy4uLm1hdGNoZXNdO1xuICByZXR1cm4gZWxpZ2libGVNYXRjaGVzLnJldmVyc2UoKS5maW5kKG0gPT4gbS5yb3V0ZS5oYXNFcnJvckJvdW5kYXJ5ID09PSB0cnVlKSB8fCBtYXRjaGVzWzBdO1xufVxuXG5mdW5jdGlvbiBnZXROb3RGb3VuZE1hdGNoZXMocm91dGVzKSB7XG4gIC8vIFByZWZlciBhIHJvb3QgbGF5b3V0IHJvdXRlIGlmIHByZXNlbnQsIG90aGVyd2lzZSBzaGltIGluIGEgcm91dGUgb2JqZWN0XG4gIGxldCByb3V0ZSA9IHJvdXRlcy5maW5kKHIgPT4gci5pbmRleCB8fCByLnBhdGggPT09IFwiXCIgfHwgci5wYXRoID09PSBcIi9cIikgfHwge1xuICAgIGlkOiBcIl9fc2hpbS00MDQtcm91dGVfX1wiXG4gIH07XG4gIHJldHVybiB7XG4gICAgbWF0Y2hlczogW3tcbiAgICAgIHBhcmFtczoge30sXG4gICAgICBwYXRobmFtZTogXCJcIixcbiAgICAgIHBhdGhuYW1lQmFzZTogXCJcIixcbiAgICAgIHJvdXRlXG4gICAgfV0sXG4gICAgcm91dGUsXG4gICAgZXJyb3I6IG5ldyBFcnJvclJlc3BvbnNlKDQwNCwgXCJOb3QgRm91bmRcIiwgbnVsbClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TWV0aG9kTm90QWxsb3dlZFJlc3VsdChwYXRoKSB7XG4gIGxldCBocmVmID0gdHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgPyBwYXRoIDogY3JlYXRlSHJlZihwYXRoKTtcbiAgY29uc29sZS53YXJuKFwiWW91J3JlIHRyeWluZyB0byBzdWJtaXQgdG8gYSByb3V0ZSB0aGF0IGRvZXMgbm90IGhhdmUgYW4gYWN0aW9uLiAgVG8gXCIgKyBcImZpeCB0aGlzLCBwbGVhc2UgYWRkIGFuIGBhY3Rpb25gIGZ1bmN0aW9uIHRvIHRoZSByb3V0ZSBmb3IgXCIgKyAoXCJbXCIgKyBocmVmICsgXCJdXCIpKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBSZXN1bHRUeXBlLmVycm9yLFxuICAgIGVycm9yOiBuZXcgRXJyb3JSZXNwb25zZSg0MDUsIFwiTWV0aG9kIE5vdCBBbGxvd2VkXCIsIFwiTm8gYWN0aW9uIGZvdW5kIGZvciBbXCIgKyBocmVmICsgXCJdXCIpXG4gIH07XG59IC8vIEZpbmQgYW55IHJldHVybmVkIHJlZGlyZWN0IGVycm9ycywgc3RhcnRpbmcgZnJvbSB0aGUgbG93ZXN0IG1hdGNoXG5cblxuZnVuY3Rpb24gZmluZFJlZGlyZWN0KHJlc3VsdHMpIHtcbiAgZm9yIChsZXQgaSA9IHJlc3VsdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBsZXQgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgIGlmIChpc1JlZGlyZWN0UmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG59IC8vIENyZWF0ZSBhbiBocmVmIHRvIHJlcHJlc2VudCBhIFwic2VydmVyXCIgVVJMIHdpdGhvdXQgdGhlIGhhc2hcblxuXG5mdW5jdGlvbiBjcmVhdGVIcmVmKGxvY2F0aW9uKSB7XG4gIHJldHVybiAobG9jYXRpb24ucGF0aG5hbWUgfHwgXCJcIikgKyAobG9jYXRpb24uc2VhcmNoIHx8IFwiXCIpO1xufVxuXG5mdW5jdGlvbiBpc0hhc2hDaGFuZ2VPbmx5KGEsIGIpIHtcbiAgcmV0dXJuIGEucGF0aG5hbWUgPT09IGIucGF0aG5hbWUgJiYgYS5zZWFyY2ggPT09IGIuc2VhcmNoICYmIGEuaGFzaCAhPT0gYi5oYXNoO1xufVxuXG5mdW5jdGlvbiBpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkge1xuICByZXR1cm4gcmVzdWx0LnR5cGUgPT09IFJlc3VsdFR5cGUuZGVmZXJyZWQ7XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JSZXN1bHQocmVzdWx0KSB7XG4gIHJldHVybiByZXN1bHQudHlwZSA9PT0gUmVzdWx0VHlwZS5lcnJvcjtcbn1cblxuZnVuY3Rpb24gaXNSZWRpcmVjdFJlc3VsdChyZXN1bHQpIHtcbiAgcmV0dXJuIChyZXN1bHQgJiYgcmVzdWx0LnR5cGUpID09PSBSZXN1bHRUeXBlLnJlZGlyZWN0O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRGVmZXJyZWRSZXN1bHRzKGN1cnJlbnRNYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCByZXN1bHRzLCBzaWduYWwsIGlzRmV0Y2hlciwgY3VycmVudExvYWRlckRhdGEpIHtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJlc3VsdHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbGV0IHJlc3VsdCA9IHJlc3VsdHNbaW5kZXhdO1xuICAgIGxldCBtYXRjaCA9IG1hdGNoZXNUb0xvYWRbaW5kZXhdO1xuICAgIGxldCBjdXJyZW50TWF0Y2ggPSBjdXJyZW50TWF0Y2hlcy5maW5kKG0gPT4gbS5yb3V0ZS5pZCA9PT0gbWF0Y2gucm91dGUuaWQpO1xuICAgIGxldCBpc1JldmFsaWRhdGluZ0xvYWRlciA9IGN1cnJlbnRNYXRjaCAhPSBudWxsICYmICFpc05ld1JvdXRlSW5zdGFuY2UoY3VycmVudE1hdGNoLCBtYXRjaCkgJiYgKGN1cnJlbnRMb2FkZXJEYXRhICYmIGN1cnJlbnRMb2FkZXJEYXRhW21hdGNoLnJvdXRlLmlkXSkgIT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkgJiYgKGlzRmV0Y2hlciB8fCBpc1JldmFsaWRhdGluZ0xvYWRlcikpIHtcbiAgICAgIC8vIE5vdGU6IHdlIGRvIG5vdCBoYXZlIHRvIHRvdWNoIGFjdGl2ZURlZmVycmVkcyBoZXJlIHNpbmNlIHdlIHJhY2UgdGhlbVxuICAgICAgLy8gYWdhaW5zdCB0aGUgc2lnbmFsIGluIHJlc29sdmVEZWZlcnJlZERhdGEgYW5kIHRoZXknbGwgZ2V0IGFib3J0ZWRcbiAgICAgIC8vIHRoZXJlIGlmIG5lZWRlZFxuICAgICAgYXdhaXQgcmVzb2x2ZURlZmVycmVkRGF0YShyZXN1bHQsIHNpZ25hbCwgaXNGZXRjaGVyKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHJlc3VsdCB8fCByZXN1bHRzW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVEZWZlcnJlZERhdGEocmVzdWx0LCBzaWduYWwsIHVud3JhcCkge1xuICBpZiAodW53cmFwID09PSB2b2lkIDApIHtcbiAgICB1bndyYXAgPSBmYWxzZTtcbiAgfVxuXG4gIGxldCBhYm9ydGVkID0gYXdhaXQgcmVzdWx0LmRlZmVycmVkRGF0YS5yZXNvbHZlRGF0YShzaWduYWwpO1xuXG4gIGlmIChhYm9ydGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHVud3JhcCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBSZXN1bHRUeXBlLmRhdGEsXG4gICAgICAgIGRhdGE6IHJlc3VsdC5kZWZlcnJlZERhdGEudW53cmFwcGVkRGF0YVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBIYW5kbGUgYW55IFRyYWNrZWRQcm9taXNlLl9lcnJvciB2YWx1ZXMgZW5jb3VudGVyZWQgd2hpbGUgdW53cmFwcGluZ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogUmVzdWx0VHlwZS5lcnJvcixcbiAgICAgICAgZXJyb3I6IGVcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBSZXN1bHRUeXBlLmRhdGEsXG4gICAgZGF0YTogcmVzdWx0LmRlZmVycmVkRGF0YS5kYXRhXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc05ha2VkSW5kZXhRdWVyeShzZWFyY2gpIHtcbiAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKS5nZXRBbGwoXCJpbmRleFwiKS5zb21lKHYgPT4gdiA9PT0gXCJcIik7XG59IC8vIE5vdGU6IFRoaXMgc2hvdWxkIG1hdGNoIHRoZSBmb3JtYXQgZXhwb3J0ZWQgYnkgdXNlTWF0Y2hlcywgc28gaWYgeW91IGNoYW5nZVxuLy8gdGhpcyBwbGVhc2UgYWxzbyBjaGFuZ2UgdGhhdCA6KSAgRXZlbnR1YWxseSB3ZSdsbCBEUlkgdGhpcyB1cFxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVVzZU1hdGNoZXNNYXRjaChtYXRjaCwgbG9hZGVyRGF0YSkge1xuICBsZXQge1xuICAgIHJvdXRlLFxuICAgIHBhdGhuYW1lLFxuICAgIHBhcmFtc1xuICB9ID0gbWF0Y2g7XG4gIHJldHVybiB7XG4gICAgaWQ6IHJvdXRlLmlkLFxuICAgIHBhdGhuYW1lLFxuICAgIHBhcmFtcyxcbiAgICBkYXRhOiBsb2FkZXJEYXRhW3JvdXRlLmlkXSxcbiAgICBoYW5kbGU6IHJvdXRlLmhhbmRsZVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRNYXRjaChtYXRjaGVzLCBsb2NhdGlvbikge1xuICBsZXQgc2VhcmNoID0gdHlwZW9mIGxvY2F0aW9uID09PSBcInN0cmluZ1wiID8gcGFyc2VQYXRoKGxvY2F0aW9uKS5zZWFyY2ggOiBsb2NhdGlvbi5zZWFyY2g7XG5cbiAgaWYgKG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXS5yb3V0ZS5pbmRleCAmJiAhaGFzTmFrZWRJbmRleFF1ZXJ5KHNlYXJjaCB8fCBcIlwiKSkge1xuICAgIHJldHVybiBtYXRjaGVzLnNsaWNlKC0yKVswXTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzLnNsaWNlKC0xKVswXTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVVJMKGxvY2F0aW9uKSB7XG4gIGxldCBiYXNlID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmxvY2F0aW9uICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA6IFwidW5rbm93bjovL3Vua25vd25cIjtcbiAgbGV0IGhyZWYgPSB0eXBlb2YgbG9jYXRpb24gPT09IFwic3RyaW5nXCIgPyBsb2NhdGlvbiA6IGNyZWF0ZUhyZWYobG9jYXRpb24pO1xuICByZXR1cm4gbmV3IFVSTChocmVmLCBiYXNlKTtcbn0gLy8jZW5kcmVnaW9uXG5cbmV4cG9ydCB7IEFib3J0ZWREZWZlcnJlZEVycm9yLCBBY3Rpb24sIEVycm9yUmVzcG9uc2UsIElETEVfRkVUQ0hFUiwgSURMRV9OQVZJR0FUSU9OLCBjb252ZXJ0Um91dGVzVG9EYXRhUm91dGVzIGFzIFVOU0FGRV9jb252ZXJ0Um91dGVzVG9EYXRhUm91dGVzLCBjcmVhdGVCcm93c2VySGlzdG9yeSwgY3JlYXRlSGFzaEhpc3RvcnksIGNyZWF0ZU1lbW9yeUhpc3RvcnksIGNyZWF0ZVBhdGgsIGNyZWF0ZVJvdXRlciwgZGVmZXIsIGdlbmVyYXRlUGF0aCwgZ2V0U3RhdGljQ29udGV4dEZyb21FcnJvciwgZ2V0VG9QYXRobmFtZSwgaW52YXJpYW50LCBpc1JvdXRlRXJyb3JSZXNwb25zZSwgam9pblBhdGhzLCBqc29uLCBtYXRjaFBhdGgsIG1hdGNoUm91dGVzLCBub3JtYWxpemVQYXRobmFtZSwgcGFyc2VQYXRoLCByZWRpcmVjdCwgcmVzb2x2ZVBhdGgsIHJlc29sdmVUbywgc3RyaXBCYXNlbmFtZSwgdW5zdGFibGVfY3JlYXRlU3RhdGljSGFuZGxlciwgd2FybmluZyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGVyLmpzLm1hcFxuIiwiLy8gVGhlIHByaW1hcnkgZW50cnkgcG9pbnQgYXNzdW1lcyB3ZSdyZSB3b3JraW5nIHdpdGggc3RhbmRhcmQgUmVhY3RET00vUk4sIGJ1dFxuLy8gb2xkZXIgdmVyc2lvbnMgdGhhdCBkbyBub3QgaW5jbHVkZSBgdXNlU3luY0V4dGVybmFsU3RvcmVgIChSZWFjdCAxNi45IC0gMTcueCkuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoZSB1c2VTeW5jRXh0ZXJuYWxTdG9yZSBjb21wYXQgc2hpbSBpcyBuZWVkZWQuXG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0nO1xuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IgfSBmcm9tICd1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL3dpdGgtc2VsZWN0b3InO1xuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgYXMgYmF0Y2ggfSBmcm9tICcuL3V0aWxzL3JlYWN0QmF0Y2hlZFVwZGF0ZXMnO1xuaW1wb3J0IHsgc2V0QmF0Y2ggfSBmcm9tICcuL3V0aWxzL2JhdGNoJztcbmltcG9ydCB7IGluaXRpYWxpemVVc2VTZWxlY3RvciB9IGZyb20gJy4vaG9va3MvdXNlU2VsZWN0b3InO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZUNvbm5lY3QgfSBmcm9tICcuL2NvbXBvbmVudHMvY29ubmVjdCc7XG5pbml0aWFsaXplVXNlU2VsZWN0b3IodXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IpO1xuaW5pdGlhbGl6ZUNvbm5lY3QodXNlU3luY0V4dGVybmFsU3RvcmUpOyAvLyBFbmFibGUgYmF0Y2hlZCB1cGRhdGVzIGluIG91ciBzdWJzY3JpcHRpb25zIGZvciB1c2Vcbi8vIHdpdGggc3RhbmRhcmQgUmVhY3QgcmVuZGVyZXJzIChSZWFjdERPTSwgUmVhY3QgTmF0aXZlKVxuXG5zZXRCYXRjaChiYXRjaCk7XG5leHBvcnQgeyBiYXRjaCB9O1xuZXhwb3J0ICogZnJvbSAnLi9leHBvcnRzJzsiLCIvKipcbiAqIFJlYWN0IFJvdXRlciB2Ni40LjFcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIFJlbWl4IFNvZnR3YXJlIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuaW1wb3J0IHsgaW52YXJpYW50LCByZXNvbHZlVG8sIGpvaW5QYXRocywgbWF0Y2hQYXRoLCB3YXJuaW5nLCBwYXJzZVBhdGgsIG1hdGNoUm91dGVzLCBBY3Rpb24sIGlzUm91dGVFcnJvclJlc3BvbnNlLCBjcmVhdGVNZW1vcnlIaXN0b3J5LCBzdHJpcEJhc2VuYW1lLCBBYm9ydGVkRGVmZXJyZWRFcnJvciwgY3JlYXRlUm91dGVyIH0gZnJvbSAnQHJlbWl4LXJ1bi9yb3V0ZXInO1xuZXhwb3J0IHsgQWJvcnRlZERlZmVycmVkRXJyb3IsIEFjdGlvbiBhcyBOYXZpZ2F0aW9uVHlwZSwgY3JlYXRlUGF0aCwgZGVmZXIsIGdlbmVyYXRlUGF0aCwgaXNSb3V0ZUVycm9yUmVzcG9uc2UsIGpzb24sIG1hdGNoUGF0aCwgbWF0Y2hSb3V0ZXMsIHBhcnNlUGF0aCwgcmVkaXJlY3QsIHJlc29sdmVQYXRoIH0gZnJvbSAnQHJlbWl4LXJ1bi9yb3V0ZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbi8qKlxuICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gKi9cblxuZnVuY3Rpb24gaXNQb2x5ZmlsbCh4LCB5KSB7XG4gIHJldHVybiB4ID09PSB5ICYmICh4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSkgfHwgeCAhPT0geCAmJiB5ICE9PSB5IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIDtcbn1cblxuY29uc3QgaXMgPSB0eXBlb2YgT2JqZWN0LmlzID09PSBcImZ1bmN0aW9uXCIgPyBPYmplY3QuaXMgOiBpc1BvbHlmaWxsOyAvLyBJbnRlbnRpb25hbGx5IG5vdCB1c2luZyBuYW1lZCBpbXBvcnRzIGJlY2F1c2UgUm9sbHVwIHVzZXMgZHluYW1pY1xuLy8gZGlzcGF0Y2ggZm9yIENvbW1vbkpTIGludGVyb3AgbmFtZWQgaW1wb3J0cy5cblxuY29uc3Qge1xuICB1c2VTdGF0ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZURlYnVnVmFsdWVcbn0gPSBSZWFjdDtcbmxldCBkaWRXYXJuT2xkMThBbHBoYSA9IGZhbHNlO1xubGV0IGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90ID0gZmFsc2U7IC8vIERpc2NsYWltZXI6IFRoaXMgc2hpbSBicmVha3MgbWFueSBvZiB0aGUgcnVsZXMgb2YgUmVhY3QsIGFuZCBvbmx5IHdvcmtzXG4vLyBiZWNhdXNlIG9mIGEgdmVyeSBwYXJ0aWN1bGFyIHNldCBvZiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBhc3N1bXB0aW9uc1xuLy8gLS0gY2hhbmdlIGFueSBvbmUgb2YgdGhlbSBhbmQgaXQgd2lsbCBicmVhay4gVGhlIG1vc3QgaW1wb3J0YW50IGFzc3VtcHRpb25cbi8vIGlzIHRoYXQgdXBkYXRlcyBhcmUgYWx3YXlzIHN5bmNocm9ub3VzLCBiZWNhdXNlIGNvbmN1cnJlbnQgcmVuZGVyaW5nIGlzXG4vLyBvbmx5IGF2YWlsYWJsZSBpbiB2ZXJzaW9ucyBvZiBSZWFjdCB0aGF0IGFsc28gaGF2ZSBhIGJ1aWx0LWluXG4vLyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSBBUEkuIEFuZCB3ZSBvbmx5IHVzZSB0aGlzIHNoaW0gd2hlbiB0aGUgYnVpbHQtaW4gQVBJXG4vLyBkb2VzIG5vdCBleGlzdC5cbi8vXG4vLyBEbyBub3QgYXNzdW1lIHRoYXQgdGhlIGNsZXZlciBoYWNrcyB1c2VkIGJ5IHRoaXMgaG9vayBhbHNvIHdvcmsgaW4gZ2VuZXJhbC5cbi8vIFRoZSBwb2ludCBvZiB0aGlzIHNoaW0gaXMgdG8gcmVwbGFjZSB0aGUgbmVlZCBmb3IgaGFja3MgYnkgb3RoZXIgbGlicmFyaWVzLlxuXG5mdW5jdGlvbiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQyKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIC8vIE5vdGU6IFRoZSBzaGltIGRvZXMgbm90IHVzZSBnZXRTZXJ2ZXJTbmFwc2hvdCwgYmVjYXVzZSBwcmUtMTggdmVyc2lvbnMgb2Zcbi8vIFJlYWN0IGRvIG5vdCBleHBvc2UgYSB3YXkgdG8gY2hlY2sgaWYgd2UncmUgaHlkcmF0aW5nLiBTbyB1c2VycyBvZiB0aGUgc2hpbVxuLy8gd2lsbCBuZWVkIHRvIHRyYWNrIHRoYXQgdGhlbXNlbHZlcyBhbmQgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlXG4vLyBmcm9tIGBnZXRTbmFwc2hvdGAuXG5nZXRTZXJ2ZXJTbmFwc2hvdCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKCFkaWRXYXJuT2xkMThBbHBoYSkge1xuICAgICAgaWYgKFwic3RhcnRUcmFuc2l0aW9uXCIgaW4gUmVhY3QpIHtcbiAgICAgICAgZGlkV2Fybk9sZDE4QWxwaGEgPSB0cnVlO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiWW91IGFyZSB1c2luZyBhbiBvdXRkYXRlZCwgcHJlLXJlbGVhc2UgYWxwaGEgb2YgUmVhY3QgMTggdGhhdCBcIiArIFwiZG9lcyBub3Qgc3VwcG9ydCB1c2VTeW5jRXh0ZXJuYWxTdG9yZS4gVGhlIFwiICsgXCJ1c2Utc3luYy1leHRlcm5hbC1zdG9yZSBzaGltIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5LiBVcGdyYWRlIFwiICsgXCJ0byBhIG5ld2VyIHByZS1yZWxlYXNlLlwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gUmVhZCB0aGUgY3VycmVudCBzbmFwc2hvdCBmcm9tIHRoZSBzdG9yZSBvbiBldmVyeSByZW5kZXIuIEFnYWluLCB0aGlzXG4gIC8vIGJyZWFrcyB0aGUgcnVsZXMgb2YgUmVhY3QsIGFuZCBvbmx5IHdvcmtzIGhlcmUgYmVjYXVzZSBvZiBzcGVjaWZpY1xuICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBtb3N0IGltcG9ydGFudGx5IHRoYXQgdXBkYXRlcyBhcmVcbiAgLy8gYWx3YXlzIHN5bmNocm9ub3VzLlxuXG5cbiAgY29uc3QgdmFsdWUgPSBnZXRTbmFwc2hvdCgpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAoIWRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90KSB7XG4gICAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IGdldFNuYXBzaG90KCk7XG5cbiAgICAgIGlmICghaXModmFsdWUsIGNhY2hlZFZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHJlc3VsdCBvZiBnZXRTbmFwc2hvdCBzaG91bGQgYmUgY2FjaGVkIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3BcIik7XG4gICAgICAgIGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQmVjYXVzZSB1cGRhdGVzIGFyZSBzeW5jaHJvbm91cywgd2UgZG9uJ3QgcXVldWUgdGhlbS4gSW5zdGVhZCB3ZSBmb3JjZSBhXG4gIC8vIHJlLXJlbmRlciB3aGVuZXZlciB0aGUgc3Vic2NyaWJlZCBzdGF0ZSBjaGFuZ2VzIGJ5IHVwZGF0aW5nIGFuIHNvbWVcbiAgLy8gYXJiaXRyYXJ5IHVzZVN0YXRlIGhvb2suIFRoZW4sIGR1cmluZyByZW5kZXIsIHdlIGNhbGwgZ2V0U25hcHNob3QgdG8gcmVhZFxuICAvLyB0aGUgY3VycmVudCB2YWx1ZS5cbiAgLy9cbiAgLy8gQmVjYXVzZSB3ZSBkb24ndCBhY3R1YWxseSB1c2UgdGhlIHN0YXRlIHJldHVybmVkIGJ5IHRoZSB1c2VTdGF0ZSBob29rLCB3ZVxuICAvLyBjYW4gc2F2ZSBhIGJpdCBvZiBtZW1vcnkgYnkgc3RvcmluZyBvdGhlciBzdHVmZiBpbiB0aGF0IHNsb3QuXG4gIC8vXG4gIC8vIFRvIGltcGxlbWVudCB0aGUgZWFybHkgYmFpbG91dCwgd2UgbmVlZCB0byB0cmFjayBzb21lIHRoaW5ncyBvbiBhIG11dGFibGVcbiAgLy8gb2JqZWN0LiBVc3VhbGx5LCB3ZSB3b3VsZCBwdXQgdGhhdCBpbiBhIHVzZVJlZiBob29rLCBidXQgd2UgY2FuIHN0YXNoIGl0IGluXG4gIC8vIG91ciB1c2VTdGF0ZSBob29rIGluc3RlYWQuXG4gIC8vXG4gIC8vIFRvIGZvcmNlIGEgcmUtcmVuZGVyLCB3ZSBjYWxsIGZvcmNlVXBkYXRlKHtpbnN0fSkuIFRoYXQgd29ya3MgYmVjYXVzZSB0aGVcbiAgLy8gbmV3IG9iamVjdCBhbHdheXMgZmFpbHMgYW4gZXF1YWxpdHkgY2hlY2suXG5cblxuICBjb25zdCBbe1xuICAgIGluc3RcbiAgfSwgZm9yY2VVcGRhdGVdID0gdXNlU3RhdGUoe1xuICAgIGluc3Q6IHtcbiAgICAgIHZhbHVlLFxuICAgICAgZ2V0U25hcHNob3RcbiAgICB9XG4gIH0pOyAvLyBUcmFjayB0aGUgbGF0ZXN0IGdldFNuYXBzaG90IGZ1bmN0aW9uIHdpdGggYSByZWYuIFRoaXMgbmVlZHMgdG8gYmUgdXBkYXRlZFxuICAvLyBpbiB0aGUgbGF5b3V0IHBoYXNlIHNvIHdlIGNhbiBhY2Nlc3MgaXQgZHVyaW5nIHRoZSB0ZWFyaW5nIGNoZWNrIHRoYXRcbiAgLy8gaGFwcGVucyBvbiBzdWJzY3JpYmUuXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpbnN0LnZhbHVlID0gdmFsdWU7XG4gICAgaW5zdC5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90OyAvLyBXaGVuZXZlciBnZXRTbmFwc2hvdCBvciBzdWJzY3JpYmUgY2hhbmdlcywgd2UgbmVlZCB0byBjaGVjayBpbiB0aGVcbiAgICAvLyBjb21taXQgcGhhc2UgaWYgdGhlcmUgd2FzIGFuIGludGVybGVhdmVkIG11dGF0aW9uLiBJbiBjb25jdXJyZW50IG1vZGVcbiAgICAvLyB0aGlzIGNhbiBoYXBwZW4gYWxsIHRoZSB0aW1lLCBidXQgZXZlbiBpbiBzeW5jaHJvbm91cyBtb2RlLCBhbiBlYXJsaWVyXG4gICAgLy8gZWZmZWN0IG1heSBoYXZlIG11dGF0ZWQgdGhlIHN0b3JlLlxuXG4gICAgaWYgKGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkpIHtcbiAgICAgIC8vIEZvcmNlIGEgcmUtcmVuZGVyLlxuICAgICAgZm9yY2VVcGRhdGUoe1xuICAgICAgICBpbnN0XG4gICAgICB9KTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcblxuICB9LCBbc3Vic2NyaWJlLCB2YWx1ZSwgZ2V0U25hcHNob3RdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBDaGVjayBmb3IgY2hhbmdlcyByaWdodCBiZWZvcmUgc3Vic2NyaWJpbmcuIFN1YnNlcXVlbnQgY2hhbmdlcyB3aWxsIGJlXG4gICAgLy8gZGV0ZWN0ZWQgaW4gdGhlIHN1YnNjcmlwdGlvbiBoYW5kbGVyLlxuICAgIGlmIChjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpKSB7XG4gICAgICAvLyBGb3JjZSBhIHJlLXJlbmRlci5cbiAgICAgIGZvcmNlVXBkYXRlKHtcbiAgICAgICAgaW5zdFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlU3RvcmVDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAvLyBUT0RPOiBCZWNhdXNlIHRoZXJlIGlzIG5vIGNyb3NzLXJlbmRlcmVyIEFQSSBmb3IgYmF0Y2hpbmcgdXBkYXRlcywgaXQnc1xuICAgICAgLy8gdXAgdG8gdGhlIGNvbnN1bWVyIG9mIHRoaXMgbGlicmFyeSB0byB3cmFwIHRoZWlyIHN1YnNjcmlwdGlvbiBldmVudFxuICAgICAgLy8gd2l0aCB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcy4gU2hvdWxkIHdlIHRyeSB0byBkZXRlY3Qgd2hlbiB0aGlzIGlzbid0XG4gICAgICAvLyB0aGUgY2FzZSBhbmQgcHJpbnQgYSB3YXJuaW5nIGluIGRldmVsb3BtZW50P1xuICAgICAgLy8gVGhlIHN0b3JlIGNoYW5nZWQuIENoZWNrIGlmIHRoZSBzbmFwc2hvdCBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2VcbiAgICAgIC8vIHJlYWQgZnJvbSB0aGUgc3RvcmUuXG4gICAgICBpZiAoY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSkge1xuICAgICAgICAvLyBGb3JjZSBhIHJlLXJlbmRlci5cbiAgICAgICAgZm9yY2VVcGRhdGUoe1xuICAgICAgICAgIGluc3RcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTsgLy8gU3Vic2NyaWJlIHRvIHRoZSBzdG9yZSBhbmQgcmV0dXJuIGEgY2xlYW4tdXAgZnVuY3Rpb24uXG5cblxuICAgIHJldHVybiBzdWJzY3JpYmUoaGFuZGxlU3RvcmVDaGFuZ2UpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtzdWJzY3JpYmVdKTtcbiAgdXNlRGVidWdWYWx1ZSh2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSB7XG4gIGNvbnN0IGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5nZXRTbmFwc2hvdDtcbiAgY29uc3QgcHJldlZhbHVlID0gaW5zdC52YWx1ZTtcblxuICB0cnkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IGxhdGVzdEdldFNuYXBzaG90KCk7XG4gICAgcmV0dXJuICFpcyhwcmV2VmFsdWUsIG5leHRWYWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICovXG5mdW5jdGlvbiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQxKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gIC8vIE5vdGU6IFRoZSBzaGltIGRvZXMgbm90IHVzZSBnZXRTZXJ2ZXJTbmFwc2hvdCwgYmVjYXVzZSBwcmUtMTggdmVyc2lvbnMgb2ZcbiAgLy8gUmVhY3QgZG8gbm90IGV4cG9zZSBhIHdheSB0byBjaGVjayBpZiB3ZSdyZSBoeWRyYXRpbmcuIFNvIHVzZXJzIG9mIHRoZSBzaGltXG4gIC8vIHdpbGwgbmVlZCB0byB0cmFjayB0aGF0IHRoZW1zZWx2ZXMgYW5kIHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZVxuICAvLyBmcm9tIGBnZXRTbmFwc2hvdGAuXG4gIHJldHVybiBnZXRTbmFwc2hvdCgpO1xufVxuXG4vKipcbiAqIElubGluZWQgaW50byB0aGUgcmVhY3Qtcm91dGVyIHJlcG8gc2luY2UgdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUgZG9lcyBub3RcbiAqIHByb3ZpZGUgYSBVTUQtY29tcGF0aWJsZSBwYWNrYWdlLCBzbyB3ZSBuZWVkIHRoaXMgdG8gYmUgYWJsZSB0byBkaXN0cmlidXRlXG4gKiBVTUQgcmVhY3Qtcm91dGVyIGJ1bmRsZXNcbiAqL1xuY29uc3QgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIik7XG5jb25zdCBpc1NlcnZlckVudmlyb25tZW50ID0gIWNhblVzZURPTTtcbmNvbnN0IHNoaW0gPSBpc1NlcnZlckVudmlyb25tZW50ID8gdXNlU3luY0V4dGVybmFsU3RvcmUkMSA6IHVzZVN5bmNFeHRlcm5hbFN0b3JlJDI7XG5jb25zdCB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIiBpbiBSZWFjdCA/IChtb2R1bGUgPT4gbW9kdWxlLnVzZVN5bmNFeHRlcm5hbFN0b3JlKShSZWFjdCkgOiBzaGltO1xuXG4vLyBDb250ZXh0cyBmb3IgZGF0YSByb3V0ZXJzXG5jb25zdCBEYXRhU3RhdGljUm91dGVyQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIERhdGFTdGF0aWNSb3V0ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJEYXRhU3RhdGljUm91dGVyQ29udGV4dFwiO1xufVxuXG5jb25zdCBEYXRhUm91dGVyQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIERhdGFSb3V0ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJEYXRhUm91dGVyXCI7XG59XG5cbmNvbnN0IERhdGFSb3V0ZXJTdGF0ZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBEYXRhUm91dGVyU3RhdGVDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJEYXRhUm91dGVyU3RhdGVcIjtcbn1cblxuY29uc3QgQXdhaXRDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgQXdhaXRDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJBd2FpdFwiO1xufVxuXG5jb25zdCBOYXZpZ2F0aW9uQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIE5hdmlnYXRpb25Db250ZXh0LmRpc3BsYXlOYW1lID0gXCJOYXZpZ2F0aW9uXCI7XG59XG5cbmNvbnN0IExvY2F0aW9uQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIExvY2F0aW9uQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiTG9jYXRpb25cIjtcbn1cblxuY29uc3QgUm91dGVDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe1xuICBvdXRsZXQ6IG51bGwsXG4gIG1hdGNoZXM6IFtdXG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBSb3V0ZUNvbnRleHQuZGlzcGxheU5hbWUgPSBcIlJvdXRlXCI7XG59XG5cbmNvbnN0IFJvdXRlRXJyb3JDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgUm91dGVFcnJvckNvbnRleHQuZGlzcGxheU5hbWUgPSBcIlJvdXRlRXJyb3JcIjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSBnaXZlbiBcInRvXCIgdmFsdWUuIFRoaXMgaXMgdXNlZnVsIGZvciBidWlsZGluZ1xuICogY3VzdG9tIGxpbmtzIHRoYXQgYXJlIGFsc28gYWNjZXNzaWJsZSBhbmQgcHJlc2VydmUgcmlnaHQtY2xpY2sgYmVoYXZpb3IuXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L2hvb2tzL3VzZS1ocmVmXG4gKi9cblxuZnVuY3Rpb24gdXNlSHJlZih0bywgX3RlbXApIHtcbiAgbGV0IHtcbiAgICByZWxhdGl2ZVxuICB9ID0gX3RlbXAgPT09IHZvaWQgMCA/IHt9IDogX3RlbXA7XG4gICF1c2VJblJvdXRlckNvbnRleHQoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgLy8gVE9ETzogVGhpcyBlcnJvciBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZXkgc29tZWhvdyBoYXZlIDIgdmVyc2lvbnMgb2YgdGhlXG4gIC8vIHJvdXRlciBsb2FkZWQuIFdlIGNhbiBoZWxwIHRoZW0gdW5kZXJzdGFuZCBob3cgdG8gYXZvaWQgdGhhdC5cbiAgXCJ1c2VIcmVmKCkgbWF5IGJlIHVzZWQgb25seSBpbiB0aGUgY29udGV4dCBvZiBhIDxSb3V0ZXI+IGNvbXBvbmVudC5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQge1xuICAgIGJhc2VuYW1lLFxuICAgIG5hdmlnYXRvclxuICB9ID0gUmVhY3QudXNlQ29udGV4dChOYXZpZ2F0aW9uQ29udGV4dCk7XG4gIGxldCB7XG4gICAgaGFzaCxcbiAgICBwYXRobmFtZSxcbiAgICBzZWFyY2hcbiAgfSA9IHVzZVJlc29sdmVkUGF0aCh0bywge1xuICAgIHJlbGF0aXZlXG4gIH0pO1xuICBsZXQgam9pbmVkUGF0aG5hbWUgPSBwYXRobmFtZTsgLy8gSWYgd2UncmUgb3BlcmF0aW5nIHdpdGhpbiBhIGJhc2VuYW1lLCBwcmVwZW5kIGl0IHRvIHRoZSBwYXRobmFtZSBwcmlvclxuICAvLyB0byBjcmVhdGluZyB0aGUgaHJlZi4gIElmIHRoaXMgaXMgYSByb290IG5hdmlnYXRpb24sIHRoZW4ganVzdCB1c2UgdGhlIHJhd1xuICAvLyBiYXNlbmFtZSB3aGljaCBhbGxvd3MgdGhlIGJhc2VuYW1lIHRvIGhhdmUgZnVsbCBjb250cm9sIG92ZXIgdGhlIHByZXNlbmNlXG4gIC8vIG9mIGEgdHJhaWxpbmcgc2xhc2ggb24gcm9vdCBsaW5rc1xuXG4gIGlmIChiYXNlbmFtZSAhPT0gXCIvXCIpIHtcbiAgICBqb2luZWRQYXRobmFtZSA9IHBhdGhuYW1lID09PSBcIi9cIiA/IGJhc2VuYW1lIDogam9pblBhdGhzKFtiYXNlbmFtZSwgcGF0aG5hbWVdKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IuY3JlYXRlSHJlZih7XG4gICAgcGF0aG5hbWU6IGpvaW5lZFBhdGhuYW1lLFxuICAgIHNlYXJjaCxcbiAgICBoYXNoXG4gIH0pO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBjb21wb25lbnQgaXMgYSBkZXNjZW5kYW50IG9mIGEgPFJvdXRlcj4uXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L2hvb2tzL3VzZS1pbi1yb3V0ZXItY29udGV4dFxuICovXG5cbmZ1bmN0aW9uIHVzZUluUm91dGVyQ29udGV4dCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoTG9jYXRpb25Db250ZXh0KSAhPSBudWxsO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGxvY2F0aW9uIG9iamVjdCwgd2hpY2ggcmVwcmVzZW50cyB0aGUgY3VycmVudCBVUkwgaW4gd2ViXG4gKiBicm93c2Vycy5cbiAqXG4gKiBOb3RlOiBJZiB5b3UncmUgdXNpbmcgdGhpcyBpdCBtYXkgbWVhbiB5b3UncmUgZG9pbmcgc29tZSBvZiB5b3VyIG93blxuICogXCJyb3V0aW5nXCIgaW4geW91ciBhcHAsIGFuZCB3ZSdkIGxpa2UgdG8ga25vdyB3aGF0IHlvdXIgdXNlIGNhc2UgaXMuIFdlIG1heVxuICogYmUgYWJsZSB0byBwcm92aWRlIHNvbWV0aGluZyBoaWdoZXItbGV2ZWwgdG8gYmV0dGVyIHN1aXQgeW91ciBuZWVkcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLWxvY2F0aW9uXG4gKi9cblxuZnVuY3Rpb24gdXNlTG9jYXRpb24oKSB7XG4gICF1c2VJblJvdXRlckNvbnRleHQoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgLy8gVE9ETzogVGhpcyBlcnJvciBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZXkgc29tZWhvdyBoYXZlIDIgdmVyc2lvbnMgb2YgdGhlXG4gIC8vIHJvdXRlciBsb2FkZWQuIFdlIGNhbiBoZWxwIHRoZW0gdW5kZXJzdGFuZCBob3cgdG8gYXZvaWQgdGhhdC5cbiAgXCJ1c2VMb2NhdGlvbigpIG1heSBiZSB1c2VkIG9ubHkgaW4gdGhlIGNvbnRleHQgb2YgYSA8Um91dGVyPiBjb21wb25lbnQuXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoTG9jYXRpb25Db250ZXh0KS5sb2NhdGlvbjtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGFjdGlvbiB3aGljaCBkZXNjcmliZXMgaG93IHRoZSByb3V0ZXIgY2FtZSB0b1xuICogdGhlIGN1cnJlbnQgbG9jYXRpb24sIGVpdGhlciBieSBhIHBvcCwgcHVzaCwgb3IgcmVwbGFjZSBvbiB0aGUgaGlzdG9yeSBzdGFjay5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLW5hdmlnYXRpb24tdHlwZVxuICovXG5cbmZ1bmN0aW9uIHVzZU5hdmlnYXRpb25UeXBlKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChMb2NhdGlvbkNvbnRleHQpLm5hdmlnYXRpb25UeXBlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIFVSTCBmb3IgdGhlIGdpdmVuIFwidG9cIiB2YWx1ZSBtYXRjaGVzIHRoZSBjdXJyZW50IFVSTC5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBjb21wb25lbnRzIHRoYXQgbmVlZCB0byBrbm93IFwiYWN0aXZlXCIgc3RhdGUsIGUuZy5cbiAqIDxOYXZMaW5rPi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLW1hdGNoXG4gKi9cblxuZnVuY3Rpb24gdXNlTWF0Y2gocGF0dGVybikge1xuICAhdXNlSW5Sb3V0ZXJDb250ZXh0KCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIC8vIFRPRE86IFRoaXMgZXJyb3IgaXMgcHJvYmFibHkgYmVjYXVzZSB0aGV5IHNvbWVob3cgaGF2ZSAyIHZlcnNpb25zIG9mIHRoZVxuICAvLyByb3V0ZXIgbG9hZGVkLiBXZSBjYW4gaGVscCB0aGVtIHVuZGVyc3RhbmQgaG93IHRvIGF2b2lkIHRoYXQuXG4gIFwidXNlTWF0Y2goKSBtYXkgYmUgdXNlZCBvbmx5IGluIHRoZSBjb250ZXh0IG9mIGEgPFJvdXRlcj4gY29tcG9uZW50LlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCB7XG4gICAgcGF0aG5hbWVcbiAgfSA9IHVzZUxvY2F0aW9uKCk7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IG1hdGNoUGF0aChwYXR0ZXJuLCBwYXRobmFtZSksIFtwYXRobmFtZSwgcGF0dGVybl0pO1xufVxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbmF2aWdhdGUoKSBmdW5jdGlvbiByZXR1cm5lZCBmcm9tIHVzZU5hdmlnYXRlKCkuXG4gKi9cblxuLyoqXG4gKiBXaGVuIHByb2Nlc3NpbmcgcmVsYXRpdmUgbmF2aWdhdGlvbiB3ZSB3YW50IHRvIGlnbm9yZSBhbmNlc3RvciByb3V0ZXMgdGhhdFxuICogZG8gbm90IGNvbnRyaWJ1dGUgdG8gdGhlIHBhdGgsIHN1Y2ggdGhhdCBpbmRleC9wYXRobGVzcyBsYXlvdXQgcm91dGVzIGRvbid0XG4gKiBpbnRlcmZlcmUuXG4gKlxuICogRm9yIGV4YW1wbGUsIHdoZW4gbW92aW5nIGEgcm91dGUgZWxlbWVudCBpbnRvIGFuIGluZGV4IHJvdXRlIGFuZC9vciBhXG4gKiBwYXRobGVzcyBsYXlvdXQgcm91dGUsIHJlbGF0aXZlIGxpbmsgYmVoYXZpb3IgY29udGFpbmVkIHdpdGhpbiBzaG91bGQgc3RheVxuICogdGhlIHNhbWUuICBCb3RoIG9mIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgc2hvdWxkIGxpbmsgYmFjayB0byB0aGUgcm9vdDpcbiAqXG4gKiAgIDxSb3V0ZSBwYXRoPVwiL1wiPlxuICogICAgIDxSb3V0ZSBwYXRoPVwiYWNjb3VudHNcIiBlbGVtZW50PXs8TGluayB0bz1cIi4uXCJ9PlxuICogICA8L1JvdXRlPlxuICpcbiAqICAgPFJvdXRlIHBhdGg9XCIvXCI+XG4gKiAgICAgPFJvdXRlIHBhdGg9XCJhY2NvdW50c1wiPlxuICogICAgICAgPFJvdXRlIGVsZW1lbnQ9ezxBY2NvdW50c0xheW91dCAvPn0+ICAgICAgIC8vIDwtLSBEb2VzIG5vdCBjb250cmlidXRlXG4gKiAgICAgICAgIDxSb3V0ZSBpbmRleCBlbGVtZW50PXs8TGluayB0bz1cIi4uXCJ9IC8+ICAvLyA8LS0gRG9lcyBub3QgY29udHJpYnV0ZVxuICogICAgICAgPC9Sb3V0ZVxuICogICAgIDwvUm91dGU+XG4gKiAgIDwvUm91dGU+XG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhDb250cmlidXRpbmdNYXRjaGVzKG1hdGNoZXMpIHtcbiAgcmV0dXJuIG1hdGNoZXMuZmlsdGVyKChtYXRjaCwgaW5kZXgpID0+IGluZGV4ID09PSAwIHx8ICFtYXRjaC5yb3V0ZS5pbmRleCAmJiBtYXRjaC5wYXRobmFtZUJhc2UgIT09IG1hdGNoZXNbaW5kZXggLSAxXS5wYXRobmFtZUJhc2UpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGFuIGltcGVyYXRpdmUgbWV0aG9kIGZvciBjaGFuZ2luZyB0aGUgbG9jYXRpb24uIFVzZWQgYnkgPExpbms+cywgYnV0XG4gKiBtYXkgYWxzbyBiZSB1c2VkIGJ5IG90aGVyIGVsZW1lbnRzIHRvIGNoYW5nZSB0aGUgbG9jYXRpb24uXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L2hvb2tzL3VzZS1uYXZpZ2F0ZVxuICovXG5cblxuZnVuY3Rpb24gdXNlTmF2aWdhdGUoKSB7XG4gICF1c2VJblJvdXRlckNvbnRleHQoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgLy8gVE9ETzogVGhpcyBlcnJvciBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZXkgc29tZWhvdyBoYXZlIDIgdmVyc2lvbnMgb2YgdGhlXG4gIC8vIHJvdXRlciBsb2FkZWQuIFdlIGNhbiBoZWxwIHRoZW0gdW5kZXJzdGFuZCBob3cgdG8gYXZvaWQgdGhhdC5cbiAgXCJ1c2VOYXZpZ2F0ZSgpIG1heSBiZSB1c2VkIG9ubHkgaW4gdGhlIGNvbnRleHQgb2YgYSA8Um91dGVyPiBjb21wb25lbnQuXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IHtcbiAgICBiYXNlbmFtZSxcbiAgICBuYXZpZ2F0b3JcbiAgfSA9IFJlYWN0LnVzZUNvbnRleHQoTmF2aWdhdGlvbkNvbnRleHQpO1xuICBsZXQge1xuICAgIG1hdGNoZXNcbiAgfSA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVDb250ZXh0KTtcbiAgbGV0IHtcbiAgICBwYXRobmFtZTogbG9jYXRpb25QYXRobmFtZVxuICB9ID0gdXNlTG9jYXRpb24oKTtcbiAgbGV0IHJvdXRlUGF0aG5hbWVzSnNvbiA9IEpTT04uc3RyaW5naWZ5KGdldFBhdGhDb250cmlidXRpbmdNYXRjaGVzKG1hdGNoZXMpLm1hcChtYXRjaCA9PiBtYXRjaC5wYXRobmFtZUJhc2UpKTtcbiAgbGV0IGFjdGl2ZVJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWN0aXZlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICB9KTtcbiAgbGV0IG5hdmlnYXRlID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKHRvLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoYWN0aXZlUmVmLmN1cnJlbnQsIFwiWW91IHNob3VsZCBjYWxsIG5hdmlnYXRlKCkgaW4gYSBSZWFjdC51c2VFZmZlY3QoKSwgbm90IHdoZW4gXCIgKyBcInlvdXIgY29tcG9uZW50IGlzIGZpcnN0IHJlbmRlcmVkLlwiKSA6IHZvaWQgMDtcbiAgICBpZiAoIWFjdGl2ZVJlZi5jdXJyZW50KSByZXR1cm47XG5cbiAgICBpZiAodHlwZW9mIHRvID09PSBcIm51bWJlclwiKSB7XG4gICAgICBuYXZpZ2F0b3IuZ28odG8pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBwYXRoID0gcmVzb2x2ZVRvKHRvLCBKU09OLnBhcnNlKHJvdXRlUGF0aG5hbWVzSnNvbiksIGxvY2F0aW9uUGF0aG5hbWUsIG9wdGlvbnMucmVsYXRpdmUgPT09IFwicGF0aFwiKTsgLy8gSWYgd2UncmUgb3BlcmF0aW5nIHdpdGhpbiBhIGJhc2VuYW1lLCBwcmVwZW5kIGl0IHRvIHRoZSBwYXRobmFtZSBwcmlvclxuICAgIC8vIHRvIGhhbmRpbmcgb2ZmIHRvIGhpc3RvcnkuICBJZiB0aGlzIGlzIGEgcm9vdCBuYXZpZ2F0aW9uLCB0aGVuIHdlXG4gICAgLy8gbmF2aWdhdGUgdG8gdGhlIHJhdyBiYXNlbmFtZSB3aGljaCBhbGxvd3MgdGhlIGJhc2VuYW1lIHRvIGhhdmUgZnVsbFxuICAgIC8vIGNvbnRyb2wgb3ZlciB0aGUgcHJlc2VuY2Ugb2YgYSB0cmFpbGluZyBzbGFzaCBvbiByb290IGxpbmtzXG5cbiAgICBpZiAoYmFzZW5hbWUgIT09IFwiL1wiKSB7XG4gICAgICBwYXRoLnBhdGhuYW1lID0gcGF0aC5wYXRobmFtZSA9PT0gXCIvXCIgPyBiYXNlbmFtZSA6IGpvaW5QYXRocyhbYmFzZW5hbWUsIHBhdGgucGF0aG5hbWVdKTtcbiAgICB9XG5cbiAgICAoISFvcHRpb25zLnJlcGxhY2UgPyBuYXZpZ2F0b3IucmVwbGFjZSA6IG5hdmlnYXRvci5wdXNoKShwYXRoLCBvcHRpb25zLnN0YXRlLCBvcHRpb25zKTtcbiAgfSwgW2Jhc2VuYW1lLCBuYXZpZ2F0b3IsIHJvdXRlUGF0aG5hbWVzSnNvbiwgbG9jYXRpb25QYXRobmFtZV0pO1xuICByZXR1cm4gbmF2aWdhdGU7XG59XG5jb25zdCBPdXRsZXRDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG4vKipcbiAqIFJldHVybnMgdGhlIGNvbnRleHQgKGlmIHByb3ZpZGVkKSBmb3IgdGhlIGNoaWxkIHJvdXRlIGF0IHRoaXMgbGV2ZWwgb2YgdGhlIHJvdXRlXG4gKiBoaWVyYXJjaHkuXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLW91dGxldC1jb250ZXh0XG4gKi9cblxuZnVuY3Rpb24gdXNlT3V0bGV0Q29udGV4dCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoT3V0bGV0Q29udGV4dCk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGVsZW1lbnQgZm9yIHRoZSBjaGlsZCByb3V0ZSBhdCB0aGlzIGxldmVsIG9mIHRoZSByb3V0ZVxuICogaGllcmFyY2h5LiBVc2VkIGludGVybmFsbHkgYnkgPE91dGxldD4gdG8gcmVuZGVyIGNoaWxkIHJvdXRlcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLW91dGxldFxuICovXG5cbmZ1bmN0aW9uIHVzZU91dGxldChjb250ZXh0KSB7XG4gIGxldCBvdXRsZXQgPSBSZWFjdC51c2VDb250ZXh0KFJvdXRlQ29udGV4dCkub3V0bGV0O1xuXG4gIGlmIChvdXRsZXQpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoT3V0bGV0Q29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRcbiAgICB9LCBvdXRsZXQpO1xuICB9XG5cbiAgcmV0dXJuIG91dGxldDtcbn1cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3Qgb2Yga2V5L3ZhbHVlIHBhaXJzIG9mIHRoZSBkeW5hbWljIHBhcmFtcyBmcm9tIHRoZSBjdXJyZW50XG4gKiBVUkwgdGhhdCB3ZXJlIG1hdGNoZWQgYnkgdGhlIHJvdXRlIHBhdGguXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L2hvb2tzL3VzZS1wYXJhbXNcbiAqL1xuXG5mdW5jdGlvbiB1c2VQYXJhbXMoKSB7XG4gIGxldCB7XG4gICAgbWF0Y2hlc1xuICB9ID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUNvbnRleHQpO1xuICBsZXQgcm91dGVNYXRjaCA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIHJvdXRlTWF0Y2ggPyByb3V0ZU1hdGNoLnBhcmFtcyA6IHt9O1xufVxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgcGF0aG5hbWUgb2YgdGhlIGdpdmVuIGB0b2AgdmFsdWUgYWdhaW5zdCB0aGUgY3VycmVudCBsb2NhdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLXJlc29sdmVkLXBhdGhcbiAqL1xuXG5mdW5jdGlvbiB1c2VSZXNvbHZlZFBhdGgodG8sIF90ZW1wMikge1xuICBsZXQge1xuICAgIHJlbGF0aXZlXG4gIH0gPSBfdGVtcDIgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAyO1xuICBsZXQge1xuICAgIG1hdGNoZXNcbiAgfSA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVDb250ZXh0KTtcbiAgbGV0IHtcbiAgICBwYXRobmFtZTogbG9jYXRpb25QYXRobmFtZVxuICB9ID0gdXNlTG9jYXRpb24oKTtcbiAgbGV0IHJvdXRlUGF0aG5hbWVzSnNvbiA9IEpTT04uc3RyaW5naWZ5KGdldFBhdGhDb250cmlidXRpbmdNYXRjaGVzKG1hdGNoZXMpLm1hcChtYXRjaCA9PiBtYXRjaC5wYXRobmFtZUJhc2UpKTtcbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4gcmVzb2x2ZVRvKHRvLCBKU09OLnBhcnNlKHJvdXRlUGF0aG5hbWVzSnNvbiksIGxvY2F0aW9uUGF0aG5hbWUsIHJlbGF0aXZlID09PSBcInBhdGhcIiksIFt0bywgcm91dGVQYXRobmFtZXNKc29uLCBsb2NhdGlvblBhdGhuYW1lLCByZWxhdGl2ZV0pO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbGVtZW50IG9mIHRoZSByb3V0ZSB0aGF0IG1hdGNoZWQgdGhlIGN1cnJlbnQgbG9jYXRpb24sIHByZXBhcmVkXG4gKiB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHQgdG8gcmVuZGVyIHRoZSByZW1haW5kZXIgb2YgdGhlIHJvdXRlIHRyZWUuIFJvdXRlXG4gKiBlbGVtZW50cyBpbiB0aGUgdHJlZSBtdXN0IHJlbmRlciBhbiA8T3V0bGV0PiB0byByZW5kZXIgdGhlaXIgY2hpbGQgcm91dGUnc1xuICogZWxlbWVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLXJvdXRlc1xuICovXG5cbmZ1bmN0aW9uIHVzZVJvdXRlcyhyb3V0ZXMsIGxvY2F0aW9uQXJnKSB7XG4gICF1c2VJblJvdXRlckNvbnRleHQoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgLy8gVE9ETzogVGhpcyBlcnJvciBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZXkgc29tZWhvdyBoYXZlIDIgdmVyc2lvbnMgb2YgdGhlXG4gIC8vIHJvdXRlciBsb2FkZWQuIFdlIGNhbiBoZWxwIHRoZW0gdW5kZXJzdGFuZCBob3cgdG8gYXZvaWQgdGhhdC5cbiAgXCJ1c2VSb3V0ZXMoKSBtYXkgYmUgdXNlZCBvbmx5IGluIHRoZSBjb250ZXh0IG9mIGEgPFJvdXRlcj4gY29tcG9uZW50LlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCBkYXRhUm91dGVyU3RhdGVDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChEYXRhUm91dGVyU3RhdGVDb250ZXh0KTtcbiAgbGV0IHtcbiAgICBtYXRjaGVzOiBwYXJlbnRNYXRjaGVzXG4gIH0gPSBSZWFjdC51c2VDb250ZXh0KFJvdXRlQ29udGV4dCk7XG4gIGxldCByb3V0ZU1hdGNoID0gcGFyZW50TWF0Y2hlc1twYXJlbnRNYXRjaGVzLmxlbmd0aCAtIDFdO1xuICBsZXQgcGFyZW50UGFyYW1zID0gcm91dGVNYXRjaCA/IHJvdXRlTWF0Y2gucGFyYW1zIDoge307XG4gIGxldCBwYXJlbnRQYXRobmFtZSA9IHJvdXRlTWF0Y2ggPyByb3V0ZU1hdGNoLnBhdGhuYW1lIDogXCIvXCI7XG4gIGxldCBwYXJlbnRQYXRobmFtZUJhc2UgPSByb3V0ZU1hdGNoID8gcm91dGVNYXRjaC5wYXRobmFtZUJhc2UgOiBcIi9cIjtcbiAgbGV0IHBhcmVudFJvdXRlID0gcm91dGVNYXRjaCAmJiByb3V0ZU1hdGNoLnJvdXRlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAvLyBZb3Ugd29uJ3QgZ2V0IGEgd2FybmluZyBhYm91dCAyIGRpZmZlcmVudCA8Um91dGVzPiB1bmRlciBhIDxSb3V0ZT5cbiAgICAvLyB3aXRob3V0IGEgdHJhaWxpbmcgKiwgYnV0IHRoaXMgaXMgYSBiZXN0LWVmZm9ydCB3YXJuaW5nIGFueXdheSBzaW5jZSB3ZVxuICAgIC8vIGNhbm5vdCBldmVuIGdpdmUgdGhlIHdhcm5pbmcgdW5sZXNzIHRoZXkgbGFuZCBhdCB0aGUgcGFyZW50IHJvdXRlLlxuICAgIC8vXG4gICAgLy8gRXhhbXBsZTpcbiAgICAvL1xuICAgIC8vIDxSb3V0ZXM+XG4gICAgLy8gICB7LyogVGhpcyByb3V0ZSBwYXRoIE1VU1QgZW5kIHdpdGggLyogYmVjYXVzZSBvdGhlcndpc2VcbiAgICAvLyAgICAgICBpdCB3aWxsIG5ldmVyIG1hdGNoIC9ibG9nL3Bvc3QvMTIzICovfVxuICAgIC8vICAgPFJvdXRlIHBhdGg9XCJibG9nXCIgZWxlbWVudD17PEJsb2cgLz59IC8+XG4gICAgLy8gICA8Um91dGUgcGF0aD1cImJsb2cvZmVlZFwiIGVsZW1lbnQ9ezxCbG9nRmVlZCAvPn0gLz5cbiAgICAvLyA8L1JvdXRlcz5cbiAgICAvL1xuICAgIC8vIGZ1bmN0aW9uIEJsb2coKSB7XG4gICAgLy8gICByZXR1cm4gKFxuICAgIC8vICAgICA8Um91dGVzPlxuICAgIC8vICAgICAgIDxSb3V0ZSBwYXRoPVwicG9zdC86aWRcIiBlbGVtZW50PXs8UG9zdCAvPn0gLz5cbiAgICAvLyAgICAgPC9Sb3V0ZXM+XG4gICAgLy8gICApO1xuICAgIC8vIH1cbiAgICBsZXQgcGFyZW50UGF0aCA9IHBhcmVudFJvdXRlICYmIHBhcmVudFJvdXRlLnBhdGggfHwgXCJcIjtcbiAgICB3YXJuaW5nT25jZShwYXJlbnRQYXRobmFtZSwgIXBhcmVudFJvdXRlIHx8IHBhcmVudFBhdGguZW5kc1dpdGgoXCIqXCIpLCBcIllvdSByZW5kZXJlZCBkZXNjZW5kYW50IDxSb3V0ZXM+IChvciBjYWxsZWQgYHVzZVJvdXRlcygpYCkgYXQgXCIgKyAoXCJcXFwiXCIgKyBwYXJlbnRQYXRobmFtZSArIFwiXFxcIiAodW5kZXIgPFJvdXRlIHBhdGg9XFxcIlwiICsgcGFyZW50UGF0aCArIFwiXFxcIj4pIGJ1dCB0aGUgXCIpICsgXCJwYXJlbnQgcm91dGUgcGF0aCBoYXMgbm8gdHJhaWxpbmcgXFxcIipcXFwiLiBUaGlzIG1lYW5zIGlmIHlvdSBuYXZpZ2F0ZSBcIiArIFwiZGVlcGVyLCB0aGUgcGFyZW50IHdvbid0IG1hdGNoIGFueW1vcmUgYW5kIHRoZXJlZm9yZSB0aGUgY2hpbGQgXCIgKyBcInJvdXRlcyB3aWxsIG5ldmVyIHJlbmRlci5cXG5cXG5cIiArIChcIlBsZWFzZSBjaGFuZ2UgdGhlIHBhcmVudCA8Um91dGUgcGF0aD1cXFwiXCIgKyBwYXJlbnRQYXRoICsgXCJcXFwiPiB0byA8Um91dGUgXCIpICsgKFwicGF0aD1cXFwiXCIgKyAocGFyZW50UGF0aCA9PT0gXCIvXCIgPyBcIipcIiA6IHBhcmVudFBhdGggKyBcIi8qXCIpICsgXCJcXFwiPi5cIikpO1xuICB9XG5cbiAgbGV0IGxvY2F0aW9uRnJvbUNvbnRleHQgPSB1c2VMb2NhdGlvbigpO1xuICBsZXQgbG9jYXRpb247XG5cbiAgaWYgKGxvY2F0aW9uQXJnKSB7XG4gICAgdmFyIF9wYXJzZWRMb2NhdGlvbkFyZyRwYTtcblxuICAgIGxldCBwYXJzZWRMb2NhdGlvbkFyZyA9IHR5cGVvZiBsb2NhdGlvbkFyZyA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlUGF0aChsb2NhdGlvbkFyZykgOiBsb2NhdGlvbkFyZztcbiAgICAhKHBhcmVudFBhdGhuYW1lQmFzZSA9PT0gXCIvXCIgfHwgKChfcGFyc2VkTG9jYXRpb25BcmckcGEgPSBwYXJzZWRMb2NhdGlvbkFyZy5wYXRobmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYXJzZWRMb2NhdGlvbkFyZyRwYS5zdGFydHNXaXRoKHBhcmVudFBhdGhuYW1lQmFzZSkpKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJXaGVuIG92ZXJyaWRpbmcgdGhlIGxvY2F0aW9uIHVzaW5nIGA8Um91dGVzIGxvY2F0aW9uPmAgb3IgYHVzZVJvdXRlcyhyb3V0ZXMsIGxvY2F0aW9uKWAsIFwiICsgXCJ0aGUgbG9jYXRpb24gcGF0aG5hbWUgbXVzdCBiZWdpbiB3aXRoIHRoZSBwb3J0aW9uIG9mIHRoZSBVUkwgcGF0aG5hbWUgdGhhdCB3YXMgXCIgKyAoXCJtYXRjaGVkIGJ5IGFsbCBwYXJlbnQgcm91dGVzLiBUaGUgY3VycmVudCBwYXRobmFtZSBiYXNlIGlzIFxcXCJcIiArIHBhcmVudFBhdGhuYW1lQmFzZSArIFwiXFxcIiBcIikgKyAoXCJidXQgcGF0aG5hbWUgXFxcIlwiICsgcGFyc2VkTG9jYXRpb25BcmcucGF0aG5hbWUgKyBcIlxcXCIgd2FzIGdpdmVuIGluIHRoZSBgbG9jYXRpb25gIHByb3AuXCIpKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgbG9jYXRpb24gPSBwYXJzZWRMb2NhdGlvbkFyZztcbiAgfSBlbHNlIHtcbiAgICBsb2NhdGlvbiA9IGxvY2F0aW9uRnJvbUNvbnRleHQ7XG4gIH1cblxuICBsZXQgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZSB8fCBcIi9cIjtcbiAgbGV0IHJlbWFpbmluZ1BhdGhuYW1lID0gcGFyZW50UGF0aG5hbWVCYXNlID09PSBcIi9cIiA/IHBhdGhuYW1lIDogcGF0aG5hbWUuc2xpY2UocGFyZW50UGF0aG5hbWVCYXNlLmxlbmd0aCkgfHwgXCIvXCI7XG4gIGxldCBtYXRjaGVzID0gbWF0Y2hSb3V0ZXMocm91dGVzLCB7XG4gICAgcGF0aG5hbWU6IHJlbWFpbmluZ1BhdGhuYW1lXG4gIH0pO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKHBhcmVudFJvdXRlIHx8IG1hdGNoZXMgIT0gbnVsbCwgXCJObyByb3V0ZXMgbWF0Y2hlZCBsb2NhdGlvbiBcXFwiXCIgKyBsb2NhdGlvbi5wYXRobmFtZSArIGxvY2F0aW9uLnNlYXJjaCArIGxvY2F0aW9uLmhhc2ggKyBcIlxcXCIgXCIpIDogdm9pZCAwO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcobWF0Y2hlcyA9PSBudWxsIHx8IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXS5yb3V0ZS5lbGVtZW50ICE9PSB1bmRlZmluZWQsIFwiTWF0Y2hlZCBsZWFmIHJvdXRlIGF0IGxvY2F0aW9uIFxcXCJcIiArIGxvY2F0aW9uLnBhdGhuYW1lICsgbG9jYXRpb24uc2VhcmNoICsgbG9jYXRpb24uaGFzaCArIFwiXFxcIiBkb2VzIG5vdCBoYXZlIGFuIGVsZW1lbnQuIFwiICsgXCJUaGlzIG1lYW5zIGl0IHdpbGwgcmVuZGVyIGFuIDxPdXRsZXQgLz4gd2l0aCBhIG51bGwgdmFsdWUgYnkgZGVmYXVsdCByZXN1bHRpbmcgaW4gYW4gXFxcImVtcHR5XFxcIiBwYWdlLlwiKSA6IHZvaWQgMDtcbiAgfVxuXG4gIGxldCByZW5kZXJlZE1hdGNoZXMgPSBfcmVuZGVyTWF0Y2hlcyhtYXRjaGVzICYmIG1hdGNoZXMubWFwKG1hdGNoID0+IE9iamVjdC5hc3NpZ24oe30sIG1hdGNoLCB7XG4gICAgcGFyYW1zOiBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRQYXJhbXMsIG1hdGNoLnBhcmFtcyksXG4gICAgcGF0aG5hbWU6IGpvaW5QYXRocyhbcGFyZW50UGF0aG5hbWVCYXNlLCBtYXRjaC5wYXRobmFtZV0pLFxuICAgIHBhdGhuYW1lQmFzZTogbWF0Y2gucGF0aG5hbWVCYXNlID09PSBcIi9cIiA/IHBhcmVudFBhdGhuYW1lQmFzZSA6IGpvaW5QYXRocyhbcGFyZW50UGF0aG5hbWVCYXNlLCBtYXRjaC5wYXRobmFtZUJhc2VdKVxuICB9KSksIHBhcmVudE1hdGNoZXMsIGRhdGFSb3V0ZXJTdGF0ZUNvbnRleHQgfHwgdW5kZWZpbmVkKTsgLy8gV2hlbiBhIHVzZXIgcGFzc2VzIGluIGEgYGxvY2F0aW9uQXJnYCwgdGhlIGFzc29jaWF0ZWQgcm91dGVzIG5lZWQgdG9cbiAgLy8gYmUgd3JhcHBlZCBpbiBhIG5ldyBgTG9jYXRpb25Db250ZXh0LlByb3ZpZGVyYCBpbiBvcmRlciBmb3IgYHVzZUxvY2F0aW9uYFxuICAvLyB0byB1c2UgdGhlIHNjb3BlZCBsb2NhdGlvbiBpbnN0ZWFkIG9mIHRoZSBnbG9iYWwgbG9jYXRpb24uXG5cblxuICBpZiAobG9jYXRpb25BcmcpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTG9jYXRpb25Db250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBsb2NhdGlvbjogX2V4dGVuZHMoe1xuICAgICAgICAgIHBhdGhuYW1lOiBcIi9cIixcbiAgICAgICAgICBzZWFyY2g6IFwiXCIsXG4gICAgICAgICAgaGFzaDogXCJcIixcbiAgICAgICAgICBzdGF0ZTogbnVsbCxcbiAgICAgICAgICBrZXk6IFwiZGVmYXVsdFwiXG4gICAgICAgIH0sIGxvY2F0aW9uKSxcbiAgICAgICAgbmF2aWdhdGlvblR5cGU6IEFjdGlvbi5Qb3BcbiAgICAgIH1cbiAgICB9LCByZW5kZXJlZE1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlcmVkTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gRGVmYXVsdEVycm9yRWxlbWVudCgpIHtcbiAgbGV0IGVycm9yID0gdXNlUm91dGVFcnJvcigpO1xuICBsZXQgbWVzc2FnZSA9IGlzUm91dGVFcnJvclJlc3BvbnNlKGVycm9yKSA/IGVycm9yLnN0YXR1cyArIFwiIFwiICsgZXJyb3Iuc3RhdHVzVGV4dCA6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogSlNPTi5zdHJpbmdpZnkoZXJyb3IpO1xuICBsZXQgc3RhY2sgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgOiBudWxsO1xuICBsZXQgbGlnaHRncmV5ID0gXCJyZ2JhKDIwMCwyMDAsMjAwLCAwLjUpXCI7XG4gIGxldCBwcmVTdHlsZXMgPSB7XG4gICAgcGFkZGluZzogXCIwLjVyZW1cIixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGxpZ2h0Z3JleVxuICB9O1xuICBsZXQgY29kZVN0eWxlcyA9IHtcbiAgICBwYWRkaW5nOiBcIjJweCA0cHhcIixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGxpZ2h0Z3JleVxuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwgbnVsbCwgXCJVbmhhbmRsZWQgVGhyb3duIEVycm9yIVwiKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7XG4gICAgc3R5bGU6IHtcbiAgICAgIGZvbnRTdHlsZTogXCJpdGFsaWNcIlxuICAgIH1cbiAgfSwgbWVzc2FnZSksIHN0YWNrID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwcmVcIiwge1xuICAgIHN0eWxlOiBwcmVTdHlsZXNcbiAgfSwgc3RhY2spIDogbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIG51bGwsIFwiXFx1RDgzRFxcdURDQkYgSGV5IGRldmVsb3BlciBcXHVEODNEXFx1REM0QlwiKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIG51bGwsIFwiWW91IGNhbiBwcm92aWRlIGEgd2F5IGJldHRlciBVWCB0aGFuIHRoaXMgd2hlbiB5b3VyIGFwcCB0aHJvd3MgZXJyb3JzIGJ5IHByb3ZpZGluZyB5b3VyIG93blxceEEwXCIsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY29kZVwiLCB7XG4gICAgc3R5bGU6IGNvZGVTdHlsZXNcbiAgfSwgXCJlcnJvckVsZW1lbnRcIiksIFwiIHByb3BzIG9uXFx4QTBcIiwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjb2RlXCIsIHtcbiAgICBzdHlsZTogY29kZVN0eWxlc1xuICB9LCBcIjxSb3V0ZT5cIikpKTtcbn1cblxuY2xhc3MgUmVuZGVyRXJyb3JCb3VuZGFyeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsb2NhdGlvbjogcHJvcHMubG9jYXRpb24sXG4gICAgICBlcnJvcjogcHJvcHMuZXJyb3JcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogZXJyb3JcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICAvLyBXaGVuIHdlIGdldCBpbnRvIGFuIGVycm9yIHN0YXRlLCB0aGUgdXNlciB3aWxsIGxpa2VseSBjbGljayBcImJhY2tcIiB0byB0aGVcbiAgICAvLyBwcmV2aW91cyBwYWdlIHRoYXQgZGlkbid0IGhhdmUgYW4gZXJyb3IuIEJlY2F1c2UgdGhpcyB3cmFwcyB0aGUgZW50aXJlXG4gICAgLy8gYXBwbGljYXRpb24sIHRoYXQgd2lsbCBoYXZlIG5vIGVmZmVjdC0tdGhlIGVycm9yIHBhZ2UgY29udGludWVzIHRvIGRpc3BsYXkuXG4gICAgLy8gVGhpcyBnaXZlcyB1cyBhIG1lY2hhbmlzbSB0byByZWNvdmVyIGZyb20gdGhlIGVycm9yIHdoZW4gdGhlIGxvY2F0aW9uIGNoYW5nZXMuXG4gICAgLy9cbiAgICAvLyBXaGV0aGVyIHdlJ3JlIGluIGFuIGVycm9yIHN0YXRlIG9yIG5vdCwgd2UgdXBkYXRlIHRoZSBsb2NhdGlvbiBpbiBzdGF0ZVxuICAgIC8vIHNvIHRoYXQgd2hlbiB3ZSBhcmUgaW4gYW4gZXJyb3Igc3RhdGUsIGl0IGdldHMgcmVzZXQgd2hlbiBhIG5ldyBsb2NhdGlvblxuICAgIC8vIGNvbWVzIGluIGFuZCB0aGUgdXNlciByZWNvdmVycyBmcm9tIHRoZSBlcnJvci5cbiAgICBpZiAoc3RhdGUubG9jYXRpb24gIT09IHByb3BzLmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogcHJvcHMuZXJyb3IsXG4gICAgICAgIGxvY2F0aW9uOiBwcm9wcy5sb2NhdGlvblxuICAgICAgfTtcbiAgICB9IC8vIElmIHdlJ3JlIG5vdCBjaGFuZ2luZyBsb2NhdGlvbnMsIHByZXNlcnZlIHRoZSBsb2NhdGlvbiBidXQgc3RpbGwgc3VyZmFjZVxuICAgIC8vIGFueSBuZXcgZXJyb3JzIHRoYXQgbWF5IGNvbWUgdGhyb3VnaC4gV2UgcmV0YWluIHRoZSBleGlzdGluZyBlcnJvciwgd2UgZG9cbiAgICAvLyB0aGlzIGJlY2F1c2UgdGhlIGVycm9yIHByb3ZpZGVkIGZyb20gdGhlIGFwcCBzdGF0ZSBtYXkgYmUgY2xlYXJlZCB3aXRob3V0XG4gICAgLy8gdGhlIGxvY2F0aW9uIGNoYW5naW5nLlxuXG5cbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IHByb3BzLmVycm9yIHx8IHN0YXRlLmVycm9yLFxuICAgICAgbG9jYXRpb246IHN0YXRlLmxvY2F0aW9uXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZENhdGNoKGVycm9yLCBlcnJvckluZm8pIHtcbiAgICBjb25zb2xlLmVycm9yKFwiUmVhY3QgUm91dGVyIGNhdWdodCB0aGUgZm9sbG93aW5nIGVycm9yIGR1cmluZyByZW5kZXJcIiwgZXJyb3IsIGVycm9ySW5mbyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZXJyb3IgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZUVycm9yQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHRoaXMuc3RhdGUuZXJyb3IsXG4gICAgICBjaGlsZHJlbjogdGhpcy5wcm9wcy5jb21wb25lbnRcbiAgICB9KSA6IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gIH1cblxufVxuXG5mdW5jdGlvbiBSZW5kZXJlZFJvdXRlKF9yZWYpIHtcbiAgbGV0IHtcbiAgICByb3V0ZUNvbnRleHQsXG4gICAgbWF0Y2gsXG4gICAgY2hpbGRyZW5cbiAgfSA9IF9yZWY7XG4gIGxldCBkYXRhU3RhdGljUm91dGVyQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoRGF0YVN0YXRpY1JvdXRlckNvbnRleHQpOyAvLyBUcmFjayBob3cgZGVlcCB3ZSBnb3QgaW4gb3VyIHJlbmRlciBwYXNzIHRvIGVtdWxhdGUgU1NSIGNvbXBvbmVudERpZENhdGNoXG4gIC8vIGluIGEgRGF0YVN0YXRpY1JvdXRlclxuXG4gIGlmIChkYXRhU3RhdGljUm91dGVyQ29udGV4dCAmJiBtYXRjaC5yb3V0ZS5lcnJvckVsZW1lbnQpIHtcbiAgICBkYXRhU3RhdGljUm91dGVyQ29udGV4dC5fZGVlcGVzdFJlbmRlcmVkQm91bmRhcnlJZCA9IG1hdGNoLnJvdXRlLmlkO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiByb3V0ZUNvbnRleHRcbiAgfSwgY2hpbGRyZW4pO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyTWF0Y2hlcyhtYXRjaGVzLCBwYXJlbnRNYXRjaGVzLCBkYXRhUm91dGVyU3RhdGUpIHtcbiAgaWYgKHBhcmVudE1hdGNoZXMgPT09IHZvaWQgMCkge1xuICAgIHBhcmVudE1hdGNoZXMgPSBbXTtcbiAgfVxuXG4gIGlmIChtYXRjaGVzID09IG51bGwpIHtcbiAgICBpZiAoZGF0YVJvdXRlclN0YXRlICE9IG51bGwgJiYgZGF0YVJvdXRlclN0YXRlLmVycm9ycykge1xuICAgICAgLy8gRG9uJ3QgYmFpbCBpZiB3ZSBoYXZlIGRhdGEgcm91dGVyIGVycm9ycyBzbyB3ZSBjYW4gcmVuZGVyIHRoZW0gaW4gdGhlXG4gICAgICAvLyBib3VuZGFyeS4gIFVzZSB0aGUgcHJlLW1hdGNoZWQgKG9yIHNoaW1tZWQpIG1hdGNoZXNcbiAgICAgIG1hdGNoZXMgPSBkYXRhUm91dGVyU3RhdGUubWF0Y2hlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlbmRlcmVkTWF0Y2hlcyA9IG1hdGNoZXM7IC8vIElmIHdlIGhhdmUgZGF0YSBlcnJvcnMsIHRyaW0gbWF0Y2hlcyB0byB0aGUgaGlnaGVzdCBlcnJvciBib3VuZGFyeVxuXG4gIGxldCBlcnJvcnMgPSBkYXRhUm91dGVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGFSb3V0ZXJTdGF0ZS5lcnJvcnM7XG5cbiAgaWYgKGVycm9ycyAhPSBudWxsKSB7XG4gICAgbGV0IGVycm9ySW5kZXggPSByZW5kZXJlZE1hdGNoZXMuZmluZEluZGV4KG0gPT4gbS5yb3V0ZS5pZCAmJiAoZXJyb3JzID09IG51bGwgPyB2b2lkIDAgOiBlcnJvcnNbbS5yb3V0ZS5pZF0pKTtcbiAgICAhKGVycm9ySW5kZXggPj0gMCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiQ291bGQgbm90IGZpbmQgYSBtYXRjaGluZyByb3V0ZSBmb3IgdGhlIGN1cnJlbnQgZXJyb3JzOiBcIiArIGVycm9ycykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIHJlbmRlcmVkTWF0Y2hlcyA9IHJlbmRlcmVkTWF0Y2hlcy5zbGljZSgwLCBNYXRoLm1pbihyZW5kZXJlZE1hdGNoZXMubGVuZ3RoLCBlcnJvckluZGV4ICsgMSkpO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlcmVkTWF0Y2hlcy5yZWR1Y2VSaWdodCgob3V0bGV0LCBtYXRjaCwgaW5kZXgpID0+IHtcbiAgICBsZXQgZXJyb3IgPSBtYXRjaC5yb3V0ZS5pZCA/IGVycm9ycyA9PSBudWxsID8gdm9pZCAwIDogZXJyb3JzW21hdGNoLnJvdXRlLmlkXSA6IG51bGw7IC8vIE9ubHkgZGF0YSByb3V0ZXJzIGhhbmRsZSBlcnJvcnNcblxuICAgIGxldCBlcnJvckVsZW1lbnQgPSBkYXRhUm91dGVyU3RhdGUgPyBtYXRjaC5yb3V0ZS5lcnJvckVsZW1lbnQgfHwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGVmYXVsdEVycm9yRWxlbWVudCwgbnVsbCkgOiBudWxsO1xuXG4gICAgbGV0IGdldENoaWxkcmVuID0gKCkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVuZGVyZWRSb3V0ZSwge1xuICAgICAgbWF0Y2g6IG1hdGNoLFxuICAgICAgcm91dGVDb250ZXh0OiB7XG4gICAgICAgIG91dGxldCxcbiAgICAgICAgbWF0Y2hlczogcGFyZW50TWF0Y2hlcy5jb25jYXQocmVuZGVyZWRNYXRjaGVzLnNsaWNlKDAsIGluZGV4ICsgMSkpXG4gICAgICB9XG4gICAgfSwgZXJyb3IgPyBlcnJvckVsZW1lbnQgOiBtYXRjaC5yb3V0ZS5lbGVtZW50ICE9PSB1bmRlZmluZWQgPyBtYXRjaC5yb3V0ZS5lbGVtZW50IDogb3V0bGV0KTsgLy8gT25seSB3cmFwIGluIGFuIGVycm9yIGJvdW5kYXJ5IHdpdGhpbiBkYXRhIHJvdXRlciB1c2FnZXMgd2hlbiB3ZSBoYXZlIGFuXG4gICAgLy8gZXJyb3JFbGVtZW50IG9uIHRoaXMgcm91dGUuICBPdGhlcndpc2UgbGV0IGl0IGJ1YmJsZSB1cCB0byBhbiBhbmNlc3RvclxuICAgIC8vIGVycm9yRWxlbWVudFxuXG5cbiAgICByZXR1cm4gZGF0YVJvdXRlclN0YXRlICYmIChtYXRjaC5yb3V0ZS5lcnJvckVsZW1lbnQgfHwgaW5kZXggPT09IDApID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVuZGVyRXJyb3JCb3VuZGFyeSwge1xuICAgICAgbG9jYXRpb246IGRhdGFSb3V0ZXJTdGF0ZS5sb2NhdGlvbixcbiAgICAgIGNvbXBvbmVudDogZXJyb3JFbGVtZW50LFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgY2hpbGRyZW46IGdldENoaWxkcmVuKClcbiAgICB9KSA6IGdldENoaWxkcmVuKCk7XG4gIH0sIG51bGwpO1xufVxudmFyIERhdGFSb3V0ZXJIb29rO1xuXG4oZnVuY3Rpb24gKERhdGFSb3V0ZXJIb29rKSB7XG4gIERhdGFSb3V0ZXJIb29rW1wiVXNlTG9hZGVyRGF0YVwiXSA9IFwidXNlTG9hZGVyRGF0YVwiO1xuICBEYXRhUm91dGVySG9va1tcIlVzZUFjdGlvbkRhdGFcIl0gPSBcInVzZUFjdGlvbkRhdGFcIjtcbiAgRGF0YVJvdXRlckhvb2tbXCJVc2VSb3V0ZUVycm9yXCJdID0gXCJ1c2VSb3V0ZUVycm9yXCI7XG4gIERhdGFSb3V0ZXJIb29rW1wiVXNlTmF2aWdhdGlvblwiXSA9IFwidXNlTmF2aWdhdGlvblwiO1xuICBEYXRhUm91dGVySG9va1tcIlVzZVJvdXRlTG9hZGVyRGF0YVwiXSA9IFwidXNlUm91dGVMb2FkZXJEYXRhXCI7XG4gIERhdGFSb3V0ZXJIb29rW1wiVXNlTWF0Y2hlc1wiXSA9IFwidXNlTWF0Y2hlc1wiO1xuICBEYXRhUm91dGVySG9va1tcIlVzZVJldmFsaWRhdG9yXCJdID0gXCJ1c2VSZXZhbGlkYXRvclwiO1xufSkoRGF0YVJvdXRlckhvb2sgfHwgKERhdGFSb3V0ZXJIb29rID0ge30pKTtcblxuZnVuY3Rpb24gdXNlRGF0YVJvdXRlclN0YXRlKGhvb2tOYW1lKSB7XG4gIGxldCBzdGF0ZSA9IFJlYWN0LnVzZUNvbnRleHQoRGF0YVJvdXRlclN0YXRlQ29udGV4dCk7XG4gICFzdGF0ZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgaG9va05hbWUgKyBcIiBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRGF0YVJvdXRlclN0YXRlQ29udGV4dFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiBzdGF0ZTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBuYXZpZ2F0aW9uLCBkZWZhdWx0aW5nIHRvIGFuIFwiaWRsZVwiIG5hdmlnYXRpb24gd2hlblxuICogbm8gbmF2aWdhdGlvbiBpcyBpbiBwcm9ncmVzc1xuICovXG5cblxuZnVuY3Rpb24gdXNlTmF2aWdhdGlvbigpIHtcbiAgbGV0IHN0YXRlID0gdXNlRGF0YVJvdXRlclN0YXRlKERhdGFSb3V0ZXJIb29rLlVzZU5hdmlnYXRpb24pO1xuICByZXR1cm4gc3RhdGUubmF2aWdhdGlvbjtcbn1cbi8qKlxuICogUmV0dXJucyBhIHJldmFsaWRhdGUgZnVuY3Rpb24gZm9yIG1hbnVhbGx5IHRyaWdnZXJpbmcgcmV2YWxpZGF0aW9uLCBhcyB3ZWxsXG4gKiBhcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbnkgbWFudWFsIHJldmFsaWRhdGlvbnNcbiAqL1xuXG5mdW5jdGlvbiB1c2VSZXZhbGlkYXRvcigpIHtcbiAgbGV0IGRhdGFSb3V0ZXJDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChEYXRhUm91dGVyQ29udGV4dCk7XG4gICFkYXRhUm91dGVyQ29udGV4dCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VSZXZhbGlkYXRvciBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRGF0YVJvdXRlckNvbnRleHRcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQgc3RhdGUgPSB1c2VEYXRhUm91dGVyU3RhdGUoRGF0YVJvdXRlckhvb2suVXNlUmV2YWxpZGF0b3IpO1xuICByZXR1cm4ge1xuICAgIHJldmFsaWRhdGU6IGRhdGFSb3V0ZXJDb250ZXh0LnJvdXRlci5yZXZhbGlkYXRlLFxuICAgIHN0YXRlOiBzdGF0ZS5yZXZhbGlkYXRpb25cbiAgfTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgYWN0aXZlIHJvdXRlIG1hdGNoZXMsIHVzZWZ1bCBmb3IgYWNjZXNzaW5nIGxvYWRlckRhdGEgZm9yXG4gKiBwYXJlbnQvY2hpbGQgcm91dGVzIG9yIHRoZSByb3V0ZSBcImhhbmRsZVwiIHByb3BlcnR5XG4gKi9cblxuZnVuY3Rpb24gdXNlTWF0Y2hlcygpIHtcbiAgbGV0IHtcbiAgICBtYXRjaGVzLFxuICAgIGxvYWRlckRhdGFcbiAgfSA9IHVzZURhdGFSb3V0ZXJTdGF0ZShEYXRhUm91dGVySG9vay5Vc2VNYXRjaGVzKTtcbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4gbWF0Y2hlcy5tYXAobWF0Y2ggPT4ge1xuICAgIGxldCB7XG4gICAgICBwYXRobmFtZSxcbiAgICAgIHBhcmFtc1xuICAgIH0gPSBtYXRjaDsgLy8gTm90ZTogVGhpcyBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGF0IGNyZWF0ZWQgYnkgY3JlYXRlVXNlTWF0Y2hlc01hdGNoXG4gICAgLy8gaW4gdGhlIEByZW1peC1ydW4vcm91dGVyICwgc28gaWYgeW91IGNoYW5nZSB0aGlzIHBsZWFzZSBhbHNvIGNoYW5nZVxuICAgIC8vIHRoYXQgOikgIEV2ZW50dWFsbHkgd2UnbGwgRFJZIHRoaXMgdXBcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogbWF0Y2gucm91dGUuaWQsXG4gICAgICBwYXRobmFtZSxcbiAgICAgIHBhcmFtcyxcbiAgICAgIGRhdGE6IGxvYWRlckRhdGFbbWF0Y2gucm91dGUuaWRdLFxuICAgICAgaGFuZGxlOiBtYXRjaC5yb3V0ZS5oYW5kbGVcbiAgICB9O1xuICB9KSwgW21hdGNoZXMsIGxvYWRlckRhdGFdKTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbG9hZGVyIGRhdGEgZm9yIHRoZSBuZWFyZXN0IGFuY2VzdG9yIFJvdXRlIGxvYWRlclxuICovXG5cbmZ1bmN0aW9uIHVzZUxvYWRlckRhdGEoKSB7XG4gIGxldCBzdGF0ZSA9IHVzZURhdGFSb3V0ZXJTdGF0ZShEYXRhUm91dGVySG9vay5Vc2VMb2FkZXJEYXRhKTtcbiAgbGV0IHJvdXRlID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUNvbnRleHQpO1xuICAhcm91dGUgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwidXNlTG9hZGVyRGF0YSBtdXN0IGJlIHVzZWQgaW5zaWRlIGEgUm91dGVDb250ZXh0XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IHRoaXNSb3V0ZSA9IHJvdXRlLm1hdGNoZXNbcm91dGUubWF0Y2hlcy5sZW5ndGggLSAxXTtcbiAgIXRoaXNSb3V0ZS5yb3V0ZS5pZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VMb2FkZXJEYXRhIGNhbiBvbmx5IGJlIHVzZWQgb24gcm91dGVzIHRoYXQgY29udGFpbiBhIHVuaXF1ZSBcXFwiaWRcXFwiXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgcmV0dXJuIHN0YXRlLmxvYWRlckRhdGFbdGhpc1JvdXRlLnJvdXRlLmlkXTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbG9hZGVyRGF0YSBmb3IgdGhlIGdpdmVuIHJvdXRlSWRcbiAqL1xuXG5mdW5jdGlvbiB1c2VSb3V0ZUxvYWRlckRhdGEocm91dGVJZCkge1xuICBsZXQgc3RhdGUgPSB1c2VEYXRhUm91dGVyU3RhdGUoRGF0YVJvdXRlckhvb2suVXNlUm91dGVMb2FkZXJEYXRhKTtcbiAgcmV0dXJuIHN0YXRlLmxvYWRlckRhdGFbcm91dGVJZF07XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGFjdGlvbiBkYXRhIGZvciB0aGUgbmVhcmVzdCBhbmNlc3RvciBSb3V0ZSBhY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiB1c2VBY3Rpb25EYXRhKCkge1xuICBsZXQgc3RhdGUgPSB1c2VEYXRhUm91dGVyU3RhdGUoRGF0YVJvdXRlckhvb2suVXNlQWN0aW9uRGF0YSk7XG4gIGxldCByb3V0ZSA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVDb250ZXh0KTtcbiAgIXJvdXRlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZUFjdGlvbkRhdGEgbXVzdCBiZSB1c2VkIGluc2lkZSBhIFJvdXRlQ29udGV4dFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKChzdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogc3RhdGUuYWN0aW9uRGF0YSkgfHwge30pWzBdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuZWFyZXN0IGFuY2VzdG9yIFJvdXRlIGVycm9yLCB3aGljaCBjb3VsZCBiZSBhIGxvYWRlci9hY3Rpb25cbiAqIGVycm9yIG9yIGEgcmVuZGVyIGVycm9yLiAgVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSB5b3VyXG4gKiBlcnJvckVsZW1lbnQgdG8gZGlzcGxheSBhIHByb3BlciBlcnJvciBtZXNzYWdlLlxuICovXG5cbmZ1bmN0aW9uIHVzZVJvdXRlRXJyb3IoKSB7XG4gIHZhciBfc3RhdGUkZXJyb3JzO1xuXG4gIGxldCBlcnJvciA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVFcnJvckNvbnRleHQpO1xuICBsZXQgc3RhdGUgPSB1c2VEYXRhUm91dGVyU3RhdGUoRGF0YVJvdXRlckhvb2suVXNlUm91dGVFcnJvcik7XG4gIGxldCByb3V0ZSA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVDb250ZXh0KTtcbiAgbGV0IHRoaXNSb3V0ZSA9IHJvdXRlLm1hdGNoZXNbcm91dGUubWF0Y2hlcy5sZW5ndGggLSAxXTsgLy8gSWYgdGhpcyB3YXMgYSByZW5kZXIgZXJyb3IsIHdlIHB1dCBpdCBpbiBhIFJvdXRlRXJyb3IgY29udGV4dCBpbnNpZGVcbiAgLy8gb2YgUmVuZGVyRXJyb3JCb3VuZGFyeVxuXG4gIGlmIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvcjtcbiAgfVxuXG4gICFyb3V0ZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VSb3V0ZUVycm9yIG11c3QgYmUgdXNlZCBpbnNpZGUgYSBSb3V0ZUNvbnRleHRcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAhdGhpc1JvdXRlLnJvdXRlLmlkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZVJvdXRlRXJyb3IgY2FuIG9ubHkgYmUgdXNlZCBvbiByb3V0ZXMgdGhhdCBjb250YWluIGEgdW5pcXVlIFxcXCJpZFxcXCJcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwOyAvLyBPdGhlcndpc2UgbG9vayBmb3IgZXJyb3JzIGZyb20gb3VyIGRhdGEgcm91dGVyIHN0YXRlXG5cbiAgcmV0dXJuIChfc3RhdGUkZXJyb3JzID0gc3RhdGUuZXJyb3JzKSA9PSBudWxsID8gdm9pZCAwIDogX3N0YXRlJGVycm9yc1t0aGlzUm91dGUucm91dGUuaWRdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBoYXBweS1wYXRoIGRhdGEgZnJvbSB0aGUgbmVhcmVzdCBhbmNlc3RvciA8QXdhaXQgLz4gdmFsdWVcbiAqL1xuXG5mdW5jdGlvbiB1c2VBc3luY1ZhbHVlKCkge1xuICBsZXQgdmFsdWUgPSBSZWFjdC51c2VDb250ZXh0KEF3YWl0Q29udGV4dCk7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuX2RhdGE7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGVycm9yIGZyb20gdGhlIG5lYXJlc3QgYW5jZXN0b3IgPEF3YWl0IC8+IHZhbHVlXG4gKi9cblxuZnVuY3Rpb24gdXNlQXN5bmNFcnJvcigpIHtcbiAgbGV0IHZhbHVlID0gUmVhY3QudXNlQ29udGV4dChBd2FpdENvbnRleHQpO1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlLl9lcnJvcjtcbn1cbmNvbnN0IGFscmVhZHlXYXJuZWQgPSB7fTtcblxuZnVuY3Rpb24gd2FybmluZ09uY2Uoa2V5LCBjb25kLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZCAmJiAhYWxyZWFkeVdhcm5lZFtrZXldKSB7XG4gICAgYWxyZWFkeVdhcm5lZFtrZXldID0gdHJ1ZTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKGZhbHNlLCBtZXNzYWdlKSA6IHZvaWQgMDtcbiAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGEgUmVtaXggUm91dGVyIGluc3RhbmNlLCByZW5kZXIgdGhlIGFwcHJvcHJpYXRlIFVJXG4gKi9cbmZ1bmN0aW9uIFJvdXRlclByb3ZpZGVyKF9yZWYpIHtcbiAgbGV0IHtcbiAgICBmYWxsYmFja0VsZW1lbnQsXG4gICAgcm91dGVyXG4gIH0gPSBfcmVmO1xuICAvLyBTeW5jIHJvdXRlciBzdGF0ZSB0byBvdXIgY29tcG9uZW50IHN0YXRlIHRvIGZvcmNlIHJlLXJlbmRlcnNcbiAgbGV0IHN0YXRlID0gdXNlU3luY0V4dGVybmFsU3RvcmUocm91dGVyLnN1YnNjcmliZSwgKCkgPT4gcm91dGVyLnN0YXRlLCAvLyBXZSBoYXZlIHRvIHByb3ZpZGUgdGhpcyBzbyBSZWFjdEAxOCBkb2Vzbid0IGNvbXBsYWluIGR1cmluZyBoeWRyYXRpb24sXG4gIC8vIGJ1dCB3ZSBwYXNzIG91ciBzZXJpYWxpemVkIGh5ZHJhdGlvbiBkYXRhIGludG8gdGhlIHJvdXRlciBzbyBzdGF0ZSBoZXJlXG4gIC8vIGlzIGFscmVhZHkgc3luY2VkIHdpdGggd2hhdCB0aGUgc2VydmVyIHNhd1xuICAoKSA9PiByb3V0ZXIuc3RhdGUpO1xuICBsZXQgbmF2aWdhdG9yID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZUhyZWY6IHJvdXRlci5jcmVhdGVIcmVmLFxuICAgICAgZ286IG4gPT4gcm91dGVyLm5hdmlnYXRlKG4pLFxuICAgICAgcHVzaDogKHRvLCBzdGF0ZSwgb3B0cykgPT4gcm91dGVyLm5hdmlnYXRlKHRvLCB7XG4gICAgICAgIHN0YXRlLFxuICAgICAgICBwcmV2ZW50U2Nyb2xsUmVzZXQ6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMucHJldmVudFNjcm9sbFJlc2V0XG4gICAgICB9KSxcbiAgICAgIHJlcGxhY2U6ICh0bywgc3RhdGUsIG9wdHMpID0+IHJvdXRlci5uYXZpZ2F0ZSh0bywge1xuICAgICAgICByZXBsYWNlOiB0cnVlLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgcHJldmVudFNjcm9sbFJlc2V0OiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLnByZXZlbnRTY3JvbGxSZXNldFxuICAgICAgfSlcbiAgICB9O1xuICB9LCBbcm91dGVyXSk7XG4gIGxldCBiYXNlbmFtZSA9IHJvdXRlci5iYXNlbmFtZSB8fCBcIi9cIjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERhdGFSb3V0ZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHJvdXRlcixcbiAgICAgIG5hdmlnYXRvcixcbiAgICAgIHN0YXRpYzogZmFsc2UsXG4gICAgICAvLyBEbyB3ZSBuZWVkIHRoaXM/XG4gICAgICBiYXNlbmFtZVxuICAgIH1cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0YVJvdXRlclN0YXRlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBzdGF0ZVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXIsIHtcbiAgICBiYXNlbmFtZTogcm91dGVyLmJhc2VuYW1lLFxuICAgIGxvY2F0aW9uOiByb3V0ZXIuc3RhdGUubG9jYXRpb24sXG4gICAgbmF2aWdhdGlvblR5cGU6IHJvdXRlci5zdGF0ZS5oaXN0b3J5QWN0aW9uLFxuICAgIG5hdmlnYXRvcjogbmF2aWdhdG9yXG4gIH0sIHJvdXRlci5zdGF0ZS5pbml0aWFsaXplZCA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlcywgbnVsbCkgOiBmYWxsYmFja0VsZW1lbnQpKSk7XG59XG5cbi8qKlxuICogQSA8Um91dGVyPiB0aGF0IHN0b3JlcyBhbGwgZW50cmllcyBpbiBtZW1vcnkuXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L3JvdXRlcnMvbWVtb3J5LXJvdXRlclxuICovXG5mdW5jdGlvbiBNZW1vcnlSb3V0ZXIoX3JlZjIpIHtcbiAgbGV0IHtcbiAgICBiYXNlbmFtZSxcbiAgICBjaGlsZHJlbixcbiAgICBpbml0aWFsRW50cmllcyxcbiAgICBpbml0aWFsSW5kZXhcbiAgfSA9IF9yZWYyO1xuICBsZXQgaGlzdG9yeVJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIGlmIChoaXN0b3J5UmVmLmN1cnJlbnQgPT0gbnVsbCkge1xuICAgIGhpc3RvcnlSZWYuY3VycmVudCA9IGNyZWF0ZU1lbW9yeUhpc3Rvcnkoe1xuICAgICAgaW5pdGlhbEVudHJpZXMsXG4gICAgICBpbml0aWFsSW5kZXgsXG4gICAgICB2NUNvbXBhdDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgbGV0IGhpc3RvcnkgPSBoaXN0b3J5UmVmLmN1cnJlbnQ7XG4gIGxldCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBhY3Rpb246IGhpc3RvcnkuYWN0aW9uLFxuICAgIGxvY2F0aW9uOiBoaXN0b3J5LmxvY2F0aW9uXG4gIH0pO1xuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4gaGlzdG9yeS5saXN0ZW4oc2V0U3RhdGUpLCBbaGlzdG9yeV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyLCB7XG4gICAgYmFzZW5hbWU6IGJhc2VuYW1lLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBsb2NhdGlvbjogc3RhdGUubG9jYXRpb24sXG4gICAgbmF2aWdhdGlvblR5cGU6IHN0YXRlLmFjdGlvbixcbiAgICBuYXZpZ2F0b3I6IGhpc3RvcnlcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCBsb2NhdGlvbi5cbiAqXG4gKiBOb3RlOiBUaGlzIEFQSSBpcyBtb3N0bHkgdXNlZnVsIGluIFJlYWN0LkNvbXBvbmVudCBzdWJjbGFzc2VzIHRoYXQgYXJlIG5vdFxuICogYWJsZSB0byB1c2UgaG9va3MuIEluIGZ1bmN0aW9uYWwgY29tcG9uZW50cywgd2UgcmVjb21tZW5kIHlvdSB1c2UgdGhlXG4gKiBgdXNlTmF2aWdhdGVgIGhvb2sgaW5zdGVhZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvY29tcG9uZW50cy9uYXZpZ2F0ZVxuICovXG5mdW5jdGlvbiBOYXZpZ2F0ZShfcmVmMykge1xuICBsZXQge1xuICAgIHRvLFxuICAgIHJlcGxhY2UsXG4gICAgc3RhdGUsXG4gICAgcmVsYXRpdmVcbiAgfSA9IF9yZWYzO1xuICAhdXNlSW5Sb3V0ZXJDb250ZXh0KCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIC8vIFRPRE86IFRoaXMgZXJyb3IgaXMgcHJvYmFibHkgYmVjYXVzZSB0aGV5IHNvbWVob3cgaGF2ZSAyIHZlcnNpb25zIG9mXG4gIC8vIHRoZSByb3V0ZXIgbG9hZGVkLiBXZSBjYW4gaGVscCB0aGVtIHVuZGVyc3RhbmQgaG93IHRvIGF2b2lkIHRoYXQuXG4gIFwiPE5hdmlnYXRlPiBtYXkgYmUgdXNlZCBvbmx5IGluIHRoZSBjb250ZXh0IG9mIGEgPFJvdXRlcj4gY29tcG9uZW50LlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoIVJlYWN0LnVzZUNvbnRleHQoTmF2aWdhdGlvbkNvbnRleHQpLnN0YXRpYywgXCI8TmF2aWdhdGU+IG11c3Qgbm90IGJlIHVzZWQgb24gdGhlIGluaXRpYWwgcmVuZGVyIGluIGEgPFN0YXRpY1JvdXRlcj4uIFwiICsgXCJUaGlzIGlzIGEgbm8tb3AsIGJ1dCB5b3Ugc2hvdWxkIG1vZGlmeSB5b3VyIGNvZGUgc28gdGhlIDxOYXZpZ2F0ZT4gaXMgXCIgKyBcIm9ubHkgZXZlciByZW5kZXJlZCBpbiByZXNwb25zZSB0byBzb21lIHVzZXIgaW50ZXJhY3Rpb24gb3Igc3RhdGUgY2hhbmdlLlwiKSA6IHZvaWQgMDtcbiAgbGV0IGRhdGFSb3V0ZXJTdGF0ZSA9IFJlYWN0LnVzZUNvbnRleHQoRGF0YVJvdXRlclN0YXRlQ29udGV4dCk7XG4gIGxldCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gQXZvaWQga2lja2luZyBvZmYgbXVsdGlwbGUgbmF2aWdhdGlvbnMgaWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhXG4gICAgLy8gZGF0YS1yb3V0ZXIgbmF2aWdhdGlvbiwgc2luY2UgY29tcG9uZW50cyBnZXQgcmUtcmVuZGVyZWQgd2hlbiB3ZSBlbnRlclxuICAgIC8vIGEgc3VibWl0dGluZy9sb2FkaW5nIHN0YXRlXG4gICAgaWYgKGRhdGFSb3V0ZXJTdGF0ZSAmJiBkYXRhUm91dGVyU3RhdGUubmF2aWdhdGlvbi5zdGF0ZSAhPT0gXCJpZGxlXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZSh0bywge1xuICAgICAgcmVwbGFjZSxcbiAgICAgIHN0YXRlLFxuICAgICAgcmVsYXRpdmVcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNoaWxkIHJvdXRlJ3MgZWxlbWVudCwgaWYgdGhlcmUgaXMgb25lLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9jb21wb25lbnRzL291dGxldFxuICovXG5mdW5jdGlvbiBPdXRsZXQocHJvcHMpIHtcbiAgcmV0dXJuIHVzZU91dGxldChwcm9wcy5jb250ZXh0KTtcbn1cblxuLyoqXG4gKiBEZWNsYXJlcyBhbiBlbGVtZW50IHRoYXQgc2hvdWxkIGJlIHJlbmRlcmVkIGF0IGEgY2VydGFpbiBVUkwgcGF0aC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvY29tcG9uZW50cy9yb3V0ZVxuICovXG5mdW5jdGlvbiBSb3V0ZShfcHJvcHMpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIkEgPFJvdXRlPiBpcyBvbmx5IGV2ZXIgdG8gYmUgdXNlZCBhcyB0aGUgY2hpbGQgb2YgPFJvdXRlcz4gZWxlbWVudCwgXCIgKyBcIm5ldmVyIHJlbmRlcmVkIGRpcmVjdGx5LiBQbGVhc2Ugd3JhcCB5b3VyIDxSb3V0ZT4gaW4gYSA8Um91dGVzPi5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBsb2NhdGlvbiBjb250ZXh0IGZvciB0aGUgcmVzdCBvZiB0aGUgYXBwLlxuICpcbiAqIE5vdGU6IFlvdSB1c3VhbGx5IHdvbid0IHJlbmRlciBhIDxSb3V0ZXI+IGRpcmVjdGx5LiBJbnN0ZWFkLCB5b3UnbGwgcmVuZGVyIGFcbiAqIHJvdXRlciB0aGF0IGlzIG1vcmUgc3BlY2lmaWMgdG8geW91ciBlbnZpcm9ubWVudCBzdWNoIGFzIGEgPEJyb3dzZXJSb3V0ZXI+XG4gKiBpbiB3ZWIgYnJvd3NlcnMgb3IgYSA8U3RhdGljUm91dGVyPiBmb3Igc2VydmVyIHJlbmRlcmluZy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvcm91dGVycy9yb3V0ZXJcbiAqL1xuZnVuY3Rpb24gUm91dGVyKF9yZWY0KSB7XG4gIGxldCB7XG4gICAgYmFzZW5hbWU6IGJhc2VuYW1lUHJvcCA9IFwiL1wiLFxuICAgIGNoaWxkcmVuID0gbnVsbCxcbiAgICBsb2NhdGlvbjogbG9jYXRpb25Qcm9wLFxuICAgIG5hdmlnYXRpb25UeXBlID0gQWN0aW9uLlBvcCxcbiAgICBuYXZpZ2F0b3IsXG4gICAgc3RhdGljOiBzdGF0aWNQcm9wID0gZmFsc2VcbiAgfSA9IF9yZWY0O1xuICAhIXVzZUluUm91dGVyQ29udGV4dCgpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIllvdSBjYW5ub3QgcmVuZGVyIGEgPFJvdXRlcj4gaW5zaWRlIGFub3RoZXIgPFJvdXRlcj4uXCIgKyBcIiBZb3Ugc2hvdWxkIG5ldmVyIGhhdmUgbW9yZSB0aGFuIG9uZSBpbiB5b3VyIGFwcC5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwOyAvLyBQcmVzZXJ2ZSB0cmFpbGluZyBzbGFzaGVzIG9uIGJhc2VuYW1lLCBzbyB3ZSBjYW4gbGV0IHRoZSB1c2VyIGNvbnRyb2xcbiAgLy8gdGhlIGVuZm9yY2VtZW50IG9mIHRyYWlsaW5nIHNsYXNoZXMgdGhyb3VnaG91dCB0aGUgYXBwXG5cbiAgbGV0IGJhc2VuYW1lID0gYmFzZW5hbWVQcm9wLnJlcGxhY2UoL15cXC8qLywgXCIvXCIpO1xuICBsZXQgbmF2aWdhdGlvbkNvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgYmFzZW5hbWUsXG4gICAgbmF2aWdhdG9yLFxuICAgIHN0YXRpYzogc3RhdGljUHJvcFxuICB9KSwgW2Jhc2VuYW1lLCBuYXZpZ2F0b3IsIHN0YXRpY1Byb3BdKTtcblxuICBpZiAodHlwZW9mIGxvY2F0aW9uUHJvcCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGxvY2F0aW9uUHJvcCA9IHBhcnNlUGF0aChsb2NhdGlvblByb3ApO1xuICB9XG5cbiAgbGV0IHtcbiAgICBwYXRobmFtZSA9IFwiL1wiLFxuICAgIHNlYXJjaCA9IFwiXCIsXG4gICAgaGFzaCA9IFwiXCIsXG4gICAgc3RhdGUgPSBudWxsLFxuICAgIGtleSA9IFwiZGVmYXVsdFwiXG4gIH0gPSBsb2NhdGlvblByb3A7XG4gIGxldCBsb2NhdGlvbiA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCB0cmFpbGluZ1BhdGhuYW1lID0gc3RyaXBCYXNlbmFtZShwYXRobmFtZSwgYmFzZW5hbWUpO1xuXG4gICAgaWYgKHRyYWlsaW5nUGF0aG5hbWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhuYW1lOiB0cmFpbGluZ1BhdGhuYW1lLFxuICAgICAgc2VhcmNoLFxuICAgICAgaGFzaCxcbiAgICAgIHN0YXRlLFxuICAgICAga2V5XG4gICAgfTtcbiAgfSwgW2Jhc2VuYW1lLCBwYXRobmFtZSwgc2VhcmNoLCBoYXNoLCBzdGF0ZSwga2V5XSk7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcobG9jYXRpb24gIT0gbnVsbCwgXCI8Um91dGVyIGJhc2VuYW1lPVxcXCJcIiArIGJhc2VuYW1lICsgXCJcXFwiPiBpcyBub3QgYWJsZSB0byBtYXRjaCB0aGUgVVJMIFwiICsgKFwiXFxcIlwiICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoICsgXCJcXFwiIGJlY2F1c2UgaXQgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgXCIpICsgXCJiYXNlbmFtZSwgc28gdGhlIDxSb3V0ZXI+IHdvbid0IHJlbmRlciBhbnl0aGluZy5cIikgOiB2b2lkIDA7XG5cbiAgaWYgKGxvY2F0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOYXZpZ2F0aW9uQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBuYXZpZ2F0aW9uQ29udGV4dFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2NhdGlvbkNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgdmFsdWU6IHtcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbmF2aWdhdGlvblR5cGVcbiAgICB9XG4gIH0pKTtcbn1cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3IgYSBuZXN0ZWQgdHJlZSBvZiA8Um91dGU+IGVsZW1lbnRzIHRoYXQgcmVuZGVycyB0aGUgYnJhbmNoXG4gKiB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgY3VycmVudCBsb2NhdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvY29tcG9uZW50cy9yb3V0ZXNcbiAqL1xuZnVuY3Rpb24gUm91dGVzKF9yZWY1KSB7XG4gIGxldCB7XG4gICAgY2hpbGRyZW4sXG4gICAgbG9jYXRpb25cbiAgfSA9IF9yZWY1O1xuICBsZXQgZGF0YVJvdXRlckNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KERhdGFSb3V0ZXJDb250ZXh0KTsgLy8gV2hlbiBpbiBhIERhdGFSb3V0ZXJDb250ZXh0IF93aXRob3V0XyBjaGlsZHJlbiwgd2UgdXNlIHRoZSByb3V0ZXIgcm91dGVzXG4gIC8vIGRpcmVjdGx5LiAgSWYgd2UgaGF2ZSBjaGlsZHJlbiwgdGhlbiB3ZSdyZSBpbiBhIGRlc2NlbmRhbnQgdHJlZSBhbmQgd2VcbiAgLy8gbmVlZCB0byB1c2UgY2hpbGQgcm91dGVzLlxuXG4gIGxldCByb3V0ZXMgPSBkYXRhUm91dGVyQ29udGV4dCAmJiAhY2hpbGRyZW4gPyBkYXRhUm91dGVyQ29udGV4dC5yb3V0ZXIucm91dGVzIDogY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgcmV0dXJuIHVzZVJvdXRlcyhyb3V0ZXMsIGxvY2F0aW9uKTtcbn1cblxuLyoqXG4gKiBDb21wb25lbnQgdG8gdXNlIGZvciByZW5kZXJpbmcgbGF6aWx5IGxvYWRlZCBkYXRhIGZyb20gcmV0dXJuaW5nIGRlZmVyKClcbiAqIGluIGEgbG9hZGVyIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIEF3YWl0KF9yZWY2KSB7XG4gIGxldCB7XG4gICAgY2hpbGRyZW4sXG4gICAgZXJyb3JFbGVtZW50LFxuICAgIHJlc29sdmVcbiAgfSA9IF9yZWY2O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQXdhaXRFcnJvckJvdW5kYXJ5LCB7XG4gICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICBlcnJvckVsZW1lbnQ6IGVycm9yRWxlbWVudFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZXNvbHZlQXdhaXQsIG51bGwsIGNoaWxkcmVuKSk7XG59XG52YXIgQXdhaXRSZW5kZXJTdGF0dXM7XG5cbihmdW5jdGlvbiAoQXdhaXRSZW5kZXJTdGF0dXMpIHtcbiAgQXdhaXRSZW5kZXJTdGF0dXNbQXdhaXRSZW5kZXJTdGF0dXNbXCJwZW5kaW5nXCJdID0gMF0gPSBcInBlbmRpbmdcIjtcbiAgQXdhaXRSZW5kZXJTdGF0dXNbQXdhaXRSZW5kZXJTdGF0dXNbXCJzdWNjZXNzXCJdID0gMV0gPSBcInN1Y2Nlc3NcIjtcbiAgQXdhaXRSZW5kZXJTdGF0dXNbQXdhaXRSZW5kZXJTdGF0dXNbXCJlcnJvclwiXSA9IDJdID0gXCJlcnJvclwiO1xufSkoQXdhaXRSZW5kZXJTdGF0dXMgfHwgKEF3YWl0UmVuZGVyU3RhdHVzID0ge30pKTtcblxuY29uc3QgbmV2ZXJTZXR0bGVkUHJvbWlzZSA9IG5ldyBQcm9taXNlKCgpID0+IHt9KTtcblxuY2xhc3MgQXdhaXRFcnJvckJvdW5kYXJ5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3JcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGVycm9ySW5mbykge1xuICAgIGNvbnNvbGUuZXJyb3IoXCI8QXdhaXQ+IGNhdWdodCB0aGUgZm9sbG93aW5nIGVycm9yIGR1cmluZyByZW5kZXJcIiwgZXJyb3IsIGVycm9ySW5mbyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgbGV0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZXJyb3JFbGVtZW50LFxuICAgICAgcmVzb2x2ZVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCBwcm9taXNlID0gbnVsbDtcbiAgICBsZXQgc3RhdHVzID0gQXdhaXRSZW5kZXJTdGF0dXMucGVuZGluZztcblxuICAgIGlmICghKHJlc29sdmUgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgLy8gRGlkbid0IGdldCBhIHByb21pc2UgLSBwcm92aWRlIGFzIGEgcmVzb2x2ZWQgcHJvbWlzZVxuICAgICAgc3RhdHVzID0gQXdhaXRSZW5kZXJTdGF0dXMuc3VjY2VzcztcbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl90cmFja2VkXCIsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB0cnVlXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl9kYXRhXCIsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUuZXJyb3IpIHtcbiAgICAgIC8vIENhdWdodCBhIHJlbmRlciBlcnJvciwgcHJvdmlkZSBpdCBhcyBhIHJlamVjdGVkIHByb21pc2VcbiAgICAgIHN0YXR1cyA9IEF3YWl0UmVuZGVyU3RhdHVzLmVycm9yO1xuICAgICAgbGV0IHJlbmRlckVycm9yID0gdGhpcy5zdGF0ZS5lcnJvcjtcbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlamVjdCgpLmNhdGNoKCgpID0+IHt9KTsgLy8gQXZvaWQgdW5oYW5kbGVkIHJlamVjdGlvbiB3YXJuaW5nc1xuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgXCJfdHJhY2tlZFwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gdHJ1ZVxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgXCJfZXJyb3JcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IHJlbmRlckVycm9yXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHJlc29sdmUuX3RyYWNrZWQpIHtcbiAgICAgIC8vIEFscmVhZHkgdHJhY2tlZCBwcm9taXNlIC0gY2hlY2sgY29udGVudHNcbiAgICAgIHByb21pc2UgPSByZXNvbHZlO1xuICAgICAgc3RhdHVzID0gcHJvbWlzZS5fZXJyb3IgIT09IHVuZGVmaW5lZCA/IEF3YWl0UmVuZGVyU3RhdHVzLmVycm9yIDogcHJvbWlzZS5fZGF0YSAhPT0gdW5kZWZpbmVkID8gQXdhaXRSZW5kZXJTdGF0dXMuc3VjY2VzcyA6IEF3YWl0UmVuZGVyU3RhdHVzLnBlbmRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJhdyAodW50cmFja2VkKSBwcm9taXNlIC0gdHJhY2sgaXRcbiAgICAgIHN0YXR1cyA9IEF3YWl0UmVuZGVyU3RhdHVzLnBlbmRpbmc7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzb2x2ZSwgXCJfdHJhY2tlZFwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gdHJ1ZVxuICAgICAgfSk7XG4gICAgICBwcm9taXNlID0gcmVzb2x2ZS50aGVuKGRhdGEgPT4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc29sdmUsIFwiX2RhdGFcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IGRhdGFcbiAgICAgIH0pLCBlcnJvciA9PiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzb2x2ZSwgXCJfZXJyb3JcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IGVycm9yXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gQXdhaXRSZW5kZXJTdGF0dXMuZXJyb3IgJiYgcHJvbWlzZS5fZXJyb3IgaW5zdGFuY2VvZiBBYm9ydGVkRGVmZXJyZWRFcnJvcikge1xuICAgICAgLy8gRnJlZXplIHRoZSBVSSBieSB0aHJvd2luZyBhIG5ldmVyIHJlc29sdmVkIHByb21pc2VcbiAgICAgIHRocm93IG5ldmVyU2V0dGxlZFByb21pc2U7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gQXdhaXRSZW5kZXJTdGF0dXMuZXJyb3IgJiYgIWVycm9yRWxlbWVudCkge1xuICAgICAgLy8gTm8gZXJyb3JFbGVtZW50LCB0aHJvdyB0byB0aGUgbmVhcmVzdCByb3V0ZS1sZXZlbCBlcnJvciBib3VuZGFyeVxuICAgICAgdGhyb3cgcHJvbWlzZS5fZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gQXdhaXRSZW5kZXJTdGF0dXMuZXJyb3IpIHtcbiAgICAgIC8vIFJlbmRlciB2aWEgb3VyIGVycm9yRWxlbWVudFxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEF3YWl0Q29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogcHJvbWlzZSxcbiAgICAgICAgY2hpbGRyZW46IGVycm9yRWxlbWVudFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gQXdhaXRSZW5kZXJTdGF0dXMuc3VjY2Vzcykge1xuICAgICAgLy8gUmVuZGVyIGNoaWxkcmVuIHdpdGggcmVzb2x2ZWQgdmFsdWVcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBd2FpdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IHByb21pc2UsXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgfSk7XG4gICAgfSAvLyBUaHJvdyB0byB0aGUgc3VzcGVuc2UgYm91bmRhcnlcblxuXG4gICAgdGhyb3cgcHJvbWlzZTtcbiAgfVxuXG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBJbmRpcmVjdGlvbiB0byBsZXZlcmFnZSB1c2VBc3luY1ZhbHVlIGZvciBhIHJlbmRlci1wcm9wIEFQSSBvbiA8QXdhaXQ+XG4gKi9cblxuXG5mdW5jdGlvbiBSZXNvbHZlQXdhaXQoX3JlZjcpIHtcbiAgbGV0IHtcbiAgICBjaGlsZHJlblxuICB9ID0gX3JlZjc7XG4gIGxldCBkYXRhID0gdXNlQXN5bmNWYWx1ZSgpO1xuXG4gIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBjaGlsZHJlbihkYXRhKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pO1xufSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBVVElMU1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIENyZWF0ZXMgYSByb3V0ZSBjb25maWcgZnJvbSBhIFJlYWN0IFwiY2hpbGRyZW5cIiBvYmplY3QsIHdoaWNoIGlzIHVzdWFsbHlcbiAqIGVpdGhlciBhIGA8Um91dGU+YCBlbGVtZW50IG9yIGFuIGFycmF5IG9mIHRoZW0uIFVzZWQgaW50ZXJuYWxseSBieVxuICogYDxSb3V0ZXM+YCB0byBjcmVhdGUgYSByb3V0ZSBjb25maWcgZnJvbSBpdHMgY2hpbGRyZW4uXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L3V0aWxzL2NyZWF0ZS1yb3V0ZXMtZnJvbS1jaGlsZHJlblxuICovXG5cblxuZnVuY3Rpb24gY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuKGNoaWxkcmVuLCBwYXJlbnRQYXRoKSB7XG4gIGlmIChwYXJlbnRQYXRoID09PSB2b2lkIDApIHtcbiAgICBwYXJlbnRQYXRoID0gW107XG4gIH1cblxuICBsZXQgcm91dGVzID0gW107XG4gIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgLy8gSWdub3JlIG5vbi1lbGVtZW50cy4gVGhpcyBhbGxvd3MgcGVvcGxlIHRvIG1vcmUgZWFzaWx5IGlubGluZVxuICAgICAgLy8gY29uZGl0aW9uYWxzIGluIHRoZWlyIHJvdXRlIGNvbmZpZy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBSZWFjdC5GcmFnbWVudCkge1xuICAgICAgLy8gVHJhbnNwYXJlbnRseSBzdXBwb3J0IFJlYWN0LkZyYWdtZW50IGFuZCBpdHMgY2hpbGRyZW4uXG4gICAgICByb3V0ZXMucHVzaC5hcHBseShyb3V0ZXMsIGNyZWF0ZVJvdXRlc0Zyb21DaGlsZHJlbihlbGVtZW50LnByb3BzLmNoaWxkcmVuLCBwYXJlbnRQYXRoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIShlbGVtZW50LnR5cGUgPT09IFJvdXRlKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJbXCIgKyAodHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gXCJzdHJpbmdcIiA/IGVsZW1lbnQudHlwZSA6IGVsZW1lbnQudHlwZS5uYW1lKSArIFwiXSBpcyBub3QgYSA8Um91dGU+IGNvbXBvbmVudC4gQWxsIGNvbXBvbmVudCBjaGlsZHJlbiBvZiA8Um91dGVzPiBtdXN0IGJlIGEgPFJvdXRlPiBvciA8UmVhY3QuRnJhZ21lbnQ+XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBsZXQgdHJlZVBhdGggPSBbLi4ucGFyZW50UGF0aCwgaW5kZXhdO1xuICAgIGxldCByb3V0ZSA9IHtcbiAgICAgIGlkOiBlbGVtZW50LnByb3BzLmlkIHx8IHRyZWVQYXRoLmpvaW4oXCItXCIpLFxuICAgICAgY2FzZVNlbnNpdGl2ZTogZWxlbWVudC5wcm9wcy5jYXNlU2Vuc2l0aXZlLFxuICAgICAgZWxlbWVudDogZWxlbWVudC5wcm9wcy5lbGVtZW50LFxuICAgICAgaW5kZXg6IGVsZW1lbnQucHJvcHMuaW5kZXgsXG4gICAgICBwYXRoOiBlbGVtZW50LnByb3BzLnBhdGgsXG4gICAgICBsb2FkZXI6IGVsZW1lbnQucHJvcHMubG9hZGVyLFxuICAgICAgYWN0aW9uOiBlbGVtZW50LnByb3BzLmFjdGlvbixcbiAgICAgIGVycm9yRWxlbWVudDogZWxlbWVudC5wcm9wcy5lcnJvckVsZW1lbnQsXG4gICAgICBoYXNFcnJvckJvdW5kYXJ5OiBlbGVtZW50LnByb3BzLmVycm9yRWxlbWVudCAhPSBudWxsLFxuICAgICAgc2hvdWxkUmV2YWxpZGF0ZTogZWxlbWVudC5wcm9wcy5zaG91bGRSZXZhbGlkYXRlLFxuICAgICAgaGFuZGxlOiBlbGVtZW50LnByb3BzLmhhbmRsZVxuICAgIH07XG5cbiAgICBpZiAoZWxlbWVudC5wcm9wcy5jaGlsZHJlbikge1xuICAgICAgcm91dGUuY2hpbGRyZW4gPSBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW4oZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgdHJlZVBhdGgpO1xuICAgIH1cblxuICAgIHJvdXRlcy5wdXNoKHJvdXRlKTtcbiAgfSk7XG4gIHJldHVybiByb3V0ZXM7XG59XG4vKipcbiAqIFJlbmRlcnMgdGhlIHJlc3VsdCBvZiBgbWF0Y2hSb3V0ZXMoKWAgaW50byBhIFJlYWN0IGVsZW1lbnQuXG4gKi9cblxuZnVuY3Rpb24gcmVuZGVyTWF0Y2hlcyhtYXRjaGVzKSB7XG4gIHJldHVybiBfcmVuZGVyTWF0Y2hlcyhtYXRjaGVzKTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIFdhbGsgdGhlIHJvdXRlIHRyZWUgYW5kIGFkZCBoYXNFcnJvckJvdW5kYXJ5IGlmIGl0J3Mgbm90IHByb3ZpZGVkLCBzbyB0aGF0XG4gKiB1c2VycyBwcm92aWRpbmcgbWFudWFsIHJvdXRlIGFycmF5cyBjYW4ganVzdCBzcGVjaWZ5IGVycm9yRWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGVuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMocm91dGVzKSB7XG4gIHJldHVybiByb3V0ZXMubWFwKHJvdXRlID0+IHtcbiAgICBsZXQgcm91dGVDbG9uZSA9IF9leHRlbmRzKHt9LCByb3V0ZSk7XG5cbiAgICBpZiAocm91dGVDbG9uZS5oYXNFcnJvckJvdW5kYXJ5ID09IG51bGwpIHtcbiAgICAgIHJvdXRlQ2xvbmUuaGFzRXJyb3JCb3VuZGFyeSA9IHJvdXRlQ2xvbmUuZXJyb3JFbGVtZW50ICE9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJvdXRlQ2xvbmUuY2hpbGRyZW4pIHtcbiAgICAgIHJvdXRlQ2xvbmUuY2hpbGRyZW4gPSBlbmhhbmNlTWFudWFsUm91dGVPYmplY3RzKHJvdXRlQ2xvbmUuY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHJldHVybiByb3V0ZUNsb25lO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWVtb3J5Um91dGVyKHJvdXRlcywgb3B0cykge1xuICByZXR1cm4gY3JlYXRlUm91dGVyKHtcbiAgICBiYXNlbmFtZTogb3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5iYXNlbmFtZSxcbiAgICBoaXN0b3J5OiBjcmVhdGVNZW1vcnlIaXN0b3J5KHtcbiAgICAgIGluaXRpYWxFbnRyaWVzOiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLmluaXRpYWxFbnRyaWVzLFxuICAgICAgaW5pdGlhbEluZGV4OiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLmluaXRpYWxJbmRleFxuICAgIH0pLFxuICAgIGh5ZHJhdGlvbkRhdGE6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMuaHlkcmF0aW9uRGF0YSxcbiAgICByb3V0ZXM6IGVuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMocm91dGVzKVxuICB9KS5pbml0aWFsaXplKCk7XG59IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IHsgQXdhaXQsIE1lbW9yeVJvdXRlciwgTmF2aWdhdGUsIE91dGxldCwgUm91dGUsIFJvdXRlciwgUm91dGVyUHJvdmlkZXIsIFJvdXRlcywgRGF0YVJvdXRlckNvbnRleHQgYXMgVU5TQUZFX0RhdGFSb3V0ZXJDb250ZXh0LCBEYXRhUm91dGVyU3RhdGVDb250ZXh0IGFzIFVOU0FGRV9EYXRhUm91dGVyU3RhdGVDb250ZXh0LCBEYXRhU3RhdGljUm91dGVyQ29udGV4dCBhcyBVTlNBRkVfRGF0YVN0YXRpY1JvdXRlckNvbnRleHQsIExvY2F0aW9uQ29udGV4dCBhcyBVTlNBRkVfTG9jYXRpb25Db250ZXh0LCBOYXZpZ2F0aW9uQ29udGV4dCBhcyBVTlNBRkVfTmF2aWdhdGlvbkNvbnRleHQsIFJvdXRlQ29udGV4dCBhcyBVTlNBRkVfUm91dGVDb250ZXh0LCBlbmhhbmNlTWFudWFsUm91dGVPYmplY3RzIGFzIFVOU0FGRV9lbmhhbmNlTWFudWFsUm91dGVPYmplY3RzLCBjcmVhdGVNZW1vcnlSb3V0ZXIsIGNyZWF0ZVJvdXRlc0Zyb21DaGlsZHJlbiwgY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuIGFzIGNyZWF0ZVJvdXRlc0Zyb21FbGVtZW50cywgcmVuZGVyTWF0Y2hlcywgdXNlQWN0aW9uRGF0YSwgdXNlQXN5bmNFcnJvciwgdXNlQXN5bmNWYWx1ZSwgdXNlSHJlZiwgdXNlSW5Sb3V0ZXJDb250ZXh0LCB1c2VMb2FkZXJEYXRhLCB1c2VMb2NhdGlvbiwgdXNlTWF0Y2gsIHVzZU1hdGNoZXMsIHVzZU5hdmlnYXRlLCB1c2VOYXZpZ2F0aW9uLCB1c2VOYXZpZ2F0aW9uVHlwZSwgdXNlT3V0bGV0LCB1c2VPdXRsZXRDb250ZXh0LCB1c2VQYXJhbXMsIHVzZVJlc29sdmVkUGF0aCwgdXNlUmV2YWxpZGF0b3IsIHVzZVJvdXRlRXJyb3IsIHVzZVJvdXRlTG9hZGVyRGF0YSwgdXNlUm91dGVzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsIi8qKlxuICogUmVhY3QgUm91dGVyIERPTSB2Ni40LjFcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIFJlbWl4IFNvZnR3YXJlIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVU5TQUZFX2VuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMsIFJvdXRlciwgdXNlSHJlZiwgY3JlYXRlUGF0aCwgdXNlUmVzb2x2ZWRQYXRoLCB1c2VNYXRjaCwgVU5TQUZFX0RhdGFSb3V0ZXJTdGF0ZUNvbnRleHQsIHVzZU5hdmlnYXRlLCB1c2VMb2NhdGlvbiwgVU5TQUZFX0RhdGFSb3V0ZXJDb250ZXh0LCBVTlNBRkVfUm91dGVDb250ZXh0LCB1c2VNYXRjaGVzLCB1c2VOYXZpZ2F0aW9uIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmV4cG9ydCB7IEFib3J0ZWREZWZlcnJlZEVycm9yLCBBd2FpdCwgTWVtb3J5Um91dGVyLCBOYXZpZ2F0ZSwgTmF2aWdhdGlvblR5cGUsIE91dGxldCwgUm91dGUsIFJvdXRlciwgUm91dGVyUHJvdmlkZXIsIFJvdXRlcywgVU5TQUZFX0RhdGFSb3V0ZXJDb250ZXh0LCBVTlNBRkVfRGF0YVJvdXRlclN0YXRlQ29udGV4dCwgVU5TQUZFX0RhdGFTdGF0aWNSb3V0ZXJDb250ZXh0LCBVTlNBRkVfTG9jYXRpb25Db250ZXh0LCBVTlNBRkVfTmF2aWdhdGlvbkNvbnRleHQsIFVOU0FGRV9Sb3V0ZUNvbnRleHQsIFVOU0FGRV9lbmhhbmNlTWFudWFsUm91dGVPYmplY3RzLCBjcmVhdGVNZW1vcnlSb3V0ZXIsIGNyZWF0ZVBhdGgsIGNyZWF0ZVJvdXRlc0Zyb21DaGlsZHJlbiwgY3JlYXRlUm91dGVzRnJvbUVsZW1lbnRzLCBkZWZlciwgZ2VuZXJhdGVQYXRoLCBpc1JvdXRlRXJyb3JSZXNwb25zZSwganNvbiwgbWF0Y2hQYXRoLCBtYXRjaFJvdXRlcywgcGFyc2VQYXRoLCByZWRpcmVjdCwgcmVuZGVyTWF0Y2hlcywgcmVzb2x2ZVBhdGgsIHVzZUFjdGlvbkRhdGEsIHVzZUFzeW5jRXJyb3IsIHVzZUFzeW5jVmFsdWUsIHVzZUhyZWYsIHVzZUluUm91dGVyQ29udGV4dCwgdXNlTG9hZGVyRGF0YSwgdXNlTG9jYXRpb24sIHVzZU1hdGNoLCB1c2VNYXRjaGVzLCB1c2VOYXZpZ2F0ZSwgdXNlTmF2aWdhdGlvbiwgdXNlTmF2aWdhdGlvblR5cGUsIHVzZU91dGxldCwgdXNlT3V0bGV0Q29udGV4dCwgdXNlUGFyYW1zLCB1c2VSZXNvbHZlZFBhdGgsIHVzZVJldmFsaWRhdG9yLCB1c2VSb3V0ZUVycm9yLCB1c2VSb3V0ZUxvYWRlckRhdGEsIHVzZVJvdXRlcyB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXIsIGNyZWF0ZUJyb3dzZXJIaXN0b3J5LCBjcmVhdGVIYXNoSGlzdG9yeSwgbWF0Y2hQYXRoLCBpbnZhcmlhbnQgfSBmcm9tICdAcmVtaXgtcnVuL3JvdXRlcic7XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmNvbnN0IGRlZmF1bHRNZXRob2QgPSBcImdldFwiO1xuY29uc3QgZGVmYXVsdEVuY1R5cGUgPSBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiO1xuZnVuY3Rpb24gaXNIdG1sRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIHR5cGVvZiBvYmplY3QudGFnTmFtZSA9PT0gXCJzdHJpbmdcIjtcbn1cbmZ1bmN0aW9uIGlzQnV0dG9uRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIGlzSHRtbEVsZW1lbnQob2JqZWN0KSAmJiBvYmplY3QudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImJ1dHRvblwiO1xufVxuZnVuY3Rpb24gaXNGb3JtRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIGlzSHRtbEVsZW1lbnQob2JqZWN0KSAmJiBvYmplY3QudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImZvcm1cIjtcbn1cbmZ1bmN0aW9uIGlzSW5wdXRFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gaXNIdG1sRWxlbWVudChvYmplY3QpICYmIG9iamVjdC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIjtcbn1cblxuZnVuY3Rpb24gaXNNb2RpZmllZEV2ZW50KGV2ZW50KSB7XG4gIHJldHVybiAhIShldmVudC5tZXRhS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkUHJvY2Vzc0xpbmtDbGljayhldmVudCwgdGFyZ2V0KSB7XG4gIHJldHVybiBldmVudC5idXR0b24gPT09IDAgJiYgKCAvLyBJZ25vcmUgZXZlcnl0aGluZyBidXQgbGVmdCBjbGlja3NcbiAgIXRhcmdldCB8fCB0YXJnZXQgPT09IFwiX3NlbGZcIikgJiYgLy8gTGV0IGJyb3dzZXIgaGFuZGxlIFwidGFyZ2V0PV9ibGFua1wiIGV0Yy5cbiAgIWlzTW9kaWZpZWRFdmVudChldmVudCkgLy8gSWdub3JlIGNsaWNrcyB3aXRoIG1vZGlmaWVyIGtleXNcbiAgO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4gaW5pdGlhbGl6ZXIuXG4gKlxuICogVGhpcyBpcyBpZGVudGljYWwgdG8gYG5ldyBVUkxTZWFyY2hQYXJhbXMoaW5pdClgIGV4Y2VwdCBpdCBhbHNvXG4gKiBzdXBwb3J0cyBhcnJheXMgYXMgdmFsdWVzIGluIHRoZSBvYmplY3QgZm9ybSBvZiB0aGUgaW5pdGlhbGl6ZXJcbiAqIGluc3RlYWQgb2YganVzdCBzdHJpbmdzLiBUaGlzIGlzIGNvbnZlbmllbnQgd2hlbiB5b3UgbmVlZCBtdWx0aXBsZVxuICogdmFsdWVzIGZvciBhIGdpdmVuIGtleSwgYnV0IGRvbid0IHdhbnQgdG8gdXNlIGFuIGFycmF5IGluaXRpYWxpemVyLlxuICpcbiAqIEZvciBleGFtcGxlLCBpbnN0ZWFkIG9mOlxuICpcbiAqICAgbGV0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoW1xuICogICAgIFsnc29ydCcsICduYW1lJ10sXG4gKiAgICAgWydzb3J0JywgJ3ByaWNlJ11cbiAqICAgXSk7XG4gKlxuICogeW91IGNhbiBkbzpcbiAqXG4gKiAgIGxldCBzZWFyY2hQYXJhbXMgPSBjcmVhdGVTZWFyY2hQYXJhbXMoe1xuICogICAgIHNvcnQ6IFsnbmFtZScsICdwcmljZSddXG4gKiAgIH0pO1xuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaFBhcmFtcyhpbml0KSB7XG4gIGlmIChpbml0ID09PSB2b2lkIDApIHtcbiAgICBpbml0ID0gXCJcIjtcbiAgfVxuXG4gIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHR5cGVvZiBpbml0ID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoaW5pdCkgfHwgaW5pdCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcyA/IGluaXQgOiBPYmplY3Qua2V5cyhpbml0KS5yZWR1Y2UoKG1lbW8sIGtleSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGluaXRba2V5XTtcbiAgICByZXR1cm4gbWVtby5jb25jYXQoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAodiA9PiBba2V5LCB2XSkgOiBbW2tleSwgdmFsdWVdXSk7XG4gIH0sIFtdKSk7XG59XG5mdW5jdGlvbiBnZXRTZWFyY2hQYXJhbXNGb3JMb2NhdGlvbihsb2NhdGlvblNlYXJjaCwgZGVmYXVsdFNlYXJjaFBhcmFtcykge1xuICBsZXQgc2VhcmNoUGFyYW1zID0gY3JlYXRlU2VhcmNoUGFyYW1zKGxvY2F0aW9uU2VhcmNoKTtcblxuICBmb3IgKGxldCBrZXkgb2YgZGVmYXVsdFNlYXJjaFBhcmFtcy5rZXlzKCkpIHtcbiAgICBpZiAoIXNlYXJjaFBhcmFtcy5oYXMoa2V5KSkge1xuICAgICAgZGVmYXVsdFNlYXJjaFBhcmFtcy5nZXRBbGwoa2V5KS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgc2VhcmNoUGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWFyY2hQYXJhbXM7XG59XG5mdW5jdGlvbiBnZXRGb3JtU3VibWlzc2lvbkluZm8odGFyZ2V0LCBkZWZhdWx0QWN0aW9uLCBvcHRpb25zKSB7XG4gIGxldCBtZXRob2Q7XG4gIGxldCBhY3Rpb247XG4gIGxldCBlbmNUeXBlO1xuICBsZXQgZm9ybURhdGE7XG5cbiAgaWYgKGlzRm9ybUVsZW1lbnQodGFyZ2V0KSkge1xuICAgIGxldCBzdWJtaXNzaW9uVHJpZ2dlciA9IG9wdGlvbnMuc3VibWlzc2lvblRyaWdnZXI7XG4gICAgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QgfHwgdGFyZ2V0LmdldEF0dHJpYnV0ZShcIm1ldGhvZFwiKSB8fCBkZWZhdWx0TWV0aG9kO1xuICAgIGFjdGlvbiA9IG9wdGlvbnMuYWN0aW9uIHx8IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIikgfHwgZGVmYXVsdEFjdGlvbjtcbiAgICBlbmNUeXBlID0gb3B0aW9ucy5lbmNUeXBlIHx8IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJlbmN0eXBlXCIpIHx8IGRlZmF1bHRFbmNUeXBlO1xuICAgIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKHRhcmdldCk7XG5cbiAgICBpZiAoc3VibWlzc2lvblRyaWdnZXIgJiYgc3VibWlzc2lvblRyaWdnZXIubmFtZSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKHN1Ym1pc3Npb25UcmlnZ2VyLm5hbWUsIHN1Ym1pc3Npb25UcmlnZ2VyLnZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNCdXR0b25FbGVtZW50KHRhcmdldCkgfHwgaXNJbnB1dEVsZW1lbnQodGFyZ2V0KSAmJiAodGFyZ2V0LnR5cGUgPT09IFwic3VibWl0XCIgfHwgdGFyZ2V0LnR5cGUgPT09IFwiaW1hZ2VcIikpIHtcbiAgICBsZXQgZm9ybSA9IHRhcmdldC5mb3JtO1xuXG4gICAgaWYgKGZvcm0gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHN1Ym1pdCBhIDxidXR0b24+IG9yIDxpbnB1dCB0eXBlPVxcXCJzdWJtaXRcXFwiPiB3aXRob3V0IGEgPGZvcm0+XCIpO1xuICAgIH0gLy8gPGJ1dHRvbj4vPGlucHV0IHR5cGU9XCJzdWJtaXRcIj4gbWF5IG92ZXJyaWRlIGF0dHJpYnV0ZXMgb2YgPGZvcm0+XG5cblxuICAgIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJmb3JtbWV0aG9kXCIpIHx8IGZvcm0uZ2V0QXR0cmlidXRlKFwibWV0aG9kXCIpIHx8IGRlZmF1bHRNZXRob2Q7XG4gICAgYWN0aW9uID0gb3B0aW9ucy5hY3Rpb24gfHwgdGFyZ2V0LmdldEF0dHJpYnV0ZShcImZvcm1hY3Rpb25cIikgfHwgZm9ybS5nZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIikgfHwgZGVmYXVsdEFjdGlvbjtcbiAgICBlbmNUeXBlID0gb3B0aW9ucy5lbmNUeXBlIHx8IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJmb3JtZW5jdHlwZVwiKSB8fCBmb3JtLmdldEF0dHJpYnV0ZShcImVuY3R5cGVcIikgfHwgZGVmYXVsdEVuY1R5cGU7XG4gICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7IC8vIEluY2x1ZGUgbmFtZSArIHZhbHVlIGZyb20gYSA8YnV0dG9uPiwgYXBwZW5kaW5nIGluIGNhc2UgdGhlIGJ1dHRvbiBuYW1lXG4gICAgLy8gbWF0Y2hlcyBhbiBleGlzdGluZyBpbnB1dCBuYW1lXG5cbiAgICBpZiAodGFyZ2V0Lm5hbWUpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCh0YXJnZXQubmFtZSwgdGFyZ2V0LnZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNIdG1sRWxlbWVudCh0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHN1Ym1pdCBlbGVtZW50IHRoYXQgaXMgbm90IDxmb3JtPiwgPGJ1dHRvbj4sIG9yIFwiICsgXCI8aW5wdXQgdHlwZT1cXFwic3VibWl0fGltYWdlXFxcIj5cIik7XG4gIH0gZWxzZSB7XG4gICAgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QgfHwgZGVmYXVsdE1ldGhvZDtcbiAgICBhY3Rpb24gPSBvcHRpb25zLmFjdGlvbiB8fCBkZWZhdWx0QWN0aW9uO1xuICAgIGVuY1R5cGUgPSBvcHRpb25zLmVuY1R5cGUgfHwgZGVmYXVsdEVuY1R5cGU7XG5cbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgIGZvcm1EYXRhID0gdGFyZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgICAgIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgdGFyZ2V0KSB7XG4gICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YXJnZXQgIT0gbnVsbCkge1xuICAgICAgICBmb3IgKGxldCBuYW1lIG9mIE9iamVjdC5rZXlzKHRhcmdldCkpIHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdGFyZ2V0W25hbWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCB7XG4gICAgcHJvdG9jb2wsXG4gICAgaG9zdFxuICB9ID0gd2luZG93LmxvY2F0aW9uO1xuICBsZXQgdXJsID0gbmV3IFVSTChhY3Rpb24sIHByb3RvY29sICsgXCIvL1wiICsgaG9zdCk7XG4gIHJldHVybiB7XG4gICAgdXJsLFxuICAgIG1ldGhvZCxcbiAgICBlbmNUeXBlLFxuICAgIGZvcm1EYXRhXG4gIH07XG59XG5cbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uQ2xpY2tcIiwgXCJyZWxhdGl2ZVwiLCBcInJlbG9hZERvY3VtZW50XCIsIFwicmVwbGFjZVwiLCBcInN0YXRlXCIsIFwidGFyZ2V0XCIsIFwidG9cIiwgXCJwcmV2ZW50U2Nyb2xsUmVzZXRcIl0sXG4gICAgICBfZXhjbHVkZWQyID0gW1wiYXJpYS1jdXJyZW50XCIsIFwiY2FzZVNlbnNpdGl2ZVwiLCBcImNsYXNzTmFtZVwiLCBcImVuZFwiLCBcInN0eWxlXCIsIFwidG9cIiwgXCJjaGlsZHJlblwiXSxcbiAgICAgIF9leGNsdWRlZDMgPSBbXCJyZWxvYWREb2N1bWVudFwiLCBcInJlcGxhY2VcIiwgXCJtZXRob2RcIiwgXCJhY3Rpb25cIiwgXCJvblN1Ym1pdFwiLCBcImZldGNoZXJLZXlcIiwgXCJyb3V0ZUlkXCIsIFwicmVsYXRpdmVcIl07XG4vLyNyZWdpb24gUm91dGVyc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gY3JlYXRlQnJvd3NlclJvdXRlcihyb3V0ZXMsIG9wdHMpIHtcbiAgdmFyIF93aW5kb3c7XG5cbiAgcmV0dXJuIGNyZWF0ZVJvdXRlcih7XG4gICAgYmFzZW5hbWU6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMuYmFzZW5hbWUsXG4gICAgaGlzdG9yeTogY3JlYXRlQnJvd3Nlckhpc3Rvcnkoe1xuICAgICAgd2luZG93OiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLndpbmRvd1xuICAgIH0pLFxuICAgIGh5ZHJhdGlvbkRhdGE6IChvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLmh5ZHJhdGlvbkRhdGEpIHx8ICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuX19zdGF0aWNSb3V0ZXJIeWRyYXRpb25EYXRhKSxcbiAgICByb3V0ZXM6IFVOU0FGRV9lbmhhbmNlTWFudWFsUm91dGVPYmplY3RzKHJvdXRlcylcbiAgfSkuaW5pdGlhbGl6ZSgpO1xufVxuZnVuY3Rpb24gY3JlYXRlSGFzaFJvdXRlcihyb3V0ZXMsIG9wdHMpIHtcbiAgdmFyIF93aW5kb3cyO1xuXG4gIHJldHVybiBjcmVhdGVSb3V0ZXIoe1xuICAgIGJhc2VuYW1lOiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLmJhc2VuYW1lLFxuICAgIGhpc3Rvcnk6IGNyZWF0ZUhhc2hIaXN0b3J5KHtcbiAgICAgIHdpbmRvdzogb3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy53aW5kb3dcbiAgICB9KSxcbiAgICBoeWRyYXRpb25EYXRhOiAob3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5oeWRyYXRpb25EYXRhKSB8fCAoKF93aW5kb3cyID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdzIuX19zdGF0aWNSb3V0ZXJIeWRyYXRpb25EYXRhKSxcbiAgICByb3V0ZXM6IFVOU0FGRV9lbmhhbmNlTWFudWFsUm91dGVPYmplY3RzKHJvdXRlcylcbiAgfSkuaW5pdGlhbGl6ZSgpO1xufVxuLyoqXG4gKiBBIGA8Um91dGVyPmAgZm9yIHVzZSBpbiB3ZWIgYnJvd3NlcnMuIFByb3ZpZGVzIHRoZSBjbGVhbmVzdCBVUkxzLlxuICovXG5cbmZ1bmN0aW9uIEJyb3dzZXJSb3V0ZXIoX3JlZikge1xuICBsZXQge1xuICAgIGJhc2VuYW1lLFxuICAgIGNoaWxkcmVuLFxuICAgIHdpbmRvd1xuICB9ID0gX3JlZjtcbiAgbGV0IGhpc3RvcnlSZWYgPSBSZWFjdC51c2VSZWYoKTtcblxuICBpZiAoaGlzdG9yeVJlZi5jdXJyZW50ID09IG51bGwpIHtcbiAgICBoaXN0b3J5UmVmLmN1cnJlbnQgPSBjcmVhdGVCcm93c2VySGlzdG9yeSh7XG4gICAgICB3aW5kb3csXG4gICAgICB2NUNvbXBhdDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgbGV0IGhpc3RvcnkgPSBoaXN0b3J5UmVmLmN1cnJlbnQ7XG4gIGxldCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBhY3Rpb246IGhpc3RvcnkuYWN0aW9uLFxuICAgIGxvY2F0aW9uOiBoaXN0b3J5LmxvY2F0aW9uXG4gIH0pO1xuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4gaGlzdG9yeS5saXN0ZW4oc2V0U3RhdGUpLCBbaGlzdG9yeV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyLCB7XG4gICAgYmFzZW5hbWU6IGJhc2VuYW1lLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBsb2NhdGlvbjogc3RhdGUubG9jYXRpb24sXG4gICAgbmF2aWdhdGlvblR5cGU6IHN0YXRlLmFjdGlvbixcbiAgICBuYXZpZ2F0b3I6IGhpc3RvcnlcbiAgfSk7XG59XG4vKipcbiAqIEEgYDxSb3V0ZXI+YCBmb3IgdXNlIGluIHdlYiBicm93c2Vycy4gU3RvcmVzIHRoZSBsb2NhdGlvbiBpbiB0aGUgaGFzaFxuICogcG9ydGlvbiBvZiB0aGUgVVJMIHNvIGl0IGlzIG5vdCBzZW50IHRvIHRoZSBzZXJ2ZXIuXG4gKi9cblxuZnVuY3Rpb24gSGFzaFJvdXRlcihfcmVmMikge1xuICBsZXQge1xuICAgIGJhc2VuYW1lLFxuICAgIGNoaWxkcmVuLFxuICAgIHdpbmRvd1xuICB9ID0gX3JlZjI7XG4gIGxldCBoaXN0b3J5UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgaWYgKGhpc3RvcnlSZWYuY3VycmVudCA9PSBudWxsKSB7XG4gICAgaGlzdG9yeVJlZi5jdXJyZW50ID0gY3JlYXRlSGFzaEhpc3Rvcnkoe1xuICAgICAgd2luZG93LFxuICAgICAgdjVDb21wYXQ6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBoaXN0b3J5ID0gaGlzdG9yeVJlZi5jdXJyZW50O1xuICBsZXQgW3N0YXRlLCBzZXRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgYWN0aW9uOiBoaXN0b3J5LmFjdGlvbixcbiAgICBsb2NhdGlvbjogaGlzdG9yeS5sb2NhdGlvblxuICB9KTtcbiAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IGhpc3RvcnkubGlzdGVuKHNldFN0YXRlKSwgW2hpc3RvcnldKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwge1xuICAgIGJhc2VuYW1lOiBiYXNlbmFtZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgbG9jYXRpb246IHN0YXRlLmxvY2F0aW9uLFxuICAgIG5hdmlnYXRpb25UeXBlOiBzdGF0ZS5hY3Rpb24sXG4gICAgbmF2aWdhdG9yOiBoaXN0b3J5XG4gIH0pO1xufVxuLyoqXG4gKiBBIGA8Um91dGVyPmAgdGhhdCBhY2NlcHRzIGEgcHJlLWluc3RhbnRpYXRlZCBoaXN0b3J5IG9iamVjdC4gSXQncyBpbXBvcnRhbnRcbiAqIHRvIG5vdGUgdGhhdCB1c2luZyB5b3VyIG93biBoaXN0b3J5IG9iamVjdCBpcyBoaWdobHkgZGlzY291cmFnZWQgYW5kIG1heSBhZGRcbiAqIHR3byB2ZXJzaW9ucyBvZiB0aGUgaGlzdG9yeSBsaWJyYXJ5IHRvIHlvdXIgYnVuZGxlcyB1bmxlc3MgeW91IHVzZSB0aGUgc2FtZVxuICogdmVyc2lvbiBvZiB0aGUgaGlzdG9yeSBsaWJyYXJ5IHRoYXQgUmVhY3QgUm91dGVyIHVzZXMgaW50ZXJuYWxseS5cbiAqL1xuXG5mdW5jdGlvbiBIaXN0b3J5Um91dGVyKF9yZWYzKSB7XG4gIGxldCB7XG4gICAgYmFzZW5hbWUsXG4gICAgY2hpbGRyZW4sXG4gICAgaGlzdG9yeVxuICB9ID0gX3JlZjM7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGFjdGlvbjogaGlzdG9yeS5hY3Rpb24sXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb25cbiAgfSk7XG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiBoaXN0b3J5Lmxpc3RlbihzZXRTdGF0ZSksIFtoaXN0b3J5XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXIsIHtcbiAgICBiYXNlbmFtZTogYmFzZW5hbWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGxvY2F0aW9uOiBzdGF0ZS5sb2NhdGlvbixcbiAgICBuYXZpZ2F0aW9uVHlwZTogc3RhdGUuYWN0aW9uLFxuICAgIG5hdmlnYXRvcjogaGlzdG9yeVxuICB9KTtcbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBIaXN0b3J5Um91dGVyLmRpc3BsYXlOYW1lID0gXCJ1bnN0YWJsZV9IaXN0b3J5Um91dGVyXCI7XG59XG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciByZW5kZXJpbmcgYSBoaXN0b3J5LWF3YXJlIDxhPi5cbiAqL1xuXG5jb25zdCBMaW5rID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTGlua1dpdGhSZWYoX3JlZjQsIHJlZikge1xuICBsZXQge1xuICAgIG9uQ2xpY2ssXG4gICAgcmVsYXRpdmUsXG4gICAgcmVsb2FkRG9jdW1lbnQsXG4gICAgcmVwbGFjZSxcbiAgICBzdGF0ZSxcbiAgICB0YXJnZXQsXG4gICAgdG8sXG4gICAgcHJldmVudFNjcm9sbFJlc2V0XG4gIH0gPSBfcmVmNCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmNCwgX2V4Y2x1ZGVkKTtcblxuICBsZXQgaHJlZiA9IHVzZUhyZWYodG8sIHtcbiAgICByZWxhdGl2ZVxuICB9KTtcbiAgbGV0IGludGVybmFsT25DbGljayA9IHVzZUxpbmtDbGlja0hhbmRsZXIodG8sIHtcbiAgICByZXBsYWNlLFxuICAgIHN0YXRlLFxuICAgIHRhcmdldCxcbiAgICBwcmV2ZW50U2Nyb2xsUmVzZXQsXG4gICAgcmVsYXRpdmVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAob25DbGljaykgb25DbGljayhldmVudCk7XG5cbiAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIGludGVybmFsT25DbGljayhldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICAvKiNfX1BVUkVfXyovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L2FuY2hvci1oYXMtY29udGVudFxuICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIF9leHRlbmRzKHt9LCByZXN0LCB7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgb25DbGljazogcmVsb2FkRG9jdW1lbnQgPyBvbkNsaWNrIDogaGFuZGxlQ2xpY2ssXG4gICAgICByZWY6IHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSkpXG4gICk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBMaW5rLmRpc3BsYXlOYW1lID0gXCJMaW5rXCI7XG59XG4vKipcbiAqIEEgPExpbms+IHdyYXBwZXIgdGhhdCBrbm93cyBpZiBpdCdzIFwiYWN0aXZlXCIgb3Igbm90LlxuICovXG5cblxuY29uc3QgTmF2TGluayA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE5hdkxpbmtXaXRoUmVmKF9yZWY1LCByZWYpIHtcbiAgbGV0IHtcbiAgICBcImFyaWEtY3VycmVudFwiOiBhcmlhQ3VycmVudFByb3AgPSBcInBhZ2VcIixcbiAgICBjYXNlU2Vuc2l0aXZlID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVQcm9wID0gXCJcIixcbiAgICBlbmQgPSBmYWxzZSxcbiAgICBzdHlsZTogc3R5bGVQcm9wLFxuICAgIHRvLFxuICAgIGNoaWxkcmVuXG4gIH0gPSBfcmVmNSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmNSwgX2V4Y2x1ZGVkMik7XG5cbiAgbGV0IHBhdGggPSB1c2VSZXNvbHZlZFBhdGgodG8pO1xuICBsZXQgbWF0Y2ggPSB1c2VNYXRjaCh7XG4gICAgcGF0aDogcGF0aC5wYXRobmFtZSxcbiAgICBlbmQsXG4gICAgY2FzZVNlbnNpdGl2ZVxuICB9KTtcbiAgbGV0IHJvdXRlclN0YXRlID0gUmVhY3QudXNlQ29udGV4dChVTlNBRkVfRGF0YVJvdXRlclN0YXRlQ29udGV4dCk7XG4gIGxldCBuZXh0TG9jYXRpb24gPSByb3V0ZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogcm91dGVyU3RhdGUubmF2aWdhdGlvbi5sb2NhdGlvbjtcbiAgbGV0IG5leHRQYXRoID0gdXNlUmVzb2x2ZWRQYXRoKG5leHRMb2NhdGlvbiB8fCBcIlwiKTtcbiAgbGV0IG5leHRNYXRjaCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gbmV4dExvY2F0aW9uID8gbWF0Y2hQYXRoKHtcbiAgICBwYXRoOiBwYXRoLnBhdGhuYW1lLFxuICAgIGVuZCxcbiAgICBjYXNlU2Vuc2l0aXZlXG4gIH0sIG5leHRQYXRoLnBhdGhuYW1lKSA6IG51bGwsIFtuZXh0TG9jYXRpb24sIHBhdGgucGF0aG5hbWUsIGNhc2VTZW5zaXRpdmUsIGVuZCwgbmV4dFBhdGgucGF0aG5hbWVdKTtcbiAgbGV0IGlzUGVuZGluZyA9IG5leHRNYXRjaCAhPSBudWxsO1xuICBsZXQgaXNBY3RpdmUgPSBtYXRjaCAhPSBudWxsO1xuICBsZXQgYXJpYUN1cnJlbnQgPSBpc0FjdGl2ZSA/IGFyaWFDdXJyZW50UHJvcCA6IHVuZGVmaW5lZDtcbiAgbGV0IGNsYXNzTmFtZTtcblxuICBpZiAodHlwZW9mIGNsYXNzTmFtZVByb3AgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZVByb3Aoe1xuICAgICAgaXNBY3RpdmUsXG4gICAgICBpc1BlbmRpbmdcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGUgY2xhc3NOYW1lIHByb3AgaXMgbm90IGEgZnVuY3Rpb24sIHdlIHVzZSBhIGRlZmF1bHQgYGFjdGl2ZWBcbiAgICAvLyBjbGFzcyBmb3IgPE5hdkxpbmsgLz5zIHRoYXQgYXJlIGFjdGl2ZS4gSW4gdjUgYGFjdGl2ZWAgd2FzIHRoZSBkZWZhdWx0XG4gICAgLy8gdmFsdWUgZm9yIGBhY3RpdmVDbGFzc05hbWVgLCBidXQgd2UgYXJlIHJlbW92aW5nIHRoYXQgQVBJIGFuZCBjYW4gc3RpbGxcbiAgICAvLyB1c2UgdGhlIG9sZCBkZWZhdWx0IGJlaGF2aW9yIGZvciBhIGNsZWFuZXIgdXBncmFkZSBwYXRoIGFuZCBrZWVwIHRoZVxuICAgIC8vIHNpbXBsZSBzdHlsaW5nIHJ1bGVzIHdvcmtpbmcgYXMgdGhleSBjdXJyZW50bHkgZG8uXG4gICAgY2xhc3NOYW1lID0gW2NsYXNzTmFtZVByb3AsIGlzQWN0aXZlID8gXCJhY3RpdmVcIiA6IG51bGwsIGlzUGVuZGluZyA/IFwicGVuZGluZ1wiIDogbnVsbF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICB9XG5cbiAgbGV0IHN0eWxlID0gdHlwZW9mIHN0eWxlUHJvcCA9PT0gXCJmdW5jdGlvblwiID8gc3R5bGVQcm9wKHtcbiAgICBpc0FjdGl2ZSxcbiAgICBpc1BlbmRpbmdcbiAgfSkgOiBzdHlsZVByb3A7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMaW5rLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIFwiYXJpYS1jdXJyZW50XCI6IGFyaWFDdXJyZW50LFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIHJlZjogcmVmLFxuICAgIHN0eWxlOiBzdHlsZSxcbiAgICB0bzogdG9cbiAgfSksIHR5cGVvZiBjaGlsZHJlbiA9PT0gXCJmdW5jdGlvblwiID8gY2hpbGRyZW4oe1xuICAgIGlzQWN0aXZlLFxuICAgIGlzUGVuZGluZ1xuICB9KSA6IGNoaWxkcmVuKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIE5hdkxpbmsuZGlzcGxheU5hbWUgPSBcIk5hdkxpbmtcIjtcbn1cbi8qKlxuICogQSBgQHJlbWl4LXJ1bi9yb3V0ZXJgLWF3YXJlIGA8Zm9ybT5gLiBJdCBiZWhhdmVzIGxpa2UgYSBub3JtYWwgZm9ybSBleGNlcHRcbiAqIHRoYXQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHNlcnZlciBpcyB3aXRoIGBmZXRjaGAgaW5zdGVhZCBvZiBuZXcgZG9jdW1lbnRcbiAqIHJlcXVlc3RzLCBhbGxvd2luZyBjb21wb25lbnRzIHRvIGFkZCBuaWNlciBVWCB0byB0aGUgcGFnZSBhcyB0aGUgZm9ybSBpc1xuICogc3VibWl0dGVkIGFuZCByZXR1cm5zIHdpdGggZGF0YS5cbiAqL1xuXG5cbmNvbnN0IEZvcm0gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9ybUltcGwsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHJlZjogcmVmXG4gIH0pKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIEZvcm0uZGlzcGxheU5hbWUgPSBcIkZvcm1cIjtcbn1cblxuY29uc3QgRm9ybUltcGwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZigoX3JlZjYsIGZvcndhcmRlZFJlZikgPT4ge1xuICBsZXQge1xuICAgIHJlbG9hZERvY3VtZW50LFxuICAgIHJlcGxhY2UsXG4gICAgbWV0aG9kID0gZGVmYXVsdE1ldGhvZCxcbiAgICBhY3Rpb24sXG4gICAgb25TdWJtaXQsXG4gICAgZmV0Y2hlcktleSxcbiAgICByb3V0ZUlkLFxuICAgIHJlbGF0aXZlXG4gIH0gPSBfcmVmNixcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjYsIF9leGNsdWRlZDMpO1xuXG4gIGxldCBzdWJtaXQgPSB1c2VTdWJtaXRJbXBsKGZldGNoZXJLZXksIHJvdXRlSWQpO1xuICBsZXQgZm9ybU1ldGhvZCA9IG1ldGhvZC50b0xvd2VyQ2FzZSgpID09PSBcImdldFwiID8gXCJnZXRcIiA6IFwicG9zdFwiO1xuICBsZXQgZm9ybUFjdGlvbiA9IHVzZUZvcm1BY3Rpb24oYWN0aW9uLCB7XG4gICAgcmVsYXRpdmVcbiAgfSk7XG5cbiAgbGV0IHN1Ym1pdEhhbmRsZXIgPSBldmVudCA9PiB7XG4gICAgb25TdWJtaXQgJiYgb25TdWJtaXQoZXZlbnQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBsZXQgc3VibWl0dGVyID0gZXZlbnQubmF0aXZlRXZlbnQuc3VibWl0dGVyO1xuICAgIHN1Ym1pdChzdWJtaXR0ZXIgfHwgZXZlbnQuY3VycmVudFRhcmdldCwge1xuICAgICAgbWV0aG9kLFxuICAgICAgcmVwbGFjZSxcbiAgICAgIHJlbGF0aXZlXG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBmb3J3YXJkZWRSZWYsXG4gICAgbWV0aG9kOiBmb3JtTWV0aG9kLFxuICAgIGFjdGlvbjogZm9ybUFjdGlvbixcbiAgICBvblN1Ym1pdDogcmVsb2FkRG9jdW1lbnQgPyBvblN1Ym1pdCA6IHN1Ym1pdEhhbmRsZXJcbiAgfSwgcHJvcHMpKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIEZvcm0uZGlzcGxheU5hbWUgPSBcIkZvcm1cIjtcbn1cbi8qKlxuICogVGhpcyBjb21wb25lbnQgd2lsbCBlbXVsYXRlIHRoZSBicm93c2VyJ3Mgc2Nyb2xsIHJlc3RvcmF0aW9uIG9uIGxvY2F0aW9uXG4gKiBjaGFuZ2VzLlxuICovXG5cblxuZnVuY3Rpb24gU2Nyb2xsUmVzdG9yYXRpb24oX3JlZjcpIHtcbiAgbGV0IHtcbiAgICBnZXRLZXksXG4gICAgc3RvcmFnZUtleVxuICB9ID0gX3JlZjc7XG4gIHVzZVNjcm9sbFJlc3RvcmF0aW9uKHtcbiAgICBnZXRLZXksXG4gICAgc3RvcmFnZUtleVxuICB9KTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgU2Nyb2xsUmVzdG9yYXRpb24uZGlzcGxheU5hbWUgPSBcIlNjcm9sbFJlc3RvcmF0aW9uXCI7XG59IC8vI2VuZHJlZ2lvblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vI3JlZ2lvbiBIb29rc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBIYW5kbGVzIHRoZSBjbGljayBiZWhhdmlvciBmb3Igcm91dGVyIGA8TGluaz5gIGNvbXBvbmVudHMuIFRoaXMgaXMgdXNlZnVsIGlmXG4gKiB5b3UgbmVlZCB0byBjcmVhdGUgY3VzdG9tIGA8TGluaz5gIGNvbXBvbmVudHMgd2l0aCB0aGUgc2FtZSBjbGljayBiZWhhdmlvciB3ZVxuICogdXNlIGluIG91ciBleHBvcnRlZCBgPExpbms+YC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHVzZUxpbmtDbGlja0hhbmRsZXIodG8sIF90ZW1wKSB7XG4gIGxldCB7XG4gICAgdGFyZ2V0LFxuICAgIHJlcGxhY2U6IHJlcGxhY2VQcm9wLFxuICAgIHN0YXRlLFxuICAgIHByZXZlbnRTY3JvbGxSZXNldCxcbiAgICByZWxhdGl2ZVxuICB9ID0gX3RlbXAgPT09IHZvaWQgMCA/IHt9IDogX3RlbXA7XG4gIGxldCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG4gIGxldCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGxldCBwYXRoID0gdXNlUmVzb2x2ZWRQYXRoKHRvLCB7XG4gICAgcmVsYXRpdmVcbiAgfSk7XG4gIHJldHVybiBSZWFjdC51c2VDYWxsYmFjayhldmVudCA9PiB7XG4gICAgaWYgKHNob3VsZFByb2Nlc3NMaW5rQ2xpY2soZXZlbnQsIHRhcmdldCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIElmIHRoZSBVUkwgaGFzbid0IGNoYW5nZWQsIGEgcmVndWxhciA8YT4gd2lsbCBkbyBhIHJlcGxhY2UgaW5zdGVhZCBvZlxuICAgICAgLy8gYSBwdXNoLCBzbyBkbyB0aGUgc2FtZSBoZXJlIHVubGVzcyB0aGUgcmVwbGFjZSBwcm9wIGlzIGV4cGxpY2l0bHkgc2V0XG5cbiAgICAgIGxldCByZXBsYWNlID0gcmVwbGFjZVByb3AgIT09IHVuZGVmaW5lZCA/IHJlcGxhY2VQcm9wIDogY3JlYXRlUGF0aChsb2NhdGlvbikgPT09IGNyZWF0ZVBhdGgocGF0aCk7XG4gICAgICBuYXZpZ2F0ZSh0bywge1xuICAgICAgICByZXBsYWNlLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgcHJldmVudFNjcm9sbFJlc2V0LFxuICAgICAgICByZWxhdGl2ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbbG9jYXRpb24sIG5hdmlnYXRlLCBwYXRoLCByZXBsYWNlUHJvcCwgc3RhdGUsIHRhcmdldCwgdG8sIHByZXZlbnRTY3JvbGxSZXNldCwgcmVsYXRpdmVdKTtcbn1cbi8qKlxuICogQSBjb252ZW5pZW50IHdyYXBwZXIgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgc2VhcmNoIHBhcmFtZXRlcnMgdmlhIHRoZVxuICogVVJMU2VhcmNoUGFyYW1zIGludGVyZmFjZS5cbiAqL1xuXG5mdW5jdGlvbiB1c2VTZWFyY2hQYXJhbXMoZGVmYXVsdEluaXQpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyh0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSBcInVuZGVmaW5lZFwiLCBcIllvdSBjYW5ub3QgdXNlIHRoZSBgdXNlU2VhcmNoUGFyYW1zYCBob29rIGluIGEgYnJvd3NlciB0aGF0IGRvZXMgbm90IFwiICsgXCJzdXBwb3J0IHRoZSBVUkxTZWFyY2hQYXJhbXMgQVBJLiBJZiB5b3UgbmVlZCB0byBzdXBwb3J0IEludGVybmV0IFwiICsgXCJFeHBsb3JlciAxMSwgd2UgcmVjb21tZW5kIHlvdSBsb2FkIGEgcG9seWZpbGwgc3VjaCBhcyBcIiArIFwiaHR0cHM6Ly9naXRodWIuY29tL3VuZ2FwL3VybC1zZWFyY2gtcGFyYW1zXFxuXFxuXCIgKyBcIklmIHlvdSdyZSB1bnN1cmUgaG93IHRvIGxvYWQgcG9seWZpbGxzLCB3ZSByZWNvbW1lbmQgeW91IGNoZWNrIG91dCBcIiArIFwiaHR0cHM6Ly9wb2x5ZmlsbC5pby92My8gd2hpY2ggcHJvdmlkZXMgc29tZSByZWNvbW1lbmRhdGlvbnMgYWJvdXQgaG93IFwiICsgXCJ0byBsb2FkIHBvbHlmaWxscyBvbmx5IGZvciB1c2VycyB0aGF0IG5lZWQgdGhlbSwgaW5zdGVhZCBvZiBmb3IgZXZlcnkgXCIgKyBcInVzZXIuXCIpIDogdm9pZCAwO1xuICBsZXQgZGVmYXVsdFNlYXJjaFBhcmFtc1JlZiA9IFJlYWN0LnVzZVJlZihjcmVhdGVTZWFyY2hQYXJhbXMoZGVmYXVsdEluaXQpKTtcbiAgbGV0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgbGV0IHNlYXJjaFBhcmFtcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gZ2V0U2VhcmNoUGFyYW1zRm9yTG9jYXRpb24obG9jYXRpb24uc2VhcmNoLCBkZWZhdWx0U2VhcmNoUGFyYW1zUmVmLmN1cnJlbnQpLCBbbG9jYXRpb24uc2VhcmNoXSk7XG4gIGxldCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG4gIGxldCBzZXRTZWFyY2hQYXJhbXMgPSBSZWFjdC51c2VDYWxsYmFjaygobmV4dEluaXQsIG5hdmlnYXRlT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IG5ld1NlYXJjaFBhcmFtcyA9IGNyZWF0ZVNlYXJjaFBhcmFtcyh0eXBlb2YgbmV4dEluaXQgPT09IFwiZnVuY3Rpb25cIiA/IG5leHRJbml0KHNlYXJjaFBhcmFtcykgOiBuZXh0SW5pdCk7XG4gICAgbmF2aWdhdGUoXCI/XCIgKyBuZXdTZWFyY2hQYXJhbXMsIG5hdmlnYXRlT3B0aW9ucyk7XG4gIH0sIFtuYXZpZ2F0ZSwgc2VhcmNoUGFyYW1zXSk7XG4gIHJldHVybiBbc2VhcmNoUGFyYW1zLCBzZXRTZWFyY2hQYXJhbXNdO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBwcm9ncmFtbWF0aWNhbGx5IHN1Ym1pdCBhIGZvcm0gKG9yXG4gKiBzb21lIGFyYml0cmFyeSBkYXRhKSB0byB0aGUgc2VydmVyLlxuICovXG5cbmZ1bmN0aW9uIHVzZVN1Ym1pdCgpIHtcbiAgcmV0dXJuIHVzZVN1Ym1pdEltcGwoKTtcbn1cblxuZnVuY3Rpb24gdXNlU3VibWl0SW1wbChmZXRjaGVyS2V5LCByb3V0ZUlkKSB7XG4gIGxldCBkYXRhUm91dGVyQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVU5TQUZFX0RhdGFSb3V0ZXJDb250ZXh0KTtcbiAgIWRhdGFSb3V0ZXJDb250ZXh0ID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZVN1Ym1pdEltcGwgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIERhdGEgUm91dGVyXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IHtcbiAgICByb3V0ZXJcbiAgfSA9IGRhdGFSb3V0ZXJDb250ZXh0O1xuICBsZXQgZGVmYXVsdEFjdGlvbiA9IHVzZUZvcm1BY3Rpb24oKTtcbiAgcmV0dXJuIFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGFyZSBjYWxsaW5nIHN1Ym1pdCBkdXJpbmcgdGhlIHNlcnZlciByZW5kZXIuIFwiICsgXCJUcnkgY2FsbGluZyBzdWJtaXQgd2l0aGluIGEgYHVzZUVmZmVjdGAgb3IgY2FsbGJhY2sgaW5zdGVhZC5cIik7XG4gICAgfVxuXG4gICAgbGV0IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIGVuY1R5cGUsXG4gICAgICBmb3JtRGF0YSxcbiAgICAgIHVybFxuICAgIH0gPSBnZXRGb3JtU3VibWlzc2lvbkluZm8odGFyZ2V0LCBkZWZhdWx0QWN0aW9uLCBvcHRpb25zKTtcbiAgICBsZXQgaHJlZiA9IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2g7XG4gICAgbGV0IG9wdHMgPSB7XG4gICAgICByZXBsYWNlOiBvcHRpb25zLnJlcGxhY2UsXG4gICAgICBmb3JtRGF0YSxcbiAgICAgIGZvcm1NZXRob2Q6IG1ldGhvZCxcbiAgICAgIGZvcm1FbmNUeXBlOiBlbmNUeXBlXG4gICAgfTtcblxuICAgIGlmIChmZXRjaGVyS2V5KSB7XG4gICAgICAhKHJvdXRlSWQgIT0gbnVsbCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiTm8gcm91dGVJZCBhdmFpbGFibGUgZm9yIHVzZUZldGNoZXIoKVwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgICByb3V0ZXIuZmV0Y2goZmV0Y2hlcktleSwgcm91dGVJZCwgaHJlZiwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdXRlci5uYXZpZ2F0ZShocmVmLCBvcHRzKTtcbiAgICB9XG4gIH0sIFtkZWZhdWx0QWN0aW9uLCByb3V0ZXIsIGZldGNoZXJLZXksIHJvdXRlSWRdKTtcbn1cblxuZnVuY3Rpb24gdXNlRm9ybUFjdGlvbihhY3Rpb24sIF90ZW1wMikge1xuICBsZXQge1xuICAgIHJlbGF0aXZlXG4gIH0gPSBfdGVtcDIgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAyO1xuICBsZXQgcm91dGVDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChVTlNBRkVfUm91dGVDb250ZXh0KTtcbiAgIXJvdXRlQ29udGV4dCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VGb3JtQWN0aW9uIG11c3QgYmUgdXNlZCBpbnNpZGUgYSBSb3V0ZUNvbnRleHRcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQgW21hdGNoXSA9IHJvdXRlQ29udGV4dC5tYXRjaGVzLnNsaWNlKC0xKTtcbiAgbGV0IHJlc29sdmVkQWN0aW9uID0gYWN0aW9uICE9IG51bGwgPyBhY3Rpb24gOiBcIi5cIjtcbiAgbGV0IHBhdGggPSB1c2VSZXNvbHZlZFBhdGgocmVzb2x2ZWRBY3Rpb24sIHtcbiAgICByZWxhdGl2ZVxuICB9KTsgLy8gUHJldmlvdXNseSB3ZSBzZXQgdGhlIGRlZmF1bHQgYWN0aW9uIHRvIFwiLlwiLiBUaGUgcHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdFxuICAvLyBgdXNlUmVzb2x2ZWRQYXRoKFwiLlwiKWAgZXhjbHVkZXMgc2VhcmNoIHBhcmFtcyBhbmQgdGhlIGhhc2ggb2YgdGhlIHJlc29sdmVkXG4gIC8vIFVSTC4gVGhpcyBpcyB0aGUgaW50ZW5kZWQgYmVoYXZpb3Igb2Ygd2hlbiBcIi5cIiBpcyBzcGVjaWZpY2FsbHkgcHJvdmlkZWQgYXNcbiAgLy8gdGhlIGZvcm0gYWN0aW9uLCBidXQgaW5jb25zaXN0ZW50IHcvIGJyb3dzZXJzIHdoZW4gdGhlIGFjdGlvbiBpcyBvbWl0dGVkLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vcmVtaXgtcnVuL3JlbWl4L2lzc3Vlcy85MjdcblxuICBsZXQgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuXG4gIGlmIChhY3Rpb24gPT0gbnVsbCkge1xuICAgIC8vIFNhZmUgdG8gd3JpdGUgdG8gdGhlc2UgZGlyZWN0bHkgaGVyZSBzaW5jZSBpZiBhY3Rpb24gd2FzIHVuZGVmaW5lZCwgd2VcbiAgICAvLyB3b3VsZCBoYXZlIGNhbGxlZCB1c2VSZXNvbHZlZFBhdGgoXCIuXCIpIHdoaWNoIHdpbGwgbmV2ZXIgaW5jbHVkZSBhIHNlYXJjaFxuICAgIC8vIG9yIGhhc2hcbiAgICBwYXRoLnNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaDtcbiAgICBwYXRoLmhhc2ggPSBsb2NhdGlvbi5oYXNoOyAvLyBXaGVuIGdyYWJiaW5nIHNlYXJjaCBwYXJhbXMgZnJvbSB0aGUgVVJMLCByZW1vdmUgdGhlIGF1dG9tYXRpY2FsbHlcbiAgICAvLyBpbnNlcnRlZCA/aW5kZXggcGFyYW0gc28gd2UgbWF0Y2ggdGhlIHVzZVJlc29sdmVkUGF0aCBzZWFyY2ggYmVoYXZpb3JcbiAgICAvLyB3aGljaCB3b3VsZCBub3QgaW5jbHVkZSA/aW5kZXhcblxuICAgIGlmIChtYXRjaC5yb3V0ZS5pbmRleCkge1xuICAgICAgbGV0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aC5zZWFyY2gpO1xuICAgICAgcGFyYW1zLmRlbGV0ZShcImluZGV4XCIpO1xuICAgICAgcGF0aC5zZWFyY2ggPSBwYXJhbXMudG9TdHJpbmcoKSA/IFwiP1wiICsgcGFyYW1zLnRvU3RyaW5nKCkgOiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGlmICgoIWFjdGlvbiB8fCBhY3Rpb24gPT09IFwiLlwiKSAmJiBtYXRjaC5yb3V0ZS5pbmRleCkge1xuICAgIHBhdGguc2VhcmNoID0gcGF0aC5zZWFyY2ggPyBwYXRoLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgXCI/aW5kZXgmXCIpIDogXCI/aW5kZXhcIjtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVQYXRoKHBhdGgpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGZXRjaGVyRm9ybShmZXRjaGVyS2V5LCByb3V0ZUlkKSB7XG4gIGxldCBGZXRjaGVyRm9ybSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1JbXBsLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgZmV0Y2hlcktleTogZmV0Y2hlcktleSxcbiAgICAgIHJvdXRlSWQ6IHJvdXRlSWRcbiAgICB9KSk7XG4gIH0pO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBGZXRjaGVyRm9ybS5kaXNwbGF5TmFtZSA9IFwiZmV0Y2hlci5Gb3JtXCI7XG4gIH1cblxuICByZXR1cm4gRmV0Y2hlckZvcm07XG59XG5cbmxldCBmZXRjaGVySWQgPSAwO1xuLyoqXG4gKiBJbnRlcmFjdHMgd2l0aCByb3V0ZSBsb2FkZXJzIGFuZCBhY3Rpb25zIHdpdGhvdXQgY2F1c2luZyBhIG5hdmlnYXRpb24uIEdyZWF0XG4gKiBmb3IgYW55IGludGVyYWN0aW9uIHRoYXQgc3RheXMgb24gdGhlIHNhbWUgcGFnZS5cbiAqL1xuXG5mdW5jdGlvbiB1c2VGZXRjaGVyKCkge1xuICB2YXIgX3JvdXRlJG1hdGNoZXM7XG5cbiAgbGV0IGRhdGFSb3V0ZXJDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChVTlNBRkVfRGF0YVJvdXRlckNvbnRleHQpO1xuICAhZGF0YVJvdXRlckNvbnRleHQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwidXNlRmV0Y2hlciBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRGF0YSBSb3V0ZXJcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQge1xuICAgIHJvdXRlclxuICB9ID0gZGF0YVJvdXRlckNvbnRleHQ7XG4gIGxldCByb3V0ZSA9IFJlYWN0LnVzZUNvbnRleHQoVU5TQUZFX1JvdXRlQ29udGV4dCk7XG4gICFyb3V0ZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VGZXRjaGVyIG11c3QgYmUgdXNlZCBpbnNpZGUgYSBSb3V0ZUNvbnRleHRcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQgcm91dGVJZCA9IChfcm91dGUkbWF0Y2hlcyA9IHJvdXRlLm1hdGNoZXNbcm91dGUubWF0Y2hlcy5sZW5ndGggLSAxXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb3V0ZSRtYXRjaGVzLnJvdXRlLmlkO1xuICAhKHJvdXRlSWQgIT0gbnVsbCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwidXNlRmV0Y2hlciBjYW4gb25seSBiZSB1c2VkIG9uIHJvdXRlcyB0aGF0IGNvbnRhaW4gYSB1bmlxdWUgXFxcImlkXFxcIlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCBbZmV0Y2hlcktleV0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiBTdHJpbmcoKytmZXRjaGVySWQpKTtcbiAgbGV0IFtGb3JtXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAhcm91dGVJZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJObyByb3V0ZUlkIGF2YWlsYWJsZSBmb3IgZmV0Y2hlci5Gb3JtKClcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIHJldHVybiBjcmVhdGVGZXRjaGVyRm9ybShmZXRjaGVyS2V5LCByb3V0ZUlkKTtcbiAgfSk7XG4gIGxldCBbbG9hZF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiBocmVmID0+IHtcbiAgICAhcm91dGVyID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIk5vIHJvdXRlciBhdmFpbGFibGUgZm9yIGZldGNoZXIubG9hZCgpXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICAhcm91dGVJZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJObyByb3V0ZUlkIGF2YWlsYWJsZSBmb3IgZmV0Y2hlci5sb2FkKClcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIHJvdXRlci5mZXRjaChmZXRjaGVyS2V5LCByb3V0ZUlkLCBocmVmKTtcbiAgfSk7XG4gIGxldCBzdWJtaXQgPSB1c2VTdWJtaXRJbXBsKGZldGNoZXJLZXksIHJvdXRlSWQpO1xuICBsZXQgZmV0Y2hlciA9IHJvdXRlci5nZXRGZXRjaGVyKGZldGNoZXJLZXkpO1xuICBsZXQgZmV0Y2hlcldpdGhDb21wb25lbnRzID0gUmVhY3QudXNlTWVtbygoKSA9PiBfZXh0ZW5kcyh7XG4gICAgRm9ybSxcbiAgICBzdWJtaXQsXG4gICAgbG9hZFxuICB9LCBmZXRjaGVyKSwgW2ZldGNoZXIsIEZvcm0sIHN1Ym1pdCwgbG9hZF0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIElzIHRoaXMgYnVzdGVkIHdoZW4gdGhlIFJlYWN0IHRlYW0gZ2V0cyByZWFsIHdlaXJkIGFuZCBjYWxscyBlZmZlY3RzXG4gICAgLy8gdHdpY2Ugb24gbW91bnQ/ICBXZSByZWFsbHkganVzdCBuZWVkIHRvIGdhcmJhZ2UgY29sbGVjdCBoZXJlIHdoZW4gdGhpc1xuICAgIC8vIGZldGNoZXIgaXMgbm8gbG9uZ2VyIGFyb3VuZC5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKCFyb3V0ZXIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiTm8gZmV0Y2hlciBhdmFpbGFibGUgdG8gY2xlYW4gdXAgZnJvbSB1c2VGZXRjaGVyKClcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcm91dGVyLmRlbGV0ZUZldGNoZXIoZmV0Y2hlcktleSk7XG4gICAgfTtcbiAgfSwgW3JvdXRlciwgZmV0Y2hlcktleV0pO1xuICByZXR1cm4gZmV0Y2hlcldpdGhDb21wb25lbnRzO1xufVxuLyoqXG4gKiBQcm92aWRlcyBhbGwgZmV0Y2hlcnMgY3VycmVudGx5IG9uIHRoZSBwYWdlLiBVc2VmdWwgZm9yIGxheW91dHMgYW5kIHBhcmVudFxuICogcm91dGVzIHRoYXQgbmVlZCB0byBwcm92aWRlIHBlbmRpbmcvb3B0aW1pc3RpYyBVSSByZWdhcmRpbmcgdGhlIGZldGNoLlxuICovXG5cbmZ1bmN0aW9uIHVzZUZldGNoZXJzKCkge1xuICBsZXQgc3RhdGUgPSBSZWFjdC51c2VDb250ZXh0KFVOU0FGRV9EYXRhUm91dGVyU3RhdGVDb250ZXh0KTtcbiAgIXN0YXRlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZUZldGNoZXJzIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBEYXRhUm91dGVyU3RhdGVDb250ZXh0XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgcmV0dXJuIFsuLi5zdGF0ZS5mZXRjaGVycy52YWx1ZXMoKV07XG59XG5jb25zdCBTQ1JPTExfUkVTVE9SQVRJT05fU1RPUkFHRV9LRVkgPSBcInJlYWN0LXJvdXRlci1zY3JvbGwtcG9zaXRpb25zXCI7XG5sZXQgc2F2ZWRTY3JvbGxQb3NpdGlvbnMgPSB7fTtcbi8qKlxuICogV2hlbiByZW5kZXJlZCBpbnNpZGUgYSBSb3V0ZXJQcm92aWRlciwgd2lsbCByZXN0b3JlIHNjcm9sbCBwb3NpdGlvbnMgb24gbmF2aWdhdGlvbnNcbiAqL1xuXG5mdW5jdGlvbiB1c2VTY3JvbGxSZXN0b3JhdGlvbihfdGVtcDMpIHtcbiAgbGV0IHtcbiAgICBnZXRLZXksXG4gICAgc3RvcmFnZUtleVxuICB9ID0gX3RlbXAzID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wMztcbiAgbGV0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgbGV0IG1hdGNoZXMgPSB1c2VNYXRjaGVzKCk7XG4gIGxldCBuYXZpZ2F0aW9uID0gdXNlTmF2aWdhdGlvbigpO1xuICBsZXQgZGF0YVJvdXRlckNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFVOU0FGRV9EYXRhUm91dGVyQ29udGV4dCk7XG4gICFkYXRhUm91dGVyQ29udGV4dCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VTY3JvbGxSZXN0b3JhdGlvbiBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRGF0YVJvdXRlckNvbnRleHRcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQge1xuICAgIHJvdXRlclxuICB9ID0gZGF0YVJvdXRlckNvbnRleHQ7XG4gIGxldCBzdGF0ZSA9IFJlYWN0LnVzZUNvbnRleHQoVU5TQUZFX0RhdGFSb3V0ZXJTdGF0ZUNvbnRleHQpO1xuICAhKHJvdXRlciAhPSBudWxsICYmIHN0YXRlICE9IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZVNjcm9sbFJlc3RvcmF0aW9uIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBEYXRhUm91dGVyU3RhdGVDb250ZXh0XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IHtcbiAgICByZXN0b3JlU2Nyb2xsUG9zaXRpb24sXG4gICAgcHJldmVudFNjcm9sbFJlc2V0XG4gIH0gPSBzdGF0ZTsgLy8gVHJpZ2dlciBtYW51YWwgc2Nyb2xsIHJlc3RvcmF0aW9uIHdoaWxlIHdlJ3JlIGFjdGl2ZVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2luZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSBcIm1hbnVhbFwiO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IFwiYXV0b1wiO1xuICAgIH07XG4gIH0sIFtdKTsgLy8gU2F2ZSBwb3NpdGlvbnMgb24gdW5sb2FkXG5cbiAgdXNlQmVmb3JlVW5sb2FkKFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAobmF2aWdhdGlvbi5zdGF0ZSA9PT0gXCJpZGxlXCIpIHtcbiAgICAgIGxldCBrZXkgPSAoZ2V0S2V5ID8gZ2V0S2V5KGxvY2F0aW9uLCBtYXRjaGVzKSA6IG51bGwpIHx8IGxvY2F0aW9uLmtleTtcbiAgICAgIHNhdmVkU2Nyb2xsUG9zaXRpb25zW2tleV0gPSB3aW5kb3cuc2Nyb2xsWTtcbiAgICB9XG5cbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHN0b3JhZ2VLZXkgfHwgU0NST0xMX1JFU1RPUkFUSU9OX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShzYXZlZFNjcm9sbFBvc2l0aW9ucykpO1xuICAgIHdpbmRvdy5oaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uID0gXCJhdXRvXCI7XG4gIH0sIFtzdG9yYWdlS2V5LCBnZXRLZXksIG5hdmlnYXRpb24uc3RhdGUsIGxvY2F0aW9uLCBtYXRjaGVzXSkpOyAvLyBSZWFkIGluIGFueSBzYXZlZCBzY3JvbGwgbG9jYXRpb25zXG5cbiAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHNlc3Npb25Qb3NpdGlvbnMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHN0b3JhZ2VLZXkgfHwgU0NST0xMX1JFU1RPUkFUSU9OX1NUT1JBR0VfS0VZKTtcblxuICAgICAgaWYgKHNlc3Npb25Qb3NpdGlvbnMpIHtcbiAgICAgICAgc2F2ZWRTY3JvbGxQb3NpdGlvbnMgPSBKU09OLnBhcnNlKHNlc3Npb25Qb3NpdGlvbnMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHsvLyBuby1vcCwgdXNlIGRlZmF1bHQgZW1wdHkgb2JqZWN0XG4gICAgfVxuICB9LCBbc3RvcmFnZUtleV0pOyAvLyBFbmFibGUgc2Nyb2xsIHJlc3RvcmF0aW9uIGluIHRoZSByb3V0ZXJcblxuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBkaXNhYmxlU2Nyb2xsUmVzdG9yYXRpb24gPSByb3V0ZXIgPT0gbnVsbCA/IHZvaWQgMCA6IHJvdXRlci5lbmFibGVTY3JvbGxSZXN0b3JhdGlvbihzYXZlZFNjcm9sbFBvc2l0aW9ucywgKCkgPT4gd2luZG93LnNjcm9sbFksIGdldEtleSk7XG4gICAgcmV0dXJuICgpID0+IGRpc2FibGVTY3JvbGxSZXN0b3JhdGlvbiAmJiBkaXNhYmxlU2Nyb2xsUmVzdG9yYXRpb24oKTtcbiAgfSwgW3JvdXRlciwgZ2V0S2V5XSk7IC8vIFJlc3RvcmUgc2Nyb2xsaW5nIHdoZW4gc3RhdGUucmVzdG9yZVNjcm9sbFBvc2l0aW9uIGNoYW5nZXNcblxuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIC8vIEV4cGxpY2l0IGZhbHNlIG1lYW5zIGRvbid0IGRvIGFueXRoaW5nICh1c2VkIGZvciBzdWJtaXNzaW9ucylcbiAgICBpZiAocmVzdG9yZVNjcm9sbFBvc2l0aW9uID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gYmVlbiBoZXJlIGJlZm9yZSwgc2Nyb2xsIHRvIGl0XG5cblxuICAgIGlmICh0eXBlb2YgcmVzdG9yZVNjcm9sbFBvc2l0aW9uID09PSBcIm51bWJlclwiKSB7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgcmVzdG9yZVNjcm9sbFBvc2l0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHRyeSB0byBzY3JvbGwgdG8gdGhlIGhhc2hcblxuXG4gICAgaWYgKGxvY2F0aW9uLmhhc2gpIHtcbiAgICAgIGxldCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGxvY2F0aW9uLmhhc2guc2xpY2UoMSkpO1xuXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gLy8gT3B0IG91dCBvZiBzY3JvbGwgcmVzZXQgaWYgdGhpcyBsaW5rIHJlcXVlc3RlZCBpdFxuXG5cbiAgICBpZiAocHJldmVudFNjcm9sbFJlc2V0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBvdGhlcndpc2UgZ28gdG8gdGhlIHRvcCBvbiBuZXcgbG9jYXRpb25zXG5cblxuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfSwgW2xvY2F0aW9uLCByZXN0b3JlU2Nyb2xsUG9zaXRpb24sIHByZXZlbnRTY3JvbGxSZXNldF0pO1xufVxuXG5mdW5jdGlvbiB1c2VCZWZvcmVVbmxvYWQoY2FsbGJhY2spIHtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGNhbGxiYWNrKTtcbiAgICB9O1xuICB9LCBbY2FsbGJhY2tdKTtcbn0gLy8jZW5kcmVnaW9uXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8jcmVnaW9uIFV0aWxzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbmZ1bmN0aW9uIHdhcm5pbmcoY29uZCwgbWVzc2FnZSkge1xuICBpZiAoIWNvbmQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIikgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IFJvdXRlciFcbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGVycm9yIGlzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHlvdSBjYW4gbW9yZSBlYXNpbHlcbiAgICAgIC8vIGZpbmQgdGhlIHNvdXJjZSBmb3IgYSB3YXJuaW5nIHRoYXQgYXBwZWFycyBpbiB0aGUgY29uc29sZSBieVxuICAgICAgLy8gZW5hYmxpbmcgXCJwYXVzZSBvbiBleGNlcHRpb25zXCIgaW4geW91ciBKYXZhU2NyaXB0IGRlYnVnZ2VyLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG59IC8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBCcm93c2VyUm91dGVyLCBGb3JtLCBIYXNoUm91dGVyLCBMaW5rLCBOYXZMaW5rLCBTY3JvbGxSZXN0b3JhdGlvbiwgY3JlYXRlQnJvd3NlclJvdXRlciwgY3JlYXRlSGFzaFJvdXRlciwgY3JlYXRlU2VhcmNoUGFyYW1zLCBIaXN0b3J5Um91dGVyIGFzIHVuc3RhYmxlX0hpc3RvcnlSb3V0ZXIsIHVzZUZldGNoZXIsIHVzZUZldGNoZXJzLCB1c2VGb3JtQWN0aW9uLCB1c2VMaW5rQ2xpY2tIYW5kbGVyLCB1c2VTZWFyY2hQYXJhbXMsIHVzZVN1Ym1pdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wic3hcIl07XG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBwcm9wVG9TdHlsZUZ1bmN0aW9uIH0gZnJvbSAnLi4vZ2V0VGhlbWVWYWx1ZSc7XG5cbmNvbnN0IHNwbGl0UHJvcHMgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBzeXN0ZW1Qcm9wczoge30sXG4gICAgb3RoZXJQcm9wczoge31cbiAgfTtcbiAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgaWYgKHByb3BUb1N0eWxlRnVuY3Rpb25bcHJvcF0pIHtcbiAgICAgIHJlc3VsdC5zeXN0ZW1Qcm9wc1twcm9wXSA9IHByb3BzW3Byb3BdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQub3RoZXJQcm9wc1twcm9wXSA9IHByb3BzW3Byb3BdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRlbmRTeFByb3AocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHN4OiBpblN4XG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCB7XG4gICAgc3lzdGVtUHJvcHMsXG4gICAgb3RoZXJQcm9wc1xuICB9ID0gc3BsaXRQcm9wcyhvdGhlcik7XG4gIGxldCBmaW5hbFN4O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGluU3gpKSB7XG4gICAgZmluYWxTeCA9IFtzeXN0ZW1Qcm9wcywgLi4uaW5TeF07XG4gIH0gZWxzZSBpZiAodHlwZW9mIGluU3ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBmaW5hbFN4ID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGluU3goLi4uYXJncyk7XG5cbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiBzeXN0ZW1Qcm9wcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzeXN0ZW1Qcm9wcywgcmVzdWx0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGZpbmFsU3ggPSBfZXh0ZW5kcyh7fSwgc3lzdGVtUHJvcHMsIGluU3gpO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdGhlclByb3BzLCB7XG4gICAgc3g6IGZpbmFsU3hcbiAgfSk7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuaW1wb3J0IGRlZmF1bHRTdHlsZUZ1bmN0aW9uU3gsIHsgZXh0ZW5kU3hQcm9wIH0gZnJvbSAnLi9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4vdXNlVGhlbWUnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUJveChvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGRlZmF1bHRUaGVtZSxcbiAgICBkZWZhdWx0Q2xhc3NOYW1lID0gJ011aUJveC1yb290JyxcbiAgICBnZW5lcmF0ZUNsYXNzTmFtZSxcbiAgICBzdHlsZUZ1bmN0aW9uU3ggPSBkZWZhdWx0U3R5bGVGdW5jdGlvblN4XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBCb3hSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gICAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcHJvcCAhPT0gJ3RoZW1lJyAmJiBwcm9wICE9PSAnc3gnICYmIHByb3AgIT09ICdhcydcbiAgfSkoc3R5bGVGdW5jdGlvblN4KTtcbiAgY29uc3QgQm94ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQm94KGluUHJvcHMsIHJlZikge1xuICAgIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoZGVmYXVsdFRoZW1lKTtcblxuICAgIGNvbnN0IF9leHRlbmRTeFByb3AgPSBleHRlbmRTeFByb3AoaW5Qcm9wcyksXG4gICAgICAgICAge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdidcbiAgICB9ID0gX2V4dGVuZFN4UHJvcCxcbiAgICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9leHRlbmRTeFByb3AsIF9leGNsdWRlZCk7XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQm94Um9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzTmFtZSwgZ2VuZXJhdGVDbGFzc05hbWUgPyBnZW5lcmF0ZUNsYXNzTmFtZShkZWZhdWx0Q2xhc3NOYW1lKSA6IGRlZmF1bHRDbGFzc05hbWUpLFxuICAgICAgdGhlbWU6IHRoZW1lXG4gICAgfSwgb3RoZXIpKTtcbiAgfSk7XG4gIHJldHVybiBCb3g7XG59IiwiaW1wb3J0IHsgY3JlYXRlQm94IH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciBhcyBDbGFzc05hbWVHZW5lcmF0b3IgfSBmcm9tICcuLi9jbGFzc05hbWUnO1xuaW1wb3J0IHsgY3JlYXRlVGhlbWUgfSBmcm9tICcuLi9zdHlsZXMnO1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmNvbnN0IEJveCA9IGNyZWF0ZUJveCh7XG4gIGRlZmF1bHRUaGVtZSxcbiAgZGVmYXVsdENsYXNzTmFtZTogJ011aUJveC1yb290JyxcbiAgZ2VuZXJhdGVDbGFzc05hbWU6IENsYXNzTmFtZUdlbmVyYXRvci5nZW5lcmF0ZVxufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCb3gucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJveDsiLCJjb25zdCBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG5leHBvcnQgZGVmYXVsdCBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdtdWkubmVzdGVkJykgOiAnX19USEVNRV9ORVNURURfXyc7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZXhhY3RQcm9wIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgVGhlbWVDb250ZXh0IGZyb20gJy4uL3VzZVRoZW1lL1RoZW1lQ29udGV4dCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vdXNlVGhlbWUnO1xuaW1wb3J0IG5lc3RlZCBmcm9tICcuL25lc3RlZCc7IC8vIFRvIHN1cHBvcnQgY29tcG9zaXRpb24gb2YgdGhlbWUuXG5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmZ1bmN0aW9uIG1lcmdlT3V0ZXJMb2NhbFRoZW1lKG91dGVyVGhlbWUsIGxvY2FsVGhlbWUpIHtcbiAgaWYgKHR5cGVvZiBsb2NhbFRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgbWVyZ2VkVGhlbWUgPSBsb2NhbFRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghbWVyZ2VkVGhlbWUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IHNob3VsZCByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLicsICc8VGhlbWVQcm92aWRlciB0aGVtZT17KCkgPT4gKHt9KX0gLz4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdXRlclRoZW1lLCBsb2NhbFRoZW1lKTtcbn1cbi8qKlxuICogVGhpcyBjb21wb25lbnQgdGFrZXMgYSBgdGhlbWVgIHByb3AuXG4gKiBJdCBtYWtlcyB0aGUgYHRoZW1lYCBhdmFpbGFibGUgZG93biB0aGUgUmVhY3QgdHJlZSB0aGFua3MgdG8gUmVhY3QgY29udGV4dC5cbiAqIFRoaXMgY29tcG9uZW50IHNob3VsZCBwcmVmZXJhYmx5IGJlIHVzZWQgYXQgKip0aGUgcm9vdCBvZiB5b3VyIGNvbXBvbmVudCB0cmVlKiouXG4gKi9cblxuXG5mdW5jdGlvbiBUaGVtZVByb3ZpZGVyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICB0aGVtZTogbG9jYWxUaGVtZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG91dGVyVGhlbWUgPSB1c2VUaGVtZSgpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKG91dGVyVGhlbWUgPT09IG51bGwgJiYgdHlwZW9mIGxvY2FsVGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFlvdSBhcmUgcHJvdmlkaW5nIGEgdGhlbWUgZnVuY3Rpb24gcHJvcCB0byB0aGUgVGhlbWVQcm92aWRlciBjb21wb25lbnQ6JywgJzxUaGVtZVByb3ZpZGVyIHRoZW1lPXtvdXRlclRoZW1lID0+IG91dGVyVGhlbWV9IC8+JywgJycsICdIb3dldmVyLCBubyBvdXRlciB0aGVtZSBpcyBwcmVzZW50LicsICdNYWtlIHN1cmUgYSB0aGVtZSBpcyBhbHJlYWR5IGluamVjdGVkIGhpZ2hlciBpbiB0aGUgUmVhY3QgdHJlZSAnICsgJ29yIHByb3ZpZGUgYSB0aGVtZSBvYmplY3QuJ10uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0ZXJUaGVtZSA9PT0gbnVsbCA/IGxvY2FsVGhlbWUgOiBtZXJnZU91dGVyTG9jYWxUaGVtZShvdXRlclRoZW1lLCBsb2NhbFRoZW1lKTtcblxuICAgIGlmIChvdXRwdXQgIT0gbnVsbCkge1xuICAgICAgb3V0cHV0W25lc3RlZF0gPSBvdXRlclRoZW1lICE9PSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0sIFtsb2NhbFRoZW1lLCBvdXRlclRoZW1lXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pO1xufVxuXG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUaGVtZVByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFlvdXIgY29tcG9uZW50IHRyZWUuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgdGhlbWUgb2JqZWN0LiBZb3UgY2FuIHByb3ZpZGUgYSBmdW5jdGlvbiB0byBleHRlbmQgdGhlIG91dGVyIHRoZW1lLlxuICAgKi9cbiAgdGhlbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSkuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGhlbWVQcm92aWRlci5wcm9wVHlwZXMgPSBleGFjdFByb3AoVGhlbWVQcm92aWRlci5wcm9wVHlwZXMpIDogdm9pZCAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUaGVtZVByb3ZpZGVyOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBUaGVtZVByb3ZpZGVyIGFzIE11aVRoZW1lUHJvdmlkZXIgfSBmcm9tICdAbXVpL3ByaXZhdGUtdGhlbWluZyc7XG5pbXBvcnQgeyBleGFjdFByb3AgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IFRoZW1lQ29udGV4dCBhcyBTdHlsZWRFbmdpbmVUaGVtZUNvbnRleHQgfSBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3VzZVRoZW1lJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmZ1bmN0aW9uIElubmVyVGhlbWVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRFbmdpbmVUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdHlwZW9mIHRoZW1lID09PSAnb2JqZWN0JyA/IHRoZW1lIDoge30sXG4gICAgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuXG4gIH0pO1xufVxuXG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbm5lclRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZVxufSA6IHZvaWQgMDtcbi8qKlxuICogVGhpcyBjb21wb25lbnQgbWFrZXMgdGhlIGB0aGVtZWAgYXZhaWxhYmxlIGRvd24gdGhlIFJlYWN0IHRyZWUuXG4gKiBJdCBzaG91bGQgcHJlZmVyYWJseSBiZSB1c2VkIGF0ICoqdGhlIHJvb3Qgb2YgeW91ciBjb21wb25lbnQgdHJlZSoqLlxuICovXG5cbmZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIHRoZW1lOiBsb2NhbFRoZW1lXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE11aVRoZW1lUHJvdmlkZXIsIHtcbiAgICB0aGVtZTogbG9jYWxUaGVtZSxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goSW5uZXJUaGVtZVByb3ZpZGVyLCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KVxuICB9KTtcbn1cblxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGhlbWVQcm92aWRlci5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQSB0aGVtZSBvYmplY3QuIFlvdSBjYW4gcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIGV4dGVuZCB0aGUgb3V0ZXIgdGhlbWUuXG4gICAqL1xuICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKS5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUaGVtZVByb3ZpZGVyLnByb3BUeXBlcyA9IGV4YWN0UHJvcChUaGVtZVByb3ZpZGVyLnByb3BUeXBlcykgOiB2b2lkIDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRoZW1lUHJvdmlkZXI7IiwiLy8gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wYWNrYWdlcy5odG1sI3BhY2thZ2VzX3dyaXRpbmdfZHVhbF9wYWNrYWdlc193aGlsZV9hdm9pZGluZ19vcl9taW5pbWl6aW5nX2hhemFyZHNcbmltcG9ydCBIaWdobGlnaHRKUyBmcm9tICcuLi9saWIvY29tbW9uLmpzJztcbmV4cG9ydCB7IEhpZ2hsaWdodEpTIH07XG5leHBvcnQgZGVmYXVsdCBIaWdobGlnaHRKUztcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpOyIsImltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuXG4gKlxuICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkgdG8gY2hpbGRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRNYXBwaW5nKGNoaWxkcmVuLCBtYXBGbikge1xuICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gbWFwcGVyKGNoaWxkKSB7XG4gICAgcmV0dXJuIG1hcEZuICYmIGlzVmFsaWRFbGVtZW50KGNoaWxkKSA/IG1hcEZuKGNoaWxkKSA6IGNoaWxkO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoY2hpbGRyZW4pIENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAvLyBydW4gdGhlIG1hcCBmdW5jdGlvbiBoZXJlIGluc3RlYWQgc28gdGhhdCB0aGUga2V5IGlzIHRoZSBjb21wdXRlZCBvbmVcbiAgICByZXN1bHRbY2hpbGQua2V5XSA9IG1hcHBlcihjaGlsZCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBXaGVuIHlvdSdyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGVcbiAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAqIGFuZCBhIG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0aGUgY29ycmVjdFxuICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gKiBkaXJlY3RseSBoYXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hpbGRyZW5cbiAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoaWxkTWFwcGluZ3MocHJldiwgbmV4dCkge1xuICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBuZXh0ID8gbmV4dFtrZXldIDogcHJldltrZXldO1xuICB9IC8vIEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGF0IGtleSBpblxuICAvLyB0aGUgY29tYmluZWQgbGlzdFxuXG5cbiAgdmFyIG5leHRLZXlzUGVuZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgIGlmIChwcmV2S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dEtleXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7XG4gICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGk7XG4gIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICBpZiAobmV4dEtleXNQZW5kaW5nW25leHRLZXldKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7XG4gIH0gLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRgXG5cblxuICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcChjaGlsZCwgcHJvcCwgcHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGwgPyBwcm9wc1twcm9wXSA6IGNoaWxkLnByb3BzW3Byb3BdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhwcm9wcywgb25FeGl0ZWQpIHtcbiAgcmV0dXJuIGdldENoaWxkTWFwcGluZyhwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgaW46IHRydWUsXG4gICAgICBhcHBlYXI6IGdldFByb3AoY2hpbGQsICdhcHBlYXInLCBwcm9wcyksXG4gICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgcHJvcHMpLFxuICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBwcm9wcylcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIG9uRXhpdGVkKSB7XG4gIHZhciBuZXh0Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIHZhciBjaGlsZHJlbiA9IG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2tleV07XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybjtcbiAgICB2YXIgaGFzUHJldiA9IChrZXkgaW4gcHJldkNoaWxkTWFwcGluZyk7XG4gICAgdmFyIGhhc05leHQgPSAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRDaGlsZE1hcHBpbmcsIGdldEluaXRpYWxDaGlsZE1hcHBpbmcsIGdldE5leHRDaGlsZE1hcHBpbmcgfSBmcm9tICcuL3V0aWxzL0NoaWxkTWFwcGluZyc7XG5cbnZhciB2YWx1ZXMgPSBPYmplY3QudmFsdWVzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0dXJuIG9ialtrXTtcbiAgfSk7XG59O1xuXG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBjb21wb25lbnQ6ICdkaXYnLFxuICBjaGlsZEZhY3Rvcnk6IGZ1bmN0aW9uIGNoaWxkRmFjdG9yeShjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxufTtcbi8qKlxuICogVGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgY29tcG9uZW50IG1hbmFnZXMgYSBzZXQgb2YgdHJhbnNpdGlvbiBjb21wb25lbnRzXG4gKiAoYDxUcmFuc2l0aW9uPmAgYW5kIGA8Q1NTVHJhbnNpdGlvbj5gKSBpbiBhIGxpc3QuIExpa2Ugd2l0aCB0aGUgdHJhbnNpdGlvblxuICogY29tcG9uZW50cywgYDxUcmFuc2l0aW9uR3JvdXA+YCBpcyBhIHN0YXRlIG1hY2hpbmUgZm9yIG1hbmFnaW5nIHRoZSBtb3VudGluZ1xuICogYW5kIHVubW91bnRpbmcgb2YgY29tcG9uZW50cyBvdmVyIHRpbWUuXG4gKlxuICogQ29uc2lkZXIgdGhlIGV4YW1wbGUgYmVsb3cuIEFzIGl0ZW1zIGFyZSByZW1vdmVkIG9yIGFkZGVkIHRvIHRoZSBUb2RvTGlzdCB0aGVcbiAqIGBpbmAgcHJvcCBpcyB0b2dnbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAuXG4gKlxuICogTm90ZSB0aGF0IGA8VHJhbnNpdGlvbkdyb3VwPmAgIGRvZXMgbm90IGRlZmluZSBhbnkgYW5pbWF0aW9uIGJlaGF2aW9yIVxuICogRXhhY3RseSBfaG93XyBhIGxpc3QgaXRlbSBhbmltYXRlcyBpcyB1cCB0byB0aGUgaW5kaXZpZHVhbCB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnQuIFRoaXMgbWVhbnMgeW91IGNhbiBtaXggYW5kIG1hdGNoIGFuaW1hdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBsaXN0XG4gKiBpdGVtcy5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb25Hcm91cCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbkdyb3VwKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG5cbiAgICB2YXIgaGFuZGxlRXhpdGVkID0gX3RoaXMuaGFuZGxlRXhpdGVkLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOyAvLyBJbml0aWFsIGNoaWxkcmVuIHNob3VsZCBhbGwgYmUgZW50ZXJpbmcsIGRlcGVuZGVudCBvbiBhcHBlYXJcblxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGhhbmRsZUV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgZmlyc3RSZW5kZXI6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IHRydWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgfTtcblxuICBUcmFuc2l0aW9uR3JvdXAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgX3JlZikge1xuICAgIHZhciBwcmV2Q2hpbGRNYXBwaW5nID0gX3JlZi5jaGlsZHJlbixcbiAgICAgICAgaGFuZGxlRXhpdGVkID0gX3JlZi5oYW5kbGVFeGl0ZWQsXG4gICAgICAgIGZpcnN0UmVuZGVyID0gX3JlZi5maXJzdFJlbmRlcjtcbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGZpcnN0UmVuZGVyID8gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIGhhbmRsZUV4aXRlZCkgOiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgaGFuZGxlRXhpdGVkKSxcbiAgICAgIGZpcnN0UmVuZGVyOiBmYWxzZVxuICAgIH07XG4gIH0gLy8gbm9kZSBpcyBgdW5kZWZpbmVkYCB3aGVuIHVzZXIgcHJvdmlkZWQgYG5vZGVSZWZgIHByb3BcbiAgO1xuXG4gIF9wcm90by5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiBoYW5kbGVFeGl0ZWQoY2hpbGQsIG5vZGUpIHtcbiAgICB2YXIgY3VycmVudENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoY2hpbGQua2V5IGluIGN1cnJlbnRDaGlsZE1hcHBpbmcpIHJldHVybjtcblxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgY2hpbGQucHJvcHMub25FeGl0ZWQobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW91bnRlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gX2V4dGVuZHMoe30sIHN0YXRlLmNoaWxkcmVuKTtcblxuICAgICAgICBkZWxldGUgY2hpbGRyZW5bY2hpbGQua2V5XTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIENvbXBvbmVudCA9IF90aGlzJHByb3BzLmNvbXBvbmVudCxcbiAgICAgICAgY2hpbGRGYWN0b3J5ID0gX3RoaXMkcHJvcHMuY2hpbGRGYWN0b3J5LFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjb21wb25lbnRcIiwgXCJjaGlsZEZhY3RvcnlcIl0pO1xuXG4gICAgdmFyIGNvbnRleHRWYWx1ZSA9IHRoaXMuc3RhdGUuY29udGV4dFZhbHVlO1xuICAgIHZhciBjaGlsZHJlbiA9IHZhbHVlcyh0aGlzLnN0YXRlLmNoaWxkcmVuKS5tYXAoY2hpbGRGYWN0b3J5KTtcbiAgICBkZWxldGUgcHJvcHMuYXBwZWFyO1xuICAgIGRlbGV0ZSBwcm9wcy5lbnRlcjtcbiAgICBkZWxldGUgcHJvcHMuZXhpdDtcblxuICAgIGlmIChDb21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKSk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25Hcm91cDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbkdyb3VwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIGA8VHJhbnNpdGlvbkdyb3VwPmAgcmVuZGVycyBhIGA8ZGl2PmAgYnkgZGVmYXVsdC4gWW91IGNhbiBjaGFuZ2UgdGhpc1xuICAgKiBiZWhhdmlvciBieSBwcm92aWRpbmcgYSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBJZiB5b3UgdXNlIFJlYWN0IHYxNisgYW5kIHdvdWxkIGxpa2UgdG8gYXZvaWQgYSB3cmFwcGluZyBgPGRpdj5gIGVsZW1lbnRcbiAgICogeW91IGNhbiBwYXNzIGluIGBjb21wb25lbnQ9e251bGx9YC4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHdyYXBwaW5nIGRpdlxuICAgKiBib3JrcyB5b3VyIGNzcyBzdHlsZXMuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGA8VHJhbnNpdGlvbj5gIGNvbXBvbmVudHMsIHRoYXQgYXJlIHRvZ2dsZWQgYGluYCBhbmQgb3V0IGFzIHRoZXlcbiAgICogbGVhdmUuIHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIHdpbGwgaW5qZWN0IHNwZWNpZmljIHRyYW5zaXRpb24gcHJvcHMsIHNvXG4gICAqIHJlbWVtYmVyIHRvIHNwcmVhZCB0aGVtIHRocm91Z2ggaWYgeW91IGFyZSB3cmFwcGluZyB0aGUgYDxUcmFuc2l0aW9uPmAgYXNcbiAgICogd2l0aCBvdXIgYDxGYWRlPmAgZXhhbXBsZS5cbiAgICpcbiAgICogV2hpbGUgdGhpcyBjb21wb25lbnQgaXMgbWVhbnQgZm9yIG11bHRpcGxlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmBcbiAgICogY2hpbGRyZW4sIHNvbWV0aW1lcyB5b3UgbWF5IHdhbnQgdG8gaGF2ZSBhIHNpbmdsZSB0cmFuc2l0aW9uIGNoaWxkIHdpdGhcbiAgICogY29udGVudCB0aGF0IHlvdSB3YW50IHRvIGJlIHRyYW5zaXRpb25lZCBvdXQgYW5kIGluIHdoZW4geW91IGNoYW5nZSBpdFxuICAgKiAoZS5nLiByb3V0ZXMsIGltYWdlcyBldGMuKSBJbiB0aGF0IGNhc2UgeW91IGNhbiBjaGFuZ2UgdGhlIGBrZXlgIHByb3Agb2ZcbiAgICogdGhlIHRyYW5zaXRpb24gY2hpbGQgYXMgeW91IGNoYW5nZSBpdHMgY29udGVudCwgdGhpcyB3aWxsIGNhdXNlXG4gICAqIGBUcmFuc2l0aW9uR3JvdXBgIHRvIHRyYW5zaXRpb24gdGhlIGNoaWxkIG91dCBhbmQgYmFjayBpbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBhcHBlYXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBlbnRlciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZXhpdCBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogWW91IG1heSBuZWVkIHRvIGFwcGx5IHJlYWN0aXZlIHVwZGF0ZXMgdG8gYSBjaGlsZCBhcyBpdCBpcyBleGl0aW5nLlxuICAgKiBUaGlzIGlzIGdlbmVyYWxseSBkb25lIGJ5IHVzaW5nIGBjbG9uZUVsZW1lbnRgIGhvd2V2ZXIgaW4gdGhlIGNhc2Ugb2YgYW4gZXhpdGluZ1xuICAgKiBjaGlsZCB0aGUgZWxlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYW5kIG5vdCBhY2Nlc3NpYmxlIHRvIHRoZSBjb25zdW1lci5cbiAgICpcbiAgICogSWYgeW91IGRvIG5lZWQgdG8gdXBkYXRlIGEgY2hpbGQgYXMgaXQgbGVhdmVzIHlvdSBjYW4gcHJvdmlkZSBhIGBjaGlsZEZhY3RvcnlgXG4gICAqIHRvIHdyYXAgZXZlcnkgY2hpbGQsIGV2ZW4gdGhlIG9uZXMgdGhhdCBhcmUgbGVhdmluZy5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24oY2hpbGQ6IFJlYWN0RWxlbWVudCkgLT4gUmVhY3RFbGVtZW50XG4gICAqL1xuICBjaGlsZEZhY3Rvcnk6IFByb3BUeXBlcy5mdW5jXG59IDoge307XG5UcmFuc2l0aW9uR3JvdXAuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbkdyb3VwOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgdXNlQ29udGV4dCwgdXNlUmVmLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IHsgaCBhcyBoYXNPd25Qcm9wZXJ0eSwgRSBhcyBFbW90aW9uLCBjIGFzIGNyZWF0ZUVtb3Rpb25Qcm9wcywgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBUIGFzIFRoZW1lQ29udGV4dCB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTZhODgzZGE5LmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IEMgYXMgQ2FjaGVQcm92aWRlciwgVCBhcyBUaGVtZUNvbnRleHQsIGEgYXMgVGhlbWVQcm92aWRlciwgXyBhcyBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUsIHUgYXMgdXNlVGhlbWUsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgYiBhcyB3aXRoVGhlbWUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC02YTg4M2RhOS5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcbmltcG9ydCAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGdldFJlZ2lzdGVyZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgcGtnID0ge1xuXHRuYW1lOiBcIkBlbW90aW9uL3JlYWN0XCIsXG5cdHZlcnNpb246IFwiMTEuMTAuNFwiLFxuXHRtYWluOiBcImRpc3QvZW1vdGlvbi1yZWFjdC5janMuanNcIixcblx0bW9kdWxlOiBcImRpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIixcblx0YnJvd3Nlcjoge1xuXHRcdFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanNcIlxuXHR9LFxuXHRleHBvcnRzOiB7XG5cdFx0XCIuXCI6IHtcblx0XHRcdG1vZHVsZToge1xuXHRcdFx0XHR3b3JrZXI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3Qud29ya2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRicm93c2VyOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiXG5cdFx0XHR9LFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtcnVudGltZVwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vX2lzb2xhdGVkLWhucnNcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL2pzeC1kZXYtcnVudGltZVwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUud29ya2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRicm93c2VyOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9wYWNrYWdlLmpzb25cIjogXCIuL3BhY2thZ2UuanNvblwiLFxuXHRcdFwiLi90eXBlcy9jc3MtcHJvcFwiOiBcIi4vdHlwZXMvY3NzLXByb3AuZC50c1wiLFxuXHRcdFwiLi9tYWNyb1wiOiBcIi4vbWFjcm8uanNcIlxuXHR9LFxuXHR0eXBlczogXCJ0eXBlcy9pbmRleC5kLnRzXCIsXG5cdGZpbGVzOiBbXG5cdFx0XCJzcmNcIixcblx0XHRcImRpc3RcIixcblx0XHRcImpzeC1ydW50aW1lXCIsXG5cdFx0XCJqc3gtZGV2LXJ1bnRpbWVcIixcblx0XHRcIl9pc29sYXRlZC1obnJzXCIsXG5cdFx0XCJ0eXBlcy8qLmQudHNcIixcblx0XHRcIm1hY3JvLmpzXCIsXG5cdFx0XCJtYWNyby5kLnRzXCIsXG5cdFx0XCJtYWNyby5qcy5mbG93XCJcblx0XSxcblx0c2lkZUVmZmVjdHM6IGZhbHNlLFxuXHRhdXRob3I6IFwiRW1vdGlvbiBDb250cmlidXRvcnNcIixcblx0bGljZW5zZTogXCJNSVRcIixcblx0c2NyaXB0czoge1xuXHRcdFwidGVzdDp0eXBlc2NyaXB0XCI6IFwiZHRzbGludCB0eXBlc1wiXG5cdH0sXG5cdGRlcGVuZGVuY2llczoge1xuXHRcdFwiQGJhYmVsL3J1bnRpbWVcIjogXCJeNy4xOC4zXCIsXG5cdFx0XCJAZW1vdGlvbi9iYWJlbC1wbHVnaW5cIjogXCJeMTEuMTAuMFwiLFxuXHRcdFwiQGVtb3Rpb24vY2FjaGVcIjogXCJeMTEuMTAuMFwiLFxuXHRcdFwiQGVtb3Rpb24vc2VyaWFsaXplXCI6IFwiXjEuMS4wXCIsXG5cdFx0XCJAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrc1wiOiBcIl4xLjAuMFwiLFxuXHRcdFwiQGVtb3Rpb24vdXRpbHNcIjogXCJeMS4yLjBcIixcblx0XHRcIkBlbW90aW9uL3dlYWstbWVtb2l6ZVwiOiBcIl4wLjMuMFwiLFxuXHRcdFwiaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NcIjogXCJeMy4zLjFcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzOiB7XG5cdFx0XCJAYmFiZWwvY29yZVwiOiBcIl43LjAuMFwiLFxuXHRcdHJlYWN0OiBcIj49MTYuOC4wXCJcblx0fSxcblx0cGVlckRlcGVuZGVuY2llc01ldGE6IHtcblx0XHRcIkBiYWJlbC9jb3JlXCI6IHtcblx0XHRcdG9wdGlvbmFsOiB0cnVlXG5cdFx0fSxcblx0XHRcIkB0eXBlcy9yZWFjdFwiOiB7XG5cdFx0XHRvcHRpb25hbDogdHJ1ZVxuXHRcdH1cblx0fSxcblx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XCJAYmFiZWwvY29yZVwiOiBcIl43LjE4LjVcIixcblx0XHRcIkBkZWZpbml0ZWx5dHlwZWQvZHRzbGludFwiOiBcIjAuMC4xMTJcIixcblx0XHRcIkBlbW90aW9uL2Nzc1wiOiBcIjExLjEwLjBcIixcblx0XHRcIkBlbW90aW9uL2Nzcy1wcmV0dGlmaWVyXCI6IFwiMS4xLjBcIixcblx0XHRcIkBlbW90aW9uL3NlcnZlclwiOiBcIjExLjEwLjBcIixcblx0XHRcIkBlbW90aW9uL3N0eWxlZFwiOiBcIjExLjEwLjRcIixcblx0XHRcImh0bWwtdGFnLW5hbWVzXCI6IFwiXjEuMS4yXCIsXG5cdFx0cmVhY3Q6IFwiMTYuMTQuMFwiLFxuXHRcdFwic3ZnLXRhZy1uYW1lc1wiOiBcIl4xLjEuMVwiLFxuXHRcdHR5cGVzY3JpcHQ6IFwiXjQuNS41XCJcblx0fSxcblx0cmVwb3NpdG9yeTogXCJodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL3RyZWUvbWFpbi9wYWNrYWdlcy9yZWFjdFwiLFxuXHRwdWJsaXNoQ29uZmlnOiB7XG5cdFx0YWNjZXNzOiBcInB1YmxpY1wiXG5cdH0sXG5cdFwidW1kOm1haW5cIjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QudW1kLm1pbi5qc1wiLFxuXHRwcmVjb25zdHJ1Y3Q6IHtcblx0XHRlbnRyeXBvaW50czogW1xuXHRcdFx0XCIuL2luZGV4LmpzXCIsXG5cdFx0XHRcIi4vanN4LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9faXNvbGF0ZWQtaG5ycy5qc1wiXG5cdFx0XSxcblx0XHR1bWROYW1lOiBcImVtb3Rpb25SZWFjdFwiLFxuXHRcdGV4cG9ydHM6IHtcblx0XHRcdGVudkNvbmRpdGlvbnM6IFtcblx0XHRcdFx0XCJicm93c2VyXCIsXG5cdFx0XHRcdFwid29ya2VyXCJcblx0XHRcdF0sXG5cdFx0XHRleHRyYToge1xuXHRcdFx0XHRcIi4vdHlwZXMvY3NzLXByb3BcIjogXCIuL3R5cGVzL2Nzcy1wcm9wLmQudHNcIixcblx0XHRcdFx0XCIuL21hY3JvXCI6IFwiLi9tYWNyby5qc1wiXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG52YXIganN4ID0gZnVuY3Rpb24ganN4KHR5cGUsIHByb3BzKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCAnY3NzJykpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9IC8vICRGbG93Rml4TWVcblxuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50LmFwcGx5KG51bGwsIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSk7XG59O1xuXG52YXIgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gZmFsc2U7IC8vIG1haW50YWluIHBsYWNlIG92ZXIgcmVyZW5kZXJzLlxuLy8gaW5pdGlhbCByZW5kZXIgZnJvbSBicm93c2VyLCBpbnNlcnRCZWZvcmUgY29udGV4dC5zaGVldC50YWdzWzBdIG9yIGlmIGEgc3R5bGUgaGFzbid0IGJlZW4gaW5zZXJ0ZWQgdGhlcmUgeWV0LCBhcHBlbmRDaGlsZFxuLy8gaW5pdGlhbCBjbGllbnQtc2lkZSByZW5kZXIgZnJvbSBTU1IsIHVzZSBwbGFjZSBvZiBoeWRyYXRpbmcgdGFnXG5cbnZhciBHbG9iYWwgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCAmJiAoIC8vIGNoZWNrIGZvciBjbGFzc05hbWUgYXMgd2VsbCBzaW5jZSB0aGUgdXNlciBpc1xuICAvLyBwcm9iYWJseSB1c2luZyB0aGUgY3VzdG9tIGNyZWF0ZUVsZW1lbnQgd2hpY2hcbiAgLy8gbWVhbnMgaXQgd2lsbCBiZSB0dXJuZWQgaW50byBhIGNsYXNzTmFtZSBwcm9wXG4gIC8vICRGbG93Rml4TWUgSSBkb24ndCByZWFsbHkgd2FudCB0byBhZGQgaXQgdG8gdGhlIHR5cGUgc2luY2UgaXQgc2hvdWxkbid0IGJlIHVzZWRcbiAgcHJvcHMuY2xhc3NOYW1lIHx8IHByb3BzLmNzcykpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIGNzcyBwcm9wIG9uIEdsb2JhbCwgZGlkIHlvdSBtZWFuIHRvIHVzZSB0aGUgc3R5bGVzIHByb3AgaW5zdGVhZD9cIik7XG4gICAgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzdHlsZXMgPSBwcm9wcy5zdHlsZXM7XG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzdHlsZXNdLCB1bmRlZmluZWQsIHVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG4gIC8vIGJ1dCBpdCBpcyBiYXNlZCBvbiBhIGNvbnN0YW50IHRoYXQgd2lsbCBuZXZlciBjaGFuZ2UgYXQgcnVudGltZVxuICAvLyBpdCdzIGVmZmVjdGl2ZWx5IGxpa2UgaGF2aW5nIHR3byBpbXBsZW1lbnRhdGlvbnMgYW5kIHN3aXRjaGluZyB0aGVtIG91dFxuICAvLyBzbyBpdCdzIG5vdCBhY3R1YWxseSBicmVha2luZyBhbnl0aGluZ1xuXG5cbiAgdmFyIHNoZWV0UmVmID0gdXNlUmVmKCk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtleSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbFwiOyAvLyB1c2UgY2FzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8yNjc1XG5cbiAgICB2YXIgc2hlZXQgPSBuZXcgY2FjaGUuc2hlZXQuY29uc3RydWN0b3Ioe1xuICAgICAga2V5OiBrZXksXG4gICAgICBub25jZTogY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IGNhY2hlLnNoZWV0LmNvbnRhaW5lcixcbiAgICAgIHNwZWVkeTogY2FjaGUuc2hlZXQuaXNTcGVlZHlcbiAgICB9KTtcbiAgICB2YXIgcmVoeWRyYXRpbmcgPSBmYWxzZTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgR2xvYmFsLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25HbG9iYWwnO1xufVxuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG52YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICB2YXIgaW5zZXJ0YWJsZSA9IGNzcy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIHZhciBuYW1lID0gXCJhbmltYXRpb24tXCIgKyBpbnNlcnRhYmxlLm5hbWU7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhcmcuc3R5bGVzICE9PSB1bmRlZmluZWQgJiYgYXJnLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdZb3UgaGF2ZSBwYXNzZWQgc3R5bGVzIGNyZWF0ZWQgd2l0aCBgY3NzYCBmcm9tIGBAZW1vdGlvbi9yZWFjdGAgcGFja2FnZSB0byB0aGUgYGN4YC5cXG4nICsgJ2BjeGAgaXMgbWVhbnQgdG8gY29tcG9zZSBjbGFzcyBuYW1lcyAoc3RyaW5ncykgc28geW91IHNob3VsZCBjb252ZXJ0IHRob3NlIHN0eWxlcyB0byBhIGNsYXNzIG5hbWUgYnkgcGFzc2luZyB0aGVtIHRvIHRoZSBgY3NzYCByZWNlaXZlZCBmcm9tIDxDbGFzc05hbWVzLz4gY29tcG9uZW50LicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkQXJyID0gX3JlZi5zZXJpYWxpemVkQXJyO1xuICB2YXIgcnVsZXMgPSB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWFsaXplZEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJlcyA9IGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZEFycltpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgQ2xhc3NOYW1lcyA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSkge1xuICB2YXIgaGFzUmVuZGVyZWQgPSBmYWxzZTtcbiAgdmFyIHNlcmlhbGl6ZWRBcnIgPSBbXTtcblxuICB2YXIgY3NzID0gZnVuY3Rpb24gY3NzKCkge1xuICAgIGlmIChoYXNSZW5kZXJlZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NzcyBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgc2VyaWFsaXplZEFyci5wdXNoKHNlcmlhbGl6ZWQpOyAvLyByZWdpc3RyYXRpb24gaGFzIHRvIGhhcHBlbiBoZXJlIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBtaWdodCBnZXQgY29uc3VtZWQgYnkgYGN4YFxuXG4gICAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGZhbHNlKTtcbiAgICByZXR1cm4gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIH07XG5cbiAgdmFyIGN4ID0gZnVuY3Rpb24gY3goKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3ggY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVuZGVyJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKGNhY2hlLnJlZ2lzdGVyZWQsIGNzcywgY2xhc3NuYW1lcyhhcmdzKSk7XG4gIH07XG5cbiAgdmFyIGNvbnRlbnQgPSB7XG4gICAgY3NzOiBjc3MsXG4gICAgY3g6IGN4LFxuICAgIHRoZW1lOiB1c2VDb250ZXh0KFRoZW1lQ29udGV4dClcbiAgfTtcbiAgdmFyIGVsZSA9IHByb3BzLmNoaWxkcmVuKGNvbnRlbnQpO1xuICBoYXNSZW5kZXJlZCA9IHRydWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIHNlcmlhbGl6ZWRBcnI6IHNlcmlhbGl6ZWRBcnJcbiAgfSksIGVsZSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQ2xhc3NOYW1lcy5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2xhc3NOYW1lcyc7XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJzsgLy8gIzE3MjcgZm9yIHNvbWUgcmVhc29uIEplc3QgZXZhbHVhdGVzIG1vZHVsZXMgdHdpY2UgaWYgc29tZSBjb25zdW1pbmcgbW9kdWxlIGdldHMgbW9ja2VkIHdpdGggamVzdC5tb2NrXG5cbiAgdmFyIGlzSmVzdCA9IHR5cGVvZiBqZXN0ICE9PSAndW5kZWZpbmVkJztcblxuICBpZiAoaXNCcm93c2VyICYmICFpc0plc3QpIHtcbiAgICAvLyBnbG9iYWxUaGlzIGhhcyB3aWRlIGJyb3dzZXIgc3VwcG9ydCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1nbG9iYWxUaGlzLCBOb2RlLmpzIDEyIGFuZCBsYXRlclxuICAgIHZhciBnbG9iYWxDb250ZXh0ID0gLy8gJEZsb3dJZ25vcmVcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICA6IGlzQnJvd3NlciA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgICB2YXIgZ2xvYmFsS2V5ID0gXCJfX0VNT1RJT05fUkVBQ1RfXCIgKyBwa2cudmVyc2lvbi5zcGxpdCgnLicpWzBdICsgXCJfX1wiO1xuXG4gICAgaWYgKGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSkge1xuICAgICAgY29uc29sZS53YXJuKCdZb3UgYXJlIGxvYWRpbmcgQGVtb3Rpb24vcmVhY3Qgd2hlbiBpdCBpcyBhbHJlYWR5IGxvYWRlZC4gUnVubmluZyAnICsgJ211bHRpcGxlIGluc3RhbmNlcyBtYXkgY2F1c2UgcHJvYmxlbXMuIFRoaXMgY2FuIGhhcHBlbiBpZiBtdWx0aXBsZSAnICsgJ3ZlcnNpb25zIGFyZSB1c2VkLCBvciBpZiBtdWx0aXBsZSBidWlsZHMgb2YgdGhlIHNhbWUgdmVyc2lvbiBhcmUgJyArICd1c2VkLicpO1xuICAgIH1cblxuICAgIGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSA9IHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ2xhc3NOYW1lcywgR2xvYmFsLCBqc3ggYXMgY3JlYXRlRWxlbWVudCwgY3NzLCBqc3gsIGtleWZyYW1lcyB9O1xuIiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdWNoUmlwcGxlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb3VjaFJpcHBsZScsIHNsb3QpO1xufVxuY29uc3QgdG91Y2hSaXBwbGVDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVG91Y2hSaXBwbGUnLCBbJ3Jvb3QnLCAncmlwcGxlJywgJ3JpcHBsZVZpc2libGUnLCAncmlwcGxlUHVsc2F0ZScsICdjaGlsZCcsICdjaGlsZExlYXZpbmcnLCAnY2hpbGRQdWxzYXRlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG91Y2hSaXBwbGVDbGFzc2VzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjZW50ZXJcIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5sZXQgXyA9IHQgPT4gdCxcbiAgICBfdCxcbiAgICBfdDIsXG4gICAgX3QzLFxuICAgIF90NDtcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRyYW5zaXRpb25Hcm91cCB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IFJpcHBsZSBmcm9tICcuL1JpcHBsZSc7XG5pbXBvcnQgdG91Y2hSaXBwbGVDbGFzc2VzIGZyb20gJy4vdG91Y2hSaXBwbGVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBEVVJBVElPTiA9IDU1MDtcbmV4cG9ydCBjb25zdCBERUxBWV9SSVBQTEUgPSA4MDtcbmNvbnN0IGVudGVyS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QgfHwgKF90ID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgb3BhY2l0eTogMC4xO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAwLjM7XG4gIH1cbmApKTtcbmNvbnN0IGV4aXRLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDIgfHwgKF90MiA9IF9gXG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuYCkpO1xuY29uc3QgcHVsc2F0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90MyB8fCAoX3QzID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cblxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Mik7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5gKSk7XG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnLFxuICBzbG90OiAnUm9vdCdcbn0pKHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHRvcDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbn0pOyAvLyBUaGlzIGBzdHlsZWQoKWAgZnVuY3Rpb24gaW52b2tlcyBrZXlmcmFtZXMuIGBzdHlsZWQtY29tcG9uZW50c2Agb25seSBzdXBwb3J0cyBrZXlmcmFtZXNcbi8vIGluIHN0cmluZyB0ZW1wbGF0ZXMuIERvIG5vdCBjb252ZXJ0IHRoZXNlIHN0eWxlcyBpbiBKUyBvYmplY3QgYXMgaXQgd2lsbCBicmVhay5cblxuZXhwb3J0IGNvbnN0IFRvdWNoUmlwcGxlUmlwcGxlID0gc3R5bGVkKFJpcHBsZSwge1xuICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnLFxuICBzbG90OiAnUmlwcGxlJ1xufSkoX3Q0IHx8IChfdDQgPSBfYFxuICBvcGFjaXR5OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cbiAgJi4kezB9IHtcbiAgICBvcGFjaXR5OiAwLjM7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICB9XG5cbiAgJi4kezB9IHtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLyogQG5vZmxpcCAqL1xuICAgIGxlZnQ6IDBweDtcbiAgICB0b3A6IDA7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAyNTAwbXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgICBhbmltYXRpb24tZGVsYXk6IDIwMG1zO1xuICB9XG5gKSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVZpc2libGUsIGVudGVyS2V5ZnJhbWUsIERVUkFUSU9OLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVB1bHNhdGUsICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZExlYXZpbmcsIGV4aXRLZXlmcmFtZSwgRFVSQVRJT04sICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluT3V0LCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRQdWxzYXRlLCBwdWxzYXRlS2V5ZnJhbWUsICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluT3V0KTtcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqXG4gKiBUT0RPIHY1OiBNYWtlIHByaXZhdGVcbiAqL1xuXG5jb25zdCBUb3VjaFJpcHBsZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRvdWNoUmlwcGxlKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUb3VjaFJpcHBsZSdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNlbnRlcjogY2VudGVyUHJvcCA9IGZhbHNlLFxuICAgIGNsYXNzZXMgPSB7fSxcbiAgICBjbGFzc05hbWVcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IFtyaXBwbGVzLCBzZXRSaXBwbGVzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgY29uc3QgbmV4dEtleSA9IFJlYWN0LnVzZVJlZigwKTtcbiAgY29uc3QgcmlwcGxlQ2FsbGJhY2sgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQpIHtcbiAgICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQoKTtcbiAgICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW3JpcHBsZXNdKTsgLy8gVXNlZCB0byBmaWx0ZXIgb3V0IG1vdXNlIGVtdWxhdGVkIGV2ZW50cyBvbiBtb2JpbGUuXG5cbiAgY29uc3QgaWdub3JpbmdNb3VzZURvd24gPSBSZWFjdC51c2VSZWYoZmFsc2UpOyAvLyBXZSB1c2UgYSB0aW1lciBpbiBvcmRlciB0byBvbmx5IHNob3cgdGhlIHJpcHBsZXMgZm9yIHRvdWNoIFwiY2xpY2tcIiBsaWtlIGV2ZW50cy5cbiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IHRoZSByaXBwbGUgZm9yIHRvdWNoIHNjcm9sbCBldmVudHMuXG5cbiAgY29uc3Qgc3RhcnRUaW1lciA9IFJlYWN0LnVzZVJlZihudWxsKTsgLy8gVGhpcyBpcyB0aGUgaG9vayBjYWxsZWQgb25jZSB0aGUgcHJldmlvdXMgdGltZW91dCBpcyByZWFkeS5cblxuICBjb25zdCBzdGFydFRpbWVyQ29tbWl0ID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBjb250YWluZXIgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChzdGFydFRpbWVyLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgY29uc3Qgc3RhcnRDb21taXQgPSBSZWFjdC51c2VDYWxsYmFjayhwYXJhbXMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHB1bHNhdGUsXG4gICAgICByaXBwbGVYLFxuICAgICAgcmlwcGxlWSxcbiAgICAgIHJpcHBsZVNpemUsXG4gICAgICBjYlxuICAgIH0gPSBwYXJhbXM7XG4gICAgc2V0UmlwcGxlcyhvbGRSaXBwbGVzID0+IFsuLi5vbGRSaXBwbGVzLCAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJpcHBsZSwge1xuICAgICAgY2xhc3Nlczoge1xuICAgICAgICByaXBwbGU6IGNsc3goY2xhc3Nlcy5yaXBwbGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGUpLFxuICAgICAgICByaXBwbGVWaXNpYmxlOiBjbHN4KGNsYXNzZXMucmlwcGxlVmlzaWJsZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVZpc2libGUpLFxuICAgICAgICByaXBwbGVQdWxzYXRlOiBjbHN4KGNsYXNzZXMucmlwcGxlUHVsc2F0ZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVB1bHNhdGUpLFxuICAgICAgICBjaGlsZDogY2xzeChjbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGQpLFxuICAgICAgICBjaGlsZExlYXZpbmc6IGNsc3goY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZExlYXZpbmcpLFxuICAgICAgICBjaGlsZFB1bHNhdGU6IGNsc3goY2xhc3Nlcy5jaGlsZFB1bHNhdGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZFB1bHNhdGUpXG4gICAgICB9LFxuICAgICAgdGltZW91dDogRFVSQVRJT04sXG4gICAgICBwdWxzYXRlOiBwdWxzYXRlLFxuICAgICAgcmlwcGxlWDogcmlwcGxlWCxcbiAgICAgIHJpcHBsZVk6IHJpcHBsZVksXG4gICAgICByaXBwbGVTaXplOiByaXBwbGVTaXplXG4gICAgfSwgbmV4dEtleS5jdXJyZW50KV0pO1xuICAgIG5leHRLZXkuY3VycmVudCArPSAxO1xuICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBjYjtcbiAgfSwgW2NsYXNzZXNdKTtcbiAgY29uc3Qgc3RhcnQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQgPSB7fSwgb3B0aW9ucyA9IHt9LCBjYikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHB1bHNhdGUgPSBmYWxzZSxcbiAgICAgIGNlbnRlciA9IGNlbnRlclByb3AgfHwgb3B0aW9ucy5wdWxzYXRlLFxuICAgICAgZmFrZUVsZW1lbnQgPSBmYWxzZSAvLyBGb3IgdGVzdCBwdXJwb3Nlc1xuXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ21vdXNlZG93bicgJiYgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCkge1xuICAgICAgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBmYWtlRWxlbWVudCA/IG51bGwgOiBjb250YWluZXIuY3VycmVudDtcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudCA/IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDBcbiAgICB9OyAvLyBHZXQgdGhlIHNpemUgb2YgdGhlIHJpcHBsZVxuXG4gICAgbGV0IHJpcHBsZVg7XG4gICAgbGV0IHJpcHBsZVk7XG4gICAgbGV0IHJpcHBsZVNpemU7XG5cbiAgICBpZiAoY2VudGVyIHx8IGV2ZW50ID09PSB1bmRlZmluZWQgfHwgZXZlbnQuY2xpZW50WCA9PT0gMCAmJiBldmVudC5jbGllbnRZID09PSAwIHx8ICFldmVudC5jbGllbnRYICYmICFldmVudC50b3VjaGVzKSB7XG4gICAgICByaXBwbGVYID0gTWF0aC5yb3VuZChyZWN0LndpZHRoIC8gMik7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChyZWN0LmhlaWdodCAvIDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsaWVudFgsXG4gICAgICAgIGNsaWVudFlcbiAgICAgIH0gPSBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMCA/IGV2ZW50LnRvdWNoZXNbMF0gOiBldmVudDtcbiAgICAgIHJpcHBsZVggPSBNYXRoLnJvdW5kKGNsaWVudFggLSByZWN0LmxlZnQpO1xuICAgICAgcmlwcGxlWSA9IE1hdGgucm91bmQoY2xpZW50WSAtIHJlY3QudG9wKTtcbiAgICB9XG5cbiAgICBpZiAoY2VudGVyKSB7XG4gICAgICByaXBwbGVTaXplID0gTWF0aC5zcXJ0KCgyICogcmVjdC53aWR0aCAqKiAyICsgcmVjdC5oZWlnaHQgKiogMikgLyAzKTsgLy8gRm9yIHNvbWUgcmVhc29uIHRoZSBhbmltYXRpb24gaXMgYnJva2VuIG9uIE1vYmlsZSBDaHJvbWUgaWYgdGhlIHNpemUgaXMgZXZlbi5cblxuICAgICAgaWYgKHJpcHBsZVNpemUgJSAyID09PSAwKSB7XG4gICAgICAgIHJpcHBsZVNpemUgKz0gMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2l6ZVggPSBNYXRoLm1heChNYXRoLmFicygoZWxlbWVudCA/IGVsZW1lbnQuY2xpZW50V2lkdGggOiAwKSAtIHJpcHBsZVgpLCByaXBwbGVYKSAqIDIgKyAyO1xuICAgICAgY29uc3Qgc2l6ZVkgPSBNYXRoLm1heChNYXRoLmFicygoZWxlbWVudCA/IGVsZW1lbnQuY2xpZW50SGVpZ2h0IDogMCkgLSByaXBwbGVZKSwgcmlwcGxlWSkgKiAyICsgMjtcbiAgICAgIHJpcHBsZVNpemUgPSBNYXRoLnNxcnQoc2l6ZVggKiogMiArIHNpemVZICoqIDIpO1xuICAgIH0gLy8gVG91Y2hlIGRldmljZXNcblxuXG4gICAgaWYgKGV2ZW50ICE9IG51bGwgJiYgZXZlbnQudG91Y2hlcykge1xuICAgICAgLy8gY2hlY2sgdGhhdCB0aGlzIGlzbid0IGFub3RoZXIgdG91Y2hzdGFydCBkdWUgdG8gbXVsdGl0b3VjaFxuICAgICAgLy8gb3RoZXJ3aXNlIHdlIHdpbGwgb25seSBjbGVhciBhIHNpbmdsZSB0aW1lciB3aGVuIHVubW91bnRpbmcgd2hpbGUgdHdvXG4gICAgICAvLyBhcmUgcnVubmluZ1xuICAgICAgaWYgKHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBQcmVwYXJlIHRoZSByaXBwbGUgZWZmZWN0LlxuICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSAoKSA9PiB7XG4gICAgICAgICAgc3RhcnRDb21taXQoe1xuICAgICAgICAgICAgcHVsc2F0ZSxcbiAgICAgICAgICAgIHJpcHBsZVgsXG4gICAgICAgICAgICByaXBwbGVZLFxuICAgICAgICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgICAgICAgIGNiXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07IC8vIERlbGF5IHRoZSBleGVjdXRpb24gb2YgdGhlIHJpcHBsZSBlZmZlY3QuXG5cblxuICAgICAgICBzdGFydFRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBERUxBWV9SSVBQTEUpOyAvLyBXZSBoYXZlIHRvIG1ha2UgYSB0cmFkZW9mZiB3aXRoIHRoaXMgdmFsdWUuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgcHVsc2F0ZSxcbiAgICAgICAgcmlwcGxlWCxcbiAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgICAgY2JcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NlbnRlclByb3AsIHN0YXJ0Q29tbWl0XSk7XG4gIGNvbnN0IHB1bHNhdGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RhcnQoe30sIHtcbiAgICAgIHB1bHNhdGU6IHRydWVcbiAgICB9KTtcbiAgfSwgW3N0YXJ0XSk7XG4gIGNvbnN0IHN0b3AgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQsIGNiKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHN0YXJ0VGltZXIuY3VycmVudCk7IC8vIFRoZSB0b3VjaCBpbnRlcmFjdGlvbiBvY2N1cnMgdG9vIHF1aWNrbHkuXG4gICAgLy8gV2Ugc3RpbGwgd2FudCB0byBzaG93IHJpcHBsZSBlZmZlY3QuXG5cbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ3RvdWNoZW5kJyAmJiBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQpIHtcbiAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCgpO1xuICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICAgIHN0YXJ0VGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzdG9wKGV2ZW50LCBjYik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgIHNldFJpcHBsZXMob2xkUmlwcGxlcyA9PiB7XG4gICAgICBpZiAob2xkUmlwcGxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBvbGRSaXBwbGVzLnNsaWNlKDEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2xkUmlwcGxlcztcbiAgICB9KTtcbiAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gY2I7XG4gIH0sIFtdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgcHVsc2F0ZSxcbiAgICBzdGFydCxcbiAgICBzdG9wXG4gIH0pLCBbcHVsc2F0ZSwgc3RhcnQsIHN0b3BdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRvdWNoUmlwcGxlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeCh0b3VjaFJpcHBsZUNsYXNzZXMucm9vdCwgY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogY29udGFpbmVyXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Hcm91cCwge1xuICAgICAgY29tcG9uZW50OiBudWxsLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNoaWxkcmVuOiByaXBwbGVzXG4gICAgfSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUb3VjaFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgc3RhcnRzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGNvbXBvbmVudFxuICAgKiByYXRoZXIgdGhhbiBhdCB0aGUgcG9pbnQgb2YgaW50ZXJhY3Rpb24uXG4gICAqL1xuICBjZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRvdWNoUmlwcGxlOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBSaXBwbGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjbGFzc2VzLFxuICAgIHB1bHNhdGUgPSBmYWxzZSxcbiAgICByaXBwbGVYLFxuICAgIHJpcHBsZVksXG4gICAgcmlwcGxlU2l6ZSxcbiAgICBpbjogaW5Qcm9wLFxuICAgIG9uRXhpdGVkLFxuICAgIHRpbWVvdXRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbGVhdmluZywgc2V0TGVhdmluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJpcHBsZUNsYXNzTmFtZSA9IGNsc3goY2xhc3NOYW1lLCBjbGFzc2VzLnJpcHBsZSwgY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBwdWxzYXRlICYmIGNsYXNzZXMucmlwcGxlUHVsc2F0ZSk7XG4gIGNvbnN0IHJpcHBsZVN0eWxlcyA9IHtcbiAgICB3aWR0aDogcmlwcGxlU2l6ZSxcbiAgICBoZWlnaHQ6IHJpcHBsZVNpemUsXG4gICAgdG9wOiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVksXG4gICAgbGVmdDogLShyaXBwbGVTaXplIC8gMikgKyByaXBwbGVYXG4gIH07XG4gIGNvbnN0IGNoaWxkQ2xhc3NOYW1lID0gY2xzeChjbGFzc2VzLmNoaWxkLCBsZWF2aW5nICYmIGNsYXNzZXMuY2hpbGRMZWF2aW5nLCBwdWxzYXRlICYmIGNsYXNzZXMuY2hpbGRQdWxzYXRlKTtcblxuICBpZiAoIWluUHJvcCAmJiAhbGVhdmluZykge1xuICAgIHNldExlYXZpbmcodHJ1ZSk7XG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaW5Qcm9wICYmIG9uRXhpdGVkICE9IG51bGwpIHtcbiAgICAgIC8vIHJlYWN0LXRyYW5zaXRpb24tZ3JvdXAjb25FeGl0ZWRcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQob25FeGl0ZWQsIHRpbWVvdXQpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtvbkV4aXRlZCwgaW5Qcm9wLCB0aW1lb3V0XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogcmlwcGxlQ2xhc3NOYW1lLFxuICAgIHN0eWxlOiByaXBwbGVTdHlsZXMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNoaWxkQ2xhc3NOYW1lXG4gICAgfSlcbiAgfSk7XG59XG5cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlIC0gaW5qZWN0ZWQgZnJvbSBUcmFuc2l0aW9uR3JvdXBcbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQGlnbm9yZSAtIGluamVjdGVkIGZyb20gVHJhbnNpdGlvbkdyb3VwXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBwdWxzYXRlcywgdHlwaWNhbGx5IGluZGljYXRpbmcgdGhlIGtleWJvYXJkIGZvY3VzIHN0YXRlIG9mIGFuIGVsZW1lbnQuXG4gICAqL1xuICBwdWxzYXRlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRGlhbWV0ZXIgb2YgdGhlIHJpcHBsZS5cbiAgICovXG4gIHJpcHBsZVNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVYOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBWZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgcmlwcGxlIGNlbnRlci5cbiAgICovXG4gIHJpcHBsZVk6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIGV4aXQgZGVsYXlcbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJpcHBsZTsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQnV0dG9uQmFzZScsIHNsb3QpO1xufVxuY29uc3QgYnV0dG9uQmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCdXR0b25CYXNlJywgWydyb290JywgJ2Rpc2FibGVkJywgJ2ZvY3VzVmlzaWJsZSddKTtcbmV4cG9ydCBkZWZhdWx0IGJ1dHRvbkJhc2VDbGFzc2VzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25cIiwgXCJjZW50ZXJSaXBwbGVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZVJpcHBsZVwiLCBcImRpc2FibGVUb3VjaFJpcHBsZVwiLCBcImZvY3VzUmlwcGxlXCIsIFwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lXCIsIFwiTGlua0NvbXBvbmVudFwiLCBcIm9uQmx1clwiLCBcIm9uQ2xpY2tcIiwgXCJvbkNvbnRleHRNZW51XCIsIFwib25EcmFnTGVhdmVcIiwgXCJvbkZvY3VzXCIsIFwib25Gb2N1c1Zpc2libGVcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwib25Nb3VzZURvd25cIiwgXCJvbk1vdXNlTGVhdmVcIiwgXCJvbk1vdXNlVXBcIiwgXCJvblRvdWNoRW5kXCIsIFwib25Ub3VjaE1vdmVcIiwgXCJvblRvdWNoU3RhcnRcIiwgXCJ0YWJJbmRleFwiLCBcIlRvdWNoUmlwcGxlUHJvcHNcIiwgXCJ0b3VjaFJpcHBsZVJlZlwiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiwgcmVmVHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICcuLi91dGlscy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICcuLi91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgVG91Y2hSaXBwbGUgZnJvbSAnLi9Ub3VjaFJpcHBsZSc7XG5pbXBvcnQgYnV0dG9uQmFzZUNsYXNzZXMsIHsgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYnV0dG9uQmFzZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkLFxuICAgIGZvY3VzVmlzaWJsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZm9jdXNWaXNpYmxlICYmICdmb2N1c1Zpc2libGUnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG5cbiAgaWYgKGZvY3VzVmlzaWJsZSAmJiBmb2N1c1Zpc2libGVDbGFzc05hbWUpIHtcbiAgICBjb21wb3NlZENsYXNzZXMucm9vdCArPSBgICR7Zm9jdXNWaXNpYmxlQ2xhc3NOYW1lfWA7XG4gIH1cblxuICByZXR1cm4gY29tcG9zZWRDbGFzc2VzO1xufTtcblxuZXhwb3J0IGNvbnN0IEJ1dHRvbkJhc2VSb290ID0gc3R5bGVkKCdidXR0b24nLCB7XG4gIG5hbWU6ICdNdWlCdXR0b25CYXNlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgLy8gUmVzZXQgZGVmYXVsdCB2YWx1ZVxuICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICBvdXRsaW5lOiAwLFxuICBib3JkZXI6IDAsXG4gIG1hcmdpbjogMCxcbiAgLy8gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gU2FmYXJpXG4gIGJvcmRlclJhZGl1czogMCxcbiAgcGFkZGluZzogMCxcbiAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIEZpcmVmb3hcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAvLyBTbyB3ZSB0YWtlIHByZWNlZGVudCBvdmVyIHRoZSBzdHlsZSBvZiBhIG5hdGl2ZSA8YSAvPiBlbGVtZW50LlxuICBjb2xvcjogJ2luaGVyaXQnLFxuICAnJjo6LW1vei1mb2N1cy1pbm5lcic6IHtcbiAgICBib3JkZXJTdHlsZTogJ25vbmUnIC8vIFJlbW92ZSBGaXJlZm94IGRvdHRlZCBvdXRsaW5lLlxuXG4gIH0sXG4gIFtgJi4ke2J1dHRvbkJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIC8vIERpc2FibGUgbGluayBpbnRlcmFjdGlvbnNcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9LFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIGNvbG9yQWRqdXN0OiAnZXhhY3QnXG4gIH1cbn0pO1xuLyoqXG4gKiBgQnV0dG9uQmFzZWAgY29udGFpbnMgYXMgZmV3IHN0eWxlcyBhcyBwb3NzaWJsZS5cbiAqIEl0IGFpbXMgdG8gYmUgYSBzaW1wbGUgYnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgYnV0dG9uLlxuICogSXQgY29udGFpbnMgYSBsb2FkIG9mIHN0eWxlIHJlc2V0IGFuZCBzb21lIGZvY3VzL3JpcHBsZSBsb2dpYy5cbiAqL1xuXG5jb25zdCBCdXR0b25CYXNlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQnV0dG9uQmFzZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQnV0dG9uQmFzZSdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGFjdGlvbixcbiAgICBjZW50ZXJSaXBwbGUgPSBmYWxzZSxcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50ID0gJ2J1dHRvbicsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBkaXNhYmxlUmlwcGxlID0gZmFsc2UsXG4gICAgZGlzYWJsZVRvdWNoUmlwcGxlID0gZmFsc2UsXG4gICAgZm9jdXNSaXBwbGUgPSBmYWxzZSxcbiAgICBMaW5rQ29tcG9uZW50ID0gJ2EnLFxuICAgIG9uQmx1cixcbiAgICBvbkNsaWNrLFxuICAgIG9uQ29udGV4dE1lbnUsXG4gICAgb25EcmFnTGVhdmUsXG4gICAgb25Gb2N1cyxcbiAgICBvbkZvY3VzVmlzaWJsZSxcbiAgICBvbktleURvd24sXG4gICAgb25LZXlVcCxcbiAgICBvbk1vdXNlRG93bixcbiAgICBvbk1vdXNlTGVhdmUsXG4gICAgb25Nb3VzZVVwLFxuICAgIG9uVG91Y2hFbmQsXG4gICAgb25Ub3VjaE1vdmUsXG4gICAgb25Ub3VjaFN0YXJ0LFxuICAgIHRhYkluZGV4ID0gMCxcbiAgICBUb3VjaFJpcHBsZVByb3BzLFxuICAgIHRvdWNoUmlwcGxlUmVmLFxuICAgIHR5cGVcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IGJ1dHRvblJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmlwcGxlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSaXBwbGVSZWYgPSB1c2VGb3JrUmVmKHJpcHBsZVJlZiwgdG91Y2hSaXBwbGVSZWYpO1xuICBjb25zdCB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgcmVmOiBmb2N1c1Zpc2libGVSZWZcbiAgfSA9IHVzZUlzRm9jdXNWaXNpYmxlKCk7XG4gIGNvbnN0IFtmb2N1c1Zpc2libGUsIHNldEZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgaWYgKGRpc2FibGVkICYmIGZvY3VzVmlzaWJsZSkge1xuICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gIH1cblxuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbiwgKCkgPT4gKHtcbiAgICBmb2N1c1Zpc2libGU6ICgpID0+IHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGJ1dHRvblJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBbbW91bnRlZFN0YXRlLCBzZXRNb3VudGVkU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldE1vdW50ZWRTdGF0ZSh0cnVlKTtcbiAgfSwgW10pO1xuICBjb25zdCBlbmFibGVUb3VjaFJpcHBsZSA9IG1vdW50ZWRTdGF0ZSAmJiAhZGlzYWJsZVJpcHBsZSAmJiAhZGlzYWJsZWQ7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZvY3VzVmlzaWJsZSAmJiBmb2N1c1JpcHBsZSAmJiAhZGlzYWJsZVJpcHBsZSAmJiBtb3VudGVkU3RhdGUpIHtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnB1bHNhdGUoKTtcbiAgICB9XG4gIH0sIFtkaXNhYmxlUmlwcGxlLCBmb2N1c1JpcHBsZSwgZm9jdXNWaXNpYmxlLCBtb3VudGVkU3RhdGVdKTtcblxuICBmdW5jdGlvbiB1c2VSaXBwbGVIYW5kbGVyKHJpcHBsZUFjdGlvbiwgZXZlbnRDYWxsYmFjaywgc2tpcFJpcHBsZUFjdGlvbiA9IGRpc2FibGVUb3VjaFJpcHBsZSkge1xuICAgIHJldHVybiB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudENhbGxiYWNrKSB7XG4gICAgICAgIGV2ZW50Q2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpZ25vcmUgPSBza2lwUmlwcGxlQWN0aW9uO1xuXG4gICAgICBpZiAoIWlnbm9yZSAmJiByaXBwbGVSZWYuY3VycmVudCkge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudFtyaXBwbGVBY3Rpb25dKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSB1c2VSaXBwbGVIYW5kbGVyKCdzdGFydCcsIG9uTW91c2VEb3duKTtcbiAgY29uc3QgaGFuZGxlQ29udGV4dE1lbnUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Db250ZXh0TWVudSk7XG4gIGNvbnN0IGhhbmRsZURyYWdMZWF2ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbkRyYWdMZWF2ZSk7XG4gIGNvbnN0IGhhbmRsZU1vdXNlVXAgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Nb3VzZVVwKTtcbiAgY29uc3QgaGFuZGxlTW91c2VMZWF2ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBldmVudCA9PiB7XG4gICAgaWYgKGZvY3VzVmlzaWJsZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBpZiAob25Nb3VzZUxlYXZlKSB7XG4gICAgICBvbk1vdXNlTGVhdmUoZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoU3RhcnQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoRW5kID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uVG91Y2hFbmQpO1xuICBjb25zdCBoYW5kbGVUb3VjaE1vdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaE1vdmUpO1xuICBjb25zdCBoYW5kbGVCbHVyID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIGV2ZW50ID0+IHtcbiAgICBoYW5kbGVCbHVyVmlzaWJsZShldmVudCk7XG5cbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKG9uQmx1cikge1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gIH0sIGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlRm9jdXMgPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBGaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzc2OVxuICAgIGlmICghYnV0dG9uUmVmLmN1cnJlbnQpIHtcbiAgICAgIGJ1dHRvblJlZi5jdXJyZW50ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICB9XG5cbiAgICBoYW5kbGVGb2N1c1Zpc2libGUoZXZlbnQpO1xuXG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcblxuICAgICAgaWYgKG9uRm9jdXNWaXNpYmxlKSB7XG4gICAgICAgIG9uRm9jdXNWaXNpYmxlKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBpc05vbk5hdGl2ZUJ1dHRvbiA9ICgpID0+IHtcbiAgICBjb25zdCBidXR0b24gPSBidXR0b25SZWYuY3VycmVudDtcbiAgICByZXR1cm4gY29tcG9uZW50ICYmIGNvbXBvbmVudCAhPT0gJ2J1dHRvbicgJiYgIShidXR0b24udGFnTmFtZSA9PT0gJ0EnICYmIGJ1dHRvbi5ocmVmKTtcbiAgfTtcbiAgLyoqXG4gICAqIElFMTEgc2hpbSBmb3IgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQvcmVwZWF0XG4gICAqL1xuXG5cbiAgY29uc3Qga2V5ZG93blJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBDaGVjayBpZiBrZXkgaXMgYWxyZWFkeSBkb3duIHRvIGF2b2lkIHJlcGVhdHMgYmVpbmcgY291bnRlZCBhcyBtdWx0aXBsZSBhY3RpdmF0aW9uc1xuICAgIGlmIChmb2N1c1JpcHBsZSAmJiAha2V5ZG93blJlZi5jdXJyZW50ICYmIGZvY3VzVmlzaWJsZSAmJiByaXBwbGVSZWYuY3VycmVudCAmJiBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAga2V5ZG93blJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RhcnQoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfSAvLyBLZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGZvciBub24gaW50ZXJhY3RpdmUgZWxlbWVudHNcblxuXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gY2FsbGluZyBwcmV2ZW50RGVmYXVsdCBpbiBrZXlVcCBvbiBhIDxidXR0b24+IHdpbGwgbm90IGRpc3BhdGNoIGEgY2xpY2sgZXZlbnQgaWYgU3BhY2UgaXMgcHJlc3NlZFxuICAgIC8vIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy9idXR0b24ta2V5dXAtcHJldmVudGRlZmF1bHQtZG43ZjBcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZShldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob25LZXlVcCkge1xuICAgICAgb25LZXlVcChldmVudCk7XG4gICAgfSAvLyBLZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGZvciBub24gaW50ZXJhY3RpdmUgZWxlbWVudHNcblxuXG4gICAgaWYgKG9uQ2xpY2sgJiYgZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGxldCBDb21wb25lbnRQcm9wID0gY29tcG9uZW50O1xuXG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJyAmJiAob3RoZXIuaHJlZiB8fCBvdGhlci50bykpIHtcbiAgICBDb21wb25lbnRQcm9wID0gTGlua0NvbXBvbmVudDtcbiAgfVxuXG4gIGNvbnN0IGJ1dHRvblByb3BzID0ge307XG5cbiAgaWYgKENvbXBvbmVudFByb3AgPT09ICdidXR0b24nKSB7XG4gICAgYnV0dG9uUHJvcHMudHlwZSA9IHR5cGUgPT09IHVuZGVmaW5lZCA/ICdidXR0b24nIDogdHlwZTtcbiAgICBidXR0b25Qcm9wcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9IGVsc2Uge1xuICAgIGlmICghb3RoZXIuaHJlZiAmJiAhb3RoZXIudG8pIHtcbiAgICAgIGJ1dHRvblByb3BzLnJvbGUgPSAnYnV0dG9uJztcbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIGJ1dHRvblByb3BzWydhcmlhLWRpc2FibGVkJ10gPSBkaXNhYmxlZDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVPd25SZWYgPSB1c2VGb3JrUmVmKGZvY3VzVmlzaWJsZVJlZiwgYnV0dG9uUmVmKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihyZWYsIGhhbmRsZU93blJlZik7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGVuYWJsZVRvdWNoUmlwcGxlICYmICFyaXBwbGVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgYGNvbXBvbmVudGAgcHJvcCBwcm92aWRlZCB0byBCdXR0b25CYXNlIGlzIGludmFsaWQuJywgJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIGNoaWxkcmVuIHByb3AgaXMgcmVuZGVyZWQgaW4gdGhpcyBjdXN0b20gY29tcG9uZW50LiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbZW5hYmxlVG91Y2hSaXBwbGVdKTtcbiAgfVxuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjZW50ZXJSaXBwbGUsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVSaXBwbGUsXG4gICAgZGlzYWJsZVRvdWNoUmlwcGxlLFxuICAgIGZvY3VzUmlwcGxlLFxuICAgIHRhYkluZGV4LFxuICAgIGZvY3VzVmlzaWJsZVxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoQnV0dG9uQmFzZVJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogQ29tcG9uZW50UHJvcCxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgb25Db250ZXh0TWVudTogaGFuZGxlQ29udGV4dE1lbnUsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxuICAgIG9uS2V5VXA6IGhhbmRsZUtleVVwLFxuICAgIG9uTW91c2VEb3duOiBoYW5kbGVNb3VzZURvd24sXG4gICAgb25Nb3VzZUxlYXZlOiBoYW5kbGVNb3VzZUxlYXZlLFxuICAgIG9uTW91c2VVcDogaGFuZGxlTW91c2VVcCxcbiAgICBvbkRyYWdMZWF2ZTogaGFuZGxlRHJhZ0xlYXZlLFxuICAgIG9uVG91Y2hFbmQ6IGhhbmRsZVRvdWNoRW5kLFxuICAgIG9uVG91Y2hNb3ZlOiBoYW5kbGVUb3VjaE1vdmUsXG4gICAgb25Ub3VjaFN0YXJ0OiBoYW5kbGVUb3VjaFN0YXJ0LFxuICAgIHJlZjogaGFuZGxlUmVmLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IC0xIDogdGFiSW5kZXgsXG4gICAgdHlwZTogdHlwZVxuICB9LCBidXR0b25Qcm9wcywgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogW2NoaWxkcmVuLCBlbmFibGVUb3VjaFJpcHBsZSA/XG4gICAgLyojX19QVVJFX18qL1xuXG4gICAgLyogVG91Y2hSaXBwbGUgaXMgb25seSBuZWVkZWQgY2xpZW50LXNpZGUsIHgyIGJvb3N0IG9uIHRoZSBzZXJ2ZXIuICovXG4gICAgX2pzeChUb3VjaFJpcHBsZSwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVSaXBwbGVSZWYsXG4gICAgICBjZW50ZXI6IGNlbnRlclJpcHBsZVxuICAgIH0sIFRvdWNoUmlwcGxlUHJvcHMpKSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQnV0dG9uQmFzZS5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQSByZWYgZm9yIGltcGVyYXRpdmUgYWN0aW9ucy5cbiAgICogSXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgYGZvY3VzVmlzaWJsZSgpYCBhY3Rpb24uXG4gICAqL1xuICBhY3Rpb246IHJlZlR5cGUsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZXMgYXJlIGNlbnRlcmVkLlxuICAgKiBUaGV5IHdvbid0IHN0YXJ0IGF0IHRoZSBjdXJzb3IgaW50ZXJhY3Rpb24gcG9zaXRpb24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjZW50ZXJSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICpcbiAgICog4pqg77iPIFdpdGhvdXQgYSByaXBwbGUgdGhlcmUgaXMgbm8gc3R5bGluZyBmb3IgOmZvY3VzLXZpc2libGUgYnkgZGVmYXVsdC4gQmUgc3VyZVxuICAgKiB0byBoaWdobGlnaHQgdGhlIGVsZW1lbnQgYnkgYXBwbHlpbmcgc2VwYXJhdGUgc3R5bGVzIHdpdGggdGhlIGAuTXVpLWZvY3VzVmlzaWJsZWAgY2xhc3MuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdG91Y2ggcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUb3VjaFJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJhc2UgYnV0dG9uIHdpbGwgaGF2ZSBhIGtleWJvYXJkIGZvY3VzIHJpcHBsZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZvY3VzUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhpcyBwcm9wIGNhbiBoZWxwIGlkZW50aWZ5IHdoaWNoIGVsZW1lbnQgaGFzIGtleWJvYXJkIGZvY3VzLlxuICAgKiBUaGUgY2xhc3MgbmFtZSB3aWxsIGJlIGFwcGxpZWQgd2hlbiB0aGUgZWxlbWVudCBnYWlucyB0aGUgZm9jdXMgdGhyb3VnaCBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICogSXQncyBhIHBvbHlmaWxsIGZvciB0aGUgW0NTUyA6Zm9jdXMtdmlzaWJsZSBzZWxlY3Rvcl0oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3NlbGVjdG9ycy00LyN0aGUtZm9jdXMtdmlzaWJsZS1wc2V1ZG8pLlxuICAgKiBUaGUgcmF0aW9uYWxlIGZvciB1c2luZyB0aGlzIGZlYXR1cmUgW2lzIGV4cGxhaW5lZCBoZXJlXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvSEVBRC9leHBsYWluZXIubWQpLlxuICAgKiBBIFtwb2x5ZmlsbCBjYW4gYmUgdXNlZF0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZSkgdG8gYXBwbHkgYSBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgdG8gb3RoZXIgY29tcG9uZW50c1xuICAgKiBpZiBuZWVkZWQuXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGhyZWY6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5hbnksXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCB0byByZW5kZXIgYSBsaW5rIHdoZW4gdGhlIGBocmVmYCBwcm9wIGlzIHByb3ZpZGVkLlxuICAgKiBAZGVmYXVsdCAnYSdcbiAgICovXG4gIExpbmtDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ29udGV4dE1lbnU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkRyYWdMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZm9jdXNlZCB3aXRoIGEga2V5Ym9hcmQuXG4gICAqIFdlIHRyaWdnZXIgYSBgb25Gb2N1c2AgY2FsbGJhY2sgdG9vLlxuICAgKi9cbiAgb25Gb2N1c1Zpc2libGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleVVwOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlVXA6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaE1vdmU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBgVG91Y2hSaXBwbGVgIGVsZW1lbnQuXG4gICAqL1xuICBUb3VjaFJpcHBsZVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgYFRvdWNoUmlwcGxlYCBlbGVtZW50LlxuICAgKi9cbiAgdG91Y2hSaXBwbGVSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBwdWxzYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RhcnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzdG9wOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSlcbiAgfSldKSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYnV0dG9uJywgJ3Jlc2V0JywgJ3N1Ym1pdCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFzZTsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCdXR0b24nLCBzbG90KTtcbn1cbmNvbnN0IGJ1dHRvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCdXR0b24nLCBbJ3Jvb3QnLCAndGV4dCcsICd0ZXh0SW5oZXJpdCcsICd0ZXh0UHJpbWFyeScsICd0ZXh0U2Vjb25kYXJ5JywgJ3RleHRTdWNjZXNzJywgJ3RleHRFcnJvcicsICd0ZXh0SW5mbycsICd0ZXh0V2FybmluZycsICdvdXRsaW5lZCcsICdvdXRsaW5lZEluaGVyaXQnLCAnb3V0bGluZWRQcmltYXJ5JywgJ291dGxpbmVkU2Vjb25kYXJ5JywgJ291dGxpbmVkU3VjY2VzcycsICdvdXRsaW5lZEVycm9yJywgJ291dGxpbmVkSW5mbycsICdvdXRsaW5lZFdhcm5pbmcnLCAnY29udGFpbmVkJywgJ2NvbnRhaW5lZEluaGVyaXQnLCAnY29udGFpbmVkUHJpbWFyeScsICdjb250YWluZWRTZWNvbmRhcnknLCAnY29udGFpbmVkU3VjY2VzcycsICdjb250YWluZWRFcnJvcicsICdjb250YWluZWRJbmZvJywgJ2NvbnRhaW5lZFdhcm5pbmcnLCAnZGlzYWJsZUVsZXZhdGlvbicsICdmb2N1c1Zpc2libGUnLCAnZGlzYWJsZWQnLCAnY29sb3JJbmhlcml0JywgJ3RleHRTaXplU21hbGwnLCAndGV4dFNpemVNZWRpdW0nLCAndGV4dFNpemVMYXJnZScsICdvdXRsaW5lZFNpemVTbWFsbCcsICdvdXRsaW5lZFNpemVNZWRpdW0nLCAnb3V0bGluZWRTaXplTGFyZ2UnLCAnY29udGFpbmVkU2l6ZVNtYWxsJywgJ2NvbnRhaW5lZFNpemVNZWRpdW0nLCAnY29udGFpbmVkU2l6ZUxhcmdlJywgJ3NpemVNZWRpdW0nLCAnc2l6ZVNtYWxsJywgJ3NpemVMYXJnZScsICdmdWxsV2lkdGgnLCAnc3RhcnRJY29uJywgJ2VuZEljb24nLCAnaWNvblNpemVTbWFsbCcsICdpY29uU2l6ZU1lZGl1bScsICdpY29uU2l6ZUxhcmdlJ10pO1xuZXhwb3J0IGRlZmF1bHQgYnV0dG9uQ2xhc3NlczsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgQnV0dG9uR3JvdXBDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBCdXR0b25Hcm91cENvbnRleHQuZGlzcGxheU5hbWUgPSAnQnV0dG9uR3JvdXBDb250ZXh0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uR3JvdXBDb250ZXh0OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlRWxldmF0aW9uXCIsIFwiZGlzYWJsZUZvY3VzUmlwcGxlXCIsIFwiZW5kSWNvblwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcImZ1bGxXaWR0aFwiLCBcInNpemVcIiwgXCJzdGFydEljb25cIiwgXCJ0eXBlXCIsIFwidmFyaWFudFwiXSxcbiAgICAgIF9leGNsdWRlZDIgPSBbXCJyb290XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgaW50ZXJuYWxfcmVzb2x2ZVByb3BzIGFzIHJlc29sdmVQcm9wcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IEJ1dHRvbkJhc2UgZnJvbSAnLi4vQnV0dG9uQmFzZSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBidXR0b25DbGFzc2VzLCB7IGdldEJ1dHRvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYnV0dG9uQ2xhc3Nlcyc7XG5pbXBvcnQgQnV0dG9uR3JvdXBDb250ZXh0IGZyb20gJy4uL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY29sb3IsXG4gICAgZGlzYWJsZUVsZXZhdGlvbixcbiAgICBmdWxsV2lkdGgsXG4gICAgc2l6ZSxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIGAke3ZhcmlhbnR9JHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBgJHt2YXJpYW50fVNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgY29sb3IgPT09ICdpbmhlcml0JyAmJiAnY29sb3JJbmhlcml0JywgZGlzYWJsZUVsZXZhdGlvbiAmJiAnZGlzYWJsZUVsZXZhdGlvbicsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJ10sXG4gICAgbGFiZWw6IFsnbGFiZWwnXSxcbiAgICBzdGFydEljb246IFsnc3RhcnRJY29uJywgYGljb25TaXplJHtjYXBpdGFsaXplKHNpemUpfWBdLFxuICAgIGVuZEljb246IFsnZW5kSWNvbicsIGBpY29uU2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnV0dG9uVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcblxuY29uc3QgY29tbW9uSWNvblN0eWxlcyA9IG93bmVyU3RhdGUgPT4gX2V4dGVuZHMoe30sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICcmID4gKjpudGgtb2YtdHlwZSgxKSc6IHtcbiAgICBmb250U2l6ZTogMThcbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnbWVkaXVtJyAmJiB7XG4gICcmID4gKjpudGgtb2YtdHlwZSgxKSc6IHtcbiAgICBmb250U2l6ZTogMjBcbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIHtcbiAgJyYgPiAqOm50aC1vZi10eXBlKDEpJzoge1xuICAgIGZvbnRTaXplOiAyMlxuICB9XG59KTtcblxuY29uc3QgQnV0dG9uUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlCdXR0b24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIHN0eWxlc1tgJHtvd25lclN0YXRlLnZhcmlhbnR9JHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBzdHlsZXNbYHNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgc3R5bGVzW2Ake293bmVyU3RhdGUudmFyaWFudH1TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF0sIG93bmVyU3RhdGUuY29sb3IgPT09ICdpbmhlcml0JyAmJiBzdHlsZXMuY29sb3JJbmhlcml0LCBvd25lclN0YXRlLmRpc2FibGVFbGV2YXRpb24gJiYgc3R5bGVzLmRpc2FibGVFbGV2YXRpb24sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGhdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHBhbGV0dGUkZ2V0Q29uLCBfdGhlbWUkcGFsZXR0ZTtcblxuICByZXR1cm4gX2V4dGVuZHMoe30sIHRoZW1lLnR5cG9ncmFwaHkuYnV0dG9uLCB7XG4gICAgbWluV2lkdGg6IDY0LFxuICAgIHBhZGRpbmc6ICc2cHggMTZweCcsXG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZShbJ2JhY2tncm91bmQtY29sb3InLCAnYm94LXNoYWRvdycsICdib3JkZXItY29sb3InLCAnY29sb3InXSwge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0XG4gICAgfSksXG4gICAgJyY6aG92ZXInOiBfZXh0ZW5kcyh7XG4gICAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUudGV4dC5wcmltYXJ5Q2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS50ZXh0LnByaW1hcnksIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbn1gLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5ncmV5LkExMDAsXG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzRdLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1syXSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5ncmV5WzMwMF1cbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmRhcmssXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgICAgIH1cbiAgICB9KSxcbiAgICAnJjphY3RpdmUnOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzhdXG4gICAgfSksXG4gICAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbNl1cbiAgICB9KSxcbiAgICBbYCYuJHtidXR0b25DbGFzc2VzLmRpc2FibGVkfWBdOiBfZXh0ZW5kcyh7XG4gICAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmR9YFxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yID09PSAnc2Vjb25kYXJ5JyAmJiB7XG4gICAgICBib3JkZXI6IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWR9YFxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZCxcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbMF0sXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmRcbiAgICB9KVxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiB7XG4gICAgcGFkZGluZzogJzZweCA4cHgnXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnNXB4IDE1cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCBjdXJyZW50Q29sb3InXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLFxuICAgIGJvcmRlcjogdGhlbWUudmFycyA/IGAxcHggc29saWQgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAwLjUpYCA6IGAxcHggc29saWQgJHthbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIDAuNSl9YFxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICBjb2xvcjogdGhlbWUudmFycyA/IC8vIHRoaXMgaXMgc2FmZSBiZWNhdXNlIGdyZXkgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gZGVmYXVsdCBsaWdodC9kYXJrIG1vZGVcbiAgICB0aGVtZS52YXJzLnBhbGV0dGUudGV4dC5wcmltYXJ5IDogKF90aGVtZSRwYWxldHRlJGdldENvbiA9IChfdGhlbWUkcGFsZXR0ZSA9IHRoZW1lLnBhbGV0dGUpLmdldENvbnRyYXN0VGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRwYWxldHRlJGdldENvbi5jYWxsKF90aGVtZSRwYWxldHRlLCB0aGVtZS5wYWxldHRlLmdyZXlbMzAwXSksXG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5ncmV5WzMwMF0sXG4gICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1syXVxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmNvbnRyYXN0VGV4dCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnICYmIHtcbiAgICBjb2xvcjogJ2luaGVyaXQnLFxuICAgIGJvcmRlckNvbG9yOiAnY3VycmVudENvbG9yJ1xuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICAgIHBhZGRpbmc6ICc0cHggNXB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDEzKVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICAgIHBhZGRpbmc6ICc4cHggMTFweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzNweCA5cHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTMpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc3cHggMjFweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc0cHggMTBweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMylcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc4cHggMjJweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICAgIHdpZHRoOiAnMTAwJSdcbiAgfSk7XG59LCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLmRpc2FibGVFbGV2YXRpb24gJiYge1xuICBib3hTaGFkb3c6ICdub25lJyxcbiAgJyY6aG92ZXInOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9LFxuICAnJjphY3RpdmUnOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH1cbn0pO1xuY29uc3QgQnV0dG9uU3RhcnRJY29uID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpQnV0dG9uJyxcbiAgc2xvdDogJ1N0YXJ0SWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuc3RhcnRJY29uLCBzdHlsZXNbYGljb25TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmhlcml0JyxcbiAgbWFyZ2luUmlnaHQ6IDgsXG4gIG1hcmdpbkxlZnQ6IC00XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5MZWZ0OiAtMlxufSwgY29tbW9uSWNvblN0eWxlcyhvd25lclN0YXRlKSkpO1xuY29uc3QgQnV0dG9uRW5kSWNvbiA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUJ1dHRvbicsXG4gIHNsb3Q6ICdFbmRJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5lbmRJY29uLCBzdHlsZXNbYGljb25TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmhlcml0JyxcbiAgbWFyZ2luUmlnaHQ6IC00LFxuICBtYXJnaW5MZWZ0OiA4XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5SaWdodDogLTJcbn0sIGNvbW1vbkljb25TdHlsZXMob3duZXJTdGF0ZSkpKTtcbmNvbnN0IEJ1dHRvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJ1dHRvbihpblByb3BzLCByZWYpIHtcbiAgLy8gcHJvcHMgcHJpb3JpdHk6IGBpblByb3BzYCA+IGBjb250ZXh0UHJvcHNgID4gYHRoZW1lRGVmYXVsdFByb3BzYFxuICBjb25zdCBjb250ZXh0UHJvcHMgPSBSZWFjdC51c2VDb250ZXh0KEJ1dHRvbkdyb3VwQ29udGV4dCk7XG4gIGNvbnN0IHJlc29sdmVkUHJvcHMgPSByZXNvbHZlUHJvcHMoY29udGV4dFByb3BzLCBpblByb3BzKTtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogcmVzb2x2ZWRQcm9wcyxcbiAgICBuYW1lOiAnTXVpQnV0dG9uJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgY29tcG9uZW50ID0gJ2J1dHRvbicsXG4gICAgY2xhc3NOYW1lLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgZGlzYWJsZUVsZXZhdGlvbiA9IGZhbHNlLFxuICAgIGRpc2FibGVGb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgIGVuZEljb246IGVuZEljb25Qcm9wLFxuICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBzaXplID0gJ21lZGl1bScsXG4gICAgc3RhcnRJY29uOiBzdGFydEljb25Qcm9wLFxuICAgIHR5cGUsXG4gICAgdmFyaWFudCA9ICd0ZXh0J1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlRWxldmF0aW9uLFxuICAgIGRpc2FibGVGb2N1c1JpcHBsZSxcbiAgICBmdWxsV2lkdGgsXG4gICAgc2l6ZSxcbiAgICB0eXBlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgX3VzZVV0aWxpdHlDbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSksXG4gICAgICAgIHtcbiAgICByb290OiBjbGFzc2VzUm9vdFxuICB9ID0gX3VzZVV0aWxpdHlDbGFzc2VzLFxuICAgICAgICBjbGFzc2VzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3VzZVV0aWxpdHlDbGFzc2VzLCBfZXhjbHVkZWQyKTtcblxuICBjb25zdCBzdGFydEljb24gPSBzdGFydEljb25Qcm9wICYmIC8qI19fUFVSRV9fKi9fanN4KEJ1dHRvblN0YXJ0SWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5zdGFydEljb24sXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogc3RhcnRJY29uUHJvcFxuICB9KTtcblxuICBjb25zdCBlbmRJY29uID0gZW5kSWNvblByb3AgJiYgLyojX19QVVJFX18qL19qc3goQnV0dG9uRW5kSWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5lbmRJY29uLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2hpbGRyZW46IGVuZEljb25Qcm9wXG4gIH0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoQnV0dG9uUm9vdCwgX2V4dGVuZHMoe1xuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNvbnRleHRQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXNSb290LCBjbGFzc05hbWUpLFxuICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBmb2N1c1JpcHBsZTogIWRpc2FibGVGb2N1c1JpcHBsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5mb2N1c1Zpc2libGUsIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSksXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgY2hpbGRyZW46IFtzdGFydEljb24sIGNoaWxkcmVuLCBlbmRJY29uXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJ1dHRvbi5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2FkZGluZy1uZXctY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdzdWNjZXNzJywgJ2Vycm9yJywgJ2luZm8nLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIG5vIGVsZXZhdGlvbiBpcyB1c2VkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVsZXZhdGlvbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlICBrZXlib2FyZCBmb2N1cyByaXBwbGUgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRm9jdXNSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbGVtZW50IHBsYWNlZCBhZnRlciB0aGUgY2hpbGRyZW4uXG4gICAqL1xuICBlbmRJY29uOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBidXR0b24gd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgVVJMIHRvIGxpbmsgdG8gd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqIElmIGRlZmluZWQsIGFuIGBhYCBlbGVtZW50IHdpbGwgYmUgdXNlZCBhcyB0aGUgcm9vdCBub2RlLlxuICAgKi9cbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSBidXR0b24gc3R5bGluZy5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBFbGVtZW50IHBsYWNlZCBiZWZvcmUgdGhlIGNoaWxkcmVuLlxuICAgKi9cbiAgc3RhcnRJY29uOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydidXR0b24nLCAncmVzZXQnLCAnc3VibWl0J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb250YWluZWQnLCAnb3V0bGluZWQnLCAndGV4dCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvbkNoYW5nZVwiLCBcIm1heFJvd3NcIiwgXCJtaW5Sb3dzXCIsIFwic3R5bGVcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgdW5zdGFibGVfZGVib3VuY2UgYXMgZGVib3VuY2UsIHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiwgdW5zdGFibGVfdXNlRW5oYW5jZWRFZmZlY3QgYXMgdXNlRW5oYW5jZWRFZmZlY3QsIHVuc3RhYmxlX293bmVyV2luZG93IGFzIG93bmVyV2luZG93IH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBnZXRTdHlsZVZhbHVlKGNvbXB1dGVkU3R5bGUsIHByb3BlcnR5KSB7XG4gIHJldHVybiBwYXJzZUludChjb21wdXRlZFN0eWxlW3Byb3BlcnR5XSwgMTApIHx8IDA7XG59XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgc2hhZG93OiB7XG4gICAgLy8gVmlzaWJpbGl0eSBuZWVkZWQgdG8gaGlkZSB0aGUgZXh0cmEgdGV4dCBhcmVhIG9uIGlQYWRzXG4gICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgLy8gUmVtb3ZlIGZyb20gdGhlIGNvbnRlbnQgZmxvd1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIC8vIElnbm9yZSB0aGUgc2Nyb2xsYmFyIHdpZHRoXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGhlaWdodDogMCxcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICAvLyBDcmVhdGUgYSBuZXcgbGF5ZXIsIGluY3JlYXNlIHRoZSBpc29sYXRpb24gb2YgdGhlIGNvbXB1dGVkIHZhbHVlc1xuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVooMCknXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5cbmNvbnN0IFRleHRhcmVhQXV0b3NpemUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUZXh0YXJlYUF1dG9zaXplKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgIG9uQ2hhbmdlLFxuICAgIG1heFJvd3MsXG4gICAgbWluUm93cyA9IDEsXG4gICAgc3R5bGUsXG4gICAgdmFsdWVcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IHtcbiAgICBjdXJyZW50OiBpc0NvbnRyb2xsZWRcbiAgfSA9IFJlYWN0LnVzZVJlZih2YWx1ZSAhPSBudWxsKTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYocmVmLCBpbnB1dFJlZik7XG4gIGNvbnN0IHNoYWRvd1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmVuZGVycyA9IFJlYWN0LnVzZVJlZigwKTtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gIGNvbnN0IGdldFVwZGF0ZWRTdGF0ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3coaW5wdXQpO1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbnB1dCk7IC8vIElmIGlucHV0J3Mgd2lkdGggaXMgc2hydW5rIGFuZCBpdCdzIG5vdCB2aXNpYmxlLCBkb24ndCBzeW5jIGhlaWdodC5cblxuICAgIGlmIChjb21wdXRlZFN0eWxlLndpZHRoID09PSAnMHB4Jykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0U2hhbGxvdyA9IHNoYWRvd1JlZi5jdXJyZW50O1xuICAgIGlucHV0U2hhbGxvdy5zdHlsZS53aWR0aCA9IGNvbXB1dGVkU3R5bGUud2lkdGg7XG4gICAgaW5wdXRTaGFsbG93LnZhbHVlID0gaW5wdXQudmFsdWUgfHwgcHJvcHMucGxhY2Vob2xkZXIgfHwgJ3gnO1xuXG4gICAgaWYgKGlucHV0U2hhbGxvdy52YWx1ZS5zbGljZSgtMSkgPT09ICdcXG4nKSB7XG4gICAgICAvLyBDZXJ0YWluIGZvbnRzIHdoaWNoIG92ZXJmbG93IHRoZSBsaW5lIGhlaWdodCB3aWxsIGNhdXNlIHRoZSB0ZXh0YXJlYVxuICAgICAgLy8gdG8gcmVwb3J0IGEgZGlmZmVyZW50IHNjcm9sbEhlaWdodCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbGFzdCBsaW5lXG4gICAgICAvLyBpcyBlbXB0eS4gTWFrZSBpdCBub24tZW1wdHkgdG8gYXZvaWQgdGhpcyBpc3N1ZS5cbiAgICAgIGlucHV0U2hhbGxvdy52YWx1ZSArPSAnICc7XG4gICAgfVxuXG4gICAgY29uc3QgYm94U2l6aW5nID0gY29tcHV0ZWRTdHlsZVsnYm94LXNpemluZyddO1xuICAgIGNvbnN0IHBhZGRpbmcgPSBnZXRTdHlsZVZhbHVlKGNvbXB1dGVkU3R5bGUsICdwYWRkaW5nLWJvdHRvbScpICsgZ2V0U3R5bGVWYWx1ZShjb21wdXRlZFN0eWxlLCAncGFkZGluZy10b3AnKTtcbiAgICBjb25zdCBib3JkZXIgPSBnZXRTdHlsZVZhbHVlKGNvbXB1dGVkU3R5bGUsICdib3JkZXItYm90dG9tLXdpZHRoJykgKyBnZXRTdHlsZVZhbHVlKGNvbXB1dGVkU3R5bGUsICdib3JkZXItdG9wLXdpZHRoJyk7IC8vIFRoZSBoZWlnaHQgb2YgdGhlIGlubmVyIGNvbnRlbnRcblxuICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gaW5wdXRTaGFsbG93LnNjcm9sbEhlaWdodDsgLy8gTWVhc3VyZSBoZWlnaHQgb2YgYSB0ZXh0YXJlYSB3aXRoIGEgc2luZ2xlIHJvd1xuXG4gICAgaW5wdXRTaGFsbG93LnZhbHVlID0gJ3gnO1xuICAgIGNvbnN0IHNpbmdsZVJvd0hlaWdodCA9IGlucHV0U2hhbGxvdy5zY3JvbGxIZWlnaHQ7IC8vIFRoZSBoZWlnaHQgb2YgdGhlIG91dGVyIGNvbnRlbnRcblxuICAgIGxldCBvdXRlckhlaWdodCA9IGlubmVySGVpZ2h0O1xuXG4gICAgaWYgKG1pblJvd3MpIHtcbiAgICAgIG91dGVySGVpZ2h0ID0gTWF0aC5tYXgoTnVtYmVyKG1pblJvd3MpICogc2luZ2xlUm93SGVpZ2h0LCBvdXRlckhlaWdodCk7XG4gICAgfVxuXG4gICAgaWYgKG1heFJvd3MpIHtcbiAgICAgIG91dGVySGVpZ2h0ID0gTWF0aC5taW4oTnVtYmVyKG1heFJvd3MpICogc2luZ2xlUm93SGVpZ2h0LCBvdXRlckhlaWdodCk7XG4gICAgfVxuXG4gICAgb3V0ZXJIZWlnaHQgPSBNYXRoLm1heChvdXRlckhlaWdodCwgc2luZ2xlUm93SGVpZ2h0KTsgLy8gVGFrZSB0aGUgYm94IHNpemluZyBpbnRvIGFjY291bnQgZm9yIGFwcGx5aW5nIHRoaXMgdmFsdWUgYXMgYSBzdHlsZS5cblxuICAgIGNvbnN0IG91dGVySGVpZ2h0U3R5bGUgPSBvdXRlckhlaWdodCArIChib3hTaXppbmcgPT09ICdib3JkZXItYm94JyA/IHBhZGRpbmcgKyBib3JkZXIgOiAwKTtcbiAgICBjb25zdCBvdmVyZmxvdyA9IE1hdGguYWJzKG91dGVySGVpZ2h0IC0gaW5uZXJIZWlnaHQpIDw9IDE7XG4gICAgcmV0dXJuIHtcbiAgICAgIG91dGVySGVpZ2h0U3R5bGUsXG4gICAgICBvdmVyZmxvd1xuICAgIH07XG4gIH0sIFttYXhSb3dzLCBtaW5Sb3dzLCBwcm9wcy5wbGFjZWhvbGRlcl0pO1xuXG4gIGNvbnN0IHVwZGF0ZVN0YXRlID0gKHByZXZTdGF0ZSwgbmV3U3RhdGUpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvdXRlckhlaWdodFN0eWxlLFxuICAgICAgb3ZlcmZsb3dcbiAgICB9ID0gbmV3U3RhdGU7IC8vIE5lZWQgYSBsYXJnZSBlbm91Z2ggZGlmZmVyZW5jZSB0byB1cGRhdGUgdGhlIGhlaWdodC5cbiAgICAvLyBUaGlzIHByZXZlbnRzIGluZmluaXRlIHJlbmRlcmluZyBsb29wLlxuXG4gICAgaWYgKHJlbmRlcnMuY3VycmVudCA8IDIwICYmIChvdXRlckhlaWdodFN0eWxlID4gMCAmJiBNYXRoLmFicygocHJldlN0YXRlLm91dGVySGVpZ2h0U3R5bGUgfHwgMCkgLSBvdXRlckhlaWdodFN0eWxlKSA+IDEgfHwgcHJldlN0YXRlLm92ZXJmbG93ICE9PSBvdmVyZmxvdykpIHtcbiAgICAgIHJlbmRlcnMuY3VycmVudCArPSAxO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3ZlcmZsb3csXG4gICAgICAgIG91dGVySGVpZ2h0U3R5bGVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChyZW5kZXJzLmN1cnJlbnQgPT09IDIwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRvbyBtYW55IHJlLXJlbmRlcnMuIFRoZSBsYXlvdXQgaXMgdW5zdGFibGUuJywgJ1RleHRhcmVhQXV0b3NpemUgbGltaXRzIHRoZSBudW1iZXIgb2YgcmVuZGVycyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmV2U3RhdGU7XG4gIH07XG5cbiAgY29uc3Qgc3luY0hlaWdodCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IGdldFVwZGF0ZWRTdGF0ZSgpO1xuXG4gICAgaWYgKGlzRW1wdHkobmV3U3RhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShwcmV2U3RhdGUsIG5ld1N0YXRlKTtcbiAgICB9KTtcbiAgfSwgW2dldFVwZGF0ZWRTdGF0ZV0pO1xuXG4gIGNvbnN0IHN5bmNIZWlnaHRXaXRoRmx1c2hTeWNuID0gKCkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0gZ2V0VXBkYXRlZFN0YXRlKCk7XG5cbiAgICBpZiAoaXNFbXB0eShuZXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIFJlYWN0IDE4LCBzdGF0ZSB1cGRhdGVzIGluIGEgUmVzaXplT2JzZXJ2ZXIncyBjYWxsYmFjayBhcmUgaGFwcGVuaW5nIGFmdGVyIHRoZSBwYWludCB3aGljaCBjYXVzZXMgZmxpY2tlcmluZ1xuICAgIC8vIHdoZW4gZG9pbmcgc29tZSB2aXN1YWwgdXBkYXRlcyBpbiBpdC4gVXNpbmcgZmx1c2hTeW5jIGVuc3VyZXMgdGhhdCB0aGUgZG9tIHdpbGwgYmUgcGFpbnRlZCBhZnRlciB0aGUgc3RhdGVzIHVwZGF0ZXMgaGFwcGVuXG4gICAgLy8gUmVsYXRlZCBpc3N1ZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMjQzMzFcblxuXG4gICAgZmx1c2hTeW5jKCgpID0+IHtcbiAgICAgIHNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShwcmV2U3RhdGUsIG5ld1N0YXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlUmVzaXplID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgcmVuZGVycy5jdXJyZW50ID0gMDsgLy8gSWYgdGhlIFRleHRhcmVhQXV0b3NpemUgY29tcG9uZW50IGlzIHJlcGxhY2VkIGJ5IFN1c3BlbnNlIHdpdGggYSBmYWxsYmFjaywgdGhlIGxhc3RcbiAgICAgIC8vIFJlc2l6ZU9ic2VydmVyJ3MgaGFuZGxlciB0aGF0IHJ1bnMgYmVjYXVzZSBvZiB0aGUgY2hhbmdlIGluIHRoZSBsYXlvdXQgaXMgdHJ5aW5nIHRvXG4gICAgICAvLyBhY2Nlc3MgYSBkb20gbm9kZSB0aGF0IGlzIG5vIGxvbmdlciB0aGVyZSAoYXMgdGhlIGZhbGxiYWNrIGNvbXBvbmVudCBpcyBiZWluZyBzaG93biBpbnN0ZWFkKS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8zMjY0MFxuICAgICAgLy8gVE9ETzogQWRkIHRlc3RzIHRoYXQgd2lsbCBlbnN1cmUgdGhlIGNvbXBvbmVudCBpcyBub3QgZmFpbGluZyB3aGVuXG4gICAgICAvLyByZXBsYWNlZCBieSBTdXNwZW5zZSB3aXRoIGEgZmFsbGJhY2ssIG9uY2UgUmVhY3QgaXMgdXBkYXRlZCB0byB2ZXJzaW9uIDE4XG5cbiAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHN5bmNIZWlnaHRXaXRoRmx1c2hTeWNuKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3coaW5wdXRSZWYuY3VycmVudCk7XG4gICAgY29udGFpbmVyV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgbGV0IHJlc2l6ZU9ic2VydmVyO1xuXG4gICAgaWYgKHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGhhbmRsZVJlc2l6ZSk7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGlucHV0UmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBoYW5kbGVSZXNpemUuY2xlYXIoKTtcbiAgICAgIGNvbnRhaW5lcldpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuXG4gICAgICBpZiAocmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgc3luY0hlaWdodCgpO1xuICB9KTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZW5kZXJzLmN1cnJlbnQgPSAwO1xuICB9LCBbdmFsdWVdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSBldmVudCA9PiB7XG4gICAgcmVuZGVycy5jdXJyZW50ID0gMDtcblxuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBzeW5jSGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFwidGV4dGFyZWFcIiwgX2V4dGVuZHMoe1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICAgIHJlZjogaGFuZGxlUmVmIC8vIEFwcGx5IHRoZSByb3dzIHByb3AgdG8gZ2V0IGEgXCJjb3JyZWN0XCIgZmlyc3QgU1NSIHBhaW50XG4gICAgICAsXG4gICAgICByb3dzOiBtaW5Sb3dzLFxuICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgaGVpZ2h0OiBzdGF0ZS5vdXRlckhlaWdodFN0eWxlLFxuICAgICAgICAvLyBOZWVkIGEgbGFyZ2UgZW5vdWdoIGRpZmZlcmVuY2UgdG8gYWxsb3cgc2Nyb2xsaW5nLlxuICAgICAgICAvLyBUaGlzIHByZXZlbnRzIGluZmluaXRlIHJlbmRlcmluZyBsb29wLlxuICAgICAgICBvdmVyZmxvdzogc3RhdGUub3ZlcmZsb3cgPyAnaGlkZGVuJyA6IG51bGxcbiAgICAgIH0sIHN0eWxlKVxuICAgIH0sIG90aGVyKSksIC8qI19fUFVSRV9fKi9fanN4KFwidGV4dGFyZWFcIiwge1xuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsXG4gICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgIHJlZjogc2hhZG93UmVmLFxuICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgc3R5bGU6IF9leHRlbmRzKHt9LCBzdHlsZXMuc2hhZG93LCBzdHlsZSwge1xuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICB9KVxuICAgIH0pXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGV4dGFyZWFBdXRvc2l6ZS5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheS5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUZXh0YXJlYUF1dG9zaXplOyIsIi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIGVsZW1lbnQgaXMgYSBET00gZWxlbWVudCBuYW1lIChpLmUuIG5vdCBhIFJlYWN0IGNvbXBvbmVudCkuXG4gKi9cbmZ1bmN0aW9uIGlzSG9zdENvbXBvbmVudChlbGVtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSG9zdENvbXBvbmVudDsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtQ29udHJvbFN0YXRlKHtcbiAgcHJvcHMsXG4gIHN0YXRlcyxcbiAgbXVpRm9ybUNvbnRyb2xcbn0pIHtcbiAgcmV0dXJuIHN0YXRlcy5yZWR1Y2UoKGFjYywgc3RhdGUpID0+IHtcbiAgICBhY2Nbc3RhdGVdID0gcHJvcHNbc3RhdGVdO1xuXG4gICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzW3N0YXRlXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgYWNjW3N0YXRlXSA9IG11aUZvcm1Db250cm9sW3N0YXRlXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5cbmNvbnN0IEZvcm1Db250cm9sQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEZvcm1Db250cm9sQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdGb3JtQ29udHJvbENvbnRleHQnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbENvbnRleHQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JtQ29udHJvbCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoRm9ybUNvbnRyb2xDb250ZXh0KTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBzdHlsZXMsXG4gICAgZGVmYXVsdFRoZW1lID0ge31cbiAgfSA9IHByb3BzO1xuICBjb25zdCBnbG9iYWxTdHlsZXMgPSB0eXBlb2Ygc3R5bGVzID09PSAnZnVuY3Rpb24nID8gdGhlbWVJbnB1dCA9PiBzdHlsZXMoaXNFbXB0eSh0aGVtZUlucHV0KSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lSW5wdXQpIDogc3R5bGVzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzID0ge1xuICBkZWZhdWx0VGhlbWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKVxufSA6IHZvaWQgMDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBHbG9iYWxTdHlsZXMgYXMgU3lzdGVtR2xvYmFsU3R5bGVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuLi9zdHlsZXMvZGVmYXVsdFRoZW1lJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmZ1bmN0aW9uIEdsb2JhbFN0eWxlcyhwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3lzdGVtR2xvYmFsU3R5bGVzLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkZWZhdWx0VGhlbWU6IGRlZmF1bHRUaGVtZVxuICB9KSk7XG59XG5cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdsb2JhbFN0eWxlcy5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIHN0eWxlcyB5b3Ugd2FudCB0byBhcHBseSBnbG9iYWxseS5cbiAgICovXG4gIHN0eWxlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgX19lbW90aW9uX3N0eWxlczogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG4gIH0pLCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuYm9vbF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgR2xvYmFsU3R5bGVzOyIsIi8vIFN1cHBvcnRzIGRldGVybWluYXRpb24gb2YgaXNDb250cm9sbGVkKCkuXG4vLyBDb250cm9sbGVkIGlucHV0IGFjY2VwdHMgaXRzIGN1cnJlbnQgdmFsdWUgYXMgYSBwcm9wLlxuLy9cbi8vIEBzZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9mb3Jtcy5odG1sI2NvbnRyb2xsZWQtY29tcG9uZW50c1xuLy8gQHBhcmFtIHZhbHVlXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBzdHJpbmcgKGluY2x1ZGluZyAnJykgb3IgbnVtYmVyIChpbmNsdWRpbmcgemVybylcbmV4cG9ydCBmdW5jdGlvbiBoYXNWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAhKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCk7XG59IC8vIERldGVybWluZSBpZiBmaWVsZCBpcyBlbXB0eSBvciBmaWxsZWQuXG4vLyBSZXNwb25zZSBkZXRlcm1pbmVzIGlmIGxhYmVsIGlzIHByZXNlbnRlZCBhYm92ZSBmaWVsZCBvciBhcyBwbGFjZWhvbGRlci5cbi8vXG4vLyBAcGFyYW0gb2JqXG4vLyBAcGFyYW0gU1NSXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gRmFsc2Ugd2hlbiBub3QgcHJlc2VudCBvciBlbXB0eSBzdHJpbmcuXG4vLyAgICAgICAgICAgICAgICAgICAgVHJ1ZSB3aGVuIGFueSBudW1iZXIgb3Igc3RyaW5nIHdpdGggbGVuZ3RoLlxuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxsZWQob2JqLCBTU1IgPSBmYWxzZSkge1xuICByZXR1cm4gb2JqICYmIChoYXNWYWx1ZShvYmoudmFsdWUpICYmIG9iai52YWx1ZSAhPT0gJycgfHwgU1NSICYmIGhhc1ZhbHVlKG9iai5kZWZhdWx0VmFsdWUpICYmIG9iai5kZWZhdWx0VmFsdWUgIT09ICcnKTtcbn0gLy8gRGV0ZXJtaW5lIGlmIGFuIElucHV0IGlzIGFkb3JuZWQgb24gc3RhcnQuXG4vLyBJdCdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxlZnQgd2l0aCBMVFIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm8gYWRvcm5tZW50cy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYWRvcm5lZCBhdCB0aGUgc3RhcnQuXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fkb3JuZWRTdGFydChvYmopIHtcbiAgcmV0dXJuIG9iai5zdGFydEFkb3JubWVudDtcbn0iLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dEJhc2UnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0QmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJbnB1dEJhc2UnLCBbJ3Jvb3QnLCAnZm9ybUNvbnRyb2wnLCAnZm9jdXNlZCcsICdkaXNhYmxlZCcsICdhZG9ybmVkU3RhcnQnLCAnYWRvcm5lZEVuZCcsICdlcnJvcicsICdzaXplU21hbGwnLCAnbXVsdGlsaW5lJywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2Z1bGxXaWR0aCcsICdoaWRkZW5MYWJlbCcsICdyZWFkT25seScsICdpbnB1dCcsICdpbnB1dFNpemVTbWFsbCcsICdpbnB1dE11bHRpbGluZScsICdpbnB1dFR5cGVTZWFyY2gnLCAnaW5wdXRBZG9ybmVkU3RhcnQnLCAnaW5wdXRBZG9ybmVkRW5kJywgJ2lucHV0SGlkZGVuTGFiZWwnXSk7XG5leHBvcnQgZGVmYXVsdCBpbnB1dEJhc2VDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBmb3JtYXRNdWlFcnJvck1lc3NhZ2UgYXMgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSB9IGZyb20gXCJAbXVpL3V0aWxzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzXCIsIFwiZW5kQWRvcm5tZW50XCIsIFwiZXJyb3JcIiwgXCJmdWxsV2lkdGhcIiwgXCJpZFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwiaW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibWFyZ2luXCIsIFwibWF4Um93c1wiLCBcIm1pblJvd3NcIiwgXCJtdWx0aWxpbmVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNsaWNrXCIsIFwib25Gb2N1c1wiLCBcIm9uS2V5RG93blwiLCBcIm9uS2V5VXBcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlYWRPbmx5XCIsIFwicmVuZGVyU3VmZml4XCIsIFwicm93c1wiLCBcInNpemVcIiwgXCJzdGFydEFkb3JubWVudFwiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHJlZlR5cGUsIGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcywgaXNIb3N0Q29tcG9uZW50LCBUZXh0YXJlYUF1dG9zaXplIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuLi9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCBHbG9iYWxTdHlsZXMgZnJvbSAnLi4vR2xvYmFsU3R5bGVzJztcbmltcG9ydCB7IGlzRmlsbGVkIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgaW5wdXRCYXNlQ2xhc3NlcywgeyBnZXRJbnB1dEJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2lucHV0QmFzZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCByb290T3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZm9ybUNvbnRyb2wgJiYgc3R5bGVzLmZvcm1Db250cm9sLCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHN0eWxlcy5hZG9ybmVkU3RhcnQsIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHN0eWxlcy5hZG9ybmVkRW5kLCBvd25lclN0YXRlLmVycm9yICYmIHN0eWxlcy5lcnJvciwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHN0eWxlcy5zaXplU21hbGwsIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHN0eWxlcy5tdWx0aWxpbmUsIG93bmVyU3RhdGUuY29sb3IgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aCwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBzdHlsZXMuaGlkZGVuTGFiZWxdO1xufTtcbmV4cG9ydCBjb25zdCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5pbnB1dCwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHN0eWxlcy5pbnB1dFNpemVTbWFsbCwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgc3R5bGVzLmlucHV0TXVsdGlsaW5lLCBvd25lclN0YXRlLnR5cGUgPT09ICdzZWFyY2gnICYmIHN0eWxlcy5pbnB1dFR5cGVTZWFyY2gsIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYgc3R5bGVzLmlucHV0QWRvcm5lZFN0YXJ0LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiBzdHlsZXMuaW5wdXRBZG9ybmVkRW5kLCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHN0eWxlcy5pbnB1dEhpZGRlbkxhYmVsXTtcbn07XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGVuZEFkb3JubWVudCxcbiAgICBmb2N1c2VkLFxuICAgIGZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbCxcbiAgICBtdWx0aWxpbmUsXG4gICAgcmVhZE9ubHksXG4gICAgc2l6ZSxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJywgZm9jdXNlZCAmJiAnZm9jdXNlZCcsIGZvcm1Db250cm9sICYmICdmb3JtQ29udHJvbCcsIHNpemUgPT09ICdzbWFsbCcgJiYgJ3NpemVTbWFsbCcsIG11bHRpbGluZSAmJiAnbXVsdGlsaW5lJywgc3RhcnRBZG9ybm1lbnQgJiYgJ2Fkb3JuZWRTdGFydCcsIGVuZEFkb3JubWVudCAmJiAnYWRvcm5lZEVuZCcsIGhpZGRlbkxhYmVsICYmICdoaWRkZW5MYWJlbCcsIHJlYWRPbmx5ICYmICdyZWFkT25seSddLFxuICAgIGlucHV0OiBbJ2lucHV0JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgdHlwZSA9PT0gJ3NlYXJjaCcgJiYgJ2lucHV0VHlwZVNlYXJjaCcsIG11bHRpbGluZSAmJiAnaW5wdXRNdWx0aWxpbmUnLCBzaXplID09PSAnc21hbGwnICYmICdpbnB1dFNpemVTbWFsbCcsIGhpZGRlbkxhYmVsICYmICdpbnB1dEhpZGRlbkxhYmVsJywgc3RhcnRBZG9ybm1lbnQgJiYgJ2lucHV0QWRvcm5lZFN0YXJ0JywgZW5kQWRvcm5tZW50ICYmICdpbnB1dEFkb3JuZWRFbmQnLCByZWFkT25seSAmJiAncmVhZE9ubHknXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0QmFzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5leHBvcnQgY29uc3QgSW5wdXRCYXNlUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpSW5wdXRCYXNlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogcm9vdE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe30sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeSxcbiAgbGluZUhlaWdodDogJzEuNDM3NWVtJyxcbiAgLy8gMjNweFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgLy8gUHJldmVudCBwYWRkaW5nIGlzc3VlIHdpdGggZnVsbFdpZHRoLlxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgY3Vyc29yOiAndGV4dCcsXG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBbYCYuJHtpbnB1dEJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWQsXG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfVxufSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICBwYWRkaW5nOiAnNHB4IDAgNXB4J1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZ1RvcDogMVxufSksIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHtcbiAgd2lkdGg6ICcxMDAlJ1xufSkpO1xuZXhwb3J0IGNvbnN0IElucHV0QmFzZUNvbXBvbmVudCA9IHN0eWxlZCgnaW5wdXQnLCB7XG4gIG5hbWU6ICdNdWlJbnB1dEJhc2UnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG5cbiAgY29uc3QgcGxhY2Vob2xkZXIgPSBfZXh0ZW5kcyh7XG4gICAgY29sb3I6ICdjdXJyZW50Q29sb3InXG4gIH0sIHRoZW1lLnZhcnMgPyB7XG4gICAgb3BhY2l0eTogdGhlbWUudmFycy5vcGFjaXR5LmlucHV0UGxhY2Vob2xkZXJcbiAgfSA6IHtcbiAgICBvcGFjaXR5OiBsaWdodCA/IDAuNDIgOiAwLjVcbiAgfSwge1xuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHtcbiAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgfSlcbiAgfSk7XG5cbiAgY29uc3QgcGxhY2Vob2xkZXJIaWRkZW4gPSB7XG4gICAgb3BhY2l0eTogJzAgIWltcG9ydGFudCdcbiAgfTtcbiAgY29uc3QgcGxhY2Vob2xkZXJWaXNpYmxlID0gdGhlbWUudmFycyA/IHtcbiAgICBvcGFjaXR5OiB0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRQbGFjZWhvbGRlclxuICB9IDoge1xuICAgIG9wYWNpdHk6IGxpZ2h0ID8gMC40MiA6IDAuNVxuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGZvbnQ6ICdpbmhlcml0JyxcbiAgICBsZXR0ZXJTcGFjaW5nOiAnaW5oZXJpdCcsXG4gICAgY29sb3I6ICdjdXJyZW50Q29sb3InLFxuICAgIHBhZGRpbmc6ICc0cHggMCA1cHgnLFxuICAgIGJvcmRlcjogMCxcbiAgICBib3hTaXppbmc6ICdjb250ZW50LWJveCcsXG4gICAgYmFja2dyb3VuZDogJ25vbmUnLFxuICAgIGhlaWdodDogJzEuNDM3NWVtJyxcbiAgICAvLyBSZXNldCAyM3B4dGhlIG5hdGl2ZSBpbnB1dCBsaW5lLWhlaWdodFxuICAgIG1hcmdpbjogMCxcbiAgICAvLyBSZXNldCBmb3IgU2FmYXJpXG4gICAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAvLyBNYWtlIHRoZSBmbGV4IGl0ZW0gc2hyaW5rIHdpdGggRmlyZWZveFxuICAgIG1pbldpZHRoOiAwLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgLy8gRml4IElFMTEgd2lkdGggaXNzdWVcbiAgICBhbmltYXRpb25OYW1lOiAnbXVpLWF1dG8tZmlsbC1jYW5jZWwnLFxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMTBtcycsXG4gICAgJyY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAnJjo6LW1vei1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgIC8vIEZpcmVmb3ggMTkrXG4gICAgJyY6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgLy8gSUUxMVxuICAgICcmOjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAvLyBFZGdlXG4gICAgJyY6Zm9jdXMnOiB7XG4gICAgICBvdXRsaW5lOiAwXG4gICAgfSxcbiAgICAvLyBSZXNldCBGaXJlZm94IGludmFsaWQgcmVxdWlyZWQgaW5wdXQgc3R5bGVcbiAgICAnJjppbnZhbGlkJzoge1xuICAgICAgYm94U2hhZG93OiAnbm9uZSdcbiAgICB9LFxuICAgICcmOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uJzoge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIHdoZW4gdHlwZT1zZWFyY2guXG4gICAgICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZSdcbiAgICB9LFxuICAgIC8vIFNob3cgYW5kIGhpZGUgdGhlIHBsYWNlaG9sZGVyIGxvZ2ljXG4gICAgW2BsYWJlbFtkYXRhLXNocmluaz1mYWxzZV0gKyAuJHtpbnB1dEJhc2VDbGFzc2VzLmZvcm1Db250cm9sfSAmYF06IHtcbiAgICAgICcmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAnJjo6LW1vei1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgLy8gRmlyZWZveCAxOStcbiAgICAgICcmOi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgLy8gSUUxMVxuICAgICAgJyY6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgLy8gRWRnZVxuICAgICAgJyY6Zm9jdXM6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUsXG4gICAgICAnJjpmb2N1czo6LW1vei1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSxcbiAgICAgIC8vIEZpcmVmb3ggMTkrXG4gICAgICAnJjpmb2N1czotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUsXG4gICAgICAvLyBJRTExXG4gICAgICAnJjpmb2N1czo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlIC8vIEVkZ2VcblxuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRCYXNlQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgICAgb3BhY2l0eTogMSxcbiAgICAgIC8vIFJlc2V0IGlPUyBvcGFjaXR5XG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkIC8vIEZpeCBvcGFjaXR5IFNhZmFyaSBidWdcblxuICAgIH0sXG4gICAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnNTAwMHMnLFxuICAgICAgYW5pbWF0aW9uTmFtZTogJ211aS1hdXRvLWZpbGwnXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmdUb3A6IDFcbiAgfSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYge1xuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIHJlc2l6ZTogJ25vbmUnLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgcGFkZGluZ1RvcDogMFxuICB9LCBvd25lclN0YXRlLnR5cGUgPT09ICdzZWFyY2gnICYmIHtcbiAgICAvLyBJbXByb3ZlIHR5cGUgc2VhcmNoIHN0eWxlLlxuICAgIE1vekFwcGVhcmFuY2U6ICd0ZXh0ZmllbGQnXG4gIH0pO1xufSk7XG5cbmNvbnN0IGlucHV0R2xvYmFsU3R5bGVzID0gLyojX19QVVJFX18qL19qc3goR2xvYmFsU3R5bGVzLCB7XG4gIHN0eWxlczoge1xuICAgICdAa2V5ZnJhbWVzIG11aS1hdXRvLWZpbGwnOiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgIH1cbiAgICB9LFxuICAgICdAa2V5ZnJhbWVzIG11aS1hdXRvLWZpbGwtY2FuY2VsJzoge1xuICAgICAgZnJvbToge1xuICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8qKlxuICogYElucHV0QmFzZWAgY29udGFpbnMgYXMgZmV3IHN0eWxlcyBhcyBwb3NzaWJsZS5cbiAqIEl0IGFpbXMgdG8gYmUgYSBzaW1wbGUgYnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGFuIGlucHV0LlxuICogSXQgY29udGFpbnMgYSBsb2FkIG9mIHN0eWxlIHJlc2V0IGFuZCBzb21lIHN0YXRlIGxvZ2ljLlxuICovXG5cblxuY29uc3QgSW5wdXRCYXNlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gSW5wdXRCYXNlKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlJbnB1dEJhc2UnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICAnYXJpYS1kZXNjcmliZWRieSc6IGFyaWFEZXNjcmliZWRieSxcbiAgICBhdXRvQ29tcGxldGUsXG4gICAgYXV0b0ZvY3VzLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnRzID0ge30sXG4gICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgZGVmYXVsdFZhbHVlLFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXMsXG4gICAgZW5kQWRvcm5tZW50LFxuICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgIGlkLFxuICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICBpbnB1dFByb3BzOiBpbnB1dFByb3BzUHJvcCA9IHt9LFxuICAgIGlucHV0UmVmOiBpbnB1dFJlZlByb3AsXG4gICAgbWF4Um93cyxcbiAgICBtaW5Sb3dzLFxuICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgIG5hbWUsXG4gICAgb25CbHVyLFxuICAgIG9uQ2hhbmdlLFxuICAgIG9uQ2xpY2ssXG4gICAgb25Gb2N1cyxcbiAgICBvbktleURvd24sXG4gICAgb25LZXlVcCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICByZWFkT25seSxcbiAgICByZW5kZXJTdWZmaXgsXG4gICAgcm93cyxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlID0gJ3RleHQnLFxuICAgIHZhbHVlOiB2YWx1ZVByb3BcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IHZhbHVlID0gaW5wdXRQcm9wc1Byb3AudmFsdWUgIT0gbnVsbCA/IGlucHV0UHJvcHNQcm9wLnZhbHVlIDogdmFsdWVQcm9wO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYodmFsdWUgIT0gbnVsbCk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmV2FybmluZyA9IFJlYWN0LnVzZUNhbGxiYWNrKGluc3RhbmNlID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLm5vZGVOYW1lICE9PSAnSU5QVVQnICYmICFpbnN0YW5jZS5mb2N1cykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhIGBpbnB1dENvbXBvbmVudGAgdG8gdGhlIGlucHV0IGNvbXBvbmVudCcsICd0aGF0IGRvZXMgbm90IGNvcnJlY3RseSBoYW5kbGUgdGhlIGByZWZgIHByb3AuJywgJ01ha2Ugc3VyZSB0aGUgYHJlZmAgcHJvcCBpcyBjYWxsZWQgd2l0aCBhIEhUTUxJbnB1dEVsZW1lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVJbnB1dFByb3BzUmVmUHJvcCA9IHVzZUZvcmtSZWYoaW5wdXRQcm9wc1Byb3AucmVmLCBoYW5kbGVJbnB1dFJlZldhcm5pbmcpO1xuICBjb25zdCBoYW5kbGVJbnB1dFJlZlByb3AgPSB1c2VGb3JrUmVmKGlucHV0UmVmUHJvcCwgaGFuZGxlSW5wdXRQcm9wc1JlZlByb3ApO1xuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoaW5wdXRSZWYsIGhhbmRsZUlucHV0UmVmUHJvcCk7XG4gIGNvbnN0IFtmb2N1c2VkLCBzZXRGb2N1c2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgICByZXR1cm4gbXVpRm9ybUNvbnRyb2wucmVnaXN0ZXJFZmZlY3QoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LCBbbXVpRm9ybUNvbnRyb2xdKTtcbiAgfVxuXG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydjb2xvcicsICdkaXNhYmxlZCcsICdlcnJvcicsICdoaWRkZW5MYWJlbCcsICdzaXplJywgJ3JlcXVpcmVkJywgJ2ZpbGxlZCddXG4gIH0pO1xuICBmY3MuZm9jdXNlZCA9IG11aUZvcm1Db250cm9sID8gbXVpRm9ybUNvbnRyb2wuZm9jdXNlZCA6IGZvY3VzZWQ7IC8vIFRoZSBibHVyIHdvbid0IGZpcmUgd2hlbiB0aGUgZGlzYWJsZWQgc3RhdGUgaXMgc2V0IG9uIGEgZm9jdXNlZCBpbnB1dC5cbiAgLy8gV2UgbmVlZCB0byBib29rIGtlZXAgdGhlIGZvY3VzZWQgc3RhdGUgbWFudWFsbHkuXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW11aUZvcm1Db250cm9sICYmIGRpc2FibGVkICYmIGZvY3VzZWQpIHtcbiAgICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuXG4gICAgICBpZiAob25CbHVyKSB7XG4gICAgICAgIG9uQmx1cigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW211aUZvcm1Db250cm9sLCBkaXNhYmxlZCwgZm9jdXNlZCwgb25CbHVyXSk7XG4gIGNvbnN0IG9uRmlsbGVkID0gbXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25GaWxsZWQ7XG4gIGNvbnN0IG9uRW1wdHkgPSBtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkVtcHR5O1xuICBjb25zdCBjaGVja0RpcnR5ID0gUmVhY3QudXNlQ2FsbGJhY2sob2JqID0+IHtcbiAgICBpZiAoaXNGaWxsZWQob2JqKSkge1xuICAgICAgaWYgKG9uRmlsbGVkKSB7XG4gICAgICAgIG9uRmlsbGVkKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbkVtcHR5KSB7XG4gICAgICBvbkVtcHR5KCk7XG4gICAgfVxuICB9LCBbb25GaWxsZWQsIG9uRW1wdHldKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0NvbnRyb2xsZWQpIHtcbiAgICAgIGNoZWNrRGlydHkoe1xuICAgICAgICB2YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbdmFsdWUsIGNoZWNrRGlydHksIGlzQ29udHJvbGxlZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZXZlbnQgPT4ge1xuICAgIC8vIEZpeCBhIGJ1ZyB3aXRoIElFMTEgd2hlcmUgdGhlIGZvY3VzL2JsdXIgZXZlbnRzIGFyZSB0cmlnZ2VyZWRcbiAgICAvLyB3aGlsZSB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgIGlmIChmY3MuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25Gb2N1cykge1xuICAgICAgaW5wdXRQcm9wc1Byb3Aub25Gb2N1cyhldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRm9jdXMpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uRm9jdXMoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVCbHVyID0gZXZlbnQgPT4ge1xuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlucHV0UHJvcHNQcm9wLm9uQmx1cikge1xuICAgICAgaW5wdXRQcm9wc1Byb3Aub25CbHVyKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25CbHVyKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkJsdXIoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGV2ZW50LCAuLi5hcmdzKSA9PiB7XG4gICAgaWYgKCFpc0NvbnRyb2xsZWQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgfHwgaW5wdXRSZWYuY3VycmVudDtcblxuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogRXhwZWN0ZWQgdmFsaWQgaW5wdXQgdGFyZ2V0LiBEaWQgeW91IHVzZSBhIGN1c3RvbSBcXGBpbnB1dENvbXBvbmVudFxcYCBhbmQgZm9yZ2V0IHRvIGZvcndhcmQgcmVmcz8gU2VlIGh0dHBzOi8vbXVpLmNvbS9yL2lucHV0LWNvbXBvbmVudC1yZWYtaW50ZXJmYWNlIGZvciBtb3JlIGluZm8uYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMSkpO1xuICAgICAgfVxuXG4gICAgICBjaGVja0RpcnR5KHtcbiAgICAgICAgdmFsdWU6IGVsZW1lbnQudmFsdWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpbnB1dFByb3BzUHJvcC5vbkNoYW5nZSkge1xuICAgICAgaW5wdXRQcm9wc1Byb3Aub25DaGFuZ2UoZXZlbnQsIC4uLmFyZ3MpO1xuICAgIH0gLy8gUGVyZm9ybSBpbiB0aGUgd2lsbFVwZGF0ZVxuXG5cbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKGV2ZW50LCAuLi5hcmdzKTtcbiAgICB9XG4gIH07IC8vIENoZWNrIHRoZSBpbnB1dCBzdGF0ZSBvbiBtb3VudCwgaW4gY2FzZSBpdCB3YXMgZmlsbGVkIGJ5IHRoZSB1c2VyXG4gIC8vIG9yIGF1dG8gZmlsbGVkIGJ5IHRoZSBicm93c2VyIGJlZm9yZSB0aGUgaHlkcmF0aW9uIChmb3IgU1NSKS5cblxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY2hlY2tEaXJ0eShpbnB1dFJlZi5jdXJyZW50KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSBldmVudCA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQgJiYgZXZlbnQuY3VycmVudFRhcmdldCA9PT0gZXZlbnQudGFyZ2V0KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBsZXQgSW5wdXRDb21wb25lbnQgPSBpbnB1dENvbXBvbmVudDtcbiAgbGV0IGlucHV0UHJvcHMgPSBpbnB1dFByb3BzUHJvcDtcblxuICBpZiAobXVsdGlsaW5lICYmIElucHV0Q29tcG9uZW50ID09PSAnaW5wdXQnKSB7XG4gICAgaWYgKHJvd3MpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChtaW5Sb3dzIHx8IG1heFJvd3MpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ01VSTogWW91IGNhbiBub3QgdXNlIHRoZSBgbWluUm93c2Agb3IgYG1heFJvd3NgIHByb3BzIHdoZW4gdGhlIGlucHV0IGByb3dzYCBwcm9wIGlzIHNldC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1pblJvd3M6IHJvd3MsXG4gICAgICAgIG1heFJvd3M6IHJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1heFJvd3MsXG4gICAgICAgIG1pblJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH1cblxuICAgIElucHV0Q29tcG9uZW50ID0gVGV4dGFyZWFBdXRvc2l6ZTtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUF1dG9GaWxsID0gZXZlbnQgPT4ge1xuICAgIC8vIFByb3ZpZGUgYSBmYWtlIHZhbHVlIGFzIENocm9tZSBtaWdodCBub3QgbGV0IHlvdSBhY2Nlc3MgaXQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4gICAgY2hlY2tEaXJ0eShldmVudC5hbmltYXRpb25OYW1lID09PSAnbXVpLWF1dG8tZmlsbC1jYW5jZWwnID8gaW5wdXRSZWYuY3VycmVudCA6IHtcbiAgICAgIHZhbHVlOiAneCdcbiAgICB9KTtcbiAgfTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgbXVpRm9ybUNvbnRyb2wuc2V0QWRvcm5lZFN0YXJ0KEJvb2xlYW4oc3RhcnRBZG9ybm1lbnQpKTtcbiAgICB9XG4gIH0sIFttdWlGb3JtQ29udHJvbCwgc3RhcnRBZG9ybm1lbnRdKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3I6IGZjcy5jb2xvciB8fCAncHJpbWFyeScsXG4gICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICBlbmRBZG9ybm1lbnQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZCxcbiAgICBmb3JtQ29udHJvbDogbXVpRm9ybUNvbnRyb2wsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsOiBmY3MuaGlkZGVuTGFiZWwsXG4gICAgbXVsdGlsaW5lLFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIHN0YXJ0QWRvcm5tZW50LFxuICAgIHR5cGVcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBSb290ID0gY29tcG9uZW50cy5Sb290IHx8IElucHV0QmFzZVJvb3Q7XG4gIGNvbnN0IHJvb3RQcm9wcyA9IGNvbXBvbmVudHNQcm9wcy5yb290IHx8IHt9O1xuICBjb25zdCBJbnB1dCA9IGNvbXBvbmVudHMuSW5wdXQgfHwgSW5wdXRCYXNlQ29tcG9uZW50O1xuICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe30sIGlucHV0UHJvcHMsIGNvbXBvbmVudHNQcm9wcy5pbnB1dCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWyFkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzICYmIGlucHV0R2xvYmFsU3R5bGVzLCAvKiNfX1BVUkVfXyovX2pzeHMoUm9vdCwgX2V4dGVuZHMoe30sIHJvb3RQcm9wcywgIWlzSG9zdENvbXBvbmVudChSb290KSAmJiB7XG4gICAgICBvd25lclN0YXRlOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZSwgcm9vdFByb3BzLm93bmVyU3RhdGUpXG4gICAgfSwge1xuICAgICAgcmVmOiByZWYsXG4gICAgICBvbkNsaWNrOiBoYW5kbGVDbGlja1xuICAgIH0sIG90aGVyLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCByb290UHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUpLFxuICAgICAgY2hpbGRyZW46IFtzdGFydEFkb3JubWVudCwgLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goSW5wdXQsIF9leHRlbmRzKHtcbiAgICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IGZjcy5lcnJvcixcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgICAgIGF1dG9Db21wbGV0ZTogYXV0b0NvbXBsZXRlLFxuICAgICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIG9uQW5pbWF0aW9uU3RhcnQ6IGhhbmRsZUF1dG9GaWxsLFxuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgICAgIHJlYWRPbmx5OiByZWFkT25seSxcbiAgICAgICAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkLFxuICAgICAgICAgIHJvd3M6IHJvd3MsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgICAgICAgIG9uS2V5VXA6IG9uS2V5VXAsXG4gICAgICAgICAgdHlwZTogdHlwZVxuICAgICAgICB9LCBpbnB1dFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KElucHV0KSAmJiB7XG4gICAgICAgICAgYXM6IElucHV0Q29tcG9uZW50LFxuICAgICAgICAgIG93bmVyU3RhdGU6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCBpbnB1dFByb3BzLm93bmVyU3RhdGUpXG4gICAgICAgIH0sIHtcbiAgICAgICAgICByZWY6IGhhbmRsZUlucHV0UmVmLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmlucHV0LCBpbnB1dFByb3BzLmNsYXNzTmFtZSksXG4gICAgICAgICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXNcbiAgICAgICAgfSkpXG4gICAgICB9KSwgZW5kQWRvcm5tZW50LCByZW5kZXJTdWZmaXggPyByZW5kZXJTdWZmaXgoX2V4dGVuZHMoe30sIGZjcywge1xuICAgICAgICBzdGFydEFkb3JubWVudFxuICAgICAgfSkpIDogbnVsbF1cbiAgICB9KSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dEJhc2UucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNhZGRpbmctbmV3LWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIElucHV0QmFzZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgSW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBJbnB1dC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIEdsb2JhbFN0eWxlcyBmb3IgdGhlIGF1dG8tZmlsbCBrZXlmcmFtZXMgd2lsbCBub3QgYmUgaW5qZWN0ZWQvcmVtb3ZlZCBvbiBtb3VudC91bm1vdW50LiBNYWtlIHN1cmUgdG8gaW5qZWN0IHRoZW0gYXQgdGhlIHRvcCBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKiBUaGlzIG9wdGlvbiBpcyBpbnRlbmRlZCB0byBoZWxwIHdpdGggYm9vc3RpbmcgdGhlIGluaXRpYWwgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGlmIHlvdSBhcmUgbG9hZGluZyBhIGJpZyBhbW91bnQgb2YgSW5wdXQgY29tcG9uZW50cyBhdCBvbmNlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLFxuXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgYGlucHV0YCBpcyBibHVycmVkLlxuICAgKlxuICAgKiBOb3RpY2UgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgKGV2ZW50KSBtaWdodCBiZSB1bmRlZmluZWQuXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlVcDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHJlbmRlclN1ZmZpeDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXRCYXNlOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgaW5wdXRCYXNlQ2xhc3NlcyB9IGZyb20gJy4uL0lucHV0QmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUlucHV0Jywgc2xvdCk7XG59XG5cbmNvbnN0IGlucHV0Q2xhc3NlcyA9IF9leHRlbmRzKHt9LCBpbnB1dEJhc2VDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJbnB1dCcsIFsncm9vdCcsICd1bmRlcmxpbmUnLCAnaW5wdXQnXSkpO1xuXG5leHBvcnQgZGVmYXVsdCBpbnB1dENsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImRpc2FibGVVbmRlcmxpbmVcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJtdWx0aWxpbmVcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IHJlZlR5cGUsIGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IElucHV0QmFzZSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBpbnB1dENsYXNzZXMsIHsgZ2V0SW5wdXRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2lucHV0Q2xhc3Nlcyc7XG5pbXBvcnQgeyByb290T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyLCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIsIElucHV0QmFzZVJvb3QsIElucHV0QmFzZUNvbXBvbmVudCBhcyBJbnB1dEJhc2VJbnB1dCB9IGZyb20gJy4uL0lucHV0QmFzZS9JbnB1dEJhc2UnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVVuZGVybGluZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVVbmRlcmxpbmUgJiYgJ3VuZGVybGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcblxuY29uc3QgSW5wdXRSb290ID0gc3R5bGVkKElucHV0QmFzZVJvb3QsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUlucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbLi4uaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCBzdHlsZXMpLCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHN0eWxlcy51bmRlcmxpbmVdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBsaWdodCA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JztcbiAgbGV0IGJvdHRvbUxpbmVDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC40MiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSc7XG5cbiAgaWYgKHRoZW1lLnZhcnMpIHtcbiAgICBib3R0b21MaW5lQ29sb3IgPSBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFVuZGVybGluZX0pYDtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgfSwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiB7XG4gICAgJ2xhYmVsICsgJic6IHtcbiAgICAgIG1hcmdpblRvcDogMTZcbiAgICB9XG4gIH0sICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYge1xuICAgICcmOmFmdGVyJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDApJyxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuXG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZm9jdXNlZH06YWZ0ZXJgXToge1xuICAgICAgLy8gdHJhbnNsYXRlWCgwKSBpcyBhIHdvcmthcm91bmQgZm9yIFNhZmFyaSB0cmFuc2Zvcm0gc2NhbGUgYnVnXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMzE3NjZcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgxKSB0cmFuc2xhdGVYKDApJ1xuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRDbGFzc2VzLmVycm9yfTphZnRlcmBdOiB7XG4gICAgICBib3JkZXJCb3R0b21Db2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpbixcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgxKScgLy8gZXJyb3IgaXMgYWx3YXlzIHVuZGVybGluZWQgaW4gcmVkXG5cbiAgICB9LFxuICAgICcmOmJlZm9yZSc6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke2JvdHRvbUxpbmVDb2xvcn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcXFxcMDBhMFwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JvcmRlci1ib3R0b20tY29sb3InLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG5cbiAgICB9LFxuICAgIFtgJjpob3Zlcjpub3QoLiR7aW5wdXRDbGFzc2VzLmRpc2FibGVkfSk6YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeX1gLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7Ym90dG9tTGluZUNvbG9yfWBcbiAgICAgIH1cbiAgICB9LFxuICAgIFtgJi4ke2lucHV0Q2xhc3Nlcy5kaXNhYmxlZH06YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbVN0eWxlOiAnZG90dGVkJ1xuICAgIH1cbiAgfSk7XG59KTtcbmNvbnN0IElucHV0SW5wdXQgPSBzdHlsZWQoSW5wdXRCYXNlSW5wdXQsIHtcbiAgbmFtZTogJ011aUlucHV0JyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKHt9KTtcbmNvbnN0IElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gSW5wdXQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUlucHV0J1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgZGlzYWJsZVVuZGVybGluZSxcbiAgICBjb21wb25lbnRzID0ge30sXG4gICAgY29tcG9uZW50c1Byb3BzOiBjb21wb25lbnRzUHJvcHNQcm9wLFxuICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICB0eXBlID0gJ3RleHQnXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBvd25lclN0YXRlID0ge1xuICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgfTtcbiAgY29uc3QgaW5wdXRDb21wb25lbnRzUHJvcHMgPSB7XG4gICAgcm9vdDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY29tcG9uZW50c1Byb3BzID0gY29tcG9uZW50c1Byb3BzUHJvcCA/IGRlZXBtZXJnZShjb21wb25lbnRzUHJvcHNQcm9wLCBpbnB1dENvbXBvbmVudHNQcm9wcykgOiBpbnB1dENvbXBvbmVudHNQcm9wcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0QmFzZSwgX2V4dGVuZHMoe1xuICAgIGNvbXBvbmVudHM6IF9leHRlbmRzKHtcbiAgICAgIFJvb3Q6IElucHV0Um9vdCxcbiAgICAgIElucHV0OiBJbnB1dElucHV0XG4gICAgfSwgY29tcG9uZW50cyksXG4gICAgY29tcG9uZW50c1Byb3BzOiBjb21wb25lbnRzUHJvcHMsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQ6IGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXQucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2FkZGluZy1uZXctY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgSW5wdXRCYXNlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcblxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIElucHV0LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBub3QgaGF2ZSBhbiB1bmRlcmxpbmUuXG4gICAqL1xuICBkaXNhYmxlVW5kZXJsaW5lOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5JbnB1dC5tdWlOYW1lID0gJ0lucHV0JztcbmV4cG9ydCBkZWZhdWx0IElucHV0OyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgaW5wdXRCYXNlQ2xhc3NlcyB9IGZyb20gJy4uL0lucHV0QmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZpbGxlZElucHV0Jywgc2xvdCk7XG59XG5cbmNvbnN0IGZpbGxlZElucHV0Q2xhc3NlcyA9IF9leHRlbmRzKHt9LCBpbnB1dEJhc2VDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGaWxsZWRJbnB1dCcsIFsncm9vdCcsICd1bmRlcmxpbmUnLCAnaW5wdXQnXSkpO1xuXG5leHBvcnQgZGVmYXVsdCBmaWxsZWRJbnB1dENsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImRpc2FibGVVbmRlcmxpbmVcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaGlkZGVuTGFiZWxcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcIm11bHRpbGluZVwiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZWZUeXBlLCBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgSW5wdXRCYXNlIGZyb20gJy4uL0lucHV0QmFzZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGZpbGxlZElucHV0Q2xhc3NlcywgeyBnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vZmlsbGVkSW5wdXRDbGFzc2VzJztcbmltcG9ydCB7IHJvb3RPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIsIGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlciwgSW5wdXRCYXNlUm9vdCwgSW5wdXRCYXNlQ29tcG9uZW50IGFzIElucHV0QmFzZUlucHV0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL0lucHV0QmFzZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVVuZGVybGluZSAmJiAndW5kZXJsaW5lJ10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuXG5jb25zdCBGaWxsZWRJbnB1dFJvb3QgPSBzdHlsZWQoSW5wdXRCYXNlUm9vdCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFsuLi5pbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIocHJvcHMsIHN0eWxlcyksICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYgc3R5bGVzLnVuZGVybGluZV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfcGFsZXR0ZTtcblxuICBjb25zdCBsaWdodCA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JztcbiAgY29uc3QgYm90dG9tTGluZUNvbG9yID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjQyKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJztcbiAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjA2KScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA5KSc7XG4gIGNvbnN0IGhvdmVyQmFja2dyb3VuZCA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC4wOSknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMyknO1xuICBjb25zdCBkaXNhYmxlZEJhY2tncm91bmQgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJztcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuYmcgOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JhY2tncm91bmQtY29sb3InLCB7XG4gICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgICB9KSxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5ob3ZlckJnIDogaG92ZXJCYWNrZ3JvdW5kLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmJnIDogYmFja2dyb3VuZENvbG9yXG4gICAgICB9XG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZm9jdXNlZH1gXToge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmJnIDogYmFja2dyb3VuZENvbG9yXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5kaXNhYmxlZEJnIDogZGlzYWJsZWRCYWNrZ3JvdW5kXG4gICAgfVxuICB9LCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHtcbiAgICAnJjphZnRlcic6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAkeyhfcGFsZXR0ZSA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3IgfHwgJ3ByaW1hcnknXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlLm1haW59YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgwKScsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cblxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9OmFmdGVyYF06IHtcbiAgICAgIC8vIHRyYW5zbGF0ZVgoMCkgaXMgYSB3b3JrYXJvdW5kIGZvciBTYWZhcmkgdHJhbnNmb3JtIHNjYWxlIGJ1Z1xuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMxNzY2XG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMSkgdHJhbnNsYXRlWCgwKSdcbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5lcnJvcn06YWZ0ZXJgXToge1xuICAgICAgYm9yZGVyQm90dG9tQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW4sXG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMSknIC8vIGVycm9yIGlzIGFsd2F5cyB1bmRlcmxpbmVkIGluIHJlZFxuXG4gICAgfSxcbiAgICAnJjpiZWZvcmUnOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHt0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gJHt0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRVbmRlcmxpbmV9KWAgOiBib3R0b21MaW5lQ29sb3J9YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXFxcXDAwYTBcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3JkZXItYm90dG9tLWNvbG9yJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuXG4gICAgfSxcbiAgICBbYCY6aG92ZXI6bm90KC4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH0pOmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnl9YFxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tU3R5bGU6ICdkb3R0ZWQnXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nTGVmdDogMTJcbiAgfSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdSaWdodDogMTJcbiAgfSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICAgIHBhZGRpbmc6ICcyNXB4IDEycHggOHB4J1xuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmdUb3A6IDIxLFxuICAgIHBhZGRpbmdCb3R0b206IDRcbiAgfSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiB7XG4gICAgcGFkZGluZ1RvcDogMTYsXG4gICAgcGFkZGluZ0JvdHRvbTogMTdcbiAgfSkpO1xufSk7XG5jb25zdCBGaWxsZWRJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlGaWxsZWRJbnB1dCcsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwYWRkaW5nVG9wOiAyNSxcbiAgcGFkZGluZ1JpZ2h0OiAxMixcbiAgcGFkZGluZ0JvdHRvbTogOCxcbiAgcGFkZGluZ0xlZnQ6IDEyXG59LCAhdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgV2Via2l0Qm94U2hhZG93OiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgY2FyZXRDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAnaW5oZXJpdCcsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICdpbmhlcml0J1xuICB9XG59LCB0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAnaW5oZXJpdCcsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICdpbmhlcml0J1xuICB9LFxuICBbdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvcignZGFyaycpXToge1xuICAgICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgICBXZWJraXRCb3hTaGFkb3c6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6ICcjZmZmJyxcbiAgICAgIGNhcmV0Q29sb3I6ICcjZmZmJ1xuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZ1RvcDogMjEsXG4gIHBhZGRpbmdCb3R0b206IDRcbn0sIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYge1xuICBwYWRkaW5nVG9wOiAxNixcbiAgcGFkZGluZ0JvdHRvbTogMTdcbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgcGFkZGluZ1RvcDogMCxcbiAgcGFkZGluZ0JvdHRvbTogMCxcbiAgcGFkZGluZ0xlZnQ6IDAsXG4gIHBhZGRpbmdSaWdodDogMFxufSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAwXG59LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdSaWdodDogMFxufSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA5XG59KSk7XG5jb25zdCBGaWxsZWRJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZpbGxlZElucHV0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGaWxsZWRJbnB1dCdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wc1Byb3AsXG4gICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgLy8gZGVjbGFyZSBoZXJlIHRvIHByZXZlbnQgc3ByZWFkaW5nIHRvIERPTVxuICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICB0eXBlID0gJ3RleHQnXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZSxcbiAgICB0eXBlXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhwcm9wcyk7XG4gIGNvbnN0IGZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzID0ge1xuICAgIHJvb3Q6IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9LFxuICAgIGlucHV0OiB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfVxuICB9O1xuICBjb25zdCBjb21wb25lbnRzUHJvcHMgPSBjb21wb25lbnRzUHJvcHNQcm9wID8gZGVlcG1lcmdlKGNvbXBvbmVudHNQcm9wc1Byb3AsIGZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzKSA6IGZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRCYXNlLCBfZXh0ZW5kcyh7XG4gICAgY29tcG9uZW50czogX2V4dGVuZHMoe1xuICAgICAgUm9vdDogRmlsbGVkSW5wdXRSb290LFxuICAgICAgSW5wdXQ6IEZpbGxlZElucHV0SW5wdXRcbiAgICB9LCBjb21wb25lbnRzKSxcbiAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wcyxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGaWxsZWRJbnB1dC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jYWRkaW5nLW5ldy1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBJbnB1dEJhc2UuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgSW5wdXQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaW5wdXQgd2lsbCBub3QgaGF2ZSBhbiB1bmRlcmxpbmUuXG4gICAqL1xuICBkaXNhYmxlVW5kZXJsaW5lOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgaGlkZGVuLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gaW5jcmVhc2UgZGVuc2l0eSBmb3IgYSBgRmlsbGVkSW5wdXRgLlxuICAgKiBCZSBzdXJlIHRvIGFkZCBgYXJpYS1sYWJlbGAgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhpZGRlbkxhYmVsOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5GaWxsZWRJbnB1dC5tdWlOYW1lID0gJ0lucHV0JztcbmV4cG9ydCBkZWZhdWx0IEZpbGxlZElucHV0OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5cbnZhciBfc3BhbjtcblxuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCIsIFwibGFiZWxcIiwgXCJub3RjaGVkXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgTm90Y2hlZE91dGxpbmVSb290ID0gc3R5bGVkKCdmaWVsZHNldCcpKHtcbiAgdGV4dEFsaWduOiAnbGVmdCcsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBib3R0b206IDAsXG4gIHJpZ2h0OiAwLFxuICB0b3A6IC01LFxuICBsZWZ0OiAwLFxuICBtYXJnaW46IDAsXG4gIHBhZGRpbmc6ICcwIDhweCcsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCcsXG4gIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICBib3JkZXJXaWR0aDogMSxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBtaW5XaWR0aDogJzAlJ1xufSk7XG5jb25zdCBOb3RjaGVkT3V0bGluZUxlZ2VuZCA9IHN0eWxlZCgnbGVnZW5kJykoKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgZmxvYXQ6ICd1bnNldCcsXG4gIC8vIEZpeCBjb25mbGljdCB3aXRoIGJvb3RzdHJhcFxuICB3aWR0aDogJ2F1dG8nLFxuICAvLyBGaXggY29uZmxpY3Qgd2l0aCBib290c3RyYXBcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nXG59LCAhb3duZXJTdGF0ZS53aXRoTGFiZWwgJiYge1xuICBwYWRkaW5nOiAwLFxuICBsaW5lSGVpZ2h0OiAnMTFweCcsXG4gIC8vIHN5bmMgd2l0aCBgaGVpZ2h0YCBpbiBgbGVnZW5kYCBzdHlsZXNcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd3aWR0aCcsIHtcbiAgICBkdXJhdGlvbjogMTUwLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgfSlcbn0sIG93bmVyU3RhdGUud2l0aExhYmVsICYmIF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgLy8gRml4IGNvbmZsaWN0IHdpdGggbm9ybWFsaXplLmNzcyBhbmQgc2FuaXRpemUuY3NzXG4gIHBhZGRpbmc6IDAsXG4gIGhlaWdodDogMTEsXG4gIC8vIHN5bmMgd2l0aCBgbGluZUhlaWdodGAgaW4gYGxlZ2VuZGAgc3R5bGVzXG4gIGZvbnRTaXplOiAnMC43NWVtJyxcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gIG1heFdpZHRoOiAwLjAxLFxuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ21heC13aWR0aCcsIHtcbiAgICBkdXJhdGlvbjogNTAsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICB9KSxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICcmID4gc3Bhbic6IHtcbiAgICBwYWRkaW5nTGVmdDogNSxcbiAgICBwYWRkaW5nUmlnaHQ6IDUsXG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgb3BhY2l0eTogMCxcbiAgICB2aXNpYmlsaXR5OiAndmlzaWJsZSdcbiAgfVxufSwgb3duZXJTdGF0ZS5ub3RjaGVkICYmIHtcbiAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdtYXgtd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDEwMCxcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0LFxuICAgIGRlbGF5OiA1MFxuICB9KVxufSkpKTtcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBOb3RjaGVkT3V0bGluZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGxhYmVsLFxuICAgIG5vdGNoZWRcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IHdpdGhMYWJlbCA9IGxhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBub3RjaGVkLFxuICAgIHdpdGhMYWJlbFxuICB9KTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTm90Y2hlZE91dGxpbmVSb290LCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goTm90Y2hlZE91dGxpbmVMZWdlbmQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjaGlsZHJlbjogd2l0aExhYmVsID8gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgICB9KSA6IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgICBfc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgICB9KSlcbiAgICB9KVxuICB9KSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBOb3RjaGVkT3V0bGluZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGxhYmVsLlxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBvdXRsaW5lIGlzIG5vdGNoZWQgdG8gYWNjb21tb2RhdGUgdGhlIGxhYmVsLlxuICAgKi9cbiAgbm90Y2hlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3Rcbn0gOiB2b2lkIDA7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyBpbnB1dEJhc2VDbGFzc2VzIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlPdXRsaW5lZElucHV0Jywgc2xvdCk7XG59XG5cbmNvbnN0IG91dGxpbmVkSW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU91dGxpbmVkSW5wdXQnLCBbJ3Jvb3QnLCAnbm90Y2hlZE91dGxpbmUnLCAnaW5wdXQnXSkpO1xuXG5leHBvcnQgZGVmYXVsdCBvdXRsaW5lZElucHV0Q2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY29tcG9uZW50c1wiLCBcImZ1bGxXaWR0aFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwibGFiZWxcIiwgXCJtdWx0aWxpbmVcIiwgXCJub3RjaGVkXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyByZWZUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgTm90Y2hlZE91dGxpbmUgZnJvbSAnLi9Ob3RjaGVkT3V0bGluZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IG91dGxpbmVkSW5wdXRDbGFzc2VzLCB7IGdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL291dGxpbmVkSW5wdXRDbGFzc2VzJztcbmltcG9ydCBJbnB1dEJhc2UsIHsgcm9vdE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlciwgaW5wdXRPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyLCBJbnB1dEJhc2VSb290LCBJbnB1dEJhc2VDb21wb25lbnQgYXMgSW5wdXRCYXNlSW5wdXQgfSBmcm9tICcuLi9JbnB1dEJhc2UvSW5wdXRCYXNlJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBub3RjaGVkT3V0bGluZTogWydub3RjaGVkT3V0bGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuXG5jb25zdCBPdXRsaW5lZElucHV0Um9vdCA9IHN0eWxlZChJbnB1dEJhc2VSb290LCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBib3JkZXJDb2xvciA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/ICdyZ2JhKDAsIDAsIDAsIDAuMjMpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjMpJztcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgW2AmOmhvdmVyIC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5XG4gICAgfSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIFtgJjpob3ZlciAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgICBib3JkZXJDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvIDAuMjMpYCA6IGJvcmRlckNvbG9yXG4gICAgICB9XG4gICAgfSxcbiAgICBbYCYuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5mb2N1c2VkfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sXG4gICAgICBib3JkZXJXaWR0aDogMlxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZXJyb3J9IC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9IC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nTGVmdDogMTRcbiAgfSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdSaWdodDogMTRcbiAgfSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICAgIHBhZGRpbmc6ICcxNi41cHggMTRweCdcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgICBwYWRkaW5nOiAnOC41cHggMTRweCdcbiAgfSkpO1xufSk7XG5jb25zdCBOb3RjaGVkT3V0bGluZVJvb3QgPSBzdHlsZWQoTm90Y2hlZE91dGxpbmUsIHtcbiAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnLFxuICBzbG90OiAnTm90Y2hlZE91dGxpbmUnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5ub3RjaGVkT3V0bGluZVxufSkoKHtcbiAgdGhlbWVcbn0pID0+IHtcbiAgY29uc3QgYm9yZGVyQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAncmdiYSgwLCAwLCAwLCAwLjIzKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzKSc7XG4gIHJldHVybiB7XG4gICAgYm9yZGVyQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjIzKWAgOiBib3JkZXJDb2xvclxuICB9O1xufSk7XG5jb25zdCBPdXRsaW5lZElucHV0SW5wdXQgPSBzdHlsZWQoSW5wdXRCYXNlSW5wdXQsIHtcbiAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcGFkZGluZzogJzE2LjVweCAxNHB4J1xufSwgIXRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIFdlYmtpdEJveFNoYWRvdzogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICBXZWJraXRUZXh0RmlsbENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGNhcmV0Q29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbiAgfVxufSwgdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbiAgfSxcbiAgW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IoJ2RhcmsnKV06IHtcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgV2Via2l0Qm94U2hhZG93OiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAnI2ZmZicsXG4gICAgICBjYXJldENvbG9yOiAnI2ZmZidcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmc6ICc4LjVweCAxNHB4J1xufSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYge1xuICBwYWRkaW5nOiAwXG59LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDBcbn0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ1JpZ2h0OiAwXG59KSk7XG5jb25zdCBPdXRsaW5lZElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gT3V0bGluZWRJbnB1dChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9SZWFjdCRGcmFnbWVudDtcblxuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0J1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY29tcG9uZW50cyA9IHt9LFxuICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICBsYWJlbCxcbiAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICBub3RjaGVkLFxuICAgIHR5cGUgPSAndGV4dCdcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhwcm9wcyk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3JlcXVpcmVkJ11cbiAgfSk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZCxcbiAgICBmb3JtQ29udHJvbDogbXVpRm9ybUNvbnRyb2wsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsOiBmY3MuaGlkZGVuTGFiZWwsXG4gICAgbXVsdGlsaW5lLFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIHR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0QmFzZSwgX2V4dGVuZHMoe1xuICAgIGNvbXBvbmVudHM6IF9leHRlbmRzKHtcbiAgICAgIFJvb3Q6IE91dGxpbmVkSW5wdXRSb290LFxuICAgICAgSW5wdXQ6IE91dGxpbmVkSW5wdXRJbnB1dFxuICAgIH0sIGNvbXBvbmVudHMpLFxuICAgIHJlbmRlclN1ZmZpeDogc3RhdGUgPT4gLyojX19QVVJFX18qL19qc3goTm90Y2hlZE91dGxpbmVSb290LCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLm5vdGNoZWRPdXRsaW5lLFxuICAgICAgbGFiZWw6IGxhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnICYmIGZjcy5yZXF1aXJlZCA/IF9SZWFjdCRGcmFnbWVudCB8fCAoX1JlYWN0JEZyYWdtZW50ID0gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBbbGFiZWwsIFwiXFx4QTBcIiwgJyonXVxuICAgICAgfSkpIDogbGFiZWwsXG4gICAgICBub3RjaGVkOiB0eXBlb2Ygbm90Y2hlZCAhPT0gJ3VuZGVmaW5lZCcgPyBub3RjaGVkIDogQm9vbGVhbihzdGF0ZS5zdGFydEFkb3JubWVudCB8fCBzdGF0ZS5maWxsZWQgfHwgc3RhdGUuZm9jdXNlZClcbiAgICB9KSxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IF9leHRlbmRzKHt9LCBjbGFzc2VzLCB7XG4gICAgICBub3RjaGVkT3V0bGluZTogbnVsbFxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gT3V0bGluZWRJbnB1dC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jYWRkaW5nLW5ldy1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBJbnB1dEJhc2UuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbnB1dCdcbiAgICovXG4gIGlucHV0Q29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBsYWJlbCBvZiB0aGUgYGlucHV0YC4gSXQgaXMgb25seSB1c2VkIGZvciBsYXlvdXQuIFRoZSBhY3R1YWwgbGFiZWxsaW5nXG4gICAqIGlzIGhhbmRsZWQgYnkgYElucHV0TGFiZWxgLlxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgb3V0bGluZSBpcyBub3RjaGVkIHRvIGFjY29tbW9kYXRlIHRoZSBsYWJlbC5cbiAgICovXG4gIG5vdGNoZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbk91dGxpbmVkSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBPdXRsaW5lZElucHV0OyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUxhYmVsJywgc2xvdCk7XG59XG5jb25zdCBmb3JtTGFiZWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUxhYmVsJywgWydyb290JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZmlsbGVkJywgJ3JlcXVpcmVkJywgJ2FzdGVyaXNrJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUxhYmVsQ2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmaWxsZWRcIiwgXCJmb2N1c2VkXCIsIFwicmVxdWlyZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgZm9ybUxhYmVsQ2xhc3NlcywgeyBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUxhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbG9yLFxuICAgIGZvY3VzZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZmlsbGVkLFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIGZpbGxlZCAmJiAnZmlsbGVkJywgZm9jdXNlZCAmJiAnZm9jdXNlZCcsIHJlcXVpcmVkICYmICdyZXF1aXJlZCddLFxuICAgIGFzdGVyaXNrOiBbJ2FzdGVyaXNrJywgZXJyb3IgJiYgJ2Vycm9yJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuXG5leHBvcnQgY29uc3QgRm9ybUxhYmVsUm9vdCA9IHN0eWxlZCgnbGFiZWwnLCB7XG4gIG5hbWU6ICdNdWlGb3JtTGFiZWwnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAoe1xuICAgIG93bmVyU3RhdGVcbiAgfSwgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ3NlY29uZGFyeScgJiYgc3R5bGVzLmNvbG9yU2Vjb25kYXJ5LCBvd25lclN0YXRlLmZpbGxlZCAmJiBzdHlsZXMuZmlsbGVkKTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5XG59LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxLCB7XG4gIGxpbmVIZWlnaHQ6ICcxLjQzNzVlbScsXG4gIHBhZGRpbmc6IDAsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmZvY3VzZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICB9LFxuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWRcbiAgfSxcbiAgW2AmLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5lcnJvcn1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gIH1cbn0pKTtcbmNvbnN0IEFzdGVyaXNrQ29tcG9uZW50ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpRm9ybUxhYmVsJyxcbiAgc2xvdDogJ0FzdGVyaXNrJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuYXN0ZXJpc2tcbn0pKCh7XG4gIHRoZW1lXG59KSA9PiAoe1xuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuY29uc3QgRm9ybUxhYmVsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUxhYmVsKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtTGFiZWwnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50ID0gJ2xhYmVsJ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAncmVxdWlyZWQnLCAnZm9jdXNlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdmaWxsZWQnXVxuICB9KTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3I6IGZjcy5jb2xvciB8fCAncHJpbWFyeScsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmaWxsZWQ6IGZjcy5maWxsZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZFxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoRm9ybUxhYmVsUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgZmNzLnJlcXVpcmVkICYmIC8qI19fUFVSRV9fKi9fanN4cyhBc3Rlcmlza0NvbXBvbmVudCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5hc3RlcmlzayxcbiAgICAgIGNoaWxkcmVuOiBbXCJcXHUyMDA5XCIsICcqJ11cbiAgICB9KV1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtTGFiZWwucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNhZGRpbmctbmV3LWNvbG9ycykuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZXJyb3InLCAnaW5mbycsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBzaG91bGQgdXNlIGZpbGxlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIGZpbGxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IG9mIHRoaXMgbGFiZWwgaXMgZm9jdXNlZCAodXNlZCBieSBgRm9ybUdyb3VwYCBjb21wb25lbnRzKS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1MYWJlbDsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dExhYmVsJywgc2xvdCk7XG59XG5jb25zdCBpbnB1dExhYmVsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUlucHV0TGFiZWwnLCBbJ3Jvb3QnLCAnZm9jdXNlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdyZXF1aXJlZCcsICdhc3RlcmlzaycsICdmb3JtQ29udHJvbCcsICdzaXplU21hbGwnLCAnc2hyaW5rJywgJ2FuaW1hdGVkJywgJ3N0YW5kYXJkJywgJ2ZpbGxlZCcsICdvdXRsaW5lZCddKTtcbmV4cG9ydCBkZWZhdWx0IGlucHV0TGFiZWxDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkaXNhYmxlQW5pbWF0aW9uXCIsIFwibWFyZ2luXCIsIFwic2hyaW5rXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgRm9ybUxhYmVsLCB7IGZvcm1MYWJlbENsYXNzZXMgfSBmcm9tICcuLi9Gb3JtTGFiZWwnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vaW5wdXRMYWJlbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZm9ybUNvbnRyb2wsXG4gICAgc2l6ZSxcbiAgICBzaHJpbmssXG4gICAgZGlzYWJsZUFuaW1hdGlvbixcbiAgICB2YXJpYW50LFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBmb3JtQ29udHJvbCAmJiAnZm9ybUNvbnRyb2wnLCAhZGlzYWJsZUFuaW1hdGlvbiAmJiAnYW5pbWF0ZWQnLCBzaHJpbmsgJiYgJ3NocmluaycsIHNpemUgPT09ICdzbWFsbCcgJiYgJ3NpemVTbWFsbCcsIHZhcmlhbnRdLFxuICAgIGFzdGVyaXNrOiBbcmVxdWlyZWQgJiYgJ2FzdGVyaXNrJ11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5cbmNvbnN0IElucHV0TGFiZWxSb290ID0gc3R5bGVkKEZvcm1MYWJlbCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpSW5wdXRMYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3tcbiAgICAgIFtgJiAuJHtmb3JtTGFiZWxDbGFzc2VzLmFzdGVyaXNrfWBdOiBzdHlsZXMuYXN0ZXJpc2tcbiAgICB9LCBzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiBzdHlsZXMuZm9ybUNvbnRyb2wsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuc2l6ZVNtYWxsLCBvd25lclN0YXRlLnNocmluayAmJiBzdHlsZXMuc2hyaW5rLCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHN0eWxlcy5hbmltYXRlZCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnYmxvY2snLFxuICB0cmFuc2Zvcm1PcmlnaW46ICd0b3AgbGVmdCcsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgbWF4V2lkdGg6ICcxMDAlJ1xufSwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBsZWZ0OiAwLFxuICB0b3A6IDAsXG4gIC8vIHNsaWdodCBhbHRlcmF0aW9uIHRvIHNwZWMgc3BhY2luZyB0byBtYXRjaCB2aXN1YWwgc3BlYyByZXN1bHRcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIDIwcHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgLy8gQ29tcGVuc2F0aW9uIGZvciB0aGUgYElucHV0LmlucHV0U2l6ZVNtYWxsYCBzdHlsZS5cbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIDE3cHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaHJpbmsgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgLTEuNXB4KSBzY2FsZSgwLjc1KScsXG4gIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgbWF4V2lkdGg6ICcxMzMlJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZUFuaW1hdGlvbiAmJiB7XG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZShbJ2NvbG9yJywgJ3RyYW5zZm9ybScsICdtYXgtd2lkdGgnXSwge1xuICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgfSlcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2ZpbGxlZCcgJiYgX2V4dGVuZHMoe1xuICAvLyBDaHJvbWUncyBhdXRvZmlsbCBmZWF0dXJlIGdpdmVzIHRoZSBpbnB1dCBmaWVsZCBhIHllbGxvdyBiYWNrZ3JvdW5kLlxuICAvLyBTaW5jZSB0aGUgaW5wdXQgZmllbGQgaXMgYmVoaW5kIHRoZSBsYWJlbCBpbiB0aGUgSFRNTCB0cmVlLFxuICAvLyB0aGUgaW5wdXQgZmllbGQgaXMgZHJhd24gbGFzdCBhbmQgaGlkZXMgdGhlIGxhYmVsIHdpdGggYW4gb3BhcXVlIGJhY2tncm91bmQgY29sb3IuXG4gIC8vIHpJbmRleDogMSB3aWxsIHJhaXNlIHRoZSBsYWJlbCBhYm92ZSBvcGFxdWUgYmFja2dyb3VuZC1jb2xvcnMgb2YgaW5wdXQuXG4gIHpJbmRleDogMSxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgMTZweCkgc2NhbGUoMSknLFxuICBtYXhXaWR0aDogJ2NhbGMoMTAwJSAtIDI0cHgpJ1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDEycHgsIDEzcHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaHJpbmsgJiYgX2V4dGVuZHMoe1xuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDEycHgsIDdweCkgc2NhbGUoMC43NSknLFxuICBtYXhXaWR0aDogJ2NhbGMoMTMzJSAtIDI0cHgpJ1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDEycHgsIDRweCkgc2NhbGUoMC43NSknXG59KSksIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBfZXh0ZW5kcyh7XG4gIC8vIHNlZSBjb21tZW50IGFib3ZlIG9uIGZpbGxlZC56SW5kZXhcbiAgekluZGV4OiAxLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxNHB4LCAxNnB4KSBzY2FsZSgxKScsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgOXB4KSBzY2FsZSgxKSdcbn0sIG93bmVyU3RhdGUuc2hyaW5rICYmIHtcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMjRweCknLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgLTlweCkgc2NhbGUoMC43NSknXG59KSkpO1xuY29uc3QgSW5wdXRMYWJlbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0TGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgbmFtZTogJ011aUlucHV0TGFiZWwnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBkaXNhYmxlQW5pbWF0aW9uID0gZmFsc2UsXG4gICAgc2hyaW5rOiBzaHJpbmtQcm9wXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGxldCBzaHJpbmsgPSBzaHJpbmtQcm9wO1xuXG4gIGlmICh0eXBlb2Ygc2hyaW5rID09PSAndW5kZWZpbmVkJyAmJiBtdWlGb3JtQ29udHJvbCkge1xuICAgIHNocmluayA9IG11aUZvcm1Db250cm9sLmZpbGxlZCB8fCBtdWlGb3JtQ29udHJvbC5mb2N1c2VkIHx8IG11aUZvcm1Db250cm9sLmFkb3JuZWRTdGFydDtcbiAgfVxuXG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydzaXplJywgJ3ZhcmlhbnQnLCAncmVxdWlyZWQnXVxuICB9KTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZUFuaW1hdGlvbixcbiAgICBmb3JtQ29udHJvbDogbXVpRm9ybUNvbnRyb2wsXG4gICAgc2hyaW5rLFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIHZhcmlhbnQ6IGZjcy52YXJpYW50LFxuICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRMYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBcImRhdGEtc2hyaW5rXCI6IHNocmluayxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IElucHV0TGFiZWwucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jYWRkaW5nLW5ldy1jb2xvcnMpLlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRyYW5zaXRpb24gYW5pbWF0aW9uIGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUFuaW1hdGlvbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIG9mIHRoaXMgbGFiZWwgaXMgZm9jdXNlZC5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJ10pLFxuXG4gIC8qKlxuICAgKiBpZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIHNocnVuay5cbiAgICovXG4gIHNocmluazogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdub3JtYWwnXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoWydub3JtYWwnLCAnc21hbGwnXSksXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXRMYWJlbDsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUNvbnRyb2wnLCBzbG90KTtcbn1cbmNvbnN0IGZvcm1Db250cm9sQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1Db250cm9sJywgWydyb290JywgJ21hcmdpbk5vbmUnLCAnbWFyZ2luTm9ybWFsJywgJ21hcmdpbkRlbnNlJywgJ2Z1bGxXaWR0aCcsICdkaXNhYmxlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1Db250cm9sQ2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmb2N1c2VkXCIsIFwiZnVsbFdpZHRoXCIsIFwiaGlkZGVuTGFiZWxcIiwgXCJtYXJnaW5cIiwgXCJyZXF1aXJlZFwiLCBcInNpemVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGlzRmlsbGVkLCBpc0Fkb3JuZWRTdGFydCB9IGZyb20gJy4uL0lucHV0QmFzZS91dGlscyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBpc011aUVsZW1lbnQgZnJvbSAnLi4vdXRpbHMvaXNNdWlFbGVtZW50JztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi9Gb3JtQ29udHJvbENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUNvbnRyb2xDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIG1hcmdpbixcbiAgICBmdWxsV2lkdGhcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIG1hcmdpbiAhPT0gJ25vbmUnICYmIGBtYXJnaW4ke2NhcGl0YWxpemUobWFyZ2luKX1gLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBGb3JtQ29udHJvbFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUZvcm1Db250cm9sJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3R5bGVzLnJvb3QsIHN0eWxlc1tgbWFyZ2luJHtjYXBpdGFsaXplKG93bmVyU3RhdGUubWFyZ2luKX1gXSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aCk7XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAvLyBSZXNldCBmaWVsZHNldCBkZWZhdWx0IHN0eWxlLlxuICBtaW5XaWR0aDogMCxcbiAgcGFkZGluZzogMCxcbiAgbWFyZ2luOiAwLFxuICBib3JkZXI6IDAsXG4gIHZlcnRpY2FsQWxpZ246ICd0b3AnXG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ25vcm1hbCcgJiYge1xuICBtYXJnaW5Ub3A6IDE2LFxuICBtYXJnaW5Cb3R0b206IDhcbn0sIG93bmVyU3RhdGUubWFyZ2luID09PSAnZGVuc2UnICYmIHtcbiAgbWFyZ2luVG9wOiA4LFxuICBtYXJnaW5Cb3R0b206IDRcbn0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHtcbiAgd2lkdGg6ICcxMDAlJ1xufSkpO1xuLyoqXG4gKiBQcm92aWRlcyBjb250ZXh0IHN1Y2ggYXMgZmlsbGVkL2ZvY3VzZWQvZXJyb3IvcmVxdWlyZWQgZm9yIGZvcm0gaW5wdXRzLlxuICogUmVseWluZyBvbiB0aGUgY29udGV4dCBwcm92aWRlcyBoaWdoIGZsZXhpYmlsaXR5IGFuZCBlbnN1cmVzIHRoYXQgdGhlIHN0YXRlIGFsd2F5cyBzdGF5c1xuICogY29uc2lzdGVudCBhY3Jvc3MgdGhlIGNoaWxkcmVuIG9mIHRoZSBgRm9ybUNvbnRyb2xgLlxuICogVGhpcyBjb250ZXh0IGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqICAtIEZvcm1MYWJlbFxuICogIC0gRm9ybUhlbHBlclRleHRcbiAqICAtIElucHV0XG4gKiAgLSBJbnB1dExhYmVsXG4gKlxuICogWW91IGNhbiBmaW5kIG9uZSBjb21wb3NpdGlvbiBleGFtcGxlIGJlbG93IGFuZCBtb3JlIGdvaW5nIHRvIFt0aGUgZGVtb3NdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0LWZpZWxkLyNjb21wb25lbnRzKS5cbiAqXG4gKiBgYGBqc3hcbiAqIDxGb3JtQ29udHJvbD5cbiAqICAgPElucHV0TGFiZWwgaHRtbEZvcj1cIm15LWlucHV0XCI+RW1haWwgYWRkcmVzczwvSW5wdXRMYWJlbD5cbiAqICAgPElucHV0IGlkPVwibXktaW5wdXRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwibXktaGVscGVyLXRleHRcIiAvPlxuICogICA8Rm9ybUhlbHBlclRleHQgaWQ9XCJteS1oZWxwZXItdGV4dFwiPldlJ2xsIG5ldmVyIHNoYXJlIHlvdXIgZW1haWwuPC9Gb3JtSGVscGVyVGV4dD5cbiAqIDwvRm9ybUNvbnRyb2w+XG4gKiBgYGBcbiAqXG4gKiDimqDvuI8gT25seSBvbmUgYElucHV0QmFzZWAgY2FuIGJlIHVzZWQgd2l0aGluIGEgRm9ybUNvbnRyb2wgYmVjYXVzZSBpdCBjcmVhdGUgdmlzdWFsIGluY29uc2lzdGVuY2llcy5cbiAqIEZvciBpbnN0YW5jZSwgb25seSBvbmUgaW5wdXQgY2FuIGJlIGZvY3VzZWQgYXQgdGhlIHNhbWUgdGltZSwgdGhlIHN0YXRlIHNob3VsZG4ndCBiZSBzaGFyZWQuXG4gKi9cblxuY29uc3QgRm9ybUNvbnRyb2wgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtQ29udHJvbChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUNvbnRyb2wnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBlcnJvciA9IGZhbHNlLFxuICAgIGZvY3VzZWQ6IHZpc3VhbGx5Rm9jdXNlZCxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBoaWRkZW5MYWJlbCA9IGZhbHNlLFxuICAgIG1hcmdpbiA9ICdub25lJyxcbiAgICByZXF1aXJlZCA9IGZhbHNlLFxuICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICB2YXJpYW50ID0gJ291dGxpbmVkJ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWwsXG4gICAgbWFyZ2luLFxuICAgIHJlcXVpcmVkLFxuICAgIHNpemUsXG4gICAgdmFyaWFudFxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IFthZG9ybmVkU3RhcnQsIHNldEFkb3JuZWRTdGFydF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gV2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGNoaWxkcmVuIGFuZCBmaW5kIHRoZSBJbnB1dCBpbiBvcmRlclxuICAgIC8vIHRvIGZ1bGx5IHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGxldCBpbml0aWFsQWRvcm5lZFN0YXJ0ID0gZmFsc2U7XG5cbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBpc011aUVsZW1lbnQoY2hpbGQsIFsnU2VsZWN0J10pID8gY2hpbGQucHJvcHMuaW5wdXQgOiBjaGlsZDtcblxuICAgICAgICBpZiAoaW5wdXQgJiYgaXNBZG9ybmVkU3RhcnQoaW5wdXQucHJvcHMpKSB7XG4gICAgICAgICAgaW5pdGlhbEFkb3JuZWRTdGFydCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbml0aWFsQWRvcm5lZFN0YXJ0O1xuICB9KTtcbiAgY29uc3QgW2ZpbGxlZCwgc2V0RmlsbGVkXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxGaWxsZWQgPSBmYWxzZTtcblxuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAoIWlzTXVpRWxlbWVudChjaGlsZCwgWydJbnB1dCcsICdTZWxlY3QnXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGaWxsZWQoY2hpbGQucHJvcHMsIHRydWUpKSB7XG4gICAgICAgICAgaW5pdGlhbEZpbGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbml0aWFsRmlsbGVkO1xuICB9KTtcbiAgY29uc3QgW2ZvY3VzZWRTdGF0ZSwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgaWYgKGRpc2FibGVkICYmIGZvY3VzZWRTdGF0ZSkge1xuICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgZm9jdXNlZCA9IHZpc3VhbGx5Rm9jdXNlZCAhPT0gdW5kZWZpbmVkICYmICFkaXNhYmxlZCA/IHZpc3VhbGx5Rm9jdXNlZCA6IGZvY3VzZWRTdGF0ZTtcbiAgbGV0IHJlZ2lzdGVyRWZmZWN0O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgcmVnaXN0ZXJlZElucHV0ID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICAgIHJlZ2lzdGVyRWZmZWN0ID0gKCkgPT4ge1xuICAgICAgaWYgKHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZXJlIGFyZSBtdWx0aXBsZSBgSW5wdXRCYXNlYCBjb21wb25lbnRzIGluc2lkZSBhIEZvcm1Db250cm9sLicsICdUaGlzIGNyZWF0ZXMgdmlzdWFsIGluY29uc2lzdGVuY2llcywgb25seSB1c2Ugb25lIGBJbnB1dEJhc2VgLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cblxuICAgICAgcmVnaXN0ZXJlZElucHV0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmVnaXN0ZXJlZElucHV0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9uRmlsbGVkID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEZpbGxlZCh0cnVlKTtcbiAgfSwgW10pO1xuICBjb25zdCBvbkVtcHR5ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEZpbGxlZChmYWxzZSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgY2hpbGRDb250ZXh0ID0ge1xuICAgIGFkb3JuZWRTdGFydCxcbiAgICBzZXRBZG9ybmVkU3RhcnQsXG4gICAgY29sb3IsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZmlsbGVkLFxuICAgIGZvY3VzZWQsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIHNpemUsXG4gICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICB9LFxuICAgIG9uRW1wdHksXG4gICAgb25GaWxsZWQsXG4gICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgc2V0Rm9jdXNlZCh0cnVlKTtcbiAgICB9LFxuICAgIHJlZ2lzdGVyRWZmZWN0LFxuICAgIHJlcXVpcmVkLFxuICAgIHZhcmlhbnRcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2FkZGluZy1uZXctY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsLCBpbnB1dCBhbmQgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRpc2FibGVkIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNwbGF5ZWQgaW4gZm9jdXNlZCBzdGF0ZS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgIG9yIGBub3JtYWxgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nIG9mIHRoaXMgYW5kIGNvbnRhaW5lZCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZScsICdub3JtYWwnXSksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2w7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1IZWxwZXJUZXh0Jywgc2xvdCk7XG59XG5jb25zdCBmb3JtSGVscGVyVGV4dENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtSGVscGVyVGV4dCcsIFsncm9vdCcsICdlcnJvcicsICdkaXNhYmxlZCcsICdzaXplU21hbGwnLCAnc2l6ZU1lZGl1bScsICdjb250YWluZWQnLCAnZm9jdXNlZCcsICdmaWxsZWQnLCAncmVxdWlyZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtSGVscGVyVGV4dENsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcblxudmFyIF9zcGFuO1xuXG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmaWxsZWRcIiwgXCJmb2N1c2VkXCIsIFwibWFyZ2luXCIsIFwicmVxdWlyZWRcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGZvcm1IZWxwZXJUZXh0Q2xhc3NlcywgeyBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtSGVscGVyVGV4dENsYXNzZXMnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29udGFpbmVkLFxuICAgIHNpemUsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZmlsbGVkLFxuICAgIGZvY3VzZWQsXG4gICAgcmVxdWlyZWRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIHNpemUgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgY29udGFpbmVkICYmICdjb250YWluZWQnLCBmb2N1c2VkICYmICdmb2N1c2VkJywgZmlsbGVkICYmICdmaWxsZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgRm9ybUhlbHBlclRleHRSb290ID0gc3R5bGVkKCdwJywge1xuICBuYW1lOiAnTXVpRm9ybUhlbHBlclRleHQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5zaXplICYmIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBvd25lclN0YXRlLmNvbnRhaW5lZCAmJiBzdHlsZXMuY29udGFpbmVkLCBvd25lclN0YXRlLmZpbGxlZCAmJiBzdHlsZXMuZmlsbGVkXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5XG59LCB0aGVtZS50eXBvZ3JhcGh5LmNhcHRpb24sIHtcbiAgdGV4dEFsaWduOiAnbGVmdCcsXG4gIG1hcmdpblRvcDogMyxcbiAgbWFyZ2luUmlnaHQ6IDAsXG4gIG1hcmdpbkJvdHRvbTogMCxcbiAgbWFyZ2luTGVmdDogMCxcbiAgW2AmLiR7Zm9ybUhlbHBlclRleHRDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWRcbiAgfSxcbiAgW2AmLiR7Zm9ybUhlbHBlclRleHRDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgbWFyZ2luVG9wOiA0XG59LCBvd25lclN0YXRlLmNvbnRhaW5lZCAmJiB7XG4gIG1hcmdpbkxlZnQ6IDE0LFxuICBtYXJnaW5SaWdodDogMTRcbn0pKTtcbmNvbnN0IEZvcm1IZWxwZXJUZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUhlbHBlclRleHQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1IZWxwZXJUZXh0J1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCA9ICdwJ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsndmFyaWFudCcsICdzaXplJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdmb2N1c2VkJywgJ3JlcXVpcmVkJ11cbiAgfSk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBjb250YWluZWQ6IGZjcy52YXJpYW50ID09PSAnZmlsbGVkJyB8fCBmY3MudmFyaWFudCA9PT0gJ291dGxpbmVkJyxcbiAgICB2YXJpYW50OiBmY3MudmFyaWFudCxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZmlsbGVkOiBmY3MuZmlsbGVkLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkLFxuICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUhlbHBlclRleHRSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4gPT09ICcgJyA/IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgX3NwYW4gfHwgKF9zcGFuID0gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgfSkpIDogY2hpbGRyZW5cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtSGVscGVyVGV4dC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogSWYgYCcgJ2AgaXMgcHJvdmlkZWQsIHRoZSBjb21wb25lbnQgcmVzZXJ2ZXMgb25lIGxpbmUgaGVpZ2h0IGZvciBkaXNwbGF5aW5nIGEgZnV0dXJlIG1lc3NhZ2UuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBoZWxwZXIgdGV4dCBzaG91bGQgdXNlIGZpbGxlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIGZpbGxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgZm9jdXNlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJ10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBoZWxwZXIgdGV4dCBzaG91bGQgdXNlIHJlcXVpcmVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUhlbHBlclRleHQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5cbmNvbnN0IExpc3RDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBMaXN0Q29udGV4dC5kaXNwbGF5TmFtZSA9ICdMaXN0Q29udGV4dCc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RDb250ZXh0OyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaXN0Jywgc2xvdCk7XG59XG5jb25zdCBsaXN0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3QnLCBbJ3Jvb3QnLCAncGFkZGluZycsICdkZW5zZScsICdzdWJoZWFkZXInXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0Q2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkZW5zZVwiLCBcImRpc2FibGVQYWRkaW5nXCIsIFwic3ViaGVhZGVyXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuL0xpc3RDb250ZXh0JztcbmltcG9ydCB7IGdldExpc3RVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpc3RDbGFzc2VzJztcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVQYWRkaW5nLFxuICAgIGRlbnNlLFxuICAgIHN1YmhlYWRlclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVQYWRkaW5nICYmICdwYWRkaW5nJywgZGVuc2UgJiYgJ2RlbnNlJywgc3ViaGVhZGVyICYmICdzdWJoZWFkZXInXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldExpc3RVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgTGlzdFJvb3QgPSBzdHlsZWQoJ3VsJywge1xuICBuYW1lOiAnTXVpTGlzdCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5kaXNhYmxlUGFkZGluZyAmJiBzdHlsZXMucGFkZGluZywgb3duZXJTdGF0ZS5kZW5zZSAmJiBzdHlsZXMuZGVuc2UsIG93bmVyU3RhdGUuc3ViaGVhZGVyICYmIHN0eWxlcy5zdWJoZWFkZXJdO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGxpc3RTdHlsZTogJ25vbmUnLFxuICBtYXJnaW46IDAsXG4gIHBhZGRpbmc6IDAsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlUGFkZGluZyAmJiB7XG4gIHBhZGRpbmdUb3A6IDgsXG4gIHBhZGRpbmdCb3R0b206IDhcbn0sIG93bmVyU3RhdGUuc3ViaGVhZGVyICYmIHtcbiAgcGFkZGluZ1RvcDogMFxufSkpO1xuY29uc3QgTGlzdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpc3QoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUxpc3QnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50ID0gJ3VsJyxcbiAgICBkZW5zZSA9IGZhbHNlLFxuICAgIGRpc2FibGVQYWRkaW5nID0gZmFsc2UsXG4gICAgc3ViaGVhZGVyXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGRlbnNlXG4gIH0pLCBbZGVuc2VdKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGRlbnNlLFxuICAgIGRpc2FibGVQYWRkaW5nXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4cyhMaXN0Um9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgICByZWY6IHJlZixcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IFtzdWJoZWFkZXIsIGNoaWxkcmVuXVxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTGlzdC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBjb21wYWN0IHZlcnRpY2FsIHBhZGRpbmcgZGVzaWduZWQgZm9yIGtleWJvYXJkIGFuZCBtb3VzZSBpbnB1dCBpcyB1c2VkIGZvclxuICAgKiB0aGUgbGlzdCBhbmQgbGlzdCBpdGVtcy5cbiAgICogVGhlIHByb3AgaXMgYXZhaWxhYmxlIHRvIGRlc2NlbmRhbnQgY29tcG9uZW50cyBhcyB0aGUgYGRlbnNlYCBjb250ZXh0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVuc2U6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHZlcnRpY2FsIHBhZGRpbmcgaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBhZGRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgc3ViaGVhZGVyLCBub3JtYWxseSBgTGlzdFN1YmhlYWRlcmAuXG4gICAqL1xuICBzdWJoZWFkZXI6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBMaXN0OyIsIi8vIEEgY2hhbmdlIG9mIHRoZSBicm93c2VyIHpvb20gY2hhbmdlIHRoZSBzY3JvbGxiYXIgc2l6ZS5cbi8vIENyZWRpdCBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi80ODhmZDhhZmM1MzVjYTNhNmFkNGRjNTgxZjVlODkyMTdiNmEzNmFjL2pzL3NyYy91dGlsL3Njcm9sbGJhci5qcyNMMTQtTDE4XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxiYXJTaXplKGRvYykge1xuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2lubmVyV2lkdGgjdXNhZ2Vfbm90ZXNcbiAgY29uc3QgZG9jdW1lbnRXaWR0aCA9IGRvYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJldHVybiBNYXRoLmFicyh3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50V2lkdGgpO1xufSIsImltcG9ydCB7IHVuc3RhYmxlX2dldFNjcm9sbGJhclNpemUgYXMgZ2V0U2Nyb2xsYmFyU2l6ZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZ2V0U2Nyb2xsYmFyU2l6ZTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWN0aW9uc1wiLCBcImF1dG9Gb2N1c1wiLCBcImF1dG9Gb2N1c0l0ZW1cIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkSXRlbXNGb2N1c2FibGVcIiwgXCJkaXNhYmxlTGlzdFdyYXBcIiwgXCJvbktleURvd25cIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi91dGlscy9vd25lckRvY3VtZW50JztcbmltcG9ydCBMaXN0IGZyb20gJy4uL0xpc3QnO1xuaW1wb3J0IGdldFNjcm9sbGJhclNpemUgZnJvbSAnLi4vdXRpbHMvZ2V0U2Nyb2xsYmFyU2l6ZSc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBuZXh0SXRlbShsaXN0LCBpdGVtLCBkaXNhYmxlTGlzdFdyYXApIHtcbiAgaWYgKGxpc3QgPT09IGl0ZW0pIHtcbiAgICByZXR1cm4gbGlzdC5maXJzdENoaWxkO1xuICB9XG5cbiAgaWYgKGl0ZW0gJiYgaXRlbS5uZXh0RWxlbWVudFNpYmxpbmcpIHtcbiAgICByZXR1cm4gaXRlbS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gZGlzYWJsZUxpc3RXcmFwID8gbnVsbCA6IGxpc3QuZmlyc3RDaGlsZDtcbn1cblxuZnVuY3Rpb24gcHJldmlvdXNJdGVtKGxpc3QsIGl0ZW0sIGRpc2FibGVMaXN0V3JhcCkge1xuICBpZiAobGlzdCA9PT0gaXRlbSkge1xuICAgIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBsaXN0LmZpcnN0Q2hpbGQgOiBsaXN0Lmxhc3RDaGlsZDtcbiAgfVxuXG4gIGlmIChpdGVtICYmIGl0ZW0ucHJldmlvdXNFbGVtZW50U2libGluZykge1xuICAgIHJldHVybiBpdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gZGlzYWJsZUxpc3RXcmFwID8gbnVsbCA6IGxpc3QubGFzdENoaWxkO1xufVxuXG5mdW5jdGlvbiB0ZXh0Q3JpdGVyaWFNYXRjaGVzKG5leHRGb2N1cywgdGV4dENyaXRlcmlhKSB7XG4gIGlmICh0ZXh0Q3JpdGVyaWEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGV0IHRleHQgPSBuZXh0Rm9jdXMuaW5uZXJUZXh0O1xuXG4gIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBqc2RvbSBkb2Vzbid0IHN1cHBvcnQgaW5uZXJUZXh0XG4gICAgdGV4dCA9IG5leHRGb2N1cy50ZXh0Q29udGVudDtcbiAgfVxuXG4gIHRleHQgPSB0ZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0ZXh0Q3JpdGVyaWEucmVwZWF0aW5nKSB7XG4gICAgcmV0dXJuIHRleHRbMF0gPT09IHRleHRDcml0ZXJpYS5rZXlzWzBdO1xuICB9XG5cbiAgcmV0dXJuIHRleHQuaW5kZXhPZih0ZXh0Q3JpdGVyaWEua2V5cy5qb2luKCcnKSkgPT09IDA7XG59XG5cbmZ1bmN0aW9uIG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgdHJhdmVyc2FsRnVuY3Rpb24sIHRleHRDcml0ZXJpYSkge1xuICBsZXQgd3JhcHBlZE9uY2UgPSBmYWxzZTtcbiAgbGV0IG5leHRGb2N1cyA9IHRyYXZlcnNhbEZ1bmN0aW9uKGxpc3QsIGN1cnJlbnRGb2N1cywgY3VycmVudEZvY3VzID8gZGlzYWJsZUxpc3RXcmFwIDogZmFsc2UpO1xuXG4gIHdoaWxlIChuZXh0Rm9jdXMpIHtcbiAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AuXG4gICAgaWYgKG5leHRGb2N1cyA9PT0gbGlzdC5maXJzdENoaWxkKSB7XG4gICAgICBpZiAod3JhcHBlZE9uY2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB3cmFwcGVkT25jZSA9IHRydWU7XG4gICAgfSAvLyBTYW1lIGxvZ2ljIGFzIHVzZUF1dG9jb21wbGV0ZS5qc1xuXG5cbiAgICBjb25zdCBuZXh0Rm9jdXNEaXNhYmxlZCA9IGRpc2FibGVkSXRlbXNGb2N1c2FibGUgPyBmYWxzZSA6IG5leHRGb2N1cy5kaXNhYmxlZCB8fCBuZXh0Rm9jdXMuZ2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJykgPT09ICd0cnVlJztcblxuICAgIGlmICghbmV4dEZvY3VzLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fCAhdGV4dENyaXRlcmlhTWF0Y2hlcyhuZXh0Rm9jdXMsIHRleHRDcml0ZXJpYSkgfHwgbmV4dEZvY3VzRGlzYWJsZWQpIHtcbiAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgZWxlbWVudC5cbiAgICAgIG5leHRGb2N1cyA9IHRyYXZlcnNhbEZ1bmN0aW9uKGxpc3QsIG5leHRGb2N1cywgZGlzYWJsZUxpc3RXcmFwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dEZvY3VzLmZvY3VzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIEEgcGVybWFuZW50bHkgZGlzcGxheWVkIG1lbnUgZm9sbG93aW5nIGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvbWVudWJ1dHRvbi8uXG4gKiBJdCdzIGV4cG9zZWQgdG8gaGVscCBjdXN0b21pemF0aW9uIG9mIHRoZSBbYE1lbnVgXSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUvKSBjb21wb25lbnQgaWYgeW91XG4gKiB1c2UgaXQgc2VwYXJhdGVseSB5b3UgbmVlZCB0byBtb3ZlIGZvY3VzIGludG8gdGhlIGNvbXBvbmVudCBtYW51YWxseS4gT25jZVxuICogdGhlIGZvY3VzIGlzIHBsYWNlZCBpbnNpZGUgdGhlIGNvbXBvbmVudCBpdCBpcyBmdWxseSBrZXlib2FyZCBhY2Nlc3NpYmxlLlxuICovXG5cblxuY29uc3QgTWVudUxpc3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNZW51TGlzdChwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICAvLyBwcml2YXRlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICBhY3Rpb25zLFxuICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgIGF1dG9Gb2N1c0l0ZW0gPSBmYWxzZSxcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSA9IGZhbHNlLFxuICAgIGRpc2FibGVMaXN0V3JhcCA9IGZhbHNlLFxuICAgIG9uS2V5RG93bixcbiAgICB2YXJpYW50ID0gJ3NlbGVjdGVkTWVudSdcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IGxpc3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHRleHRDcml0ZXJpYVJlZiA9IFJlYWN0LnVzZVJlZih7XG4gICAga2V5czogW10sXG4gICAgcmVwZWF0aW5nOiB0cnVlLFxuICAgIHByZXZpb3VzS2V5TWF0Y2hlZDogdHJ1ZSxcbiAgICBsYXN0VGltZTogbnVsbFxuICB9KTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgIGxpc3RSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2F1dG9Gb2N1c10pO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbnMsICgpID0+ICh7XG4gICAgYWRqdXN0U3R5bGVGb3JTY3JvbGxiYXI6IChjb250YWluZXJFbGVtZW50LCB0aGVtZSkgPT4ge1xuICAgICAgLy8gTGV0J3MgaWdub3JlIHRoYXQgcGllY2Ugb2YgbG9naWMgaWYgdXNlcnMgYXJlIGFscmVhZHkgb3ZlcnJpZGluZyB0aGUgd2lkdGhcbiAgICAgIC8vIG9mIHRoZSBtZW51LlxuICAgICAgY29uc3Qgbm9FeHBsaWNpdFdpZHRoID0gIWxpc3RSZWYuY3VycmVudC5zdHlsZS53aWR0aDtcblxuICAgICAgaWYgKGNvbnRhaW5lckVsZW1lbnQuY2xpZW50SGVpZ2h0IDwgbGlzdFJlZi5jdXJyZW50LmNsaWVudEhlaWdodCAmJiBub0V4cGxpY2l0V2lkdGgpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsYmFyU2l6ZSA9IGAke2dldFNjcm9sbGJhclNpemUob3duZXJEb2N1bWVudChjb250YWluZXJFbGVtZW50KSl9cHhgO1xuICAgICAgICBsaXN0UmVmLmN1cnJlbnQuc3R5bGVbdGhlbWUuZGlyZWN0aW9uID09PSAncnRsJyA/ICdwYWRkaW5nTGVmdCcgOiAncGFkZGluZ1JpZ2h0J10gPSBzY3JvbGxiYXJTaXplO1xuICAgICAgICBsaXN0UmVmLmN1cnJlbnQuc3R5bGUud2lkdGggPSBgY2FsYygxMDAlICsgJHtzY3JvbGxiYXJTaXplfSlgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdFJlZi5jdXJyZW50O1xuICAgIH1cbiAgfSksIFtdKTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IGxpc3QgPSBsaXN0UmVmLmN1cnJlbnQ7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtFbGVtZW50fSAtIHdpbGwgYWx3YXlzIGJlIGRlZmluZWQgc2luY2Ugd2UgYXJlIGluIGEga2V5ZG93biBoYW5kbGVyXG4gICAgICogYXR0YWNoZWQgdG8gYW4gZWxlbWVudC4gQSBrZXlkb3duIGV2ZW50IGlzIGVpdGhlciBkaXNwYXRjaGVkIHRvIHRoZSBhY3RpdmVFbGVtZW50XG4gICAgICogb3IgZG9jdW1lbnQuYm9keSBvciBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuIE9ubHkgdGhlIGZpcnN0IGNhc2Ugd2lsbFxuICAgICAqIHRyaWdnZXIgdGhpcyBzcGVjaWZpYyBoYW5kbGVyLlxuICAgICAqL1xuXG4gICAgY29uc3QgY3VycmVudEZvY3VzID0gb3duZXJEb2N1bWVudChsaXN0KS5hY3RpdmVFbGVtZW50O1xuXG4gICAgaWYgKGtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIC8vIFByZXZlbnQgc2Nyb2xsIG9mIHRoZSBwYWdlXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgcHJldmlvdXNJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIG51bGwsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgbmV4dEl0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnRW5kJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBudWxsLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHByZXZpb3VzSXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjcml0ZXJpYSA9IHRleHRDcml0ZXJpYVJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgbG93ZXJLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGN1cnJUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgICAgIGlmIChjcml0ZXJpYS5rZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gUmVzZXRcbiAgICAgICAgaWYgKGN1cnJUaW1lIC0gY3JpdGVyaWEubGFzdFRpbWUgPiA1MDApIHtcbiAgICAgICAgICBjcml0ZXJpYS5rZXlzID0gW107XG4gICAgICAgICAgY3JpdGVyaWEucmVwZWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBjcml0ZXJpYS5wcmV2aW91c0tleU1hdGNoZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNyaXRlcmlhLnJlcGVhdGluZyAmJiBsb3dlcktleSAhPT0gY3JpdGVyaWEua2V5c1swXSkge1xuICAgICAgICAgIGNyaXRlcmlhLnJlcGVhdGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNyaXRlcmlhLmxhc3RUaW1lID0gY3VyclRpbWU7XG4gICAgICBjcml0ZXJpYS5rZXlzLnB1c2gobG93ZXJLZXkpO1xuICAgICAgY29uc3Qga2VlcEZvY3VzT25DdXJyZW50ID0gY3VycmVudEZvY3VzICYmICFjcml0ZXJpYS5yZXBlYXRpbmcgJiYgdGV4dENyaXRlcmlhTWF0Y2hlcyhjdXJyZW50Rm9jdXMsIGNyaXRlcmlhKTtcblxuICAgICAgaWYgKGNyaXRlcmlhLnByZXZpb3VzS2V5TWF0Y2hlZCAmJiAoa2VlcEZvY3VzT25DdXJyZW50IHx8IG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGZhbHNlLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSwgY3JpdGVyaWEpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihsaXN0UmVmLCByZWYpO1xuICAvKipcbiAgICogdGhlIGluZGV4IG9mIHRoZSBpdGVtIHNob3VsZCByZWNlaXZlIGZvY3VzXG4gICAqIGluIGEgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAgaXQncyB0aGUgZmlyc3QgYHNlbGVjdGVkYCBpdGVtXG4gICAqIG90aGVyd2lzZSBpdCdzIHRoZSB2ZXJ5IGZpcnN0IGl0ZW0uXG4gICAqL1xuXG4gIGxldCBhY3RpdmVJdGVtSW5kZXggPSAtMTsgLy8gc2luY2Ugd2UgaW5qZWN0IGZvY3VzIHJlbGF0ZWQgcHJvcHMgaW50byBjaGlsZHJlbiB3ZSBoYXZlIHRvIGRvIGEgbG9va2FoZWFkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGEgYHNlbGVjdGVkYCBpdGVtLiBXZSdyZSBsb29raW5nIGZvciB0aGUgbGFzdCBgc2VsZWN0ZWRgXG4gIC8vIGl0ZW0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsaWQgaXRlbSBhcyBhIGZhbGxiYWNrXG5cbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGlzRnJhZ21lbnQoY2hpbGQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW1wiTVVJOiBUaGUgTWVudSBjb21wb25lbnQgZG9lc24ndCBhY2NlcHQgYSBGcmFnbWVudCBhcyBhIGNoaWxkLlwiLCAnQ29uc2lkZXIgcHJvdmlkaW5nIGFuIGFycmF5IGluc3RlYWQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hpbGQucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51JyAmJiBjaGlsZC5wcm9wcy5zZWxlY3RlZCkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBpdGVtcyA9IFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gYWN0aXZlSXRlbUluZGV4KSB7XG4gICAgICBjb25zdCBuZXdDaGlsZFByb3BzID0ge307XG5cbiAgICAgIGlmIChhdXRvRm9jdXNJdGVtKSB7XG4gICAgICAgIG5ld0NoaWxkUHJvcHMuYXV0b0ZvY3VzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoaWxkLnByb3BzLnRhYkluZGV4ID09PSB1bmRlZmluZWQgJiYgdmFyaWFudCA9PT0gJ3NlbGVjdGVkTWVudScpIHtcbiAgICAgICAgbmV3Q2hpbGRQcm9wcy50YWJJbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBuZXdDaGlsZFByb3BzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdCwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IFwibWVudVwiLFxuICAgIHJlZjogaGFuZGxlUmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICB0YWJJbmRleDogYXV0b0ZvY3VzID8gMCA6IC0xXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IGl0ZW1zXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTWVudUxpc3QucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBmb2N1cyB0aGUgYFtyb2xlPVwibWVudVwiXWAgY29udGFpbmVyIGFuZCBtb3ZlIGludG8gdGFiIG9yZGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGZvY3VzIHRoZSBmaXJzdCBtZW51aXRlbSBpZiBgdmFyaWFudD1cIm1lbnVcImAgb3Igc2VsZWN0ZWQgaXRlbVxuICAgKiBpZiBgdmFyaWFudD1cInNlbGVjdGVkTWVudVwiYC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1c0l0ZW06IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBNZW51TGlzdCBjb250ZW50cywgbm9ybWFsbHkgYE1lbnVJdGVtYHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGFsbG93IGZvY3VzIG9uIGRpc2FibGVkIGl0ZW1zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1lbnUgaXRlbXMgd2lsbCBub3Qgd3JhcCBmb2N1cy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVMaXN0V3JhcDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS4gVXNlIGBtZW51YCB0byBwcmV2ZW50IHNlbGVjdGVkIGl0ZW1zIGZyb20gaW1wYWN0aW5nIHRoZSBpbml0aWFsIGZvY3VzXG4gICAqIGFuZCB0aGUgdmVydGljYWwgYWxpZ25tZW50IHJlbGF0aXZlIHRvIHRoZSBhbmNob3IgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgJ3NlbGVjdGVkTWVudSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ21lbnUnLCAnc2VsZWN0ZWRNZW51J10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTWVudUxpc3Q7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcGVyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlQYXBlcicsIHNsb3QpO1xufVxuY29uc3QgcGFwZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUGFwZXInLCBbJ3Jvb3QnLCAncm91bmRlZCcsICdvdXRsaW5lZCcsICdlbGV2YXRpb24nLCAnZWxldmF0aW9uMCcsICdlbGV2YXRpb24xJywgJ2VsZXZhdGlvbjInLCAnZWxldmF0aW9uMycsICdlbGV2YXRpb240JywgJ2VsZXZhdGlvbjUnLCAnZWxldmF0aW9uNicsICdlbGV2YXRpb243JywgJ2VsZXZhdGlvbjgnLCAnZWxldmF0aW9uOScsICdlbGV2YXRpb24xMCcsICdlbGV2YXRpb24xMScsICdlbGV2YXRpb24xMicsICdlbGV2YXRpb24xMycsICdlbGV2YXRpb24xNCcsICdlbGV2YXRpb24xNScsICdlbGV2YXRpb24xNicsICdlbGV2YXRpb24xNycsICdlbGV2YXRpb24xOCcsICdlbGV2YXRpb24xOScsICdlbGV2YXRpb24yMCcsICdlbGV2YXRpb24yMScsICdlbGV2YXRpb24yMicsICdlbGV2YXRpb24yMycsICdlbGV2YXRpb24yNCddKTtcbmV4cG9ydCBkZWZhdWx0IHBhcGVyQ2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZWxldmF0aW9uXCIsIFwic3F1YXJlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGNoYWluUHJvcFR5cGVzLCBpbnRlZ2VyUHJvcFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgZ2V0UGFwZXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BhcGVyQ2xhc3Nlcyc7IC8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtaW9zL2Jsb2IvYmNhMzYxMDc0MDU1OTRkNWI3YjE2MjY1YTViMGVkNjk4Zjg1YTVlZS9jb21wb25lbnRzL0VsZXZhdGlvbi9zcmMvVUlDb2xvciUyQk1hdGVyaWFsRWxldmF0aW9uLm0jTDYxXG5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3QgZ2V0T3ZlcmxheUFscGhhID0gZWxldmF0aW9uID0+IHtcbiAgbGV0IGFscGhhVmFsdWU7XG5cbiAgaWYgKGVsZXZhdGlvbiA8IDEpIHtcbiAgICBhbHBoYVZhbHVlID0gNS4xMTkxNiAqIGVsZXZhdGlvbiAqKiAyO1xuICB9IGVsc2Uge1xuICAgIGFscGhhVmFsdWUgPSA0LjUgKiBNYXRoLmxvZyhlbGV2YXRpb24gKyAxKSArIDI7XG4gIH1cblxuICByZXR1cm4gKGFscGhhVmFsdWUgLyAxMDApLnRvRml4ZWQoMik7XG59O1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgc3F1YXJlLFxuICAgIGVsZXZhdGlvbixcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsICFzcXVhcmUgJiYgJ3JvdW5kZWQnLCB2YXJpYW50ID09PSAnZWxldmF0aW9uJyAmJiBgZWxldmF0aW9uJHtlbGV2YXRpb259YF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRQYXBlclV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBQYXBlclJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVBhcGVyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCAhb3duZXJTdGF0ZS5zcXVhcmUgJiYgc3R5bGVzLnJvdW5kZWQsIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgc3R5bGVzW2BlbGV2YXRpb24ke293bmVyU3RhdGUuZWxldmF0aW9ufWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR2YXJzJG92ZXJsYXlzO1xuXG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLnBhcGVyLFxuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnksXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3gtc2hhZG93JylcbiAgfSwgIW93bmVyU3RhdGUuc3F1YXJlICYmIHtcbiAgICBib3JkZXJSYWRpdXM6IHRoZW1lLnNoYXBlLmJvcmRlclJhZGl1c1xuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmRpdmlkZXJ9YFxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdlbGV2YXRpb24nICYmIF9leHRlbmRzKHtcbiAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzW293bmVyU3RhdGUuZWxldmF0aW9uXVxuICB9LCAhdGhlbWUudmFycyAmJiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyAmJiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiBgbGluZWFyLWdyYWRpZW50KCR7YWxwaGEoJyNmZmYnLCBnZXRPdmVybGF5QWxwaGEob3duZXJTdGF0ZS5lbGV2YXRpb24pKX0sICR7YWxwaGEoJyNmZmYnLCBnZXRPdmVybGF5QWxwaGEob3duZXJTdGF0ZS5lbGV2YXRpb24pKX0pYFxuICB9LCB0aGVtZS52YXJzICYmIHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IChfdGhlbWUkdmFycyRvdmVybGF5cyA9IHRoZW1lLnZhcnMub3ZlcmxheXMpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdmFycyRvdmVybGF5c1tvd25lclN0YXRlLmVsZXZhdGlvbl1cbiAgfSkpO1xufSk7XG5jb25zdCBQYXBlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBhcGVyKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlQYXBlcidcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICBlbGV2YXRpb24gPSAxLFxuICAgIHNxdWFyZSA9IGZhbHNlLFxuICAgIHZhcmlhbnQgPSAnZWxldmF0aW9uJ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBlbGV2YXRpb24sXG4gICAgc3F1YXJlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuXG4gICAgaWYgKHRoZW1lLnNoYWRvd3NbZWxldmF0aW9uXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgZWxldmF0aW9uIHByb3ZpZGVkIDxQYXBlciBlbGV2YXRpb249eyR7ZWxldmF0aW9ufX0+IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHRoZW1lLmAsIGBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgXFxgdGhlbWUuc2hhZG93c1ske2VsZXZhdGlvbn1dXFxgIGlzIGRlZmluZWQuYF0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQYXBlclJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQYXBlci5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogU2hhZG93IGRlcHRoLCBjb3JyZXNwb25kcyB0byBgZHBgIGluIHRoZSBzcGVjLlxuICAgKiBJdCBhY2NlcHRzIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI0IGluY2x1c2l2ZS5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgZWxldmF0aW9uOiBjaGFpblByb3BUeXBlcyhpbnRlZ2VyUHJvcFR5cGUsIHByb3BzID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbGV2YXRpb24sXG4gICAgICB2YXJpYW50XG4gICAgfSA9IHByb3BzO1xuXG4gICAgaWYgKGVsZXZhdGlvbiA+IDAgJiYgdmFyaWFudCA9PT0gJ291dGxpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihgTVVJOiBDb21iaW5pbmcgXFxgZWxldmF0aW9uPXske2VsZXZhdGlvbn19XFxgIHdpdGggXFxgdmFyaWFudD1cIiR7dmFyaWFudH1cIlxcYCBoYXMgbm8gZWZmZWN0LiBFaXRoZXIgdXNlIFxcYGVsZXZhdGlvbj17MH1cXGAgb3IgdXNlIGEgZGlmZmVyZW50IFxcYHZhcmlhbnRcXGAuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHJvdW5kZWQgY29ybmVycyBhcmUgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzcXVhcmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ2VsZXZhdGlvbidcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2VsZXZhdGlvbicsICdvdXRsaW5lZCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUGFwZXI7IiwiZXhwb3J0IHZhciBmb3JjZVJlZmxvdyA9IGZ1bmN0aW9uIGZvcmNlUmVmbG93KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsVG9wO1xufTsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgdGltZW91dHNTaGFwZSB9IGZyb20gJy4vdXRpbHMvUHJvcFR5cGVzJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcbmV4cG9ydCB2YXIgVU5NT1VOVEVEID0gJ3VubW91bnRlZCc7XG5leHBvcnQgdmFyIEVYSVRFRCA9ICdleGl0ZWQnO1xuZXhwb3J0IHZhciBFTlRFUklORyA9ICdlbnRlcmluZyc7XG5leHBvcnQgdmFyIEVOVEVSRUQgPSAnZW50ZXJlZCc7XG5leHBvcnQgdmFyIEVYSVRJTkcgPSAnZXhpdGluZyc7XG4vKipcbiAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudCBsZXRzIHlvdSBkZXNjcmliZSBhIHRyYW5zaXRpb24gZnJvbSBvbmUgY29tcG9uZW50XG4gKiBzdGF0ZSB0byBhbm90aGVyIF9vdmVyIHRpbWVfIHdpdGggYSBzaW1wbGUgZGVjbGFyYXRpdmUgQVBJLiBNb3N0IGNvbW1vbmx5XG4gKiBpdCdzIHVzZWQgdG8gYW5pbWF0ZSB0aGUgbW91bnRpbmcgYW5kIHVubW91bnRpbmcgb2YgYSBjb21wb25lbnQsIGJ1dCBjYW4gYWxzb1xuICogYmUgdXNlZCB0byBkZXNjcmliZSBpbi1wbGFjZSB0cmFuc2l0aW9uIHN0YXRlcyBhcyB3ZWxsLlxuICpcbiAqIC0tLVxuICpcbiAqICoqTm90ZSoqOiBgVHJhbnNpdGlvbmAgaXMgYSBwbGF0Zm9ybS1hZ25vc3RpYyBiYXNlIGNvbXBvbmVudC4gSWYgeW91J3JlIHVzaW5nXG4gKiB0cmFuc2l0aW9ucyBpbiBDU1MsIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZVxuICogW2BDU1NUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9jc3MtdHJhbnNpdGlvbilcbiAqIGluc3RlYWQuIEl0IGluaGVyaXRzIGFsbCB0aGUgZmVhdHVyZXMgb2YgYFRyYW5zaXRpb25gLCBidXQgY29udGFpbnNcbiAqIGFkZGl0aW9uYWwgZmVhdHVyZXMgbmVjZXNzYXJ5IHRvIHBsYXkgbmljZSB3aXRoIENTUyB0cmFuc2l0aW9ucyAoaGVuY2UgdGhlXG4gKiBuYW1lIG9mIHRoZSBjb21wb25lbnQpLlxuICpcbiAqIC0tLVxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGBUcmFuc2l0aW9uYCBjb21wb25lbnQgZG9lcyBub3QgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHRoZVxuICogY29tcG9uZW50IGl0IHJlbmRlcnMsIGl0IG9ubHkgdHJhY2tzIFwiZW50ZXJcIiBhbmQgXCJleGl0XCIgc3RhdGVzIGZvciB0aGVcbiAqIGNvbXBvbmVudHMuIEl0J3MgdXAgdG8geW91IHRvIGdpdmUgbWVhbmluZyBhbmQgZWZmZWN0IHRvIHRob3NlIHN0YXRlcy4gRm9yXG4gKiBleGFtcGxlIHdlIGNhbiBhZGQgc3R5bGVzIHRvIGEgY29tcG9uZW50IHdoZW4gaXQgZW50ZXJzIG9yIGV4aXRzOlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuICpcbiAqIGNvbnN0IGR1cmF0aW9uID0gMzAwO1xuICpcbiAqIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAqICAgdHJhbnNpdGlvbjogYG9wYWNpdHkgJHtkdXJhdGlvbn1tcyBlYXNlLWluLW91dGAsXG4gKiAgIG9wYWNpdHk6IDAsXG4gKiB9XG4gKlxuICogY29uc3QgdHJhbnNpdGlvblN0eWxlcyA9IHtcbiAqICAgZW50ZXJpbmc6IHsgb3BhY2l0eTogMSB9LFxuICogICBlbnRlcmVkOiAgeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGV4aXRpbmc6ICB7IG9wYWNpdHk6IDAgfSxcbiAqICAgZXhpdGVkOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiB9O1xuICpcbiAqIGNvbnN0IEZhZGUgPSAoeyBpbjogaW5Qcm9wIH0pID0+IChcbiAqICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17ZHVyYXRpb259PlxuICogICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICA8ZGl2IHN0eWxlPXt7XG4gKiAgICAgICAgIC4uLmRlZmF1bHRTdHlsZSxcbiAqICAgICAgICAgLi4udHJhbnNpdGlvblN0eWxlc1tzdGF0ZV1cbiAqICAgICAgIH19PlxuICogICAgICAgICBJJ20gYSBmYWRlIFRyYW5zaXRpb24hXG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICApfVxuICogICA8L1RyYW5zaXRpb24+XG4gKiApO1xuICogYGBgXG4gKlxuICogVGhlcmUgYXJlIDQgbWFpbiBzdGF0ZXMgYSBUcmFuc2l0aW9uIGNhbiBiZSBpbjpcbiAqICAtIGAnZW50ZXJpbmcnYFxuICogIC0gYCdlbnRlcmVkJ2BcbiAqICAtIGAnZXhpdGluZydgXG4gKiAgLSBgJ2V4aXRlZCdgXG4gKlxuICogVHJhbnNpdGlvbiBzdGF0ZSBpcyB0b2dnbGVkIHZpYSB0aGUgYGluYCBwcm9wLiBXaGVuIGB0cnVlYCB0aGUgY29tcG9uZW50XG4gKiBiZWdpbnMgdGhlIFwiRW50ZXJcIiBzdGFnZS4gRHVyaW5nIHRoaXMgc3RhZ2UsIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCBmcm9tXG4gKiBpdHMgY3VycmVudCB0cmFuc2l0aW9uIHN0YXRlLCB0byBgJ2VudGVyaW5nJ2AgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGVcbiAqIHRyYW5zaXRpb24gYW5kIHRoZW4gdG8gdGhlIGAnZW50ZXJlZCdgIHN0YWdlIG9uY2UgaXQncyBjb21wbGV0ZS4gTGV0J3MgdGFrZVxuICogdGhlIGZvbGxvd2luZyBleGFtcGxlICh3ZSdsbCB1c2UgdGhlXG4gKiBbdXNlU3RhdGVdKGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VzdGF0ZSkgaG9vayk6XG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezUwMH0+XG4gKiAgICAgICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICAgICAgLy8gLi4uXG4gKiAgICAgICAgICl9XG4gKiAgICAgICA8L1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCB0byB0aGUgYCdlbnRlcmluZydgIHN0YXRlXG4gKiBhbmQgc3RheSB0aGVyZSBmb3IgNTAwbXMgKHRoZSB2YWx1ZSBvZiBgdGltZW91dGApIGJlZm9yZSBpdCBmaW5hbGx5IHN3aXRjaGVzXG4gKiB0byBgJ2VudGVyZWQnYC5cbiAqXG4gKiBXaGVuIGBpbmAgaXMgYGZhbHNlYCB0aGUgc2FtZSB0aGluZyBoYXBwZW5zIGV4Y2VwdCB0aGUgc3RhdGUgbW92ZXMgZnJvbVxuICogYCdleGl0aW5nJ2AgdG8gYCdleGl0ZWQnYC5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG4gICAgdmFyIHBhcmVudEdyb3VwID0gY29udGV4dDsgLy8gSW4gdGhlIGNvbnRleHQgb2YgYSBUcmFuc2l0aW9uR3JvdXAgYWxsIGVudGVycyBhcmUgcmVhbGx5IGFwcGVhcnNcblxuICAgIHZhciBhcHBlYXIgPSBwYXJlbnRHcm91cCAmJiAhcGFyZW50R3JvdXAuaXNNb3VudGluZyA/IHByb3BzLmVudGVyIDogcHJvcHMuYXBwZWFyO1xuICAgIHZhciBpbml0aWFsU3RhdHVzO1xuICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJvcHMuaW4pIHtcbiAgICAgIGlmIChhcHBlYXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gRU5URVJJTkc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRU5URVJFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3BzLnVubW91bnRPbkV4aXQgfHwgcHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBVTk1PVU5URUQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBpbml0aWFsU3RhdHVzXG4gICAgfTtcbiAgICBfdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKF9yZWYsIHByZXZTdGF0ZSkge1xuICAgIHZhciBuZXh0SW4gPSBfcmVmLmluO1xuXG4gICAgaWYgKG5leHRJbiAmJiBwcmV2U3RhdGUuc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAvLyAgIGxldCBuZXh0U3RhdHVzID0gbnVsbFxuICAvLyAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgLy8gICAgIGNvbnN0IHsgc3RhdHVzIH0gPSB0aGlzLnN0YXRlXG4gIC8vICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAvLyAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4geyBuZXh0U3RhdHVzIH1cbiAgLy8gfVxuICA7XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3RhdHVzKHRydWUsIHRoaXMuYXBwZWFyU3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBuZXh0U3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElORztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKGZhbHNlLCBuZXh0U3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuICB9O1xuXG4gIF9wcm90by5nZXRUaW1lb3V0cyA9IGZ1bmN0aW9uIGdldFRpbWVvdXRzKCkge1xuICAgIHZhciB0aW1lb3V0ID0gdGhpcy5wcm9wcy50aW1lb3V0O1xuICAgIHZhciBleGl0LCBlbnRlciwgYXBwZWFyO1xuICAgIGV4aXQgPSBlbnRlciA9IGFwcGVhciA9IHRpbWVvdXQ7XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsICYmIHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgZXhpdCA9IHRpbWVvdXQuZXhpdDtcbiAgICAgIGVudGVyID0gdGltZW91dC5lbnRlcjsgLy8gVE9ETzogcmVtb3ZlIGZhbGxiYWNrIGZvciBuZXh0IG1ham9yXG5cbiAgICAgIGFwcGVhciA9IHRpbWVvdXQuYXBwZWFyICE9PSB1bmRlZmluZWQgPyB0aW1lb3V0LmFwcGVhciA6IGVudGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleGl0OiBleGl0LFxuICAgICAgZW50ZXI6IGVudGVyLFxuICAgICAgYXBwZWFyOiBhcHBlYXJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGF0dXMgPSBmdW5jdGlvbiB1cGRhdGVTdGF0dXMobW91bnRpbmcsIG5leHRTdGF0dXMpIHtcbiAgICBpZiAobW91bnRpbmcgPT09IHZvaWQgMCkge1xuICAgICAgbW91bnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgLy8gbmV4dFN0YXR1cyB3aWxsIGFsd2F5cyBiZSBFTlRFUklORyBvciBFWElUSU5HLlxuICAgICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcblxuICAgICAgaWYgKG5leHRTdGF0dXMgPT09IEVOVEVSSU5HKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgfHwgdGhpcy5wcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvcHVsbC83NDlcbiAgICAgICAgICAvLyBXaXRoIHVubW91bnRPbkV4aXQgb3IgbW91bnRPbkVudGVyLCB0aGUgZW50ZXIgYW5pbWF0aW9uIHNob3VsZCBoYXBwZW4gYXQgdGhlIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhpdGVkYCBhbmQgYGVudGVyaW5nYC5cbiAgICAgICAgICAvLyBUbyBtYWtlIHRoZSBhbmltYXRpb24gaGFwcGVuLCAgd2UgaGF2ZSB0byBzZXBhcmF0ZSBlYWNoIHJlbmRlcmluZyBhbmQgYXZvaWQgYmVpbmcgcHJvY2Vzc2VkIGFzIGJhdGNoZWQuXG5cbiAgICAgICAgICBpZiAobm9kZSkgZm9yY2VSZWZsb3cobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBlcmZvcm1FbnRlcihtb3VudGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcmZvcm1FeGl0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgJiYgdGhpcy5zdGF0ZS5zdGF0dXMgPT09IEVYSVRFRCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogVU5NT1VOVEVEXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FbnRlciA9IGZ1bmN0aW9uIHBlcmZvcm1FbnRlcihtb3VudGluZykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGVudGVyID0gdGhpcy5wcm9wcy5lbnRlcjtcbiAgICB2YXIgYXBwZWFyaW5nID0gdGhpcy5jb250ZXh0ID8gdGhpcy5jb250ZXh0LmlzTW91bnRpbmcgOiBtb3VudGluZztcblxuICAgIHZhciBfcmVmMiA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFthcHBlYXJpbmddIDogW1JlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpLCBhcHBlYXJpbmddLFxuICAgICAgICBtYXliZU5vZGUgPSBfcmVmMlswXSxcbiAgICAgICAgbWF5YmVBcHBlYXJpbmcgPSBfcmVmMlsxXTtcblxuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgZW50ZXJUaW1lb3V0ID0gYXBwZWFyaW5nID8gdGltZW91dHMuYXBwZWFyIDogdGltZW91dHMuZW50ZXI7IC8vIG5vIGVudGVyIGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVOVEVSRURcbiAgICAvLyBpZiB3ZSBhcmUgbW91bnRpbmcgYW5kIHJ1bm5pbmcgdGhpcyBpdCBtZWFucyBhcHBlYXIgX211c3RfIGJlIHNldFxuXG4gICAgaWYgKCFtb3VudGluZyAmJiAhZW50ZXIgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyaW5nKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuXG4gICAgICBfdGhpczIub25UcmFuc2l0aW9uRW5kKGVudGVyVGltZW91dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FeGl0ID0gZnVuY3Rpb24gcGVyZm9ybUV4aXQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgZXhpdCA9IHRoaXMucHJvcHMuZXhpdDtcbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIG1heWJlTm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBubyBleGl0IGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVYSVRFRFxuXG4gICAgaWYgKCFleGl0IHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FeGl0KG1heWJlTm9kZSk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuXG4gICAgICBfdGhpczMub25UcmFuc2l0aW9uRW5kKHRpbWVvdXRzLmV4aXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxOZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBjYW5jZWxOZXh0Q2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMubmV4dENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwoKTtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNhZmVTZXRTdGF0ZSA9IGZ1bmN0aW9uIHNhZmVTZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBidXQgdGhlcmUgYXJlIHdlaXJkIHJhY2UgY29uZGl0aW9ucyB3aXRoXG4gICAgLy8gc2V0U3RhdGUgY2FsbGJhY2tzIGFuZCB1bm1vdW50aW5nIGluIHRlc3RpbmcsIHNvIGFsd2F5cyBtYWtlIHN1cmUgdGhhdFxuICAgIC8vIHdlIGNhbiBjYW5jZWwgYW55IHBlbmRpbmcgc2V0U3RhdGUgY2FsbGJhY2tzIGFmdGVyIHdlIHVubW91bnQuXG4gICAgY2FsbGJhY2sgPSB0aGlzLnNldE5leHRDYWxsYmFjayhjYWxsYmFjayk7XG4gICAgdGhpcy5zZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0TmV4dENhbGxiYWNrID0gZnVuY3Rpb24gc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgYWN0aXZlID0gdHJ1ZTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpczQubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMubmV4dENhbGxiYWNrO1xuICB9O1xuXG4gIF9wcm90by5vblRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQodGltZW91dCwgaGFuZGxlcikge1xuICAgIHRoaXMuc2V0TmV4dENhbGxiYWNrKGhhbmRsZXIpO1xuICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICB2YXIgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciA9IHRpbWVvdXQgPT0gbnVsbCAmJiAhdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcjtcblxuICAgIGlmICghbm9kZSB8fCBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcikge1xuICAgICAgdmFyIF9yZWYzID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW3RoaXMubmV4dENhbGxiYWNrXSA6IFtub2RlLCB0aGlzLm5leHRDYWxsYmFja10sXG4gICAgICAgICAgbWF5YmVOb2RlID0gX3JlZjNbMF0sXG4gICAgICAgICAgbWF5YmVOZXh0Q2FsbGJhY2sgPSBfcmVmM1sxXTtcblxuICAgICAgdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcihtYXliZU5vZGUsIG1heWJlTmV4dENhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCB0aW1lb3V0KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICBpZiAoc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIF9pbiA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBfbW91bnRPbkVudGVyID0gX3RoaXMkcHJvcHMubW91bnRPbkVudGVyLFxuICAgICAgICBfdW5tb3VudE9uRXhpdCA9IF90aGlzJHByb3BzLnVubW91bnRPbkV4aXQsXG4gICAgICAgIF9hcHBlYXIgPSBfdGhpcyRwcm9wcy5hcHBlYXIsXG4gICAgICAgIF9lbnRlciA9IF90aGlzJHByb3BzLmVudGVyLFxuICAgICAgICBfZXhpdCA9IF90aGlzJHByb3BzLmV4aXQsXG4gICAgICAgIF90aW1lb3V0ID0gX3RoaXMkcHJvcHMudGltZW91dCxcbiAgICAgICAgX2FkZEVuZExpc3RlbmVyID0gX3RoaXMkcHJvcHMuYWRkRW5kTGlzdGVuZXIsXG4gICAgICAgIF9vbkVudGVyID0gX3RoaXMkcHJvcHMub25FbnRlcixcbiAgICAgICAgX29uRW50ZXJpbmcgPSBfdGhpcyRwcm9wcy5vbkVudGVyaW5nLFxuICAgICAgICBfb25FbnRlcmVkID0gX3RoaXMkcHJvcHMub25FbnRlcmVkLFxuICAgICAgICBfb25FeGl0ID0gX3RoaXMkcHJvcHMub25FeGl0LFxuICAgICAgICBfb25FeGl0aW5nID0gX3RoaXMkcHJvcHMub25FeGl0aW5nLFxuICAgICAgICBfb25FeGl0ZWQgPSBfdGhpcyRwcm9wcy5vbkV4aXRlZCxcbiAgICAgICAgX25vZGVSZWYgPSBfdGhpcyRwcm9wcy5ub2RlUmVmLFxuICAgICAgICBjaGlsZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIiwgXCJtb3VudE9uRW50ZXJcIiwgXCJ1bm1vdW50T25FeGl0XCIsIFwiYXBwZWFyXCIsIFwiZW50ZXJcIiwgXCJleGl0XCIsIFwidGltZW91dFwiLCBcImFkZEVuZExpc3RlbmVyXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRpbmdcIiwgXCJvbkV4aXRlZFwiLCBcIm5vZGVSZWZcIl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgIC8vIGFsbG93cyBmb3IgbmVzdGVkIFRyYW5zaXRpb25zXG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHN0YXR1cywgY2hpbGRQcm9wcykgOiBSZWFjdC5jbG9uZUVsZW1lbnQoUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbiksIGNoaWxkUHJvcHMpKVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb24uY29udGV4dFR5cGUgPSBUcmFuc2l0aW9uR3JvdXBDb250ZXh0O1xuVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBBIFJlYWN0IHJlZmVyZW5jZSB0byBET00gZWxlbWVudCB0aGF0IG5lZWQgdG8gdHJhbnNpdGlvbjpcbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxMTI3MTMwLzQ2NzE5MzJcbiAgICpcbiAgICogICAtIFdoZW4gYG5vZGVSZWZgIHByb3AgaXMgdXNlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQgdG8gY2FsbGJhY2sgZnVuY3Rpb25zXG4gICAqICAgICAgKGUuZy4gYG9uRW50ZXJgKSBiZWNhdXNlIHVzZXIgYWxyZWFkeSBoYXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgbm9kZS5cbiAgICogICAtIFdoZW4gY2hhbmdpbmcgYGtleWAgcHJvcCBvZiBgVHJhbnNpdGlvbmAgaW4gYSBgVHJhbnNpdGlvbkdyb3VwYCBhIG5ld1xuICAgKiAgICAgYG5vZGVSZWZgIG5lZWQgdG8gYmUgcHJvdmlkZWQgdG8gYFRyYW5zaXRpb25gIHdpdGggY2hhbmdlZCBga2V5YCBwcm9wXG4gICAqICAgICAoc2VlXG4gICAqICAgICBbdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi8xMzQzNWY4OTdiM2FiNzFmNmUxOWQ3MjRmMTQ1NTk2ZjU5MTA1ODFjL3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzI0wzNjItTDQzNykpLlxuICAgKi9cbiAgbm9kZVJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgPyBQcm9wVHlwZXMuYW55IDogZnVuY3Rpb24gKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHByb3BWYWx1ZVtrZXldO1xuICAgICAgcmV0dXJuIFByb3BUeXBlcy5pbnN0YW5jZU9mKHZhbHVlICYmICdvd25lckRvY3VtZW50JyBpbiB2YWx1ZSA/IHZhbHVlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuRWxlbWVudCA6IEVsZW1lbnQpKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpO1xuICAgIH1cbiAgfSksXG5cbiAgLyoqXG4gICAqIEEgYGZ1bmN0aW9uYCBjaGlsZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgUmVhY3QgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpc1xuICAgKiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCB0cmFuc2l0aW9uIHN0YXR1cyAoYCdlbnRlcmluZydgLCBgJ2VudGVyZWQnYCxcbiAgICogYCdleGl0aW5nJ2AsIGAnZXhpdGVkJ2ApLCB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHBseSBjb250ZXh0XG4gICAqIHNwZWNpZmljIHByb3BzIHRvIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogPFRyYW5zaXRpb24gaW49e3RoaXMuc3RhdGUuaW59IHRpbWVvdXQ9ezE1MH0+XG4gICAqICAge3N0YXRlID0+IChcbiAgICogICAgIDxNeUNvbXBvbmVudCBjbGFzc05hbWU9e2BmYWRlIGZhZGUtJHtzdGF0ZX1gfSAvPlxuICAgKiAgICl9XG4gICAqIDwvVHJhbnNpdGlvbj5cbiAgICogYGBgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIGNvbXBvbmVudDsgdHJpZ2dlcnMgdGhlIGVudGVyIG9yIGV4aXQgc3RhdGVzXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBtb3VudGVkIGltbWVkaWF0ZWx5IGFsb25nIHdpdGhcbiAgICogdGhlIHBhcmVudCBgVHJhbnNpdGlvbmAgY29tcG9uZW50LiBJZiB5b3Ugd2FudCB0byBcImxhenkgbW91bnRcIiB0aGUgY29tcG9uZW50IG9uIHRoZVxuICAgKiBmaXJzdCBgaW49e3RydWV9YCB5b3UgY2FuIHNldCBgbW91bnRPbkVudGVyYC4gQWZ0ZXIgdGhlIGZpcnN0IGVudGVyIHRyYW5zaXRpb24gdGhlIGNvbXBvbmVudCB3aWxsIHN0YXlcbiAgICogbW91bnRlZCwgZXZlbiBvbiBcImV4aXRlZFwiLCB1bmxlc3MgeW91IGFsc28gc3BlY2lmeSBgdW5tb3VudE9uRXhpdGAuXG4gICAqL1xuICBtb3VudE9uRW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgc3RheXMgbW91bnRlZCBhZnRlciBpdCByZWFjaGVzIHRoZSBgJ2V4aXRlZCdgIHN0YXRlLlxuICAgKiBTZXQgYHVubW91bnRPbkV4aXRgIGlmIHlvdSdkIHByZWZlciB0byB1bm1vdW50IHRoZSBjb21wb25lbnQgYWZ0ZXIgaXQgZmluaXNoZXMgZXhpdGluZy5cbiAgICovXG4gIHVubW91bnRPbkV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgZG9lcyBub3QgcGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuXG4gICAqIGl0IGZpcnN0IG1vdW50cywgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgYGluYC4gSWYgeW91IHdhbnQgdGhpc1xuICAgKiBiZWhhdmlvciwgc2V0IGJvdGggYGFwcGVhcmAgYW5kIGBpbmAgdG8gYHRydWVgLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiB0aGVyZSBhcmUgbm8gc3BlY2lhbCBhcHBlYXIgc3RhdGVzIGxpa2UgYGFwcGVhcmluZ2AvYGFwcGVhcmVkYCwgdGhpcyBwcm9wXG4gICAqID4gb25seSBhZGRzIGFuIGFkZGl0aW9uYWwgZW50ZXIgdHJhbnNpdGlvbi4gSG93ZXZlciwgaW4gdGhlXG4gICAqID4gYDxDU1NUcmFuc2l0aW9uPmAgY29tcG9uZW50IHRoYXQgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiBkb2VzIHJlc3VsdCBpblxuICAgKiA+IGFkZGl0aW9uYWwgYC5hcHBlYXItKmAgY2xhc3NlcywgdGhhdCB3YXkgeW91IGNhbiBjaG9vc2UgdG8gc3R5bGUgaXRcbiAgICogPiBkaWZmZXJlbnRseS5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGVudGVyIHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBleGl0IHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBSZXF1aXJlZCB1bmxlc3MgYGFkZEVuZExpc3RlbmVyYCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9uczpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9ezUwMH1cbiAgICogYGBgXG4gICAqXG4gICAqIG9yIGluZGl2aWR1YWxseTpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9e3tcbiAgICogIGFwcGVhcjogNTAwLFxuICAgKiAgZW50ZXI6IDMwMCxcbiAgICogIGV4aXQ6IDUwMCxcbiAgICogfX1cbiAgICogYGBgXG4gICAqXG4gICAqIC0gYGFwcGVhcmAgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGBlbnRlcmBcbiAgICogLSBgZW50ZXJgIGRlZmF1bHRzIHRvIGAwYFxuICAgKiAtIGBleGl0YCBkZWZhdWx0cyB0byBgMGBcbiAgICpcbiAgICogQHR5cGUge251bWJlciB8IHsgZW50ZXI/OiBudW1iZXIsIGV4aXQ/OiBudW1iZXIsIGFwcGVhcj86IG51bWJlciB9fVxuICAgKi9cbiAgdGltZW91dDogZnVuY3Rpb24gdGltZW91dChwcm9wcykge1xuICAgIHZhciBwdCA9IHRpbWVvdXRzU2hhcGU7XG4gICAgaWYgKCFwcm9wcy5hZGRFbmRMaXN0ZW5lcikgcHQgPSBwdC5pc1JlcXVpcmVkO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHB0LmFwcGx5KHZvaWQgMCwgW3Byb3BzXS5jb25jYXQoYXJncykpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmdcbiAgICogRE9NIG5vZGUgYW5kIGEgYGRvbmVgIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiB7XG4gICAqICAgLy8gdXNlIHRoZSBjc3MgdHJhbnNpdGlvbmVuZCBldmVudCB0byBtYXJrIHRoZSBmaW5pc2ggb2YgYSB0cmFuc2l0aW9uXG4gICAqICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZG9uZSwgZmFsc2UpO1xuICAgKiB9fVxuICAgKiBgYGBcbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTsgLy8gTmFtZSB0aGUgZnVuY3Rpb24gc28gaXQgaXMgY2xlYXJlciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuXG5mdW5jdGlvbiBub29wKCkge31cblxuVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGluOiBmYWxzZSxcbiAgbW91bnRPbkVudGVyOiBmYWxzZSxcbiAgdW5tb3VudE9uRXhpdDogZmFsc2UsXG4gIGFwcGVhcjogZmFsc2UsXG4gIGVudGVyOiB0cnVlLFxuICBleGl0OiB0cnVlLFxuICBvbkVudGVyOiBub29wLFxuICBvbkVudGVyaW5nOiBub29wLFxuICBvbkVudGVyZWQ6IG5vb3AsXG4gIG9uRXhpdDogbm9vcCxcbiAgb25FeGl0aW5nOiBub29wLFxuICBvbkV4aXRlZDogbm9vcFxufTtcblRyYW5zaXRpb24uVU5NT1VOVEVEID0gVU5NT1VOVEVEO1xuVHJhbnNpdGlvbi5FWElURUQgPSBFWElURUQ7XG5UcmFuc2l0aW9uLkVOVEVSSU5HID0gRU5URVJJTkc7XG5UcmFuc2l0aW9uLkVOVEVSRUQgPSBFTlRFUkVEO1xuVHJhbnNpdGlvbi5FWElUSU5HID0gRVhJVElORztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb247IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVGhlbWUgYXMgdXNlVGhlbWVTeXN0ZW0gfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lU3lzdGVtKGRlZmF1bHRUaGVtZSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VEZWJ1Z1ZhbHVlKHRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiB0aGVtZTtcbn0iLCJleHBvcnQgY29uc3QgcmVmbG93ID0gbm9kZSA9PiBub2RlLnNjcm9sbFRvcDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uUHJvcHMocHJvcHMsIG9wdGlvbnMpIHtcbiAgdmFyIF9zdHlsZSR0cmFuc2l0aW9uRHVyYSwgX3N0eWxlJHRyYW5zaXRpb25UaW1pO1xuXG4gIGNvbnN0IHtcbiAgICB0aW1lb3V0LFxuICAgIGVhc2luZyxcbiAgICBzdHlsZSA9IHt9XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIHtcbiAgICBkdXJhdGlvbjogKF9zdHlsZSR0cmFuc2l0aW9uRHVyYSA9IHN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbikgIT0gbnVsbCA/IF9zdHlsZSR0cmFuc2l0aW9uRHVyYSA6IHR5cGVvZiB0aW1lb3V0ID09PSAnbnVtYmVyJyA/IHRpbWVvdXQgOiB0aW1lb3V0W29wdGlvbnMubW9kZV0gfHwgMCxcbiAgICBlYXNpbmc6IChfc3R5bGUkdHJhbnNpdGlvblRpbWkgPSBzdHlsZS50cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24pICE9IG51bGwgPyBfc3R5bGUkdHJhbnNpdGlvblRpbWkgOiB0eXBlb2YgZWFzaW5nID09PSAnb2JqZWN0JyA/IGVhc2luZ1tvcHRpb25zLm1vZGVdIDogZWFzaW5nLFxuICAgIGRlbGF5OiBzdHlsZS50cmFuc2l0aW9uRGVsYXlcbiAgfTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWRkRW5kTGlzdGVuZXJcIiwgXCJhcHBlYXJcIiwgXCJjaGlsZHJlblwiLCBcImVhc2luZ1wiLCBcImluXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRlZFwiLCBcIm9uRXhpdGluZ1wiLCBcInN0eWxlXCIsIFwidGltZW91dFwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgeyBnZXRUcmFuc2l0aW9uUHJvcHMsIHJlZmxvdyB9IGZyb20gJy4uL3RyYW5zaXRpb25zL3V0aWxzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuZnVuY3Rpb24gZ2V0U2NhbGUodmFsdWUpIHtcbiAgcmV0dXJuIGBzY2FsZSgke3ZhbHVlfSwgJHt2YWx1ZSAqKiAyfSlgO1xufVxuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGVudGVyaW5nOiB7XG4gICAgb3BhY2l0eTogMSxcbiAgICB0cmFuc2Zvcm06IGdldFNjYWxlKDEpXG4gIH0sXG4gIGVudGVyZWQ6IHtcbiAgICBvcGFjaXR5OiAxLFxuICAgIHRyYW5zZm9ybTogJ25vbmUnXG4gIH1cbn07XG4vKlxuIFRPRE8gdjY6IHJlbW92ZVxuIENvbmRpdGlvbmFsbHkgYXBwbHkgYSB3b3JrYXJvdW5kIGZvciB0aGUgQ1NTIHRyYW5zaXRpb24gYnVnIGluIFNhZmFyaSAxNS40IC8gV2ViS2l0IGJyb3dzZXJzLlxuICovXG5cbmNvbnN0IGlzV2ViS2l0MTU0ID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL14oKD8hY2hyb21lfGFuZHJvaWQpLikqKHNhZmFyaXxtb2JpbGUpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvKG9zIHx2ZXJzaW9uXFwvKTE1KC58Xyk0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbi8qKlxuICogVGhlIEdyb3cgdHJhbnNpdGlvbiBpcyB1c2VkIGJ5IHRoZSBbVG9vbHRpcF0oL21hdGVyaWFsLXVpL3JlYWN0LXRvb2x0aXAvKSBhbmRcbiAqIFtQb3BvdmVyXSgvbWF0ZXJpYWwtdWkvcmVhY3QtcG9wb3Zlci8pIGNvbXBvbmVudHMuXG4gKiBJdCB1c2VzIFtyZWFjdC10cmFuc2l0aW9uLWdyb3VwXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwKSBpbnRlcm5hbGx5LlxuICovXG5cbmNvbnN0IEdyb3cgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcm93KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgIGFkZEVuZExpc3RlbmVyLFxuICAgIGFwcGVhciA9IHRydWUsXG4gICAgY2hpbGRyZW4sXG4gICAgZWFzaW5nLFxuICAgIGluOiBpblByb3AsXG4gICAgb25FbnRlcixcbiAgICBvbkVudGVyZWQsXG4gICAgb25FbnRlcmluZyxcbiAgICBvbkV4aXQsXG4gICAgb25FeGl0ZWQsXG4gICAgb25FeGl0aW5nLFxuICAgIHN0eWxlLFxuICAgIHRpbWVvdXQgPSAnYXV0bycsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gVHJhbnNpdGlvblxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgdGltZXIgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgYXV0b1RpbWVvdXQgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBub2RlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBmb3JlaWduUmVmID0gdXNlRm9ya1JlZihjaGlsZHJlbi5yZWYsIHJlZik7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobm9kZVJlZiwgZm9yZWlnblJlZik7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayA9IGNhbGxiYWNrID0+IG1heWJlSXNBcHBlYXJpbmcgPT4ge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVSZWYuY3VycmVudDsgLy8gb25FbnRlclh4eCBhbmQgb25FeGl0WHh4IGNhbGxiYWNrcyBoYXZlIGEgZGlmZmVyZW50IGFyZ3VtZW50cy5sZW5ndGggdmFsdWUuXG5cbiAgICAgIGlmIChtYXliZUlzQXBwZWFyaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhub2RlLCBtYXliZUlzQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRW50ZXJpbmcpO1xuICBjb25zdCBoYW5kbGVFbnRlciA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2soKG5vZGUsIGlzQXBwZWFyaW5nKSA9PiB7XG4gICAgcmVmbG93KG5vZGUpOyAvLyBTbyB0aGUgYW5pbWF0aW9uIGFsd2F5cyBzdGFydCBmcm9tIHRoZSBzdGFydC5cblxuICAgIGNvbnN0IHtcbiAgICAgIGR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICBkZWxheSxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZW50ZXInXG4gICAgfSk7XG4gICAgbGV0IGR1cmF0aW9uO1xuXG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgZHVyYXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5nZXRBdXRvSGVpZ2h0RHVyYXRpb24obm9kZS5jbGllbnRIZWlnaHQpO1xuICAgICAgYXV0b1RpbWVvdXQuY3VycmVudCA9IGR1cmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbjtcbiAgICB9XG5cbiAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSBbdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5Jywge1xuICAgICAgZHVyYXRpb24sXG4gICAgICBkZWxheVxuICAgIH0pLCB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgIGR1cmF0aW9uOiBpc1dlYktpdDE1NCA/IGR1cmF0aW9uIDogZHVyYXRpb24gKiAwLjY2NixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9KV0uam9pbignLCcpO1xuXG4gICAgaWYgKG9uRW50ZXIpIHtcbiAgICAgIG9uRW50ZXIobm9kZSwgaXNBcHBlYXJpbmcpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUVudGVyZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRW50ZXJlZCk7XG4gIGNvbnN0IGhhbmRsZUV4aXRpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGluZyk7XG4gIGNvbnN0IGhhbmRsZUV4aXQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG5vZGUgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICBkZWxheSxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZXhpdCdcbiAgICB9KTtcbiAgICBsZXQgZHVyYXRpb247XG5cbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICBkdXJhdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmdldEF1dG9IZWlnaHREdXJhdGlvbihub2RlLmNsaWVudEhlaWdodCk7XG4gICAgICBhdXRvVGltZW91dC5jdXJyZW50ID0gZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgIH1cblxuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IFt0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRlbGF5XG4gICAgfSksIHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgZHVyYXRpb246IGlzV2ViS2l0MTU0ID8gZHVyYXRpb24gOiBkdXJhdGlvbiAqIDAuNjY2LFxuICAgICAgZGVsYXk6IGlzV2ViS2l0MTU0ID8gZGVsYXkgOiBkZWxheSB8fCBkdXJhdGlvbiAqIDAuMzMzLFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9KV0uam9pbignLCcpO1xuICAgIG5vZGUuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgbm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBnZXRTY2FsZSgwLjc1KTtcblxuICAgIGlmIChvbkV4aXQpIHtcbiAgICAgIG9uRXhpdChub2RlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFeGl0ZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGVkKTtcblxuICBjb25zdCBoYW5kbGVBZGRFbmRMaXN0ZW5lciA9IG5leHQgPT4ge1xuICAgIGlmICh0aW1lb3V0ID09PSAnYXV0bycpIHtcbiAgICAgIHRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KG5leHQsIGF1dG9UaW1lb3V0LmN1cnJlbnQgfHwgMCk7XG4gICAgfVxuXG4gICAgaWYgKGFkZEVuZExpc3RlbmVyKSB7XG4gICAgICAvLyBPbGQgY2FsbCBzaWduYXR1cmUgYmVmb3JlIGByZWFjdC10cmFuc2l0aW9uLWdyb3VwYCBpbXBsZW1lbnRlZCBgbm9kZVJlZmBcbiAgICAgIGFkZEVuZExpc3RlbmVyKG5vZGVSZWYuY3VycmVudCwgbmV4dCk7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lci5jdXJyZW50KTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgYXBwZWFyOiBhcHBlYXIsXG4gICAgaW46IGluUHJvcCxcbiAgICBub2RlUmVmOiBub2RlUmVmLFxuICAgIG9uRW50ZXI6IGhhbmRsZUVudGVyLFxuICAgIG9uRW50ZXJlZDogaGFuZGxlRW50ZXJlZCxcbiAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICBvbkV4aXQ6IGhhbmRsZUV4aXQsXG4gICAgb25FeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICBvbkV4aXRpbmc6IGhhbmRsZUV4aXRpbmcsXG4gICAgYWRkRW5kTGlzdGVuZXI6IGhhbmRsZUFkZEVuZExpc3RlbmVyLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXQgPT09ICdhdXRvJyA/IG51bGwgOiB0aW1lb3V0XG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IChzdGF0ZSwgY2hpbGRQcm9wcykgPT4ge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIF9leHRlbmRzKHtcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHRyYW5zZm9ybTogZ2V0U2NhbGUoMC43NSksXG4gICAgICAgICAgdmlzaWJpbGl0eTogc3RhdGUgPT09ICdleGl0ZWQnICYmICFpblByb3AgPyAnaGlkZGVuJyA6IHVuZGVmaW5lZFxuICAgICAgICB9LCBzdHlsZXNbc3RhdGVdLCBzdHlsZSwgY2hpbGRyZW4ucHJvcHMuc3R5bGUpLFxuICAgICAgICByZWY6IGhhbmRsZVJlZlxuICAgICAgfSwgY2hpbGRQcm9wcykpO1xuICAgIH1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHcm93LnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmcgRE9NXG4gICAqIG5vZGUgYW5kIGEgZG9uZSBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gTm90ZTogVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogUGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuIGl0IGZpcnN0IG1vdW50cyBpZiBgaW5gIGlzIGFsc28gYHRydWVgLlxuICAgKiBTZXQgdGhpcyB0byBgZmFsc2VgIHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBzaW5nbGUgY2hpbGQgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogVGhlIHRyYW5zaXRpb24gdGltaW5nIGZ1bmN0aW9uLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgZWFzaW5nIG9yIGEgb2JqZWN0IGNvbnRhaW5pbmcgZW50ZXIgYW5kIGV4aXQgdmFsdWVzLlxuICAgKi9cbiAgZWFzaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGVudGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdHJhbnNpdGlvbiBpbi5cbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICpcbiAgICogU2V0IHRvICdhdXRvJyB0byBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHRpbWUgYmFzZWQgb24gaGVpZ2h0LlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbkdyb3cubXVpU3VwcG9ydEF1dG8gPSB0cnVlO1xuZXhwb3J0IGRlZmF1bHQgR3JvdzsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGV4YWN0UHJvcCwgSFRNTEVsZW1lbnRUeXBlLCB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCBhcyB1c2VFbmhhbmNlZEVmZmVjdCwgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmLCB1bnN0YWJsZV9zZXRSZWYgYXMgc2V0UmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBnZXRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIHJldHVybiB0eXBlb2YgY29udGFpbmVyID09PSAnZnVuY3Rpb24nID8gY29udGFpbmVyKCkgOiBjb250YWluZXI7XG59XG4vKipcbiAqIFBvcnRhbHMgcHJvdmlkZSBhIGZpcnN0LWNsYXNzIHdheSB0byByZW5kZXIgY2hpbGRyZW4gaW50byBhIERPTSBub2RlXG4gKiB0aGF0IGV4aXN0cyBvdXRzaWRlIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICovXG5cblxuY29uc3QgUG9ydGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9ydGFsKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lcixcbiAgICBkaXNhYmxlUG9ydGFsID0gZmFsc2VcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbW91bnROb2RlLCBzZXRNb3VudE5vZGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgPyBjaGlsZHJlbi5yZWYgOiBudWxsLCByZWYpO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkaXNhYmxlUG9ydGFsKSB7XG4gICAgICBzZXRNb3VudE5vZGUoZ2V0Q29udGFpbmVyKGNvbnRhaW5lcikgfHwgZG9jdW1lbnQuYm9keSk7XG4gICAgfVxuICB9LCBbY29udGFpbmVyLCBkaXNhYmxlUG9ydGFsXSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW91bnROb2RlICYmICFkaXNhYmxlUG9ydGFsKSB7XG4gICAgICBzZXRSZWYocmVmLCBtb3VudE5vZGUpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgc2V0UmVmKHJlZiwgbnVsbCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtyZWYsIG1vdW50Tm9kZSwgZGlzYWJsZVBvcnRhbF0pO1xuXG4gIGlmIChkaXNhYmxlUG9ydGFsKSB7XG4gICAgaWYgKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICByZWY6IGhhbmRsZVJlZlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IG1vdW50Tm9kZSA/IC8qI19fUFVSRV9fKi9SZWFjdERPTS5jcmVhdGVQb3J0YWwoY2hpbGRyZW4sIG1vdW50Tm9kZSkgOiBtb3VudE5vZGVcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBvcnRhbC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNoaWxkcmVuIHRvIHJlbmRlciBpbnRvIHRoZSBgY29udGFpbmVyYC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgUG9ydGFsWydwcm9wVHlwZXMnICsgJyddID0gZXhhY3RQcm9wKFBvcnRhbC5wcm9wVHlwZXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQb3J0YWw7IiwiaW1wb3J0IHsgdW5zdGFibGVfb3duZXJXaW5kb3cgYXMgb3duZXJXaW5kb3csIHVuc3RhYmxlX293bmVyRG9jdW1lbnQgYXMgb3duZXJEb2N1bWVudCwgdW5zdGFibGVfZ2V0U2Nyb2xsYmFyU2l6ZSBhcyBnZXRTY3JvbGxiYXJTaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG5cbi8vIElzIGEgdmVydGljYWwgc2Nyb2xsYmFyIGRpc3BsYXllZD9cbmZ1bmN0aW9uIGlzT3ZlcmZsb3dpbmcoY29udGFpbmVyKSB7XG4gIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQoY29udGFpbmVyKTtcblxuICBpZiAoZG9jLmJvZHkgPT09IGNvbnRhaW5lcikge1xuICAgIHJldHVybiBvd25lcldpbmRvdyhjb250YWluZXIpLmlubmVyV2lkdGggPiBkb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgPiBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJpYUhpZGRlbihlbGVtZW50LCBzaG93KSB7XG4gIGlmIChzaG93KSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQYWRkaW5nUmlnaHQoZWxlbWVudCkge1xuICByZXR1cm4gcGFyc2VJbnQob3duZXJXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wYWRkaW5nUmlnaHQsIDEwKSB8fCAwO1xufVxuXG5mdW5jdGlvbiBpc0FyaWFIaWRkZW5Gb3JiaWRkZW5PbkVsZW1lbnQoZWxlbWVudCkge1xuICAvLyBUaGUgZm9yYmlkZGVuIEhUTUwgdGFncyBhcmUgdGhlIG9uZXMgZnJvbSBBUklBIHNwZWNpZmljYXRpb24gdGhhdFxuICAvLyBjYW4gYmUgY2hpbGRyZW4gb2YgYm9keSBhbmQgY2FuJ3QgaGF2ZSBhcmlhLWhpZGRlbiBhdHRyaWJ1dGUuXG4gIC8vIGNmLiBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbC1hcmlhLyNkb2Njb25mb3JtYW5jZVxuICBjb25zdCBmb3JiaWRkZW5UYWdOYW1lcyA9IFsnVEVNUExBVEUnLCAnU0NSSVBUJywgJ1NUWUxFJywgJ0xJTksnLCAnTUFQJywgJ01FVEEnLCAnTk9TQ1JJUFQnLCAnUElDVFVSRScsICdDT0wnLCAnQ09MR1JPVVAnLCAnUEFSQU0nLCAnU0xPVCcsICdTT1VSQ0UnLCAnVFJBQ0snXTtcbiAgY29uc3QgaXNGb3JiaWRkZW5UYWdOYW1lID0gZm9yYmlkZGVuVGFnTmFtZXMuaW5kZXhPZihlbGVtZW50LnRhZ05hbWUpICE9PSAtMTtcbiAgY29uc3QgaXNJbnB1dEhpZGRlbiA9IGVsZW1lbnQudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAnaGlkZGVuJztcbiAgcmV0dXJuIGlzRm9yYmlkZGVuVGFnTmFtZSB8fCBpc0lucHV0SGlkZGVuO1xufVxuXG5mdW5jdGlvbiBhcmlhSGlkZGVuU2libGluZ3MoY29udGFpbmVyLCBtb3VudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50LCBlbGVtZW50c1RvRXhjbHVkZSA9IFtdLCBzaG93KSB7XG4gIGNvbnN0IGJsYWNrbGlzdCA9IFttb3VudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50LCAuLi5lbGVtZW50c1RvRXhjbHVkZV07XG4gIFtdLmZvckVhY2guY2FsbChjb250YWluZXIuY2hpbGRyZW4sIGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IGlzTm90RXhjbHVkZWRFbGVtZW50ID0gYmxhY2tsaXN0LmluZGV4T2YoZWxlbWVudCkgPT09IC0xO1xuICAgIGNvbnN0IGlzTm90Rm9yYmlkZGVuRWxlbWVudCA9ICFpc0FyaWFIaWRkZW5Gb3JiaWRkZW5PbkVsZW1lbnQoZWxlbWVudCk7XG5cbiAgICBpZiAoaXNOb3RFeGNsdWRlZEVsZW1lbnQgJiYgaXNOb3RGb3JiaWRkZW5FbGVtZW50KSB7XG4gICAgICBhcmlhSGlkZGVuKGVsZW1lbnQsIHNob3cpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbmRleE9mKGl0ZW1zLCBjYWxsYmFjaykge1xuICBsZXQgaWR4ID0gLTE7XG4gIGl0ZW1zLnNvbWUoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKGl0ZW0pKSB7XG4gICAgICBpZHggPSBpbmRleDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiBpZHg7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCBwcm9wcykge1xuICBjb25zdCByZXN0b3JlU3R5bGUgPSBbXTtcbiAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVySW5mby5jb250YWluZXI7XG5cbiAgaWYgKCFwcm9wcy5kaXNhYmxlU2Nyb2xsTG9jaykge1xuICAgIGlmIChpc092ZXJmbG93aW5nKGNvbnRhaW5lcikpIHtcbiAgICAgIC8vIENvbXB1dGUgdGhlIHNpemUgYmVmb3JlIGFwcGx5aW5nIG92ZXJmbG93IGhpZGRlbiB0byBhdm9pZCBhbnkgc2Nyb2xsIGp1bXBzLlxuICAgICAgY29uc3Qgc2Nyb2xsYmFyU2l6ZSA9IGdldFNjcm9sbGJhclNpemUob3duZXJEb2N1bWVudChjb250YWluZXIpKTtcbiAgICAgIHJlc3RvcmVTdHlsZS5wdXNoKHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lci5zdHlsZS5wYWRkaW5nUmlnaHQsXG4gICAgICAgIHByb3BlcnR5OiAncGFkZGluZy1yaWdodCcsXG4gICAgICAgIGVsOiBjb250YWluZXJcbiAgICAgIH0pOyAvLyBVc2UgY29tcHV0ZWQgc3R5bGUsIGhlcmUgdG8gZ2V0IHRoZSByZWFsIHBhZGRpbmcgdG8gYWRkIG91ciBzY3JvbGxiYXIgd2lkdGguXG5cbiAgICAgIGNvbnRhaW5lci5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtnZXRQYWRkaW5nUmlnaHQoY29udGFpbmVyKSArIHNjcm9sbGJhclNpemV9cHhgOyAvLyAubXVpLWZpeGVkIGlzIGEgZ2xvYmFsIGhlbHBlci5cblxuICAgICAgY29uc3QgZml4ZWRFbGVtZW50cyA9IG93bmVyRG9jdW1lbnQoY29udGFpbmVyKS5xdWVyeVNlbGVjdG9yQWxsKCcubXVpLWZpeGVkJyk7XG4gICAgICBbXS5mb3JFYWNoLmNhbGwoZml4ZWRFbGVtZW50cywgZWxlbWVudCA9PiB7XG4gICAgICAgIHJlc3RvcmVTdHlsZS5wdXNoKHtcbiAgICAgICAgICB2YWx1ZTogZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQsXG4gICAgICAgICAgcHJvcGVydHk6ICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgICBlbDogZWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtnZXRQYWRkaW5nUmlnaHQoZWxlbWVudCkgKyBzY3JvbGxiYXJTaXplfXB4YDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBzY3JvbGxDb250YWluZXI7XG5cbiAgICBpZiAoY29udGFpbmVyLnBhcmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICBzY3JvbGxDb250YWluZXIgPSBvd25lckRvY3VtZW50KGNvbnRhaW5lcikuYm9keTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW1wcm92ZSBHYXRzYnkgc3VwcG9ydFxuICAgICAgLy8gaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvZm9yY2UtdmVydGljYWwtc2Nyb2xsYmFyL1xuICAgICAgY29uc3QgcGFyZW50ID0gY29udGFpbmVyLnBhcmVudEVsZW1lbnQ7XG4gICAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhjb250YWluZXIpO1xuICAgICAgc2Nyb2xsQ29udGFpbmVyID0gKHBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGFyZW50Lm5vZGVOYW1lKSA9PT0gJ0hUTUwnICYmIGNvbnRhaW5lcldpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCkub3ZlcmZsb3dZID09PSAnc2Nyb2xsJyA/IHBhcmVudCA6IGNvbnRhaW5lcjtcbiAgICB9IC8vIEJsb2NrIHRoZSBzY3JvbGwgZXZlbiBpZiBubyBzY3JvbGxiYXIgaXMgdmlzaWJsZSB0byBhY2NvdW50IGZvciBtb2JpbGUga2V5Ym9hcmRcbiAgICAvLyBzY3JlZW5zaXplIHNocmluay5cblxuXG4gICAgcmVzdG9yZVN0eWxlLnB1c2goe1xuICAgICAgdmFsdWU6IHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvdyxcbiAgICAgIHByb3BlcnR5OiAnb3ZlcmZsb3cnLFxuICAgICAgZWw6IHNjcm9sbENvbnRhaW5lclxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiBzY3JvbGxDb250YWluZXIuc3R5bGUub3ZlcmZsb3dYLFxuICAgICAgcHJvcGVydHk6ICdvdmVyZmxvdy14JyxcbiAgICAgIGVsOiBzY3JvbGxDb250YWluZXJcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93WSxcbiAgICAgIHByb3BlcnR5OiAnb3ZlcmZsb3cteScsXG4gICAgICBlbDogc2Nyb2xsQ29udGFpbmVyXG4gICAgfSk7XG4gICAgc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIH1cblxuICBjb25zdCByZXN0b3JlID0gKCkgPT4ge1xuICAgIHJlc3RvcmVTdHlsZS5mb3JFYWNoKCh7XG4gICAgICB2YWx1ZSxcbiAgICAgIGVsLFxuICAgICAgcHJvcGVydHlcbiAgICB9KSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWwuc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gcmVzdG9yZTtcbn1cblxuZnVuY3Rpb24gZ2V0SGlkZGVuU2libGluZ3MoY29udGFpbmVyKSB7XG4gIGNvbnN0IGhpZGRlblNpYmxpbmdzID0gW107XG4gIFtdLmZvckVhY2guY2FsbChjb250YWluZXIuY2hpbGRyZW4sIGVsZW1lbnQgPT4ge1xuICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSA9PT0gJ3RydWUnKSB7XG4gICAgICBoaWRkZW5TaWJsaW5ncy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBoaWRkZW5TaWJsaW5ncztcbn1cblxuLyoqXG4gKiBAaWdub3JlIC0gZG8gbm90IGRvY3VtZW50LlxuICpcbiAqIFByb3BlciBzdGF0ZSBtYW5hZ2VtZW50IGZvciBjb250YWluZXJzIGFuZCB0aGUgbW9kYWxzIGluIHRob3NlIGNvbnRhaW5lcnMuXG4gKiBTaW1wbGlmaWVkLCBidXQgaW5zcGlyZWQgYnkgcmVhY3Qtb3ZlcmxheSdzIE1vZGFsTWFuYWdlciBjbGFzcy5cbiAqIFVzZWQgYnkgdGhlIE1vZGFsIHRvIGVuc3VyZSBwcm9wZXIgc3R5bGluZyBvZiBjb250YWluZXJzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2RhbE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lcnMgPSB2b2lkIDA7XG4gICAgdGhpcy5tb2RhbHMgPSB2b2lkIDA7XG4gICAgdGhpcy5tb2RhbHMgPSBbXTtcbiAgICB0aGlzLmNvbnRhaW5lcnMgPSBbXTtcbiAgfVxuXG4gIGFkZChtb2RhbCwgY29udGFpbmVyKSB7XG4gICAgbGV0IG1vZGFsSW5kZXggPSB0aGlzLm1vZGFscy5pbmRleE9mKG1vZGFsKTtcblxuICAgIGlmIChtb2RhbEluZGV4ICE9PSAtMSkge1xuICAgICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gICAgfVxuXG4gICAgbW9kYWxJbmRleCA9IHRoaXMubW9kYWxzLmxlbmd0aDtcbiAgICB0aGlzLm1vZGFscy5wdXNoKG1vZGFsKTsgLy8gSWYgdGhlIG1vZGFsIHdlIGFyZSBhZGRpbmcgaXMgYWxyZWFkeSBpbiB0aGUgRE9NLlxuXG4gICAgaWYgKG1vZGFsLm1vZGFsUmVmKSB7XG4gICAgICBhcmlhSGlkZGVuKG1vZGFsLm1vZGFsUmVmLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgaGlkZGVuU2libGluZ3MgPSBnZXRIaWRkZW5TaWJsaW5ncyhjb250YWluZXIpO1xuICAgIGFyaWFIaWRkZW5TaWJsaW5ncyhjb250YWluZXIsIG1vZGFsLm1vdW50LCBtb2RhbC5tb2RhbFJlZiwgaGlkZGVuU2libGluZ3MsIHRydWUpO1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0uY29udGFpbmVyID09PSBjb250YWluZXIpO1xuXG4gICAgaWYgKGNvbnRhaW5lckluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5jb250YWluZXJzW2NvbnRhaW5lckluZGV4XS5tb2RhbHMucHVzaChtb2RhbCk7XG4gICAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lcnMucHVzaCh7XG4gICAgICBtb2RhbHM6IFttb2RhbF0sXG4gICAgICBjb250YWluZXIsXG4gICAgICByZXN0b3JlOiBudWxsLFxuICAgICAgaGlkZGVuU2libGluZ3NcbiAgICB9KTtcbiAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgfVxuXG4gIG1vdW50KG1vZGFsLCBwcm9wcykge1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0ubW9kYWxzLmluZGV4T2YobW9kYWwpICE9PSAtMSk7XG4gICAgY29uc3QgY29udGFpbmVySW5mbyA9IHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF07XG5cbiAgICBpZiAoIWNvbnRhaW5lckluZm8ucmVzdG9yZSkge1xuICAgICAgY29udGFpbmVySW5mby5yZXN0b3JlID0gaGFuZGxlQ29udGFpbmVyKGNvbnRhaW5lckluZm8sIHByb3BzKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmUobW9kYWwsIGFyaWFIaWRkZW5TdGF0ZSA9IHRydWUpIHtcbiAgICBjb25zdCBtb2RhbEluZGV4ID0gdGhpcy5tb2RhbHMuaW5kZXhPZihtb2RhbCk7XG5cbiAgICBpZiAobW9kYWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBtb2RhbEluZGV4O1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0ubW9kYWxzLmluZGV4T2YobW9kYWwpICE9PSAtMSk7XG4gICAgY29uc3QgY29udGFpbmVySW5mbyA9IHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF07XG4gICAgY29udGFpbmVySW5mby5tb2RhbHMuc3BsaWNlKGNvbnRhaW5lckluZm8ubW9kYWxzLmluZGV4T2YobW9kYWwpLCAxKTtcbiAgICB0aGlzLm1vZGFscy5zcGxpY2UobW9kYWxJbmRleCwgMSk7IC8vIElmIHRoYXQgd2FzIHRoZSBsYXN0IG1vZGFsIGluIGEgY29udGFpbmVyLCBjbGVhbiB1cCB0aGUgY29udGFpbmVyLlxuXG4gICAgaWYgKGNvbnRhaW5lckluZm8ubW9kYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gVGhlIG1vZGFsIG1pZ2h0IGJlIGNsb3NlZCBiZWZvcmUgaXQgaGFkIHRoZSBjaGFuY2UgdG8gYmUgbW91bnRlZCBpbiB0aGUgRE9NLlxuICAgICAgaWYgKGNvbnRhaW5lckluZm8ucmVzdG9yZSkge1xuICAgICAgICBjb250YWluZXJJbmZvLnJlc3RvcmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGFsLm1vZGFsUmVmKSB7XG4gICAgICAgIC8vIEluIGNhc2UgdGhlIG1vZGFsIHdhc24ndCBpbiB0aGUgRE9NIHlldC5cbiAgICAgICAgYXJpYUhpZGRlbihtb2RhbC5tb2RhbFJlZiwgYXJpYUhpZGRlblN0YXRlKTtcbiAgICAgIH1cblxuICAgICAgYXJpYUhpZGRlblNpYmxpbmdzKGNvbnRhaW5lckluZm8uY29udGFpbmVyLCBtb2RhbC5tb3VudCwgbW9kYWwubW9kYWxSZWYsIGNvbnRhaW5lckluZm8uaGlkZGVuU2libGluZ3MsIGZhbHNlKTtcbiAgICAgIHRoaXMuY29udGFpbmVycy5zcGxpY2UoY29udGFpbmVySW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgbWFrZSBzdXJlIHRoZSBuZXh0IHRvcCBtb2RhbCBpcyB2aXNpYmxlIHRvIGEgc2NyZWVuIHJlYWRlci5cbiAgICAgIGNvbnN0IG5leHRUb3AgPSBjb250YWluZXJJbmZvLm1vZGFsc1tjb250YWluZXJJbmZvLm1vZGFscy5sZW5ndGggLSAxXTsgLy8gYXMgc29vbiBhcyBhIG1vZGFsIGlzIGFkZGluZyBpdHMgbW9kYWxSZWYgaXMgdW5kZWZpbmVkLiBpdCBjYW4ndCBzZXRcbiAgICAgIC8vIGFyaWEtaGlkZGVuIGJlY2F1c2UgdGhlIGRvbSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QgZWl0aGVyXG4gICAgICAvLyB3aGVuIG1vZGFsIHdhcyB1bm1vdW50ZWQgYmVmb3JlIG1vZGFsUmVmIGdldHMgbnVsbFxuXG4gICAgICBpZiAobmV4dFRvcC5tb2RhbFJlZikge1xuICAgICAgICBhcmlhSGlkZGVuKG5leHRUb3AubW9kYWxSZWYsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgfVxuXG4gIGlzVG9wTW9kYWwobW9kYWwpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbHMubGVuZ3RoID4gMCAmJiB0aGlzLm1vZGFsc1t0aGlzLm1vZGFscy5sZW5ndGggLSAxXSA9PT0gbW9kYWw7XG4gIH1cblxufSIsIi8qIGVzbGludC1kaXNhYmxlIGNvbnNpc3RlbnQtcmV0dXJuLCBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS10YWJpbmRleCAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGV4YWN0UHJvcCwgZWxlbWVudEFjY2VwdGluZ1JlZiwgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmLCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQgfSBmcm9tICdAbXVpL3V0aWxzJzsgLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2ZvY3VzLXRyYXAvdGFiYmFibGVcblxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IGNhbmRpZGF0ZXNTZWxlY3RvciA9IFsnaW5wdXQnLCAnc2VsZWN0JywgJ3RleHRhcmVhJywgJ2FbaHJlZl0nLCAnYnV0dG9uJywgJ1t0YWJpbmRleF0nLCAnYXVkaW9bY29udHJvbHNdJywgJ3ZpZGVvW2NvbnRyb2xzXScsICdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKSddLmpvaW4oJywnKTtcblxuZnVuY3Rpb24gZ2V0VGFiSW5kZXgobm9kZSkge1xuICBjb25zdCB0YWJpbmRleEF0dHIgPSBwYXJzZUludChub2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSwgMTApO1xuXG4gIGlmICghTnVtYmVyLmlzTmFOKHRhYmluZGV4QXR0cikpIHtcbiAgICByZXR1cm4gdGFiaW5kZXhBdHRyO1xuICB9IC8vIEJyb3dzZXJzIGRvIG5vdCByZXR1cm4gYHRhYkluZGV4YCBjb3JyZWN0bHkgZm9yIGNvbnRlbnRFZGl0YWJsZSBub2RlcztcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjYxMTA4JnE9Y29udGVudGVkaXRhYmxlJTIwdGFiaW5kZXgmY2FuPTJcbiAgLy8gc28gaWYgdGhleSBkb24ndCBoYXZlIGEgdGFiaW5kZXggYXR0cmlidXRlIHNwZWNpZmljYWxseSBzZXQsIGFzc3VtZSBpdCdzIDAuXG4gIC8vIGluIENocm9tZSwgPGRldGFpbHMvPiwgPGF1ZGlvIGNvbnRyb2xzLz4gYW5kIDx2aWRlbyBjb250cm9scy8+IGVsZW1lbnRzIGdldCBhIGRlZmF1bHRcbiAgLy8gIGB0YWJJbmRleGAgb2YgLTEgd2hlbiB0aGUgJ3RhYmluZGV4JyBhdHRyaWJ1dGUgaXNuJ3Qgc3BlY2lmaWVkIGluIHRoZSBET00sXG4gIC8vICB5ZXQgdGhleSBhcmUgc3RpbGwgcGFydCBvZiB0aGUgcmVndWxhciB0YWIgb3JkZXI7IGluIEZGLCB0aGV5IGdldCBhIGRlZmF1bHRcbiAgLy8gIGB0YWJJbmRleGAgb2YgMDsgc2luY2UgQ2hyb21lIHN0aWxsIHB1dHMgdGhvc2UgZWxlbWVudHMgaW4gdGhlIHJlZ3VsYXIgdGFiXG4gIC8vICBvcmRlciwgY29uc2lkZXIgdGhlaXIgdGFiIGluZGV4IHRvIGJlIDAuXG5cblxuICBpZiAobm9kZS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJyB8fCAobm9kZS5ub2RlTmFtZSA9PT0gJ0FVRElPJyB8fCBub2RlLm5vZGVOYW1lID09PSAnVklERU8nIHx8IG5vZGUubm9kZU5hbWUgPT09ICdERVRBSUxTJykgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykgPT09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiBub2RlLnRhYkluZGV4O1xufVxuXG5mdW5jdGlvbiBpc05vblRhYmJhYmxlUmFkaW8obm9kZSkge1xuICBpZiAobm9kZS50YWdOYW1lICE9PSAnSU5QVVQnIHx8IG5vZGUudHlwZSAhPT0gJ3JhZGlvJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghbm9kZS5uYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZ2V0UmFkaW8gPSBzZWxlY3RvciA9PiBub2RlLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihgaW5wdXRbdHlwZT1cInJhZGlvXCJdJHtzZWxlY3Rvcn1gKTtcblxuICBsZXQgcm92aW5nID0gZ2V0UmFkaW8oYFtuYW1lPVwiJHtub2RlLm5hbWV9XCJdOmNoZWNrZWRgKTtcblxuICBpZiAoIXJvdmluZykge1xuICAgIHJvdmluZyA9IGdldFJhZGlvKGBbbmFtZT1cIiR7bm9kZS5uYW1lfVwiXWApO1xuICB9XG5cbiAgcmV0dXJuIHJvdmluZyAhPT0gbm9kZTtcbn1cblxuZnVuY3Rpb24gaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZShub2RlKSB7XG4gIGlmIChub2RlLmRpc2FibGVkIHx8IG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBub2RlLnR5cGUgPT09ICdoaWRkZW4nIHx8IGlzTm9uVGFiYmFibGVSYWRpbyhub2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0R2V0VGFiYmFibGUocm9vdCkge1xuICBjb25zdCByZWd1bGFyVGFiTm9kZXMgPSBbXTtcbiAgY29uc3Qgb3JkZXJlZFRhYk5vZGVzID0gW107XG4gIEFycmF5LmZyb20ocm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNhbmRpZGF0ZXNTZWxlY3RvcikpLmZvckVhY2goKG5vZGUsIGkpID0+IHtcbiAgICBjb25zdCBub2RlVGFiSW5kZXggPSBnZXRUYWJJbmRleChub2RlKTtcblxuICAgIGlmIChub2RlVGFiSW5kZXggPT09IC0xIHx8ICFpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG5vZGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGVUYWJJbmRleCA9PT0gMCkge1xuICAgICAgcmVndWxhclRhYk5vZGVzLnB1c2gobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yZGVyZWRUYWJOb2Rlcy5wdXNoKHtcbiAgICAgICAgZG9jdW1lbnRPcmRlcjogaSxcbiAgICAgICAgdGFiSW5kZXg6IG5vZGVUYWJJbmRleCxcbiAgICAgICAgbm9kZVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9yZGVyZWRUYWJOb2Rlcy5zb3J0KChhLCBiKSA9PiBhLnRhYkluZGV4ID09PSBiLnRhYkluZGV4ID8gYS5kb2N1bWVudE9yZGVyIC0gYi5kb2N1bWVudE9yZGVyIDogYS50YWJJbmRleCAtIGIudGFiSW5kZXgpLm1hcChhID0+IGEubm9kZSkuY29uY2F0KHJlZ3VsYXJUYWJOb2Rlcyk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRJc0VuYWJsZWQoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBVdGlsaXR5IGNvbXBvbmVudCB0aGF0IGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gVHJhcEZvY3VzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBkaXNhYmxlQXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgZGlzYWJsZUVuZm9yY2VGb2N1cyA9IGZhbHNlLFxuICAgIGRpc2FibGVSZXN0b3JlRm9jdXMgPSBmYWxzZSxcbiAgICBnZXRUYWJiYWJsZSA9IGRlZmF1bHRHZXRUYWJiYWJsZSxcbiAgICBpc0VuYWJsZWQgPSBkZWZhdWx0SXNFbmFibGVkLFxuICAgIG9wZW5cbiAgfSA9IHByb3BzO1xuICBjb25zdCBpZ25vcmVOZXh0RW5mb3JjZUZvY3VzID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IHNlbnRpbmVsU3RhcnQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHNlbnRpbmVsRW5kID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBub2RlVG9SZXN0b3JlID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCByZWFjdEZvY3VzRXZlbnRUYXJnZXQgPSBSZWFjdC51c2VSZWYobnVsbCk7IC8vIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIHdoZW4gZGlzYWJsZUF1dG9Gb2N1cyBpcyB0cnVlLlxuICAvLyBJdCB3YWl0cyBmb3IgdGhlIGFjdGl2ZSBlbGVtZW50IHRvIG1vdmUgaW50byB0aGUgY29tcG9uZW50IHRvIGFjdGl2YXRlLlxuXG4gIGNvbnN0IGFjdGl2YXRlZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHJvb3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYoY2hpbGRyZW4ucmVmLCByb290UmVmKTtcbiAgY29uc3QgbGFzdEtleWRvd24gPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gV2UgbWlnaHQgcmVuZGVyIGFuIGVtcHR5IGNoaWxkLlxuICAgIGlmICghb3BlbiB8fCAhcm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYWN0aXZhdGVkLmN1cnJlbnQgPSAhZGlzYWJsZUF1dG9Gb2N1cztcbiAgfSwgW2Rpc2FibGVBdXRvRm9jdXMsIG9wZW5dKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBXZSBtaWdodCByZW5kZXIgYW4gZW1wdHkgY2hpbGQuXG4gICAgaWYgKCFvcGVuIHx8ICFyb290UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkb2MgPSBvd25lckRvY3VtZW50KHJvb3RSZWYuY3VycmVudCk7XG5cbiAgICBpZiAoIXJvb3RSZWYuY3VycmVudC5jb250YWlucyhkb2MuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgIGlmICghcm9vdFJlZi5jdXJyZW50Lmhhc0F0dHJpYnV0ZSgndGFiSW5kZXgnKSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBtb2RhbCBjb250ZW50IG5vZGUgZG9lcyBub3QgYWNjZXB0IGZvY3VzLicsICdGb3IgdGhlIGJlbmVmaXQgb2YgYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgJyArICd0aGUgdGFiSW5kZXggb2YgdGhlIG5vZGUgaXMgYmVpbmcgc2V0IHRvIFwiLTFcIi4nXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cblxuICAgICAgICByb290UmVmLmN1cnJlbnQuc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsIC0xKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2YXRlZC5jdXJyZW50KSB7XG4gICAgICAgIHJvb3RSZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvLyByZXN0b3JlTGFzdEZvY3VzKClcbiAgICAgIGlmICghZGlzYWJsZVJlc3RvcmVGb2N1cykge1xuICAgICAgICAvLyBJbiBJRTExIGl0IGlzIHBvc3NpYmxlIGZvciBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHRvIGJlIG51bGwgcmVzdWx0aW5nXG4gICAgICAgIC8vIGluIG5vZGVUb1Jlc3RvcmUuY3VycmVudCBiZWluZyBudWxsLlxuICAgICAgICAvLyBOb3QgYWxsIGVsZW1lbnRzIGluIElFMTEgaGF2ZSBhIGZvY3VzIG1ldGhvZC5cbiAgICAgICAgLy8gT25jZSBJRTExIHN1cHBvcnQgaXMgZHJvcHBlZCB0aGUgZm9jdXMoKSBjYWxsIGNhbiBiZSB1bmNvbmRpdGlvbmFsLlxuICAgICAgICBpZiAobm9kZVRvUmVzdG9yZS5jdXJyZW50ICYmIG5vZGVUb1Jlc3RvcmUuY3VycmVudC5mb2N1cykge1xuICAgICAgICAgIGlnbm9yZU5leHRFbmZvcmNlRm9jdXMuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlVG9SZXN0b3JlLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfVxuICAgIH07IC8vIE1pc3NpbmcgYGRpc2FibGVSZXN0b3JlRm9jdXNgIHdoaWNoIGlzIGZpbmUuXG4gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBjaGFuZ2luZyB0aGF0IHByb3Agb24gYW4gb3BlbiBUcmFwRm9jdXNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtvcGVuXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gV2UgbWlnaHQgcmVuZGVyIGFuIGVtcHR5IGNoaWxkLlxuICAgIGlmICghb3BlbiB8fCAhcm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChyb290UmVmLmN1cnJlbnQpO1xuXG4gICAgY29uc3QgY29udGFpbiA9IG5hdGl2ZUV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VycmVudDogcm9vdEVsZW1lbnRcbiAgICAgIH0gPSByb290UmVmOyAvLyBDbGVhbnVwIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgbGF6aWx5IGluIFJlYWN0IDE3LlxuICAgICAgLy8gQ29udGFpbiBjYW4gYmUgY2FsbGVkIGJldHdlZW4gdGhlIGNvbXBvbmVudCBiZWluZyB1bm1vdW50ZWQgYW5kIGl0cyBjbGVhbnVwIGZ1bmN0aW9uIGJlaW5nIHJ1bi5cblxuICAgICAgaWYgKHJvb3RFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkb2MuaGFzRm9jdXMoKSB8fCBkaXNhYmxlRW5mb3JjZUZvY3VzIHx8ICFpc0VuYWJsZWQoKSB8fCBpZ25vcmVOZXh0RW5mb3JjZUZvY3VzLmN1cnJlbnQpIHtcbiAgICAgICAgaWdub3JlTmV4dEVuZm9yY2VGb2N1cy5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyb290RWxlbWVudC5jb250YWlucyhkb2MuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgLy8gaWYgdGhlIGZvY3VzIGV2ZW50IGlzIG5vdCBjb21pbmcgZnJvbSBpbnNpZGUgdGhlIGNoaWxkcmVuJ3MgcmVhY3QgdHJlZSwgcmVzZXQgdGhlIHJlZnNcbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50ICYmIHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50ICE9PSBuYXRpdmVFdmVudC50YXJnZXQgfHwgZG9jLmFjdGl2ZUVsZW1lbnQgIT09IHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50KSB7XG4gICAgICAgICAgcmVhY3RGb2N1c0V2ZW50VGFyZ2V0LmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhY3RpdmF0ZWQuY3VycmVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0YWJiYWJsZSA9IFtdO1xuXG4gICAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCA9PT0gc2VudGluZWxTdGFydC5jdXJyZW50IHx8IGRvYy5hY3RpdmVFbGVtZW50ID09PSBzZW50aW5lbEVuZC5jdXJyZW50KSB7XG4gICAgICAgICAgdGFiYmFibGUgPSBnZXRUYWJiYWJsZShyb290UmVmLmN1cnJlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhYmJhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgX2xhc3RLZXlkb3duJGN1cnJlbnQsIF9sYXN0S2V5ZG93biRjdXJyZW50MjtcblxuICAgICAgICAgIGNvbnN0IGlzU2hpZnRUYWIgPSBCb29sZWFuKCgoX2xhc3RLZXlkb3duJGN1cnJlbnQgPSBsYXN0S2V5ZG93bi5jdXJyZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2xhc3RLZXlkb3duJGN1cnJlbnQuc2hpZnRLZXkpICYmICgoX2xhc3RLZXlkb3duJGN1cnJlbnQyID0gbGFzdEtleWRvd24uY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9sYXN0S2V5ZG93biRjdXJyZW50Mi5rZXkpID09PSAnVGFiJyk7XG4gICAgICAgICAgY29uc3QgZm9jdXNOZXh0ID0gdGFiYmFibGVbMF07XG4gICAgICAgICAgY29uc3QgZm9jdXNQcmV2aW91cyA9IHRhYmJhYmxlW3RhYmJhYmxlLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgaWYgKGlzU2hpZnRUYWIpIHtcbiAgICAgICAgICAgIGZvY3VzUHJldmlvdXMuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9jdXNOZXh0LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvb3RFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcEZvY3VzID0gbmF0aXZlRXZlbnQgPT4ge1xuICAgICAgbGFzdEtleWRvd24uY3VycmVudCA9IG5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoZGlzYWJsZUVuZm9yY2VGb2N1cyB8fCAhaXNFbmFibGVkKCkgfHwgbmF0aXZlRXZlbnQua2V5ICE9PSAnVGFiJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIE1ha2Ugc3VyZSB0aGUgbmV4dCB0YWIgc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgLy8gZG9jLmFjdGl2ZUVsZW1lbnQgcmVmZXJlcyB0byB0aGUgb3JpZ2luLlxuXG5cbiAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCA9PT0gcm9vdFJlZi5jdXJyZW50ICYmIG5hdGl2ZUV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gaWdub3JlIHRoZSBuZXh0IGNvbnRhaW4gYXNcbiAgICAgICAgLy8gaXQgd2lsbCB0cnkgdG8gbW92ZSB0aGUgZm9jdXMgYmFjayB0byB0aGUgcm9vdFJlZiBlbGVtZW50LlxuICAgICAgICBpZ25vcmVOZXh0RW5mb3JjZUZvY3VzLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBzZW50aW5lbEVuZC5jdXJyZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgY29udGFpbik7XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBsb29wRm9jdXMsIHRydWUpOyAvLyBXaXRoIEVkZ2UsIFNhZmFyaSBhbmQgRmlyZWZveCwgbm8gZm9jdXMgcmVsYXRlZCBldmVudHMgYXJlIGZpcmVkIHdoZW4gdGhlIGZvY3VzZWQgYXJlYSBzdG9wcyBiZWluZyBhIGZvY3VzZWQgYXJlYS5cbiAgICAvLyBlLmcuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTU1OTU2MS5cbiAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4gbG9vayBpZiB0aGUgYWN0aXZlIGVsZW1lbnQgd2FzIHJlc3RvcmVkIG9uIHRoZSBCT0RZIGVsZW1lbnQuXG4gICAgLy9cbiAgICAvLyBUaGUgd2hhdHdnIHNwZWMgZGVmaW5lcyBob3cgdGhlIGJyb3dzZXIgc2hvdWxkIGJlaGF2ZSBidXQgZG9lcyBub3QgZXhwbGljaXRseSBtZW50aW9uIGFueSBldmVudHM6XG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW50ZXJhY3Rpb24uaHRtbCNmb2N1cy1maXh1cC1ydWxlLlxuXG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoZG9jLmFjdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgIGNvbnRhaW4oKTtcbiAgICAgIH1cbiAgICB9LCA1MCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBjb250YWluKTtcbiAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgbG9vcEZvY3VzLCB0cnVlKTtcbiAgICB9O1xuICB9LCBbZGlzYWJsZUF1dG9Gb2N1cywgZGlzYWJsZUVuZm9yY2VGb2N1cywgZGlzYWJsZVJlc3RvcmVGb2N1cywgaXNFbmFibGVkLCBvcGVuLCBnZXRUYWJiYWJsZV0pO1xuXG4gIGNvbnN0IG9uRm9jdXMgPSBldmVudCA9PiB7XG4gICAgaWYgKG5vZGVUb1Jlc3RvcmUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICB9XG5cbiAgICBhY3RpdmF0ZWQuY3VycmVudCA9IHRydWU7XG4gICAgcmVhY3RGb2N1c0V2ZW50VGFyZ2V0LmN1cnJlbnQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3QgY2hpbGRyZW5Qcm9wc0hhbmRsZXIgPSBjaGlsZHJlbi5wcm9wcy5vbkZvY3VzO1xuXG4gICAgaWYgKGNoaWxkcmVuUHJvcHNIYW5kbGVyKSB7XG4gICAgICBjaGlsZHJlblByb3BzSGFuZGxlcihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzU2VudGluZWwgPSBldmVudCA9PiB7XG4gICAgaWYgKG5vZGVUb1Jlc3RvcmUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICB9XG5cbiAgICBhY3RpdmF0ZWQuY3VycmVudCA9IHRydWU7XG4gIH07XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goXCJkaXZcIiwge1xuICAgICAgdGFiSW5kZXg6IG9wZW4gPyAwIDogLTEsXG4gICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1NlbnRpbmVsLFxuICAgICAgcmVmOiBzZW50aW5lbFN0YXJ0LFxuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcInNlbnRpbmVsU3RhcnRcIlxuICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICByZWY6IGhhbmRsZVJlZixcbiAgICAgIG9uRm9jdXNcbiAgICB9KSwgLyojX19QVVJFX18qL19qc3goXCJkaXZcIiwge1xuICAgICAgdGFiSW5kZXg6IG9wZW4gPyAwIDogLTEsXG4gICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1NlbnRpbmVsLFxuICAgICAgcmVmOiBzZW50aW5lbEVuZCxcbiAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJzZW50aW5lbEVuZFwiXG4gICAgfSldXG4gIH0pO1xufVxuXG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUcmFwRm9jdXMucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0cmFwIGZvY3VzIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgc2hpZnQgZm9jdXMgdG8gaXRzZWxmIHdoZW4gaXQgb3BlbnMsIGFuZFxuICAgKiByZXBsYWNlIGl0IHRvIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aGVuIGl0IGNsb3Nlcy5cbiAgICogVGhpcyBhbHNvIHdvcmtzIGNvcnJlY3RseSB3aXRoIGFueSB0cmFwIGZvY3VzIGNoaWxkcmVuIHRoYXQgaGF2ZSB0aGUgYGRpc2FibGVBdXRvRm9jdXNgIHByb3AuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSB0cmFwIGZvY3VzIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRyYXAgZm9jdXMgd2lsbCBub3QgcHJldmVudCBmb2N1cyBmcm9tIGxlYXZpbmcgdGhlIHRyYXAgZm9jdXMgd2hpbGUgb3Blbi5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIHRyYXAgZm9jdXMgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdHJhcCBmb2N1cyB3aWxsIG5vdCByZXN0b3JlIGZvY3VzIHRvIHByZXZpb3VzbHkgZm9jdXNlZCBlbGVtZW50IG9uY2VcbiAgICogdHJhcCBmb2N1cyBpcyBoaWRkZW4gb3IgdW5tb3VudGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJlc3RvcmVGb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygb3JkZXJlZCB0YWJiYWJsZSBub2RlcyAoaS5lLiBpbiB0YWIgb3JkZXIpIHdpdGhpbiB0aGUgcm9vdC5cbiAgICogRm9yIGluc3RhbmNlLCB5b3UgY2FuIHByb3ZpZGUgdGhlIFwidGFiYmFibGVcIiBucG0gZGVwZW5kZW5jeS5cbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdFxuICAgKi9cbiAgZ2V0VGFiYmFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgZXh0ZW5kcyB0aGUgYG9wZW5gIHByb3AuXG4gICAqIEl0IGFsbG93cyB0byB0b2dnbGUgdGhlIG9wZW4gc3RhdGUgd2l0aG91dCBoYXZpbmcgdG8gd2FpdCBmb3IgYSByZXJlbmRlciB3aGVuIGNoYW5naW5nIHRoZSBgb3BlbmAgcHJvcC5cbiAgICogVGhpcyBwcm9wIHNob3VsZCBiZSBtZW1vaXplZC5cbiAgICogSXQgY2FuIGJlIHVzZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSB0cmFwIGZvY3VzIG1vdW50ZWQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogQGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdElzRW5hYmxlZCgpIHtcbiAgICogICByZXR1cm4gdHJ1ZTtcbiAgICogfVxuICAgKi9cbiAgaXNFbmFibGVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBmb2N1cyBpcyBsb2NrZWQuXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgVHJhcEZvY3VzWydwcm9wVHlwZXMnICsgJyddID0gZXhhY3RQcm9wKFRyYXBGb2N1cy5wcm9wVHlwZXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFwRm9jdXM7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGFsVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNb2RhbCcsIHNsb3QpO1xufVxuY29uc3QgbW9kYWxVbnN0eWxlZENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNb2RhbCcsIFsncm9vdCcsICdoaWRkZW4nXSk7XG5leHBvcnQgZGVmYXVsdCBtb2RhbFVuc3R5bGVkQ2xhc3NlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBpc0hvc3RDb21wb25lbnQgZnJvbSAnLi9pc0hvc3RDb21wb25lbnQnO1xuLyoqXG4gKiBUeXBlIG9mIHRoZSBvd25lclN0YXRlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGFuIGVsZW1lbnQgaXQgYXBwbGllcyB0by5cbiAqIFRoaXMgcmVzb2x2ZXMgdG8gdGhlIHByb3ZpZGVkIE93bmVyU3RhdGUgZm9yIFJlYWN0IGNvbXBvbmVudHMgYW5kIGB1bmRlZmluZWRgIGZvciBob3N0IGNvbXBvbmVudHMuXG4gKiBGYWxscyBiYWNrIHRvIGBPd25lclN0YXRlIHwgdW5kZWZpbmVkYCB3aGVuIHRoZSBleGFjdCB0eXBlIGNhbid0IGJlIGRldGVybWluZWQgaW4gZGV2ZWxvcG1lbnQgdGltZS5cbiAqL1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIG93bmVyU3RhdGUgb2JqZWN0IHRvIHRoZSBwcm9wcywgbWVyZ2luZyB3aXRoIHRoZSBleGlzdGluZyBvbmUgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBlbGVtZW50VHlwZSBUeXBlIG9mIHRoZSBlbGVtZW50IHRoYXQgb3ducyB0aGUgYGV4aXN0aW5nUHJvcHNgLiBJZiB0aGUgZWxlbWVudCBpcyBhIERPTSBub2RlLCBgb3duZXJTdGF0ZWAgaXMgbm90IGFwcGxpZWQuXG4gKiBAcGFyYW0gb3RoZXJQcm9wcyBQcm9wcyBvZiB0aGUgZWxlbWVudC5cbiAqIEBwYXJhbSBvd25lclN0YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwcGVuZE93bmVyU3RhdGUoZWxlbWVudFR5cGUsIG90aGVyUHJvcHMgPSB7fSwgb3duZXJTdGF0ZSkge1xuICBpZiAoaXNIb3N0Q29tcG9uZW50KGVsZW1lbnRUeXBlKSkge1xuICAgIHJldHVybiBvdGhlclByb3BzO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdGhlclByb3BzLCB7XG4gICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG90aGVyUHJvcHMub3duZXJTdGF0ZSwgb3duZXJTdGF0ZSlcbiAgfSk7XG59IiwiLyoqXG4gKiBSZW1vdmVzIGV2ZW50IGhhbmRsZXJzIGZyb20gdGhlIGdpdmVuIG9iamVjdC5cbiAqIEEgZmllbGQgaXMgY29uc2lkZXJlZCBhbiBldmVudCBoYW5kbGVyIGlmIGl0IGlzIGEgZnVuY3Rpb24gd2l0aCBhIG5hbWUgYmVnaW5uaW5nIHdpdGggYG9uYC5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0IE9iamVjdCB0byByZW1vdmUgZXZlbnQgaGFuZGxlcnMgZnJvbS5cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGV2ZW50IGhhbmRsZXJzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9taXRFdmVudEhhbmRsZXJzKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgT2JqZWN0LmtleXMob2JqZWN0KS5maWx0ZXIocHJvcCA9PiAhKHByb3AubWF0Y2goL15vbltBLVpdLykgJiYgdHlwZW9mIG9iamVjdFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgcmVzdWx0W3Byb3BdID0gb2JqZWN0W3Byb3BdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0iLCIvKipcbiAqIElmIGBjb21wb25lbnRQcm9wc2AgaXMgYSBmdW5jdGlvbiwgY2FsbHMgaXQgd2l0aCB0aGUgcHJvdmlkZWQgYG93bmVyU3RhdGVgLlxuICogT3RoZXJ3aXNlLCBqdXN0IHJldHVybnMgYGNvbXBvbmVudFByb3BzYC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudFByb3BzKGNvbXBvbmVudFByb3BzLCBvd25lclN0YXRlKSB7XG4gIGlmICh0eXBlb2YgY29tcG9uZW50UHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY29tcG9uZW50UHJvcHMob3duZXJTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50UHJvcHM7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImVsZW1lbnRUeXBlXCIsIFwiZXh0ZXJuYWxTbG90UHJvcHNcIiwgXCJvd25lclN0YXRlXCJdO1xuaW1wb3J0IHsgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgYXBwZW5kT3duZXJTdGF0ZSBmcm9tICcuL2FwcGVuZE93bmVyU3RhdGUnO1xuaW1wb3J0IG1lcmdlU2xvdFByb3BzIGZyb20gJy4vbWVyZ2VTbG90UHJvcHMnO1xuaW1wb3J0IHJlc29sdmVDb21wb25lbnRQcm9wcyBmcm9tICcuL3Jlc29sdmVDb21wb25lbnRQcm9wcyc7XG5cbi8qKlxuICogQnVpbGRzIHRoZSBwcm9wcyB0byBiZSBwYXNzZWQgaW50byB0aGUgc2xvdCBvZiBhbiB1bnN0eWxlZCBjb21wb25lbnQuXG4gKiBJdCBtZXJnZXMgdGhlIGludGVybmFsIHByb3BzIG9mIHRoZSBjb21wb25lbnQgd2l0aCB0aGUgb25lcyBzdXBwbGllZCBieSB0aGUgdXNlciwgYWxsb3dpbmcgdG8gY3VzdG9taXplIHRoZSBiZWhhdmlvci5cbiAqIElmIHRoZSBzbG90IGNvbXBvbmVudCBpcyBub3QgYSBob3N0IGNvbXBvbmVudCwgaXQgYWxzbyBtZXJnZXMgaW4gdGhlIGBvd25lclN0YXRlYC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1ldGVycy5nZXRTbG90UHJvcHMgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcHJvcHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBzbG90IGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlU2xvdFByb3BzKHBhcmFtZXRlcnMpIHtcbiAgdmFyIF9wYXJhbWV0ZXJzJGFkZGl0aW9uYTtcblxuICBjb25zdCB7XG4gICAgZWxlbWVudFR5cGUsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHMsXG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcGFyYW1ldGVycyxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhcmFtZXRlcnMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgcmVzb2x2ZWRDb21wb25lbnRzUHJvcHMgPSByZXNvbHZlQ29tcG9uZW50UHJvcHMoZXh0ZXJuYWxTbG90UHJvcHMsIG93bmVyU3RhdGUpO1xuICBjb25zdCB7XG4gICAgcHJvcHM6IG1lcmdlZFByb3BzLFxuICAgIGludGVybmFsUmVmXG4gIH0gPSBtZXJnZVNsb3RQcm9wcyhfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIGV4dGVybmFsU2xvdFByb3BzOiByZXNvbHZlZENvbXBvbmVudHNQcm9wc1xuICB9KSk7XG4gIGNvbnN0IHJlZiA9IHVzZUZvcmtSZWYoaW50ZXJuYWxSZWYsIHVzZUZvcmtSZWYocmVzb2x2ZWRDb21wb25lbnRzUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHJlc29sdmVkQ29tcG9uZW50c1Byb3BzLnJlZiwgKF9wYXJhbWV0ZXJzJGFkZGl0aW9uYSA9IHBhcmFtZXRlcnMuYWRkaXRpb25hbFByb3BzKSA9PSBudWxsID8gdm9pZCAwIDogX3BhcmFtZXRlcnMkYWRkaXRpb25hLnJlZikpO1xuICBjb25zdCBwcm9wcyA9IGFwcGVuZE93bmVyU3RhdGUoZWxlbWVudFR5cGUsIF9leHRlbmRzKHt9LCBtZXJnZWRQcm9wcywge1xuICAgIHJlZlxuICB9KSwgb3duZXJTdGF0ZSk7XG4gIHJldHVybiBwcm9wcztcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGV4dHJhY3RFdmVudEhhbmRsZXJzIGZyb20gJy4vZXh0cmFjdEV2ZW50SGFuZGxlcnMnO1xuaW1wb3J0IG9taXRFdmVudEhhbmRsZXJzIGZyb20gJy4vb21pdEV2ZW50SGFuZGxlcnMnO1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgc2xvdCBjb21wb25lbnQgaW50ZXJuYWwgcHJvcHMgKHVzdWFsbHkgY29taW5nIGZyb20gYSBob29rKVxuICogd2l0aCB0aGUgZXh0ZXJuYWxseSBwcm92aWRlZCBvbmVzLlxuICpcbiAqIFRoZSBtZXJnZSBvcmRlciBpcyAodGhlIGxhdHRlciBvdmVycmlkZXMgdGhlIGZvcm1lcik6XG4gKiAxLiBUaGUgaW50ZXJuYWwgcHJvcHMgKHNwZWNpZmllZCBhcyBhIGdldHRlciBmdW5jdGlvbiB0byB3b3JrIHdpdGggZ2V0KlByb3BzIGhvb2sgcmVzdWx0KVxuICogMi4gQWRkaXRpb25hbCBwcm9wcyAoc3BlY2lmaWVkIGludGVybmFsbHkgb24gYW4gdW5zdHlsZWQgY29tcG9uZW50KVxuICogMy4gRXh0ZXJuYWwgcHJvcHMgc3BlY2lmaWVkIG9uIHRoZSBvd25lciBjb21wb25lbnQuIFRoZXNlIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gYSByb290IHNsb3QuXG4gKiA0LiBFeHRlcm5hbCBwcm9wcyBzcGVjaWZpZWQgaW4gdGhlIGBjb21wb25lbnRzUHJvcHMuKmAgcHJvcC5cbiAqIDUuIFRoZSBgY2xhc3NOYW1lYCBwcm9wIC0gY29tYmluZWQgZnJvbSBhbGwgdGhlIGFib3ZlLlxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlU2xvdFByb3BzKHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qge1xuICAgIGdldFNsb3RQcm9wcyxcbiAgICBhZGRpdGlvbmFsUHJvcHMsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHMsXG4gICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyxcbiAgICBjbGFzc05hbWVcbiAgfSA9IHBhcmFtZXRlcnM7XG5cbiAgaWYgKCFnZXRTbG90UHJvcHMpIHtcbiAgICAvLyBUaGUgc2ltcGxlciBjYXNlIC0gZ2V0U2xvdFByb3BzIGlzIG5vdCBkZWZpbmVkLCBzbyBubyBpbnRlcm5hbCBldmVudCBoYW5kbGVycyBhcmUgZGVmaW5lZCxcbiAgICAvLyBzbyB3ZSBjYW4gc2ltcGx5IG1lcmdlIGFsbCB0aGUgcHJvcHMgd2l0aG91dCBoYXZpbmcgdG8gd29ycnkgYWJvdXQgZXh0cmFjdGluZyBldmVudCBoYW5kbGVycy5cbiAgICBjb25zdCBqb2luZWRDbGFzc2VzID0gY2xzeChleHRlcm5hbEZvcndhcmRlZFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbEZvcndhcmRlZFByb3BzLmNsYXNzTmFtZSwgZXh0ZXJuYWxTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsU2xvdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCBhZGRpdGlvbmFsUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxQcm9wcy5jbGFzc05hbWUpO1xuXG4gICAgY29uc3QgbWVyZ2VkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgYWRkaXRpb25hbFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBhZGRpdGlvbmFsUHJvcHMuc3R5bGUsIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsRm9yd2FyZGVkUHJvcHMuc3R5bGUsIGV4dGVybmFsU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbFNsb3RQcm9wcy5zdHlsZSk7XG5cbiAgICBjb25zdCBwcm9wcyA9IF9leHRlbmRzKHt9LCBhZGRpdGlvbmFsUHJvcHMsIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMsIGV4dGVybmFsU2xvdFByb3BzKTtcblxuICAgIGlmIChqb2luZWRDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BzLmNsYXNzTmFtZSA9IGpvaW5lZENsYXNzZXM7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKG1lcmdlZFN0eWxlKS5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9wcy5zdHlsZSA9IG1lcmdlZFN0eWxlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwcm9wcyxcbiAgICAgIGludGVybmFsUmVmOiB1bmRlZmluZWRcbiAgICB9O1xuICB9IC8vIEluIHRoaXMgY2FzZSwgZ2V0U2xvdFByb3BzIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoZSBleHRlcm5hbCBldmVudCBoYW5kbGVycy5cbiAgLy8gV2UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIHRoZW0gaW4gdGhlIG1lcmdlZCBwcm9wcyBiZWNhdXNlIG9mIHRoaXMuXG5cblxuICBjb25zdCBldmVudEhhbmRsZXJzID0gZXh0cmFjdEV2ZW50SGFuZGxlcnMoX2V4dGVuZHMoe30sIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMsIGV4dGVybmFsU2xvdFByb3BzKSk7XG4gIGNvbnN0IGNvbXBvbmVudHNQcm9wc1dpdGhvdXRFdmVudEhhbmRsZXJzID0gb21pdEV2ZW50SGFuZGxlcnMoZXh0ZXJuYWxTbG90UHJvcHMpO1xuICBjb25zdCBvdGhlclByb3BzV2l0aG91dEV2ZW50SGFuZGxlcnMgPSBvbWl0RXZlbnRIYW5kbGVycyhleHRlcm5hbEZvcndhcmRlZFByb3BzKTtcbiAgY29uc3QgaW50ZXJuYWxTbG90UHJvcHMgPSBnZXRTbG90UHJvcHMoZXZlbnRIYW5kbGVycyk7IC8vIFRoZSBvcmRlciBvZiBjbGFzc2VzIGlzIGltcG9ydGFudCBoZXJlLlxuICAvLyBFbW90aW9uICh0aGF0IHdlIHVzZSBpbiBsaWJyYXJpZXMgY29uc3VtaW5nIE1VSSBCYXNlKSBkZXBlbmRzIG9uIHRoaXMgb3JkZXJcbiAgLy8gdG8gcHJvcGVybHkgb3ZlcnJpZGUgc3R5bGUuIEl0IHJlcXVpcmVzIHRoZSBtb3N0IGltcG9ydGFudCBjbGFzc2VzIHRvIGJlIGxhc3RcbiAgLy8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzMyMDUpIGZvciB0aGUgcmVsYXRlZCBkaXNjdXNzaW9uLlxuXG4gIGNvbnN0IGpvaW5lZENsYXNzZXMgPSBjbHN4KGludGVybmFsU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBpbnRlcm5hbFNsb3RQcm9wcy5jbGFzc05hbWUsIGFkZGl0aW9uYWxQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogYWRkaXRpb25hbFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCBleHRlcm5hbEZvcndhcmRlZFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbEZvcndhcmRlZFByb3BzLmNsYXNzTmFtZSwgZXh0ZXJuYWxTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsU2xvdFByb3BzLmNsYXNzTmFtZSk7XG5cbiAgY29uc3QgbWVyZ2VkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgaW50ZXJuYWxTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGludGVybmFsU2xvdFByb3BzLnN0eWxlLCBhZGRpdGlvbmFsUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxQcm9wcy5zdHlsZSwgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcy5zdHlsZSwgZXh0ZXJuYWxTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsU2xvdFByb3BzLnN0eWxlKTtcblxuICBjb25zdCBwcm9wcyA9IF9leHRlbmRzKHt9LCBpbnRlcm5hbFNsb3RQcm9wcywgYWRkaXRpb25hbFByb3BzLCBvdGhlclByb3BzV2l0aG91dEV2ZW50SGFuZGxlcnMsIGNvbXBvbmVudHNQcm9wc1dpdGhvdXRFdmVudEhhbmRsZXJzKTtcblxuICBpZiAoam9pbmVkQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgcHJvcHMuY2xhc3NOYW1lID0gam9pbmVkQ2xhc3NlcztcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhtZXJnZWRTdHlsZSkubGVuZ3RoID4gMCkge1xuICAgIHByb3BzLnN0eWxlID0gbWVyZ2VkU3R5bGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHByb3BzLFxuICAgIGludGVybmFsUmVmOiBpbnRlcm5hbFNsb3RQcm9wcy5yZWZcbiAgfTtcbn0iLCIvKipcbiAqIEV4dHJhY3RzIGV2ZW50IGhhbmRsZXJzIGZyb20gYSBnaXZlbiBvYmplY3QuXG4gKiBBIHByb3AgaXMgY29uc2lkZXJlZCBhbiBldmVudCBoYW5kbGVyIGlmIGl0IGlzIGEgZnVuY3Rpb24gYW5kIGl0cyBuYW1lIHN0YXJ0cyB3aXRoIGBvbmAuXG4gKlxuICogQHBhcmFtIG9iamVjdCBBbiBvYmplY3QgdG8gZXh0cmFjdCBldmVudCBoYW5kbGVycyBmcm9tLlxuICogQHBhcmFtIGV4Y2x1ZGVLZXlzIEFuIGFycmF5IG9mIGtleXMgdG8gZXhjbHVkZSBmcm9tIHRoZSByZXR1cm5lZCBvYmplY3QuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4dHJhY3RFdmVudEhhbmRsZXJzKG9iamVjdCwgZXhjbHVkZUtleXMgPSBbXSkge1xuICBpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgT2JqZWN0LmtleXMob2JqZWN0KS5maWx0ZXIocHJvcCA9PiBwcm9wLm1hdGNoKC9eb25bQS1aXS8pICYmIHR5cGVvZiBvYmplY3RbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgIWV4Y2x1ZGVLZXlzLmluY2x1ZGVzKHByb3ApKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9iamVjdFtwcm9wXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3Nlc1wiLCBcImNsb3NlQWZ0ZXJUcmFuc2l0aW9uXCIsIFwiY29tcG9uZW50XCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImNvbnRhaW5lclwiLCBcImRpc2FibGVBdXRvRm9jdXNcIiwgXCJkaXNhYmxlRW5mb3JjZUZvY3VzXCIsIFwiZGlzYWJsZUVzY2FwZUtleURvd25cIiwgXCJkaXNhYmxlUG9ydGFsXCIsIFwiZGlzYWJsZVJlc3RvcmVGb2N1c1wiLCBcImRpc2FibGVTY3JvbGxMb2NrXCIsIFwiaGlkZUJhY2tkcm9wXCIsIFwia2VlcE1vdW50ZWRcIiwgXCJtYW5hZ2VyXCIsIFwib25CYWNrZHJvcENsaWNrXCIsIFwib25DbG9zZVwiLCBcIm9uS2V5RG93blwiLCBcIm9wZW5cIiwgXCJvblRyYW5zaXRpb25FbnRlclwiLCBcIm9uVHJhbnNpdGlvbkV4aXRlZFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBlbGVtZW50QWNjZXB0aW5nUmVmLCBIVE1MRWxlbWVudFR5cGUsIHVuc3RhYmxlX293bmVyRG9jdW1lbnQgYXMgb3duZXJEb2N1bWVudCwgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmLCB1bnN0YWJsZV9jcmVhdGVDaGFpbmVkRnVuY3Rpb24gYXMgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uLCB1bnN0YWJsZV91c2VFdmVudENhbGxiYWNrIGFzIHVzZUV2ZW50Q2FsbGJhY2sgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICcuLi9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgUG9ydGFsIGZyb20gJy4uL1BvcnRhbCc7XG5pbXBvcnQgTW9kYWxNYW5hZ2VyLCB7IGFyaWFIaWRkZW4gfSBmcm9tICcuL01vZGFsTWFuYWdlcic7XG5pbXBvcnQgVHJhcEZvY3VzIGZyb20gJy4uL1RyYXBGb2N1cyc7XG5pbXBvcnQgeyBnZXRNb2RhbFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbW9kYWxVbnN0eWxlZENsYXNzZXMnO1xuaW1wb3J0IHsgdXNlU2xvdFByb3BzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIG9wZW4sXG4gICAgZXhpdGVkLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFvcGVuICYmIGV4aXRlZCAmJiAnaGlkZGVuJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRNb2RhbFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5mdW5jdGlvbiBnZXRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIHJldHVybiB0eXBlb2YgY29udGFpbmVyID09PSAnZnVuY3Rpb24nID8gY29udGFpbmVyKCkgOiBjb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGdldEhhc1RyYW5zaXRpb24ocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzLmNoaWxkcmVuID8gcHJvcHMuY2hpbGRyZW4ucHJvcHMuaGFzT3duUHJvcGVydHkoJ2luJykgOiBmYWxzZTtcbn0gLy8gQSBtb2RhbCBtYW5hZ2VyIHVzZWQgdG8gdHJhY2sgYW5kIG1hbmFnZSB0aGUgc3RhdGUgb2Ygb3BlbiBNb2RhbHMuXG4vLyBNb2RhbHMgZG9uJ3Qgb3BlbiBvbiB0aGUgc2VydmVyIHNvIHRoaXMgd29uJ3QgY29uZmxpY3Qgd2l0aCBjb25jdXJyZW50IHJlcXVlc3RzLlxuXG5cbmNvbnN0IGRlZmF1bHRNYW5hZ2VyID0gbmV3IE1vZGFsTWFuYWdlcigpO1xuLyoqXG4gKiBNb2RhbCBpcyBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCB0aGF0IGlzIGxldmVyYWdlZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogLSBbRGlhbG9nXSgvbWF0ZXJpYWwtdWkvYXBpL2RpYWxvZy8pXG4gKiAtIFtEcmF3ZXJdKC9tYXRlcmlhbC11aS9hcGkvZHJhd2VyLylcbiAqIC0gW01lbnVdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pXG4gKiAtIFtQb3BvdmVyXSgvbWF0ZXJpYWwtdWkvYXBpL3BvcG92ZXIvKVxuICpcbiAqIElmIHlvdSBhcmUgY3JlYXRpbmcgYSBtb2RhbCBkaWFsb2csIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgW0RpYWxvZ10oL21hdGVyaWFsLXVpL2FwaS9kaWFsb2cvKSBjb21wb25lbnRcbiAqIHJhdGhlciB0aGFuIGRpcmVjdGx5IHVzaW5nIE1vZGFsLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHNoYXJlcyBtYW55IGNvbmNlcHRzIHdpdGggW3JlYWN0LW92ZXJsYXlzXShodHRwczovL3JlYWN0LWJvb3RzdHJhcC5naXRodWIuaW8vcmVhY3Qtb3ZlcmxheXMvI21vZGFscykuXG4gKi9cblxuY29uc3QgTW9kYWxVbnN0eWxlZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1vZGFsVW5zdHlsZWQocHJvcHMsIHJlZikge1xuICB2YXIgX3Byb3BzJGFyaWFIaWRkZW47XG5cbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzZXM6IGNsYXNzZXNQcm9wLFxuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uID0gZmFsc2UsXG4gICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgY29tcG9uZW50cyA9IHt9LFxuICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgIGNvbnRhaW5lcixcbiAgICBkaXNhYmxlQXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgZGlzYWJsZUVuZm9yY2VGb2N1cyA9IGZhbHNlLFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duID0gZmFsc2UsXG4gICAgZGlzYWJsZVBvcnRhbCA9IGZhbHNlLFxuICAgIGRpc2FibGVSZXN0b3JlRm9jdXMgPSBmYWxzZSxcbiAgICBkaXNhYmxlU2Nyb2xsTG9jayA9IGZhbHNlLFxuICAgIGhpZGVCYWNrZHJvcCA9IGZhbHNlLFxuICAgIGtlZXBNb3VudGVkID0gZmFsc2UsXG4gICAgLy8gcHJpdmF0ZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgbWFuYWdlciA9IGRlZmF1bHRNYW5hZ2VyLFxuICAgIG9uQmFja2Ryb3BDbGljayxcbiAgICBvbkNsb3NlLFxuICAgIG9uS2V5RG93bixcbiAgICBvcGVuLFxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcHJvcC10eXBlcyAqL1xuICAgIG9uVHJhbnNpdGlvbkVudGVyLFxuICAgIG9uVHJhbnNpdGlvbkV4aXRlZFxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgW2V4aXRlZCwgc2V0RXhpdGVkXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBtb2RhbCA9IFJlYWN0LnVzZVJlZih7fSk7XG4gIGNvbnN0IG1vdW50Tm9kZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgbW9kYWxSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobW9kYWxSZWYsIHJlZik7XG4gIGNvbnN0IGhhc1RyYW5zaXRpb24gPSBnZXRIYXNUcmFuc2l0aW9uKHByb3BzKTtcbiAgY29uc3QgYXJpYUhpZGRlblByb3AgPSAoX3Byb3BzJGFyaWFIaWRkZW4gPSBwcm9wc1snYXJpYS1oaWRkZW4nXSkgIT0gbnVsbCA/IF9wcm9wcyRhcmlhSGlkZGVuIDogdHJ1ZTtcblxuICBjb25zdCBnZXREb2MgPSAoKSA9PiBvd25lckRvY3VtZW50KG1vdW50Tm9kZVJlZi5jdXJyZW50KTtcblxuICBjb25zdCBnZXRNb2RhbCA9ICgpID0+IHtcbiAgICBtb2RhbC5jdXJyZW50Lm1vZGFsUmVmID0gbW9kYWxSZWYuY3VycmVudDtcbiAgICBtb2RhbC5jdXJyZW50Lm1vdW50Tm9kZSA9IG1vdW50Tm9kZVJlZi5jdXJyZW50O1xuICAgIHJldHVybiBtb2RhbC5jdXJyZW50O1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1vdW50ZWQgPSAoKSA9PiB7XG4gICAgbWFuYWdlci5tb3VudChnZXRNb2RhbCgpLCB7XG4gICAgICBkaXNhYmxlU2Nyb2xsTG9ja1xuICAgIH0pOyAvLyBGaXggYSBidWcgb24gQ2hyb21lIHdoZXJlIHRoZSBzY3JvbGwgaXNuJ3QgaW5pdGlhbGx5IDAuXG5cbiAgICBtb2RhbFJlZi5jdXJyZW50LnNjcm9sbFRvcCA9IDA7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlT3BlbiA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVkQ29udGFpbmVyID0gZ2V0Q29udGFpbmVyKGNvbnRhaW5lcikgfHwgZ2V0RG9jKCkuYm9keTtcbiAgICBtYW5hZ2VyLmFkZChnZXRNb2RhbCgpLCByZXNvbHZlZENvbnRhaW5lcik7IC8vIFRoZSBlbGVtZW50IHdhcyBhbHJlYWR5IG1vdW50ZWQuXG5cbiAgICBpZiAobW9kYWxSZWYuY3VycmVudCkge1xuICAgICAgaGFuZGxlTW91bnRlZCgpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGlzVG9wTW9kYWwgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBtYW5hZ2VyLmlzVG9wTW9kYWwoZ2V0TW9kYWwoKSksIFttYW5hZ2VyXSk7XG4gIGNvbnN0IGhhbmRsZVBvcnRhbFJlZiA9IHVzZUV2ZW50Q2FsbGJhY2sobm9kZSA9PiB7XG4gICAgbW91bnROb2RlUmVmLmN1cnJlbnQgPSBub2RlO1xuXG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wZW4gJiYgaXNUb3BNb2RhbCgpKSB7XG4gICAgICBoYW5kbGVNb3VudGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyaWFIaWRkZW4obW9kYWxSZWYuY3VycmVudCwgYXJpYUhpZGRlblByb3ApO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG1hbmFnZXIucmVtb3ZlKGdldE1vZGFsKCksIGFyaWFIaWRkZW5Qcm9wKTtcbiAgfSwgW21hbmFnZXIsIGFyaWFIaWRkZW5Qcm9wXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUNsb3NlXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIGhhbmRsZU9wZW4oKTtcbiAgICB9IGVsc2UgaWYgKCFoYXNUcmFuc2l0aW9uIHx8ICFjbG9zZUFmdGVyVHJhbnNpdGlvbikge1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9XG4gIH0sIFtvcGVuLCBoYW5kbGVDbG9zZSwgaGFzVHJhbnNpdGlvbiwgY2xvc2VBZnRlclRyYW5zaXRpb24sIGhhbmRsZU9wZW5dKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1Byb3AsXG4gICAgY2xvc2VBZnRlclRyYW5zaXRpb24sXG4gICAgZGlzYWJsZUF1dG9Gb2N1cyxcbiAgICBkaXNhYmxlRW5mb3JjZUZvY3VzLFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duLFxuICAgIGRpc2FibGVQb3J0YWwsXG4gICAgZGlzYWJsZVJlc3RvcmVGb2N1cyxcbiAgICBkaXNhYmxlU2Nyb2xsTG9jayxcbiAgICBleGl0ZWQsXG4gICAgaGlkZUJhY2tkcm9wLFxuICAgIGtlZXBNb3VudGVkXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcblxuICBjb25zdCBoYW5kbGVFbnRlciA9ICgpID0+IHtcbiAgICBzZXRFeGl0ZWQoZmFsc2UpO1xuXG4gICAgaWYgKG9uVHJhbnNpdGlvbkVudGVyKSB7XG4gICAgICBvblRyYW5zaXRpb25FbnRlcigpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVFeGl0ZWQgPSAoKSA9PiB7XG4gICAgc2V0RXhpdGVkKHRydWUpO1xuXG4gICAgaWYgKG9uVHJhbnNpdGlvbkV4aXRlZCkge1xuICAgICAgb25UcmFuc2l0aW9uRXhpdGVkKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsb3NlQWZ0ZXJUcmFuc2l0aW9uKSB7XG4gICAgICBoYW5kbGVDbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVCYWNrZHJvcENsaWNrID0gZXZlbnQgPT4ge1xuICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob25CYWNrZHJvcENsaWNrKSB7XG4gICAgICBvbkJhY2tkcm9wQ2xpY2soZXZlbnQpO1xuICAgIH1cblxuICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICBvbkNsb3NlKGV2ZW50LCAnYmFja2Ryb3BDbGljaycpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfSAvLyBUaGUgaGFuZGxlciBkb2Vzbid0IHRha2UgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCBpbnRvIGFjY291bnQ6XG4gICAgLy9cbiAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpIGlzIG1lYW50IHRvIHN0b3AgZGVmYXVsdCBiZWhhdmlvcnMgbGlrZVxuICAgIC8vIGNsaWNraW5nIGEgY2hlY2tib3ggdG8gY2hlY2sgaXQsIGhpdHRpbmcgYSBidXR0b24gdG8gc3VibWl0IGEgZm9ybSxcbiAgICAvLyBhbmQgaGl0dGluZyBsZWZ0IGFycm93IHRvIG1vdmUgdGhlIGN1cnNvciBpbiBhIHRleHQgaW5wdXQgZXRjLlxuICAgIC8vIE9ubHkgc3BlY2lhbCBIVE1MIGVsZW1lbnRzIGhhdmUgdGhlc2UgZGVmYXVsdCBiZWhhdmlvcnMuXG5cblxuICAgIGlmIChldmVudC5rZXkgIT09ICdFc2NhcGUnIHx8ICFpc1RvcE1vZGFsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRpc2FibGVFc2NhcGVLZXlEb3duKSB7XG4gICAgICAvLyBTd2FsbG93IHRoZSBldmVudCwgaW4gY2FzZSBzb21lb25lIGlzIGxpc3RlbmluZyBmb3IgdGhlIGVzY2FwZSBrZXkgb24gdGhlIGJvZHkuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgJ2VzY2FwZUtleURvd24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2hpbGRQcm9wcyA9IHt9O1xuXG4gIGlmIChjaGlsZHJlbi5wcm9wcy50YWJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRQcm9wcy50YWJJbmRleCA9ICctMSc7XG4gIH0gLy8gSXQncyBhIFRyYW5zaXRpb24gbGlrZSBjb21wb25lbnRcblxuXG4gIGlmIChoYXNUcmFuc2l0aW9uKSB7XG4gICAgY2hpbGRQcm9wcy5vbkVudGVyID0gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKGhhbmRsZUVudGVyLCBjaGlsZHJlbi5wcm9wcy5vbkVudGVyKTtcbiAgICBjaGlsZFByb3BzLm9uRXhpdGVkID0gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKGhhbmRsZUV4aXRlZCwgY2hpbGRyZW4ucHJvcHMub25FeGl0ZWQpO1xuICB9XG5cbiAgY29uc3QgUm9vdCA9IGNvbXBvbmVudHMuUm9vdCB8fCBjb21wb25lbnQ7XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFJvb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IGNvbXBvbmVudHNQcm9wcy5yb290LFxuICAgIGV4dGVybmFsRm9yd2FyZGVkUHJvcHM6IG90aGVyLFxuICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgICByb2xlOiAncHJlc2VudGF0aW9uJyxcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93blxuICAgIH0sXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLnJvb3QsXG4gICAgb3duZXJTdGF0ZVxuICB9KTtcbiAgY29uc3QgQmFja2Ryb3BDb21wb25lbnQgPSBjb21wb25lbnRzLkJhY2tkcm9wO1xuICBjb25zdCBiYWNrZHJvcFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogQmFja2Ryb3BDb21wb25lbnQsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IGNvbXBvbmVudHNQcm9wcy5iYWNrZHJvcCxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICBvbkNsaWNrOiBoYW5kbGVCYWNrZHJvcENsaWNrLFxuICAgICAgb3BlblxuICAgIH0sXG4gICAgb3duZXJTdGF0ZVxuICB9KTtcblxuICBpZiAoIWtlZXBNb3VudGVkICYmICFvcGVuICYmICghaGFzVHJhbnNpdGlvbiB8fCBleGl0ZWQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUG9ydGFsLCB7XG4gICAgcmVmOiBoYW5kbGVQb3J0YWxSZWYsXG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgZGlzYWJsZVBvcnRhbDogZGlzYWJsZVBvcnRhbCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKFJvb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBbIWhpZGVCYWNrZHJvcCAmJiBCYWNrZHJvcENvbXBvbmVudCA/IC8qI19fUFVSRV9fKi9fanN4KEJhY2tkcm9wQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgYmFja2Ryb3BQcm9wcykpIDogbnVsbCwgLyojX19QVVJFX18qL19qc3goVHJhcEZvY3VzLCB7XG4gICAgICAgIGRpc2FibGVFbmZvcmNlRm9jdXM6IGRpc2FibGVFbmZvcmNlRm9jdXMsXG4gICAgICAgIGRpc2FibGVBdXRvRm9jdXM6IGRpc2FibGVBdXRvRm9jdXMsXG4gICAgICAgIGRpc2FibGVSZXN0b3JlRm9jdXM6IGRpc2FibGVSZXN0b3JlRm9jdXMsXG4gICAgICAgIGlzRW5hYmxlZDogaXNUb3BNb2RhbCxcbiAgICAgICAgb3Blbjogb3BlbixcbiAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIGNoaWxkUHJvcHMpXG4gICAgICB9KV1cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1vZGFsVW5zdHlsZWQucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUgdGhlIE1vZGFsIHdhaXRzIHVudGlsIGEgbmVzdGVkIFRyYW5zaXRpb24gaXMgY29tcGxldGVkIGJlZm9yZSBjbG9zaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xvc2VBZnRlclRyYW5zaXRpb246IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIEJhY2tkcm9wOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgYXV0b21hdGljYWxseSBzaGlmdCBmb2N1cyB0byBpdHNlbGYgd2hlbiBpdCBvcGVucywgYW5kXG4gICAqIHJlcGxhY2UgaXQgdG8gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50IHdoZW4gaXQgY2xvc2VzLlxuICAgKiBUaGlzIGFsc28gd29ya3MgY29ycmVjdGx5IHdpdGggYW55IG1vZGFsIGNoaWxkcmVuIHRoYXQgaGF2ZSB0aGUgYGRpc2FibGVBdXRvRm9jdXNgIHByb3AuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBtb2RhbCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBwcmV2ZW50IGZvY3VzIGZyb20gbGVhdmluZyB0aGUgbW9kYWwgd2hpbGUgb3Blbi5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVuZm9yY2VGb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaGl0dGluZyBlc2NhcGUgd2lsbCBub3QgZmlyZSB0aGUgYG9uQ2xvc2VgIGNhbGxiYWNrLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVzY2FwZUtleURvd246IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgYGNoaWxkcmVuYCB3aWxsIGJlIHVuZGVyIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvcnRhbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IHJlc3RvcmUgZm9jdXMgdG8gcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgb25jZVxuICAgKiBtb2RhbCBpcyBoaWRkZW4gb3IgdW5tb3VudGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJlc3RvcmVGb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHNjcm9sbCBsb2NrIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNjcm9sbExvY2s6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYWNrZHJvcCBpcyBub3QgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRlQmFja2Ryb3A6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBbHdheXMga2VlcCB0aGUgY2hpbGRyZW4gaW4gdGhlIERPTS5cbiAgICogVGhpcyBwcm9wIGNhbiBiZSB1c2VmdWwgaW4gU0VPIHNpdHVhdGlvbiBvclxuICAgKiB3aGVuIHlvdSB3YW50IHRvIG1heGltaXplIHRoZSByZXNwb25zaXZlbmVzcyBvZiB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBrZWVwTW91bnRlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGJhY2tkcm9wIGlzIGNsaWNrZWQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgYG9uQ2xvc2VgIHByb3Agd2l0aCB0aGUgYHJlYXNvbmAgYXJndW1lbnQgdG8gaGFuZGxlIHRoZSBgYmFja2Ryb3BDbGlja2AgZXZlbnRzLlxuICAgKi9cbiAgb25CYWNrZHJvcENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVGhlIGByZWFzb25gIHBhcmFtZXRlciBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlc3BvbnNlIHRvIGBvbkNsb3NlYC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIENhbiBiZTogYFwiZXNjYXBlS2V5RG93blwiYCwgYFwiYmFja2Ryb3BDbGlja1wiYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTW9kYWxVbnN0eWxlZDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWRkRW5kTGlzdGVuZXJcIiwgXCJhcHBlYXJcIiwgXCJjaGlsZHJlblwiLCBcImVhc2luZ1wiLCBcImluXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRlZFwiLCBcIm9uRXhpdGluZ1wiLCBcInN0eWxlXCIsIFwidGltZW91dFwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgeyByZWZsb3csIGdldFRyYW5zaXRpb25Qcm9wcyB9IGZyb20gJy4uL3RyYW5zaXRpb25zL3V0aWxzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHN0eWxlcyA9IHtcbiAgZW50ZXJpbmc6IHtcbiAgICBvcGFjaXR5OiAxXG4gIH0sXG4gIGVudGVyZWQ6IHtcbiAgICBvcGFjaXR5OiAxXG4gIH1cbn07XG4vKipcbiAqIFRoZSBGYWRlIHRyYW5zaXRpb24gaXMgdXNlZCBieSB0aGUgW01vZGFsXSgvbWF0ZXJpYWwtdWkvcmVhY3QtbW9kYWwvKSBjb21wb25lbnQuXG4gKiBJdCB1c2VzIFtyZWFjdC10cmFuc2l0aW9uLWdyb3VwXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwKSBpbnRlcm5hbGx5LlxuICovXG5cbmNvbnN0IEZhZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGYWRlKHByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBkZWZhdWx0VGltZW91dCA9IHtcbiAgICBlbnRlcjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uZW50ZXJpbmdTY3JlZW4sXG4gICAgZXhpdDogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24ubGVhdmluZ1NjcmVlblxuICB9O1xuXG4gIGNvbnN0IHtcbiAgICBhZGRFbmRMaXN0ZW5lcixcbiAgICBhcHBlYXIgPSB0cnVlLFxuICAgIGNoaWxkcmVuLFxuICAgIGVhc2luZyxcbiAgICBpbjogaW5Qcm9wLFxuICAgIG9uRW50ZXIsXG4gICAgb25FbnRlcmVkLFxuICAgIG9uRW50ZXJpbmcsXG4gICAgb25FeGl0LFxuICAgIG9uRXhpdGVkLFxuICAgIG9uRXhpdGluZyxcbiAgICBzdHlsZSxcbiAgICB0aW1lb3V0ID0gZGVmYXVsdFRpbWVvdXQsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gVHJhbnNpdGlvblxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgZW5hYmxlU3RyaWN0TW9kZUNvbXBhdCA9IHRydWU7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGZvcmVpZ25SZWYgPSB1c2VGb3JrUmVmKGNoaWxkcmVuLnJlZiwgcmVmKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihub2RlUmVmLCBmb3JlaWduUmVmKTtcblxuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50OyAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cblxuICAgICAgaWYgKG1heWJlSXNBcHBlYXJpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUsIG1heWJlSXNBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmluZyk7XG4gIGNvbnN0IGhhbmRsZUVudGVyID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjaygobm9kZSwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICByZWZsb3cobm9kZSk7IC8vIFNvIHRoZSBhbmltYXRpb24gYWx3YXlzIHN0YXJ0IGZyb20gdGhlIHN0YXJ0LlxuXG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdlbnRlcidcbiAgICB9KTtcbiAgICBub2RlLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB0cmFuc2l0aW9uUHJvcHMpO1xuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG5cbiAgICBpZiAob25FbnRlcikge1xuICAgICAgb25FbnRlcihub2RlLCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRW50ZXJlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmVkKTtcbiAgY29uc3QgaGFuZGxlRXhpdGluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0aW5nKTtcbiAgY29uc3QgaGFuZGxlRXhpdCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdleGl0J1xuICAgIH0pO1xuICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5JywgdHJhbnNpdGlvblByb3BzKTtcblxuICAgIGlmIChvbkV4aXQpIHtcbiAgICAgIG9uRXhpdChub2RlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFeGl0ZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGVkKTtcblxuICBjb25zdCBoYW5kbGVBZGRFbmRMaXN0ZW5lciA9IG5leHQgPT4ge1xuICAgIGlmIChhZGRFbmRMaXN0ZW5lcikge1xuICAgICAgLy8gT2xkIGNhbGwgc2lnbmF0dXJlIGJlZm9yZSBgcmVhY3QtdHJhbnNpdGlvbi1ncm91cGAgaW1wbGVtZW50ZWQgYG5vZGVSZWZgXG4gICAgICBhZGRFbmRMaXN0ZW5lcihub2RlUmVmLmN1cnJlbnQsIG5leHQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGFwcGVhcjogYXBwZWFyLFxuICAgIGluOiBpblByb3AsXG4gICAgbm9kZVJlZjogZW5hYmxlU3RyaWN0TW9kZUNvbXBhdCA/IG5vZGVSZWYgOiB1bmRlZmluZWQsXG4gICAgb25FbnRlcjogaGFuZGxlRW50ZXIsXG4gICAgb25FbnRlcmVkOiBoYW5kbGVFbnRlcmVkLFxuICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nLFxuICAgIG9uRXhpdDogaGFuZGxlRXhpdCxcbiAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgIG9uRXhpdGluZzogaGFuZGxlRXhpdGluZyxcbiAgICBhZGRFbmRMaXN0ZW5lcjogaGFuZGxlQWRkRW5kTGlzdGVuZXIsXG4gICAgdGltZW91dDogdGltZW91dFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAoc3RhdGUsIGNoaWxkUHJvcHMpID0+IHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB2aXNpYmlsaXR5OiBzdGF0ZSA9PT0gJ2V4aXRlZCcgJiYgIWluUHJvcCA/ICdoaWRkZW4nIDogdW5kZWZpbmVkXG4gICAgICAgIH0sIHN0eWxlc1tzdGF0ZV0sIHN0eWxlLCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksXG4gICAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICB9LCBjaGlsZFByb3BzKSk7XG4gICAgfVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZhZGUucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZyBET01cbiAgICogbm9kZSBhbmQgYSBkb25lIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBOb3RlOiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW4gaXQgZmlyc3QgbW91bnRzIGlmIGBpbmAgaXMgYWxzbyBgdHJ1ZWAuXG4gICAqIFNldCB0aGlzIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdGlvbiB0aW1pbmcgZnVuY3Rpb24uXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSBlYXNpbmcgb3IgYSBvYmplY3QgY29udGFpbmluZyBlbnRlciBhbmQgZXhpdCB2YWx1ZXMuXG4gICAqL1xuICBlYXNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXhpdDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0cmFuc2l0aW9uIGluLlxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgZW50ZXI6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgKiAgIGV4aXQ6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmxlYXZpbmdTY3JlZW4sXG4gICAqIH1cbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZhZGU7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhY2tkcm9wVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCYWNrZHJvcCcsIHNsb3QpO1xufVxuY29uc3QgYmFja2Ryb3BDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQmFja2Ryb3AnLCBbJ3Jvb3QnLCAnaW52aXNpYmxlJ10pO1xuZXhwb3J0IGRlZmF1bHQgYmFja2Ryb3BDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbXBvbmVudFwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJjbGFzc05hbWVcIiwgXCJpbnZpc2libGVcIiwgXCJvcGVuXCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgRmFkZSBmcm9tICcuLi9GYWRlJztcbmltcG9ydCB7IGdldEJhY2tkcm9wVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9iYWNrZHJvcENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgaW52aXNpYmxlXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBpbnZpc2libGUgJiYgJ2ludmlzaWJsZSddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QmFja2Ryb3BVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgQmFja2Ryb3BSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlCYWNrZHJvcCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmludmlzaWJsZSAmJiBzdHlsZXMuaW52aXNpYmxlXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICByaWdodDogMCxcbiAgYm90dG9tOiAwLFxuICB0b3A6IDAsXG4gIGxlZnQ6IDAsXG4gIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC41KScsXG4gIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnXG59LCBvd25lclN0YXRlLmludmlzaWJsZSAmJiB7XG4gIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xufSkpO1xuY29uc3QgQmFja2Ryb3AgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCYWNrZHJvcChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9jb21wb25lbnRzJFJvb3QsIF9jb21wb25lbnRzUHJvcHMkcm9vdDtcblxuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlCYWNrZHJvcCdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICBjb21wb25lbnRzUHJvcHMgPSB7fSxcbiAgICBjbGFzc05hbWUsXG4gICAgaW52aXNpYmxlID0gZmFsc2UsXG4gICAgb3BlbixcbiAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gRmFkZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBpbnZpc2libGVcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGluOiBvcGVuLFxuICAgIHRpbWVvdXQ6IHRyYW5zaXRpb25EdXJhdGlvblxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChCYWNrZHJvcFJvb3QsIHtcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgIGFzOiAoX2NvbXBvbmVudHMkUm9vdCA9IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9jb21wb25lbnRzJFJvb3QgOiBjb21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIChfY29tcG9uZW50c1Byb3BzJHJvb3QgPSBjb21wb25lbnRzUHJvcHMucm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb21wb25lbnRzUHJvcHMkcm9vdC5vd25lclN0YXRlKSxcbiAgICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgICByZWY6IHJlZixcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQmFja2Ryb3AucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIEJhY2tkcm9wLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBCYWNrZHJvcC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYWNrZHJvcCBpcyBpbnZpc2libGUuXG4gICAqIEl0IGNhbiBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIGEgcG9wb3ZlciBvciBhIGN1c3RvbSBzZWxlY3QgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW52aXNpYmxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQmFja2Ryb3A7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIkJhY2tkcm9wQ29tcG9uZW50XCIsIFwiQmFja2Ryb3BQcm9wc1wiLCBcImNsb3NlQWZ0ZXJUcmFuc2l0aW9uXCIsIFwiY2hpbGRyZW5cIiwgXCJjb21wb25lbnRcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGlzYWJsZUF1dG9Gb2N1c1wiLCBcImRpc2FibGVFbmZvcmNlRm9jdXNcIiwgXCJkaXNhYmxlRXNjYXBlS2V5RG93blwiLCBcImRpc2FibGVQb3J0YWxcIiwgXCJkaXNhYmxlUmVzdG9yZUZvY3VzXCIsIFwiZGlzYWJsZVNjcm9sbExvY2tcIiwgXCJoaWRlQmFja2Ryb3BcIiwgXCJrZWVwTW91bnRlZFwiLCBcInRoZW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBNb2RhbFVuc3R5bGVkLCB7IG1vZGFsVW5zdHlsZWRDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL01vZGFsVW5zdHlsZWQnO1xuaW1wb3J0IHsgaXNIb3N0Q29tcG9uZW50LCByZXNvbHZlQ29tcG9uZW50UHJvcHMgfSBmcm9tICdAbXVpL2Jhc2UvdXRpbHMnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiwgSFRNTEVsZW1lbnRUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4uL0JhY2tkcm9wJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3QgbW9kYWxDbGFzc2VzID0gbW9kYWxVbnN0eWxlZENsYXNzZXM7XG5cbmNvbnN0IGV4dGVuZFV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIHJldHVybiBvd25lclN0YXRlLmNsYXNzZXM7XG59O1xuXG5jb25zdCBNb2RhbFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aU1vZGFsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLm9wZW4gJiYgb3duZXJTdGF0ZS5leGl0ZWQgJiYgc3R5bGVzLmhpZGRlbl07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxuICB6SW5kZXg6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS56SW5kZXgubW9kYWwsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206IDAsXG4gIHRvcDogMCxcbiAgbGVmdDogMFxufSwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiB7XG4gIHZpc2liaWxpdHk6ICdoaWRkZW4nXG59KSk7XG5jb25zdCBNb2RhbEJhY2tkcm9wID0gc3R5bGVkKEJhY2tkcm9wLCB7XG4gIG5hbWU6ICdNdWlNb2RhbCcsXG4gIHNsb3Q6ICdCYWNrZHJvcCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBzdHlsZXMuYmFja2Ryb3A7XG4gIH1cbn0pKHtcbiAgekluZGV4OiAtMVxufSk7XG4vKipcbiAqIE1vZGFsIGlzIGEgbG93ZXItbGV2ZWwgY29uc3RydWN0IHRoYXQgaXMgbGV2ZXJhZ2VkIGJ5IHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAtIFtEaWFsb2ddKC9tYXRlcmlhbC11aS9hcGkvZGlhbG9nLylcbiAqIC0gW0RyYXdlcl0oL21hdGVyaWFsLXVpL2FwaS9kcmF3ZXIvKVxuICogLSBbTWVudV0oL21hdGVyaWFsLXVpL2FwaS9tZW51LylcbiAqIC0gW1BvcG92ZXJdKC9tYXRlcmlhbC11aS9hcGkvcG9wb3Zlci8pXG4gKlxuICogSWYgeW91IGFyZSBjcmVhdGluZyBhIG1vZGFsIGRpYWxvZywgeW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZSBbRGlhbG9nXSgvbWF0ZXJpYWwtdWkvYXBpL2RpYWxvZy8pIGNvbXBvbmVudFxuICogcmF0aGVyIHRoYW4gZGlyZWN0bHkgdXNpbmcgTW9kYWwuXG4gKlxuICogVGhpcyBjb21wb25lbnQgc2hhcmVzIG1hbnkgY29uY2VwdHMgd2l0aCBbcmVhY3Qtb3ZlcmxheXNdKGh0dHBzOi8vcmVhY3QtYm9vdHN0cmFwLmdpdGh1Yi5pby9yZWFjdC1vdmVybGF5cy8jbW9kYWxzKS5cbiAqL1xuXG5jb25zdCBNb2RhbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1vZGFsKGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX2NvbXBvbmVudHMkUm9vdDtcblxuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIG5hbWU6ICdNdWlNb2RhbCcsXG4gICAgcHJvcHM6IGluUHJvcHNcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIEJhY2tkcm9wQ29tcG9uZW50ID0gTW9kYWxCYWNrZHJvcCxcbiAgICBCYWNrZHJvcFByb3BzLFxuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uID0gZmFsc2UsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICBjb21wb25lbnRzUHJvcHMgPSB7fSxcbiAgICBkaXNhYmxlQXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgZGlzYWJsZUVuZm9yY2VGb2N1cyA9IGZhbHNlLFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duID0gZmFsc2UsXG4gICAgZGlzYWJsZVBvcnRhbCA9IGZhbHNlLFxuICAgIGRpc2FibGVSZXN0b3JlRm9jdXMgPSBmYWxzZSxcbiAgICBkaXNhYmxlU2Nyb2xsTG9jayA9IGZhbHNlLFxuICAgIGhpZGVCYWNrZHJvcCA9IGZhbHNlLFxuICAgIGtlZXBNb3VudGVkID0gZmFsc2UsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICB0aGVtZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgW2V4aXRlZCwgc2V0RXhpdGVkXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBjb21tb25Qcm9wcyA9IHtcbiAgICBjbG9zZUFmdGVyVHJhbnNpdGlvbixcbiAgICBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgIGRpc2FibGVFbmZvcmNlRm9jdXMsXG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24sXG4gICAgZGlzYWJsZVBvcnRhbCxcbiAgICBkaXNhYmxlUmVzdG9yZUZvY3VzLFxuICAgIGRpc2FibGVTY3JvbGxMb2NrLFxuICAgIGhpZGVCYWNrZHJvcCxcbiAgICBrZWVwTW91bnRlZFxuICB9O1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIGNvbW1vblByb3BzLCB7XG4gICAgZXhpdGVkXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSBleHRlbmRVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgUm9vdCA9IChfcmVmID0gKF9jb21wb25lbnRzJFJvb3QgPSBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfY29tcG9uZW50cyRSb290IDogY29tcG9uZW50KSAhPSBudWxsID8gX3JlZiA6IE1vZGFsUm9vdDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE1vZGFsVW5zdHlsZWQsIF9leHRlbmRzKHtcbiAgICBjb21wb25lbnRzOiBfZXh0ZW5kcyh7XG4gICAgICBSb290LFxuICAgICAgQmFja2Ryb3A6IEJhY2tkcm9wQ29tcG9uZW50XG4gICAgfSwgY29tcG9uZW50cyksXG4gICAgY29tcG9uZW50c1Byb3BzOiB7XG4gICAgICByb290OiAoKSA9PiBfZXh0ZW5kcyh7fSwgcmVzb2x2ZUNvbXBvbmVudFByb3BzKGNvbXBvbmVudHNQcm9wcy5yb290LCBvd25lclN0YXRlKSwgIWlzSG9zdENvbXBvbmVudChSb290KSAmJiB7XG4gICAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICAgIHRoZW1lXG4gICAgICB9KSxcbiAgICAgIGJhY2tkcm9wOiAoKSA9PiBfZXh0ZW5kcyh7fSwgQmFja2Ryb3BQcm9wcywgcmVzb2x2ZUNvbXBvbmVudFByb3BzKGNvbXBvbmVudHNQcm9wcy5iYWNrZHJvcCwgb3duZXJTdGF0ZSkpXG4gICAgfSxcbiAgICBvblRyYW5zaXRpb25FbnRlcjogKCkgPT4gc2V0RXhpdGVkKGZhbHNlKSxcbiAgICBvblRyYW5zaXRpb25FeGl0ZWQ6ICgpID0+IHNldEV4aXRlZCh0cnVlKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSwgY29tbW9uUHJvcHMsIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNb2RhbC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQSBiYWNrZHJvcCBjb21wb25lbnQuIFRoaXMgcHJvcCBlbmFibGVzIGN1c3RvbSBiYWNrZHJvcCByZW5kZXJpbmcuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgY29tcG9uZW50cy5CYWNrZHJvcGAgaW5zdGVhZC4gV2hpbGUgdGhpcyBwcm9wIGN1cnJlbnRseSB3b3JrcywgaXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAqIFVzZSB0aGUgYGNvbXBvbmVudHMuQmFja2Ryb3BgIHByb3AgdG8gbWFrZSB5b3VyIGFwcGxpY2F0aW9uIHJlYWR5IGZvciB0aGUgbmV4dCB2ZXJzaW9uIG9mIE1hdGVyaWFsIFVJLlxuICAgKiBAZGVmYXVsdCBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgICogICBuYW1lOiAnTXVpTW9kYWwnLFxuICAgKiAgIHNsb3Q6ICdCYWNrZHJvcCcsXG4gICAqICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAqICAgICByZXR1cm4gc3R5bGVzLmJhY2tkcm9wO1xuICAgKiAgIH0sXG4gICAqIH0pKHtcbiAgICogICB6SW5kZXg6IC0xLFxuICAgKiB9KVxuICAgKi9cbiAgQmFja2Ryb3BDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BCYWNrZHJvcGBdKC9tYXRlcmlhbC11aS9hcGkvYmFja2Ryb3AvKSBlbGVtZW50LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGNvbXBvbmVudHNQcm9wcy5iYWNrZHJvcGAgaW5zdGVhZC5cbiAgICovXG4gIEJhY2tkcm9wUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUgdGhlIE1vZGFsIHdhaXRzIHVudGlsIGEgbmVzdGVkIFRyYW5zaXRpb24gaXMgY29tcGxldGVkIGJlZm9yZSBjbG9zaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xvc2VBZnRlclRyYW5zaXRpb246IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIEJhY2tkcm9wOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgYXV0b21hdGljYWxseSBzaGlmdCBmb2N1cyB0byBpdHNlbGYgd2hlbiBpdCBvcGVucywgYW5kXG4gICAqIHJlcGxhY2UgaXQgdG8gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50IHdoZW4gaXQgY2xvc2VzLlxuICAgKiBUaGlzIGFsc28gd29ya3MgY29ycmVjdGx5IHdpdGggYW55IG1vZGFsIGNoaWxkcmVuIHRoYXQgaGF2ZSB0aGUgYGRpc2FibGVBdXRvRm9jdXNgIHByb3AuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBtb2RhbCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBwcmV2ZW50IGZvY3VzIGZyb20gbGVhdmluZyB0aGUgbW9kYWwgd2hpbGUgb3Blbi5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVuZm9yY2VGb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaGl0dGluZyBlc2NhcGUgd2lsbCBub3QgZmlyZSB0aGUgYG9uQ2xvc2VgIGNhbGxiYWNrLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVzY2FwZUtleURvd246IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgYGNoaWxkcmVuYCB3aWxsIGJlIHVuZGVyIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvcnRhbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IHJlc3RvcmUgZm9jdXMgdG8gcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgb25jZVxuICAgKiBtb2RhbCBpcyBoaWRkZW4gb3IgdW5tb3VudGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJlc3RvcmVGb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHNjcm9sbCBsb2NrIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNjcm9sbExvY2s6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYWNrZHJvcCBpcyBub3QgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRlQmFja2Ryb3A6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBbHdheXMga2VlcCB0aGUgY2hpbGRyZW4gaW4gdGhlIERPTS5cbiAgICogVGhpcyBwcm9wIGNhbiBiZSB1c2VmdWwgaW4gU0VPIHNpdHVhdGlvbiBvclxuICAgKiB3aGVuIHlvdSB3YW50IHRvIG1heGltaXplIHRoZSByZXNwb25zaXZlbmVzcyBvZiB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBrZWVwTW91bnRlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGJhY2tkcm9wIGlzIGNsaWNrZWQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgYG9uQ2xvc2VgIHByb3Agd2l0aCB0aGUgYHJlYXNvbmAgYXJndW1lbnQgdG8gaGFuZGxlIHRoZSBgYmFja2Ryb3BDbGlja2AgZXZlbnRzLlxuICAgKi9cbiAgb25CYWNrZHJvcENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVGhlIGByZWFzb25gIHBhcmFtZXRlciBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlc3BvbnNlIHRvIGBvbkNsb3NlYC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIENhbiBiZTogYFwiZXNjYXBlS2V5RG93blwiYCwgYFwiYmFja2Ryb3BDbGlja1wiYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNb2RhbDsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpUG9wb3ZlcicsIHNsb3QpO1xufVxuY29uc3QgcG9wb3ZlckNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlQb3BvdmVyJywgWydyb290JywgJ3BhcGVyJ10pO1xuZXhwb3J0IGRlZmF1bHQgcG9wb3ZlckNsYXNzZXM7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uRW50ZXJpbmdcIl0sXG4gICAgICBfZXhjbHVkZWQyID0gW1wiYWN0aW9uXCIsIFwiYW5jaG9yRWxcIiwgXCJhbmNob3JPcmlnaW5cIiwgXCJhbmNob3JQb3NpdGlvblwiLCBcImFuY2hvclJlZmVyZW5jZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29udGFpbmVyXCIsIFwiZWxldmF0aW9uXCIsIFwibWFyZ2luVGhyZXNob2xkXCIsIFwib3BlblwiLCBcIlBhcGVyUHJvcHNcIiwgXCJ0cmFuc2Zvcm1PcmlnaW5cIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsIFwiVHJhbnNpdGlvblByb3BzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgY2hhaW5Qcm9wVHlwZXMsIGludGVnZXJQcm9wVHlwZSwgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsIHJlZlR5cGUsIEhUTUxFbGVtZW50VHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICcuLi91dGlscy9kZWJvdW5jZSc7XG5pbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi91dGlscy9vd25lckRvY3VtZW50JztcbmltcG9ydCBvd25lcldpbmRvdyBmcm9tICcuLi91dGlscy9vd25lcldpbmRvdyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBHcm93IGZyb20gJy4uL0dyb3cnO1xuaW1wb3J0IE1vZGFsIGZyb20gJy4uL01vZGFsJztcbmltcG9ydCBQYXBlciBmcm9tICcuLi9QYXBlcic7XG5pbXBvcnQgeyBnZXRQb3BvdmVyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9wb3BvdmVyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9mZnNldFRvcChyZWN0LCB2ZXJ0aWNhbCkge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICBpZiAodHlwZW9mIHZlcnRpY2FsID09PSAnbnVtYmVyJykge1xuICAgIG9mZnNldCA9IHZlcnRpY2FsO1xuICB9IGVsc2UgaWYgKHZlcnRpY2FsID09PSAnY2VudGVyJykge1xuICAgIG9mZnNldCA9IHJlY3QuaGVpZ2h0IC8gMjtcbiAgfSBlbHNlIGlmICh2ZXJ0aWNhbCA9PT0gJ2JvdHRvbScpIHtcbiAgICBvZmZzZXQgPSByZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0T2Zmc2V0TGVmdChyZWN0LCBob3Jpem9udGFsKSB7XG4gIGxldCBvZmZzZXQgPSAwO1xuXG4gIGlmICh0eXBlb2YgaG9yaXpvbnRhbCA9PT0gJ251bWJlcicpIHtcbiAgICBvZmZzZXQgPSBob3Jpem9udGFsO1xuICB9IGVsc2UgaWYgKGhvcml6b250YWwgPT09ICdjZW50ZXInKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC53aWR0aCAvIDI7XG4gIH0gZWxzZSBpZiAoaG9yaXpvbnRhbCA9PT0gJ3JpZ2h0Jykge1xuICAgIG9mZnNldCA9IHJlY3Qud2lkdGg7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0O1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZSh0cmFuc2Zvcm1PcmlnaW4pIHtcbiAgcmV0dXJuIFt0cmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCwgdHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsXS5tYXAobiA9PiB0eXBlb2YgbiA9PT0gJ251bWJlcicgPyBgJHtufXB4YCA6IG4pLmpvaW4oJyAnKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSB7XG4gIHJldHVybiB0eXBlb2YgYW5jaG9yRWwgPT09ICdmdW5jdGlvbicgPyBhbmNob3JFbCgpIDogYW5jaG9yRWw7XG59XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBwYXBlcjogWydwYXBlciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBQb3BvdmVyUm9vdCA9IHN0eWxlZChNb2RhbCwge1xuICBuYW1lOiAnTXVpUG9wb3ZlcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuY29uc3QgUG9wb3ZlclBhcGVyID0gc3R5bGVkKFBhcGVyLCB7XG4gIG5hbWU6ICdNdWlQb3BvdmVyJyxcbiAgc2xvdDogJ1BhcGVyJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucGFwZXJcbn0pKHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG92ZXJmbG93WTogJ2F1dG8nLFxuICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAvLyBTbyB3ZSBzZWUgdGhlIHBvcG92ZXIgd2hlbiBpdCdzIGVtcHR5LlxuICAvLyBJdCdzIG1vc3QgbGlrZWx5IG9uIGlzc3VlIG9uIHVzZXJsYW5kLlxuICBtaW5XaWR0aDogMTYsXG4gIG1pbkhlaWdodDogMTYsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMzJweCknLFxuICBtYXhIZWlnaHQ6ICdjYWxjKDEwMCUgLSAzMnB4KScsXG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDBcbn0pO1xuY29uc3QgUG9wb3ZlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBvcG92ZXIoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVBvcG92ZXInXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBhY3Rpb24sXG4gICAgYW5jaG9yRWwsXG4gICAgYW5jaG9yT3JpZ2luID0ge1xuICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgaG9yaXpvbnRhbDogJ2xlZnQnXG4gICAgfSxcbiAgICBhbmNob3JQb3NpdGlvbixcbiAgICBhbmNob3JSZWZlcmVuY2UgPSAnYW5jaG9yRWwnLFxuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb250YWluZXI6IGNvbnRhaW5lclByb3AsXG4gICAgZWxldmF0aW9uID0gOCxcbiAgICBtYXJnaW5UaHJlc2hvbGQgPSAxNixcbiAgICBvcGVuLFxuICAgIFBhcGVyUHJvcHMgPSB7fSxcbiAgICB0cmFuc2Zvcm1PcmlnaW4gPSB7XG4gICAgICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAgICBob3Jpem9udGFsOiAnbGVmdCdcbiAgICB9LFxuICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBHcm93LFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uUHJvcCA9ICdhdXRvJyxcbiAgICBUcmFuc2l0aW9uUHJvcHM6IHtcbiAgICAgIG9uRW50ZXJpbmdcbiAgICB9ID0ge31cbiAgfSA9IHByb3BzLFxuICAgICAgICBUcmFuc2l0aW9uUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcy5UcmFuc2l0aW9uUHJvcHMsIF9leGNsdWRlZCksXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZDIpO1xuXG4gIGNvbnN0IHBhcGVyUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZVBhcGVyUmVmID0gdXNlRm9ya1JlZihwYXBlclJlZiwgUGFwZXJQcm9wcy5yZWYpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbmNob3JPcmlnaW4sXG4gICAgYW5jaG9yUmVmZXJlbmNlLFxuICAgIGVsZXZhdGlvbixcbiAgICBtYXJnaW5UaHJlc2hvbGQsXG4gICAgUGFwZXJQcm9wcyxcbiAgICB0cmFuc2Zvcm1PcmlnaW4sXG4gICAgVHJhbnNpdGlvbkNvbXBvbmVudCxcbiAgICB0cmFuc2l0aW9uRHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvblByb3AsXG4gICAgVHJhbnNpdGlvblByb3BzXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTsgLy8gUmV0dXJucyB0aGUgdG9wL2xlZnQgb2Zmc2V0IG9mIHRoZSBwb3NpdGlvblxuICAvLyB0byBhdHRhY2ggdG8gb24gdGhlIGFuY2hvciBlbGVtZW50IChvciBib2R5IGlmIG5vbmUgaXMgcHJvdmlkZWQpXG5cbiAgY29uc3QgZ2V0QW5jaG9yT2Zmc2V0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhbmNob3JSZWZlcmVuY2UgPT09ICdhbmNob3JQb3NpdGlvbicpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghYW5jaG9yUG9zaXRpb24pIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IFlvdSBuZWVkIHRvIHByb3ZpZGUgYSBgYW5jaG9yUG9zaXRpb25gIHByb3Agd2hlbiB1c2luZyAnICsgJzxQb3BvdmVyIGFuY2hvclJlZmVyZW5jZT1cImFuY2hvclBvc2l0aW9uXCIgLz4uJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFuY2hvclBvc2l0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVkQW5jaG9yRWwgPSByZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpOyAvLyBJZiBhbiBhbmNob3IgZWxlbWVudCB3YXNuJ3QgcHJvdmlkZWQsIGp1c3QgdXNlIHRoZSBwYXJlbnQgYm9keSBlbGVtZW50IG9mIHRoaXMgUG9wb3ZlclxuXG4gICAgY29uc3QgYW5jaG9yRWxlbWVudCA9IHJlc29sdmVkQW5jaG9yRWwgJiYgcmVzb2x2ZWRBbmNob3JFbC5ub2RlVHlwZSA9PT0gMSA/IHJlc29sdmVkQW5jaG9yRWwgOiBvd25lckRvY3VtZW50KHBhcGVyUmVmLmN1cnJlbnQpLmJvZHk7XG4gICAgY29uc3QgYW5jaG9yUmVjdCA9IGFuY2hvckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc3QgYm94ID0gYW5jaG9yRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiYgYm94LnRvcCA9PT0gMCAmJiBib3gubGVmdCA9PT0gMCAmJiBib3gucmlnaHQgPT09IDAgJiYgYm94LmJvdHRvbSA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsICdUaGUgYW5jaG9yIGVsZW1lbnQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGxheW91dC4nLCBcIk1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBkb2N1bWVudCBvciB0aGF0IGl0J3Mgbm90IGRpc3BsYXkgbm9uZS5cIl0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGFuY2hvclJlY3QudG9wICsgZ2V0T2Zmc2V0VG9wKGFuY2hvclJlY3QsIGFuY2hvck9yaWdpbi52ZXJ0aWNhbCksXG4gICAgICBsZWZ0OiBhbmNob3JSZWN0LmxlZnQgKyBnZXRPZmZzZXRMZWZ0KGFuY2hvclJlY3QsIGFuY2hvck9yaWdpbi5ob3Jpem9udGFsKVxuICAgIH07XG4gIH0sIFthbmNob3JFbCwgYW5jaG9yT3JpZ2luLmhvcml6b250YWwsIGFuY2hvck9yaWdpbi52ZXJ0aWNhbCwgYW5jaG9yUG9zaXRpb24sIGFuY2hvclJlZmVyZW5jZV0pOyAvLyBSZXR1cm5zIHRoZSBiYXNlIHRyYW5zZm9ybSBvcmlnaW4gdXNpbmcgdGhlIGVsZW1lbnRcblxuICBjb25zdCBnZXRUcmFuc2Zvcm1PcmlnaW4gPSBSZWFjdC51c2VDYWxsYmFjayhlbGVtUmVjdCA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnRpY2FsOiBnZXRPZmZzZXRUb3AoZWxlbVJlY3QsIHRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCksXG4gICAgICBob3Jpem9udGFsOiBnZXRPZmZzZXRMZWZ0KGVsZW1SZWN0LCB0cmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbClcbiAgICB9O1xuICB9LCBbdHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwsIHRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbF0pO1xuICBjb25zdCBnZXRQb3NpdGlvbmluZ1N0eWxlID0gUmVhY3QudXNlQ2FsbGJhY2soZWxlbWVudCA9PiB7XG4gICAgY29uc3QgZWxlbVJlY3QgPSB7XG4gICAgICB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHRcbiAgICB9OyAvLyBHZXQgdGhlIHRyYW5zZm9ybSBvcmlnaW4gcG9pbnQgb24gdGhlIGVsZW1lbnQgaXRzZWxmXG5cbiAgICBjb25zdCBlbGVtVHJhbnNmb3JtT3JpZ2luID0gZ2V0VHJhbnNmb3JtT3JpZ2luKGVsZW1SZWN0KTtcblxuICAgIGlmIChhbmNob3JSZWZlcmVuY2UgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiBudWxsLFxuICAgICAgICBsZWZ0OiBudWxsLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46IGdldFRyYW5zZm9ybU9yaWdpblZhbHVlKGVsZW1UcmFuc2Zvcm1PcmlnaW4pXG4gICAgICB9O1xuICAgIH0gLy8gR2V0IHRoZSBvZmZzZXQgb2YgdGhlIGFuY2hvcmluZyBlbGVtZW50XG5cblxuICAgIGNvbnN0IGFuY2hvck9mZnNldCA9IGdldEFuY2hvck9mZnNldCgpOyAvLyBDYWxjdWxhdGUgZWxlbWVudCBwb3NpdGlvbmluZ1xuXG4gICAgbGV0IHRvcCA9IGFuY2hvck9mZnNldC50b3AgLSBlbGVtVHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsO1xuICAgIGxldCBsZWZ0ID0gYW5jaG9yT2Zmc2V0LmxlZnQgLSBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWw7XG4gICAgY29uc3QgYm90dG9tID0gdG9wICsgZWxlbVJlY3QuaGVpZ2h0O1xuICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIGVsZW1SZWN0LndpZHRoOyAvLyBVc2UgdGhlIHBhcmVudCB3aW5kb3cgb2YgdGhlIGFuY2hvckVsIGlmIHByb3ZpZGVkXG5cbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhyZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpKTsgLy8gV2luZG93IHRocmVzaG9sZHMgdGFraW5nIHJlcXVpcmVkIG1hcmdpbiBpbnRvIGFjY291bnRcblxuICAgIGNvbnN0IGhlaWdodFRocmVzaG9sZCA9IGNvbnRhaW5lcldpbmRvdy5pbm5lckhlaWdodCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICBjb25zdCB3aWR0aFRocmVzaG9sZCA9IGNvbnRhaW5lcldpbmRvdy5pbm5lcldpZHRoIC0gbWFyZ2luVGhyZXNob2xkOyAvLyBDaGVjayBpZiB0aGUgdmVydGljYWwgYXhpcyBuZWVkcyBzaGlmdGluZ1xuXG4gICAgaWYgKHRvcCA8IG1hcmdpblRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IHRvcCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICAgIHRvcCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCArPSBkaWZmO1xuICAgIH0gZWxzZSBpZiAoYm90dG9tID4gaGVpZ2h0VGhyZXNob2xkKSB7XG4gICAgICBjb25zdCBkaWZmID0gYm90dG9tIC0gaGVpZ2h0VGhyZXNob2xkO1xuICAgICAgdG9wIC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsICs9IGRpZmY7XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChlbGVtUmVjdC5oZWlnaHQgPiBoZWlnaHRUaHJlc2hvbGQgJiYgZWxlbVJlY3QuaGVpZ2h0ICYmIGhlaWdodFRocmVzaG9sZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgcG9wb3ZlciBjb21wb25lbnQgaXMgdG9vIHRhbGwuJywgYFNvbWUgcGFydCBvZiBpdCBjYW4gbm90IGJlIHNlZW4gb24gdGhlIHNjcmVlbiAoJHtlbGVtUmVjdC5oZWlnaHQgLSBoZWlnaHRUaHJlc2hvbGR9cHgpLmAsICdQbGVhc2UgY29uc2lkZXIgYWRkaW5nIGEgYG1heC1oZWlnaHRgIHRvIGltcHJvdmUgdGhlIHVzZXItZXhwZXJpZW5jZS4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSAvLyBDaGVjayBpZiB0aGUgaG9yaXpvbnRhbCBheGlzIG5lZWRzIHNoaWZ0aW5nXG5cblxuICAgIGlmIChsZWZ0IDwgbWFyZ2luVGhyZXNob2xkKSB7XG4gICAgICBjb25zdCBkaWZmID0gbGVmdCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICAgIGxlZnQgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCArPSBkaWZmO1xuICAgIH0gZWxzZSBpZiAocmlnaHQgPiB3aWR0aFRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IHJpZ2h0IC0gd2lkdGhUaHJlc2hvbGQ7XG4gICAgICBsZWZ0IC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwgKz0gZGlmZjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBgJHtNYXRoLnJvdW5kKHRvcCl9cHhgLFxuICAgICAgbGVmdDogYCR7TWF0aC5yb3VuZChsZWZ0KX1weGAsXG4gICAgICB0cmFuc2Zvcm1PcmlnaW46IGdldFRyYW5zZm9ybU9yaWdpblZhbHVlKGVsZW1UcmFuc2Zvcm1PcmlnaW4pXG4gICAgfTtcbiAgfSwgW2FuY2hvckVsLCBhbmNob3JSZWZlcmVuY2UsIGdldEFuY2hvck9mZnNldCwgZ2V0VHJhbnNmb3JtT3JpZ2luLCBtYXJnaW5UaHJlc2hvbGRdKTtcbiAgY29uc3Qgc2V0UG9zaXRpb25pbmdTdHlsZXMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHBhcGVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbmluZyA9IGdldFBvc2l0aW9uaW5nU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAocG9zaXRpb25pbmcudG9wICE9PSBudWxsKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IHBvc2l0aW9uaW5nLnRvcDtcbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb25pbmcubGVmdCAhPT0gbnVsbCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gcG9zaXRpb25pbmcubGVmdDtcbiAgICB9XG5cbiAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IHBvc2l0aW9uaW5nLnRyYW5zZm9ybU9yaWdpbjtcbiAgfSwgW2dldFBvc2l0aW9uaW5nU3R5bGVdKTtcblxuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IChlbGVtZW50LCBpc0FwcGVhcmluZykgPT4ge1xuICAgIGlmIChvbkVudGVyaW5nKSB7XG4gICAgICBvbkVudGVyaW5nKGVsZW1lbnQsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG5cbiAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICB9O1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gICAgfVxuICB9KTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb24sICgpID0+IG9wZW4gPyB7XG4gICAgdXBkYXRlUG9zaXRpb246ICgpID0+IHtcbiAgICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gICAgfVxuICB9IDogbnVsbCwgW29wZW4sIHNldFBvc2l0aW9uaW5nU3R5bGVzXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVJlc2l6ZSA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gICAgfSk7XG4gICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3coYW5jaG9yRWwpO1xuICAgIGNvbnRhaW5lcldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBoYW5kbGVSZXNpemUuY2xlYXIoKTtcbiAgICAgIGNvbnRhaW5lcldpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuICAgIH07XG4gIH0sIFthbmNob3JFbCwgb3Blbiwgc2V0UG9zaXRpb25pbmdTdHlsZXNdKTtcbiAgbGV0IHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvblByb3A7XG5cbiAgaWYgKHRyYW5zaXRpb25EdXJhdGlvblByb3AgPT09ICdhdXRvJyAmJiAhVHJhbnNpdGlvbkNvbXBvbmVudC5tdWlTdXBwb3J0QXV0bykge1xuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgfSAvLyBJZiB0aGUgY29udGFpbmVyIHByb3AgaXMgcHJvdmlkZWQsIHVzZSB0aGF0XG4gIC8vIElmIHRoZSBhbmNob3JFbCBwcm9wIGlzIHByb3ZpZGVkLCB1c2UgaXRzIHBhcmVudCBib2R5IGVsZW1lbnQgYXMgdGhlIGNvbnRhaW5lclxuICAvLyBJZiBuZWl0aGVyIGFyZSBwcm92aWRlZCBsZXQgdGhlIE1vZGFsIHRha2UgY2FyZSBvZiBjaG9vc2luZyB0aGUgY29udGFpbmVyXG5cblxuICBjb25zdCBjb250YWluZXIgPSBjb250YWluZXJQcm9wIHx8IChhbmNob3JFbCA/IG93bmVyRG9jdW1lbnQocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSkuYm9keSA6IHVuZGVmaW5lZCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQb3BvdmVyUm9vdCwgX2V4dGVuZHMoe1xuICAgIEJhY2tkcm9wUHJvcHM6IHtcbiAgICAgIGludmlzaWJsZTogdHJ1ZVxuICAgIH0sXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICBvcGVuOiBvcGVuLFxuICAgIHJlZjogcmVmLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgYXBwZWFyOiB0cnVlLFxuICAgICAgaW46IG9wZW4sXG4gICAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICAgIHRpbWVvdXQ6IHRyYW5zaXRpb25EdXJhdGlvblxuICAgIH0sIFRyYW5zaXRpb25Qcm9wcywge1xuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFBvcG92ZXJQYXBlciwgX2V4dGVuZHMoe1xuICAgICAgICBlbGV2YXRpb246IGVsZXZhdGlvblxuICAgICAgfSwgUGFwZXJQcm9wcywge1xuICAgICAgICByZWY6IGhhbmRsZVBhcGVyUmVmLFxuICAgICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5wYXBlciwgUGFwZXJQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgIH0pKVxuICAgIH0pKVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBvcG92ZXIucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEEgcmVmIGZvciBpbXBlcmF0aXZlIGFjdGlvbnMuXG4gICAqIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVwZGF0ZVBvc2l0aW9uKCkgYWN0aW9uLlxuICAgKi9cbiAgYWN0aW9uOiByZWZUeXBlLFxuXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQsIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqL1xuICBhbmNob3JFbDogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLCBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzLm9wZW4gJiYgKCFwcm9wcy5hbmNob3JSZWZlcmVuY2UgfHwgcHJvcHMuYW5jaG9yUmVmZXJlbmNlID09PSAnYW5jaG9yRWwnKSkge1xuICAgICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChwcm9wcy5hbmNob3JFbCk7XG5cbiAgICAgIGlmIChyZXNvbHZlZEFuY2hvckVsICYmIHJlc29sdmVkQW5jaG9yRWwubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgY29uc3QgYm94ID0gcmVzb2x2ZWRBbmNob3JFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJiBib3gudG9wID09PSAwICYmIGJveC5sZWZ0ID09PSAwICYmIGJveC5yaWdodCA9PT0gMCAmJiBib3guYm90dG9tID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgJ1RoZSBhbmNob3IgZWxlbWVudCBzaG91bGQgYmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgbGF5b3V0LicsIFwiTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIGRvY3VtZW50IG9yIHRoYXQgaXQncyBub3QgZGlzcGxheSBub25lLlwiXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsIGBJdCBzaG91bGQgYmUgYW4gRWxlbWVudCBpbnN0YW5jZSBidXQgaXQncyBcXGAke3Jlc29sdmVkQW5jaG9yRWx9XFxgIGluc3RlYWQuYF0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KSxcblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9pbnQgb24gdGhlIGFuY2hvciB3aGVyZSB0aGUgcG9wb3ZlcidzXG4gICAqIGBhbmNob3JFbGAgd2lsbCBhdHRhY2ggdG8uIFRoaXMgaXMgbm90IHVzZWQgd2hlbiB0aGVcbiAgICogYW5jaG9yUmVmZXJlbmNlIGlzICdhbmNob3JQb3NpdGlvbicuXG4gICAqXG4gICAqIE9wdGlvbnM6XG4gICAqIHZlcnRpY2FsOiBbdG9wLCBjZW50ZXIsIGJvdHRvbV07XG4gICAqIGhvcml6b250YWw6IFtsZWZ0LCBjZW50ZXIsIHJpZ2h0XS5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICogICBob3Jpem9udGFsOiAnbGVmdCcsXG4gICAqIH1cbiAgICovXG4gIGFuY2hvck9yaWdpbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBob3Jpem9udGFsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnbGVmdCcsICdyaWdodCddKSwgUHJvcFR5cGVzLm51bWJlcl0pLmlzUmVxdWlyZWQsXG4gICAgdmVydGljYWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvdHRvbScsICdjZW50ZXInLCAndG9wJ10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZFxuICB9KSxcblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9zaXRpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKiBUaGUgY29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBhcHBsaWNhdGlvbidzIGNsaWVudCBhcmVhLlxuICAgKi9cbiAgYW5jaG9yUG9zaXRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbGVmdDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIHRvcDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGlzIGRldGVybWluZXMgd2hpY2ggYW5jaG9yIHByb3AgdG8gcmVmZXIgdG8gd2hlbiBzZXR0aW5nXG4gICAqIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wb3Zlci5cbiAgICogQGRlZmF1bHQgJ2FuY2hvckVsJ1xuICAgKi9cbiAgYW5jaG9yUmVmZXJlbmNlOiBQcm9wVHlwZXMub25lT2YoWydhbmNob3JFbCcsICdhbmNob3JQb3NpdGlvbicsICdub25lJ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgY29tcG9uZW50IGluc3RhbmNlLCBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0aGVyLlxuICAgKiBUaGUgYGNvbnRhaW5lcmAgd2lsbCBwYXNzZWQgdG8gdGhlIE1vZGFsIGNvbXBvbmVudC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgYW5jaG9yRWwncyB0b3AtbGV2ZWwgZG9jdW1lbnQgb2JqZWN0LFxuICAgKiBzbyBpdCdzIHNpbXBseSBgZG9jdW1lbnQuYm9keWAgbW9zdCBvZiB0aGUgdGltZS5cbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuXG4gIC8qKlxuICAgKiBUaGUgZWxldmF0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKiBAZGVmYXVsdCA4XG4gICAqL1xuICBlbGV2YXRpb246IGludGVnZXJQcm9wVHlwZSxcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBjbG9zZSB0byB0aGUgZWRnZSBvZiB0aGUgd2luZG93IHRoZSBwb3BvdmVyIGNhbiBhcHBlYXIuXG4gICAqIEBkZWZhdWx0IDE2XG4gICAqL1xuICBtYXJnaW5UaHJlc2hvbGQ6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFRoZSBgcmVhc29uYCBwYXJhbWV0ZXIgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBjb250cm9sIHRoZSByZXNwb25zZSB0byBgb25DbG9zZWAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BQYXBlcmBdKC9tYXRlcmlhbC11aS9hcGkvcGFwZXIvKSBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgUGFwZXJQcm9wczogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLnNoYXBlKHtcbiAgICBjb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIHBvaW50IG9uIHRoZSBwb3BvdmVyIHdoaWNoXG4gICAqIHdpbGwgYXR0YWNoIHRvIHRoZSBhbmNob3IncyBvcmlnaW4uXG4gICAqXG4gICAqIE9wdGlvbnM6XG4gICAqIHZlcnRpY2FsOiBbdG9wLCBjZW50ZXIsIGJvdHRvbSwgeChweCldO1xuICAgKiBob3Jpem9udGFsOiBbbGVmdCwgY2VudGVyLCByaWdodCwgeChweCldLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgdmVydGljYWw6ICd0b3AnLFxuICAgKiAgIGhvcml6b250YWw6ICdsZWZ0JyxcbiAgICogfVxuICAgKi9cbiAgdHJhbnNmb3JtT3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhvcml6b250YWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdsZWZ0JywgJ3JpZ2h0J10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcbiAgICB2ZXJ0aWNhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2NlbnRlcicsICd0b3AnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSB0cmFuc2l0aW9uLlxuICAgKiBbRm9sbG93IHRoaXMgZ3VpZGVdKC9tYXRlcmlhbC11aS90cmFuc2l0aW9ucy8jdHJhbnNpdGlvbmNvbXBvbmVudC1wcm9wKSB0byBsZWFybiBtb3JlIGFib3V0IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBHcm93XG4gICAqL1xuICBUcmFuc2l0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFNldCB0byAnYXV0bycgdG8gYXV0b21hdGljYWxseSBjYWxjdWxhdGUgdHJhbnNpdGlvbiB0aW1lIGJhc2VkIG9uIGhlaWdodC5cbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICB0cmFuc2l0aW9uRHVyYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKSxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUG9wb3ZlcjsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTWVudScsIHNsb3QpO1xufVxuY29uc3QgbWVudUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNZW51JywgWydyb290JywgJ3BhcGVyJywgJ2xpc3QnXSk7XG5leHBvcnQgZGVmYXVsdCBtZW51Q2xhc3NlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib25FbnRlcmluZ1wiXSxcbiAgICAgIF9leGNsdWRlZDIgPSBbXCJhdXRvRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImRpc2FibGVBdXRvRm9jdXNJdGVtXCIsIFwiTWVudUxpc3RQcm9wc1wiLCBcIm9uQ2xvc2VcIiwgXCJvcGVuXCIsIFwiUGFwZXJQcm9wc1wiLCBcIlBvcG92ZXJDbGFzc2VzXCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsIFwiVHJhbnNpdGlvblByb3BzXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRnJhZ21lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyBIVE1MRWxlbWVudFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBNZW51TGlzdCBmcm9tICcuLi9NZW51TGlzdCc7XG5pbXBvcnQgUGFwZXIgZnJvbSAnLi4vUGFwZXInO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSAnLi4vUG9wb3Zlcic7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBnZXRNZW51VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9tZW51Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUlRMX09SSUdJTiA9IHtcbiAgdmVydGljYWw6ICd0b3AnLFxuICBob3Jpem9udGFsOiAncmlnaHQnXG59O1xuY29uc3QgTFRSX09SSUdJTiA9IHtcbiAgdmVydGljYWw6ICd0b3AnLFxuICBob3Jpem9udGFsOiAnbGVmdCdcbn07XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBwYXBlcjogWydwYXBlciddLFxuICAgIGxpc3Q6IFsnbGlzdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TWVudVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBNZW51Um9vdCA9IHN0eWxlZChQb3BvdmVyLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlNZW51JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7fSk7XG5jb25zdCBNZW51UGFwZXIgPSBzdHlsZWQoUGFwZXIsIHtcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5wYXBlclxufSkoe1xuICAvLyBzcGVjWjogVGhlIG1heGltdW0gaGVpZ2h0IG9mIGEgc2ltcGxlIG1lbnUgc2hvdWxkIGJlIG9uZSBvciBtb3JlIHJvd3MgbGVzcyB0aGFuIHRoZSB2aWV3XG4gIC8vIGhlaWdodC4gVGhpcyBlbnN1cmVzIGEgdGFwYWJsZSBhcmVhIG91dHNpZGUgb2YgdGhlIHNpbXBsZSBtZW51IHdpdGggd2hpY2ggdG8gZGlzbWlzc1xuICAvLyB0aGUgbWVudS5cbiAgbWF4SGVpZ2h0OiAnY2FsYygxMDAlIC0gOTZweCknLFxuICAvLyBBZGQgaU9TIG1vbWVudHVtIHNjcm9sbGluZyBmb3IgaU9TIDwgMTMuMFxuICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJ1xufSk7XG5jb25zdCBNZW51TWVudUxpc3QgPSBzdHlsZWQoTWVudUxpc3QsIHtcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnTGlzdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmxpc3Rcbn0pKHtcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMFxufSk7XG5jb25zdCBNZW51ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTWVudSdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGF1dG9Gb2N1cyA9IHRydWUsXG4gICAgY2hpbGRyZW4sXG4gICAgZGlzYWJsZUF1dG9Gb2N1c0l0ZW0gPSBmYWxzZSxcbiAgICBNZW51TGlzdFByb3BzID0ge30sXG4gICAgb25DbG9zZSxcbiAgICBvcGVuLFxuICAgIFBhcGVyUHJvcHMgPSB7fSxcbiAgICBQb3BvdmVyQ2xhc3NlcyxcbiAgICB0cmFuc2l0aW9uRHVyYXRpb24gPSAnYXV0bycsXG4gICAgVHJhbnNpdGlvblByb3BzOiB7XG4gICAgICBvbkVudGVyaW5nXG4gICAgfSA9IHt9LFxuICAgIHZhcmlhbnQgPSAnc2VsZWN0ZWRNZW51J1xuICB9ID0gcHJvcHMsXG4gICAgICAgIFRyYW5zaXRpb25Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLlRyYW5zaXRpb25Qcm9wcywgX2V4Y2x1ZGVkKSxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG5cbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBpc1J0bCA9IHRoZW1lLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGF1dG9Gb2N1cyxcbiAgICBkaXNhYmxlQXV0b0ZvY3VzSXRlbSxcbiAgICBNZW51TGlzdFByb3BzLFxuICAgIG9uRW50ZXJpbmcsXG4gICAgUGFwZXJQcm9wcyxcbiAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgVHJhbnNpdGlvblByb3BzLFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBhdXRvRm9jdXNJdGVtID0gYXV0b0ZvY3VzICYmICFkaXNhYmxlQXV0b0ZvY3VzSXRlbSAmJiBvcGVuO1xuICBjb25zdCBtZW51TGlzdEFjdGlvbnNSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG5cbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSAoZWxlbWVudCwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICBpZiAobWVudUxpc3RBY3Rpb25zUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1lbnVMaXN0QWN0aW9uc1JlZi5jdXJyZW50LmFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyKGVsZW1lbnQsIHRoZW1lKTtcbiAgICB9XG5cbiAgICBpZiAob25FbnRlcmluZykge1xuICAgICAgb25FbnRlcmluZyhlbGVtZW50LCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUxpc3RLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICBvbkNsb3NlKGV2ZW50LCAndGFiS2V5RG93bicpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBzaG91bGQgcmVjZWl2ZSBmb2N1c1xuICAgKiBpbiBhIGB2YXJpYW50PVwic2VsZWN0ZWRNZW51XCJgIGl0J3MgdGhlIGZpcnN0IGBzZWxlY3RlZGAgaXRlbVxuICAgKiBvdGhlcndpc2UgaXQncyB0aGUgdmVyeSBmaXJzdCBpdGVtLlxuICAgKi9cblxuXG4gIGxldCBhY3RpdmVJdGVtSW5kZXggPSAtMTsgLy8gc2luY2Ugd2UgaW5qZWN0IGZvY3VzIHJlbGF0ZWQgcHJvcHMgaW50byBjaGlsZHJlbiB3ZSBoYXZlIHRvIGRvIGEgbG9va2FoZWFkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGEgYHNlbGVjdGVkYCBpdGVtLiBXZSdyZSBsb29raW5nIGZvciB0aGUgbGFzdCBgc2VsZWN0ZWRgXG4gIC8vIGl0ZW0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsaWQgaXRlbSBhcyBhIGZhbGxiYWNrXG5cbiAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBNZW51IGNvbXBvbmVudCBkb2Vzbid0IGFjY2VwdCBhIEZyYWdtZW50IGFzIGEgY2hpbGQuXCIsICdDb25zaWRlciBwcm92aWRpbmcgYW4gYXJyYXkgaW5zdGVhZC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjaGlsZC5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnICYmIGNoaWxkLnByb3BzLnNlbGVjdGVkKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChNZW51Um9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzZXM6IFBvcG92ZXJDbGFzc2VzLFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2UsXG4gICAgYW5jaG9yT3JpZ2luOiB7XG4gICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXG4gICAgICBob3Jpem9udGFsOiBpc1J0bCA/ICdyaWdodCcgOiAnbGVmdCdcbiAgICB9LFxuICAgIHRyYW5zZm9ybU9yaWdpbjogaXNSdGwgPyBSVExfT1JJR0lOIDogTFRSX09SSUdJTixcbiAgICBQYXBlclByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICBjb21wb25lbnQ6IE1lbnVQYXBlclxuICAgIH0sIFBhcGVyUHJvcHMsIHtcbiAgICAgIGNsYXNzZXM6IF9leHRlbmRzKHt9LCBQYXBlclByb3BzLmNsYXNzZXMsIHtcbiAgICAgICAgcm9vdDogY2xhc3Nlcy5wYXBlclxuICAgICAgfSlcbiAgICB9KSxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMucm9vdCxcbiAgICBvcGVuOiBvcGVuLFxuICAgIHJlZjogcmVmLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgIFRyYW5zaXRpb25Qcm9wczogX2V4dGVuZHMoe1xuICAgICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmdcbiAgICB9LCBUcmFuc2l0aW9uUHJvcHMpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goTWVudU1lbnVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICBvbktleURvd246IGhhbmRsZUxpc3RLZXlEb3duLFxuICAgICAgYWN0aW9uczogbWVudUxpc3RBY3Rpb25zUmVmLFxuICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMgJiYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEgfHwgZGlzYWJsZUF1dG9Gb2N1c0l0ZW0pLFxuICAgICAgYXV0b0ZvY3VzSXRlbTogYXV0b0ZvY3VzSXRlbSxcbiAgICAgIHZhcmlhbnQ6IHZhcmlhbnRcbiAgICB9LCBNZW51TGlzdFByb3BzLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5saXN0LCBNZW51TGlzdFByb3BzLmNsYXNzTmFtZSksXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNZW51LnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQsIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIG1lbnUuXG4gICAqL1xuICBhbmNob3JFbDogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAgKERlZmF1bHQpIHdpbGwgZm9jdXMgdGhlIGBbcm9sZT1cIm1lbnVcIl1gIGlmIG5vIGZvY3VzYWJsZSBjaGlsZCBpcyBmb3VuZC4gRGlzYWJsZWRcbiAgICogY2hpbGRyZW4gYXJlIG5vdCBmb2N1c2FibGUuIElmIHlvdSBzZXQgdGhpcyBwcm9wIHRvIGBmYWxzZWAgZm9jdXMgd2lsbCBiZSBwbGFjZWRcbiAgICogb24gdGhlIHBhcmVudCBtb2RhbCBjb250YWluZXIuIFRoaXMgaGFzIHNldmVyZSBhY2Nlc3NpYmlsaXR5IGltcGxpY2F0aW9uc1xuICAgKiBhbmQgc2hvdWxkIG9ubHkgYmUgY29uc2lkZXJlZCBpZiB5b3UgbWFuYWdlIGZvY3VzIG90aGVyd2lzZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogTWVudSBjb250ZW50cywgbm9ybWFsbHkgYE1lbnVJdGVtYHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFdoZW4gb3BlbmluZyB0aGUgbWVudSB3aWxsIG5vdCBmb2N1cyB0aGUgYWN0aXZlIGl0ZW0gYnV0IHRoZSBgW3JvbGU9XCJtZW51XCJdYFxuICAgKiB1bmxlc3MgYGF1dG9Gb2N1c2AgaXMgYWxzbyBzZXQgdG8gYGZhbHNlYC4gTm90IHVzaW5nIHRoZSBkZWZhdWx0IG1lYW5zIG5vdFxuICAgKiBmb2xsb3dpbmcgV0FJLUFSSUEgYXV0aG9yaW5nIHByYWN0aWNlcy4gUGxlYXNlIGJlIGNvbnNpZGVyYXRlIGFib3V0IHBvc3NpYmxlXG4gICAqIGFjY2Vzc2liaWxpdHkgaW1wbGljYXRpb25zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1c0l0ZW06IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYE1lbnVMaXN0YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LWxpc3QvKSBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgTWVudUxpc3RQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIENhbiBiZTogYFwiZXNjYXBlS2V5RG93blwiYCwgYFwiYmFja2Ryb3BDbGlja1wiYCwgYFwidGFiS2V5RG93blwiYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBQYXBlclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBgY2xhc3Nlc2AgcHJvcCBhcHBsaWVkIHRvIHRoZSBbYFBvcG92ZXJgXSgvbWF0ZXJpYWwtdWkvYXBpL3BvcG92ZXIvKSBlbGVtZW50LlxuICAgKi9cbiAgUG9wb3ZlckNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVGhlIGxlbmd0aCBvZiB0aGUgdHJhbnNpdGlvbiBpbiBgbXNgLCBvciAnYXV0bydcbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICB0cmFuc2l0aW9uRHVyYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKSxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuIFVzZSBgbWVudWAgdG8gcHJldmVudCBzZWxlY3RlZCBpdGVtcyBmcm9tIGltcGFjdGluZyB0aGUgaW5pdGlhbCBmb2N1cy5cbiAgICogQGRlZmF1bHQgJ3NlbGVjdGVkTWVudSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ21lbnUnLCAnc2VsZWN0ZWRNZW51J10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTWVudTsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmF0aXZlU2VsZWN0VXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU5hdGl2ZVNlbGVjdCcsIHNsb3QpO1xufVxuY29uc3QgbmF0aXZlU2VsZWN0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU5hdGl2ZVNlbGVjdCcsIFsncm9vdCcsICdzZWxlY3QnLCAnbXVsdGlwbGUnLCAnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJywgJ2Rpc2FibGVkJywgJ2ljb24nLCAnaWNvbk9wZW4nLCAnaWNvbkZpbGxlZCcsICdpY29uT3V0bGluZWQnLCAnaWNvblN0YW5kYXJkJywgJ25hdGl2ZUlucHV0J10pO1xuZXhwb3J0IGRlZmF1bHQgbmF0aXZlU2VsZWN0Q2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJJY29uQ29tcG9uZW50XCIsIFwiaW5wdXRSZWZcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgcmVmVHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgbmF0aXZlU2VsZWN0Q2xhc3NlcywgeyBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vbmF0aXZlU2VsZWN0Q2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBkaXNhYmxlZCxcbiAgICBtdWx0aXBsZSxcbiAgICBvcGVuXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICBzZWxlY3Q6IFsnc2VsZWN0JywgdmFyaWFudCwgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgbXVsdGlwbGUgJiYgJ211bHRpcGxlJ10sXG4gICAgaWNvbjogWydpY29uJywgYGljb24ke2NhcGl0YWxpemUodmFyaWFudCl9YCwgb3BlbiAmJiAnaWNvbk9wZW4nLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMgPSAoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBNb3pBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgLy8gV2hlbiBpbnRlcmFjdGluZyBxdWlja2x5LCB0aGUgdGV4dCBjYW4gZW5kIHVwIHNlbGVjdGVkLlxuICAvLyBOYXRpdmUgc2VsZWN0IGNhbid0IGJlIHNlbGVjdGVkIGVpdGhlci5cbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICBib3JkZXJSYWRpdXM6IDAsXG4gIC8vIFJlc2V0XG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICAnJjpmb2N1cyc6IHtcbiAgICAvLyBTaG93IHRoYXQgaXQncyBub3QgYW4gdGV4dCBpbnB1dFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gJ3JnYmEoMCwgMCwgMCwgMC4wNSknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSknLFxuICAgIGJvcmRlclJhZGl1czogMCAvLyBSZXNldCBDaHJvbWUgc3R5bGVcblxuICB9LFxuICAvLyBSZW1vdmUgSUUxMSBhcnJvd1xuICAnJjo6LW1zLWV4cGFuZCc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH0sXG4gICcmW211bHRpcGxlXSc6IHtcbiAgICBoZWlnaHQ6ICdhdXRvJ1xuICB9LFxuICAnJjpub3QoW211bHRpcGxlXSkgb3B0aW9uLCAmOm5vdChbbXVsdGlwbGVdKSBvcHRncm91cCc6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZC5wYXBlclxuICB9LFxuICAvLyBCdW1wIHNwZWNpZmljaXR5IHRvIGFsbG93IGV4dGVuZGluZyBjdXN0b20gaW5wdXRzXG4gICcmJiYnOiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAyNCxcbiAgICBtaW5XaWR0aDogMTYgLy8gU28gaXQgZG9lc24ndCBjb2xsYXBzZS5cblxuICB9XG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDMyXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gIGJvcmRlclJhZGl1czogdGhlbWUuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAnJjpmb2N1cyc6IHtcbiAgICBib3JkZXJSYWRpdXM6IHRoZW1lLnNoYXBlLmJvcmRlclJhZGl1cyAvLyBSZXNldCB0aGUgcmVzZXQgZm9yIENocm9tZSBzdHlsZVxuXG4gIH0sXG4gICcmJiYnOiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAzMlxuICB9XG59KTtcbmNvbnN0IE5hdGl2ZVNlbGVjdFNlbGVjdCA9IHN0eWxlZCgnc2VsZWN0Jywge1xuICBuYW1lOiAnTXVpTmF0aXZlU2VsZWN0JyxcbiAgc2xvdDogJ1NlbGVjdCcsXG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3AsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuc2VsZWN0LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwge1xuICAgICAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5tdWx0aXBsZX1gXTogc3R5bGVzLm11bHRpcGxlXG4gICAgfV07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcyk7XG5leHBvcnQgY29uc3QgbmF0aXZlU2VsZWN0SWNvblN0eWxlcyA9ICh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIC8vIFdlIHVzZSBhIHBvc2l0aW9uIGFic29sdXRlIG92ZXIgYSBmbGV4Ym94IGluIG9yZGVyIHRvIGZvcndhcmQgdGhlIHBvaW50ZXIgZXZlbnRzXG4gIC8vIHRvIHRoZSBpbnB1dCBhbmQgdG8gc3VwcG9ydCB3cmFwcGluZyB0YWdzLi5cbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAwLFxuICB0b3A6ICdjYWxjKDUwJSAtIC41ZW0pJyxcbiAgLy8gQ2VudGVyIHZlcnRpY2FsbHksIGhlaWdodCBpcyAxZW1cbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAvLyBEb24ndCBibG9jayBwb2ludGVyIGV2ZW50cyBvbiB0aGUgc2VsZWN0IHVuZGVyIHRoZSBpY29uLlxuICBjb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uYWN0aXZlLFxuICBbYCYuJHtuYXRpdmVTZWxlY3RDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gIH1cbn0sIG93bmVyU3RhdGUub3BlbiAmJiB7XG4gIHRyYW5zZm9ybTogJ3JvdGF0ZSgxODBkZWcpJ1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZmlsbGVkJyAmJiB7XG4gIHJpZ2h0OiA3XG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICByaWdodDogN1xufSk7XG5jb25zdCBOYXRpdmVTZWxlY3RJY29uID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlOYXRpdmVTZWxlY3QnLFxuICBzbG90OiAnSWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuaWNvbiwgb3duZXJTdGF0ZS52YXJpYW50ICYmIHN0eWxlc1tgaWNvbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnZhcmlhbnQpfWBdLCBvd25lclN0YXRlLm9wZW4gJiYgc3R5bGVzLmljb25PcGVuXTtcbiAgfVxufSkobmF0aXZlU2VsZWN0SWNvblN0eWxlcyk7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cblxuY29uc3QgTmF0aXZlU2VsZWN0SW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBOYXRpdmVTZWxlY3RJbnB1dChwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgZGlzYWJsZWQsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBpbnB1dFJlZixcbiAgICB2YXJpYW50ID0gJ3N0YW5kYXJkJ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVkLFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChOYXRpdmVTZWxlY3RTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5zZWxlY3QsIGNsYXNzTmFtZSksXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICByZWY6IGlucHV0UmVmIHx8IHJlZlxuICAgIH0sIG90aGVyKSksIHByb3BzLm11bHRpcGxlID8gbnVsbCA6IC8qI19fUFVSRV9fKi9fanN4KE5hdGl2ZVNlbGVjdEljb24sIHtcbiAgICAgIGFzOiBJY29uQ29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5pY29uXG4gICAgfSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBOYXRpdmVTZWxlY3RJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGVsZW1lbnRzIHRvIHBvcHVsYXRlIHRoZSBzZWxlY3Qgd2l0aC5cbiAgICogQ2FuIGJlIHNvbWUgYDxvcHRpb24+YCBlbGVtZW50cy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUaGUgQ1NTIGNsYXNzIG5hbWUgb2YgdGhlIHNlbGVjdCBlbGVtZW50LlxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3QgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBpY29uIHRoYXQgZGlzcGxheXMgdGhlIGFycm93LlxuICAgKi9cbiAgSWNvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFVzZSB0aGF0IHByb3AgdG8gcGFzcyBhIHJlZiB0byB0aGUgbmF0aXZlIHNlbGVjdCBlbGVtZW50LlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBzZWxlY3RgIG9yIGhpZGRlbiBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydzdGFuZGFyZCcsICdvdXRsaW5lZCcsICdmaWxsZWQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVTZWxlY3RJbnB1dDsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVNlbGVjdCcsIHNsb3QpO1xufVxuY29uc3Qgc2VsZWN0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVNlbGVjdCcsIFsnc2VsZWN0JywgJ211bHRpcGxlJywgJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCcsICdkaXNhYmxlZCcsICdmb2N1c2VkJywgJ2ljb24nLCAnaWNvbk9wZW4nLCAnaWNvbkZpbGxlZCcsICdpY29uT3V0bGluZWQnLCAnaWNvblN0YW5kYXJkJywgJ25hdGl2ZUlucHV0J10pO1xuZXhwb3J0IGRlZmF1bHQgc2VsZWN0Q2xhc3NlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IHsgZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGFzIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgfSBmcm9tIFwiQG11aS91dGlsc1wiO1xuXG52YXIgX3NwYW47XG5cbmNvbnN0IF9leGNsdWRlZCA9IFtcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b1dpZHRoXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkZWZhdWx0T3BlblwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzcGxheUVtcHR5XCIsIFwiSWNvbkNvbXBvbmVudFwiLCBcImlucHV0UmVmXCIsIFwibGFiZWxJZFwiLCBcIk1lbnVQcm9wc1wiLCBcIm11bHRpcGxlXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DbG9zZVwiLCBcIm9uRm9jdXNcIiwgXCJvbk9wZW5cIiwgXCJvcGVuXCIsIFwicmVhZE9ubHlcIiwgXCJyZW5kZXJWYWx1ZVwiLCBcIlNlbGVjdERpc3BsYXlQcm9wc1wiLCBcInRhYkluZGV4XCIsIFwidHlwZVwiLCBcInZhbHVlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRnJhZ21lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyByZWZUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi91dGlscy9vd25lckRvY3VtZW50JztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IE1lbnUgZnJvbSAnLi4vTWVudS9NZW51JztcbmltcG9ydCB7IG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcywgbmF0aXZlU2VsZWN0SWNvblN0eWxlcyB9IGZyb20gJy4uL05hdGl2ZVNlbGVjdC9OYXRpdmVTZWxlY3RJbnB1dCc7XG5pbXBvcnQgeyBpc0ZpbGxlZCB9IGZyb20gJy4uL0lucHV0QmFzZS91dGlscyc7XG5pbXBvcnQgc3R5bGVkLCB7IHNsb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICcuLi91dGlscy91c2VDb250cm9sbGVkJztcbmltcG9ydCBzZWxlY3RDbGFzc2VzLCB7IGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9zZWxlY3RDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBTZWxlY3RTZWxlY3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdTZWxlY3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbLy8gV2luIHNwZWNpZmljaXR5IG92ZXIgdGhlIGlucHV0IGJhc2VcbiAgICB7XG4gICAgICBbYCYuJHtzZWxlY3RDbGFzc2VzLnNlbGVjdH1gXTogc3R5bGVzLnNlbGVjdFxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuc2VsZWN0fWBdOiBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XVxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMubXVsdGlwbGV9YF06IHN0eWxlcy5tdWx0aXBsZVxuICAgIH1dO1xuICB9XG59KShuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMsIHtcbiAgLy8gV2luIHNwZWNpZmljaXR5IG92ZXIgdGhlIGlucHV0IGJhc2VcbiAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5zZWxlY3R9YF06IHtcbiAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAvLyBSZXNldHMgZm9yIG11bHRpcGxlIHNlbGVjdCB3aXRoIGNoaXBzXG4gICAgbWluSGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICAgIC8vIFJlcXVpcmVkIGZvciBzZWxlY3RcXHRleHQtZmllbGQgaGVpZ2h0IGNvbnNpc3RlbmN5XG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICB9XG59KTtcbmNvbnN0IFNlbGVjdEljb24gPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5pY29uLCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW2BpY29uJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMuaWNvbk9wZW5dO1xuICB9XG59KShuYXRpdmVTZWxlY3RJY29uU3R5bGVzKTtcbmNvbnN0IFNlbGVjdE5hdGl2ZUlucHV0ID0gc3R5bGVkKCdpbnB1dCcsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gc2xvdFNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdOYXRpdmVJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLm5hdGl2ZUlucHV0XG59KSh7XG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG9wYWNpdHk6IDAsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCdcbn0pO1xuXG5mdW5jdGlvbiBhcmVFcXVhbFZhbHVlcyhhLCBiKSB7XG4gIGlmICh0eXBlb2YgYiA9PT0gJ29iamVjdCcgJiYgYiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBhID09PSBiO1xuICB9IC8vIFRoZSB2YWx1ZSBjb3VsZCBiZSBhIG51bWJlciwgdGhlIERPTSB3aWxsIHN0cmluZ2lmeSBpdCBhbnl3YXkuXG5cblxuICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYik7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHkoZGlzcGxheSkge1xuICByZXR1cm4gZGlzcGxheSA9PSBudWxsIHx8IHR5cGVvZiBkaXNwbGF5ID09PSAnc3RyaW5nJyAmJiAhZGlzcGxheS50cmltKCk7XG59XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHZhcmlhbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgbXVsdGlwbGUsXG4gICAgb3BlblxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgc2VsZWN0OiBbJ3NlbGVjdCcsIHZhcmlhbnQsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIG11bHRpcGxlICYmICdtdWx0aXBsZSddLFxuICAgIGljb246IFsnaWNvbicsIGBpY29uJHtjYXBpdGFsaXplKHZhcmlhbnQpfWAsIG9wZW4gJiYgJ2ljb25PcGVuJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJ10sXG4gICAgbmF0aXZlSW5wdXQ6IFsnbmF0aXZlSW5wdXQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cblxuXG5jb25zdCBTZWxlY3RJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFNlbGVjdElucHV0KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZGJ5LFxuICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAgIGF1dG9Gb2N1cyxcbiAgICBhdXRvV2lkdGgsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGRlZmF1bHRPcGVuLFxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNwbGF5RW1wdHksXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBpbnB1dFJlZjogaW5wdXRSZWZQcm9wLFxuICAgIGxhYmVsSWQsXG4gICAgTWVudVByb3BzID0ge30sXG4gICAgbXVsdGlwbGUsXG4gICAgbmFtZSxcbiAgICBvbkJsdXIsXG4gICAgb25DaGFuZ2UsXG4gICAgb25DbG9zZSxcbiAgICBvbkZvY3VzLFxuICAgIG9uT3BlbixcbiAgICBvcGVuOiBvcGVuUHJvcCxcbiAgICByZWFkT25seSxcbiAgICByZW5kZXJWYWx1ZSxcbiAgICBTZWxlY3REaXNwbGF5UHJvcHMgPSB7fSxcbiAgICB0YWJJbmRleDogdGFiSW5kZXhQcm9wLFxuICAgIHZhbHVlOiB2YWx1ZVByb3AsXG4gICAgdmFyaWFudCA9ICdzdGFuZGFyZCdcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVTdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiB2YWx1ZVByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxuICAgIG5hbWU6ICdTZWxlY3QnXG4gIH0pO1xuICBjb25zdCBbb3BlblN0YXRlLCBzZXRPcGVuU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogb3BlblByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdE9wZW4sXG4gICAgbmFtZTogJ1NlbGVjdCdcbiAgfSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBkaXNwbGF5UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBbZGlzcGxheU5vZGUsIHNldERpc3BsYXlOb2RlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNPcGVuQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKG9wZW5Qcm9wICE9IG51bGwpO1xuICBjb25zdCBbbWVudU1pbldpZHRoU3RhdGUsIHNldE1lbnVNaW5XaWR0aFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYocmVmLCBpbnB1dFJlZlByb3ApO1xuICBjb25zdCBoYW5kbGVEaXNwbGF5UmVmID0gUmVhY3QudXNlQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgZGlzcGxheVJlZi5jdXJyZW50ID0gbm9kZTtcblxuICAgIGlmIChub2RlKSB7XG4gICAgICBzZXREaXNwbGF5Tm9kZShub2RlKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShoYW5kbGVSZWYsICgpID0+ICh7XG4gICAgZm9jdXM6ICgpID0+IHtcbiAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH0sXG4gICAgbm9kZTogaW5wdXRSZWYuY3VycmVudCxcbiAgICB2YWx1ZVxuICB9KSwgW3ZhbHVlXSk7IC8vIFJlc2l6ZSBtZW51IG9uIGBkZWZhdWx0T3BlbmAgYXV0b21hdGljIHRvZ2dsZS5cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0T3BlbiAmJiBvcGVuU3RhdGUgJiYgZGlzcGxheU5vZGUgJiYgIWlzT3BlbkNvbnRyb2xsZWQpIHtcbiAgICAgIHNldE1lbnVNaW5XaWR0aFN0YXRlKGF1dG9XaWR0aCA/IG51bGwgOiBkaXNwbGF5Tm9kZS5jbGllbnRXaWR0aCk7XG4gICAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcblxuICB9LCBbZGlzcGxheU5vZGUsIGF1dG9XaWR0aF0pOyAvLyBgaXNPcGVuQ29udHJvbGxlZGAgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIHN3aXRjaCBiZXR3ZWVuIGNvbnRyb2xsZWQgYW5kIHVuY29udHJvbGxlZCBtb2Rlcy5cbiAgLy8gYGRlZmF1bHRPcGVuYCBhbmQgYG9wZW5TdGF0ZWAgYXJlIGlnbm9yZWQgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY2FsbGJhY2tzLlxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1cykge1xuICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbYXV0b0ZvY3VzXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsYWJlbElkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGxhYmVsID0gb3duZXJEb2N1bWVudChkaXNwbGF5UmVmLmN1cnJlbnQpLmdldEVsZW1lbnRCeUlkKGxhYmVsSWQpO1xuXG4gICAgaWYgKGxhYmVsKSB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICBpZiAoZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGxhYmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtsYWJlbElkXSk7XG5cbiAgY29uc3QgdXBkYXRlID0gKG9wZW4sIGV2ZW50KSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIGlmIChvbk9wZW4pIHtcbiAgICAgICAgb25PcGVuKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9uQ2xvc2UpIHtcbiAgICAgIG9uQ2xvc2UoZXZlbnQpO1xuICAgIH1cblxuICAgIGlmICghaXNPcGVuQ29udHJvbGxlZCkge1xuICAgICAgc2V0TWVudU1pbldpZHRoU3RhdGUoYXV0b1dpZHRoID8gbnVsbCA6IGRpc3BsYXlOb2RlLmNsaWVudFdpZHRoKTtcbiAgICAgIHNldE9wZW5TdGF0ZShvcGVuKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gZXZlbnQgPT4ge1xuICAgIC8vIElnbm9yZSBldmVyeXRoaW5nIGJ1dCBsZWZ0LWNsaWNrXG4gICAgaWYgKGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSGlqYWNrIHRoZSBkZWZhdWx0IGZvY3VzIGJlaGF2aW9yLlxuXG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIHVwZGF0ZSh0cnVlLCBldmVudCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSBldmVudCA9PiB7XG4gICAgdXBkYXRlKGZhbHNlLCBldmVudCk7XG4gIH07XG5cbiAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pOyAvLyBTdXBwb3J0IGF1dG9maWxsLlxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBpbmRleCA9IGNoaWxkcmVuQXJyYXkubWFwKGNoaWxkID0+IGNoaWxkLnByb3BzLnZhbHVlKS5pbmRleE9mKGV2ZW50LnRhcmdldC52YWx1ZSk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbkFycmF5W2luZGV4XTtcbiAgICBzZXRWYWx1ZVN0YXRlKGNoaWxkLnByb3BzLnZhbHVlKTtcblxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoZXZlbnQsIGNoaWxkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSXRlbUNsaWNrID0gY2hpbGQgPT4gZXZlbnQgPT4ge1xuICAgIGxldCBuZXdWYWx1ZTsgLy8gV2UgdXNlIHRoZSB0YWJpbmRleCBhdHRyaWJ1dGUgdG8gc2lnbmFsIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cblxuICAgIGlmICghZXZlbnQuY3VycmVudFRhcmdldC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgIG5ld1ZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5zbGljZSgpIDogW107XG4gICAgICBjb25zdCBpdGVtSW5kZXggPSB2YWx1ZS5pbmRleE9mKGNoaWxkLnByb3BzLnZhbHVlKTtcblxuICAgICAgaWYgKGl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgbmV3VmFsdWUucHVzaChjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZS5zcGxpY2UoaXRlbUluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VmFsdWUgPSBjaGlsZC5wcm9wcy52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25DbGljaykge1xuICAgICAgY2hpbGQucHJvcHMub25DbGljayhldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgc2V0VmFsdWVTdGF0ZShuZXdWYWx1ZSk7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICAvLyBSZWRlZmluZSB0YXJnZXQgdG8gYWxsb3cgbmFtZSBhbmQgdmFsdWUgdG8gYmUgcmVhZC5cbiAgICAgICAgLy8gVGhpcyBhbGxvd3Mgc2VhbWxlc3MgaW50ZWdyYXRpb24gd2l0aCB0aGUgbW9zdCBwb3B1bGFyIGZvcm0gbGlicmFyaWVzLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8xMzQ4NSNpc3N1ZWNvbW1lbnQtNjc2MDQ4NDkyXG4gICAgICAgIC8vIENsb25lIHRoZSBldmVudCB0byBub3Qgb3ZlcnJpZGUgYHRhcmdldGAgb2YgdGhlIG9yaWdpbmFsIGV2ZW50LlxuICAgICAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50Lm5hdGl2ZUV2ZW50IHx8IGV2ZW50O1xuICAgICAgICBjb25zdCBjbG9uZWRFdmVudCA9IG5ldyBuYXRpdmVFdmVudC5jb25zdHJ1Y3RvcihuYXRpdmVFdmVudC50eXBlLCBuYXRpdmVFdmVudCk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9uZWRFdmVudCwgJ3RhcmdldCcsIHtcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG9uQ2hhbmdlKGNsb25lZEV2ZW50LCBjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFtdWx0aXBsZSkge1xuICAgICAgdXBkYXRlKGZhbHNlLCBldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKCFyZWFkT25seSkge1xuICAgICAgY29uc3QgdmFsaWRLZXlzID0gWycgJywgJ0Fycm93VXAnLCAnQXJyb3dEb3duJywgLy8gVGhlIG5hdGl2ZSBzZWxlY3QgZG9lc24ndCByZXNwb25kIHRvIGVudGVyIG9uIG1hY09TLCBidXQgaXQncyByZWNvbW1lbmRlZCBieVxuICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1dBSS9BUklBL2FwZy9leGFtcGxlLWluZGV4L2NvbWJvYm94L2NvbWJvYm94LXNlbGVjdC1vbmx5Lmh0bWxcbiAgICAgICdFbnRlciddO1xuXG4gICAgICBpZiAodmFsaWRLZXlzLmluZGV4T2YoZXZlbnQua2V5KSAhPT0gLTEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdXBkYXRlKHRydWUsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb3BlbiA9IGRpc3BsYXlOb2RlICE9PSBudWxsICYmIG9wZW5TdGF0ZTtcblxuICBjb25zdCBoYW5kbGVCbHVyID0gZXZlbnQgPT4ge1xuICAgIC8vIGlmIG9wZW4gZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uXG4gICAgaWYgKCFvcGVuICYmIG9uQmx1cikge1xuICAgICAgLy8gUHJlYWN0IHN1cHBvcnQsIHRhcmdldCBpcyByZWFkIG9ubHkgcHJvcGVydHkgb24gYSBuYXRpdmUgZXZlbnQuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnQsICd0YXJnZXQnLCB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBkZWxldGUgb3RoZXJbJ2FyaWEtaW52YWxpZCddO1xuICBsZXQgZGlzcGxheTtcbiAgbGV0IGRpc3BsYXlTaW5nbGU7XG4gIGNvbnN0IGRpc3BsYXlNdWx0aXBsZSA9IFtdO1xuICBsZXQgY29tcHV0ZURpc3BsYXkgPSBmYWxzZTtcbiAgbGV0IGZvdW5kTWF0Y2ggPSBmYWxzZTsgLy8gTm8gbmVlZCB0byBkaXNwbGF5IGFueSB2YWx1ZSBpZiB0aGUgZmllbGQgaXMgZW1wdHkuXG5cbiAgaWYgKGlzRmlsbGVkKHtcbiAgICB2YWx1ZVxuICB9KSB8fCBkaXNwbGF5RW1wdHkpIHtcbiAgICBpZiAocmVuZGVyVmFsdWUpIHtcbiAgICAgIGRpc3BsYXkgPSByZW5kZXJWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXB1dGVEaXNwbGF5ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBpdGVtcyA9IGNoaWxkcmVuQXJyYXkubWFwKChjaGlsZCwgaW5kZXgsIGFycikgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBTZWxlY3QgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgc2VsZWN0ZWQ7XG5cbiAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBcXGB2YWx1ZVxcYCBwcm9wIG11c3QgYmUgYW4gYXJyYXkgd2hlbiB1c2luZyB0aGUgXFxgU2VsZWN0XFxgIGNvbXBvbmVudCB3aXRoIFxcYG11bHRpcGxlXFxgLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDIpKTtcbiAgICAgIH1cblxuICAgICAgc2VsZWN0ZWQgPSB2YWx1ZS5zb21lKHYgPT4gYXJlRXF1YWxWYWx1ZXModiwgY2hpbGQucHJvcHMudmFsdWUpKTtcblxuICAgICAgaWYgKHNlbGVjdGVkICYmIGNvbXB1dGVEaXNwbGF5KSB7XG4gICAgICAgIGRpc3BsYXlNdWx0aXBsZS5wdXNoKGNoaWxkLnByb3BzLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWQgPSBhcmVFcXVhbFZhbHVlcyh2YWx1ZSwgY2hpbGQucHJvcHMudmFsdWUpO1xuXG4gICAgICBpZiAoc2VsZWN0ZWQgJiYgY29tcHV0ZURpc3BsYXkpIHtcbiAgICAgICAgZGlzcGxheVNpbmdsZSA9IGNoaWxkLnByb3BzLmNoaWxkcmVuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgZm91bmRNYXRjaCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkLnByb3BzLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgICdhcmlhLXJlYWRvbmx5JzogdHJ1ZSxcbiAgICAgICAgcm9sZTogJ29wdGlvbidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRmlyc3RTZWxlY3RhYmxlRWxlbWVudCA9ICgpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpcnN0U2VsZWN0YWJsZUVsZW1lbnQgPSBhcnIuZmluZChpdGVtID0+IGl0ZW0ucHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpdGVtLnByb3BzLmRpc2FibGVkICE9PSB0cnVlKTtcblxuICAgICAgaWYgKGNoaWxkID09PSBmaXJzdFNlbGVjdGFibGVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgfTtcblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAnYXJpYS1zZWxlY3RlZCc6IHNlbGVjdGVkID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIG9uQ2xpY2s6IGhhbmRsZUl0ZW1DbGljayhjaGlsZCksXG4gICAgICBvbktleVVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICAgIC8vIG90aGVyd2lzZSBvdXIgTWVudUl0ZW1zIGRpc3BhdGNoZXMgYSBjbGljayBldmVudFxuICAgICAgICAgIC8vIGl0J3Mgbm90IGJlaGF2aW9yIG9mIHRoZSBuYXRpdmUgPG9wdGlvbj4gYW5kIGNhdXNlc1xuICAgICAgICAgIC8vIHRoZSBzZWxlY3QgdG8gY2xvc2UgaW1tZWRpYXRlbHkgc2luY2Ugd2Ugb3BlbiBvbiBzcGFjZSBrZXlkb3duXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZC5wcm9wcy5vbktleVVwKSB7XG4gICAgICAgICAgY2hpbGQucHJvcHMub25LZXlVcChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByb2xlOiAnb3B0aW9uJyxcbiAgICAgIHNlbGVjdGVkOiBhcnJbMF0ucHJvcHMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBhcnJbMF0ucHJvcHMuZGlzYWJsZWQgPT09IHRydWUgPyBpc0ZpcnN0U2VsZWN0YWJsZUVsZW1lbnQoKSA6IHNlbGVjdGVkLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSB2YWx1ZSBpcyBtb3N0IGxpa2VseSBub3QgYSB2YWxpZCBIVE1MIGF0dHJpYnV0ZS5cbiAgICAgICdkYXRhLXZhbHVlJzogY2hpbGQucHJvcHMudmFsdWUgLy8gSW5zdGVhZCwgd2UgcHJvdmlkZSBpdCBhcyBhIGRhdGEgYXR0cmlidXRlLlxuXG4gICAgfSk7XG4gIH0pO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghZm91bmRNYXRjaCAmJiAhbXVsdGlwbGUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGNoaWxkcmVuQXJyYXkubWFwKGNoaWxkID0+IGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFtgTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhbiBvdXQtb2YtcmFuZ2UgdmFsdWUgXFxgJHt2YWx1ZX1cXGAgZm9yIHRoZSBzZWxlY3QgJHtuYW1lID8gYChuYW1lPVwiJHtuYW1lfVwiKSBgIDogJyd9Y29tcG9uZW50LmAsIFwiQ29uc2lkZXIgcHJvdmlkaW5nIGEgdmFsdWUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgb3IgJycuXCIsIGBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmUgJHt2YWx1ZXMuZmlsdGVyKHggPT4geCAhPSBudWxsKS5tYXAoeCA9PiBgXFxgJHt4fVxcYGApLmpvaW4oJywgJykgfHwgJ1wiXCInfS5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW2ZvdW5kTWF0Y2gsIGNoaWxkcmVuQXJyYXksIG11bHRpcGxlLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG5cbiAgaWYgKGNvbXB1dGVEaXNwbGF5KSB7XG4gICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICBpZiAoZGlzcGxheU11bHRpcGxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwbGF5ID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5TXVsdGlwbGUucmVkdWNlKChvdXRwdXQsIGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIG91dHB1dC5wdXNoKGNoaWxkKTtcblxuICAgICAgICAgIGlmIChpbmRleCA8IGRpc3BsYXlNdWx0aXBsZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBvdXRwdXQucHVzaCgnLCAnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXkgPSBkaXNwbGF5U2luZ2xlO1xuICAgIH1cbiAgfSAvLyBBdm9pZCBwZXJmb3JtaW5nIGEgbGF5b3V0IGNvbXB1dGF0aW9uIGluIHRoZSByZW5kZXIgbWV0aG9kLlxuXG5cbiAgbGV0IG1lbnVNaW5XaWR0aCA9IG1lbnVNaW5XaWR0aFN0YXRlO1xuXG4gIGlmICghYXV0b1dpZHRoICYmIGlzT3BlbkNvbnRyb2xsZWQgJiYgZGlzcGxheU5vZGUpIHtcbiAgICBtZW51TWluV2lkdGggPSBkaXNwbGF5Tm9kZS5jbGllbnRXaWR0aDtcbiAgfVxuXG4gIGxldCB0YWJJbmRleDtcblxuICBpZiAodHlwZW9mIHRhYkluZGV4UHJvcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0YWJJbmRleCA9IHRhYkluZGV4UHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0YWJJbmRleCA9IGRpc2FibGVkID8gbnVsbCA6IDA7XG4gIH1cblxuICBjb25zdCBidXR0b25JZCA9IFNlbGVjdERpc3BsYXlQcm9wcy5pZCB8fCAobmFtZSA/IGBtdWktY29tcG9uZW50LXNlbGVjdC0ke25hbWV9YCA6IHVuZGVmaW5lZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHZhcmlhbnQsXG4gICAgdmFsdWUsXG4gICAgb3BlblxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFNlbGVjdFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVEaXNwbGF5UmVmLFxuICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgcm9sZTogXCJidXR0b25cIixcbiAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBvcGVuID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcImxpc3Rib3hcIixcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBbbGFiZWxJZCwgYnV0dG9uSWRdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykgfHwgdW5kZWZpbmVkLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgIG9uTW91c2VEb3duOiBkaXNhYmxlZCB8fCByZWFkT25seSA/IG51bGwgOiBoYW5kbGVNb3VzZURvd24sXG4gICAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzXG4gICAgfSwgU2VsZWN0RGlzcGxheVByb3BzLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KFNlbGVjdERpc3BsYXlQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMuc2VsZWN0LCBjbGFzc05hbWUpIC8vIFRoZSBpZCBpcyByZXF1aXJlZCBmb3IgcHJvcGVyIGExMXlcbiAgICAgICxcbiAgICAgIGlkOiBidXR0b25JZCxcbiAgICAgIGNoaWxkcmVuOiBpc0VtcHR5KGRpc3BsYXkpID8gLy8gbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWVcbiAgICAgIF9zcGFuIHx8IChfc3BhbiA9IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICAgIH0pKSA6IGRpc3BsYXlcbiAgICB9KSksIC8qI19fUFVSRV9fKi9fanN4KFNlbGVjdE5hdGl2ZUlucHV0LCBfZXh0ZW5kcyh7XG4gICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsJykgOiB2YWx1ZSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICByZWY6IGlucHV0UmVmLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5uYXRpdmVJbnB1dCxcbiAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0sIG90aGVyKSksIC8qI19fUFVSRV9fKi9fanN4KFNlbGVjdEljb24sIHtcbiAgICAgIGFzOiBJY29uQ29tcG9uZW50LFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmljb24sXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSksIC8qI19fUFVSRV9fKi9fanN4KE1lbnUsIF9leHRlbmRzKHtcbiAgICAgIGlkOiBgbWVudS0ke25hbWUgfHwgJyd9YCxcbiAgICAgIGFuY2hvckVsOiBkaXNwbGF5Tm9kZSxcbiAgICAgIG9wZW46IG9wZW4sXG4gICAgICBvbkNsb3NlOiBoYW5kbGVDbG9zZSxcbiAgICAgIGFuY2hvck9yaWdpbjoge1xuICAgICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXG4gICAgICAgIGhvcml6b250YWw6ICdjZW50ZXInXG4gICAgICB9LFxuICAgICAgdHJhbnNmb3JtT3JpZ2luOiB7XG4gICAgICAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcidcbiAgICAgIH1cbiAgICB9LCBNZW51UHJvcHMsIHtcbiAgICAgIE1lbnVMaXN0UHJvcHM6IF9leHRlbmRzKHtcbiAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IGxhYmVsSWQsXG4gICAgICAgIHJvbGU6ICdsaXN0Ym94JyxcbiAgICAgICAgZGlzYWJsZUxpc3RXcmFwOiB0cnVlXG4gICAgICB9LCBNZW51UHJvcHMuTWVudUxpc3RQcm9wcyksXG4gICAgICBQYXBlclByb3BzOiBfZXh0ZW5kcyh7fSwgTWVudVByb3BzLlBhcGVyUHJvcHMsIHtcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBtaW5XaWR0aDogbWVudU1pbldpZHRoXG4gICAgICAgIH0sIE1lbnVQcm9wcy5QYXBlclByb3BzICE9IG51bGwgPyBNZW51UHJvcHMuUGFwZXJQcm9wcy5zdHlsZSA6IG51bGwpXG4gICAgICB9KSxcbiAgICAgIGNoaWxkcmVuOiBpdGVtc1xuICAgIH0pKV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFNlbGVjdElucHV0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtbGFiZWwnOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB3aWR0aCBvZiB0aGUgcG9wb3ZlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgaXRlbXMgaW5zaWRlIHRoZVxuICAgKiBtZW51LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIHNlbGVjdCBpbnB1dC5cbiAgICovXG4gIGF1dG9XaWR0aDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgPE1lbnVJdGVtPmAgZWxlbWVudHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogU2VlIFtDU1MgQVBJXSgjY3NzKSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBuYW1lIG9mIHRoZSBzZWxlY3QgZWxlbWVudC5cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHRvZ2dsZWQgb24gbW91bnQuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgb3BlbiBzdGF0ZSBpcyBub3QgY29udHJvbGxlZC5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgZGVmYXVsdE9wZW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3RlZCBpdGVtIGlzIGRpc3BsYXllZCBldmVuIGlmIGl0cyB2YWx1ZSBpcyBlbXB0eS5cbiAgICovXG4gIGRpc3BsYXlFbXB0eTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBpY29uIHRoYXQgZGlzcGxheXMgdGhlIGFycm93LlxuICAgKi9cbiAgSWNvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIEltcGVyYXRpdmUgaGFuZGxlIGltcGxlbWVudGluZyBgeyB2YWx1ZTogVCwgbm9kZTogSFRNTEVsZW1lbnQsIGZvY3VzKCk6IHZvaWQgfWBcbiAgICogRXF1aXZhbGVudCB0byBgcmVmYFxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiBhbiBlbGVtZW50IHRoYXQgYWN0cyBhcyBhbiBhZGRpdGlvbmFsIGxhYmVsLiBUaGUgU2VsZWN0IHdpbGxcbiAgICogYmUgbGFiZWxsZWQgYnkgdGhlIGFkZGl0aW9uYWwgbGFiZWwgYW5kIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICovXG4gIGxhYmVsSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGVsZW1lbnQuXG4gICAqL1xuICBNZW51UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYHZhbHVlYCBtdXN0IGJlIGFuIGFycmF5IGFuZCB0aGUgbWVudSB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9ucy5cbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBzZWxlY3RgIG9yIGhpZGRlbiBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKGFueSkuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY2hpbGRdIFRoZSByZWFjdCBlbGVtZW50IHRoYXQgd2FzIHNlbGVjdGVkLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBVc2UgaW4gY29udHJvbGxlZCBtb2RlIChzZWUgb3BlbikuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIG9wZW5lZC5cbiAgICogVXNlIGluIGNvbnRyb2xsZWQgbW9kZSAoc2VlIG9wZW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbk9wZW46IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIGB2YWx1ZWAgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0Tm9kZX1cbiAgICovXG4gIHJlbmRlclZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgY2xpY2thYmxlIGRpdiBlbGVtZW50LlxuICAgKi9cbiAgU2VsZWN0RGlzcGxheVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgdmFsdWUuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnc3RhbmRhcmQnLCAnb3V0bGluZWQnLCAnZmlsbGVkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgU2VsZWN0SW5wdXQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cblxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTcgMTBsNSA1IDUtNXpcIlxufSksICdBcnJvd0Ryb3BEb3duJyk7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcblxudmFyIF9TdHlsZWRJbnB1dCwgX1N0eWxlZEZpbGxlZElucHV0O1xuXG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRvV2lkdGhcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIiwgXCJkZWZhdWx0T3BlblwiLCBcImRpc3BsYXlFbXB0eVwiLCBcIkljb25Db21wb25lbnRcIiwgXCJpZFwiLCBcImlucHV0XCIsIFwiaW5wdXRQcm9wc1wiLCBcImxhYmVsXCIsIFwibGFiZWxJZFwiLCBcIk1lbnVQcm9wc1wiLCBcIm11bHRpcGxlXCIsIFwibmF0aXZlXCIsIFwib25DbG9zZVwiLCBcIm9uT3BlblwiLCBcIm9wZW5cIiwgXCJyZW5kZXJWYWx1ZVwiLCBcIlNlbGVjdERpc3BsYXlQcm9wc1wiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBTZWxlY3RJbnB1dCBmcm9tICcuL1NlbGVjdElucHV0JztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBBcnJvd0Ryb3BEb3duSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQXJyb3dEcm9wRG93bic7XG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vSW5wdXQnO1xuaW1wb3J0IE5hdGl2ZVNlbGVjdElucHV0IGZyb20gJy4uL05hdGl2ZVNlbGVjdC9OYXRpdmVTZWxlY3RJbnB1dCc7XG5pbXBvcnQgRmlsbGVkSW5wdXQgZnJvbSAnLi4vRmlsbGVkSW5wdXQnO1xuaW1wb3J0IE91dGxpbmVkSW5wdXQgZnJvbSAnLi4vT3V0bGluZWRJbnB1dCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgcmV0dXJuIGNsYXNzZXM7XG59O1xuXG5jb25zdCBzdHlsZWRSb290Q29uZmlnID0ge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdCxcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICd2YXJpYW50JyxcbiAgc2xvdDogJ1Jvb3QnXG59O1xuY29uc3QgU3R5bGVkSW5wdXQgPSBzdHlsZWQoSW5wdXQsIHN0eWxlZFJvb3RDb25maWcpKCcnKTtcbmNvbnN0IFN0eWxlZE91dGxpbmVkSW5wdXQgPSBzdHlsZWQoT3V0bGluZWRJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU3R5bGVkRmlsbGVkSW5wdXQgPSBzdHlsZWQoRmlsbGVkSW5wdXQsIHN0eWxlZFJvb3RDb25maWcpKCcnKTtcbmNvbnN0IFNlbGVjdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFNlbGVjdChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgYXV0b1dpZHRoID0gZmFsc2UsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NlczogY2xhc3Nlc1Byb3AgPSB7fSxcbiAgICBjbGFzc05hbWUsXG4gICAgZGVmYXVsdE9wZW4gPSBmYWxzZSxcbiAgICBkaXNwbGF5RW1wdHkgPSBmYWxzZSxcbiAgICBJY29uQ29tcG9uZW50ID0gQXJyb3dEcm9wRG93bkljb24sXG4gICAgaWQsXG4gICAgaW5wdXQsXG4gICAgaW5wdXRQcm9wcyxcbiAgICBsYWJlbCxcbiAgICBsYWJlbElkLFxuICAgIE1lbnVQcm9wcyxcbiAgICBtdWx0aXBsZSA9IGZhbHNlLFxuICAgIG5hdGl2ZSA9IGZhbHNlLFxuICAgIG9uQ2xvc2UsXG4gICAgb25PcGVuLFxuICAgIG9wZW4sXG4gICAgcmVuZGVyVmFsdWUsXG4gICAgU2VsZWN0RGlzcGxheVByb3BzLFxuICAgIHZhcmlhbnQ6IHZhcmlhbnRQcm9wID0gJ291dGxpbmVkJ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgaW5wdXRDb21wb25lbnQgPSBuYXRpdmUgPyBOYXRpdmVTZWxlY3RJbnB1dCA6IFNlbGVjdElucHV0O1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWyd2YXJpYW50J11cbiAgfSk7XG4gIGNvbnN0IHZhcmlhbnQgPSBmY3MudmFyaWFudCB8fCB2YXJpYW50UHJvcDtcbiAgY29uc3QgSW5wdXRDb21wb25lbnQgPSBpbnB1dCB8fCB7XG4gICAgc3RhbmRhcmQ6IF9TdHlsZWRJbnB1dCB8fCAoX1N0eWxlZElucHV0ID0gLyojX19QVVJFX18qL19qc3goU3R5bGVkSW5wdXQsIHt9KSksXG4gICAgb3V0bGluZWQ6IC8qI19fUFVSRV9fKi9fanN4KFN0eWxlZE91dGxpbmVkSW5wdXQsIHtcbiAgICAgIGxhYmVsOiBsYWJlbFxuICAgIH0pLFxuICAgIGZpbGxlZDogX1N0eWxlZEZpbGxlZElucHV0IHx8IChfU3R5bGVkRmlsbGVkSW5wdXQgPSAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRGaWxsZWRJbnB1dCwge30pKVxuICB9W3ZhcmlhbnRdO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXM6IGNsYXNzZXNQcm9wXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgaW5wdXRDb21wb25lbnRSZWYgPSB1c2VGb3JrUmVmKHJlZiwgSW5wdXRDb21wb25lbnQucmVmKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoSW5wdXRDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIC8vIE1vc3Qgb2YgdGhlIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIGBTZWxlY3RJbnB1dGAuXG4gICAgICAvLyBUaGUgYFNlbGVjdGAgY29tcG9uZW50IGlzIGEgc2ltcGxlIEFQSSB3cmFwcGVyIHRvIGV4cG9zZSBzb21ldGhpbmcgYmV0dGVyIHRvIHBsYXkgd2l0aC5cbiAgICAgIGlucHV0Q29tcG9uZW50LFxuICAgICAgaW5wdXRQcm9wczogX2V4dGVuZHMoe1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgdmFyaWFudCxcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAvLyBXZSByZW5kZXIgYSBzZWxlY3QuIFdlIGNhbiBpZ25vcmUgdGhlIHR5cGUgcHJvdmlkZWQgYnkgdGhlIGBJbnB1dGAuXG4gICAgICAgIG11bHRpcGxlXG4gICAgICB9LCBuYXRpdmUgPyB7XG4gICAgICAgIGlkXG4gICAgICB9IDoge1xuICAgICAgICBhdXRvV2lkdGgsXG4gICAgICAgIGRlZmF1bHRPcGVuLFxuICAgICAgICBkaXNwbGF5RW1wdHksXG4gICAgICAgIGxhYmVsSWQsXG4gICAgICAgIE1lbnVQcm9wcyxcbiAgICAgICAgb25DbG9zZSxcbiAgICAgICAgb25PcGVuLFxuICAgICAgICBvcGVuLFxuICAgICAgICByZW5kZXJWYWx1ZSxcbiAgICAgICAgU2VsZWN0RGlzcGxheVByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSwgU2VsZWN0RGlzcGxheVByb3BzKVxuICAgICAgfSwgaW5wdXRQcm9wcywge1xuICAgICAgICBjbGFzc2VzOiBpbnB1dFByb3BzID8gZGVlcG1lcmdlKGNsYXNzZXMsIGlucHV0UHJvcHMuY2xhc3NlcykgOiBjbGFzc2VzXG4gICAgICB9LCBpbnB1dCA/IGlucHV0LnByb3BzLmlucHV0UHJvcHMgOiB7fSlcbiAgICB9LCBtdWx0aXBsZSAmJiBuYXRpdmUgJiYgdmFyaWFudCA9PT0gJ291dGxpbmVkJyA/IHtcbiAgICAgIG5vdGNoZWQ6IHRydWVcbiAgICB9IDoge30sIHtcbiAgICAgIHJlZjogaW5wdXRDb21wb25lbnRSZWYsXG4gICAgICBjbGFzc05hbWU6IGNsc3goSW5wdXRDb21wb25lbnQucHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUpXG4gICAgfSwgIWlucHV0ICYmIHtcbiAgICAgIHZhcmlhbnRcbiAgICB9LCBvdGhlcikpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTZWxlY3QucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHdpZHRoIG9mIHRoZSBwb3BvdmVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBpdGVtcyBpbnNpZGUgdGhlXG4gICAqIG1lbnUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b1dpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIG9wdGlvbiBlbGVtZW50cyB0byBwb3B1bGF0ZSB0aGUgc2VsZWN0IHdpdGguXG4gICAqIENhbiBiZSBzb21lIGBNZW51SXRlbWAgd2hlbiBgbmF0aXZlYCBpcyBmYWxzZSBhbmQgYG9wdGlvbmAgd2hlbiBgbmF0aXZlYCBpcyB0cnVlLlxuICAgKlxuICAgKiDimqDvuI9UaGUgYE1lbnVJdGVtYCBlbGVtZW50cyAqKm11c3QqKiBiZSBkaXJlY3QgZGVzY2VuZGFudHMgd2hlbiBgbmF0aXZlYCBpcyBmYWxzZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGx5IG9wZW4uIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgb3BlbiBzdGF0ZSBpcyBub3QgY29udHJvbGxlZCAoaS5lLiB0aGUgYG9wZW5gIHByb3AgaXMgbm90IGRlZmluZWQpLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWZhdWx0T3BlbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgdmFsdWUgaXMgZGlzcGxheWVkIGV2ZW4gaWYgbm8gaXRlbXMgYXJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiBJbiBvcmRlciB0byBkaXNwbGF5IGEgbWVhbmluZ2Z1bCB2YWx1ZSwgYSBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIHRvIHRoZSBgcmVuZGVyVmFsdWVgIHByb3Agd2hpY2hcbiAgICogcmV0dXJucyB0aGUgdmFsdWUgdG8gYmUgZGlzcGxheWVkIHdoZW4gbm8gaXRlbXMgYXJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2hlbiB1c2luZyB0aGlzIHByb3AsIG1ha2Ugc3VyZSB0aGUgbGFiZWwgZG9lc24ndCBvdmVybGFwIHdpdGggdGhlIGVtcHR5IGRpc3BsYXllZCB2YWx1ZS5cbiAgICogVGhlIGxhYmVsIHNob3VsZCBlaXRoZXIgYmUgaGlkZGVuIG9yIGZvcmNlZCB0byBhIHNocnVuayBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc3BsYXlFbXB0eTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBpY29uIHRoYXQgZGlzcGxheXMgdGhlIGFycm93LlxuICAgKiBAZGVmYXVsdCBBcnJvd0Ryb3BEb3duSWNvblxuICAgKi9cbiAgSWNvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBUaGUgYGlkYCBvZiB0aGUgd3JhcHBlciBlbGVtZW50IG9yIHRoZSBgc2VsZWN0YCBlbGVtZW50IHdoZW4gYG5hdGl2ZWAuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQW4gYElucHV0YCBlbGVtZW50OyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgbWF0ZXJpYWwtdWkgc3BlY2lmaWMgYElucHV0YC5cbiAgICovXG4gIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudCxcblxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIFdoZW4gYG5hdGl2ZWAgaXMgYHRydWVgLCB0aGUgYXR0cmlidXRlcyBhcmUgYXBwbGllZCBvbiB0aGUgYHNlbGVjdGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFNlZSBbT3V0bGluZWRJbnB1dCNsYWJlbF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8jcHJvcHMpXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiBhbiBlbGVtZW50IHRoYXQgYWN0cyBhcyBhbiBhZGRpdGlvbmFsIGxhYmVsLiBUaGUgU2VsZWN0IHdpbGxcbiAgICogYmUgbGFiZWxsZWQgYnkgdGhlIGFkZGl0aW9uYWwgbGFiZWwgYW5kIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICovXG4gIGxhYmVsSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGVsZW1lbnQuXG4gICAqL1xuICBNZW51UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYHZhbHVlYCBtdXN0IGJlIGFuIGFycmF5IGFuZCB0aGUgbWVudSB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9ucy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHVzZXMgYSBuYXRpdmUgYHNlbGVjdGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG5hdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7U2VsZWN0Q2hhbmdlRXZlbnQ8VD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChhbnkpLlxuICAgKiAqKldhcm5pbmcqKjogVGhpcyBpcyBhIGdlbmVyaWMgZXZlbnQgbm90IGEgY2hhbmdlIGV2ZW50IHVubGVzcyB0aGUgY2hhbmdlIGV2ZW50IGlzIGNhdXNlZCBieSBicm93c2VyIGF1dG9maWxsLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NoaWxkXSBUaGUgcmVhY3QgZWxlbWVudCB0aGF0IHdhcyBzZWxlY3RlZCB3aGVuIGBuYXRpdmVgIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBVc2UgaW4gY29udHJvbGxlZCBtb2RlIChzZWUgb3BlbikuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgb3BlbmVkLlxuICAgKiBVc2UgaW4gY29udHJvbGxlZCBtb2RlIChzZWUgb3BlbikuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uT3BlbjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSBgdmFsdWVgIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIHtSZWFjdE5vZGV9XG4gICAqL1xuICByZW5kZXJWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGNsaWNrYWJsZSBkaXYgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdERpc3BsYXlQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUaGUgYGlucHV0YCB2YWx1ZS4gUHJvdmlkaW5nIGFuIGVtcHR5IHN0cmluZyB3aWxsIHNlbGVjdCBubyBvcHRpb25zLlxuICAgKiBTZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGAnJ2AgaWYgeW91IGRvbid0IHdhbnQgYW55IG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucyB0byBiZSBzZWxlY3RlZC5cbiAgICpcbiAgICogSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBpdCBtdXN0IGhhdmUgcmVmZXJlbmNlIGVxdWFsaXR5IHdpdGggdGhlIG9wdGlvbiBpbiBvcmRlciB0byBiZSBzZWxlY3RlZC5cbiAgICogSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QsIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gbXVzdCBtYXRjaCB3aXRoIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9wdGlvbiBpbiBvcmRlciB0byBiZSBzZWxlY3RlZC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWycnXSksIFByb3BUeXBlcy5hbnldKSxcblxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnb3V0bGluZWQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5TZWxlY3QubXVpTmFtZSA9ICdTZWxlY3QnO1xuZXhwb3J0IGRlZmF1bHQgU2VsZWN0OyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVRleHRGaWVsZCcsIHNsb3QpO1xufVxuY29uc3QgdGV4dEZpZWxkQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRleHRGaWVsZCcsIFsncm9vdCddKTtcbmV4cG9ydCBkZWZhdWx0IHRleHRGaWVsZENsYXNzZXM7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiRm9ybUhlbHBlclRleHRQcm9wc1wiLCBcImZ1bGxXaWR0aFwiLCBcImhlbHBlclRleHRcIiwgXCJpZFwiLCBcIklucHV0TGFiZWxQcm9wc1wiLCBcImlucHV0UHJvcHNcIiwgXCJJbnB1dFByb3BzXCIsIFwiaW5wdXRSZWZcIiwgXCJsYWJlbFwiLCBcIm1heFJvd3NcIiwgXCJtaW5Sb3dzXCIsIFwibXVsdGlsaW5lXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25Gb2N1c1wiLCBcInBsYWNlaG9sZGVyXCIsIFwicmVxdWlyZWRcIiwgXCJyb3dzXCIsIFwic2VsZWN0XCIsIFwiU2VsZWN0UHJvcHNcIiwgXCJ0eXBlXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgcmVmVHlwZSwgdW5zdGFibGVfdXNlSWQgYXMgdXNlSWQgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vSW5wdXQnO1xuaW1wb3J0IEZpbGxlZElucHV0IGZyb20gJy4uL0ZpbGxlZElucHV0JztcbmltcG9ydCBPdXRsaW5lZElucHV0IGZyb20gJy4uL091dGxpbmVkSW5wdXQnO1xuaW1wb3J0IElucHV0TGFiZWwgZnJvbSAnLi4vSW5wdXRMYWJlbCc7XG5pbXBvcnQgRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wnO1xuaW1wb3J0IEZvcm1IZWxwZXJUZXh0IGZyb20gJy4uL0Zvcm1IZWxwZXJUZXh0JztcbmltcG9ydCBTZWxlY3QgZnJvbSAnLi4vU2VsZWN0JztcbmltcG9ydCB7IGdldFRleHRGaWVsZFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdGV4dEZpZWxkQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdmFyaWFudENvbXBvbmVudCA9IHtcbiAgc3RhbmRhcmQ6IElucHV0LFxuICBmaWxsZWQ6IEZpbGxlZElucHV0LFxuICBvdXRsaW5lZDogT3V0bGluZWRJbnB1dFxufTtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VGV4dEZpZWxkVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IFRleHRGaWVsZFJvb3QgPSBzdHlsZWQoRm9ybUNvbnRyb2wsIHtcbiAgbmFtZTogJ011aVRleHRGaWVsZCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuLyoqXG4gKiBUaGUgYFRleHRGaWVsZGAgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGZvciB0aGUgbW9zdCBjb21tb24gY2FzZXMgKDgwJSkuXG4gKiBJdCBjYW5ub3QgYmUgYWxsIHRoaW5ncyB0byBhbGwgcGVvcGxlLCBvdGhlcndpc2UgdGhlIEFQSSB3b3VsZCBncm93IG91dCBvZiBjb250cm9sLlxuICpcbiAqICMjIEFkdmFuY2VkIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgdGhlIHRleHQgZmllbGQgaXMgYSBzaW1wbGUgYWJzdHJhY3Rpb25cbiAqIG9uIHRvcCBvZiB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogLSBbRm9ybUNvbnRyb2xdKC9tYXRlcmlhbC11aS9hcGkvZm9ybS1jb250cm9sLylcbiAqIC0gW0lucHV0TGFiZWxdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQtbGFiZWwvKVxuICogLSBbRmlsbGVkSW5wdXRdKC9tYXRlcmlhbC11aS9hcGkvZmlsbGVkLWlucHV0LylcbiAqIC0gW091dGxpbmVkSW5wdXRdKC9tYXRlcmlhbC11aS9hcGkvb3V0bGluZWQtaW5wdXQvKVxuICogLSBbSW5wdXRdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQvKVxuICogLSBbRm9ybUhlbHBlclRleHRdKC9tYXRlcmlhbC11aS9hcGkvZm9ybS1oZWxwZXItdGV4dC8pXG4gKlxuICogSWYgeW91IHdpc2ggdG8gYWx0ZXIgdGhlIHByb3BzIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudCwgeW91IGNhbiBkbyBzbyBhcyBmb2xsb3dzOlxuICpcbiAqIGBgYGpzeFxuICogY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAqICAgc3RlcDogMzAwLFxuICogfTtcbiAqXG4gKiByZXR1cm4gPFRleHRGaWVsZCBpZD1cInRpbWVcIiB0eXBlPVwidGltZVwiIGlucHV0UHJvcHM9e2lucHV0UHJvcHN9IC8+O1xuICogYGBgXG4gKlxuICogRm9yIGFkdmFuY2VkIGNhc2VzLCBwbGVhc2UgbG9vayBhdCB0aGUgc291cmNlIG9mIFRleHRGaWVsZCBieSBjbGlja2luZyBvbiB0aGVcbiAqIFwiRWRpdCB0aGlzIHBhZ2VcIiBidXR0b24gYWJvdmUuIENvbnNpZGVyIGVpdGhlcjpcbiAqXG4gKiAtIHVzaW5nIHRoZSB1cHBlciBjYXNlIHByb3BzIGZvciBwYXNzaW5nIHZhbHVlcyBkaXJlY3RseSB0byB0aGUgY29tcG9uZW50c1xuICogLSB1c2luZyB0aGUgdW5kZXJseWluZyBjb21wb25lbnRzIGRpcmVjdGx5IGFzIHNob3duIGluIHRoZSBkZW1vc1xuICovXG5cbmNvbnN0IFRleHRGaWVsZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRleHRGaWVsZChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVGV4dEZpZWxkJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgYXV0b0NvbXBsZXRlLFxuICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBlcnJvciA9IGZhbHNlLFxuICAgIEZvcm1IZWxwZXJUZXh0UHJvcHMsXG4gICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgaGVscGVyVGV4dCxcbiAgICBpZDogaWRPdmVycmlkZSxcbiAgICBJbnB1dExhYmVsUHJvcHMsXG4gICAgaW5wdXRQcm9wcyxcbiAgICBJbnB1dFByb3BzLFxuICAgIGlucHV0UmVmLFxuICAgIGxhYmVsLFxuICAgIG1heFJvd3MsXG4gICAgbWluUm93cyxcbiAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICBuYW1lLFxuICAgIG9uQmx1cixcbiAgICBvbkNoYW5nZSxcbiAgICBvbkZvY3VzLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHJlcXVpcmVkID0gZmFsc2UsXG4gICAgcm93cyxcbiAgICBzZWxlY3QgPSBmYWxzZSxcbiAgICBTZWxlY3RQcm9wcyxcbiAgICB0eXBlLFxuICAgIHZhbHVlLFxuICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYXV0b0ZvY3VzLFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBtdWx0aWxpbmUsXG4gICAgcmVxdWlyZWQsXG4gICAgc2VsZWN0LFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHNlbGVjdCAmJiAhY2hpbGRyZW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGNoaWxkcmVuYCBtdXN0IGJlIHBhc3NlZCB3aGVuIHVzaW5nIHRoZSBgVGV4dEZpZWxkYCBjb21wb25lbnQgd2l0aCBgc2VsZWN0YC4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBJbnB1dE1vcmUgPSB7fTtcblxuICBpZiAodmFyaWFudCA9PT0gJ291dGxpbmVkJykge1xuICAgIGlmIChJbnB1dExhYmVsUHJvcHMgJiYgdHlwZW9mIElucHV0TGFiZWxQcm9wcy5zaHJpbmsgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBJbnB1dE1vcmUubm90Y2hlZCA9IElucHV0TGFiZWxQcm9wcy5zaHJpbms7XG4gICAgfVxuXG4gICAgSW5wdXRNb3JlLmxhYmVsID0gbGFiZWw7XG4gIH1cblxuICBpZiAoc2VsZWN0KSB7XG4gICAgLy8gdW5zZXQgZGVmYXVsdHMgZnJvbSB0ZXh0Ym94IGlucHV0c1xuICAgIGlmICghU2VsZWN0UHJvcHMgfHwgIVNlbGVjdFByb3BzLm5hdGl2ZSkge1xuICAgICAgSW5wdXRNb3JlLmlkID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIElucHV0TW9yZVsnYXJpYS1kZXNjcmliZWRieSddID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgaWQgPSB1c2VJZChpZE92ZXJyaWRlKTtcbiAgY29uc3QgaGVscGVyVGV4dElkID0gaGVscGVyVGV4dCAmJiBpZCA/IGAke2lkfS1oZWxwZXItdGV4dGAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGlucHV0TGFiZWxJZCA9IGxhYmVsICYmIGlkID8gYCR7aWR9LWxhYmVsYCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgSW5wdXRDb21wb25lbnQgPSB2YXJpYW50Q29tcG9uZW50W3ZhcmlhbnRdO1xuXG4gIGNvbnN0IElucHV0RWxlbWVudCA9IC8qI19fUFVSRV9fKi9fanN4KElucHV0Q29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGhlbHBlclRleHRJZCxcbiAgICBhdXRvQ29tcGxldGU6IGF1dG9Db21wbGV0ZSxcbiAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBtdWx0aWxpbmU6IG11bHRpbGluZSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHJvd3M6IHJvd3MsXG4gICAgbWF4Um93czogbWF4Um93cyxcbiAgICBtaW5Sb3dzOiBtaW5Sb3dzLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGlkOiBpZCxcbiAgICBpbnB1dFJlZjogaW5wdXRSZWYsXG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgIGlucHV0UHJvcHM6IGlucHV0UHJvcHNcbiAgfSwgSW5wdXRNb3JlLCBJbnB1dFByb3BzKSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhUZXh0RmllbGRSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgZXJyb3I6IGVycm9yLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIHJlZjogcmVmLFxuICAgIHJlcXVpcmVkOiByZXF1aXJlZCxcbiAgICBjb2xvcjogY29sb3IsXG4gICAgdmFyaWFudDogdmFyaWFudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9PSAnJyAmJiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dExhYmVsLCBfZXh0ZW5kcyh7XG4gICAgICBodG1sRm9yOiBpZCxcbiAgICAgIGlkOiBpbnB1dExhYmVsSWRcbiAgICB9LCBJbnB1dExhYmVsUHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBsYWJlbFxuICAgIH0pKSwgc2VsZWN0ID8gLyojX19QVVJFX18qL19qc3goU2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogaGVscGVyVGV4dElkLFxuICAgICAgaWQ6IGlkLFxuICAgICAgbGFiZWxJZDogaW5wdXRMYWJlbElkLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgaW5wdXQ6IElucHV0RWxlbWVudFxuICAgIH0sIFNlbGVjdFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSkgOiBJbnB1dEVsZW1lbnQsIGhlbHBlclRleHQgJiYgLyojX19QVVJFX18qL19qc3goRm9ybUhlbHBlclRleHQsIF9leHRlbmRzKHtcbiAgICAgIGlkOiBoZWxwZXJUZXh0SWRcbiAgICB9LCBGb3JtSGVscGVyVGV4dFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogaGVscGVyVGV4dFxuICAgIH0pKV1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUZXh0RmllbGQucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNhZGRpbmctbmV3LWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BGb3JtSGVscGVyVGV4dGBdKC9tYXRlcmlhbC11aS9hcGkvZm9ybS1oZWxwZXItdGV4dC8pIGVsZW1lbnQuXG4gICAqL1xuICBGb3JtSGVscGVyVGV4dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBpbnB1dCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBoZWxwZXIgdGV4dCBjb250ZW50LlxuICAgKi9cbiAgaGVscGVyVGV4dDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBVc2UgdGhpcyBwcm9wIHRvIG1ha2UgYGxhYmVsYCBhbmQgYGhlbHBlclRleHRgIGFjY2Vzc2libGUgZm9yIHNjcmVlbiByZWFkZXJzLlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgSW5wdXRMYWJlbGBdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQtbGFiZWwvKSBlbGVtZW50LlxuICAgKiBQb2ludGVyIGV2ZW50cyBsaWtlIGBvbkNsaWNrYCBhcmUgZW5hYmxlZCBpZiBhbmQgb25seSBpZiBgc2hyaW5rYCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBJbnB1dExhYmVsUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgSW5wdXQgZWxlbWVudC5cbiAgICogSXQgd2lsbCBiZSBhIFtgRmlsbGVkSW5wdXRgXSgvbWF0ZXJpYWwtdWkvYXBpL2ZpbGxlZC1pbnB1dC8pLFxuICAgKiBbYE91dGxpbmVkSW5wdXRgXSgvbWF0ZXJpYWwtdWkvYXBpL291dGxpbmVkLWlucHV0Lykgb3IgW2BJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQvKVxuICAgKiBjb21wb25lbnQgZGVwZW5kaW5nIG9uIHRoZSBgdmFyaWFudGAgcHJvcCB2YWx1ZS5cbiAgICovXG4gIElucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgY29udGVudC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogSWYgYGRlbnNlYCBvciBgbm9ybWFsYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZyBvZiB0aGlzIGFuZCBjb250YWluZWQgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnLCAnbm9ybWFsJ10pLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgYHRleHRhcmVhYCBlbGVtZW50IGlzIHJlbmRlcmVkIGluc3RlYWQgb2YgYW4gaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgYXMgcmVxdWlyZWQgYW5kIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBbYFNlbGVjdGBdKC9tYXRlcmlhbC11aS9hcGkvc2VsZWN0LykgZWxlbWVudCB3aGlsZSBwYXNzaW5nIHRoZSBJbnB1dCBlbGVtZW50IHRvIGBTZWxlY3RgIGFzIGBpbnB1dGAgcGFyYW1ldGVyLlxuICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgeW91IG11c3QgcGFzcyB0aGUgb3B0aW9ucyBvZiB0aGUgc2VsZWN0IGFzIGNoaWxkcmVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2VsZWN0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BTZWxlY3RgXSgvbWF0ZXJpYWwtdWkvYXBpL3NlbGVjdC8pIGVsZW1lbnQuXG4gICAqL1xuICBTZWxlY3RQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHNpemU6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICovXG4gIHR5cGU6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRleHRGaWVsZDsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVHlwb2dyYXBoeScsIHNsb3QpO1xufVxuY29uc3QgdHlwb2dyYXBoeUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUeXBvZ3JhcGh5JywgWydyb290JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInLCAnYm9keTEnLCAnYm9keTInLCAnaW5oZXJpdCcsICdidXR0b24nLCAnY2FwdGlvbicsICdvdmVybGluZScsICdhbGlnbkxlZnQnLCAnYWxpZ25SaWdodCcsICdhbGlnbkNlbnRlcicsICdhbGlnbkp1c3RpZnknLCAnbm9XcmFwJywgJ2d1dHRlckJvdHRvbScsICdwYXJhZ3JhcGgnXSk7XG5leHBvcnQgZGVmYXVsdCB0eXBvZ3JhcGh5Q2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWxpZ25cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJndXR0ZXJCb3R0b21cIiwgXCJub1dyYXBcIiwgXCJwYXJhZ3JhcGhcIiwgXCJ2YXJpYW50XCIsIFwidmFyaWFudE1hcHBpbmdcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9leHRlbmRTeFByb3AgYXMgZXh0ZW5kU3hQcm9wIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHsgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdHlwb2dyYXBoeUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGFsaWduLFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIGBhbGlnbiR7Y2FwaXRhbGl6ZShhbGlnbil9YCwgZ3V0dGVyQm90dG9tICYmICdndXR0ZXJCb3R0b20nLCBub1dyYXAgJiYgJ25vV3JhcCcsIHBhcmFncmFwaCAmJiAncGFyYWdyYXBoJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBUeXBvZ3JhcGh5Um9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aVR5cG9ncmFwaHknLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS52YXJpYW50ICYmIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYgc3R5bGVzW2BhbGlnbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmFsaWduKX1gXSwgb3duZXJTdGF0ZS5ub1dyYXAgJiYgc3R5bGVzLm5vV3JhcCwgb3duZXJTdGF0ZS5ndXR0ZXJCb3R0b20gJiYgc3R5bGVzLmd1dHRlckJvdHRvbSwgb3duZXJTdGF0ZS5wYXJhZ3JhcGggJiYgc3R5bGVzLnBhcmFncmFwaF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIG1hcmdpbjogMFxufSwgb3duZXJTdGF0ZS52YXJpYW50ICYmIHRoZW1lLnR5cG9ncmFwaHlbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHtcbiAgdGV4dEFsaWduOiBvd25lclN0YXRlLmFsaWduXG59LCBvd25lclN0YXRlLm5vV3JhcCAmJiB7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xufSwgb3duZXJTdGF0ZS5ndXR0ZXJCb3R0b20gJiYge1xuICBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nXG59LCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiB7XG4gIG1hcmdpbkJvdHRvbTogMTZcbn0pKTtcbmNvbnN0IGRlZmF1bHRWYXJpYW50TWFwcGluZyA9IHtcbiAgaDE6ICdoMScsXG4gIGgyOiAnaDInLFxuICBoMzogJ2gzJyxcbiAgaDQ6ICdoNCcsXG4gIGg1OiAnaDUnLFxuICBoNjogJ2g2JyxcbiAgc3VidGl0bGUxOiAnaDYnLFxuICBzdWJ0aXRsZTI6ICdoNicsXG4gIGJvZHkxOiAncCcsXG4gIGJvZHkyOiAncCcsXG4gIGluaGVyaXQ6ICdwJ1xufTsgLy8gVE9ETyB2NjogZGVwcmVjYXRlIHRoZXNlIGNvbG9yIHZhbHVlcyBpbiB2NS54IGFuZCByZW1vdmUgdGhlIHRyYW5zZm9ybWF0aW9uIGluIHY2XG5cbmNvbnN0IGNvbG9yVHJhbnNmb3JtYXRpb25zID0ge1xuICBwcmltYXJ5OiAncHJpbWFyeS5tYWluJyxcbiAgdGV4dFByaW1hcnk6ICd0ZXh0LnByaW1hcnknLFxuICBzZWNvbmRhcnk6ICdzZWNvbmRhcnkubWFpbicsXG4gIHRleHRTZWNvbmRhcnk6ICd0ZXh0LnNlY29uZGFyeScsXG4gIGVycm9yOiAnZXJyb3IubWFpbidcbn07XG5cbmNvbnN0IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMgPSBjb2xvciA9PiB7XG4gIHJldHVybiBjb2xvclRyYW5zZm9ybWF0aW9uc1tjb2xvcl0gfHwgY29sb3I7XG59O1xuXG5jb25zdCBUeXBvZ3JhcGh5ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVHlwb2dyYXBoeShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUeXBvZ3JhcGh5J1xuICB9KTtcbiAgY29uc3QgY29sb3IgPSB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzKHRoZW1lUHJvcHMuY29sb3IpO1xuICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcChfZXh0ZW5kcyh7fSwgdGhlbWVQcm9wcywge1xuICAgIGNvbG9yXG4gIH0pKTtcblxuICBjb25zdCB7XG4gICAgYWxpZ24gPSAnaW5oZXJpdCcsXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCxcbiAgICBndXR0ZXJCb3R0b20gPSBmYWxzZSxcbiAgICBub1dyYXAgPSBmYWxzZSxcbiAgICBwYXJhZ3JhcGggPSBmYWxzZSxcbiAgICB2YXJpYW50ID0gJ2JvZHkxJyxcbiAgICB2YXJpYW50TWFwcGluZyA9IGRlZmF1bHRWYXJpYW50TWFwcGluZ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFsaWduLFxuICAgIGNvbG9yLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQsXG4gICAgZ3V0dGVyQm90dG9tLFxuICAgIG5vV3JhcCxcbiAgICBwYXJhZ3JhcGgsXG4gICAgdmFyaWFudCxcbiAgICB2YXJpYW50TWFwcGluZ1xuICB9KTtcblxuICBjb25zdCBDb21wb25lbnQgPSBjb21wb25lbnQgfHwgKHBhcmFncmFwaCA/ICdwJyA6IHZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdIHx8IGRlZmF1bHRWYXJpYW50TWFwcGluZ1t2YXJpYW50XSkgfHwgJ3NwYW4nO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUeXBvZ3JhcGh5Um9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBDb21wb25lbnQsXG4gICAgcmVmOiByZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFR5cG9ncmFwaHkucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdGV4dC1hbGlnbiBvbiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGFsaWduOiBQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnaW5oZXJpdCcsICdqdXN0aWZ5JywgJ2xlZnQnLCAncmlnaHQnXSksXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRleHQgd2lsbCBoYXZlIGEgYm90dG9tIG1hcmdpbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGd1dHRlckJvdHRvbTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRleHQgd2lsbCBub3Qgd3JhcCwgYnV0IGluc3RlYWQgd2lsbCB0cnVuY2F0ZSB3aXRoIGEgdGV4dCBvdmVyZmxvdyBlbGxpcHNpcy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRleHQgb3ZlcmZsb3cgY2FuIG9ubHkgaGFwcGVuIHdpdGggYmxvY2sgb3IgaW5saW5lLWJsb2NrIGxldmVsIGVsZW1lbnRzXG4gICAqICh0aGUgZWxlbWVudCBuZWVkcyB0byBoYXZlIGEgd2lkdGggaW4gb3JkZXIgdG8gb3ZlcmZsb3cpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbm9XcmFwOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZWxlbWVudCB3aWxsIGJlIGEgcGFyYWdyYXBoIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwYXJhZ3JhcGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIHRoZW1lIHR5cG9ncmFwaHkgc3R5bGVzLlxuICAgKiBAZGVmYXVsdCAnYm9keTEnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib2R5MScsICdib2R5MicsICdidXR0b24nLCAnY2FwdGlvbicsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdpbmhlcml0JywgJ292ZXJsaW5lJywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBtYXBzIHRoZSB2YXJpYW50IHByb3AgdG8gYSByYW5nZSBvZiBkaWZmZXJlbnQgSFRNTCBlbGVtZW50IHR5cGVzLlxuICAgKiBGb3IgaW5zdGFuY2UsIHN1YnRpdGxlMSB0byBgPGg2PmAuXG4gICAqIElmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGF0IG1hcHBpbmcsIHlvdSBjYW4gcHJvdmlkZSB5b3VyIG93bi5cbiAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIGBjb21wb25lbnRgIHByb3AuXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICBoMTogJ2gxJyxcbiAgICogICBoMjogJ2gyJyxcbiAgICogICBoMzogJ2gzJyxcbiAgICogICBoNDogJ2g0JyxcbiAgICogICBoNTogJ2g1JyxcbiAgICogICBoNjogJ2g2JyxcbiAgICogICBzdWJ0aXRsZTE6ICdoNicsXG4gICAqICAgc3VidGl0bGUyOiAnaDYnLFxuICAgKiAgIGJvZHkxOiAncCcsXG4gICAqICAgYm9keTI6ICdwJyxcbiAgICogICBpbmhlcml0OiAncCcsXG4gICAqIH1cbiAgICovXG4gIHZhcmlhbnRNYXBwaW5nOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVHlwb2dyYXBoeTsiLCJpbXBvcnQgeyB1c2VEaXNwYXRjaCwgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCB0eXBlIHsgVHlwZWRVc2VTZWxlY3Rvckhvb2sgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFJvb3RTdGF0ZSwgQXBwRGlzcGF0Y2ggfSBmcm9tICcuL3N0b3JlJztcblxuZXhwb3J0IGNvbnN0IHVzZUFwcERpc3BhdGNoOiAoKSA9PiBBcHBEaXNwYXRjaCA9IHVzZURpc3BhdGNoO1xuZXhwb3J0IGNvbnN0IHVzZUFwcFNlbGVjdG9yOiBUeXBlZFVzZVNlbGVjdG9ySG9vazxSb290U3RhdGU+ID0gdXNlU2VsZWN0b3I7XG4iLCJmdW5jdGlvbiBuKG4pe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkocj4xP3ItMTowKSxlPTE7ZTxyO2UrKyl0W2UtMV09YXJndW1lbnRzW2VdO2lmKFwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYpe3ZhciBpPVlbbl0sbz1pP1wiZnVuY3Rpb25cIj09dHlwZW9mIGk/aS5hcHBseShudWxsLHQpOmk6XCJ1bmtub3duIGVycm9yIG5yOiBcIituO3Rocm93IEVycm9yKFwiW0ltbWVyXSBcIitvKX10aHJvdyBFcnJvcihcIltJbW1lcl0gbWluaWZpZWQgZXJyb3IgbnI6IFwiK24rKHQubGVuZ3RoP1wiIFwiK3QubWFwKChmdW5jdGlvbihuKXtyZXR1cm5cIidcIituK1wiJ1wifSkpLmpvaW4oXCIsXCIpOlwiXCIpK1wiLiBGaW5kIHRoZSBmdWxsIGVycm9yIGF0OiBodHRwczovL2JpdC5seS8zY1hFS1dmXCIpfWZ1bmN0aW9uIHIobil7cmV0dXJuISFuJiYhIW5bUV19ZnVuY3Rpb24gdChuKXtyZXR1cm4hIW4mJihmdW5jdGlvbihuKXtpZighbnx8XCJvYmplY3RcIiE9dHlwZW9mIG4pcmV0dXJuITE7dmFyIHI9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO2lmKG51bGw9PT1yKXJldHVybiEwO3ZhciB0PU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsXCJjb25zdHJ1Y3RvclwiKSYmci5jb25zdHJ1Y3RvcjtyZXR1cm4gdD09PU9iamVjdHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmRnVuY3Rpb24udG9TdHJpbmcuY2FsbCh0KT09PVp9KG4pfHxBcnJheS5pc0FycmF5KG4pfHwhIW5bTF18fCEhbi5jb25zdHJ1Y3RvcltMXXx8cyhuKXx8dihuKSl9ZnVuY3Rpb24gZSh0KXtyZXR1cm4gcih0KXx8bigyMyx0KSx0W1FdLnR9ZnVuY3Rpb24gaShuLHIsdCl7dm9pZCAwPT09dCYmKHQ9ITEpLDA9PT1vKG4pPyh0P09iamVjdC5rZXlzOm5uKShuKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0JiZcInN5bWJvbFwiPT10eXBlb2YgZXx8cihlLG5bZV0sbil9KSk6bi5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3JldHVybiByKGUsdCxuKX0pKX1mdW5jdGlvbiBvKG4pe3ZhciByPW5bUV07cmV0dXJuIHI/ci5pPjM/ci5pLTQ6ci5pOkFycmF5LmlzQXJyYXkobik/MTpzKG4pPzI6dihuKT8zOjB9ZnVuY3Rpb24gdShuLHIpe3JldHVybiAyPT09byhuKT9uLmhhcyhyKTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKX1mdW5jdGlvbiBhKG4scil7cmV0dXJuIDI9PT1vKG4pP24uZ2V0KHIpOm5bcl19ZnVuY3Rpb24gZihuLHIsdCl7dmFyIGU9byhuKTsyPT09ZT9uLnNldChyLHQpOjM9PT1lPyhuLmRlbGV0ZShyKSxuLmFkZCh0KSk6bltyXT10fWZ1bmN0aW9uIGMobixyKXtyZXR1cm4gbj09PXI/MCE9PW58fDEvbj09MS9yOm4hPW4mJnIhPXJ9ZnVuY3Rpb24gcyhuKXtyZXR1cm4gWCYmbiBpbnN0YW5jZW9mIE1hcH1mdW5jdGlvbiB2KG4pe3JldHVybiBxJiZuIGluc3RhbmNlb2YgU2V0fWZ1bmN0aW9uIHAobil7cmV0dXJuIG4ub3x8bi50fWZ1bmN0aW9uIGwobil7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobik7dmFyIHI9cm4obik7ZGVsZXRlIHJbUV07Zm9yKHZhciB0PW5uKHIpLGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIGk9dFtlXSxvPXJbaV07ITE9PT1vLndyaXRhYmxlJiYoby53cml0YWJsZT0hMCxvLmNvbmZpZ3VyYWJsZT0hMCksKG8uZ2V0fHxvLnNldCkmJihyW2ldPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLmVudW1lcmFibGUsdmFsdWU6bltpXX0pfXJldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihuKSxyKX1mdW5jdGlvbiBkKG4sZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx5KG4pfHxyKG4pfHwhdChuKT9uOihvKG4pPjEmJihuLnNldD1uLmFkZD1uLmNsZWFyPW4uZGVsZXRlPWgpLE9iamVjdC5mcmVlemUobiksZSYmaShuLChmdW5jdGlvbihuLHIpe3JldHVybiBkKHIsITApfSksITApLG4pfWZ1bmN0aW9uIGgoKXtuKDIpfWZ1bmN0aW9uIHkobil7cmV0dXJuIG51bGw9PW58fFwib2JqZWN0XCIhPXR5cGVvZiBufHxPYmplY3QuaXNGcm96ZW4obil9ZnVuY3Rpb24gYihyKXt2YXIgdD10bltyXTtyZXR1cm4gdHx8bigxOCxyKSx0fWZ1bmN0aW9uIG0obixyKXt0bltuXXx8KHRuW25dPXIpfWZ1bmN0aW9uIF8oKXtyZXR1cm5cInByb2R1Y3Rpb25cIj09PXByb2Nlc3MuZW52Lk5PREVfRU5WfHxVfHxuKDApLFV9ZnVuY3Rpb24gaihuLHIpe3ImJihiKFwiUGF0Y2hlc1wiKSxuLnU9W10sbi5zPVtdLG4udj1yKX1mdW5jdGlvbiBPKG4pe2cobiksbi5wLmZvckVhY2goUyksbi5wPW51bGx9ZnVuY3Rpb24gZyhuKXtuPT09VSYmKFU9bi5sKX1mdW5jdGlvbiB3KG4pe3JldHVybiBVPXtwOltdLGw6VSxoOm4sbTohMCxfOjB9fWZ1bmN0aW9uIFMobil7dmFyIHI9bltRXTswPT09ci5pfHwxPT09ci5pP3IuaigpOnIuTz0hMH1mdW5jdGlvbiBQKHIsZSl7ZS5fPWUucC5sZW5ndGg7dmFyIGk9ZS5wWzBdLG89dm9pZCAwIT09ciYmciE9PWk7cmV0dXJuIGUuaC5nfHxiKFwiRVM1XCIpLlMoZSxyLG8pLG8/KGlbUV0uUCYmKE8oZSksbig0KSksdChyKSYmKHI9TShlLHIpLGUubHx8eChlLHIpKSxlLnUmJmIoXCJQYXRjaGVzXCIpLk0oaVtRXS50LHIsZS51LGUucykpOnI9TShlLGksW10pLE8oZSksZS51JiZlLnYoZS51LGUucyksciE9PUg/cjp2b2lkIDB9ZnVuY3Rpb24gTShuLHIsdCl7aWYoeShyKSlyZXR1cm4gcjt2YXIgZT1yW1FdO2lmKCFlKXJldHVybiBpKHIsKGZ1bmN0aW9uKGksbyl7cmV0dXJuIEEobixlLHIsaSxvLHQpfSksITApLHI7aWYoZS5BIT09bilyZXR1cm4gcjtpZighZS5QKXJldHVybiB4KG4sZS50LCEwKSxlLnQ7aWYoIWUuSSl7ZS5JPSEwLGUuQS5fLS07dmFyIG89ND09PWUuaXx8NT09PWUuaT9lLm89bChlLmspOmUubztpKDM9PT1lLmk/bmV3IFNldChvKTpvLChmdW5jdGlvbihyLGkpe3JldHVybiBBKG4sZSxvLHIsaSx0KX0pKSx4KG4sbywhMSksdCYmbi51JiZiKFwiUGF0Y2hlc1wiKS5SKGUsdCxuLnUsbi5zKX1yZXR1cm4gZS5vfWZ1bmN0aW9uIEEoZSxpLG8sYSxjLHMpe2lmKFwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJmM9PT1vJiZuKDUpLHIoYykpe3ZhciB2PU0oZSxjLHMmJmkmJjMhPT1pLmkmJiF1KGkuRCxhKT9zLmNvbmNhdChhKTp2b2lkIDApO2lmKGYobyxhLHYpLCFyKHYpKXJldHVybjtlLm09ITF9aWYodChjKSYmIXkoYykpe2lmKCFlLmguRiYmZS5fPDEpcmV0dXJuO00oZSxjKSxpJiZpLkEubHx8eChlLGMpfX1mdW5jdGlvbiB4KG4scix0KXt2b2lkIDA9PT10JiYodD0hMSksbi5oLkYmJm4ubSYmZChyLHQpfWZ1bmN0aW9uIHoobixyKXt2YXIgdD1uW1FdO3JldHVybih0P3AodCk6bilbcl19ZnVuY3Rpb24gSShuLHIpe2lmKHIgaW4gbilmb3IodmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3Q7KXt2YXIgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik7aWYoZSlyZXR1cm4gZTt0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0KX19ZnVuY3Rpb24gayhuKXtuLlB8fChuLlA9ITAsbi5sJiZrKG4ubCkpfWZ1bmN0aW9uIEUobil7bi5vfHwobi5vPWwobi50KSl9ZnVuY3Rpb24gUihuLHIsdCl7dmFyIGU9cyhyKT9iKFwiTWFwU2V0XCIpLk4ocix0KTp2KHIpP2IoXCJNYXBTZXRcIikuVChyLHQpOm4uZz9mdW5jdGlvbihuLHIpe3ZhciB0PUFycmF5LmlzQXJyYXkobiksZT17aTp0PzE6MCxBOnI/ci5BOl8oKSxQOiExLEk6ITEsRDp7fSxsOnIsdDpuLGs6bnVsbCxvOm51bGwsajpudWxsLEM6ITF9LGk9ZSxvPWVuO3QmJihpPVtlXSxvPW9uKTt2YXIgdT1Qcm94eS5yZXZvY2FibGUoaSxvKSxhPXUucmV2b2tlLGY9dS5wcm94eTtyZXR1cm4gZS5rPWYsZS5qPWEsZn0ocix0KTpiKFwiRVM1XCIpLkoocix0KTtyZXR1cm4odD90LkE6XygpKS5wLnB1c2goZSksZX1mdW5jdGlvbiBEKGUpe3JldHVybiByKGUpfHxuKDIyLGUpLGZ1bmN0aW9uIG4ocil7aWYoIXQocikpcmV0dXJuIHI7dmFyIGUsdT1yW1FdLGM9byhyKTtpZih1KXtpZighdS5QJiYodS5pPDR8fCFiKFwiRVM1XCIpLksodSkpKXJldHVybiB1LnQ7dS5JPSEwLGU9RihyLGMpLHUuST0hMX1lbHNlIGU9RihyLGMpO3JldHVybiBpKGUsKGZ1bmN0aW9uKHIsdCl7dSYmYSh1LnQscik9PT10fHxmKGUscixuKHQpKX0pKSwzPT09Yz9uZXcgU2V0KGUpOmV9KGUpfWZ1bmN0aW9uIEYobixyKXtzd2l0Y2gocil7Y2FzZSAyOnJldHVybiBuZXcgTWFwKG4pO2Nhc2UgMzpyZXR1cm4gQXJyYXkuZnJvbShuKX1yZXR1cm4gbChuKX1mdW5jdGlvbiBOKCl7ZnVuY3Rpb24gdChuLHIpe3ZhciB0PXNbbl07cmV0dXJuIHQ/dC5lbnVtZXJhYmxlPXI6c1tuXT10PXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTpyLGdldDpmdW5jdGlvbigpe3ZhciByPXRoaXNbUV07cmV0dXJuXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmZihyKSxlbi5nZXQocixuKX0sc2V0OmZ1bmN0aW9uKHIpe3ZhciB0PXRoaXNbUV07XCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmZih0KSxlbi5zZXQodCxuLHIpfX0sdH1mdW5jdGlvbiBlKG4pe2Zvcih2YXIgcj1uLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgdD1uW3JdW1FdO2lmKCF0LlApc3dpdGNoKHQuaSl7Y2FzZSA1OmEodCkmJmsodCk7YnJlYWs7Y2FzZSA0Om8odCkmJmsodCl9fX1mdW5jdGlvbiBvKG4pe2Zvcih2YXIgcj1uLnQsdD1uLmssZT1ubih0KSxpPWUubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBvPWVbaV07aWYobyE9PVEpe3ZhciBhPXJbb107aWYodm9pZCAwPT09YSYmIXUocixvKSlyZXR1cm4hMDt2YXIgZj10W29dLHM9ZiYmZltRXTtpZihzP3MudCE9PWE6IWMoZixhKSlyZXR1cm4hMH19dmFyIHY9ISFyW1FdO3JldHVybiBlLmxlbmd0aCE9PW5uKHIpLmxlbmd0aCsodj8wOjEpfWZ1bmN0aW9uIGEobil7dmFyIHI9bi5rO2lmKHIubGVuZ3RoIT09bi50Lmxlbmd0aClyZXR1cm4hMDt2YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsci5sZW5ndGgtMSk7aWYodCYmIXQuZ2V0KXJldHVybiEwO2Zvcih2YXIgZT0wO2U8ci5sZW5ndGg7ZSsrKWlmKCFyLmhhc093blByb3BlcnR5KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGYocil7ci5PJiZuKDMsSlNPTi5zdHJpbmdpZnkocChyKSkpfXZhciBzPXt9O20oXCJFUzVcIix7SjpmdW5jdGlvbihuLHIpe3ZhciBlPUFycmF5LmlzQXJyYXkobiksaT1mdW5jdGlvbihuLHIpe2lmKG4pe2Zvcih2YXIgZT1BcnJheShyLmxlbmd0aCksaT0wO2k8ci5sZW5ndGg7aSsrKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiXCIraSx0KGksITApKTtyZXR1cm4gZX12YXIgbz1ybihyKTtkZWxldGUgb1tRXTtmb3IodmFyIHU9bm4obyksYT0wO2E8dS5sZW5ndGg7YSsrKXt2YXIgZj11W2FdO29bZl09dChmLG58fCEhb1tmXS5lbnVtZXJhYmxlKX1yZXR1cm4gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yociksbyl9KGUsbiksbz17aTplPzU6NCxBOnI/ci5BOl8oKSxQOiExLEk6ITEsRDp7fSxsOnIsdDpuLGs6aSxvOm51bGwsTzohMSxDOiExfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksUSx7dmFsdWU6byx3cml0YWJsZTohMH0pLGl9LFM6ZnVuY3Rpb24obix0LG8pe28/cih0KSYmdFtRXS5BPT09biYmZShuLnApOihuLnUmJmZ1bmN0aW9uIG4ocil7aWYociYmXCJvYmplY3RcIj09dHlwZW9mIHIpe3ZhciB0PXJbUV07aWYodCl7dmFyIGU9dC50LG89dC5rLGY9dC5ELGM9dC5pO2lmKDQ9PT1jKWkobywoZnVuY3Rpb24ocil7ciE9PVEmJih2b2lkIDAhPT1lW3JdfHx1KGUscik/ZltyXXx8bihvW3JdKTooZltyXT0hMCxrKHQpKSl9KSksaShlLChmdW5jdGlvbihuKXt2b2lkIDAhPT1vW25dfHx1KG8sbil8fChmW25dPSExLGsodCkpfSkpO2Vsc2UgaWYoNT09PWMpe2lmKGEodCkmJihrKHQpLGYubGVuZ3RoPSEwKSxvLmxlbmd0aDxlLmxlbmd0aClmb3IodmFyIHM9by5sZW5ndGg7czxlLmxlbmd0aDtzKyspZltzXT0hMTtlbHNlIGZvcih2YXIgdj1lLmxlbmd0aDt2PG8ubGVuZ3RoO3YrKylmW3ZdPSEwO2Zvcih2YXIgcD1NYXRoLm1pbihvLmxlbmd0aCxlLmxlbmd0aCksbD0wO2w8cDtsKyspby5oYXNPd25Qcm9wZXJ0eShsKXx8KGZbbF09ITApLHZvaWQgMD09PWZbbF0mJm4ob1tsXSl9fX19KG4ucFswXSksZShuLnApKX0sSzpmdW5jdGlvbihuKXtyZXR1cm4gND09PW4uaT9vKG4pOmEobil9fSl9ZnVuY3Rpb24gVCgpe2Z1bmN0aW9uIGUobil7aWYoIXQobikpcmV0dXJuIG47aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gbi5tYXAoZSk7aWYocyhuKSlyZXR1cm4gbmV3IE1hcChBcnJheS5mcm9tKG4uZW50cmllcygpKS5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybltuWzBdLGUoblsxXSldfSkpKTtpZih2KG4pKXJldHVybiBuZXcgU2V0KEFycmF5LmZyb20obikubWFwKGUpKTt2YXIgcj1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihuKSk7Zm9yKHZhciBpIGluIG4pcltpXT1lKG5baV0pO3JldHVybiB1KG4sTCkmJihyW0xdPW5bTF0pLHJ9ZnVuY3Rpb24gZihuKXtyZXR1cm4gcihuKT9lKG4pOm59dmFyIGM9XCJhZGRcIjttKFwiUGF0Y2hlc1wiLHskOmZ1bmN0aW9uKHIsdCl7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBpPXQucGF0aCx1PXQub3AsZj1yLHM9MDtzPGkubGVuZ3RoLTE7cysrKXt2YXIgdj1vKGYpLHA9XCJcIitpW3NdOzAhPT12JiYxIT09dnx8XCJfX3Byb3RvX19cIiE9PXAmJlwiY29uc3RydWN0b3JcIiE9PXB8fG4oMjQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGYmJlwicHJvdG90eXBlXCI9PT1wJiZuKDI0KSxcIm9iamVjdFwiIT10eXBlb2YoZj1hKGYscCkpJiZuKDE1LGkuam9pbihcIi9cIikpfXZhciBsPW8oZiksZD1lKHQudmFsdWUpLGg9aVtpLmxlbmd0aC0xXTtzd2l0Y2godSl7Y2FzZVwicmVwbGFjZVwiOnN3aXRjaChsKXtjYXNlIDI6cmV0dXJuIGYuc2V0KGgsZCk7Y2FzZSAzOm4oMTYpO2RlZmF1bHQ6cmV0dXJuIGZbaF09ZH1jYXNlIGM6c3dpdGNoKGwpe2Nhc2UgMTpyZXR1cm5cIi1cIj09PWg/Zi5wdXNoKGQpOmYuc3BsaWNlKGgsMCxkKTtjYXNlIDI6cmV0dXJuIGYuc2V0KGgsZCk7Y2FzZSAzOnJldHVybiBmLmFkZChkKTtkZWZhdWx0OnJldHVybiBmW2hdPWR9Y2FzZVwicmVtb3ZlXCI6c3dpdGNoKGwpe2Nhc2UgMTpyZXR1cm4gZi5zcGxpY2UoaCwxKTtjYXNlIDI6cmV0dXJuIGYuZGVsZXRlKGgpO2Nhc2UgMzpyZXR1cm4gZi5kZWxldGUodC52YWx1ZSk7ZGVmYXVsdDpyZXR1cm4gZGVsZXRlIGZbaF19ZGVmYXVsdDpuKDE3LHUpfX0pKSxyfSxSOmZ1bmN0aW9uKG4scix0LGUpe3N3aXRjaChuLmkpe2Nhc2UgMDpjYXNlIDQ6Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuLHIsdCxlKXt2YXIgbz1uLnQscz1uLm87aShuLkQsKGZ1bmN0aW9uKG4saSl7dmFyIHY9YShvLG4pLHA9YShzLG4pLGw9aT91KG8sbik/XCJyZXBsYWNlXCI6YzpcInJlbW92ZVwiO2lmKHYhPT1wfHxcInJlcGxhY2VcIiE9PWwpe3ZhciBkPXIuY29uY2F0KG4pO3QucHVzaChcInJlbW92ZVwiPT09bD97b3A6bCxwYXRoOmR9OntvcDpsLHBhdGg6ZCx2YWx1ZTpwfSksZS5wdXNoKGw9PT1jP3tvcDpcInJlbW92ZVwiLHBhdGg6ZH06XCJyZW1vdmVcIj09PWw/e29wOmMscGF0aDpkLHZhbHVlOmYodil9OntvcDpcInJlcGxhY2VcIixwYXRoOmQsdmFsdWU6Zih2KX0pfX0pKX0obixyLHQsZSk7Y2FzZSA1OmNhc2UgMTpyZXR1cm4gZnVuY3Rpb24obixyLHQsZSl7dmFyIGk9bi50LG89bi5ELHU9bi5vO2lmKHUubGVuZ3RoPGkubGVuZ3RoKXt2YXIgYT1bdSxpXTtpPWFbMF0sdT1hWzFdO3ZhciBzPVtlLHRdO3Q9c1swXSxlPXNbMV19Zm9yKHZhciB2PTA7djxpLmxlbmd0aDt2KyspaWYob1t2XSYmdVt2XSE9PWlbdl0pe3ZhciBwPXIuY29uY2F0KFt2XSk7dC5wdXNoKHtvcDpcInJlcGxhY2VcIixwYXRoOnAsdmFsdWU6Zih1W3ZdKX0pLGUucHVzaCh7b3A6XCJyZXBsYWNlXCIscGF0aDpwLHZhbHVlOmYoaVt2XSl9KX1mb3IodmFyIGw9aS5sZW5ndGg7bDx1Lmxlbmd0aDtsKyspe3ZhciBkPXIuY29uY2F0KFtsXSk7dC5wdXNoKHtvcDpjLHBhdGg6ZCx2YWx1ZTpmKHVbbF0pfSl9aS5sZW5ndGg8dS5sZW5ndGgmJmUucHVzaCh7b3A6XCJyZXBsYWNlXCIscGF0aDpyLmNvbmNhdChbXCJsZW5ndGhcIl0pLHZhbHVlOmkubGVuZ3RofSl9KG4scix0LGUpO2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLHQsZSl7dmFyIGk9bi50LG89bi5vLHU9MDtpLmZvckVhY2goKGZ1bmN0aW9uKG4pe2lmKCFvLmhhcyhuKSl7dmFyIGk9ci5jb25jYXQoW3VdKTt0LnB1c2goe29wOlwicmVtb3ZlXCIscGF0aDppLHZhbHVlOm59KSxlLnVuc2hpZnQoe29wOmMscGF0aDppLHZhbHVlOm59KX11Kyt9KSksdT0wLG8uZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoIWkuaGFzKG4pKXt2YXIgbz1yLmNvbmNhdChbdV0pO3QucHVzaCh7b3A6YyxwYXRoOm8sdmFsdWU6bn0pLGUudW5zaGlmdCh7b3A6XCJyZW1vdmVcIixwYXRoOm8sdmFsdWU6bn0pfXUrK30pKX0obixyLHQsZSl9fSxNOmZ1bmN0aW9uKG4scix0LGUpe3QucHVzaCh7b3A6XCJyZXBsYWNlXCIscGF0aDpbXSx2YWx1ZTpyPT09SD92b2lkIDA6cn0pLGUucHVzaCh7b3A6XCJyZXBsYWNlXCIscGF0aDpbXSx2YWx1ZTpufSl9fSl9ZnVuY3Rpb24gQygpe2Z1bmN0aW9uIHIobixyKXtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1ufWEobixyKSxuLnByb3RvdHlwZT0odC5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IHQpfWZ1bmN0aW9uIGUobil7bi5vfHwobi5EPW5ldyBNYXAsbi5vPW5ldyBNYXAobi50KSl9ZnVuY3Rpb24gbyhuKXtuLm98fChuLm89bmV3IFNldCxuLnQuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYodChyKSl7dmFyIGU9UihuLkEuaCxyLG4pO24ucC5zZXQocixlKSxuLm8uYWRkKGUpfWVsc2Ugbi5vLmFkZChyKX0pKSl9ZnVuY3Rpb24gdShyKXtyLk8mJm4oMyxKU09OLnN0cmluZ2lmeShwKHIpKSl9dmFyIGE9ZnVuY3Rpb24obixyKXtyZXR1cm4oYT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24obixyKXtuLl9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24obixyKXtmb3IodmFyIHQgaW4gcilyLmhhc093blByb3BlcnR5KHQpJiYoblt0XT1yW3RdKX0pKG4scil9LGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4scil7cmV0dXJuIHRoaXNbUV09e2k6MixsOnIsQTpyP3IuQTpfKCksUDohMSxJOiExLG86dm9pZCAwLEQ6dm9pZCAwLHQ6bixrOnRoaXMsQzohMSxPOiExfSx0aGlzfXIobixNYXApO3ZhciBvPW4ucHJvdG90eXBlO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobyxcInNpemVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpc1tRXSkuc2l6ZX19KSxvLmhhcz1mdW5jdGlvbihuKXtyZXR1cm4gcCh0aGlzW1FdKS5oYXMobil9LG8uc2V0PWZ1bmN0aW9uKG4scil7dmFyIHQ9dGhpc1tRXTtyZXR1cm4gdSh0KSxwKHQpLmhhcyhuKSYmcCh0KS5nZXQobik9PT1yfHwoZSh0KSxrKHQpLHQuRC5zZXQobiwhMCksdC5vLnNldChuLHIpLHQuRC5zZXQobiwhMCkpLHRoaXN9LG8uZGVsZXRlPWZ1bmN0aW9uKG4pe2lmKCF0aGlzLmhhcyhuKSlyZXR1cm4hMTt2YXIgcj10aGlzW1FdO3JldHVybiB1KHIpLGUociksayhyKSxyLnQuaGFzKG4pP3IuRC5zZXQobiwhMSk6ci5ELmRlbGV0ZShuKSxyLm8uZGVsZXRlKG4pLCEwfSxvLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIG49dGhpc1tRXTt1KG4pLHAobikuc2l6ZSYmKGUobiksayhuKSxuLkQ9bmV3IE1hcCxpKG4udCwoZnVuY3Rpb24ocil7bi5ELnNldChyLCExKX0pKSxuLm8uY2xlYXIoKSl9LG8uZm9yRWFjaD1mdW5jdGlvbihuLHIpe3ZhciB0PXRoaXM7cCh0aGlzW1FdKS5mb3JFYWNoKChmdW5jdGlvbihlLGkpe24uY2FsbChyLHQuZ2V0KGkpLGksdCl9KSl9LG8uZ2V0PWZ1bmN0aW9uKG4pe3ZhciByPXRoaXNbUV07dShyKTt2YXIgaT1wKHIpLmdldChuKTtpZihyLkl8fCF0KGkpKXJldHVybiBpO2lmKGkhPT1yLnQuZ2V0KG4pKXJldHVybiBpO3ZhciBvPVIoci5BLmgsaSxyKTtyZXR1cm4gZShyKSxyLm8uc2V0KG4sbyksb30sby5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpc1tRXSkua2V5cygpfSxvLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBuLHI9dGhpcyx0PXRoaXMua2V5cygpO3JldHVybihuPXt9KVtWXT1mdW5jdGlvbigpe3JldHVybiByLnZhbHVlcygpfSxuLm5leHQ9ZnVuY3Rpb24oKXt2YXIgbj10Lm5leHQoKTtyZXR1cm4gbi5kb25lP246e2RvbmU6ITEsdmFsdWU6ci5nZXQobi52YWx1ZSl9fSxufSxvLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgbixyPXRoaXMsdD10aGlzLmtleXMoKTtyZXR1cm4obj17fSlbVl09ZnVuY3Rpb24oKXtyZXR1cm4gci5lbnRyaWVzKCl9LG4ubmV4dD1mdW5jdGlvbigpe3ZhciBuPXQubmV4dCgpO2lmKG4uZG9uZSlyZXR1cm4gbjt2YXIgZT1yLmdldChuLnZhbHVlKTtyZXR1cm57ZG9uZTohMSx2YWx1ZTpbbi52YWx1ZSxlXX19LG59LG9bVl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9LG59KCksYz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixyKXtyZXR1cm4gdGhpc1tRXT17aTozLGw6cixBOnI/ci5BOl8oKSxQOiExLEk6ITEsbzp2b2lkIDAsdDpuLGs6dGhpcyxwOm5ldyBNYXAsTzohMSxDOiExfSx0aGlzfXIobixTZXQpO3ZhciB0PW4ucHJvdG90eXBlO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInNpemVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpc1tRXSkuc2l6ZX19KSx0Lmhhcz1mdW5jdGlvbihuKXt2YXIgcj10aGlzW1FdO3JldHVybiB1KHIpLHIubz8hIXIuby5oYXMobil8fCEoIXIucC5oYXMobil8fCFyLm8uaGFzKHIucC5nZXQobikpKTpyLnQuaGFzKG4pfSx0LmFkZD1mdW5jdGlvbihuKXt2YXIgcj10aGlzW1FdO3JldHVybiB1KHIpLHRoaXMuaGFzKG4pfHwobyhyKSxrKHIpLHIuby5hZGQobikpLHRoaXN9LHQuZGVsZXRlPWZ1bmN0aW9uKG4pe2lmKCF0aGlzLmhhcyhuKSlyZXR1cm4hMTt2YXIgcj10aGlzW1FdO3JldHVybiB1KHIpLG8ociksayhyKSxyLm8uZGVsZXRlKG4pfHwhIXIucC5oYXMobikmJnIuby5kZWxldGUoci5wLmdldChuKSl9LHQuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgbj10aGlzW1FdO3UobikscChuKS5zaXplJiYobyhuKSxrKG4pLG4uby5jbGVhcigpKX0sdC52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgbj10aGlzW1FdO3JldHVybiB1KG4pLG8obiksbi5vLnZhbHVlcygpfSx0LmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgbj10aGlzW1FdO3JldHVybiB1KG4pLG8obiksbi5vLmVudHJpZXMoKX0sdC5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVzKCl9LHRbVl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZXMoKX0sdC5mb3JFYWNoPWZ1bmN0aW9uKG4scil7Zm9yKHZhciB0PXRoaXMudmFsdWVzKCksZT10Lm5leHQoKTshZS5kb25lOyluLmNhbGwocixlLnZhbHVlLGUudmFsdWUsdGhpcyksZT10Lm5leHQoKX0sbn0oKTttKFwiTWFwU2V0XCIse046ZnVuY3Rpb24obixyKXtyZXR1cm4gbmV3IGYobixyKX0sVDpmdW5jdGlvbihuLHIpe3JldHVybiBuZXcgYyhuLHIpfX0pfWZ1bmN0aW9uIEooKXtOKCksQygpLFQoKX1mdW5jdGlvbiBLKG4pe3JldHVybiBufWZ1bmN0aW9uICQobil7cmV0dXJuIG59dmFyIEcsVSxXPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2woXCJ4XCIpLFg9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1hcCxxPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTZXQsQj1cInVuZGVmaW5lZFwiIT10eXBlb2YgUHJveHkmJnZvaWQgMCE9PVByb3h5LnJldm9jYWJsZSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFJlZmxlY3QsSD1XP1N5bWJvbC5mb3IoXCJpbW1lci1ub3RoaW5nXCIpOigoRz17fSlbXCJpbW1lci1ub3RoaW5nXCJdPSEwLEcpLEw9Vz9TeW1ib2wuZm9yKFwiaW1tZXItZHJhZnRhYmxlXCIpOlwiX18kaW1tZXJfZHJhZnRhYmxlXCIsUT1XP1N5bWJvbC5mb3IoXCJpbW1lci1zdGF0ZVwiKTpcIl9fJGltbWVyX3N0YXRlXCIsVj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3J8fFwiQEBpdGVyYXRvclwiLFk9ezA6XCJJbGxlZ2FsIHN0YXRlXCIsMTpcIkltbWVyIGRyYWZ0cyBjYW5ub3QgaGF2ZSBjb21wdXRlZCBwcm9wZXJ0aWVzXCIsMjpcIlRoaXMgb2JqZWN0IGhhcyBiZWVuIGZyb3plbiBhbmQgc2hvdWxkIG5vdCBiZSBtdXRhdGVkXCIsMzpmdW5jdGlvbihuKXtyZXR1cm5cIkNhbm5vdCB1c2UgYSBwcm94eSB0aGF0IGhhcyBiZWVuIHJldm9rZWQuIERpZCB5b3UgcGFzcyBhbiBvYmplY3QgZnJvbSBpbnNpZGUgYW4gaW1tZXIgZnVuY3Rpb24gdG8gYW4gYXN5bmMgcHJvY2Vzcz8gXCIrbn0sNDpcIkFuIGltbWVyIHByb2R1Y2VyIHJldHVybmVkIGEgbmV3IHZhbHVlICphbmQqIG1vZGlmaWVkIGl0cyBkcmFmdC4gRWl0aGVyIHJldHVybiBhIG5ldyB2YWx1ZSAqb3IqIG1vZGlmeSB0aGUgZHJhZnQuXCIsNTpcIkltbWVyIGZvcmJpZHMgY2lyY3VsYXIgcmVmZXJlbmNlc1wiLDY6XCJUaGUgZmlyc3Qgb3Igc2Vjb25kIGFyZ3VtZW50IHRvIGBwcm9kdWNlYCBtdXN0IGJlIGEgZnVuY3Rpb25cIiw3OlwiVGhlIHRoaXJkIGFyZ3VtZW50IHRvIGBwcm9kdWNlYCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgdW5kZWZpbmVkXCIsODpcIkZpcnN0IGFyZ3VtZW50IHRvIGBjcmVhdGVEcmFmdGAgbXVzdCBiZSBhIHBsYWluIG9iamVjdCwgYW4gYXJyYXksIG9yIGFuIGltbWVyYWJsZSBvYmplY3RcIiw5OlwiRmlyc3QgYXJndW1lbnQgdG8gYGZpbmlzaERyYWZ0YCBtdXN0IGJlIGEgZHJhZnQgcmV0dXJuZWQgYnkgYGNyZWF0ZURyYWZ0YFwiLDEwOlwiVGhlIGdpdmVuIGRyYWZ0IGlzIGFscmVhZHkgZmluYWxpemVkXCIsMTE6XCJPYmplY3QuZGVmaW5lUHJvcGVydHkoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLDEyOlwiT2JqZWN0LnNldFByb3RvdHlwZU9mKCkgY2Fubm90IGJlIHVzZWQgb24gYW4gSW1tZXIgZHJhZnRcIiwxMzpcIkltbWVyIG9ubHkgc3VwcG9ydHMgZGVsZXRpbmcgYXJyYXkgaW5kaWNlc1wiLDE0OlwiSW1tZXIgb25seSBzdXBwb3J0cyBzZXR0aW5nIGFycmF5IGluZGljZXMgYW5kIHRoZSAnbGVuZ3RoJyBwcm9wZXJ0eVwiLDE1OmZ1bmN0aW9uKG4pe3JldHVyblwiQ2Fubm90IGFwcGx5IHBhdGNoLCBwYXRoIGRvZXNuJ3QgcmVzb2x2ZTogXCIrbn0sMTY6J1NldHMgY2Fubm90IGhhdmUgXCJyZXBsYWNlXCIgcGF0Y2hlcy4nLDE3OmZ1bmN0aW9uKG4pe3JldHVyblwiVW5zdXBwb3J0ZWQgcGF0Y2ggb3BlcmF0aW9uOiBcIitufSwxODpmdW5jdGlvbihuKXtyZXR1cm5cIlRoZSBwbHVnaW4gZm9yICdcIituK1wiJyBoYXMgbm90IGJlZW4gbG9hZGVkIGludG8gSW1tZXIuIFRvIGVuYWJsZSB0aGUgcGx1Z2luLCBpbXBvcnQgYW5kIGNhbGwgYGVuYWJsZVwiK24rXCIoKWAgd2hlbiBpbml0aWFsaXppbmcgeW91ciBhcHBsaWNhdGlvbi5cIn0sMjA6XCJDYW5ub3QgdXNlIHByb3hpZXMgaWYgUHJveHksIFByb3h5LnJldm9jYWJsZSBvciBSZWZsZWN0IGFyZSBub3QgYXZhaWxhYmxlXCIsMjE6ZnVuY3Rpb24obil7cmV0dXJuXCJwcm9kdWNlIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiB0aGluZ3MgdGhhdCBhcmUgZHJhZnRhYmxlOiBwbGFpbiBvYmplY3RzLCBhcnJheXMsIE1hcCwgU2V0IG9yIGNsYXNzZXMgdGhhdCBhcmUgbWFya2VkIHdpdGggJ1tpbW1lcmFibGVdOiB0cnVlJy4gR290ICdcIituK1wiJ1wifSwyMjpmdW5jdGlvbihuKXtyZXR1cm5cIidjdXJyZW50JyBleHBlY3RzIGEgZHJhZnQsIGdvdDogXCIrbn0sMjM6ZnVuY3Rpb24obil7cmV0dXJuXCInb3JpZ2luYWwnIGV4cGVjdHMgYSBkcmFmdCwgZ290OiBcIitufSwyNDpcIlBhdGNoaW5nIHJlc2VydmVkIGF0dHJpYnV0ZXMgbGlrZSBfX3Byb3RvX18sIHByb3RvdHlwZSBhbmQgY29uc3RydWN0b3IgaXMgbm90IGFsbG93ZWRcIn0sWj1cIlwiK09iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3Isbm49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3Qub3duS2V5cz9SZWZsZWN0Lm93bktleXM6dm9pZCAwIT09T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihuKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikpfTpPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxybj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc3x8ZnVuY3Rpb24obil7dmFyIHI9e307cmV0dXJuIG5uKG4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdF09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpfSkpLHJ9LHRuPXt9LGVuPXtnZXQ6ZnVuY3Rpb24obixyKXtpZihyPT09USlyZXR1cm4gbjt2YXIgZT1wKG4pO2lmKCF1KGUscikpcmV0dXJuIGZ1bmN0aW9uKG4scix0KXt2YXIgZSxpPUkocix0KTtyZXR1cm4gaT9cInZhbHVlXCJpbiBpP2kudmFsdWU6bnVsbD09PShlPWkuZ2V0KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jYWxsKG4uayk6dm9pZCAwfShuLGUscik7dmFyIGk9ZVtyXTtyZXR1cm4gbi5JfHwhdChpKT9pOmk9PT16KG4udCxyKT8oRShuKSxuLm9bcl09UihuLkEuaCxpLG4pKTppfSxoYXM6ZnVuY3Rpb24obixyKXtyZXR1cm4gciBpbiBwKG4pfSxvd25LZXlzOmZ1bmN0aW9uKG4pe3JldHVybiBSZWZsZWN0Lm93bktleXMocChuKSl9LHNldDpmdW5jdGlvbihuLHIsdCl7dmFyIGU9SShwKG4pLHIpO2lmKG51bGw9PWU/dm9pZCAwOmUuc2V0KXJldHVybiBlLnNldC5jYWxsKG4uayx0KSwhMDtpZighbi5QKXt2YXIgaT16KHAobiksciksbz1udWxsPT1pP3ZvaWQgMDppW1FdO2lmKG8mJm8udD09PXQpcmV0dXJuIG4ub1tyXT10LG4uRFtyXT0hMSwhMDtpZihjKHQsaSkmJih2b2lkIDAhPT10fHx1KG4udCxyKSkpcmV0dXJuITA7RShuKSxrKG4pfXJldHVybiBuLm9bcl09PT10JiZcIm51bWJlclwiIT10eXBlb2YgdCYmKHZvaWQgMCE9PXR8fHIgaW4gbi5vKXx8KG4ub1tyXT10LG4uRFtyXT0hMCwhMCl9LGRlbGV0ZVByb3BlcnR5OmZ1bmN0aW9uKG4scil7cmV0dXJuIHZvaWQgMCE9PXoobi50LHIpfHxyIGluIG4udD8obi5EW3JdPSExLEUobiksayhuKSk6ZGVsZXRlIG4uRFtyXSxuLm8mJmRlbGV0ZSBuLm9bcl0sITB9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbihuLHIpe3ZhciB0PXAobiksZT1SZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpO3JldHVybiBlP3t3cml0YWJsZTohMCxjb25maWd1cmFibGU6MSE9PW4uaXx8XCJsZW5ndGhcIiE9PXIsZW51bWVyYWJsZTplLmVudW1lcmFibGUsdmFsdWU6dFtyXX06ZX0sZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oKXtuKDExKX0sZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuLnQpfSxzZXRQcm90b3R5cGVPZjpmdW5jdGlvbigpe24oMTIpfX0sb249e307aShlbiwoZnVuY3Rpb24obixyKXtvbltuXT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHNbMF09YXJndW1lbnRzWzBdWzBdLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pKSxvbi5kZWxldGVQcm9wZXJ0eT1mdW5jdGlvbihyLHQpe3JldHVyblwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJmlzTmFOKHBhcnNlSW50KHQpKSYmbigxMyksb24uc2V0LmNhbGwodGhpcyxyLHQsdm9pZCAwKX0sb24uc2V0PWZ1bmN0aW9uKHIsdCxlKXtyZXR1cm5cInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZcImxlbmd0aFwiIT09dCYmaXNOYU4ocGFyc2VJbnQodCkpJiZuKDE0KSxlbi5zZXQuY2FsbCh0aGlzLHJbMF0sdCxlLHJbMF0pfTt2YXIgdW49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHIpe3ZhciBlPXRoaXM7dGhpcy5nPUIsdGhpcy5GPSEwLHRoaXMucHJvZHVjZT1mdW5jdGlvbihyLGksbyl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgciYmXCJmdW5jdGlvblwiIT10eXBlb2YgaSl7dmFyIHU9aTtpPXI7dmFyIGE9ZTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj11KTtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPUFycmF5KHQ+MT90LTE6MCksbz0xO288dDtvKyspZVtvLTFdPWFyZ3VtZW50c1tvXTtyZXR1cm4gYS5wcm9kdWNlKG4sKGZ1bmN0aW9uKG4pe3ZhciB0O3JldHVybih0PWkpLmNhbGwuYXBwbHkodCxbcixuXS5jb25jYXQoZSkpfSkpfX12YXIgZjtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBpJiZuKDYpLHZvaWQgMCE9PW8mJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG8mJm4oNyksdChyKSl7dmFyIGM9dyhlKSxzPVIoZSxyLHZvaWQgMCksdj0hMDt0cnl7Zj1pKHMpLHY9ITF9ZmluYWxseXt2P08oYyk6ZyhjKX1yZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgUHJvbWlzZSYmZiBpbnN0YW5jZW9mIFByb21pc2U/Zi50aGVuKChmdW5jdGlvbihuKXtyZXR1cm4gaihjLG8pLFAobixjKX0pLChmdW5jdGlvbihuKXt0aHJvdyBPKGMpLG59KSk6KGooYyxvKSxQKGYsYykpfWlmKCFyfHxcIm9iamVjdFwiIT10eXBlb2Ygcil7aWYodm9pZCAwPT09KGY9aShyKSkmJihmPXIpLGY9PT1IJiYoZj12b2lkIDApLGUuRiYmZChmLCEwKSxvKXt2YXIgcD1bXSxsPVtdO2IoXCJQYXRjaGVzXCIpLk0ocixmLHAsbCksbyhwLGwpfXJldHVybiBmfW4oMjEscil9LHRoaXMucHJvZHVjZVdpdGhQYXRjaGVzPWZ1bmN0aW9uKG4scil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbilyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheSh0PjE/dC0xOjApLG89MTtvPHQ7bysrKWlbby0xXT1hcmd1bWVudHNbb107cmV0dXJuIGUucHJvZHVjZVdpdGhQYXRjaGVzKHIsKGZ1bmN0aW9uKHIpe3JldHVybiBuLmFwcGx5KHZvaWQgMCxbcl0uY29uY2F0KGkpKX0pKX07dmFyIHQsaSxvPWUucHJvZHVjZShuLHIsKGZ1bmN0aW9uKG4scil7dD1uLGk9cn0pKTtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgUHJvbWlzZSYmbyBpbnN0YW5jZW9mIFByb21pc2U/by50aGVuKChmdW5jdGlvbihuKXtyZXR1cm5bbix0LGldfSkpOltvLHQsaV19LFwiYm9vbGVhblwiPT10eXBlb2YobnVsbD09cj92b2lkIDA6ci51c2VQcm94aWVzKSYmdGhpcy5zZXRVc2VQcm94aWVzKHIudXNlUHJveGllcyksXCJib29sZWFuXCI9PXR5cGVvZihudWxsPT1yP3ZvaWQgMDpyLmF1dG9GcmVlemUpJiZ0aGlzLnNldEF1dG9GcmVlemUoci5hdXRvRnJlZXplKX12YXIgaT1lLnByb3RvdHlwZTtyZXR1cm4gaS5jcmVhdGVEcmFmdD1mdW5jdGlvbihlKXt0KGUpfHxuKDgpLHIoZSkmJihlPUQoZSkpO3ZhciBpPXcodGhpcyksbz1SKHRoaXMsZSx2b2lkIDApO3JldHVybiBvW1FdLkM9ITAsZyhpKSxvfSxpLmZpbmlzaERyYWZ0PWZ1bmN0aW9uKHIsdCl7dmFyIGU9ciYmcltRXTtcInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiYoZSYmZS5DfHxuKDkpLGUuSSYmbigxMCkpO3ZhciBpPWUuQTtyZXR1cm4gaihpLHQpLFAodm9pZCAwLGkpfSxpLnNldEF1dG9GcmVlemU9ZnVuY3Rpb24obil7dGhpcy5GPW59LGkuc2V0VXNlUHJveGllcz1mdW5jdGlvbihyKXtyJiYhQiYmbigyMCksdGhpcy5nPXJ9LGkuYXBwbHlQYXRjaGVzPWZ1bmN0aW9uKG4sdCl7dmFyIGU7Zm9yKGU9dC5sZW5ndGgtMTtlPj0wO2UtLSl7dmFyIGk9dFtlXTtpZigwPT09aS5wYXRoLmxlbmd0aCYmXCJyZXBsYWNlXCI9PT1pLm9wKXtuPWkudmFsdWU7YnJlYWt9fWU+LTEmJih0PXQuc2xpY2UoZSsxKSk7dmFyIG89YihcIlBhdGNoZXNcIikuJDtyZXR1cm4gcihuKT9vKG4sdCk6dGhpcy5wcm9kdWNlKG4sKGZ1bmN0aW9uKG4pe3JldHVybiBvKG4sdCl9KSl9LGV9KCksYW49bmV3IHVuLGZuPWFuLnByb2R1Y2UsY249YW4ucHJvZHVjZVdpdGhQYXRjaGVzLmJpbmQoYW4pLHNuPWFuLnNldEF1dG9GcmVlemUuYmluZChhbiksdm49YW4uc2V0VXNlUHJveGllcy5iaW5kKGFuKSxwbj1hbi5hcHBseVBhdGNoZXMuYmluZChhbiksbG49YW4uY3JlYXRlRHJhZnQuYmluZChhbiksZG49YW4uZmluaXNoRHJhZnQuYmluZChhbik7ZXhwb3J0IGRlZmF1bHQgZm47ZXhwb3J0e3VuIGFzIEltbWVyLHBuIGFzIGFwcGx5UGF0Y2hlcyxLIGFzIGNhc3REcmFmdCwkIGFzIGNhc3RJbW11dGFibGUsbG4gYXMgY3JlYXRlRHJhZnQsRCBhcyBjdXJyZW50LEogYXMgZW5hYmxlQWxsUGx1Z2lucyxOIGFzIGVuYWJsZUVTNSxDIGFzIGVuYWJsZU1hcFNldCxUIGFzIGVuYWJsZVBhdGNoZXMsZG4gYXMgZmluaXNoRHJhZnQsZCBhcyBmcmVlemUsTCBhcyBpbW1lcmFibGUsciBhcyBpc0RyYWZ0LHQgYXMgaXNEcmFmdGFibGUsSCBhcyBub3RoaW5nLGUgYXMgb3JpZ2luYWwsZm4gYXMgcHJvZHVjZSxjbiBhcyBwcm9kdWNlV2l0aFBhdGNoZXMsc24gYXMgc2V0QXV0b0ZyZWV6ZSx2biBhcyBzZXRVc2VQcm94aWVzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWltbWVyLmVzbS5qcy5tYXBcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi9kZWZpbmVQcm9wZXJ0eS5qc1wiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcblxuLyoqXG4gKiBBZGFwdGVkIGZyb20gUmVhY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL21hc3Rlci9wYWNrYWdlcy9zaGFyZWQvZm9ybWF0UHJvZEVycm9yTWVzc2FnZS5qc1xuICpcbiAqIERvIG5vdCByZXF1aXJlIHRoaXMgbW9kdWxlIGRpcmVjdGx5ISBVc2Ugbm9ybWFsIHRocm93IGVycm9yIGNhbGxzLiBUaGVzZSBtZXNzYWdlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggZXJyb3IgY29kZXNcbiAqIGR1cmluZyBidWlsZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoY29kZSkge1xuICByZXR1cm4gXCJNaW5pZmllZCBSZWR1eCBlcnJvciAjXCIgKyBjb2RlICsgXCI7IHZpc2l0IGh0dHBzOi8vcmVkdXguanMub3JnL0Vycm9ycz9jb2RlPVwiICsgY29kZSArIFwiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIFwiICsgJ3VzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMuICc7XG59XG5cbi8vIElubGluZWQgdmVyc2lvbiBvZiB0aGUgYHN5bWJvbC1vYnNlcnZhYmxlYCBwb2x5ZmlsbFxudmFyICQkb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8ICdAQG9ic2VydmFibGUnO1xufSkoKTtcblxuLyoqXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXG4gKiBGb3IgYW55IHVua25vd24gYWN0aW9ucywgeW91IG11c3QgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlLlxuICogSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXG4gKi9cbnZhciByYW5kb21TdHJpbmcgPSBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykuc3BsaXQoJycpLmpvaW4oJy4nKTtcbn07XG5cbnZhciBBY3Rpb25UeXBlcyA9IHtcbiAgSU5JVDogXCJAQHJlZHV4L0lOSVRcIiArIHJhbmRvbVN0cmluZygpLFxuICBSRVBMQUNFOiBcIkBAcmVkdXgvUkVQTEFDRVwiICsgcmFuZG9tU3RyaW5nKCksXG4gIFBST0JFX1VOS05PV05fQUNUSU9OOiBmdW5jdGlvbiBQUk9CRV9VTktOT1dOX0FDVElPTigpIHtcbiAgICByZXR1cm4gXCJAQHJlZHV4L1BST0JFX1VOS05PV05fQUNUSU9OXCIgKyByYW5kb21TdHJpbmcoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gb2JqIFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcmd1bWVudCBhcHBlYXJzIHRvIGJlIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIHZhciBwcm90byA9IG9iajtcblxuICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKSAhPT0gbnVsbCkge1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gcHJvdG87XG59XG5cbi8vIElubGluZWQgLyBzaG9ydGVuZWQgdmVyc2lvbiBvZiBga2luZE9mYCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2tpbmQtb2ZcbmZ1bmN0aW9uIG1pbmlLaW5kT2YodmFsKSB7XG4gIGlmICh2YWwgPT09IHZvaWQgMCkgcmV0dXJuICd1bmRlZmluZWQnO1xuICBpZiAodmFsID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiAnYXJyYXknO1xuICBpZiAoaXNEYXRlKHZhbCkpIHJldHVybiAnZGF0ZSc7XG4gIGlmIChpc0Vycm9yKHZhbCkpIHJldHVybiAnZXJyb3InO1xuICB2YXIgY29uc3RydWN0b3JOYW1lID0gY3Rvck5hbWUodmFsKTtcblxuICBzd2l0Y2ggKGNvbnN0cnVjdG9yTmFtZSkge1xuICAgIGNhc2UgJ1N5bWJvbCc6XG4gICAgY2FzZSAnUHJvbWlzZSc6XG4gICAgY2FzZSAnV2Vha01hcCc6XG4gICAgY2FzZSAnV2Vha1NldCc6XG4gICAgY2FzZSAnTWFwJzpcbiAgICBjYXNlICdTZXQnOlxuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZTtcbiAgfSAvLyBvdGhlclxuXG5cbiAgcmV0dXJuIHR5cGUuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csICcnKTtcbn1cblxuZnVuY3Rpb24gY3Rvck5hbWUodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nID8gdmFsLmNvbnN0cnVjdG9yLm5hbWUgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yKHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRXJyb3IgfHwgdHlwZW9mIHZhbC5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiB2YWwuY29uc3RydWN0b3IgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5zdGFja1RyYWNlTGltaXQgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHR5cGVvZiB2YWwudG9EYXRlU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWwuZ2V0RGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsLnNldERhdGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGtpbmRPZih2YWwpIHtcbiAgdmFyIHR5cGVPZlZhbCA9IHR5cGVvZiB2YWw7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB0eXBlT2ZWYWwgPSBtaW5pS2luZE9mKHZhbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZU9mVmFsO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKlxuICogKipXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGBjb25maWd1cmVTdG9yZWAgbWV0aG9kXG4gKiBvZiB0aGUgYEByZWR1eGpzL3Rvb2xraXRgIHBhY2thZ2UqKiwgd2hpY2ggcmVwbGFjZXMgYGNyZWF0ZVN0b3JlYC5cbiAqXG4gKiBSZWR1eCBUb29sa2l0IGlzIG91ciByZWNvbW1lbmRlZCBhcHByb2FjaCBmb3Igd3JpdGluZyBSZWR1eCBsb2dpYyB0b2RheSxcbiAqIGluY2x1ZGluZyBzdG9yZSBzZXR1cCwgcmVkdWNlcnMsIGRhdGEgZmV0Y2hpbmcsIGFuZCBtb3JlLlxuICpcbiAqICoqRm9yIG1vcmUgZGV0YWlscywgcGxlYXNlIHJlYWQgdGhpcyBSZWR1eCBkb2NzIHBhZ2U6KipcbiAqICoqaHR0cHM6Ly9yZWR1eC5qcy5vcmcvaW50cm9kdWN0aW9uL3doeS1ydGstaXMtcmVkdXgtdG9kYXkqKlxuICpcbiAqIGBjb25maWd1cmVTdG9yZWAgZnJvbSBSZWR1eCBUb29sa2l0IGlzIGFuIGltcHJvdmVkIHZlcnNpb24gb2YgYGNyZWF0ZVN0b3JlYCB0aGF0XG4gKiBzaW1wbGlmaWVzIHNldHVwIGFuZCBoZWxwcyBhdm9pZCBjb21tb24gYnVncy5cbiAqXG4gKiBZb3Ugc2hvdWxkIG5vdCBiZSB1c2luZyB0aGUgYHJlZHV4YCBjb3JlIHBhY2thZ2UgYnkgaXRzZWxmIHRvZGF5LCBleGNlcHQgZm9yIGxlYXJuaW5nIHB1cnBvc2VzLlxuICogVGhlIGBjcmVhdGVTdG9yZWAgbWV0aG9kIGZyb20gdGhlIGNvcmUgYHJlZHV4YCBwYWNrYWdlIHdpbGwgbm90IGJlIHJlbW92ZWQsIGJ1dCB3ZSBlbmNvdXJhZ2VcbiAqIGFsbCB1c2VycyB0byBtaWdyYXRlIHRvIHVzaW5nIFJlZHV4IFRvb2xraXQgZm9yIGFsbCBSZWR1eCBjb2RlLlxuICpcbiAqIElmIHlvdSB3YW50IHRvIHVzZSBgY3JlYXRlU3RvcmVgIHdpdGhvdXQgdGhpcyB2aXN1YWwgZGVwcmVjYXRpb24gd2FybmluZywgdXNlXG4gKiB0aGUgYGxlZ2FjeV9jcmVhdGVTdG9yZWAgaW1wb3J0IGluc3RlYWQ6XG4gKlxuICogYGltcG9ydCB7IGxlZ2FjeV9jcmVhdGVTdG9yZSBhcyBjcmVhdGVTdG9yZX0gZnJvbSAncmVkdXgnYFxuICpcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcbiAgdmFyIF9yZWYyO1xuXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBlbmhhbmNlciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYXJndW1lbnRzWzNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMCkgOiAnSXQgbG9va3MgbGlrZSB5b3UgYXJlIHBhc3Npbmcgc2V2ZXJhbCBzdG9yZSBlbmhhbmNlcnMgdG8gJyArICdjcmVhdGVTdG9yZSgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIEluc3RlYWQsIGNvbXBvc2UgdGhlbSAnICsgJ3RvZ2V0aGVyIHRvIGEgc2luZ2xlIGZ1bmN0aW9uLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjY3JlYXRpbmctYS1zdG9yZS13aXRoLWVuaGFuY2VycyBmb3IgYW4gZXhhbXBsZS4nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAndW5kZWZpbmVkJykge1xuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XG4gICAgcHJlbG9hZGVkU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuaGFuY2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEpIDogXCJFeHBlY3RlZCB0aGUgZW5oYW5jZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihlbmhhbmNlcikgKyBcIidcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyKSA6IFwiRXhwZWN0ZWQgdGhlIHJvb3QgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKHJlZHVjZXIpICsgXCInXCIpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgdmFyIGN1cnJlbnRTdGF0ZSA9IHByZWxvYWRlZFN0YXRlO1xuICB2YXIgY3VycmVudExpc3RlbmVycyA9IFtdO1xuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XG4gIHZhciBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGlzIG1ha2VzIGEgc2hhbGxvdyBjb3B5IG9mIGN1cnJlbnRMaXN0ZW5lcnMgc28gd2UgY2FuIHVzZVxuICAgKiBuZXh0TGlzdGVuZXJzIGFzIGEgdGVtcG9yYXJ5IGxpc3Qgd2hpbGUgZGlzcGF0Y2hpbmcuXG4gICAqXG4gICAqIFRoaXMgcHJldmVudHMgYW55IGJ1Z3MgYXJvdW5kIGNvbnN1bWVycyBjYWxsaW5nXG4gICAqIHN1YnNjcmliZS91bnN1YnNjcmliZSBpbiB0aGUgbWlkZGxlIG9mIGEgZGlzcGF0Y2guXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzLnNsaWNlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgc3RhdGUgdHJlZSBtYW5hZ2VkIGJ5IHRoZSBzdG9yZS5cbiAgICpcbiAgICogQHJldHVybnMge2FueX0gVGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzKSA6ICdZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLmdldFN0YXRlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiAnICsgJ1RoZSByZWR1Y2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIHRoZSBzdGF0ZSBhcyBhbiBhcmd1bWVudC4gJyArICdQYXNzIGl0IGRvd24gZnJvbSB0aGUgdG9wIHJlZHVjZXIgaW5zdGVhZCBvZiByZWFkaW5nIGl0IGZyb20gdGhlIHN0b3JlLicpO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxuICAgKiBhbmQgc29tZSBwYXJ0IG9mIHRoZSBzdGF0ZSB0cmVlIG1heSBwb3RlbnRpYWxseSBoYXZlIGNoYW5nZWQuIFlvdSBtYXkgdGhlblxuICAgKiBjYWxsIGBnZXRTdGF0ZSgpYCB0byByZWFkIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgaW5zaWRlIHRoZSBjYWxsYmFjay5cbiAgICpcbiAgICogWW91IG1heSBjYWxsIGBkaXNwYXRjaCgpYCBmcm9tIGEgY2hhbmdlIGxpc3RlbmVyLCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAgICogY2F2ZWF0czpcbiAgICpcbiAgICogMS4gVGhlIHN1YnNjcmlwdGlvbnMgYXJlIHNuYXBzaG90dGVkIGp1c3QgYmVmb3JlIGV2ZXJ5IGBkaXNwYXRjaCgpYCBjYWxsLlxuICAgKiBJZiB5b3Ugc3Vic2NyaWJlIG9yIHVuc3Vic2NyaWJlIHdoaWxlIHRoZSBsaXN0ZW5lcnMgYXJlIGJlaW5nIGludm9rZWQsIHRoaXNcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXG4gICAqIEhvd2V2ZXIsIHRoZSBuZXh0IGBkaXNwYXRjaCgpYCBjYWxsLCB3aGV0aGVyIG5lc3RlZCBvciBub3QsIHdpbGwgdXNlIGEgbW9yZVxuICAgKiByZWNlbnQgc25hcHNob3Qgb2YgdGhlIHN1YnNjcmlwdGlvbiBsaXN0LlxuICAgKlxuICAgKiAyLiBUaGUgbGlzdGVuZXIgc2hvdWxkIG5vdCBleHBlY3QgdG8gc2VlIGFsbCBzdGF0ZSBjaGFuZ2VzLCBhcyB0aGUgc3RhdGVcbiAgICogbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIGEgbmVzdGVkIGBkaXNwYXRjaCgpYCBiZWZvcmVcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcbiAgICogcmVnaXN0ZXJlZCBiZWZvcmUgdGhlIGBkaXNwYXRjaCgpYCBzdGFydGVkIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGxhdGVzdFxuICAgKiBzdGF0ZSBieSB0aGUgdGltZSBpdCBleGl0cy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIG9uIGV2ZXJ5IGRpc3BhdGNoLlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoaXMgY2hhbmdlIGxpc3RlbmVyLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQpIDogXCJFeHBlY3RlZCB0aGUgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihsaXN0ZW5lcikgKyBcIidcIik7XG4gICAgfVxuXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDUpIDogJ1lvdSBtYXkgbm90IGNhbGwgc3RvcmUuc3Vic2NyaWJlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiAnICsgJ0lmIHlvdSB3b3VsZCBsaWtlIHRvIGJlIG5vdGlmaWVkIGFmdGVyIHRoZSBzdG9yZSBoYXMgYmVlbiB1cGRhdGVkLCBzdWJzY3JpYmUgZnJvbSBhICcgKyAnY29tcG9uZW50IGFuZCBpbnZva2Ugc3RvcmUuZ2V0U3RhdGUoKSBpbiB0aGUgY2FsbGJhY2sgdG8gYWNjZXNzIHRoZSBsYXRlc3Qgc3RhdGUuICcgKyAnU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2FwaS9zdG9yZSNzdWJzY3JpYmVsaXN0ZW5lciBmb3IgbW9yZSBkZXRhaWxzLicpO1xuICAgIH1cblxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICBuZXh0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICAgIGlmICghaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNikgOiAnWW91IG1heSBub3QgdW5zdWJzY3JpYmUgZnJvbSBhIHN0b3JlIGxpc3RlbmVyIHdoaWxlIHRoZSByZWR1Y2VyIGlzIGV4ZWN1dGluZy4gJyArICdTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvYXBpL3N0b3JlI3N1YnNjcmliZWxpc3RlbmVyIGZvciBtb3JlIGRldGFpbHMuJyk7XG4gICAgICB9XG5cbiAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgIG5leHRMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIGN1cnJlbnRMaXN0ZW5lcnMgPSBudWxsO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cbiAgICpcbiAgICogVGhlIGByZWR1Y2VyYCBmdW5jdGlvbiwgdXNlZCB0byBjcmVhdGUgdGhlIHN0b3JlLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZVxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXG4gICAqIGJlIGNvbnNpZGVyZWQgdGhlICoqbmV4dCoqIHN0YXRlIG9mIHRoZSB0cmVlLCBhbmQgdGhlIGNoYW5nZSBsaXN0ZW5lcnNcbiAgICogd2lsbCBiZSBub3RpZmllZC5cbiAgICpcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBwbGFpbiBvYmplY3QgYWN0aW9ucy4gSWYgeW91IHdhbnQgdG9cbiAgICogZGlzcGF0Y2ggYSBQcm9taXNlLCBhbiBPYnNlcnZhYmxlLCBhIHRodW5rLCBvciBzb21ldGhpbmcgZWxzZSwgeW91IG5lZWQgdG9cbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXG4gICAqIGV4YW1wbGUsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGByZWR1eC10aHVua2AgcGFja2FnZS4gRXZlbiB0aGVcbiAgICogbWlkZGxld2FyZSB3aWxsIGV2ZW50dWFsbHkgZGlzcGF0Y2ggcGxhaW4gb2JqZWN0IGFjdGlvbnMgdXNpbmcgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gQSBwbGFpbiBvYmplY3QgcmVwcmVzZW50aW5nIOKAnHdoYXQgY2hhbmdlZOKAnS4gSXQgaXNcbiAgICogYSBnb29kIGlkZWEgdG8ga2VlcCBhY3Rpb25zIHNlcmlhbGl6YWJsZSBzbyB5b3UgY2FuIHJlY29yZCBhbmQgcmVwbGF5IHVzZXJcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcbiAgICogYSBgdHlwZWAgcHJvcGVydHkgd2hpY2ggbWF5IG5vdCBiZSBgdW5kZWZpbmVkYC4gSXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlXG4gICAqIHN0cmluZyBjb25zdGFudHMgZm9yIGFjdGlvbiB0eXBlcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH0gRm9yIGNvbnZlbmllbmNlLCB0aGUgc2FtZSBhY3Rpb24gb2JqZWN0IHlvdSBkaXNwYXRjaGVkLlxuICAgKlxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXG4gICAqIHJldHVybiBzb21ldGhpbmcgZWxzZSAoZm9yIGV4YW1wbGUsIGEgUHJvbWlzZSB5b3UgY2FuIGF3YWl0KS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNykgOiBcIkFjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiBJbnN0ZWFkLCB0aGUgYWN0dWFsIHR5cGUgd2FzOiAnXCIgKyBraW5kT2YoYWN0aW9uKSArIFwiJy4gWW91IG1heSBuZWVkIHRvIGFkZCBtaWRkbGV3YXJlIHRvIHlvdXIgc3RvcmUgc2V0dXAgdG8gaGFuZGxlIGRpc3BhdGNoaW5nIG90aGVyIHZhbHVlcywgc3VjaCBhcyAncmVkdXgtdGh1bmsnIHRvIGhhbmRsZSBkaXNwYXRjaGluZyBmdW5jdGlvbnMuIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNC1zdG9yZSNtaWRkbGV3YXJlIGFuZCBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNi1hc3luYy1sb2dpYyN1c2luZy10aGUtcmVkdXgtdGh1bmstbWlkZGxld2FyZSBmb3IgZXhhbXBsZXMuXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYWN0aW9uLnR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg4KSA6ICdBY3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRlZmluZWQgXCJ0eXBlXCIgcHJvcGVydHkuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGFuIGFjdGlvbiB0eXBlIHN0cmluZyBjb25zdGFudC4nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoOSkgOiAnUmVkdWNlcnMgbWF5IG5vdCBkaXNwYXRjaCBhY3Rpb25zLicpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVycztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBZb3UgbWlnaHQgbmVlZCB0aGlzIGlmIHlvdXIgYXBwIGltcGxlbWVudHMgY29kZSBzcGxpdHRpbmcgYW5kIHlvdSB3YW50IHRvXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcbiAgICogaW1wbGVtZW50IGEgaG90IHJlbG9hZGluZyBtZWNoYW5pc20gZm9yIFJlZHV4LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG5cblxuICBmdW5jdGlvbiByZXBsYWNlUmVkdWNlcihuZXh0UmVkdWNlcikge1xuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEwKSA6IFwiRXhwZWN0ZWQgdGhlIG5leHRSZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBraW5kT2YobmV4dFJlZHVjZXIpKTtcbiAgICB9XG5cbiAgICBjdXJyZW50UmVkdWNlciA9IG5leHRSZWR1Y2VyOyAvLyBUaGlzIGFjdGlvbiBoYXMgYSBzaW1pbGlhciBlZmZlY3QgdG8gQWN0aW9uVHlwZXMuSU5JVC5cbiAgICAvLyBBbnkgcmVkdWNlcnMgdGhhdCBleGlzdGVkIGluIGJvdGggdGhlIG5ldyBhbmQgb2xkIHJvb3RSZWR1Y2VyXG4gICAgLy8gd2lsbCByZWNlaXZlIHRoZSBwcmV2aW91cyBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcbiAgICAvLyB0aGUgbmV3IHN0YXRlIHRyZWUgd2l0aCBhbnkgcmVsZXZhbnQgZGF0YSBmcm9tIHRoZSBvbGQgb25lLlxuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUkVQTEFDRVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBJbnRlcm9wZXJhYmlsaXR5IHBvaW50IGZvciBvYnNlcnZhYmxlL3JlYWN0aXZlIGxpYnJhcmllcy5cbiAgICogQHJldHVybnMge29ic2VydmFibGV9IEEgbWluaW1hbCBvYnNlcnZhYmxlIG9mIHN0YXRlIGNoYW5nZXMuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBvYnNlcnZhYmxlKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIG91dGVyU3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgIHJldHVybiBfcmVmID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbWluaW1hbCBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiBtZXRob2QuXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxuICAgICAgICogVGhlIG9ic2VydmVyIG9iamVjdCBzaG91bGQgaGF2ZSBhIGBuZXh0YCBtZXRob2QuXG4gICAgICAgKiBAcmV0dXJucyB7c3Vic2NyaXB0aW9ufSBBbiBvYmplY3Qgd2l0aCBhbiBgdW5zdWJzY3JpYmVgIG1ldGhvZCB0aGF0IGNhblxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxuICAgICAgICogZW1pc3Npb24gb2YgdmFsdWVzIGZyb20gdGhlIG9ic2VydmFibGUuXG4gICAgICAgKi9cbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZXIgIT09ICdvYmplY3QnIHx8IG9ic2VydmVyID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTEpIDogXCJFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKG9ic2VydmVyKSArIFwiJ1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9ic2VydmVTdGF0ZSgpIHtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChnZXRTdGF0ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlU3RhdGUoKTtcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCBfcmVmWyQkb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBfcmVmO1xuICB9IC8vIFdoZW4gYSBzdG9yZSBpcyBjcmVhdGVkLCBhbiBcIklOSVRcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XG4gIC8vIHJlZHVjZXIgcmV0dXJucyB0aGVpciBpbml0aWFsIHN0YXRlLiBUaGlzIGVmZmVjdGl2ZWx5IHBvcHVsYXRlc1xuICAvLyB0aGUgaW5pdGlhbCBzdGF0ZSB0cmVlLlxuXG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLklOSVRcbiAgfSk7XG4gIHJldHVybiBfcmVmMiA9IHtcbiAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXG4gICAgZ2V0U3RhdGU6IGdldFN0YXRlLFxuICAgIHJlcGxhY2VSZWR1Y2VyOiByZXBsYWNlUmVkdWNlclxuICB9LCBfcmVmMlskJG9ic2VydmFibGVdID0gb2JzZXJ2YWJsZSwgX3JlZjI7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBSZWR1eCBzdG9yZSB0aGF0IGhvbGRzIHRoZSBzdGF0ZSB0cmVlLlxuICpcbiAqICoqV2UgcmVjb21tZW5kIHVzaW5nIGBjb25maWd1cmVTdG9yZWAgZnJvbSB0aGVcbiAqIGBAcmVkdXhqcy90b29sa2l0YCBwYWNrYWdlKiosIHdoaWNoIHJlcGxhY2VzIGBjcmVhdGVTdG9yZWA6XG4gKiAqKmh0dHBzOi8vcmVkdXguanMub3JnL2ludHJvZHVjdGlvbi93aHktcnRrLWlzLXJlZHV4LXRvZGF5KipcbiAqXG4gKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cbiAqXG4gKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XG4gKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXG4gKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxuICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXG4gKlxuICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxuICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cbiAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcbiAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXG4gKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XG4gKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxuICpcbiAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXG4gKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXG4gKi9cblxudmFyIGxlZ2FjeV9jcmVhdGVTdG9yZSA9IGNyZWF0ZVN0b3JlO1xuXG4vKipcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG5cblxuICB0cnkge1xuICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgaWYgeW91IGVuYWJsZVxuICAgIC8vIFwiYnJlYWsgb24gYWxsIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIGNvbnNvbGUsXG4gICAgLy8gaXQgd291bGQgcGF1c2UgdGhlIGV4ZWN1dGlvbiBhdCB0aGlzIGxpbmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cbn1cblxuZnVuY3Rpb24gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShpbnB1dFN0YXRlLCByZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpIHtcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xuICB2YXIgYXJndW1lbnROYW1lID0gYWN0aW9uICYmIGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlcy5JTklUID8gJ3ByZWxvYWRlZFN0YXRlIGFyZ3VtZW50IHBhc3NlZCB0byBjcmVhdGVTdG9yZScgOiAncHJldmlvdXMgc3RhdGUgcmVjZWl2ZWQgYnkgdGhlIHJlZHVjZXInO1xuXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ1N0b3JlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCByZWR1Y2VyLiBNYWtlIHN1cmUgdGhlIGFyZ3VtZW50IHBhc3NlZCAnICsgJ3RvIGNvbWJpbmVSZWR1Y2VycyBpcyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSByZWR1Y2Vycy4nO1xuICB9XG5cbiAgaWYgKCFpc1BsYWluT2JqZWN0KGlucHV0U3RhdGUpKSB7XG4gICAgcmV0dXJuIFwiVGhlIFwiICsgYXJndW1lbnROYW1lICsgXCIgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiXCIgKyBraW5kT2YoaW5wdXRTdGF0ZSkgKyBcIlxcXCIuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgXCIgKyAoXCJrZXlzOiBcXFwiXCIgKyByZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKSArIFwiXFxcIlwiKTtcbiAgfVxuXG4gIHZhciB1bmV4cGVjdGVkS2V5cyA9IE9iamVjdC5rZXlzKGlucHV0U3RhdGUpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICFyZWR1Y2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XTtcbiAgfSk7XG4gIHVuZXhwZWN0ZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldID0gdHJ1ZTtcbiAgfSk7XG4gIGlmIChhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVzLlJFUExBQ0UpIHJldHVybjtcblxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBcIlVuZXhwZWN0ZWQgXCIgKyAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMSA/ICdrZXlzJyA6ICdrZXknKSArIFwiIFwiICsgKFwiXFxcIlwiICsgdW5leHBlY3RlZEtleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCIgZm91bmQgaW4gXCIgKyBhcmd1bWVudE5hbWUgKyBcIi4gXCIpICsgXCJFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6IFwiICsgKFwiXFxcIlwiICsgcmVkdWNlcktleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xuICBPYmplY3Qua2V5cyhyZWR1Y2VycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHJlZHVjZXIgPSByZWR1Y2Vyc1trZXldO1xuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwge1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuSU5JVFxuICAgIH0pO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMikgOiBcIlRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHJldHVybmVkIHVuZGVmaW5lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFwiICsgXCJJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgXCIgKyBcImV4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgXCIgKyBcIm5vdCBiZSB1bmRlZmluZWQuIElmIHlvdSBkb24ndCB3YW50IHRvIHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsIFwiICsgXCJ5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5QUk9CRV9VTktOT1dOX0FDVElPTigpXG4gICAgfSkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMykgOiBcIlRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIHByb2JlZCB3aXRoIGEgcmFuZG9tIHR5cGUuIFwiICsgKFwiRG9uJ3QgdHJ5IHRvIGhhbmRsZSAnXCIgKyBBY3Rpb25UeXBlcy5JTklUICsgXCInIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiIFwiKSArIFwibmFtZXNwYWNlLiBUaGV5IGFyZSBjb25zaWRlcmVkIHByaXZhdGUuIEluc3RlYWQsIHlvdSBtdXN0IHJldHVybiB0aGUgXCIgKyBcImN1cnJlbnQgc3RhdGUgZm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHVubGVzcyBpdCBpcyB1bmRlZmluZWQsIFwiICsgXCJpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgXCIgKyBcImFjdGlvbiB0eXBlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgbm90IGJlIHVuZGVmaW5lZCwgYnV0IGNhbiBiZSBudWxsLlwiKTtcbiAgICB9XG4gIH0pO1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBkaWZmZXJlbnQgcmVkdWNlciBmdW5jdGlvbnMsIGludG8gYSBzaW5nbGVcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcbiAqIGludG8gYSBzaW5nbGUgc3RhdGUgb2JqZWN0LCB3aG9zZSBrZXlzIGNvcnJlc3BvbmQgdG8gdGhlIGtleXMgb2YgdGhlIHBhc3NlZFxuICogcmVkdWNlciBmdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlZHVjZXJzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgY29ycmVzcG9uZCB0byBkaWZmZXJlbnRcbiAqIHJlZHVjZXIgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBjb21iaW5lZCBpbnRvIG9uZS4gT25lIGhhbmR5IHdheSB0byBvYnRhaW5cbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXG4gKiB1bmRlZmluZWQgZm9yIGFueSBhY3Rpb24uIEluc3RlYWQsIHRoZXkgc2hvdWxkIHJldHVybiB0aGVpciBpbml0aWFsIHN0YXRlXG4gKiBpZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZW0gd2FzIHVuZGVmaW5lZCwgYW5kIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnlcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHJlZHVjZXIgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGV2ZXJ5IHJlZHVjZXIgaW5zaWRlIHRoZVxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxuICovXG5cblxuZnVuY3Rpb24gY29tYmluZVJlZHVjZXJzKHJlZHVjZXJzKSB7XG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZHVjZXJLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2FybmluZyhcIk5vIHJlZHVjZXIgcHJvdmlkZWQgZm9yIGtleSBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaW5hbFJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMoZmluYWxSZWR1Y2Vycyk7IC8vIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgd2FybiBhYm91dCB0aGUgc2FtZVxuICAvLyBrZXlzIG11bHRpcGxlIHRpbWVzLlxuXG4gIHZhciB1bmV4cGVjdGVkS2V5Q2FjaGU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB7fTtcbiAgfVxuXG4gIHZhciBzaGFwZUFzc2VydGlvbkVycm9yO1xuXG4gIHRyeSB7XG4gICAgYXNzZXJ0UmVkdWNlclNoYXBlKGZpbmFsUmVkdWNlcnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2hhcGVBc3NlcnRpb25FcnJvciA9IGU7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gY29tYmluYXRpb24oc3RhdGUsIGFjdGlvbikge1xuICAgIGlmIChzdGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGF0ZSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChzaGFwZUFzc2VydGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBzaGFwZUFzc2VydGlvbkVycm9yO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XG5cbiAgICAgIGlmICh3YXJuaW5nTWVzc2FnZSkge1xuICAgICAgICB3YXJuaW5nKHdhcm5pbmdNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcbiAgICAgIHZhciByZWR1Y2VyID0gZmluYWxSZWR1Y2Vyc1tfa2V5XTtcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVbX2tleV07XG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xuXG4gICAgICBpZiAodHlwZW9mIG5leHRTdGF0ZUZvcktleSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE0KSA6IFwiV2hlbiBjYWxsZWQgd2l0aCBhbiBhY3Rpb24gb2YgdHlwZSBcIiArIChhY3Rpb25UeXBlID8gXCJcXFwiXCIgKyBTdHJpbmcoYWN0aW9uVHlwZSkgKyBcIlxcXCJcIiA6ICcodW5rbm93biB0eXBlKScpICsgXCIsIHRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsgX2tleSArIFwiXFxcIiByZXR1cm5lZCB1bmRlZmluZWQuIFwiICsgXCJUbyBpZ25vcmUgYW4gYWN0aW9uLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgcHJldmlvdXMgc3RhdGUuIFwiICsgXCJJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC5cIik7XG4gICAgICB9XG5cbiAgICAgIG5leHRTdGF0ZVtfa2V5XSA9IG5leHRTdGF0ZUZvcktleTtcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcbiAgICB9XG5cbiAgICBoYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZCB8fCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aDtcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaChhY3Rpb25DcmVhdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb24gY3JlYXRvcnMsIGludG8gYW4gb2JqZWN0IHdpdGggdGhlXG4gKiBzYW1lIGtleXMsIGJ1dCB3aXRoIGV2ZXJ5IGZ1bmN0aW9uIHdyYXBwZWQgaW50byBhIGBkaXNwYXRjaGAgY2FsbCBzbyB0aGV5XG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcbiAqIGBzdG9yZS5kaXNwYXRjaChNeUFjdGlvbkNyZWF0b3JzLmRvU29tZXRoaW5nKCkpYCB5b3Vyc2VsZiBqdXN0IGZpbmUuXG4gKlxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhbiBhY3Rpb24gY3JlYXRvciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXG4gKiBhbmQgZ2V0IGEgZGlzcGF0Y2ggd3JhcHBlZCBmdW5jdGlvbiBpbiByZXR1cm4uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IGFjdGlvbkNyZWF0b3JzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGFjdGlvblxuICogY3JlYXRvciBmdW5jdGlvbnMuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzYFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaXNwYXRjaCBUaGUgYGRpc3BhdGNoYCBmdW5jdGlvbiBhdmFpbGFibGUgb24geW91ciBSZWR1eFxuICogc3RvcmUuXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gVGhlIG9iamVjdCBtaW1pY2tpbmcgdGhlIG9yaWdpbmFsIG9iamVjdCwgYnV0IHdpdGhcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcbiAqIGZ1bmN0aW9uIGFzIGBhY3Rpb25DcmVhdG9yc2AsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHNvIGJlIGEgc2luZ2xlXG4gKiBmdW5jdGlvbi5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyAhPT0gJ29iamVjdCcgfHwgYWN0aW9uQ3JlYXRvcnMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNikgOiBcImJpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgYnV0IGluc3RlYWQgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihhY3Rpb25DcmVhdG9ycykgKyBcIicuIFwiICsgXCJEaWQgeW91IHdyaXRlIFxcXCJpbXBvcnQgQWN0aW9uQ3JlYXRvcnMgZnJvbVxcXCIgaW5zdGVhZCBvZiBcXFwiaW1wb3J0ICogYXMgQWN0aW9uQ3JlYXRvcnMgZnJvbVxcXCI/XCIpO1xuICB9XG5cbiAgdmFyIGJvdW5kQWN0aW9uQ3JlYXRvcnMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gYWN0aW9uQ3JlYXRvcnMpIHtcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYm91bmRBY3Rpb25DcmVhdG9ycztcbn1cblxuLyoqXG4gKiBDb21wb3NlcyBzaW5nbGUtYXJndW1lbnQgZnVuY3Rpb25zIGZyb20gcmlnaHQgdG8gbGVmdC4gVGhlIHJpZ2h0bW9zdFxuICogZnVuY3Rpb24gY2FuIHRha2UgbXVsdGlwbGUgYXJndW1lbnRzIGFzIGl0IHByb3ZpZGVzIHRoZSBzaWduYXR1cmUgZm9yXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBmdW5jcyBUaGUgZnVuY3Rpb25zIHRvIGNvbXBvc2UuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcbiAqIGZyb20gcmlnaHQgdG8gbGVmdC4gRm9yIGV4YW1wbGUsIGNvbXBvc2UoZiwgZywgaCkgaXMgaWRlbnRpY2FsIHRvIGRvaW5nXG4gKiAoLi4uYXJncykgPT4gZihnKGgoLi4uYXJncykpKS5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmNzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYShiLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0b3JlIGVuaGFuY2VyIHRoYXQgYXBwbGllcyBtaWRkbGV3YXJlIHRvIHRoZSBkaXNwYXRjaCBtZXRob2RcbiAqIG9mIHRoZSBSZWR1eCBzdG9yZS4gVGhpcyBpcyBoYW5keSBmb3IgYSB2YXJpZXR5IG9mIHRhc2tzLCBzdWNoIGFzIGV4cHJlc3NpbmdcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXG4gKlxuICogU2VlIGByZWR1eC10aHVua2AgcGFja2FnZSBhcyBhbiBleGFtcGxlIG9mIHRoZSBSZWR1eCBtaWRkbGV3YXJlLlxuICpcbiAqIEJlY2F1c2UgbWlkZGxld2FyZSBpcyBwb3RlbnRpYWxseSBhc3luY2hyb25vdXMsIHRoaXMgc2hvdWxkIGJlIHRoZSBmaXJzdFxuICogc3RvcmUgZW5oYW5jZXIgaW4gdGhlIGNvbXBvc2l0aW9uIGNoYWluLlxuICpcbiAqIE5vdGUgdGhhdCBlYWNoIG1pZGRsZXdhcmUgd2lsbCBiZSBnaXZlbiB0aGUgYGRpc3BhdGNoYCBhbmQgYGdldFN0YXRlYCBmdW5jdGlvbnNcbiAqIGFzIG5hbWVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBtaWRkbGV3YXJlcyBUaGUgbWlkZGxld2FyZSBjaGFpbiB0byBiZSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHN0b3JlIGVuaGFuY2VyIGFwcGx5aW5nIHRoZSBtaWRkbGV3YXJlLlxuICovXG5cbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RvcmUgPSBjcmVhdGVTdG9yZS5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG5cbiAgICAgIHZhciBfZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTUpIDogJ0Rpc3BhdGNoaW5nIHdoaWxlIGNvbnN0cnVjdGluZyB5b3VyIG1pZGRsZXdhcmUgaXMgbm90IGFsbG93ZWQuICcgKyAnT3RoZXIgbWlkZGxld2FyZSB3b3VsZCBub3QgYmUgYXBwbGllZCB0byB0aGlzIGRpc3BhdGNoLicpO1xuICAgICAgfTtcblxuICAgICAgdmFyIG1pZGRsZXdhcmVBUEkgPSB7XG4gICAgICAgIGdldFN0YXRlOiBzdG9yZS5nZXRTdGF0ZSxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICAgICAgICAgIHJldHVybiBfZGlzcGF0Y2guYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIGNoYWluID0gbWlkZGxld2FyZXMubWFwKGZ1bmN0aW9uIChtaWRkbGV3YXJlKSB7XG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlKG1pZGRsZXdhcmVBUEkpO1xuICAgICAgfSk7XG4gICAgICBfZGlzcGF0Y2ggPSBjb21wb3NlLmFwcGx5KHZvaWQgMCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0b3JlKSwge30sIHtcbiAgICAgICAgZGlzcGF0Y2g6IF9kaXNwYXRjaFxuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuLypcbiAqIFRoaXMgaXMgYSBkdW1teSBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgZnVuY3Rpb24gbmFtZSBoYXMgYmVlbiBhbHRlcmVkIGJ5IG1pbmlmaWNhdGlvbi5cbiAqIElmIHRoZSBmdW5jdGlvbiBoYXMgYmVlbiBtaW5pZmllZCBhbmQgTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJywgd2FybiB0aGUgdXNlci5cbiAqL1xuXG5mdW5jdGlvbiBpc0NydXNoZWQoKSB7fVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgaXNDcnVzaGVkLm5hbWUgPT09ICdzdHJpbmcnICYmIGlzQ3J1c2hlZC5uYW1lICE9PSAnaXNDcnVzaGVkJykge1xuICB3YXJuaW5nKCdZb3UgYXJlIGN1cnJlbnRseSB1c2luZyBtaW5pZmllZCBjb2RlIG91dHNpZGUgb2YgTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiLiAnICsgJ1RoaXMgbWVhbnMgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgYSBzbG93ZXIgZGV2ZWxvcG1lbnQgYnVpbGQgb2YgUmVkdXguICcgKyAnWW91IGNhbiB1c2UgbG9vc2UtZW52aWZ5IChodHRwczovL2dpdGh1Yi5jb20vemVydG9zaC9sb29zZS1lbnZpZnkpIGZvciBicm93c2VyaWZ5ICcgKyAnb3Igc2V0dGluZyBtb2RlIHRvIHByb2R1Y3Rpb24gaW4gd2VicGFjayAoaHR0cHM6Ly93ZWJwYWNrLmpzLm9yZy9jb25jZXB0cy9tb2RlLykgJyArICd0byBlbnN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgY29kZSBmb3IgeW91ciBwcm9kdWN0aW9uIGJ1aWxkLicpO1xufVxuXG5leHBvcnQgeyBBY3Rpb25UeXBlcyBhcyBfX0RPX05PVF9VU0VfX0FjdGlvblR5cGVzLCBhcHBseU1pZGRsZXdhcmUsIGJpbmRBY3Rpb25DcmVhdG9ycywgY29tYmluZVJlZHVjZXJzLCBjb21wb3NlLCBjcmVhdGVTdG9yZSwgbGVnYWN5X2NyZWF0ZVN0b3JlIH07XG4iLCIvKiogQSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYSBwb3RlbnRpYWwgXCJleHRyYSBhcmd1bWVudFwiIHZhbHVlIHRvIGJlIGluamVjdGVkIGxhdGVyLFxyXG4gKiBhbmQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgdGh1bmsgbWlkZGxld2FyZSB0aGF0IHVzZXMgdGhhdCB2YWx1ZVxyXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRodW5rTWlkZGxld2FyZShleHRyYUFyZ3VtZW50KSB7XG4gIC8vIFN0YW5kYXJkIFJlZHV4IG1pZGRsZXdhcmUgZGVmaW5pdGlvbiBwYXR0ZXJuOlxuICAvLyBTZWU6IGh0dHBzOi8vcmVkdXguanMub3JnL3R1dG9yaWFscy9mdW5kYW1lbnRhbHMvcGFydC00LXN0b3JlI3dyaXRpbmctY3VzdG9tLW1pZGRsZXdhcmVcbiAgdmFyIG1pZGRsZXdhcmUgPSBmdW5jdGlvbiBtaWRkbGV3YXJlKF9yZWYpIHtcbiAgICB2YXIgZGlzcGF0Y2ggPSBfcmVmLmRpc3BhdGNoLFxuICAgICAgICBnZXRTdGF0ZSA9IF9yZWYuZ2V0U3RhdGU7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICAvLyBUaGUgdGh1bmsgbWlkZGxld2FyZSBsb29rcyBmb3IgYW55IGZ1bmN0aW9ucyB0aGF0IHdlcmUgcGFzc2VkIHRvIGBzdG9yZS5kaXNwYXRjaGAuXG4gICAgICAgIC8vIElmIHRoaXMgXCJhY3Rpb25cIiBpcyByZWFsbHkgYSBmdW5jdGlvbiwgY2FsbCBpdCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gSW5qZWN0IHRoZSBzdG9yZSdzIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgbWV0aG9kcywgYXMgd2VsbCBhcyBhbnkgXCJleHRyYSBhcmdcIlxuICAgICAgICAgIHJldHVybiBhY3Rpb24oZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYUFyZ3VtZW50KTtcbiAgICAgICAgfSAvLyBPdGhlcndpc2UsIHBhc3MgdGhlIGFjdGlvbiBkb3duIHRoZSBtaWRkbGV3YXJlIGNoYWluIGFzIHVzdWFsXG5cblxuICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xuXG4gIHJldHVybiBtaWRkbGV3YXJlO1xufVxuXG52YXIgdGh1bmsgPSBjcmVhdGVUaHVua01pZGRsZXdhcmUoKTsgLy8gQXR0YWNoIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIHNvIHVzZXJzIGNhbiBjcmVhdGUgYSBjdXN0b21pemVkIHZlcnNpb25cbi8vIHdpdGggd2hhdGV2ZXIgXCJleHRyYSBhcmdcIiB0aGV5IHdhbnQgdG8gaW5qZWN0IGludG8gdGhlaXIgdGh1bmtzXG5cbnRodW5rLndpdGhFeHRyYUFyZ3VtZW50ID0gY3JlYXRlVGh1bmtNaWRkbGV3YXJlO1xuZXhwb3J0IGRlZmF1bHQgdGh1bms7IiwidmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcbn0pKCk7XHJcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufTtcclxudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXHJcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xyXG4gICAgcmV0dXJuIHRvO1xyXG59O1xyXG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG52YXIgX19kZWZQcm9wcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xyXG52YXIgX19nZXRPd25Qcm9wRGVzY3MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcclxudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xyXG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcclxudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XHJcbnZhciBfX2RlZk5vcm1hbFByb3AgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7IHJldHVybiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7IH07XHJcbnZhciBfX3NwcmVhZFZhbHVlcyA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXHJcbiAgICAgICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxyXG4gICAgICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XHJcbiAgICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9jID0gX19nZXRPd25Qcm9wU3ltYm9scyhiKTsgX2kgPCBfYy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIHByb3AgPSBfY1tfaV07XHJcbiAgICAgICAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcclxuICAgICAgICAgICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufTtcclxudmFyIF9fc3ByZWFkUHJvcHMgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gX19kZWZQcm9wcyhhLCBfX2dldE93blByb3BEZXNjcyhiKSk7IH07XHJcbnZhciBfX2FzeW5jID0gZnVuY3Rpb24gKF9fdGhpcywgX19hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICB2YXIgZnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwKGdlbmVyYXRvci50aHJvdyh2YWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBzdGVwID0gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguZG9uZSA/IHJlc29sdmUoeC52YWx1ZSkgOiBQcm9taXNlLnJlc29sdmUoeC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfTtcclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkoX190aGlzLCBfX2FyZ3VtZW50cykpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuLy8gc3JjL2luZGV4LnRzXHJcbmltcG9ydCB7IGVuYWJsZUVTNSB9IGZyb20gXCJpbW1lclwiO1xyXG5leHBvcnQgKiBmcm9tIFwicmVkdXhcIjtcclxuaW1wb3J0IHsgZGVmYXVsdCBhcyBkZWZhdWx0MiwgY3VycmVudCBhcyBjdXJyZW50MiwgZnJlZXplLCBvcmlnaW5hbCwgaXNEcmFmdCBhcyBpc0RyYWZ0NCB9IGZyb20gXCJpbW1lclwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciBhcyBjcmVhdGVTZWxlY3RvcjIgfSBmcm9tIFwicmVzZWxlY3RcIjtcclxuLy8gc3JjL2NyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yLnRzXHJcbmltcG9ydCB7IGN1cnJlbnQsIGlzRHJhZnQgfSBmcm9tIFwiaW1tZXJcIjtcclxuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IgfSBmcm9tIFwicmVzZWxlY3RcIjtcclxudmFyIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgdmFyIHNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IuYXBwbHkodm9pZCAwLCBhcmdzKTtcclxuICAgIHZhciB3cmFwcGVkU2VsZWN0b3IgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB2YXIgcmVzdCA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3RbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZWxlY3Rvci5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2lzRHJhZnQodmFsdWUpID8gY3VycmVudCh2YWx1ZSkgOiB2YWx1ZV0sIHJlc3QpKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gd3JhcHBlZFNlbGVjdG9yO1xyXG59O1xyXG4vLyBzcmMvY29uZmlndXJlU3RvcmUudHNcclxuaW1wb3J0IHsgY3JlYXRlU3RvcmUsIGNvbXBvc2UgYXMgY29tcG9zZTIsIGFwcGx5TWlkZGxld2FyZSwgY29tYmluZVJlZHVjZXJzIH0gZnJvbSBcInJlZHV4XCI7XHJcbi8vIHNyYy9kZXZ0b29sc0V4dGVuc2lvbi50c1xyXG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSBcInJlZHV4XCI7XHJcbnZhciBjb21wb3NlV2l0aERldlRvb2xzID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfXyA6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIHJldHVybiB2b2lkIDA7XHJcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gXCJvYmplY3RcIilcclxuICAgICAgICByZXR1cm4gY29tcG9zZTtcclxuICAgIHJldHVybiBjb21wb3NlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcbnZhciBkZXZUb29sc0VuaGFuY2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyA/IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fIDogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChub29wMikge1xyXG4gICAgICAgIHJldHVybiBub29wMjtcclxuICAgIH07XHJcbn07XHJcbi8vIHNyYy9pc1BsYWluT2JqZWN0LnRzXHJcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcclxuICAgIGlmIChwcm90byA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIHZhciBiYXNlUHJvdG8gPSBwcm90bztcclxuICAgIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZVByb3RvKSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGJhc2VQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlUHJvdG8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3RvID09PSBiYXNlUHJvdG87XHJcbn1cclxuLy8gc3JjL2dldERlZmF1bHRNaWRkbGV3YXJlLnRzXHJcbmltcG9ydCB0aHVua01pZGRsZXdhcmUgZnJvbSBcInJlZHV4LXRodW5rXCI7XHJcbi8vIHNyYy91dGlscy50c1xyXG5pbXBvcnQgY3JlYXRlTmV4dFN0YXRlLCB7IGlzRHJhZnRhYmxlIH0gZnJvbSBcImltbWVyXCI7XHJcbmZ1bmN0aW9uIGdldFRpbWVNZWFzdXJlVXRpbHMobWF4RGVsYXksIGZuTmFtZSkge1xyXG4gICAgdmFyIGVsYXBzZWQgPSAwO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtZWFzdXJlVGltZTogZnVuY3Rpb24gKGZuKSB7XHJcbiAgICAgICAgICAgIHZhciBzdGFydGVkID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgICAgIGVsYXBzZWQgKz0gZmluaXNoZWQgLSBzdGFydGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB3YXJuSWZFeGNlZWRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoZWxhcHNlZCA+IG1heERlbGF5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZm5OYW1lICsgXCIgdG9vayBcIiArIGVsYXBzZWQgKyBcIm1zLCB3aGljaCBpcyBtb3JlIHRoYW4gdGhlIHdhcm5pbmcgdGhyZXNob2xkIG9mIFwiICsgbWF4RGVsYXkgKyBcIm1zLiBcXG5JZiB5b3VyIHN0YXRlIG9yIGFjdGlvbnMgYXJlIHZlcnkgbGFyZ2UsIHlvdSBtYXkgd2FudCB0byBkaXNhYmxlIHRoZSBtaWRkbGV3YXJlIGFzIGl0IG1pZ2h0IGNhdXNlIHRvbyBtdWNoIG9mIGEgc2xvd2Rvd24gaW4gZGV2ZWxvcG1lbnQgbW9kZS4gU2VlIGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2dldERlZmF1bHRNaWRkbGV3YXJlIGZvciBpbnN0cnVjdGlvbnMuXFxuSXQgaXMgZGlzYWJsZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMsIHNvIHlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG52YXIgTWlkZGxld2FyZUFycmF5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgX19leHRlbmRzKE1pZGRsZXdhcmVBcnJheSwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIE1pZGRsZXdhcmVBcnJheSgpIHtcclxuICAgICAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3MpIHx8IHRoaXM7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlKTtcclxuICAgICAgICByZXR1cm4gX3RoaXM7XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWlkZGxld2FyZUFycmF5LCBTeW1ib2wuc3BlY2llcywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTWlkZGxld2FyZUFycmF5O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIE1pZGRsZXdhcmVBcnJheS5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcnIgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcnJbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuY29uY2F0LmFwcGx5KHRoaXMsIGFycik7XHJcbiAgICB9O1xyXG4gICAgTWlkZGxld2FyZUFycmF5LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcnIgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcnJbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgKE1pZGRsZXdhcmVBcnJheS5iaW5kLmFwcGx5KE1pZGRsZXdhcmVBcnJheSwgX19zcHJlYWRBcnJheShbdm9pZCAwXSwgYXJyWzBdLmNvbmNhdCh0aGlzKSkpKSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IChNaWRkbGV3YXJlQXJyYXkuYmluZC5hcHBseShNaWRkbGV3YXJlQXJyYXksIF9fc3ByZWFkQXJyYXkoW3ZvaWQgMF0sIGFyci5jb25jYXQodGhpcykpKSkoKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gTWlkZGxld2FyZUFycmF5O1xyXG59KEFycmF5KSk7XHJcbmZ1bmN0aW9uIGZyZWV6ZURyYWZ0YWJsZSh2YWwpIHtcclxuICAgIHJldHVybiBpc0RyYWZ0YWJsZSh2YWwpID8gY3JlYXRlTmV4dFN0YXRlKHZhbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgfSkgOiB2YWw7XHJcbn1cclxuLy8gc3JjL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50c1xyXG52YXIgaXNQcm9kdWN0aW9uID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiO1xyXG52YXIgcHJlZml4ID0gXCJJbnZhcmlhbnQgZmFpbGVkXCI7XHJcbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIG1lc3NhZ2UpIHtcclxuICAgIGlmIChjb25kaXRpb24pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoaXNQcm9kdWN0aW9uKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByZWZpeCk7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJlZml4ICsgXCI6IFwiICsgKG1lc3NhZ2UgfHwgXCJcIikpO1xyXG59XHJcbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmosIHNlcmlhbGl6ZXIsIGluZGVudCwgZGVjeWNsZXIpIHtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIGdldFNlcmlhbGl6ZShzZXJpYWxpemVyLCBkZWN5Y2xlciksIGluZGVudCk7XHJcbn1cclxuZnVuY3Rpb24gZ2V0U2VyaWFsaXplKHNlcmlhbGl6ZXIsIGRlY3ljbGVyKSB7XHJcbiAgICB2YXIgc3RhY2sgPSBbXSwga2V5cyA9IFtdO1xyXG4gICAgaWYgKCFkZWN5Y2xlcilcclxuICAgICAgICBkZWN5Y2xlciA9IGZ1bmN0aW9uIChfLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT09IHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiW0NpcmN1bGFyIH5dXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBcIltDaXJjdWxhciB+LlwiICsga2V5cy5zbGljZSgwLCBzdGFjay5pbmRleE9mKHZhbHVlKSkuam9pbihcIi5cIikgKyBcIl1cIjtcclxuICAgICAgICB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIHRoaXNQb3MgPSBzdGFjay5pbmRleE9mKHRoaXMpO1xyXG4gICAgICAgICAgICB+dGhpc1BvcyA/IHN0YWNrLnNwbGljZSh0aGlzUG9zICsgMSkgOiBzdGFjay5wdXNoKHRoaXMpO1xyXG4gICAgICAgICAgICB+dGhpc1BvcyA/IGtleXMuc3BsaWNlKHRoaXNQb3MsIEluZmluaXR5LCBrZXkpIDoga2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIGlmICh+c3RhY2suaW5kZXhPZih2YWx1ZSkpXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlY3ljbGVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIgPT0gbnVsbCA/IHZhbHVlIDogc2VyaWFsaXplci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc0ltbXV0YWJsZURlZmF1bHQodmFsdWUpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT0gbnVsbCB8fCBPYmplY3QuaXNGcm96ZW4odmFsdWUpO1xyXG59XHJcbmZ1bmN0aW9uIHRyYWNrRm9yTXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgb2JqKSB7XHJcbiAgICB2YXIgdHJhY2tlZFByb3BlcnRpZXMgPSB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmopO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkZXRlY3RNdXRhdGlvbnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIHRyYWNrZWRQcm9wZXJ0aWVzLCBvYmopO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gdHJhY2tQcm9wZXJ0aWVzKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgb2JqLCBwYXRoKSB7XHJcbiAgICBpZiAoaWdub3JlUGF0aHMgPT09IHZvaWQgMCkgeyBpZ25vcmVQYXRocyA9IFtdOyB9XHJcbiAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBcIlwiOyB9XHJcbiAgICB2YXIgdHJhY2tlZCA9IHsgdmFsdWU6IG9iaiB9O1xyXG4gICAgaWYgKCFpc0ltbXV0YWJsZShvYmopKSB7XHJcbiAgICAgICAgdHJhY2tlZC5jaGlsZHJlbiA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkUGF0aCA9IHBhdGggPyBwYXRoICsgXCIuXCIgKyBrZXkgOiBrZXk7XHJcbiAgICAgICAgICAgIGlmIChpZ25vcmVQYXRocy5sZW5ndGggJiYgaWdub3JlUGF0aHMuaW5kZXhPZihjaGlsZFBhdGgpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJhY2tlZC5jaGlsZHJlbltrZXldID0gdHJhY2tQcm9wZXJ0aWVzKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgb2JqW2tleV0sIGNoaWxkUGF0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRyYWNrZWQ7XHJcbn1cclxuZnVuY3Rpb24gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgdHJhY2tlZFByb3BlcnR5LCBvYmosIHNhbWVQYXJlbnRSZWYsIHBhdGgpIHtcclxuICAgIGlmIChpZ25vcmVQYXRocyA9PT0gdm9pZCAwKSB7IGlnbm9yZVBhdGhzID0gW107IH1cclxuICAgIGlmIChzYW1lUGFyZW50UmVmID09PSB2b2lkIDApIHsgc2FtZVBhcmVudFJlZiA9IGZhbHNlOyB9XHJcbiAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBcIlwiOyB9XHJcbiAgICB2YXIgcHJldk9iaiA9IHRyYWNrZWRQcm9wZXJ0eSA/IHRyYWNrZWRQcm9wZXJ0eS52YWx1ZSA6IHZvaWQgMDtcclxuICAgIHZhciBzYW1lUmVmID0gcHJldk9iaiA9PT0gb2JqO1xyXG4gICAgaWYgKHNhbWVQYXJlbnRSZWYgJiYgIXNhbWVSZWYgJiYgIU51bWJlci5pc05hTihvYmopKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogdHJ1ZSwgcGF0aDogcGF0aCB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlzSW1tdXRhYmxlKHByZXZPYmopIHx8IGlzSW1tdXRhYmxlKG9iaikpIHtcclxuICAgICAgICByZXR1cm4geyB3YXNNdXRhdGVkOiBmYWxzZSB9O1xyXG4gICAgfVxyXG4gICAgdmFyIGtleXNUb0RldGVjdCA9IHt9O1xyXG4gICAgZm9yICh2YXIga2V5IGluIHRyYWNrZWRQcm9wZXJ0eS5jaGlsZHJlbikge1xyXG4gICAgICAgIGtleXNUb0RldGVjdFtrZXldID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcclxuICAgICAgICBrZXlzVG9EZXRlY3Rba2V5XSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBrZXkgaW4ga2V5c1RvRGV0ZWN0KSB7XHJcbiAgICAgICAgdmFyIGNoaWxkUGF0aCA9IHBhdGggPyBwYXRoICsgXCIuXCIgKyBrZXkgOiBrZXk7XHJcbiAgICAgICAgaWYgKGlnbm9yZVBhdGhzLmxlbmd0aCAmJiBpZ25vcmVQYXRocy5pbmRleE9mKGNoaWxkUGF0aCkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzdWx0ID0gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuW2tleV0sIG9ialtrZXldLCBzYW1lUmVmLCBjaGlsZFBhdGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHQud2FzTXV0YXRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IHdhc011dGF0ZWQ6IGZhbHNlIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBuZXh0KGFjdGlvbik7IH07IH07IH07XHJcbiAgICB9XHJcbiAgICB2YXIgX2MgPSBvcHRpb25zLmlzSW1tdXRhYmxlLCBpc0ltbXV0YWJsZSA9IF9jID09PSB2b2lkIDAgPyBpc0ltbXV0YWJsZURlZmF1bHQgOiBfYywgaWdub3JlZFBhdGhzID0gb3B0aW9ucy5pZ25vcmVkUGF0aHMsIF9kID0gb3B0aW9ucy53YXJuQWZ0ZXIsIHdhcm5BZnRlciA9IF9kID09PSB2b2lkIDAgPyAzMiA6IF9kLCBpZ25vcmUgPSBvcHRpb25zLmlnbm9yZTtcclxuICAgIGlnbm9yZWRQYXRocyA9IGlnbm9yZWRQYXRocyB8fCBpZ25vcmU7XHJcbiAgICB2YXIgdHJhY2sgPSB0cmFja0Zvck11dGF0aW9ucy5iaW5kKG51bGwsIGlzSW1tdXRhYmxlLCBpZ25vcmVkUGF0aHMpO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgIHZhciBnZXRTdGF0ZSA9IF9jLmdldFN0YXRlO1xyXG4gICAgICAgIHZhciBzdGF0ZSA9IGdldFN0YXRlKCk7XHJcbiAgICAgICAgdmFyIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICAgICAgdmFyIG1lYXN1cmVVdGlscyA9IGdldFRpbWVNZWFzdXJlVXRpbHMod2FybkFmdGVyLCBcIkltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZVwiKTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyYWNrZXIuZGV0ZWN0TXV0YXRpb25zKCk7XHJcbiAgICAgICAgICAgICAgICB0cmFja2VyID0gdHJhY2soc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgaW52YXJpYW50KCFyZXN1bHQud2FzTXV0YXRlZCwgXCJBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBiZXR3ZWVuIGRpc3BhdGNoZXMsIGluIHRoZSBwYXRoICdcIiArIChyZXN1bHQucGF0aCB8fCBcIlwiKSArIFwiJy4gIFRoaXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvci4gKGh0dHBzOi8vcmVkdXguanMub3JnL3N0eWxlLWd1aWRlL3N0eWxlLWd1aWRlI2RvLW5vdC1tdXRhdGUtc3RhdGUpXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdmFyIGRpc3BhdGNoZWRBY3Rpb24gPSBuZXh0KGFjdGlvbik7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cmFja2VyLmRldGVjdE11dGF0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC53YXNNdXRhdGVkICYmIGludmFyaWFudCghcmVzdWx0Lndhc011dGF0ZWQsIFwiQSBzdGF0ZSBtdXRhdGlvbiB3YXMgZGV0ZWN0ZWQgaW5zaWRlIGEgZGlzcGF0Y2gsIGluIHRoZSBwYXRoOiBcIiArIChyZXN1bHQucGF0aCB8fCBcIlwiKSArIFwiLiBUYWtlIGEgbG9vayBhdCB0aGUgcmVkdWNlcihzKSBoYW5kbGluZyB0aGUgYWN0aW9uIFwiICsgc3RyaW5naWZ5KGFjdGlvbikgKyBcIi4gKGh0dHBzOi8vcmVkdXguanMub3JnL3N0eWxlLWd1aWRlL3N0eWxlLWd1aWRlI2RvLW5vdC1tdXRhdGUtc3RhdGUpXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkaXNwYXRjaGVkQWN0aW9uO1xyXG4gICAgICAgIH07IH07XHJcbiAgICB9O1xyXG59XHJcbi8vIHNyYy9zZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUudHNcclxuZnVuY3Rpb24gaXNQbGFpbih2YWwpIHtcclxuICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcclxuICAgIHJldHVybiB2YWwgPT0gbnVsbCB8fCB0eXBlID09PSBcInN0cmluZ1wiIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiIHx8IHR5cGUgPT09IFwibnVtYmVyXCIgfHwgQXJyYXkuaXNBcnJheSh2YWwpIHx8IGlzUGxhaW5PYmplY3QodmFsKTtcclxufVxyXG5mdW5jdGlvbiBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUodmFsdWUsIHBhdGgsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkUGF0aHMpIHtcclxuICAgIGlmIChwYXRoID09PSB2b2lkIDApIHsgcGF0aCA9IFwiXCI7IH1cclxuICAgIGlmIChpc1NlcmlhbGl6YWJsZSA9PT0gdm9pZCAwKSB7IGlzU2VyaWFsaXphYmxlID0gaXNQbGFpbjsgfVxyXG4gICAgaWYgKGlnbm9yZWRQYXRocyA9PT0gdm9pZCAwKSB7IGlnbm9yZWRQYXRocyA9IFtdOyB9XHJcbiAgICB2YXIgZm91bmROZXN0ZWRTZXJpYWxpemFibGU7XHJcbiAgICBpZiAoIWlzU2VyaWFsaXphYmxlKHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtleVBhdGg6IHBhdGggfHwgXCI8cm9vdD5cIixcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB2YXIgZW50cmllcyA9IGdldEVudHJpZXMgIT0gbnVsbCA/IGdldEVudHJpZXModmFsdWUpIDogT2JqZWN0LmVudHJpZXModmFsdWUpO1xyXG4gICAgdmFyIGhhc0lnbm9yZWRQYXRocyA9IGlnbm9yZWRQYXRocy5sZW5ndGggPiAwO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwLCBlbnRyaWVzXzEgPSBlbnRyaWVzOyBfaSA8IGVudHJpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICB2YXIgX2MgPSBlbnRyaWVzXzFbX2ldLCBrZXkgPSBfY1swXSwgbmVzdGVkVmFsdWUgPSBfY1sxXTtcclxuICAgICAgICB2YXIgbmVzdGVkUGF0aCA9IHBhdGggPyBwYXRoICsgXCIuXCIgKyBrZXkgOiBrZXk7XHJcbiAgICAgICAgaWYgKGhhc0lnbm9yZWRQYXRocyAmJiBpZ25vcmVkUGF0aHMuaW5kZXhPZihuZXN0ZWRQYXRoKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzU2VyaWFsaXphYmxlKG5lc3RlZFZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAga2V5UGF0aDogbmVzdGVkUGF0aCxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBuZXN0ZWRWYWx1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKG5lc3RlZFZhbHVlLCBuZXN0ZWRQYXRoLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZFBhdGhzKTtcclxuICAgICAgICAgICAgaWYgKGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmROZXN0ZWRTZXJpYWxpemFibGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBuZXh0KGFjdGlvbik7IH07IH07IH07XHJcbiAgICB9XHJcbiAgICB2YXIgX2MgPSBvcHRpb25zLmlzU2VyaWFsaXphYmxlLCBpc1NlcmlhbGl6YWJsZSA9IF9jID09PSB2b2lkIDAgPyBpc1BsYWluIDogX2MsIGdldEVudHJpZXMgPSBvcHRpb25zLmdldEVudHJpZXMsIF9kID0gb3B0aW9ucy5pZ25vcmVkQWN0aW9ucywgaWdub3JlZEFjdGlvbnMgPSBfZCA9PT0gdm9pZCAwID8gW10gOiBfZCwgX2UgPSBvcHRpb25zLmlnbm9yZWRBY3Rpb25QYXRocywgaWdub3JlZEFjdGlvblBhdGhzID0gX2UgPT09IHZvaWQgMCA/IFtcIm1ldGEuYXJnXCIsIFwibWV0YS5iYXNlUXVlcnlNZXRhXCJdIDogX2UsIF9mID0gb3B0aW9ucy5pZ25vcmVkUGF0aHMsIGlnbm9yZWRQYXRocyA9IF9mID09PSB2b2lkIDAgPyBbXSA6IF9mLCBfZyA9IG9wdGlvbnMud2FybkFmdGVyLCB3YXJuQWZ0ZXIgPSBfZyA9PT0gdm9pZCAwID8gMzIgOiBfZywgX2ggPSBvcHRpb25zLmlnbm9yZVN0YXRlLCBpZ25vcmVTdGF0ZSA9IF9oID09PSB2b2lkIDAgPyBmYWxzZSA6IF9oLCBfaiA9IG9wdGlvbnMuaWdub3JlQWN0aW9ucywgaWdub3JlQWN0aW9ucyA9IF9qID09PSB2b2lkIDAgPyBmYWxzZSA6IF9qO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdG9yZUFQSSkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV4dChhY3Rpb24pO1xyXG4gICAgICAgIHZhciBtZWFzdXJlVXRpbHMgPSBnZXRUaW1lTWVhc3VyZVV0aWxzKHdhcm5BZnRlciwgXCJTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVcIik7XHJcbiAgICAgICAgaWYgKCFpZ25vcmVBY3Rpb25zICYmICEoaWdub3JlZEFjdGlvbnMubGVuZ3RoICYmIGlnbm9yZWRBY3Rpb25zLmluZGV4T2YoYWN0aW9uLnR5cGUpICE9PSAtMSkpIHtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKGFjdGlvbiwgXCJcIiwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRBY3Rpb25QYXRocyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlQYXRoID0gZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZS5rZXlQYXRoLCB2YWx1ZSA9IGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkEgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZSB3YXMgZGV0ZWN0ZWQgaW4gYW4gYWN0aW9uLCBpbiB0aGUgcGF0aDogYFwiICsga2V5UGF0aCArIFwiYC4gVmFsdWU6XCIsIHZhbHVlLCBcIlxcblRha2UgYSBsb29rIGF0IHRoZSBsb2dpYyB0aGF0IGRpc3BhdGNoZWQgdGhpcyBhY3Rpb246IFwiLCBhY3Rpb24sIFwiXFxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvYWN0aW9ucyN3aHktc2hvdWxkLXR5cGUtYmUtYS1zdHJpbmctb3ItYXQtbGVhc3Qtc2VyaWFsaXphYmxlLXdoeS1zaG91bGQtbXktYWN0aW9uLXR5cGVzLWJlLWNvbnN0YW50cylcIiwgXCJcXG4oVG8gYWxsb3cgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZXMgc2VlOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL3VzYWdlL3VzYWdlLWd1aWRlI3dvcmtpbmctd2l0aC1ub24tc2VyaWFsaXphYmxlLWRhdGEpXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpZ25vcmVTdGF0ZSkge1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RvcmVBUEkuZ2V0U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIHZhciBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoc3RhdGUsIFwiXCIsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlQYXRoID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlLmtleVBhdGgsIHZhbHVlID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIHRoZSBzdGF0ZSwgaW4gdGhlIHBhdGg6IGBcIiArIGtleVBhdGggKyBcImAuIFZhbHVlOlwiLCB2YWx1ZSwgXCJcXG5UYWtlIGEgbG9vayBhdCB0aGUgcmVkdWNlcihzKSBoYW5kbGluZyB0aGlzIGFjdGlvbiB0eXBlOiBcIiArIGFjdGlvbi50eXBlICsgXCIuXFxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvb3JnYW5pemluZy1zdGF0ZSNjYW4taS1wdXQtZnVuY3Rpb25zLXByb21pc2VzLW9yLW90aGVyLW5vbi1zZXJpYWxpemFibGUtaXRlbXMtaW4tbXktc3RvcmUtc3RhdGUpXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9OyB9OyB9O1xyXG59XHJcbi8vIHNyYy9nZXREZWZhdWx0TWlkZGxld2FyZS50c1xyXG5mdW5jdGlvbiBpc0Jvb2xlYW4oeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcImJvb2xlYW5cIjtcclxufVxyXG5mdW5jdGlvbiBjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBnZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIF9jID0gb3B0aW9ucy50aHVuaywgdGh1bmsgPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBfZCA9IG9wdGlvbnMuaW1tdXRhYmxlQ2hlY2ssIGltbXV0YWJsZUNoZWNrID0gX2QgPT09IHZvaWQgMCA/IHRydWUgOiBfZCwgX2UgPSBvcHRpb25zLnNlcmlhbGl6YWJsZUNoZWNrLCBzZXJpYWxpemFibGVDaGVjayA9IF9lID09PSB2b2lkIDAgPyB0cnVlIDogX2U7XHJcbiAgICB2YXIgbWlkZGxld2FyZUFycmF5ID0gbmV3IE1pZGRsZXdhcmVBcnJheSgpO1xyXG4gICAgaWYgKHRodW5rKSB7XHJcbiAgICAgICAgaWYgKGlzQm9vbGVhbih0aHVuaykpIHtcclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2godGh1bmtNaWRkbGV3YXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHRodW5rTWlkZGxld2FyZS53aXRoRXh0cmFBcmd1bWVudCh0aHVuay5leHRyYUFyZ3VtZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgIGlmIChpbW11dGFibGVDaGVjaykge1xyXG4gICAgICAgICAgICB2YXIgaW1tdXRhYmxlT3B0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoIWlzQm9vbGVhbihpbW11dGFibGVDaGVjaykpIHtcclxuICAgICAgICAgICAgICAgIGltbXV0YWJsZU9wdGlvbnMgPSBpbW11dGFibGVDaGVjaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoaW1tdXRhYmxlT3B0aW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VyaWFsaXphYmxlQ2hlY2spIHtcclxuICAgICAgICAgICAgdmFyIHNlcmlhbGl6YWJsZU9wdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFpc0Jvb2xlYW4oc2VyaWFsaXphYmxlQ2hlY2spKSB7XHJcbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGVPcHRpb25zID0gc2VyaWFsaXphYmxlQ2hlY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2goY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKHNlcmlhbGl6YWJsZU9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWlkZGxld2FyZUFycmF5O1xyXG59XHJcbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xyXG52YXIgSVNfUFJPRFVDVElPTiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIjtcclxuZnVuY3Rpb24gY29uZmlndXJlU3RvcmUob3B0aW9ucykge1xyXG4gICAgdmFyIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSA9IGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmUoKTtcclxuICAgIHZhciBfYyA9IG9wdGlvbnMgfHwge30sIF9kID0gX2MucmVkdWNlciwgcmVkdWNlciA9IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZCwgX2UgPSBfYy5taWRkbGV3YXJlLCBtaWRkbGV3YXJlID0gX2UgPT09IHZvaWQgMCA/IGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSgpIDogX2UsIF9mID0gX2MuZGV2VG9vbHMsIGRldlRvb2xzID0gX2YgPT09IHZvaWQgMCA/IHRydWUgOiBfZiwgX2cgPSBfYy5wcmVsb2FkZWRTdGF0ZSwgcHJlbG9hZGVkU3RhdGUgPSBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2csIF9oID0gX2MuZW5oYW5jZXJzLCBlbmhhbmNlcnMgPSBfaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2g7XHJcbiAgICB2YXIgcm9vdFJlZHVjZXI7XHJcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHJvb3RSZWR1Y2VyID0gcmVkdWNlcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocmVkdWNlcikpIHtcclxuICAgICAgICByb290UmVkdWNlciA9IGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2VyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyZWR1Y2VyXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudCwgYW5kIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3Qgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBjb21iaW5lUmVkdWNlcnMnKTtcclxuICAgIH1cclxuICAgIHZhciBmaW5hbE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlO1xyXG4gICAgaWYgKHR5cGVvZiBmaW5hbE1pZGRsZXdhcmUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGZpbmFsTWlkZGxld2FyZSA9IGZpbmFsTWlkZGxld2FyZShjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUpO1xyXG4gICAgICAgIGlmICghSVNfUFJPRFVDVElPTiAmJiAhQXJyYXkuaXNBcnJheShmaW5hbE1pZGRsZXdhcmUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIndoZW4gdXNpbmcgYSBtaWRkbGV3YXJlIGJ1aWxkZXIgZnVuY3Rpb24sIGFuIGFycmF5IG9mIG1pZGRsZXdhcmUgbXVzdCBiZSByZXR1cm5lZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIUlTX1BST0RVQ1RJT04gJiYgZmluYWxNaWRkbGV3YXJlLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIHR5cGVvZiBpdGVtICE9PSBcImZ1bmN0aW9uXCI7IH0pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZWFjaCBtaWRkbGV3YXJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcclxuICAgIH1cclxuICAgIHZhciBtaWRkbGV3YXJlRW5oYW5jZXIgPSBhcHBseU1pZGRsZXdhcmUuYXBwbHkodm9pZCAwLCBmaW5hbE1pZGRsZXdhcmUpO1xyXG4gICAgdmFyIGZpbmFsQ29tcG9zZSA9IGNvbXBvc2UyO1xyXG4gICAgaWYgKGRldlRvb2xzKSB7XHJcbiAgICAgICAgZmluYWxDb21wb3NlID0gY29tcG9zZVdpdGhEZXZUb29scyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgICAgIHRyYWNlOiAhSVNfUFJPRFVDVElPTlxyXG4gICAgICAgIH0sIHR5cGVvZiBkZXZUb29scyA9PT0gXCJvYmplY3RcIiAmJiBkZXZUb29scykpO1xyXG4gICAgfVxyXG4gICAgdmFyIHN0b3JlRW5oYW5jZXJzID0gW21pZGRsZXdhcmVFbmhhbmNlcl07XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbmhhbmNlcnMpKSB7XHJcbiAgICAgICAgc3RvcmVFbmhhbmNlcnMgPSBfX3NwcmVhZEFycmF5KFttaWRkbGV3YXJlRW5oYW5jZXJdLCBlbmhhbmNlcnMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGVuaGFuY2VycyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgc3RvcmVFbmhhbmNlcnMgPSBlbmhhbmNlcnMoc3RvcmVFbmhhbmNlcnMpO1xyXG4gICAgfVxyXG4gICAgdmFyIGNvbXBvc2VkRW5oYW5jZXIgPSBmaW5hbENvbXBvc2UuYXBwbHkodm9pZCAwLCBzdG9yZUVuaGFuY2Vycyk7XHJcbiAgICByZXR1cm4gY3JlYXRlU3RvcmUocm9vdFJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBjb21wb3NlZEVuaGFuY2VyKTtcclxufVxyXG4vLyBzcmMvY3JlYXRlQWN0aW9uLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbih0eXBlLCBwcmVwYXJlQWN0aW9uKSB7XHJcbiAgICBmdW5jdGlvbiBhY3Rpb25DcmVhdG9yKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJlcGFyZUFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgcHJlcGFyZWQgPSBwcmVwYXJlQWN0aW9uLmFwcGx5KHZvaWQgMCwgYXJncyk7XHJcbiAgICAgICAgICAgIGlmICghcHJlcGFyZWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInByZXBhcmVBY3Rpb24gZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogcHJlcGFyZWQucGF5bG9hZFxyXG4gICAgICAgICAgICB9LCBcIm1ldGFcIiBpbiBwcmVwYXJlZCAmJiB7IG1ldGE6IHByZXBhcmVkLm1ldGEgfSksIFwiZXJyb3JcIiBpbiBwcmVwYXJlZCAmJiB7IGVycm9yOiBwcmVwYXJlZC5lcnJvciB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgcGF5bG9hZDogYXJnc1swXSB9O1xyXG4gICAgfVxyXG4gICAgYWN0aW9uQ3JlYXRvci50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwiXCIgKyB0eXBlOyB9O1xyXG4gICAgYWN0aW9uQ3JlYXRvci50eXBlID0gdHlwZTtcclxuICAgIGFjdGlvbkNyZWF0b3IubWF0Y2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBhY3Rpb24udHlwZSA9PT0gdHlwZTsgfTtcclxuICAgIHJldHVybiBhY3Rpb25DcmVhdG9yO1xyXG59XHJcbmZ1bmN0aW9uIGlzRlNBKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIGlzUGxhaW5PYmplY3QoYWN0aW9uKSAmJiB0eXBlb2YgYWN0aW9uLnR5cGUgPT09IFwic3RyaW5nXCIgJiYgT2JqZWN0LmtleXMoYWN0aW9uKS5ldmVyeShpc1ZhbGlkS2V5KTtcclxufVxyXG5mdW5jdGlvbiBpc1ZhbGlkS2V5KGtleSkge1xyXG4gICAgcmV0dXJuIFtcInR5cGVcIiwgXCJwYXlsb2FkXCIsIFwiZXJyb3JcIiwgXCJtZXRhXCJdLmluZGV4T2Yoa2V5KSA+IC0xO1xyXG59XHJcbmZ1bmN0aW9uIGdldFR5cGUoYWN0aW9uQ3JlYXRvcikge1xyXG4gICAgcmV0dXJuIFwiXCIgKyBhY3Rpb25DcmVhdG9yO1xyXG59XHJcbi8vIHNyYy9jcmVhdGVSZWR1Y2VyLnRzXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUyLCB7IGlzRHJhZnQgYXMgaXNEcmFmdDIsIGlzRHJhZnRhYmxlIGFzIGlzRHJhZnRhYmxlMiB9IGZyb20gXCJpbW1lclwiO1xyXG4vLyBzcmMvbWFwQnVpbGRlcnMudHNcclxuZnVuY3Rpb24gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2soYnVpbGRlckNhbGxiYWNrKSB7XHJcbiAgICB2YXIgYWN0aW9uc01hcCA9IHt9O1xyXG4gICAgdmFyIGFjdGlvbk1hdGNoZXJzID0gW107XHJcbiAgICB2YXIgZGVmYXVsdENhc2VSZWR1Y2VyO1xyXG4gICAgdmFyIGJ1aWxkZXIgPSB7XHJcbiAgICAgICAgYWRkQ2FzZTogZnVuY3Rpb24gKHR5cGVPckFjdGlvbkNyZWF0b3IsIHJlZHVjZXIpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbk1hdGNoZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkTWF0Y2hlcmBcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkQ2FzZWAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB0eXBlT3JBY3Rpb25DcmVhdG9yID09PSBcInN0cmluZ1wiID8gdHlwZU9yQWN0aW9uQ3JlYXRvciA6IHR5cGVPckFjdGlvbkNyZWF0b3IudHlwZTtcclxuICAgICAgICAgICAgaWYgKHR5cGUgaW4gYWN0aW9uc01hcCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWRkQ2FzZSBjYW5ub3QgYmUgY2FsbGVkIHdpdGggdHdvIHJlZHVjZXJzIGZvciB0aGUgc2FtZSBhY3Rpb24gdHlwZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb25zTWFwW3R5cGVdID0gcmVkdWNlcjtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZGRNYXRjaGVyOiBmdW5jdGlvbiAobWF0Y2hlciwgcmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb25NYXRjaGVycy5wdXNoKHsgbWF0Y2hlcjogbWF0Y2hlciwgcmVkdWNlcjogcmVkdWNlciB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZGREZWZhdWx0Q2FzZTogZnVuY3Rpb24gKHJlZHVjZXIpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZERlZmF1bHRDYXNlYCBjYW4gb25seSBiZSBjYWxsZWQgb25jZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0Q2FzZVJlZHVjZXIgPSByZWR1Y2VyO1xyXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgYnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpO1xyXG4gICAgcmV0dXJuIFthY3Rpb25zTWFwLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyXTtcclxufVxyXG4vLyBzcmMvY3JlYXRlUmVkdWNlci50c1xyXG5mdW5jdGlvbiBpc1N0YXRlRnVuY3Rpb24oeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIG1hcE9yQnVpbGRlckNhbGxiYWNrLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICBpZiAoYWN0aW9uTWF0Y2hlcnMgPT09IHZvaWQgMCkgeyBhY3Rpb25NYXRjaGVycyA9IFtdOyB9XHJcbiAgICB2YXIgX2MgPSB0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIiA/IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG1hcE9yQnVpbGRlckNhbGxiYWNrKSA6IFttYXBPckJ1aWxkZXJDYWxsYmFjaywgYWN0aW9uTWF0Y2hlcnMsIGRlZmF1bHRDYXNlUmVkdWNlcl0sIGFjdGlvbnNNYXAgPSBfY1swXSwgZmluYWxBY3Rpb25NYXRjaGVycyA9IF9jWzFdLCBmaW5hbERlZmF1bHRDYXNlUmVkdWNlciA9IF9jWzJdO1xyXG4gICAgdmFyIGdldEluaXRpYWxTdGF0ZTtcclxuICAgIGlmIChpc1N0YXRlRnVuY3Rpb24oaW5pdGlhbFN0YXRlKSkge1xyXG4gICAgICAgIGdldEluaXRpYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyZWV6ZURyYWZ0YWJsZShpbml0aWFsU3RhdGUoKSk7IH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgZnJvemVuSW5pdGlhbFN0YXRlXzEgPSBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKTtcclxuICAgICAgICBnZXRJbml0aWFsU3RhdGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmcm96ZW5Jbml0aWFsU3RhdGVfMTsgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xyXG4gICAgICAgIGlmIChzdGF0ZSA9PT0gdm9pZCAwKSB7IHN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCk7IH1cclxuICAgICAgICB2YXIgY2FzZVJlZHVjZXJzID0gX19zcHJlYWRBcnJheShbXHJcbiAgICAgICAgICAgIGFjdGlvbnNNYXBbYWN0aW9uLnR5cGVdXHJcbiAgICAgICAgXSwgZmluYWxBY3Rpb25NYXRjaGVycy5maWx0ZXIoZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHZhciBtYXRjaGVyID0gX2MubWF0Y2hlcjtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoYWN0aW9uKTtcclxuICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHZhciByZWR1Y2VyMiA9IF9jLnJlZHVjZXI7XHJcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VyMjtcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgaWYgKGNhc2VSZWR1Y2Vycy5maWx0ZXIoZnVuY3Rpb24gKGNyKSB7IHJldHVybiAhIWNyOyB9KS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgY2FzZVJlZHVjZXJzID0gW2ZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhc2VSZWR1Y2Vycy5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzU3RhdGUsIGNhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRHJhZnQyKHByZXZpb3VzU3RhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRyYWZ0ID0gcHJldmlvdXNTdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzRHJhZnRhYmxlMihwcmV2aW91c1N0YXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYXNlUmVkdWNlcihwcmV2aW91c1N0YXRlLCBhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBIGNhc2UgcmVkdWNlciBvbiBhIG5vbi1kcmFmdGFibGUgdmFsdWUgbXVzdCBub3QgcmV0dXJuIHVuZGVmaW5lZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUyKHByZXZpb3VzU3RhdGUsIGZ1bmN0aW9uIChkcmFmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgfSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcmVkdWNlci5nZXRJbml0aWFsU3RhdGUgPSBnZXRJbml0aWFsU3RhdGU7XHJcbiAgICByZXR1cm4gcmVkdWNlcjtcclxufVxyXG4vLyBzcmMvY3JlYXRlU2xpY2UudHNcclxuZnVuY3Rpb24gZ2V0VHlwZTIoc2xpY2UsIGFjdGlvbktleSkge1xyXG4gICAgcmV0dXJuIHNsaWNlICsgXCIvXCIgKyBhY3Rpb25LZXk7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlU2xpY2Uob3B0aW9ucykge1xyXG4gICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWU7XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgbmFtZWAgaXMgYSByZXF1aXJlZCBvcHRpb24gZm9yIGNyZWF0ZVNsaWNlXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcclxuICAgICAgICBpZiAob3B0aW9ucy5pbml0aWFsU3RhdGUgPT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiWW91IG11c3QgcHJvdmlkZSBhbiBgaW5pdGlhbFN0YXRlYCB2YWx1ZSB0aGF0IGlzIG5vdCBgdW5kZWZpbmVkYC4gWW91IG1heSBoYXZlIG1pc3NwZWxsZWQgYGluaXRpYWxTdGF0ZWBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxTdGF0ZSA9PSBcImZ1bmN0aW9uXCIgPyBvcHRpb25zLmluaXRpYWxTdGF0ZSA6IGZyZWV6ZURyYWZ0YWJsZShvcHRpb25zLmluaXRpYWxTdGF0ZSk7XHJcbiAgICB2YXIgcmVkdWNlcnMgPSBvcHRpb25zLnJlZHVjZXJzIHx8IHt9O1xyXG4gICAgdmFyIHJlZHVjZXJOYW1lcyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcclxuICAgIHZhciBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZSA9IHt9O1xyXG4gICAgdmFyIHNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlID0ge307XHJcbiAgICB2YXIgYWN0aW9uQ3JlYXRvcnMgPSB7fTtcclxuICAgIHJlZHVjZXJOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWR1Y2VyTmFtZSkge1xyXG4gICAgICAgIHZhciBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSA9IHJlZHVjZXJzW3JlZHVjZXJOYW1lXTtcclxuICAgICAgICB2YXIgdHlwZSA9IGdldFR5cGUyKG5hbWUsIHJlZHVjZXJOYW1lKTtcclxuICAgICAgICB2YXIgY2FzZVJlZHVjZXI7XHJcbiAgICAgICAgdmFyIHByZXBhcmVDYWxsYmFjaztcclxuICAgICAgICBpZiAoXCJyZWR1Y2VyXCIgaW4gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUpIHtcclxuICAgICAgICAgICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZS5yZWR1Y2VyO1xyXG4gICAgICAgICAgICBwcmVwYXJlQ2FsbGJhY2sgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZS5wcmVwYXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWVbcmVkdWNlck5hbWVdID0gY2FzZVJlZHVjZXI7XHJcbiAgICAgICAgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGVbdHlwZV0gPSBjYXNlUmVkdWNlcjtcclxuICAgICAgICBhY3Rpb25DcmVhdG9yc1tyZWR1Y2VyTmFtZV0gPSBwcmVwYXJlQ2FsbGJhY2sgPyBjcmVhdGVBY3Rpb24odHlwZSwgcHJlcGFyZUNhbGxiYWNrKSA6IGNyZWF0ZUFjdGlvbih0eXBlKTtcclxuICAgIH0pO1xyXG4gICAgZnVuY3Rpb24gYnVpbGRSZWR1Y2VyKCkge1xyXG4gICAgICAgIHZhciBfYyA9IHR5cGVvZiBvcHRpb25zLmV4dHJhUmVkdWNlcnMgPT09IFwiZnVuY3Rpb25cIiA/IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG9wdGlvbnMuZXh0cmFSZWR1Y2VycykgOiBbb3B0aW9ucy5leHRyYVJlZHVjZXJzXSwgX2QgPSBfY1swXSwgZXh0cmFSZWR1Y2VycyA9IF9kID09PSB2b2lkIDAgPyB7fSA6IF9kLCBfZSA9IF9jWzFdLCBhY3Rpb25NYXRjaGVycyA9IF9lID09PSB2b2lkIDAgPyBbXSA6IF9lLCBfZiA9IF9jWzJdLCBkZWZhdWx0Q2FzZVJlZHVjZXIgPSBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Y7XHJcbiAgICAgICAgdmFyIGZpbmFsQ2FzZVJlZHVjZXJzID0gX19zcHJlYWRWYWx1ZXMoX19zcHJlYWRWYWx1ZXMoe30sIGV4dHJhUmVkdWNlcnMpLCBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCBmaW5hbENhc2VSZWR1Y2VycywgYWN0aW9uTWF0Y2hlcnMsIGRlZmF1bHRDYXNlUmVkdWNlcik7XHJcbiAgICB9XHJcbiAgICB2YXIgX3JlZHVjZXI7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgcmVkdWNlcjogZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKCFfcmVkdWNlcilcclxuICAgICAgICAgICAgICAgIF9yZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFjdGlvbnM6IGFjdGlvbkNyZWF0b3JzLFxyXG4gICAgICAgIGNhc2VSZWR1Y2Vyczogc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUsXHJcbiAgICAgICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghX3JlZHVjZXIpXHJcbiAgICAgICAgICAgICAgICBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpO1xyXG4gICAgICAgICAgICByZXR1cm4gX3JlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvZW50aXR5X3N0YXRlLnRzXHJcbmZ1bmN0aW9uIGdldEluaXRpYWxFbnRpdHlTdGF0ZSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgaWRzOiBbXSxcclxuICAgICAgICBlbnRpdGllczoge31cclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeSgpIHtcclxuICAgIGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZShhZGRpdGlvbmFsU3RhdGUpIHtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0YXRlID09PSB2b2lkIDApIHsgYWRkaXRpb25hbFN0YXRlID0ge307IH1cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihnZXRJbml0aWFsRW50aXR5U3RhdGUoKSwgYWRkaXRpb25hbFN0YXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGdldEluaXRpYWxTdGF0ZTogZ2V0SW5pdGlhbFN0YXRlIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3N0YXRlX3NlbGVjdG9ycy50c1xyXG5mdW5jdGlvbiBjcmVhdGVTZWxlY3RvcnNGYWN0b3J5KCkge1xyXG4gICAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKHNlbGVjdFN0YXRlKSB7XHJcbiAgICAgICAgdmFyIHNlbGVjdElkcyA9IGZ1bmN0aW9uIChzdGF0ZSkgeyByZXR1cm4gc3RhdGUuaWRzOyB9O1xyXG4gICAgICAgIHZhciBzZWxlY3RFbnRpdGllcyA9IGZ1bmN0aW9uIChzdGF0ZSkgeyByZXR1cm4gc3RhdGUuZW50aXRpZXM7IH07XHJcbiAgICAgICAgdmFyIHNlbGVjdEFsbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdElkcywgc2VsZWN0RW50aXRpZXMsIGZ1bmN0aW9uIChpZHMsIGVudGl0aWVzKSB7IHJldHVybiBpZHMubWFwKGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gZW50aXRpZXNbaWRdOyB9KTsgfSk7XHJcbiAgICAgICAgdmFyIHNlbGVjdElkID0gZnVuY3Rpb24gKF8sIGlkKSB7IHJldHVybiBpZDsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0QnlJZCA9IGZ1bmN0aW9uIChlbnRpdGllcywgaWQpIHsgcmV0dXJuIGVudGl0aWVzW2lkXTsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0VG90YWwgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RJZHMsIGZ1bmN0aW9uIChpZHMpIHsgcmV0dXJuIGlkcy5sZW5ndGg7IH0pO1xyXG4gICAgICAgIGlmICghc2VsZWN0U3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdElkczogc2VsZWN0SWRzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsOiBzZWxlY3RBbGwsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RUb3RhbDogc2VsZWN0VG90YWwsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RFbnRpdGllcywgc2VsZWN0SWQsIHNlbGVjdEJ5SWQpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0RW50aXRpZXMpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNlbGVjdElkczogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdElkcyksXHJcbiAgICAgICAgICAgIHNlbGVjdEVudGl0aWVzOiBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsXHJcbiAgICAgICAgICAgIHNlbGVjdEFsbDogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdEFsbCksXHJcbiAgICAgICAgICAgIHNlbGVjdFRvdGFsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0VG90YWwpLFxyXG4gICAgICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsIHNlbGVjdElkLCBzZWxlY3RCeUlkKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBnZXRTZWxlY3RvcnM6IGdldFNlbGVjdG9ycyB9O1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy9zdGF0ZV9hZGFwdGVyLnRzXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUzLCB7IGlzRHJhZnQgYXMgaXNEcmFmdDMgfSBmcm9tIFwiaW1tZXJcIjtcclxuZnVuY3Rpb24gY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcclxuICAgIHZhciBvcGVyYXRvciA9IGNyZWF0ZVN0YXRlT3BlcmF0b3IoZnVuY3Rpb24gKF8sIHN0YXRlKSB7IHJldHVybiBtdXRhdG9yKHN0YXRlKTsgfSk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gb3BlcmF0aW9uKHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wZXJhdG9yKHN0YXRlLCB2b2lkIDApO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb24oc3RhdGUsIGFyZykge1xyXG4gICAgICAgIGZ1bmN0aW9uIGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZzIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzRlNBKGFyZzIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcnVuTXV0YXRvciA9IGZ1bmN0aW9uIChkcmFmdCkge1xyXG4gICAgICAgICAgICBpZiAoaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnKSkge1xyXG4gICAgICAgICAgICAgICAgbXV0YXRvcihhcmcucGF5bG9hZCwgZHJhZnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbXV0YXRvcihhcmcsIGRyYWZ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGlzRHJhZnQzKHN0YXRlKSkge1xyXG4gICAgICAgICAgICBydW5NdXRhdG9yKHN0YXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZTMoc3RhdGUsIHJ1bk11dGF0b3IpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3V0aWxzLnRzXHJcbmZ1bmN0aW9uIHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCkge1xyXG4gICAgdmFyIGtleSA9IHNlbGVjdElkKGVudGl0eSk7XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGtleSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFwiVGhlIGVudGl0eSBwYXNzZWQgdG8gdGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgdW5kZWZpbmVkLlwiLCBcIllvdSBzaG91bGQgcHJvYmFibHkgcHJvdmlkZSB5b3VyIG93biBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uLlwiLCBcIlRoZSBlbnRpdHkgdGhhdCB3YXMgcGFzc2VkOlwiLCBlbnRpdHksIFwiVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246XCIsIHNlbGVjdElkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxufVxyXG5mdW5jdGlvbiBlbnN1cmVFbnRpdGllc0FycmF5KGVudGl0aWVzKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZW50aXRpZXMpKSB7XHJcbiAgICAgICAgZW50aXRpZXMgPSBPYmplY3QudmFsdWVzKGVudGl0aWVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbnRpdGllcztcclxufVxyXG5mdW5jdGlvbiBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICB2YXIgYWRkZWQgPSBbXTtcclxuICAgIHZhciB1cGRhdGVkID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIG5ld0VudGl0aWVzXzEgPSBuZXdFbnRpdGllczsgX2kgPCBuZXdFbnRpdGllc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHZhciBlbnRpdHkgPSBuZXdFbnRpdGllc18xW19pXTtcclxuICAgICAgICB2YXIgaWQgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xyXG4gICAgICAgIGlmIChpZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICB1cGRhdGVkLnB1c2goeyBpZDogaWQsIGNoYW5nZXM6IGVudGl0eSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFkZGVkLnB1c2goZW50aXR5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW2FkZGVkLCB1cGRhdGVkXTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvdW5zb3J0ZWRfc3RhdGVfYWRhcHRlci50c1xyXG5mdW5jdGlvbiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCkge1xyXG4gICAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XHJcbiAgICAgICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmlkcy5wdXNoKGtleSk7XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBuZXdFbnRpdGllc18yID0gbmV3RW50aXRpZXM7IF9pIDwgbmV3RW50aXRpZXNfMi5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzJbX2ldO1xyXG4gICAgICAgICAgICBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xyXG4gICAgICAgIGlmICghKGtleSBpbiBzdGF0ZS5lbnRpdGllcykpIHtcclxuICAgICAgICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBuZXdFbnRpdGllc18zID0gbmV3RW50aXRpZXM7IF9pIDwgbmV3RW50aXRpZXNfMy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzNbX2ldO1xyXG4gICAgICAgICAgICBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldEFsbE11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBzdGF0ZS5pZHMgPSBbXTtcclxuICAgICAgICBzdGF0ZS5lbnRpdGllcyA9IHt9O1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZW1vdmVPbmVNdXRhYmx5KGtleSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gcmVtb3ZlTWFueU11dGFibHkoW2tleV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZU1hbnlNdXRhYmx5KGtleXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGRpZE11dGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1trZXldO1xyXG4gICAgICAgICAgICAgICAgZGlkTXV0YXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChkaWRNdXRhdGUpIHtcclxuICAgICAgICAgICAgc3RhdGUuaWRzID0gc3RhdGUuaWRzLmZpbHRlcihmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIGlkIGluIHN0YXRlLmVudGl0aWVzOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZW1vdmVBbGxNdXRhYmx5KHN0YXRlKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge1xyXG4gICAgICAgICAgICBpZHM6IFtdLFxyXG4gICAgICAgICAgICBlbnRpdGllczoge31cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHRha2VOZXdLZXkoa2V5cywgdXBkYXRlLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBvcmlnaW5hbDIgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgIHZhciB1cGRhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWwyLCB1cGRhdGUuY2hhbmdlcyk7XHJcbiAgICAgICAgdmFyIG5ld0tleSA9IHNlbGVjdElkVmFsdWUodXBkYXRlZCwgc2VsZWN0SWQpO1xyXG4gICAgICAgIHZhciBoYXNOZXdLZXkgPSBuZXdLZXkgIT09IHVwZGF0ZS5pZDtcclxuICAgICAgICBpZiAoaGFzTmV3S2V5KSB7XHJcbiAgICAgICAgICAgIGtleXNbdXBkYXRlLmlkXSA9IG5ld0tleTtcclxuICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmVudGl0aWVzW25ld0tleV0gPSB1cGRhdGVkO1xyXG4gICAgICAgIHJldHVybiBoYXNOZXdLZXk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIG5ld0tleXMgPSB7fTtcclxuICAgICAgICB2YXIgdXBkYXRlc1BlckVudGl0eSA9IHt9O1xyXG4gICAgICAgIHVwZGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAodXBkYXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGUuaWQgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogdXBkYXRlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXM6IF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHt9LCB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0gPyB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0uY2hhbmdlcyA6IG51bGwpLCB1cGRhdGUuY2hhbmdlcylcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB1cGRhdGVzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzUGVyRW50aXR5KTtcclxuICAgICAgICB2YXIgZGlkTXV0YXRlRW50aXRpZXMgPSB1cGRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgaWYgKGRpZE11dGF0ZUVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHZhciBkaWRNdXRhdGVJZHMgPSB1cGRhdGVzLmZpbHRlcihmdW5jdGlvbiAodXBkYXRlKSB7IHJldHVybiB0YWtlTmV3S2V5KG5ld0tleXMsIHVwZGF0ZSwgc3RhdGUpOyB9KS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICBpZiAoZGlkTXV0YXRlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5pZHMgPSBPYmplY3Qua2V5cyhzdGF0ZS5lbnRpdGllcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBfYyA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSksIGFkZGVkID0gX2NbMF0sIHVwZGF0ZWQgPSBfY1sxXTtcclxuICAgICAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XHJcbiAgICAgICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVtb3ZlQWxsOiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3IocmVtb3ZlQWxsTXV0YWJseSksXHJcbiAgICAgICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxyXG4gICAgICAgIHNldE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRPbmVNdXRhYmx5KSxcclxuICAgICAgICBzZXRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE1hbnlNdXRhYmx5KSxcclxuICAgICAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxyXG4gICAgICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxyXG4gICAgICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cHNlcnRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE1hbnlNdXRhYmx5KSxcclxuICAgICAgICByZW1vdmVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IocmVtb3ZlT25lTXV0YWJseSksXHJcbiAgICAgICAgcmVtb3ZlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVNYW55TXV0YWJseSlcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3NvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydCkge1xyXG4gICAgdmFyIF9jID0gY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpLCByZW1vdmVPbmUgPSBfYy5yZW1vdmVPbmUsIHJlbW92ZU1hbnkgPSBfYy5yZW1vdmVNYW55LCByZW1vdmVBbGwgPSBfYy5yZW1vdmVBbGw7XHJcbiAgICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gYWRkTWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgdmFyIG1vZGVscyA9IG5ld0VudGl0aWVzLmZpbHRlcihmdW5jdGlvbiAobW9kZWwpIHsgcmV0dXJuICEoc2VsZWN0SWRWYWx1ZShtb2RlbCwgc2VsZWN0SWQpIGluIHN0YXRlLmVudGl0aWVzKTsgfSk7XHJcbiAgICAgICAgaWYgKG1vZGVscy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgbWVyZ2UobW9kZWxzLCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHNldE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgICAgIGlmIChuZXdFbnRpdGllcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgbWVyZ2UobmV3RW50aXRpZXMsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXMgPSB7fTtcclxuICAgICAgICBzdGF0ZS5pZHMgPSBbXTtcclxuICAgICAgICBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGUsIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1hbnlNdXRhYmx5KFt1cGRhdGVdLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBhcHBsaWVkVXBkYXRlcyA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgdXBkYXRlc18xID0gdXBkYXRlczsgX2kgPCB1cGRhdGVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSB1cGRhdGVzXzFbX2ldO1xyXG4gICAgICAgICAgICB2YXIgZW50aXR5ID0gc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcclxuICAgICAgICAgICAgaWYgKCFlbnRpdHkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFwcGxpZWRVcGRhdGVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlbnRpdHksIHVwZGF0ZS5jaGFuZ2VzKTtcclxuICAgICAgICAgICAgdmFyIG5ld0lkID0gc2VsZWN0SWQoZW50aXR5KTtcclxuICAgICAgICAgICAgaWYgKHVwZGF0ZS5pZCAhPT0gbmV3SWQpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUuZW50aXRpZXNbbmV3SWRdID0gZW50aXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcHBsaWVkVXBkYXRlcykge1xyXG4gICAgICAgICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBzZXJ0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgX2MgPSBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpLCBhZGRlZCA9IF9jWzBdLCB1cGRhdGVkID0gX2NbMV07XHJcbiAgICAgICAgdXBkYXRlTWFueU11dGFibHkodXBkYXRlZCwgc3RhdGUpO1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhcmVBcnJheXNFcXVhbChhLCBiKSB7XHJcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGggJiYgaSA8IGIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFbaV0gPT09IGJbaV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBtZXJnZShtb2RlbHMsIHN0YXRlKSB7XHJcbiAgICAgICAgbW9kZWxzLmZvckVhY2goZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmVudGl0aWVzW3NlbGVjdElkKG1vZGVsKV0gPSBtb2RlbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZXNvcnRFbnRpdGllcyhzdGF0ZSkge1xyXG4gICAgICAgIHZhciBhbGxFbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoc3RhdGUuZW50aXRpZXMpO1xyXG4gICAgICAgIGFsbEVudGl0aWVzLnNvcnQoc29ydCk7XHJcbiAgICAgICAgdmFyIG5ld1NvcnRlZElkcyA9IGFsbEVudGl0aWVzLm1hcChzZWxlY3RJZCk7XHJcbiAgICAgICAgdmFyIGlkcyA9IHN0YXRlLmlkcztcclxuICAgICAgICBpZiAoIWFyZUFycmF5c0VxdWFsKGlkcywgbmV3U29ydGVkSWRzKSkge1xyXG4gICAgICAgICAgICBzdGF0ZS5pZHMgPSBuZXdTb3J0ZWRJZHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZW1vdmVPbmU6IHJlbW92ZU9uZSxcclxuICAgICAgICByZW1vdmVNYW55OiByZW1vdmVNYW55LFxyXG4gICAgICAgIHJlbW92ZUFsbDogcmVtb3ZlQWxsLFxyXG4gICAgICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgICAgIHNldE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRPbmVNdXRhYmx5KSxcclxuICAgICAgICBzZXRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE1hbnlNdXRhYmx5KSxcclxuICAgICAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICAgICAgYWRkTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSlcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL2NyZWF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eUFkYXB0ZXIob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIHZhciBfYyA9IF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICBzb3J0Q29tcGFyZXI6IGZhbHNlLFxyXG4gICAgICAgIHNlbGVjdElkOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHsgcmV0dXJuIGluc3RhbmNlLmlkOyB9XHJcbiAgICB9LCBvcHRpb25zKSwgc2VsZWN0SWQgPSBfYy5zZWxlY3RJZCwgc29ydENvbXBhcmVyID0gX2Muc29ydENvbXBhcmVyO1xyXG4gICAgdmFyIHN0YXRlRmFjdG9yeSA9IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3RvcnkoKTtcclxuICAgIHZhciBzZWxlY3RvcnNGYWN0b3J5ID0gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeSgpO1xyXG4gICAgdmFyIHN0YXRlQWRhcHRlciA9IHNvcnRDb21wYXJlciA/IGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydENvbXBhcmVyKSA6IGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKTtcclxuICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgc2VsZWN0SWQ6IHNlbGVjdElkLFxyXG4gICAgICAgIHNvcnRDb21wYXJlcjogc29ydENvbXBhcmVyXHJcbiAgICB9LCBzdGF0ZUZhY3RvcnkpLCBzZWxlY3RvcnNGYWN0b3J5KSwgc3RhdGVBZGFwdGVyKTtcclxufVxyXG4vLyBzcmMvbmFub2lkLnRzXHJcbnZhciB1cmxBbHBoYWJldCA9IFwiTW9kdWxlU3ltYmhhc093blByLTAxMjM0NTY3ODlBQkNERUZHSE5SVmZnY3RpVXZ6X0txWVRKa0x4cFpYSWpRV1wiO1xyXG52YXIgbmFub2lkID0gZnVuY3Rpb24gKHNpemUpIHtcclxuICAgIGlmIChzaXplID09PSB2b2lkIDApIHsgc2l6ZSA9IDIxOyB9XHJcbiAgICB2YXIgaWQgPSBcIlwiO1xyXG4gICAgdmFyIGkgPSBzaXplO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgIGlkICs9IHVybEFscGhhYmV0W01hdGgucmFuZG9tKCkgKiA2NCB8IDBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkO1xyXG59O1xyXG4vLyBzcmMvY3JlYXRlQXN5bmNUaHVuay50c1xyXG52YXIgY29tbW9uUHJvcGVydGllcyA9IFtcclxuICAgIFwibmFtZVwiLFxyXG4gICAgXCJtZXNzYWdlXCIsXHJcbiAgICBcInN0YWNrXCIsXHJcbiAgICBcImNvZGVcIlxyXG5dO1xyXG52YXIgUmVqZWN0V2l0aFZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUmVqZWN0V2l0aFZhbHVlKHBheWxvYWQsIG1ldGEpIHtcclxuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVqZWN0V2l0aFZhbHVlO1xyXG59KCkpO1xyXG52YXIgRnVsZmlsbFdpdGhNZXRhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRnVsZmlsbFdpdGhNZXRhKHBheWxvYWQsIG1ldGEpIHtcclxuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRnVsZmlsbFdpdGhNZXRhO1xyXG59KCkpO1xyXG52YXIgbWluaVNlcmlhbGl6ZUVycm9yID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgdmFyIHNpbXBsZUVycm9yID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBjb21tb25Qcm9wZXJ0aWVzXzEgPSBjb21tb25Qcm9wZXJ0aWVzOyBfaSA8IGNvbW1vblByb3BlcnRpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gY29tbW9uUHJvcGVydGllc18xW19pXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtwcm9wZXJ0eV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIHNpbXBsZUVycm9yW3Byb3BlcnR5XSA9IHZhbHVlW3Byb3BlcnR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2ltcGxlRXJyb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBtZXNzYWdlOiBTdHJpbmcodmFsdWUpIH07XHJcbn07XHJcbmZ1bmN0aW9uIGNyZWF0ZUFzeW5jVGh1bmsodHlwZVByZWZpeCwgcGF5bG9hZENyZWF0b3IsIG9wdGlvbnMpIHtcclxuICAgIHZhciBmdWxmaWxsZWQgPSBjcmVhdGVBY3Rpb24odHlwZVByZWZpeCArIFwiL2Z1bGZpbGxlZFwiLCBmdW5jdGlvbiAocGF5bG9hZCwgcmVxdWVzdElkLCBhcmcsIG1ldGEpIHsgcmV0dXJuICh7XHJcbiAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICBhcmc6IGFyZyxcclxuICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6IFwiZnVsZmlsbGVkXCJcclxuICAgICAgICB9KVxyXG4gICAgfSk7IH0pO1xyXG4gICAgdmFyIHBlbmRpbmcgPSBjcmVhdGVBY3Rpb24odHlwZVByZWZpeCArIFwiL3BlbmRpbmdcIiwgZnVuY3Rpb24gKHJlcXVlc3RJZCwgYXJnLCBtZXRhKSB7IHJldHVybiAoe1xyXG4gICAgICAgIHBheWxvYWQ6IHZvaWQgMCxcclxuICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICBhcmc6IGFyZyxcclxuICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6IFwicGVuZGluZ1wiXHJcbiAgICAgICAgfSlcclxuICAgIH0pOyB9KTtcclxuICAgIHZhciByZWplY3RlZCA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvcmVqZWN0ZWRcIiwgZnVuY3Rpb24gKGVycm9yLCByZXF1ZXN0SWQsIGFyZywgcGF5bG9hZCwgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxyXG4gICAgICAgIGVycm9yOiAob3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZUVycm9yIHx8IG1pbmlTZXJpYWxpemVFcnJvcikoZXJyb3IgfHwgXCJSZWplY3RlZFwiKSxcclxuICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICBhcmc6IGFyZyxcclxuICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgIHJlamVjdGVkV2l0aFZhbHVlOiAhIXBheWxvYWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6IFwicmVqZWN0ZWRcIixcclxuICAgICAgICAgICAgYWJvcnRlZDogKGVycm9yID09IG51bGwgPyB2b2lkIDAgOiBlcnJvci5uYW1lKSA9PT0gXCJBYm9ydEVycm9yXCIsXHJcbiAgICAgICAgICAgIGNvbmRpdGlvbjogKGVycm9yID09IG51bGwgPyB2b2lkIDAgOiBlcnJvci5uYW1lKSA9PT0gXCJDb25kaXRpb25FcnJvclwiXHJcbiAgICAgICAgfSlcclxuICAgIH0pOyB9KTtcclxuICAgIHZhciBkaXNwbGF5ZWRXYXJuaW5nID0gZmFsc2U7XHJcbiAgICB2YXIgQUMgPSB0eXBlb2YgQWJvcnRDb250cm9sbGVyICE9PSBcInVuZGVmaW5lZFwiID8gQWJvcnRDb250cm9sbGVyIDogLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGNsYXNzXzEoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsID0ge1xyXG4gICAgICAgICAgICAgICAgYWJvcnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvbmFib3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHJlYXNvbjogdm9pZCAwLFxyXG4gICAgICAgICAgICAgICAgdGhyb3dJZkFib3J0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZGlzcGxheWVkV2FybmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZFdhcm5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlRoaXMgcGxhdGZvcm0gZG9lcyBub3QgaW1wbGVtZW50IEFib3J0Q29udHJvbGxlci4gXFxuSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBBYm9ydENvbnRyb2xsZXIgdG8gcmVhY3QgdG8gYGFib3J0YCBldmVudHMsIHBsZWFzZSBjb25zaWRlciBpbXBvcnRpbmcgYSBwb2x5ZmlsbCBsaWtlICdhYm9ydGNvbnRyb2xsZXItcG9seWZpbGwvZGlzdC9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGwtb25seScuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY2xhc3NfMTtcclxuICAgIH0oKSk7XHJcbiAgICBmdW5jdGlvbiBhY3Rpb25DcmVhdG9yKGFyZykge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYSkge1xyXG4gICAgICAgICAgICB2YXIgcmVxdWVzdElkID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuaWRHZW5lcmF0b3IpID8gb3B0aW9ucy5pZEdlbmVyYXRvcihhcmcpIDogbmFub2lkKCk7XHJcbiAgICAgICAgICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQUMoKTtcclxuICAgICAgICAgICAgdmFyIGFib3J0UmVhc29uO1xyXG4gICAgICAgICAgICB2YXIgYWJvcnRlZFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoXywgcmVqZWN0KSB7IHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3QoeyBuYW1lOiBcIkFib3J0RXJyb3JcIiwgbWVzc2FnZTogYWJvcnRSZWFzb24gfHwgXCJBYm9ydGVkXCIgfSk7IH0pOyB9KTtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0UmVhc29uID0gcmVhc29uO1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBwcm9taXNlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fYXN5bmModGhpcywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIGZpbmFsQWN0aW9uLCBjb25kaXRpb25SZXN1bHQsIGVycl8xLCBza2lwRGlzcGF0Y2g7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFswLCA0LCAsIDVdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSAoX2EgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmNvbmRpdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNhbGwob3B0aW9ucywgYXJnLCB7IGdldFN0YXRlOiBnZXRTdGF0ZSwgZXh0cmE6IGV4dHJhIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNUaGVuYWJsZShjb25kaXRpb25SZXN1bHQpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBjb25kaXRpb25SZXN1bHRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYy5sYWJlbCA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblJlc3VsdCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb25kaXRpb25FcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJBYm9ydGVkIGR1ZSB0byBjb25kaXRpb24gY2FsbGJhY2sgcmV0dXJuaW5nIGZhbHNlLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHBlbmRpbmcocmVxdWVzdElkLCBhcmcsIChfYiA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0UGVuZGluZ01ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKG9wdGlvbnMsIHsgcmVxdWVzdElkOiByZXF1ZXN0SWQsIGFyZzogYXJnIH0sIHsgZ2V0U3RhdGU6IGdldFN0YXRlLCBleHRyYTogZXh0cmEgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLnJhY2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZFByb21pc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUocGF5bG9hZENyZWF0b3IoYXJnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBtZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVqZWN0V2l0aFZhbHVlKHZhbHVlLCBtZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGZpbGxXaXRoVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgbWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZ1bGZpbGxXaXRoTWV0YSh2YWx1ZSwgbWV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZWplY3RXaXRoVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRnVsZmlsbFdpdGhNZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0LnBheWxvYWQsIHJlcXVlc3RJZCwgYXJnLCByZXN1bHQubWV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0LCByZXF1ZXN0SWQsIGFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyXzEgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBlcnJfMSBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZSA/IHJlamVjdGVkKG51bGwsIHJlcXVlc3RJZCwgYXJnLCBlcnJfMS5wYXlsb2FkLCBlcnJfMS5tZXRhKSA6IHJlamVjdGVkKGVycl8xLCByZXF1ZXN0SWQsIGFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcERpc3BhdGNoID0gb3B0aW9ucyAmJiAhb3B0aW9ucy5kaXNwYXRjaENvbmRpdGlvblJlamVjdGlvbiAmJiByZWplY3RlZC5tYXRjaChmaW5hbEFjdGlvbikgJiYgZmluYWxBY3Rpb24ubWV0YS5jb25kaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwRGlzcGF0Y2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZmluYWxBY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZmluYWxBY3Rpb25dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9taXNlLCB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydDogYWJvcnQsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIGFyZzogYXJnLFxyXG4gICAgICAgICAgICAgICAgdW53cmFwOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbih1bndyYXBSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWN0aW9uQ3JlYXRvciwge1xyXG4gICAgICAgIHBlbmRpbmc6IHBlbmRpbmcsXHJcbiAgICAgICAgcmVqZWN0ZWQ6IHJlamVjdGVkLFxyXG4gICAgICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxyXG4gICAgICAgIHR5cGVQcmVmaXg6IHR5cGVQcmVmaXhcclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIHVud3JhcFJlc3VsdChhY3Rpb24pIHtcclxuICAgIGlmIChhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZSkge1xyXG4gICAgICAgIHRocm93IGFjdGlvbi5wYXlsb2FkO1xyXG4gICAgfVxyXG4gICAgaWYgKGFjdGlvbi5lcnJvcikge1xyXG4gICAgICAgIHRocm93IGFjdGlvbi5lcnJvcjtcclxuICAgIH1cclxuICAgIHJldHVybiBhY3Rpb24ucGF5bG9hZDtcclxufVxyXG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSBcImZ1bmN0aW9uXCI7XHJcbn1cclxuLy8gc3JjL3RzSGVscGVycy50c1xyXG52YXIgaGFzTWF0Y2hGdW5jdGlvbiA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICByZXR1cm4gdiAmJiB0eXBlb2Ygdi5tYXRjaCA9PT0gXCJmdW5jdGlvblwiO1xyXG59O1xyXG4vLyBzcmMvbWF0Y2hlcnMudHNcclxudmFyIG1hdGNoZXMgPSBmdW5jdGlvbiAobWF0Y2hlciwgYWN0aW9uKSB7XHJcbiAgICBpZiAoaGFzTWF0Y2hGdW5jdGlvbihtYXRjaGVyKSkge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVyLm1hdGNoKGFjdGlvbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBpc0FueU9mKCkge1xyXG4gICAgdmFyIG1hdGNoZXJzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIG1hdGNoZXJzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVycy5zb21lKGZ1bmN0aW9uIChtYXRjaGVyKSB7IHJldHVybiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbik7IH0pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc0FsbE9mKCkge1xyXG4gICAgdmFyIG1hdGNoZXJzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIG1hdGNoZXJzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVycy5ldmVyeShmdW5jdGlvbiAobWF0Y2hlcikgeyByZXR1cm4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pOyB9KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCB2YWxpZFN0YXR1cykge1xyXG4gICAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi5tZXRhKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIHZhciBoYXNWYWxpZFJlcXVlc3RJZCA9IHR5cGVvZiBhY3Rpb24ubWV0YS5yZXF1ZXN0SWQgPT09IFwic3RyaW5nXCI7XHJcbiAgICB2YXIgaGFzVmFsaWRSZXF1ZXN0U3RhdHVzID0gdmFsaWRTdGF0dXMuaW5kZXhPZihhY3Rpb24ubWV0YS5yZXF1ZXN0U3RhdHVzKSA+IC0xO1xyXG4gICAgcmV0dXJuIGhhc1ZhbGlkUmVxdWVzdElkICYmIGhhc1ZhbGlkUmVxdWVzdFN0YXR1cztcclxufVxyXG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtBcnJheShhKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGFbMF0gPT09IFwiZnVuY3Rpb25cIiAmJiBcInBlbmRpbmdcIiBpbiBhWzBdICYmIFwiZnVsZmlsbGVkXCIgaW4gYVswXSAmJiBcInJlamVjdGVkXCIgaW4gYVswXTtcclxufVxyXG5mdW5jdGlvbiBpc1BlbmRpbmcoKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJwZW5kaW5nXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUGVuZGluZygpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXJzID0gYXN5bmNUaHVua3MubWFwKGZ1bmN0aW9uIChhc3luY1RodW5rKSB7IHJldHVybiBhc3luY1RodW5rLnBlbmRpbmc7IH0pO1xyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNSZWplY3RlZCgpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInJlamVjdGVkXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUmVqZWN0ZWQoKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IGFzeW5jVGh1bmtzLm1hcChmdW5jdGlvbiAoYXN5bmNUaHVuaykgeyByZXR1cm4gYXN5bmNUaHVuay5yZWplY3RlZDsgfSk7XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YuYXBwbHkodm9pZCAwLCBtYXRjaGVycyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICB2YXIgaGFzRmxhZyA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYWN0aW9uICYmIGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlO1xyXG4gICAgfTtcclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbGxPZihpc1JlamVjdGVkLmFwcGx5KHZvaWQgMCwgYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc1JlamVjdGVkV2l0aFZhbHVlKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbGxPZihpc1JlamVjdGVkLmFwcGx5KHZvaWQgMCwgYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzRnVsZmlsbGVkKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wiZnVsZmlsbGVkXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzRnVsZmlsbGVkKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgbWF0Y2hlcnMgPSBhc3luY1RodW5rcy5tYXAoZnVuY3Rpb24gKGFzeW5jVGh1bmspIHsgcmV0dXJuIGFzeW5jVGh1bmsuZnVsZmlsbGVkOyB9KTtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZi5hcHBseSh2b2lkIDAsIG1hdGNoZXJzKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbigpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInBlbmRpbmdcIiwgXCJmdWxmaWxsZWRcIiwgXCJyZWplY3RlZFwiXSk7IH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc0FzeW5jVGh1bmtBY3Rpb24oKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgYXN5bmNUaHVua3NfMSA9IGFzeW5jVGh1bmtzOyBfaSA8IGFzeW5jVGh1bmtzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBhc3luY1RodW5rID0gYXN5bmNUaHVua3NfMVtfaV07XHJcbiAgICAgICAgICAgIG1hdGNoZXJzLnB1c2goYXN5bmNUaHVuay5wZW5kaW5nLCBhc3luY1RodW5rLnJlamVjdGVkLCBhc3luY1RodW5rLmZ1bGZpbGxlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS91dGlscy50c1xyXG52YXIgYXNzZXJ0RnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYywgZXhwZWN0ZWQpIHtcclxuICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihleHBlY3RlZCArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xyXG4gICAgfVxyXG59O1xyXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHtcclxufTtcclxudmFyIGNhdGNoUmVqZWN0aW9uID0gZnVuY3Rpb24gKHByb21pc2UsIG9uRXJyb3IpIHtcclxuICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG5vb3A7IH1cclxuICAgIHByb21pc2UuY2F0Y2gob25FcnJvcik7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxufTtcclxudmFyIGFkZEFib3J0U2lnbmFsTGlzdGVuZXIgPSBmdW5jdGlvbiAoYWJvcnRTaWduYWwsIGNhbGxiYWNrKSB7XHJcbiAgICBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2ssIHsgb25jZTogdHJ1ZSB9KTtcclxufTtcclxudmFyIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24gPSBmdW5jdGlvbiAoYWJvcnRDb250cm9sbGVyLCByZWFzb24pIHtcclxuICAgIHZhciBzaWduYWwgPSBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xyXG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCEoXCJyZWFzb25cIiBpbiBzaWduYWwpKSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNpZ25hbCwgXCJyZWFzb25cIiwge1xyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB2YWx1ZTogcmVhc29uLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQocmVhc29uKTtcclxufTtcclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS9leGNlcHRpb25zLnRzXHJcbnZhciB0YXNrID0gXCJ0YXNrXCI7XHJcbnZhciBsaXN0ZW5lciA9IFwibGlzdGVuZXJcIjtcclxudmFyIGNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XHJcbnZhciBjYW5jZWxsZWQgPSBcImNhbmNlbGxlZFwiO1xyXG52YXIgdGFza0NhbmNlbGxlZCA9IFwidGFzay1cIiArIGNhbmNlbGxlZDtcclxudmFyIHRhc2tDb21wbGV0ZWQgPSBcInRhc2stXCIgKyBjb21wbGV0ZWQ7XHJcbnZhciBsaXN0ZW5lckNhbmNlbGxlZCA9IGxpc3RlbmVyICsgXCItXCIgKyBjYW5jZWxsZWQ7XHJcbnZhciBsaXN0ZW5lckNvbXBsZXRlZCA9IGxpc3RlbmVyICsgXCItXCIgKyBjb21wbGV0ZWQ7XHJcbnZhciBUYXNrQWJvcnRFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFRhc2tBYm9ydEVycm9yKGNvZGUpIHtcclxuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiVGFza0Fib3J0RXJyb3JcIjtcclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSB0YXNrICsgXCIgXCIgKyBjYW5jZWxsZWQgKyBcIiAocmVhc29uOiBcIiArIGNvZGUgKyBcIilcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBUYXNrQWJvcnRFcnJvcjtcclxufSgpKTtcclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS90YXNrLnRzXHJcbnZhciB2YWxpZGF0ZUFjdGl2ZSA9IGZ1bmN0aW9uIChzaWduYWwpIHtcclxuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBUYXNrQWJvcnRFcnJvcihzaWduYWwucmVhc29uKTtcclxuICAgIH1cclxufTtcclxudmFyIHByb21pc2lmeUFib3J0U2lnbmFsID0gZnVuY3Rpb24gKHNpZ25hbCkge1xyXG4gICAgcmV0dXJuIGNhdGNoUmVqZWN0aW9uKG5ldyBQcm9taXNlKGZ1bmN0aW9uIChfLCByZWplY3QpIHtcclxuICAgICAgICB2YXIgbm90aWZ5UmVqZWN0aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVqZWN0KG5ldyBUYXNrQWJvcnRFcnJvcihzaWduYWwucmVhc29uKSk7IH07XHJcbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgIG5vdGlmeVJlamVjdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYWRkQWJvcnRTaWduYWxMaXN0ZW5lcihzaWduYWwsIG5vdGlmeVJlamVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfSkpO1xyXG59O1xyXG52YXIgcnVuVGFzayA9IGZ1bmN0aW9uICh0YXNrMiwgY2xlYW5VcCkgeyByZXR1cm4gX19hc3luYyh2b2lkIDAsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB2YWx1ZSwgZXJyb3JfMTtcclxuICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMCwgMywgNCwgNV0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5yZXNvbHZlKCldO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0YXNrMigpXTtcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFwib2tcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfV07XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IGVycm9yXzEgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvciA/IFwiY2FuY2VsbGVkXCIgOiBcInJlamVjdGVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcl8xXHJcbiAgICAgICAgICAgICAgICAgICAgfV07XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIGNsZWFuVXAgPT0gbnVsbCA/IHZvaWQgMCA6IGNsZWFuVXAoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbNyAvKmVuZGZpbmFsbHkqL107XHJcbiAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTsgfTtcclxudmFyIGNyZWF0ZVBhdXNlID0gZnVuY3Rpb24gKHNpZ25hbCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9taXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhdGNoUmVqZWN0aW9uKFByb21pc2UucmFjZShbcHJvbWlzaWZ5QWJvcnRTaWduYWwoc2lnbmFsKSwgcHJvbWlzZV0pLnRoZW4oZnVuY3Rpb24gKG91dHB1dCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgIH0pKTtcclxuICAgIH07XHJcbn07XHJcbnZhciBjcmVhdGVEZWxheSA9IGZ1bmN0aW9uIChzaWduYWwpIHtcclxuICAgIHZhciBwYXVzZSA9IGNyZWF0ZVBhdXNlKHNpZ25hbCk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRpbWVvdXRNcykge1xyXG4gICAgICAgIHJldHVybiBwYXVzZShuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXR1cm4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpOyB9KSk7XHJcbiAgICB9O1xyXG59O1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4LnRzXHJcbnZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xyXG52YXIgSU5URVJOQUxfTklMX1RPS0VOID0ge307XHJcbnZhciBhbG0gPSBcImxpc3RlbmVyTWlkZGxld2FyZVwiO1xyXG52YXIgY3JlYXRlRm9yayA9IGZ1bmN0aW9uIChwYXJlbnRBYm9ydFNpZ25hbCkge1xyXG4gICAgdmFyIGxpbmtDb250cm9sbGVycyA9IGZ1bmN0aW9uIChjb250cm9sbGVyKSB7IHJldHVybiBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHBhcmVudEFib3J0U2lnbmFsLCBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIHBhcmVudEFib3J0U2lnbmFsLnJlYXNvbik7IH0pOyB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXNrRXhlY3V0b3IpIHtcclxuICAgICAgICBhc3NlcnRGdW5jdGlvbih0YXNrRXhlY3V0b3IsIFwidGFza0V4ZWN1dG9yXCIpO1xyXG4gICAgICAgIHZhciBjaGlsZEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICBsaW5rQ29udHJvbGxlcnMoY2hpbGRBYm9ydENvbnRyb2xsZXIpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBydW5UYXNrKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXN5bmModm9pZCAwLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQyO1xyXG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShwYXJlbnRBYm9ydFNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRhc2tFeGVjdXRvcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDIgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXN1bHQyXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDb21wbGV0ZWQpOyB9KTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICByZXN1bHQ6IGNyZWF0ZVBhdXNlKHBhcmVudEFib3J0U2lnbmFsKShyZXN1bHQpLFxyXG4gICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDYW5jZWxsZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbn07XHJcbnZhciBjcmVhdGVUYWtlUGF0dGVybiA9IGZ1bmN0aW9uIChzdGFydExpc3RlbmluZywgc2lnbmFsKSB7XHJcbiAgICB2YXIgdGFrZSA9IGZ1bmN0aW9uIChwcmVkaWNhdGUsIHRpbWVvdXQpIHsgcmV0dXJuIF9fYXN5bmModm9pZCAwLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlLCB0dXBsZVByb21pc2UsIHByb21pc2VzLCBvdXRwdXQ7XHJcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cGxlUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gc3RhcnRMaXN0ZW5pbmcoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiBwcmVkaWNhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Q6IGZ1bmN0aW9uIChhY3Rpb24sIGxpc3RlbmVyQXBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRTdGF0ZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRPcmlnaW5hbFN0YXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2lmeUFib3J0U2lnbmFsKHNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlUHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQsIG51bGwpOyB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzEsICwgMywgNF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UucmFjZShwcm9taXNlcyldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBvdXRwdXRdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiBjYXRjaFJlamVjdGlvbih0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkpOyB9O1xyXG59O1xyXG52YXIgZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICB2YXIgdHlwZSA9IG9wdGlvbnMudHlwZSwgYWN0aW9uQ3JlYXRvciA9IG9wdGlvbnMuYWN0aW9uQ3JlYXRvciwgbWF0Y2hlciA9IG9wdGlvbnMubWF0Y2hlciwgcHJlZGljYXRlID0gb3B0aW9ucy5wcmVkaWNhdGUsIGVmZmVjdCA9IG9wdGlvbnMuZWZmZWN0O1xyXG4gICAgaWYgKHR5cGUpIHtcclxuICAgICAgICBwcmVkaWNhdGUgPSBjcmVhdGVBY3Rpb24odHlwZSkubWF0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICAgICAgdHlwZSA9IGFjdGlvbkNyZWF0b3IudHlwZTtcclxuICAgICAgICBwcmVkaWNhdGUgPSBhY3Rpb25DcmVhdG9yLm1hdGNoO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobWF0Y2hlcikge1xyXG4gICAgICAgIHByZWRpY2F0ZSA9IG1hdGNoZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcmVkaWNhdGUpIHtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNyZWF0aW5nIG9yIHJlbW92aW5nIGEgbGlzdGVuZXIgcmVxdWlyZXMgb25lIG9mIHRoZSBrbm93biBmaWVsZHMgZm9yIG1hdGNoaW5nIGFuIGFjdGlvblwiKTtcclxuICAgIH1cclxuICAgIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgXCJvcHRpb25zLmxpc3RlbmVyXCIpO1xyXG4gICAgcmV0dXJuIHsgcHJlZGljYXRlOiBwcmVkaWNhdGUsIHR5cGU6IHR5cGUsIGVmZmVjdDogZWZmZWN0IH07XHJcbn07XHJcbnZhciBjcmVhdGVMaXN0ZW5lckVudHJ5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgIHZhciBfYyA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucyksIHR5cGUgPSBfYy50eXBlLCBwcmVkaWNhdGUgPSBfYy5wcmVkaWNhdGUsIGVmZmVjdCA9IF9jLmVmZmVjdDtcclxuICAgIHZhciBpZCA9IG5hbm9pZCgpO1xyXG4gICAgdmFyIGVudHJ5ID0ge1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgICBlZmZlY3Q6IGVmZmVjdCxcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIHByZWRpY2F0ZTogcHJlZGljYXRlLFxyXG4gICAgICAgIHBlbmRpbmc6IG5ldyBTZXQoKSxcclxuICAgICAgICB1bnN1YnNjcmliZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1YnNjcmliZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBlbnRyeTtcclxufTtcclxudmFyIGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGxpc3RlbmVyTWFwKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxpc3RlbmVyTWFwLmZvckVhY2goY2FuY2VsQWN0aXZlTGlzdGVuZXJzKTtcclxuICAgICAgICBsaXN0ZW5lck1hcC5jbGVhcigpO1xyXG4gICAgfTtcclxufTtcclxudmFyIHNhZmVseU5vdGlmeUVycm9yID0gZnVuY3Rpb24gKGVycm9ySGFuZGxlciwgZXJyb3JUb05vdGlmeSwgZXJyb3JJbmZvKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGVycm9ySGFuZGxlcihlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9ySGFuZGxlckVycm9yKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9ySGFuZGxlckVycm9yO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfVxyXG59O1xyXG52YXIgYWRkTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvYWRkXCIpO1xyXG52YXIgY2xlYXJBbGxMaXN0ZW5lcnMgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvcmVtb3ZlQWxsXCIpO1xyXG52YXIgcmVtb3ZlTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvcmVtb3ZlXCIpO1xyXG52YXIgZGVmYXVsdEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBhcmdzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgX19zcHJlYWRBcnJheShbYWxtICsgXCIvZXJyb3JcIl0sIGFyZ3MpKTtcclxufTtcclxudmFyIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgZW50cnkucGVuZGluZy5mb3JFYWNoKGZ1bmN0aW9uIChjb250cm9sbGVyKSB7XHJcbiAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XHJcbiAgICB9KTtcclxufTtcclxuZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlKG1pZGRsZXdhcmVPcHRpb25zKSB7XHJcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgaWYgKG1pZGRsZXdhcmVPcHRpb25zID09PSB2b2lkIDApIHsgbWlkZGxld2FyZU9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIGxpc3RlbmVyTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdmFyIGV4dHJhID0gbWlkZGxld2FyZU9wdGlvbnMuZXh0cmEsIF9jID0gbWlkZGxld2FyZU9wdGlvbnMub25FcnJvciwgb25FcnJvciA9IF9jID09PSB2b2lkIDAgPyBkZWZhdWx0RXJyb3JIYW5kbGVyIDogX2M7XHJcbiAgICBhc3NlcnRGdW5jdGlvbihvbkVycm9yLCBcIm9uRXJyb3JcIik7XHJcbiAgICB2YXIgaW5zZXJ0RW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgICAgICBlbnRyeS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxpc3RlbmVyTWFwLmRlbGV0ZShlbnRyeS5pZCk7IH07XHJcbiAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYW5jZWxPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIGlmIChjYW5jZWxPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBjYW5jZWxPcHRpb25zLmNhbmNlbEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzKGVudHJ5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgdmFyIGZpbmRMaXN0ZW5lckVudHJ5ID0gZnVuY3Rpb24gKGNvbXBhcmF0b3IpIHtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9jID0gQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSk7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IF9jW19pXTtcclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IoZW50cnkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIH07XHJcbiAgICB2YXIgc3RhcnRMaXN0ZW5pbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KGZ1bmN0aW9uIChleGlzdGluZ0VudHJ5KSB7IHJldHVybiBleGlzdGluZ0VudHJ5LmVmZmVjdCA9PT0gb3B0aW9ucy5lZmZlY3Q7IH0pO1xyXG4gICAgICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICAgICAgZW50cnkgPSBjcmVhdGVMaXN0ZW5lckVudHJ5KG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgfTtcclxuICAgIHZhciBzdG9wTGlzdGVuaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgX2MgPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpLCB0eXBlID0gX2MudHlwZSwgZWZmZWN0ID0gX2MuZWZmZWN0LCBwcmVkaWNhdGUgPSBfYy5wcmVkaWNhdGU7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkoZnVuY3Rpb24gKGVudHJ5Mikge1xyXG4gICAgICAgICAgICB2YXIgbWF0Y2hQcmVkaWNhdGVPclR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiA/IGVudHJ5Mi50eXBlID09PSB0eXBlIDogZW50cnkyLnByZWRpY2F0ZSA9PT0gcHJlZGljYXRlO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hQcmVkaWNhdGVPclR5cGUgJiYgZW50cnkyLmVmZmVjdCA9PT0gZWZmZWN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChlbnRyeSkge1xyXG4gICAgICAgICAgICBlbnRyeS51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICEhZW50cnk7XHJcbiAgICB9O1xyXG4gICAgdmFyIG5vdGlmeUxpc3RlbmVyID0gZnVuY3Rpb24gKGVudHJ5LCBhY3Rpb24sIGFwaSwgZ2V0T3JpZ2luYWxTdGF0ZSkgeyByZXR1cm4gX19hc3luYyhfdGhpcywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpbnRlcm5hbFRhc2tDb250cm9sbGVyLCB0YWtlLCBsaXN0ZW5lckVycm9yXzE7XHJcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxUYXNrQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB0YWtlID0gY3JlYXRlVGFrZVBhdHRlcm4oc3RhcnRMaXN0ZW5pbmcsIGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICBfYy5sYWJlbCA9IDE7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFsxLCAzLCA0LCA1XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkucGVuZGluZy5hZGQoaW50ZXJuYWxUYXNrQ29udHJvbGxlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5yZXNvbHZlKGVudHJ5LmVmZmVjdChhY3Rpb24sIGFzc2lnbih7fSwgYXBpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRPcmlnaW5hbFN0YXRlOiBnZXRPcmlnaW5hbFN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiB0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkudGhlbihCb29sZWFuKTsgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IHRha2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheTogY3JlYXRlRGVsYXkoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlKGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiBleHRyYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JrOiBjcmVhdGVGb3JrKGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlOiBlbnRyeS51bnN1YnNjcmliZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyTWFwLnNldChlbnRyeS5pZCwgZW50cnkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVyczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnBlbmRpbmcuZm9yRWFjaChmdW5jdGlvbiAoY29udHJvbGxlciwgXywgc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9PSBpbnRlcm5hbFRhc2tDb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIGxpc3RlbmVyQ2FuY2VsbGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5kZWxldGUoY29udHJvbGxlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpKV07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyRXJyb3JfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShsaXN0ZW5lckVycm9yXzEgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgbGlzdGVuZXJFcnJvcl8xLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZWRCeTogXCJlZmZlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihpbnRlcm5hbFRhc2tDb250cm9sbGVyLCBsaXN0ZW5lckNvbXBsZXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkucGVuZGluZy5kZWxldGUoaW50ZXJuYWxUYXNrQ29udHJvbGxlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTsgfTtcclxuICAgIHZhciBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSA9IGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKGxpc3RlbmVyTWFwKTtcclxuICAgIHZhciBtaWRkbGV3YXJlID0gZnVuY3Rpb24gKGFwaSkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICBpZiAoYWRkTGlzdGVuZXIubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRMaXN0ZW5pbmcoYWN0aW9uLnBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2xlYXJBbGxMaXN0ZW5lcnMubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZW1vdmVMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdG9wTGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsU3RhdGUgPSBhcGkuZ2V0U3RhdGUoKTtcclxuICAgICAgICB2YXIgZ2V0T3JpZ2luYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3RhdGUgPT09IElOVEVSTkFMX05JTF9UT0tFTikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFsbSArIFwiOiBnZXRPcmlnaW5hbFN0YXRlIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFN0YXRlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBuZXh0KGFjdGlvbik7XHJcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lck1hcC5zaXplID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGFwaS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyRW50cmllcyA9IEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBsaXN0ZW5lckVudHJpZXNfMSA9IGxpc3RlbmVyRW50cmllczsgX2kgPCBsaXN0ZW5lckVudHJpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBsaXN0ZW5lckVudHJpZXNfMVtfaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bkxpc3RlbmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBlbnRyeS5wcmVkaWNhdGUoYWN0aW9uLCBjdXJyZW50U3RhdGUsIG9yaWdpbmFsU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAocHJlZGljYXRlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgcHJlZGljYXRlRXJyb3IsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZEJ5OiBcInByZWRpY2F0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihlbnRyeSwgYWN0aW9uLCBhcGksIGdldE9yaWdpbmFsU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXRlID0gSU5URVJOQUxfTklMX1RPS0VOO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTsgfTsgfTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWlkZGxld2FyZTogbWlkZGxld2FyZSxcclxuICAgICAgICBzdGFydExpc3RlbmluZzogc3RhcnRMaXN0ZW5pbmcsXHJcbiAgICAgICAgc3RvcExpc3RlbmluZzogc3RvcExpc3RlbmluZyxcclxuICAgICAgICBjbGVhckxpc3RlbmVyczogY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmVcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2luZGV4LnRzXHJcbmVuYWJsZUVTNSgpO1xyXG5leHBvcnQgeyBNaWRkbGV3YXJlQXJyYXksIFRhc2tBYm9ydEVycm9yLCBhZGRMaXN0ZW5lciwgY2xlYXJBbGxMaXN0ZW5lcnMsIGNvbmZpZ3VyZVN0b3JlLCBjcmVhdGVBY3Rpb24sIGNyZWF0ZUFzeW5jVGh1bmssIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yLCBjcmVhdGVFbnRpdHlBZGFwdGVyLCBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUsIGNyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZSwgZGVmYXVsdDIgYXMgY3JlYXRlTmV4dFN0YXRlLCBjcmVhdGVSZWR1Y2VyLCBjcmVhdGVTZWxlY3RvcjIgYXMgY3JlYXRlU2VsZWN0b3IsIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSwgY3JlYXRlU2xpY2UsIGN1cnJlbnQyIGFzIGN1cnJlbnQsIGZpbmROb25TZXJpYWxpemFibGVWYWx1ZSwgZnJlZXplLCBnZXREZWZhdWx0TWlkZGxld2FyZSwgZ2V0VHlwZSwgaXNBbGxPZiwgaXNBbnlPZiwgaXNBc3luY1RodW5rQWN0aW9uLCBpc0RyYWZ0NCBhcyBpc0RyYWZ0LCBpc0Z1bGZpbGxlZCwgaXNJbW11dGFibGVEZWZhdWx0LCBpc1BlbmRpbmcsIGlzUGxhaW4sIGlzUGxhaW5PYmplY3QsIGlzUmVqZWN0ZWQsIGlzUmVqZWN0ZWRXaXRoVmFsdWUsIG1pbmlTZXJpYWxpemVFcnJvciwgbmFub2lkLCBvcmlnaW5hbCwgcmVtb3ZlTGlzdGVuZXIsIHVud3JhcFJlc3VsdCB9O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWR1eC10b29sa2l0LmVzbS5qcy5tYXAiLCJleHBvcnQgY29uc3QgSU5ERU5UID0gJyAgJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUFJPSkVDVCA9ICdHdWVzdCBQcm9qZWN0JztcblxuZXhwb3J0IGNvbnN0IGJvaWxlcnBsYXRlX3N0YXJ0ID0gKHNlcnZlcjogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBbXG4gICAgJ2NvbnN0IHJlcXVlc3QgPSByZXF1aXJlKFxcJ3N1cGVydGVzdFxcJyk7XFxuJyxcbiAgICBgY29uc3Qgc2VydmVyID0gJyR7c2VydmVyfSc7XFxuYCxcbiAgICBgJHtJTkRFTlR9XFxuYCxcbiAgICAnZGVzY3JpYmUoXFwnUm91dGUgSW50ZWdyYXRpb24gVGVzdGluZ1xcJywgKCApID0+IHtcXG4nLFxuICBdO1xufTtcblxuZXhwb3J0IGNvbnN0IEJPSUxFUlBMQVRFX0VORCA9ICd9KTsnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DTElQQk9BUkQgPVxuICAnWW91ciBDbGlwYm9hcmQgaXMgY3VycmVudGx5IGVtcHR5IVxcblBsZWFzZSBnZW5lcmF0ZSBhIHRlc3QgYmVmb3JlIHdlIGNhbiBkaXNwbGF5IHlvdXIgdGVzdGluZyBjb2RlIGhlcmUuJztcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5cbmltcG9ydCB7IGNyZWF0ZUFzeW5jVGh1bmssIGNyZWF0ZVNsaWNlLCBQYXlsb2FkQWN0aW9uIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7IEJPSUxFUlBMQVRFX0VORCwgYm9pbGVycGxhdGVfc3RhcnQsIERFRkFVTFRfQ0xJUEJPQVJELCBJTkRFTlQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgY2xpcGJvYXJkU3RhdGVUeXBlLCBwb3N0U25pcHBldFBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogY2xpcGJvYXJkU3RhdGVUeXBlID0ge1xuICBzZXJ2ZXI6ICcnLFxuICBjb2RlU25pcHBldHM6IFtdLFxuICBjb2RlRGlzcGxheTogREVGQVVMVF9DTElQQk9BUkQsXG59O1xuXG5jb25zdCB1cGRhdGVDb2RlRGlzcGxheSA9IChzdGF0ZTogY2xpcGJvYXJkU3RhdGVUeXBlKSA9PiB7XG4gIGlmIChzdGF0ZS5jb2RlU25pcHBldHMubGVuZ3RoKSB7XG4gICAgbGV0IGNvZGVTbmlwcyA9IHN0YXRlLmNvZGVTbmlwcGV0cztcbiAgICBjb2RlU25pcHMgPSBjb2RlU25pcHMubWFwKChzbmlwcGV0KSA9PlxuICAgICAgc25pcHBldFxuICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgIC5tYXAoKGxpbmUpID0+IElOREVOVCArIGxpbmUpXG4gICAgICAgIC5qb2luKCdcXG4nKVxuICAgICk7XG5cbiAgICBjb25zdCBjb2RlQXJyID0gW1xuICAgICAgLi4uYm9pbGVycGxhdGVfc3RhcnQoc3RhdGUuc2VydmVyKSxcbiAgICAgIC4uLmNvZGVTbmlwcy5tYXAoKHNuaXBwZXQpID0+IHNuaXBwZXQgKyAnXFxuJyksXG4gICAgICBCT0lMRVJQTEFURV9FTkQsXG4gICAgXTtcbiAgICBzdGF0ZS5jb2RlRGlzcGxheSA9IGNvZGVBcnIuam9pbignJyk7XG4gIH0gZWxzZSBpZiAoc3RhdGUuY29kZVNuaXBwZXRzLmxlbmd0aCA9PT0gMClcbiAgICBzdGF0ZS5jb2RlRGlzcGxheSA9IERFRkFVTFRfQ0xJUEJPQVJEO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsaXBib2FyZFNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICBuYW1lOiAnY2xpcGJvYXJkJyxcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge1xuICAgIGFwcGVuZFRvQ2xpcGJvYXJkOiAoXG4gICAgICBzdGF0ZTogY2xpcGJvYXJkU3RhdGVUeXBlLFxuICAgICAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPHN0cmluZz5cbiAgICApID0+IHtcbiAgICAgIHN0YXRlLmNvZGVTbmlwcGV0cy5wdXNoKGFjdGlvbi5wYXlsb2FkKTtcbiAgICAgIHVwZGF0ZUNvZGVEaXNwbGF5KHN0YXRlKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2NvZGVTbmlwcGV0cycsIEpTT04uc3RyaW5naWZ5KHN0YXRlLmNvZGVTbmlwcGV0cykpO1xuICAgIH0sXG4gICAgY29weUNsaXBib2FyZDogKHN0YXRlOiBjbGlwYm9hcmRTdGF0ZVR5cGUpID0+IHtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHN0YXRlLmNvZGVEaXNwbGF5KTtcbiAgICB9LFxuICAgIHNldFNlcnZlcjogKHN0YXRlOiBjbGlwYm9hcmRTdGF0ZVR5cGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxzdHJpbmc+KSA9PiB7XG4gICAgICBzdGF0ZS5zZXJ2ZXIgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHVwZGF0ZUNvZGVEaXNwbGF5KHN0YXRlKTtcbiAgICB9LFxuICAgIGNsZWFyQ2xpcGJvYXJkU3RhdGU6IChzdGF0ZTogY2xpcGJvYXJkU3RhdGVUeXBlKSA9PiB7XG4gICAgICBzdGF0ZS5zZXJ2ZXIgPSAnJztcbiAgICAgIHN0YXRlLmNvZGVTbmlwcGV0cyA9IFtdO1xuICAgICAgc3RhdGUuY29kZURpc3BsYXkgPSBERUZBVUxUX0NMSVBCT0FSRDtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NvZGVTbmlwcGV0cycpO1xuICAgIH0sXG4gICAgc2V0U25pcHBldHM6IChzdGF0ZTogY2xpcGJvYXJkU3RhdGVUeXBlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248c3RyaW5nW10+KSA9PiB7XG4gICAgICBzdGF0ZS5jb2RlU25pcHBldHMgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHVwZGF0ZUNvZGVEaXNwbGF5KHN0YXRlKTtcbiAgICB9XG4gIH0sXG4gIGV4dHJhUmVkdWNlcnM6IChidWlsZGVyKSA9PiB7XG4gICAgYnVpbGRlclxuICAgICAgLmFkZENhc2UoXG4gICAgICAgIGdldFNuaXBwZXRzLmZ1bGZpbGxlZCxcbiAgICAgICAgKHN0YXRlOiBjbGlwYm9hcmRTdGF0ZVR5cGUsIGFjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgc3RhdGUuY29kZVNuaXBwZXRzID0gYWN0aW9uLnBheWxvYWQuZGF0YTtcblxuICAgICAgICAgIHVwZGF0ZUNvZGVEaXNwbGF5KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfSxcbn0pO1xuXG5jb25zdCB0aHVua3MgPSB7XG4gIHBvc3RTbmlwcGV0OiBjcmVhdGVBc3luY1RodW5rKFxuICAgICdjbGlwYm9hcmRTbGljZS9wb3N0U25pcHBldCcsXG4gICAgYXN5bmMgKHBheWxvYWQ6IHBvc3RTbmlwcGV0UGF5bG9hZCkgPT4ge1xuICAgICAgY29uc3QgeyBwcm9qZWN0SWQsIGNvZGVPdXRwdXQgfSA9IHBheWxvYWQ7XG4gICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoYC9hcGkvY2xpcGJvYXJkLyR7cHJvamVjdElkfWAsIHtcbiAgICAgICAgICBjb2RlX3NuaXBwZXRzOiBjb2RlT3V0cHV0LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjbGlwYm9hcmRTbGljZS9wb3N0U25pcHBldCcsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICksXG4gIGdldFNuaXBwZXRzOiBjcmVhdGVBc3luY1RodW5rKFxuICAgICdjbGlwYm9hcmRTbGljZS9nZXRTbmlwcGV0cycsXG4gICAgYXN5bmMgKHByb2plY3RJZDogbnVtYmVyKSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChgL2FwaS9jbGlwYm9hcmQvJHtwcm9qZWN0SWR9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZygnY2xpcGJvYXJkU2xpY2UvZ2V0U25pcHBldHMnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICApLFxufTtcblxuZXhwb3J0IGNvbnN0IHtcbiAgYXBwZW5kVG9DbGlwYm9hcmQsXG4gIGNvcHlDbGlwYm9hcmQsXG4gIHNldFNlcnZlcixcbiAgY2xlYXJDbGlwYm9hcmRTdGF0ZSxcbiAgc2V0U25pcHBldHMsXG59ID0gY2xpcGJvYXJkU2xpY2UuYWN0aW9ucztcblxuZXhwb3J0IGNvbnN0IHsgcG9zdFNuaXBwZXQsIGdldFNuaXBwZXRzIH0gPSB0aHVua3M7XG5cbmV4cG9ydCBkZWZhdWx0IGNsaXBib2FyZFNsaWNlLnJlZHVjZXI7XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5pbXBvcnQgeyBjcmVhdGVBc3luY1RodW5rLCBjcmVhdGVTbGljZSwgUGF5bG9hZEFjdGlvbiB9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQgeyBERUZBVUxUX1BST0pFQ1QgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgcHJvamVjdHNUeXBlLCB1c2VySW5mb1N0YXRlVHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuY29uc3Qgc2hvd1NhdmUgPSAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY2xpcGJvYXJkRGF0YScpKSA/IHRydWUgOiBmYWxzZTtcbmNvbnN0IGluaXRpYWxTdGF0ZTogdXNlckluZm9TdGF0ZVR5cGUgPSB7XG4gIHNob3dMb2dpbjogZmFsc2UsXG4gIHNob3dTYXZlOiBzaG93U2F2ZSxcbiAgdXNlcklkOiAwLFxuICBwcm9qZWN0c0luZm86IFtcbiAgICB7XG4gICAgICBwcm9qZWN0X2lkOiAwLFxuICAgICAgcHJvamVjdF9uYW1lOiBERUZBVUxUX1BST0pFQ1QsXG4gICAgICB1c2VyX2lkOiAwLFxuICAgICAgc2hvd0FjY2Vzc0NsaXBib2FyZDogZmFsc2UsXG4gICAgfSxcbiAgXSxcbiAgY3VycmVudFByb2plY3Q6IERFRkFVTFRfUFJPSkVDVCxcbiAgY3VycmVudFByb2plY3RJZDogMCxcbiAgbmV3UHJvamVjdDogJycsXG59O1xuXG5leHBvcnQgY29uc3QgdXNlckluZm9TbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogJ3VzZXJJbmZvJyxcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge1xuICAgIHNldFNob3dMb2dpbjogKHN0YXRlOiB1c2VySW5mb1N0YXRlVHlwZSkgPT4ge1xuICAgICAgc3RhdGUuc2hvd0xvZ2luID0gc3RhdGUuc2hvd0xvZ2luID8gZmFsc2UgOiB0cnVlO1xuICAgIH0sXG4gICAgc2V0U2hvd1NhdmU6IChzdGF0ZTogdXNlckluZm9TdGF0ZVR5cGUpID0+IHtcbiAgICAgIHN0YXRlLnNob3dTYXZlID0gIXN0YXRlLnNob3dTYXZlO1xuICAgIH0sXG4gICAgc2V0UHJvamVjdHNJbmZvOiAoXG4gICAgICBzdGF0ZTogdXNlckluZm9TdGF0ZVR5cGUsXG4gICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248cHJvamVjdHNUeXBlW10+XG4gICAgKSA9PiB7XG4gICAgICBzdGF0ZS5wcm9qZWN0c0luZm8gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICB9LFxuICAgIHNldEN1cnJlbnRQcm9qZWN0OiAoXG4gICAgICBzdGF0ZTogdXNlckluZm9TdGF0ZVR5cGUsXG4gICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248c3RyaW5nPlxuICAgICkgPT4ge1xuICAgICAgc3RhdGUuY3VycmVudFByb2plY3QgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGNvbnN0IHByb2plY3RzID0gc3RhdGUucHJvamVjdHNJbmZvLm1hcCgoZWwpID0+IGVsLnByb2plY3RfbmFtZSk7XG4gICAgICBjb25zdCBwcm9qZWN0SWRzID0gc3RhdGUucHJvamVjdHNJbmZvLm1hcCgoZWwpID0+IGVsLnByb2plY3RfaWQpO1xuICAgICAgc3RhdGUuY3VycmVudFByb2plY3RJZCA9IHByb2plY3RJZHNbcHJvamVjdHMuaW5kZXhPZihhY3Rpb24ucGF5bG9hZCldO1xuICAgIH0sXG4gICAgc2V0TmV3UHJvamVjdDogKFxuICAgICAgc3RhdGU6IHVzZXJJbmZvU3RhdGVUeXBlLFxuICAgICAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPHN0cmluZz5cbiAgICApID0+IHtcbiAgICAgIHN0YXRlLm5ld1Byb2plY3QgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICB9LFxuICAgIHNldFVzZXJJZDogKHN0YXRlOiB1c2VySW5mb1N0YXRlVHlwZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPG51bWJlcj4pID0+IHtcbiAgICAgIHN0YXRlLnVzZXJJZCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgIH0sXG4gICAgbG9nb3V0OiAoc3RhdGU6IHVzZXJJbmZvU3RhdGVUeXBlKSA9PiB7XG4gICAgICBzdGF0ZS5wcm9qZWN0c0luZm8gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm9qZWN0X2lkOiAwLFxuICAgICAgICAgIHByb2plY3RfbmFtZTogREVGQVVMVF9QUk9KRUNULFxuICAgICAgICAgIHVzZXJfaWQ6IDAsXG4gICAgICAgICAgc2hvd0FjY2Vzc0NsaXBib2FyZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgc3RhdGUudXNlcklkID0gMDtcbiAgICAgIHN0YXRlLmN1cnJlbnRQcm9qZWN0ID0gREVGQVVMVF9QUk9KRUNUO1xuICAgICAgc3RhdGUubmV3UHJvamVjdCA9ICcnO1xuXG4gICAgfSxcbiAgICBzZXRDbGlwYm9hcmREYXRhOiAoXG4gICAgICBzdGF0ZTogdXNlckluZm9TdGF0ZVR5cGUsXG4gICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248eyBwcm9qZWN0SWQ6IG51bWJlcjsgY2xpcGJvYXJkRGF0YTogc3RyaW5nW10gfT5cbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHByb2plY3RzID0gc3RhdGUucHJvamVjdHNJbmZvO1xuICAgICAgZm9yIChjb25zdCBwcm9qZWN0IG9mIHByb2plY3RzKSB7XG4gICAgICAgIGlmIChwcm9qZWN0LnByb2plY3RfaWQgPT09IGFjdGlvbi5wYXlsb2FkLnByb2plY3RJZCkge1xuICAgICAgICAgIHByb2plY3QuY2xpcGJvYXJkSW5mbyA9IGFjdGlvbi5wYXlsb2FkLmNsaXBib2FyZERhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFNob3dBY2Nlc3NDbGlwYm9hcmQ6IChcbiAgICAgIHN0YXRlOiB1c2VySW5mb1N0YXRlVHlwZSxcbiAgICAgIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxudW1iZXI+XG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBwcm9qZWN0cyA9IHN0YXRlLnByb2plY3RzSW5mbztcbiAgICAgIGZvciAoY29uc3QgcHJvamVjdCBvZiBwcm9qZWN0cykge1xuICAgICAgICBpZiAocHJvamVjdC5wcm9qZWN0X2lkID09PSBhY3Rpb24ucGF5bG9hZCkge1xuICAgICAgICAgIHByb2plY3Quc2hvd0FjY2Vzc0NsaXBib2FyZCA9IHByb2plY3Quc2hvd0FjY2Vzc0NsaXBib2FyZFxuICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2plY3Quc2hvd0FjY2Vzc0NsaXBib2FyZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgZXh0cmFSZWR1Y2VyczogKGJ1aWxkZXIpID0+IHtcbiAgICBidWlsZGVyLmFkZENhc2UoZGVsZXRlUHJvamVjdC5mdWxmaWxsZWQsIChzdGF0ZTogdXNlckluZm9TdGF0ZVR5cGUsIGFjdGlvbjogYW55KSA9PiB7XG4gICAgICBzdGF0ZS5wcm9qZWN0c0luZm8gPSBhY3Rpb24ucGF5bG9hZC5kYXRhO1xuICAgIH0pO1xuICB9LFxufSk7XG5cbmNvbnN0IHRodW5rcyA9IHtcbiAgZGVsZXRlUHJvamVjdDogY3JlYXRlQXN5bmNUaHVuayhcbiAgICAndXNlckluZm9TbGljZS9kZWxldGVQcm9qZWN0JyxcbiAgICBhc3luYyAocHJvamVjdElkOiBudW1iZXIpID0+IHtcbiAgICAgIGxldCByZXNwb25zZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZGVsZXRlKGAvYXBpL3Byb2plY3QvJHtwcm9qZWN0SWR9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZygndXNlckluZm9TbGljZS9kZWxldGVQcm9qZWN0JywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgKSxcbn07XG5cbmV4cG9ydCBjb25zdCB7XG4gIHNldFNob3dMb2dpbixcbiAgc2V0U2hvd1NhdmUsXG4gIHNldFByb2plY3RzSW5mbyxcbiAgc2V0Q3VycmVudFByb2plY3QsXG4gIGxvZ291dCxcbiAgc2V0Q2xpcGJvYXJkRGF0YSxcbiAgc2V0U2hvd0FjY2Vzc0NsaXBib2FyZCxcbiAgc2V0VXNlcklkLFxuICBzZXROZXdQcm9qZWN0LFxufSA9IHVzZXJJbmZvU2xpY2UuYWN0aW9ucztcblxuZXhwb3J0IGNvbnN0IHsgZGVsZXRlUHJvamVjdCB9ID0gdGh1bmtzO1xuXG5leHBvcnQgZGVmYXVsdCB1c2VySW5mb1NsaWNlLnJlZHVjZXI7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyIsImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcykge1xuICAgIHJldHVybiB1YURhdGEuYnJhbmRzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uYnJhbmQgKyBcIi9cIiArIGl0ZW0udmVyc2lvbjtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH1cblxuICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbn0iLCJpbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNMYXlvdXRWaWV3cG9ydCgpIHtcbiAgcmV0dXJuICEvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xufSIsImltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3kpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpbmNsdWRlU2NhbGUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHNjYWxlWCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwID8gcm91bmQoY2xpZW50UmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDEgOiAxO1xuICAgIHNjYWxlWSA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCA/IHJvdW5kKGNsaWVudFJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEgOiAxO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRXaW5kb3coZWxlbWVudCkgOiB3aW5kb3csXG4gICAgICB2aXN1YWxWaWV3cG9ydCA9IF9yZWYudmlzdWFsVmlld3BvcnQ7XG5cbiAgdmFyIGFkZFZpc3VhbE9mZnNldHMgPSAhaXNMYXlvdXRWaWV3cG9ydCgpICYmIGlzRml4ZWRTdHJhdGVneTtcbiAgdmFyIHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0IDogMCkpIC8gc2NhbGVYO1xuICB2YXIgeSA9IChjbGllbnRSZWN0LnRvcCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wIDogMCkpIC8gc2NhbGVZO1xuICB2YXIgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGVYO1xuICB2YXIgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZVk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICBsZWZ0OiB4LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsImltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tIFwiLi9nZXRIVE1MRWxlbWVudFNjcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlKSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7IC8vIFJldHVybnMgdGhlIGxheW91dCByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC4gTGF5b3V0XG4vLyBtZWFucyBpdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRyYW5zZm9ybXMuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExheW91dFJlY3QoZWxlbWVudCkge1xuICB2YXIgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTsgLy8gVXNlIHRoZSBjbGllbnRSZWN0IHNpemVzIGlmIGl0J3Mgbm90IGJlZW4gdHJhbnNmb3JtZWQuXG4gIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTIyM1xuXG4gIHZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC53aWR0aCAtIHdpZHRoKSA8PSAxKSB7XG4gICAgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3QuaGVpZ2h0IC0gaGVpZ2h0KSA8PSAxKSB7XG4gICAgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB5OiBlbGVtZW50Lm9mZnNldFRvcCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsImltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSBcIi4vZ2V0U2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFNjcm9sbFBhcmVudHMoZWxlbWVudCwgbGlzdCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSAoKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5KTtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gW3dpbl0uY29uY2F0KHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNTY3JvbGxQYXJlbnQoc2Nyb2xsUGFyZW50KSA/IHNjcm9sbFBhcmVudCA6IFtdKSA6IHNjcm9sbFBhcmVudDtcbiAgdmFyIHVwZGF0ZWRMaXN0ID0gbGlzdC5jb25jYXQodGFyZ2V0KTtcbiAgcmV0dXJuIGlzQm9keSA/IHVwZGF0ZWRMaXN0IDogLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IGlzQm9keSB0ZWxscyB1cyB0YXJnZXQgd2lsbCBiZSBhbiBIVE1MRWxlbWVudCBoZXJlXG4gIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvb3JkZXJNb2RpZmllcnMuanNcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi91dGlscy9kZWJvdW5jZS5qc1wiO1xuaW1wb3J0IHZhbGlkYXRlTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL3ZhbGlkYXRlTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgdW5pcXVlQnkgZnJvbSBcIi4vdXRpbHMvdW5pcXVlQnkuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBtZXJnZUJ5TmFtZSBmcm9tIFwiLi91dGlscy9tZXJnZUJ5TmFtZS5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuL2VudW1zLmpzXCI7XG52YXIgSU5WQUxJRF9FTEVNRU5UX0VSUk9SID0gJ1BvcHBlcjogSW52YWxpZCByZWZlcmVuY2Ugb3IgcG9wcGVyIGFyZ3VtZW50IHByb3ZpZGVkLiBUaGV5IG11c3QgYmUgZWl0aGVyIGEgRE9NIGVsZW1lbnQgb3IgdmlydHVhbCBlbGVtZW50Lic7XG52YXIgSU5GSU5JVEVfTE9PUF9FUlJPUiA9ICdQb3BwZXI6IEFuIGluZmluaXRlIGxvb3AgaW4gdGhlIG1vZGlmaWVycyBjeWNsZSBoYXMgYmVlbiBkZXRlY3RlZCEgVGhlIGN5Y2xlIGhhcyBiZWVuIGludGVycnVwdGVkIHRvIHByZXZlbnQgYSBicm93c2VyIGNyYXNoLic7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJ1xufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAhYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zKSB7XG4gIGlmIChnZW5lcmF0b3JPcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBnZW5lcmF0b3JPcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX2dlbmVyYXRvck9wdGlvbnMgPSBnZW5lcmF0b3JPcHRpb25zLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE1vZGlmaWVycyxcbiAgICAgIGRlZmF1bHRNb2RpZmllcnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPT09IHZvaWQgMCA/IFtdIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuICAgICAgZGVmYXVsdE9wdGlvbnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID09PSB2b2lkIDAgPyBERUZBVUxUX09QVElPTlMgOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICBvcmRlcmVkTW9kaWZpZXJzOiBbXSxcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgZGVmYXVsdE9wdGlvbnMpLFxuICAgICAgbW9kaWZpZXJzRGF0YToge30sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyOiBwb3BwZXJcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIHN0eWxlczoge31cbiAgICB9O1xuICAgIHZhciBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgdmFyIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdmFyIGluc3RhbmNlID0ge1xuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gc2V0T3B0aW9ucyhzZXRPcHRpb25zQWN0aW9uKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHNldE9wdGlvbnNBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBzZXRPcHRpb25zQWN0aW9uKHN0YXRlLm9wdGlvbnMpIDogc2V0T3B0aW9uc0FjdGlvbjtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBzdGF0ZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIHN0YXRlLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogaXNFbGVtZW50KHJlZmVyZW5jZSkgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UpIDogcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50ID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlLmNvbnRleHRFbGVtZW50KSA6IFtdLFxuICAgICAgICAgIHBvcHBlcjogbGlzdFNjcm9sbFBhcmVudHMocG9wcGVyKVxuICAgICAgICB9OyAvLyBPcmRlcnMgdGhlIG1vZGlmaWVycyBiYXNlZCBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGBwaGFzZWBcbiAgICAgICAgLy8gcHJvcGVydGllc1xuXG4gICAgICAgIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJNb2RpZmllcnMobWVyZ2VCeU5hbWUoW10uY29uY2F0KGRlZmF1bHRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSkpOyAvLyBTdHJpcCBvdXQgZGlzYWJsZWQgbW9kaWZpZXJzXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uZW5hYmxlZDtcbiAgICAgICAgfSk7IC8vIFZhbGlkYXRlIHRoZSBwcm92aWRlZCBtb2RpZmllcnMgc28gdGhhdCB0aGUgY29uc3VtZXIgd2lsbCBnZXQgd2FybmVkXG4gICAgICAgIC8vIGlmIG9uZSBvZiB0aGUgbW9kaWZpZXJzIGlzIGludmFsaWQgZm9yIGFueSByZWFzb25cblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgdmFyIG1vZGlmaWVycyA9IHVuaXF1ZUJ5KFtdLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycyksIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IF9yZWYubmFtZTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhbGlkYXRlTW9kaWZpZXJzKG1vZGlmaWVycyk7XG5cbiAgICAgICAgICBpZiAoZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5vcHRpb25zLnBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICAgICAgICAgIHZhciBmbGlwTW9kaWZpZXIgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZpbmQoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgICAgIHZhciBuYW1lID0gX3JlZjIubmFtZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5hbWUgPT09ICdmbGlwJztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIWZsaXBNb2RpZmllcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFsnUG9wcGVyOiBcImF1dG9cIiBwbGFjZW1lbnRzIHJlcXVpcmUgdGhlIFwiZmxpcFwiIG1vZGlmaWVyIGJlJywgJ3ByZXNlbnQgYW5kIGVuYWJsZWQgdG8gd29yay4nXS5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocG9wcGVyKSxcbiAgICAgICAgICAgICAgbWFyZ2luVG9wID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luVG9wLFxuICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IF9nZXRDb21wdXRlZFN0eWxlLm1hcmdpblJpZ2h0LFxuICAgICAgICAgICAgICBtYXJnaW5Cb3R0b20gPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5Cb3R0b20sXG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5MZWZ0OyAvLyBXZSBubyBsb25nZXIgdGFrZSBpbnRvIGFjY291bnQgYG1hcmdpbnNgIG9uIHRoZSBwb3BwZXIsIGFuZCBpdCBjYW5cbiAgICAgICAgICAvLyBjYXVzZSBidWdzIHdpdGggcG9zaXRpb25pbmcsIHNvIHdlJ2xsIHdhcm4gdGhlIGNvbnN1bWVyXG5cblxuICAgICAgICAgIGlmIChbbWFyZ2luVG9wLCBtYXJnaW5SaWdodCwgbWFyZ2luQm90dG9tLCBtYXJnaW5MZWZ0XS5zb21lKGZ1bmN0aW9uIChtYXJnaW4pIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG1hcmdpbik7XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihbJ1BvcHBlcjogQ1NTIFwibWFyZ2luXCIgc3R5bGVzIGNhbm5vdCBiZSB1c2VkIHRvIGFwcGx5IHBhZGRpbmcnLCAnYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQgb3IgYm91bmRhcnkuJywgJ1RvIHJlcGxpY2F0ZSBtYXJnaW4sIHVzZSB0aGUgYG9mZnNldGAgbW9kaWZpZXIsIGFzIHdlbGwgYXMnLCAndGhlIGBwYWRkaW5nYCBvcHRpb24gaW4gdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIGFuZCBgZmxpcGAnLCAnbW9kaWZpZXJzLiddLmpvaW4oJyAnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKElOVkFMSURfRUxFTUVOVF9FUlJPUik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlciByZWN0cyB0byBiZSByZWFkIGJ5IG1vZGlmaWVyc1xuXG5cbiAgICAgICAgc3RhdGUucmVjdHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBnZXRDb21wb3NpdGVSZWN0KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCcpLFxuICAgICAgICAgIHBvcHBlcjogZ2V0TGF5b3V0UmVjdChwb3BwZXIpXG4gICAgICAgIH07IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZS4gVGhlXG4gICAgICAgIC8vIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRoZSBgZmxpcGAgbW9kaWZpZXIgY2hhbmdpbmcgdGhlXG4gICAgICAgIC8vIHBsYWNlbWVudCwgd2hpY2ggdGhlbiBuZWVkcyB0byByZS1ydW4gYWxsIHRoZSBtb2RpZmllcnMsIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGxvZ2ljIHdhcyBwcmV2aW91c2x5IHJhbiBmb3IgdGhlIHByZXZpb3VzIHBsYWNlbWVudCBhbmQgaXMgdGhlcmVmb3JlXG4gICAgICAgIC8vIHN0YWxlL2luY29ycmVjdFxuXG4gICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50OyAvLyBPbiBlYWNoIHVwZGF0ZSBjeWNsZSwgdGhlIGBtb2RpZmllcnNEYXRhYCBwcm9wZXJ0eSBmb3IgZWFjaCBtb2RpZmllclxuICAgICAgICAvLyBpcyBmaWxsZWQgd2l0aCB0aGUgaW5pdGlhbCBkYXRhIHNwZWNpZmllZCBieSB0aGUgbW9kaWZpZXIuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gaXQgZG9lc24ndCBwZXJzaXN0IGFuZCBpcyBmcmVzaCBvbiBlYWNoIHVwZGF0ZS5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHBlcnNpc3RlbnQgZGF0YSwgdXNlIGAke25hbWV9I3BlcnNpc3RlbnRgXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5tb2RpZmllcnNEYXRhW21vZGlmaWVyLm5hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kaWZpZXIuZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX19kZWJ1Z19sb29wc19fID0gMDtcblxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBfX2RlYnVnX2xvb3BzX18gKz0gMTtcblxuICAgICAgICAgICAgaWYgKF9fZGVidWdfbG9vcHNfXyA+IDEwMCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKElORklOSVRFX0xPT1BfRVJST1IpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZSA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnNbaW5kZXhdLFxuICAgICAgICAgICAgICBmbiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5mbixcbiAgICAgICAgICAgICAgX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5vcHRpb25zLFxuICAgICAgICAgICAgICBfb3B0aW9ucyA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPT09IHZvaWQgMCA/IHt9IDogX3N0YXRlJG9yZGVyZWRNb2RpZmllMixcbiAgICAgICAgICAgICAgbmFtZSA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5uYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RhdGUgPSBmbih7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgb3B0aW9uczogX29wdGlvbnMsXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZVxuICAgICAgICAgICAgfSkgfHwgc3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gQXN5bmMgYW5kIG9wdGltaXN0aWNhbGx5IG9wdGltaXplZCB1cGRhdGUg4oCTIGl0IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmXG4gICAgICAvLyBub3QgbmVjZXNzYXJ5IChkZWJvdW5jZWQgdG8gcnVuIGF0IG1vc3Qgb25jZS1wZXItdGljaylcbiAgICAgIHVwZGF0ZTogZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIHJlc29sdmUoc3RhdGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihJTlZBTElEX0VMRU1FTlRfRVJST1IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciBuYW1lID0gX3JlZjMubmFtZSxcbiAgICAgICAgICAgIF9yZWYzJG9wdGlvbnMgPSBfcmVmMy5vcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucyA9IF9yZWYzJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZjMkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYzLmVmZmVjdDtcblxuICAgICAgICBpZiAodHlwZW9mIGVmZmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjbGVhbnVwRm4gPSBlZmZlY3Qoe1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhciBub29wRm4gPSBmdW5jdGlvbiBub29wRm4oKSB7fTtcblxuICAgICAgICAgIGVmZmVjdENsZWFudXBGbnMucHVzaChjbGVhbnVwRm4gfHwgbm9vcEZuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9KTtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59XG5leHBvcnQgdmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdyB9OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgc3RhcnQsIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZU9mZnNldHMoX3JlZikge1xuICB2YXIgcmVmZXJlbmNlID0gX3JlZi5yZWZlcmVuY2UsXG4gICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50ID8gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudCA/IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBlbGVtZW50LndpZHRoIC8gMjtcbiAgdmFyIGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZWxlbWVudC5oZWlnaHQgLyAyO1xuICB2YXIgb2Zmc2V0cztcblxuICBzd2l0Y2ggKGJhc2VQbGFjZW1lbnQpIHtcbiAgICBjYXNlIHRvcDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZWxlbWVudC5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgYm90dG9tOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHJpZ2h0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgbGVmdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZWxlbWVudC53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuXG4gIHZhciBtYWluQXhpcyA9IGJhc2VQbGFjZW1lbnQgPyBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCkgOiBudWxsO1xuXG4gIGlmIChtYWluQXhpcyAhPSBudWxsKSB7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhdGlvbikge1xuICAgICAgY2FzZSBzdGFydDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSAtIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgZW5kOlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdICsgKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn0iLCJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIHdpbiA9IHdpbmRvdztcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdmFyIHRyYW5zaXRpb25Qcm9wZXJ0eSA9IGdldENvbXB1dGVkU3R5bGUoc3RhdGUuZWxlbWVudHMucG9wcGVyKS50cmFuc2l0aW9uUHJvcGVydHkgfHwgJyc7XG5cbiAgICBpZiAoYWRhcHRpdmUgJiYgWyd0cmFuc2Zvcm0nLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10uc29tZShmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiB0cmFuc2l0aW9uUHJvcGVydHkuaW5kZXhPZihwcm9wZXJ0eSkgPj0gMDtcbiAgICB9KSkge1xuICAgICAgY29uc29sZS53YXJuKFsnUG9wcGVyOiBEZXRlY3RlZCBDU1MgdHJhbnNpdGlvbnMgb24gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcnLCAnQ1NTIHByb3BlcnRpZXM6IFwidHJhbnNmb3JtXCIsIFwidG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIuJywgJ1xcblxcbicsICdEaXNhYmxlIHRoZSBcImNvbXB1dGVTdHlsZXNcIiBtb2RpZmllclxcJ3MgYGFkYXB0aXZlYCBvcHRpb24gdG8gYWxsb3cnLCAnZm9yIHNtb290aCB0cmFuc2l0aW9ucywgb3IgcmVtb3ZlIHRoZXNlIHByb3BlcnRpZXMgZnJvbSB0aGUgQ1NTJywgJ3RyYW5zaXRpb24gZGVjbGFyYXRpb24gb24gdGhlIHBvcHBlciBlbGVtZW50IGlmIG9ubHkgdHJhbnNpdGlvbmluZycsICdvcGFjaXR5IG9yIGJhY2tncm91bmQtY29sb3IgZm9yIGV4YW1wbGUuJywgJ1xcblxcbicsICdXZSByZWNvbW1lbmQgdXNpbmcgdGhlIHBvcHBlciBlbGVtZW50IGFzIGEgd3JhcHBlciBhcm91bmQgYW4gaW5uZXInLCAnZWxlbWVudCB0aGF0IGNhbiBoYXZlIGFueSBDU1MgcHJvcGVydHkgdHJhbnNpdGlvbmVkIGZvciBhbmltYXRpb25zLiddLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuXG5cbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZTtcbiAgdmFyIGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9LFxuICAgIGFycm93OiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fVxuICB9O1xuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICAgIHZhciBzdHlsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBzdGF0ZS5zdHlsZXNbbmFtZV0gOiBpbml0aWFsU3R5bGVzW25hbWVdKTsgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cblxuICAgICAgdmFyIHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAoc3R5bGUsIHByb3BlcnR5KSB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59OyIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydQb3BwZXI6IFRoZSBgYWxsb3dlZEF1dG9QbGFjZW1lbnRzYCBvcHRpb24gZGlkIG5vdCBhbGxvdyBhbnknLCAncGxhY2VtZW50cy4gRW5zdXJlIHRoZSBgcGxhY2VtZW50YCBvcHRpb24gbWF0Y2hlcyB0aGUgdmFyaWF0aW9uJywgJ29mIHRoZSBhbGxvd2VkIHBsYWNlbWVudHMuJywgJ0ZvciBleGFtcGxlLCBcImF1dG9cIiBjYW5ub3QgYmUgdXNlZCB0byBhbGxvdyBcImJvdHRvbS1zdGFydFwiLicsICdVc2UgXCJhdXRvLXN0YXJ0XCIgaW5zdGVhZC4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSIsImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBbHRBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn0iLCJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyIsImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoYXJyb3dFbGVtZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIGVsZW1lbnQgbXVzdCBiZSBhbiBIVE1MRWxlbWVudCAobm90IGFuIFNWR0VsZW1lbnQpLicsICdUbyB1c2UgYW4gU1ZHIGFycm93LCB3cmFwIGl0IGluIGFuIEhUTUxFbGVtZW50IHRoYXQgd2lsbCBiZSB1c2VkIGFzJywgJ3RoZSBhcnJvdy4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIG1vZGlmaWVyXFwncyBgZWxlbWVudGAgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBwb3BwZXInLCAnZWxlbWVudC4nXS5qb2luKCcgJykpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcHBlclVuc3R5bGVkVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlQb3BwZXJVbnN0eWxlZCcsIHNsb3QpO1xufVxuY29uc3QgcG9wcGVyVW5zdHlsZWRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUG9wcGVyVW5zdHlsZWQnLCBbJ3Jvb3QnXSk7XG5leHBvcnQgZGVmYXVsdCBwb3BwZXJVbnN0eWxlZENsYXNzZXM7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFuY2hvckVsXCIsIFwiY2hpbGRyZW5cIiwgXCJjb21wb25lbnRcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGlyZWN0aW9uXCIsIFwiZGlzYWJsZVBvcnRhbFwiLCBcIm1vZGlmaWVyc1wiLCBcIm9wZW5cIiwgXCJvd25lclN0YXRlXCIsIFwicGxhY2VtZW50XCIsIFwicG9wcGVyT3B0aW9uc1wiLCBcInBvcHBlclJlZlwiLCBcIlRyYW5zaXRpb25Qcm9wc1wiXSxcbiAgICAgIF9leGNsdWRlZDIgPSBbXCJhbmNob3JFbFwiLCBcImNoaWxkcmVuXCIsIFwiY29udGFpbmVyXCIsIFwiZGlyZWN0aW9uXCIsIFwiZGlzYWJsZVBvcnRhbFwiLCBcImtlZXBNb3VudGVkXCIsIFwibW9kaWZpZXJzXCIsIFwib3BlblwiLCBcInBsYWNlbWVudFwiLCBcInBvcHBlck9wdGlvbnNcIiwgXCJwb3BwZXJSZWZcIiwgXCJzdHlsZVwiLCBcInRyYW5zaXRpb25cIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjaGFpblByb3BUeXBlcywgSFRNTEVsZW1lbnRUeXBlLCByZWZUeXBlLCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQsIHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IGFzIHVzZUVuaGFuY2VkRWZmZWN0LCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnLi4vY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IFBvcnRhbCBmcm9tICcuLi9Qb3J0YWwnO1xuaW1wb3J0IHsgZ2V0UG9wcGVyVW5zdHlsZWRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BvcHBlclVuc3R5bGVkQ2xhc3Nlcyc7XG5pbXBvcnQgeyB1c2VTbG90UHJvcHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBmbGlwUGxhY2VtZW50KHBsYWNlbWVudCwgZGlyZWN0aW9uKSB7XG4gIGlmIChkaXJlY3Rpb24gPT09ICdsdHInKSB7XG4gICAgcmV0dXJuIHBsYWNlbWVudDtcbiAgfVxuXG4gIHN3aXRjaCAocGxhY2VtZW50KSB7XG4gICAgY2FzZSAnYm90dG9tLWVuZCc6XG4gICAgICByZXR1cm4gJ2JvdHRvbS1zdGFydCc7XG5cbiAgICBjYXNlICdib3R0b20tc3RhcnQnOlxuICAgICAgcmV0dXJuICdib3R0b20tZW5kJztcblxuICAgIGNhc2UgJ3RvcC1lbmQnOlxuICAgICAgcmV0dXJuICd0b3Atc3RhcnQnO1xuXG4gICAgY2FzZSAndG9wLXN0YXJ0JzpcbiAgICAgIHJldHVybiAndG9wLWVuZCc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBsYWNlbWVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBhbmNob3JFbCA9PT0gJ2Z1bmN0aW9uJyA/IGFuY2hvckVsKCkgOiBhbmNob3JFbDtcbn1cblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSAoKSA9PiB7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0UG9wcGVyVW5zdHlsZWRVdGlsaXR5Q2xhc3MsIHt9KTtcbn07XG5cbmNvbnN0IGRlZmF1bHRQb3BwZXJPcHRpb25zID0ge307XG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG5cbmNvbnN0IFBvcHBlclRvb2x0aXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQb3BwZXJUb29sdGlwKHByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWY7XG5cbiAgY29uc3Qge1xuICAgIGFuY2hvckVsLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudCxcbiAgICBjb21wb25lbnRzID0ge30sXG4gICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgZGlyZWN0aW9uLFxuICAgIGRpc2FibGVQb3J0YWwsXG4gICAgbW9kaWZpZXJzLFxuICAgIG9wZW4sXG4gICAgb3duZXJTdGF0ZSxcbiAgICBwbGFjZW1lbnQ6IGluaXRpYWxQbGFjZW1lbnQsXG4gICAgcG9wcGVyT3B0aW9ucyxcbiAgICBwb3BwZXJSZWY6IHBvcHBlclJlZlByb3AsXG4gICAgVHJhbnNpdGlvblByb3BzXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCB0b29sdGlwUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBvd25SZWYgPSB1c2VGb3JrUmVmKHRvb2x0aXBSZWYsIHJlZik7XG4gIGNvbnN0IHBvcHBlclJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUG9wcGVyUmVmID0gdXNlRm9ya1JlZihwb3BwZXJSZWYsIHBvcHBlclJlZlByb3ApO1xuICBjb25zdCBoYW5kbGVQb3BwZXJSZWZSZWYgPSBSZWFjdC51c2VSZWYoaGFuZGxlUG9wcGVyUmVmKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGhhbmRsZVBvcHBlclJlZlJlZi5jdXJyZW50ID0gaGFuZGxlUG9wcGVyUmVmO1xuICB9LCBbaGFuZGxlUG9wcGVyUmVmXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocG9wcGVyUmVmUHJvcCwgKCkgPT4gcG9wcGVyUmVmLmN1cnJlbnQsIFtdKTtcbiAgY29uc3QgcnRsUGxhY2VtZW50ID0gZmxpcFBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50LCBkaXJlY3Rpb24pO1xuICAvKipcbiAgICogcGxhY2VtZW50IGluaXRpYWxpemVkIGZyb20gcHJvcCBidXQgY2FuIGNoYW5nZSBkdXJpbmcgbGlmZXRpbWUgaWYgbW9kaWZpZXJzLmZsaXAuXG4gICAqIG1vZGlmaWVycy5mbGlwIGlzIGVzc2VudGlhbGx5IGEgZmxpcCBmb3IgY29udHJvbGxlZC91bmNvbnRyb2xsZWQgYmVoYXZpb3JcbiAgICovXG5cbiAgY29uc3QgW3BsYWNlbWVudCwgc2V0UGxhY2VtZW50XSA9IFJlYWN0LnVzZVN0YXRlKHJ0bFBsYWNlbWVudCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBvcHBlclJlZi5jdXJyZW50KSB7XG4gICAgICBwb3BwZXJSZWYuY3VycmVudC5mb3JjZVVwZGF0ZSgpO1xuICAgIH1cbiAgfSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWFuY2hvckVsIHx8ICFvcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVBvcHBlclVwZGF0ZSA9IGRhdGEgPT4ge1xuICAgICAgc2V0UGxhY2VtZW50KGRhdGEucGxhY2VtZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChhbmNob3JFbCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHJlc29sdmVkQW5jaG9yRWwgJiYgcmVzb2x2ZWRBbmNob3JFbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICBjb25zdCBib3ggPSByZXNvbHZlZEFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmIGJveC50b3AgPT09IDAgJiYgYm94LmxlZnQgPT09IDAgJiYgYm94LnJpZ2h0ID09PSAwICYmIGJveC5ib3R0b20gPT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsICdUaGUgYW5jaG9yIGVsZW1lbnQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGxheW91dC4nLCBcIk1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBkb2N1bWVudCBvciB0aGF0IGl0J3Mgbm90IGRpc3BsYXkgbm9uZS5cIl0uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHBvcHBlck1vZGlmaWVycyA9IFt7XG4gICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgYWx0Qm91bmRhcnk6IGRpc2FibGVQb3J0YWxcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGFsdEJvdW5kYXJ5OiBkaXNhYmxlUG9ydGFsXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgbmFtZTogJ29uVXBkYXRlJyxcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBwaGFzZTogJ2FmdGVyV3JpdGUnLFxuICAgICAgZm46ICh7XG4gICAgICAgIHN0YXRlXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGhhbmRsZVBvcHBlclVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfV07XG5cbiAgICBpZiAobW9kaWZpZXJzICE9IG51bGwpIHtcbiAgICAgIHBvcHBlck1vZGlmaWVycyA9IHBvcHBlck1vZGlmaWVycy5jb25jYXQobW9kaWZpZXJzKTtcbiAgICB9XG5cbiAgICBpZiAocG9wcGVyT3B0aW9ucyAmJiBwb3BwZXJPcHRpb25zLm1vZGlmaWVycyAhPSBudWxsKSB7XG4gICAgICBwb3BwZXJNb2RpZmllcnMgPSBwb3BwZXJNb2RpZmllcnMuY29uY2F0KHBvcHBlck9wdGlvbnMubW9kaWZpZXJzKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3BwZXIgPSBjcmVhdGVQb3BwZXIocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSwgdG9vbHRpcFJlZi5jdXJyZW50LCBfZXh0ZW5kcyh7XG4gICAgICBwbGFjZW1lbnQ6IHJ0bFBsYWNlbWVudFxuICAgIH0sIHBvcHBlck9wdGlvbnMsIHtcbiAgICAgIG1vZGlmaWVyczogcG9wcGVyTW9kaWZpZXJzXG4gICAgfSkpO1xuICAgIGhhbmRsZVBvcHBlclJlZlJlZi5jdXJyZW50KHBvcHBlcik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHBvcHBlci5kZXN0cm95KCk7XG4gICAgICBoYW5kbGVQb3BwZXJSZWZSZWYuY3VycmVudChudWxsKTtcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIGRpc2FibGVQb3J0YWwsIG1vZGlmaWVycywgb3BlbiwgcG9wcGVyT3B0aW9ucywgcnRsUGxhY2VtZW50XSk7XG4gIGNvbnN0IGNoaWxkUHJvcHMgPSB7XG4gICAgcGxhY2VtZW50XG4gIH07XG5cbiAgaWYgKFRyYW5zaXRpb25Qcm9wcyAhPT0gbnVsbCkge1xuICAgIGNoaWxkUHJvcHMuVHJhbnNpdGlvblByb3BzID0gVHJhbnNpdGlvblByb3BzO1xuICB9XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKCk7XG4gIGNvbnN0IFJvb3QgPSAoX3JlZiA9IGNvbXBvbmVudCAhPSBudWxsID8gY29tcG9uZW50IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6ICdkaXYnO1xuICBjb25zdCByb290UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBSb290LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBjb21wb25lbnRzUHJvcHMucm9vdCxcbiAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIHJvbGU6ICd0b29sdGlwJyxcbiAgICAgIHJlZjogb3duUmVmXG4gICAgfSxcbiAgICBvd25lclN0YXRlOiBfZXh0ZW5kcyh7fSwgcHJvcHMsIG93bmVyU3RhdGUpLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5yb290XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUm9vdCwgX2V4dGVuZHMoe30sIHJvb3RQcm9wcywge1xuICAgIGNoaWxkcmVuOiB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbihjaGlsZFByb3BzKSA6IGNoaWxkcmVuXG4gIH0pKTtcbn0pO1xuLyogZXNsaW50LWVuYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG5cbi8qKlxuICogUG9wcGVycyByZWx5IG9uIHRoZSAzcmQgcGFydHkgbGlicmFyeSBbUG9wcGVyLmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pIGZvciBwb3NpdGlvbmluZy5cbiAqL1xuXG5jb25zdCBQb3BwZXJVbnN0eWxlZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBvcHBlclVuc3R5bGVkKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgIGFuY2hvckVsLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lcjogY29udGFpbmVyUHJvcCxcbiAgICBkaXJlY3Rpb24gPSAnbHRyJyxcbiAgICBkaXNhYmxlUG9ydGFsID0gZmFsc2UsXG4gICAga2VlcE1vdW50ZWQgPSBmYWxzZSxcbiAgICBtb2RpZmllcnMsXG4gICAgb3BlbixcbiAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcbiAgICBwb3BwZXJPcHRpb25zID0gZGVmYXVsdFBvcHBlck9wdGlvbnMsXG4gICAgcG9wcGVyUmVmLFxuICAgIHN0eWxlLFxuICAgIHRyYW5zaXRpb24gPSBmYWxzZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZDIpO1xuXG4gIGNvbnN0IFtleGl0ZWQsIHNldEV4aXRlZF0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcblxuICBjb25zdCBoYW5kbGVFbnRlciA9ICgpID0+IHtcbiAgICBzZXRFeGl0ZWQoZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9ICgpID0+IHtcbiAgICBzZXRFeGl0ZWQodHJ1ZSk7XG4gIH07XG5cbiAgaWYgKCFrZWVwTW91bnRlZCAmJiAhb3BlbiAmJiAoIXRyYW5zaXRpb24gfHwgZXhpdGVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIElmIHRoZSBjb250YWluZXIgcHJvcCBpcyBwcm92aWRlZCwgdXNlIHRoYXRcbiAgLy8gSWYgdGhlIGFuY2hvckVsIHByb3AgaXMgcHJvdmlkZWQsIHVzZSBpdHMgcGFyZW50IGJvZHkgZWxlbWVudCBhcyB0aGUgY29udGFpbmVyXG4gIC8vIElmIG5laXRoZXIgYXJlIHByb3ZpZGVkIGxldCB0aGUgTW9kYWwgdGFrZSBjYXJlIG9mIGNob29zaW5nIHRoZSBjb250YWluZXJcblxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRhaW5lclByb3AgfHwgKGFuY2hvckVsID8gb3duZXJEb2N1bWVudChyZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpKS5ib2R5IDogdW5kZWZpbmVkKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFBvcnRhbCwge1xuICAgIGRpc2FibGVQb3J0YWw6IGRpc2FibGVQb3J0YWwsXG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFBvcHBlclRvb2x0aXAsIF9leHRlbmRzKHtcbiAgICAgIGFuY2hvckVsOiBhbmNob3JFbCxcbiAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgICAgZGlzYWJsZVBvcnRhbDogZGlzYWJsZVBvcnRhbCxcbiAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLFxuICAgICAgcmVmOiByZWYsXG4gICAgICBvcGVuOiB0cmFuc2l0aW9uID8gIWV4aXRlZCA6IG9wZW4sXG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIHBvcHBlck9wdGlvbnM6IHBvcHBlck9wdGlvbnMsXG4gICAgICBwb3BwZXJSZWY6IHBvcHBlclJlZlxuICAgIH0sIG90aGVyLCB7XG4gICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAvLyBQcmV2ZW50cyBzY3JvbGwgaXNzdWUsIHdhaXRpbmcgZm9yIFBvcHBlci5qcyB0byBhZGQgdGhpcyBzdHlsZSBvbmNlIGluaXRpYXRlZC5cbiAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgIC8vIEZpeCBQb3BwZXIuanMgZGlzcGxheSBpc3N1ZVxuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIGRpc3BsYXk6ICFvcGVuICYmIGtlZXBNb3VudGVkICYmICghdHJhbnNpdGlvbiB8fCBleGl0ZWQpID8gJ25vbmUnIDogbnVsbFxuICAgICAgfSwgc3R5bGUpLFxuICAgICAgVHJhbnNpdGlvblByb3BzOiB0cmFuc2l0aW9uID8ge1xuICAgICAgICBpbjogb3BlbixcbiAgICAgICAgb25FbnRlcjogaGFuZGxlRW50ZXIsXG4gICAgICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWRcbiAgICAgIH0gOiBudWxsLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQb3BwZXJVbnN0eWxlZC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50LCBbdmlydHVhbEVsZW1lbnRdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3ZpcnR1YWwtZWxlbWVudHMvKSxcbiAgICogb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0aGVyLlxuICAgKiBJdCdzIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyLlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgcGFzc2VkIGFzIHRoZSByZWZlcmVuY2Ugb2JqZWN0IG9mIHRoZSBQb3BwZXIgaW5zdGFuY2UuXG4gICAqL1xuICBhbmNob3JFbDogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLCBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzLm9wZW4pIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkQW5jaG9yRWwgPSByZXNvbHZlQW5jaG9yRWwocHJvcHMuYW5jaG9yRWwpO1xuXG4gICAgICBpZiAocmVzb2x2ZWRBbmNob3JFbCAmJiByZXNvbHZlZEFuY2hvckVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgIGNvbnN0IGJveCA9IHJlc29sdmVkQW5jaG9yRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiYgYm94LnRvcCA9PT0gMCAmJiBib3gubGVmdCA9PT0gMCAmJiBib3gucmlnaHQgPT09IDAgJiYgYm94LmJvdHRvbSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsICdUaGUgYW5jaG9yIGVsZW1lbnQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGxheW91dC4nLCBcIk1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBkb2N1bWVudCBvciB0aGF0IGl0J3Mgbm90IGRpc3BsYXkgbm9uZS5cIl0uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFyZXNvbHZlZEFuY2hvckVsIHx8IHR5cGVvZiByZXNvbHZlZEFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gJ2Z1bmN0aW9uJyB8fCByZXNvbHZlZEFuY2hvckVsLmNvbnRleHRFbGVtZW50ICE9IG51bGwgJiYgcmVzb2x2ZWRBbmNob3JFbC5jb250ZXh0RWxlbWVudC5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKFsnTVVJOiBUaGUgYGFuY2hvckVsYCBwcm9wIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgaXMgaW52YWxpZC4nLCAnSXQgc2hvdWxkIGJlIGFuIEhUTUwgZWxlbWVudCBpbnN0YW5jZSBvciBhIHZpcnR1YWxFbGVtZW50ICcsICcoaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvdmlydHVhbC1lbGVtZW50cy8pLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG5cbiAgLyoqXG4gICAqIFBvcHBlciByZW5kZXIgZnVuY3Rpb24gb3Igbm9kZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgUG9wcGVyLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBQb3BwZXIuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogRGlyZWN0aW9uIG9mIHRoZSB0ZXh0LlxuICAgKiBAZGVmYXVsdCAnbHRyJ1xuICAgKi9cbiAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoWydsdHInLCAncnRsJ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgYGNoaWxkcmVuYCB3aWxsIGJlIHVuZGVyIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvcnRhbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEFsd2F5cyBrZWVwIHRoZSBjaGlsZHJlbiBpbiB0aGUgRE9NLlxuICAgKiBUaGlzIHByb3AgY2FuIGJlIHVzZWZ1bCBpbiBTRU8gc2l0dWF0aW9uIG9yXG4gICAqIHdoZW4geW91IHdhbnQgdG8gbWF4aW1pemUgdGhlIHJlc3BvbnNpdmVuZXNzIG9mIHRoZSBQb3BwZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBrZWVwTW91bnRlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFBvcHBlci5qcyBpcyBiYXNlZCBvbiBhIFwicGx1Z2luLWxpa2VcIiBhcmNoaXRlY3R1cmUsXG4gICAqIG1vc3Qgb2YgaXRzIGZlYXR1cmVzIGFyZSBmdWxseSBlbmNhcHN1bGF0ZWQgXCJtb2RpZmllcnNcIi5cbiAgICpcbiAgICogQSBtb2RpZmllciBpcyBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGVhY2ggdGltZSBQb3BwZXIuanMgbmVlZHMgdG9cbiAgICogY29tcHV0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlci5cbiAgICogRm9yIHRoaXMgcmVhc29uLCBtb2RpZmllcnMgc2hvdWxkIGJlIHZlcnkgcGVyZm9ybWFudCB0byBhdm9pZCBib3R0bGVuZWNrcy5cbiAgICogVG8gbGVhcm4gaG93IHRvIGNyZWF0ZSBhIG1vZGlmaWVyLCBbcmVhZCB0aGUgbW9kaWZpZXJzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL21vZGlmaWVycy8pLlxuICAgKi9cbiAgbW9kaWZpZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGRhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZWZmZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBlbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBmbjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbmFtZTogUHJvcFR5cGVzLmFueSxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHBoYXNlOiBQcm9wVHlwZXMub25lT2YoWydhZnRlck1haW4nLCAnYWZ0ZXJSZWFkJywgJ2FmdGVyV3JpdGUnLCAnYmVmb3JlTWFpbicsICdiZWZvcmVSZWFkJywgJ2JlZm9yZVdyaXRlJywgJ21haW4nLCAncmVhZCcsICd3cml0ZSddKSxcbiAgICByZXF1aXJlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgcmVxdWlyZXNJZkV4aXN0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZylcbiAgfSkpLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBQb3BwZXIgcGxhY2VtZW50LlxuICAgKiBAZGVmYXVsdCAnYm90dG9tJ1xuICAgKi9cbiAgcGxhY2VtZW50OiBQcm9wVHlwZXMub25lT2YoWydhdXRvLWVuZCcsICdhdXRvLXN0YXJ0JywgJ2F1dG8nLCAnYm90dG9tLWVuZCcsICdib3R0b20tc3RhcnQnLCAnYm90dG9tJywgJ2xlZnQtZW5kJywgJ2xlZnQtc3RhcnQnLCAnbGVmdCcsICdyaWdodC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAndG9wLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJ10pLFxuXG4gIC8qKlxuICAgKiBPcHRpb25zIHByb3ZpZGVkIHRvIHRoZSBbYFBvcHBlci5qc2BdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL2NvbnN0cnVjdG9ycy8jb3B0aW9ucykgaW5zdGFuY2UuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBwb3BwZXJPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1vZGlmaWVyczogUHJvcFR5cGVzLmFycmF5LFxuICAgIG9uRmlyc3RVcGRhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYXV0by1lbmQnLCAnYXV0by1zdGFydCcsICdhdXRvJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tLXN0YXJ0JywgJ2JvdHRvbScsICdsZWZ0LWVuZCcsICdsZWZ0LXN0YXJ0JywgJ2xlZnQnLCAncmlnaHQtZW5kJywgJ3JpZ2h0LXN0YXJ0JywgJ3JpZ2h0JywgJ3RvcC1lbmQnLCAndG9wLXN0YXJ0JywgJ3RvcCddKSxcbiAgICBzdHJhdGVneTogUHJvcFR5cGVzLm9uZU9mKFsnYWJzb2x1dGUnLCAnZml4ZWQnXSlcbiAgfSksXG5cbiAgLyoqXG4gICAqIEEgcmVmIHRoYXQgcG9pbnRzIHRvIHRoZSB1c2VkIHBvcHBlciBpbnN0YW5jZS5cbiAgICovXG4gIHBvcHBlclJlZjogcmVmVHlwZSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEhlbHAgc3VwcG9ydGluZyBhIHJlYWN0LXRyYW5zaXRpb24tZ3JvdXAvVHJhbnNpdGlvbiBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB0cmFuc2l0aW9uOiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFBvcHBlclVuc3R5bGVkOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IFBvcHBlclVuc3R5bGVkIGZyb20gJ0BtdWkvYmFzZS9Qb3BwZXJVbnN0eWxlZCc7XG5pbXBvcnQgeyB1c2VUaGVtZVdpdGhvdXREZWZhdWx0IGFzIHVzZVRoZW1lIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHsgSFRNTEVsZW1lbnRUeXBlLCByZWZUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVkLCB1c2VUaGVtZVByb3BzIH0gZnJvbSAnLi4vc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBQb3BwZXJSb290ID0gc3R5bGVkKFBvcHBlclVuc3R5bGVkLCB7XG4gIG5hbWU6ICdNdWlQb3BwZXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHt9KTtcbi8qKlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW0F1dG9jb21wbGV0ZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL3JlYWN0LWF1dG9jb21wbGV0ZS8pXG4gKiAtIFtNZW51XShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvcmVhY3QtbWVudS8pXG4gKiAtIFtQb3BwZXJdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9yZWFjdC1wb3BwZXIvKVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFtQb3BwZXIgQVBJXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvYXBpL3BvcHBlci8pXG4gKi9cblxuY29uc3QgUG9wcGVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9wcGVyKGluUHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVBvcHBlcidcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQb3BwZXJSb290LCBfZXh0ZW5kcyh7XG4gICAgZGlyZWN0aW9uOiB0aGVtZSA9PSBudWxsID8gdm9pZCAwIDogdGhlbWUuZGlyZWN0aW9uXG4gIH0sIHByb3BzLCB7XG4gICAgcmVmOiByZWZcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQb3BwZXIucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgVHlwZVNjcmlwdCB0eXBlcyBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgW3ZpcnR1YWxFbGVtZW50XShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi92aXJ0dWFsLWVsZW1lbnRzLyksXG4gICAqIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGVpdGhlci5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlci5cbiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIHBhc3NlZCBhcyB0aGUgcmVmZXJlbmNlIG9iamVjdCBvZiB0aGUgUG9wcGVyIGluc3RhbmNlLlxuICAgKi9cbiAgYW5jaG9yRWw6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogUG9wcGVyIHJlbmRlciBmdW5jdGlvbiBvciBub2RlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMuZnVuY10pLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgUG9wcGVyLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBQb3BwZXIuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBbHdheXMga2VlcCB0aGUgY2hpbGRyZW4gaW4gdGhlIERPTS5cbiAgICogVGhpcyBwcm9wIGNhbiBiZSB1c2VmdWwgaW4gU0VPIHNpdHVhdGlvbiBvclxuICAgKiB3aGVuIHlvdSB3YW50IHRvIG1heGltaXplIHRoZSByZXNwb25zaXZlbmVzcyBvZiB0aGUgUG9wcGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAga2VlcE1vdW50ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBQb3BwZXIuanMgaXMgYmFzZWQgb24gYSBcInBsdWdpbi1saWtlXCIgYXJjaGl0ZWN0dXJlLFxuICAgKiBtb3N0IG9mIGl0cyBmZWF0dXJlcyBhcmUgZnVsbHkgZW5jYXBzdWxhdGVkIFwibW9kaWZpZXJzXCIuXG4gICAqXG4gICAqIEEgbW9kaWZpZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBlYWNoIHRpbWUgUG9wcGVyLmpzIG5lZWRzIHRvXG4gICAqIGNvbXB1dGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BwZXIuXG4gICAqIEZvciB0aGlzIHJlYXNvbiwgbW9kaWZpZXJzIHNob3VsZCBiZSB2ZXJ5IHBlcmZvcm1hbnQgdG8gYXZvaWQgYm90dGxlbmVja3MuXG4gICAqIFRvIGxlYXJuIGhvdyB0byBjcmVhdGUgYSBtb2RpZmllciwgW3JlYWQgdGhlIG1vZGlmaWVycyBkb2N1bWVudGF0aW9uXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi9tb2RpZmllcnMvKS5cbiAgICovXG4gIG1vZGlmaWVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGVmZmVjdDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZm46IFByb3BUeXBlcy5mdW5jLFxuICAgIG5hbWU6IFByb3BUeXBlcy5hbnksXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBwaGFzZTogUHJvcFR5cGVzLm9uZU9mKFsnYWZ0ZXJNYWluJywgJ2FmdGVyUmVhZCcsICdhZnRlcldyaXRlJywgJ2JlZm9yZU1haW4nLCAnYmVmb3JlUmVhZCcsICdiZWZvcmVXcml0ZScsICdtYWluJywgJ3JlYWQnLCAnd3JpdGUnXSksXG4gICAgcmVxdWlyZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIHJlcXVpcmVzSWZFeGlzdHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpXG4gIH0pKSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogUG9wcGVyIHBsYWNlbWVudC5cbiAgICogQGRlZmF1bHQgJ2JvdHRvbSdcbiAgICovXG4gIHBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYXV0by1lbmQnLCAnYXV0by1zdGFydCcsICdhdXRvJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tLXN0YXJ0JywgJ2JvdHRvbScsICdsZWZ0LWVuZCcsICdsZWZ0LXN0YXJ0JywgJ2xlZnQnLCAncmlnaHQtZW5kJywgJ3JpZ2h0LXN0YXJ0JywgJ3JpZ2h0JywgJ3RvcC1lbmQnLCAndG9wLXN0YXJ0JywgJ3RvcCddKSxcblxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB0aGUgW2BQb3BwZXIuanNgXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi9jb25zdHJ1Y3RvcnMvI29wdGlvbnMpIGluc3RhbmNlLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcG9wcGVyT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtb2RpZmllcnM6IFByb3BUeXBlcy5hcnJheSxcbiAgICBvbkZpcnN0VXBkYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwbGFjZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2F1dG8tZW5kJywgJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdib3R0b20tZW5kJywgJ2JvdHRvbS1zdGFydCcsICdib3R0b20nLCAnbGVmdC1lbmQnLCAnbGVmdC1zdGFydCcsICdsZWZ0JywgJ3JpZ2h0LWVuZCcsICdyaWdodC1zdGFydCcsICdyaWdodCcsICd0b3AtZW5kJywgJ3RvcC1zdGFydCcsICd0b3AnXSksXG4gICAgc3RyYXRlZ3k6IFByb3BUeXBlcy5vbmVPZihbJ2Fic29sdXRlJywgJ2ZpeGVkJ10pXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgdXNlZCBwb3BwZXIgaW5zdGFuY2UuXG4gICAqL1xuICBwb3BwZXJSZWY6IHJlZlR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogSGVscCBzdXBwb3J0aW5nIGEgcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9UcmFuc2l0aW9uIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHRyYW5zaXRpb246IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUG9wcGVyOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sdGlwVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb29sdGlwJywgc2xvdCk7XG59XG5jb25zdCB0b29sdGlwQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRvb2x0aXAnLCBbJ3BvcHBlcicsICdwb3BwZXJJbnRlcmFjdGl2ZScsICdwb3BwZXJBcnJvdycsICdwb3BwZXJDbG9zZScsICd0b29sdGlwJywgJ3Rvb2x0aXBBcnJvdycsICd0b3VjaCcsICd0b29sdGlwUGxhY2VtZW50TGVmdCcsICd0b29sdGlwUGxhY2VtZW50UmlnaHQnLCAndG9vbHRpcFBsYWNlbWVudFRvcCcsICd0b29sdGlwUGxhY2VtZW50Qm90dG9tJywgJ2Fycm93J10pO1xuZXhwb3J0IGRlZmF1bHQgdG9vbHRpcENsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFycm93XCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc2VzXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRlc2NyaWJlQ2hpbGRcIiwgXCJkaXNhYmxlRm9jdXNMaXN0ZW5lclwiLCBcImRpc2FibGVIb3Zlckxpc3RlbmVyXCIsIFwiZGlzYWJsZUludGVyYWN0aXZlXCIsIFwiZGlzYWJsZVRvdWNoTGlzdGVuZXJcIiwgXCJlbnRlckRlbGF5XCIsIFwiZW50ZXJOZXh0RGVsYXlcIiwgXCJlbnRlclRvdWNoRGVsYXlcIiwgXCJmb2xsb3dDdXJzb3JcIiwgXCJpZFwiLCBcImxlYXZlRGVsYXlcIiwgXCJsZWF2ZVRvdWNoRGVsYXlcIiwgXCJvbkNsb3NlXCIsIFwib25PcGVuXCIsIFwib3BlblwiLCBcInBsYWNlbWVudFwiLCBcIlBvcHBlckNvbXBvbmVudFwiLCBcIlBvcHBlclByb3BzXCIsIFwidGl0bGVcIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCIsIFwiVHJhbnNpdGlvblByb3BzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMsIGFwcGVuZE93bmVyU3RhdGUgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBHcm93IGZyb20gJy4uL0dyb3cnO1xuaW1wb3J0IFBvcHBlciBmcm9tICcuLi9Qb3BwZXInO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnLi4vdXRpbHMvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VJZCBmcm9tICcuLi91dGlscy91c2VJZCc7XG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnLi4vdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUnO1xuaW1wb3J0IHVzZUNvbnRyb2xsZWQgZnJvbSAnLi4vdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5pbXBvcnQgdG9vbHRpcENsYXNzZXMsIHsgZ2V0VG9vbHRpcFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdG9vbHRpcENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuZnVuY3Rpb24gcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxZTUpIC8gMWU1O1xufVxuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlSW50ZXJhY3RpdmUsXG4gICAgYXJyb3csXG4gICAgdG91Y2gsXG4gICAgcGxhY2VtZW50XG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICBwb3BwZXI6IFsncG9wcGVyJywgIWRpc2FibGVJbnRlcmFjdGl2ZSAmJiAncG9wcGVySW50ZXJhY3RpdmUnLCBhcnJvdyAmJiAncG9wcGVyQXJyb3cnXSxcbiAgICB0b29sdGlwOiBbJ3Rvb2x0aXAnLCBhcnJvdyAmJiAndG9vbHRpcEFycm93JywgdG91Y2ggJiYgJ3RvdWNoJywgYHRvb2x0aXBQbGFjZW1lbnQke2NhcGl0YWxpemUocGxhY2VtZW50LnNwbGl0KCctJylbMF0pfWBdLFxuICAgIGFycm93OiBbJ2Fycm93J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUb29sdGlwVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IFRvb2x0aXBQb3BwZXIgPSBzdHlsZWQoUG9wcGVyLCB7XG4gIG5hbWU6ICdNdWlUb29sdGlwJyxcbiAgc2xvdDogJ1BvcHBlcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucG9wcGVyLCAhb3duZXJTdGF0ZS5kaXNhYmxlSW50ZXJhY3RpdmUgJiYgc3R5bGVzLnBvcHBlckludGVyYWN0aXZlLCBvd25lclN0YXRlLmFycm93ICYmIHN0eWxlcy5wb3BwZXJBcnJvdywgIW93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMucG9wcGVyQ2xvc2VdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZSxcbiAgb3BlblxufSkgPT4gX2V4dGVuZHMoe1xuICB6SW5kZXg6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS56SW5kZXgudG9vbHRpcCxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlSW50ZXJhY3RpdmUgJiYge1xuICBwb2ludGVyRXZlbnRzOiAnYXV0bydcbn0sICFvcGVuICYmIHtcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnXG59LCBvd25lclN0YXRlLmFycm93ICYmIHtcbiAgW2AmW2RhdGEtcG9wcGVyLXBsYWNlbWVudCo9XCJib3R0b21cIl0gLiR7dG9vbHRpcENsYXNzZXMuYXJyb3d9YF06IHtcbiAgICB0b3A6IDAsXG4gICAgbWFyZ2luVG9wOiAnLTAuNzFlbScsXG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAgMTAwJSdcbiAgICB9XG4gIH0sXG4gIFtgJltkYXRhLXBvcHBlci1wbGFjZW1lbnQqPVwidG9wXCJdIC4ke3Rvb2x0aXBDbGFzc2VzLmFycm93fWBdOiB7XG4gICAgYm90dG9tOiAwLFxuICAgIG1hcmdpbkJvdHRvbTogJy0wLjcxZW0nLFxuICAgICcmOjpiZWZvcmUnOiB7XG4gICAgICB0cmFuc2Zvcm1PcmlnaW46ICcxMDAlIDAnXG4gICAgfVxuICB9LFxuICBbYCZbZGF0YS1wb3BwZXItcGxhY2VtZW50Kj1cInJpZ2h0XCJdIC4ke3Rvb2x0aXBDbGFzc2VzLmFycm93fWBdOiBfZXh0ZW5kcyh7fSwgIW93bmVyU3RhdGUuaXNSdGwgPyB7XG4gICAgbGVmdDogMCxcbiAgICBtYXJnaW5MZWZ0OiAnLTAuNzFlbSdcbiAgfSA6IHtcbiAgICByaWdodDogMCxcbiAgICBtYXJnaW5SaWdodDogJy0wLjcxZW0nXG4gIH0sIHtcbiAgICBoZWlnaHQ6ICcxZW0nLFxuICAgIHdpZHRoOiAnMC43MWVtJyxcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMTAwJSAxMDAlJ1xuICAgIH1cbiAgfSksXG4gIFtgJltkYXRhLXBvcHBlci1wbGFjZW1lbnQqPVwibGVmdFwiXSAuJHt0b29sdGlwQ2xhc3Nlcy5hcnJvd31gXTogX2V4dGVuZHMoe30sICFvd25lclN0YXRlLmlzUnRsID8ge1xuICAgIHJpZ2h0OiAwLFxuICAgIG1hcmdpblJpZ2h0OiAnLTAuNzFlbSdcbiAgfSA6IHtcbiAgICBsZWZ0OiAwLFxuICAgIG1hcmdpbkxlZnQ6ICctMC43MWVtJ1xuICB9LCB7XG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICB3aWR0aDogJzAuNzFlbScsXG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAgMCdcbiAgICB9XG4gIH0pXG59KSk7XG5jb25zdCBUb29sdGlwVG9vbHRpcCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpVG9vbHRpcCcsXG4gIHNsb3Q6ICdUb29sdGlwJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy50b29sdGlwLCBvd25lclN0YXRlLnRvdWNoICYmIHN0eWxlcy50b3VjaCwgb3duZXJTdGF0ZS5hcnJvdyAmJiBzdHlsZXMudG9vbHRpcEFycm93LCBzdHlsZXNbYHRvb2x0aXBQbGFjZW1lbnQke2NhcGl0YWxpemUob3duZXJTdGF0ZS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXSl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuVG9vbHRpcC5iZyA6IGFscGhhKHRoZW1lLnBhbGV0dGUuZ3JleVs3MDBdLCAwLjkyKSxcbiAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuY29tbW9uLndoaXRlLFxuICBmb250RmFtaWx5OiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRGYW1pbHksXG4gIHBhZGRpbmc6ICc0cHggOHB4JyxcbiAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMSksXG4gIG1heFdpZHRoOiAzMDAsXG4gIG1hcmdpbjogMixcbiAgd29yZFdyYXA6ICdicmVhay13b3JkJyxcbiAgZm9udFdlaWdodDogdGhlbWUudHlwb2dyYXBoeS5mb250V2VpZ2h0TWVkaXVtXG59LCBvd25lclN0YXRlLmFycm93ICYmIHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIG1hcmdpbjogMFxufSwgb3duZXJTdGF0ZS50b3VjaCAmJiB7XG4gIHBhZGRpbmc6ICc4cHggMTZweCcsXG4gIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTQpLFxuICBsaW5lSGVpZ2h0OiBgJHtyb3VuZCgxNiAvIDE0KX1lbWAsXG4gIGZvbnRXZWlnaHQ6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodFJlZ3VsYXJcbn0sIHtcbiAgW2AuJHt0b29sdGlwQ2xhc3Nlcy5wb3BwZXJ9W2RhdGEtcG9wcGVyLXBsYWNlbWVudCo9XCJsZWZ0XCJdICZgXTogX2V4dGVuZHMoe1xuICAgIHRyYW5zZm9ybU9yaWdpbjogJ3JpZ2h0IGNlbnRlcidcbiAgfSwgIW93bmVyU3RhdGUuaXNSdGwgPyBfZXh0ZW5kcyh7XG4gICAgbWFyZ2luUmlnaHQ6ICcxNHB4J1xuICB9LCBvd25lclN0YXRlLnRvdWNoICYmIHtcbiAgICBtYXJnaW5SaWdodDogJzI0cHgnXG4gIH0pIDogX2V4dGVuZHMoe1xuICAgIG1hcmdpbkxlZnQ6ICcxNHB4J1xuICB9LCBvd25lclN0YXRlLnRvdWNoICYmIHtcbiAgICBtYXJnaW5MZWZ0OiAnMjRweCdcbiAgfSkpLFxuICBbYC4ke3Rvb2x0aXBDbGFzc2VzLnBvcHBlcn1bZGF0YS1wb3BwZXItcGxhY2VtZW50Kj1cInJpZ2h0XCJdICZgXTogX2V4dGVuZHMoe1xuICAgIHRyYW5zZm9ybU9yaWdpbjogJ2xlZnQgY2VudGVyJ1xuICB9LCAhb3duZXJTdGF0ZS5pc1J0bCA/IF9leHRlbmRzKHtcbiAgICBtYXJnaW5MZWZ0OiAnMTRweCdcbiAgfSwgb3duZXJTdGF0ZS50b3VjaCAmJiB7XG4gICAgbWFyZ2luTGVmdDogJzI0cHgnXG4gIH0pIDogX2V4dGVuZHMoe1xuICAgIG1hcmdpblJpZ2h0OiAnMTRweCdcbiAgfSwgb3duZXJTdGF0ZS50b3VjaCAmJiB7XG4gICAgbWFyZ2luUmlnaHQ6ICcyNHB4J1xuICB9KSksXG4gIFtgLiR7dG9vbHRpcENsYXNzZXMucG9wcGVyfVtkYXRhLXBvcHBlci1wbGFjZW1lbnQqPVwidG9wXCJdICZgXTogX2V4dGVuZHMoe1xuICAgIHRyYW5zZm9ybU9yaWdpbjogJ2NlbnRlciBib3R0b20nLFxuICAgIG1hcmdpbkJvdHRvbTogJzE0cHgnXG4gIH0sIG93bmVyU3RhdGUudG91Y2ggJiYge1xuICAgIG1hcmdpbkJvdHRvbTogJzI0cHgnXG4gIH0pLFxuICBbYC4ke3Rvb2x0aXBDbGFzc2VzLnBvcHBlcn1bZGF0YS1wb3BwZXItcGxhY2VtZW50Kj1cImJvdHRvbVwiXSAmYF06IF9leHRlbmRzKHtcbiAgICB0cmFuc2Zvcm1PcmlnaW46ICdjZW50ZXIgdG9wJyxcbiAgICBtYXJnaW5Ub3A6ICcxNHB4J1xuICB9LCBvd25lclN0YXRlLnRvdWNoICYmIHtcbiAgICBtYXJnaW5Ub3A6ICcyNHB4J1xuICB9KVxufSkpO1xuY29uc3QgVG9vbHRpcEFycm93ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVG9vbHRpcCcsXG4gIHNsb3Q6ICdBcnJvdycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmFycm93XG59KSgoe1xuICB0aGVtZVxufSkgPT4gKHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgd2lkdGg6ICcxZW0nLFxuICBoZWlnaHQ6ICcwLjcxZW0nXG4gIC8qID0gd2lkdGggLyBzcXJ0KDIpID0gKGxlbmd0aCBvZiB0aGUgaHlwb3RlbnVzZSkgKi9cbiAgLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgY29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuVG9vbHRpcC5iZyA6IGFscGhhKHRoZW1lLnBhbGV0dGUuZ3JleVs3MDBdLCAwLjkpLFxuICAnJjo6YmVmb3JlJzoge1xuICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICBtYXJnaW46ICdhdXRvJyxcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICB0cmFuc2Zvcm06ICdyb3RhdGUoNDVkZWcpJ1xuICB9XG59KSk7XG5sZXQgaHlzdGVyc2lzT3BlbiA9IGZhbHNlO1xubGV0IGh5c3RlcnNpc1RpbWVyID0gbnVsbDtcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0UmVzZXQoKSB7XG4gIGh5c3RlcnNpc09wZW4gPSBmYWxzZTtcbiAgY2xlYXJUaW1lb3V0KGh5c3RlcnNpc1RpbWVyKTtcbn1cblxuZnVuY3Rpb24gY29tcG9zZUV2ZW50SGFuZGxlcihoYW5kbGVyLCBldmVudEhhbmRsZXIpIHtcbiAgcmV0dXJuIGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnRIYW5kbGVyKSB7XG4gICAgICBldmVudEhhbmRsZXIoZXZlbnQpO1xuICAgIH1cblxuICAgIGhhbmRsZXIoZXZlbnQpO1xuICB9O1xufSAvLyBUT0RPIHY2OiBSZW1vdmUgUG9wcGVyQ29tcG9uZW50LCBQb3BwZXJQcm9wcywgVHJhbnNpdGlvbkNvbXBvbmVudCBhbmQgVHJhbnNpdGlvblByb3BzLlxuXG5cbmNvbnN0IFRvb2x0aXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUb29sdGlwKGluUHJvcHMsIHJlZikge1xuICB2YXIgX2NvbXBvbmVudHMkUG9wcGVyLCBfcmVmLCBfY29tcG9uZW50cyRUcmFuc2l0aW8sIF9jb21wb25lbnRzJFRvb2x0aXAsIF9jb21wb25lbnRzJEFycm93LCBfY29tcG9uZW50c1Byb3BzJHBvcHA7XG5cbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG9vbHRpcCdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGFycm93ID0gZmFsc2UsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50cyA9IHt9LFxuICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgIGRlc2NyaWJlQ2hpbGQgPSBmYWxzZSxcbiAgICBkaXNhYmxlRm9jdXNMaXN0ZW5lciA9IGZhbHNlLFxuICAgIGRpc2FibGVIb3Zlckxpc3RlbmVyID0gZmFsc2UsXG4gICAgZGlzYWJsZUludGVyYWN0aXZlOiBkaXNhYmxlSW50ZXJhY3RpdmVQcm9wID0gZmFsc2UsXG4gICAgZGlzYWJsZVRvdWNoTGlzdGVuZXIgPSBmYWxzZSxcbiAgICBlbnRlckRlbGF5ID0gMTAwLFxuICAgIGVudGVyTmV4dERlbGF5ID0gMCxcbiAgICBlbnRlclRvdWNoRGVsYXkgPSA3MDAsXG4gICAgZm9sbG93Q3Vyc29yID0gZmFsc2UsXG4gICAgaWQ6IGlkUHJvcCxcbiAgICBsZWF2ZURlbGF5ID0gMCxcbiAgICBsZWF2ZVRvdWNoRGVsYXkgPSAxNTAwLFxuICAgIG9uQ2xvc2UsXG4gICAgb25PcGVuLFxuICAgIG9wZW46IG9wZW5Qcm9wLFxuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIFBvcHBlckNvbXBvbmVudDogUG9wcGVyQ29tcG9uZW50UHJvcCxcbiAgICBQb3BwZXJQcm9wcyA9IHt9LFxuICAgIHRpdGxlLFxuICAgIFRyYW5zaXRpb25Db21wb25lbnQ6IFRyYW5zaXRpb25Db21wb25lbnRQcm9wID0gR3JvdyxcbiAgICBUcmFuc2l0aW9uUHJvcHNcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3QgaXNSdGwgPSB0aGVtZS5kaXJlY3Rpb24gPT09ICdydGwnO1xuICBjb25zdCBbY2hpbGROb2RlLCBzZXRDaGlsZE5vZGVdID0gUmVhY3QudXNlU3RhdGUoKTtcbiAgY29uc3QgW2Fycm93UmVmLCBzZXRBcnJvd1JlZl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgaWdub3JlTm9uVG91Y2hFdmVudHMgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBkaXNhYmxlSW50ZXJhY3RpdmUgPSBkaXNhYmxlSW50ZXJhY3RpdmVQcm9wIHx8IGZvbGxvd0N1cnNvcjtcbiAgY29uc3QgY2xvc2VUaW1lciA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBlbnRlclRpbWVyID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGxlYXZlVGltZXIgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgdG91Y2hUaW1lciA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBbb3BlblN0YXRlLCBzZXRPcGVuU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogb3BlblByb3AsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgbmFtZTogJ1Rvb2x0aXAnLFxuICAgIHN0YXRlOiAnb3BlbidcbiAgfSk7XG4gIGxldCBvcGVuID0gb3BlblN0YXRlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3Qge1xuICAgICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gICAgfSA9IFJlYWN0LnVzZVJlZihvcGVuUHJvcCAhPT0gdW5kZWZpbmVkKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGNoaWxkTm9kZSAmJiBjaGlsZE5vZGUuZGlzYWJsZWQgJiYgIWlzQ29udHJvbGxlZCAmJiB0aXRsZSAhPT0gJycgJiYgY2hpbGROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IGFyZSBwcm92aWRpbmcgYSBkaXNhYmxlZCBgYnV0dG9uYCBjaGlsZCB0byB0aGUgVG9vbHRpcCBjb21wb25lbnQuJywgJ0EgZGlzYWJsZWQgZWxlbWVudCBkb2VzIG5vdCBmaXJlIGV2ZW50cy4nLCBcIlRvb2x0aXAgbmVlZHMgdG8gbGlzdGVuIHRvIHRoZSBjaGlsZCBlbGVtZW50J3MgZXZlbnRzIHRvIGRpc3BsYXkgdGhlIHRpdGxlLlwiLCAnJywgJ0FkZCBhIHNpbXBsZSB3cmFwcGVyIGVsZW1lbnQsIHN1Y2ggYXMgYSBgc3BhbmAuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFt0aXRsZSwgY2hpbGROb2RlLCBpc0NvbnRyb2xsZWRdKTtcbiAgfVxuXG4gIGNvbnN0IGlkID0gdXNlSWQoaWRQcm9wKTtcbiAgY29uc3QgcHJldlVzZXJTZWxlY3QgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3Qgc3RvcFRvdWNoSW50ZXJhY3Rpb24gPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHByZXZVc2VyU2VsZWN0LmN1cnJlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5XZWJraXRVc2VyU2VsZWN0ID0gcHJldlVzZXJTZWxlY3QuY3VycmVudDtcbiAgICAgIHByZXZVc2VyU2VsZWN0LmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHRvdWNoVGltZXIuY3VycmVudCk7XG4gIH0sIFtdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGNsb3NlVGltZXIuY3VycmVudCk7XG4gICAgICBjbGVhclRpbWVvdXQoZW50ZXJUaW1lci5jdXJyZW50KTtcbiAgICAgIGNsZWFyVGltZW91dChsZWF2ZVRpbWVyLmN1cnJlbnQpO1xuICAgICAgc3RvcFRvdWNoSW50ZXJhY3Rpb24oKTtcbiAgICB9O1xuICB9LCBbc3RvcFRvdWNoSW50ZXJhY3Rpb25dKTtcblxuICBjb25zdCBoYW5kbGVPcGVuID0gZXZlbnQgPT4ge1xuICAgIGNsZWFyVGltZW91dChoeXN0ZXJzaXNUaW1lcik7XG4gICAgaHlzdGVyc2lzT3BlbiA9IHRydWU7IC8vIFRoZSBtb3VzZW92ZXIgZXZlbnQgd2lsbCB0cmlnZ2VyIGZvciBldmVyeSBuZXN0ZWQgZWxlbWVudCBpbiB0aGUgdG9vbHRpcC5cbiAgICAvLyBXZSBjYW4gc2tpcCByZXJlbmRlcmluZyB3aGVuIHRoZSB0b29sdGlwIGlzIGFscmVhZHkgb3Blbi5cbiAgICAvLyBXZSBhcmUgdXNpbmcgdGhlIG1vdXNlb3ZlciBldmVudCBpbnN0ZWFkIG9mIHRoZSBtb3VzZWVudGVyIGV2ZW50IHRvIGZpeCBhIGhpZGUvc2hvdyBpc3N1ZS5cblxuICAgIHNldE9wZW5TdGF0ZSh0cnVlKTtcblxuICAgIGlmIChvbk9wZW4gJiYgIW9wZW4pIHtcbiAgICAgIG9uT3BlbihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gdXNlRXZlbnRDYWxsYmFjayhcbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVhY3QuU3ludGhldGljRXZlbnQgfCBFdmVudH0gZXZlbnRcbiAgICovXG4gIGV2ZW50ID0+IHtcbiAgICBjbGVhclRpbWVvdXQoaHlzdGVyc2lzVGltZXIpO1xuICAgIGh5c3RlcnNpc1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBoeXN0ZXJzaXNPcGVuID0gZmFsc2U7XG4gICAgfSwgODAwICsgbGVhdmVEZWxheSk7XG4gICAgc2V0T3BlblN0YXRlKGZhbHNlKTtcblxuICAgIGlmIChvbkNsb3NlICYmIG9wZW4pIHtcbiAgICAgIG9uQ2xvc2UoZXZlbnQpO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dChjbG9zZVRpbWVyLmN1cnJlbnQpO1xuICAgIGNsb3NlVGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWdub3JlTm9uVG91Y2hFdmVudHMuY3VycmVudCA9IGZhbHNlO1xuICAgIH0sIHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXN0KTtcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlRW50ZXIgPSBldmVudCA9PiB7XG4gICAgaWYgKGlnbm9yZU5vblRvdWNoRXZlbnRzLmN1cnJlbnQgJiYgZXZlbnQudHlwZSAhPT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBSZW1vdmUgdGhlIHRpdGxlIGFoZWFkIG9mIHRpbWUuXG4gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciB0aGUgbmV4dCByZW5kZXIgY29tbWl0LlxuICAgIC8vIFdlIHdvdWxkIHJpc2sgZGlzcGxheWluZyB0d28gdG9vbHRpcHMgYXQgdGhlIHNhbWUgdGltZSAobmF0aXZlICsgdGhpcyBvbmUpLlxuXG5cbiAgICBpZiAoY2hpbGROb2RlKSB7XG4gICAgICBjaGlsZE5vZGUucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dChlbnRlclRpbWVyLmN1cnJlbnQpO1xuICAgIGNsZWFyVGltZW91dChsZWF2ZVRpbWVyLmN1cnJlbnQpO1xuXG4gICAgaWYgKGVudGVyRGVsYXkgfHwgaHlzdGVyc2lzT3BlbiAmJiBlbnRlck5leHREZWxheSkge1xuICAgICAgZW50ZXJUaW1lci5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhbmRsZU9wZW4oZXZlbnQpO1xuICAgICAgfSwgaHlzdGVyc2lzT3BlbiA/IGVudGVyTmV4dERlbGF5IDogZW50ZXJEZWxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZU9wZW4oZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVMZWF2ZSA9IGV2ZW50ID0+IHtcbiAgICBjbGVhclRpbWVvdXQoZW50ZXJUaW1lci5jdXJyZW50KTtcbiAgICBjbGVhclRpbWVvdXQobGVhdmVUaW1lci5jdXJyZW50KTtcbiAgICBsZWF2ZVRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGhhbmRsZUNsb3NlKGV2ZW50KTtcbiAgICB9LCBsZWF2ZURlbGF5KTtcbiAgfTtcblxuICBjb25zdCB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyVmlzaWJsZSxcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1Zpc2libGUsXG4gICAgcmVmOiBmb2N1c1Zpc2libGVSZWZcbiAgfSA9IHVzZUlzRm9jdXNWaXNpYmxlKCk7IC8vIFdlIGRvbid0IG5lY2Vzc2FyaWx5IGNhcmUgYWJvdXQgdGhlIGZvY3VzVmlzaWJsZSBzdGF0ZSAod2hpY2ggaXMgc2FmZSB0byBhY2Nlc3MgdmlhIHJlZiBhbnl3YXkpLlxuICAvLyBXZSBqdXN0IG5lZWQgdG8gcmUtcmVuZGVyIHRoZSBUb29sdGlwIGlmIHRoZSBmb2N1cy12aXNpYmxlIHN0YXRlIGNoYW5nZXMuXG5cbiAgY29uc3QgWywgc2V0Q2hpbGRJc0ZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBoYW5kbGVCbHVyVmlzaWJsZShldmVudCk7XG5cbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldENoaWxkSXNGb2N1c1Zpc2libGUoZmFsc2UpO1xuICAgICAgaGFuZGxlTGVhdmUoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1cyA9IGV2ZW50ID0+IHtcbiAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzc3NjlcbiAgICAvLyBUaGUgYXV0b0ZvY3VzIG9mIFJlYWN0IG1pZ2h0IHRyaWdnZXIgdGhlIGV2ZW50IGJlZm9yZSB0aGUgY29tcG9uZW50RGlkTW91bnQuXG4gICAgLy8gV2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGlzIGV2ZW50dWFsaXR5LlxuICAgIGlmICghY2hpbGROb2RlKSB7XG4gICAgICBzZXRDaGlsZE5vZGUoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgfVxuXG4gICAgaGFuZGxlRm9jdXNWaXNpYmxlKGV2ZW50KTtcblxuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICBzZXRDaGlsZElzRm9jdXNWaXNpYmxlKHRydWUpO1xuICAgICAgaGFuZGxlRW50ZXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZXRlY3RUb3VjaFN0YXJ0ID0gZXZlbnQgPT4ge1xuICAgIGlnbm9yZU5vblRvdWNoRXZlbnRzLmN1cnJlbnQgPSB0cnVlO1xuICAgIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSBjaGlsZHJlbi5wcm9wcztcblxuICAgIGlmIChjaGlsZHJlblByb3BzLm9uVG91Y2hTdGFydCkge1xuICAgICAgY2hpbGRyZW5Qcm9wcy5vblRvdWNoU3RhcnQoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNb3VzZU92ZXIgPSBoYW5kbGVFbnRlcjtcbiAgY29uc3QgaGFuZGxlTW91c2VMZWF2ZSA9IGhhbmRsZUxlYXZlO1xuXG4gIGNvbnN0IGhhbmRsZVRvdWNoU3RhcnQgPSBldmVudCA9PiB7XG4gICAgZGV0ZWN0VG91Y2hTdGFydChldmVudCk7XG4gICAgY2xlYXJUaW1lb3V0KGxlYXZlVGltZXIuY3VycmVudCk7XG4gICAgY2xlYXJUaW1lb3V0KGNsb3NlVGltZXIuY3VycmVudCk7XG4gICAgc3RvcFRvdWNoSW50ZXJhY3Rpb24oKTtcbiAgICBwcmV2VXNlclNlbGVjdC5jdXJyZW50ID0gZG9jdW1lbnQuYm9keS5zdHlsZS5XZWJraXRVc2VyU2VsZWN0OyAvLyBQcmV2ZW50IGlPUyB0ZXh0IHNlbGVjdGlvbiBvbiBsb25nLXRhcC5cblxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuV2Via2l0VXNlclNlbGVjdCA9ICdub25lJztcbiAgICB0b3VjaFRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuV2Via2l0VXNlclNlbGVjdCA9IHByZXZVc2VyU2VsZWN0LmN1cnJlbnQ7XG4gICAgICBoYW5kbGVFbnRlcihldmVudCk7XG4gICAgfSwgZW50ZXJUb3VjaERlbGF5KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVUb3VjaEVuZCA9IGV2ZW50ID0+IHtcbiAgICBpZiAoY2hpbGRyZW4ucHJvcHMub25Ub3VjaEVuZCkge1xuICAgICAgY2hpbGRyZW4ucHJvcHMub25Ub3VjaEVuZChldmVudCk7XG4gICAgfVxuXG4gICAgc3RvcFRvdWNoSW50ZXJhY3Rpb24oKTtcbiAgICBjbGVhclRpbWVvdXQobGVhdmVUaW1lci5jdXJyZW50KTtcbiAgICBsZWF2ZVRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGhhbmRsZUNsb3NlKGV2ZW50KTtcbiAgICB9LCBsZWF2ZVRvdWNoRGVsYXkpO1xuICB9O1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IG5hdGl2ZUV2ZW50XG4gICAgICovXG5cblxuICAgIGZ1bmN0aW9uIGhhbmRsZUtleURvd24obmF0aXZlRXZlbnQpIHtcbiAgICAgIC8vIElFMTEsIEVkZ2UgKHByaW9yIHRvIHVzaW5nIEJpbms/KSB1c2UgJ0VzYydcbiAgICAgIGlmIChuYXRpdmVFdmVudC5rZXkgPT09ICdFc2NhcGUnIHx8IG5hdGl2ZUV2ZW50LmtleSA9PT0gJ0VzYycpIHtcbiAgICAgICAgaGFuZGxlQ2xvc2UobmF0aXZlRXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuICAgIH07XG4gIH0sIFtoYW5kbGVDbG9zZSwgb3Blbl0pO1xuICBjb25zdCBoYW5kbGVVc2VSZWYgPSB1c2VGb3JrUmVmKHNldENoaWxkTm9kZSwgcmVmKTtcbiAgY29uc3QgaGFuZGxlRm9jdXNSZWYgPSB1c2VGb3JrUmVmKGZvY3VzVmlzaWJsZVJlZiwgaGFuZGxlVXNlUmVmKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihjaGlsZHJlbi5yZWYsIGhhbmRsZUZvY3VzUmVmKTsgLy8gVGhlcmUgaXMgbm8gcG9pbnQgaW4gZGlzcGxheWluZyBhbiBlbXB0eSB0b29sdGlwLlxuXG4gIGlmICh0aXRsZSA9PT0gJycpIHtcbiAgICBvcGVuID0gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwb3NpdGlvblJlZiA9IFJlYWN0LnVzZVJlZih7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH0pO1xuICBjb25zdCBwb3BwZXJSZWYgPSBSZWFjdC51c2VSZWYoKTtcblxuICBjb25zdCBoYW5kbGVNb3VzZU1vdmUgPSBldmVudCA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IGNoaWxkcmVuLnByb3BzO1xuXG4gICAgaWYgKGNoaWxkcmVuUHJvcHMub25Nb3VzZU1vdmUpIHtcbiAgICAgIGNoaWxkcmVuUHJvcHMub25Nb3VzZU1vdmUoZXZlbnQpO1xuICAgIH1cblxuICAgIHBvc2l0aW9uUmVmLmN1cnJlbnQgPSB7XG4gICAgICB4OiBldmVudC5jbGllbnRYLFxuICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgIH07XG5cbiAgICBpZiAocG9wcGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHBvcHBlclJlZi5jdXJyZW50LnVwZGF0ZSgpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBuYW1lT3JEZXNjUHJvcHMgPSB7fTtcbiAgY29uc3QgdGl0bGVJc1N0cmluZyA9IHR5cGVvZiB0aXRsZSA9PT0gJ3N0cmluZyc7XG5cbiAgaWYgKGRlc2NyaWJlQ2hpbGQpIHtcbiAgICBuYW1lT3JEZXNjUHJvcHMudGl0bGUgPSAhb3BlbiAmJiB0aXRsZUlzU3RyaW5nICYmICFkaXNhYmxlSG92ZXJMaXN0ZW5lciA/IHRpdGxlIDogbnVsbDtcbiAgICBuYW1lT3JEZXNjUHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXSA9IG9wZW4gPyBpZCA6IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgbmFtZU9yRGVzY1Byb3BzWydhcmlhLWxhYmVsJ10gPSB0aXRsZUlzU3RyaW5nID8gdGl0bGUgOiBudWxsO1xuICAgIG5hbWVPckRlc2NQcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10gPSBvcGVuICYmICF0aXRsZUlzU3RyaW5nID8gaWQgOiBudWxsO1xuICB9XG5cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IF9leHRlbmRzKHt9LCBuYW1lT3JEZXNjUHJvcHMsIG90aGVyLCBjaGlsZHJlbi5wcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xzeChvdGhlci5jbGFzc05hbWUsIGNoaWxkcmVuLnByb3BzLmNsYXNzTmFtZSksXG4gICAgb25Ub3VjaFN0YXJ0OiBkZXRlY3RUb3VjaFN0YXJ0LFxuICAgIHJlZjogaGFuZGxlUmVmXG4gIH0sIGZvbGxvd0N1cnNvciA/IHtcbiAgICBvbk1vdXNlTW92ZTogaGFuZGxlTW91c2VNb3ZlXG4gIH0gOiB7fSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjaGlsZHJlblByb3BzWydkYXRhLW11aS1pbnRlcm5hbC1jbG9uZS1lbGVtZW50J10gPSB0cnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoY2hpbGROb2RlICYmICFjaGlsZE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW11aS1pbnRlcm5hbC1jbG9uZS1lbGVtZW50JykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVGhlIGBjaGlsZHJlbmAgY29tcG9uZW50IG9mIHRoZSBUb29sdGlwIGlzIG5vdCBmb3J3YXJkaW5nIGl0cyBwcm9wcyBjb3JyZWN0bHkuJywgJ1BsZWFzZSBtYWtlIHN1cmUgdGhhdCBwcm9wcyBhcmUgc3ByZWFkIG9uIHRoZSBzYW1lIGVsZW1lbnQgdGhhdCB0aGUgcmVmIGlzIGFwcGxpZWQgdG8uJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtjaGlsZE5vZGVdKTtcbiAgfVxuXG4gIGNvbnN0IGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycyA9IHt9O1xuXG4gIGlmICghZGlzYWJsZVRvdWNoTGlzdGVuZXIpIHtcbiAgICBjaGlsZHJlblByb3BzLm9uVG91Y2hTdGFydCA9IGhhbmRsZVRvdWNoU3RhcnQ7XG4gICAgY2hpbGRyZW5Qcm9wcy5vblRvdWNoRW5kID0gaGFuZGxlVG91Y2hFbmQ7XG4gIH1cblxuICBpZiAoIWRpc2FibGVIb3Zlckxpc3RlbmVyKSB7XG4gICAgY2hpbGRyZW5Qcm9wcy5vbk1vdXNlT3ZlciA9IGNvbXBvc2VFdmVudEhhbmRsZXIoaGFuZGxlTW91c2VPdmVyLCBjaGlsZHJlblByb3BzLm9uTW91c2VPdmVyKTtcbiAgICBjaGlsZHJlblByb3BzLm9uTW91c2VMZWF2ZSA9IGNvbXBvc2VFdmVudEhhbmRsZXIoaGFuZGxlTW91c2VMZWF2ZSwgY2hpbGRyZW5Qcm9wcy5vbk1vdXNlTGVhdmUpO1xuXG4gICAgaWYgKCFkaXNhYmxlSW50ZXJhY3RpdmUpIHtcbiAgICAgIGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycy5vbk1vdXNlT3ZlciA9IGhhbmRsZU1vdXNlT3ZlcjtcbiAgICAgIGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycy5vbk1vdXNlTGVhdmUgPSBoYW5kbGVNb3VzZUxlYXZlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlzYWJsZUZvY3VzTGlzdGVuZXIpIHtcbiAgICBjaGlsZHJlblByb3BzLm9uRm9jdXMgPSBjb21wb3NlRXZlbnRIYW5kbGVyKGhhbmRsZUZvY3VzLCBjaGlsZHJlblByb3BzLm9uRm9jdXMpO1xuICAgIGNoaWxkcmVuUHJvcHMub25CbHVyID0gY29tcG9zZUV2ZW50SGFuZGxlcihoYW5kbGVCbHVyLCBjaGlsZHJlblByb3BzLm9uQmx1cik7XG5cbiAgICBpZiAoIWRpc2FibGVJbnRlcmFjdGl2ZSkge1xuICAgICAgaW50ZXJhY3RpdmVXcmFwcGVyTGlzdGVuZXJzLm9uRm9jdXMgPSBoYW5kbGVGb2N1cztcbiAgICAgIGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycy5vbkJsdXIgPSBoYW5kbGVCbHVyO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGNoaWxkcmVuLnByb3BzLnRpdGxlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhIGB0aXRsZWAgcHJvcCB0byB0aGUgY2hpbGQgb2YgPFRvb2x0aXAgLz4uJywgYFJlbW92ZSB0aGlzIHRpdGxlIHByb3AgXFxgJHtjaGlsZHJlbi5wcm9wcy50aXRsZX1cXGAgb3IgdGhlIFRvb2x0aXAgY29tcG9uZW50LmBdLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwb3BwZXJPcHRpb25zID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgdmFyIF9Qb3BwZXJQcm9wcyRwb3BwZXJPcDtcblxuICAgIGxldCB0b29sdGlwTW9kaWZpZXJzID0gW3tcbiAgICAgIG5hbWU6ICdhcnJvdycsXG4gICAgICBlbmFibGVkOiBCb29sZWFuKGFycm93UmVmKSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgZWxlbWVudDogYXJyb3dSZWYsXG4gICAgICAgIHBhZGRpbmc6IDRcbiAgICAgIH1cbiAgICB9XTtcblxuICAgIGlmICgoX1BvcHBlclByb3BzJHBvcHBlck9wID0gUG9wcGVyUHJvcHMucG9wcGVyT3B0aW9ucykgIT0gbnVsbCAmJiBfUG9wcGVyUHJvcHMkcG9wcGVyT3AubW9kaWZpZXJzKSB7XG4gICAgICB0b29sdGlwTW9kaWZpZXJzID0gdG9vbHRpcE1vZGlmaWVycy5jb25jYXQoUG9wcGVyUHJvcHMucG9wcGVyT3B0aW9ucy5tb2RpZmllcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgUG9wcGVyUHJvcHMucG9wcGVyT3B0aW9ucywge1xuICAgICAgbW9kaWZpZXJzOiB0b29sdGlwTW9kaWZpZXJzXG4gICAgfSk7XG4gIH0sIFthcnJvd1JlZiwgUG9wcGVyUHJvcHNdKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgaXNSdGwsXG4gICAgYXJyb3csXG4gICAgZGlzYWJsZUludGVyYWN0aXZlLFxuICAgIHBsYWNlbWVudCxcbiAgICBQb3BwZXJDb21wb25lbnRQcm9wLFxuICAgIHRvdWNoOiBpZ25vcmVOb25Ub3VjaEV2ZW50cy5jdXJyZW50XG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgUG9wcGVyQ29tcG9uZW50ID0gKF9jb21wb25lbnRzJFBvcHBlciA9IGNvbXBvbmVudHMuUG9wcGVyKSAhPSBudWxsID8gX2NvbXBvbmVudHMkUG9wcGVyIDogVG9vbHRpcFBvcHBlcjtcbiAgY29uc3QgVHJhbnNpdGlvbkNvbXBvbmVudCA9IChfcmVmID0gKF9jb21wb25lbnRzJFRyYW5zaXRpbyA9IGNvbXBvbmVudHMuVHJhbnNpdGlvbikgIT0gbnVsbCA/IF9jb21wb25lbnRzJFRyYW5zaXRpbyA6IFRyYW5zaXRpb25Db21wb25lbnRQcm9wKSAhPSBudWxsID8gX3JlZiA6IEdyb3c7XG4gIGNvbnN0IFRvb2x0aXBDb21wb25lbnQgPSAoX2NvbXBvbmVudHMkVG9vbHRpcCA9IGNvbXBvbmVudHMuVG9vbHRpcCkgIT0gbnVsbCA/IF9jb21wb25lbnRzJFRvb2x0aXAgOiBUb29sdGlwVG9vbHRpcDtcbiAgY29uc3QgQXJyb3dDb21wb25lbnQgPSAoX2NvbXBvbmVudHMkQXJyb3cgPSBjb21wb25lbnRzLkFycm93KSAhPSBudWxsID8gX2NvbXBvbmVudHMkQXJyb3cgOiBUb29sdGlwQXJyb3c7XG4gIGNvbnN0IHBvcHBlclByb3BzID0gYXBwZW5kT3duZXJTdGF0ZShQb3BwZXJDb21wb25lbnQsIF9leHRlbmRzKHt9LCBQb3BwZXJQcm9wcywgY29tcG9uZW50c1Byb3BzLnBvcHBlciksIG93bmVyU3RhdGUpO1xuICBjb25zdCB0cmFuc2l0aW9uUHJvcHMgPSBhcHBlbmRPd25lclN0YXRlKFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHt9LCBUcmFuc2l0aW9uUHJvcHMsIGNvbXBvbmVudHNQcm9wcy50cmFuc2l0aW9uKSwgb3duZXJTdGF0ZSk7XG4gIGNvbnN0IHRvb2x0aXBQcm9wcyA9IGFwcGVuZE93bmVyU3RhdGUoVG9vbHRpcENvbXBvbmVudCwgX2V4dGVuZHMoe30sIGNvbXBvbmVudHNQcm9wcy50b29sdGlwKSwgb3duZXJTdGF0ZSk7XG4gIGNvbnN0IHRvb2x0aXBBcnJvd1Byb3BzID0gYXBwZW5kT3duZXJTdGF0ZShBcnJvd0NvbXBvbmVudCwgX2V4dGVuZHMoe30sIGNvbXBvbmVudHNQcm9wcy5hcnJvdyksIG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBjaGlsZHJlblByb3BzKSwgLyojX19QVVJFX18qL19qc3goUG9wcGVyQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICBhczogUG9wcGVyQ29tcG9uZW50UHJvcCAhPSBudWxsID8gUG9wcGVyQ29tcG9uZW50UHJvcCA6IFBvcHBlcixcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYW5jaG9yRWw6IGZvbGxvd0N1cnNvciA/IHtcbiAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0OiAoKSA9PiAoe1xuICAgICAgICAgIHRvcDogcG9zaXRpb25SZWYuY3VycmVudC55LFxuICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uUmVmLmN1cnJlbnQueCxcbiAgICAgICAgICByaWdodDogcG9zaXRpb25SZWYuY3VycmVudC54LFxuICAgICAgICAgIGJvdHRvbTogcG9zaXRpb25SZWYuY3VycmVudC55LFxuICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgIGhlaWdodDogMFxuICAgICAgICB9KVxuICAgICAgfSA6IGNoaWxkTm9kZSxcbiAgICAgIHBvcHBlclJlZjogcG9wcGVyUmVmLFxuICAgICAgb3BlbjogY2hpbGROb2RlID8gb3BlbiA6IGZhbHNlLFxuICAgICAgaWQ6IGlkLFxuICAgICAgdHJhbnNpdGlvbjogdHJ1ZVxuICAgIH0sIGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycywgcG9wcGVyUHJvcHMsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnBvcHBlciwgUG9wcGVyUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IFBvcHBlclByb3BzLmNsYXNzTmFtZSwgKF9jb21wb25lbnRzUHJvcHMkcG9wcCA9IGNvbXBvbmVudHNQcm9wcy5wb3BwZXIpID09IG51bGwgPyB2b2lkIDAgOiBfY29tcG9uZW50c1Byb3BzJHBvcHAuY2xhc3NOYW1lKSxcbiAgICAgIHBvcHBlck9wdGlvbnM6IHBvcHBlck9wdGlvbnMsXG4gICAgICBjaGlsZHJlbjogKHtcbiAgICAgICAgVHJhbnNpdGlvblByb3BzOiBUcmFuc2l0aW9uUHJvcHNJbm5lclxuICAgICAgfSkgPT4ge1xuICAgICAgICB2YXIgX2NvbXBvbmVudHNQcm9wcyR0b29sLCBfY29tcG9uZW50c1Byb3BzJGFycm87XG5cbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgICAgICB0aW1lb3V0OiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgICAgIH0sIFRyYW5zaXRpb25Qcm9wc0lubmVyLCB0cmFuc2l0aW9uUHJvcHMsIHtcbiAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKFRvb2x0aXBDb21wb25lbnQsIF9leHRlbmRzKHt9LCB0b29sdGlwUHJvcHMsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnRvb2x0aXAsIChfY29tcG9uZW50c1Byb3BzJHRvb2wgPSBjb21wb25lbnRzUHJvcHMudG9vbHRpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb21wb25lbnRzUHJvcHMkdG9vbC5jbGFzc05hbWUpLFxuICAgICAgICAgICAgY2hpbGRyZW46IFt0aXRsZSwgYXJyb3cgPyAvKiNfX1BVUkVfXyovX2pzeChBcnJvd0NvbXBvbmVudCwgX2V4dGVuZHMoe30sIHRvb2x0aXBBcnJvd1Byb3BzLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmFycm93LCAoX2NvbXBvbmVudHNQcm9wcyRhcnJvID0gY29tcG9uZW50c1Byb3BzLmFycm93KSA9PSBudWxsID8gdm9pZCAwIDogX2NvbXBvbmVudHNQcm9wcyRhcnJvLmNsYXNzTmFtZSksXG4gICAgICAgICAgICAgIHJlZjogc2V0QXJyb3dSZWZcbiAgICAgICAgICAgIH0pKSA6IG51bGxdXG4gICAgICAgICAgfSkpXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUb29sdGlwLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGFkZHMgYW4gYXJyb3cgdG8gdGhlIHRvb2x0aXAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhcnJvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRvb2x0aXAgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIFRvb2x0aXAuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIEFycm93OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUG9wcGVyOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgVG9vbHRpcDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFRyYW5zaXRpb246IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcblxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIFRvb2x0aXAuXG4gICAqIE5vdGUgdGhhdCBgY29tcG9uZW50c1Byb3BzLnBvcHBlcmAgcHJvcCB2YWx1ZXMgd2luIG92ZXIgYFBvcHBlclByb3BzYFxuICAgKiBhbmQgYGNvbXBvbmVudHNQcm9wcy50cmFuc2l0aW9uYCBwcm9wIHZhbHVlcyB3aW4gb3ZlciBgVHJhbnNpdGlvblByb3BzYCBpZiBib3RoIGFyZSBhcHBsaWVkLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFycm93OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHBvcHBlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB0b29sdGlwOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHRyYW5zaXRpb246IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG5cbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgaWYgdGhlIGB0aXRsZWAgYWN0cyBhcyBhbiBhY2Nlc3NpYmxlIGRlc2NyaXB0aW9uLlxuICAgKiBCeSBkZWZhdWx0IHRoZSBgdGl0bGVgIGFjdHMgYXMgYW4gYWNjZXNzaWJsZSBsYWJlbCBmb3IgdGhlIGNoaWxkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVzY3JpYmVDaGlsZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIERvIG5vdCByZXNwb25kIHRvIGZvY3VzLXZpc2libGUgZXZlbnRzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUZvY3VzTGlzdGVuZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBEbyBub3QgcmVzcG9uZCB0byBob3ZlciBldmVudHMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlSG92ZXJMaXN0ZW5lcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE1ha2VzIGEgdG9vbHRpcCBub3QgaW50ZXJhY3RpdmUsIGkuZS4gaXQgd2lsbCBjbG9zZSB3aGVuIHRoZSB1c2VyXG4gICAqIGhvdmVycyBvdmVyIHRoZSB0b29sdGlwIGJlZm9yZSB0aGUgYGxlYXZlRGVsYXlgIGlzIGV4cGlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlSW50ZXJhY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBEbyBub3QgcmVzcG9uZCB0byBsb25nIHByZXNzIHRvdWNoIGV2ZW50cy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUb3VjaExpc3RlbmVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgc2hvd2luZyB0aGUgdG9vbHRpcC5cbiAgICogVGhpcyBwcm9wIHdvbid0IGltcGFjdCB0aGUgZW50ZXIgdG91Y2ggZGVsYXkgKGBlbnRlclRvdWNoRGVsYXlgKS5cbiAgICogQGRlZmF1bHQgMTAwXG4gICAqL1xuICBlbnRlckRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBzaG93aW5nIHRoZSB0b29sdGlwIHdoZW4gb25lIHdhcyBhbHJlYWR5IHJlY2VudGx5IG9wZW5lZC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgZW50ZXJOZXh0RGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGEgdXNlciBtdXN0IHRvdWNoIHRoZSBlbGVtZW50IGJlZm9yZSBzaG93aW5nIHRoZSB0b29sdGlwLlxuICAgKiBAZGVmYXVsdCA3MDBcbiAgICovXG4gIGVudGVyVG91Y2hEZWxheTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdG9vbHRpcCBmb2xsb3cgdGhlIGN1cnNvciBvdmVyIHRoZSB3cmFwcGVkIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb2xsb3dDdXJzb3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaXMgdXNlZCB0byBoZWxwIGltcGxlbWVudCB0aGUgYWNjZXNzaWJpbGl0eSBsb2dpYy5cbiAgICogSWYgeW91IGRvbid0IHByb3ZpZGUgdGhpcyBwcm9wLiBJdCBmYWxscyBiYWNrIHRvIGEgcmFuZG9tbHkgZ2VuZXJhdGVkIGlkLlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGhpZGluZyB0aGUgdG9vbHRpcC5cbiAgICogVGhpcyBwcm9wIHdvbid0IGltcGFjdCB0aGUgbGVhdmUgdG91Y2ggZGVsYXkgKGBsZWF2ZVRvdWNoRGVsYXlgKS5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgbGVhdmVEZWxheTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYWZ0ZXIgdGhlIHVzZXIgc3RvcHMgdG91Y2hpbmcgYW4gZWxlbWVudCBiZWZvcmUgaGlkaW5nIHRoZSB0b29sdGlwLlxuICAgKiBAZGVmYXVsdCAxNTAwXG4gICAqL1xuICBsZWF2ZVRvdWNoRGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuU3ludGhldGljRXZlbnR9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBvcGVuLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LlN5bnRoZXRpY0V2ZW50fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uT3BlbjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUb29sdGlwIHBsYWNlbWVudC5cbiAgICogQGRlZmF1bHQgJ2JvdHRvbSdcbiAgICovXG4gIHBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tLWVuZCcsICdib3R0b20tc3RhcnQnLCAnYm90dG9tJywgJ2xlZnQtZW5kJywgJ2xlZnQtc3RhcnQnLCAnbGVmdCcsICdyaWdodC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAndG9wLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBwb3BwZXIuXG4gICAqIEBkZWZhdWx0IFBvcHBlclxuICAgKi9cbiAgUG9wcGVyQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgUG9wcGVyYF0oL21hdGVyaWFsLXVpL2FwaS9wb3BwZXIvKSBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgUG9wcGVyUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVG9vbHRpcCB0aXRsZS4gWmVyby1sZW5ndGggdGl0bGVzIHN0cmluZyBhcmUgbmV2ZXIgZGlzcGxheWVkLlxuICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5ub2RlLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHRyYW5zaXRpb24uXG4gICAqIFtGb2xsb3cgdGhpcyBndWlkZV0oL21hdGVyaWFsLXVpL3RyYW5zaXRpb25zLyN0cmFuc2l0aW9uY29tcG9uZW50LXByb3ApIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IEdyb3dcbiAgICovXG4gIFRyYW5zaXRpb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcDsiLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBCdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9CdXR0b24nO1xuaW1wb3J0IFRvb2x0aXAgZnJvbSAnQG11aS9tYXRlcmlhbC9Ub29sdGlwJztcblxudHlwZSBwcm9wc1R5cGUgPSB7XG4gIHN0YXJ0OiBzdHJpbmcgfCBKU1guRWxlbWVudDtcbiAgZW5kOiBzdHJpbmcgfCBKU1guRWxlbWVudDtcbiAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgdGVzdElkOiBzdHJpbmc7XG59O1xuXG4vKlxuVGhpcyBjb21wb25lbnQgaG9sZHMgZnVuY3Rpb25hbGl0eSBmb3IgYSBidXR0b24gdG8gY2hhbmdlIGljb25zIG9uIHVzZXIgc2VsZWN0aW9uXG5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZCBmb3IgYm90aCB0aGUgY29weSB0byBjbGlwYm9hcmQgYnV0dG9uLCBhbmQgdGhlIGFkZCB0byBwcm9qZWN0IGJ1dHRvblxuKi9cblxuZXhwb3J0IGNvbnN0IEFwcEJ1dHRvbiA9IChwcm9wczogcHJvcHNUeXBlKSA9PiB7XG4gIGNvbnN0IHsgc3RhcnQsIGVuZCwgb25DbGljaywgdGVzdElkIH0gPSBwcm9wcztcbiAgY29uc3QgW2ljb24sIHNldEljb25dID0gdXNlU3RhdGUoc3RhcnQpO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKCk6IHZvaWQgPT4ge1xuICAgIHNldEljb24oZW5kKTtcbiAgICBvbkNsaWNrKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRJY29uKHN0YXJ0KSwgMTAwMCk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8VG9vbHRpcCB0aXRsZT17dGVzdElkID09PSAnYnR0bi1jb3B5JyA/ICdDb3B5JyA6ICdBZGQgdG8gUHJvamVjdCd9IHBsYWNlbWVudD0nbGVmdCcgYXJyb3c+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGRhdGEtdGVzdGlkPXsgdGVzdElkIH1cbiAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgY29sb3I9XCJpbmZvXCJcbiAgICAgICAgb25DbGljaz17IGhhbmRsZUNsaWNrIH1cbiAgICAgICAgc3g9e3sgbWFyZ2luQm90dG9tOiAxIH19XG4gICAgICA+XG4gICAgICAgIHtpY29ufVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9Ub29sdGlwPlxuICApO1xufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2ggfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBDb250ZW50Q29weUljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9Db250ZW50Q29weSc7XG5pbXBvcnQgRG9uZUFsbEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9Eb25lQWxsJztcbmltcG9ydCBCb3ggZnJvbSAnQG11aS9tYXRlcmlhbC9Cb3gnO1xuXG5pbXBvcnQgeyBjb3B5Q2xpcGJvYXJkIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvY2xpcGJvYXJkU2xpY2UnO1xuaW1wb3J0IHsgQXBwQnV0dG9uIH0gZnJvbSAnLi9BcHBCdXR0b24nO1xuXG4vLyBUaGlzIGNvbnRhaW5lciB3cmFwcyB0aGUgYnV0dG9uIHRoYXQgY29waWVzIHRoZSBhcHAgY2xpcGJvYXJkIHRvIHRoZSBuYXZpZ2F0b3IgY2xpcGJvYXJkXG5cbmV4cG9ydCBjb25zdCBDbGlwYm9hcmRCdXR0b24gPSAoKSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgZGlzcGF0Y2goY29weUNsaXBib2FyZCgpKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxCb3hcbiAgICAgIGNsYXNzTmFtZT1cImNsaXBib2FyZC1idXR0b24tY29udGFpbmVyXCJcbiAgICAgIHN4PXt7XG4gICAgICAgIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLFxuICAgICAgICBhbGlnbkl0ZW1zOiAnZmxleC1lbmQnLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8QXBwQnV0dG9uXG4gICAgICAgIHN0YXJ0PXsgPENvbnRlbnRDb3B5SWNvbiAvPiB9XG4gICAgICAgIGVuZD17IDxEb25lQWxsSWNvbiAvPiB9XG4gICAgICAgIG9uQ2xpY2s9eyBoYW5kbGVDbGljayB9XG4gICAgICAgIHRlc3RJZD1cImJ0dG4tY29weVwiXG4gICAgICAvPlxuICAgIDwvQm94PlxuICApO1xufTtcbiIsImltcG9ydCBobGpzIGZyb20gJ2hpZ2hsaWdodC5qcy9saWIvY29tbW9uJztcbmltcG9ydCBSZWFjdCwgeyBDaGFuZ2VFdmVudCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTmF2aWdhdGUsIHVzZVBhcmFtcyB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuXG5pbXBvcnQgRGVsZXRlRm9yZXZlckljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9EZWxldGVGb3JldmVyJztcbmltcG9ydCBCb3ggZnJvbSAnQG11aS9tYXRlcmlhbC9Cb3gnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgVGV4dEZpZWxkIGZyb20gJ0BtdWkvbWF0ZXJpYWwvVGV4dEZpZWxkJztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJ0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeSc7XG5cbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7XG4gIGNsZWFyQ2xpcGJvYXJkU3RhdGUsIGdldFNuaXBwZXRzLCBzZXRTZXJ2ZXIsIHNldFNuaXBwZXRzXG59IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL2NsaXBib2FyZFNsaWNlJztcbmltcG9ydCB7IGRlbGV0ZVByb2plY3QgfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy91c2VySW5mb1NsaWNlJztcbmltcG9ydCB7IENsaXBib2FyZEJ1dHRvbiB9IGZyb20gJy4vQ2xpcGJvYXJkQnV0dG9uJztcblxuLypcblRoaXMgY29tcG9uZW50IHdpbGwgZGlzcGxheSBjb2RlIHNuaXBwZXRzIGZyb20gYSBnaXZlbiBwcm9qZWN0IGluIHRoZSBkYXRhYmFzZSBpZiBhIFxudXNlciBpcyBsb2dnZWQgaW4sIG9yIGZyb20gc3RhdGUgaWYgYSB1c2VyIGlzIG5vdCBsb2dnZWQgaW5cbiovXG5cbmV4cG9ydCBjb25zdCBDbGlwYm9hcmQgPSAoKSA9PiB7XG4gIGhsanMuY29uZmlndXJlKHtcbiAgICBpZ25vcmVVbmVzY2FwZWRIVE1MOiB0cnVlXG4gIH0pO1xuICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcbiAgY29uc3QgcHJvamVjdElkID0gTnVtYmVyKHVzZVBhcmFtcygpLnByb2plY3RJZCk7XG4gIGNvbnN0IGlzTG9nZ2VkSW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpc0xvZ2dlZEluJyk7XG4gIGNvbnN0IGJ1dHRvblRleHQgPSBpc0xvZ2dlZEluID8gJ0RlbGV0ZSBQcm9qZWN0JyA6ICdDbGVhciBDbGlwYm9hcmQnO1xuICBjb25zdCBwcm9qZWN0cyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudXNlckluZm8ucHJvamVjdHNJbmZvKTtcbiAgY29uc3Qgc2VydmVyOiBzdHJpbmcgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLmNsaXBib2FyZC5zZXJ2ZXIpO1xuICBjb25zdCBjb2RlRGlzcGxheTogc3RyaW5nID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5jbGlwYm9hcmQuY29kZURpc3BsYXlcbiAgKTtcblxuICBsZXQgcHJvamVjdE5hbWUgPSAnJztcbiAgZm9yIChjb25zdCBwcm9qZWN0IG9mIHByb2plY3RzKSB7XG4gICAgaWYgKHByb2plY3QucHJvamVjdF9pZCA9PT0gcHJvamVjdElkKSB7XG4gICAgICBwcm9qZWN0TmFtZSA9IHByb2plY3QucHJvamVjdF9uYW1lO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdXBkYXRlU2VydmVyID0gKGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgZGlzcGF0Y2goc2V0U2VydmVyKGUudGFyZ2V0LnZhbHVlKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXIgPSAoKSA9PiB7IFxuICAgIGlmIChpc0xvZ2dlZEluKSB7XG4gICAgICBkaXNwYXRjaChkZWxldGVQcm9qZWN0KHByb2plY3RJZCkpO1xuICAgICAgbmF2aWdhdGUoJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGF0Y2goY2xlYXJDbGlwYm9hcmRTdGF0ZSgpKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNMb2dnZWRJbikgeyBcbiAgICAgIC8vIGZldGNoIGNvZGUgc25pcHBldHMgZnJvbSBkYiBpZiB1c2VyIGxvZ2dlZCBpblxuICAgICAgZGlzcGF0Y2goZ2V0U25pcHBldHMocHJvamVjdElkKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2NvZGVTbmlwcGV0cycpO1xuICAgICAgaWYgKGNsaXBib2FyZERhdGEpIGRpc3BhdGNoKHNldFNuaXBwZXRzKEpTT04ucGFyc2UoY2xpcGJvYXJkRGF0YSkpKTtcbiAgICB9XG4gICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UtYm9keVwiPlxuICAgICAgPEJveFxuICAgICAgICBzeD17e1xuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICBnYXA6ICczMHB4JyxcbiAgICAgICAgICB3aWR0aDogLjgsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoM1wiIGFsaWduPVwiY2VudGVyXCIgZ3V0dGVyQm90dG9tIHN4PXt7IGNvbG9yOiAnIzZFMDBCQicsIG1iOiAwLCBtdDogNSB9fT57cHJvamVjdE5hbWV9PC9UeXBvZ3JhcGh5PlxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1kaXNwbGF5XCJcbiAgICAgICAgICBsYWJlbD1cIlNlcnZlciBVUkxcIlxuICAgICAgICAgIHN4PXt7IG1pbldpZHRoOiAyMDAgfX1cbiAgICAgICAgICB2YWx1ZT17c2VydmVyfVxuICAgICAgICAgIGVycm9yPXtzZXJ2ZXIgPT09ICcnfVxuICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVTZXJ2ZXJ9XG4gICAgICAgIC8+XG4gICAgICAgIDxCb3ggXG4gICAgICAgICAgY2xhc3NOYW1lPVwiY2xpcGJvYXJkLWNvZGUtY29udGFpbmVyXCJcbiAgICAgICAgICBzeD17eyBcbiAgICAgICAgICAgIHdpZHRoOiAuODUsXG4gICAgICAgICAgICBoZWlnaHQ6IDUwMCxcbiAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMjgyQzM0JyxcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogMixcbiAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgaWQ9XCJtYWluLWNsaXBib2FyZFwiPlxuICAgICAgICAgICAgPHByZT5cbiAgICAgICAgICAgICAgPGNvZGUgY2xhc3NOYW1lPSdqYXZhc2NyaXB0Jz5cbiAgICAgICAgICAgICAgICB7Y29kZURpc3BsYXl9XG4gICAgICAgICAgICAgIDwvY29kZT4gXG4gICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Q2xpcGJvYXJkQnV0dG9uIC8+XG4gICAgICAgIDwvQm94PiBcbiAgICAgICAgXG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGVhcn1cbiAgICAgICAgICBzeD17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fVxuICAgICAgICA+XG4gICAgICAgICAgPERlbGV0ZUZvcmV2ZXJJY29uIC8+IFxuICAgICAgICAgIHtidXR0b25UZXh0fVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvQm94PlxuICAgIDwvZGl2PlxuICApO1xufTsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlua1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGluaycsIHNsb3QpO1xufVxuY29uc3QgbGlua0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaW5rJywgWydyb290JywgJ3VuZGVybGluZU5vbmUnLCAndW5kZXJsaW5lSG92ZXInLCAndW5kZXJsaW5lQWx3YXlzJywgJ2J1dHRvbicsICdmb2N1c1Zpc2libGUnXSk7XG5leHBvcnQgZGVmYXVsdCBsaW5rQ2xhc3NlczsiLCJpbXBvcnQgeyBhbHBoYSwgZ2V0UGF0aCB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmV4cG9ydCBjb25zdCBjb2xvclRyYW5zZm9ybWF0aW9ucyA9IHtcbiAgcHJpbWFyeTogJ3ByaW1hcnkubWFpbicsXG4gIHRleHRQcmltYXJ5OiAndGV4dC5wcmltYXJ5JyxcbiAgc2Vjb25kYXJ5OiAnc2Vjb25kYXJ5Lm1haW4nLFxuICB0ZXh0U2Vjb25kYXJ5OiAndGV4dC5zZWNvbmRhcnknLFxuICBlcnJvcjogJ2Vycm9yLm1haW4nXG59O1xuXG5jb25zdCB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzID0gY29sb3IgPT4ge1xuICByZXR1cm4gY29sb3JUcmFuc2Zvcm1hdGlvbnNbY29sb3JdIHx8IGNvbG9yO1xufTtcblxuY29uc3QgZ2V0VGV4dERlY29yYXRpb24gPSAoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCB0cmFuc2Zvcm1lZENvbG9yID0gdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyhvd25lclN0YXRlLmNvbG9yKTtcbiAgY29uc3QgY29sb3IgPSBnZXRQYXRoKHRoZW1lLCBgcGFsZXR0ZS4ke3RyYW5zZm9ybWVkQ29sb3J9YCwgZmFsc2UpIHx8IG93bmVyU3RhdGUuY29sb3I7XG4gIGNvbnN0IGNoYW5uZWxDb2xvciA9IGdldFBhdGgodGhlbWUsIGBwYWxldHRlLiR7dHJhbnNmb3JtZWRDb2xvcn1DaGFubmVsYCk7XG5cbiAgaWYgKCd2YXJzJyBpbiB0aGVtZSAmJiBjaGFubmVsQ29sb3IpIHtcbiAgICByZXR1cm4gYHJnYmEoJHtjaGFubmVsQ29sb3J9IC8gMC40KWA7XG4gIH1cblxuICByZXR1cm4gYWxwaGEoY29sb3IsIDAuNCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBnZXRUZXh0RGVjb3JhdGlvbjsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJvbkJsdXJcIiwgXCJvbkZvY3VzXCIsIFwiVHlwb2dyYXBoeUNsYXNzZXNcIiwgXCJ1bmRlcmxpbmVcIiwgXCJ2YXJpYW50XCIsIFwic3hcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZUlzRm9jdXNWaXNpYmxlIGZyb20gJy4uL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnLi4vVHlwb2dyYXBoeSc7XG5pbXBvcnQgbGlua0NsYXNzZXMsIHsgZ2V0TGlua1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vbGlua0NsYXNzZXMnO1xuaW1wb3J0IGdldFRleHREZWNvcmF0aW9uLCB7IGNvbG9yVHJhbnNmb3JtYXRpb25zIH0gZnJvbSAnLi9nZXRUZXh0RGVjb3JhdGlvbic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb21wb25lbnQsXG4gICAgZm9jdXNWaXNpYmxlLFxuICAgIHVuZGVybGluZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYHVuZGVybGluZSR7Y2FwaXRhbGl6ZSh1bmRlcmxpbmUpfWAsIGNvbXBvbmVudCA9PT0gJ2J1dHRvbicgJiYgJ2J1dHRvbicsIGZvY3VzVmlzaWJsZSAmJiAnZm9jdXNWaXNpYmxlJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRMaW5rVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IExpbmtSb290ID0gc3R5bGVkKFR5cG9ncmFwaHksIHtcbiAgbmFtZTogJ011aUxpbmsnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW2B1bmRlcmxpbmUke2NhcGl0YWxpemUob3duZXJTdGF0ZS51bmRlcmxpbmUpfWBdLCBvd25lclN0YXRlLmNvbXBvbmVudCA9PT0gJ2J1dHRvbicgJiYgc3R5bGVzLmJ1dHRvbl07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS51bmRlcmxpbmUgPT09ICdub25lJyAmJiB7XG4gICAgdGV4dERlY29yYXRpb246ICdub25lJ1xuICB9LCBvd25lclN0YXRlLnVuZGVybGluZSA9PT0gJ2hvdmVyJyAmJiB7XG4gICAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIHRleHREZWNvcmF0aW9uOiAndW5kZXJsaW5lJ1xuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS51bmRlcmxpbmUgPT09ICdhbHdheXMnICYmIF9leHRlbmRzKHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ3VuZGVybGluZSdcbiAgfSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICB0ZXh0RGVjb3JhdGlvbkNvbG9yOiBnZXRUZXh0RGVjb3JhdGlvbih7XG4gICAgICB0aGVtZSxcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9KVxuICB9LCB7XG4gICAgJyY6aG92ZXInOiB7XG4gICAgICB0ZXh0RGVjb3JhdGlvbkNvbG9yOiAnaW5oZXJpdCdcbiAgICB9XG4gIH0pLCBvd25lclN0YXRlLmNvbXBvbmVudCA9PT0gJ2J1dHRvbicgJiYge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAvLyBSZXNldCBkZWZhdWx0IHZhbHVlXG4gICAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgICBvdXRsaW5lOiAwLFxuICAgIGJvcmRlcjogMCxcbiAgICBtYXJnaW46IDAsXG4gICAgLy8gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gU2FmYXJpXG4gICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIEZpcmVmb3hcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gICAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gICAgTW96QXBwZWFyYW5jZTogJ25vbmUnLFxuICAgIC8vIFJlc2V0XG4gICAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAgIC8vIFJlc2V0XG4gICAgJyY6Oi1tb3otZm9jdXMtaW5uZXInOiB7XG4gICAgICBib3JkZXJTdHlsZTogJ25vbmUnIC8vIFJlbW92ZSBGaXJlZm94IGRvdHRlZCBvdXRsaW5lLlxuXG4gICAgfSxcbiAgICBbYCYuJHtsaW5rQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICAgIG91dGxpbmU6ICdhdXRvJ1xuICAgIH1cbiAgfSk7XG59KTtcbmNvbnN0IExpbmsgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaW5rKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaW5rJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgIGNvbXBvbmVudCA9ICdhJyxcbiAgICBvbkJsdXIsXG4gICAgb25Gb2N1cyxcbiAgICBUeXBvZ3JhcGh5Q2xhc3NlcyxcbiAgICB1bmRlcmxpbmUgPSAnYWx3YXlzJyxcbiAgICB2YXJpYW50ID0gJ2luaGVyaXQnLFxuICAgIHN4XG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyVmlzaWJsZSxcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1Zpc2libGUsXG4gICAgcmVmOiBmb2N1c1Zpc2libGVSZWZcbiAgfSA9IHVzZUlzRm9jdXNWaXNpYmxlKCk7XG4gIGNvbnN0IFtmb2N1c1Zpc2libGUsIHNldEZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZXJSZWYgPSB1c2VGb3JrUmVmKHJlZiwgZm9jdXNWaXNpYmxlUmVmKTtcblxuICBjb25zdCBoYW5kbGVCbHVyID0gZXZlbnQgPT4ge1xuICAgIGhhbmRsZUJsdXJWaXNpYmxlKGV2ZW50KTtcblxuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1cyA9IGV2ZW50ID0+IHtcbiAgICBoYW5kbGVGb2N1c1Zpc2libGUoZXZlbnQpO1xuXG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZm9jdXNWaXNpYmxlLFxuICAgIHVuZGVybGluZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpbmtSb290LCBfZXh0ZW5kcyh7XG4gICAgY29sb3I6IGNvbG9yLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgY2xhc3NlczogVHlwb2dyYXBoeUNsYXNzZXMsXG4gICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgIHJlZjogaGFuZGxlclJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHZhcmlhbnQ6IHZhcmlhbnQsXG4gICAgc3g6IFsuLi4oIU9iamVjdC5rZXlzKGNvbG9yVHJhbnNmb3JtYXRpb25zKS5pbmNsdWRlcyhjb2xvcikgPyBbe1xuICAgICAgY29sb3JcbiAgICB9XSA6IFtdKSwgLi4uKEFycmF5LmlzQXJyYXkoc3gpID8gc3ggOiBbc3hdKV1cbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTGluay5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGxpbmsuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5hbnksXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIGBjbGFzc2VzYCBwcm9wIGFwcGxpZWQgdG8gdGhlIFtgVHlwb2dyYXBoeWBdKC9tYXRlcmlhbC11aS9hcGkvdHlwb2dyYXBoeS8pIGVsZW1lbnQuXG4gICAqL1xuICBUeXBvZ3JhcGh5Q2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hlbiB0aGUgbGluayBzaG91bGQgaGF2ZSBhbiB1bmRlcmxpbmUuXG4gICAqIEBkZWZhdWx0ICdhbHdheXMnXG4gICAqL1xuICB1bmRlcmxpbmU6IFByb3BUeXBlcy5vbmVPZihbJ2Fsd2F5cycsICdob3ZlcicsICdub25lJ10pLFxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSB0aGVtZSB0eXBvZ3JhcGh5IHN0eWxlcy5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib2R5MScsICdib2R5MicsICdidXR0b24nLCAnY2FwdGlvbicsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdpbmhlcml0JywgJ292ZXJsaW5lJywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IExpbms7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgQm94IGZyb20gJ0BtdWkvbWF0ZXJpYWwvQm94JztcbmltcG9ydCBMaW5rIGZyb20gJ0BtdWkvbWF0ZXJpYWwvTGluayc7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICdAbXVpL21hdGVyaWFsL1R5cG9ncmFwaHknO1xuXG5leHBvcnQgY29uc3QgRm9vdGVyID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxCb3hcbiAgICAgIGlkPVwiZm9vdGVyXCJcbiAgICAgIHN4PXt7XG4gICAgICAgIHB5OiAzLFxuICAgICAgICBweDogMixcbiAgICAgICAgbXQ6ICdhdXRvJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImJvZHkyXCIgY29sb3I9XCJ0ZXh0LnNlY29uZGFyeVwiIGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgIHsnQ29weXJpZ2h0IMKpICd9XG4gICAgICAgIDxMaW5rIGNvbG9yPVwiaW5oZXJpdFwiIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vb3NsYWJzLWJldGEvSmVzdGVyXCI+XG4gICAgICAgICAgSmVzdGVyXG4gICAgICAgIDwvTGluaz57JyAnfVxuICAgICAgICB7bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpfVxuICAgICAgICB7Jy4nfVxuICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgIDwvQm94PlxuICApO1xufTtcbiIsIi8qISBqcy1jb29raWUgdjMuMC4xIHwgTUlUICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cbmZ1bmN0aW9uIGFzc2lnbiAodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXZhciAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cbnZhciBkZWZhdWx0Q29udmVydGVyID0ge1xuICByZWFkOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAodmFsdWVbMF0gPT09ICdcIicpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKCVbXFxkQS1GXXsyfSkrL2dpLCBkZWNvZGVVUklDb21wb25lbnQpXG4gIH0sXG4gIHdyaXRlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKS5yZXBsYWNlKFxuICAgICAgLyUoMlszNDZCRl18M1tBQy1GXXw0MHw1W0JERV18NjB8N1tCQ0RdKS9nLFxuICAgICAgZGVjb2RlVVJJQ29tcG9uZW50XG4gICAgKVxuICB9XG59O1xuLyogZXNsaW50LWVuYWJsZSBuby12YXIgKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG5cbmZ1bmN0aW9uIGluaXQgKGNvbnZlcnRlciwgZGVmYXVsdEF0dHJpYnV0ZXMpIHtcbiAgZnVuY3Rpb24gc2V0IChrZXksIHZhbHVlLCBhdHRyaWJ1dGVzKSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMgPSBhc3NpZ24oe30sIGRlZmF1bHRBdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzKTtcblxuICAgIGlmICh0eXBlb2YgYXR0cmlidXRlcy5leHBpcmVzID09PSAnbnVtYmVyJykge1xuICAgICAgYXR0cmlidXRlcy5leHBpcmVzID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIGF0dHJpYnV0ZXMuZXhwaXJlcyAqIDg2NGU1KTtcbiAgICB9XG4gICAgaWYgKGF0dHJpYnV0ZXMuZXhwaXJlcykge1xuICAgICAgYXR0cmlidXRlcy5leHBpcmVzID0gYXR0cmlidXRlcy5leHBpcmVzLnRvVVRDU3RyaW5nKCk7XG4gICAgfVxuXG4gICAga2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSlcbiAgICAgIC5yZXBsYWNlKC8lKDJbMzQ2Ql18NUV8NjB8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudClcbiAgICAgIC5yZXBsYWNlKC9bKCldL2csIGVzY2FwZSk7XG5cbiAgICB2YXIgc3RyaW5naWZpZWRBdHRyaWJ1dGVzID0gJyc7XG4gICAgZm9yICh2YXIgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoIWF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc7ICcgKyBhdHRyaWJ1dGVOYW1lO1xuXG4gICAgICBpZiAoYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBDb25zaWRlcnMgUkZDIDYyNjUgc2VjdGlvbiA1LjI6XG4gICAgICAvLyAuLi5cbiAgICAgIC8vIDMuICBJZiB0aGUgcmVtYWluaW5nIHVucGFyc2VkLWF0dHJpYnV0ZXMgY29udGFpbnMgYSAleDNCIChcIjtcIilcbiAgICAgIC8vICAgICBjaGFyYWN0ZXI6XG4gICAgICAvLyBDb25zdW1lIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSB1bnBhcnNlZC1hdHRyaWJ1dGVzIHVwIHRvLFxuICAgICAgLy8gbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIuXG4gICAgICAvLyAuLi5cbiAgICAgIHN0cmluZ2lmaWVkQXR0cmlidXRlcyArPSAnPScgKyBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnNwbGl0KCc7JylbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIChkb2N1bWVudC5jb29raWUgPVxuICAgICAga2V5ICsgJz0nICsgY29udmVydGVyLndyaXRlKHZhbHVlLCBrZXkpICsgc3RyaW5naWZpZWRBdHRyaWJ1dGVzKVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0IChrZXkpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCAoYXJndW1lbnRzLmxlbmd0aCAmJiAha2V5KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gVG8gcHJldmVudCB0aGUgZm9yIGxvb3AgaW4gdGhlIGZpcnN0IHBsYWNlIGFzc2lnbiBhbiBlbXB0eSBhcnJheVxuICAgIC8vIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNvb2tpZXMgYXQgYWxsLlxuICAgIHZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llID8gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7ICcpIDogW107XG4gICAgdmFyIGphciA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhcnRzID0gY29va2llc1tpXS5zcGxpdCgnPScpO1xuICAgICAgdmFyIHZhbHVlID0gcGFydHMuc2xpY2UoMSkuam9pbignPScpO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZm91bmRLZXkgPSBkZWNvZGVVUklDb21wb25lbnQocGFydHNbMF0pO1xuICAgICAgICBqYXJbZm91bmRLZXldID0gY29udmVydGVyLnJlYWQodmFsdWUsIGZvdW5kS2V5KTtcblxuICAgICAgICBpZiAoa2V5ID09PSBmb3VuZEtleSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleSA/IGphcltrZXldIDogamFyXG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShcbiAgICB7XG4gICAgICBzZXQ6IHNldCxcbiAgICAgIGdldDogZ2V0LFxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbiAoa2V5LCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHNldChcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYXNzaWduKHt9LCBhdHRyaWJ1dGVzLCB7XG4gICAgICAgICAgICBleHBpcmVzOiAtMVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgd2l0aEF0dHJpYnV0ZXM6IGZ1bmN0aW9uIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiBpbml0KHRoaXMuY29udmVydGVyLCBhc3NpZ24oe30sIHRoaXMuYXR0cmlidXRlcywgYXR0cmlidXRlcykpXG4gICAgICB9LFxuICAgICAgd2l0aENvbnZlcnRlcjogZnVuY3Rpb24gKGNvbnZlcnRlcikge1xuICAgICAgICByZXR1cm4gaW5pdChhc3NpZ24oe30sIHRoaXMuY29udmVydGVyLCBjb252ZXJ0ZXIpLCB0aGlzLmF0dHJpYnV0ZXMpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGVzOiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKGRlZmF1bHRBdHRyaWJ1dGVzKSB9LFxuICAgICAgY29udmVydGVyOiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKGNvbnZlcnRlcikgfVxuICAgIH1cbiAgKVxufVxuXG52YXIgYXBpID0gaW5pdChkZWZhdWx0Q29udmVydGVyLCB7IHBhdGg6ICcvJyB9KTtcbi8qIGVzbGludC1lbmFibGUgbm8tdmFyICovXG5cbmV4cG9ydCBkZWZhdWx0IGFwaTtcbiIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBCYXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUFwcEJhcicsIHNsb3QpO1xufVxuY29uc3QgYXBwQmFyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUFwcEJhcicsIFsncm9vdCcsICdwb3NpdGlvbkZpeGVkJywgJ3Bvc2l0aW9uQWJzb2x1dGUnLCAncG9zaXRpb25TdGlja3knLCAncG9zaXRpb25TdGF0aWMnLCAncG9zaXRpb25SZWxhdGl2ZScsICdjb2xvckRlZmF1bHQnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2NvbG9ySW5oZXJpdCcsICdjb2xvclRyYW5zcGFyZW50J10pO1xuZXhwb3J0IGRlZmF1bHQgYXBwQmFyQ2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJlbmFibGVDb2xvck9uRGFya1wiLCBcInBvc2l0aW9uXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IFBhcGVyIGZyb20gJy4uL1BhcGVyJztcbmltcG9ydCB7IGdldEFwcEJhclV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYXBwQmFyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY29sb3IsXG4gICAgcG9zaXRpb24sXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgcG9zaXRpb24ke2NhcGl0YWxpemUocG9zaXRpb24pfWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QXBwQmFyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07IC8vIHZhcjIgaXMgdGhlIGZhbGxiYWNrLlxuLy8gRXguIHZhcjE6ICd2YXIoLS1hKScsIHZhcjI6ICd2YXIoLS1iKSc7IHJldHVybjogJ3ZhcigtLWEsIHZhcigtLWIpKSdcblxuXG5jb25zdCBqb2luVmFycyA9ICh2YXIxLCB2YXIyKSA9PiBgJHt2YXIxID09IG51bGwgPyB2b2lkIDAgOiB2YXIxLnJlcGxhY2UoJyknLCAnJyl9LCAke3ZhcjJ9KWA7XG5cbmNvbnN0IEFwcEJhclJvb3QgPSBzdHlsZWQoUGFwZXIsIHtcbiAgbmFtZTogJ011aUFwcEJhcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbYHBvc2l0aW9uJHtjYXBpdGFsaXplKG93bmVyU3RhdGUucG9zaXRpb24pfWBdLCBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgYmFja2dyb3VuZENvbG9yRGVmYXVsdCA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IHRoZW1lLnBhbGV0dGUuZ3JleVsxMDBdIDogdGhlbWUucGFsZXR0ZS5ncmV5WzkwMF07XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgLy8gUHJldmVudCBwYWRkaW5nIGlzc3VlIHdpdGggdGhlIE1vZGFsIGFuZCBmaXhlZCBwb3NpdGlvbmVkIEFwcEJhci5cbiAgICBmbGV4U2hyaW5rOiAwXG4gIH0sIG93bmVyU3RhdGUucG9zaXRpb24gPT09ICdmaXhlZCcgJiYge1xuICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgIHpJbmRleDogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnpJbmRleC5hcHBCYXIsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6ICdhdXRvJyxcbiAgICByaWdodDogMCxcbiAgICAnQG1lZGlhIHByaW50Jzoge1xuICAgICAgLy8gUHJldmVudCB0aGUgYXBwIGJhciB0byBiZSB2aXNpYmxlIG9uIGVhY2ggcHJpbnRlZCBwYWdlLlxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUucG9zaXRpb24gPT09ICdhYnNvbHV0ZScgJiYge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHpJbmRleDogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnpJbmRleC5hcHBCYXIsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6ICdhdXRvJyxcbiAgICByaWdodDogMFxuICB9LCBvd25lclN0YXRlLnBvc2l0aW9uID09PSAnc3RpY2t5JyAmJiB7XG4gICAgLy8g4pqg77iPIHN0aWNreSBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFMTEuXG4gICAgcG9zaXRpb246ICdzdGlja3knLFxuICAgIHpJbmRleDogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnpJbmRleC5hcHBCYXIsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6ICdhdXRvJyxcbiAgICByaWdodDogMFxuICB9LCBvd25lclN0YXRlLnBvc2l0aW9uID09PSAnc3RhdGljJyAmJiB7XG4gICAgcG9zaXRpb246ICdzdGF0aWMnXG4gIH0sIG93bmVyU3RhdGUucG9zaXRpb24gPT09ICdyZWxhdGl2ZScgJiYge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gIH0sICF0aGVtZS52YXJzICYmIF9leHRlbmRzKHt9LCBvd25lclN0YXRlLmNvbG9yID09PSAnZGVmYXVsdCcgJiYge1xuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yRGVmYXVsdCxcbiAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRDb250cmFzdFRleHQoYmFja2dyb3VuZENvbG9yRGVmYXVsdClcbiAgfSwgb3duZXJTdGF0ZS5jb2xvciAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnZGVmYXVsdCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICd0cmFuc3BhcmVudCcgJiYge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLFxuICAgIGNvbG9yOiB0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmNvbnRyYXN0VGV4dFxuICB9LCBvd25lclN0YXRlLmNvbG9yID09PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAnaW5oZXJpdCdcbiAgfSwgdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnZGFyaycgJiYgIW93bmVyU3RhdGUuZW5hYmxlQ29sb3JPbkRhcmsgJiYge1xuICAgIGJhY2tncm91bmRDb2xvcjogbnVsbCxcbiAgICBjb2xvcjogbnVsbFxuICB9LCBvd25lclN0YXRlLmNvbG9yID09PSAndHJhbnNwYXJlbnQnICYmIF9leHRlbmRzKHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgY29sb3I6ICdpbmhlcml0J1xuICB9LCB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyAmJiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiAnbm9uZSdcbiAgfSkpLCB0aGVtZS52YXJzICYmIF9leHRlbmRzKHt9LCBvd25lclN0YXRlLmNvbG9yID09PSAnZGVmYXVsdCcgJiYge1xuICAgICctLUFwcEJhci1iYWNrZ3JvdW5kJzogb3duZXJTdGF0ZS5lbmFibGVDb2xvck9uRGFyayA/IHRoZW1lLnZhcnMucGFsZXR0ZS5BcHBCYXIuZGVmYXVsdEJnIDogam9pblZhcnModGhlbWUudmFycy5wYWxldHRlLkFwcEJhci5kYXJrQmcsIHRoZW1lLnZhcnMucGFsZXR0ZS5BcHBCYXIuZGVmYXVsdEJnKSxcbiAgICAnLS1BcHBCYXItY29sb3InOiBvd25lclN0YXRlLmVuYWJsZUNvbG9yT25EYXJrID8gdGhlbWUudmFycy5wYWxldHRlLnRleHQucHJpbWFyeSA6IGpvaW5WYXJzKHRoZW1lLnZhcnMucGFsZXR0ZS5BcHBCYXIuZGFya0NvbG9yLCB0aGVtZS52YXJzLnBhbGV0dGUudGV4dC5wcmltYXJ5KVxuICB9LCBvd25lclN0YXRlLmNvbG9yICYmICFvd25lclN0YXRlLmNvbG9yLm1hdGNoKC9eKGRlZmF1bHR8aW5oZXJpdHx0cmFuc3BhcmVudCkkLykgJiYge1xuICAgICctLUFwcEJhci1iYWNrZ3JvdW5kJzogb3duZXJTdGF0ZS5lbmFibGVDb2xvck9uRGFyayA/IHRoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluIDogam9pblZhcnModGhlbWUudmFycy5wYWxldHRlLkFwcEJhci5kYXJrQmcsIHRoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluKSxcbiAgICAnLS1BcHBCYXItY29sb3InOiBvd25lclN0YXRlLmVuYWJsZUNvbG9yT25EYXJrID8gdGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmNvbnRyYXN0VGV4dCA6IGpvaW5WYXJzKHRoZW1lLnZhcnMucGFsZXR0ZS5BcHBCYXIuZGFya0NvbG9yLCB0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0uY29udHJhc3RUZXh0KVxuICB9LCB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tQXBwQmFyLWJhY2tncm91bmQpJyxcbiAgICBjb2xvcjogb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnID8gJ2luaGVyaXQnIDogJ3ZhcigtLUFwcEJhci1jb2xvciknXG4gIH0sIG93bmVyU3RhdGUuY29sb3IgPT09ICd0cmFuc3BhcmVudCcgJiYge1xuICAgIGJhY2tncm91bmRJbWFnZTogJ25vbmUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBjb2xvcjogJ2luaGVyaXQnXG4gIH0pKTtcbn0pO1xuY29uc3QgQXBwQmFyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQXBwQmFyKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlBcHBCYXInXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgZW5hYmxlQ29sb3JPbkRhcmsgPSBmYWxzZSxcbiAgICBwb3NpdGlvbiA9ICdmaXhlZCdcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBwb3NpdGlvbixcbiAgICBlbmFibGVDb2xvck9uRGFya1xuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChBcHBCYXJSb290LCBfZXh0ZW5kcyh7XG4gICAgc3F1YXJlOiB0cnVlLFxuICAgIGNvbXBvbmVudDogXCJoZWFkZXJcIixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGVsZXZhdGlvbjogNCxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUsIHBvc2l0aW9uID09PSAnZml4ZWQnICYmICdtdWktZml4ZWQnKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBBcHBCYXIucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNhZGRpbmctbmV3LWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2RlZmF1bHQnLCAnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICd0cmFuc3BhcmVudCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0aGUgYGNvbG9yYCBwcm9wIGlzIGFwcGxpZWQgaW4gZGFyayBtb2RlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZW5hYmxlQ29sb3JPbkRhcms6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgcG9zaXRpb25pbmcgdHlwZS4gVGhlIGJlaGF2aW9yIG9mIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyBpcyBkZXNjcmliZWRcbiAgICogW2luIHRoZSBNRE4gd2ViIGRvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTGVhcm4vQ1NTL0NTU19sYXlvdXQvUG9zaXRpb25pbmcpLlxuICAgKiBOb3RlOiBgc3RpY2t5YCBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkIGFuZCB3aWxsIGZhbGwgYmFjayB0byBgc3RhdGljYCB3aGVuIHVuYXZhaWxhYmxlLlxuICAgKiBAZGVmYXVsdCAnZml4ZWQnXG4gICAqL1xuICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFsnYWJzb2x1dGUnLCAnZml4ZWQnLCAncmVsYXRpdmUnLCAnc3RhdGljJywgJ3N0aWNreSddKSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQXBwQmFyOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sYmFyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb29sYmFyJywgc2xvdCk7XG59XG5jb25zdCB0b29sYmFyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRvb2xiYXInLCBbJ3Jvb3QnLCAnZ3V0dGVycycsICdyZWd1bGFyJywgJ2RlbnNlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG9vbGJhckNsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVHdXR0ZXJzXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRUb29sYmFyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90b29sYmFyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICB2YXJpYW50XG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZUd1dHRlcnMgJiYgJ2d1dHRlcnMnLCB2YXJpYW50XVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFRvb2xiYXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgVG9vbGJhclJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVRvb2xiYXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYgc3R5bGVzLmd1dHRlcnMsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcidcbn0sICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHtcbiAgcGFkZGluZ0xlZnQ6IHRoZW1lLnNwYWNpbmcoMiksXG4gIHBhZGRpbmdSaWdodDogdGhlbWUuc3BhY2luZygyKSxcbiAgW3RoZW1lLmJyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgIHBhZGRpbmdMZWZ0OiB0aGVtZS5zcGFjaW5nKDMpLFxuICAgIHBhZGRpbmdSaWdodDogdGhlbWUuc3BhY2luZygzKVxuICB9XG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdkZW5zZScgJiYge1xuICBtaW5IZWlnaHQ6IDQ4XG59KSwgKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3JlZ3VsYXInICYmIHRoZW1lLm1peGlucy50b29sYmFyKTtcbmNvbnN0IFRvb2xiYXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUb29sYmFyKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUb29sYmFyJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgIGRpc2FibGVHdXR0ZXJzID0gZmFsc2UsXG4gICAgdmFyaWFudCA9ICdyZWd1bGFyJ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICB2YXJpYW50XG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRvb2xiYXJSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogcmVmLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVG9vbGJhci5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIFRvb2xiYXIgY2hpbGRyZW4sIHVzdWFsbHkgYSBtaXh0dXJlIG9mIGBJY29uQnV0dG9uYCwgYEJ1dHRvbmAgYW5kIGBUeXBvZ3JhcGh5YC5cbiAgICogVGhlIFRvb2xiYXIgaXMgYSBmbGV4IGNvbnRhaW5lciwgYWxsb3dpbmcgZmxleCBpdGVtIHByb3Blcml0ZXMgdG8gYmUgdXNlZCB0byBsYXkgb3V0IHRoZSBjaGlsZHJlbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBkaXNhYmxlcyBndXR0ZXIgcGFkZGluZy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVHdXR0ZXJzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdyZWd1bGFyJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAncmVndWxhciddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVG9vbGJhcjsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlhbG9nVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlEaWFsb2cnLCBzbG90KTtcbn1cbmNvbnN0IGRpYWxvZ0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlEaWFsb2cnLCBbJ3Jvb3QnLCAnc2Nyb2xsUGFwZXInLCAnc2Nyb2xsQm9keScsICdjb250YWluZXInLCAncGFwZXInLCAncGFwZXJTY3JvbGxQYXBlcicsICdwYXBlclNjcm9sbEJvZHknLCAncGFwZXJXaWR0aEZhbHNlJywgJ3BhcGVyV2lkdGhYcycsICdwYXBlcldpZHRoU20nLCAncGFwZXJXaWR0aE1kJywgJ3BhcGVyV2lkdGhMZycsICdwYXBlcldpZHRoWGwnLCAncGFwZXJGdWxsV2lkdGgnLCAncGFwZXJGdWxsU2NyZWVuJ10pO1xuZXhwb3J0IGRlZmF1bHQgZGlhbG9nQ2xhc3NlczsiLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuY29uc3QgRGlhbG9nQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHt9KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRGlhbG9nQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdEaWFsb2dDb250ZXh0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlhbG9nQ29udGV4dDsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJpYS1kZXNjcmliZWRieVwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcIkJhY2tkcm9wQ29tcG9uZW50XCIsIFwiQmFja2Ryb3BQcm9wc1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZUVzY2FwZUtleURvd25cIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFdpZHRoXCIsIFwibWF4V2lkdGhcIiwgXCJvbkJhY2tkcm9wQ2xpY2tcIiwgXCJvbkNsb3NlXCIsIFwib3BlblwiLCBcIlBhcGVyQ29tcG9uZW50XCIsIFwiUGFwZXJQcm9wc1wiLCBcInNjcm9sbFwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIiwgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIiwgXCJUcmFuc2l0aW9uUHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyB1bnN0YWJsZV91c2VJZCBhcyB1c2VJZCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vTW9kYWwnO1xuaW1wb3J0IEZhZGUgZnJvbSAnLi4vRmFkZSc7XG5pbXBvcnQgUGFwZXIgZnJvbSAnLi4vUGFwZXInO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBkaWFsb2dDbGFzc2VzLCB7IGdldERpYWxvZ1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vZGlhbG9nQ2xhc3Nlcyc7XG5pbXBvcnQgRGlhbG9nQ29udGV4dCBmcm9tICcuL0RpYWxvZ0NvbnRleHQnO1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4uL0JhY2tkcm9wJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IERpYWxvZ0JhY2tkcm9wID0gc3R5bGVkKEJhY2tkcm9wLCB7XG4gIG5hbWU6ICdNdWlEaWFsb2cnLFxuICBzbG90OiAnQmFja2Ryb3AnLFxuICBvdmVycmlkZXM6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuYmFja2Ryb3Bcbn0pKHtcbiAgLy8gSW1wcm92ZSBzY3JvbGxhYmxlIGRpYWxvZyBzdXBwb3J0LlxuICB6SW5kZXg6IC0xXG59KTtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgc2Nyb2xsLFxuICAgIG1heFdpZHRoLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBmdWxsU2NyZWVuXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBjb250YWluZXI6IFsnY29udGFpbmVyJywgYHNjcm9sbCR7Y2FwaXRhbGl6ZShzY3JvbGwpfWBdLFxuICAgIHBhcGVyOiBbJ3BhcGVyJywgYHBhcGVyU2Nyb2xsJHtjYXBpdGFsaXplKHNjcm9sbCl9YCwgYHBhcGVyV2lkdGgke2NhcGl0YWxpemUoU3RyaW5nKG1heFdpZHRoKSl9YCwgZnVsbFdpZHRoICYmICdwYXBlckZ1bGxXaWR0aCcsIGZ1bGxTY3JlZW4gJiYgJ3BhcGVyRnVsbFNjcmVlbiddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RGlhbG9nVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IERpYWxvZ1Jvb3QgPSBzdHlsZWQoTW9kYWwsIHtcbiAgbmFtZTogJ011aURpYWxvZycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe1xuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIC8vIFVzZSAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIHRoZSBNb2RhbCBpbmxpbmUtc3R5bGUuXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZSAhaW1wb3J0YW50J1xuICB9XG59KTtcbmNvbnN0IERpYWxvZ0NvbnRhaW5lciA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpRGlhbG9nJyxcbiAgc2xvdDogJ0NvbnRhaW5lcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXNbYHNjcm9sbCR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNjcm9sbCl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGhlaWdodDogJzEwMCUnLFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIGhlaWdodDogJ2F1dG8nXG4gIH0sXG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDBcbn0sIG93bmVyU3RhdGUuc2Nyb2xsID09PSAncGFwZXInICYmIHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInXG59LCBvd25lclN0YXRlLnNjcm9sbCA9PT0gJ2JvZHknICYmIHtcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICcmOmFmdGVyJzoge1xuICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB3aWR0aDogJzAnXG4gIH1cbn0pKTtcbmNvbnN0IERpYWxvZ1BhcGVyID0gc3R5bGVkKFBhcGVyLCB7XG4gIG5hbWU6ICdNdWlEaWFsb2cnLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnBhcGVyLCBzdHlsZXNbYHNjcm9sbFBhcGVyJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2Nyb2xsKX1gXSwgc3R5bGVzW2BwYXBlcldpZHRoJHtjYXBpdGFsaXplKFN0cmluZyhvd25lclN0YXRlLm1heFdpZHRoKSl9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5wYXBlckZ1bGxXaWR0aCwgb3duZXJTdGF0ZS5mdWxsU2NyZWVuICYmIHN0eWxlcy5wYXBlckZ1bGxTY3JlZW5dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBtYXJnaW46IDMyLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIC8vIEZpeCBJRTExIGlzc3VlLCB0byByZW1vdmUgYXQgc29tZSBwb2ludC5cbiAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICBvdmVyZmxvd1k6ICd2aXNpYmxlJyxcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9XG59LCBvd25lclN0YXRlLnNjcm9sbCA9PT0gJ3BhcGVyJyAmJiB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDY0cHgpJ1xufSwgb3duZXJTdGF0ZS5zY3JvbGwgPT09ICdib2R5JyAmJiB7XG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgdGV4dEFsaWduOiAnbGVmdCcgLy8gJ2luaXRpYWwnIGRvZXNuJ3Qgd29yayBvbiBJRTExXG5cbn0sICFvd25lclN0YXRlLm1heFdpZHRoICYmIHtcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSA2NHB4KSdcbn0sIG93bmVyU3RhdGUubWF4V2lkdGggPT09ICd4cycgJiYge1xuICBtYXhXaWR0aDogdGhlbWUuYnJlYWtwb2ludHMudW5pdCA9PT0gJ3B4JyA/IE1hdGgubWF4KHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlcy54cywgNDQ0KSA6IGAke3RoZW1lLmJyZWFrcG9pbnRzLnZhbHVlcy54c30ke3RoZW1lLmJyZWFrcG9pbnRzLnVuaXR9YCxcbiAgW2AmLiR7ZGlhbG9nQ2xhc3Nlcy5wYXBlclNjcm9sbEJvZHl9YF06IHtcbiAgICBbdGhlbWUuYnJlYWtwb2ludHMuZG93bihNYXRoLm1heCh0aGVtZS5icmVha3BvaW50cy52YWx1ZXMueHMsIDQ0NCkgKyAzMiAqIDIpXToge1xuICAgICAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSA2NHB4KSdcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUubWF4V2lkdGggJiYgb3duZXJTdGF0ZS5tYXhXaWR0aCAhPT0gJ3hzJyAmJiB7XG4gIG1heFdpZHRoOiBgJHt0aGVtZS5icmVha3BvaW50cy52YWx1ZXNbb3duZXJTdGF0ZS5tYXhXaWR0aF19JHt0aGVtZS5icmVha3BvaW50cy51bml0fWAsXG4gIFtgJi4ke2RpYWxvZ0NsYXNzZXMucGFwZXJTY3JvbGxCb2R5fWBdOiB7XG4gICAgW3RoZW1lLmJyZWFrcG9pbnRzLmRvd24odGhlbWUuYnJlYWtwb2ludHMudmFsdWVzW293bmVyU3RhdGUubWF4V2lkdGhdICsgMzIgKiAyKV06IHtcbiAgICAgIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gNjRweCknXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnY2FsYygxMDAlIC0gNjRweCknXG59LCBvd25lclN0YXRlLmZ1bGxTY3JlZW4gJiYge1xuICBtYXJnaW46IDAsXG4gIHdpZHRoOiAnMTAwJScsXG4gIG1heFdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxuICBtYXhIZWlnaHQ6ICdub25lJyxcbiAgYm9yZGVyUmFkaXVzOiAwLFxuICBbYCYuJHtkaWFsb2dDbGFzc2VzLnBhcGVyU2Nyb2xsQm9keX1gXToge1xuICAgIG1hcmdpbjogMCxcbiAgICBtYXhXaWR0aDogJzEwMCUnXG4gIH1cbn0pKTtcbi8qKlxuICogRGlhbG9ncyBhcmUgb3ZlcmxhaWQgbW9kYWwgcGFwZXIgYmFzZWQgY29tcG9uZW50cyB3aXRoIGEgYmFja2Ryb3AuXG4gKi9cblxuY29uc3QgRGlhbG9nID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRGlhbG9nKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlEaWFsb2cnXG4gIH0pO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IGRlZmF1bHRUcmFuc2l0aW9uRHVyYXRpb24gPSB7XG4gICAgZW50ZXI6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgIGV4aXQ6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmxlYXZpbmdTY3JlZW5cbiAgfTtcblxuICBjb25zdCB7XG4gICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgJ2FyaWEtbGFiZWxsZWRieSc6IGFyaWFMYWJlbGxlZGJ5UHJvcCxcbiAgICBCYWNrZHJvcENvbXBvbmVudCxcbiAgICBCYWNrZHJvcFByb3BzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSxcbiAgICBkaXNhYmxlRXNjYXBlS2V5RG93biA9IGZhbHNlLFxuICAgIGZ1bGxTY3JlZW4gPSBmYWxzZSxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBtYXhXaWR0aCA9ICdzbScsXG4gICAgb25CYWNrZHJvcENsaWNrLFxuICAgIG9uQ2xvc2UsXG4gICAgb3BlbixcbiAgICBQYXBlckNvbXBvbmVudCA9IFBhcGVyLFxuICAgIFBhcGVyUHJvcHMgPSB7fSxcbiAgICBzY3JvbGwgPSAncGFwZXInLFxuICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBGYWRlLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IGRlZmF1bHRUcmFuc2l0aW9uRHVyYXRpb24sXG4gICAgVHJhbnNpdGlvblByb3BzXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24sXG4gICAgZnVsbFNjcmVlbixcbiAgICBmdWxsV2lkdGgsXG4gICAgbWF4V2lkdGgsXG4gICAgc2Nyb2xsXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgYmFja2Ryb3BDbGljayA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IGV2ZW50ID0+IHtcbiAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNsb3NlIHRoZSBkaWFsb2cgd2hlbiBjbGlja2luZyB0aGUgZGlhbG9nIGNvbnRlbnQuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBldmVudCBzdGFydHMgYW5kIGVuZHMgb24gdGhlIHNhbWUgRE9NIGVsZW1lbnQuXG4gICAgYmFja2Ryb3BDbGljay5jdXJyZW50ID0gZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSBldmVudCA9PiB7XG4gICAgLy8gSWdub3JlIHRoZSBldmVudHMgbm90IGNvbWluZyBmcm9tIHRoZSBcImJhY2tkcm9wXCIuXG4gICAgaWYgKCFiYWNrZHJvcENsaWNrLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBiYWNrZHJvcENsaWNrLmN1cnJlbnQgPSBudWxsO1xuXG4gICAgaWYgKG9uQmFja2Ryb3BDbGljaykge1xuICAgICAgb25CYWNrZHJvcENsaWNrKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZShldmVudCwgJ2JhY2tkcm9wQ2xpY2snKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYXJpYUxhYmVsbGVkYnkgPSB1c2VJZChhcmlhTGFiZWxsZWRieVByb3ApO1xuICBjb25zdCBkaWFsb2dDb250ZXh0VmFsdWUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGVJZDogYXJpYUxhYmVsbGVkYnlcbiAgICB9O1xuICB9LCBbYXJpYUxhYmVsbGVkYnldKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KERpYWxvZ1Jvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uOiB0cnVlLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIEJhY2tkcm9wOiBEaWFsb2dCYWNrZHJvcFxuICAgIH0sXG4gICAgY29tcG9uZW50c1Byb3BzOiB7XG4gICAgICBiYWNrZHJvcDogX2V4dGVuZHMoe1xuICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICAgIGFzOiBCYWNrZHJvcENvbXBvbmVudFxuICAgICAgfSwgQmFja2Ryb3BQcm9wcylcbiAgICB9LFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duOiBkaXNhYmxlRXNjYXBlS2V5RG93bixcbiAgICBvbkNsb3NlOiBvbkNsb3NlLFxuICAgIG9wZW46IG9wZW4sXG4gICAgcmVmOiByZWYsXG4gICAgb25DbGljazogaGFuZGxlQmFja2Ryb3BDbGljayxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGFwcGVhcjogdHJ1ZSxcbiAgICAgIGluOiBvcGVuLFxuICAgICAgdGltZW91dDogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgcm9sZTogXCJwcmVzZW50YXRpb25cIlxuICAgIH0sIFRyYW5zaXRpb25Qcm9wcywge1xuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KERpYWxvZ0NvbnRhaW5lciwge1xuICAgICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5jb250YWluZXIpLFxuICAgICAgICBvbk1vdXNlRG93bjogaGFuZGxlTW91c2VEb3duLFxuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goRGlhbG9nUGFwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBhczogUGFwZXJDb21wb25lbnQsXG4gICAgICAgICAgZWxldmF0aW9uOiAyNCxcbiAgICAgICAgICByb2xlOiBcImRpYWxvZ1wiLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkYnlcbiAgICAgICAgfSwgUGFwZXJQcm9wcywge1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnBhcGVyLCBQYXBlclByb3BzLmNsYXNzTmFtZSksXG4gICAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goRGlhbG9nQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgICAgdmFsdWU6IGRpYWxvZ0NvbnRleHRWYWx1ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICAgIH0pXG4gICAgICAgIH0pKVxuICAgICAgfSlcbiAgICB9KSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBEaWFsb2cucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBpZChzKSBvZiB0aGUgZWxlbWVudChzKSB0aGF0IGRlc2NyaWJlIHRoZSBkaWFsb2cuXG4gICAqL1xuICAnYXJpYS1kZXNjcmliZWRieSc6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBpZChzKSBvZiB0aGUgZWxlbWVudChzKSB0aGF0IGxhYmVsIHRoZSBkaWFsb2cuXG4gICAqL1xuICAnYXJpYS1sYWJlbGxlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQSBiYWNrZHJvcCBjb21wb25lbnQuIFRoaXMgcHJvcCBlbmFibGVzIGN1c3RvbSBiYWNrZHJvcCByZW5kZXJpbmcuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgY29tcG9uZW50cy5CYWNrZHJvcGAgaW5zdGVhZC4gV2hpbGUgdGhpcyBwcm9wIGN1cnJlbnRseSB3b3JrcywgaXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAqIFVzZSB0aGUgYGNvbXBvbmVudHMuQmFja2Ryb3BgIHByb3AgdG8gbWFrZSB5b3VyIGFwcGxpY2F0aW9uIHJlYWR5IGZvciB0aGUgbmV4dCB2ZXJzaW9uIG9mIE1hdGVyaWFsIFVJLlxuICAgKiBAZGVmYXVsdCBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgICogICBuYW1lOiAnTXVpTW9kYWwnLFxuICAgKiAgIHNsb3Q6ICdCYWNrZHJvcCcsXG4gICAqICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAqICAgICByZXR1cm4gc3R5bGVzLmJhY2tkcm9wO1xuICAgKiAgIH0sXG4gICAqIH0pKHtcbiAgICogICB6SW5kZXg6IC0xLFxuICAgKiB9KVxuICAgKi9cbiAgQmFja2Ryb3BDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQmFja2Ryb3BQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogRGlhbG9nIGNoaWxkcmVuLCB1c3VhbGx5IHRoZSBpbmNsdWRlZCBzdWItY29tcG9uZW50cy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGhpdHRpbmcgZXNjYXBlIHdpbGwgbm90IGZpcmUgdGhlIGBvbkNsb3NlYCBjYWxsYmFjay5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFc2NhcGVLZXlEb3duOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZGlhbG9nIGlzIGZ1bGwtc2NyZWVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFNjcmVlbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGRpYWxvZyBzdHJldGNoZXMgdG8gYG1heFdpZHRoYC5cbiAgICpcbiAgICogTm90aWNlIHRoYXQgdGhlIGRpYWxvZyB3aWR0aCBncm93IGlzIGxpbWl0ZWQgYnkgdGhlIGRlZmF1bHQgbWFyZ2luLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBtYXgtd2lkdGggb2YgdGhlIGRpYWxvZy5cbiAgICogVGhlIGRpYWxvZyB3aWR0aCBncm93cyB3aXRoIHRoZSBzaXplIG9mIHRoZSBzY3JlZW4uXG4gICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgYG1heFdpZHRoYC5cbiAgICogQGRlZmF1bHQgJ3NtJ1xuICAgKi9cbiAgbWF4V2lkdGg6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgZmFsc2VdKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBiYWNrZHJvcCBpcyBjbGlja2VkLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBvbkNsb3NlYCBwcm9wIHdpdGggdGhlIGByZWFzb25gIGFyZ3VtZW50IHRvIGhhbmRsZSB0aGUgYGJhY2tkcm9wQ2xpY2tgIGV2ZW50cy5cbiAgICovXG4gIG9uQmFja2Ryb3BDbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiBDYW4gYmU6IGBcImVzY2FwZUtleURvd25cImAsIGBcImJhY2tkcm9wQ2xpY2tcImAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIHRvIHJlbmRlciB0aGUgYm9keSBvZiB0aGUgZGlhbG9nLlxuICAgKiBAZGVmYXVsdCBQYXBlclxuICAgKi9cbiAgUGFwZXJDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BQYXBlcmBdKC9tYXRlcmlhbC11aS9hcGkvcGFwZXIvKSBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgUGFwZXJQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBjb250YWluZXIgZm9yIHNjcm9sbGluZyB0aGUgZGlhbG9nLlxuICAgKiBAZGVmYXVsdCAncGFwZXInXG4gICAqL1xuICBzY3JvbGw6IFByb3BUeXBlcy5vbmVPZihbJ2JvZHknLCAncGFwZXInXSksXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgdHJhbnNpdGlvbi5cbiAgICogW0ZvbGxvdyB0aGlzIGd1aWRlXSgvbWF0ZXJpYWwtdWkvdHJhbnNpdGlvbnMvI3RyYW5zaXRpb25jb21wb25lbnQtcHJvcCkgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgRmFkZVxuICAgKi9cbiAgVHJhbnNpdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIGVudGVyOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5lbnRlcmluZ1NjcmVlbixcbiAgICogICBleGl0OiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5sZWF2aW5nU2NyZWVuLFxuICAgKiB9XG4gICAqL1xuICB0cmFuc2l0aW9uRHVyYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKSxcblxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRGlhbG9nOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXREaWFsb2dUaXRsZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRGlhbG9nVGl0bGUnLCBzbG90KTtcbn1cbmNvbnN0IGRpYWxvZ1RpdGxlQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aURpYWxvZ1RpdGxlJywgWydyb290J10pO1xuZXhwb3J0IGRlZmF1bHQgZGlhbG9nVGl0bGVDbGFzc2VzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpZFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldERpYWxvZ1RpdGxlVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9kaWFsb2dUaXRsZUNsYXNzZXMnO1xuaW1wb3J0IERpYWxvZ0NvbnRleHQgZnJvbSAnLi4vRGlhbG9nL0RpYWxvZ0NvbnRleHQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RGlhbG9nVGl0bGVVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgRGlhbG9nVGl0bGVSb290ID0gc3R5bGVkKFR5cG9ncmFwaHksIHtcbiAgbmFtZTogJ011aURpYWxvZ1RpdGxlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7XG4gIHBhZGRpbmc6ICcxNnB4IDI0cHgnLFxuICBmbGV4OiAnMCAwIGF1dG8nXG59KTtcbmNvbnN0IERpYWxvZ1RpdGxlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRGlhbG9nVGl0bGUoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aURpYWxvZ1RpdGxlJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGlkOiBpZFByb3BcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBwcm9wcztcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCB7XG4gICAgdGl0bGVJZDogaWQgPSBpZFByb3BcbiAgfSA9IFJlYWN0LnVzZUNvbnRleHQoRGlhbG9nQ29udGV4dCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChEaWFsb2dUaXRsZVJvb3QsIF9leHRlbmRzKHtcbiAgICBjb21wb25lbnQ6IFwiaDJcIixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgdmFyaWFudDogXCJoNlwiLFxuICAgIGlkOiBpZFxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBEaWFsb2dUaXRsZS5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRGlhbG9nVGl0bGU7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IEdpdEh1Ykljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9HaXRIdWInO1xuaW1wb3J0IEJveCBmcm9tICdAbXVpL21hdGVyaWFsL0JveCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvQnV0dG9uJztcbmltcG9ydCBEaWFsb2cgZnJvbSAnQG11aS9tYXRlcmlhbC9EaWFsb2cnO1xuaW1wb3J0IERpYWxvZ1RpdGxlIGZyb20gJ0BtdWkvbWF0ZXJpYWwvRGlhbG9nVGl0bGUnO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5JztcblxuaW1wb3J0IHsgdXNlQXBwRGlzcGF0Y2ggfSBmcm9tICcuLi9yZWR1eC9ob29rcyc7XG5pbXBvcnQgeyBzZXRTaG93TG9naW4gfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy91c2VySW5mb1NsaWNlJztcblxudHlwZSBsb2dpblByb3BzID0ge1xuICBvcGVuOiBib29sZWFuO1xufTtcblxuLy8gVGhpcyBjb21wb25lbnQgd2lsbCBhbGxvdyB1c2VyIHRvIGxvZ2luIHdpdGggZ2l0aHViXG5cbmV4cG9ydCBjb25zdCBMb2dpbiA9IChwcm9wczogbG9naW5Qcm9wcykgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKCk6IHZvaWQgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNob3dMb2dpbigpKTtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwYm9hcmREYXRhJyk7XG4gIH07XG4gIHJldHVybiAoXG4gICAgPERpYWxvZyBvbkNsb3NlPXtoYW5kbGVDbG9zZX0gb3Blbj17cHJvcHMub3Blbn0+XG4gICAgICA8Qm94XG4gICAgICAgIHN4PXt7XG4gICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgIGhlaWdodDogMjMwLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8Qm94XG4gICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgIHdpZHRoOiA0MDAsXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyM2ZTAwYmInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8aW1nIGFsdD1cImxvZ29cIiBzcmM9XCIuLi9hc3NldHMvbG9nby1qZXN0ZXIucG5nXCIgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICAgIDxEaWFsb2dUaXRsZT5Mb2cgaW4gdG8geW91ciBhY2NvdW50PC9EaWFsb2dUaXRsZT5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgaHJlZj1cIi9hdXRoL2dpdGh1YlwiXG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgbWFyZ2luOiAyLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8R2l0SHViSWNvbiAvPlxuICAgICAgICAgIEdpdEh1YlxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPFR5cG9ncmFwaHkgaWQ9XCJlcnJvci1tZXNzYWdlXCIgc3g9e3sgZGlzcGxheTogJ25vbmUnLCBjb2xvcjogJ3JlZCcgfX0+XG4gICAgICAgICAgRXJyb3JcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgPC9Cb3g+XG4gICAgPC9EaWFsb2c+XG4gICk7XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rLCB1c2VOYXZpZ2F0ZSB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuXG5pbXBvcnQgTG9naW5JY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvTG9naW4nO1xuaW1wb3J0IExvZ291dEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9Mb2dvdXQnO1xuaW1wb3J0IEFwcEJhciBmcm9tICdAbXVpL21hdGVyaWFsL0FwcEJhcic7XG5pbXBvcnQgQm94IGZyb20gJ0BtdWkvbWF0ZXJpYWwvQm94JztcbmltcG9ydCBCdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9CdXR0b24nO1xuaW1wb3J0IFRvb2xiYXIgZnJvbSAnQG11aS9tYXRlcmlhbC9Ub29sYmFyJztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJ0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeSc7XG5cbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7IGxvZ291dCwgc2V0U2hvd0xvZ2luIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdXNlckluZm9TbGljZSc7XG5pbXBvcnQgeyBMb2dpbiB9IGZyb20gJy4vTG9naW4nO1xuXG5leHBvcnQgY29uc3QgTmF2YmFyID0gKCkgPT4ge1xuICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG4gIGNvbnN0IG9wZW46IGJvb2xlYW4gPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLnVzZXJJbmZvLnNob3dMb2dpbik7XG4gIGNvbnN0IGNsaXBib2FyZERhdGE6IHN0cmluZ1tdID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5jbGlwYm9hcmQuY29kZVNuaXBwZXRzKTtcbiAgY29uc3QgZGlzcGxheUxvZ2luQnV0dG9uID0gJ2F1dG8nO1xuICBjb25zdCBkaXNwbGF5TG9nb3V0QnV0dG9uID0gJ2F1dG8nO1xuXG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcbiAgY29uc3QgaGFuZGxlTG9naW5PcGVuID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNob3dMb2dpbigpKTtcbiAgICBpZiAoY2xpcGJvYXJkRGF0YS5sZW5ndGgpIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2NsaXBib2FyZERhdGEnLCBKU09OLnN0cmluZ2lmeShjbGlwYm9hcmREYXRhKSk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUxvZ291dCA9IGFzeW5jICgpID0+IHtcbiAgICBDb29raWVzLnJlbW92ZSgndXNlcm5hbWUnKTtcbiAgICBDb29raWVzLnJlbW92ZSgnY29kZScpO1xuICAgIENvb2tpZXMucmVtb3ZlKCdlbWFpbCcpO1xuICAgIENvb2tpZXMucmVtb3ZlKCdnaXRodWItYXV0aC1zZXNzaW9uJyk7XG4gICAgQ29va2llcy5yZW1vdmUoJ2dpdGh1Yi1hdXRoLXNlc3Npb24uc2lnJyk7XG4gICAgQ29va2llcy5yZW1vdmUoJ2lzTG9nZ2VkSW4nKTtcbiAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xuICAgIGF3YWl0IGF4aW9zLnBvc3QoJy9hdXRoL2xvZ291dCcpO1xuICAgIC8vIGNsZWFyIHByb2plY3RzIGFuZCB1c2VyIGluZm9ybWF0aW9uIGluIHN0YXRlXG4gICAgZGlzcGF0Y2gobG9nb3V0KCkpOyBcbiAgICBuYXZpZ2F0ZSgnLycpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPEJveCBpZD1cIm5hdmJhclwiIHN4PXt7IGZsZXhHcm93OiAxIH19PlxuICAgICAgPEFwcEJhciBwb3NpdGlvbj1cInN0YXRpY1wiPlxuICAgICAgICA8VG9vbGJhcj5cbiAgICAgICAgICA8TGluayB0bz1cIi9cIj5cbiAgICAgICAgICAgIDxpbWcgYWx0PVwibG9nb1wiIHNyYz1cIi4uL2Fzc2V0cy9sb2dvLWplc3Rlci5wbmdcIiAvPlxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgdmFyaWFudD1cImg2XCJcbiAgICAgICAgICAgIGNvbXBvbmVudD1cImRpdlwiXG4gICAgICAgICAgICBzeD17eyBmbGV4R3JvdzogMSwgbWFyZ2luTGVmdDogJzE1cHgnIH19XG4gICAgICAgICAgPjwvVHlwb2dyYXBoeT5cbiAgICAgICAgICB7c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNMb2dnZWRJbicpID8gKFxuICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJ3ZWxjb21lLXRleHRcIiBjb2xvcj1cImluaGVyaXRcIj5cbiAgICAgICAgICAgICAgV2VsY29tZSwge3Nlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXJuYW1lJyl9IVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwid2VsY29tZS10ZXh0XCIgY29sb3I9XCJpbmhlcml0XCI+XG4gICAgICAgICAgICAgIFdlbGNvbWUsIEd1ZXN0IVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPSdpbmhlcml0Jz5cbiAgICAgICAgICAgIDxMaW5rIGNsYXNzTmFtZT0nbmF2LWxpbmsnIHRvPScvY29udHJpYnV0b3JzJz5cbiAgICAgICAgICAgICAgQ29udHJpYnV0b3JzXG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAge3Nlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzTG9nZ2VkSW4nKSA/IChcbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTG9nb3V0fVxuICAgICAgICAgICAgICBzeD17eyBkaXNwbGF5OiBkaXNwbGF5TG9nb3V0QnV0dG9uIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMb2dvdXRJY29uIHN4PXt7IG1hcmdpblJpZ2h0OiAnNXB4JywgbWFyZ2luTGVmdDogJzVweCcgfX0gLz4gTG9nb3V0XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVMb2dpbk9wZW59XG4gICAgICAgICAgICAgIHN4PXt7IGRpc3BsYXk6IGRpc3BsYXlMb2dpbkJ1dHRvbiB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TG9naW5JY29uIHN4PXt7IG1hcmdpblJpZ2h0OiAnNXB4JywgbWFyZ2luTGVmdDogJzVweCcgfX0gLz5Mb2dpblxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxMb2dpbiBvcGVuPXtvcGVufSAvPlxuICAgICAgICA8L1Rvb2xiYXI+XG4gICAgICA8L0FwcEJhcj5cbiAgICA8L0JveD5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyBjcmVhdGVTbGljZSB9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG50eXBlIG5hdlBhbmVsU3RhdGVUeXBlID0ge1xuICBzaG93UHJvamVjdFBhbmVsOiBib29sZWFuO1xuICBzaG93QWRkUHJvamVjdDogYm9vbGVhbjtcbn07XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogbmF2UGFuZWxTdGF0ZVR5cGUgPSB7XG4gIHNob3dQcm9qZWN0UGFuZWw6IGZhbHNlLFxuICBzaG93QWRkUHJvamVjdDogZmFsc2UsXG59O1xuXG5leHBvcnQgY29uc3QgbmF2UGFuZWxTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogJ25hdlBhbmVsJyxcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge1xuICAgIHNldFNob3dQcm9qZWN0UGFuZWw6IChzdGF0ZTogbmF2UGFuZWxTdGF0ZVR5cGUpID0+IHtcbiAgICAgIHN0YXRlLnNob3dQcm9qZWN0UGFuZWwgPSBzdGF0ZS5zaG93UHJvamVjdFBhbmVsID8gZmFsc2UgOiB0cnVlO1xuICAgIH0sXG4gICAgc2V0U2hvd0FkZFByb2plY3Q6IChzdGF0ZTogbmF2UGFuZWxTdGF0ZVR5cGUpID0+IHtcbiAgICAgIHN0YXRlLnNob3dBZGRQcm9qZWN0ID0gc3RhdGUuc2hvd0FkZFByb2plY3QgPyBmYWxzZSA6IHRydWU7XG4gICAgfSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgeyBzZXRTaG93UHJvamVjdFBhbmVsLCBzZXRTaG93QWRkUHJvamVjdCB9ID0gbmF2UGFuZWxTbGljZS5hY3Rpb25zO1xuXG5leHBvcnQgZGVmYXVsdCBuYXZQYW5lbFNsaWNlLnJlZHVjZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTmF2aWdhdGUgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcblxuaW1wb3J0IEFydGljbGVJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQXJ0aWNsZSc7XG5pbXBvcnQgQ29sbGVjdGlvbnNCb29rbWFya0ljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9Db2xsZWN0aW9uc0Jvb2ttYXJrJztcbmltcG9ydCBIb21lSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0hvbWUnO1xuaW1wb3J0IEJveCBmcm9tICdAbXVpL21hdGVyaWFsL0JveCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvQnV0dG9uJztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJ0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeSc7XG5cbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoIH0gZnJvbSAnLi4vcmVkdXgvaG9va3MnO1xuaW1wb3J0IHsgc2V0U2hvd1Byb2plY3RQYW5lbCB9IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL25hdlBhbmVsU2xpY2UnO1xuXG4vKlxuVGhpcyBjb21wb25lbnQgd3JhcHMgYnV0dG9ucyBmb3IgdXNlciB0byBuYXZpZ2F0ZSB0byBob21lIHBhZ2UsIHRvIGRvY3VtZW50YXRpb24gcGFnZSxcbmFuZCB0byB2aWV3IHRoZWlyIHByb2plY3RzIGluIHRoZSBuYXYgcGFuZWxcbiovXG5cbmV4cG9ydCBjb25zdCBOYXZQYW5lbERpc3BsYXkgPSAoKSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcbiAgY29uc3QgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuICBjb25zdCBoYW5kbGVQcm9qZWN0c0NsaWNrID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNob3dQcm9qZWN0UGFuZWwoKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSG9tZUNsaWNrID0gKCkgPT4ge1xuICAgIG5hdmlnYXRlKCcvJyk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZURvY3VtZW50YXRpb25DbGljayA9ICgpID0+IHtcbiAgICBuYXZpZ2F0ZSgnL2RvY3VtZW50YXRpb24nKTtcbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8Qm94XG4gICAgICBjbGFzc05hbWU9XCJwYW5lbCBuYXYtcGFuZWwtY29udGFpbmVyXCJcbiAgICAgIHN4PXt7XG4gICAgICAgIHdpZHRoOiAnMTAwcHgnLFxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8QnV0dG9uIFxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVIb21lQ2xpY2t9IFxuICAgICAgICBzeD17eyBcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsIFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246J2NvbHVtbicsIFxuICAgICAgICAgIG1hcmdpbkJvdHRvbToyIFxuICAgICAgICB9fT5cbiAgICAgICAgPEhvbWVJY29uIHN4PXt7IHNjYWxlOiAnMTE3JScgfX0gLz5cbiAgICAgICAgPFR5cG9ncmFwaHkgc3g9e3sgZm9udFNpemU6ICcxMnB4JyB9fT5Ib21lPC9UeXBvZ3JhcGh5PlxuICAgICAgPC9CdXR0b24+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIHN4PXt7IFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JywgXG4gICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIFxuICAgICAgICAgIG1hcmdpbkJvdHRvbToyIFxuICAgICAgICB9fVxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVQcm9qZWN0c0NsaWNrfVxuICAgICAgPlxuICAgICAgICA8Q29sbGVjdGlvbnNCb29rbWFya0ljb24gLz5cbiAgICAgICAgPFR5cG9ncmFwaHkgc3g9e3sgZm9udFNpemU6ICcxMnB4JyB9fT5Qcm9qZWN0czwvVHlwb2dyYXBoeT5cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvbiBcbiAgICAgICAgb25DbGljaz17aGFuZGxlRG9jdW1lbnRhdGlvbkNsaWNrfSBcbiAgICAgICAgc3g9e3sgXG4gICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLCBcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOidjb2x1bW4nLCBcbiAgICAgICAgICBtYXJnaW5Cb3R0b206MiBcbiAgICAgICAgfX0+XG4gICAgICAgIDxBcnRpY2xlSWNvbiAvPlxuICAgICAgICA8VHlwb2dyYXBoeSBzeD17eyBmb250U2l6ZTogJzEycHgnIH19PkRvY3M8L1R5cG9ncmFwaHk+XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L0JveD5cbiAgKTtcbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IExvZ2luSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0xvZ2luJztcbmltcG9ydCBCb3ggZnJvbSAnQG11aS9tYXRlcmlhbC9Cb3gnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgRGlhbG9nIGZyb20gJ0BtdWkvbWF0ZXJpYWwvRGlhbG9nJztcbmltcG9ydCBEaWFsb2dUaXRsZSBmcm9tICdAbXVpL21hdGVyaWFsL0RpYWxvZ1RpdGxlJztcbmltcG9ydCBUZXh0RmllbGQgZnJvbSAnQG11aS9tYXRlcmlhbC9UZXh0RmllbGQnO1xuXG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCwgdXNlQXBwU2VsZWN0b3IgfSBmcm9tICcuLi9yZWR1eC9ob29rcyc7XG5pbXBvcnQgeyBzZXRTaG93QWRkUHJvamVjdCB9IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL25hdlBhbmVsU2xpY2UnO1xuaW1wb3J0IHsgc2V0UHJvamVjdHNJbmZvLCBzZXRTaG93TG9naW4gfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy91c2VySW5mb1NsaWNlJztcbmltcG9ydCB7IExvZ2luIH0gZnJvbSAnLi9Mb2dpbic7XG5cbi8qIFxuVGhpcyBjb21wb25lbnQgd2lsbCBhbGxvdyBhIHVzZXIgdG8gY3JlYXRlIGEgbmV3IHByb2plY3QgaW4gdGhlIGRhdGFiYXNlXG53aGVyZSBnZW5lcmF0ZWQgdGVzdCBjb2RlIHNuaXBwZXRzIHdpbGwgYmUgc3RvcmVkLlxuSWYgYSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4sIHRoZXkgd2lsbCBiZSBwcm9tcHRlZCB0byBsb2dpbiBiZWZvcmUgdGhleSBjYW4gY3JlYXRlIGEgcHJvamVjdC5cbiovXG5cbmV4cG9ydCBjb25zdCBBZGRQcm9qZWN0RGlhbG9nID0gKCkgPT4ge1xuICBjb25zdCBbcHJvamVjdE5hbWUsIHNldFByb2plY3ROYW1lXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3Qgc2hvd0FkZFByb2plY3QgPSB1c2VBcHBTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLm5hdlBhbmVsLnNob3dBZGRQcm9qZWN0XG4gICk7XG4gIGNvbnN0IG9wZW46IGJvb2xlYW4gPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLnVzZXJJbmZvLnNob3dMb2dpbik7XG4gIGNvbnN0IGNsaXBib2FyZERhdGEgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLmNsaXBib2FyZC5jb2RlU25pcHBldHMpO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNob3dBZGRQcm9qZWN0KCkpO1xuICB9O1xuICBjb25zdCBoYW5kbGVBZGRQcm9qZWN0ID0gYXN5bmMgKCkgPT4geyBcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoJ2FwaS9wcm9qZWN0LycsIHtcbiAgICAgIHByb2plY3RfbmFtZTogcHJvamVjdE5hbWUsXG4gICAgfSk7XG4gICAgZGlzcGF0Y2goc2V0UHJvamVjdHNJbmZvKHJlc3BvbnNlLmRhdGEpKTtcbiAgICBoYW5kbGVDbG9zZSgpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVByb2plY3ROYW1lID0gKFxuICAgIGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuICApID0+IHtcbiAgICBzZXRQcm9qZWN0TmFtZShlLnRhcmdldC52YWx1ZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTG9naW5PcGVuID0gYXN5bmMgKCkgPT4ge1xuICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgZGlzcGF0Y2goc2V0U2hvd0xvZ2luKCkpO1xuICAgIGlmIChjbGlwYm9hcmREYXRhLmxlbmd0aCkgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY2xpcGJvYXJkRGF0YScsIEpTT04uc3RyaW5naWZ5KGNsaXBib2FyZERhdGEpKTtcbiAgfTtcblxuICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNMb2dnZWRJbicpKVxuICAgIHJldHVybiAoXG4gICAgICA8RGlhbG9nIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfSBvcGVuPXtzaG93QWRkUHJvamVjdH0gc3g9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgdGV4dEFsaWduOiAnY2VudGVyJyB9fT5cbiAgICAgICAgPEJveFxuICAgICAgICAgIHN4PXt7XG4gICAgICAgICAgICB3aWR0aDogNDAwLFxuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjNmUwMGJiJyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGltZyBhbHQ9XCJsb2dvXCIgc3JjPVwiLi4vYXNzZXRzL2xvZ28tamVzdGVyLnBuZ1wiIC8+XG4gICAgICAgIDwvQm94PlxuICAgICAgICA8RGlhbG9nVGl0bGU+QWRkIGEgUHJvamVjdDwvRGlhbG9nVGl0bGU+XG4gICAgICAgIDxUZXh0RmllbGRcbiAgICAgICAgICBsYWJlbD1cIlByb2plY3QgTmFtZTpcIlxuICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVQcm9qZWN0TmFtZX1cbiAgICAgICAgICBzeD17eyB3aWR0aDogJzI1MHB4JywgYWxpZ25TZWxmOiAnY2VudGVyJywgbWFyZ2luQm90dG9tOiAnMTBweCcgfX1cbiAgICAgICAgPjwvVGV4dEZpZWxkPlxuICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUFkZFByb2plY3R9PkNyZWF0ZSBQcm9qZWN0PC9CdXR0b24+XG4gICAgICA8L0RpYWxvZz5cbiAgICApO1xuICBlbHNlXG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2cgb25DbG9zZT17aGFuZGxlQ2xvc2V9IG9wZW49e3Nob3dBZGRQcm9qZWN0fSBzeD17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB0ZXh0QWxpZ246ICdjZW50ZXInIH19PlxuICAgICAgICA8Qm94XG4gICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgIHdpZHRoOiA0MTAsXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyM2ZTAwYmInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8aW1nIGFsdD1cImxvZ29cIiBzcmM9XCIuLi9hc3NldHMvbG9nby1qZXN0ZXIucG5nXCIgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICAgIDxEaWFsb2dUaXRsZT5UbyBhZGQgYSBwcm9qZWN0LCB5b3UgbXVzdCBiZSBsb2dnZWQgaW4hPC9EaWFsb2dUaXRsZT5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUxvZ2luT3Blbn1cbiAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgIG1hcmdpbjogMixcbiAgICAgICAgICAgIHdpZHRoOiAnMjUwcHgnLFxuICAgICAgICAgICAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPExvZ2luSWNvbiBzeD17eyBtYXJnaW5SaWdodDogJzVweCcsIG1hcmdpbkxlZnQ6ICc1cHgnIH19IC8+TG9naW5cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxMb2dpbiBvcGVuPXtvcGVufSAvPlxuICAgICAgPC9EaWFsb2c+XG4gICAgKTtcbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU5hdmlnYXRlIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5cbmltcG9ydCBEZWxldGVGb3JldmVySWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0RlbGV0ZUZvcmV2ZXInO1xuaW1wb3J0IEludGVncmF0aW9uSW5zdHJ1Y3Rpb25zSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0ludGVncmF0aW9uSW5zdHJ1Y3Rpb25zJztcbmltcG9ydCBCb3ggZnJvbSAnQG11aS9tYXRlcmlhbC9Cb3gnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5cbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7IGNsZWFyQ2xpcGJvYXJkU3RhdGUgfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy9jbGlwYm9hcmRTbGljZSc7XG5pbXBvcnQgeyBzZXRQcm9qZWN0c0luZm8gfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy91c2VySW5mb1NsaWNlJztcblxudHlwZSBuYXZQcm9qZWN0TWVudVByb3BzID0ge1xuICBwcm9qZWN0SWQ6IG51bWJlcjtcbn07XG5cbi8qIFxuVGhpcyBjb21wb25lbnQgZW5hYmxlcyBuYXZpZ2F0aW9uIHRvIGVhY2ggcHJvamVjdCdzIHVuaXF1ZSBjbGlwYm9hcmQgXG5hbmQgZ2l2ZXMgYSB1c2VyIHRoZSBhYmlsaXR5IHRvIGRlbGV0ZSBhbnkgb2YgdGhlaXIgcHJvamVjdHMgZnJvbSB0aGUgZGF0YWJhc2UuXG4qL1xuXG5leHBvcnQgY29uc3QgTmF2UHJvamVjdE1lbnUgPSAocHJvcHM6IG5hdlByb2plY3RNZW51UHJvcHMpID0+IHtcbiAgY29uc3QgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IGlzTG9nZ2VkSW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpc0xvZ2dlZEluJyk7XG4gIGNvbnN0IHByb2plY3RzID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS51c2VySW5mby5wcm9qZWN0c0luZm8pO1xuICBsZXQgc2hvdztcbiAgZm9yIChjb25zdCBwcm9qZWN0IG9mIHByb2plY3RzKSB7XG4gICAgaWYgKHByb2plY3QucHJvamVjdF9pZCA9PT0gcHJvcHMucHJvamVjdElkKSB7XG4gICAgICBzaG93ID0gcHJvamVjdC5zaG93QWNjZXNzQ2xpcGJvYXJkO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsaXBib2FyZENsaWNrID0gKCkgPT4ge1xuICAgIGlmIChpc0xvZ2dlZEluKSBuYXZpZ2F0ZShgL2NsaXBib2FyZC8ke3Byb3BzLnByb2plY3RJZH1gKTtcbiAgICAvLyBpZiBub3QgbG9nZ2VkIGluLCBuYXZpZ2F0ZXMgdG8gZGVmYXVsdCBjbGlwYm9hcmQgaW4gc3RhdGVcbiAgICBlbHNlIG5hdmlnYXRlKCcvY2xpcGJvYXJkLzAnKTsgXG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQ2xpY2sgPSBhc3luYyAoKSA9PiB7IFxuICAgIGlmIChpc0xvZ2dlZEluKSB7XG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGF4aW9zLmRlbGV0ZShgL2FwaS9wcm9qZWN0LyR7cHJvcHMucHJvamVjdElkfWApOyBcbiAgICAgIGRpc3BhdGNoKHNldFByb2plY3RzSW5mbyhwcm9qZWN0cy5kYXRhKSk7XG4gICAgfSBlbHNlIHsgXG4gICAgICBkaXNwYXRjaChjbGVhckNsaXBib2FyZFN0YXRlKCkpO1xuICAgIH1cbiAgfTtcbiAgaWYgKHNob3cpXG4gICAgcmV0dXJuIChcbiAgICAgIDxCb3g+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlwYm9hcmRDbGlja31cbiAgICAgICAgICBzeD17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19XG4gICAgICAgID5cbiAgICAgICAgICA8SW50ZWdyYXRpb25JbnN0cnVjdGlvbnNJY29uIC8+XG4gICAgICAgICAgQ2xpcGJvYXJkXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlQ2xpY2t9XG4gICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgIGRpc3BsYXk6IGlzTG9nZ2VkSW4gPyAnZmxleCcgOiAnbm9uZScsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPERlbGV0ZUZvcmV2ZXJJY29uIC8+XG4gICAgICAgICAgRGVsZXRlIFByb2plY3RcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVEZWxldGVDbGlja31cbiAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgZGlzcGxheTogaXNMb2dnZWRJbiA/ICdub25lJyA6ICdmbGV4JyxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8RGVsZXRlRm9yZXZlckljb24gLz5cbiAgICAgICAgICBDbGVhciBDbGlwYm9hcmRcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L0JveD5cbiAgICApO1xuICBlbHNlIHJldHVybiBudWxsO1xufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBDcmVkaXRDYXJkSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0NyZWRpdENhcmQnO1xuaW1wb3J0IEJveCBmcm9tICdAbXVpL21hdGVyaWFsL0JveCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvQnV0dG9uJztcblxuaW1wb3J0IHsgdXNlQXBwRGlzcGF0Y2ggfSBmcm9tICcuLi9yZWR1eC9ob29rcyc7XG5pbXBvcnQgeyBzZXRTaG93QWNjZXNzQ2xpcGJvYXJkIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdXNlckluZm9TbGljZSc7XG5pbXBvcnQgeyBOYXZQcm9qZWN0TWVudSB9IGZyb20gJy4vTmF2UHJvamVjdE1lbnUnO1xuXG50eXBlIHByb2plY3RQcm9wcyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBwcm9qZWN0SWQ6IG51bWJlcjtcbn07XG5cbi8qXG5UaGlzIGNvbXBvbmVudCB3cmFwcyBlYWNoIHByb2plY3Qgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBwcm9qZWN0IG5hdmlnYXRpb25cbm1lbnUgdG8gZW5hYmxlIHRoZSBwcm9qZWN0IG1lbnUgZHJvcGRvd24gZm9yIGVhY2ggaW5kaXZpZHVhbCBwcm9qZWN0XG4qL1xuXG5leHBvcnQgY29uc3QgUHJvamVjdCA9IChwcm9wczogcHJvamVjdFByb3BzKSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgZGlzcGF0Y2goc2V0U2hvd0FjY2Vzc0NsaXBib2FyZChwcm9wcy5wcm9qZWN0SWQpKTtcbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8Qm94IHN4PXt7IGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicgfX0+XG4gICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfSBzeD17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3b3JkV3JhcDogJ2FueXdoZXJlJywgd2lkdGg6ICcxMDAlJyB9fT48Q3JlZGl0Q2FyZEljb24gLz5cbiAgICAgICAge3Byb3BzLm5hbWV9XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxOYXZQcm9qZWN0TWVudSBwcm9qZWN0SWQ9e3Byb3BzLnByb2plY3RJZH0gLz5cbiAgICA8L0JveD5cbiAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgQWRkQ2FyZEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9BZGRDYXJkJztcbmltcG9ydCBCb3ggZnJvbSAnQG11aS9tYXRlcmlhbC9Cb3gnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5cbmltcG9ydCB7IEFkZFByb2plY3REaWFsb2cgfSBmcm9tICcuLi9jb21wb25lbnRzL0FkZFByb2plY3REaWFsb2cnO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uL2NvbXBvbmVudHMvUHJvamVjdCc7XG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCwgdXNlQXBwU2VsZWN0b3IgfSBmcm9tICcuLi9yZWR1eC9ob29rcyc7XG5pbXBvcnQgeyBzZXRTaG93QWRkUHJvamVjdCB9IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL25hdlBhbmVsU2xpY2UnO1xuXG4vKlxuVGhpcyBjb21wb25lbnQgZGlzcGxheXMgdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhlIG5hdiBwYW5lbCB0aGF0IHByb3ZpZGVzIGEgdXNlciB3aXRoIG5hdmlnYXRpb25cbnRvIGVhY2ggb2YgdGhlaXIgcHJvamVjdCdzIGNsaXBib2FyZHMsIGFzIHdlbGwgYXMgd2l0aCB0aGUgYWJpbGl0eSB0byBkZWxldGUgYW55IHByb2plY3QsXG5hbmQgdGhlIGFiaWxpdHkgdG8gYWRkIGEgcHJvamVjdC5cbiovXG5cbmV4cG9ydCBjb25zdCBQcm9qZWN0UGFuZWxDb250YWluZXIgPSAoKSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcbiAgY29uc3Qgc2hvd1Byb2plY3RQYW5lbCA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUubmF2UGFuZWwuc2hvd1Byb2plY3RQYW5lbFxuICApO1xuICB0eXBlIHByb2plY3RzVHlwZSA9IHtcbiAgICBwcm9qZWN0X2lkOiBudW1iZXI7XG4gICAgcHJvamVjdF9uYW1lOiBzdHJpbmc7XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIGNsaXBib2FyZEluZm8/OiBzdHJpbmdbXTtcbiAgfTtcbiAgY29uc3QgcHJvamVjdE5hbWU6IHByb2plY3RzVHlwZVtdID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS51c2VySW5mby5wcm9qZWN0c0luZm9cbiAgKTtcbiAgY29uc3QgcHJvamVjdHM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgcHJvamVjdE5hbWUuZm9yRWFjaCgocHJvamVjdCkgPT4ge1xuICAgIHByb2plY3RzLnB1c2goXG4gICAgICA8UHJvamVjdFxuICAgICAgICBrZXk9e3Byb2plY3RbJ3Byb2plY3RfaWQnXX1cbiAgICAgICAgbmFtZT17cHJvamVjdFsncHJvamVjdF9uYW1lJ119XG4gICAgICAgIHByb2plY3RJZD17cHJvamVjdFsncHJvamVjdF9pZCddfVxuICAgICAgLz5cbiAgICApO1xuICAgIHByb2plY3RzLnB1c2goPGhyIGNsYXNzTmFtZT1cImRpdmlkZXJcIi8+KTtcbiAgfSk7XG4gIHByb2plY3RzLnBvcCgpO1xuICBjb25zdCBoYW5kbGVBZGRQcm9qZWN0ID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNob3dBZGRQcm9qZWN0KCkpO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDxCb3hcbiAgICAgIGNsYXNzTmFtZT1cInBhbmVsIHByb2plY3QtcGFuZWwtY29udGFpbmVyXCJcbiAgICAgIHN4PXt7XG4gICAgICAgIHdpZHRoOiAnMTAwcHgnLFxuICAgICAgICBkaXNwbGF5OiBzaG93UHJvamVjdFBhbmVsID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVBZGRQcm9qZWN0fSBzeD17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PjxBZGRDYXJkSWNvbiAvPkFkZCBOZXcgUHJvamVjdDwvQnV0dG9uPlxuICAgICAgPGhyIGNsYXNzTmFtZT1cImRpdmlkZXJcIi8+XG4gICAgICB7cHJvamVjdHN9XG4gICAgICAgIFxuICAgICAgPEFkZFByb2plY3REaWFsb2cgLz5cbiAgICA8L0JveD5cbiAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgQm94IGZyb20gJ0BtdWkvbWF0ZXJpYWwvQm94JztcblxuaW1wb3J0IHsgTmF2UGFuZWxEaXNwbGF5IH0gZnJvbSAnLi4vY29tcG9uZW50cy9OYXZQYW5lbERpc3BsYXknO1xuaW1wb3J0IHsgUHJvamVjdFBhbmVsQ29udGFpbmVyIH0gZnJvbSAnLi9Qcm9qZWN0UGFuZWxDb250YWluZXInO1xuXG5leHBvcnQgY29uc3QgTmF2UGFuZWxDb250YWluZXIgPSAoKSA9PiB7XG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IHN4PXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ3JvdycgfX0gPlxuICAgICAgPE5hdlBhbmVsRGlzcGxheSAvPlxuICAgICAgPFByb2plY3RQYW5lbENvbnRhaW5lciAvPlxuICAgIDwvQm94PlxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTmF2aWdhdGUgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IFR5cG9ncmFwaHkgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5pbXBvcnQgQm94ICBmcm9tICdAbXVpL21hdGVyaWFsL0JveCc7XG5cbi8qXG5UaGlzIGNvbXBvbmVudCB3aWxsIHByb3ZpZGUgYSBsb2FkaW5nIHBhZ2UgZm9yIHRoZSB1c2VyIHVwb24gZ2l0aHViIHZlcmlmaWNhdGlvbiBpbiBvcmRlciB0byBcbmdhdGhlciB1c2VyIGluZm9ybWF0aW9uIGZyb20gY29va2llcyBhbmQgc2V0IHZhbHVlcyBpbiBzZXNzaW9uU3RvcmFnZS5cbiovXG5cbmV4cG9ydCBjb25zdCBBdXRoID0gKCkgPT4ge1xuICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG4gIGNvbnN0IFt1c2VybmFtZSwgc2V0VXNlcm5hbWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbdGltZXIsIHVwZGF0ZVRpbWVyXSA9IHVzZVN0YXRlKDMpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzTG9nZ2VkSW4nKSkge1xuICAgICAgbmF2aWdhdGUoJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29va2llX2NvZGUgPSBDb29raWVzLmdldCgnY29kZScpIHx8ICcnO1xuICAgICAgY29uc3QgY29va2llX3VzZXJuYW1lID0gQ29va2llcy5nZXQoJ3VzZXJuYW1lJykgfHwgJyc7XG4gICAgICBjb25zdCBjb29raWVfZW1haWwgPSBDb29raWVzLmdldCgnZW1haWwnKSB8fCAnJztcbiAgICAgIHNldFVzZXJuYW1lKGNvb2tpZV91c2VybmFtZSk7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdjb2RlU25pcHBldHMnKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3VzZXJuYW1lJywgY29va2llX3VzZXJuYW1lKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2VtYWlsJywgY29va2llX2VtYWlsKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2NvZGUnLCBjb29raWVfY29kZSk7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdpc0xvZ2dlZEluJywgJ3RydWUnKTtcbiAgICAgIHN0YXJ0Q291bnRkb3duKDIpO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGZ1bmN0aW9uIHN0YXJ0Q291bnRkb3duKHNlY29uZHM6IG51bWJlcikge1xuICAgIGxldCBjb3VudGVyID0gc2Vjb25kcztcblxuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdXBkYXRlVGltZXIoY291bnRlcik7XG4gICAgICBjb3VudGVyLS07XG5cbiAgICAgIGlmIChjb3VudGVyIDwgMCkge1xuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgbmF2aWdhdGUoJy8nKTtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHJldHVybiAoXG5cbiAgICA8ZGl2IGNsYXNzTmFtZT0ncGFnZS1ib2R5Jz5cbiAgICAgIDxCb3ggc3g9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgdGV4dEFsaWduOiAnY2VudGVyJyB9fT5cbiAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD0naDQnIGNvbXBvbmVudD0naDQnPlxuICAgICAgICBIZWxsbywge3VzZXJuYW1lfSFcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PSdoNicgY29tcG9uZW50PSdoNic+XG4gICAgICAgIFN1Y2Nlc3NmdWxseSBsb2dnZWQgaW4gd2l0aCBHaXRodWIuIFJlZGlyZWN0aW5nIHlvdSBpbiB7dGltZXJ9IHNlY29uZHMuLi5cbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgPC9Cb3g+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpdmlkZXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aURpdmlkZXInLCBzbG90KTtcbn1cbmNvbnN0IGRpdmlkZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRGl2aWRlcicsIFsncm9vdCcsICdhYnNvbHV0ZScsICdmdWxsV2lkdGgnLCAnaW5zZXQnLCAnbWlkZGxlJywgJ2ZsZXhJdGVtJywgJ2xpZ2h0JywgJ3ZlcnRpY2FsJywgJ3dpdGhDaGlsZHJlbicsICd3aXRoQ2hpbGRyZW5WZXJ0aWNhbCcsICd0ZXh0QWxpZ25SaWdodCcsICd0ZXh0QWxpZ25MZWZ0JywgJ3dyYXBwZXInLCAnd3JhcHBlclZlcnRpY2FsJ10pO1xuZXhwb3J0IGRlZmF1bHQgZGl2aWRlckNsYXNzZXM7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RJdGVtSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdEl0ZW1JY29uJywgc2xvdCk7XG59XG5jb25zdCBsaXN0SXRlbUljb25DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTGlzdEl0ZW1JY29uJywgWydyb290JywgJ2FsaWduSXRlbXNGbGV4U3RhcnQnXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0SXRlbUljb25DbGFzc2VzOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0SXRlbVRleHRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUxpc3RJdGVtVGV4dCcsIHNsb3QpO1xufVxuY29uc3QgbGlzdEl0ZW1UZXh0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3RJdGVtVGV4dCcsIFsncm9vdCcsICdtdWx0aWxpbmUnLCAnZGVuc2UnLCAnaW5zZXQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0SXRlbVRleHRDbGFzc2VzOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51SXRlbVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTWVudUl0ZW0nLCBzbG90KTtcbn1cbmNvbnN0IG1lbnVJdGVtQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU1lbnVJdGVtJywgWydyb290JywgJ2ZvY3VzVmlzaWJsZScsICdkZW5zZScsICdkaXNhYmxlZCcsICdkaXZpZGVyJywgJ2d1dHRlcnMnLCAnc2VsZWN0ZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBtZW51SXRlbUNsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9Gb2N1c1wiLCBcImNvbXBvbmVudFwiLCBcImRlbnNlXCIsIFwiZGl2aWRlclwiLCBcImRpc2FibGVHdXR0ZXJzXCIsIFwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lXCIsIFwicm9sZVwiLCBcInRhYkluZGV4XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IExpc3RDb250ZXh0IGZyb20gJy4uL0xpc3QvTGlzdENvbnRleHQnO1xuaW1wb3J0IEJ1dHRvbkJhc2UgZnJvbSAnLi4vQnV0dG9uQmFzZSc7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgeyBkaXZpZGVyQ2xhc3NlcyB9IGZyb20gJy4uL0RpdmlkZXInO1xuaW1wb3J0IHsgbGlzdEl0ZW1JY29uQ2xhc3NlcyB9IGZyb20gJy4uL0xpc3RJdGVtSWNvbic7XG5pbXBvcnQgeyBsaXN0SXRlbVRleHRDbGFzc2VzIH0gZnJvbSAnLi4vTGlzdEl0ZW1UZXh0JztcbmltcG9ydCBtZW51SXRlbUNsYXNzZXMsIHsgZ2V0TWVudUl0ZW1VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL21lbnVJdGVtQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGNvbnN0IG92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmRlbnNlICYmIHN0eWxlcy5kZW5zZSwgb3duZXJTdGF0ZS5kaXZpZGVyICYmIHN0eWxlcy5kaXZpZGVyLCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZ3V0dGVyc107XG59O1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgZGlzYWJsZWQsXG4gICAgZGVuc2UsXG4gICAgZGl2aWRlcixcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICBzZWxlY3RlZCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkZW5zZSAmJiAnZGVuc2UnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCAhZGlzYWJsZUd1dHRlcnMgJiYgJ2d1dHRlcnMnLCBkaXZpZGVyICYmICdkaXZpZGVyJywgc2VsZWN0ZWQgJiYgJ3NlbGVjdGVkJ11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE1lbnVJdGVtVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcblxuY29uc3QgTWVudUl0ZW1Sb290ID0gc3R5bGVkKEJ1dHRvbkJhc2UsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aU1lbnVJdGVtJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHt9LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxLCB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICBtaW5IZWlnaHQ6IDQ4LFxuICBwYWRkaW5nVG9wOiA2LFxuICBwYWRkaW5nQm90dG9tOiA2LFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbn0sICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDE2LFxuICBwYWRkaW5nUmlnaHQ6IDE2XG59LCBvd25lclN0YXRlLmRpdmlkZXIgJiYge1xuICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5kaXZpZGVyfWAsXG4gIGJhY2tncm91bmRDbGlwOiAncGFkZGluZy1ib3gnXG59LCB7XG4gICcmOmhvdmVyJzoge1xuICAgIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uaG92ZXIsXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH0sXG4gIFtgJi4ke21lbnVJdGVtQ2xhc3Nlcy5zZWxlY3RlZH1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkpLFxuICAgIFtgJi4ke21lbnVJdGVtQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gY2FsYygke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSArICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHl9KSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSArIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmZvY3VzT3BhY2l0eSlcbiAgICB9XG4gIH0sXG4gIFtgJi4ke21lbnVJdGVtQ2xhc3Nlcy5zZWxlY3RlZH06aG92ZXJgXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gY2FsYygke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSArICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSArIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5KVxuICAgIH1cbiAgfSxcbiAgW2AmLiR7bWVudUl0ZW1DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmZvY3VzXG4gIH0sXG4gIFtgJi4ke21lbnVJdGVtQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIG9wYWNpdHk6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZE9wYWNpdHlcbiAgfSxcbiAgW2AmICsgLiR7ZGl2aWRlckNsYXNzZXMucm9vdH1gXToge1xuICAgIG1hcmdpblRvcDogdGhlbWUuc3BhY2luZygxKSxcbiAgICBtYXJnaW5Cb3R0b206IHRoZW1lLnNwYWNpbmcoMSlcbiAgfSxcbiAgW2AmICsgLiR7ZGl2aWRlckNsYXNzZXMuaW5zZXR9YF06IHtcbiAgICBtYXJnaW5MZWZ0OiA1MlxuICB9LFxuICBbYCYgLiR7bGlzdEl0ZW1UZXh0Q2xhc3Nlcy5yb290fWBdOiB7XG4gICAgbWFyZ2luVG9wOiAwLFxuICAgIG1hcmdpbkJvdHRvbTogMFxuICB9LFxuICBbYCYgLiR7bGlzdEl0ZW1UZXh0Q2xhc3Nlcy5pbnNldH1gXToge1xuICAgIHBhZGRpbmdMZWZ0OiAzNlxuICB9LFxuICBbYCYgLiR7bGlzdEl0ZW1JY29uQ2xhc3Nlcy5yb290fWBdOiB7XG4gICAgbWluV2lkdGg6IDM2XG4gIH1cbn0sICFvd25lclN0YXRlLmRlbnNlICYmIHtcbiAgW3RoZW1lLmJyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgIG1pbkhlaWdodDogJ2F1dG8nXG4gIH1cbn0sIG93bmVyU3RhdGUuZGVuc2UgJiYgX2V4dGVuZHMoe1xuICBtaW5IZWlnaHQ6IDMyLFxuICAvLyBodHRwczovL21hdGVyaWFsLmlvL2NvbXBvbmVudHMvbWVudXMjc3BlY3MgPiBEZW5zZVxuICBwYWRkaW5nVG9wOiA0LFxuICBwYWRkaW5nQm90dG9tOiA0XG59LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkyLCB7XG4gIFtgJiAuJHtsaXN0SXRlbUljb25DbGFzc2VzLnJvb3R9IHN2Z2BdOiB7XG4gICAgZm9udFNpemU6ICcxLjI1cmVtJ1xuICB9XG59KSkpO1xuY29uc3QgTWVudUl0ZW0gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNZW51SXRlbShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTWVudUl0ZW0nXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgICBjb21wb25lbnQgPSAnbGknLFxuICAgIGRlbnNlID0gZmFsc2UsXG4gICAgZGl2aWRlciA9IGZhbHNlLFxuICAgIGRpc2FibGVHdXR0ZXJzID0gZmFsc2UsXG4gICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgIHJvbGUgPSAnbWVudWl0ZW0nLFxuICAgIHRhYkluZGV4OiB0YWJJbmRleFByb3BcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KExpc3RDb250ZXh0KTtcbiAgY29uc3QgY2hpbGRDb250ZXh0ID0ge1xuICAgIGRlbnNlOiBkZW5zZSB8fCBjb250ZXh0LmRlbnNlIHx8IGZhbHNlLFxuICAgIGRpc2FibGVHdXR0ZXJzXG4gIH07XG4gIGNvbnN0IG1lbnVJdGVtUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1cykge1xuICAgICAgaWYgKG1lbnVJdGVtUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgbWVudUl0ZW1SZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogVW5hYmxlIHRvIHNldCBmb2N1cyB0byBhIE1lbnVJdGVtIHdob3NlIGNvbXBvbmVudCBoYXMgbm90IGJlZW4gcmVuZGVyZWQuJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbYXV0b0ZvY3VzXSk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRlbnNlOiBjaGlsZENvbnRleHQuZGVuc2UsXG4gICAgZGl2aWRlcixcbiAgICBkaXNhYmxlR3V0dGVyc1xuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKG1lbnVJdGVtUmVmLCByZWYpO1xuICBsZXQgdGFiSW5kZXg7XG5cbiAgaWYgKCFwcm9wcy5kaXNhYmxlZCkge1xuICAgIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyB0YWJJbmRleFByb3AgOiAtMTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KE1lbnVJdGVtUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgICByb2xlOiByb2xlLFxuICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5mb2N1c1Zpc2libGUsIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSlcbiAgICB9LCBvdGhlciwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1lbnVJdGVtLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsaXN0IGl0ZW0gaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKiBGb2N1cyB3aWxsIGFsc28gYmUgdHJpZ2dlcmVkIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzIGZyb20gZmFsc2UgdG8gdHJ1ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGNvbXBhY3QgdmVydGljYWwgcGFkZGluZyBkZXNpZ25lZCBmb3Iga2V5Ym9hcmQgYW5kIG1vdXNlIGlucHV0IGlzIHVzZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IE1lbnUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVuc2U6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcgaXMgcmVtb3ZlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVHdXR0ZXJzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIDFweCBsaWdodCBib3JkZXIgaXMgYWRkZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgbWVudSBpdGVtLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGl2aWRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBjYW4gaGVscCBpZGVudGlmeSB3aGljaCBlbGVtZW50IGhhcyBrZXlib2FyZCBmb2N1cy5cbiAgICogVGhlIGNsYXNzIG5hbWUgd2lsbCBiZSBhcHBsaWVkIHdoZW4gdGhlIGVsZW1lbnQgZ2FpbnMgdGhlIGZvY3VzIHRocm91Z2gga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAqIEl0J3MgYSBwb2x5ZmlsbCBmb3IgdGhlIFtDU1MgOmZvY3VzLXZpc2libGUgc2VsZWN0b3JdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9zZWxlY3RvcnMtNC8jdGhlLWZvY3VzLXZpc2libGUtcHNldWRvKS5cbiAgICogVGhlIHJhdGlvbmFsZSBmb3IgdXNpbmcgdGhpcyBmZWF0dXJlIFtpcyBleHBsYWluZWQgaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZS9ibG9iL0hFQUQvZXhwbGFpbmVyLm1kKS5cbiAgICogQSBbcG9seWZpbGwgY2FuIGJlIHVzZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUpIHRvIGFwcGx5IGEgYGZvY3VzLXZpc2libGVgIGNsYXNzIHRvIG90aGVyIGNvbXBvbmVudHNcbiAgICogaWYgbmVlZGVkLlxuICAgKi9cbiAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByb2xlOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXJcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTsiLCJpbXBvcnQgeyBjcmVhdGVTbGljZSwgUGF5bG9hZEFjdGlvbiB9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG50eXBlIGNvZGVTdGF0ZVR5cGUgPSB7XG4gIGNvZGVPdXRwdXQ6IHN0cmluZztcbn07XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogY29kZVN0YXRlVHlwZSA9IHtcbiAgLy8gdGhpcyBwcm9wZXJ0eSBvZiBzdGF0ZSB3aWxsIGdldCB1cGRhdGVkIGJ5IHRoZSBQT1NUIHJlcXVlc3RcbiAgY29kZU91dHB1dDogJ2Rlc2NyaWJlKFxcJ1NhbXBsZSBkZXNjcmlwdGlvblxcJywgKGFyZzEpID0+IHsgY29kZS4uIH0nLFxufTtcblxuZXhwb3J0IGNvbnN0IGNvZGVTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogJ2NvZGUnLFxuICBpbml0aWFsU3RhdGUsXG4gIHJlZHVjZXJzOiB7XG4gICAgY29weVRleHQ6IChzdGF0ZTogY29kZVN0YXRlVHlwZSkgPT4ge1xuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoc3RhdGUuY29kZU91dHB1dCk7XG4gICAgfSxcbiAgICBzZXRDb2RlT3V0cHV0OiAoc3RhdGU6IGNvZGVTdGF0ZVR5cGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxzdHJpbmc+KSA9PiB7XG4gICAgICBzdGF0ZS5jb2RlT3V0cHV0ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgfSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgeyBjb3B5VGV4dCwgc2V0Q29kZU91dHB1dCB9ID0gY29kZVNsaWNlLmFjdGlvbnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNvZGVTbGljZS5yZWR1Y2VyO1xuIiwiaW1wb3J0IHsgY3JlYXRlU2xpY2UsIFBheWxvYWRBY3Rpb24gfSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxudHlwZSBhc3NlcnRpb25MaXN0VHlwZSA9IHtcbiAgW2luZGV4OiBzdHJpbmddOiBzdHJpbmc7XG59O1xuXG50eXBlIGFzc2VydGlvblR5cGVzVHlwZSA9IHN0cmluZ1tdO1xuXG50eXBlIHRlc3RGb3JtU3RhdGVUeXBlID0ge1xuICByZXF1ZXN0VHlwZTogc3RyaW5nO1xuICBhc3NlcnRpb25MaXN0OiBhc3NlcnRpb25MaXN0VHlwZTtcbiAgaTogbnVtYmVyO1xuICB1c2VySW5wdXQ6IHN0cmluZztcbiAgYXNzZXJ0aW9uVHlwZXM6IGFzc2VydGlvblR5cGVzVHlwZTtcbn07XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogdGVzdEZvcm1TdGF0ZVR5cGUgPSB7XG4gIHJlcXVlc3RUeXBlOiAnR2V0JyxcbiAgYXNzZXJ0aW9uTGlzdDoge30sXG4gIGk6IDAsXG4gIHVzZXJJbnB1dDogJycsXG4gIGFzc2VydGlvblR5cGVzOiBbJ1N0YXR1cyBDb2RlJywgJ0NvbnRlbnQgVHlwZScsICdSZXNwb25zZSBCb2R5J10sXG59O1xuXG5leHBvcnQgY29uc3QgdGVzdEZvcm1TbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogJ3Rlc3RGb3JtJyxcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge1xuICAgIHNldFJlcXVlc3RUeXBlOiAoXG4gICAgICBzdGF0ZTogdGVzdEZvcm1TdGF0ZVR5cGUsXG4gICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248c3RyaW5nPlxuICAgICkgPT4ge1xuICAgICAgc3RhdGUucmVxdWVzdFR5cGUgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICB9LFxuICAgIGFkZEFzc2VydGlvbjogKHN0YXRlOiB0ZXN0Rm9ybVN0YXRlVHlwZSkgPT4ge1xuICAgICAgaWYgKHN0YXRlLmkgPT09IDMpIHN0YXRlLmkgPSAwO1xuICAgICAgc3RhdGUuYXNzZXJ0aW9uTGlzdFtzdGF0ZS5pXSA9IHN0YXRlLmFzc2VydGlvblR5cGVzW3N0YXRlLmldO1xuICAgICAgc3RhdGUuaSArPSAxO1xuICAgIH0sXG4gICAgc2V0SW5wdXRUeXBlOiAoXG4gICAgICBzdGF0ZTogdGVzdEZvcm1TdGF0ZVR5cGUsXG4gICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248eyBpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmcgfT5cbiAgICApID0+IHtcbiAgICAgIHN0YXRlLmFzc2VydGlvbkxpc3RbYWN0aW9uLnBheWxvYWQuaWRdID0gYWN0aW9uLnBheWxvYWQudHlwZTtcbiAgICB9LFxuICAgIGRlbGV0ZUFzc2VydGlvbjogKFxuICAgICAgc3RhdGU6IHRlc3RGb3JtU3RhdGVUeXBlLFxuICAgICAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPHN0cmluZz5cbiAgICApID0+IHtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5hc3NlcnRpb25MaXN0W2FjdGlvbi5wYXlsb2FkXTtcbiAgICB9LFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCB7IHNldFJlcXVlc3RUeXBlLCBhZGRBc3NlcnRpb24sIHNldElucHV0VHlwZSwgZGVsZXRlQXNzZXJ0aW9uIH0gPVxuICB0ZXN0Rm9ybVNsaWNlLmFjdGlvbnM7XG5cbmV4cG9ydCBkZWZhdWx0IHRlc3RGb3JtU2xpY2UucmVkdWNlcjtcbiIsImltcG9ydCB7IGNyZWF0ZVNsaWNlIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbnR5cGUgZXJyb3JNc2dzVHlwZSA9IHtcbiAgW2Vycm9yS2V5OiBzdHJpbmddOiBzdHJpbmc7XG59O1xuXG50eXBlIGluaXRpYWxTdGF0ZVR5cGUgPSB7XG4gIGVycm9yTXNnczogZXJyb3JNc2dzVHlwZTtcbiAgdXNlcklucHV0VHlwZTogc3RyaW5nO1xuICB1c2VySW5wdXRUZXh0OiB1bmRlZmluZWQgfCBudW1iZXIgfCBzdHJpbmc7XG4gIGk6IG51bWJlcjtcbn07XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogaW5pdGlhbFN0YXRlVHlwZSA9IHtcbiAgZXJyb3JNc2dzOiB7fSxcbiAgdXNlcklucHV0VHlwZTogJycsXG4gIHVzZXJJbnB1dFRleHQ6IHVuZGVmaW5lZCxcbiAgaTogMCxcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VySW5wdXRTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogJ3VzZXJJbnB1dCcsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHtcbiAgICBzZXRFcnJvck1zZzogKHN0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5lcnJvck1zZ3Nbc3RhdGUuaV0gPSAnJztcbiAgICAgIHN0YXRlLmkgPSBzdGF0ZS5pICsgMTtcbiAgICB9LFxuICAgIGNoYW5nZUVycm9yTXNnOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgICAgc3RhdGUuZXJyb3JNc2dzW2FjdGlvbi5wYXlsb2FkLnByb3BzSWRdID0gYWN0aW9uLnBheWxvYWQubmV3TXNnO1xuICAgIH0sXG4gICAgc2V0VXNlcklucHV0VHlwZTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICAgIHN0YXRlLnVzZXJJbnB1dFR5cGUgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICB9LFxuICAgIHNldFVzZXJJbnB1dFRleHQ6IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgICBzdGF0ZS51c2VySW5wdXRUZXh0ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgfSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3Qge1xuICBzZXRFcnJvck1zZyxcbiAgY2hhbmdlRXJyb3JNc2csXG4gIHNldFVzZXJJbnB1dFR5cGUsXG4gIHNldFVzZXJJbnB1dFRleHQsXG59ID0gdXNlcklucHV0U2xpY2UuYWN0aW9ucztcblxuZXhwb3J0IGRlZmF1bHQgdXNlcklucHV0U2xpY2UucmVkdWNlcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBCb3ggZnJvbSAnQG11aS9tYXRlcmlhbC9Cb3gnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgRm9ybUNvbnRyb2wgZnJvbSAnQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbCc7XG5pbXBvcnQgSW5wdXRMYWJlbCBmcm9tICdAbXVpL21hdGVyaWFsL0lucHV0TGFiZWwnO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gJ0BtdWkvbWF0ZXJpYWwvTWVudUl0ZW0nO1xuaW1wb3J0IFNlbGVjdCwgeyBTZWxlY3RDaGFuZ2VFdmVudCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvU2VsZWN0JztcbmltcG9ydCBUZXh0RmllbGQgZnJvbSAnQG11aS9tYXRlcmlhbC9UZXh0RmllbGQnO1xuXG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCwgdXNlQXBwU2VsZWN0b3IgfSBmcm9tICcuLi9yZWR1eC9ob29rcyc7XG5pbXBvcnQgeyBkZWxldGVBc3NlcnRpb24sIHNldElucHV0VHlwZSB9IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL3Rlc3RGb3JtU2xpY2UnO1xuaW1wb3J0IHtcbiAgY2hhbmdlRXJyb3JNc2csIHNldFVzZXJJbnB1dFRleHQsIHNldFVzZXJJbnB1dFR5cGVcbn0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdXNlcklucHV0U2xpY2UnO1xuXG50eXBlIGFzc2VydGlvbnNQcm9wc1R5cGUgPSB7XG4gIGlkOiBzdHJpbmc7XG59O1xuXG4vKiBcblRoaXMgY29tcG9uZW50IGFsbG93cyBhIHVzZXIgdG8gaW5kaWNhdGUgd2hhdCByZXNwb25zZSB0aGV5IGV4cGVjdCBmcm9tIHRoZSBzZXJ2ZXJcbnRvIGdlbmVyYXRlIHRoZSBwcm9wZXIgdGVzdCBjb2RlXG4qL1xuXG5leHBvcnQgY29uc3QgQXNzZXJ0aW9ucyA9IChwcm9wczogYXNzZXJ0aW9uc1Byb3BzVHlwZSkgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IGN1cnJWYWx1ZSA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUudGVzdEZvcm0uYXNzZXJ0aW9uTGlzdFtwcm9wcy5pZF1cbiAgKTtcbiAgY29uc3QgYXNzZXJ0aW9ucyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudGVzdEZvcm0uYXNzZXJ0aW9uTGlzdCk7XG4gIGNvbnN0IGVycm9yTXNncyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudXNlcklucHV0LmVycm9yTXNncyk7XG4gIGNvbnN0IGkgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLnVzZXJJbnB1dC5pKTtcblxuICBjb25zdCB2ZXJpZnlOdW1JbnB1dHMgPSAoZTogYW55KSA9PiB7IFxuICAgIC8vIHRocm93cyBlcnJvciBpZiB1c2VyIGlzIHRyeWluZyB0byBpbnB1dCBtb3JlIHRoYW4gMSBvZiB0aGUgc2FtZSBhc3NlcnRpb24gdHlwZVxuICAgIGxldCBzdGF0dXNDb3VudCA9IDA7XG4gICAgbGV0IGNvbnRlbnRDb3VudCA9IDA7XG4gICAgY29uc3QgYXNzZXJ0aW9uVmFscyA9IE9iamVjdC52YWx1ZXMoYXNzZXJ0aW9ucyk7XG4gICAgYXNzZXJ0aW9uVmFscy5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgIGlmICh2YWwgPT09ICdTdGF0dXMgQ29kZScpIHN0YXR1c0NvdW50Kys7XG4gICAgICBpZiAodmFsID09PSAnQ29udGVudCBUeXBlJykgY29udGVudENvdW50Kys7XG4gICAgfSk7XG4gICAgaWYgKHN0YXR1c0NvdW50ID49IDIgJiYgZS50YXJnZXQuaWQgPT09ICdTdGF0dXMgQ29kZScpXG4gICAgICBkaXNwYXRjaChcbiAgICAgICAgY2hhbmdlRXJyb3JNc2coe1xuICAgICAgICAgIHByb3BzSWQ6IHByb3BzLmlkLFxuICAgICAgICAgIG5ld01zZzogJzEgc3RhdHVzIGNvZGUgcGVybWl0dGVkJyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgaWYgKGNvbnRlbnRDb3VudCA+PSAyICYmIGUudGFyZ2V0LmlkID09PSAnQ29udGVudCBUeXBlJylcbiAgICAgIGRpc3BhdGNoKFxuICAgICAgICBjaGFuZ2VFcnJvck1zZyh7XG4gICAgICAgICAgcHJvcHNJZDogcHJvcHMuaWQsXG4gICAgICAgICAgbmV3TXNnOiAnMSBjb250ZW50IHR5cGUgcGVybWl0dGVkJyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH07XG5cbiAgY29uc3QgdmVyaWZ5SW5wdXRUeXBlID0gKGU6IGFueSkgPT4geyBcbiAgICBjb25zdCB1c2VySW5wdXQgPSBlLnRhcmdldC52YWx1ZTtcbiAgICBpZiAoZS50YXJnZXQuaWQgPT09ICdTdGF0dXMgQ29kZScpIHsgXG4gICAgICAvLyBhZGRzIHZlcmlmaWNhdGlvbiBmb3Igc3RhdHVzIGNvZGVcbiAgICAgIGlmICghTnVtYmVyKHVzZXJJbnB1dCkpIHtcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgY2hhbmdlRXJyb3JNc2coe1xuICAgICAgICAgICAgcHJvcHNJZDogcHJvcHMuaWQsXG4gICAgICAgICAgICBuZXdNc2c6ICdwbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHVzZXJJbnB1dCA8IDEwMCB8fCB1c2VySW5wdXQgPiA1MTEpIHtcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgY2hhbmdlRXJyb3JNc2coe1xuICAgICAgICAgICAgcHJvcHNJZDogcHJvcHMuaWQsXG4gICAgICAgICAgICBuZXdNc2c6ICdlbnRlciBhIG51bWJlciBiZXR3ZWVuIDEwMCBhbmQgNTExJyxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgY2hhbmdlRXJyb3JNc2coe1xuICAgICAgICAgICAgcHJvcHNJZDogcHJvcHMuaWQsXG4gICAgICAgICAgICBuZXdNc2c6ICcnLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlLnRhcmdldC5pZCA9PT0gJ0NvbnRlbnQgVHlwZScpIHsgXG4gICAgICAgIC8vIGFkZHMgdmVyaWZpY2F0aW9uIGZvciBjb250ZW50IHR5cGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE51bWJlcih1c2VySW5wdXQpIHx8XG4gICAgICAgICAgIXVzZXJJbnB1dC5pbmNsdWRlcygnLycpIHx8IFxuICAgICAgICAgIHVzZXJJbnB1dFswXSA9PT0gJy8nIHx8IFxuICAgICAgICAgIHVzZXJJbnB1dFt1c2VySW5wdXQubGVuZ3RoIC0gMV0gPT09ICcvJ1xuICAgICAgICApIHtcbiAgICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICAgIGNoYW5nZUVycm9yTXNnKHtcbiAgICAgICAgICAgICAgcHJvcHNJZDogcHJvcHMuaWQsXG4gICAgICAgICAgICAgIG5ld01zZzogJ2ludmFsaWQgY29udGVudCB0eXBlJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICAgIGNoYW5nZUVycm9yTXNnKHtcbiAgICAgICAgICAgICAgcHJvcHNJZDogcHJvcHMuaWQsXG4gICAgICAgICAgICAgIG5ld01zZzogJycsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGV2ZW50OiBTZWxlY3RDaGFuZ2VFdmVudDxzdHJpbmc+KSA9PiB7XG4gICAgZGlzcGF0Y2goc2V0SW5wdXRUeXBlKHsgaWQ6IHByb3BzLmlkLCB0eXBlOiBldmVudC50YXJnZXQudmFsdWUgfSkpO1xuICAgIGRpc3BhdGNoKHNldFVzZXJJbnB1dFR5cGUoZXZlbnQudGFyZ2V0LnZhbHVlKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBkaXNwYXRjaChkZWxldGVBc3NlcnRpb24oZXZlbnQudGFyZ2V0LmlkKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVHlwZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdmVyaWZ5SW5wdXRUeXBlKGV2ZW50KTtcbiAgICB2ZXJpZnlOdW1JbnB1dHMoZXZlbnQpO1xuICAgIGRpc3BhdGNoKHNldFVzZXJJbnB1dFRleHQoZXZlbnQudGFyZ2V0LnZhbHVlKSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPEJveFxuICAgICAgICBzeD17e1xuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgZ2FwOiAnMTBweCcsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxGb3JtQ29udHJvbD5cbiAgICAgICAgICA8SW5wdXRMYWJlbD48L0lucHV0TGFiZWw+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1kaXNwbGF5XCJcbiAgICAgICAgICAgIG5hbWU9XCJtb3JlLXRlc3Qtb3B0aW9uc1wiXG4gICAgICAgICAgICBpZD17cHJvcHMuaWR9XG4gICAgICAgICAgICB2YWx1ZT17Y3VyclZhbHVlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIGRpc3BsYXlFbXB0eVxuICAgICAgICAgICAgaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdXaXRob3V0IGxhYmVsJyB9fVxuICAgICAgICAgICAgc3g9e3sgaGVpZ2h0OiA0MCB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxNZW51SXRlbSBrZXk9XCJTdGF0dXMgQ29kZVwiIHZhbHVlPVwiU3RhdHVzIENvZGVcIiBpZD17cHJvcHMuaWR9PlxuICAgICAgICAgICAgICBTdGF0dXMgQ29kZVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICAgIDxNZW51SXRlbSBrZXk9XCJDb250ZW50IFR5cGVcIiB2YWx1ZT1cIkNvbnRlbnQgVHlwZVwiIGlkPXtwcm9wcy5pZH0+XG4gICAgICAgICAgICAgIENvbnRlbnQgVHlwZVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICAgIDxNZW51SXRlbSBrZXk9XCJSZXNwb25zZSBCb2R5XCIgdmFsdWU9XCJSZXNwb25zZSBCb2R5XCIgaWQ9e3Byb3BzLmlkfT5cbiAgICAgICAgICAgICAgUmVzcG9uc2UgQm9keVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgPC9Gb3JtQ29udHJvbD5cbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZGlzcGxheVwiXG4gICAgICAgICAgbGFiZWw9e2N1cnJWYWx1ZX1cbiAgICAgICAgICBpZD17Y3VyclZhbHVlfVxuICAgICAgICAgIG5hbWU9e2N1cnJWYWx1ZX1cbiAgICAgICAgICBlcnJvcj17IWVycm9yTXNnc1twcm9wcy5pZF0gPyBmYWxzZSA6IHRydWV9XG4gICAgICAgICAgaGVscGVyVGV4dD17ZXJyb3JNc2dzW3Byb3BzLmlkXX1cbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlVHlwZX1cbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBpZD17cHJvcHMuaWR9XG4gICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlfVxuICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgc3g9e3sgaGVpZ2h0OiAyNSwgbWluV2lkdGg6IDIzLCB3aWR0aDogMjMgfX1cbiAgICAgICAgICBkaXNhYmxlRWxldmF0aW9uXG4gICAgICAgID5cbiAgICAgICAgICAtXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9Cb3g+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IEJveCBmcm9tICdAbXVpL21hdGVyaWFsL0JveCc7XG5pbXBvcnQgRm9ybUNvbnRyb2wgZnJvbSAnQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbCc7XG5pbXBvcnQgSW5wdXRMYWJlbCBmcm9tICdAbXVpL21hdGVyaWFsL0lucHV0TGFiZWwnO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gJ0BtdWkvbWF0ZXJpYWwvTWVudUl0ZW0nO1xuaW1wb3J0IFNlbGVjdCwgeyBTZWxlY3RDaGFuZ2VFdmVudCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvU2VsZWN0JztcblxuaW1wb3J0IHsgdXNlQXBwRGlzcGF0Y2gsIHVzZUFwcFNlbGVjdG9yIH0gZnJvbSAnLi4vcmVkdXgvaG9va3MnO1xuaW1wb3J0IHsgc2V0Q3VycmVudFByb2plY3QgfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy91c2VySW5mb1NsaWNlJztcblxudHlwZSBwcm9qZWN0RHJvcGRvd25Qcm9wc1R5cGUgPSB7XG4gIGFsbG93TmV3PzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufTtcblxuLypcblRoaXMgY29tcG9uZW50IGNyZWF0ZXMgYSBkcm9wZG93biBtZW51IHdpdGggYWxsIG9mIHRoZSBwcm9qZWN0IG5hbWVzIHRoYXQgYXJlIHRpZWQgdG8gYSB1c2VyIHNvIHRoYXRcbiAgMSkgYSB1c2VyIGNhbiBpbmRpY2F0ZSB3aGljaCBwcm9qZWN0IHRoZXkgd2FudCB0aGUgZ2VuZXJhdGVkIHRlc3QgY29kZSBzbmlwcGV0IHRvIGJlIGFkZGVkIHRvXG4gIDIpIGEgdXNlciBjYW4gc2VsZWN0IHdoaWNoIHByb2plY3QgdGhleSB3YW50IHRoZWlyIGNsaXBib2FyZCBkYXRhIHJlY29uY2lsZWQgdG9cbiovXG5cbmV4cG9ydCBjb25zdCBQcm9qZWN0RHJvcGRvd24gPSAocHJvcHM6IHByb2plY3REcm9wZG93blByb3BzVHlwZSkgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IHByb2plY3ROYW1lID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS51c2VySW5mby5jdXJyZW50UHJvamVjdCk7XG4gIGNvbnN0IHByb2plY3RzSW5mbyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudXNlckluZm8ucHJvamVjdHNJbmZvKTtcbiAgY29uc3QgcHJvamVjdHMgPSBwcm9qZWN0c0luZm8ubWFwKChlbCkgPT4gZWwucHJvamVjdF9uYW1lKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogU2VsZWN0Q2hhbmdlRXZlbnQ8c3RyaW5nPikgPT4ge1xuICAgIGRpc3BhdGNoKHNldEN1cnJlbnRQcm9qZWN0KGUudGFyZ2V0LnZhbHVlKSk7XG4gIH07XG5cbiAgY29uc3QgbWVudUl0ZW1zOiBKU1guRWxlbWVudFtdID0gW107XG4gIGZvciAoY29uc3QgcHJvamVjdCBvZiBwcm9qZWN0cykge1xuICAgIG1lbnVJdGVtcy5wdXNoKFxuICAgICAgPE1lbnVJdGVtIGtleT17cHJvamVjdH0gdmFsdWU9e3Byb2plY3R9PlxuICAgICAgICB7cHJvamVjdH1cbiAgICAgIDwvTWVudUl0ZW0+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEJveFxuICAgICAgc3g9e3tcbiAgICAgICAgbWluSGVpZ2h0OiAyNSxcbiAgICAgICAgaGVpZ2h0OiAyNSxcbiAgICAgICAgd2lkdGg6IDIzLFxuICAgICAgICBtaW5XaWR0aDogMjAwLFxuICAgICAgICBtOiAzLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8Rm9ybUNvbnRyb2wgZnVsbFdpZHRoPlxuICAgICAgICA8SW5wdXRMYWJlbCBpZD1cInByb2plY3QtZHJvcGRvd24tbGFiZWxcIj5Qcm9qZWN0PC9JbnB1dExhYmVsPlxuICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgbmFtZT1cInByb2plY3Qtc2VsZWN0b3JcIlxuICAgICAgICAgIGlkPVwicHJvamVjdC1zZWxlY3RvclwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJwcm9qZWN0LXNlbGVjdG9yXCJcbiAgICAgICAgICBsYWJlbD1cIlByb2plY3RcIlxuICAgICAgICAgIHZhbHVlPXtwcm9qZWN0TmFtZX1cbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgIHN4PXt7IGhlaWdodDogNDAgfX1cbiAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9XG4gICAgICAgID5cbiAgICAgICAgICB7bWVudUl0ZW1zfVxuICAgICAgICA8L1NlbGVjdD5cbiAgICAgIDwvRm9ybUNvbnRyb2w+XG4gICAgPC9Cb3g+XG4gICk7XG59OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBUZXh0RmllbGQgZnJvbSAnQG11aS9tYXRlcmlhbC9UZXh0RmllbGQnO1xuXG50eXBlIHJlcXVlc3RCb2R5UHJvcHNUeXBlID0ge1xuICBzaG93RmllbGQ6IGJvb2xlYW47XG59O1xuXG4vKlxuVGhpcyBjb21wb25lbnQgd2lsbCBhbGxvdyBhIHVzZXIgdG8gaW5wdXQgYSByZXF1ZXN0IGJvZHkgaWYgdGhlIHNlbGVjdGVkIHJlcXVlc3QgdHlwZSBpcyBcbidQb3N0LCcgJ1BhdGNoLCcgb3IgJ0RlbGV0ZSdcbiovXG5cbmV4cG9ydCBjb25zdCBSZXF1ZXN0Qm9keSA9IChwcm9wczogcmVxdWVzdEJvZHlQcm9wc1R5cGUpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8VGV4dEZpZWxkXG4gICAgICBjbGFzc05hbWU9XCJ0ZXh0LWRpc3BsYXlcIlxuICAgICAgbGFiZWw9XCJSZXF1ZXN0IEJvZHlcIlxuICAgICAgaWQ9XCJyZXFfYm9keVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIlJlcXVlc3QtQm9keVwiXG4gICAgICBuYW1lPVwiUmVxdWVzdC1Cb2R5XCJcbiAgICAgIGRpc2FibGVkPXtwcm9wcy5zaG93RmllbGQgPyBmYWxzZSA6IHRydWV9XG4gICAgICBzeD17eyBiYWNrZ3JvdW5kQ29sb3I6IHByb3BzLnNob3dGaWVsZCA/ICdub25lJyA6ICcjRThFOEU4JyB9fVxuICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAvPlxuICApO1xufTtcbiIsIlxuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBCb3ggZnJvbSAnQG11aS9tYXRlcmlhbC9Cb3gnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgRm9ybUNvbnRyb2wgZnJvbSAnQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbCc7XG5pbXBvcnQgSW5wdXRMYWJlbCBmcm9tICdAbXVpL21hdGVyaWFsL0lucHV0TGFiZWwnO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gJ0BtdWkvbWF0ZXJpYWwvTWVudUl0ZW0nO1xuaW1wb3J0IFNlbGVjdCwgeyBTZWxlY3RDaGFuZ2VFdmVudCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvU2VsZWN0JztcbmltcG9ydCBUZXh0RmllbGQgZnJvbSAnQG11aS9tYXRlcmlhbC9UZXh0RmllbGQnO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5JztcblxuaW1wb3J0IHsgdXNlQXBwRGlzcGF0Y2gsIHVzZUFwcFNlbGVjdG9yIH0gZnJvbSAnLi4vcmVkdXgvaG9va3MnO1xuaW1wb3J0IHsgc2V0Q29kZU91dHB1dCB9IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL2NvZGVTbGljZSc7XG5pbXBvcnQgeyBhZGRBc3NlcnRpb24sIHNldFJlcXVlc3RUeXBlIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdGVzdEZvcm1TbGljZSc7XG5pbXBvcnQgeyBzZXRDdXJyZW50UHJvamVjdCB9IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL3VzZXJJbmZvU2xpY2UnO1xuaW1wb3J0IHsgc2V0RXJyb3JNc2cgfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy91c2VySW5wdXRTbGljZSc7XG5pbXBvcnQgeyBBc3NlcnRpb25zIH0gZnJvbSAnLi9Bc3NlcnRpb25zJztcbmltcG9ydCB7IFByb2plY3REcm9wZG93biB9IGZyb20gJy4vUHJvamVjdERyb3Bkb3duJztcbmltcG9ydCB7IFJlcXVlc3RCb2R5IH0gZnJvbSAnLi9SZXF1ZXN0Qm9keSc7XG5cbi8qXG5UaGlzIGNvbXBvbmVudCB3aWxsIGFsbG93IGEgdXNlciB0byBnZW5lcmF0ZSB0ZXN0IGNvZGUgYWNjb3JkaW5nIHRvIHRoZWlyIGlucHV0cy4gVGhpcyBjb21wb25lbnQgaXNcbndoZXJlIHVzZXJzIHdpbGwgaW5kaWNhdGUgdGhlIHJlcXVlc3QgdHlwZSwgZW5kcG9pbnQsIGFuZCByZXNwb25zZSBib2R5LCBhcyB3ZWxsIGFzIGFkZCB0aGVpciBhc3NlcnRpb25zLlxuKi9cblxuZXhwb3J0IGNvbnN0IFRlc3RJbnB1dEZvcm0gPSAoKSA9PiB7XG4gIGNvbnN0IGlzTG9nZ2VkSW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpc0xvZ2dlZEluJyk7XG4gIGNvbnN0IHJlcXVlc3RUeXBlID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS50ZXN0Rm9ybS5yZXF1ZXN0VHlwZSk7XG4gIGNvbnN0IGFzc2VydGlvbk9iamVjdCA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudGVzdEZvcm0uYXNzZXJ0aW9uTGlzdCk7XG4gIGNvbnN0IGFzc2VydGlvbkxpc3Q6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgY29uc3QgYXNzZXJ0aW9uSWRzID0gT2JqZWN0LmtleXMoYXNzZXJ0aW9uT2JqZWN0KTtcbiAgZm9yIChjb25zdCBpZCBvZiBhc3NlcnRpb25JZHMpIHtcbiAgICBhc3NlcnRpb25MaXN0LnB1c2goPEFzc2VydGlvbnMgaWQ9e2lkfSBrZXk9e2lkfSAvPik7XG4gIH1cbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VBcHBEaXNwYXRjaCgpO1xuICBcbiAgY29uc3QgcHJvamVjdHNJbmZvID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS51c2VySW5mby5wcm9qZWN0c0luZm8pO1xuICBjb25zdCBwcm9qZWN0cyA9IHByb2plY3RzSW5mby5tYXAoKGVsKSA9PiBlbC5wcm9qZWN0X25hbWUpO1xuICBkaXNwYXRjaChzZXRDdXJyZW50UHJvamVjdChwcm9qZWN0c1twcm9qZWN0cy5sZW5ndGggLSAxXSkpO1xuXG4gIGNvbnN0IGdldERhdGEgPSAoZm9ybTogYW55KSA9PiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhmb3JtRGF0YSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gYXN5bmMgKFxuICAgIGU6IFJlYWN0LkZvcm1FdmVudDxFdmVudFRhcmdldD5cbiAgKTogUHJvbWlzZTx1bmtub3duPiA9PiB7XG4gICAgLy8gY2hlY2tzIHRvIGVuc3VyZSBwcm9wZXIgdXNlciBpbnB1dFxuICAgIFxuICAgIC8vIGdhdGhlcnMgdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyBuZWVkZWQgdG8gZ2VuZXJhdGUgdGVzdCBjb2RlXG4gICAgLy8gaW4gdGhlIGZvcm1hdCBleHBlY3RlZCBvbiB0aGUgYmFja2VuZFxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBsZXQgc3RhdHVzQ291bnQgPSAwO1xuICAgIGxldCBjb250ZW50Q291bnQgPSAwO1xuICAgIGNvbnN0IGFzc2VydGlvblZhbHMgPSBPYmplY3QudmFsdWVzKGFzc2VydGlvbk9iamVjdCk7XG4gICAgYXNzZXJ0aW9uVmFscy5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgIGlmICh2YWwgPT09ICdTdGF0dXMgQ29kZScpIHN0YXR1c0NvdW50Kys7XG4gICAgICBpZiAodmFsID09PSAnQ29udGVudCBUeXBlJykgY29udGVudENvdW50Kys7XG4gICAgfSk7XG5cbiAgICBpZiAoc3RhdHVzQ291bnQgPiAxKVxuICAgICAgcmV0dXJuIGFsZXJ0KCdNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBvbmx5IG9uZSBTdGF0dXMgQ29kZSEnKTtcbiAgICBpZiAoY29udGVudENvdW50ID4gMSlcbiAgICAgIHJldHVybiBhbGVydCgnTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgb25seSBvbmUgQ29udGVudCBUeXBlIScpO1xuXG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IGdldERhdGEoZS50YXJnZXQpO1xuXG4gICAgY29uc3QgbWV0aG9kID0gZm9ybVZhbHVlc1sncmVxdWVzdC1zZWxlY3RvciddLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBmb3JtVmFsdWVzW21ldGhvZF0udG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXFfYm9keSA9IGZvcm1WYWx1ZXNbJ1JlcXVlc3QtQm9keSddO1xuICAgIGNvbnN0IGNvbnRlbnRBc3NlcnRpb24gPSBmb3JtVmFsdWVzWydDb250ZW50IFR5cGUnXTtcbiAgICBjb25zdCBzdGF0dXNBc3NlcnRpb24gPSBmb3JtVmFsdWVzWydTdGF0dXMgQ29kZSddO1xuICAgIGNvbnN0IHJlc19ib2R5ID0gZm9ybVZhbHVlc1snUmVzcG9uc2UgQm9keSddO1xuXG4gICAgaWYgKCFjb250ZW50QXNzZXJ0aW9uICYmICFzdGF0dXNBc3NlcnRpb24gJiYgIXJlc19ib2R5KVxuICAgICAgcmV0dXJuIGFsZXJ0KCdQbGVhc2UgYWRkIGV4cGVjdGVkIHJlc3BvbnNlIScpO1xuXG4gICAgdHlwZSByZXF1ZXN0Qm9keVR5cGUgPSB7XG4gICAgICBoZWFkZXI6IHtcbiAgICAgICAgbWV0aG9kPzogc3RyaW5nO1xuICAgICAgICBlbmRwb2ludD86IHN0cmluZztcbiAgICAgICAgcmVxX2JvZHk/OiBzdHJpbmc7XG4gICAgICB9O1xuICAgICAgYXNzZXJ0aW9uczoge31bXTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVxdWVzdEJvZHk6IHJlcXVlc3RCb2R5VHlwZSA9IHsgaGVhZGVyOiB7fSwgYXNzZXJ0aW9uczogW10gfTtcbiAgICBpZiAobWV0aG9kKSByZXF1ZXN0Qm9keS5oZWFkZXJbJ21ldGhvZCddID0gbWV0aG9kO1xuICAgIGlmIChlbmRwb2ludCkgcmVxdWVzdEJvZHkuaGVhZGVyWydlbmRwb2ludCddID0gZW5kcG9pbnQ7XG4gICAgaWYgKHJlcV9ib2R5KSByZXF1ZXN0Qm9keS5oZWFkZXJbJ3JlcV9ib2R5J10gPSByZXFfYm9keS50b1N0cmluZygpO1xuICAgIGlmIChjb250ZW50QXNzZXJ0aW9uKVxuICAgICAgcmVxdWVzdEJvZHkuYXNzZXJ0aW9ucy5wdXNoKHsgY29udGVudDogY29udGVudEFzc2VydGlvbi50b1N0cmluZygpIH0pO1xuICAgIGlmIChzdGF0dXNBc3NlcnRpb24pXG4gICAgICByZXF1ZXN0Qm9keS5hc3NlcnRpb25zLnB1c2goeyBzdGF0dXM6IHN0YXR1c0Fzc2VydGlvbi50b1N0cmluZygpIH0pO1xuICAgIGlmIChyZXNfYm9keSlcbiAgICAgIHJlcXVlc3RCb2R5LmFzc2VydGlvbnMucHVzaCh7IHJlc19ib2R5OiByZXNfYm9keS50b1N0cmluZygpIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KCcvYXBpL3Rlc3RzJywgcmVxdWVzdEJvZHkpO1xuICAgIGRpc3BhdGNoKHNldENvZGVPdXRwdXQocmVzcG9uc2UuZGF0YSkpO1xuXG4gICAgcmV0dXJuO1xuICB9O1xuICBjb25zdCBoYW5kbGVSZXF1ZXN0Q2hhbmdlID0gKGU6IFNlbGVjdENoYW5nZUV2ZW50PHN0cmluZz4pID0+IHtcbiAgICBkaXNwYXRjaChzZXRSZXF1ZXN0VHlwZShlLnRhcmdldC52YWx1ZSkpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUFkZCA9ICgpID0+IHtcbiAgICBkaXNwYXRjaChhZGRBc3NlcnRpb24oKSk7XG4gICAgZGlzcGF0Y2goc2V0RXJyb3JNc2coKSk7XG4gIH07XG5cbiAgY29uc3QgbWVudUl0ZW1zOiBKU1guRWxlbWVudFtdID0gW107XG4gIGNvbnN0IG1lbnVPcHRpb25zID0gWydHZXQnLCAnUG9zdCcsICdQYXRjaCcsICdEZWxldGUnXTtcbiAgZm9yIChjb25zdCBvcHRpb24gb2YgbWVudU9wdGlvbnMpIHtcbiAgICBtZW51SXRlbXMucHVzaChcbiAgICAgIDxNZW51SXRlbSBrZXk9e29wdGlvbn0gdmFsdWU9e29wdGlvbn0+XG4gICAgICAgIHtvcHRpb259XG4gICAgICA8L01lbnVJdGVtPlxuICAgICk7XG4gIH1cblxuXG4gIHJldHVybiAoXG4gICAgPGZvcm0gaWQ9J3Rlc3QtZ2VuZXJhdG9yLWZvcm0nIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuICAgICAgPEJveFxuICAgICAgICBjbGFzc05hbWU9J3Rlc3QtZ2VuLWhlYWRlcidcbiAgICAgID5cbiAgICAgICAgPEZvcm1Db250cm9sPlxuICAgICAgICAgIDxJbnB1dExhYmVsIGlkPSdyZXF1ZXN0U2VsZWN0b3InPlJlcXVlc3QgVHlwZTwvSW5wdXRMYWJlbD5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWRpc3BsYXlcIlxuICAgICAgICAgICAgbmFtZT0ncmVxdWVzdC1zZWxlY3RvcidcbiAgICAgICAgICAgIGlkPSdyZXF1ZXN0LXNlbGVjdG9yJ1xuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9J3JlcXVlc3Qtc2VsZWN0b3InXG4gICAgICAgICAgICBsYWJlbD0nUmVxdWVzdCBUeXBlJ1xuICAgICAgICAgICAgdmFsdWU9e3JlcXVlc3RUeXBlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVJlcXVlc3RDaGFuZ2V9XG4gICAgICAgICAgICBzeD17eyBoZWlnaHQ6IDQwICwgd2lkdGg6ICcxMDBweCcgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bWVudUl0ZW1zfVxuICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICA8L0Zvcm1Db250cm9sPlxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1kaXNwbGF5XCJcbiAgICAgICAgICBsYWJlbD0nRW5kcG9pbnQnXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9e3JlcXVlc3RUeXBlfVxuICAgICAgICAgIGlkPSdlbmRwb2ludCdcbiAgICAgICAgICBuYW1lPXtyZXF1ZXN0VHlwZX1cbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxSZXF1ZXN0Qm9keSBzaG93RmllbGQ9e3JlcXVlc3RUeXBlID09PSAnR2V0JyA/IGZhbHNlIDogdHJ1ZX0gLz5cbiAgICAgIDwvQm94PlxuICAgICAgPEJveFxuICAgICAgICBpZD0nYXNzZXJ0aW9uLWxpc3QnXG4gICAgICAgIHN4PXt7XG4gICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICBnYXA6ICcxMHB4JyxcbiAgICAgICAgICBtYXJnaW5Cb3R0b206ICcxMHB4JyxcbiAgICAgICAgICBtYXJnaW5Ub3A6ICcxMHB4J1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7YXNzZXJ0aW9uTGlzdH1cbiAgICAgICAgPEJveCBzeD17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzEwcHgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICA8VHlwb2dyYXBoeT5BZGQgRXhwZWN0ZWQgUmVzcG9uc2U6PC9UeXBvZ3JhcGh5PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGlkPSdhZGQtYXNzZXJ0aW9uJ1xuICAgICAgICAgICAgbmFtZT0nYWRkLWFzc2VydGlvbidcbiAgICAgICAgICAgIHZhcmlhbnQ9J2NvbnRhaW5lZCdcbiAgICAgICAgICAgIGNvbG9yPSdwcmltYXJ5J1xuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQWRkfVxuICAgICAgICAgICAgc3g9e3sganVzdGlmeVNlbGY6ICdjZW50ZXInLCBhbGlnblNlbGY6ICdjZW50ZXInLCBoZWlnaHQ6IDI1LCB3aWR0aDogMjMsIG1pbldpZHRoOiAyMyB9fVxuICAgICAgICAgICAgZGlzYWJsZUVsZXZhdGlvblxuICAgICAgICAgID5cbiAgICAgICAgICAgICtcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9Cb3g+XG4gICAgICA8L0JveD5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgdHlwZT0nc3VibWl0J1xuICAgICAgICB2YXJpYW50PSdjb250YWluZWQnXG4gICAgICAgIHN4PXt7IG1hcmdpblRvcDogJzMwcHgnLCBoZWlnaHQ6IDQwIH19XG4gICAgICAgIGRpc2FibGVFbGV2YXRpb25cbiAgICAgID5cbiAgICAgICAgR2VuZXJhdGUgVGVzdCBDb2RlXG4gICAgICA8L0J1dHRvbj5cbiAgICAgIHsgKGlzTG9nZ2VkSW4pICYmIDxQcm9qZWN0RHJvcGRvd24gLz4gfVxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBUZXh0RmllbGQgZnJvbSAnQG11aS9tYXRlcmlhbC9UZXh0RmllbGQnO1xuXG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCwgdXNlQXBwU2VsZWN0b3IgfSBmcm9tICcuLi9yZWR1eC9ob29rcyc7XG5pbXBvcnQgeyBzZXRDb2RlT3V0cHV0IH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvY29kZVNsaWNlJztcblxuLy8gVGhpcyBjb21wb25lbnQgd2lsbCByZW5kZXIgdGhlIGdlbmVyYXRlZCB0ZXN0IGNvZGUgcmVjZWl2ZWQgZnJvbSB0aGUgZmV0Y2ggcmVxdWVzdCB0byB0aGUgc2VydmVyXG5leHBvcnQgY29uc3QgQ29kZVRleHQgPSAoKSA9PiB7XG4gIGNvbnN0IGNvZGVPdXRwdXQgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLmNvZGUuY29kZU91dHB1dCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcbiAgY29uc3QgZWRpdENvZGUgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PlxuICAgIGRpc3BhdGNoKHNldENvZGVPdXRwdXQoZS50YXJnZXQudmFsdWUpKTtcblxuICByZXR1cm4gKFxuICAgIDxUZXh0RmllbGRcbiAgICAgIGlkPVwiY29kZS1vdXRwdXRcIlxuICAgICAgY2xhc3NOYW1lPVwidGV4dC1kaXNwbGF5XCJcbiAgICAgIGxhYmVsPVwiVGVzdGluZyBDb2RlXCJcbiAgICAgIHZhcmlhbnQ9XCJmaWxsZWRcIlxuICAgICAgbXVsdGlsaW5lXG4gICAgICBtaW5Sb3dzPXsgMTAgfVxuICAgICAgdmFsdWU9eyBjb2RlT3V0cHV0IH1cbiAgICAgIHN4PXt7XG4gICAgICAgIHdpZHRoOiAwLjk1LFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMjgyQzM0JyxcbiAgICAgICAgY29sb3I6ICd3aGl0ZScsXG4gICAgICAgIHBsOiAyLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDIsXG4gICAgICB9fVxuICAgICAgb25DaGFuZ2U9eyBlZGl0Q29kZSB9XG4gICAgLz5cbiAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFkZEJveEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9BZGRCb3gnO1xuaW1wb3J0IENvbnRlbnRDb3B5SWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0NvbnRlbnRDb3B5JztcbmltcG9ydCBEb25lQWxsSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0RvbmVBbGwnO1xuaW1wb3J0IEJveCBmcm9tICdAbXVpL21hdGVyaWFsL0JveCc7XG5cbmltcG9ydCB7IEFwcEJ1dHRvbiB9IGZyb20gJy4uL2NvbXBvbmVudHMvQXBwQnV0dG9uJztcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7IGFwcGVuZFRvQ2xpcGJvYXJkLCBnZXRTbmlwcGV0cywgcG9zdFNuaXBwZXQgfSBmcm9tICcuLi9yZWR1eC9yZWR1Y2Vycy9jbGlwYm9hcmRTbGljZSc7XG5pbXBvcnQgeyBjb3B5VGV4dCB9IGZyb20gJy4uL3JlZHV4L3JlZHVjZXJzL2NvZGVTbGljZSc7XG5cbi8vIFRoaXMgY29udGFpbmVyIHdyYXBzOlxuLy8gMSkgdGhlIGJ1dHRvbiB0aGF0IGNvcGllcyB0aGUgY29kZSB0byB0aGUgbmF2aWdhdG9yIGNsaXBib2FyZFxuLy8gMikgdGhlIGJ1dHRvbiB0aGF0IHBlcmZvcm0gYSBwb3N0IHJlcXVlc3QgdG8gdGhlIGNvbnNvbGlkYXRlZCBhcHAgY2xpcGJvYXJkIFNRTCBEQiB3aXRoIHRoZSBjb2RlXG5cbmV4cG9ydCBjb25zdCBCdXR0b25Db250YWluZXIgPSAoKSA9PiB7XG4gIGNvbnN0IGNvZGVPdXRwdXQgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLmNvZGUuY29kZU91dHB1dCk7XG4gIGNvbnN0IGlzTG9nZ2VkSW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpc0xvZ2dlZEluJyk7XG4gIGNvbnN0IHByb2plY3RJZCA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudXNlckluZm8uY3VycmVudFByb2plY3RJZCk7XG5cbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VBcHBEaXNwYXRjaCgpO1xuICBjb25zdCBjb3B5Q2xpcGJvYXJkID0gKCkgPT4gZGlzcGF0Y2goY29weVRleHQoKSk7XG5cbiAgY29uc3QgYXBwZW5kQ2xpcGJvYXJkID0gKCkgPT4ge1xuICAgIGlmIChpc0xvZ2dlZEluKSB7XG4gICAgICBkaXNwYXRjaChwb3N0U25pcHBldCh7IHByb2plY3RJZCwgY29kZU91dHB1dDogW2NvZGVPdXRwdXRdIH0pKTtcbiAgICAgIGRpc3BhdGNoKGdldFNuaXBwZXRzKHByb2plY3RJZCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXNwYXRjaChhcHBlbmRUb0NsaXBib2FyZChjb2RlT3V0cHV0KSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPEJveFxuICAgICAgY2xhc3NOYW1lPVwiYnV0dG9uLWNvbnRhaW5lclwiXG4gICAgICBzeD17e1xuICAgICAgICBtYXJnaW5MZWZ0OiA1LFxuICAgICAgICBtYXJnaW5Ub3A6IDIsXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxBcHBCdXR0b25cbiAgICAgICAgc3RhcnQ9ezxDb250ZW50Q29weUljb24gLz59XG4gICAgICAgIGVuZD17PERvbmVBbGxJY29uIC8+fVxuICAgICAgICBvbkNsaWNrPSB7IGNvcHlDbGlwYm9hcmQgfVxuICAgICAgICB0ZXN0SWQ9XCJidHRuLWNvcHlcIlxuICAgICAgLz5cbiAgICAgIDxBcHBCdXR0b25cbiAgICAgICAgc3RhcnQ9ezxBZGRCb3hJY29uIC8+fVxuICAgICAgICBlbmQ9ezxEb25lQWxsSWNvbiAvPn1cbiAgICAgICAgb25DbGljaz17IGFwcGVuZENsaXBib2FyZCB9XG4gICAgICAgIHRlc3RJZD1cImJ0dG4tYXBwZW5kXCJcbiAgICAgIC8+XG4gICAgPC9Cb3g+XG4gICk7XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IEJveCBmcm9tICdAbXVpL21hdGVyaWFsL0JveCc7XG5cbmltcG9ydCB7IENvZGVUZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db2RlVGV4dCc7XG5pbXBvcnQgeyBCdXR0b25Db250YWluZXIgfSBmcm9tICcuL0J1dHRvbkNvbnRhaW5lcic7XG5cbi8vIFRoaXMgY29udGFpbmVyIHdyYXBzIHRoZSB0ZXh0IGJveCBjb250YWluaW5nIHRoZSBjb2RlIGZyb20gc2VydmVyXG5cbmV4cG9ydCBjb25zdCBDb2RlQ29udGFpbmVyID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8Qm94IGNsYXNzTmFtZT0ndGVzdC1jb2RlLWJveCBjb2RlLWNvbnRhaW5lcic+XG4gICAgICAgIDxDb2RlVGV4dCAvPlxuICAgICAgICA8QnV0dG9uQ29udGFpbmVyIC8+XG4gICAgICA8L0JveD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbiIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjb21wb25lbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJzcGFjaW5nXCIsIFwiZGl2aWRlclwiLCBcImNoaWxkcmVuXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVVuYXJ5U3BhY2luZywgZ2V0VmFsdWUsIGhhbmRsZUJyZWFrcG9pbnRzLCBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlciwgdW5zdGFibGVfZXh0ZW5kU3hQcm9wIGFzIGV4dGVuZFN4UHJvcCwgdW5zdGFibGVfcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgYXMgcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG4vKipcbiAqIFJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBzZXBhcmF0b3IgUmVhY3QgZWxlbWVudCBpbnRlcnNwZXJzZWQgYmV0d2VlblxuICogZWFjaCBSZWFjdCBub2RlIG9mIHRoZSBpbnB1dCBjaGlsZHJlbi5cbiAqXG4gKiA+IGpvaW5DaGlsZHJlbihbMSwyLDNdLCAwKVxuICogWzEsMCwyLDAsM11cbiAqL1xuXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBqb2luQ2hpbGRyZW4oY2hpbGRyZW4sIHNlcGFyYXRvcikge1xuICBjb25zdCBjaGlsZHJlbkFycmF5ID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gY2hpbGRyZW5BcnJheS5yZWR1Y2UoKG91dHB1dCwgY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgb3V0cHV0LnB1c2goY2hpbGQpO1xuXG4gICAgaWYgKGluZGV4IDwgY2hpbGRyZW5BcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICBvdXRwdXQucHVzaCggLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChzZXBhcmF0b3IsIHtcbiAgICAgICAga2V5OiBgc2VwYXJhdG9yLSR7aW5kZXh9YFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0sIFtdKTtcbn1cblxuY29uc3QgZ2V0U2lkZUZyb21EaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT4ge1xuICByZXR1cm4ge1xuICAgIHJvdzogJ0xlZnQnLFxuICAgICdyb3ctcmV2ZXJzZSc6ICdSaWdodCcsXG4gICAgY29sdW1uOiAnVG9wJyxcbiAgICAnY29sdW1uLXJldmVyc2UnOiAnQm90dG9tJ1xuICB9W2RpcmVjdGlvbl07XG59O1xuXG5leHBvcnQgY29uc3Qgc3R5bGUgPSAoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4ge1xuICBsZXQgc3R5bGVzID0gX2V4dGVuZHMoe1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJ1xuICB9LCBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgdGhlbWVcbiAgfSwgcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgIHZhbHVlczogb3duZXJTdGF0ZS5kaXJlY3Rpb24sXG4gICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICB9KSwgcHJvcFZhbHVlID0+ICh7XG4gICAgZmxleERpcmVjdGlvbjogcHJvcFZhbHVlXG4gIH0pKSk7XG5cbiAgaWYgKG93bmVyU3RhdGUuc3BhY2luZykge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlTcGFjaW5nKHRoZW1lKTtcbiAgICBjb25zdCBiYXNlID0gT2JqZWN0LmtleXModGhlbWUuYnJlYWtwb2ludHMudmFsdWVzKS5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvd25lclN0YXRlLnNwYWNpbmcgPT09ICdvYmplY3QnICYmIG93bmVyU3RhdGUuc3BhY2luZ1ticmVha3BvaW50XSAhPSBudWxsIHx8IHR5cGVvZiBvd25lclN0YXRlLmRpcmVjdGlvbiA9PT0gJ29iamVjdCcgJiYgb3duZXJTdGF0ZS5kaXJlY3Rpb25bYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgICBhY2NbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICBjb25zdCBkaXJlY3Rpb25WYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgICAgYmFzZVxuICAgIH0pO1xuICAgIGNvbnN0IHNwYWNpbmdWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuc3BhY2luZyxcbiAgICAgIGJhc2VcbiAgICB9KTtcblxuICAgIGlmICh0eXBlb2YgZGlyZWN0aW9uVmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgT2JqZWN0LmtleXMoZGlyZWN0aW9uVmFsdWVzKS5mb3JFYWNoKChicmVha3BvaW50LCBpbmRleCwgYnJlYWtwb2ludHMpID0+IHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uVmFsdWUgPSBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludF07XG5cbiAgICAgICAgaWYgKCFkaXJlY3Rpb25WYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGlyZWN0aW9uVmFsdWUgPSBpbmRleCA+IDAgPyBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludHNbaW5kZXggLSAxXV0gOiAnY29sdW1uJztcbiAgICAgICAgICBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludF0gPSBwcmV2aW91c0RpcmVjdGlvblZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSAocHJvcFZhbHVlLCBicmVha3BvaW50KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnJiA+IDpub3Qoc3R5bGUpICsgOm5vdChzdHlsZSknOiB7XG4gICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgIFtgbWFyZ2luJHtnZXRTaWRlRnJvbURpcmVjdGlvbihicmVha3BvaW50ID8gZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRdIDogb3duZXJTdGF0ZS5kaXJlY3Rpb24pfWBdOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBzdHlsZXMgPSBkZWVwbWVyZ2Uoc3R5bGVzLCBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICB0aGVtZVxuICAgIH0sIHNwYWNpbmdWYWx1ZXMsIHN0eWxlRnJvbVByb3BWYWx1ZSkpO1xuICB9XG5cbiAgc3R5bGVzID0gbWVyZ2VCcmVha3BvaW50c0luT3JkZXIodGhlbWUuYnJlYWtwb2ludHMsIHN0eWxlcyk7XG4gIHJldHVybiBzdHlsZXM7XG59O1xuY29uc3QgU3RhY2tSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlTdGFjaycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdF07XG4gIH1cbn0pKHN0eWxlKTtcbmNvbnN0IFN0YWNrID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU3RhY2soaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpU3RhY2snXG4gIH0pO1xuICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcCh0aGVtZVByb3BzKTtcblxuICBjb25zdCB7XG4gICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgZGlyZWN0aW9uID0gJ2NvbHVtbicsXG4gICAgc3BhY2luZyA9IDAsXG4gICAgZGl2aWRlcixcbiAgICBjaGlsZHJlblxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IHtcbiAgICBkaXJlY3Rpb24sXG4gICAgc3BhY2luZ1xuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3RhY2tSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IGRpdmlkZXIgPyBqb2luQ2hpbGRyZW4oY2hpbGRyZW4sIGRpdmlkZXIpIDogY2hpbGRyZW5cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTdGFjay5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBmbGV4LWRpcmVjdGlvbmAgc3R5bGUgcHJvcGVydHkuXG4gICAqIEl0IGlzIGFwcGxpZWQgZm9yIGFsbCBzY3JlZW4gc2l6ZXMuXG4gICAqIEBkZWZhdWx0ICdjb2x1bW4nXG4gICAqL1xuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIEFkZCBhbiBlbGVtZW50IGJldHdlZW4gZWFjaCBjaGlsZC5cbiAgICovXG4gIGRpdmlkZXI6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBzcGFjZSBiZXR3ZWVuIGltbWVkaWF0ZSBjaGlsZHJlbi5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AsIHdoaWNoIGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFN0YWNrOyIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBEZWxldGVJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvRGVsZXRlJztcbmltcG9ydCBTYXZlSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL1NhdmUnO1xuaW1wb3J0IEJveCBmcm9tICdAbXVpL21hdGVyaWFsL0JveCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvQnV0dG9uJztcbmltcG9ydCBEaWFsb2cgZnJvbSAnQG11aS9tYXRlcmlhbC9EaWFsb2cnO1xuaW1wb3J0IERpYWxvZ1RpdGxlIGZyb20gJ0BtdWkvbWF0ZXJpYWwvRGlhbG9nVGl0bGUnO1xuaW1wb3J0IFN0YWNrIGZyb20gJ0BtdWkvbWF0ZXJpYWwvU3RhY2snO1xuaW1wb3J0IFRleHRGaWVsZCBmcm9tICdAbXVpL21hdGVyaWFsL1RleHRGaWVsZCc7XG5cbmltcG9ydCB7IFByb2plY3REcm9wZG93biB9IGZyb20gJy4uL2NvbXBvbmVudHMvUHJvamVjdERyb3Bkb3duJztcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gJy4uL3JlZHV4L2hvb2tzJztcbmltcG9ydCB7IHBvc3RTbmlwcGV0IH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvY2xpcGJvYXJkU2xpY2UnO1xuaW1wb3J0IHtcbiAgc2V0Q3VycmVudFByb2plY3QsIHNldE5ld1Byb2plY3QsIHNldFByb2plY3RzSW5mbywgc2V0U2hvd1NhdmVcbn0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdXNlckluZm9TbGljZSc7XG5cbnR5cGUgc2F2ZURhdGFQcm9wc1R5cGUgPSB7XG4gIG9wZW46IGJvb2xlYW47XG59O1xuXG4vKlxuVGhpcyBjb21wb25lbnQgYWxsb3dzIGEgdXNlciB0byByZWNvbmNpbGUgdGhlIGNsaXBib2FyZCB0ZXN0IGRhdGEgdGhhdCB0aGV5IG1hZGUgXG53aGlsZSBub3QgbG9nZ2VkIGluIHdpdGggYSBwcm9qZWN0IHN0b3JlZCBpbiB0aGUgZGF0YWJhc2Ugb25jZSB0aGV5IGRvIGxvZ2luLlxuKi9cblxuZXhwb3J0IGNvbnN0IFNhdmVEYXRhQ29udGFpbmVyID0gKHByb3BzOiBzYXZlRGF0YVByb3BzVHlwZSkgPT4ge1xuICBjb25zdCBuZXdQcm9qZWN0ID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS51c2VySW5mby5uZXdQcm9qZWN0KTtcbiAgY29uc3Qgc2VsZWN0ZWRQcm9qZWN0ID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS51c2VySW5mby5jdXJyZW50UHJvamVjdFxuICApO1xuICBjb25zdCBwcm9qZWN0cyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudXNlckluZm8ucHJvamVjdHNJbmZvKTtcbiAgY29uc3QgZGlzYWJsZURyb3Bkb3duID0gQm9vbGVhbihuZXdQcm9qZWN0Lmxlbmd0aCk7XG5cbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VBcHBEaXNwYXRjaCgpO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoXG4gICAgZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG4gICkgPT4ge1xuICAgIGRpc3BhdGNoKHNldE5ld1Byb2plY3QoZS50YXJnZXQudmFsdWUpKTtcbiAgICBkaXNwYXRjaChzZXRDdXJyZW50UHJvamVjdChlLnRhcmdldC52YWx1ZSkpO1xuICB9O1xuICBjb25zdCBoYW5kbGVEaXNjYXJkID0gKCkgPT4ge1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBib2FyZERhdGEnKTtcbiAgICBkaXNwYXRjaChzZXRTaG93U2F2ZSgpKTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlU2F2ZSA9IGFzeW5jICgpID0+IHtcbiAgICBsZXQgc25pcHBldHM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2NsaXBib2FyZERhdGEnKSkge1xuICAgICAgY29uc3Qgc3RvcmVkU25pcHBldHMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjbGlwYm9hcmREYXRhJyk7XG4gICAgICBpZiAoc3RvcmVkU25pcHBldHMpIHNuaXBwZXRzID0gSlNPTi5wYXJzZShzdG9yZWRTbmlwcGV0cyk7XG4gICAgfVxuICAgIGlmIChuZXdQcm9qZWN0ICE9PSAnJykgeyBcbiAgICAgIC8vIGFkZCBzYXZlZCBjb2RlIHNuaXBwZXRzIHRvIGEgbmV3IHByb2plY3RcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdCgnYXBpL3Byb2plY3QvJywge1xuICAgICAgICBwcm9qZWN0X25hbWU6IG5ld1Byb2plY3QsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb2plY3RzID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIGRpc3BhdGNoKHNldFByb2plY3RzSW5mbyhyZXNwb25zZS5kYXRhKSk7XG4gICAgICBkaXNwYXRjaChcbiAgICAgICAgcG9zdFNuaXBwZXQoe1xuICAgICAgICAgIHByb2plY3RJZDogcHJvamVjdHNbcHJvamVjdHMubGVuZ3RoIC0gMV1bJ3Byb2plY3RfaWQnXSxcbiAgICAgICAgICBjb2RlT3V0cHV0OiBzbmlwcGV0cyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHsgXG4gICAgICAvLyBhZGQgc2F2ZWQgY29kZSBzbmlwcGV0cyB0byBhIHByZS1leGlzdGluZyBwcm9qZWN0XG4gICAgICBmb3IgKGNvbnN0IHByb2plY3Qgb2YgcHJvamVjdHMpIHtcbiAgICAgICAgaWYgKHByb2plY3QucHJvamVjdF9uYW1lID09PSBzZWxlY3RlZFByb2plY3QpIHtcbiAgICAgICAgICBkaXNwYXRjaChwb3N0U25pcHBldCh7IHByb2plY3RJZDogcHJvamVjdC5wcm9qZWN0X2lkLCBjb2RlT3V0cHV0OiBzbmlwcGV0cyB9KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcGJvYXJkRGF0YScpO1xuXG4gICAgZGlzcGF0Y2goc2V0U2hvd1NhdmUoKSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nXG4gICAgICBvcGVuPXtwcm9wcy5vcGVufVxuICAgID5cbiAgICAgIDxCb3hcbiAgICAgICAgc3g9e3tcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgaGVpZ2h0OiAzMjUsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxCb3hcbiAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgd2lkdGg6IDUwMCxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzZlMDBiYicsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxpbWcgYWx0PVwibG9nb1wiIHNyYz1cIi4uL2Fzc2V0cy9sb2dvLWplc3Rlci5wbmdcIiAvPlxuICAgICAgICA8L0JveD5cbiAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgIFdvdWxkIHlvdSBsaWtlIHRvIHNhdmUgeW91ciBjdXJyZW50IGNsaXBib2FyZD9cbiAgICAgICAgPC9EaWFsb2dUaXRsZT5cbiAgICAgICAgPFByb2plY3REcm9wZG93biBkaXNhYmxlZD17ZGlzYWJsZURyb3Bkb3dufSAvPlxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgbGFiZWw9XCJOZXcgUHJvamVjdCBOYW1lXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm5ldy1wcm9qZWN0XCJcbiAgICAgICAgICBpZD1cIm5ldy1wcm9qZWN0XCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIHN4PXt7IHdpZHRoOiAyMDAsIG1pbldpZHRoOiAyMDAsIG1hcmdpbkJvdHRvbTogMiB9fVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgICAgIDxTdGFjayBkaXJlY3Rpb249XCJyb3dcIiBzcGFjaW5nPXsyfT5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgc3RhcnRJY29uPXs8RGVsZXRlSWNvbiAvPn1cbiAgICAgICAgICAgIHN4PXt7IHdpZHRoOiAxMjAgfX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURpc2NhcmR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgICBEaXNjYXJkXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgIHN0YXJ0SWNvbj17PFNhdmVJY29uIC8+fVxuICAgICAgICAgICAgc3g9e3sgd2lkdGg6IDEyMCB9fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2F2ZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9TdGFjaz5cbiAgICAgIDwvQm94PlxuICAgIDwvRGlhbG9nPlxuICApO1xufTtcbiIsImltcG9ydCB7IFR5cG9ncmFwaHkgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IFRlc3RJbnB1dEZvcm0gfSBmcm9tICcuLi9jb21wb25lbnRzL1Rlc3RJbnB1dEZvcm0nO1xuaW1wb3J0IHsgQ29kZUNvbnRhaW5lciB9IGZyb20gJy4uL2NvbnRhaW5lcnMvQ29kZUNvbnRhaW5lcic7XG5pbXBvcnQgeyBTYXZlRGF0YUNvbnRhaW5lciB9IGZyb20gJy4uL2NvbnRhaW5lcnMvU2F2ZURhdGFDb250YWluZXInO1xuaW1wb3J0IHsgdXNlQXBwU2VsZWN0b3IgfSBmcm9tICcuLi9yZWR1eC9ob29rcyc7XG5cbmV4cG9ydCBjb25zdCBDb2RlR2VuZXJhdG9yID0gKCkgPT4ge1xuICBjb25zdCBzaG93U2F2ZSA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUudXNlckluZm8uc2hvd1NhdmUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J3BhZ2UtYm9keSc+XG4gICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDNcIiBndXR0ZXJCb3R0b20gYWxpZ249J2NlbnRlcicgc3g9e3sgY29sb3I6ICcjNkUwMEJCJywgbWI6IDMsIG10OiAyIH19PlRlc3QgR2VuZXJhdG9yPC9UeXBvZ3JhcGh5PlxuICAgICAgPFRlc3RJbnB1dEZvcm0gLz5cbiAgICAgIDxDb2RlQ29udGFpbmVyIC8+XG4gICAgICA8U2F2ZURhdGFDb250YWluZXIgb3Blbj17c2hvd1NhdmV9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcmRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNhcmQnLCBzbG90KTtcbn1cbmNvbnN0IGNhcmRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQ2FyZCcsIFsncm9vdCddKTtcbmV4cG9ydCBkZWZhdWx0IGNhcmRDbGFzc2VzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJyYWlzZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBjaGFpblByb3BUeXBlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBQYXBlciBmcm9tICcuLi9QYXBlcic7XG5pbXBvcnQgeyBnZXRDYXJkVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9jYXJkQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRDYXJkVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IENhcmRSb290ID0gc3R5bGVkKFBhcGVyLCB7XG4gIG5hbWU6ICdNdWlDYXJkJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSgoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gIH07XG59KTtcbmNvbnN0IENhcmQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBDYXJkKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlDYXJkJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIHJhaXNlZCA9IGZhbHNlXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgcmFpc2VkXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KENhcmRSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBlbGV2YXRpb246IHJhaXNlZCA/IDggOiB1bmRlZmluZWQsXG4gICAgcmVmOiByZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBDYXJkLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNhcmQgd2lsbCB1c2UgcmFpc2VkIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByYWlzZWQ6IGNoYWluUHJvcFR5cGVzKFByb3BUeXBlcy5ib29sLCBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzLnJhaXNlZCAmJiBwcm9wcy52YXJpYW50ID09PSAnb3V0bGluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNVUk6IENvbWJpbmluZyBgcmFpc2VkPXt0cnVlfWAgd2l0aCBgdmFyaWFudD1cIm91dGxpbmVkXCJgIGhhcyBubyBlZmZlY3QuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBDYXJkOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXJkQWN0aW9uc1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQ2FyZEFjdGlvbnMnLCBzbG90KTtcbn1cbmNvbnN0IGNhcmRBY3Rpb25zQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUNhcmRBY3Rpb25zJywgWydyb290JywgJ3NwYWNpbmcnXSk7XG5leHBvcnQgZGVmYXVsdCBjYXJkQWN0aW9uc0NsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImRpc2FibGVTcGFjaW5nXCIsIFwiY2xhc3NOYW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldENhcmRBY3Rpb25zVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9jYXJkQWN0aW9uc0NsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVNwYWNpbmdcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlU3BhY2luZyAmJiAnc3BhY2luZyddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Q2FyZEFjdGlvbnNVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgQ2FyZEFjdGlvbnNSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlDYXJkQWN0aW9ucycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5kaXNhYmxlU3BhY2luZyAmJiBzdHlsZXMuc3BhY2luZ107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgcGFkZGluZzogOFxufSwgIW93bmVyU3RhdGUuZGlzYWJsZVNwYWNpbmcgJiYge1xuICAnJiA+IDpub3QoOmZpcnN0LW9mLXR5cGUpJzoge1xuICAgIG1hcmdpbkxlZnQ6IDhcbiAgfVxufSkpO1xuY29uc3QgQ2FyZEFjdGlvbnMgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBDYXJkQWN0aW9ucyhpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2FyZEFjdGlvbnMnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBkaXNhYmxlU3BhY2luZyA9IGZhbHNlLFxuICAgIGNsYXNzTmFtZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVTcGFjaW5nXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KENhcmRBY3Rpb25zUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBDYXJkQWN0aW9ucy5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBhY3Rpb25zIGRvIG5vdCBoYXZlIGFkZGl0aW9uYWwgbWFyZ2luLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNwYWNpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBDYXJkQWN0aW9uczsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FyZENvbnRlbnRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNhcmRDb250ZW50Jywgc2xvdCk7XG59XG5jb25zdCBjYXJkQ29udGVudENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlDYXJkQ29udGVudCcsIFsncm9vdCddKTtcbmV4cG9ydCBkZWZhdWx0IGNhcmRDb250ZW50Q2xhc3NlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldENhcmRDb250ZW50VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9jYXJkQ29udGVudENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Q2FyZENvbnRlbnRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgQ2FyZENvbnRlbnRSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlDYXJkQ29udGVudCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIHBhZGRpbmc6IDE2LFxuICAgICcmOmxhc3QtY2hpbGQnOiB7XG4gICAgICBwYWRkaW5nQm90dG9tOiAyNFxuICAgIH1cbiAgfTtcbn0pO1xuY29uc3QgQ2FyZENvbnRlbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBDYXJkQ29udGVudChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2FyZENvbnRlbnQnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50ID0gJ2RpdidcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQ2FyZENvbnRlbnRSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ2FyZENvbnRlbnQucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IENhcmRDb250ZW50OyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXJkTWVkaWFVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNhcmRNZWRpYScsIHNsb3QpO1xufVxuY29uc3QgY2FyZE1lZGlhQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUNhcmRNZWRpYScsIFsncm9vdCcsICdtZWRpYScsICdpbWcnXSk7XG5leHBvcnQgZGVmYXVsdCBjYXJkTWVkaWFDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImltYWdlXCIsIFwic3JjXCIsIFwic3R5bGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBjaGFpblByb3BUeXBlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldENhcmRNZWRpYVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vY2FyZE1lZGlhQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBpc01lZGlhQ29tcG9uZW50LFxuICAgIGlzSW1hZ2VDb21wb25lbnRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGlzTWVkaWFDb21wb25lbnQgJiYgJ21lZGlhJywgaXNJbWFnZUNvbXBvbmVudCAmJiAnaW1nJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRDYXJkTWVkaWFVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgQ2FyZE1lZGlhUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpQ2FyZE1lZGlhJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHtcbiAgICAgIGlzTWVkaWFDb21wb25lbnQsXG4gICAgICBpc0ltYWdlQ29tcG9uZW50XG4gICAgfSA9IG93bmVyU3RhdGU7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgaXNNZWRpYUNvbXBvbmVudCAmJiBzdHlsZXMubWVkaWEsIGlzSW1hZ2VDb21wb25lbnQgJiYgc3R5bGVzLmltZ107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgYmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXG4gIGJhY2tncm91bmRSZXBlYXQ6ICduby1yZXBlYXQnLFxuICBiYWNrZ3JvdW5kUG9zaXRpb246ICdjZW50ZXInXG59LCBvd25lclN0YXRlLmlzTWVkaWFDb21wb25lbnQgJiYge1xuICB3aWR0aDogJzEwMCUnXG59LCBvd25lclN0YXRlLmlzSW1hZ2VDb21wb25lbnQgJiYge1xuICAvLyDimqDvuI8gb2JqZWN0LWZpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFMTEuXG4gIG9iamVjdEZpdDogJ2NvdmVyJ1xufSkpO1xuY29uc3QgTUVESUFfQ09NUE9ORU5UUyA9IFsndmlkZW8nLCAnYXVkaW8nLCAncGljdHVyZScsICdpZnJhbWUnLCAnaW1nJ107XG5jb25zdCBJTUFHRV9DT01QT05FTlRTID0gWydwaWN0dXJlJywgJ2ltZyddO1xuY29uc3QgQ2FyZE1lZGlhID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ2FyZE1lZGlhKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlDYXJkTWVkaWEnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgaW1hZ2UsXG4gICAgc3JjLFxuICAgIHN0eWxlXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBpc01lZGlhQ29tcG9uZW50ID0gTUVESUFfQ09NUE9ORU5UUy5pbmRleE9mKGNvbXBvbmVudCkgIT09IC0xO1xuICBjb25zdCBjb21wb3NlZFN0eWxlID0gIWlzTWVkaWFDb21wb25lbnQgJiYgaW1hZ2UgPyBfZXh0ZW5kcyh7XG4gICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKFwiJHtpbWFnZX1cIilgXG4gIH0sIHN0eWxlKSA6IHN0eWxlO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgaXNNZWRpYUNvbXBvbmVudCxcbiAgICBpc0ltYWdlQ29tcG9uZW50OiBJTUFHRV9DT01QT05FTlRTLmluZGV4T2YoY29tcG9uZW50KSAhPT0gLTFcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQ2FyZE1lZGlhUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICByb2xlOiAhaXNNZWRpYUNvbXBvbmVudCAmJiBpbWFnZSA/ICdpbWcnIDogdW5kZWZpbmVkLFxuICAgIHJlZjogcmVmLFxuICAgIHN0eWxlOiBjb21wb3NlZFN0eWxlLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgc3JjOiBpc01lZGlhQ29tcG9uZW50ID8gaW1hZ2UgfHwgc3JjIDogdW5kZWZpbmVkXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ2FyZE1lZGlhLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGNoYWluUHJvcFR5cGVzKFByb3BUeXBlcy5ub2RlLCBwcm9wcyA9PiB7XG4gICAgaWYgKCFwcm9wcy5jaGlsZHJlbiAmJiAhcHJvcHMuaW1hZ2UgJiYgIXByb3BzLnNyYyAmJiAhcHJvcHMuY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNVUk6IEVpdGhlciBgY2hpbGRyZW5gLCBgaW1hZ2VgLCBgc3JjYCBvciBgY29tcG9uZW50YCBwcm9wIG11c3QgYmUgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogSW1hZ2UgdG8gYmUgZGlzcGxheWVkIGFzIGEgYmFja2dyb3VuZCBpbWFnZS5cbiAgICogRWl0aGVyIGBpbWFnZWAgb3IgYHNyY2AgcHJvcCBtdXN0IGJlIHNwZWNpZmllZC5cbiAgICogTm90ZSB0aGF0IGNhbGxlciBtdXN0IHNwZWNpZnkgaGVpZ2h0IG90aGVyd2lzZSB0aGUgaW1hZ2Ugd2lsbCBub3QgYmUgdmlzaWJsZS5cbiAgICovXG4gIGltYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBBbiBhbGlhcyBmb3IgYGltYWdlYCBwcm9wZXJ0eS5cbiAgICogQXZhaWxhYmxlIG9ubHkgd2l0aCBtZWRpYSBjb21wb25lbnRzLlxuICAgKiBNZWRpYSBjb21wb25lbnRzOiBgdmlkZW9gLCBgYXVkaW9gLCBgcGljdHVyZWAsIGBpZnJhbWVgLCBgaW1nYC5cbiAgICovXG4gIHNyYzogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IENhcmRNZWRpYTsiLCJcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBCdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9CdXR0b24nO1xuaW1wb3J0IENhcmQgZnJvbSAnQG11aS9tYXRlcmlhbC9DYXJkJztcbmltcG9ydCBDYXJkQWN0aW9ucyBmcm9tICdAbXVpL21hdGVyaWFsL0NhcmRBY3Rpb25zJztcbmltcG9ydCBDYXJkQ29udGVudCBmcm9tICdAbXVpL21hdGVyaWFsL0NhcmRDb250ZW50JztcbmltcG9ydCBDYXJkTWVkaWEgZnJvbSAnQG11aS9tYXRlcmlhbC9DYXJkTWVkaWEnO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5JztcblxudHlwZSBDb250cmlidXRvckNhcmRQcm9wcyA9IHtcbiAgaW1hZ2VVcmw6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBnaXRodWJMaW5rOiBzdHJpbmcsXG4gIGxpbmtlZEluTGluazogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBDb250cmlidXRvckNhcmQgPSAocHJvcHM6IENvbnRyaWJ1dG9yQ2FyZFByb3BzKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPENhcmQgc3g9e3sgbWF4V2lkdGg6IDM0NSB9fT5cbiAgICAgIDxDYXJkTWVkaWFcbiAgICAgICAgY29tcG9uZW50PVwiaW1nXCJcbiAgICAgICAgaGVpZ2h0PVwiMjUwXCJcbiAgICAgICAgd2lkdGg9XCIyNTBcIlxuICAgICAgICBpbWFnZT17cHJvcHMuaW1hZ2VVcmx9XG4gICAgICAgIGFsdD1cImdyZWVuIGlndWFuYVwiXG4gICAgICAvPlxuICAgICAgPENhcmRDb250ZW50PlxuICAgICAgICA8VHlwb2dyYXBoeSBjbGFzc05hbWU9XCJjb250cmlidXRvck5hbWVcIiBndXR0ZXJCb3R0b20gdmFyaWFudD1cImg1XCIgY29tcG9uZW50PVwiZGl2XCI+XG4gICAgICAgICAge3Byb3BzLm5hbWV9XG4gICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgIDwvQ2FyZENvbnRlbnQ+XG4gICAgICA8Q2FyZEFjdGlvbnM+XG4gICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJwcmltYXJ5XCIgaHJlZj17cHJvcHMubGlua2VkSW5MaW5rfSB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICBMaW5rZWRJblxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiBjb2xvcj1cInByaW1hcnlcIiBocmVmPXtwcm9wcy5naXRodWJMaW5rfSB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICBHaXRIdWJcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L0NhcmRBY3Rpb25zPlxuICAgIDwvQ2FyZD5cbiAgKTtcbn07IiwiaW1wb3J0IHsgQ29udHJpYnV0b3JDYXJkIH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250cmlidXRvckNhcmQnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHBob3Rvc09iaiB9IGZyb20gJy4uL2Fzc2V0cy9waG90b3NPYmonO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5JztcblxuXG5leHBvcnQgY29uc3QgQ29udHJpYnV0b3JzID0gKCkgPT4ge1xuXG4gICAgdHlwZSB1c2VyT2JqVHlwZSA9IHtcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIGdpdGh1Ykxpbms6IHN0cmluZyxcbiAgICAgIGxpbmtlZEluTGluazogc3RyaW5nLFxuICAgICAgaW1hZ2VVcmw6IHN0cmluZ1xuICB9XG4gIFxuXG4gICAgY29uc3QgdXNlcnM6IHVzZXJPYmpUeXBlW10gPSBbe1xuICAgICAgbmFtZTogJ01pY2hhZWwgTGFtJyxcbiAgICAgIGdpdGh1Ykxpbms6ICdodHRwczovL2dpdGh1Yi5jb20vbWxhbWNoYW1rZWUnLFxuICAgICAgbGlua2VkSW5MaW5rOiAnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL21sYW1jaGFta2VlJyxcbiAgICAgIGltYWdlVXJsOiBwaG90b3NPYmoubWljaGFlbFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0xpbGFoIEF1Z3VzdCcsXG4gICAgICBnaXRodWJMaW5rOiAnaHR0cHM6Ly9naXRodWIuY29tL2xpbGFoYXVndXN0JyxcbiAgICAgIGxpbmtlZEluTGluazogJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9pbi9saWxhaGF1Z3VzdC8nLFxuICAgICAgaW1hZ2VVcmw6IHBob3Rvc09iai5saWxhaFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0JyaWFuIEhhbycsXG4gICAgICBnaXRodWJMaW5rOiAnaHR0cHM6Ly93d3cuZ2l0aHViLmNvbS9CcmlhbkhhbycsXG4gICAgICBsaW5rZWRJbkxpbms6ICdodHRwczovL3d3dy5saW5rZWRpbi5jb20vaW4vYnJpYW5oYW8vJyxcbiAgICAgIGltYWdlVXJsOiBwaG90b3NPYmouYnJpYW5cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdTZXJlbmEgQW1vcycsXG4gICAgICBnaXRodWJMaW5rOiAnaHR0cHM6Ly9naXRodWIuY29tL3NhbW9zMTcnLFxuICAgICAgbGlua2VkSW5MaW5rOiAnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL3NlcmVuYS1hbW9zLycsXG4gICAgICBpbWFnZVVybDogcGhvdG9zT2JqLnNlcmVuYVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0Fuc2h1bWFuIFNpbmhhJyxcbiAgICAgIGdpdGh1Ykxpbms6ICdodHRwczovL2dpdGh1Yi5jb20vQW5zaHVtYW5TaW5oYTgnLFxuICAgICAgbGlua2VkSW5MaW5rOiAnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL2Fuc2h1bWFuLXNpbmhhMTk5OC8nLFxuICAgICAgaW1hZ2VVcmw6IHBob3Rvc09iai5hbnNodVxuICAgIH0sXG4gICAgXTtcblxuXG5cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ncGFnZS1ib2R5Jz5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDNcIiBhbGlnbj1cImNlbnRlclwiIGd1dHRlckJvdHRvbSAgc3g9e3sgbWI6IDcsIG10OiA1LCBjb2xvcjoncHJpbWFyeS5tYWluJyB9fSBjbGFzc05hbWU9XCJjb250cmlidXRvcnMtaGVhZGVyXCI+Q29udHJpYnV0b3JzPC9UeXBvZ3JhcGh5PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250cmlidXRvcnMtcGFnZVwiPlxuICAgICAgICAgIHt1c2Vycy5tYXAoKGRldk9iajp1c2VyT2JqVHlwZSwgaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxDb250cmlidXRvckNhcmQgXG4gICAgICAgICAgICAgIG5hbWU9e2Rldk9iai5uYW1lfSBcbiAgICAgICAgICAgICAgZ2l0aHViTGluaz17ZGV2T2JqLmdpdGh1Ykxpbmt9IFxuICAgICAgICAgICAgICBsaW5rZWRJbkxpbms9e2Rldk9iai5saW5rZWRJbkxpbmt9IFxuICAgICAgICAgICAgICBpbWFnZVVybD17ZGV2T2JqLmltYWdlVXJsfSBcbiAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgLz47XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTsgICAgIFxufTsiLCIvLyBpbXBvcnQgc2VyZW5hIGZyb20gJy4vcGhvdG9zL3NlcmVuYS5qcGcnO1xuLy8gaW1wb3J0IGFuc2h1IGZyb20gJy4vcGhvdG9zL2JyaWFuLWhlYWRzaG90LmpwZyc7XG4vLyBpbXBvcnQgYnJpYW4gZnJvbSAnLi9waG90b3MvYnJpYW4taGVhZHNob3QuanBnJztcbi8vIGltcG9ydCBsaWxhaCBmcm9tICcuL3Bob3Rvcy9saWxhaC5KUEcnO1xuXG5leHBvcnQgY29uc3QgcGhvdG9zT2JqID0ge1xuICBzZXJlbmE6ICcuL2Fzc2V0cy9waG90b3Mvc2VyZW5hLnBuZycsXG4gIGJyaWFuOiAnLi9hc3NldHMvcGhvdG9zL2JyaWFuLWhlYWRzaG90LmpwZycsXG4gIGFuc2h1OiAnLi9hc3NldHMvcGhvdG9zL2Fuc2h1LnBuZycsXG4gIGxpbGFoOiAnLi9hc3NldHMvcGhvdG9zL2xpbGFoLnBuZycsXG4gIG1pY2hhZWw6ICcuL2Fzc2V0cy9waG90b3MvbWljaGFlbC5qcGcnLFxuICBidXR0b25zOiAnLi9hc3NldHMvcGhvdG9zL2J1dHRvbnMucG5nJ1xufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcGhvdG9zT2JqIH0gZnJvbSAnLi4vYXNzZXRzL3Bob3Rvc09iaic7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICdAbXVpL21hdGVyaWFsL1R5cG9ncmFwaHknO1xuXG5leHBvcnQgY29uc3QgRG9jdW1lbnRhdGlvbiA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT0ncGFnZS1ib2R5Jz5cbiAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoM1wiIGd1dHRlckJvdHRvbSBhbGlnbj0nY2VudGVyJyBzeD17eyBjb2xvcjogJyM2RTAwQkInLCBtYjogNCwgbXQ6IDUgfX0+RG9jdW1lbnRhdGlvbjwvVHlwb2dyYXBoeT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdkb2N1bWVudGF0aW9uLWNvbnRhaW5lcic+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImRvY3VtZW50YXRpb24taGVhZGVyc1wiPkdldHRpbmcgc3RhcnRlZDwvcD5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwiZG9jdW1lbnRhdGlvbi1wXCI+VG8gc3RhcnQgZ2VuZXJhdGluZyBhIHRlc3QsIHNpbXBseSBuYXZpZ2F0ZSB0byBvdXIgaG9tZSBwYWdlLCB3aGVyZSB5b3Ugd2lsbCBmaXJzdCBiZSBwcm9tcHRlZCB0byBzcGVjaWZ5IHRoZSBlbmRwb2ludCBmb3IgeW91ciByZXF1ZXN0LiA8L3A+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImRvY3VtZW50YXRpb24tcFwiPlRoaXMgY2FuIGJlIGEgdXJsIG9yIGEgbG9jYWwgZW5kcG9pbnQgbGlrZSDigJgv4oCYLCDigJgvdXNlcnPigJksIGV0Yy4gPC9wPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJkb2N1bWVudGF0aW9uLXBcIj5BdCB0aGlzIHN0YWdlIHlvdSB3aWxsIGFsc28gaGF2ZSB0aGUgb3B0aW9uIHRvIGlucHV0IGEgcmVxdWVzdCBib2R5IHRvIHNwZWNpZnkgdGhlIG5hdHVyZSBvZiB5b3VyIHJlcXVlc3QgKGF2YWlsYWJsZSB0byBhbGwgcmVxdWVzdHMgdHlwZXMgZXhjZXB0IEdFVC48L3A+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImRvY3VtZW50YXRpb24tcFwiPk9uY2UgdGhlc2UgaW5pdGlhbCBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBzYXRpc2ZpZWQgdG8gdGhlIG5lY2Vzc2FyeSBleHRlbnQgZm9yIHlvdXIgcHJvamVjdCwgeW91IGNhbiBhZGQgYXNzZXJ0aW9ucyB0byB5b3VyIHRlc3QgYnkgY2xpY2tpbmcgdGhlIOKAmCvigJkgYnV0dG9uIG5leHQgdG8g4oCYQWRkIEV4cGVjdGVkIFJlc3BvbnNl4oCZLiBCeSBkZWZhdWx0LCBKZXN0ZXIgd2lsbCBwb3B1bGF0ZSBhc3NlcnRpb24gdHlwZXMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogPC9wPlxuICAgICAgICA8b2wgY2xhc3NOYW1lPVwiZG9jdW1lbnRhdGlvbi1wXCI+XG4gICAgICAgICAgPGxpPmV4cGVjdGVkIHN0YXR1cyBjb2RlICgxMDAtNTExKSAgICAgICAgIFxuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgIGV4cGVjdGVkIGNvbnRlbnQgdHlwZSAodGV4dC9odG1sLCBhcHBsaWNhdGlvbi9qc29uLCBldGMuKSAgIFxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICBleHBlY3RlZCByZXNwb25zZSBib2R5IChvcHRpb25hbCk8L2xpPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvb2w+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImRvY3VtZW50YXRpb24tcFwiPiBZb3UgYXJlIGFsbG93ZWQgYSBtYXhpbXVtIG9mIG9uZSBvZiBlYWNoIGFzc2VydGlvbiB0eXBlLiBPbmNlIGFsbCBvZiB5b3VyIHNwZWNpZmljYXRpb25zIGFyZSBpbiBwbGFjZSwgY2xpY2sg4oCYR2VuZXJhdGUgVGVzdCBDb2Rl4oCZIGFuZCB5b3VyIG5ldyB0ZXN0IHdpbGwgYXBwZWFyIGluIHRoZSBjb2RlIGJsb2NrIGJlbG93ITwvcD5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwiZG9jdW1lbnRhdGlvbi1oZWFkZXJzXCI+U2F2aW5nIHlvdXIgd29yazwvcD5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwiZG9jdW1lbnRhdGlvbi1wXCI+VGhlIGNvZGUgYmxvY2sgd2hlcmUgeW91ciB0ZXN0cyBhcmUgZGlzcGxheWVkIGFsc28gaGFzIDIgYnV0dG9ucyBpbiB0aGUgdG9wIHJpZ2h0IGNvcm5lci48L3A+XG4gICAgICAgIDxpbWcgY2xhc3NOYW1lPVwiZG9jcy1kaXNwbGF5XCIgc3JjPXtwaG90b3NPYmouYnV0dG9uc30+PC9pbWc+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImRvY3VtZW50YXRpb24tcFwiPlRoZSBmaXJzdCBpcyBhIGNvcHktdG8tY2xpcGJvYXJkIGJ1dHRvbiB3aGljaCB3aWxsIGVuYWJsZSB5b3UgdG8gY29weSB0aGUgZW50aXJlIGJsb2NrIG9mIGNvZGUgdG8gcGFzdGUgd2hlcmV2ZXIgeW91IHdpc2guIFRoZSBzZWNvbmQgaXMgdGhlIOKAmGFkZCB0byBwcm9qZWN04oCZIGJ1dHRvbi48L3A+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImRvY3VtZW50YXRpb24tcFwiPlxuICAgICAgICAgIFRoZXJlIGlzIGFuIG9wdGlvbiB0byBsb2dpbiB3aXRoIEdpdGh1Yi4gSWYgeW91IGFyZSBsb2dnZWQgaW4sIHlvdSB3aWxsIGJlIGFibGUgdG8gY3JlYXRlIG11bHRpcGxlIHNhdmVkIHByb2plY3RzIFxuICAgICAgICAgIHVuZGVyIOKAmFByb2plY3Rz4oCZIGFuZCBhZGQgeW91ciBnZW5lcmF0ZWQgdGVzdCBjb2RlIHNuaXBwZXRzIHRvIHdoYXRldmVyIHByb2plY3QgeW91IHNwZWNpZnkuIEFuIOKAmEFkZCB0byBQcm9qZWN04oCZIFxuICAgICAgICAgIGRyb3Bkb3duIHdpbGwgYXBwZWFyIHVuZGVybmVhdGggdGhlIOKAmEdlbmVyYXRlIFRlc3QgQ29kZeKAmSBidXR0b24gZm9yIGxvZ2dlZCBpbiB1c2Vycy4gVG8gYWRkIGEgdGVzdCBjb2RlIHNuaXBwZXQgdG8gXG4gICAgICAgICAgYSBwcm9qZWN0LCBzZWxlY3QgeW91ciBkZXNpcmVkIHByb2plY3QgZnJvbSB0aGlzIGRyb3AtZG93biBtZW51IGFuZCB0aGVuIGNsaWNrIHRoZSBzZWNvbmQgYnV0dG9uIGluIHRoZSB1cHBlciByaWdodCBcbiAgICAgICAgICBjb3JuZXIgb2YgdGhlIGNvZGUgYmxvY2suIFlvdSBjYW4gdmlldyB5b3VyIHNhdmVkIHByb2plY3RzIGluIHRoZSAnUHJvamVjdHMnIHRhYi48L3A+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImRvY3VtZW50YXRpb24taGVhZGVyc1wiPkludGVncmF0aW5nIHRlc3RzIGludG8geW91ciBjb2RlYmFzZTwvcD5cbiAgICAgICAgPG9sIGNsYXNzTmFtZT1cImRvY3VtZW50YXRpb24tcFwiPlxuICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgIENyZWF0ZSBhIF9fdGVzdHNfXyBmb2xkZXIgaW4geW91ciBwcm9qZWN0IHdpdGggYSBmaWxlIGNhbGxlZFxuICAgICAgICAgICAgc3VwZXJ0ZXN0LmpzXG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICA8bGk+XG4gICAgICAgICAgICBBZGQgamVzdCBhbmQgc3VwZXJ0ZXN0IGFzIGRlcGVuZGVuY2llcyBpbiB5b3VyIHBhY2thZ2UuanNvbiBmaWxlXG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICA8bGk+XG4gICAgICAgICAgICBQYXN0ZSBnZW5lcmF0ZWQgY29kZSBpbnRvIHRoZSBmaWxlIHN1cGVydGVzdC5qc1xuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvb2w+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgIDwvZGl2PlxuICApO1xufTtcblxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENvZGVHZW5lcmF0b3IgfSBmcm9tICcuL0NvZGVHZW5lcmF0b3InO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoIH0gZnJvbSAnLi4vcmVkdXgvaG9va3MnO1xuaW1wb3J0IHsgc2V0UHJvamVjdHNJbmZvIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvdXNlckluZm9TbGljZSc7XG5cbmV4cG9ydCBjb25zdCBIb21lID0gKCkgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG5cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpc0xvZ2dlZEluJykpIHtcbiAgICAgIGF4aW9zLmdldCgnL2FwaS9wcm9qZWN0JykudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHNldFByb2plY3RzSW5mbyhyZXMuZGF0YSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIDxDb2RlR2VuZXJhdG9yIC8+O1xufTtcblxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IFR5cG9ncmFwaHkgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcblxuZXhwb3J0IGNvbnN0IE5vdEZvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPSdwYWdlLWJvZHknPlxuICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD0naDQnIGNvbXBvbmVudD0naDInPlxuICAgICAgICA0MDQ6IFBhZ2UgTm90IEZvdW5kLiBDbGljayA8TGluayB0bz0nLyc+aGVyZTwvTGluaz4gdG8gZ28gSG9tZS5cbiAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUm91dGUsIFJvdXRlcyB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuXG5pbXBvcnQgQm94IGZyb20gJ0BtdWkvbWF0ZXJpYWwvQm94JztcbmltcG9ydCB7IGNyZWF0ZVRoZW1lLCBUaGVtZVByb3ZpZGVyIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuXG5pbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2xpcGJvYXJkJztcbmltcG9ydCB7IEZvb3RlciB9IGZyb20gJy4vY29tcG9uZW50cy9Gb290ZXInO1xuaW1wb3J0IHsgTmF2YmFyIH0gZnJvbSAnLi9jb21wb25lbnRzL05hdkJhcic7XG5pbXBvcnQgeyBOYXZQYW5lbENvbnRhaW5lciB9IGZyb20gJy4vY29udGFpbmVycy9OYXZQYW5lbENvbnRhaW5lcic7XG5pbXBvcnQgeyBBdXRoIH0gZnJvbSAnLi9wYWdlcy9BdXRoJztcbmltcG9ydCB7IENvZGVHZW5lcmF0b3IgfSBmcm9tICcuL3BhZ2VzL0NvZGVHZW5lcmF0b3InO1xuaW1wb3J0IHsgQ29udHJpYnV0b3JzIH0gZnJvbSAnLi9wYWdlcy9Db250cmlidXRvcnMnO1xuaW1wb3J0IHsgRG9jdW1lbnRhdGlvbiB9IGZyb20gJy4vcGFnZXMvRG9jdW1lbnRhdGlvbic7XG5pbXBvcnQgeyBIb21lIH0gZnJvbSAnLi9wYWdlcy9Ib21lJztcbmltcG9ydCB7IE5vdEZvdW5kIH0gZnJvbSAnLi9wYWdlcy9Ob3RGb3VuZCc7XG5pbXBvcnQgeyB1c2VBcHBTZWxlY3RvciB9IGZyb20gJy4vcmVkdXgvaG9va3MnO1xuXG5jb25zdCB0aGVtZSA9IGNyZWF0ZVRoZW1lKHtcbiAgcGFsZXR0ZToge1xuICAgIHByaW1hcnk6IHtcbiAgICAgIG1haW46ICcjNkUwMEJCJyxcbiAgICAgIGNvbnRyYXN0VGV4dDogJyNmZmYnXG4gICAgfSxcbiAgICBzZWNvbmRhcnk6IHtcbiAgICAgIG1haW46ICcjNjA2RjdCJyxcbiAgICAgIGNvbnRyYXN0VGV4dDogJyNmZmYnXG4gICAgfSxcbiAgICBpbmZvOiB7XG4gICAgICBtYWluOiAnIzg3OTVBMScsXG4gICAgICBjb250cmFzdFRleHQ6ICcjZmZmJ1xuICAgIH1cbiAgfSxcbiAgdHlwb2dyYXBoeToge1xuICAgIC8vIGZvbnRGYW1pbHk6IFtcbiAgICAvLyAgICdTb3VyY2UgQ29kZSBQcm8nLFxuICAgIC8vICAgJ21vbm9zcGFjZScsXG4gICAgLy8gXS5qb2luKCcsJyksXG4gIH0sXG59KTtcblxuY29uc3QgQXBwID0gKCkgPT4ge1xuICBjb25zdCBzaG93UHJvamVjdFBhbmVsID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5uYXZQYW5lbC5zaG93UHJvamVjdFBhbmVsKTtcbiAgcmV0dXJuIChcbiAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgPE5hdmJhciAvPlxuICAgICAgPEJveFxuICAgICAgICBjbGFzc05hbWU9XCJjb250ZW50c1wiXG4gICAgICAgIHN4PXt7XG4gICAgICAgICAgZGlzcGxheTogJ2dyaWQnLFxuICAgICAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHNob3dQcm9qZWN0UGFuZWwgPyAnMWZyIDVmcicgOiAnMWZyIDExZnInLFxuICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8TmF2UGFuZWxDb250YWluZXIgLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYWdlLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxSb3V0ZXM+XG4gICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9cIiBlbGVtZW50PXs8SG9tZSAvPn0gLz5cbiAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2NsaXBib2FyZC86cHJvamVjdElkXCIgZWxlbWVudD17PENsaXBib2FyZCAvPn0gLz5cbiAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2RvY3VtZW50YXRpb25cIiBlbGVtZW50PXs8RG9jdW1lbnRhdGlvbiAvPn0gLz5cbiAgICAgICAgICAgIDxSb3V0ZSBwYXRoPScvY29udHJpYnV0b3JzJyBlbGVtZW50PXs8Q29udHJpYnV0b3JzIC8+fSAvPlxuICAgICAgICAgICAgPFJvdXRlIHBhdGg9Jy9hdXRoZW50aWNhdGUnIGVsZW1lbnQ9ezxBdXRoIC8+fSAvPlxuICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgIHBhdGg9XCIvQ29kZUdlbmVyYXRvci86cHJvamVjdElkXCJcbiAgICAgICAgICAgICAgZWxlbWVudD17PENvZGVHZW5lcmF0b3IgLz59XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFJvdXRlIHBhdGg9XCIqXCIgZWxlbWVudD17PE5vdEZvdW5kIC8+fSAvPlxuICAgICAgICAgIDwvUm91dGVzPlxuICAgICAgICAgIDxGb290ZXIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0JveD5cbiAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBcHA7XG4iLCJpbXBvcnQgeyBjb25maWd1cmVTdG9yZSB9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQgY2xpcGJvYXJkUmVkdWNlciBmcm9tICcuL3JlZHVjZXJzL2NsaXBib2FyZFNsaWNlJztcbmltcG9ydCBjb2RlU2xpY2VSZWR1Y2VyIGZyb20gJy4vcmVkdWNlcnMvY29kZVNsaWNlJztcbmltcG9ydCBuYXZQYW5lbFJlZHVjZXIgZnJvbSAnLi9yZWR1Y2Vycy9uYXZQYW5lbFNsaWNlJztcbmltcG9ydCB0ZXN0Rm9ybVJlZHVjZXIgZnJvbSAnLi9yZWR1Y2Vycy90ZXN0Rm9ybVNsaWNlJztcbmltcG9ydCB1c2VySW5mb1JlZHVjZXIgZnJvbSAnLi9yZWR1Y2Vycy91c2VySW5mb1NsaWNlJztcbmltcG9ydCB1c2VySW5wdXRSZWR1Y2VyIGZyb20gJy4vcmVkdWNlcnMvdXNlcklucHV0U2xpY2UnO1xuXG5leHBvcnQgY29uc3Qgc3RvcmUgPSBjb25maWd1cmVTdG9yZSh7XG4gIHJlZHVjZXI6IHtcbiAgICB0ZXN0Rm9ybTogdGVzdEZvcm1SZWR1Y2VyLFxuICAgIHVzZXJJbnB1dDogdXNlcklucHV0UmVkdWNlcixcbiAgICBjb2RlOiBjb2RlU2xpY2VSZWR1Y2VyLFxuICAgIGNsaXBib2FyZDogY2xpcGJvYXJkUmVkdWNlcixcbiAgICB1c2VySW5mbzogdXNlckluZm9SZWR1Y2VyLFxuICAgIG5hdlBhbmVsOiBuYXZQYW5lbFJlZHVjZXIsXG4gIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgUm9vdFN0YXRlID0gUmV0dXJuVHlwZTx0eXBlb2Ygc3RvcmUuZ2V0U3RhdGU+O1xuZXhwb3J0IHR5cGUgQXBwRGlzcGF0Y2ggPSB0eXBlb2Ygc3RvcmUuZGlzcGF0Y2g7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBCcm93c2VyUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5cbmltcG9ydCBBcHAgZnJvbSAnLi9BcHAnO1xuaW1wb3J0IHsgc3RvcmUgfSBmcm9tICcuL3JlZHV4L3N0b3JlJztcblxuY29uc3Qgcm9vdCA9IFJlYWN0RE9NLmNyZWF0ZVJvb3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKSEpO1xucm9vdC5yZW5kZXIoXG4gIDxQcm92aWRlciBzdG9yZT17c3RvcmV9PlxuICAgIDxCcm93c2VyUm91dGVyPlxuICAgICAgPEFwcCAvPlxuICAgIDwvQnJvd3NlclJvdXRlcj5cbiAgPC9Qcm92aWRlcj5cbik7XG4iXSwibmFtZXMiOlsibGVhZlByb3RvdHlwZXMiLCJnZXRQcm90byIsIlN0eWxlU2hlZXQiLCJvcHRpb25zIiwiX3RoaXMiLCJ0aGlzIiwiX2luc2VydFRhZyIsInRhZyIsImJlZm9yZSIsInRhZ3MiLCJsZW5ndGgiLCJpbnNlcnRpb25Qb2ludCIsIm5leHRTaWJsaW5nIiwicHJlcGVuZCIsImNvbnRhaW5lciIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJwdXNoIiwiaXNTcGVlZHkiLCJ1bmRlZmluZWQiLCJzcGVlZHkiLCJjdHIiLCJub25jZSIsImtleSIsIl9wcm90byIsInByb3RvdHlwZSIsImh5ZHJhdGUiLCJub2RlcyIsImZvckVhY2giLCJpbnNlcnQiLCJydWxlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsImNyZWF0ZVN0eWxlRWxlbWVudCIsInNoZWV0IiwiaSIsInN0eWxlU2hlZXRzIiwib3duZXJOb2RlIiwic2hlZXRGb3JUYWciLCJpbnNlcnRSdWxlIiwiY3NzUnVsZXMiLCJlIiwiZmx1c2giLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJhYnMiLCJNYXRoIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiT2JqZWN0IiwiYXNzaWduIiwidHJpbSIsInZhbHVlIiwicmVwbGFjZSIsInBhdHRlcm4iLCJyZXBsYWNlbWVudCIsImluZGV4b2YiLCJzZWFyY2giLCJpbmRleE9mIiwiaW5kZXgiLCJjaGFyQ29kZUF0IiwiYmVnaW4iLCJlbmQiLCJzbGljZSIsImFycmF5IiwibGluZSIsImNvbHVtbiIsInBvc2l0aW9uIiwiY2hhcmFjdGVyIiwiY2hhcmFjdGVycyIsIm5vZGUiLCJyb290IiwicGFyZW50IiwidHlwZSIsInByb3BzIiwiY2hpbGRyZW4iLCJyZXR1cm4iLCJjb3B5IiwicHJldiIsIm5leHQiLCJwZWVrIiwiY2FyZXQiLCJ0b2tlbiIsImFsbG9jIiwiZGVhbGxvYyIsImRlbGltaXQiLCJkZWxpbWl0ZXIiLCJ3aGl0ZXNwYWNlIiwiZXNjYXBpbmciLCJjb3VudCIsImNvbW1lbnRlciIsImlkZW50aWZpZXIiLCJNUyIsIk1PWiIsIldFQktJVCIsIkNPTU1FTlQiLCJERUNMQVJBVElPTiIsIktFWUZSQU1FUyIsInNlcmlhbGl6ZSIsImNhbGxiYWNrIiwib3V0cHV0Iiwic3RyaW5naWZ5IiwiZWxlbWVudCIsImpvaW4iLCJwcmVmaXgiLCJoYXNoIiwiY29tcGlsZSIsInBhcnNlIiwicnVsZXMiLCJydWxlc2V0cyIsInBzZXVkbyIsInBvaW50cyIsImRlY2xhcmF0aW9ucyIsIm9mZnNldCIsImF0cnVsZSIsInByb3BlcnR5IiwicHJldmlvdXMiLCJ2YXJpYWJsZSIsInNjYW5uaW5nIiwiYW1wZXJzYW5kIiwicmVmZXJlbmNlIiwiY29tbWVudCIsImRlY2xhcmF0aW9uIiwicnVsZXNldCIsInBvc3QiLCJzaXplIiwiaiIsImsiLCJ4IiwieSIsInoiLCJpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmciLCJmaXhlZEVsZW1lbnRzIiwiV2Vha01hcCIsImNvbXBhdCIsImlzSW1wbGljaXRSdWxlIiwiZ2V0Iiwic2V0IiwicGFyc2VkIiwidG9SdWxlcyIsImdldFJ1bGVzIiwicGFyZW50UnVsZXMiLCJyZW1vdmVMYWJlbCIsImRlZmF1bHRTdHlsaXNQbHVnaW5zIiwibWFwIiwiZXhlYyIsIm1hdGNoIiwic3NyU3R5bGVzIiwicXVlcnlTZWxlY3RvckFsbCIsIkFycmF5IiwiY2FsbCIsImdldEF0dHJpYnV0ZSIsImhlYWQiLCJfaW5zZXJ0Iiwic3R5bGlzUGx1Z2lucyIsImluc2VydGVkIiwibm9kZXNUb0h5ZHJhdGUiLCJhdHRyaWIiLCJzcGxpdCIsImN1cnJlbnRTaGVldCIsImNvbGxlY3Rpb24iLCJmaW5hbGl6aW5nUGx1Z2lucyIsInNlcmlhbGl6ZXIiLCJjb25jYXQiLCJzZWxlY3RvciIsInNlcmlhbGl6ZWQiLCJzaG91bGRDYWNoZSIsInN0eWxlcyIsImNhY2hlIiwibmFtZSIsInJlZ2lzdGVyZWQiLCJmbiIsImNyZWF0ZSIsImFyZyIsIkVtb3Rpb25DYWNoZUNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiSFRNTEVsZW1lbnQiLCJQcm92aWRlciIsIndpdGhFbW90aW9uQ2FjaGUiLCJmdW5jIiwiZm9yd2FyZFJlZiIsInJlZiIsInVzZUNvbnRleHQiLCJUaGVtZUNvbnRleHQiLCJzdHIiLCJoIiwibGVuIiwidG9TdHJpbmciLCJhbmltYXRpb25JdGVyYXRpb25Db3VudCIsImJvcmRlckltYWdlT3V0c2V0IiwiYm9yZGVySW1hZ2VTbGljZSIsImJvcmRlckltYWdlV2lkdGgiLCJib3hGbGV4IiwiYm94RmxleEdyb3VwIiwiYm94T3JkaW5hbEdyb3VwIiwiY29sdW1uQ291bnQiLCJjb2x1bW5zIiwiZmxleCIsImZsZXhHcm93IiwiZmxleFBvc2l0aXZlIiwiZmxleFNocmluayIsImZsZXhOZWdhdGl2ZSIsImZsZXhPcmRlciIsImdyaWRSb3ciLCJncmlkUm93RW5kIiwiZ3JpZFJvd1NwYW4iLCJncmlkUm93U3RhcnQiLCJncmlkQ29sdW1uIiwiZ3JpZENvbHVtbkVuZCIsImdyaWRDb2x1bW5TcGFuIiwiZ3JpZENvbHVtblN0YXJ0IiwibXNHcmlkUm93IiwibXNHcmlkUm93U3BhbiIsIm1zR3JpZENvbHVtbiIsIm1zR3JpZENvbHVtblNwYW4iLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCIsIm9wYWNpdHkiLCJvcmRlciIsIm9ycGhhbnMiLCJ0YWJTaXplIiwid2lkb3dzIiwiekluZGV4Iiwiem9vbSIsIldlYmtpdExpbmVDbGFtcCIsImZpbGxPcGFjaXR5IiwiZmxvb2RPcGFjaXR5Iiwic3RvcE9wYWNpdHkiLCJzdHJva2VEYXNoYXJyYXkiLCJzdHJva2VEYXNob2Zmc2V0Iiwic3Ryb2tlTWl0ZXJsaW1pdCIsInN0cm9rZU9wYWNpdHkiLCJzdHJva2VXaWR0aCIsImh5cGhlbmF0ZVJlZ2V4IiwiYW5pbWF0aW9uUmVnZXgiLCJpc0N1c3RvbVByb3BlcnR5IiwiaXNQcm9jZXNzYWJsZVZhbHVlIiwicHJvY2Vzc1N0eWxlTmFtZSIsInN0eWxlTmFtZSIsInRvTG93ZXJDYXNlIiwicHJvY2Vzc1N0eWxlVmFsdWUiLCJwMSIsInAyIiwiY3Vyc29yIiwiaGFuZGxlSW50ZXJwb2xhdGlvbiIsIm1lcmdlZFByb3BzIiwiaW50ZXJwb2xhdGlvbiIsIl9fZW1vdGlvbl9zdHlsZXMiLCJhbmltIiwib2JqIiwic3RyaW5nIiwiaXNBcnJheSIsIl9rZXkiLCJpbnRlcnBvbGF0ZWQiLCJfaSIsImNyZWF0ZVN0cmluZ0Zyb21PYmplY3QiLCJwcmV2aW91c0N1cnNvciIsInJlc3VsdCIsImNhY2hlZCIsImxhYmVsUGF0dGVybiIsInNlcmlhbGl6ZVN0eWxlcyIsImFyZ3MiLCJzdHJpbmdNb2RlIiwic3RyaW5ncyIsInJhdyIsImxhc3RJbmRleCIsImlkZW50aWZpZXJOYW1lIiwidXNlSW5zZXJ0aW9uRWZmZWN0IiwidXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayIsInVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsImdldFJlZ2lzdGVyZWRTdHlsZXMiLCJyZWdpc3RlcmVkU3R5bGVzIiwiY2xhc3NOYW1lcyIsInJhd0NsYXNzTmFtZSIsImNsYXNzTmFtZSIsInJlZ2lzdGVyU3R5bGVzIiwiaXNTdHJpbmdUYWciLCJpbnNlcnRTdHlsZXMiLCJjdXJyZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImV4cG9ydHMiLCJfY3JlYXRlU3ZnSWNvbiIsIl9qc3hSdW50aW1lIiwiX2RlZmF1bHQiLCJkZWZhdWx0IiwianN4IiwiZCIsIm5vZGVJbnRlcm9wIiwiX19lc01vZHVsZSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImhhcyIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaGFzT3duUHJvcGVydHkiLCJkZXNjIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJlbnVtZXJhYmxlIiwiX3V0aWxzIiwiY3JlYXRlU3ZnSWNvbiIsImJsYWNrIiwid2hpdGUiLCJBMTAwIiwiQTIwMCIsIkE0MDAiLCJBNzAwIiwiX2V4Y2x1ZGVkIiwibGlnaHQiLCJ0ZXh0IiwicHJpbWFyeSIsInNlY29uZGFyeSIsImRpc2FibGVkIiwiZGl2aWRlciIsImJhY2tncm91bmQiLCJwYXBlciIsImFjdGlvbiIsImFjdGl2ZSIsImhvdmVyIiwiaG92ZXJPcGFjaXR5Iiwic2VsZWN0ZWQiLCJzZWxlY3RlZE9wYWNpdHkiLCJkaXNhYmxlZEJhY2tncm91bmQiLCJkaXNhYmxlZE9wYWNpdHkiLCJmb2N1cyIsImZvY3VzT3BhY2l0eSIsImFjdGl2YXRlZE9wYWNpdHkiLCJkYXJrIiwiaWNvbiIsImFkZExpZ2h0T3JEYXJrIiwiaW50ZW50IiwiZGlyZWN0aW9uIiwic2hhZGUiLCJ0b25hbE9mZnNldCIsInRvbmFsT2Zmc2V0TGlnaHQiLCJ0b25hbE9mZnNldERhcmsiLCJtYWluIiwiY2FzZUFsbENhcHMiLCJ0ZXh0VHJhbnNmb3JtIiwiZGVmYXVsdEZvbnRGYW1pbHkiLCJjcmVhdGVUeXBvZ3JhcGh5IiwicGFsZXR0ZSIsInR5cG9ncmFwaHkiLCJfcmVmIiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwiZm9udFdlaWdodExpZ2h0IiwiZm9udFdlaWdodFJlZ3VsYXIiLCJmb250V2VpZ2h0TWVkaXVtIiwiZm9udFdlaWdodEJvbGQiLCJodG1sRm9udFNpemUiLCJhbGxWYXJpYW50cyIsInB4VG9SZW0iLCJweFRvUmVtMiIsIm90aGVyIiwiY29lZiIsImJ1aWxkVmFyaWFudCIsImxldHRlclNwYWNpbmciLCJjYXNpbmciLCJyb3VuZCIsInZhcmlhbnRzIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2Iiwic3VidGl0bGUxIiwic3VidGl0bGUyIiwiYm9keTEiLCJib2R5MiIsImJ1dHRvbiIsImNhcHRpb24iLCJvdmVybGluZSIsImRlZXBtZXJnZSIsImNsb25lIiwiY3JlYXRlU2hhZG93IiwicHgiLCJlYXNpbmciLCJlYXNlSW5PdXQiLCJlYXNlT3V0IiwiZWFzZUluIiwic2hhcnAiLCJkdXJhdGlvbiIsInNob3J0ZXN0Iiwic2hvcnRlciIsInNob3J0Iiwic3RhbmRhcmQiLCJjb21wbGV4IiwiZW50ZXJpbmdTY3JlZW4iLCJsZWF2aW5nU2NyZWVuIiwiZm9ybWF0TXMiLCJtaWxsaXNlY29uZHMiLCJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCJoZWlnaHQiLCJjb25zdGFudCIsImNyZWF0ZVRyYW5zaXRpb25zIiwiaW5wdXRUcmFuc2l0aW9ucyIsIm1lcmdlZEVhc2luZyIsIm1lcmdlZER1cmF0aW9uIiwiZHVyYXRpb25PcHRpb24iLCJlYXNpbmdPcHRpb24iLCJkZWxheSIsImFuaW1hdGVkUHJvcCIsIm1vYmlsZVN0ZXBwZXIiLCJmYWIiLCJzcGVlZERpYWwiLCJhcHBCYXIiLCJkcmF3ZXIiLCJtb2RhbCIsInNuYWNrYmFyIiwidG9vbHRpcCIsIm1peGlucyIsIm1peGluc0lucHV0IiwicGFsZXR0ZUlucHV0IiwidHJhbnNpdGlvbnMiLCJ0cmFuc2l0aW9uc0lucHV0IiwidHlwb2dyYXBoeUlucHV0IiwidmFycyIsIkVycm9yIiwibW9kZSIsImNvbnRyYXN0VGhyZXNob2xkIiwiZ2V0RGVmYXVsdFByaW1hcnkiLCJnZXREZWZhdWx0U2Vjb25kYXJ5IiwiZXJyb3IiLCJnZXREZWZhdWx0RXJyb3IiLCJpbmZvIiwiZ2V0RGVmYXVsdEluZm8iLCJzdWNjZXNzIiwiZ2V0RGVmYXVsdFN1Y2Nlc3MiLCJ3YXJuaW5nIiwiZ2V0RGVmYXVsdFdhcm5pbmciLCJnZXRDb250cmFzdFRleHQiLCJhdWdtZW50Q29sb3IiLCJjb2xvciIsIm1haW5TaGFkZSIsImxpZ2h0U2hhZGUiLCJkYXJrU2hhZGUiLCJKU09OIiwiY29udHJhc3RUZXh0IiwibW9kZXMiLCJjb21tb24iLCJncmV5IiwiY3JlYXRlUGFsZXR0ZSIsInN5c3RlbVRoZW1lIiwibXVpVGhlbWUiLCJicmVha3BvaW50cyIsInRvb2xiYXIiLCJtaW5IZWlnaHQiLCJ1cCIsInNoYWRvd3MiLCJyZWR1Y2UiLCJhY2MiLCJhcmd1bWVudCIsImlzRW1wdHkiLCJwcm9wc1RvQ2xhc3NLZXkiLCJ2YXJpYW50IiwiY2xhc3NLZXkiLCJrZXlzIiwic29ydCIsImNhcGl0YWxpemUiLCJfZXhjbHVkZWQyIiwiX2V4Y2x1ZGVkMyIsInNob3VsZEZvcndhcmRQcm9wIiwicHJvcCIsInN5c3RlbURlZmF1bHRUaGVtZSIsImNyZWF0ZVRoZW1lIiwicm9vdFNob3VsZEZvcndhcmRQcm9wIiwic2xvdFNob3VsZEZvcndhcmRQcm9wIiwic3R5bGVkIiwiaW5wdXQiLCJkZWZhdWx0VGhlbWUiLCJzdHlsZUZ1bmN0aW9uU3giLCJzeXN0ZW1TeCIsInRoZW1lIiwiX19tdWlfc3lzdGVtU3giLCJpbnB1dE9wdGlvbnMiLCJmaWx0ZXIiLCJzdHlsZSIsImNvbXBvbmVudE5hbWUiLCJzbG90IiwiY29tcG9uZW50U2xvdCIsInNraXBWYXJpYW50c1Jlc29sdmVyIiwiaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciIsInNraXBTeCIsImlucHV0U2tpcFN4Iiwib3ZlcnJpZGVzUmVzb2x2ZXIiLCJzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiIsImRlZmF1bHRTdHlsZWRSZXNvbHZlciIsImxhYmVsIiwibXVpU3R5bGVkUmVzb2x2ZXIiLCJzdHlsZUFyZyIsImV4cHJlc3Npb25zIiwiZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lIiwic3R5bGVzQXJnIiwiX19lbW90aW9uX3JlYWwiLCJ0aGVtZUlucHV0IiwidHJhbnNmb3JtZWRTdHlsZUFyZyIsInN0eWxlT3ZlcnJpZGVzIiwiY29tcG9uZW50cyIsImdldFN0eWxlT3ZlcnJpZGVzIiwicmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyIsImVudHJpZXMiLCJzbG90S2V5Iiwic2xvdFN0eWxlIiwiX3RoZW1lJGNvbXBvbmVudHMiLCJfdGhlbWUkY29tcG9uZW50cyRuYW0iLCJvd25lclN0YXRlIiwidmFyaWFudHNTdHlsZXMiLCJ0aGVtZVZhcmlhbnRzIiwidGhlbWVWYXJpYW50IiwiaXNNYXRjaCIsInZhcmlhbnRzUmVzb2x2ZXIiLCJkZWZpbml0aW9uIiwiZ2V0VmFyaWFudFN0eWxlcyIsIm51bU9mQ3VzdG9tRm5zQXBwbGllZCIsInBsYWNlaG9sZGVycyIsImZpbGwiLCJfcmVmMiIsIndpdGhDb25maWciLCJjcmVhdGVTdHlsZWQiLCJwYXJhbXMiLCJkZWZhdWx0UHJvcHMiLCJyZXNvbHZlUHJvcHMiLCJnZXRUaGVtZVByb3BzIiwidXNlVGhlbWUiLCJnZXRTdmdJY29uVXRpbGl0eUNsYXNzIiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3MiLCJTdmdJY29uUm9vdCIsIl90aGVtZSR0cmFuc2l0aW9ucyIsIl90aGVtZSR0cmFuc2l0aW9ucyRjciIsIl90aGVtZSR0cmFuc2l0aW9uczIiLCJfdGhlbWUkdHJhbnNpdGlvbnMyJGQiLCJfdGhlbWUkdHlwb2dyYXBoeSIsIl90aGVtZSR0eXBvZ3JhcGh5JHB4VCIsIl90aGVtZSR0eXBvZ3JhcGh5MiIsIl90aGVtZSR0eXBvZ3JhcGh5MiRweCIsIl90aGVtZSR0eXBvZ3JhcGh5MyIsIl90aGVtZSR0eXBvZ3JhcGh5MyRweCIsIl9wYWxldHRlJG93bmVyU3RhdGUkYyIsIl9wYWxldHRlIiwiX3BhbGV0dGUkb3duZXJTdGF0ZSRjMiIsIl9wYWxldHRlMiIsIl9wYWxldHRlMiRhY3Rpb24iLCJfcGFsZXR0ZTMiLCJfcGFsZXR0ZTMkYWN0aW9uIiwidXNlclNlbGVjdCIsIndpZHRoIiwiZGlzcGxheSIsInRyYW5zaXRpb24iLCJpbmhlcml0Iiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsIlN2Z0ljb24iLCJpblByb3BzIiwidXNlVGhlbWVQcm9wcyIsImNvbXBvbmVudCIsImh0bWxDb2xvciIsImluaGVyaXRWaWV3Qm94IiwidGl0bGVBY2Nlc3MiLCJ2aWV3Qm94IiwiaW5zdGFuY2VGb250U2l6ZSIsIm1vcmUiLCJjbGFzc2VzIiwic2xvdHMiLCJjb21wb3NlQ2xhc3NlcyIsInVzZVV0aWxpdHlDbGFzc2VzIiwiYXMiLCJmb2N1c2FibGUiLCJyb2xlIiwibXVpTmFtZSIsInBhdGgiLCJkaXNwbGF5TmFtZSIsIkNvbXBvbmVudCIsInZhbGlkYXRvciIsInJlYXNvbiIsImNvbXBvbmVudE5hbWVJbkVycm9yIiwicHJvcE5hbWUiLCJsb2NhdGlvbiIsInByb3BGdWxsTmFtZSIsInVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciIsImNvbmZpZ3VyZSIsImdlbmVyYXRvciIsImNvbnNvbGUiLCJ3YXJuIiwiQ2xhc3NOYW1lR2VuZXJhdG9yIiwibXVpTmFtZXMiLCJjb250cm9sbGVkIiwiZGVmYXVsdFByb3AiLCJzdGF0ZSIsImlzQ29udHJvbGxlZCIsInZhbHVlU3RhdGUiLCJzZXRWYWx1ZSIsIm5ld1ZhbHVlIiwiaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0IiwiaGFkS2V5Ym9hcmRFdmVudCIsImhhZEZvY3VzVmlzaWJsZVJlY2VudGx5IiwiaW5wdXRUeXBlc1doaXRlbGlzdCIsInVybCIsInRlbCIsImVtYWlsIiwicGFzc3dvcmQiLCJudW1iZXIiLCJkYXRlIiwibW9udGgiLCJ3ZWVrIiwidGltZSIsImRhdGV0aW1lIiwiaGFuZGxlS2V5RG93biIsImV2ZW50IiwibWV0YUtleSIsImFsdEtleSIsImN0cmxLZXkiLCJoYW5kbGVQb2ludGVyRG93biIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJ2aXNpYmlsaXR5U3RhdGUiLCJkb2MiLCJvd25lckRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImlzRm9jdXNWaXNpYmxlUmVmIiwib25Gb2N1cyIsInRhcmdldCIsIm1hdGNoZXMiLCJ0YWdOYW1lIiwicmVhZE9ubHkiLCJpc0NvbnRlbnRFZGl0YWJsZSIsImZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5IiwiaXNGb2N1c1Zpc2libGUiLCJvbkJsdXIiLCJ3aW5kb3ciLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwicmVhY3RQcm9wc1JlZ2V4IiwidGVzdCIsInRlc3RPbWl0UHJvcHNPblN0cmluZ1RhZyIsInRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudCIsImdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCIsImNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHMiLCJpc1JlYWwiLCJvcHRpb25zU2hvdWxkRm9yd2FyZFByb3AiLCJfX2Vtb3Rpb25fZm9yd2FyZFByb3AiLCJJbnNlcnRpb24iLCJuZXdTdHlsZWQiLCJ0YXJnZXRDbGFzc05hbWUiLCJiYXNlVGFnIiwiX19lbW90aW9uX2Jhc2UiLCJkZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AiLCJzaG91bGRVc2VBcyIsImFyZ3VtZW50cyIsImFwcGx5IiwiU3R5bGVkIiwidyIsIkZpbmFsVGFnIiwiY2xhc3NJbnRlcnBvbGF0aW9ucyIsIlQiLCJmaW5hbFNob3VsZEZvcndhcmRQcm9wIiwibmV3UHJvcHMiLCJGcmFnbWVudCIsIndpdGhDb21wb25lbnQiLCJuZXh0VGFnIiwibmV4dE9wdGlvbnMiLCJpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIiwicHJvY2Vzc29yIiwidmFsdWVzIiwieHMiLCJzbSIsIm1kIiwibGciLCJ4bCIsImRlZmF1bHRCcmVha3BvaW50cyIsImhhbmRsZUJyZWFrcG9pbnRzIiwicHJvcFZhbHVlIiwic3R5bGVGcm9tUHJvcFZhbHVlIiwidGhlbWVCcmVha3BvaW50cyIsIml0ZW0iLCJicmVha3BvaW50IiwiY3NzS2V5IiwiY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0IiwiYnJlYWtwb2ludHNJbnB1dCIsIl9icmVha3BvaW50c0lucHV0JGtleSIsInJlbW92ZVVudXNlZEJyZWFrcG9pbnRzIiwiYnJlYWtwb2ludEtleXMiLCJicmVha3BvaW50T3V0cHV0IiwibWVyZ2VCcmVha3BvaW50c0luT3JkZXIiLCJlbXB0eUJyZWFrcG9pbnRzIiwibWVyZ2VkT3V0cHV0IiwicmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMiLCJicmVha3BvaW50VmFsdWVzIiwiYmFzZSIsImN1c3RvbUJhc2UiLCJicmVha3BvaW50c0tleXMiLCJjb21wdXRlQnJlYWtwb2ludHNCYXNlIiwiY2xhbXAiLCJtaW4iLCJtYXgiLCJkZWNvbXBvc2VDb2xvciIsImNoYXJBdCIsInJlIiwiUmVnRXhwIiwiY29sb3JzIiwibiIsInBhcnNlSW50IiwiaGV4VG9SZ2IiLCJtYXJrZXIiLCJzdWJzdHJpbmciLCJjb2xvclNwYWNlIiwic2hpZnQiLCJwYXJzZUZsb2F0IiwicmVjb21wb3NlQ29sb3IiLCJnZXRMdW1pbmFuY2UiLCJyZ2IiLCJzIiwibCIsImEiLCJmIiwiaHNsVG9SZ2IiLCJ2YWwiLCJOdW1iZXIiLCJ0b0ZpeGVkIiwiZ2V0Q29udHJhc3RSYXRpbyIsImZvcmVncm91bmQiLCJsdW1BIiwibHVtQiIsImFscGhhIiwiZGFya2VuIiwiY29lZmZpY2llbnQiLCJsaWdodGVuIiwiYm9yZGVyUmFkaXVzIiwic3BhY2luZyIsInNwYWNpbmdJbnB1dCIsInNoYXBlIiwic2hhcGVJbnB1dCIsInVuaXQiLCJzdGVwIiwic29ydGVkVmFsdWVzIiwiYnJlYWtwb2ludHNBc0FycmF5IiwiYnJlYWtwb2ludDEiLCJicmVha3BvaW50MiIsInNvcnRCcmVha3BvaW50c1ZhbHVlcyIsImRvd24iLCJiZXR3ZWVuIiwic3RhcnQiLCJlbmRJbmRleCIsIm9ubHkiLCJub3QiLCJrZXlJbmRleCIsImNyZWF0ZUJyZWFrcG9pbnRzIiwibXVpIiwidHJhbnNmb3JtIiwiYXJnc0lucHV0IiwiY3JlYXRlU3BhY2luZyIsImhhbmRsZXJzIiwiZmlsdGVyUHJvcHMiLCJtZXJnZSIsInByb3BUeXBlcyIsImdldEJvcmRlciIsImJvcmRlciIsInRoZW1lS2V5IiwiYm9yZGVyVG9wIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJCb3R0b20iLCJib3JkZXJMZWZ0IiwiYm9yZGVyQ29sb3IiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJCb3R0b21Db2xvciIsImJvcmRlckxlZnRDb2xvciIsInRyYW5zZm9ybWVyIiwiY3NzUHJvcGVydHkiLCJnYXAiLCJjb2x1bW5HYXAiLCJyb3dHYXAiLCJtYXhXaWR0aCIsIl9wcm9wcyR0aGVtZSIsIl9wcm9wcyR0aGVtZSRicmVha3BvaSIsIl9wcm9wcyR0aGVtZSRicmVha3BvaTIiLCJtaW5XaWR0aCIsIm1heEhlaWdodCIsImZvbnRTdHlsZSIsInRleHRBbGlnbiIsImZpbHRlclByb3BzTWFwcGluZyIsImJvcmRlcnMiLCJmbGV4Ym94IiwiZ3JpZCIsInBvc2l0aW9ucyIsInNpemluZyIsInN0eWxlRnVuY3Rpb25NYXBwaW5nIiwicHJvcFRvU3R5bGVGdW5jdGlvbiIsInN0eWxlRm5OYW1lIiwicHJvcGVydGllcyIsIm0iLCJwIiwiZGlyZWN0aW9ucyIsInQiLCJyIiwiYiIsImFsaWFzZXMiLCJtYXJnaW5YIiwibWFyZ2luWSIsInBhZGRpbmdYIiwicGFkZGluZ1kiLCJnZXRDc3NQcm9wZXJ0aWVzIiwiZGlyIiwibWVtb2l6ZSIsIm1hcmdpbktleXMiLCJwYWRkaW5nS2V5cyIsInNwYWNpbmdLZXlzIiwiY3JlYXRlVW5hcnlVbml0IiwiZGVmYXVsdFZhbHVlIiwiX2dldFBhdGgiLCJ0aGVtZVNwYWNpbmciLCJjcmVhdGVVbmFyeVNwYWNpbmciLCJnZXRWYWx1ZSIsInRyYW5zZm9ybWVkIiwiY3NzUHJvcGVydGllcyIsImdldFN0eWxlRnJvbVByb3BWYWx1ZSIsInJlc29sdmVDc3NQcm9wZXJ0eSIsIm1hcmdpbiIsInBhZGRpbmciLCJnZXRQYXRoIiwiY2hlY2tWYXJzIiwidGhlbWVNYXBwaW5nIiwicHJvcFZhbHVlRmluYWwiLCJ1c2VyVmFsdWUiLCJnZXRUaGVtZVZhbHVlIiwiaW5wdXRQcm9wcyIsInN0eWxlRnVuY3Rpb24iLCJzeCIsInRyYXZlcnNlIiwic3hJbnB1dCIsInN4T2JqZWN0IiwiY3NzIiwic3R5bGVLZXkiLCJtYXliZUZuIiwiYnJlYWtwb2ludHNWYWx1ZXMiLCJvYmplY3RzIiwiYWxsS2V5cyIsIm9iamVjdCIsInVuaW9uIiwiU2V0IiwiZXZlcnkiLCJvYmplY3RzSGF2ZVNhbWVLZXlzIiwidW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4IiwiY29udGV4dFRoZW1lIiwiZGVmYXVsdEdlbmVyYXRvciIsImdlbmVyYXRlIiwicmVzZXQiLCJjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IiLCJ0b1VwcGVyQ2FzZSIsImdldFV0aWxpdHlDbGFzcyIsImNyZWF0ZUNoYWluZWRGdW5jdGlvbiIsImZ1bmNzIiwiZGVib3VuY2UiLCJ3YWl0IiwidGltZW91dCIsImRlYm91bmNlZCIsImNsZWFyIiwiaXNQbGFpbk9iamVjdCIsImNvbnN0cnVjdG9yIiwic291cmNlIiwiZm9ybWF0TXVpRXJyb3JNZXNzYWdlIiwiY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImdsb2JhbFN0YXRlQ2xhc3Nlc01hcHBpbmciLCJjaGVja2VkIiwiY29tcGxldGVkIiwiZXhwYW5kZWQiLCJmb2N1c2VkIiwiZm9jdXNWaXNpYmxlIiwicmVxdWlyZWQiLCJnbG9iYWxTdGF0ZVByZWZpeCIsImdsb2JhbFN0YXRlQ2xhc3MiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIiwib3duZXJXaW5kb3ciLCJkZWZhdWx0VmlldyIsInNldFJlZiIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VGb3JrUmVmIiwicmVmQSIsInJlZkIiLCJyZWZWYWx1ZSIsImdsb2JhbElkIiwibWF5YmVSZWFjdFVzZUlkIiwidXNlSWQiLCJpZE92ZXJyaWRlIiwicmVhY3RJZCIsImRlZmF1bHRJZCIsInNldERlZmF1bHRJZCIsImlkIiwidXNlR2xvYmFsSWQiLCJtb2R1bGUiLCJ1dGlscyIsInNldHRsZSIsImNvb2tpZXMiLCJidWlsZFVSTCIsImJ1aWxkRnVsbFBhdGgiLCJwYXJzZUhlYWRlcnMiLCJpc1VSTFNhbWVPcmlnaW4iLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsIkF4aW9zRXJyb3IiLCJDYW5jZWxlZEVycm9yIiwicGFyc2VQcm90b2NvbCIsImNvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25DYW5jZWxlZCIsInJlcXVlc3REYXRhIiwiZGF0YSIsInJlcXVlc3RIZWFkZXJzIiwiaGVhZGVycyIsInJlc3BvbnNlVHlwZSIsImRvbmUiLCJjYW5jZWxUb2tlbiIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImlzRm9ybURhdGEiLCJpc1N0YW5kYXJkQnJvd3NlckVudiIsInJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdCIsImF1dGgiLCJ1c2VybmFtZSIsInVuZXNjYXBlIiwiQXV0aG9yaXphdGlvbiIsImJ0b2EiLCJmdWxsUGF0aCIsImJhc2VVUkwiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJlcnIiLCJvcGVuIiwibWV0aG9kIiwicGFyYW1zU2VyaWFsaXplciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwidHJhbnNpdGlvbmFsIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsIkVUSU1FRE9VVCIsInhzcmZWYWx1ZSIsIndpdGhDcmVkZW50aWFscyIsInhzcmZDb29raWVOYW1lIiwicmVhZCIsInhzcmZIZWFkZXJOYW1lIiwic2V0UmVxdWVzdEhlYWRlciIsImlzVW5kZWZpbmVkIiwib25Eb3dubG9hZFByb2dyZXNzIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbCIsImFib3J0Iiwic3Vic2NyaWJlIiwiYWJvcnRlZCIsInByb3RvY29sIiwiRVJSX0JBRF9SRVFVRVNUIiwic2VuZCIsImJpbmQiLCJBeGlvcyIsIm1lcmdlQ29uZmlnIiwiYXhpb3MiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJjb250ZXh0IiwiaW5zdGFuY2UiLCJleHRlbmQiLCJpbnN0YW5jZUNvbmZpZyIsIkNhbmNlbFRva2VuIiwiaXNDYW5jZWwiLCJWRVJTSU9OIiwidG9Gb3JtRGF0YSIsIkNhbmNlbCIsImFsbCIsInByb21pc2VzIiwic3ByZWFkIiwiaXNBeGlvc0Vycm9yIiwiZXhlY3V0b3IiLCJUeXBlRXJyb3IiLCJyZXNvbHZlUHJvbWlzZSIsInByb21pc2UiLCJ0aGVuIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJtZXNzYWdlIiwidGhyb3dJZlJlcXVlc3RlZCIsImxpc3RlbmVyIiwic3BsaWNlIiwiYyIsIkVSUl9DQU5DRUxFRCIsImluaGVyaXRzIiwiX19DQU5DRUxfXyIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsInZhbGlkYXRvcnMiLCJkZWZhdWx0cyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiYXNzZXJ0T3B0aW9ucyIsInNpbGVudEpTT05QYXJzaW5nIiwiYm9vbGVhbiIsImZvcmNlZEpTT05QYXJzaW5nIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInJ1bldoZW4iLCJzeW5jaHJvbm91cyIsInVuc2hpZnQiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsImNoYWluIiwibmV3Q29uZmlnIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiZ2V0VXJpIiwiZ2VuZXJhdGVIVFRQTWV0aG9kIiwiaXNGb3JtIiwidG9KU09OIiwiZGVzY3JpcHRpb24iLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGFjayIsImRlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImZyb20iLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJ0b0ZsYXRPYmplY3QiLCJ1c2UiLCJlamVjdCIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsInJlcXVlc3RlZFVSTCIsInRyYW5zZm9ybURhdGEiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidHJhbnNmb3JtUmVxdWVzdCIsImFkYXB0ZXIiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsImNvbmZpZ1ZhbHVlIiwidmFsaWRhdGVTdGF0dXMiLCJFUlJfQkFEX1JFU1BPTlNFIiwiZmxvb3IiLCJmbnMiLCJub3JtYWxpemVIZWFkZXJOYW1lIiwiREVGQVVMVF9DT05URU5UX1RZUEUiLCJzZXRDb250ZW50VHlwZUlmVW5zZXQiLCJwcm9jZXNzIiwiaXNBcnJheUJ1ZmZlciIsImlzQnVmZmVyIiwiaXNTdHJlYW0iLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0FycmF5QnVmZmVyVmlldyIsImJ1ZmZlciIsImlzVVJMU2VhcmNoUGFyYW1zIiwiaXNGaWxlTGlzdCIsImlzT2JqZWN0UGF5bG9hZCIsImlzT2JqZWN0IiwiY29udGVudFR5cGUiLCJfRm9ybURhdGEiLCJlbnYiLCJGb3JtRGF0YSIsInJhd1ZhbHVlIiwicGFyc2VyIiwiZW5jb2RlciIsImlzU3RyaW5nIiwic3RyaW5naWZ5U2FmZWx5Iiwic3RyaWN0SlNPTlBhcnNpbmciLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsInRoaXNBcmciLCJlbmNvZGUiLCJzZXJpYWxpemVkUGFyYW1zIiwicGFydHMiLCJ2IiwiaXNEYXRlIiwidG9JU09TdHJpbmciLCJoYXNobWFya0luZGV4IiwicmVsYXRpdmVVUkwiLCJ3cml0ZSIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJpc051bWJlciIsIkRhdGUiLCJ0b0dNVFN0cmluZyIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsIm5vdyIsInBheWxvYWQiLCJvcmlnaW5VUkwiLCJtc2llIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJyZXNvbHZlVVJMIiwiaHJlZiIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsInJlcXVlc3RVUkwiLCJub3JtYWxpemVkTmFtZSIsImlnbm9yZUR1cGxpY2F0ZU9mIiwic3Vic3RyIiwiYXJyIiwiZm9ybURhdGEiLCJjb252ZXJ0VmFsdWUiLCJpc1R5cGVkQXJyYXkiLCJCbG9iIiwiQnVmZmVyIiwiYnVpbGQiLCJwYXJlbnRLZXkiLCJmdWxsS2V5IiwiZW5kc1dpdGgiLCJ0b0FycmF5IiwiZWwiLCJhcHBlbmQiLCJwb3AiLCJ0aGluZyIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZlcnNpb24iLCJmb3JtYXRNZXNzYWdlIiwib3B0Iiwib3B0cyIsIkVSUl9ERVBSRUNBVEVEIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsImtpbmRPZiIsImtpbmRPZlRlc3QiLCJnZXRQcm90b3R5cGVPZiIsImlzRnVuY3Rpb24iLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwicGlwZSIsInByb2R1Y3QiLCJhc3NpZ25WYWx1ZSIsInN0cmlwQk9NIiwiY29udGVudCIsInN1cGVyQ29uc3RydWN0b3IiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwibWVyZ2VkIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInNlYXJjaFN0cmluZyIsInJlYWN0SXMiLCJSRUFDVF9TVEFUSUNTIiwiY2hpbGRDb250ZXh0VHlwZXMiLCJjb250ZXh0VHlwZSIsImNvbnRleHRUeXBlcyIsImdldERlZmF1bHRQcm9wcyIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsIktOT1dOX1NUQVRJQ1MiLCJjYWxsZXIiLCJjYWxsZWUiLCJhcml0eSIsIk1FTU9fU1RBVElDUyIsImNvbXBhcmUiLCJUWVBFX1NUQVRJQ1MiLCJnZXRTdGF0aWNzIiwiaXNNZW1vIiwiRm9yd2FyZFJlZiIsInJlbmRlciIsIk1lbW8iLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvYmplY3RQcm90b3R5cGUiLCJob2lzdE5vblJlYWN0U3RhdGljcyIsInRhcmdldENvbXBvbmVudCIsInNvdXJjZUNvbXBvbmVudCIsImJsYWNrbGlzdCIsImluaGVyaXRlZENvbXBvbmVudCIsInRhcmdldFN0YXRpY3MiLCJzb3VyY2VTdGF0aWNzIiwiZGVzY3JpcHRvciIsIlN5bWJvbCIsImZvciIsImciLCJxIiwidSIsIiQkdHlwZW9mIiwiQSIsIkFzeW5jTW9kZSIsIkNvbmN1cnJlbnRNb2RlIiwiQ29udGV4dENvbnN1bWVyIiwiQ29udGV4dFByb3ZpZGVyIiwiRWxlbWVudCIsIkxhenkiLCJQb3J0YWwiLCJQcm9maWxlciIsIlN0cmljdE1vZGUiLCJTdXNwZW5zZSIsImlzQXN5bmNNb2RlIiwiaXNDb25jdXJyZW50TW9kZSIsImlzQ29udGV4dENvbnN1bWVyIiwiaXNDb250ZXh0UHJvdmlkZXIiLCJpc0VsZW1lbnQiLCJpc0ZvcndhcmRSZWYiLCJpc0ZyYWdtZW50IiwiaXNMYXp5IiwiaXNQb3J0YWwiLCJpc1Byb2ZpbGVyIiwiaXNTdHJpY3RNb2RlIiwiaXNTdXNwZW5zZSIsImlzVmFsaWRFbGVtZW50VHlwZSIsInR5cGVPZiIsImFhIiwiY2EiLCJkYSIsImVhIiwiZmEiLCJoYSIsImFkZCIsImlhIiwiamEiLCJrYSIsImxhIiwibWEiLCJhY2NlcHRzQm9vbGVhbnMiLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlTmFtZXNwYWNlIiwibXVzdFVzZVByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwic2FuaXRpemVVUkwiLCJyZW1vdmVFbXB0eVN0cmluZyIsInJhIiwic2EiLCJ0YSIsInBhIiwiaXNOYU4iLCJxYSIsIm9hIiwicmVtb3ZlQXR0cmlidXRlIiwic2V0QXR0cmlidXRlTlMiLCJ4bGlua0hyZWYiLCJ1YSIsIl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEIiwidmEiLCJ3YSIsInlhIiwiemEiLCJBYSIsIkJhIiwiQ2EiLCJEYSIsIkVhIiwiRmEiLCJHYSIsIkhhIiwiSWEiLCJKYSIsIml0ZXJhdG9yIiwiS2EiLCJMYSIsIk1hIiwiTmEiLCJPYSIsInByZXBhcmVTdGFja1RyYWNlIiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImluY2x1ZGVzIiwiUGEiLCJRYSIsIl9jb250ZXh0IiwiX3BheWxvYWQiLCJfaW5pdCIsIlJhIiwiU2EiLCJUYSIsIm5vZGVOYW1lIiwiVmEiLCJfdmFsdWVUcmFja2VyIiwiY29uZmlndXJhYmxlIiwic3RvcFRyYWNraW5nIiwiVWEiLCJXYSIsIlhhIiwiYWN0aXZlRWxlbWVudCIsImJvZHkiLCJZYSIsImRlZmF1bHRDaGVja2VkIiwiX3dyYXBwZXJTdGF0ZSIsImluaXRpYWxDaGVja2VkIiwiWmEiLCJpbml0aWFsVmFsdWUiLCJhYiIsImJiIiwiY2IiLCJkYiIsImViIiwiZmIiLCJkZWZhdWx0U2VsZWN0ZWQiLCJnYiIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiaGIiLCJpYiIsImpiIiwidGV4dENvbnRlbnQiLCJrYiIsImxiIiwibWIiLCJuYiIsIm5hbWVzcGFjZVVSSSIsImlubmVySFRNTCIsInZhbHVlT2YiLCJNU0FwcCIsImV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uIiwib2IiLCJsYXN0Q2hpbGQiLCJub2RlVHlwZSIsIm5vZGVWYWx1ZSIsInBiIiwiYXNwZWN0UmF0aW8iLCJncmlkQXJlYSIsImxpbmVDbGFtcCIsInFiIiwicmIiLCJzYiIsInNldFByb3BlcnR5IiwidGIiLCJtZW51aXRlbSIsImFyZWEiLCJiciIsImNvbCIsImVtYmVkIiwiaHIiLCJpbWciLCJrZXlnZW4iLCJsaW5rIiwibWV0YSIsInBhcmFtIiwidHJhY2siLCJ3YnIiLCJ1YiIsInZiIiwiaXMiLCJ3YiIsInhiIiwic3JjRWxlbWVudCIsImNvcnJlc3BvbmRpbmdVc2VFbGVtZW50IiwieWIiLCJ6YiIsIkFiIiwiQmIiLCJDYiIsInN0YXRlTm9kZSIsIkRiIiwiRWIiLCJGYiIsIkdiIiwiSGIiLCJJYiIsIkpiIiwiS2IiLCJMYiIsIk1iIiwiTmIiLCJvbkVycm9yIiwiT2IiLCJQYiIsIlFiIiwiUmIiLCJTYiIsIlRiIiwiVmIiLCJhbHRlcm5hdGUiLCJmbGFncyIsIldiIiwibWVtb2l6ZWRTdGF0ZSIsImRlaHlkcmF0ZWQiLCJYYiIsIlpiIiwiY2hpbGQiLCJzaWJsaW5nIiwiWWIiLCIkYiIsImFjIiwidW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayIsImJjIiwidW5zdGFibGVfY2FuY2VsQ2FsbGJhY2siLCJjYyIsInVuc3RhYmxlX3Nob3VsZFlpZWxkIiwiZGMiLCJ1bnN0YWJsZV9yZXF1ZXN0UGFpbnQiLCJCIiwidW5zdGFibGVfbm93IiwiZWMiLCJ1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCIsImZjIiwidW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHkiLCJnYyIsInVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5IiwiaGMiLCJ1bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSIsImljIiwidW5zdGFibGVfTG93UHJpb3JpdHkiLCJqYyIsInVuc3RhYmxlX0lkbGVQcmlvcml0eSIsImtjIiwibGMiLCJvYyIsImNsejMyIiwicGMiLCJxYyIsImxvZyIsIkxOMiIsInJjIiwic2MiLCJ0YyIsInVjIiwicGVuZGluZ0xhbmVzIiwic3VzcGVuZGVkTGFuZXMiLCJwaW5nZWRMYW5lcyIsImVudGFuZ2xlZExhbmVzIiwiZW50YW5nbGVtZW50cyIsInZjIiwieGMiLCJ5YyIsInpjIiwiQWMiLCJldmVudFRpbWVzIiwiQ2MiLCJDIiwiRGMiLCJFYyIsIkZjIiwiR2MiLCJIYyIsIkljIiwiSmMiLCJLYyIsIkxjIiwiTWMiLCJOYyIsIk9jIiwiTWFwIiwiUGMiLCJRYyIsIlJjIiwiU2MiLCJkZWxldGUiLCJwb2ludGVySWQiLCJUYyIsIm5hdGl2ZUV2ZW50IiwiYmxvY2tlZE9uIiwiZG9tRXZlbnROYW1lIiwiZXZlbnRTeXN0ZW1GbGFncyIsInRhcmdldENvbnRhaW5lcnMiLCJWYyIsIldjIiwicHJpb3JpdHkiLCJpc0RlaHlkcmF0ZWQiLCJjb250YWluZXJJbmZvIiwiWGMiLCJZYyIsImRpc3BhdGNoRXZlbnQiLCJaYyIsIiRjIiwiYWQiLCJiZCIsImNkIiwiUmVhY3RDdXJyZW50QmF0Y2hDb25maWciLCJkZCIsImVkIiwiZmQiLCJnZCIsImhkIiwiVWMiLCJzdG9wUHJvcGFnYXRpb24iLCJqZCIsImtkIiwibGQiLCJuZCIsIm9kIiwia2V5Q29kZSIsImNoYXJDb2RlIiwicGQiLCJxZCIsInJkIiwiX3JlYWN0TmFtZSIsIl90YXJnZXRJbnN0IiwiY3VycmVudFRhcmdldCIsImlzRGVmYXVsdFByZXZlbnRlZCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJyZXR1cm5WYWx1ZSIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwicHJldmVudERlZmF1bHQiLCJjYW5jZWxCdWJibGUiLCJwZXJzaXN0IiwiaXNQZXJzaXN0ZW50Iiwid2QiLCJ4ZCIsInlkIiwic2QiLCJldmVudFBoYXNlIiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJ0aW1lU3RhbXAiLCJpc1RydXN0ZWQiLCJ0ZCIsInVkIiwidmlldyIsImRldGFpbCIsInZkIiwiQWQiLCJzY3JlZW5YIiwic2NyZWVuWSIsImNsaWVudFgiLCJjbGllbnRZIiwicGFnZVgiLCJwYWdlWSIsInNoaWZ0S2V5IiwiZ2V0TW9kaWZpZXJTdGF0ZSIsInpkIiwiYnV0dG9ucyIsInJlbGF0ZWRUYXJnZXQiLCJmcm9tRWxlbWVudCIsInRvRWxlbWVudCIsIm1vdmVtZW50WCIsIm1vdmVtZW50WSIsIkJkIiwiRGQiLCJkYXRhVHJhbnNmZXIiLCJGZCIsIkhkIiwiYW5pbWF0aW9uTmFtZSIsImVsYXBzZWRUaW1lIiwicHNldWRvRWxlbWVudCIsIklkIiwiY2xpcGJvYXJkRGF0YSIsIkpkIiwiTGQiLCJNZCIsIkVzYyIsIlNwYWNlYmFyIiwiTGVmdCIsIlVwIiwiUmlnaHQiLCJEb3duIiwiRGVsIiwiV2luIiwiTWVudSIsIkFwcHMiLCJTY3JvbGwiLCJNb3pQcmludGFibGVLZXkiLCJOZCIsIk9kIiwiQWx0IiwiQ29udHJvbCIsIk1ldGEiLCJTaGlmdCIsIlBkIiwiUWQiLCJyZXBlYXQiLCJsb2NhbGUiLCJ3aGljaCIsIlJkIiwiVGQiLCJwcmVzc3VyZSIsInRhbmdlbnRpYWxQcmVzc3VyZSIsInRpbHRYIiwidGlsdFkiLCJ0d2lzdCIsInBvaW50ZXJUeXBlIiwiaXNQcmltYXJ5IiwiVmQiLCJ0b3VjaGVzIiwidGFyZ2V0VG91Y2hlcyIsImNoYW5nZWRUb3VjaGVzIiwiWGQiLCJZZCIsImRlbHRhWCIsIndoZWVsRGVsdGFYIiwiZGVsdGFZIiwid2hlZWxEZWx0YVkiLCJ3aGVlbERlbHRhIiwiZGVsdGFaIiwiZGVsdGFNb2RlIiwiWmQiLCIkZCIsImFlIiwiYmUiLCJkb2N1bWVudE1vZGUiLCJjZSIsImRlIiwiZWUiLCJmZSIsImdlIiwiaGUiLCJpZSIsImxlIiwicmFuZ2UiLCJtZSIsIm5lIiwib2UiLCJsaXN0ZW5lcnMiLCJwZSIsInFlIiwic2UiLCJ0ZSIsInVlIiwidmUiLCJ3ZSIsInhlIiwieWUiLCJ6ZSIsIm9uaW5wdXQiLCJBZSIsImRldGFjaEV2ZW50IiwiQmUiLCJDZSIsImF0dGFjaEV2ZW50IiwiRGUiLCJFZSIsIkZlIiwiSGUiLCJJZSIsIkplIiwiS2UiLCJMZSIsImNvbnRhaW5zIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJNZSIsIkhUTUxJRnJhbWVFbGVtZW50IiwiY29udGVudFdpbmRvdyIsIk5lIiwiY29udGVudEVkaXRhYmxlIiwiT2UiLCJmb2N1c2VkRWxlbSIsInNlbGVjdGlvblJhbmdlIiwiZG9jdW1lbnRFbGVtZW50Iiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJnZXRTZWxlY3Rpb24iLCJyYW5nZUNvdW50IiwiYW5jaG9yTm9kZSIsImFuY2hvck9mZnNldCIsImZvY3VzTm9kZSIsImZvY3VzT2Zmc2V0IiwiY3JlYXRlUmFuZ2UiLCJzZXRTdGFydCIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwic2V0RW5kIiwibGVmdCIsInNjcm9sbExlZnQiLCJ0b3AiLCJzY3JvbGxUb3AiLCJQZSIsIlFlIiwiUmUiLCJTZSIsIlRlIiwiVWUiLCJWZSIsIldlIiwiYW5pbWF0aW9uZW5kIiwiYW5pbWF0aW9uaXRlcmF0aW9uIiwiYW5pbWF0aW9uc3RhcnQiLCJ0cmFuc2l0aW9uZW5kIiwiWGUiLCJZZSIsIlplIiwiYW5pbWF0aW9uIiwiJGUiLCJhZiIsImJmIiwiY2YiLCJkZiIsImVmIiwiZmYiLCJnZiIsImhmIiwibGYiLCJtZiIsIm5mIiwiVWIiLCJEIiwib2YiLCJwZiIsInFmIiwicmYiLCJyYW5kb20iLCJzZiIsImNhcHR1cmUiLCJwYXNzaXZlIiwiSiIsIkYiLCJ0ZiIsInVmIiwicGFyZW50V2luZG93IiwidmYiLCJ3ZiIsIm5hIiwieGEiLCIkYSIsImJhIiwiamUiLCJjaGFyIiwia2UiLCJ4ZiIsInlmIiwiemYiLCJBZiIsIkJmIiwiQ2YiLCJEZiIsIkVmIiwiX19odG1sIiwiRmYiLCJHZiIsIkhmIiwiSmYiLCJxdWV1ZU1pY3JvdGFzayIsImNhdGNoIiwiSWYiLCJLZiIsIkxmIiwiTWYiLCJwcmV2aW91c1NpYmxpbmciLCJOZiIsIk9mIiwiUGYiLCJRZiIsIlJmIiwiU2YiLCJUZiIsIlVmIiwiRSIsIkciLCJWZiIsIkgiLCJXZiIsIlhmIiwiWWYiLCJfX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0IiwiX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQiLCJaZiIsIiRmIiwiYWciLCJiZyIsImdldENoaWxkQ29udGV4dCIsImNnIiwiX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQiLCJkZyIsImVnIiwiZmciLCJnZyIsImhnIiwiamciLCJrZyIsIm1nIiwibmciLCJvZyIsInBnIiwicWciLCJyZyIsInNnIiwidGciLCJ1ZyIsInZnIiwid2ciLCJ4ZyIsInlnIiwiSSIsInpnIiwiQWciLCJCZyIsImVsZW1lbnRUeXBlIiwiZGVsZXRpb25zIiwiQ2ciLCJwZW5kaW5nUHJvcHMiLCJvdmVyZmxvdyIsInRyZWVDb250ZXh0IiwicmV0cnlMYW5lIiwiRGciLCJFZyIsIkZnIiwiR2ciLCJtZW1vaXplZFByb3BzIiwiSGciLCJJZyIsIkpnIiwiS2ciLCJMZyIsIk1nIiwiTmciLCJPZyIsIlBnIiwiUWciLCJSZyIsIl9jdXJyZW50VmFsdWUiLCJTZyIsImNoaWxkTGFuZXMiLCJUZyIsImRlcGVuZGVuY2llcyIsImZpcnN0Q29udGV4dCIsImxhbmVzIiwiVWciLCJWZyIsIm1lbW9pemVkVmFsdWUiLCJXZyIsIlhnIiwiWWciLCJpbnRlcmxlYXZlZCIsIlpnIiwiJGciLCJhaCIsInVwZGF0ZVF1ZXVlIiwiYmFzZVN0YXRlIiwiZmlyc3RCYXNlVXBkYXRlIiwibGFzdEJhc2VVcGRhdGUiLCJzaGFyZWQiLCJwZW5kaW5nIiwiZWZmZWN0cyIsImJoIiwiY2giLCJldmVudFRpbWUiLCJsYW5lIiwiZGgiLCJLIiwiZWgiLCJmaCIsImdoIiwiaGgiLCJpaCIsImpoIiwicmVmcyIsImtoIiwibmgiLCJpc01vdW50ZWQiLCJfcmVhY3RJbnRlcm5hbHMiLCJlbnF1ZXVlU2V0U3RhdGUiLCJMIiwibGgiLCJtaCIsImVucXVldWVSZXBsYWNlU3RhdGUiLCJlbnF1ZXVlRm9yY2VVcGRhdGUiLCJvaCIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsImlzUHVyZVJlYWN0Q29tcG9uZW50IiwicGgiLCJ1cGRhdGVyIiwicWgiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJyaCIsImdldFNuYXBzaG90QmVmb3JlVXBkYXRlIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudERpZE1vdW50Iiwic2giLCJfb3duZXIiLCJfc3RyaW5nUmVmIiwidGgiLCJ1aCIsInZoIiwid2giLCJ4aCIsInloIiwiaW1wbGVtZW50YXRpb24iLCJ6aCIsIkFoIiwiQmgiLCJDaCIsIkRoIiwiRWgiLCJGaCIsIkdoIiwiSGgiLCJJaCIsIkpoIiwiS2giLCJMaCIsIk0iLCJNaCIsInJldmVhbE9yZGVyIiwiTmgiLCJPaCIsIl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5IiwiUGgiLCJSZWFjdEN1cnJlbnREaXNwYXRjaGVyIiwiUWgiLCJSaCIsIk4iLCJPIiwiUCIsIlNoIiwiVGgiLCJVaCIsIlZoIiwiUSIsIldoIiwiWGgiLCJZaCIsIlpoIiwiJGgiLCJhaSIsImJpIiwiY2kiLCJiYXNlUXVldWUiLCJxdWV1ZSIsImRpIiwiZWkiLCJmaSIsImxhc3RSZW5kZXJlZFJlZHVjZXIiLCJoYXNFYWdlclN0YXRlIiwiZWFnZXJTdGF0ZSIsImxhc3RSZW5kZXJlZFN0YXRlIiwiZGlzcGF0Y2giLCJnaSIsImhpIiwiaWkiLCJqaSIsImtpIiwiZ2V0U25hcHNob3QiLCJsaSIsIm1pIiwiUiIsIm5pIiwibGFzdEVmZmVjdCIsInN0b3JlcyIsIm9pIiwicGkiLCJxaSIsInJpIiwiZGVzdHJveSIsImRlcHMiLCJzaSIsInRpIiwidWkiLCJ2aSIsIndpIiwieGkiLCJ5aSIsInppIiwiQWkiLCJCaSIsIkNpIiwiRGkiLCJFaSIsIkZpIiwiR2kiLCJIaSIsIklpIiwiSmkiLCJyZWFkQ29udGV4dCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZU1lbW8iLCJ1c2VSZWR1Y2VyIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VEZWJ1Z1ZhbHVlIiwidXNlRGVmZXJyZWRWYWx1ZSIsInVzZVRyYW5zaXRpb24iLCJ1c2VNdXRhYmxlU291cmNlIiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJ1bnN0YWJsZV9pc05ld1JlY29uY2lsZXIiLCJpZGVudGlmaWVyUHJlZml4IiwiS2kiLCJkaWdlc3QiLCJMaSIsIk1pIiwiTmkiLCJPaSIsIlBpIiwiUWkiLCJSaSIsImNvbXBvbmVudERpZENhdGNoIiwiU2kiLCJjb21wb25lbnRTdGFjayIsIlRpIiwicGluZ0NhY2hlIiwiVWkiLCJWaSIsIldpIiwiWGkiLCJSZWFjdEN1cnJlbnRPd25lciIsIllpIiwiWmkiLCIkaSIsImFqIiwiYmoiLCJjaiIsImRqIiwiZWoiLCJiYXNlTGFuZXMiLCJjYWNoZVBvb2wiLCJmaiIsImdqIiwiaGoiLCJpaiIsImpqIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUiLCJjb21wb25lbnRXaWxsVXBkYXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwia2oiLCJsaiIsInBlbmRpbmdDb250ZXh0IiwibWoiLCJBaiIsIkNqIiwiRGoiLCJuaiIsIm9qIiwicGoiLCJmYWxsYmFjayIsInFqIiwicmoiLCJ0aiIsImRhdGFzZXQiLCJkZ3N0IiwidWoiLCJ2aiIsIl9yZWFjdFJldHJ5Iiwic2oiLCJzdWJ0cmVlRmxhZ3MiLCJ3aiIsInhqIiwiaXNCYWNrd2FyZHMiLCJyZW5kZXJpbmciLCJyZW5kZXJpbmdTdGFydFRpbWUiLCJsYXN0IiwidGFpbCIsInRhaWxNb2RlIiwieWoiLCJFaiIsIlMiLCJGaiIsIkdqIiwid2FzTXVsdGlwbGUiLCJtdWx0aXBsZSIsInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIsIm9uQ2xpY2siLCJvbmNsaWNrIiwiY3JlYXRlRWxlbWVudE5TIiwiYXV0b0ZvY3VzIiwiSGoiLCJJaiIsIkpqIiwiS2oiLCJVIiwiTGoiLCJXZWFrU2V0IiwiViIsIk1qIiwiVyIsIk5qIiwiT2oiLCJRaiIsIlJqIiwiU2oiLCJUaiIsIlVqIiwiVmoiLCJXaiIsIl9yZWFjdFJvb3RDb250YWluZXIiLCJYaiIsIlgiLCJZaiIsIlpqIiwiYWsiLCJvbkNvbW1pdEZpYmVyVW5tb3VudCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiYmsiLCJjayIsImRrIiwiZWsiLCJmayIsImlzSGlkZGVuIiwiZ2siLCJoayIsImlrIiwiamsiLCJrayIsImxrIiwiX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUiLCJzcmMiLCJXayIsIm1rIiwiY2VpbCIsIm5rIiwib2siLCJwayIsIlkiLCJaIiwicWsiLCJyayIsInNrIiwidGsiLCJ1ayIsIkluZmluaXR5IiwidmsiLCJ3ayIsInhrIiwieWsiLCJ6ayIsIkFrIiwiQmsiLCJDayIsIkRrIiwiRWsiLCJjYWxsYmFja05vZGUiLCJleHBpcmF0aW9uVGltZXMiLCJleHBpcmVkTGFuZXMiLCJ3YyIsImNhbGxiYWNrUHJpb3JpdHkiLCJpZyIsIkZrIiwiR2siLCJIayIsIklrIiwiSmsiLCJLayIsIkxrIiwiTWsiLCJOayIsIk9rIiwiUGsiLCJmaW5pc2hlZFdvcmsiLCJmaW5pc2hlZExhbmVzIiwiUWsiLCJ0aW1lb3V0SGFuZGxlIiwiUmsiLCJTayIsIlRrIiwiVWsiLCJWayIsIm11dGFibGVSZWFkTGFuZXMiLCJCYyIsIlBqIiwib25Db21taXRGaWJlclJvb3QiLCJtYyIsIm9uUmVjb3ZlcmFibGVFcnJvciIsIlhrIiwib25Qb3N0Q29tbWl0RmliZXJSb290IiwiWWsiLCJaayIsImFsIiwiaXNSZWFjdENvbXBvbmVudCIsInBlbmRpbmdDaGlsZHJlbiIsImJsIiwibXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSIsImNsIiwicGVuZGluZ1N1c3BlbnNlQm91bmRhcmllcyIsImRsIiwiZmwiLCJnbCIsImhsIiwiaWwiLCJqbCIsInpqIiwiJGsiLCJsbCIsInJlcG9ydEVycm9yIiwibWwiLCJfaW50ZXJuYWxSb290IiwibmwiLCJvbCIsInBsIiwicWwiLCJzbCIsInJsIiwidW5tb3VudCIsInVuc3RhYmxlX3NjaGVkdWxlSHlkcmF0aW9uIiwiZm9ybSIsInRsIiwidXNpbmdDbGllbnRFbnRyeVBvaW50IiwiRXZlbnRzIiwidWwiLCJmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSIsImJ1bmRsZVR5cGUiLCJyZW5kZXJlclBhY2thZ2VOYW1lIiwidmwiLCJyZW5kZXJlckNvbmZpZyIsIm92ZXJyaWRlSG9va1N0YXRlIiwib3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoIiwib3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoIiwib3ZlcnJpZGVQcm9wcyIsIm92ZXJyaWRlUHJvcHNEZWxldGVQYXRoIiwib3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGgiLCJzZXRFcnJvckhhbmRsZXIiLCJzZXRTdXNwZW5zZUhhbmRsZXIiLCJzY2hlZHVsZVVwZGF0ZSIsImN1cnJlbnREaXNwYXRjaGVyUmVmIiwiZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIiLCJmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2giLCJzY2hlZHVsZVJlZnJlc2giLCJzY2hlZHVsZVJvb3QiLCJzZXRSZWZyZXNoSGFuZGxlciIsImdldEN1cnJlbnRGaWJlciIsInJlY29uY2lsZXJWZXJzaW9uIiwiX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwid2wiLCJpc0Rpc2FibGVkIiwic3VwcG9ydHNGaWJlciIsImluamVjdCIsImNyZWF0ZVBvcnRhbCIsImNyZWF0ZVJvb3QiLCJ1bnN0YWJsZV9zdHJpY3RNb2RlIiwiZmluZERPTU5vZGUiLCJmbHVzaFN5bmMiLCJoeWRyYXRlUm9vdCIsImh5ZHJhdGVkU291cmNlcyIsIl9nZXRWZXJzaW9uIiwiX3NvdXJjZSIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsInVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIiwiY2hlY2tEQ0UiLCJfX3NlbGYiLCJfX3NvdXJjZSIsImpzeHMiLCJzZXRTdGF0ZSIsImZvcmNlVXBkYXRlIiwiZXNjYXBlIiwiX3N0YXR1cyIsIl9yZXN1bHQiLCJDaGlsZHJlbiIsIlB1cmVDb21wb25lbnQiLCJjbG9uZUVsZW1lbnQiLCJfY3VycmVudFZhbHVlMiIsIl90aHJlYWRDb3VudCIsIkNvbnN1bWVyIiwiX2RlZmF1bHRWYWx1ZSIsIl9nbG9iYWxOYW1lIiwiY3JlYXRlRmFjdG9yeSIsImNyZWF0ZVJlZiIsImlzVmFsaWRFbGVtZW50IiwibGF6eSIsIm1lbW8iLCJzdGFydFRyYW5zaXRpb24iLCJ1bnN0YWJsZV9hY3QiLCJzb3J0SW5kZXgiLCJwZXJmb3JtYW5jZSIsInNldEltbWVkaWF0ZSIsInN0YXJ0VGltZSIsImV4cGlyYXRpb25UaW1lIiwicHJpb3JpdHlMZXZlbCIsInNjaGVkdWxpbmciLCJpc0lucHV0UGVuZGluZyIsIk1lc3NhZ2VDaGFubmVsIiwicG9ydDIiLCJwb3J0MSIsIm9ubWVzc2FnZSIsInBvc3RNZXNzYWdlIiwidW5zdGFibGVfUHJvZmlsaW5nIiwidW5zdGFibGVfY29udGludWVFeGVjdXRpb24iLCJ1bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSIsInVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlIiwidW5zdGFibGVfbmV4dCIsInVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uIiwidW5zdGFibGVfcnVuV2l0aFByaW9yaXR5IiwidW5zdGFibGVfd3JhcENhbGxiYWNrIiwiaW5zdCIsInVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yIiwiaGFzVmFsdWUiLCJobGpzIiwicmVnaXN0ZXJMYW5ndWFnZSIsIkhpZ2hsaWdodEpTIiwiZGVlcEZyZWV6ZUVzNiIsImRlZXBGcmVlemUiLCJmcmVlemUiLCJpc0Zyb3plbiIsIlJlc3BvbnNlIiwiaXNNYXRjaElnbm9yZWQiLCJpZ25vcmVNYXRjaCIsImVzY2FwZUhUTUwiLCJpbmhlcml0JDEiLCJvcmlnaW5hbCIsImVtaXRzV3JhcHBpbmdUYWdzIiwic2NvcGUiLCJzdWJsYW5ndWFnZSIsImxhbmd1YWdlIiwiSFRNTFJlbmRlcmVyIiwicGFyc2VUcmVlIiwiY2xhc3NQcmVmaXgiLCJ3YWxrIiwiYWRkVGV4dCIsIm9wZW5Ob2RlIiwicGllY2VzIiwic2NvcGVUb0NTU0NsYXNzIiwic3BhbiIsImNsb3NlTm9kZSIsIm5ld05vZGUiLCJUb2tlblRyZWUiLCJyb290Tm9kZSIsImNsb3NlQWxsTm9kZXMiLCJidWlsZGVyIiwiX3dhbGsiLCJzdGF0aWMiLCJfY29sbGFwc2UiLCJUb2tlblRyZWVFbWl0dGVyIiwic3VwZXIiLCJhZGRLZXl3b3JkIiwiYWRkU3VibGFuZ3VhZ2UiLCJlbWl0dGVyIiwidG9IVE1MIiwiZmluYWxpemUiLCJsb29rYWhlYWQiLCJhbnlOdW1iZXJPZlRpbWVzIiwib3B0aW9uYWwiLCJlaXRoZXIiLCJzdHJpcE9wdGlvbnNGcm9tQXJncyIsImNvdW50TWF0Y2hHcm91cHMiLCJCQUNLUkVGX1JFIiwiX3Jld3JpdGVCYWNrcmVmZXJlbmNlcyIsInJlZ2V4cHMiLCJqb2luV2l0aCIsIm51bUNhcHR1cmVzIiwicmVnZXgiLCJvdXQiLCJJREVOVF9SRSIsIlVOREVSU0NPUkVfSURFTlRfUkUiLCJOVU1CRVJfUkUiLCJDX05VTUJFUl9SRSIsIkJJTkFSWV9OVU1CRVJfUkUiLCJCQUNLU0xBU0hfRVNDQVBFIiwicmVsZXZhbmNlIiwiQVBPU19TVFJJTkdfTU9ERSIsImlsbGVnYWwiLCJRVU9URV9TVFJJTkdfTU9ERSIsIm1vZGVPcHRpb25zIiwiZXhjbHVkZUJlZ2luIiwiRU5HTElTSF9XT1JEIiwiQ19MSU5FX0NPTU1FTlRfTU9ERSIsIkNfQkxPQ0tfQ09NTUVOVF9NT0RFIiwiSEFTSF9DT01NRU5UX01PREUiLCJOVU1CRVJfTU9ERSIsIkNfTlVNQkVSX01PREUiLCJCSU5BUllfTlVNQkVSX01PREUiLCJSRUdFWFBfTU9ERSIsIlRJVExFX01PREUiLCJVTkRFUlNDT1JFX1RJVExFX01PREUiLCJNT0RFUyIsIl9fcHJvdG9fXyIsIk1BVENIX05PVEhJTkdfUkUiLCJSRV9TVEFSVEVSU19SRSIsIlNIRUJBTkciLCJiZWdpblNoZWJhbmciLCJiaW5hcnkiLCJyZXNwIiwiUEhSQVNBTF9XT1JEU19NT0RFIiwiTUVUSE9EX0dVQVJEIiwiRU5EX1NBTUVfQVNfQkVHSU4iLCJfYmVnaW5NYXRjaCIsInNraXBJZkhhc1ByZWNlZGluZ0RvdCIsInNjb3BlQ2xhc3NOYW1lIiwiX3BhcmVudCIsImJlZ2luS2V5d29yZHMiLCJfX2JlZm9yZUJlZ2luIiwia2V5d29yZHMiLCJjb21waWxlSWxsZWdhbCIsImNvbXBpbGVNYXRjaCIsImNvbXBpbGVSZWxldmFuY2UiLCJiZWZvcmVNYXRjaEV4dCIsImJlZm9yZU1hdGNoIiwic3RhcnRzIiwib3JpZ2luYWxNb2RlIiwiZW5kc1BhcmVudCIsIkNPTU1PTl9LRVlXT1JEUyIsImNvbXBpbGVLZXl3b3JkcyIsInJhd0tleXdvcmRzIiwiY2FzZUluc2Vuc2l0aXZlIiwic2NvcGVOYW1lIiwiY29tcGlsZWRLZXl3b3JkcyIsImNvbXBpbGVMaXN0Iiwia2V5d29yZExpc3QiLCJrZXl3b3JkIiwicGFpciIsInNjb3JlRm9yS2V5d29yZCIsInByb3ZpZGVkU2NvcmUiLCJjb21tb25LZXl3b3JkIiwic2VlbkRlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZWQiLCJNdWx0aUNsYXNzRXJyb3IiLCJyZW1hcFNjb3BlTmFtZXMiLCJyZWdleGVzIiwic2NvcGVOYW1lcyIsImVtaXQiLCJfZW1pdCIsIl9tdWx0aSIsIk11bHRpQ2xhc3MiLCJiZWdpblNjb3BlIiwic2NvcGVTdWdhciIsIl93cmFwIiwiZW5kU2NvcGUiLCJza2lwIiwicmV0dXJuQmVnaW4iLCJiZWdpbk11bHRpQ2xhc3MiLCJleGNsdWRlRW5kIiwicmV0dXJuRW5kIiwiZW5kTXVsdGlDbGFzcyIsImNvbXBpbGVMYW5ndWFnZSIsImxhbmdSZSIsImdsb2JhbCIsImNhc2VfaW5zZW5zaXRpdmUiLCJ1bmljb2RlUmVnZXgiLCJNdWx0aVJlZ2V4IiwibWF0Y2hJbmRleGVzIiwibWF0Y2hBdCIsImFkZFJ1bGUiLCJ0ZXJtaW5hdG9ycyIsIm1hdGNoZXJSZSIsImZpbmRJbmRleCIsIm1hdGNoRGF0YSIsIlJlc3VtYWJsZU11bHRpUmVnZXgiLCJtdWx0aVJlZ2V4ZXMiLCJyZWdleEluZGV4IiwiZ2V0TWF0Y2hlciIsIm1hdGNoZXIiLCJyZXN1bWluZ1NjYW5BdFNhbWVQb3NpdGlvbiIsImNvbnNpZGVyQWxsIiwibTIiLCJjb21waWxlckV4dGVuc2lvbnMiLCJjbGFzc05hbWVBbGlhc2VzIiwiY29tcGlsZU1vZGUiLCJjbW9kZSIsImlzQ29tcGlsZWQiLCJleHQiLCJrZXl3b3JkUGF0dGVybiIsIiRwYXR0ZXJuIiwia2V5d29yZFBhdHRlcm5SZSIsImJlZ2luUmUiLCJlbmRzV2l0aFBhcmVudCIsImVuZFJlIiwidGVybWluYXRvckVuZCIsImlsbGVnYWxSZSIsImNhY2hlZFZhcmlhbnRzIiwiZGVwZW5kZW5jeU9uUGFyZW50IiwiZXhwYW5kT3JDbG9uZU1vZGUiLCJtbSIsInRlcm0iLCJidWlsZE1vZGVSZWdleCIsIkhUTUxJbmplY3Rpb25FcnJvciIsImh0bWwiLCJOT19NQVRDSCIsImhpZ2hsaWdodCIsImxhbmd1YWdlcyIsInBsdWdpbnMiLCJTQUZFX01PREUiLCJMQU5HVUFHRV9OT1RfRk9VTkQiLCJQTEFJTlRFWFRfTEFOR1VBR0UiLCJkaXNhYmxlQXV0b2RldGVjdCIsImlnbm9yZVVuZXNjYXBlZEhUTUwiLCJ0aHJvd1VuZXNjYXBlZEhUTUwiLCJub0hpZ2hsaWdodFJlIiwibGFuZ3VhZ2VEZXRlY3RSZSIsImNzc1NlbGVjdG9yIiwiX19lbWl0dGVyIiwic2hvdWxkTm90SGlnaGxpZ2h0IiwibGFuZ3VhZ2VOYW1lIiwiY29kZU9yTGFuZ3VhZ2VOYW1lIiwib3B0aW9uc09yQ29kZSIsImlnbm9yZUlsbGVnYWxzIiwiZmlyZSIsIl9oaWdobGlnaHQiLCJjb2RlVG9IaWdobGlnaHQiLCJjb250aW51YXRpb24iLCJrZXl3b3JkSGl0cyIsInByb2Nlc3NLZXl3b3JkcyIsIm1vZGVCdWZmZXIiLCJidWYiLCJ3b3JkIiwibWF0Y2hUZXh0Iiwia2luZCIsImtleXdvcmRSZWxldmFuY2UiLCJzdGFydHNXaXRoIiwiY3NzQ2xhc3MiLCJwcm9jZXNzQnVmZmVyIiwic3ViTGFuZ3VhZ2UiLCJjb250aW51YXRpb25zIiwiaGlnaGxpZ2h0QXV0byIsIl9lbWl0dGVyIiwicHJvY2Vzc1N1Ykxhbmd1YWdlIiwiZW1pdE11bHRpQ2xhc3MiLCJrbGFzcyIsInN0YXJ0TmV3TW9kZSIsImVuZE9mTW9kZSIsIm1hdGNoUGx1c1JlbWFpbmRlciIsIm1hdGNoZWQiLCJsZXhlbWUiLCJkb0lnbm9yZSIsInJlc3VtZVNjYW5BdFNhbWVQb3NpdGlvbiIsImRvRW5kTWF0Y2giLCJlbmRNb2RlIiwib3JpZ2luIiwibGFzdE1hdGNoIiwicHJvY2Vzc0xleGVtZSIsInRleHRCZWZvcmVNYXRjaCIsImJhZFJ1bGUiLCJuZXdNb2RlIiwiYmVmb3JlQ2FsbGJhY2tzIiwiZG9CZWdpbk1hdGNoIiwicHJvY2Vzc2VkIiwiaXRlcmF0aW9ucyIsImdldExhbmd1YWdlIiwibGlzdCIsInByb2Nlc3NDb250aW51YXRpb25zIiwicHJvY2Vzc2VkQ291bnQiLCJfdG9wIiwiX2lsbGVnYWxCeSIsInJlc3VsdFNvRmFyIiwiZXJyb3JSYWlzZWQiLCJsYW5ndWFnZVN1YnNldCIsInBsYWludGV4dCIsImp1c3RUZXh0SGlnaGxpZ2h0UmVzdWx0IiwicmVzdWx0cyIsImF1dG9EZXRlY3Rpb24iLCJzb3J0ZWQiLCJzdXBlcnNldE9mIiwiYmVzdCIsInNlY29uZEJlc3QiLCJoaWdobGlnaHRFbGVtZW50IiwiYmxvY2siLCJmaW5kIiwiX2NsYXNzIiwiYmxvY2tMYW5ndWFnZSIsImN1cnJlbnRMYW5nIiwicmVzdWx0TGFuZyIsImNsYXNzTGlzdCIsInVwZGF0ZUNsYXNzTmFtZSIsIndhbnRzSGlnaGxpZ2h0IiwiaGlnaGxpZ2h0QWxsIiwicmVnaXN0ZXJBbGlhc2VzIiwiYWxpYXNMaXN0IiwiYWxpYXMiLCJsYW5nIiwicGx1Z2luIiwiaGlnaGxpZ2h0QmxvY2siLCJ1c2VyT3B0aW9ucyIsImluaXRIaWdobGlnaHRpbmciLCJpbml0SGlnaGxpZ2h0aW5nT25Mb2FkIiwibGFuZ3VhZ2VEZWZpbml0aW9uIiwiZXJyb3IkMSIsInJhd0RlZmluaXRpb24iLCJ1bnJlZ2lzdGVyTGFuZ3VhZ2UiLCJsaXN0TGFuZ3VhZ2VzIiwiYWRkUGx1Z2luIiwidXBncmFkZVBsdWdpbkFQSSIsImRlYnVnTW9kZSIsInNhZmVNb2RlIiwidmVyc2lvblN0cmluZyIsIkhMSlMiLCJWQVIiLCJCUkFDRURfVkFSIiwiU1VCU1QiLCJIRVJFX0RPQyIsIlFVT1RFX1NUUklORyIsIkFSSVRITUVUSUMiLCJLTk9XTl9TSEVCQU5HIiwiRlVOQ1RJT04iLCJsaXRlcmFsIiwiYnVpbHRfaW4iLCJOQU1FU1BBQ0VfUkUiLCJGVU5DVElPTl9UWVBFX1JFIiwiVFlQRVMiLCJTVFJJTkdTIiwiTlVNQkVSUyIsIlBSRVBST0NFU1NPUiIsIkZVTkNUSU9OX1RJVExFIiwiS0VZV09SRFMiLCJFWFBSRVNTSU9OX0NPTlRBSU5TIiwiRVhQUkVTU0lPTl9DT05URVhUIiwiRlVOQ1RJT05fREVDTEFSQVRJT04iLCJwcmVwcm9jZXNzb3IiLCJDUFBfUFJJTUlUSVZFX1RZUEVTIiwiQ1BQX0tFWVdPUkRTIiwiX3R5cGVfaGludHMiLCJGVU5DVElPTl9ESVNQQVRDSCIsIl9oaW50IiwiVkVSQkFUSU1fU1RSSU5HIiwiVkVSQkFUSU1fU1RSSU5HX05PX0xGIiwiU1VCU1RfTk9fTEYiLCJJTlRFUlBPTEFURURfU1RSSU5HIiwiSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklORyIsIklOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkdfTk9fTEYiLCJTVFJJTkciLCJHRU5FUklDX01PRElGSUVSIiwiVFlQRV9JREVOVF9SRSIsIkFUX0lERU5USUZJRVIiLCJUQUdTIiwiTUVESUFfRkVBVFVSRVMiLCJQU0VVRE9fQ0xBU1NFUyIsIlBTRVVET19FTEVNRU5UUyIsIkFUVFJJQlVURVMiLCJyZXZlcnNlIiwiSU1QT1JUQU5UIiwiQkxPQ0tfQ09NTUVOVCIsIkhFWENPTE9SIiwiQVRUUklCVVRFX1NFTEVDVE9SX01PREUiLCJDU1NfTlVNQkVSX01PREUiLCJDU1NfVkFSSUFCTEUiLCJrZXlmcmFtZVBvc2l0aW9uIiwiYXR0cmlidXRlIiwiQ09NTUVOVFMiLCJWQVJJQUJMRVMiLCJMSVRFUkFMUyIsIkFSUkFZIiwiQU5ZX0tFWSIsImZyYWMiLCJoZXhEaWdpdHMiLCJOVU1FUklDIiwicmVjdXJSZWdleCIsInN1YnN0aXR1dGlvbiIsImRlcHRoIiwiXyIsIkpBVkFfSURFTlRfUkUiLCJHRU5FUklDX0lERU5UX1JFIiwiQU5OT1RBVElPTiIsIlBBUkFNUyIsIkVSUk9SX1RZUEVTIiwiQlVJTFRfSU5fR0xPQkFMUyIsIkJVSUxUX0lOX1ZBUklBQkxFUyIsIkJVSUxUX0lOUyIsIklERU5UX1JFJDEiLCJYTUxfVEFHIiwiaXNUcnVseU9wZW5pbmdUYWciLCJhZnRlck1hdGNoSW5kZXgiLCJuZXh0Q2hhciIsImFmdGVyIiwiaGFzQ2xvc2luZ1RhZyIsIktFWVdPUkRTJDEiLCJkZWNpbWFsSW50ZWdlciIsIk5VTUJFUiIsIkhUTUxfVEVNUExBVEUiLCJDU1NfVEVNUExBVEUiLCJURU1QTEFURV9TVFJJTkciLCJTVUJTVF9JTlRFUk5BTFMiLCJTVUJTVF9BTkRfQ09NTUVOVFMiLCJQQVJBTVNfQ09OVEFJTlMiLCJDTEFTU19PUl9FWFRFTkRTIiwiQ0xBU1NfUkVGRVJFTkNFIiwiRlVOQ1RJT05fREVGSU5JVElPTiIsIkZVTkNUSU9OX0NBTEwiLCJQUk9QRVJUWV9BQ0NFU1MiLCJHRVRURVJfT1JfU0VUVEVSIiwiRlVOQ19MRUFEX0lOX1JFIiwiRlVOQ1RJT05fVkFSSUFCTEUiLCJMSVRFUkFMU19NT0RFIiwiTEFCRUwiLCJWQVJJQUJMRSIsIkFOTk9UQVRJT05fVVNFX1NJVEUiLCJLT1RMSU5fTlVNQkVSX01PREUiLCJLT1RMSU5fTkVTVEVEX0NPTU1FTlQiLCJLT1RMSU5fUEFSRU5fVFlQRSIsIktPVExJTl9QQVJFTl9UWVBFMiIsIlBTRVVET19TRUxFQ1RPUlMiLCJQU0VVRE9fU0VMRUNUT1JTJDEiLCJJTlRFUlBfSURFTlRfUkUiLCJSVUxFUyIsIlZBTFVFX01PREVTIiwiU1RSSU5HX01PREUiLCJJREVOVF9NT0RFIiwiQVRfS0VZV09SRFMiLCJQQVJFTlNfTU9ERSIsIlZBTFVFX1dJVEhfUlVMRVNFVFMiLCJNSVhJTl9HVUFSRF9NT0RFIiwiUlVMRV9NT0RFIiwiQVRfUlVMRV9NT0RFIiwiVkFSX1JVTEVfTU9ERSIsIlNFTEVDVE9SX01PREUiLCJQU0VVRE9fU0VMRUNUT1JfTU9ERSIsIk9QRU5JTkdfTE9OR19CUkFDS0VUIiwiQ0xPU0lOR19MT05HX0JSQUNLRVQiLCJMT05HX0JSQUNLRVRTIiwiRlVOQyIsIkFTU0lHTk1FTlQiLCJUQVJHRVQiLCJJTkxJTkVfSFRNTCIsIkxJTksiLCJCT0xEIiwiSVRBTElDIiwiQk9MRF9XSVRIT1VUX0lUQUxJQyIsIklUQUxJQ19XSVRIT1VUX0JPTEQiLCJDT05UQUlOQUJMRSIsIklERU5USUZJRVJfUkUiLCJDTEFTU19LRVlXT1JEUyIsIlJFR0VYX01PRElGSUVSUyIsIlBFUkxfS0VZV09SRFMiLCJNRVRIT0QiLCJTVFJJTkdfQ09OVEFJTlMiLCJSRUdFWF9ERUxJTVMiLCJQQUlSRURfRE9VQkxFX1JFIiwiY2xvc2UiLCJtaWRkbGUiLCJQQUlSRURfUkUiLCJQRVJMX0RFRkFVTFRfQ09OVEFJTlMiLCJOT1RfUEVSTF9FVEMiLCJQQVNDQUxfQ0FTRV9DTEFTU19OQU1FX1JFIiwiU0lOR0xFX1FVT1RFRCIsIldISVRFU1BBQ0UiLCJLV1MiLCJpdGVtcyIsImR1YWxDYXNlIiwibm9ybWFsaXplS2V5d29yZHMiLCJDT05TVFJVQ1RPUl9DQUxMIiwiQ09OU1RBTlRfUkVGRVJFTkNFIiwiTEVGVF9BTkRfUklHSFRfU0lERV9PRl9ET1VCTEVfQ09MT04iLCJOQU1FRF9BUkdVTUVOVCIsIlBBUkFNU19NT0RFIiwiRlVOQ1RJT05fSU5WT0tFIiwiQVRUUklCVVRFX0NPTlRBSU5TIiwiUkVTRVJWRURfV09SRFMiLCJQUk9NUFQiLCJMSVRFUkFMX0JSQUNLRVQiLCJkaWdpdHBhcnQiLCJwb2ludGZsb2F0IiwiQ09NTUVOVF9UWVBFIiwiTlVNQkVSX1RZUEVTX1JFIiwiT1BFUkFUT1JTX1JFIiwiUFVOQ1RVQVRJT05fUkUiLCJSVUJZX01FVEhPRF9SRSIsIkNMQVNTX05BTUVfUkUiLCJDTEFTU19OQU1FX1dJVEhfTkFNRVNQQUNFX1JFIiwiUlVCWV9LRVlXT1JEUyIsIllBUkRPQ1RBRyIsIklSQl9PQkpFQ1QiLCJDT01NRU5UX01PREVTIiwiZGlnaXRzIiwiUlVCWV9ERUZBVUxUX0NPTlRBSU5TIiwiSVJCX0RFRkFVTFQiLCJOVU1CRVJfU1VGRklYIiwiQlVJTFRJTlMiLCJQU0VVRE9fRUxFTUVOVFMkMSIsIlBTRVVET19DTEFTU0VTJDEiLCJDT01NRU5UX01PREUiLCJSRVNFUlZFRF9GVU5DVElPTlMiLCJDT01CT1MiLCJGVU5DVElPTlMiLCJleGNlcHRpb25zIiwid2hlbiIsInF1YWxpZnlGbiIsInJlZHVjZVJlbGV2YW5jeSIsImtleXdvcmRXcmFwcGVyIiwiZG90S2V5d29yZHMiLCJvcHRpb25hbERvdEtleXdvcmRzIiwia2V5d29yZFR5cGVzIiwibGl0ZXJhbHMiLCJwcmVjZWRlbmNlZ3JvdXBLZXl3b3JkcyIsIm51bWJlclNpZ25LZXl3b3JkcyIsImJ1aWx0SW5zIiwib3BlcmF0b3JIZWFkIiwib3BlcmF0b3JDaGFyYWN0ZXIiLCJvcGVyYXRvciIsImlkZW50aWZpZXJIZWFkIiwiaWRlbnRpZmllckNoYXJhY3RlciIsInR5cGVJZGVudGlmaWVyIiwia2V5d29yZEF0dHJpYnV0ZXMiLCJhdmFpbGFiaWxpdHlLZXl3b3JkcyIsIkRPVF9LRVlXT1JEIiwiS0VZV09SRF9HVUFSRCIsIlBMQUlOX0tFWVdPUkRTIiwia3ciLCJLRVlXT1JEIiwiS0VZV09SRF9NT0RFUyIsIk9QRVJBVE9SX0dVQVJEIiwiT1BFUkFUT1JTIiwiRVNDQVBFRF9DSEFSQUNURVIiLCJyYXdEZWxpbWl0ZXIiLCJFU0NBUEVEX05FV0xJTkUiLCJJTlRFUlBPTEFUSU9OIiwiTVVMVElMSU5FX1NUUklORyIsIlNJTkdMRV9MSU5FX1NUUklORyIsIlFVT1RFRF9JREVOVElGSUVSIiwiSURFTlRJRklFUlMiLCJUWVBFIiwiR0VORVJJQ19BUkdVTUVOVFMiLCJUVVBMRSIsIkdFTkVSSUNfUEFSQU1FVEVSUyIsIkZVTkNUSU9OX1BBUkFNRVRFUlMiLCJJTklUX1NVQlNDUklQVCIsIk9QRVJBVE9SX0RFQ0xBUkFUSU9OIiwiUFJFQ0VERU5DRUdST1VQIiwic3VibW9kZXMiLCJqYXZhc2NyaXB0IiwidHNMYW5ndWFnZSIsIk5BTUVTUEFDRSIsIklOVEVSRkFDRSIsIkRFQ09SQVRPUiIsInN3YXBNb2RlIiwiaW5keCIsIk1NX0REX1lZWVkiLCJZWVlZX01NX0REIiwiVElNRV8xMkgiLCJUSU1FXzI0SCIsIkRBVEUiLCJET0NfQ09NTUVOVCIsIlRBR19OQU1FX1JFIiwiWE1MX0VOVElUSUVTIiwiWE1MX01FVEFfS0VZV09SRFMiLCJYTUxfTUVUQV9QQVJfS0VZV09SRFMiLCJBUE9TX01FVEFfU1RSSU5HX01PREUiLCJRVU9URV9NRVRBX1NUUklOR19NT0RFIiwiVEFHX0lOVEVSTkFMUyIsIlVSSV9DSEFSQUNURVJTIiwiQ09OVEFJTkVSX1NUUklORyIsIlZBTFVFX0NPTlRBSU5FUiIsIk9CSkVDVCIsIl9leHRlbmRzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwibnMiLCJkZWYiLCJvIiwidG9TdHJpbmdUYWciLCJiYXRjaCIsImdldEJhdGNoIiwicmVmRXF1YWxpdHkiLCJjcmVhdGVTZWxlY3Rvckhvb2siLCJ1c2VSZWR1eENvbnRleHQiLCJlcXVhbGl0eUZuIiwic3RvcmUiLCJzdWJzY3JpcHRpb24iLCJnZXRTZXJ2ZXJTdGF0ZSIsInNlbGVjdGVkU3RhdGUiLCJhZGROZXN0ZWRTdWIiLCJnZXRTdGF0ZSIsInVzZVNlbGVjdG9yIiwibnVsbExpc3RlbmVycyIsIm5vdGlmeSIsInNlcnZlclN0YXRlIiwiY29udGV4dFZhbHVlIiwicGFyZW50U3ViIiwiaGFuZGxlQ2hhbmdlV3JhcHBlciIsIm9uU3RhdGVDaGFuZ2UiLCJ0cnlTdWJzY3JpYmUiLCJmaXJzdCIsImlzU3Vic2NyaWJlZCIsImNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbiIsIm5vdGlmeU5lc3RlZFN1YnMiLCJCb29sZWFuIiwidHJ5VW5zdWJzY3JpYmUiLCJnZXRMaXN0ZW5lcnMiLCJwcmV2aW91c1N0YXRlIiwiQ29udGV4dCIsImNyZWF0ZVN0b3JlSG9vayIsImNyZWF0ZURpc3BhdGNoSG9vayIsInVzZVN0b3JlIiwidXNlRGlzcGF0Y2giLCJuZXdCYXRjaCIsIkFjdGlvbiIsImluaXRpYWxpemVVc2VTZWxlY3RvciIsImluaXRpYWxpemVDb25uZWN0IiwiUG9wU3RhdGVFdmVudFR5cGUiLCJnZXRIaXN0b3J5U3RhdGUiLCJ1c3IiLCJjcmVhdGVMb2NhdGlvbiIsInRvIiwicGFyc2VQYXRoIiwicGFyc2VkUGF0aCIsImhhc2hJbmRleCIsInNlYXJjaEluZGV4IiwiUmVzdWx0VHlwZSIsIm1hdGNoUm91dGVzIiwicm91dGVzIiwibG9jYXRpb25BcmciLCJiYXNlbmFtZSIsInN0cmlwQmFzZW5hbWUiLCJicmFuY2hlcyIsImZsYXR0ZW5Sb3V0ZXMiLCJzY29yZSIsInNpYmxpbmdzIiwiY29tcGFyZUluZGV4ZXMiLCJyb3V0ZXNNZXRhIiwiY2hpbGRyZW5JbmRleCIsInJhbmtSb3V0ZUJyYW5jaGVzIiwibWF0Y2hSb3V0ZUJyYW5jaCIsInBhcmVudHNNZXRhIiwicGFyZW50UGF0aCIsInJvdXRlIiwicmVsYXRpdmVQYXRoIiwiY2FzZVNlbnNpdGl2ZSIsImpvaW5QYXRocyIsImNvbXB1dGVTY29yZSIsInBhcmFtUmUiLCJpc1NwbGF0Iiwic2VnbWVudHMiLCJpbml0aWFsU2NvcmUiLCJzb21lIiwic2VnbWVudCIsImJyYW5jaCIsIm1hdGNoZWRQYXJhbXMiLCJtYXRjaGVkUGF0aG5hbWUiLCJyZW1haW5pbmdQYXRobmFtZSIsInBhdGhuYW1lQmFzZSIsIm5vcm1hbGl6ZVBhdGhuYW1lIiwicGFyYW1OYW1lcyIsInJlZ2V4cFNvdXJjZSIsInBhcmFtTmFtZSIsImNvbXBpbGVQYXRoIiwiY2FwdHVyZUdyb3VwcyIsInNwbGF0VmFsdWUiLCJzYWZlbHlEZWNvZGVVUklDb21wb25lbnQiLCJzdGFydEluZGV4IiwiY29uZCIsInJlc29sdmVUbyIsInRvQXJnIiwicm91dGVQYXRobmFtZXMiLCJsb2NhdGlvblBhdGhuYW1lIiwiaXNQYXRoUmVsYXRpdmUiLCJpc0VtcHR5UGF0aCIsInRvUGF0aG5hbWUiLCJyb3V0ZVBhdGhuYW1lSW5kZXgiLCJ0b1NlZ21lbnRzIiwiZnJvbVBhdGhuYW1lIiwicmVzb2x2ZVBhdGhuYW1lIiwibm9ybWFsaXplU2VhcmNoIiwibm9ybWFsaXplSGFzaCIsInJlc29sdmVQYXRoIiwiaGFzRXhwbGljaXRUcmFpbGluZ1NsYXNoIiwiaGFzQ3VycmVudFRyYWlsaW5nU2xhc2giLCJwYXRocyIsIkRhdGFTdGF0aWNSb3V0ZXJDb250ZXh0IiwiRGF0YVJvdXRlckNvbnRleHQiLCJEYXRhUm91dGVyU3RhdGVDb250ZXh0IiwiTmF2aWdhdGlvbkNvbnRleHQiLCJMb2NhdGlvbkNvbnRleHQiLCJSb3V0ZUNvbnRleHQiLCJvdXRsZXQiLCJSb3V0ZUVycm9yQ29udGV4dCIsInVzZUluUm91dGVyQ29udGV4dCIsImdldFBhdGhDb250cmlidXRpbmdNYXRjaGVzIiwicm91dGVQYXRobmFtZXNKc29uIiwiYWN0aXZlUmVmIiwiZ28iLCJyZWxhdGl2ZSIsIl90ZW1wMiIsIkRlZmF1bHRFcnJvckVsZW1lbnQiLCJfc3RhdGUkZXJyb3JzIiwiaG9va05hbWUiLCJ1c2VEYXRhUm91dGVyU3RhdGUiLCJEYXRhUm91dGVySG9vayIsIlVzZVJvdXRlRXJyb3IiLCJ0aGlzUm91dGUiLCJlcnJvcnMiLCJ1c2VSb3V0ZUVycm9yIiwibGlnaHRncmV5IiwicHJlU3R5bGVzIiwiYmFja2dyb3VuZENvbG9yIiwiY29kZVN0eWxlcyIsIlJlbmRlckVycm9yQm91bmRhcnkiLCJlcnJvckluZm8iLCJSZW5kZXJlZFJvdXRlIiwicm91dGVDb250ZXh0IiwiZGF0YVN0YXRpY1JvdXRlckNvbnRleHQiLCJlcnJvckVsZW1lbnQiLCJfZGVlcGVzdFJlbmRlcmVkQm91bmRhcnlJZCIsIkF3YWl0UmVuZGVyU3RhdHVzIiwiUm91dGUiLCJfcHJvcHMiLCJfcmVmNCIsImJhc2VuYW1lUHJvcCIsImxvY2F0aW9uUHJvcCIsIm5hdmlnYXRpb25UeXBlIiwiUG9wIiwic3RhdGljUHJvcCIsIm5hdmlnYXRpb25Db250ZXh0IiwidHJhaWxpbmdQYXRobmFtZSIsIlJvdXRlcyIsIl9yZWY1IiwiZGF0YVJvdXRlckNvbnRleHQiLCJkYXRhUm91dGVyU3RhdGVDb250ZXh0IiwicGFyZW50TWF0Y2hlcyIsInJvdXRlTWF0Y2giLCJwYXJlbnRQYXJhbXMiLCJwYXJlbnRQYXRobmFtZUJhc2UiLCJsb2NhdGlvbkZyb21Db250ZXh0IiwiX3BhcnNlZExvY2F0aW9uQXJnJHBhIiwicGFyc2VkTG9jYXRpb25BcmciLCJyZW5kZXJlZE1hdGNoZXMiLCJkYXRhUm91dGVyU3RhdGUiLCJlcnJvckluZGV4IiwicmVkdWNlUmlnaHQiLCJnZXRDaGlsZHJlbiIsIl9yZW5kZXJNYXRjaGVzIiwidXNlUm91dGVzIiwicm91dGVyIiwiY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuIiwiQXdhaXRFcnJvckJvdW5kYXJ5IiwicmVuZGVyRXJyb3IiLCJfdHJhY2tlZCIsIl9lcnJvciIsIl9kYXRhIiwiQWJvcnRlZERlZmVycmVkRXJyb3IiLCJuZXZlclNldHRsZWRQcm9taXNlIiwiUmVhY3QiLCJBd2FpdENvbnRleHQiLCJ0cmVlUGF0aCIsImxvYWRlciIsImhhc0Vycm9yQm91bmRhcnkiLCJzaG91bGRSZXZhbGlkYXRlIiwiaGFuZGxlIiwiQnJvd3NlclJvdXRlciIsImhpc3RvcnlSZWYiLCJ2NUNvbXBhdCIsImdldExvY2F0aW9uIiwiY3JlYXRlSHJlZiIsInZhbGlkYXRlTG9jYXRpb24iLCJnbG9iYWxIaXN0b3J5IiwiaGlzdG9yeSIsImhhbmRsZVBvcCIsImxpc3RlbiIsIlB1c2giLCJoaXN0b3J5U3RhdGUiLCJwdXNoU3RhdGUiLCJSZXBsYWNlIiwicmVwbGFjZVN0YXRlIiwiZ2V0VXJsQmFzZWRIaXN0b3J5IiwiTGluayIsInJlbG9hZERvY3VtZW50IiwicHJldmVudFNjcm9sbFJlc2V0IiwicmVzdCIsIl90ZW1wIiwiam9pbmVkUGF0aG5hbWUiLCJ1c2VIcmVmIiwiaW50ZXJuYWxPbkNsaWNrIiwicmVwbGFjZVByb3AiLCJuYXZpZ2F0ZSIsImlzTW9kaWZpZWRFdmVudCIsInNob3VsZFByb2Nlc3NMaW5rQ2xpY2siLCJ1c2VMaW5rQ2xpY2tIYW5kbGVyIiwiZXh0ZW5kU3hQcm9wIiwiaW5TeCIsInN5c3RlbVByb3BzIiwib3RoZXJQcm9wcyIsInNwbGl0UHJvcHMiLCJmaW5hbFN4IiwiQm94IiwiZGVmYXVsdENsYXNzTmFtZSIsImdlbmVyYXRlQ2xhc3NOYW1lIiwiQm94Um9vdCIsIl9leHRlbmRTeFByb3AiLCJjcmVhdGVCb3giLCJsb2NhbFRoZW1lIiwib3V0ZXJUaGVtZSIsIm1lcmdlT3V0ZXJMb2NhbFRoZW1lIiwibmVzdGVkIiwiSW5uZXJUaGVtZVByb3ZpZGVyIiwiX3NldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfaW5oZXJpdHNMb29zZSIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImdldENoaWxkTWFwcGluZyIsIm1hcEZuIiwibWFwcGVyIiwiZ2V0UHJvcCIsImdldE5leHRDaGlsZE1hcHBpbmciLCJuZXh0UHJvcHMiLCJwcmV2Q2hpbGRNYXBwaW5nIiwib25FeGl0ZWQiLCJuZXh0Q2hpbGRNYXBwaW5nIiwiZ2V0VmFsdWVGb3JLZXkiLCJuZXh0S2V5c1BlbmRpbmciLCJwZW5kaW5nS2V5cyIsInByZXZLZXkiLCJjaGlsZE1hcHBpbmciLCJuZXh0S2V5IiwicGVuZGluZ05leHRLZXkiLCJtZXJnZUNoaWxkTWFwcGluZ3MiLCJoYXNQcmV2IiwiaGFzTmV4dCIsInByZXZDaGlsZCIsImlzTGVhdmluZyIsImluIiwiZXhpdCIsImVudGVyIiwiVHJhbnNpdGlvbkdyb3VwIiwiX1JlYWN0JENvbXBvbmVudCIsImhhbmRsZUV4aXRlZCIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJpc01vdW50aW5nIiwiZmlyc3RSZW5kZXIiLCJtb3VudGVkIiwiYXBwZWFyIiwiY3VycmVudENoaWxkTWFwcGluZyIsIl90aGlzJHByb3BzIiwiY2hpbGRGYWN0b3J5IiwiVHJhbnNpdGlvbkdyb3VwQ29udGV4dCIsIkdsb2JhbCIsInNoZWV0UmVmIiwicmVoeWRyYXRpbmciLCJxdWVyeVNlbGVjdG9yIiwic2hlZXRSZWZDdXJyZW50IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiX2xlbiIsImtleWZyYW1lcyIsImluc2VydGFibGUiLCJfdCIsIl90MiIsIl90MyIsIl90NCIsImVudGVyS2V5ZnJhbWUiLCJleGl0S2V5ZnJhbWUiLCJwdWxzYXRlS2V5ZnJhbWUiLCJUb3VjaFJpcHBsZVJvb3QiLCJwb2ludGVyRXZlbnRzIiwicmlnaHQiLCJib3R0b20iLCJUb3VjaFJpcHBsZVJpcHBsZSIsInB1bHNhdGUiLCJyaXBwbGVYIiwicmlwcGxlWSIsInJpcHBsZVNpemUiLCJpblByb3AiLCJsZWF2aW5nIiwic2V0TGVhdmluZyIsInJpcHBsZUNsYXNzTmFtZSIsInJpcHBsZSIsInJpcHBsZVZpc2libGUiLCJyaXBwbGVQdWxzYXRlIiwicmlwcGxlU3R5bGVzIiwiY2hpbGRDbGFzc05hbWUiLCJjaGlsZExlYXZpbmciLCJjaGlsZFB1bHNhdGUiLCJ0aW1lb3V0SWQiLCJUb3VjaFJpcHBsZSIsImNlbnRlciIsImNlbnRlclByb3AiLCJyaXBwbGVzIiwic2V0UmlwcGxlcyIsInJpcHBsZUNhbGxiYWNrIiwiaWdub3JpbmdNb3VzZURvd24iLCJzdGFydFRpbWVyIiwic3RhcnRUaW1lckNvbW1pdCIsInN0YXJ0Q29tbWl0Iiwib2xkUmlwcGxlcyIsImZha2VFbGVtZW50IiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNxcnQiLCJzaXplWCIsImNsaWVudFdpZHRoIiwic2l6ZVkiLCJjbGllbnRIZWlnaHQiLCJzdG9wIiwiZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyIsIkJ1dHRvbkJhc2VSb290IiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiYm94U2l6aW5nIiwiV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3IiLCJvdXRsaW5lIiwidmVydGljYWxBbGlnbiIsIk1vekFwcGVhcmFuY2UiLCJXZWJraXRBcHBlYXJhbmNlIiwidGV4dERlY29yYXRpb24iLCJib3JkZXJTdHlsZSIsImNvbG9yQWRqdXN0IiwiY2VudGVyUmlwcGxlIiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVUb3VjaFJpcHBsZSIsImZvY3VzUmlwcGxlIiwiTGlua0NvbXBvbmVudCIsIm9uQ29udGV4dE1lbnUiLCJvbkRyYWdMZWF2ZSIsIm9uRm9jdXNWaXNpYmxlIiwib25LZXlEb3duIiwib25LZXlVcCIsIm9uTW91c2VEb3duIiwib25Nb3VzZUxlYXZlIiwib25Nb3VzZVVwIiwib25Ub3VjaEVuZCIsIm9uVG91Y2hNb3ZlIiwib25Ub3VjaFN0YXJ0IiwidGFiSW5kZXgiLCJUb3VjaFJpcHBsZVByb3BzIiwidG91Y2hSaXBwbGVSZWYiLCJidXR0b25SZWYiLCJyaXBwbGVSZWYiLCJoYW5kbGVSaXBwbGVSZWYiLCJoYW5kbGVGb2N1c1Zpc2libGUiLCJoYW5kbGVCbHVyVmlzaWJsZSIsImZvY3VzVmlzaWJsZVJlZiIsInVzZUlzRm9jdXNWaXNpYmxlIiwic2V0Rm9jdXNWaXNpYmxlIiwibW91bnRlZFN0YXRlIiwic2V0TW91bnRlZFN0YXRlIiwiZW5hYmxlVG91Y2hSaXBwbGUiLCJ1c2VSaXBwbGVIYW5kbGVyIiwicmlwcGxlQWN0aW9uIiwiZXZlbnRDYWxsYmFjayIsInNraXBSaXBwbGVBY3Rpb24iLCJoYW5kbGVNb3VzZURvd24iLCJoYW5kbGVDb250ZXh0TWVudSIsImhhbmRsZURyYWdMZWF2ZSIsImhhbmRsZU1vdXNlVXAiLCJoYW5kbGVNb3VzZUxlYXZlIiwiaGFuZGxlVG91Y2hTdGFydCIsImhhbmRsZVRvdWNoRW5kIiwiaGFuZGxlVG91Y2hNb3ZlIiwiaGFuZGxlQmx1ciIsImhhbmRsZUZvY3VzIiwiaXNOb25OYXRpdmVCdXR0b24iLCJrZXlkb3duUmVmIiwiaGFuZGxlS2V5VXAiLCJDb21wb25lbnRQcm9wIiwiYnV0dG9uUHJvcHMiLCJoYW5kbGVPd25SZWYiLCJoYW5kbGVSZWYiLCJmb2N1c1Zpc2libGVDbGFzc05hbWUiLCJjb21wb3NlZENsYXNzZXMiLCJnZXRCdXR0b25VdGlsaXR5Q2xhc3MiLCJjb21tb25JY29uU3R5bGVzIiwiQnV0dG9uUm9vdCIsImNvbG9ySW5oZXJpdCIsImRpc2FibGVFbGV2YXRpb24iLCJmdWxsV2lkdGgiLCJfdGhlbWUkcGFsZXR0ZSRnZXRDb24iLCJfdGhlbWUkcGFsZXR0ZSIsInByaW1hcnlDaGFubmVsIiwibWFpbkNoYW5uZWwiLCJib3hTaGFkb3ciLCJCdXR0b25TdGFydEljb24iLCJzdGFydEljb24iLCJtYXJnaW5SaWdodCIsIm1hcmdpbkxlZnQiLCJCdXR0b25FbmRJY29uIiwiZW5kSWNvbiIsImNvbnRleHRQcm9wcyIsInJlc29sdmVkUHJvcHMiLCJkaXNhYmxlRm9jdXNSaXBwbGUiLCJlbmRJY29uUHJvcCIsInN0YXJ0SWNvblByb3AiLCJfdXNlVXRpbGl0eUNsYXNzZXMiLCJjbGFzc2VzUm9vdCIsImdldFN0eWxlVmFsdWUiLCJjb21wdXRlZFN0eWxlIiwidmlzaWJpbGl0eSIsIlRleHRhcmVhQXV0b3NpemUiLCJvbkNoYW5nZSIsIm1heFJvd3MiLCJtaW5Sb3dzIiwiaW5wdXRSZWYiLCJzaGFkb3dSZWYiLCJyZW5kZXJzIiwiZ2V0VXBkYXRlZFN0YXRlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImlucHV0U2hhbGxvdyIsInBsYWNlaG9sZGVyIiwiaW5uZXJIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJzaW5nbGVSb3dIZWlnaHQiLCJvdXRlckhlaWdodCIsIm91dGVySGVpZ2h0U3R5bGUiLCJ1cGRhdGVTdGF0ZSIsInByZXZTdGF0ZSIsIm5ld1N0YXRlIiwic3luY0hlaWdodCIsImhhbmRsZVJlc2l6ZSIsInN5bmNIZWlnaHRXaXRoRmx1c2hTeWNuIiwiY29udGFpbmVyV2luZG93IiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJkaXNjb25uZWN0IiwidXNlRW5oYW5jZWRFZmZlY3QiLCJyb3dzIiwiZm9ybUNvbnRyb2xTdGF0ZSIsInN0YXRlcyIsIm11aUZvcm1Db250cm9sIiwidXNlRm9ybUNvbnRyb2wiLCJHbG9iYWxTdHlsZXMiLCJnbG9iYWxTdHlsZXMiLCJpc0ZpbGxlZCIsIlNTUiIsImdldElucHV0QmFzZVV0aWxpdHlDbGFzcyIsInJvb3RPdmVycmlkZXNSZXNvbHZlciIsImZvcm1Db250cm9sIiwic3RhcnRBZG9ybm1lbnQiLCJhZG9ybmVkU3RhcnQiLCJlbmRBZG9ybm1lbnQiLCJhZG9ybmVkRW5kIiwic2l6ZVNtYWxsIiwibXVsdGlsaW5lIiwiaGlkZGVuTGFiZWwiLCJpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIiwiaW5wdXRTaXplU21hbGwiLCJpbnB1dE11bHRpbGluZSIsImlucHV0VHlwZVNlYXJjaCIsImlucHV0QWRvcm5lZFN0YXJ0IiwiaW5wdXRBZG9ybmVkRW5kIiwiaW5wdXRIaWRkZW5MYWJlbCIsIklucHV0QmFzZVJvb3QiLCJwYWRkaW5nVG9wIiwiSW5wdXRCYXNlQ29tcG9uZW50IiwiaW5wdXRQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVySGlkZGVuIiwicGxhY2Vob2xkZXJWaXNpYmxlIiwiZm9udCIsImFuaW1hdGlvbkR1cmF0aW9uIiwiV2Via2l0VGV4dEZpbGxDb2xvciIsInJlc2l6ZSIsImlucHV0R2xvYmFsU3R5bGVzIiwiSW5wdXRCYXNlIiwiYXJpYURlc2NyaWJlZGJ5IiwiYXV0b0NvbXBsZXRlIiwiY29tcG9uZW50c1Byb3BzIiwiZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlcyIsImlucHV0Q29tcG9uZW50IiwiaW5wdXRQcm9wc1Byb3AiLCJpbnB1dFJlZlByb3AiLCJyZW5kZXJTdWZmaXgiLCJ2YWx1ZVByb3AiLCJoYW5kbGVJbnB1dFJlZldhcm5pbmciLCJoYW5kbGVJbnB1dFByb3BzUmVmUHJvcCIsImhhbmRsZUlucHV0UmVmUHJvcCIsImhhbmRsZUlucHV0UmVmIiwic2V0Rm9jdXNlZCIsImZjcyIsIm9uRmlsbGVkIiwib25FbXB0eSIsImNoZWNrRGlydHkiLCJJbnB1dENvbXBvbmVudCIsInNldEFkb3JuZWRTdGFydCIsIlJvb3QiLCJyb290UHJvcHMiLCJJbnB1dCIsIm9uQW5pbWF0aW9uU3RhcnQiLCJnZXRJbnB1dFV0aWxpdHlDbGFzcyIsIklucHV0Um9vdCIsImRpc2FibGVVbmRlcmxpbmUiLCJ1bmRlcmxpbmUiLCJib3R0b21MaW5lQ29sb3IiLCJvbkJhY2tncm91bmRDaGFubmVsIiwiaW5wdXRVbmRlcmxpbmUiLCJtYXJnaW5Ub3AiLCJib3JkZXJCb3R0b21TdHlsZSIsIklucHV0SW5wdXQiLCJjb21wb25lbnRzUHJvcHNQcm9wIiwiaW5wdXRDb21wb25lbnRzUHJvcHMiLCJnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcyIsIkZpbGxlZElucHV0Um9vdCIsImhvdmVyQmFja2dyb3VuZCIsIkZpbGxlZElucHV0IiwiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiaG92ZXJCZyIsImRpc2FibGVkQmciLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdCb3R0b20iLCJGaWxsZWRJbnB1dElucHV0IiwiV2Via2l0Qm94U2hhZG93IiwiY2FyZXRDb2xvciIsImdldENvbG9yU2NoZW1lU2VsZWN0b3IiLCJmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcyIsIl9zcGFuIiwiTm90Y2hlZE91dGxpbmVSb290IiwiYm9yZGVyV2lkdGgiLCJOb3RjaGVkT3V0bGluZUxlZ2VuZCIsImZsb2F0Iiwid2l0aExhYmVsIiwid2hpdGVTcGFjZSIsIm5vdGNoZWQiLCJnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzIiwiT3V0bGluZWRJbnB1dFJvb3QiLCJub3RjaGVkT3V0bGluZSIsIk91dGxpbmVkSW5wdXRJbnB1dCIsIk91dGxpbmVkSW5wdXQiLCJfUmVhY3QkRnJhZ21lbnQiLCJmaWxsZWQiLCJnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyIsIkZvcm1MYWJlbFJvb3QiLCJjb2xvclNlY29uZGFyeSIsIkFzdGVyaXNrQ29tcG9uZW50IiwiYXN0ZXJpc2siLCJnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMiLCJJbnB1dExhYmVsUm9vdCIsInNocmluayIsImRpc2FibGVBbmltYXRpb24iLCJhbmltYXRlZCIsInRyYW5zZm9ybU9yaWdpbiIsInRleHRPdmVyZmxvdyIsInNocmlua1Byb3AiLCJnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIiwiRm9ybUNvbnRyb2xSb290IiwiZmxleERpcmVjdGlvbiIsIm1hcmdpbkJvdHRvbSIsInZpc3VhbGx5Rm9jdXNlZCIsImluaXRpYWxBZG9ybmVkU3RhcnQiLCJpc011aUVsZW1lbnQiLCJzZXRGaWxsZWQiLCJpbml0aWFsRmlsbGVkIiwiZm9jdXNlZFN0YXRlIiwiY2hpbGRDb250ZXh0IiwicmVnaXN0ZXJFZmZlY3QiLCJnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzIiwiRm9ybUhlbHBlclRleHRSb290IiwiY29udGFpbmVkIiwiZ2V0TGlzdFV0aWxpdHlDbGFzcyIsIkxpc3RSb290IiwiZGlzYWJsZVBhZGRpbmciLCJkZW5zZSIsInN1YmhlYWRlciIsImxpc3RTdHlsZSIsImdldFNjcm9sbGJhclNpemUiLCJkb2N1bWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsIm5leHRJdGVtIiwiZGlzYWJsZUxpc3RXcmFwIiwicHJldmlvdXNJdGVtIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsInRleHRDcml0ZXJpYU1hdGNoZXMiLCJuZXh0Rm9jdXMiLCJ0ZXh0Q3JpdGVyaWEiLCJpbm5lclRleHQiLCJyZXBlYXRpbmciLCJtb3ZlRm9jdXMiLCJjdXJyZW50Rm9jdXMiLCJkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlIiwidHJhdmVyc2FsRnVuY3Rpb24iLCJ3cmFwcGVkT25jZSIsIm5leHRGb2N1c0Rpc2FibGVkIiwiaGFzQXR0cmlidXRlIiwiTWVudUxpc3QiLCJhY3Rpb25zIiwiYXV0b0ZvY3VzSXRlbSIsImxpc3RSZWYiLCJ0ZXh0Q3JpdGVyaWFSZWYiLCJwcmV2aW91c0tleU1hdGNoZWQiLCJsYXN0VGltZSIsImFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyIiwiY29udGFpbmVyRWxlbWVudCIsIm5vRXhwbGljaXRXaWR0aCIsInNjcm9sbGJhclNpemUiLCJhY3RpdmVJdGVtSW5kZXgiLCJuZXdDaGlsZFByb3BzIiwiY3JpdGVyaWEiLCJsb3dlcktleSIsImN1cnJUaW1lIiwia2VlcEZvY3VzT25DdXJyZW50IiwiZ2V0UGFwZXJVdGlsaXR5Q2xhc3MiLCJnZXRPdmVybGF5QWxwaGEiLCJlbGV2YXRpb24iLCJhbHBoYVZhbHVlIiwiUGFwZXJSb290Iiwic3F1YXJlIiwicm91bmRlZCIsIl90aGVtZSR2YXJzJG92ZXJsYXlzIiwiYmFja2dyb3VuZEltYWdlIiwib3ZlcmxheXMiLCJVTk1PVU5URUQiLCJFWElURUQiLCJFTlRFUklORyIsIkVOVEVSRUQiLCJFWElUSU5HIiwiVHJhbnNpdGlvbiIsImluaXRpYWxTdGF0dXMiLCJhcHBlYXJTdGF0dXMiLCJ1bm1vdW50T25FeGl0IiwibW91bnRPbkVudGVyIiwibmV4dENhbGxiYWNrIiwidXBkYXRlU3RhdHVzIiwicHJldlByb3BzIiwibmV4dFN0YXR1cyIsImNhbmNlbE5leHRDYWxsYmFjayIsImdldFRpbWVvdXRzIiwibW91bnRpbmciLCJub2RlUmVmIiwiZm9yY2VSZWZsb3ciLCJwZXJmb3JtRW50ZXIiLCJwZXJmb3JtRXhpdCIsIl90aGlzMiIsImFwcGVhcmluZyIsIm1heWJlTm9kZSIsIm1heWJlQXBwZWFyaW5nIiwidGltZW91dHMiLCJlbnRlclRpbWVvdXQiLCJvbkVudGVyIiwic2FmZVNldFN0YXRlIiwib25FbnRlcmluZyIsIm9uVHJhbnNpdGlvbkVuZCIsIm9uRW50ZXJlZCIsIl90aGlzMyIsIm9uRXhpdCIsIm9uRXhpdGluZyIsIm5leHRTdGF0ZSIsInNldE5leHRDYWxsYmFjayIsIl90aGlzNCIsImhhbmRsZXIiLCJkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyIiwiYWRkRW5kTGlzdGVuZXIiLCJfcmVmMyIsIm1heWJlTmV4dENhbGxiYWNrIiwiY2hpbGRQcm9wcyIsIm5vb3AiLCJyZWZsb3ciLCJnZXRUcmFuc2l0aW9uUHJvcHMiLCJfc3R5bGUkdHJhbnNpdGlvbkR1cmEiLCJfc3R5bGUkdHJhbnNpdGlvblRpbWkiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLCJ0cmFuc2l0aW9uRGVsYXkiLCJnZXRTY2FsZSIsImVudGVyaW5nIiwiZW50ZXJlZCIsImlzV2ViS2l0MTU0IiwiR3JvdyIsIlRyYW5zaXRpb25Db21wb25lbnQiLCJ0aW1lciIsImF1dG9UaW1lb3V0IiwiZm9yZWlnblJlZiIsIm5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2siLCJtYXliZUlzQXBwZWFyaW5nIiwiaGFuZGxlRW50ZXJpbmciLCJoYW5kbGVFbnRlciIsImlzQXBwZWFyaW5nIiwiaGFuZGxlRW50ZXJlZCIsImhhbmRsZUV4aXRpbmciLCJoYW5kbGVFeGl0IiwibXVpU3VwcG9ydEF1dG8iLCJkaXNhYmxlUG9ydGFsIiwibW91bnROb2RlIiwic2V0TW91bnROb2RlIiwiZ2V0Q29udGFpbmVyIiwiYXJpYUhpZGRlbiIsInNob3ciLCJnZXRQYWRkaW5nUmlnaHQiLCJhcmlhSGlkZGVuU2libGluZ3MiLCJtb3VudEVsZW1lbnQiLCJjdXJyZW50RWxlbWVudCIsImVsZW1lbnRzVG9FeGNsdWRlIiwiaXNOb3RFeGNsdWRlZEVsZW1lbnQiLCJpc05vdEZvcmJpZGRlbkVsZW1lbnQiLCJpc0ZvcmJpZGRlblRhZ05hbWUiLCJpc0lucHV0SGlkZGVuIiwiaXNBcmlhSGlkZGVuRm9yYmlkZGVuT25FbGVtZW50IiwiZmluZEluZGV4T2YiLCJpZHgiLCJjYW5kaWRhdGVzU2VsZWN0b3IiLCJkZWZhdWx0R2V0VGFiYmFibGUiLCJyZWd1bGFyVGFiTm9kZXMiLCJvcmRlcmVkVGFiTm9kZXMiLCJub2RlVGFiSW5kZXgiLCJ0YWJpbmRleEF0dHIiLCJnZXRUYWJJbmRleCIsImdldFJhZGlvIiwicm92aW5nIiwiaXNOb25UYWJiYWJsZVJhZGlvIiwiaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZSIsImRvY3VtZW50T3JkZXIiLCJkZWZhdWx0SXNFbmFibGVkIiwiZGlzYWJsZUF1dG9Gb2N1cyIsImRpc2FibGVFbmZvcmNlRm9jdXMiLCJkaXNhYmxlUmVzdG9yZUZvY3VzIiwiZ2V0VGFiYmFibGUiLCJpc0VuYWJsZWQiLCJpZ25vcmVOZXh0RW5mb3JjZUZvY3VzIiwic2VudGluZWxTdGFydCIsInNlbnRpbmVsRW5kIiwibm9kZVRvUmVzdG9yZSIsInJlYWN0Rm9jdXNFdmVudFRhcmdldCIsImFjdGl2YXRlZCIsInJvb3RSZWYiLCJsYXN0S2V5ZG93biIsImNvbnRhaW4iLCJyb290RWxlbWVudCIsImhhc0ZvY3VzIiwidGFiYmFibGUiLCJfbGFzdEtleWRvd24kY3VycmVudCIsIl9sYXN0S2V5ZG93biRjdXJyZW50MiIsImlzU2hpZnRUYWIiLCJmb2N1c05leHQiLCJmb2N1c1ByZXZpb3VzIiwibG9vcEZvY3VzIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJoYW5kbGVGb2N1c1NlbnRpbmVsIiwiY2hpbGRyZW5Qcm9wc0hhbmRsZXIiLCJnZXRNb2RhbFV0aWxpdHlDbGFzcyIsImFwcGVuZE93bmVyU3RhdGUiLCJvbWl0RXZlbnRIYW5kbGVycyIsInJlc29sdmVDb21wb25lbnRQcm9wcyIsImNvbXBvbmVudFByb3BzIiwidXNlU2xvdFByb3BzIiwicGFyYW1ldGVycyIsIl9wYXJhbWV0ZXJzJGFkZGl0aW9uYSIsImV4dGVybmFsU2xvdFByb3BzIiwicmVzb2x2ZWRDb21wb25lbnRzUHJvcHMiLCJpbnRlcm5hbFJlZiIsImdldFNsb3RQcm9wcyIsImFkZGl0aW9uYWxQcm9wcyIsImV4dGVybmFsRm9yd2FyZGVkUHJvcHMiLCJqb2luZWRDbGFzc2VzIiwibWVyZ2VkU3R5bGUiLCJldmVudEhhbmRsZXJzIiwiZXhjbHVkZUtleXMiLCJleHRyYWN0RXZlbnRIYW5kbGVycyIsImNvbXBvbmVudHNQcm9wc1dpdGhvdXRFdmVudEhhbmRsZXJzIiwib3RoZXJQcm9wc1dpdGhvdXRFdmVudEhhbmRsZXJzIiwiaW50ZXJuYWxTbG90UHJvcHMiLCJtZXJnZVNsb3RQcm9wcyIsImRlZmF1bHRNYW5hZ2VyIiwiY29udGFpbmVycyIsIm1vZGFscyIsIm1vZGFsSW5kZXgiLCJtb2RhbFJlZiIsImhpZGRlblNpYmxpbmdzIiwiZ2V0SGlkZGVuU2libGluZ3MiLCJtb3VudCIsImNvbnRhaW5lckluZGV4IiwicmVzdG9yZSIsInJlc3RvcmVTdHlsZSIsImRpc2FibGVTY3JvbGxMb2NrIiwiaXNPdmVyZmxvd2luZyIsInNjcm9sbENvbnRhaW5lciIsIkRvY3VtZW50RnJhZ21lbnQiLCJwYXJlbnRFbGVtZW50Iiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwicmVtb3ZlUHJvcGVydHkiLCJoYW5kbGVDb250YWluZXIiLCJhcmlhSGlkZGVuU3RhdGUiLCJuZXh0VG9wIiwiaXNUb3BNb2RhbCIsIl9wcm9wcyRhcmlhSGlkZGVuIiwiY2xhc3Nlc1Byb3AiLCJjbG9zZUFmdGVyVHJhbnNpdGlvbiIsImRpc2FibGVFc2NhcGVLZXlEb3duIiwiaGlkZUJhY2tkcm9wIiwia2VlcE1vdW50ZWQiLCJtYW5hZ2VyIiwib25CYWNrZHJvcENsaWNrIiwib25DbG9zZSIsIm9uVHJhbnNpdGlvbkVudGVyIiwib25UcmFuc2l0aW9uRXhpdGVkIiwiZXhpdGVkIiwic2V0RXhpdGVkIiwibW91bnROb2RlUmVmIiwiaGFzVHJhbnNpdGlvbiIsImdldEhhc1RyYW5zaXRpb24iLCJhcmlhSGlkZGVuUHJvcCIsImdldE1vZGFsIiwiaGFuZGxlTW91bnRlZCIsImhhbmRsZU9wZW4iLCJyZXNvbHZlZENvbnRhaW5lciIsImhhbmRsZVBvcnRhbFJlZiIsImhhbmRsZUNsb3NlIiwiQmFja2Ryb3BDb21wb25lbnQiLCJCYWNrZHJvcCIsImJhY2tkcm9wUHJvcHMiLCJiYWNrZHJvcCIsIkZhZGUiLCJkZWZhdWx0VGltZW91dCIsInRyYW5zaXRpb25Qcm9wcyIsIndlYmtpdFRyYW5zaXRpb24iLCJnZXRCYWNrZHJvcFV0aWxpdHlDbGFzcyIsIkJhY2tkcm9wUm9vdCIsImludmlzaWJsZSIsIl9jb21wb25lbnRzJFJvb3QiLCJfY29tcG9uZW50c1Byb3BzJHJvb3QiLCJNb2RhbFJvb3QiLCJoaWRkZW4iLCJNb2RhbEJhY2tkcm9wIiwiTW9kYWwiLCJCYWNrZHJvcFByb3BzIiwiY29tbW9uUHJvcHMiLCJleHRlbmRVdGlsaXR5Q2xhc3NlcyIsImdldFBvcG92ZXJVdGlsaXR5Q2xhc3MiLCJnZXRPZmZzZXRUb3AiLCJ2ZXJ0aWNhbCIsImdldE9mZnNldExlZnQiLCJob3Jpem9udGFsIiwiZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUiLCJyZXNvbHZlQW5jaG9yRWwiLCJhbmNob3JFbCIsIlBvcG92ZXJSb290IiwiUG9wb3ZlclBhcGVyIiwiUG9wb3ZlciIsImFuY2hvck9yaWdpbiIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yUmVmZXJlbmNlIiwiY29udGFpbmVyUHJvcCIsIm1hcmdpblRocmVzaG9sZCIsIlBhcGVyUHJvcHMiLCJ0cmFuc2l0aW9uRHVyYXRpb25Qcm9wIiwiVHJhbnNpdGlvblByb3BzIiwicGFwZXJSZWYiLCJoYW5kbGVQYXBlclJlZiIsImdldEFuY2hvck9mZnNldCIsInJlc29sdmVkQW5jaG9yRWwiLCJhbmNob3JSZWN0IiwiZ2V0VHJhbnNmb3JtT3JpZ2luIiwiZWxlbVJlY3QiLCJnZXRQb3NpdGlvbmluZ1N0eWxlIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJlbGVtVHJhbnNmb3JtT3JpZ2luIiwiaGVpZ2h0VGhyZXNob2xkIiwid2lkdGhUaHJlc2hvbGQiLCJkaWZmIiwic2V0UG9zaXRpb25pbmdTdHlsZXMiLCJwb3NpdGlvbmluZyIsInVwZGF0ZVBvc2l0aW9uIiwiZ2V0TWVudVV0aWxpdHlDbGFzcyIsIlJUTF9PUklHSU4iLCJMVFJfT1JJR0lOIiwiTWVudVJvb3QiLCJNZW51UGFwZXIiLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsIk1lbnVNZW51TGlzdCIsImRpc2FibGVBdXRvRm9jdXNJdGVtIiwiTWVudUxpc3RQcm9wcyIsIlBvcG92ZXJDbGFzc2VzIiwiaXNSdGwiLCJtZW51TGlzdEFjdGlvbnNSZWYiLCJnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcyIsIm5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcyIsIk5hdGl2ZVNlbGVjdFNlbGVjdCIsInNlbGVjdCIsIm5hdGl2ZVNlbGVjdEljb25TdHlsZXMiLCJOYXRpdmVTZWxlY3RJY29uIiwiaWNvbk9wZW4iLCJJY29uQ29tcG9uZW50IiwiZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMiLCJTZWxlY3RTZWxlY3QiLCJTZWxlY3RJY29uIiwiU2VsZWN0TmF0aXZlSW5wdXQiLCJuYXRpdmVJbnB1dCIsImFyZUVxdWFsVmFsdWVzIiwiU2VsZWN0SW5wdXQiLCJhcmlhTGFiZWwiLCJhdXRvV2lkdGgiLCJkZWZhdWx0T3BlbiIsImRpc3BsYXlFbXB0eSIsImxhYmVsSWQiLCJNZW51UHJvcHMiLCJvbk9wZW4iLCJvcGVuUHJvcCIsInJlbmRlclZhbHVlIiwiU2VsZWN0RGlzcGxheVByb3BzIiwidGFiSW5kZXhQcm9wIiwic2V0VmFsdWVTdGF0ZSIsInVzZUNvbnRyb2xsZWQiLCJvcGVuU3RhdGUiLCJzZXRPcGVuU3RhdGUiLCJkaXNwbGF5UmVmIiwiZGlzcGxheU5vZGUiLCJzZXREaXNwbGF5Tm9kZSIsImlzT3BlbkNvbnRyb2xsZWQiLCJtZW51TWluV2lkdGhTdGF0ZSIsInNldE1lbnVNaW5XaWR0aFN0YXRlIiwiaGFuZGxlRGlzcGxheVJlZiIsImdldEVsZW1lbnRCeUlkIiwiaXNDb2xsYXBzZWQiLCJ1cGRhdGUiLCJjaGlsZHJlbkFycmF5IiwiaGFuZGxlSXRlbUNsaWNrIiwiaXRlbUluZGV4IiwiY2xvbmVkRXZlbnQiLCJ3cml0YWJsZSIsImRpc3BsYXlTaW5nbGUiLCJkaXNwbGF5TXVsdGlwbGUiLCJjb21wdXRlRGlzcGxheSIsImZvdW5kTWF0Y2giLCJmaXJzdFNlbGVjdGFibGVFbGVtZW50IiwiaXNGaXJzdFNlbGVjdGFibGVFbGVtZW50IiwibWVudU1pbldpZHRoIiwiYnV0dG9uSWQiLCJfU3R5bGVkSW5wdXQiLCJfU3R5bGVkRmlsbGVkSW5wdXQiLCJzdHlsZWRSb290Q29uZmlnIiwiU3R5bGVkSW5wdXQiLCJTdHlsZWRPdXRsaW5lZElucHV0IiwiU3R5bGVkRmlsbGVkSW5wdXQiLCJTZWxlY3QiLCJBcnJvd0Ryb3BEb3duIiwibmF0aXZlIiwidmFyaWFudFByb3AiLCJvdXRsaW5lZCIsImlucHV0Q29tcG9uZW50UmVmIiwiZ2V0VGV4dEZpZWxkVXRpbGl0eUNsYXNzIiwidmFyaWFudENvbXBvbmVudCIsIlRleHRGaWVsZFJvb3QiLCJGb3JtSGVscGVyVGV4dFByb3BzIiwiaGVscGVyVGV4dCIsIklucHV0TGFiZWxQcm9wcyIsIklucHV0UHJvcHMiLCJTZWxlY3RQcm9wcyIsIklucHV0TW9yZSIsImhlbHBlclRleHRJZCIsImlucHV0TGFiZWxJZCIsIklucHV0RWxlbWVudCIsImh0bWxGb3IiLCJnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzIiwiVHlwb2dyYXBoeVJvb3QiLCJhbGlnbiIsIm5vV3JhcCIsImd1dHRlckJvdHRvbSIsInBhcmFncmFwaCIsImRlZmF1bHRWYXJpYW50TWFwcGluZyIsImNvbG9yVHJhbnNmb3JtYXRpb25zIiwidGV4dFByaW1hcnkiLCJ0ZXh0U2Vjb25kYXJ5IiwidGhlbWVQcm9wcyIsInRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMiLCJ2YXJpYW50TWFwcGluZyIsInVzZUFwcERpc3BhdGNoIiwidXNlQXBwU2VsZWN0b3IiLCJGdW5jdGlvbiIsIm5uIiwicm4iLCJ0biIsImVuIiwib24iLCJQcm94eSIsInJldm9jYWJsZSIsInJldm9rZSIsInByb3h5Iiwib3duS2V5cyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWxldGVQcm9wZXJ0eSIsInVuIiwicHJvZHVjZSIsInByb2R1Y2VXaXRoUGF0Y2hlcyIsInVzZVByb3hpZXMiLCJzZXRVc2VQcm94aWVzIiwiYXV0b0ZyZWV6ZSIsInNldEF1dG9GcmVlemUiLCJjcmVhdGVEcmFmdCIsImZpbmlzaERyYWZ0IiwiYXBwbHlQYXRjaGVzIiwib3AiLCIkIiwiYW4iLCJfZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlT25seSIsInN5bWJvbHMiLCJzeW0iLCJfb2JqZWN0U3ByZWFkMiIsImZvcm1hdFByb2RFcnJvck1lc3NhZ2UiLCIkJG9ic2VydmFibGUiLCJvYnNlcnZhYmxlIiwicmFuZG9tU3RyaW5nIiwiQWN0aW9uVHlwZXMiLCJJTklUIiwiUkVQTEFDRSIsIlBST0JFX1VOS05PV05fQUNUSU9OIiwicHJvdG8iLCJjcmVhdGVTdG9yZSIsInJlZHVjZXIiLCJwcmVsb2FkZWRTdGF0ZSIsImVuaGFuY2VyIiwiY3VycmVudFJlZHVjZXIiLCJjdXJyZW50U3RhdGUiLCJjdXJyZW50TGlzdGVuZXJzIiwibmV4dExpc3RlbmVycyIsImlzRGlzcGF0Y2hpbmciLCJlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzIiwicmVwbGFjZVJlZHVjZXIiLCJuZXh0UmVkdWNlciIsIm91dGVyU3Vic2NyaWJlIiwib2JzZXJ2ZXIiLCJvYnNlcnZlU3RhdGUiLCJjb21wb3NlIiwiYXBwbHlNaWRkbGV3YXJlIiwibWlkZGxld2FyZXMiLCJfZGlzcGF0Y2giLCJtaWRkbGV3YXJlQVBJIiwibWlkZGxld2FyZSIsImNyZWF0ZVRodW5rTWlkZGxld2FyZSIsImV4dHJhQXJndW1lbnQiLCJ0aHVuayIsIndpdGhFeHRyYUFyZ3VtZW50IiwiZXh0ZW5kU3RhdGljcyIsIl9fZXh0ZW5kcyIsIl9fIiwiX19zcHJlYWRBcnJheSIsIl9fZGVmUHJvcCIsIl9fZGVmUHJvcHMiLCJfX2dldE93blByb3BEZXNjcyIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIl9fZGVmTm9ybWFsUHJvcCIsIl9fc3ByZWFkVmFsdWVzIiwiX2MiLCJfX3NwcmVhZFByb3BzIiwiY29tcG9zZVdpdGhEZXZUb29scyIsIl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfXyIsIl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18iLCJNaWRkbGV3YXJlQXJyYXkiLCJfc3VwZXIiLCJzcGVjaWVzIiwiZnJlZXplRHJhZnRhYmxlIiwiY3JlYXRlQWN0aW9uIiwicHJlcGFyZUFjdGlvbiIsImFjdGlvbkNyZWF0b3IiLCJwcmVwYXJlZCIsImV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrIiwiYnVpbGRlckNhbGxiYWNrIiwiZGVmYXVsdENhc2VSZWR1Y2VyIiwiYWN0aW9uc01hcCIsImFjdGlvbk1hdGNoZXJzIiwiYWRkQ2FzZSIsInR5cGVPckFjdGlvbkNyZWF0b3IiLCJhZGRNYXRjaGVyIiwiYWRkRGVmYXVsdENhc2UiLCJjcmVhdGVTbGljZSIsIl9yZWR1Y2VyIiwiaW5pdGlhbFN0YXRlIiwicmVkdWNlcnMiLCJyZWR1Y2VyTmFtZXMiLCJzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZSIsInNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlIiwiYWN0aW9uQ3JlYXRvcnMiLCJidWlsZFJlZHVjZXIiLCJleHRyYVJlZHVjZXJzIiwiX2QiLCJfZSIsIl9mIiwiZmluYWxDYXNlUmVkdWNlcnMiLCJtYXBPckJ1aWxkZXJDYWxsYmFjayIsImdldEluaXRpYWxTdGF0ZSIsImZpbmFsQWN0aW9uTWF0Y2hlcnMiLCJmaW5hbERlZmF1bHRDYXNlUmVkdWNlciIsImlzU3RhdGVGdW5jdGlvbiIsImZyb3plbkluaXRpYWxTdGF0ZV8xIiwiY2FzZVJlZHVjZXJzIiwiY3IiLCJjYXNlUmVkdWNlciIsImRyYWZ0IiwiY3JlYXRlUmVkdWNlciIsInJlZHVjZXJOYW1lIiwicHJlcGFyZUNhbGxiYWNrIiwibWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUiLCJwcmVwYXJlIiwiY29tbW9uUHJvcGVydGllcyIsIlJlamVjdFdpdGhWYWx1ZSIsIkZ1bGZpbGxXaXRoTWV0YSIsIm1pbmlTZXJpYWxpemVFcnJvciIsInNpbXBsZUVycm9yIiwiY29tbW9uUHJvcGVydGllc18xIiwiY3JlYXRlQXN5bmNUaHVuayIsInR5cGVQcmVmaXgiLCJwYXlsb2FkQ3JlYXRvciIsInJlcXVlc3RJZCIsInJlcXVlc3RTdGF0dXMiLCJzZXJpYWxpemVFcnJvciIsInJlamVjdGVkV2l0aFZhbHVlIiwiY29uZGl0aW9uIiwiQUMiLCJBYm9ydENvbnRyb2xsZXIiLCJjbGFzc18xIiwidGhyb3dJZkFib3J0ZWQiLCJleHRyYSIsImFib3J0UmVhc29uIiwiaWRHZW5lcmF0b3IiLCJuYW5vaWQiLCJhYm9ydENvbnRyb2xsZXIiLCJhYm9ydGVkUHJvbWlzZSIsInN0YXJ0ZWQiLCJfX3RoaXMiLCJfX2FyZ3VtZW50cyIsIl9hIiwiX2IiLCJmaW5hbEFjdGlvbiIsImNvbmRpdGlvblJlc3VsdCIsImVycl8xIiwic2VudCIsInRyeXMiLCJvcHMiLCJ2ZXJiIiwiX19nZW5lcmF0b3IiLCJnZXRQZW5kaW5nTWV0YSIsInJhY2UiLCJyZWplY3RXaXRoVmFsdWUiLCJmdWxmaWxsV2l0aFZhbHVlIiwiZGlzcGF0Y2hDb25kaXRpb25SZWplY3Rpb24iLCJ0aHJvdyIsInVud3JhcCIsInVud3JhcFJlc3VsdCIsImFsbSIsIkRFRkFVTFRfUFJPSkVDVCIsIkRFRkFVTFRfQ0xJUEJPQVJEIiwidXBkYXRlQ29kZURpc3BsYXkiLCJjb2RlU25pcHBldHMiLCJjb2RlU25pcHMiLCJzbmlwcGV0IiwiY29kZUFyciIsInNlcnZlciIsImNvZGVEaXNwbGF5IiwiY2xpcGJvYXJkU2xpY2UiLCJhcHBlbmRUb0NsaXBib2FyZCIsInNlc3Npb25TdG9yYWdlIiwic2V0SXRlbSIsImNvcHlDbGlwYm9hcmQiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJzZXRTZXJ2ZXIiLCJjbGVhckNsaXBib2FyZFN0YXRlIiwicmVtb3ZlSXRlbSIsInNldFNuaXBwZXRzIiwiZ2V0U25pcHBldHMiLCJ0aHVua3MiLCJwb3N0U25pcHBldCIsInByb2plY3RJZCIsImNvZGVPdXRwdXQiLCJjb2RlX3NuaXBwZXRzIiwidXNlckluZm9TbGljZSIsInNob3dMb2dpbiIsInNob3dTYXZlIiwiZ2V0SXRlbSIsInVzZXJJZCIsInByb2plY3RzSW5mbyIsInByb2plY3RfaWQiLCJwcm9qZWN0X25hbWUiLCJ1c2VyX2lkIiwic2hvd0FjY2Vzc0NsaXBib2FyZCIsImN1cnJlbnRQcm9qZWN0IiwiY3VycmVudFByb2plY3RJZCIsIm5ld1Byb2plY3QiLCJzZXRTaG93TG9naW4iLCJzZXRTaG93U2F2ZSIsInNldFByb2plY3RzSW5mbyIsInNldEN1cnJlbnRQcm9qZWN0IiwicHJvamVjdHMiLCJwcm9qZWN0SWRzIiwic2V0TmV3UHJvamVjdCIsInNldFVzZXJJZCIsImxvZ291dCIsInNldENsaXBib2FyZERhdGEiLCJwcm9qZWN0IiwiY2xpcGJvYXJkSW5mbyIsInNldFNob3dBY2Nlc3NDbGlwYm9hcmQiLCJkZWxldGVQcm9qZWN0IiwiZ2V0V2luZG93IiwiaXNIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsIlNoYWRvd1Jvb3QiLCJnZXRVQVN0cmluZyIsInVhRGF0YSIsInVzZXJBZ2VudERhdGEiLCJicmFuZHMiLCJicmFuZCIsImlzTGF5b3V0Vmlld3BvcnQiLCJpbmNsdWRlU2NhbGUiLCJpc0ZpeGVkU3RyYXRlZ3kiLCJjbGllbnRSZWN0Iiwic2NhbGVYIiwic2NhbGVZIiwidmlzdWFsVmlld3BvcnQiLCJhZGRWaXN1YWxPZmZzZXRzIiwib2Zmc2V0TGVmdCIsIm9mZnNldFRvcCIsImdldFdpbmRvd1Njcm9sbCIsIndpbiIsInBhZ2VYT2Zmc2V0IiwicGFnZVlPZmZzZXQiLCJnZXROb2RlTmFtZSIsImdldERvY3VtZW50RWxlbWVudCIsImdldFdpbmRvd1Njcm9sbEJhclgiLCJpc1Njcm9sbFBhcmVudCIsIl9nZXRDb21wdXRlZFN0eWxlIiwiZ2V0Q29tcG9zaXRlUmVjdCIsImVsZW1lbnRPclZpcnR1YWxFbGVtZW50Iiwib2Zmc2V0UGFyZW50IiwiaXNGaXhlZCIsImlzT2Zmc2V0UGFyZW50QW5FbGVtZW50Iiwib2Zmc2V0UGFyZW50SXNTY2FsZWQiLCJpc0VsZW1lbnRTY2FsZWQiLCJzY3JvbGwiLCJvZmZzZXRzIiwiY2xpZW50TGVmdCIsImNsaWVudFRvcCIsImdldExheW91dFJlY3QiLCJnZXRQYXJlbnROb2RlIiwiYXNzaWduZWRTbG90IiwiZ2V0U2Nyb2xsUGFyZW50IiwibGlzdFNjcm9sbFBhcmVudHMiLCJfZWxlbWVudCRvd25lckRvY3VtZW4iLCJzY3JvbGxQYXJlbnQiLCJpc0JvZHkiLCJ1cGRhdGVkTGlzdCIsImlzVGFibGVFbGVtZW50IiwiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsImdldE9mZnNldFBhcmVudCIsImlzRmlyZWZveCIsImN1cnJlbnROb2RlIiwicGVyc3BlY3RpdmUiLCJ3aWxsQ2hhbmdlIiwiZ2V0Q29udGFpbmluZ0Jsb2NrIiwiYXV0byIsImJhc2VQbGFjZW1lbnRzIiwidmlld3BvcnQiLCJwb3BwZXIiLCJ2YXJpYXRpb25QbGFjZW1lbnRzIiwicGxhY2VtZW50IiwibW9kaWZpZXJQaGFzZXMiLCJtb2RpZmllcnMiLCJ2aXNpdGVkIiwibW9kaWZpZXIiLCJyZXF1aXJlcyIsInJlcXVpcmVzSWZFeGlzdHMiLCJkZXAiLCJkZXBNb2RpZmllciIsIkRFRkFVTFRfT1BUSU9OUyIsInN0cmF0ZWd5IiwiYXJlVmFsaWRFbGVtZW50cyIsInBvcHBlckdlbmVyYXRvciIsImdlbmVyYXRvck9wdGlvbnMiLCJfZ2VuZXJhdG9yT3B0aW9ucyIsIl9nZW5lcmF0b3JPcHRpb25zJGRlZiIsImRlZmF1bHRNb2RpZmllcnMiLCJfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyIiwiZGVmYXVsdE9wdGlvbnMiLCJvcmRlcmVkTW9kaWZpZXJzIiwibW9kaWZpZXJzRGF0YSIsImVsZW1lbnRzIiwiYXR0cmlidXRlcyIsImVmZmVjdENsZWFudXBGbnMiLCJpc0Rlc3Ryb3llZCIsInNldE9wdGlvbnMiLCJzZXRPcHRpb25zQWN0aW9uIiwiY2xlYW51cE1vZGlmaWVyRWZmZWN0cyIsInNjcm9sbFBhcmVudHMiLCJjb250ZXh0RWxlbWVudCIsInBoYXNlIiwib3JkZXJNb2RpZmllcnMiLCJleGlzdGluZyIsImVuYWJsZWQiLCJfcmVmMyRvcHRpb25zIiwiZWZmZWN0IiwiY2xlYW51cEZuIiwiX3N0YXRlJGVsZW1lbnRzIiwicmVjdHMiLCJfc3RhdGUkb3JkZXJlZE1vZGlmaWUiLCJfc3RhdGUkb3JkZXJlZE1vZGlmaWUyIiwiX29wdGlvbnMiLCJvbkZpcnN0VXBkYXRlIiwiZ2V0QmFzZVBsYWNlbWVudCIsImdldFZhcmlhdGlvbiIsImdldE1haW5BeGlzRnJvbVBsYWNlbWVudCIsImNvbXB1dGVPZmZzZXRzIiwiYmFzZVBsYWNlbWVudCIsInZhcmlhdGlvbiIsImNvbW1vblgiLCJjb21tb25ZIiwibWFpbkF4aXMiLCJ1bnNldFNpZGVzIiwibWFwVG9TdHlsZXMiLCJfT2JqZWN0JGFzc2lnbjIiLCJwb3BwZXJSZWN0IiwiZ3B1QWNjZWxlcmF0aW9uIiwiYWRhcHRpdmUiLCJyb3VuZE9mZnNldHMiLCJfb2Zmc2V0cyR4IiwiX29mZnNldHMkeSIsImhhc1giLCJoYXNZIiwic2lkZVgiLCJzaWRlWSIsImhlaWdodFByb3AiLCJ3aWR0aFByb3AiLCJfT2JqZWN0JGFzc2lnbiIsImNvbW1vblN0eWxlcyIsImRwciIsImRldmljZVBpeGVsUmF0aW8iLCJyb3VuZE9mZnNldHNCeURQUiIsImluaXRpYWxTdHlsZXMiLCJhcnJvdyIsIl9vcHRpb25zJG9mZnNldCIsImludmVydERpc3RhbmNlIiwic2tpZGRpbmciLCJkaXN0YW5jZSIsImRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZIiwiX2RhdGEkc3RhdGUkcGxhY2VtZW50IiwicG9wcGVyT2Zmc2V0cyIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQiLCJnZXRSb290Tm9kZSIsImlzU2FtZU5vZGUiLCJyZWN0VG9DbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUiLCJjbGlwcGluZ1BhcmVudCIsImxheW91dFZpZXdwb3J0IiwiZ2V0Vmlld3BvcnRSZWN0IiwiZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aW5TY3JvbGwiLCJzY3JvbGxXaWR0aCIsImdldERvY3VtZW50UmVjdCIsIm1lcmdlUGFkZGluZ09iamVjdCIsInBhZGRpbmdPYmplY3QiLCJleHBhbmRUb0hhc2hNYXAiLCJoYXNoTWFwIiwiZGV0ZWN0T3ZlcmZsb3ciLCJfb3B0aW9ucyRwbGFjZW1lbnQiLCJfb3B0aW9ucyRzdHJhdGVneSIsIl9vcHRpb25zJGJvdW5kYXJ5IiwiYm91bmRhcnkiLCJfb3B0aW9ucyRyb290Qm91bmRhcnkiLCJyb290Qm91bmRhcnkiLCJfb3B0aW9ucyRlbGVtZW50Q29udGUiLCJlbGVtZW50Q29udGV4dCIsIl9vcHRpb25zJGFsdEJvdW5kYXJ5IiwiYWx0Qm91bmRhcnkiLCJfb3B0aW9ucyRwYWRkaW5nIiwiYWx0Q29udGV4dCIsImNsaXBwaW5nQ2xpZW50UmVjdCIsIm1haW5DbGlwcGluZ1BhcmVudHMiLCJjbGlwcGluZ1BhcmVudHMiLCJjbGlwcGVyRWxlbWVudCIsImdldENsaXBwaW5nUGFyZW50cyIsImZpcnN0Q2xpcHBpbmdQYXJlbnQiLCJjbGlwcGluZ1JlY3QiLCJhY2NSZWN0IiwiZ2V0Q2xpcHBpbmdSZWN0IiwicmVmZXJlbmNlQ2xpZW50UmVjdCIsInBvcHBlckNsaWVudFJlY3QiLCJlbGVtZW50Q2xpZW50UmVjdCIsIm92ZXJmbG93T2Zmc2V0cyIsIm9mZnNldERhdGEiLCJtdWx0aXBseSIsImF4aXMiLCJfc2tpcCIsIl9vcHRpb25zJG1haW5BeGlzIiwiY2hlY2tNYWluQXhpcyIsIl9vcHRpb25zJGFsdEF4aXMiLCJhbHRBeGlzIiwiY2hlY2tBbHRBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwiX29wdGlvbnMkZmxpcFZhcmlhdGlvIiwiZmxpcFZhcmlhdGlvbnMiLCJhbGxvd2VkQXV0b1BsYWNlbWVudHMiLCJwcmVmZXJyZWRQbGFjZW1lbnQiLCJvcHBvc2l0ZVBsYWNlbWVudCIsImdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzIiwicGxhY2VtZW50cyIsIl9vcHRpb25zJGFsbG93ZWRBdXRvUCIsImFsbG93ZWRQbGFjZW1lbnRzIiwib3ZlcmZsb3dzIiwiY29tcHV0ZUF1dG9QbGFjZW1lbnQiLCJyZWZlcmVuY2VSZWN0IiwiY2hlY2tzTWFwIiwibWFrZUZhbGxiYWNrQ2hlY2tzIiwiZmlyc3RGaXR0aW5nUGxhY2VtZW50IiwiX2Jhc2VQbGFjZW1lbnQiLCJpc1N0YXJ0VmFyaWF0aW9uIiwiaXNWZXJ0aWNhbCIsIm1haW5WYXJpYXRpb25TaWRlIiwiYWx0VmFyaWF0aW9uU2lkZSIsImNoZWNrcyIsImNoZWNrIiwiX2xvb3AiLCJmaXR0aW5nUGxhY2VtZW50Iiwid2l0aGluIiwiX29wdGlvbnMkdGV0aGVyIiwidGV0aGVyIiwiX29wdGlvbnMkdGV0aGVyT2Zmc2V0IiwidGV0aGVyT2Zmc2V0IiwiaXNCYXNlUGxhY2VtZW50IiwidGV0aGVyT2Zmc2V0VmFsdWUiLCJub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUiLCJvZmZzZXRNb2RpZmllclN0YXRlIiwiX29mZnNldE1vZGlmaWVyU3RhdGUkIiwibWFpblNpZGUiLCJhbHRTaWRlIiwiYWRkaXRpdmUiLCJtaW5MZW4iLCJtYXhMZW4iLCJhcnJvd0VsZW1lbnQiLCJhcnJvd1JlY3QiLCJhcnJvd1BhZGRpbmdPYmplY3QiLCJhcnJvd1BhZGRpbmdNaW4iLCJhcnJvd1BhZGRpbmdNYXgiLCJhcnJvd0xlbiIsIm1pbk9mZnNldCIsIm1heE9mZnNldCIsImFycm93T2Zmc2V0UGFyZW50IiwiY2xpZW50T2Zmc2V0Iiwib2Zmc2V0TW9kaWZpZXJWYWx1ZSIsInRldGhlck1heCIsInByZXZlbnRlZE9mZnNldCIsIl9vZmZzZXRNb2RpZmllclN0YXRlJDIiLCJfbWFpblNpZGUiLCJfYWx0U2lkZSIsIl9vZmZzZXQiLCJfbWluIiwiX21heCIsImlzT3JpZ2luU2lkZSIsIl9vZmZzZXRNb2RpZmllclZhbHVlIiwiX3RldGhlck1pbiIsIl90ZXRoZXJNYXgiLCJfcHJldmVudGVkT2Zmc2V0Iiwid2l0aGluTWF4Q2xhbXAiLCJnZXRTaWRlT2Zmc2V0cyIsInByZXZlbnRlZE9mZnNldHMiLCJpc0FueVNpZGVGdWxseUNsaXBwZWQiLCJzaWRlIiwiX29wdGlvbnMkc2Nyb2xsIiwiX29wdGlvbnMkcmVzaXplIiwiX29wdGlvbnMkZ3B1QWNjZWxlcmF0IiwiX29wdGlvbnMkYWRhcHRpdmUiLCJfb3B0aW9ucyRyb3VuZE9mZnNldHMiLCJfc3RhdGUkbW9kaWZpZXJzRGF0YSQiLCJ0b1BhZGRpbmdPYmplY3QiLCJtaW5Qcm9wIiwibWF4UHJvcCIsImVuZERpZmYiLCJzdGFydERpZmYiLCJjbGllbnRTaXplIiwiY2VudGVyVG9SZWZlcmVuY2UiLCJheGlzUHJvcCIsImNlbnRlck9mZnNldCIsIl9vcHRpb25zJGVsZW1lbnQiLCJwcmV2ZW50T3ZlcmZsb3ciLCJyZWZlcmVuY2VPdmVyZmxvdyIsInBvcHBlckFsdE92ZXJmbG93IiwicmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzIiwicG9wcGVyRXNjYXBlT2Zmc2V0cyIsImlzUmVmZXJlbmNlSGlkZGVuIiwiaGFzUG9wcGVyRXNjYXBlZCIsImdldFBvcHBlclVuc3R5bGVkVXRpbGl0eUNsYXNzIiwiZGVmYXVsdFBvcHBlck9wdGlvbnMiLCJQb3BwZXJUb29sdGlwIiwiaW5pdGlhbFBsYWNlbWVudCIsInBvcHBlck9wdGlvbnMiLCJwb3BwZXJSZWYiLCJwb3BwZXJSZWZQcm9wIiwidG9vbHRpcFJlZiIsIm93blJlZiIsImhhbmRsZVBvcHBlclJlZiIsImhhbmRsZVBvcHBlclJlZlJlZiIsInJ0bFBsYWNlbWVudCIsImZsaXBQbGFjZW1lbnQiLCJzZXRQbGFjZW1lbnQiLCJwb3BwZXJNb2RpZmllcnMiLCJQb3BwZXJVbnN0eWxlZCIsIlBvcHBlclJvb3QiLCJQb3BwZXIiLCJnZXRUb29sdGlwVXRpbGl0eUNsYXNzIiwiVG9vbHRpcFBvcHBlciIsImRpc2FibGVJbnRlcmFjdGl2ZSIsInBvcHBlckludGVyYWN0aXZlIiwicG9wcGVyQXJyb3ciLCJwb3BwZXJDbG9zZSIsIlRvb2x0aXBUb29sdGlwIiwidG91Y2giLCJ0b29sdGlwQXJyb3ciLCJUb29sdGlwIiwid29yZFdyYXAiLCJUb29sdGlwQXJyb3ciLCJoeXN0ZXJzaXNPcGVuIiwiaHlzdGVyc2lzVGltZXIiLCJjb21wb3NlRXZlbnRIYW5kbGVyIiwiZXZlbnRIYW5kbGVyIiwiX2NvbXBvbmVudHMkUG9wcGVyIiwiX2NvbXBvbmVudHMkVHJhbnNpdGlvIiwiX2NvbXBvbmVudHMkVG9vbHRpcCIsIl9jb21wb25lbnRzJEFycm93IiwiX2NvbXBvbmVudHNQcm9wcyRwb3BwIiwiZGVzY3JpYmVDaGlsZCIsImRpc2FibGVGb2N1c0xpc3RlbmVyIiwiZGlzYWJsZUhvdmVyTGlzdGVuZXIiLCJkaXNhYmxlSW50ZXJhY3RpdmVQcm9wIiwiZGlzYWJsZVRvdWNoTGlzdGVuZXIiLCJlbnRlckRlbGF5IiwiZW50ZXJOZXh0RGVsYXkiLCJlbnRlclRvdWNoRGVsYXkiLCJmb2xsb3dDdXJzb3IiLCJpZFByb3AiLCJsZWF2ZURlbGF5IiwibGVhdmVUb3VjaERlbGF5IiwiUG9wcGVyQ29tcG9uZW50IiwiUG9wcGVyQ29tcG9uZW50UHJvcCIsIlBvcHBlclByb3BzIiwidGl0bGUiLCJUcmFuc2l0aW9uQ29tcG9uZW50UHJvcCIsImNoaWxkTm9kZSIsInNldENoaWxkTm9kZSIsImFycm93UmVmIiwic2V0QXJyb3dSZWYiLCJpZ25vcmVOb25Ub3VjaEV2ZW50cyIsImNsb3NlVGltZXIiLCJlbnRlclRpbWVyIiwibGVhdmVUaW1lciIsInRvdWNoVGltZXIiLCJwcmV2VXNlclNlbGVjdCIsInN0b3BUb3VjaEludGVyYWN0aW9uIiwiV2Via2l0VXNlclNlbGVjdCIsImhhbmRsZUxlYXZlIiwic2V0Q2hpbGRJc0ZvY3VzVmlzaWJsZSIsImRldGVjdFRvdWNoU3RhcnQiLCJjaGlsZHJlblByb3BzIiwiaGFuZGxlTW91c2VPdmVyIiwiaGFuZGxlVXNlUmVmIiwiaGFuZGxlRm9jdXNSZWYiLCJwb3NpdGlvblJlZiIsIm5hbWVPckRlc2NQcm9wcyIsInRpdGxlSXNTdHJpbmciLCJvbk1vdXNlTW92ZSIsImludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycyIsIm9uTW91c2VPdmVyIiwiX1BvcHBlclByb3BzJHBvcHBlck9wIiwidG9vbHRpcE1vZGlmaWVycyIsIlRvb2x0aXBDb21wb25lbnQiLCJBcnJvd0NvbXBvbmVudCIsIkFycm93IiwicG9wcGVyUHJvcHMiLCJ0b29sdGlwUHJvcHMiLCJ0b29sdGlwQXJyb3dQcm9wcyIsIlRyYW5zaXRpb25Qcm9wc0lubmVyIiwiX2NvbXBvbmVudHNQcm9wcyR0b29sIiwiX2NvbXBvbmVudHNQcm9wcyRhcnJvIiwiQXBwQnV0dG9uIiwidGVzdElkIiwic2V0SWNvbiIsIkNsaXBib2FyZEJ1dHRvbiIsIkNvbnRlbnRDb3B5IiwiRG9uZUFsbCIsIkNsaXBib2FyZCIsInVzZU5hdmlnYXRlIiwidXNlUGFyYW1zIiwiaXNMb2dnZWRJbiIsImJ1dHRvblRleHQiLCJ1c2VySW5mbyIsInByb2plY3ROYW1lIiwibXQiLCJEZWxldGVGb3JldmVyIiwiZ2V0TGlua1V0aWxpdHlDbGFzcyIsInRyYW5zZm9ybWVkQ29sb3IiLCJjaGFubmVsQ29sb3IiLCJMaW5rUm9vdCIsInRleHREZWNvcmF0aW9uQ29sb3IiLCJUeXBvZ3JhcGh5Q2xhc3NlcyIsImhhbmRsZXJSZWYiLCJGb290ZXIiLCJweSIsImdldEZ1bGxZZWFyIiwiYXBpIiwiaW5pdCIsImNvbnZlcnRlciIsImRlZmF1bHRBdHRyaWJ1dGVzIiwidG9VVENTdHJpbmciLCJzdHJpbmdpZmllZEF0dHJpYnV0ZXMiLCJqYXIiLCJmb3VuZEtleSIsIndpdGhBdHRyaWJ1dGVzIiwid2l0aENvbnZlcnRlciIsImdldEFwcEJhclV0aWxpdHlDbGFzcyIsImpvaW5WYXJzIiwidmFyMSIsInZhcjIiLCJBcHBCYXJSb290IiwiYmFja2dyb3VuZENvbG9yRGVmYXVsdCIsImVuYWJsZUNvbG9yT25EYXJrIiwiQXBwQmFyIiwiZGVmYXVsdEJnIiwiZGFya0JnIiwiZGFya0NvbG9yIiwiZ2V0VG9vbGJhclV0aWxpdHlDbGFzcyIsIlRvb2xiYXJSb290IiwiZGlzYWJsZUd1dHRlcnMiLCJndXR0ZXJzIiwiZ2V0RGlhbG9nVXRpbGl0eUNsYXNzIiwiRGlhbG9nQmFja2Ryb3AiLCJvdmVycmlkZXMiLCJEaWFsb2dSb290IiwiRGlhbG9nQ29udGFpbmVyIiwiRGlhbG9nUGFwZXIiLCJwYXBlckZ1bGxXaWR0aCIsImZ1bGxTY3JlZW4iLCJwYXBlckZ1bGxTY3JlZW4iLCJEaWFsb2ciLCJkZWZhdWx0VHJhbnNpdGlvbkR1cmF0aW9uIiwiYXJpYUxhYmVsbGVkYnlQcm9wIiwiUGFwZXJDb21wb25lbnQiLCJiYWNrZHJvcENsaWNrIiwiYXJpYUxhYmVsbGVkYnkiLCJkaWFsb2dDb250ZXh0VmFsdWUiLCJ0aXRsZUlkIiwiZ2V0RGlhbG9nVGl0bGVVdGlsaXR5Q2xhc3MiLCJEaWFsb2dUaXRsZVJvb3QiLCJMb2dpbiIsImFsdCIsIkdpdEh1YiIsIk5hdmJhciIsImhhbmRsZUxvZ291dCIsIkNvb2tpZXMiLCJMb2dvdXQiLCJuYXZQYW5lbFNsaWNlIiwic2hvd1Byb2plY3RQYW5lbCIsInNob3dBZGRQcm9qZWN0Iiwic2V0U2hvd1Byb2plY3RQYW5lbCIsInNldFNob3dBZGRQcm9qZWN0IiwiTmF2UGFuZWxEaXNwbGF5IiwiSG9tZSIsInNjYWxlIiwiQ29sbGVjdGlvbnNCb29rbWFyayIsIkFydGljbGUiLCJBZGRQcm9qZWN0RGlhbG9nIiwic2V0UHJvamVjdE5hbWUiLCJuYXZQYW5lbCIsImhhbmRsZUFkZFByb2plY3QiLCJoYW5kbGVMb2dpbk9wZW4iLCJhbGlnblNlbGYiLCJOYXZQcm9qZWN0TWVudSIsImhhbmRsZURlbGV0ZUNsaWNrIiwiSW50ZWdyYXRpb25JbnN0cnVjdGlvbnMiLCJQcm9qZWN0IiwiaGFuZGxlQ2xpY2siLCJDcmVkaXRDYXJkIiwiUHJvamVjdFBhbmVsQ29udGFpbmVyIiwiQWRkQ2FyZCIsIk5hdlBhbmVsQ29udGFpbmVyIiwiQXV0aCIsInNldFVzZXJuYW1lIiwidXBkYXRlVGltZXIiLCJjb29raWVfY29kZSIsImNvb2tpZV91c2VybmFtZSIsImNvb2tpZV9lbWFpbCIsImNvdW50ZXIiLCJnZXRNZW51SXRlbVV0aWxpdHlDbGFzcyIsIk1lbnVJdGVtUm9vdCIsImJhY2tncm91bmRDbGlwIiwibWVudUl0ZW1SZWYiLCJjb2RlU2xpY2UiLCJjb3B5VGV4dCIsInNldENvZGVPdXRwdXQiLCJ0ZXN0Rm9ybVNsaWNlIiwicmVxdWVzdFR5cGUiLCJhc3NlcnRpb25MaXN0IiwidXNlcklucHV0IiwiYXNzZXJ0aW9uVHlwZXMiLCJzZXRSZXF1ZXN0VHlwZSIsImFkZEFzc2VydGlvbiIsInNldElucHV0VHlwZSIsImRlbGV0ZUFzc2VydGlvbiIsInVzZXJJbnB1dFNsaWNlIiwiZXJyb3JNc2dzIiwidXNlcklucHV0VHlwZSIsInVzZXJJbnB1dFRleHQiLCJzZXRFcnJvck1zZyIsImNoYW5nZUVycm9yTXNnIiwicHJvcHNJZCIsIm5ld01zZyIsInNldFVzZXJJbnB1dFR5cGUiLCJzZXRVc2VySW5wdXRUZXh0IiwiQXNzZXJ0aW9ucyIsImN1cnJWYWx1ZSIsInRlc3RGb3JtIiwiYXNzZXJ0aW9ucyIsInN0YXR1c0NvdW50IiwiY29udGVudENvdW50IiwidmVyaWZ5TnVtSW5wdXRzIiwiUHJvamVjdERyb3Bkb3duIiwibWVudUl0ZW1zIiwiUmVxdWVzdEJvZHkiLCJzaG93RmllbGQiLCJUZXN0SW5wdXRGb3JtIiwiYXNzZXJ0aW9uT2JqZWN0IiwiaGFuZGxlU3VibWl0IiwiYWxlcnQiLCJmb3JtVmFsdWVzIiwiZnJvbUVudHJpZXMiLCJlbmRwb2ludCIsInJlcV9ib2R5IiwiY29udGVudEFzc2VydGlvbiIsInN0YXR1c0Fzc2VydGlvbiIsInJlc19ib2R5IiwicmVxdWVzdEJvZHkiLCJoZWFkZXIiLCJvcHRpb24iLCJvblN1Ym1pdCIsImp1c3RpZnlTZWxmIiwiQ29kZVRleHQiLCJCdXR0b25Db250YWluZXIiLCJBZGRCb3giLCJDb2RlQ29udGFpbmVyIiwiam9pbkNoaWxkcmVuIiwic2VwYXJhdG9yIiwiU3RhY2tSb290IiwiZGlyZWN0aW9uVmFsdWVzIiwic3BhY2luZ1ZhbHVlcyIsInByZXZpb3VzRGlyZWN0aW9uVmFsdWUiLCJyb3ciLCJTdGFjayIsIlNhdmVEYXRhQ29udGFpbmVyIiwic2VsZWN0ZWRQcm9qZWN0IiwiZGlzYWJsZURyb3Bkb3duIiwiaGFuZGxlU2F2ZSIsInNuaXBwZXRzIiwic3RvcmVkU25pcHBldHMiLCJEZWxldGUiLCJTYXZlIiwiQ29kZUdlbmVyYXRvciIsImdldENhcmRVdGlsaXR5Q2xhc3MiLCJDYXJkUm9vdCIsInJhaXNlZCIsImdldENhcmRBY3Rpb25zVXRpbGl0eUNsYXNzIiwiQ2FyZEFjdGlvbnNSb290IiwiZGlzYWJsZVNwYWNpbmciLCJnZXRDYXJkQ29udGVudFV0aWxpdHlDbGFzcyIsIkNhcmRDb250ZW50Um9vdCIsImdldENhcmRNZWRpYVV0aWxpdHlDbGFzcyIsIkNhcmRNZWRpYVJvb3QiLCJpc01lZGlhQ29tcG9uZW50IiwiaXNJbWFnZUNvbXBvbmVudCIsIm1lZGlhIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZFBvc2l0aW9uIiwib2JqZWN0Rml0IiwiTUVESUFfQ09NUE9ORU5UUyIsIklNQUdFX0NPTVBPTkVOVFMiLCJDYXJkTWVkaWEiLCJpbWFnZSIsImNvbXBvc2VkU3R5bGUiLCJDb250cmlidXRvckNhcmQiLCJpbWFnZVVybCIsImxpbmtlZEluTGluayIsImdpdGh1YkxpbmsiLCJDb250cmlidXRvcnMiLCJ1c2VycyIsImRldk9iaiIsIkRvY3VtZW50YXRpb24iLCJyZXMiLCJOb3RGb3VuZCIsImdyaWRUZW1wbGF0ZUNvbHVtbnMiLCJyb290UmVkdWNlciIsImN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSIsIm1pZGRsZXdhcmVBcnJheSIsImltbXV0YWJsZUNoZWNrIiwic2VyaWFsaXphYmxlQ2hlY2siLCJpc0Jvb2xlYW4iLCJnZXREZWZhdWx0TWlkZGxld2FyZSIsImRldlRvb2xzIiwiX2ciLCJfaCIsImVuaGFuY2VycyIsImJhc2VQcm90byIsInJlZHVjZXJLZXlzIiwiZmluYWxSZWR1Y2VycyIsInNoYXBlQXNzZXJ0aW9uRXJyb3IiLCJmaW5hbFJlZHVjZXJLZXlzIiwiYXNzZXJ0UmVkdWNlclNoYXBlIiwiaGFzQ2hhbmdlZCIsInByZXZpb3VzU3RhdGVGb3JLZXkiLCJuZXh0U3RhdGVGb3JLZXkiLCJjb21iaW5lUmVkdWNlcnMiLCJmaW5hbE1pZGRsZXdhcmUiLCJtaWRkbGV3YXJlRW5oYW5jZXIiLCJmaW5hbENvbXBvc2UiLCJ0cmFjZSIsInN0b3JlRW5oYW5jZXJzIiwiY29uZmlndXJlU3RvcmUiLCJ0ZXN0Rm9ybVJlZHVjZXIiLCJ1c2VySW5wdXRSZWR1Y2VyIiwiY29kZVNsaWNlUmVkdWNlciIsImNsaXBib2FyZFJlZHVjZXIiLCJ1c2VySW5mb1JlZHVjZXIiLCJuYXZQYW5lbFJlZHVjZXIiLCJSZWFjdERPTSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/dist/dist/bundle.js.LICENSE.txt b/dist/dist/bundle.js.LICENSE.txt index 9d50598..3787ca5 100644 --- a/dist/dist/bundle.js.LICENSE.txt +++ b/dist/dist/bundle.js.LICENSE.txt @@ -1,5 +1,7 @@ /*! js-cookie v3.0.1 | MIT */ +/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ + /** * @license React * react-dom.production.min.js diff --git a/package-lock.json b/package-lock.json index fbdb4f7..aaef9ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1958,15 +1958,12 @@ } } }, -<<<<<<< HEAD "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==", "peer": true }, -======= ->>>>>>> dev "node_modules/@emotion/unitless": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", @@ -3072,7 +3069,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -3081,7 +3077,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -3091,7 +3086,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -3110,7 +3104,6 @@ "version": "0.3.15", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -3808,7 +3801,6 @@ "version": "8.4.6", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", - "dev": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -3818,7 +3810,6 @@ "version": "3.7.4", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -3827,8 +3818,7 @@ "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "node_modules/@types/express": { "version": "4.17.14", @@ -3973,8 +3963,7 @@ "node_modules/@types/node": { "version": "18.7.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz", - "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==", - "dev": true + "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==" }, "node_modules/@types/oauth": { "version": "0.9.1", @@ -4399,7 +4388,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" @@ -4408,26 +4396,22 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -4437,14 +4421,12 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4456,7 +4438,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -4465,7 +4446,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -4473,14 +4453,12 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4496,7 +4474,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -4509,7 +4486,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4521,7 +4497,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -4535,7 +4510,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" @@ -4577,20 +4551,24 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, + "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==", + "dev": true + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -4638,7 +4616,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, "peerDependencies": { "acorn": "^8" } @@ -5078,7 +5055,6 @@ "@babel/core": "^7.0.0-0" } }, -<<<<<<< HEAD "node_modules/babel-plugin-styled-components": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", @@ -5101,8 +5077,6 @@ "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==", "peer": true }, -======= ->>>>>>> dev "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -5289,7 +5263,6 @@ "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -5355,8 +5328,7 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/buffer-writer": { "version": "2.0.0", @@ -5411,20 +5383,19 @@ "node": ">=6" } }, -<<<<<<< HEAD "node_modules/camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==", - "peer": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, -======= ->>>>>>> dev "node_modules/caniuse-lite": { "version": "1.0.30001406", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001406.tgz", "integrity": "sha512-bWTlaXUy/rq0BBtYShc/jArYfBPjEV95euvZ8JVtO43oQExEN/WquoqpufFjNu4kSpi5cy5kMbNvzztWDfv1Jg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -5492,7 +5463,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, "engines": { "node": ">=6.0" } @@ -5859,7 +5829,6 @@ "node": ">= 8" } }, -<<<<<<< HEAD "node_modules/css-color-keywords": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", @@ -5869,8 +5838,6 @@ "node": ">=4" } }, -======= ->>>>>>> dev "node_modules/css-loader": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", @@ -5925,7 +5892,6 @@ "url": "https://github.com/sponsors/fb55" } }, -<<<<<<< HEAD "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", @@ -5937,8 +5903,6 @@ "postcss-value-parser": "^4.0.2" } }, -======= ->>>>>>> dev "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -6344,8 +6308,7 @@ "node_modules/electron-to-chromium": { "version": "1.4.254", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.254.tgz", - "integrity": "sha512-Sh/7YsHqQYkA6ZHuHMy24e6TE4eX6KZVsZb9E/DvU1nQRIrH4BflO/4k+83tfdYvDl+MObvlqHPRICzEdC9c6Q==", - "dev": true + "integrity": "sha512-Sh/7YsHqQYkA6ZHuHMy24e6TE4eX6KZVsZb9E/DvU1nQRIrH4BflO/4k+83tfdYvDl+MObvlqHPRICzEdC9c6Q==" }, "node_modules/emittery": { "version": "0.10.2", @@ -6391,7 +6354,6 @@ "version": "5.10.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -6467,8 +6429,7 @@ "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "node_modules/es-shim-unscopables": { "version": "1.0.0", @@ -6498,7 +6459,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -6666,7 +6626,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -7010,7 +6969,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -7022,7 +6980,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -7031,7 +6988,6 @@ "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" } @@ -7061,7 +7017,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, "engines": { "node": ">=0.8.x" } @@ -7819,8 +7774,7 @@ "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "node_modules/global-modules": { "version": "0.2.3", @@ -7889,8 +7843,7 @@ "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "node_modules/grapheme-splitter": { "version": "1.0.4", @@ -8270,6 +8223,12 @@ "node": ">= 4" } }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, "node_modules/immer": { "version": "9.0.15", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", @@ -11200,7 +11159,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -11214,7 +11172,6 @@ "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" } @@ -11223,7 +11180,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -11366,8 +11322,7 @@ "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 + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -11474,7 +11429,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, "engines": { "node": ">=6.11.5" } @@ -11687,8 +11641,7 @@ "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 + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/merge2": { "version": "1.4.1", @@ -11854,8 +11807,7 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/no-case": { "version": "3.0.4", @@ -11901,8 +11853,68 @@ "node_modules/node-releases": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "node_modules/nodemon": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", + "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/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/nodemon/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/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } }, "node_modules/normalize-path": { "version": "3.0.0", @@ -12428,8 +12440,7 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -12699,6 +12710,12 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -12801,7 +12818,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -13296,8 +13312,7 @@ "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 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex-test": { "version": "1.0.0", @@ -13475,7 +13490,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, "dependencies": { "randombytes": "^2.1.0" } @@ -13580,15 +13594,12 @@ "node": ">=8" } }, -<<<<<<< HEAD "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==", "peer": true }, -======= ->>>>>>> dev "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -13626,6 +13637,27 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -13653,7 +13685,6 @@ "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" } @@ -13670,7 +13701,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -13914,7 +13944,6 @@ "webpack": "^5.0.0" } }, -<<<<<<< HEAD "node_modules/styled-components": { "version": "5.3.6", "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz", @@ -13952,8 +13981,6 @@ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", "peer": true }, -======= ->>>>>>> dev "node_modules/stylis": { "version": "4.0.13", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", @@ -14079,7 +14106,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -14129,7 +14155,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", - "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -14147,7 +14172,6 @@ "version": "5.3.6", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.14", "jest-worker": "^27.4.5", @@ -14181,7 +14205,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -14198,8 +14221,7 @@ "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/test-exclude": { "version": "6.0.0", @@ -14261,6 +14283,18 @@ "node": ">=0.6" } }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, "node_modules/tough-cookie": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", @@ -14512,7 +14546,6 @@ "version": "4.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14549,6 +14582,12 @@ "through": "^2.3.8" } }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -14605,7 +14644,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz", "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -14761,7 +14799,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -14787,7 +14824,6 @@ "version": "5.74.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", - "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -15082,7 +15118,6 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, "engines": { "node": ">=10.13.0" } @@ -15091,7 +15126,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -16664,15 +16698,12 @@ "@emotion/utils": "^1.2.0" } }, -<<<<<<< HEAD "@emotion/stylis": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", "peer": true }, -======= ->>>>>>> dev "@emotion/unitless": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", @@ -16682,11 +16713,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "@emotion/utils": { "version": "1.2.0", @@ -17497,14 +17524,12 @@ "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/source-map": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -17514,7 +17539,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -17532,7 +17556,6 @@ "version": "0.3.15", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -17639,11 +17662,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz", "integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "@mui/utils": { "version": "5.10.6", @@ -17875,11 +17894,7 @@ "version": "14.4.3", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.4.3.tgz", "integrity": "sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "@tootallnate/once": { "version": "2.0.0", @@ -17995,7 +18010,6 @@ "version": "8.4.6", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", - "dev": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" @@ -18005,7 +18019,6 @@ "version": "3.7.4", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, "requires": { "@types/eslint": "*", "@types/estree": "*" @@ -18014,8 +18027,7 @@ "@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "@types/express": { "version": "4.17.14", @@ -18153,8 +18165,7 @@ "@types/node": { "version": "18.7.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz", - "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==", - "dev": true + "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==" }, "@types/oauth": { "version": "0.9.1", @@ -18482,7 +18493,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, "requires": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" @@ -18491,26 +18501,22 @@ "@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -18520,14 +18526,12 @@ "@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -18539,7 +18543,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } @@ -18548,7 +18551,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, "requires": { "@xtuc/long": "4.2.2" } @@ -18556,14 +18558,12 @@ "@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -18579,7 +18579,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -18592,7 +18591,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -18604,7 +18602,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -18618,7 +18615,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" @@ -18628,11 +18624,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "@webpack-cli/info": { "version": "1.5.0", @@ -18646,29 +18638,29 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -18703,17 +18695,13 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "acorn-walk": { "version": "7.2.0", @@ -18768,7 +18756,8 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "ansi-escapes": { "version": "4.3.2", @@ -19026,7 +19015,6 @@ "@babel/helper-define-polyfill-provider": "^0.3.3" } }, -<<<<<<< HEAD "babel-plugin-styled-components": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", @@ -19046,8 +19034,6 @@ "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==", "peer": true }, -======= ->>>>>>> dev "babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -19199,7 +19185,6 @@ "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, "requires": { "caniuse-lite": "^1.0.30001400", "electron-to-chromium": "^1.4.251", @@ -19232,8 +19217,7 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "buffer-writer": { "version": "2.0.0", @@ -19273,20 +19257,16 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, -<<<<<<< HEAD "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", "peer": true }, -======= ->>>>>>> dev "caniuse-lite": { "version": "1.0.30001406", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001406.tgz", - "integrity": "sha512-bWTlaXUy/rq0BBtYShc/jArYfBPjEV95euvZ8JVtO43oQExEN/WquoqpufFjNu4kSpi5cy5kMbNvzztWDfv1Jg==", - "dev": true + "integrity": "sha512-bWTlaXUy/rq0BBtYShc/jArYfBPjEV95euvZ8JVtO43oQExEN/WquoqpufFjNu4kSpi5cy5kMbNvzztWDfv1Jg==" }, "chalk": { "version": "2.4.2", @@ -19326,8 +19306,7 @@ "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, "ci-info": { "version": "3.4.0", @@ -19610,15 +19589,12 @@ "which": "^2.0.1" } }, -<<<<<<< HEAD "css-color-keywords": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", "peer": true }, -======= ->>>>>>> dev "css-loader": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", @@ -19656,7 +19632,6 @@ "nth-check": "^2.0.1" } }, -<<<<<<< HEAD "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", @@ -19668,8 +19643,6 @@ "postcss-value-parser": "^4.0.2" } }, -======= ->>>>>>> dev "css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -19973,8 +19946,7 @@ "electron-to-chromium": { "version": "1.4.254", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.254.tgz", - "integrity": "sha512-Sh/7YsHqQYkA6ZHuHMy24e6TE4eX6KZVsZb9E/DvU1nQRIrH4BflO/4k+83tfdYvDl+MObvlqHPRICzEdC9c6Q==", - "dev": true + "integrity": "sha512-Sh/7YsHqQYkA6ZHuHMy24e6TE4eX6KZVsZb9E/DvU1nQRIrH4BflO/4k+83tfdYvDl+MObvlqHPRICzEdC9c6Q==" }, "emittery": { "version": "0.10.2", @@ -20008,7 +19980,6 @@ "version": "5.10.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "dev": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -20066,8 +20037,7 @@ "es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "es-shim-unscopables": { "version": "1.0.0", @@ -20090,8 +20060,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -20384,7 +20353,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -20444,7 +20412,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "requires": { "estraverse": "^5.2.0" }, @@ -20452,16 +20419,14 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" } } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { "version": "2.0.3", @@ -20481,8 +20446,7 @@ "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "execa": { "version": "5.1.1", @@ -21030,8 +20994,7 @@ "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "global-modules": { "version": "0.2.3", @@ -21084,8 +21047,7 @@ "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "grapheme-splitter": { "version": "1.0.4", @@ -21344,11 +21306,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "ieee754": { "version": "1.2.1", @@ -21360,6 +21318,12 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, "immer": { "version": "9.0.15", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", @@ -22839,11 +22803,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==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "jest-puppeteer": { "version": "6.1.1", @@ -23482,7 +23442,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -23492,14 +23451,12 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -23608,8 +23565,7 @@ "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 + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema-traverse": { "version": "0.4.1", @@ -23685,8 +23641,7 @@ "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" }, "loader-utils": { "version": "2.0.2", @@ -23855,8 +23810,7 @@ "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 + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { "version": "1.4.1", @@ -23976,8 +23930,7 @@ "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "no-case": { "version": "3.0.4", @@ -24009,8 +23962,50 @@ "node-releases": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "nodemon": { + "version": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", + "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "requires": { + "abbrev": "1" + } }, "normalize-path": { "version": "3.0.0", @@ -24359,11 +24354,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "pg-protocol": { "version": "1.5.0", @@ -24393,8 +24384,7 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { "version": "2.3.1", @@ -24428,11 +24418,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -24588,6 +24574,12 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -24625,11 +24617,7 @@ "version": "8.7.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev } } }, @@ -24655,7 +24643,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -24813,11 +24800,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "regenerate": { "version": "1.4.2", @@ -25004,8 +24987,7 @@ "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 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex-test": { "version": "1.0.0", @@ -25131,7 +25113,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, "requires": { "randombytes": "^2.1.0" } @@ -25220,15 +25201,12 @@ "kind-of": "^6.0.2" } }, -<<<<<<< HEAD "shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", "peer": true }, -======= ->>>>>>> dev "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -25257,6 +25235,23 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -25280,8 +25275,7 @@ "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 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-js": { "version": "1.0.2", @@ -25292,7 +25286,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -25467,7 +25460,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", -<<<<<<< HEAD "requires": {} }, "styled-components": { @@ -25495,9 +25487,6 @@ "peer": true } } -======= - "dev": true ->>>>>>> dev }, "stylis": { "version": "4.0.13", @@ -25591,8 +25580,7 @@ "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, "tar-fs": { "version": "2.1.1", @@ -25630,7 +25618,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", - "dev": true, "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -25641,8 +25628,7 @@ "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" } } }, @@ -25650,7 +25636,6 @@ "version": "5.3.6", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.14", "jest-worker": "^27.4.5", @@ -25663,7 +25648,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -25720,6 +25704,15 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, "tough-cookie": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", @@ -25887,8 +25880,7 @@ "typescript": { "version": "4.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", - "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", - "dev": true + "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==" }, "uid2": { "version": "0.0.4", @@ -25915,6 +25907,12 @@ "through": "^2.3.8" } }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -25953,7 +25951,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz", "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==", - "dev": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -25980,11 +25977,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "util-deprecate": { "version": "1.0.2", @@ -26076,7 +26069,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -26099,7 +26091,6 @@ "version": "5.74.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", - "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -26131,7 +26122,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -26305,8 +26295,7 @@ "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" }, "websocket-driver": { "version": "0.7.4", @@ -26436,11 +26425,7 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", -<<<<<<< HEAD "requires": {} -======= - "dev": true ->>>>>>> dev }, "xml-name-validator": { "version": "4.0.0", From d0c4fbfc965d877853fe1531eb138b39bfb35ea8 Mon Sep 17 00:00:00 2001 From: BrianHao <BrianHao@users.noreply.github.com> Date: Wed, 12 Oct 2022 20:51:23 -0400 Subject: [PATCH 24/27] fixed bundle.js --- client/index.html | 2 +- server/server.ts | 7 ++++++- webpack.config.js | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/client/index.html b/client/index.html index 72f2da6..85dc6db 100644 --- a/client/index.html +++ b/client/index.html @@ -14,7 +14,7 @@ </head> <body> <div id="root"></div> - <script src="dist/bundle.js"></script> + <!-- <script src="dist/bundle.js"></script> --> <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script> </body> </html> diff --git a/server/server.ts b/server/server.ts index 4e9a771..36bffb6 100644 --- a/server/server.ts +++ b/server/server.ts @@ -33,13 +33,18 @@ app.use('/auth', authRoutes); app.use('/api/tests', testsRoutes); app.use('/api/project', projectRoutes); app.use('/api/clipboard', clipboardRoutes); -app.use('/dist', express.static(path.join(__dirname, '../dist'))); +// app.use('/dist', express.static(path.join(__dirname, '../dist'))); app.use('/assets', express.static(path.join(__dirname, '../client/assets'))); app.use( '/stylesheets', express.static(path.join(__dirname, '../client/stylesheets')) ); +// Serve bundle.js +app.get('/bundle.js', (req: Request, res: Response) => { + return res.status(200).sendFile(path.join(__dirname, '../dist/bundle.js')); +}); + // Serve base HTML file app.get('*', (req: Request, res: Response) => { return res.status(200).sendFile(path.join(__dirname, '../dist/index.html')); diff --git a/webpack.config.js b/webpack.config.js index ee4d687..3adfa0d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -6,7 +6,7 @@ module.exports = { entry: './client/index.tsx', devtool: 'inline-source-map', output: { - filename: 'dist/bundle.js', + filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), publicPath: '/' }, From cda6629585ef890b3c96d58459dbf9b8d1acf864 Mon Sep 17 00:00:00 2001 From: Michael Lam Cham Kee <mlamchamkee@gmail.com> Date: Thu, 8 Dec 2022 18:50:40 -0500 Subject: [PATCH 25/27] remove pupeteer dependencies --- package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/package.json b/package.json index 38c87e5..cae699e 100644 --- a/package.json +++ b/package.json @@ -78,8 +78,6 @@ "html-webpack-plugin": "^5.5.0", "jest": "^29.0.3", "jest-environment-jsdom": "^28.1.0", - "jest-puppeteer": "^6.1.0", - "puppeteer": "^14.2.1", "react-redux": "^8.0.4", "react-test-renderer": "^18.2.0", "redux-mock-store": "^1.5.4", From 719d12a677b4e74117eddfd1f61f2ed54cb20271 Mon Sep 17 00:00:00 2001 From: Michael Lam Cham Kee <mlamchamkee@gmail.com> Date: Thu, 8 Dec 2022 18:50:55 -0500 Subject: [PATCH 26/27] add Dockerfile --- Dockerfile | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4569d4f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM node:16-alpine +WORKDIR /usr/src/app +COPY package*.json ./ +RUN npm install +COPY . /usr/src/app/ +RUN npm run build +CMD [ "npm", "start" ] +EXPOSE 3000 \ No newline at end of file From 0a3238a98ccb52acca22d3e47532385b12a8fdf3 Mon Sep 17 00:00:00 2001 From: Michael Lam Cham Kee <mlamchamkee@gmail.com> Date: Thu, 8 Dec 2022 18:51:53 -0500 Subject: [PATCH 27/27] git ignore zip files --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index bce29e2..65f5a26 100644 --- a/.gitignore +++ b/.gitignore @@ -105,4 +105,6 @@ typings/ dist/bundle.js* dist/index.html -**/.DS_Store \ No newline at end of file +**/.DS_Store + +*.zip \ No newline at end of file